From 0204ca339510fc53ae41f2ca439c39dd48cafa45 Mon Sep 17 00:00:00 2001 From: cparish312 <54302513+cparish312@users.noreply.github.com> Date: Mon, 4 Nov 2024 16:19:23 -0500 Subject: [PATCH 1/3] change packaging to paths to com-connor to work --- README-sycl.md | 573 - build.zig | 172 - codecov.yml | 14 - convert-hf-to-gguf.py | 2908 - convert-llama-ggml-to-gguf.py | 441 - convert-lora-to-ggml.py | 148 - convert-persimmon-to-gguf.py | 138 - convert.py | 1555 - ggml-alloc.c | 985 - ggml-alloc.h | 76 - ggml-backend-impl.h | 141 - ggml-backend.c | 2101 - ggml-backend.h | 233 - ggml-common.h | 1853 - ggml-cuda.cu | 2756 - ggml-cuda.h | 43 - ggml-cuda/acc.cu | 47 - ggml-cuda/acc.cuh | 5 - ggml-cuda/alibi.cu | 63 - ggml-cuda/alibi.cuh | 5 - ggml-cuda/arange.cu | 34 - ggml-cuda/arange.cuh | 5 - ggml-cuda/argsort.cu | 103 - ggml-cuda/argsort.cuh | 3 - ggml-cuda/binbcast.cu | 280 - ggml-cuda/binbcast.cuh | 6 - ggml-cuda/clamp.cu | 35 - ggml-cuda/clamp.cuh | 5 - ggml-cuda/common.cuh | 551 - ggml-cuda/concat.cu | 49 - ggml-cuda/concat.cuh | 5 - ggml-cuda/convert.cu | 826 - ggml-cuda/convert.cuh | 13 - ggml-cuda/cpy.cu | 461 - ggml-cuda/cpy.cuh | 7 - ggml-cuda/dequantize.cuh | 103 - ggml-cuda/diagmask.cu | 40 - ggml-cuda/diagmask.cuh | 5 - ggml-cuda/dmmv.cu | 813 - ggml-cuda/dmmv.cuh | 18 - ggml-cuda/getrows.cu | 178 - ggml-cuda/getrows.cuh | 5 - ggml-cuda/im2col.cu | 104 - ggml-cuda/im2col.cuh | 5 - ggml-cuda/mmq.cu | 2265 - ggml-cuda/mmq.cuh | 9 - ggml-cuda/mmvq.cu | 406 - ggml-cuda/mmvq.cuh | 7 - ggml-cuda/norm.cu | 215 - ggml-cuda/norm.cuh | 7 - ggml-cuda/pad.cu | 49 - ggml-cuda/pad.cuh | 5 - ggml-cuda/pool2d.cu | 94 - ggml-cuda/pool2d.cuh | 5 - ggml-cuda/quantize.cu | 45 - ggml-cuda/quantize.cuh | 5 - ggml-cuda/rope.cu | 308 - ggml-cuda/rope.cuh | 5 - ggml-cuda/scale.cu | 32 - ggml-cuda/scale.cuh | 5 - ggml-cuda/softmax.cu | 201 - ggml-cuda/softmax.cuh | 5 - ggml-cuda/sumrows.cu | 40 - ggml-cuda/sumrows.cuh | 3 - ggml-cuda/tsembd.cu | 47 - ggml-cuda/tsembd.cuh | 5 - ggml-cuda/unary.cu | 240 - ggml-cuda/unary.cuh | 27 - ggml-cuda/upscale.cu | 48 - ggml-cuda/upscale.cuh | 5 - ggml-cuda/vecdotq.cuh | 1280 - ggml-impl.h | 523 - ggml-kompute.cpp | 2006 - ggml-kompute.h | 46 - ggml-metal.h | 66 - ggml-metal.m | 2999 - ggml-metal.metal | 6246 -- ggml-mpi.c | 216 - ggml-mpi.h | 39 - ggml-opencl.cpp | 2301 - ggml-opencl.h | 36 - ggml-quants.c | 12669 ---- ggml-quants.h | 133 - ggml-sycl.cpp | 17888 ------ ggml-sycl.h | 49 - ggml-vulkan-shaders.hpp | 69849 ---------------------- ggml-vulkan.cpp | 6442 -- ggml-vulkan.h | 29 - ggml.c | 21830 ------- ggml.h | 2407 - ggml_vk_generate_shaders.py | 2777 - kompute | 1 - kompute-shaders/common.comp | 102 - kompute-shaders/op_add.comp | 58 - kompute-shaders/op_addrow.comp | 25 - kompute-shaders/op_cpy_f16_f16.comp | 52 - kompute-shaders/op_cpy_f16_f32.comp | 52 - kompute-shaders/op_cpy_f32_f16.comp | 52 - kompute-shaders/op_cpy_f32_f32.comp | 52 - kompute-shaders/op_diagmask.comp | 30 - kompute-shaders/op_gelu.comp | 22 - kompute-shaders/op_getrows.comp | 17 - kompute-shaders/op_getrows_f16.comp | 31 - kompute-shaders/op_getrows_q4_0.comp | 38 - kompute-shaders/op_getrows_q4_1.comp | 39 - kompute-shaders/op_getrows_q6_k.comp | 44 - kompute-shaders/op_mul.comp | 52 - kompute-shaders/op_mul_mat_f16.comp | 67 - kompute-shaders/op_mul_mat_mat_f32.comp | 51 - kompute-shaders/op_mul_mat_q4_0.comp | 33 - kompute-shaders/op_mul_mat_q4_1.comp | 35 - kompute-shaders/op_mul_mat_q6_k.comp | 94 - kompute-shaders/op_mul_mat_q8_0.comp | 73 - kompute-shaders/op_mul_mv_q_n.comp | 48 - kompute-shaders/op_mul_mv_q_n_pre.comp | 22 - kompute-shaders/op_norm.comp | 84 - kompute-shaders/op_relu.comp | 21 - kompute-shaders/op_rmsnorm.comp | 53 - kompute-shaders/op_rope_f16.comp | 73 - kompute-shaders/op_rope_f32.comp | 73 - kompute-shaders/op_scale.comp | 19 - kompute-shaders/op_scale_8.comp | 23 - kompute-shaders/op_silu.comp | 22 - kompute-shaders/op_softmax.comp | 56 - kompute-shaders/rope_common.comp | 67 - llama.cpp | 17816 ------ llama.h | 1130 - sgemm.cpp | 995 - sgemm.h | 14 - unicode-data.cpp | 1651 - unicode-data.h | 16 - unicode.cpp | 277 - unicode.h | 28 - 133 files changed, 195333 deletions(-) delete mode 100644 README-sycl.md delete mode 100644 build.zig delete mode 100644 codecov.yml delete mode 100755 convert-hf-to-gguf.py delete mode 100755 convert-llama-ggml-to-gguf.py delete mode 100755 convert-lora-to-ggml.py delete mode 100755 convert-persimmon-to-gguf.py delete mode 100755 convert.py delete mode 100644 ggml-alloc.c delete mode 100644 ggml-alloc.h delete mode 100644 ggml-backend-impl.h delete mode 100644 ggml-backend.c delete mode 100644 ggml-backend.h delete mode 100644 ggml-common.h delete mode 100644 ggml-cuda.cu delete mode 100644 ggml-cuda.h delete mode 100644 ggml-cuda/acc.cu delete mode 100644 ggml-cuda/acc.cuh delete mode 100644 ggml-cuda/alibi.cu delete mode 100644 ggml-cuda/alibi.cuh delete mode 100644 ggml-cuda/arange.cu delete mode 100644 ggml-cuda/arange.cuh delete mode 100644 ggml-cuda/argsort.cu delete mode 100644 ggml-cuda/argsort.cuh delete mode 100644 ggml-cuda/binbcast.cu delete mode 100644 ggml-cuda/binbcast.cuh delete mode 100644 ggml-cuda/clamp.cu delete mode 100644 ggml-cuda/clamp.cuh delete mode 100644 ggml-cuda/common.cuh delete mode 100644 ggml-cuda/concat.cu delete mode 100644 ggml-cuda/concat.cuh delete mode 100644 ggml-cuda/convert.cu delete mode 100644 ggml-cuda/convert.cuh delete mode 100644 ggml-cuda/cpy.cu delete mode 100644 ggml-cuda/cpy.cuh delete mode 100644 ggml-cuda/dequantize.cuh delete mode 100644 ggml-cuda/diagmask.cu delete mode 100644 ggml-cuda/diagmask.cuh delete mode 100644 ggml-cuda/dmmv.cu delete mode 100644 ggml-cuda/dmmv.cuh delete mode 100644 ggml-cuda/getrows.cu delete mode 100644 ggml-cuda/getrows.cuh delete mode 100644 ggml-cuda/im2col.cu delete mode 100644 ggml-cuda/im2col.cuh delete mode 100644 ggml-cuda/mmq.cu delete mode 100644 ggml-cuda/mmq.cuh delete mode 100644 ggml-cuda/mmvq.cu delete mode 100644 ggml-cuda/mmvq.cuh delete mode 100644 ggml-cuda/norm.cu delete mode 100644 ggml-cuda/norm.cuh delete mode 100644 ggml-cuda/pad.cu delete mode 100644 ggml-cuda/pad.cuh delete mode 100644 ggml-cuda/pool2d.cu delete mode 100644 ggml-cuda/pool2d.cuh delete mode 100644 ggml-cuda/quantize.cu delete mode 100644 ggml-cuda/quantize.cuh delete mode 100644 ggml-cuda/rope.cu delete mode 100644 ggml-cuda/rope.cuh delete mode 100644 ggml-cuda/scale.cu delete mode 100644 ggml-cuda/scale.cuh delete mode 100644 ggml-cuda/softmax.cu delete mode 100644 ggml-cuda/softmax.cuh delete mode 100644 ggml-cuda/sumrows.cu delete mode 100644 ggml-cuda/sumrows.cuh delete mode 100644 ggml-cuda/tsembd.cu delete mode 100644 ggml-cuda/tsembd.cuh delete mode 100644 ggml-cuda/unary.cu delete mode 100644 ggml-cuda/unary.cuh delete mode 100644 ggml-cuda/upscale.cu delete mode 100644 ggml-cuda/upscale.cuh delete mode 100644 ggml-cuda/vecdotq.cuh delete mode 100644 ggml-impl.h delete mode 100644 ggml-kompute.cpp delete mode 100644 ggml-kompute.h delete mode 100644 ggml-metal.h delete mode 100644 ggml-metal.m delete mode 100644 ggml-metal.metal delete mode 100644 ggml-mpi.c delete mode 100644 ggml-mpi.h delete mode 100644 ggml-opencl.cpp delete mode 100644 ggml-opencl.h delete mode 100644 ggml-quants.c delete mode 100644 ggml-quants.h delete mode 100644 ggml-sycl.cpp delete mode 100644 ggml-sycl.h delete mode 100644 ggml-vulkan-shaders.hpp delete mode 100644 ggml-vulkan.cpp delete mode 100644 ggml-vulkan.h delete mode 100644 ggml.c delete mode 100644 ggml.h delete mode 100644 ggml_vk_generate_shaders.py delete mode 160000 kompute delete mode 100644 kompute-shaders/common.comp delete mode 100644 kompute-shaders/op_add.comp delete mode 100644 kompute-shaders/op_addrow.comp delete mode 100644 kompute-shaders/op_cpy_f16_f16.comp delete mode 100644 kompute-shaders/op_cpy_f16_f32.comp delete mode 100644 kompute-shaders/op_cpy_f32_f16.comp delete mode 100644 kompute-shaders/op_cpy_f32_f32.comp delete mode 100644 kompute-shaders/op_diagmask.comp delete mode 100644 kompute-shaders/op_gelu.comp delete mode 100644 kompute-shaders/op_getrows.comp delete mode 100644 kompute-shaders/op_getrows_f16.comp delete mode 100644 kompute-shaders/op_getrows_q4_0.comp delete mode 100644 kompute-shaders/op_getrows_q4_1.comp delete mode 100644 kompute-shaders/op_getrows_q6_k.comp delete mode 100644 kompute-shaders/op_mul.comp delete mode 100644 kompute-shaders/op_mul_mat_f16.comp delete mode 100644 kompute-shaders/op_mul_mat_mat_f32.comp delete mode 100644 kompute-shaders/op_mul_mat_q4_0.comp delete mode 100644 kompute-shaders/op_mul_mat_q4_1.comp delete mode 100644 kompute-shaders/op_mul_mat_q6_k.comp delete mode 100644 kompute-shaders/op_mul_mat_q8_0.comp delete mode 100644 kompute-shaders/op_mul_mv_q_n.comp delete mode 100644 kompute-shaders/op_mul_mv_q_n_pre.comp delete mode 100644 kompute-shaders/op_norm.comp delete mode 100644 kompute-shaders/op_relu.comp delete mode 100644 kompute-shaders/op_rmsnorm.comp delete mode 100644 kompute-shaders/op_rope_f16.comp delete mode 100644 kompute-shaders/op_rope_f32.comp delete mode 100644 kompute-shaders/op_scale.comp delete mode 100644 kompute-shaders/op_scale_8.comp delete mode 100644 kompute-shaders/op_silu.comp delete mode 100644 kompute-shaders/op_softmax.comp delete mode 100644 kompute-shaders/rope_common.comp delete mode 100644 llama.cpp delete mode 100644 llama.h delete mode 100644 sgemm.cpp delete mode 100644 sgemm.h delete mode 100644 unicode-data.cpp delete mode 100644 unicode-data.h delete mode 100644 unicode.cpp delete mode 100644 unicode.h diff --git a/README-sycl.md b/README-sycl.md deleted file mode 100644 index dc98c7b3ebd..00000000000 --- a/README-sycl.md +++ /dev/null @@ -1,573 +0,0 @@ -# llama.cpp for SYCL - -- [Background](#background) -- [News](#news) -- [OS](#os) -- [Hardware](#hardware) -- [Docker](#docker) -- [Linux](#linux) -- [Windows](#windows) -- [Environment Variable](#environment-variable) -- [Known Issue](#known-issues) -- [Q&A](#qa) -- [TODO](#todo) - -## Background - -**SYCL** is a high-level parallel programming model designed to improve developers productivity writing code across various hardware accelerators such as CPUs, GPUs, and FPGAs. It is a single-source language designed for heterogeneous computing and based on standard C++17. - -**oneAPI** is an open ecosystem and a standard-based specification, supporting multiple architectures including but not limited to intel CPUs, GPUs and FPGAs. The key components of the oneAPI ecosystem include: - -- **DPCPP** *(Data Parallel C++)*: The primary oneAPI SYCL implementation, which includes the icpx/icx Compilers. -- **oneAPI Libraries**: A set of highly optimized libraries targeting multiple domains *(e.g. oneMKL - Math Kernel Library)*. -- **oneAPI LevelZero**: A high performance low level interface for fine-grained control over intel iGPUs and dGPUs. -- **Nvidia & AMD Plugins**: These are plugins extending oneAPI's DPCPP support to SYCL on Nvidia and AMD GPU targets. - -### Llama.cpp + SYCL - -The llama.cpp SYCL backend is designed to support **Intel GPU** firstly. Based on the cross-platform feature of SYCL, it could support other vendor GPUs: Nvidia GPU (*AMD GPU coming*). - -When targeting **Intel CPU**, it is recommended to use llama.cpp for [Intel oneMKL](README.md#intel-onemkl) backend. - -It has the similar design of other llama.cpp BLAS-based paths such as *OpenBLAS, cuBLAS, CLBlast etc..*. In beginning work, the oneAPI's [SYCLomatic](https://github.com/oneapi-src/SYCLomatic) open-source migration tool (Commercial release [Intel® DPC++ Compatibility Tool](https://www.intel.com/content/www/us/en/developer/tools/oneapi/dpc-compatibility-tool.html)) was used for this purpose. - -## News - -- 2024.4 - - Support data types: GGML_TYPE_IQ4_NL, GGML_TYPE_IQ4_XS, GGML_TYPE_IQ3_XXS, GGML_TYPE_IQ3_S, GGML_TYPE_IQ2_XXS, GGML_TYPE_IQ2_XS, GGML_TYPE_IQ2_S, GGML_TYPE_IQ1_S, GGML_TYPE_IQ1_M. - -- 2024.3 - - Release binary files of Windows. - - A blog is published: **Run LLM on all Intel GPUs Using llama.cpp**: [intel.com](https://www.intel.com/content/www/us/en/developer/articles/technical/run-llm-on-all-gpus-using-llama-cpp-artical.html) or [medium.com](https://medium.com/@jianyu_neo/run-llm-on-all-intel-gpus-using-llama-cpp-fd2e2dcbd9bd). - - New base line is ready: [tag b2437](https://github.com/ggerganov/llama.cpp/tree/b2437). - - Support multiple cards: **--split-mode**: [none|layer]; not support [row], it's on developing. - - Support to assign main GPU by **--main-gpu**, replace $GGML_SYCL_DEVICE. - - Support detecting all GPUs with level-zero and same top **Max compute units**. - - Support OPs - - hardsigmoid - - hardswish - - pool2d - -- 2024.1 - - Create SYCL backend for Intel GPU. - - Support Windows build - -## OS - -| OS | Status | Verified | -|---------|---------|------------------------------------| -| Linux | Support | Ubuntu 22.04, Fedora Silverblue 39 | -| Windows | Support | Windows 11 | - - -## Hardware - -### Intel GPU - -**Verified devices** - -| Intel GPU | Status | Verified Model | -|-------------------------------|---------|---------------------------------------| -| Intel Data Center Max Series | Support | Max 1550, 1100 | -| Intel Data Center Flex Series | Support | Flex 170 | -| Intel Arc Series | Support | Arc 770, 730M | -| Intel built-in Arc GPU | Support | built-in Arc GPU in Meteor Lake | -| Intel iGPU | Support | iGPU in i5-1250P, i7-1260P, i7-1165G7 | - -*Notes:* - -- **Memory** - - The device memory is a limitation when running a large model. The loaded model size, *`llm_load_tensors: buffer_size`*, is displayed in the log when running `./bin/main`. - - - Please make sure the GPU shared memory from the host is large enough to account for the model's size. For e.g. the *llama-2-7b.Q4_0* requires at least 8.0GB for integrated GPU and 4.0GB for discrete GPU. - -- **Execution Unit (EU)** - - If the iGPU has less than 80 EUs, the inference speed will likely be too slow for practical use. - -### Other Vendor GPU - -**Verified devices** - -| Nvidia GPU | Status | Verified Model | -|--------------------------|---------|----------------| -| Ampere Series | Support | A100, A4000 | -| Ampere Series *(Mobile)* | Support | RTX 40 Series | - -## Docker -The docker build option is currently limited to *intel GPU* targets. - -### Build image -```sh -# Using FP16 -docker build -t llama-cpp-sycl --build-arg="LLAMA_SYCL_F16=ON" -f .devops/main-intel.Dockerfile . -``` - -*Notes*: - -To build in default FP32 *(Slower than FP16 alternative)*, you can remove the `--build-arg="LLAMA_SYCL_F16=ON"` argument from the previous command. - -You can also use the `.devops/server-intel.Dockerfile`, which builds the *"server"* alternative. - -### Run container - -```sh -# First, find all the DRI cards -ls -la /dev/dri -# Then, pick the card that you want to use (here for e.g. /dev/dri/card1). -docker run -it --rm -v "$(pwd):/app:Z" --device /dev/dri/renderD128:/dev/dri/renderD128 --device /dev/dri/card1:/dev/dri/card1 llama-cpp-sycl -m "/app/models/YOUR_MODEL_FILE" -p "Building a website can be done in 10 simple steps:" -n 400 -e -ngl 33 -``` - -*Notes:* -- Docker has been tested successfully on native Linux. WSL support has not been verified yet. -- You may need to install Intel GPU driver on the **host** machine *(Please refer to the [Linux configuration](#linux) for details)*. - -## Linux - -### I. Setup Environment - -1. **Install GPU drivers** - - - **Intel GPU** - -Intel data center GPUs drivers installation guide and download page can be found here: [Get intel dGPU Drivers](https://dgpu-docs.intel.com/driver/installation.html#ubuntu-install-steps). - -*Note*: for client GPUs *(iGPU & Arc A-Series)*, please refer to the [client iGPU driver installation](https://dgpu-docs.intel.com/driver/client/overview.html). - -Once installed, add the user(s) to the `video` and `render` groups. - -```sh -sudo usermod -aG render $USER -sudo usermod -aG video $USER -``` - -*Note*: logout/re-login for the changes to take effect. - -Verify installation through `clinfo`: - -```sh -sudo apt install clinfo -sudo clinfo -l -``` - -Sample output: - -```sh -Platform #0: Intel(R) OpenCL Graphics - `-- Device #0: Intel(R) Arc(TM) A770 Graphics - -Platform #0: Intel(R) OpenCL HD Graphics - `-- Device #0: Intel(R) Iris(R) Xe Graphics [0x9a49] -``` - -- **Nvidia GPU** - -In order to target Nvidia GPUs through SYCL, please make sure the CUDA/CUBLAS native requirements *-found [here](README.md#cuda)-* are installed. - -2. **Install Intel® oneAPI Base toolkit** - -- **For Intel GPU** - -The base toolkit can be obtained from the official [Intel® oneAPI Base Toolkit](https://www.intel.com/content/www/us/en/developer/tools/oneapi/base-toolkit.html) page. - -Please follow the instructions for downloading and installing the Toolkit for Linux, and preferably keep the default installation values unchanged, notably the installation path *(`/opt/intel/oneapi` by default)*. - -Following guidelines/code snippets assume the default installation values. Otherwise, please make sure the necessary changes are reflected where applicable. - -Upon a successful installation, SYCL is enabled for the available intel devices, along with relevant libraries such as oneAPI MKL for intel GPUs. - -- **Adding support to Nvidia GPUs** - -**oneAPI Plugin**: In order to enable SYCL support on Nvidia GPUs, please install the [Codeplay oneAPI Plugin for Nvidia GPUs](https://developer.codeplay.com/products/oneapi/nvidia/download). User should also make sure the plugin version matches the installed base toolkit one *(previous step)* for a seamless "oneAPI on Nvidia GPU" setup. - - -**oneMKL for cuBlas**: The current oneMKL releases *(shipped with the oneAPI base-toolkit)* do not contain the cuBLAS backend. A build from source of the upstream [oneMKL](https://github.com/oneapi-src/oneMKL) with the *cuBLAS* backend enabled is thus required to run it on Nvidia GPUs. - -```sh -git clone https://github.com/oneapi-src/oneMKL -cd oneMKL -mkdir -p buildWithCublas && cd buildWithCublas -cmake ../ -DCMAKE_CXX_COMPILER=icpx -DCMAKE_C_COMPILER=icx -DENABLE_MKLGPU_BACKEND=OFF -DENABLE_MKLCPU_BACKEND=OFF -DENABLE_CUBLAS_BACKEND=ON -DTARGET_DOMAINS=blas -make -``` - - -3. **Verify installation and environment** - -In order to check the available SYCL devices on the machine, please use the `sycl-ls` command. -```sh -source /opt/intel/oneapi/setvars.sh -sycl-ls -``` - -- **Intel GPU** - -When targeting an intel GPU, the user should expect one or more level-zero devices among the available SYCL devices. Please make sure that at least one GPU is present, for instance [`ext_oneapi_level_zero:gpu:0`] in the sample output below: - -``` -[opencl:acc:0] Intel(R) FPGA Emulation Platform for OpenCL(TM), Intel(R) FPGA Emulation Device OpenCL 1.2 [2023.16.10.0.17_160000] -[opencl:cpu:1] Intel(R) OpenCL, 13th Gen Intel(R) Core(TM) i7-13700K OpenCL 3.0 (Build 0) [2023.16.10.0.17_160000] -[opencl:gpu:2] Intel(R) OpenCL Graphics, Intel(R) Arc(TM) A770 Graphics OpenCL 3.0 NEO [23.30.26918.50] -[ext_oneapi_level_zero:gpu:0] Intel(R) Level-Zero, Intel(R) Arc(TM) A770 Graphics 1.3 [1.3.26918] -``` - -- **Nvidia GPU** - -Similarly, user targeting Nvidia GPUs should expect at least one SYCL-CUDA device [`ext_oneapi_cuda:gpu`] as bellow: -``` -[opencl:acc:0] Intel(R) FPGA Emulation Platform for OpenCL(TM), Intel(R) FPGA Emulation Device OpenCL 1.2 [2023.16.12.0.12_195853.xmain-hotfix] -[opencl:cpu:1] Intel(R) OpenCL, Intel(R) Xeon(R) Gold 6326 CPU @ 2.90GHz OpenCL 3.0 (Build 0) [2023.16.12.0.12_195853.xmain-hotfix] -[ext_oneapi_cuda:gpu:0] NVIDIA CUDA BACKEND, NVIDIA A100-PCIE-40GB 8.0 [CUDA 12.2] -``` - -### II. Build llama.cpp - -#### Intel GPU -```sh -# Export relevant ENV variables -source /opt/intel/oneapi/setvars.sh - -# Build LLAMA with MKL BLAS acceleration for intel GPU -mkdir -p build && cd build - -# Option 1: Use FP32 (recommended for better performance in most cases) -cmake .. -DLLAMA_SYCL=ON -DCMAKE_C_COMPILER=icx -DCMAKE_CXX_COMPILER=icpx - -# Option 2: Use FP16 -cmake .. -DLLAMA_SYCL=ON -DCMAKE_C_COMPILER=icx -DCMAKE_CXX_COMPILER=icpx -DLLAMA_SYCL_F16=ON - -#build all binary -cmake --build . --config Release -j -v -``` - -#### Nvidia GPU -```sh -# Export relevant ENV variables -export LD_LIBRARY_PATH=/path/to/oneMKL/buildWithCublas/lib:$LD_LIBRARY_PATH -export LIBRARY_PATH=/path/to/oneMKL/buildWithCublas/lib:$LIBRARY_PATH -export CPLUS_INCLUDE_DIR=/path/to/oneMKL/buildWithCublas/include:$CPLUS_INCLUDE_DIR -export CPLUS_INCLUDE_DIR=/path/to/oneMKL/include:$CPLUS_INCLUDE_DIR - -# Build LLAMA with Nvidia BLAS acceleration through SYCL -mkdir -p build && cd build - -# Option 1: Use FP32 (recommended for better performance in most cases) -cmake .. -DLLAMA_SYCL=ON -DLLAMA_SYCL_TARGET=NVIDIA -DCMAKE_C_COMPILER=icx -DCMAKE_CXX_COMPILER=icpx - -# Option 2: Use FP16 -cmake .. -DLLAMA_SYCL=ON -DLLAMA_SYCL_TARGET=NVIDIA -DCMAKE_C_COMPILER=icx -DCMAKE_CXX_COMPILER=icpx -DLLAMA_SYCL_F16=ON - -#build all binary -cmake --build . --config Release -j -v - -``` - -### III. Run the inference - -1. Retrieve and prepare model - -You can refer to the general [*Prepare and Quantize*](README.md#prepare-and-quantize) guide for model prepration, or simply download [llama-2-7b.Q4_0.gguf](https://huggingface.co/TheBloke/Llama-2-7B-GGUF/blob/main/llama-2-7b.Q4_0.gguf) model as example. - -2. Enable oneAPI running environment - -```sh -source /opt/intel/oneapi/setvars.sh -``` - -3. List devices information - -Similar to the native `sycl-ls`, available SYCL devices can be queried as follow: - -```sh -./build/bin/ls-sycl-device -``` -A example of such log in a system with 1 *intel CPU* and 1 *intel GPU* can look like the following: -``` -found 6 SYCL devices: -| | | |Compute |Max compute|Max work|Max sub| | -|ID| Device Type| Name|capability|units |group |group |Global mem size| -|--|------------------|---------------------------------------------|----------|-----------|--------|-------|---------------| -| 0|[level_zero:gpu:0]| Intel(R) Arc(TM) A770 Graphics| 1.3| 512| 1024| 32| 16225243136| -| 1|[level_zero:gpu:1]| Intel(R) UHD Graphics 770| 1.3| 32| 512| 32| 53651849216| -| 2| [opencl:gpu:0]| Intel(R) Arc(TM) A770 Graphics| 3.0| 512| 1024| 32| 16225243136| -| 3| [opencl:gpu:1]| Intel(R) UHD Graphics 770| 3.0| 32| 512| 32| 53651849216| -| 4| [opencl:cpu:0]| 13th Gen Intel(R) Core(TM) i7-13700K| 3.0| 24| 8192| 64| 67064815616| -| 5| [opencl:acc:0]| Intel(R) FPGA Emulation Device| 1.2| 24|67108864| 64| 67064815616| -``` - -| Attribute | Note | -|------------------------|-------------------------------------------------------------| -| compute capability 1.3 | Level-zero driver/runtime, recommended | -| compute capability 3.0 | OpenCL driver/runtime, slower than level-zero in most cases | - -4. Launch inference - -There are two device selection modes: - -- Single device: Use one device target specified by the user. -- Multiple devices: Automatically select the devices with the same largest Max compute-units. - -| Device selection | Parameter | -|------------------|----------------------------------------| -| Single device | --split-mode none --main-gpu DEVICE_ID | -| Multiple devices | --split-mode layer (default) | - -Examples: - -- Use device 0: - -```sh -ZES_ENABLE_SYSMAN=1 ./build/bin/main -m models/llama-2-7b.Q4_0.gguf -p "Building a website can be done in 10 simple steps:" -n 400 -e -ngl 33 -sm none -mg 0 -``` -or run by script: - -```sh -./examples/sycl/run_llama2.sh 0 -``` - -- Use multiple devices: - -```sh -ZES_ENABLE_SYSMAN=1 ./build/bin/main -m models/llama-2-7b.Q4_0.gguf -p "Building a website can be done in 10 simple steps:" -n 400 -e -ngl 33 -sm layer -``` - -Otherwise, you can run the script: - -```sh -./examples/sycl/run_llama2.sh -``` - -*Notes:* - -- Upon execution, verify the selected device(s) ID(s) in the output log, which can for instance be displayed as follow: - -```sh -detect 1 SYCL GPUs: [0] with top Max compute units:512 -``` -Or -```sh -use 1 SYCL GPUs: [0] with Max compute units:512 -``` - -## Windows - -### I. Setup Environment - -1. Install GPU driver - -Intel GPU drivers instructions guide and download page can be found here: [Get intel GPU Drivers](https://www.intel.com/content/www/us/en/products/docs/discrete-gpus/arc/software/drivers.html). - -2. Install Visual Studio - -If you already have a recent version of Microsoft Visual Studio, you can skip this step. Otherwise, please refer to the official download page for [Microsoft Visual Studio](https://visualstudio.microsoft.com/). - -3. Install Intel® oneAPI Base toolkit - -The base toolkit can be obtained from the official [Intel® oneAPI Base Toolkit](https://www.intel.com/content/www/us/en/developer/tools/oneapi/base-toolkit.html) page. - -Please follow the instructions for downloading and installing the Toolkit for Windows, and preferably keep the default installation values unchanged, notably the installation path *(`C:\Program Files (x86)\Intel\oneAPI` by default)*. - -Following guidelines/code snippets assume the default installation values. Otherwise, please make sure the necessary changes are reflected where applicable. - -b. Enable oneAPI running environment: - -- Type "oneAPI" in the search bar, then open the `Intel oneAPI command prompt for Intel 64 for Visual Studio 2022` App. - -- On the command prompt, enable the runtime environment with the following: -``` -"C:\Program Files (x86)\Intel\oneAPI\setvars.bat" intel64 -``` - -c. Verify installation - -In the oneAPI command line, run the following to print the available SYCL devices: - -``` -sycl-ls -``` - -There should be one or more *level-zero* GPU devices displayed as **[ext_oneapi_level_zero:gpu]**. Below is example of such output detecting an *intel Iris Xe* GPU as a Level-zero SYCL device: - -Output (example): -``` -[opencl:acc:0] Intel(R) FPGA Emulation Platform for OpenCL(TM), Intel(R) FPGA Emulation Device OpenCL 1.2 [2023.16.10.0.17_160000] -[opencl:cpu:1] Intel(R) OpenCL, 11th Gen Intel(R) Core(TM) i7-1185G7 @ 3.00GHz OpenCL 3.0 (Build 0) [2023.16.10.0.17_160000] -[opencl:gpu:2] Intel(R) OpenCL Graphics, Intel(R) Iris(R) Xe Graphics OpenCL 3.0 NEO [31.0.101.5186] -[ext_oneapi_level_zero:gpu:0] Intel(R) Level-Zero, Intel(R) Iris(R) Xe Graphics 1.3 [1.3.28044] -``` - -4. Install build tools - -a. Download & install cmake for Windows: https://cmake.org/download/ - -b. Download & install mingw-w64 make for Windows provided by w64devkit - -- Download the 1.19.0 version of [w64devkit](https://github.com/skeeto/w64devkit/releases/download/v1.19.0/w64devkit-1.19.0.zip). - -- Extract `w64devkit` on your pc. - -- Add the **bin** folder path in the Windows system PATH environment (for e.g. `C:\xxx\w64devkit\bin\`). - -### II. Build llama.cpp - -On the oneAPI command line window, step into the llama.cpp main directory and run the following: - -``` -mkdir -p build -cd build -@call "C:\Program Files (x86)\Intel\oneAPI\setvars.bat" intel64 --force - -# Option 1: Use FP32 (recommended for better performance in most cases) -cmake -G "MinGW Makefiles" .. -DLLAMA_SYCL=ON -DCMAKE_C_COMPILER=icx -DCMAKE_CXX_COMPILER=icx -DCMAKE_BUILD_TYPE=Release - -# Option 2: Or FP16 -cmake -G "MinGW Makefiles" .. -DLLAMA_SYCL=ON -DCMAKE_C_COMPILER=icx -DCMAKE_CXX_COMPILER=icx -DCMAKE_BUILD_TYPE=Release -DLLAMA_SYCL_F16=ON - -make -j -``` - -Otherwise, run the `win-build-sycl.bat` wrapper which encapsulates the former instructions: -```sh -.\examples\sycl\win-build-sycl.bat -``` - -*Notes:* - -- By default, calling `make` will build all target binary files. In case of a minimal experimental setup, the user can build the inference executable only through `make main`. - -### III. Run the inference - -1. Retrieve and prepare model - -You can refer to the general [*Prepare and Quantize*](README#prepare-and-quantize) guide for model prepration, or simply download [llama-2-7b.Q4_0.gguf](https://huggingface.co/TheBloke/Llama-2-7B-GGUF/blob/main/llama-2-7b.Q4_0.gguf) model as example. - -2. Enable oneAPI running environment - -On the oneAPI command line window, run the following and step into the llama.cpp directory: -``` -"C:\Program Files (x86)\Intel\oneAPI\setvars.bat" intel64 -``` - -3. List devices information - -Similar to the native `sycl-ls`, available SYCL devices can be queried as follow: - -``` -build\bin\ls-sycl-device.exe -``` - -The output of this command in a system with 1 *intel CPU* and 1 *intel GPU* would look like the following: -``` -found 6 SYCL devices: -| | | |Compute |Max compute|Max work|Max sub| | -|ID| Device Type| Name|capability|units |group |group |Global mem size| -|--|------------------|---------------------------------------------|----------|-----------|--------|-------|---------------| -| 0|[level_zero:gpu:0]| Intel(R) Arc(TM) A770 Graphics| 1.3| 512| 1024| 32| 16225243136| -| 1|[level_zero:gpu:1]| Intel(R) UHD Graphics 770| 1.3| 32| 512| 32| 53651849216| -| 2| [opencl:gpu:0]| Intel(R) Arc(TM) A770 Graphics| 3.0| 512| 1024| 32| 16225243136| -| 3| [opencl:gpu:1]| Intel(R) UHD Graphics 770| 3.0| 32| 512| 32| 53651849216| -| 4| [opencl:cpu:0]| 13th Gen Intel(R) Core(TM) i7-13700K| 3.0| 24| 8192| 64| 67064815616| -| 5| [opencl:acc:0]| Intel(R) FPGA Emulation Device| 1.2| 24|67108864| 64| 67064815616| - -``` - -| Attribute | Note | -|------------------------|-----------------------------------------------------------| -| compute capability 1.3 | Level-zero running time, recommended | -| compute capability 3.0 | OpenCL running time, slower than level-zero in most cases | - - -4. Launch inference - -There are two device selection modes: - -- Single device: Use one device assigned by user. -- Multiple devices: Automatically choose the devices with the same biggest Max compute units. - -| Device selection | Parameter | -|------------------|----------------------------------------| -| Single device | --split-mode none --main-gpu DEVICE_ID | -| Multiple devices | --split-mode layer (default) | - -Examples: - -- Use device 0: - -``` -build\bin\main.exe -m models\llama-2-7b.Q4_0.gguf -p "Building a website can be done in 10 simple steps:\nStep 1:" -n 400 -e -ngl 33 -s 0 -sm none -mg 0 -``` - -- Use multiple devices: - -``` -build\bin\main.exe -m models\llama-2-7b.Q4_0.gguf -p "Building a website can be done in 10 simple steps:\nStep 1:" -n 400 -e -ngl 33 -s 0 -sm layer -``` -Otherwise, run the following wrapper script: - -``` -.\examples\sycl\win-run-llama2.bat -``` - -Note: - -- Upon execution, verify the selected device(s) ID(s) in the output log, which can for instance be displayed as follow: - -```sh -detect 1 SYCL GPUs: [0] with top Max compute units:512 -``` -Or -```sh -use 1 SYCL GPUs: [0] with Max compute units:512 -``` - -## Environment Variable - -#### Build - -| Name | Value | Function | -|--------------------|-----------------------------------|---------------------------------------------| -| LLAMA_SYCL | ON (mandatory) | Enable build with SYCL code path. | -| LLAMA_SYCL_TARGET | INTEL *(default)* \| NVIDIA | Set the SYCL target device type. | -| LLAMA_SYCL_F16 | OFF *(default)* \|ON *(optional)* | Enable FP16 build with SYCL code path. | -| CMAKE_C_COMPILER | icx | Set *icx* compiler for SYCL code path. | -| CMAKE_CXX_COMPILER | icpx *(Linux)*, icx *(Windows)* | Set `icpx/icx` compiler for SYCL code path. | - -#### Runtime - -| Name | Value | Function | -|-------------------|------------------|---------------------------------------------------------------------------------------------------------------------------| -| GGML_SYCL_DEBUG | 0 (default) or 1 | Enable log function by macro: GGML_SYCL_DEBUG | -| ZES_ENABLE_SYSMAN | 0 (default) or 1 | Support to get free memory of GPU by sycl::aspect::ext_intel_free_memory.
Recommended to use when --split-mode = layer | - -## Known Issues - -- `Split-mode:[row]` is not supported. - -## Q&A - -- Error: `error while loading shared libraries: libsycl.so.7: cannot open shared object file: No such file or directory`. - - - Potential cause: Unavailable oneAPI installation or not set ENV variables. - - Solution: Install *oneAPI base toolkit* and enable its ENV through: `source /opt/intel/oneapi/setvars.sh`. - -- General compiler error: - - - Remove **build** folder or try a clean-build. - -- I can **not** see `[ext_oneapi_level_zero:gpu]` afer installing the GPU driver on Linux. - - Please double-check with `sudo sycl-ls`. - - If it's present in the list, please add video/render group to your user then **logout/login** or restart your system: - - ``` - sudo usermod -aG render $USER - sudo usermod -aG video $USER - ``` - Otherwise, please double-check the GPU driver installation steps. - -### **GitHub contribution**: -Please add the **[SYCL]** prefix/tag in issues/PRs titles to help the SYCL-team check/address them without delay. - -## TODO - -- Support row layer split for multiple card runs. diff --git a/build.zig b/build.zig deleted file mode 100644 index 96783574fe7..00000000000 --- a/build.zig +++ /dev/null @@ -1,172 +0,0 @@ -// Compatible with Zig Version 0.11.0 -const std = @import("std"); -const ArrayList = std.ArrayList; -const Compile = std.Build.Step.Compile; -const ConfigHeader = std.Build.Step.ConfigHeader; -const Mode = std.builtin.Mode; -const CrossTarget = std.zig.CrossTarget; - -const Maker = struct { - builder: *std.build.Builder, - target: CrossTarget, - optimize: Mode, - enable_lto: bool, - - include_dirs: ArrayList([]const u8), - cflags: ArrayList([]const u8), - cxxflags: ArrayList([]const u8), - objs: ArrayList(*Compile), - - fn addInclude(m: *Maker, dir: []const u8) !void { - try m.include_dirs.append(dir); - } - fn addProjectInclude(m: *Maker, path: []const []const u8) !void { - try m.addInclude(try m.builder.build_root.join(m.builder.allocator, path)); - } - fn addCFlag(m: *Maker, flag: []const u8) !void { - try m.cflags.append(flag); - } - fn addCxxFlag(m: *Maker, flag: []const u8) !void { - try m.cxxflags.append(flag); - } - fn addFlag(m: *Maker, flag: []const u8) !void { - try m.addCFlag(flag); - try m.addCxxFlag(flag); - } - - fn init(builder: *std.build.Builder) !Maker { - const target = builder.standardTargetOptions(.{}); - const zig_version = @import("builtin").zig_version_string; - const commit_hash = try std.ChildProcess.exec( - .{ .allocator = builder.allocator, .argv = &.{ "git", "rev-parse", "HEAD" } }, - ); - try std.fs.cwd().writeFile("common/build-info.cpp", builder.fmt( - \\int LLAMA_BUILD_NUMBER = {}; - \\char const *LLAMA_COMMIT = "{s}"; - \\char const *LLAMA_COMPILER = "Zig {s}"; - \\char const *LLAMA_BUILD_TARGET = "{s}"; - \\ - , .{ 0, commit_hash.stdout[0 .. commit_hash.stdout.len - 1], zig_version, try target.allocDescription(builder.allocator) })); - var m = Maker{ - .builder = builder, - .target = target, - .optimize = builder.standardOptimizeOption(.{}), - .enable_lto = false, - .include_dirs = ArrayList([]const u8).init(builder.allocator), - .cflags = ArrayList([]const u8).init(builder.allocator), - .cxxflags = ArrayList([]const u8).init(builder.allocator), - .objs = ArrayList(*Compile).init(builder.allocator), - }; - - try m.addCFlag("-std=c11"); - try m.addCxxFlag("-std=c++11"); - try m.addProjectInclude(&.{}); - try m.addProjectInclude(&.{"common"}); - return m; - } - - fn obj(m: *const Maker, name: []const u8, src: []const u8) *Compile { - const o = m.builder.addObject(.{ .name = name, .target = m.target, .optimize = m.optimize }); - if (o.target.getAbi() != .msvc) - o.defineCMacro("_GNU_SOURCE", null); - - if (std.mem.endsWith(u8, src, ".c")) { - o.addCSourceFiles(&.{src}, m.cflags.items); - o.linkLibC(); - } else { - o.addCSourceFiles(&.{src}, m.cxxflags.items); - if (o.target.getAbi() == .msvc) { - o.linkLibC(); // need winsdk + crt - } else { - // linkLibCpp already add (libc++ + libunwind + libc) - o.linkLibCpp(); - } - } - for (m.include_dirs.items) |i| o.addIncludePath(.{ .path = i }); - o.want_lto = m.enable_lto; - return o; - } - - fn exe(m: *const Maker, name: []const u8, src: []const u8, deps: []const *Compile) *Compile { - const e = m.builder.addExecutable(.{ .name = name, .target = m.target, .optimize = m.optimize }); - e.addCSourceFiles(&.{src}, m.cxxflags.items); - for (deps) |d| e.addObject(d); - for (m.objs.items) |o| e.addObject(o); - for (m.include_dirs.items) |i| e.addIncludePath(.{ .path = i }); - - // https://github.com/ziglang/zig/issues/15448 - if (e.target.getAbi() == .msvc) { - e.linkLibC(); // need winsdk + crt - } else { - // linkLibCpp already add (libc++ + libunwind + libc) - e.linkLibCpp(); - } - m.builder.installArtifact(e); - e.want_lto = m.enable_lto; - return e; - } -}; - -pub fn build(b: *std.build.Builder) !void { - var make = try Maker.init(b); - make.enable_lto = b.option(bool, "lto", "Enable LTO optimization, (default: false)") orelse false; - - const ggml = make.obj("ggml", "ggml.c"); - const sgemm = make.obj("sgemm", "sgemm.cpp"); - const ggml_alloc = make.obj("ggml-alloc", "ggml-alloc.c"); - const ggml_backend = make.obj("ggml-backend", "ggml-backend.c"); - const ggml_quants = make.obj("ggml-quants", "ggml-quants.c"); - const unicode = make.obj("unicode", "unicode.cpp"); - const unicode_data = make.obj("unicode-data", "unicode-data.cpp"); - const llama = make.obj("llama", "llama.cpp"); - const buildinfo = make.obj("common", "common/build-info.cpp"); - const common = make.obj("common", "common/common.cpp"); - const console = make.obj("console", "common/console.cpp"); - const sampling = make.obj("sampling", "common/sampling.cpp"); - const grammar_parser = make.obj("grammar-parser", "common/grammar-parser.cpp"); - const json_schema_to_grammar = make.obj("json-schema-to-grammar", "common/json-schema-to-grammar.cpp"); - const train = make.obj("train", "common/train.cpp"); - const clip = make.obj("clip", "examples/llava/clip.cpp"); - const llava = make.obj("llava", "examples/llava/llava.cpp"); - - _ = make.exe("main", "examples/main/main.cpp", &.{ ggml, sgemm, ggml_alloc, ggml_backend, ggml_quants, llama, unicode, unicode_data, common, json_schema_to_grammar, buildinfo, sampling, console, grammar_parser }); - _ = make.exe("quantize", "examples/quantize/quantize.cpp", &.{ ggml, sgemm, ggml_alloc, ggml_backend, ggml_quants, llama, unicode, unicode_data, common, json_schema_to_grammar, buildinfo }); - _ = make.exe("perplexity", "examples/perplexity/perplexity.cpp", &.{ ggml, sgemm, ggml_alloc, ggml_backend, ggml_quants, llama, unicode, unicode_data, common, json_schema_to_grammar, buildinfo }); - _ = make.exe("embedding", "examples/embedding/embedding.cpp", &.{ ggml, sgemm, ggml_alloc, ggml_backend, ggml_quants, llama, unicode, unicode_data, common, json_schema_to_grammar, buildinfo }); - _ = make.exe("finetune", "examples/finetune/finetune.cpp", &.{ ggml, sgemm, ggml_alloc, ggml_backend, ggml_quants, llama, unicode, unicode_data, common, json_schema_to_grammar, buildinfo, train }); - _ = make.exe("train-text-from-scratch", "examples/train-text-from-scratch/train-text-from-scratch.cpp", &.{ ggml, sgemm, ggml_alloc, ggml_backend, ggml_quants, llama, unicode, unicode_data, common, json_schema_to_grammar, buildinfo, train }); - - const server = make.exe("server", "examples/server/server.cpp", &.{ ggml, sgemm, ggml_alloc, ggml_backend, ggml_quants, llama, unicode, unicode_data, common, json_schema_to_grammar, buildinfo, sampling, grammar_parser, clip, llava }); - if (server.target.isWindows()) { - server.linkSystemLibrary("ws2_32"); - } - - const server_assets = [_][]const u8{ "index.html", "index.js", "completion.js", "json-schema-to-grammar.mjs" }; - for (server_assets) |asset| { - const input_path = b.fmt("examples/server/public/{s}", .{asset}); - const output_path = b.fmt("examples/server/{s}.hpp", .{asset}); - - // Portable equivalent of `b.addSystemCommand(&.{ "xxd", "-n", asset, "-i", input_path, output_path }) })`: - - const input = try std.fs.cwd().readFileAlloc(b.allocator, input_path, std.math.maxInt(usize)); - defer b.allocator.free(input); - - var buf = std.ArrayList(u8).init(b.allocator); - defer buf.deinit(); - - for (input) |byte| { - try std.fmt.format(buf.writer(), "0x{X:0>2}, ", .{byte}); - } - - var name = try std.mem.replaceOwned(u8, b.allocator, asset, "-", "_"); - defer b.allocator.free(name); - std.mem.replaceScalar(u8, name, '.', '_'); - - try std.fs.cwd().writeFile(output_path, b.fmt( - "unsigned char {s}[] = {{{s}}};\nunsigned int {s}_len = {d};\n", - .{ name, buf.items, name, input.len }, - )); - - std.debug.print("Dumped hex of \"{s}\" ({s}) to {s}\n", .{ input_path, name, output_path }); - } -} diff --git a/codecov.yml b/codecov.yml deleted file mode 100644 index a301c5b2c76..00000000000 --- a/codecov.yml +++ /dev/null @@ -1,14 +0,0 @@ -comment: off - -coverage: - status: - project: - default: - target: auto - threshold: 0 - base: auto - patch: - default: - target: auto - threshold: 0 - base: auto diff --git a/convert-hf-to-gguf.py b/convert-hf-to-gguf.py deleted file mode 100755 index 5763b6664e8..00000000000 --- a/convert-hf-to-gguf.py +++ /dev/null @@ -1,2908 +0,0 @@ -#!/usr/bin/env python3 - -from __future__ import annotations - -import argparse -import contextlib -import json -import os -import re -import sys -from abc import ABC, abstractmethod -from enum import IntEnum -from pathlib import Path -from typing import TYPE_CHECKING, Any, Callable, ContextManager, Iterator, Sequence, TypeVar, cast - -import numpy as np -import torch - -if TYPE_CHECKING: - from torch import Tensor - -if 'NO_LOCAL_GGUF' not in os.environ: - sys.path.insert(1, str(Path(__file__).parent / 'gguf-py')) -import gguf - -from convert import LlamaHfVocab, permute - - -###### MODEL DEFINITIONS ###### - -class SentencePieceTokenTypes(IntEnum): - NORMAL = 1 - UNKNOWN = 2 - CONTROL = 3 - USER_DEFINED = 4 - UNUSED = 5 - BYTE = 6 - - -AnyModel = TypeVar("AnyModel", bound="type[Model]") - - -class Model(ABC): - _model_classes: dict[str, type[Model]] = {} - - def __init__(self, dir_model: Path, ftype: int, fname_out: Path, is_big_endian: bool, use_temp_file: bool): - self.dir_model = dir_model - self.ftype = ftype - self.fname_out = fname_out - self.is_big_endian = is_big_endian - self.endianess = gguf.GGUFEndian.BIG if is_big_endian else gguf.GGUFEndian.LITTLE - self.use_temp_file = use_temp_file - self.is_safetensors = self._is_model_safetensors() - self.num_parts = Model.count_model_parts(self.dir_model, ".safetensors" if self.is_safetensors else ".bin") - self.part_names = self._get_part_names() - self.hparams = Model.load_hparams(self.dir_model) - self.gguf_writer = gguf.GGUFWriter(fname_out, gguf.MODEL_ARCH_NAMES[self.model_arch], endianess=self.endianess, use_temp_file=self.use_temp_file) - self.block_count = self.find_hparam(["n_layers", "num_hidden_layers", "n_layer"]) - - @property - @abstractmethod - def model_arch(self) -> gguf.MODEL_ARCH: - pass - - def find_hparam(self, keys: Sequence[str], optional: bool = False) -> Any: - key = next((k for k in keys if k in self.hparams), None) - if key is not None: - return self.hparams[key] - if optional: - return None - raise KeyError(f"could not find any of: {keys}") - - def set_vocab(self): - self._set_vocab_gpt2() - - def get_tensors(self) -> Iterator[tuple[str, Tensor]]: - for part_name in self.part_names: - print(f"gguf: loading model part '{part_name}'") - ctx: ContextManager[Any] - if self.is_safetensors: - from safetensors import safe_open - ctx = cast(ContextManager[Any], safe_open(self.dir_model / part_name, framework="pt", device="cpu")) - else: - ctx = contextlib.nullcontext(torch.load(str(self.dir_model / part_name), map_location="cpu", mmap=True, weights_only=True)) - - with ctx as model_part: - for name in model_part.keys(): - data = model_part.get_tensor(name) if self.is_safetensors else model_part[name] - yield name, data - - def set_gguf_parameters(self): - self.gguf_writer.add_name(self.dir_model.name) - self.gguf_writer.add_block_count(self.block_count) - - if (n_ctx := self.find_hparam(["max_position_embeddings", "n_ctx"], optional=True)) is not None: - self.gguf_writer.add_context_length(n_ctx) - print(f"gguf: context length = {n_ctx}") - - n_embd = self.find_hparam(["hidden_size", "n_embd"]) - self.gguf_writer.add_embedding_length(n_embd) - print(f"gguf: embedding length = {n_embd}") - - if (n_ff := self.find_hparam(["intermediate_size", "n_inner"], optional=True)) is not None: - self.gguf_writer.add_feed_forward_length(n_ff) - print(f"gguf: feed forward length = {n_ff}") - - n_head = self.find_hparam(["num_attention_heads", "n_head"]) - self.gguf_writer.add_head_count(n_head) - print(f"gguf: head count = {n_head}") - - if (n_head_kv := self.hparams.get("num_key_value_heads")) is not None: - self.gguf_writer.add_head_count_kv(n_head_kv) - print(f"gguf: key-value head count = {n_head_kv}") - - if (rope_theta := self.hparams.get("rope_theta")) is not None: - self.gguf_writer.add_rope_freq_base(rope_theta) - print(f"gguf: rope theta = {rope_theta}") - if (f_rms_eps := self.hparams.get("rms_norm_eps")) is not None: - self.gguf_writer.add_layer_norm_rms_eps(f_rms_eps) - print(f"gguf: rms norm epsilon = {f_rms_eps}") - if (f_norm_eps := self.find_hparam(["layer_norm_eps", "layer_norm_epsilon", "norm_epsilon"], optional=True)) is not None: - self.gguf_writer.add_layer_norm_eps(f_norm_eps) - print(f"gguf: layer norm epsilon = {f_norm_eps}") - if (n_experts := self.hparams.get("num_local_experts")) is not None: - self.gguf_writer.add_expert_count(n_experts) - print(f"gguf: expert count = {n_experts}") - if (n_experts_used := self.hparams.get("num_experts_per_tok")) is not None: - self.gguf_writer.add_expert_used_count(n_experts_used) - print(f"gguf: experts used count = {n_experts_used}") - - self.gguf_writer.add_file_type(self.ftype) - print(f"gguf: file type = {self.ftype}") - - def write_tensors(self): - block_count = self.hparams.get("n_layers", self.hparams.get("num_hidden_layers", self.hparams.get("n_layer"))) - tensor_map = gguf.get_tensor_name_map(self.model_arch, block_count) - for name, data_torch in self.get_tensors(): - # we don't need these - if name.endswith((".attention.masked_bias", ".attention.bias", ".attention.rotary_emb.inv_freq")): - continue - - old_dtype = data_torch.dtype - - # convert any unsupported data types to float32 - if data_torch.dtype not in (torch.float16, torch.float32): - data_torch = data_torch.to(torch.float32) - - data = data_torch.squeeze().numpy() - - # map tensor names - new_name = tensor_map.get_name(name, try_suffixes=(".weight", ".bias")) - if new_name is None: - print(f"Can not map tensor {name!r}") - sys.exit() - - n_dims = len(data.shape) - data_dtype = data.dtype - - # if f32 desired, convert any float16 to float32 - if self.ftype == 0 and data_dtype == np.float16: - data = data.astype(np.float32) - - # TODO: Why cant we use these float16 as-is? There should be not reason to store float16 as float32 - if self.ftype == 1 and data_dtype == np.float16 and (n_dims == 1 or new_name.endswith("_norm.weight")): - data = data.astype(np.float32) - - # if f16 desired, convert any float32 2-dim weight tensors to float16 - if self.ftype == 1 and data_dtype == np.float32 and name.endswith(".weight") and n_dims == 2: - data = data.astype(np.float16) - - print(f"{new_name}, n_dims = {n_dims}, {old_dtype} --> {data.dtype}") - - self.gguf_writer.add_tensor(new_name, data) - - def write(self): - self.write_tensors() - self.gguf_writer.write_header_to_file() - self.gguf_writer.write_kv_data_to_file() - self.gguf_writer.write_tensors_to_file() - self.gguf_writer.close() - - def write_vocab(self): - self.gguf_writer.write_header_to_file() - self.gguf_writer.write_kv_data_to_file() - self.gguf_writer.close() - - @staticmethod - def count_model_parts(dir_model: Path, prefix: str) -> int: - num_parts = 0 - for filename in os.listdir(dir_model): - if filename.endswith(prefix): - num_parts += 1 - - return num_parts - - @staticmethod - def load_hparams(dir_model): - with open(dir_model / "config.json", "r", encoding="utf-8") as f: - return json.load(f) - - @classmethod - def register(cls, *names: str) -> Callable[[AnyModel], AnyModel]: - assert names - - def func(modelcls: type[Model]): - for name in names: - cls._model_classes[name] = modelcls - return modelcls - return func - - @classmethod - def from_model_architecture(cls, arch): - try: - return cls._model_classes[arch] - except KeyError: - raise NotImplementedError(f'Architecture {arch!r} not supported!') from None - - def _is_model_safetensors(self) -> bool: - return Model.count_model_parts(self.dir_model, ".safetensors") > 0 - - def _get_part_names(self): - if self.is_safetensors: - if self.num_parts == 1: # there's only one .safetensors file - return ("model.safetensors",) - return (f"model-{n:05}-of-{self.num_parts:05}.safetensors" for n in range(1, self.num_parts + 1)) - - if self.num_parts == 1: # there's only one .bin file - return ("pytorch_model.bin",) - return (f"pytorch_model-{n:05}-of-{self.num_parts:05}.bin" for n in range(1, self.num_parts + 1)) - - # used for GPT-2 BPE and WordPiece vocabs - def get_basic_vocab(self) -> tuple[list[str], list[int]]: - tokens: list[str] = [] - toktypes: list[int] = [] - - from transformers import AutoTokenizer - tokenizer = AutoTokenizer.from_pretrained(self.dir_model) - vocab_size = self.hparams.get("vocab_size", len(tokenizer.vocab)) - assert max(tokenizer.vocab.values()) < vocab_size - - reverse_vocab = {id_: encoded_tok for encoded_tok, id_ in tokenizer.vocab.items()} - added_vocab = tokenizer.get_added_vocab() - - for i in range(vocab_size): - if i not in reverse_vocab: - tokens.append(f"[PAD{i}]") - toktypes.append(gguf.TokenType.USER_DEFINED) - elif reverse_vocab[i] in added_vocab: - tokens.append(reverse_vocab[i]) - if tokenizer.added_tokens_decoder[i].special: - toktypes.append(gguf.TokenType.CONTROL) - else: - toktypes.append(gguf.TokenType.USER_DEFINED) - else: - tokens.append(reverse_vocab[i]) - toktypes.append(gguf.TokenType.NORMAL) - - return tokens, toktypes - - def _set_vocab_gpt2(self) -> None: - tokens, toktypes = self.get_basic_vocab() - self.gguf_writer.add_tokenizer_model("gpt2") - self.gguf_writer.add_token_list(tokens) - self.gguf_writer.add_token_types(toktypes) - - special_vocab = gguf.SpecialVocab(self.dir_model, load_merges=True) - special_vocab.add_to_gguf(self.gguf_writer) - - def _set_vocab_qwen(self): - dir_model = self.dir_model - hparams = self.hparams - tokens: list[str] = [] - toktypes: list[int] = [] - - from transformers import AutoTokenizer - tokenizer = AutoTokenizer.from_pretrained(dir_model, trust_remote_code=True) - vocab_size = hparams["vocab_size"] - assert max(tokenizer.get_vocab().values()) < vocab_size - - merges = [] - vocab = {} - mergeable_ranks = tokenizer.mergeable_ranks - for token, rank in mergeable_ranks.items(): - vocab[QwenModel.token_bytes_to_string(token)] = rank - if len(token) == 1: - continue - merged = QwenModel.bpe(mergeable_ranks, token, max_rank=rank) - assert len(merged) == 2 - merges.append(' '.join(map(QwenModel.token_bytes_to_string, merged))) - - # for this kind of tokenizer, added_vocab is not a subset of vocab, so they need to be combined - added_vocab = tokenizer.special_tokens - reverse_vocab = {id_ : encoded_tok for encoded_tok, id_ in (vocab | added_vocab).items()} - - for i in range(vocab_size): - if i not in reverse_vocab: - tokens.append(f"[PAD{i}]") - toktypes.append(gguf.TokenType.USER_DEFINED) - elif reverse_vocab[i] in added_vocab: - tokens.append(reverse_vocab[i]) - toktypes.append(gguf.TokenType.CONTROL) - else: - tokens.append(reverse_vocab[i]) - toktypes.append(gguf.TokenType.NORMAL) - - self.gguf_writer.add_tokenizer_model("gpt2") - self.gguf_writer.add_token_list(tokens) - self.gguf_writer.add_token_types(toktypes) - - special_vocab = gguf.SpecialVocab(dir_model, load_merges=False) - special_vocab.merges = merges - # only add special tokens when they were not already loaded from config.json - if len(special_vocab.special_token_ids) == 0: - special_vocab._set_special_token("bos", tokenizer.special_tokens["<|endoftext|>"]) - special_vocab._set_special_token("eos", tokenizer.special_tokens["<|endoftext|>"]) - # this one is usually not in config.json anyway - special_vocab._set_special_token("unk", tokenizer.special_tokens["<|endoftext|>"]) - special_vocab.add_to_gguf(self.gguf_writer) - - def _set_vocab_sentencepiece(self): - from sentencepiece import SentencePieceProcessor - - tokenizer_path = self.dir_model / 'tokenizer.model' - - tokens: list[bytes] = [] - scores: list[float] = [] - toktypes: list[int] = [] - - if not tokenizer_path.is_file(): - raise FileNotFoundError(f"File not found: {tokenizer_path}") - - tokenizer = SentencePieceProcessor(str(tokenizer_path)) - vocab_size = self.hparams.get('vocab_size', tokenizer.vocab_size()) - - for token_id in range(tokenizer.vocab_size()): - piece = tokenizer.id_to_piece(token_id) - text = piece.encode("utf-8") - score = tokenizer.get_score(token_id) - - toktype = SentencePieceTokenTypes.NORMAL - if tokenizer.is_unknown(token_id): - toktype = SentencePieceTokenTypes.UNKNOWN - elif tokenizer.is_control(token_id): - toktype = SentencePieceTokenTypes.CONTROL - elif tokenizer.is_unused(token_id): - toktype = SentencePieceTokenTypes.UNUSED - elif tokenizer.is_byte(token_id): - toktype = SentencePieceTokenTypes.BYTE - - tokens.append(text) - scores.append(score) - toktypes.append(toktype) - - added_tokens_file = self.dir_model / 'added_tokens.json' - if added_tokens_file.is_file(): - with open(added_tokens_file, "r", encoding="utf-8") as f: - added_tokens_json = json.load(f) - - for key in added_tokens_json: - key = key.encode("utf-8") - if key not in tokens: - tokens.append(key) - scores.append(-1000.0) - toktypes.append(SentencePieceTokenTypes.USER_DEFINED) - - if vocab_size > len(tokens): - pad_count = vocab_size - len(tokens) - print( - f"Padding vocab with {pad_count} token(s) - [PAD1] through [PAD{pad_count}]" - ) - for i in range(1, pad_count + 1): - tokens.append(f"[PAD{i}]") - scores.append(-1000.0) - toktypes.append(SentencePieceTokenTypes.UNUSED) - - assert len(tokens) == vocab_size - - self.gguf_writer.add_tokenizer_model("llama") - self.gguf_writer.add_token_list(tokens) - self.gguf_writer.add_token_scores(scores) - self.gguf_writer.add_token_types(toktypes) - - special_vocab = gguf.SpecialVocab(self.dir_model, n_vocab=len(tokens)) - special_vocab.add_to_gguf(self.gguf_writer) - - def _set_vocab_llama_hf(self): - vocab = LlamaHfVocab(self.dir_model) - tokens = [] - scores = [] - toktypes = [] - - for text, score, toktype in vocab.all_tokens(): - tokens.append(text) - scores.append(score) - toktypes.append(toktype) - - assert len(tokens) == vocab.vocab_size - - self.gguf_writer.add_tokenizer_model("llama") - self.gguf_writer.add_token_list(tokens) - self.gguf_writer.add_token_scores(scores) - self.gguf_writer.add_token_types(toktypes) - - special_vocab = gguf.SpecialVocab(self.dir_model, n_vocab=len(tokens)) - special_vocab.add_to_gguf(self.gguf_writer) - - -@Model.register("GPTNeoXForCausalLM") -class GPTNeoXModel(Model): - model_arch = gguf.MODEL_ARCH.GPTNEOX - - def set_gguf_parameters(self): - block_count = self.hparams["num_hidden_layers"] - - self.gguf_writer.add_name(self.dir_model.name) - self.gguf_writer.add_context_length(self.hparams["max_position_embeddings"]) - self.gguf_writer.add_embedding_length(self.hparams["hidden_size"]) - self.gguf_writer.add_block_count(block_count) - self.gguf_writer.add_feed_forward_length(self.hparams["intermediate_size"]) - self.gguf_writer.add_rope_dimension_count( - int(self.hparams["rotary_pct"] * (self.hparams["hidden_size"] // self.hparams["num_attention_heads"])), - ) - self.gguf_writer.add_head_count(self.hparams["num_attention_heads"]) - self.gguf_writer.add_parallel_residual(self.hparams.get("use_parallel_residual", True)) - self.gguf_writer.add_layer_norm_eps(self.hparams["layer_norm_eps"]) - - -@Model.register("BloomForCausalLM") -class BloomModel(Model): - model_arch = gguf.MODEL_ARCH.BLOOM - - def set_gguf_parameters(self): - self.gguf_writer.add_name("Bloom") - n_embed = self.hparams.get("hidden_size", self.hparams.get("n_embed")) - n_head = self.hparams.get("n_head", self.hparams.get("num_attention_heads")) - self.gguf_writer.add_context_length(self.hparams.get("seq_length", n_embed)) - self.gguf_writer.add_embedding_length(n_embed) - self.gguf_writer.add_feed_forward_length(4 * n_embed) - self.gguf_writer.add_block_count(self.hparams["n_layer"]) - self.gguf_writer.add_head_count(n_head) - self.gguf_writer.add_head_count_kv(n_head) - self.gguf_writer.add_layer_norm_eps(self.hparams["layer_norm_epsilon"]) - self.gguf_writer.add_file_type(self.ftype) - - def write_tensors(self): - block_count = self.hparams["n_layer"] - tensors = dict(self.get_tensors()) - tensor_map = gguf.get_tensor_name_map(self.model_arch, block_count) - has_lm_head = True - n_head = self.hparams.get("n_head", self.hparams.get("num_attention_heads")) - n_embed = self.hparams.get("hidden_size", self.hparams.get("n_embed")) - - for name, data_torch in tensors.items(): - if "lm_head.weight" not in tensors.keys() and "output.weight" not in tensors.keys(): - has_lm_head = False - - name = re.sub(r'transformer\.', '', name) - - old_dtype = data_torch.dtype - - # convert any unsupported data types to float32 - if data_torch.dtype not in (torch.float16, torch.float32): - data_torch = data_torch.to(torch.float32) - - data = data_torch.squeeze().numpy() - - if re.match(r"h\.\d+\.self_attention\.query_key_value\.weight", name): - # Map bloom-style qkv_linear to gpt-style qkv_linear - # bloom: https://github.com/huggingface/transformers/blob/main/src/transformers/models/bloom/modeling_bloom.py#L238-L252 # noqa - # gpt-2: https://github.com/huggingface/transformers/blob/main/src/transformers/models/gpt2/modeling_gpt2.py#L312 # noqa - qkv_weights = data.reshape((n_head, 3, n_embed // n_head, n_embed)) - data = np.concatenate( - ( - qkv_weights[:, 0, :, :].reshape((-1, n_embed)), - qkv_weights[:, 1, :, :].reshape((-1, n_embed)), - qkv_weights[:, 2, :, :].reshape((-1, n_embed)), - ), - axis=0, - ) - print("re-format attention.linear_qkv.weight") - elif re.match(r"h\.\d+\.self_attention\.query_key_value\.bias", name): - qkv_bias = data.reshape((n_head, 3, n_embed // n_head)) - data = np.concatenate( - ( - qkv_bias[:, 0, :].reshape((n_embed,)), - qkv_bias[:, 1, :].reshape((n_embed,)), - qkv_bias[:, 2, :].reshape((n_embed,)), - ), - axis=0, - ) - print("re-format attention.linear_qkv.bias") - - # map tensor names - new_name = tensor_map.get_name(name, try_suffixes=(".weight", ".bias")) - if new_name is None: - print(f"Can not map tensor {name!r}") - sys.exit() - - n_dims = len(data.shape) - data_dtype = data.dtype - - # if f32 desired, convert any float16 to float32 - if self.ftype == 0 and data_dtype == np.float16: - data = data.astype(np.float32) - - # TODO: Why cant we use these float16 as-is? There should be not reason to store float16 as float32 - if self.ftype == 1 and data_dtype == np.float16 and n_dims == 1: - data = data.astype(np.float32) - - # if f16 desired, convert any float32 2-dim weight tensors to float16 - if self.ftype == 1 and data_dtype == np.float32 and name.endswith(".weight") and n_dims == 2: - data = data.astype(np.float16) - - print(f"=> {new_name}, shape = {data.shape}, {old_dtype} --> {data.dtype}") - - self.gguf_writer.add_tensor(new_name, data) - - if not has_lm_head and name == "word_embeddings.weight": - self.gguf_writer.add_tensor("output.weight", data) - print(name, f"=> output.weight, shape = {data.shape}, {old_dtype} --> {data.dtype}") - - -@Model.register("MPTForCausalLM") -class MPTModel(Model): - model_arch = gguf.MODEL_ARCH.MPT - - def set_vocab(self): - try: - self._set_vocab_gpt2() - except Exception: - # Fallback for SEA-LION model - self._set_vocab_sentencepiece() - self.gguf_writer.add_add_bos_token(False) - self.gguf_writer.add_pad_token_id(3) - self.gguf_writer.add_eos_token_id(1) - self.gguf_writer.add_unk_token_id(0) - - def set_gguf_parameters(self): - block_count = self.hparams["n_layers"] - self.gguf_writer.add_name(self.dir_model.name) - self.gguf_writer.add_context_length(self.hparams["max_seq_len"]) - self.gguf_writer.add_embedding_length(self.hparams["d_model"]) - self.gguf_writer.add_block_count(block_count) - self.gguf_writer.add_feed_forward_length(4 * self.hparams["d_model"]) - self.gguf_writer.add_head_count(self.hparams["n_heads"]) - if kv_n_heads := self.hparams["attn_config"].get("kv_n_heads"): - self.gguf_writer.add_head_count_kv(kv_n_heads) - self.gguf_writer.add_layer_norm_eps(1e-5) - if self.hparams["attn_config"]["clip_qkv"] is not None: - self.gguf_writer.add_clamp_kqv(self.hparams["attn_config"]["clip_qkv"]) - if self.hparams["attn_config"]["alibi"]: - self.gguf_writer.add_max_alibi_bias(self.hparams["attn_config"]["alibi_bias_max"]) - else: - self.gguf_writer.add_max_alibi_bias(0.0) - - def write_tensors(self): - block_count = self.hparams.get("n_layers", self.hparams.get("num_hidden_layers")) - tensor_map = gguf.get_tensor_name_map(self.model_arch, block_count) - for name, data_torch in self.get_tensors(): - # we don't need these - if name.endswith((".attention.masked_bias", ".attention.bias", ".attention.rotary_emb.inv_freq")): - continue - - old_dtype = data_torch.dtype - - # convert any unsupported data types to float32 - if data_torch.dtype not in (torch.float16, torch.float32): - data_torch = data_torch.to(torch.float32) - - data = data_torch.squeeze().numpy() - - # map tensor names - if "scales" in name: - new_name = tensor_map.get_name(name, try_suffixes=(".weight", ".bias", ".scales")) - if new_name is not None: - new_name = new_name.replace("scales", "act.scales") - else: - new_name = tensor_map.get_name(name, try_suffixes=(".weight", ".bias")) - if new_name is None: - print(f"Can not map tensor {name!r}") - sys.exit() - - n_dims = len(data.shape) - data_dtype = data.dtype - - # if f32 desired, convert any float16 to float32 - if self.ftype == 0 and data_dtype == np.float16: - data = data.astype(np.float32) - - # TODO: Why cant we use these float16 as-is? There should be not reason to store float16 as float32 - if self.ftype == 1 and data_dtype == np.float16 and n_dims == 1: - data = data.astype(np.float32) - - # if f16 desired, convert any float32 2-dim weight tensors to float16 - if self.ftype == 1 and data_dtype == np.float32 and name.endswith(".weight") and n_dims == 2: - data = data.astype(np.float16) - - print(f"{new_name}, n_dims = {n_dims}, {old_dtype} --> {data.dtype}") - - self.gguf_writer.add_tensor(new_name, data) - - -@Model.register("OrionForCausalLM") -class OrionModel(Model): - model_arch = gguf.MODEL_ARCH.ORION - - def set_vocab(self): - self._set_vocab_sentencepiece() - - def set_gguf_parameters(self): - block_count = self.hparams["num_hidden_layers"] - head_count = self.hparams["num_attention_heads"] - head_count_kv = self.hparams.get("num_key_value_heads", head_count) - hf_repo = self.hparams.get("_name_or_path", "") - - ctx_length = 0 - if "max_sequence_length" in self.hparams: - ctx_length = self.hparams["max_sequence_length"] - elif "max_position_embeddings" in self.hparams: - ctx_length = self.hparams["max_position_embeddings"] - elif "model_max_length" in self.hparams: - ctx_length = self.hparams["model_max_length"] - else: - print("gguf: can not find ctx length parameter.") - sys.exit() - - self.gguf_writer.add_file_type(self.ftype) - self.gguf_writer.add_name(self.dir_model.name) - self.gguf_writer.add_source_hf_repo(hf_repo) - self.gguf_writer.add_tensor_data_layout("Meta AI original pth") - self.gguf_writer.add_context_length(ctx_length) - self.gguf_writer.add_embedding_length(self.hparams["hidden_size"]) - self.gguf_writer.add_block_count(block_count) - self.gguf_writer.add_feed_forward_length(self.hparams["intermediate_size"]) - self.gguf_writer.add_head_count(head_count) - self.gguf_writer.add_head_count_kv(head_count_kv) - # note: config provides rms norm but it is actually layer norm - # ref: https://huggingface.co/OrionStarAI/Orion-14B-Chat/blob/276a17221ce42beb45f66fac657a41540e71f4f5/modeling_orion.py#L570-L571 - self.gguf_writer.add_layer_norm_eps(self.hparams["rms_norm_eps"]) - - def write_tensors(self): - # Collect tensors from generator object - model_kv = dict(self.get_tensors()) - block_count = self.hparams["num_hidden_layers"] - tensor_map = gguf.get_tensor_name_map(self.model_arch, block_count) - - for name, data_torch in model_kv.items(): - # we don't need these - if name.endswith(".rotary_emb.inv_freq"): - continue - - old_dtype = data_torch.dtype - - # convert any unsupported data types to float32 - if data_torch.dtype not in (torch.float16, torch.float32): - data_torch = data_torch.to(torch.float32) - - data = data_torch.squeeze().numpy() - - # map tensor names - new_name = tensor_map.get_name(name, try_suffixes=(".weight", ".bias")) - if new_name is None: - print(f"Can not map tensor {name!r}") - sys.exit() - - n_dims = len(data.shape) - data_dtype = data.dtype - - # if f32 desired, convert any float16 to float32 - if self.ftype == 0 and data_dtype == np.float16: - data = data.astype(np.float32) - - # TODO: Why cant we use these float16 as-is? There should be not reason to store float16 as float32 - if self.ftype == 1 and data_dtype == np.float16 and n_dims == 1: - data = data.astype(np.float32) - - # if f16 desired, convert any float32 2-dim weight tensors to float16 - if self.ftype == 1 and data_dtype == np.float32 and name.endswith(".weight") and n_dims == 2: - data = data.astype(np.float16) - - print(f"{name} -> {new_name}, n_dims = {n_dims}, {old_dtype} --> {data.dtype}") - self.gguf_writer.add_tensor(new_name, data) - - -@Model.register("BaichuanForCausalLM", "BaiChuanForCausalLM") -class BaichuanModel(Model): - model_arch = gguf.MODEL_ARCH.BAICHUAN - - def set_vocab(self): - self._set_vocab_sentencepiece() - - def set_gguf_parameters(self): - block_count = self.hparams["num_hidden_layers"] - head_count = self.hparams["num_attention_heads"] - head_count_kv = self.hparams.get("num_key_value_heads", head_count) - hf_repo = self.hparams.get("_name_or_path", "") - - ctx_length = 0 - if "max_sequence_length" in self.hparams: - ctx_length = self.hparams["max_sequence_length"] - elif "max_position_embeddings" in self.hparams: - ctx_length = self.hparams["max_position_embeddings"] - elif "model_max_length" in self.hparams: - ctx_length = self.hparams["model_max_length"] - else: - print("gguf: can not find ctx length parameter.") - sys.exit() - - self.gguf_writer.add_name(self.dir_model.name) - self.gguf_writer.add_source_hf_repo(hf_repo) - self.gguf_writer.add_tensor_data_layout("Meta AI original pth") - self.gguf_writer.add_context_length(ctx_length) - self.gguf_writer.add_embedding_length(self.hparams["hidden_size"]) - self.gguf_writer.add_block_count(block_count) - self.gguf_writer.add_feed_forward_length(self.hparams["intermediate_size"]) - self.gguf_writer.add_rope_dimension_count(self.hparams["hidden_size"] // self.hparams["num_attention_heads"]) - self.gguf_writer.add_head_count(head_count) - self.gguf_writer.add_head_count_kv(head_count_kv) - self.gguf_writer.add_layer_norm_rms_eps(self.hparams["rms_norm_eps"]) - - if self.hparams.get("rope_scaling") is not None and "factor" in self.hparams["rope_scaling"]: - if self.hparams["rope_scaling"].get("type") == "linear": - self.gguf_writer.add_rope_scaling_type(gguf.RopeScalingType.LINEAR) - self.gguf_writer.add_rope_scaling_factor(self.hparams["rope_scaling"]["factor"]) - - def write_tensors(self): - # Collect tensors from generator object - model_kv = dict(self.get_tensors()) - block_count = self.hparams["num_hidden_layers"] - head_count = self.hparams["num_attention_heads"] - tensor_map = gguf.get_tensor_name_map(self.model_arch, block_count) - head_count_kv = self.hparams.get("num_key_value_heads", head_count) - - for i in range(block_count): - if (w := model_kv.get(f"model.layers.{i}.self_attn.W_pack.weight")) is not None: - print(f"Unpacking and permuting layer {i}") - model_kv[f"model.layers.{i}.self_attn.q_proj.weight"] = \ - self._reverse_hf_permute_part(w, 0, head_count, head_count) - model_kv[f"model.layers.{i}.self_attn.k_proj.weight"] = \ - self._reverse_hf_permute_part(w, 1, head_count, head_count_kv) - model_kv[f"model.layers.{i}.self_attn.v_proj.weight"] = \ - self._reverse_hf_part(w, 2) - del model_kv[f"model.layers.{i}.self_attn.W_pack.weight"] - - for name, data_torch in model_kv.items(): - # we don't need these - if name.endswith(".rotary_emb.inv_freq"): - continue - - old_dtype = data_torch.dtype - - # convert any unsupported data types to float32 - if data_torch.dtype not in (torch.float16, torch.float32): - data_torch = data_torch.to(torch.float32) - - data = data_torch.squeeze().numpy() - - # map tensor names - new_name = tensor_map.get_name(name, try_suffixes=(".weight", ".bias")) - if new_name is None: - print(f"Can not map tensor {name!r}") - sys.exit() - - n_dims = len(data.shape) - data_dtype = data.dtype - - # if f32 desired, convert any float16 to float32 - if self.ftype == 0 and data_dtype == np.float16: - data = data.astype(np.float32) - - # TODO: Why cant we use these float16 as-is? There should be not reason to store float16 as float32 - if self.ftype == 1 and data_dtype == np.float16 and n_dims == 1: - data = data.astype(np.float32) - - # if f16 desired, convert any float32 2-dim weight tensors to float16 - if self.ftype == 1 and data_dtype == np.float32 and name.endswith(".weight") and n_dims == 2: - data = data.astype(np.float16) - - print(f"{name} -> {new_name}, n_dims = {n_dims}, {old_dtype} --> {data.dtype}") - self.gguf_writer.add_tensor(new_name, data) - - def _reverse_hf_permute(self, weights: Tensor, n_head: int, n_kv_head: int | None = None) -> Tensor: - if n_kv_head is not None and n_head != n_kv_head: - n_head //= n_kv_head - - return ( - weights.reshape(n_head, 2, weights.shape[0] // n_head // 2, *weights.shape[1:]) - .swapaxes(1, 2) - .reshape(weights.shape) - ) - - def _reverse_hf_permute_part( - self, weights: Tensor, n_part: int, n_head: int, n_head_kv: int | None = None, - ) -> Tensor: - r = weights.shape[0] // 3 - return self._reverse_hf_permute(weights[r * n_part:r * n_part + r, ...], n_head, n_head_kv) - - def _reverse_hf_part(self, weights: Tensor, n_part: int) -> Tensor: - r = weights.shape[0] // 3 - return weights[r * n_part:r * n_part + r, ...] - - -@Model.register("XverseForCausalLM") -class XverseModel(Model): - model_arch = gguf.MODEL_ARCH.XVERSE - - def set_vocab(self): - assert (self.dir_model / "tokenizer.json").is_file() - dir_model = self.dir_model - hparams = self.hparams - - tokens: list[bytearray] = [] - toktypes: list[int] = [] - - from transformers import AutoTokenizer - tokenizer = AutoTokenizer.from_pretrained(dir_model) - vocab_size = hparams.get("vocab_size", len(tokenizer.vocab)) - assert max(tokenizer.vocab.values()) < vocab_size - - reverse_vocab = {id_: encoded_tok for encoded_tok, id_ in tokenizer.vocab.items()} - added_vocab = tokenizer.get_added_vocab() - - for token_id in range(vocab_size): - token_text = reverse_vocab[token_id].encode('utf-8') - # replace "\x00" to string with length > 0 - if token_text == b"\x00": - toktype = gguf.TokenType.BYTE # special - token_text = f"<{token_text}>".encode('utf-8') - elif re.fullmatch(br"<0x[0-9A-Fa-f]{2}>", token_text): - toktype = gguf.TokenType.BYTE # special - elif reverse_vocab[token_id] in added_vocab: - if tokenizer.added_tokens_decoder[token_id].special: - toktype = gguf.TokenType.CONTROL - else: - toktype = gguf.TokenType.USER_DEFINED - else: - toktype = gguf.TokenType.NORMAL - - tokens.append(token_text) - toktypes.append(toktype) - - self.gguf_writer.add_tokenizer_model("llama") - self.gguf_writer.add_token_list(tokens) - self.gguf_writer.add_token_types(toktypes) - - special_vocab = gguf.SpecialVocab(dir_model, n_vocab=len(tokens)) - special_vocab.add_to_gguf(self.gguf_writer) - - def set_gguf_parameters(self): - block_count = self.hparams["num_hidden_layers"] - head_count = self.hparams["num_attention_heads"] - head_count_kv = self.hparams.get("num_key_value_heads", head_count) - hf_repo = self.hparams.get("_name_or_path", "") - - ctx_length = 0 - if "max_sequence_length" in self.hparams: - ctx_length = self.hparams["max_sequence_length"] - elif "max_position_embeddings" in self.hparams: - ctx_length = self.hparams["max_position_embeddings"] - elif "model_max_length" in self.hparams: - ctx_length = self.hparams["model_max_length"] - else: - print("gguf: can not find ctx length parameter.") - sys.exit() - - self.gguf_writer.add_name(self.dir_model.name) - self.gguf_writer.add_source_hf_repo(hf_repo) - self.gguf_writer.add_tensor_data_layout("Meta AI original pth") - self.gguf_writer.add_context_length(ctx_length) - self.gguf_writer.add_embedding_length(self.hparams["hidden_size"]) - self.gguf_writer.add_block_count(block_count) - self.gguf_writer.add_feed_forward_length(self.hparams["intermediate_size"]) - self.gguf_writer.add_rope_dimension_count(self.hparams["hidden_size"] // self.hparams["num_attention_heads"]) - self.gguf_writer.add_head_count(head_count) - self.gguf_writer.add_head_count_kv(head_count_kv) - self.gguf_writer.add_layer_norm_rms_eps(self.hparams["rms_norm_eps"]) - - if self.hparams.get("rope_scaling") is not None and "factor" in self.hparams["rope_scaling"]: - if self.hparams["rope_scaling"].get("type") == "linear": - self.gguf_writer.add_rope_scaling_type(gguf.RopeScalingType.LINEAR) - self.gguf_writer.add_rope_scaling_factor(self.hparams["rope_scaling"]["factor"]) - - def write_tensors(self): - # Collect tensors from generator object - model_kv = dict(self.get_tensors()) - block_count = self.hparams["num_hidden_layers"] - head_count = self.hparams["num_attention_heads"] - tensor_map = gguf.get_tensor_name_map(self.model_arch, block_count) - head_count_kv = self.hparams.get("num_key_value_heads", head_count) - - for name, data_torch in model_kv.items(): - # we don't need these - if name.endswith(".rotary_emb.inv_freq"): - continue - - old_dtype = data_torch.dtype - - # convert any unsupported data types to float32 - if data_torch.dtype not in (torch.float16, torch.float32): - data_torch = data_torch.to(torch.float32) - - # HF models permute some of the tensors, so we need to undo that - if name.endswith(("q_proj.weight")): - data_torch = self._reverse_hf_permute(data_torch, head_count, head_count) - if name.endswith(("k_proj.weight")): - data_torch = self._reverse_hf_permute(data_torch, head_count, head_count_kv) - - data = data_torch.squeeze().numpy() - - # map tensor names - new_name = tensor_map.get_name(name, try_suffixes=(".weight", ".bias")) - if new_name is None: - print(f"Can not map tensor {name!r}") - sys.exit() - - n_dims = len(data.shape) - data_dtype = data.dtype - - # if f32 desired, convert any float16 to float32 - if self.ftype == 0 and data_dtype == np.float16: - data = data.astype(np.float32) - - # TODO: Why cant we use these float16 as-is? There should be not reason to store float16 as float32 - if self.ftype == 1 and data_dtype == np.float16 and n_dims == 1: - data = data.astype(np.float32) - - # if f16 desired, convert any float32 2-dim weight tensors to float16 - if self.ftype == 1 and data_dtype == np.float32 and name.endswith(".weight") and n_dims == 2: - data = data.astype(np.float16) - - print(f"{name} -> {new_name}, n_dims = {n_dims}, {old_dtype} --> {data.dtype}") - self.gguf_writer.add_tensor(new_name, data) - - def _reverse_hf_permute(self, weights: Tensor, n_head: int, n_kv_head: int | None = None) -> Tensor: - if n_kv_head is not None and n_head != n_kv_head: - n_head //= n_kv_head - - return ( - weights.reshape(n_head, 2, weights.shape[0] // n_head // 2, *weights.shape[1:]) - .swapaxes(1, 2) - .reshape(weights.shape) - ) - - -@Model.register("FalconForCausalLM", "RWForCausalLM") -class FalconModel(Model): - model_arch = gguf.MODEL_ARCH.FALCON - - def set_gguf_parameters(self): - block_count = self.hparams.get("num_hidden_layers") - if block_count is None: - block_count = self.hparams["n_layer"] # old name - - n_head = self.hparams.get("num_attention_heads") - if n_head is None: - n_head = self.hparams["n_head"] # old name - - n_head_kv = self.hparams.get("num_kv_heads") - if n_head_kv is None: - n_head_kv = self.hparams.get("n_head_kv", 1) # old name - - self.gguf_writer.add_name("Falcon") - self.gguf_writer.add_context_length(2048) # not in config.json - self.gguf_writer.add_tensor_data_layout("jploski") # qkv tensor transform - self.gguf_writer.add_embedding_length(self.hparams["hidden_size"]) - self.gguf_writer.add_feed_forward_length(4 * self.hparams["hidden_size"]) - self.gguf_writer.add_block_count(block_count) - self.gguf_writer.add_head_count(n_head) - self.gguf_writer.add_head_count_kv(n_head_kv) - self.gguf_writer.add_layer_norm_eps(self.hparams["layer_norm_epsilon"]) - self.gguf_writer.add_file_type(self.ftype) - - def write_tensors(self): - block_count = self.hparams.get("num_hidden_layers") - if block_count is None: - block_count = self.hparams["n_layer"] # old name - - n_head = self.hparams.get("num_attention_heads") - if n_head is None: - n_head = self.hparams["n_head"] # old name - - n_head_kv = self.hparams.get("num_kv_heads") - if n_head_kv is None: - n_head_kv = self.hparams.get("n_head_kv", 1) # old name - - head_dim = self.hparams["hidden_size"] // n_head - tensor_map = gguf.get_tensor_name_map(self.model_arch, block_count) - - for name, data_torch in self.get_tensors(): - old_dtype = data_torch.dtype - - # convert any unsupported data types to float32 - if data_torch.dtype not in (torch.float16, torch.float32): - data_torch = data_torch.to(torch.float32) - - # QKV tensor transform - # The original query_key_value tensor contains n_head_kv "kv groups", - # each consisting of n_head/n_head_kv query weights followed by one key - # and one value weight (shared by all query heads in the kv group). - # This layout makes it a big pain to work with in GGML. - # So we rearrange them here,, so that we have n_head query weights - # followed by n_head_kv key weights followed by n_head_kv value weights, - # in contiguous fashion. - # ref: https://github.com/jploski/ggml/blob/falcon40b/examples/falcon/convert-hf-to-ggml.py - - if "query_key_value" in name: - qkv = data_torch.view(n_head_kv, n_head // n_head_kv + 2, head_dim, head_dim * n_head) - q = qkv[:, :-2].reshape(n_head * head_dim, head_dim * n_head) - k = qkv[:, [-2]].reshape(n_head_kv * head_dim, head_dim * n_head) - v = qkv[:, [-1]].reshape(n_head_kv * head_dim, head_dim * n_head) - data_torch = torch.cat((q, k, v)).reshape_as(data_torch) - - data = data_torch.squeeze().numpy() - - # map tensor names - new_name = tensor_map.get_name(name, try_suffixes=(".weight", ".bias")) - if new_name is None: - print(f"Can not map tensor {name!r}") - sys.exit() - - n_dims = len(data.shape) - data_dtype = data.dtype - - # if f32 desired, convert any float16 to float32 - if self.ftype == 0 and data_dtype == np.float16: - data = data.astype(np.float32) - - # TODO: Why cant we use these float16 as-is? There should be not reason to store float16 as float32 - if self.ftype == 1 and data_dtype == np.float16 and n_dims == 1: - data = data.astype(np.float32) - - # if f16 desired, convert any float32 2-dim weight tensors to float16 - if self.ftype == 1 and data_dtype == np.float32 and name.endswith(".weight") and n_dims == 2: - data = data.astype(np.float16) - - print(f"{new_name}, n_dims = {n_dims}, {old_dtype} --> {data.dtype}") - - self.gguf_writer.add_tensor(new_name, data) - - -@Model.register("GPTBigCodeForCausalLM") -class StarCoderModel(Model): - model_arch = gguf.MODEL_ARCH.STARCODER - - def set_gguf_parameters(self): - block_count = self.hparams["n_layer"] - - self.gguf_writer.add_name("StarCoder") - self.gguf_writer.add_context_length(self.hparams["n_positions"]) - self.gguf_writer.add_embedding_length(self.hparams["n_embd"]) - self.gguf_writer.add_feed_forward_length(4 * self.hparams["n_embd"]) - self.gguf_writer.add_block_count(block_count) - self.gguf_writer.add_head_count(self.hparams["n_head"]) - self.gguf_writer.add_head_count_kv(1) - self.gguf_writer.add_layer_norm_eps(self.hparams["layer_norm_epsilon"]) - self.gguf_writer.add_file_type(self.ftype) - - -@Model.register("GPTRefactForCausalLM") -class RefactModel(Model): - model_arch = gguf.MODEL_ARCH.REFACT - - def set_gguf_parameters(self): - hidden_dim = self.hparams["n_embd"] - inner_dim = 4 * hidden_dim - hidden_dim = int(2 * inner_dim / 3) - multiple_of = 256 - ff_dim = multiple_of * ((hidden_dim + multiple_of - 1) // multiple_of) - - block_count = self.hparams["n_layer"] - - self.gguf_writer.add_name("Refact") - # refact uses Alibi. So this is from config.json which might be used by training. - self.gguf_writer.add_context_length(self.hparams["n_positions"]) - self.gguf_writer.add_embedding_length(self.hparams["n_embd"]) - - self.gguf_writer.add_feed_forward_length(ff_dim) - self.gguf_writer.add_block_count(block_count) - self.gguf_writer.add_head_count(self.hparams["n_head"]) - self.gguf_writer.add_head_count_kv(1) - self.gguf_writer.add_layer_norm_rms_eps(self.hparams["layer_norm_epsilon"]) - self.gguf_writer.add_file_type(self.ftype) - - def write_tensors(self): - hidden_dim = self.hparams["n_embd"] - inner_dim = 4 * hidden_dim - hidden_dim = int(2 * inner_dim / 3) - multiple_of = 256 - ff_dim = multiple_of * ((hidden_dim + multiple_of - 1) // multiple_of) - n_head = self.hparams["n_head"] - n_head_kv = 1 - head_dim = self.hparams["n_embd"] // n_head - block_count = self.hparams["n_layer"] - - tensor_map = gguf.get_tensor_name_map(self.model_arch, block_count) - - tensors = dict(self.get_tensors()) - for i in range(block_count): - if (w := tensors.get(f"transformer.h.{i}.attn.kv.weight")) is not None: - tensors[f"model.layers.{i}.self_attn.k_proj.weight"] = w[:n_head_kv * head_dim] - tensors[f"model.layers.{i}.self_attn.v_proj.weight"] = w[n_head_kv * head_dim:] - del tensors[f"transformer.h.{i}.attn.kv.weight"] - if (w := tensors.get(f"transformer.h.{i}.attn.q.weight")) is not None: - tensors[f"model.layers.{i}.self_attn.q_proj.weight"] = w - del tensors[f"transformer.h.{i}.attn.q.weight"] - if (w := tensors.get(f"transformer.h.{i}.mlp.gate_up_proj.weight")) is not None: - tensors[f"model.layers.{i}.mlp.gate_proj.weight"] = w[:ff_dim] - tensors[f"model.layers.{i}.mlp.up_proj.weight"] = w[ff_dim:] - del tensors[f"transformer.h.{i}.mlp.gate_up_proj.weight"] - - for name, data_torch in tensors.items(): - old_dtype = data_torch.dtype - - # convert any unsupported data types to float32 - if data_torch.dtype not in (torch.float16, torch.float32): - data_torch = data_torch.to(torch.float32) - - data = data_torch.squeeze().numpy() - - # map tensor names - new_name = tensor_map.get_name(name, try_suffixes=(".weight",)) - if new_name is None: - print(f"Can not map tensor {name!r}") - sys.exit() - - n_dims = len(data.shape) - data_dtype = data.dtype - - # if f32 desired, convert any float16 to float32 - if self.ftype == 0 and data_dtype == np.float16: - data = data.astype(np.float32) - - # TODO: Why cant we use these float16 as-is? There should be not reason to store float16 as float32 - if self.ftype == 1 and data_dtype == np.float16 and n_dims == 1: - data = data.astype(np.float32) - - # if f16 desired, convert any float32 2-dim weight tensors to float16 - if self.ftype == 1 and data_dtype == np.float32 and name.endswith(".weight") and n_dims == 2: - data = data.astype(np.float16) - - print(f"{new_name}, n_dims = {n_dims}, {old_dtype} --> {data.dtype}") - - self.gguf_writer.add_tensor(new_name, data) - - -@Model.register("PersimmonForCausalLM") -class PersimmonModel(Model): - model_arch = gguf.MODEL_ARCH.PERSIMMON - - def set_gguf_parameters(self): - block_count = self.hparams.get("num_layers", self.hparams.get("num_hidden_layers")) - head_count = self.hparams["num_attention_heads"] - head_count_kv = head_count - hidden_size = self.hparams["hidden_size"] - - self.gguf_writer.add_name('persimmon-8b-chat') - self.gguf_writer.add_context_length(self.hparams["max_position_embeddings"]) - self.gguf_writer.add_embedding_length(hidden_size) - self.gguf_writer.add_block_count(block_count) - self.gguf_writer.add_feed_forward_length(self.hparams["intermediate_size"]) - - # NOTE: not sure about this change - why does the model not have a rope dimension count when it is smaller - # than the head size? - # ref: https://github.com/ggerganov/llama.cpp/pull/4889 - # self.gguf_writer.add_rope_dimension_count(hidden_size // head_count) - self.gguf_writer.add_rope_dimension_count(hidden_size // head_count // 2) - - self.gguf_writer.add_head_count(head_count) - self.gguf_writer.add_head_count_kv(head_count_kv) - self.gguf_writer.add_rope_freq_base(self.hparams["rope_theta"]) - self.gguf_writer.add_layer_norm_eps(self.hparams["layer_norm_eps"]) - - def set_vocab(self): - self._set_vocab_sentencepiece() - # self.gguf_writer.add_bos_token_id(71013) - # self.gguf_writer.add_eos_token_id(71013) - - def write_tensors(self): - block_count = self.hparams.get("num_layers", self.hparams.get("num_hidden_layers")) - tensor_map = gguf.get_tensor_name_map(self.model_arch, block_count) - - for name, data_torch in self.get_tensors(): - if name.endswith(".self_attention.rotary_emb.inv_freq"): - continue - old_dtype = data_torch.dtype - # TODO: FP16 conversion produces garbage outputs. (Q8_0 does not, so..?) - data = data_torch.to(torch.float32).squeeze().numpy() - new_name = tensor_map.get_name(name, try_suffixes=(".weight", ".bias")) - if new_name is None: - print(f"Can not map tensor {name!r}") - sys.exit() - n_dims = len(data.shape) - print(f"{new_name}, n_dims = {n_dims}, {old_dtype} --> {data.dtype}") - self.gguf_writer.add_tensor(new_name, data) - - -@Model.register("StableLmForCausalLM", "StableLMEpochForCausalLM", "LlavaStableLMEpochForCausalLM") -class StableLMModel(Model): - model_arch = gguf.MODEL_ARCH.STABLELM - - def set_vocab(self): - if (self.dir_model / "tokenizer.json").is_file(): - self._set_vocab_gpt2() - else: - # StableLM 2 1.6B uses a vocab in a similar format to Qwen's vocab - self._set_vocab_qwen() - - def set_gguf_parameters(self): - hparams = self.hparams - block_count = hparams["num_hidden_layers"] - - self.gguf_writer.add_name(self.dir_model.name) - self.gguf_writer.add_context_length(hparams["max_position_embeddings"]) - self.gguf_writer.add_embedding_length(hparams["hidden_size"]) - self.gguf_writer.add_block_count(block_count) - self.gguf_writer.add_feed_forward_length(hparams["intermediate_size"]) - rotary_factor = self.find_hparam(["partial_rotary_factor", "rope_pct"]) - self.gguf_writer.add_rope_dimension_count(int(rotary_factor * (hparams["hidden_size"] // hparams["num_attention_heads"]))) - self.gguf_writer.add_head_count(hparams["num_attention_heads"]) - self.gguf_writer.add_head_count_kv(hparams["num_key_value_heads"]) - self.gguf_writer.add_parallel_residual(hparams["use_parallel_residual"] if "use_parallel_residual" in hparams else True) - self.gguf_writer.add_layer_norm_eps(self.find_hparam(["layer_norm_eps", "norm_eps"])) - - def write_tensors(self): - block_count = self.hparams.get("n_layers", self.hparams.get("num_hidden_layers", self.hparams.get("n_layer"))) - tensor_map = gguf.get_tensor_name_map(self.model_arch, block_count) - n_head = self.hparams.get("num_attention_heads") - n_kv_head = self.hparams.get("num_key_value_heads") - q_norms = dict() - k_norms = dict() - for name, data_torch in self.get_tensors(): - # we don't need these - if name.endswith((".attention.masked_bias", ".attention.bias", ".attention.rotary_emb.inv_freq")): - continue - - old_dtype = data_torch.dtype - - # convert any unsupported data types to float32 - if data_torch.dtype not in (torch.float16, torch.float32): - data_torch = data_torch.to(torch.float32) - - data = data_torch.squeeze().numpy() - n_dims = len(data.shape) - if name.find("q_layernorm.norms") != -1: - q_norms[name] = data - if len(q_norms) >= (block_count * n_head): - self._stack_qk_norm(block_count, name, tensor_map, n_head, q_norms, n_dims, layer_name="q_layernorm") - continue - if name.find("k_layernorm.norms") != -1: - k_norms[name] = data - if len(k_norms) >= (block_count * n_kv_head): - self._stack_qk_norm(block_count, name, tensor_map, n_kv_head, k_norms, n_dims, layer_name="k_layernorm") - continue - - # map tensor names - new_name = tensor_map.get_name(name, try_suffixes=(".weight", ".bias")) - if new_name is None: - print(f"Can not map tensor {name!r}") - sys.exit() - - n_dims = len(data.shape) - data_dtype = data.dtype - - # if f32 desired, convert any float16 to float32 - if self.ftype == 0 and data_dtype == np.float16: - data = data.astype(np.float32) - - # TODO: Why cant we use these float16 as-is? There should be not reason to store float16 as float32 - if self.ftype == 1 and data_dtype == np.float16 and (n_dims == 1 or new_name.endswith("_norm.weight")): - data = data.astype(np.float32) - - # if f16 desired, convert any float32 2-dim weight tensors to float16 - if self.ftype == 1 and data_dtype == np.float32 and name.endswith(".weight") and not new_name.endswith("_norm.weight") and n_dims == 2: - data = data.astype(np.float16) - - print(f"{new_name}, n_dims = {n_dims}, {old_dtype} --> {data.dtype}") - - self.gguf_writer.add_tensor(new_name, data) - - def _stack_qk_norm(self, block_count, name, tensor_map, n_head, norms, n_dims, layer_name="q_layernorm"): - for bid in range(block_count): - datas = [] - for xid in range(n_head): - ename = f"model.layers.{bid}.self_attn.{layer_name}.norms.{xid}.weight" - datas.append(norms[ename]) - del norms[ename] - data = np.stack(datas, axis=0) - data_dtype = data.dtype - merged_name = f"model.layers.{bid}.self_attn.{layer_name}.weight" - new_name = tensor_map.get_name(merged_name, try_suffixes=(".weight", ".bias")) - if new_name is None: - print(f"Can not map tensor {name!r}") - sys.exit() - if self.ftype == 1 and data_dtype == np.float16 and (n_dims == 1 or new_name.endswith("_norm.weight")): - data = data.astype(np.float32) - - # if f16 desired, convert any float32 2-dim weight tensors to float16 - if self.ftype == 1 and data_dtype == np.float32 and name.endswith(".weight") and not new_name.endswith("_norm.weight") and n_dims == 2: - data = data.astype(np.float16) - - print(f"{new_name}, n_dims = {len(data.shape)}, shape = {data.shape} --> {data.dtype}") - - self.gguf_writer.add_tensor(new_name, data) - - -@Model.register("LlamaForCausalLM", "MistralForCausalLM", "MixtralForCausalLM") -class LlamaModel(Model): - model_arch = gguf.MODEL_ARCH.LLAMA - - def set_vocab(self): - try: - self. _set_vocab_sentencepiece() - except FileNotFoundError: - try: - self._set_vocab_llama_hf() - except (FileNotFoundError, TypeError): - # Llama 3 - self._set_vocab_gpt2() - - # Apply to CodeLlama only (and ignore for Llama 3 with a vocab size of 128256) - if self.hparams.get("vocab_size", 32000) == 32016: - special_vocab = gguf.SpecialVocab( - self.dir_model, load_merges=False, - special_token_types = ['prefix', 'suffix', 'middle', 'eot'] - ) - special_vocab._set_special_token("prefix", 32007) - special_vocab._set_special_token("suffix", 32008) - special_vocab._set_special_token("middle", 32009) - special_vocab._set_special_token("eot", 32010) - special_vocab.add_to_gguf(self.gguf_writer) - - def set_gguf_parameters(self): - super().set_gguf_parameters() - hparams = self.hparams - self.gguf_writer.add_vocab_size(hparams["vocab_size"]) - self.gguf_writer.add_rope_dimension_count(hparams["hidden_size"] // hparams["num_attention_heads"]) - - # Same as super class, but permuting q_proj, k_proj - def write_tensors(self): - block_count = self.hparams.get("n_layers", self.hparams.get("num_hidden_layers", self.hparams.get("n_layer"))) - tensor_map = gguf.get_tensor_name_map(self.model_arch, block_count) - n_head = self.hparams.get("num_attention_heads") - n_kv_head = self.hparams.get("num_key_value_heads") - n_experts = self.hparams.get("num_local_experts") - experts = dict() - for name, data_torch in self.get_tensors(): - # we don't need these - if name.endswith((".attention.masked_bias", ".attention.bias", ".attention.rotary_emb.inv_freq")): - continue - - old_dtype = data_torch.dtype - - # convert any unsupported data types to float32 - if data_torch.dtype not in (torch.float16, torch.float32): - data_torch = data_torch.to(torch.float32) - - data = data_torch.numpy() - - if name.endswith("q_proj.weight"): - data = permute(data, n_head, n_head) - if name.endswith("k_proj.weight"): - data = permute(data, n_head, n_kv_head) - - data = data.squeeze() - - # process the experts separately - if name.find("block_sparse_moe.experts") != -1: - experts[name] = data - if len(experts) >= n_experts: - # merge the experts into a single 3d tensor - for bid in range(block_count): - for wid in range(1, 4): - full = True - for xid in range(n_experts): - ename = f"model.layers.{bid}.block_sparse_moe.experts.{xid}.w{wid}.weight" - if ename not in experts: - full = False - break - if not full: - continue - - datas = [] - for xid in range(n_experts): - ename = f"model.layers.{bid}.block_sparse_moe.experts.{xid}.w{wid}.weight" - datas.append(experts[ename]) - del experts[ename] - - data = np.stack(datas, axis=0) - data_dtype = data.dtype - - if self.ftype == 0 and data_dtype == np.float16: - data = data.astype(np.float32) - - if self.ftype == 1 and data_dtype == np.float32: - data = data.astype(np.float16) - - merged_name = f"layers.{bid}.feed_forward.experts.w{wid}.weight" - - new_name = tensor_map.get_name(merged_name, try_suffixes=(".weight", ".bias")) - if new_name is None: - print(f"Can not map tensor {name!r}") - sys.exit() - - print(f"{new_name}, n_dims = {len(data.shape)}, shape = {data.shape} --> {data.dtype}") - - self.gguf_writer.add_tensor(new_name, data) - continue - - # map tensor names - new_name = tensor_map.get_name(name, try_suffixes=(".weight", ".bias")) - if new_name is None: - print(f"Can not map tensor {name!r}") - sys.exit() - - n_dims = len(data.shape) - data_dtype = data.dtype - - # if f32 desired, convert any float16 to float32 - if self.ftype == 0 and data_dtype == np.float16: - data = data.astype(np.float32) - - # 1d tensors need to be converted to float32 - if self.ftype == 1 and data_dtype == np.float16 and n_dims == 1: - data = data.astype(np.float32) - - # if f16 desired, convert any float32 2-dim weight tensors to float16 - if self.ftype == 1 and data_dtype == np.float32 and name.endswith(".weight") and n_dims == 2: - data = data.astype(np.float16) - - print(f"{new_name}, n_dims = {n_dims}, {old_dtype} --> {data.dtype}") - - self.gguf_writer.add_tensor(new_name, data) - - if len(experts) > 0: - raise ValueError(f"Unprocessed experts: {experts.keys()}") - - -@Model.register("GrokForCausalLM") -class GrokModel(Model): - model_arch = gguf.MODEL_ARCH.GROK - - def set_vocab(self): - self._set_vocab_sentencepiece() - - def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) - - def set_gguf_parameters(self): - super().set_gguf_parameters() - self.gguf_writer.add_name("Grok") - - def write_tensors(self): - block_count = self.hparams.get("n_layers", self.hparams.get("num_hidden_layers", self.hparams.get("n_layer"))) - tensor_map = gguf.get_tensor_name_map(self.model_arch, block_count) - n_experts = self.hparams.get("num_local_experts") - experts = dict() - for name, data_torch in self.get_tensors(): - # we don't need these - if name.endswith((".attention.masked_bias", ".attention.bias", ".attention.rotary_emb.inv_freq")): - continue - - old_dtype = data_torch.dtype - - # convert any unsupported data types to float32 - if data_torch.dtype not in (torch.float16, torch.float32): - data_torch = data_torch.to(torch.float32) - - data = data_torch.squeeze().numpy() - - # process the experts separately - if name.find(".moe.") != -1: - experts[name] = data - if len(experts) >= n_experts: - # merge the experts into a single 3d tensor - for bid in range(block_count): - for wid in ["linear", "linear_1", "linear_v"]: - full = True - for xid in range(n_experts): - ename = f"transformer.decoder_layer.{bid}.moe.{xid}.{wid}.weight" - if ename not in experts: - full = False - break - if not full: - continue - - datas = [] - for xid in range(n_experts): - ename = f"transformer.decoder_layer.{bid}.moe.{xid}.{wid}.weight" - datas.append(experts[ename]) - del experts[ename] - - data = np.stack(datas, axis=0) - data_dtype = data.dtype - - if self.ftype == 0 and data_dtype == np.float16: - data = data.astype(np.float32) - - if self.ftype == 1 and data_dtype == np.float32: - data = data.astype(np.float16) - - merged_name = f"transformer.decoder_layer.{bid}.moe.{wid}.weight" - - new_name = tensor_map.get_name(merged_name, try_suffixes=(".weight", ".bias")) - if new_name is None: - print(f"Can not map tensor {name!r}") - sys.exit() - - print(f"{new_name}, n_dims = {len(data.shape)}, shape = {data.shape} --> {data.dtype}") - - self.gguf_writer.add_tensor(new_name, data) - continue - - # map tensor names - new_name = tensor_map.get_name(name, try_suffixes=(".weight", ".bias")) - if new_name is None: - print(f"Can not map tensor {name!r}") - sys.exit() - - n_dims = len(data.shape) - data_dtype = data.dtype - - # if f32 desired, convert any float16 to float32 - if self.ftype == 0 and data_dtype == np.float16: - data = data.astype(np.float32) - - # TODO: Why cant we use these float16 as-is? There should be not reason to store float16 as float32 - if self.ftype == 1 and data_dtype == np.float16 and n_dims == 1: - data = data.astype(np.float32) - - # if f16 desired, convert any float32 2-dim weight tensors to float16 - if self.ftype == 1 and data_dtype == np.float32 and name.endswith(".weight") and n_dims == 2: - data = data.astype(np.float16) - - print(f"{new_name}, n_dims = {n_dims}, {old_dtype} --> {data.dtype}") - - self.gguf_writer.add_tensor(new_name, data) - - -@Model.register("DbrxForCausalLM") -class DbrxModel(Model): - model_arch = gguf.MODEL_ARCH.DBRX - - def set_gguf_parameters(self): - ffn_config = self.hparams["ffn_config"] - attn_config = self.hparams["attn_config"] - self.gguf_writer.add_name(self.hparams["model_type"]) - self.gguf_writer.add_block_count(self.hparams["n_layers"]) - - self.gguf_writer.add_context_length(self.hparams["max_seq_len"]) - self.gguf_writer.add_embedding_length(self.hparams["d_model"]) - self.gguf_writer.add_feed_forward_length(ffn_config["ffn_hidden_size"]) - - self.gguf_writer.add_head_count(self.hparams["n_heads"]) - self.gguf_writer.add_head_count_kv(attn_config["kv_n_heads"]) - - self.gguf_writer.add_rope_freq_base(attn_config["rope_theta"]) - - self.gguf_writer.add_clamp_kqv(attn_config["clip_qkv"]) - self.gguf_writer.add_file_type(self.ftype) - - self.gguf_writer.add_expert_count(ffn_config["moe_num_experts"]) - self.gguf_writer.add_expert_used_count(ffn_config["moe_top_k"]) - - self.gguf_writer.add_layer_norm_eps(1e-5) - - self.gguf_writer.add_file_type(self.ftype) - print(f"gguf: file type = {self.ftype}") - - def write_tensors(self): - block_count = self.hparams.get("n_layers") - tensor_map = gguf.get_tensor_name_map(self.model_arch, block_count) - for name, data_torch in self.get_tensors(): - n_expert = self.hparams["ffn_config"]["moe_num_experts"] - n_ff = self.hparams["ffn_config"]["ffn_hidden_size"] - n_embd = self.hparams["d_model"] - - # Specific behavior for experts tensors: suffix .weight, view as 3D and transpose - # original implementation expects (n_expert, n_ff, n_embd) for all experts weights - # But llama.cpp moe graph works differently - # AND the dimensions in ggml are typically in the reverse order of the pytorch dimensions - # so (n_expert, n_ff, n_embd) in pytorch is {n_embd, n_ff, n_expert} in ggml_tensor - exp_tensor_names = {"ffn.experts.mlp.w1": None, # LLM_TENSOR_FFN_GATE_EXPS ggml_tensor->ne{n_embd, n_ff, n_expert} - "ffn.experts.mlp.w2": (0, 2, 1), # LLM_TENSOR_FFN_DOWN_EXPS ggml_tensor->ne{n_ff, n_embd, n_expert} - "ffn.experts.mlp.v1": None} # LLM_TENSOR_FFN_UP_EXPS ggml_tensor->ne{n_embd, n_ff, n_expert} - experts = False - for exp_tensor_name in exp_tensor_names.keys(): - if name.find(exp_tensor_name) != -1 and name.find(".weight") == -1: - experts = True - data_torch = data_torch.view(n_expert, n_ff, n_embd) - if (permute_tensor := exp_tensor_names[exp_tensor_name]) is not None: - data_torch = data_torch.permute(*permute_tensor) - break - - old_dtype = data_torch.dtype - - # convert any unsupported data types to float32 - if data_torch.dtype not in (torch.float16, torch.float32): - data_torch = data_torch.to(torch.float32) - - data = data_torch.squeeze().numpy() - - # map tensor names - # In MoE models the ffn tensors are typically most of the model weights, - # and need to be quantizable. Quantize expects tensor names to be suffixed by .weight. - # Every other model has the weight names ending in .weight, - # let's assume that is the convention which is not the case for dbrx: - # https://huggingface.co/databricks/dbrx-instruct/blob/main/model.safetensors.index.json#L15 - new_name = tensor_map.get_name(name if not experts else name + ".weight", try_suffixes=(".weight",)) - if new_name is None: - print(f"Can not map tensor {name!r}") - sys.exit() - - n_dims = len(data.shape) - data_dtype = data.dtype - - # Most of the codebase that takes in 1D tensors only handles F32 tensors - # and most of the outputs tensors are F32. - if data_dtype != np.float32 and n_dims == 1: - print(f"Can not map tensor {name!r}: all 1D tensors must be F32") - sys.exit() - - # if f32 desired, convert any float16 to float32 - if self.ftype == 0 and data_dtype == np.float16: - data = data.astype(np.float32) - - # if f16 desired, convert any float32 2-dim weight tensors to float16 - if self.ftype == 1 and data_dtype == np.float32 and n_dims > 1: - data = data.astype(np.float16) - - print(f"{new_name}, n_dims = {n_dims}, shape = {data.shape}, {old_dtype} --> {data.dtype}") - - self.gguf_writer.add_tensor(new_name, data) - - -@Model.register("MiniCPMForCausalLM") -class MiniCPMModel(Model): - model_arch = gguf.MODEL_ARCH.MINICPM - - def set_gguf_parameters(self): - block_count = self.hparams["num_hidden_layers"] - self.gguf_writer.add_name("MiniCPM") - self.gguf_writer.add_context_length(self.hparams["max_position_embeddings"]) - self.gguf_writer.add_embedding_length(self.hparams["hidden_size"]) - self.gguf_writer.add_block_count(block_count) - self.gguf_writer.add_feed_forward_length(self.hparams["intermediate_size"]) - self.gguf_writer.add_rope_dimension_count(self.hparams["hidden_size"] // self.hparams["num_attention_heads"]) - self.gguf_writer.add_head_count(self.hparams["num_attention_heads"]) - self.gguf_writer.add_head_count_kv(self.hparams["num_key_value_heads"]) - self.gguf_writer.add_layer_norm_rms_eps(self.hparams["rms_norm_eps"]) - self.gguf_writer.add_file_type(self.ftype) - - def set_vocab(self): - self._set_vocab_llama_hf() - - def _reverse_hf_permute(self, weights: Tensor, n_head: int, n_kv_head: int | None = None) -> Tensor: - if n_kv_head is not None and n_head != n_kv_head: - n_head //= n_kv_head - - return ( - weights.reshape(n_head, 2, weights.shape[0] // n_head // 2, *weights.shape[1:]) - .swapaxes(1, 2) - .reshape(weights.shape) - ) - - def write_tensors(self): - block_count = self.hparams.get("n_layers", self.hparams.get("num_hidden_layers", self.hparams.get("n_layer"))) - tensor_map = gguf.get_tensor_name_map(self.model_arch, block_count) - n_head = self.hparams.get("num_attention_heads") - n_kv_head = self.hparams.get("num_key_value_heads") - for name, data_torch in self.get_tensors(): - # we don't need these - if name.endswith((".attention.masked_bias", ".attention.bias", ".attention.rotary_emb.inv_freq")): - continue - - old_dtype = data_torch.dtype - - # convert any unsupported data types to float32 - if data_torch.dtype not in (torch.float16, torch.float32): - data_torch = data_torch.to(torch.float32) - - # HF models permute some of the tensors, so we need to undo that - if name.endswith(("q_proj.weight")): - data_torch = self._reverse_hf_permute(data_torch, n_head, n_head) - if name.endswith(("k_proj.weight")): - data_torch = self._reverse_hf_permute(data_torch, n_head, n_kv_head) - - data = data_torch.squeeze().numpy() - - # map tensor names - new_name = tensor_map.get_name(name, try_suffixes=(".weight", ".bias")) - if new_name is None: - print(f"Can not map tensor {name!r}") - sys.exit() - - n_dims = len(data.shape) - data_dtype = data.dtype - - # if f32 desired, convert any float16 to float32 - if self.ftype == 0 and data_dtype == np.float16: - data = data.astype(np.float32) - - # TODO: Why cant we use these float16 as-is? There should be not reason to store float16 as float32 - if self.ftype == 1 and data_dtype == np.float16 and n_dims == 1: - data = data.astype(np.float32) - - # if f16 desired, convert any float32 2-dim weight tensors to float16 - if self.ftype == 1 and data_dtype == np.float32 and name.endswith(".weight") and n_dims == 2: - data = data.astype(np.float16) - - print(f"{new_name}, n_dims = {n_dims}, {old_dtype} --> {data.dtype}") - - self.gguf_writer.add_tensor(new_name, data) - - -@Model.register("QWenLMHeadModel") -class QwenModel(Model): - model_arch = gguf.MODEL_ARCH.QWEN - - @staticmethod - def token_bytes_to_string(b): - from transformers.models.gpt2.tokenization_gpt2 import bytes_to_unicode - byte_encoder = bytes_to_unicode() - return ''.join([byte_encoder[ord(char)] for char in b.decode('latin-1')]) - - @staticmethod - def bpe(mergeable_ranks: dict[bytes, int], token: bytes, max_rank: int | None = None) -> list[bytes]: - parts = [bytes([b]) for b in token] - while True: - min_idx = None - min_rank = None - for i, pair in enumerate(zip(parts[:-1], parts[1:])): - rank = mergeable_ranks.get(pair[0] + pair[1]) - if rank is not None and (min_rank is None or rank < min_rank): - min_idx = i - min_rank = rank - if min_rank is None or (max_rank is not None and min_rank >= max_rank): - break - assert min_idx is not None - parts = parts[:min_idx] + [parts[min_idx] + parts[min_idx + 1]] + parts[min_idx + 2:] - return parts - - def set_vocab(self): - self._set_vocab_qwen() - - def set_gguf_parameters(self): - self.gguf_writer.add_name("Qwen") - self.gguf_writer.add_context_length(self.hparams["max_position_embeddings"]) - self.gguf_writer.add_block_count(self.hparams["num_hidden_layers"]) - self.gguf_writer.add_embedding_length(self.hparams["hidden_size"]) - self.gguf_writer.add_feed_forward_length(self.hparams["intermediate_size"]) - self.gguf_writer.add_rope_freq_base(self.hparams["rotary_emb_base"]) - self.gguf_writer.add_rope_dimension_count(self.hparams["hidden_size"] // self.hparams["num_attention_heads"]) - self.gguf_writer.add_head_count(self.hparams["num_attention_heads"]) - self.gguf_writer.add_layer_norm_rms_eps(self.hparams["layer_norm_epsilon"]) - - def write_tensors(self): - block_count = self.hparams["num_hidden_layers"] - model_kv = dict(self.get_tensors()) - tensor_map = gguf.get_tensor_name_map(self.model_arch, block_count) - for name, data_torch in model_kv.items(): - # we don't need these - if name.endswith(".rotary_emb.inv_freq"): - continue - - old_dtype = data_torch.dtype - - # convert any unsupported data types to float32 - if data_torch.dtype not in (torch.float16, torch.float32): - data_torch = data_torch.to(torch.float32) - - data = data_torch.squeeze().numpy() - - # map tensor names - new_name = tensor_map.get_name(name, try_suffixes=(".weight", ".bias")) - if new_name is None: - print(f"Can not map tensor {name!r}") - sys.exit() - - n_dims = len(data.shape) - data_dtype = data.dtype - - # if f32 desired, convert any float16 to float32 - if self.ftype == 0 and data_dtype == np.float16: - data = data.astype(np.float32) - - # TODO: Why cant we use these float16 as-is? There should be not reason to store float16 as float32 - if self.ftype == 1 and data_dtype == np.float16 and n_dims == 1: - data = data.astype(np.float32) - - # if f16 desired, convert any float32 2-dim weight tensors to float16 - if self.ftype == 1 and data_dtype == np.float32 and name.endswith(".weight") and n_dims == 2: - data = data.astype(np.float16) - - print(f"{new_name}, n_dims = {n_dims}, {old_dtype} --> {data.dtype}") - self.gguf_writer.add_tensor(new_name, data) - - -@Model.register("Qwen2ForCausalLM") -class Qwen2Model(Model): - model_arch = gguf.MODEL_ARCH.QWEN2 - - def set_vocab(self): - try: - self._set_vocab_sentencepiece() - except FileNotFoundError: - self._set_vocab_gpt2() - - -@Model.register("Qwen2MoeForCausalLM") -class Qwen2MoeModel(Model): - model_arch = gguf.MODEL_ARCH.QWEN2MOE - - def set_gguf_parameters(self): - super().set_gguf_parameters() - if (n_experts := self.hparams.get("num_experts")) is not None: - self.gguf_writer.add_expert_count(n_experts) - - def write_tensors(self): - block_count = self.hparams.get("n_layers", self.hparams.get("num_hidden_layers", self.hparams.get("n_layer"))) - tensor_map = gguf.get_tensor_name_map(self.model_arch, block_count) - n_experts = self.hparams.get("num_experts") - experts = dict() - for name, data_torch in self.get_tensors(): - # we don't need these - if name.endswith((".attention.masked_bias", ".attention.bias", ".attention.rotary_emb.inv_freq")): - continue - - old_dtype = data_torch.dtype - - # convert any unsupported data types to float32 - if data_torch.dtype not in (torch.float16, torch.float32): - data_torch = data_torch.to(torch.float32) - - data = data_torch.squeeze().numpy() - - # process the experts separately - if name.find("experts") != -1: - experts[name] = data - if len(experts) >= n_experts * 3: - # merge the experts into a single 3d tensor - for bid in range(block_count): - for w_name in ["down_proj", "gate_proj", "up_proj"]: - full = True - for xid in range(n_experts): - ename = f"model.layers.{bid}.mlp.experts.{xid}.{w_name}.weight" - if ename not in experts: - full = False - break - if not full: - continue - - datas = [] - for xid in range(n_experts): - ename = f"model.layers.{bid}.mlp.experts.{xid}.{w_name}.weight" - datas.append(experts[ename]) - del experts[ename] - - data = np.stack(datas, axis=0) - data_dtype = data.dtype - - if self.ftype == 0 and data_dtype == np.float16: - data = data.astype(np.float32) - - if self.ftype == 1 and data_dtype == np.float32: - data = data.astype(np.float16) - - merged_name = f"model.layers.{bid}.mlp.experts.{w_name}.weight" - - new_name = tensor_map.get_name(merged_name, try_suffixes=(".weight", ".bias")) - if new_name is None: - print(f"Can not map tensor {name!r}") - sys.exit() - - print(f"{new_name}, n_dims = {len(data.shape)}, shape = {data.shape} --> {data.dtype}") - - self.gguf_writer.add_tensor(new_name, data) - continue - - # map tensor names - new_name = tensor_map.get_name(name, try_suffixes=(".weight", ".bias")) - if new_name is None: - print(f"Can not map tensor {name!r}") - sys.exit() - - n_dims = len(data.shape) - data_dtype = data.dtype - - # if f32 desired, convert any float16 to float32 - if self.ftype == 0 and data_dtype == np.float16: - data = data.astype(np.float32) - - # TODO: Why cant we use these float16 as-is? There should be not reason to store float16 as float32 - if self.ftype == 1 and data_dtype == np.float16 and (n_dims == 1 or new_name.endswith("_norm.weight")): - data = data.astype(np.float32) - - # if f16 desired, convert any float32 2-dim weight tensors to float16 - if self.ftype == 1 and data_dtype == np.float32 and name.endswith(".weight") and n_dims == 2: - data = data.astype(np.float16) - - print(f"{new_name}, n_dims = {n_dims}, shape = {data.shape}, {old_dtype} --> {data.dtype}") - - self.gguf_writer.add_tensor(new_name, data) - - if len(experts) > 0: - raise ValueError(f"Unprocessed experts: {experts.keys()}") - - -@Model.register("GPT2LMHeadModel") -class GPT2Model(Model): - model_arch = gguf.MODEL_ARCH.GPT2 - - def set_gguf_parameters(self): - self.gguf_writer.add_name(self.dir_model.name) - self.gguf_writer.add_block_count(self.hparams["n_layer"]) - self.gguf_writer.add_context_length(self.hparams["n_ctx"]) - self.gguf_writer.add_embedding_length(self.hparams["n_embd"]) - self.gguf_writer.add_feed_forward_length(4 * self.hparams["n_embd"]) - self.gguf_writer.add_head_count(self.hparams["n_head"]) - self.gguf_writer.add_layer_norm_eps(self.hparams["layer_norm_epsilon"]) - self.gguf_writer.add_file_type(self.ftype) - - def write_tensors(self): - block_count = self.hparams.get("n_layers", self.hparams.get("num_hidden_layers", self.hparams.get("n_layer"))) - tensor_map = gguf.get_tensor_name_map(self.model_arch, block_count) - - for name, data_torch in self.get_tensors(): - # we don't need these - if name.endswith((".attention.masked_bias", ".attention.bias", ".attention.rotary_emb.inv_freq", ".attn.bias", ".attn.masked_bias")): - continue - - if name.endswith((".c_attn.weight", ".c_proj.weight", ".c_fc.weight", ".c_proj.weight")): - data_torch = data_torch.transpose(1, 0) - - old_dtype = data_torch.dtype - - # convert any unsupported data types to float32 - if data_torch.dtype not in (torch.float16, torch.float32): - data_torch = data_torch.to(torch.float32) - - data = data_torch.squeeze().numpy() - - # map tensor names - new_name = tensor_map.get_name(name, try_suffixes=(".weight", ".bias")) - if new_name is None: - print(f"Can not map tensor {name!r}") - sys.exit() - - n_dims = len(data.shape) - data_dtype = data.dtype - - # if f32 desired, convert any float16 to float32 - if self.ftype == 0 and data_dtype == np.float16: - data = data.astype(np.float32) - - # TODO: Why cant we use these float16 as-is? There should be not reason to store float16 as float32 - if self.ftype == 1 and data_dtype == np.float16 and n_dims == 1: - data = data.astype(np.float32) - - # if f16 desired, convert any float32 2-dim weight tensors to float16 - if self.ftype == 1 and data_dtype == np.float32 and name.endswith(".weight") and n_dims == 2: - data = data.astype(np.float16) - - print(f"{new_name}, n_dims = {n_dims}, {old_dtype} --> {data.dtype}") - - self.gguf_writer.add_tensor(new_name, data) - - # note: GPT2 output is tied to (same as) wte in original model - if new_name == "token_embd.weight": - print(f"output.weight, n_dims = {n_dims}, {old_dtype} --> {data.dtype}") - self.gguf_writer.add_tensor("output.weight", data) - - -@Model.register("PhiForCausalLM") -class Phi2Model(Model): - model_arch = gguf.MODEL_ARCH.PHI2 - - def set_gguf_parameters(self): - block_count = self.find_hparam(["num_hidden_layers", "n_layer"]) - - rot_pct = self.find_hparam(["partial_rotary_factor"]) - n_embd = self.find_hparam(["hidden_size", "n_embd"]) - n_head = self.find_hparam(["num_attention_heads", "n_head"]) - - self.gguf_writer.add_name("Phi2") - self.gguf_writer.add_context_length(self.find_hparam(["n_positions", "max_position_embeddings"])) - - self.gguf_writer.add_embedding_length(n_embd) - self.gguf_writer.add_feed_forward_length(4 * n_embd) - self.gguf_writer.add_block_count(block_count) - self.gguf_writer.add_head_count(n_head) - self.gguf_writer.add_head_count_kv(n_head) - self.gguf_writer.add_layer_norm_eps(self.find_hparam(["layer_norm_epsilon", "layer_norm_eps"])) - self.gguf_writer.add_rope_dimension_count(int(rot_pct * n_embd) // n_head) - self.gguf_writer.add_file_type(self.ftype) - self.gguf_writer.add_add_bos_token(False) - - -@Model.register("Phi3ForCausalLM") -class Phi3MiniModel(Model): - model_arch = gguf.MODEL_ARCH.PHI3 - - def set_vocab(self): - from sentencepiece import SentencePieceProcessor - - tokenizer_path = self.dir_model / 'tokenizer.model' - - if not tokenizer_path.is_file(): - print(f'Error: Missing {tokenizer_path}', file=sys.stderr) - sys.exit(1) - - tokenizer = SentencePieceProcessor(str(tokenizer_path)) - - vocab_size = self.hparams.get('vocab_size', tokenizer.vocab_size()) - - tokens: list[bytes] = [f"[PAD{i}]".encode("utf-8") for i in range(vocab_size)] - scores: list[float] = [-10000.0] * vocab_size - toktypes: list[int] = [SentencePieceTokenTypes.UNKNOWN] * vocab_size - - for token_id in range(tokenizer.vocab_size()): - - piece = tokenizer.id_to_piece(token_id) - text = piece.encode("utf-8") - score = tokenizer.get_score(token_id) - - toktype = SentencePieceTokenTypes.NORMAL - if tokenizer.is_unknown(token_id): - toktype = SentencePieceTokenTypes.UNKNOWN - elif tokenizer.is_control(token_id): - toktype = SentencePieceTokenTypes.CONTROL - elif tokenizer.is_unused(token_id): - toktype = SentencePieceTokenTypes.UNUSED - elif tokenizer.is_byte(token_id): - toktype = SentencePieceTokenTypes.BYTE - - tokens[token_id] = text - scores[token_id] = score - toktypes[token_id] = toktype - - added_tokens_file = self.dir_model / 'added_tokens.json' - if added_tokens_file.is_file(): - with open(added_tokens_file, "r", encoding="utf-8") as f: - added_tokens_json = json.load(f) - - for key in added_tokens_json: - token_id = added_tokens_json[key] - if (token_id >= vocab_size): - print(f'ignore token {token_id}: id is out of range, max={vocab_size - 1}') - continue - - tokens[token_id] = key.encode("utf-8") - scores[token_id] = -1000.0 - toktypes[token_id] = SentencePieceTokenTypes.USER_DEFINED - - self.gguf_writer.add_tokenizer_model("llama") - self.gguf_writer.add_token_list(tokens) - self.gguf_writer.add_token_scores(scores) - self.gguf_writer.add_token_types(toktypes) - - special_vocab = gguf.SpecialVocab(self.dir_model, n_vocab=len(tokens)) - special_vocab.add_to_gguf(self.gguf_writer) - - def set_gguf_parameters(self): - block_count = self.find_hparam(["num_hidden_layers", "n_layer"]) - - rot_pct = 1.0 - n_embd = self.find_hparam(["hidden_size", "n_embd"]) - n_head = self.find_hparam(["num_attention_heads", "n_head"]) - rms_eps = self.find_hparam(["rms_norm_eps"]) - - self.gguf_writer.add_name("Phi3") - self.gguf_writer.add_context_length(self.find_hparam(["n_positions", "max_position_embeddings"])) - - self.gguf_writer.add_embedding_length(n_embd) - self.gguf_writer.add_feed_forward_length(8192) - self.gguf_writer.add_block_count(block_count) - self.gguf_writer.add_head_count(n_head) - self.gguf_writer.add_head_count_kv(n_head) - self.gguf_writer.add_layer_norm_rms_eps(rms_eps) - self.gguf_writer.add_rope_dimension_count(int(rot_pct * n_embd) // n_head) - self.gguf_writer.add_file_type(self.ftype) - - -@Model.register("PlamoForCausalLM") -class PlamoModel(Model): - model_arch = gguf.MODEL_ARCH.PLAMO - - def set_vocab(self): - self._set_vocab_sentencepiece() - - def set_gguf_parameters(self): - hparams = self.hparams - block_count = hparams["num_hidden_layers"] - - self.gguf_writer.add_name("PLaMo") - self.gguf_writer.add_context_length(4096) # not in config.json - self.gguf_writer.add_embedding_length(hparams["hidden_size"]) - self.gguf_writer.add_feed_forward_length(hparams["intermediate_size"]) - self.gguf_writer.add_block_count(block_count) - self.gguf_writer.add_head_count(hparams["num_attention_heads"]) - self.gguf_writer.add_head_count_kv(5) # hparams["num_key_value_heads"]) is wrong - self.gguf_writer.add_layer_norm_rms_eps(hparams["rms_norm_eps"]) - - def shuffle_attn_q_weight(self, data_torch): - assert data_torch.size() == (5120, 5120) - data_torch = data_torch.reshape(8, 5, 128, 5120) - data_torch = torch.permute(data_torch, (1, 0, 2, 3)) - data_torch = torch.reshape(data_torch, (5120, 5120)) - return data_torch - - def shuffle_attn_output_weight(self, data_torch): - assert data_torch.size() == (5120, 5120) - data_torch = data_torch.reshape(5120, 8, 5, 128) - data_torch = torch.permute(data_torch, (0, 2, 1, 3)) - data_torch = torch.reshape(data_torch, (5120, 5120)) - return data_torch - - def write_tensors(self): - block_count = self.hparams.get("num_layers", self.hparams.get("num_hidden_layers")) - tensor_map = gguf.get_tensor_name_map(self.model_arch, block_count) - - for name, data_torch in self.get_tensors(): - if "self_attn.rotary_emb.inv_freq" in name: - continue - - # map tensor names - new_name = tensor_map.get_name(name, try_suffixes=(".weight", ".bias")) - if new_name is None: - print(f"Can not map tensor {name!r}") - sys.exit() - - # shuffle for broadcasting of gqa in ggml_mul_mat - if new_name.endswith("attn_q.weight"): - data_torch = self.shuffle_attn_q_weight(data_torch) - elif new_name.endswith("attn_output.weight"): - data_torch = self.shuffle_attn_output_weight(data_torch) - - old_dtype = data_torch.dtype - - # convert any unsupported data types to float32 - if data_torch.dtype not in (torch.float16, torch.float32): - data_torch = data_torch.to(torch.float32) - - data = data_torch.squeeze().numpy() - - n_dims = len(data.shape) - data_dtype = data.dtype - - # if f32 desired, convert any float16 to float32 - if self.ftype == 0 and data_dtype == np.float16: - data = data.astype(np.float32) - - # TODO: Why cant we use these float16 as-is? There should be not reason to store float16 as float32 - if self.ftype == 1 and data_dtype == np.float16 and n_dims == 1: - data = data.astype(np.float32) - - # if f16 desired, convert any float32 2-dim weight tensors to float16 - if self.ftype == 1 and data_dtype == np.float32 and name.endswith(".weight") and n_dims == 2: - data = data.astype(np.float16) - - print(f"{new_name}, n_dims = {n_dims}, {old_dtype} --> {data.dtype}") - - self.gguf_writer.add_tensor(new_name, data) - - -@Model.register("CodeShellForCausalLM") -class CodeShellModel(Model): - model_arch = gguf.MODEL_ARCH.CODESHELL - - def set_gguf_parameters(self): - block_count = self.hparams["n_layer"] - - self.gguf_writer.add_name("CodeShell") - self.gguf_writer.add_context_length(self.hparams["n_positions"]) - self.gguf_writer.add_embedding_length(self.hparams["n_embd"]) - self.gguf_writer.add_feed_forward_length(4 * self.hparams["n_embd"]) - self.gguf_writer.add_block_count(block_count) - self.gguf_writer.add_head_count(self.hparams["n_head"]) - self.gguf_writer.add_head_count_kv(self.hparams["num_query_groups"]) - self.gguf_writer.add_layer_norm_eps(self.hparams["layer_norm_epsilon"]) - self.gguf_writer.add_file_type(self.ftype) - self.gguf_writer.add_rope_freq_base(10000.0) - self.gguf_writer.add_rope_scaling_type(gguf.RopeScalingType.LINEAR) - self.gguf_writer.add_rope_scaling_factor(1.0) - - def write_tensors(self): - block_count = self.hparams.get("n_layers", self.hparams.get("num_hidden_layers", self.hparams.get("n_layer"))) - tensor_map = gguf.get_tensor_name_map(self.model_arch, block_count) - tensors = dict(self.get_tensors()) - has_lm_head = "lm_head.weight" in tensors.keys() or "output.weight" in tensors.keys() - for name, data_torch in tensors.items(): - # we don't need these - if name.endswith((".attn.rotary_emb.inv_freq")): - continue - - old_dtype = data_torch.dtype - - # convert any unsupported data types to float32 - if data_torch.dtype not in (torch.float16, torch.float32): - data_torch = data_torch.to(torch.float32) - - data = data_torch.squeeze().numpy() - - # map tensor names - new_name = tensor_map.get_name(name, try_suffixes=(".weight", ".bias")) - if new_name is None: - print(f"Can not map tensor {name!r}") - sys.exit() - - n_dims = len(data.shape) - data_dtype = data.dtype - - # if f32 desired, convert any float16 to float32 - if self.ftype == 0 and data_dtype == np.float16: - data = data.astype(np.float32) - - # TODO: Why cant we use these float16 as-is? There should be not reason to store float16 as float32 - if self.ftype == 1 and data_dtype == np.float16 and n_dims == 1: - data = data.astype(np.float32) - - # if f16 desired, convert any float32 2-dim weight tensors to float16 - if self.ftype == 1 and data_dtype == np.float32 and name.endswith(".weight") and n_dims == 2: - data = data.astype(np.float16) - - print(f"{new_name}, n_dims = {n_dims}, {old_dtype} --> {data.dtype}") - - self.gguf_writer.add_tensor(new_name, data) - - if not has_lm_head and name == "transformer.wte.weight": - self.gguf_writer.add_tensor("output.weight", data) - print(name, f"=> output.weight, shape = {data.shape}, {old_dtype} --> {data.dtype}") - - -@Model.register("InternLM2ForCausalLM") -class InternLM2Model(Model): - model_arch = gguf.MODEL_ARCH.INTERNLM2 - - def set_vocab(self): - # (TODO): Is there a better way? - # Copy from _set_vocab_sentencepiece, The only difference is that we will treat the character - # \x00 specially and convert it into an emoji character to prevent it from being mistakenly - # recognized as an empty string in C++. - from sentencepiece import SentencePieceProcessor - from sentencepiece import sentencepiece_model_pb2 as model - - tokenizer_path = self.dir_model / 'tokenizer.model' - - tokens: list[bytes] = [] - scores: list[float] = [] - toktypes: list[int] = [] - - if not tokenizer_path.is_file(): - print(f'Error: Missing {tokenizer_path}', file=sys.stderr) - sys.exit(1) - - sentencepiece_model = model.ModelProto() - sentencepiece_model.ParseFromString(open(tokenizer_path, "rb").read()) - add_prefix = sentencepiece_model.normalizer_spec.add_dummy_prefix - - tokenizer = SentencePieceProcessor(str(tokenizer_path)) - vocab_size = self.hparams.get('vocab_size', tokenizer.vocab_size()) - - for token_id in range(vocab_size): - piece = tokenizer.id_to_piece(token_id) - text = piece.encode("utf-8") - score = tokenizer.get_score(token_id) - if text == b"\x00": - # (TODO): fixme - # Hack here and replace the \x00 characters. - print(f"InternLM2 convert token '{text}' to '🐉'!") - text = "🐉" - - toktype = SentencePieceTokenTypes.NORMAL - if tokenizer.is_unknown(token_id): - toktype = SentencePieceTokenTypes.UNKNOWN - elif tokenizer.is_control(token_id): - toktype = SentencePieceTokenTypes.CONTROL - elif tokenizer.is_unused(token_id): - toktype = SentencePieceTokenTypes.UNUSED - elif tokenizer.is_byte(token_id): - toktype = SentencePieceTokenTypes.BYTE - - tokens.append(text) - scores.append(score) - toktypes.append(toktype) - - added_tokens_file = self.dir_model / 'added_tokens.json' - if added_tokens_file.is_file(): - with open(added_tokens_file, "r", encoding="utf-8") as f: - added_tokens_json = json.load(f) - - for key in added_tokens_json: - tokens.append(key.encode("utf-8")) - scores.append(-1000.0) - toktypes.append(SentencePieceTokenTypes.USER_DEFINED) - - self.gguf_writer.add_tokenizer_model("llama") - self.gguf_writer.add_token_list(tokens) - self.gguf_writer.add_token_scores(scores) - self.gguf_writer.add_token_types(toktypes) - self.gguf_writer.add_add_space_prefix(add_prefix) - - special_vocab = gguf.SpecialVocab(self.dir_model, n_vocab=len(tokens)) - old_eos = special_vocab.special_token_ids["eos"] - if "chat" in os.path.basename(self.dir_model.absolute()): - # For the chat model, we replace the eos with '<|im_end|>'. - # TODO: this is a hack, should be fixed - # https://github.com/ggerganov/llama.cpp/pull/6745#issuecomment-2067687048 - special_vocab.special_token_ids["eos"] = self._try_get_sft_eos(tokenizer) - print(f"Replace eos:{old_eos} with a special token:{special_vocab.special_token_ids['eos']} \ -in chat mode so that the conversation can end normally.") - - special_vocab.add_to_gguf(self.gguf_writer) - - def _try_get_sft_eos(self, tokenizer): - unused_145_list = tokenizer.encode('[UNUSED_TOKEN_145]') - im_end_list = tokenizer.encode('<|im_end|>') - assert (len(unused_145_list) == 1) ^ (len(im_end_list) == 1) - if len(unused_145_list) == 1: - eos_token = unused_145_list[0] - if len(im_end_list) == 1: - eos_token = im_end_list[0] - return eos_token - - def _hf_permute_qk(self, weights, n_head: int, n_head_kv: int): - if n_head_kv is not None and n_head != n_head_kv: - n_head = n_head_kv - return (weights.reshape(n_head, 2, weights.shape[0] // n_head // 2, *weights.shape[1:]) - .swapaxes(1, 2) - .reshape(weights.shape)) - - def set_gguf_parameters(self): - self.gguf_writer.add_name("InternLM2") - self.gguf_writer.add_context_length(self.hparams["max_position_embeddings"]) - self.gguf_writer.add_block_count(self.hparams["num_hidden_layers"]) - self.gguf_writer.add_embedding_length(self.hparams["hidden_size"]) - self.gguf_writer.add_feed_forward_length(self.hparams["intermediate_size"]) - self.gguf_writer.add_rope_freq_base(self.hparams["rope_theta"]) - self.gguf_writer.add_head_count(self.hparams["num_attention_heads"]) - self.gguf_writer.add_layer_norm_rms_eps(self.hparams["rms_norm_eps"]) - self.gguf_writer.add_head_count_kv(self.hparams["num_key_value_heads"]) - - def post_write_tensors(self, tensor_map, name, data_torch): - old_dtype = data_torch.dtype - - # convert any unsupported data types to float32 - if data_torch.dtype not in (torch.float16, torch.float32): - data_torch = data_torch.to(torch.float32) - - data = data_torch.squeeze().numpy() - - # map tensor names - new_name = tensor_map.get_name(name, try_suffixes=(".weight", ".bias")) - if new_name is None: - print(f"Can not map tensor {name!r}") - sys.exit() - - n_dims = len(data.shape) - data_dtype = data.dtype - - # if f32 desired, convert any float16 to float32 - if self.ftype == 0 and data_dtype == np.float16: - data = data.astype(np.float32) - - # TODO: Why cant we use these float16 as-is? There should be not reason to store float16 as float32 - if self.ftype == 1 and data_dtype == np.float16 and n_dims == 1: - data = data.astype(np.float32) - - # if f16 desired, convert any float32 2-dim weight tensors to float16 - if self.ftype == 1 and data_dtype == np.float32 and name.endswith(".weight") and n_dims == 2: - data = data.astype(np.float16) - - print(f"{new_name}, n_dims = {n_dims}, {old_dtype} --> {data.dtype}") - self.gguf_writer.add_tensor(new_name, data) - - def write_tensors(self): - from einops import rearrange - - num_heads = self.hparams.get("num_attention_heads") - num_kv_heads = self.hparams.get("num_key_value_heads") - hidden_size = self.hparams.get("hidden_size") - q_per_kv = num_heads // num_kv_heads - head_dim = hidden_size // num_heads - num_groups = num_heads // q_per_kv - - block_count = self.hparams["num_hidden_layers"] - model_kv = dict(self.get_tensors()) - tensor_map = gguf.get_tensor_name_map(self.model_arch, block_count) - qkv_pattern = r"model\.layers\.(\d+)\.attention\.wqkv" - for name, data_torch in model_kv.items(): - # we don't need these - if name.endswith(".rotary_emb.inv_freq"): - continue - - if re.match(qkv_pattern, name): - bid = re.findall(qkv_pattern, name)[0] - qkv = data_torch - qkv = rearrange(qkv.T, " o (g n i) ->o g n i", g=num_groups, n=q_per_kv + 2, i=head_dim) - q, k, v = qkv[..., : q_per_kv, :], qkv[..., q_per_kv: q_per_kv + 1, :], qkv[..., q_per_kv + 1: q_per_kv + 2, :] - # The model weights of q and k equire additional reshape. - q = self._hf_permute_qk(rearrange(q, " o g n i -> o (g n i)").T, num_heads, num_heads) - k = self._hf_permute_qk(rearrange(k, " o g n i -> o (g n i)").T, num_heads, num_kv_heads) - v = rearrange(v, " o g n i -> o (g n i)").T - self.post_write_tensors(tensor_map, f"model.layers.{bid}.attention.wq.weight", q) - self.post_write_tensors(tensor_map, f"model.layers.{bid}.attention.wk.weight", k) - self.post_write_tensors(tensor_map, f"model.layers.{bid}.attention.wv.weight", v) - else: - self.post_write_tensors(tensor_map, name, data_torch) - - -@Model.register("BertModel", "CamembertModel") -class BertModel(Model): - model_arch = gguf.MODEL_ARCH.BERT - - def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) - self.vocab_size = None - - def set_gguf_parameters(self): - super().set_gguf_parameters() - self.gguf_writer.add_causal_attention(False) - - # get pooling path - pooling_path = None - module_path = self.dir_model / "modules.json" - if module_path.is_file(): - with open(module_path, encoding="utf-8") as f: - modules = json.load(f) - for mod in modules: - if mod["type"] == "sentence_transformers.models.Pooling": - pooling_path = mod["path"] - break - - # get pooling type - if pooling_path is not None: - with open(self.dir_model / pooling_path / "config.json", encoding="utf-8") as f: - pooling = json.load(f) - if pooling["pooling_mode_mean_tokens"]: - pooling_type = gguf.PoolingType.MEAN - elif pooling["pooling_mode_cls_token"]: - pooling_type = gguf.PoolingType.CLS - else: - raise NotImplementedError("Only MEAN and CLS pooling types supported") - self.gguf_writer.add_pooling_type(pooling_type) - - def set_vocab(self): - tokens, toktypes = self.get_basic_vocab() - self.vocab_size = len(tokens) - - # we need this to validate the size of the token_type embeddings - # though currently we are passing all zeros to the token_type embeddings - self.gguf_writer.add_token_type_count(2) # "Sequence A" or "Sequence B" - - # convert to phantom space vocab - def phantom(tok): - if tok.startswith("[") and tok.endswith("]"): - return tok - if tok.startswith("##"): - return tok[2:] - return "\u2581" + tok - tokens = list(map(phantom, tokens)) - - # add vocab to gguf - self.gguf_writer.add_tokenizer_model("bert") - self.gguf_writer.add_token_list(tokens) - self.gguf_writer.add_token_types(toktypes) - - # handle special tokens - special_vocab = gguf.SpecialVocab(self.dir_model, n_vocab=len(tokens)) - special_vocab.add_to_gguf(self.gguf_writer) - - def write_tensors(self): - tensor_map = gguf.get_tensor_name_map(self.model_arch, self.block_count) - tensors = dict(self.get_tensors()) - for name, data_torch in tensors.items(): - # we are only using BERT for embeddings so we don't need the pooling layer - if name in ("embeddings.position_ids", "pooler.dense.weight", "pooler.dense.bias"): - continue # we don't need these - - # map tensor names - new_name = tensor_map.get_name(name, try_suffixes=(".weight", ".bias")) - if new_name is None: - print(f"Can not map tensor {name!r}") - sys.exit() - - data = data_torch.squeeze().numpy() - n_dims = len(data.shape) - new_dtype: type[np.floating[Any]] - - if ( - self.ftype == 1 and name.endswith(".weight") and n_dims == 2 - and name != "embeddings.token_type_embeddings.weight" # not used with get_rows, must be F32 - ): - # if f16 desired, convert any float32 2-dim weight tensors to float16 - new_dtype = np.float16 - else: - # if f32 desired, convert any float16 to float32 - new_dtype = np.float32 - - print(f"{new_name}, n_dims = {n_dims}, {data_torch.dtype} --> {new_dtype}") - - if data.dtype != new_dtype: - data = data.astype(new_dtype) - - self.gguf_writer.add_tensor(new_name, data) - - -@Model.register("NomicBertModel") -class NomicBertModel(BertModel): - model_arch = gguf.MODEL_ARCH.NOMIC_BERT - - def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) - - # the HF config claims n_ctx=8192, but it uses RoPE scaling - self.hparams["n_ctx"] = 2048 - - # SwigLU activation - assert self.hparams["activation_function"] == "swiglu" - # this doesn't do anything in the HF version - assert self.hparams["causal"] is False - # no bias tensors - assert self.hparams["qkv_proj_bias"] is False - assert self.hparams["mlp_fc1_bias"] is False - assert self.hparams["mlp_fc2_bias"] is False - # norm at end of layer - assert self.hparams["prenorm"] is False - # standard RoPE - assert self.hparams["rotary_emb_fraction"] == 1.0 - assert self.hparams["rotary_emb_interleaved"] is False - assert self.hparams["rotary_emb_scale_base"] is None - - def set_gguf_parameters(self): - super().set_gguf_parameters() - self.gguf_writer.add_rope_freq_base(self.hparams["rotary_emb_base"]) - - -@Model.register("GemmaForCausalLM") -class GemmaModel(Model): - model_arch = gguf.MODEL_ARCH.GEMMA - - def set_vocab(self): - self._set_vocab_sentencepiece() - - # TODO: these special tokens should be exported only for the CodeGemma family - special_vocab = gguf.SpecialVocab(self.dir_model, load_merges=False, - special_token_types = ['prefix', 'suffix', 'middle', 'fsep', 'eot']) - special_vocab._set_special_token("prefix", 67) - special_vocab._set_special_token("suffix", 69) - special_vocab._set_special_token("middle", 68) - special_vocab._set_special_token("fsep", 70) - special_vocab._set_special_token("eot", 107) - special_vocab.add_to_gguf(self.gguf_writer) - - def set_gguf_parameters(self): - hparams = self.hparams - block_count = hparams["num_hidden_layers"] - - self.gguf_writer.add_name(self.dir_model.name) - self.gguf_writer.add_context_length(hparams["max_position_embeddings"]) - self.gguf_writer.add_embedding_length(hparams["hidden_size"]) - self.gguf_writer.add_block_count(block_count) - self.gguf_writer.add_feed_forward_length(hparams["intermediate_size"]) - self.gguf_writer.add_head_count(hparams["num_attention_heads"]) - self.gguf_writer.add_head_count_kv(self.hparams["num_key_value_heads"] if "num_key_value_heads" in hparams else hparams["num_attention_heads"]) - self.gguf_writer.add_layer_norm_rms_eps(self.hparams["rms_norm_eps"]) - self.gguf_writer.add_key_length(hparams["head_dim"]) - self.gguf_writer.add_value_length(hparams["head_dim"]) - self.gguf_writer.add_file_type(self.ftype) - - def write_tensors(self): - block_count = self.hparams.get("n_layers", self.hparams.get("num_hidden_layers", self.hparams.get("n_layer"))) - tensor_map = gguf.get_tensor_name_map(self.model_arch, block_count) - - for name, data_torch in self.get_tensors(): - # lm_head is not used in llama.cpp, while autoawq will include this tensor in model - # To prevent errors, skip loading lm_head.weight. - if name == "lm_head.weight": - print(f"Skipping get tensor {name!r} in safetensors so that convert can end normally.") - continue - - old_dtype = data_torch.dtype - - # convert any unsupported data types to float32 - if data_torch.dtype not in (torch.float16, torch.float32): - data_torch = data_torch.to(torch.float32) - - # ref: https://github.com/huggingface/transformers/blob/fc37f38915372c15992b540dfcbbe00a916d4fc6/src/transformers/models/gemma/modeling_gemma.py#L89 - if name.endswith("norm.weight"): - data_torch = data_torch + 1 - data = data_torch.squeeze().numpy() - - # map tensor names - new_name = tensor_map.get_name(name, try_suffixes=(".weight", ".bias")) - if new_name is None: - print(f"Can not map tensor {name!r}") - sys.exit() - - n_dims = len(data.shape) - data_dtype = data.dtype - - data = data.astype(np.float32) - - # if f16 desired, convert any float32 2-dim weight tensors to float16 - if self.ftype == 1 and data_dtype == np.float32 and name.endswith(".weight") and n_dims == 2: - data = data.astype(np.float16) - - print(f"{new_name}, n_dims = {n_dims}, {old_dtype} --> {data.dtype}") - - self.gguf_writer.add_tensor(new_name, data) - - -@Model.register("Starcoder2ForCausalLM") -class StarCoder2Model(Model): - model_arch = gguf.MODEL_ARCH.STARCODER2 - - -@Model.register("MambaForCausalLM", "MambaLMHeadModel") -class MambaModel(Model): - model_arch = gguf.MODEL_ARCH.MAMBA - - def set_vocab(self): - vocab_size = self.hparams["vocab_size"] - # Round vocab size to next multiple of 8 - pad_vocab = self.hparams.get("pad_vocab_size_multiple", 8) - # pad using ceiling division - # ref: https://stackoverflow.com/a/17511341/22827863 - vocab_size = -(vocab_size // -pad_vocab) * pad_vocab - self.hparams["vocab_size"] = vocab_size - - if (self.dir_model / "tokenizer.json").is_file(): - self._set_vocab_gpt2() - else: - # Use the GPT-NeoX tokenizer when no tokenizer files are present - tokenizer_path = Path(sys.path[0]) / "models" / "ggml-vocab-gpt-neox.gguf" - print(f"Using tokenizer from '{os.path.relpath(tokenizer_path, os.getcwd())}'") - neox_reader = gguf.GGUFReader(tokenizer_path, "r") - - field = neox_reader.get_field(gguf.Keys.Tokenizer.MODEL) - self.gguf_writer.add_tokenizer_model(bytes(field.parts[-1])) - - field = neox_reader.get_field(gguf.Keys.Tokenizer.LIST) - self.gguf_writer.add_token_list([bytes(field.parts[i]) for i in field.data][:vocab_size]) - - field = neox_reader.get_field(gguf.Keys.Tokenizer.TOKEN_TYPE) - self.gguf_writer.add_token_types([field.parts[i].tolist()[0] for i in field.data][:vocab_size]) - - field = neox_reader.get_field(gguf.Keys.Tokenizer.MERGES) - self.gguf_writer.add_token_merges([bytes(field.parts[i]) for i in field.data]) - - field = neox_reader.get_field(gguf.Keys.Tokenizer.BOS_ID) - self.gguf_writer.add_bos_token_id(field.parts[-1].tolist()[0]) - - field = neox_reader.get_field(gguf.Keys.Tokenizer.EOS_ID) - self.gguf_writer.add_eos_token_id(field.parts[-1].tolist()[0]) - - field = neox_reader.get_field(gguf.Keys.Tokenizer.UNK_ID) - self.gguf_writer.add_unk_token_id(field.parts[-1].tolist()[0]) - - def set_gguf_parameters(self): - d_model = self.find_hparam(["hidden_size", "d_model"]) - d_conv = self.find_hparam(["conv_kernel", "d_conv"], optional=True) or 4 - d_inner = self.find_hparam(["intermediate_size", "d_inner"], optional=True) or 2 * d_model - d_state = self.find_hparam(["state_size", "d_state"], optional=True) or 16 - # ceiling division - # ref: https://stackoverflow.com/a/17511341/22827863 - # ref: https://github.com/state-spaces/mamba/blob/ce59daea3a090d011d6476c6e5b97f6d58ddad8b/mamba_ssm/modules/mamba_simple.py#L58 - dt_rank = self.find_hparam(["time_step_rank", "dt_rank"], optional=True) or -(d_model // -16) - rms_norm_eps = self.find_hparam(["layer_norm_epsilon", "rms_norm_eps"], optional=True) or 1e-5 - - # Fail early for models which don't have a block expansion factor of 2 - assert d_inner == 2 * d_model - - self.gguf_writer.add_name(self.dir_model.name) - self.gguf_writer.add_context_length(2**20) # arbitrary value; for those who use the default - self.gguf_writer.add_embedding_length(d_model) - self.gguf_writer.add_feed_forward_length(0) # unused, but seemingly required when loading - self.gguf_writer.add_head_count(0) # unused, but seemingly required when loading - self.gguf_writer.add_block_count(self.hparams["n_layer"]) - self.gguf_writer.add_ssm_conv_kernel(d_conv) - self.gguf_writer.add_ssm_inner_size(d_inner) - self.gguf_writer.add_ssm_state_size(d_state) - self.gguf_writer.add_ssm_time_step_rank(dt_rank) - self.gguf_writer.add_layer_norm_rms_eps(rms_norm_eps) - self.gguf_writer.add_file_type(self.ftype) - - def write_tensors(self): - block_count = self.hparams["n_layer"] - tensor_map = gguf.get_tensor_name_map(self.model_arch, block_count) - - tok_embd = None - tok_embd_name = gguf.TENSOR_NAMES[gguf.MODEL_TENSOR.TOKEN_EMBD] + ".weight" - output_name = gguf.TENSOR_NAMES[gguf.MODEL_TENSOR.OUTPUT] + ".weight" - - for name, data_torch in self.get_tensors(): - old_dtype = data_torch.dtype - - # convert any unsupported data types to float32 - if data_torch.dtype not in (torch.float16, torch.float32): - data_torch = data_torch.to(torch.float32) - - # map tensor names - new_name = tensor_map.get_name(name, try_suffixes=(".weight", ".bias")) - if new_name is None: - print(f"Can not map tensor {name!r}") - sys.exit() - - if name.endswith(".A_log"): - print("A_log --> A ==> " + new_name) - data_torch = -torch.exp(data_torch) - - # assuming token_embd.weight is seen before output.weight - if tok_embd is not None and new_name == output_name: - if torch.equal(tok_embd, data_torch): - print(f"{output_name} is equivalent to {tok_embd_name}, omitting") - continue - if new_name == tok_embd_name: - tok_embd = data_torch - - data = data_torch.squeeze().numpy() - - n_dims = len(data.shape) - data_dtype = data.dtype - - # if f32 desired, convert any float16 to float32 - if self.ftype == 0 and data_dtype == np.float16: - data = data.astype(np.float32) - - # TODO: Why cant we use these float16 as-is? There should be not reason to store float16 as float32 - if self.ftype == 1 and data_dtype == np.float16 and n_dims == 1: - data = data.astype(np.float32) - - # if f16 desired, convert big float32 2-dim weight tensors to float16 - new_weight_name = new_name[:-len(".weight")] if new_name.endswith(".weight") else "" - if self.ftype == 1 and data_dtype == np.float32 and new_weight_name.endswith((".ssm_in", ".ssm_out", "token_embd", "output")) and n_dims == 2: - data = data.astype(np.float16) - - print(f"{new_name}, n_dims = {n_dims}, {old_dtype} --> {data.dtype}") - - self.gguf_writer.add_tensor(new_name, data) - - -@Model.register("CohereForCausalLM") -class CommandR2Model(Model): - model_arch = gguf.MODEL_ARCH.COMMAND_R - - def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) - - # max_position_embeddings = 8192 in config.json but model was actually - # trained on 128k context length - self.hparams["max_position_embeddings"] = self.hparams["model_max_length"] - - def set_gguf_parameters(self): - super().set_gguf_parameters() - self.gguf_writer.add_logit_scale(self.hparams["logit_scale"]) - self.gguf_writer.add_rope_scaling_type(gguf.RopeScalingType.NONE) - - -@Model.register("OlmoForCausalLM") -@Model.register("OLMoForCausalLM") -class OlmoModel(Model): - model_arch = gguf.MODEL_ARCH.OLMO - - def set_gguf_parameters(self): - super().set_gguf_parameters() - self.gguf_writer.add_layer_norm_eps(1e-5) - if "clip_qkv" in self.hparams is not None: - self.gguf_writer.add_clamp_kqv(self.hparams["clip_qkv"]) - - # Same as super class, but permuting q_proj, k_proj - # Copied from: LlamaModel - def write_tensors(self): - block_count = self.hparams.get("n_layers", self.hparams.get("num_hidden_layers", self.hparams.get("n_layer"))) - tensor_map = gguf.get_tensor_name_map(self.model_arch, block_count) - n_head = self.hparams.get("num_attention_heads") - n_kv_head = self.hparams.get("num_key_value_heads") - for name, data_torch in self.get_tensors(): - old_dtype = data_torch.dtype - - # convert any unsupported data types to float32 - if data_torch.dtype not in (torch.float16, torch.float32): - data_torch = data_torch.to(torch.float32) - - data = data_torch.numpy() - - if name.endswith("q_proj.weight"): - data = permute(data, n_head, n_head) - if name.endswith("k_proj.weight"): - data = permute(data, n_head, n_kv_head) - - data = data.squeeze() - - # map tensor names - new_name = tensor_map.get_name(name, try_suffixes=(".weight", ".bias")) - if new_name is None: - print(f"Can not map tensor {name!r}") - sys.exit() - - n_dims = len(data.shape) - data_dtype = data.dtype - - # if f32 desired, convert any float16 to float32 - if self.ftype == 0 and data_dtype == np.float16: - data = data.astype(np.float32) - - # 1d tensors need to be converted to float32 - if self.ftype == 1 and data_dtype == np.float16 and n_dims == 1: - data = data.astype(np.float32) - - # if f16 desired, convert any float32 2-dim weight tensors to float16 - if self.ftype == 1 and data_dtype == np.float32 and n_dims == 2: - data = data.astype(np.float16) - - print(f"{new_name}, n_dims = {n_dims}, {old_dtype} --> {data.dtype}") - - self.gguf_writer.add_tensor(new_name, data) - - -###### CONVERSION LOGIC ###### - - -def parse_args() -> argparse.Namespace: - parser = argparse.ArgumentParser( - description="Convert a huggingface model to a GGML compatible file") - parser.add_argument( - "--vocab-only", action="store_true", - help="extract only the vocab", - ) - parser.add_argument( - "--awq-path", type=Path, default=None, - help="Path to scale awq cache file") - parser.add_argument( - "--outfile", type=Path, - help="path to write to; default: based on input", - ) - parser.add_argument( - "--outtype", type=str, choices=["f32", "f16"], default="f16", - help="output format - use f32 for float32, f16 for float16", - ) - parser.add_argument("--bigendian", action="store_true", help="model is executed on big endian machine") - parser.add_argument( - "model", type=Path, - help="directory containing model file", - ) - parser.add_argument("--use-temp-file", action="store_true", help="use the tempfile library while processing (helpful when running out of memory, process killed)") - - return parser.parse_args() - - -def main() -> None: - args = parse_args() - - dir_model = args.model - - if args.awq_path: - sys.path.insert(1, str(Path(__file__).parent / 'awq-py')) - from awq.apply_awq import add_scale_weights # type: ignore[import-not-found] - tmp_model_path = args.model / "weighted_model" - dir_model = tmp_model_path - if tmp_model_path.is_dir(): - print(f"{tmp_model_path} exists as a weighted model.") - else: - tmp_model_path.mkdir(parents=True, exist_ok=True) - print("Saving new weighted model ...") - add_scale_weights(str(args.model), str(args.awq_path), str(tmp_model_path)) - print(f"Saved weighted model at {tmp_model_path}.") - - if not dir_model.is_dir(): - print(f'Error: {args.model} is not a directory', file=sys.stderr) - sys.exit(1) - - ftype_map = { - "f32": gguf.GGMLQuantizationType.F32, - "f16": gguf.GGMLQuantizationType.F16, - } - - if args.outfile is not None: - fname_out = args.outfile - else: - # output in the same directory as the model by default - fname_out = dir_model / f'ggml-model-{args.outtype}.gguf' - - print(f"Loading model: {dir_model.name}") - - hparams = Model.load_hparams(dir_model) - - with torch.inference_mode(): - model_class = Model.from_model_architecture(hparams["architectures"][0]) - model_instance = model_class(dir_model, ftype_map[args.outtype], fname_out, args.bigendian, args.use_temp_file) - - print("Set model parameters") - model_instance.set_gguf_parameters() - - print("Set model tokenizer") - model_instance.set_vocab() - - if args.vocab_only: - print(f"Exporting model vocab to '{fname_out}'") - model_instance.write_vocab() - else: - print(f"Exporting model to '{fname_out}'") - model_instance.write() - - print(f"Model successfully exported to '{fname_out}'") - - -if __name__ == '__main__': - main() diff --git a/convert-llama-ggml-to-gguf.py b/convert-llama-ggml-to-gguf.py deleted file mode 100755 index cd9644fcb52..00000000000 --- a/convert-llama-ggml-to-gguf.py +++ /dev/null @@ -1,441 +0,0 @@ -#!/usr/bin/env python3 -from __future__ import annotations - -import argparse -import os -import struct -import sys -from enum import IntEnum -from pathlib import Path - -import numpy as np - -if 'NO_LOCAL_GGUF' not in os.environ: - sys.path.insert(1, str(Path(__file__).parent / 'gguf-py')) -import gguf - - -class GGMLFormat(IntEnum): - GGML = 0 - GGMF = 1 - GGJT = 2 - - -class GGMLFType(IntEnum): - ALL_F32 = 0 - MOSTLY_F16 = 1 - MOSTLY_Q4_0 = 2 - MOSTLY_Q4_1 = 3 - MOSTLY_Q4_1_SOME_F16 = 4 - MOSTLY_Q8_0 = 7 - MOSTLY_Q5_0 = 8 - MOSTLY_Q5_1 = 9 - MOSTLY_Q2_K = 10 - MOSTLY_Q3_K_S = 11 - MOSTLY_Q3_K_M = 12 - MOSTLY_Q3_K_L = 13 - MOSTLY_Q4_K_S = 14 - MOSTLY_Q4_K_M = 15 - MOSTLY_Q5_K_S = 16 - MOSTLY_Q5_K_M = 17 - MOSTLY_Q6_K = 18 - - -class Hyperparameters: - def __init__(self): - self.n_vocab = self.n_embd = self.n_mult = self.n_head = 0 - self.n_layer = self.n_rot = self.n_ff = 0 - self.ftype = GGMLFType.ALL_F32 - - def set_n_ff(self, model): - ff_tensor_idx = model.tensor_map.get(b'layers.0.feed_forward.w1.weight') - assert ff_tensor_idx is not None, 'Missing layer 0 FF tensor' - ff_tensor = model.tensors[ff_tensor_idx] - self.n_ff = ff_tensor.dims[1] - - def load(self, data, offset): - ( - self.n_vocab, - self.n_embd, - self.n_mult, - self.n_head, - self.n_layer, - self.n_rot, - ftype, - ) = struct.unpack('<7I', data[offset:offset + (4 * 7)]) - try: - self.ftype = GGMLFType(ftype) - except ValueError: - raise ValueError(f'Invalid ftype {ftype}') - return 4 * 7 - - def __str__(self): - return f'' - - -class Vocab: - def __init__(self, load_scores = True): - self.items = [] - self.load_scores = load_scores - - def load(self, data, offset, n_vocab): - orig_offset = offset - for _ in range(n_vocab): - itemlen = struct.unpack('= 0 and n_dims <= 4, f'Invalid tensor dimensions {n_dims}' - assert name_len < 4096, 'Absurd tensor name length' - quant = gguf.GGML_QUANT_SIZES.get(dtype) - assert quant is not None, 'Unknown tensor type' - (blksize, tysize) = quant - offset += 12 - self.dtype= dtype - self.dims = struct.unpack(f'<{n_dims}I', data[offset:offset + (4 * n_dims)]) - offset += 4 * n_dims - self.name = bytes(data[offset:offset + name_len]) - offset += name_len - pad = ((offset + 31) & ~31) - offset if self.use_padding else 0 - offset += pad - n_elems = np.prod(self.dims) - n_bytes = np.int64(np.int64(n_elems) * np.int64(tysize)) // np.int64(blksize) - self.start_offset = offset - self.len_bytes = n_bytes - offset += n_bytes - # print(n_dims, name_len, dtype, self.dims, self.name, pad) - return offset - orig_offset - - -class GGMLModel: - def __init__(self): - self.hyperparameters = None - self.vocab = None - self.tensor_map = {} - self.tensors = [] - - def validate_header(self, data, offset): - magic = bytes(data[offset:offset + 4]) - if magic == b'GGUF': - raise ValueError('File is already in GGUF format.') - if magic == b'lmgg': - self.file_format = GGMLFormat.GGML - self.format_version = 1 - return 4 - version = struct.unpack(' 3: - raise ValueError(f'Cannot handle unexpected GGJT file version {version}') - self.file_format = GGMLFormat.GGJT - self.format_version = version - return 8 - raise ValueError(f"Unexpected file magic {magic!r}! This doesn't look like a GGML format file.") - - def validate_conversion(self, ftype): - err = '' - if (self.file_format < GGMLFormat.GGJT or self.format_version < 2): - if ftype not in (GGMLFType.ALL_F32, GGMLFType.MOSTLY_F16): - err = 'Quantizations changed in GGJTv2. Can only convert unquantized GGML files older than GGJTv2.' - elif (self.file_format == GGMLFormat.GGJT and self.format_version == 2): - if ftype in (GGMLFType.MOSTLY_Q4_0, GGMLFType.MOSTLY_Q4_1, - GGMLFType.MOSTLY_Q4_1_SOME_F16, GGMLFType.MOSTLY_Q8_0): - err = 'Q4 and Q8 quantizations changed in GGJTv3.' - if len(err) > 0: - raise ValueError(f'{err} Sorry, your {self.file_format.name}v{self.format_version} file of type {ftype.name} is not eligible for conversion.') - - def load(self, data, offset): - offset += self.validate_header(data, offset) - hp = Hyperparameters() - offset += hp.load(data, offset) - print(f'* File format: {self.file_format.name}v{self.format_version} with ftype {hp.ftype.name}') - self.validate_conversion(hp.ftype) - vocab = Vocab(load_scores = self.file_format > GGMLFormat.GGML) - offset += vocab.load(data, offset, hp.n_vocab) - tensors: list[Tensor] = [] - tensor_map = {} - while offset < len(data): - tensor = Tensor(use_padding = self.file_format > GGMLFormat.GGMF) - offset += tensor.load(data, offset) - tensor_map[tensor.name] = len(tensors) - tensors.append(tensor) - self.hyperparameters = hp - self.vocab = vocab - self.tensors = tensors - self.tensor_map = tensor_map - hp.set_n_ff(self) - return offset - - -class GGMLToGGUF: - def __init__(self, ggml_model, data, cfg, params_override = None, vocab_override = None, special_vocab = None): - hp = ggml_model.hyperparameters - self.model = ggml_model - self.data = data - self.cfg = cfg - self.params_override = params_override - self.vocab_override = vocab_override - self.special_vocab = special_vocab - if params_override is not None: - n_kv_head = params_override.n_head_kv - else: - if cfg.gqa == 1: - n_kv_head = hp.n_head - else: - gqa = float(cfg.gqa) - n_kv_head = None - for x in range(1, 256): - if float(hp.n_head) / float(x) == gqa: - n_kv_head = x - assert n_kv_head is not None, "Couldn't determine n_kv_head from GQA param" - print(f'- Guessed n_kv_head = {n_kv_head} based on GQA {cfg.gqa}') - self.n_kv_head = n_kv_head - self.name_map = gguf.get_tensor_name_map(gguf.MODEL_ARCH.LLAMA, ggml_model.hyperparameters.n_layer) - - def save(self): - print('* Preparing to save GGUF file') - gguf_writer = gguf.GGUFWriter( - self.cfg.output, - gguf.MODEL_ARCH_NAMES[gguf.MODEL_ARCH.LLAMA], - use_temp_file = False) - self.add_params(gguf_writer) - self.add_vocab(gguf_writer) - if self.special_vocab is not None: - self.special_vocab.add_to_gguf(gguf_writer) - self.add_tensors(gguf_writer) - print(" gguf: write header") - gguf_writer.write_header_to_file() - print(" gguf: write metadata") - gguf_writer.write_kv_data_to_file() - print(" gguf: write tensors") - gguf_writer.write_tensors_to_file() - gguf_writer.close() - - def add_params(self, gguf_writer): - hp = self.model.hyperparameters - cfg = self.cfg - if cfg.desc is not None: - desc = cfg.desc - else: - desc = f'converted from legacy {self.model.file_format.name}v{self.model.format_version} {hp.ftype.name} format' - try: - # Filenames aren't necessarily valid UTF8. - name = cfg.name if cfg.name is not None else cfg.input.name - except UnicodeDecodeError: - name = None - print('* Adding model parameters and KV items') - if name is not None: - gguf_writer.add_name(name) - gguf_writer.add_description(desc) - gguf_writer.add_file_type(int(hp.ftype)) - if self.params_override is not None: - po = self.params_override - assert po.n_embd == hp.n_embd, 'Model hyperparams mismatch' - assert po.n_layer == hp.n_layer, 'Model hyperparams mismatch' - assert po.n_head == hp.n_head, 'Model hyperparams mismatch' - gguf_writer.add_context_length (po.n_ctx) - gguf_writer.add_embedding_length (po.n_embd) - gguf_writer.add_block_count (po.n_layer) - gguf_writer.add_feed_forward_length (po.n_ff) - gguf_writer.add_rope_dimension_count(po.n_embd // po.n_head) - gguf_writer.add_head_count (po.n_head) - gguf_writer.add_head_count_kv (po.n_head_kv) - gguf_writer.add_layer_norm_rms_eps (po.f_norm_eps) - return - gguf_writer.add_context_length(cfg.context_length) - gguf_writer.add_embedding_length(hp.n_embd) - gguf_writer.add_block_count(hp.n_layer) - gguf_writer.add_feed_forward_length(hp.n_ff) - gguf_writer.add_rope_dimension_count(hp.n_embd // hp.n_head) - gguf_writer.add_head_count(hp.n_head) - gguf_writer.add_head_count_kv(self.n_kv_head) - gguf_writer.add_layer_norm_rms_eps(float(cfg.eps)) - - def add_vocab(self, gguf_writer): - hp = self.model.hyperparameters - gguf_writer.add_tokenizer_model('llama') - tokens = [] - scores = [] - toktypes = [] - if self.vocab_override is not None: - vo = self.vocab_override - print('* Adding vocab item(s)') - for (idx, (vbytes, score, ttype)) in enumerate(vo.all_tokens()): - tokens.append(vbytes) - scores.append(score) - toktypes.append(ttype) - assert len(tokens) == hp.n_vocab, \ - f'Override vocab has a different number of items than hyperparameters - override = {len(tokens)} but n_vocab={hp.n_vocab}' - gguf_writer.add_token_list(tokens) - gguf_writer.add_token_scores(scores) - if len(toktypes) > 0: - gguf_writer.add_token_types(toktypes) - return - print(f'* Adding {hp.n_vocab} vocab item(s)') - assert len(self.model.vocab.items) >= 3, 'Cannot handle unexpectedly short model vocab' - for (tokid, (vbytes, vscore)) in enumerate(self.model.vocab.items): - tt = 1 # Normal - # Special handling for UNK, BOS, EOS tokens. - if tokid <= 2: - if tokid == 0: - vbytes = b'' - tt = 2 - elif tokid == 1: - vbytes = b'' - tt = 3 - else: - vbytes = b'' - tt = 3 - elif len(vbytes) == 0: - tt = 3 # Control - elif tokid >= 3 and tokid <= 258 and len(vbytes) == 1: - vbytes = bytes(f'<0x{vbytes[0]:02X}>', encoding = 'UTF-8') - tt = 6 # Byte - else: - vbytes = vbytes.replace(b' ', b'\xe2\x96\x81') - toktypes.append(tt) - tokens.append(vbytes) - scores.append(vscore) - gguf_writer.add_token_list(tokens) - gguf_writer.add_token_scores(scores) - gguf_writer.add_token_types(toktypes) - gguf_writer.add_unk_token_id(0) - gguf_writer.add_bos_token_id(1) - gguf_writer.add_eos_token_id(2) - - def add_tensors(self, gguf_writer): - tensor_map = self.name_map - data = self.data - print(f'* Adding {len(self.model.tensors)} tensor(s)') - for tensor in self.model.tensors: - name = str(tensor.name, 'UTF-8') - mapped_name = tensor_map.get_name(name, try_suffixes = (".weight", ".bias")) - assert mapped_name is not None, f'Bad name {name}' - tempdims = list(tensor.dims[:]) - if len(tempdims) > 1: - temp = tempdims[1] - tempdims[1] = tempdims[0] - tempdims[0] = temp - # print(f'+ {tensor.name} | {mapped_name} {tensor.dims} :: {tempdims}') - gguf_writer.add_tensor( - mapped_name, - data[tensor.start_offset:tensor.start_offset + tensor.len_bytes], - raw_shape = tempdims, - raw_dtype = tensor.dtype) - - -def handle_metadata(cfg, hp): - import convert - assert cfg.model_metadata_dir.is_dir(), 'Metadata dir is not a directory' - hf_config_path = cfg.model_metadata_dir / "config.json" - orig_config_path = cfg.model_metadata_dir / "params.json" - # We pass a fake model here. "original" mode will check the shapes of some - # tensors if information is missing in the .json file: other than that, the - # model data isn't used so this should be safe (at least for now). - fakemodel = { - 'tok_embeddings.weight': convert.LazyTensor.__new__(convert.LazyTensor), - 'layers.0.feed_forward.w1.weight': convert.LazyTensor.__new__(convert.LazyTensor), - } - fakemodel['tok_embeddings.weight'].shape = [hp.n_vocab] - fakemodel['layers.0.feed_forward.w1.weight'].shape = [hp.n_ff] - if hf_config_path.exists(): - params = convert.Params.loadHFTransformerJson(fakemodel, hf_config_path) - elif orig_config_path.exists(): - params = convert.Params.loadOriginalParamsJson(fakemodel, orig_config_path) - else: - raise ValueError('Unable to load metadata') - vocab_path = Path(cfg.vocab_dir if cfg.vocab_dir is not None else cfg.model_metadata_dir) - vocab_factory = convert.VocabFactory(vocab_path) - vocab, special_vocab = vocab_factory.load_vocab(cfg.vocabtype.split(","), cfg.model_metadata_dir) - convert.check_vocab_size(params, vocab) - return params, vocab, special_vocab - - -def handle_args(): - parser = argparse.ArgumentParser(description = 'Convert GGML models to GGUF') - parser.add_argument('--input', '-i', type = Path, required = True, - help = 'Input GGMLv3 filename') - parser.add_argument('--output', '-o', type = Path, required = True, - help ='Output GGUF filename') - parser.add_argument('--name', - help = 'Set model name') - parser.add_argument('--desc', - help = 'Set model description') - parser.add_argument('--gqa', type = int, default = 1, - help = 'grouped-query attention factor (use 8 for LLaMA2 70B)') - parser.add_argument('--eps', default = '5.0e-06', - help = 'RMS norm eps: Use 1e-6 for LLaMA1 and OpenLLaMA, use 1e-5 for LLaMA2') - parser.add_argument('--context-length', '-c', type=int, default = 2048, - help = 'Default max context length: LLaMA1 is typically 2048, LLaMA2 is typically 4096') - parser.add_argument('--model-metadata-dir', '-m', type = Path, - help ='Load HuggingFace/.pth vocab and metadata from the specified directory') - parser.add_argument("--vocab-dir", type=Path, - help="directory containing tokenizer.model, if separate from model file - only meaningful with --model-metadata-dir") - parser.add_argument("--vocabtype", default="spm,hfft", - help="vocab format - only meaningful with --model-metadata-dir and/or --vocab-dir (default: spm,hfft)") - return parser.parse_args() - - -def main(): - cfg = handle_args() - print(f'* Using config: {cfg}') - print('\n=== WARNING === Be aware that this conversion script is best-effort. Use a native GGUF model if possible. === WARNING ===\n') - if cfg.model_metadata_dir is None and (cfg.gqa == 1 or cfg.eps == '5.0e-06'): - print('- Note: If converting LLaMA2, specifying "--eps 1e-5" is required. 70B models also need "--gqa 8".') - data = np.memmap(cfg.input, mode = 'r') - model = GGMLModel() - print('* Scanning GGML input file') - offset = model.load(data, 0) # noqa - print(f'* GGML model hyperparameters: {model.hyperparameters}') - vocab_override = None - params_override = None - special_vocab = None - if cfg.model_metadata_dir is not None: - (params_override, vocab_override, special_vocab) = handle_metadata(cfg, model.hyperparameters) - print('!! Note: When overriding params the --gqa, --eps and --context-length options are ignored.') - print(f'* Overriding params: {params_override}') - print(f'* Overriding vocab: {vocab_override}') - print(f'* Special vocab: {special_vocab}') - else: - print('\n=== WARNING === Special tokens may not be converted correctly. Use --model-metadata-dir if possible === WARNING ===\n') - if model.file_format == GGMLFormat.GGML: - print('! This is a very old GGML file that does not contain vocab scores. Strongly recommend using model metadata!') - converter = GGMLToGGUF( - model, data, cfg, - params_override = params_override, - vocab_override = vocab_override, - special_vocab = special_vocab - ) - converter.save() - print(f'* Successful completion. Output saved to: {cfg.output}') - - -if __name__ == '__main__': - main() diff --git a/convert-lora-to-ggml.py b/convert-lora-to-ggml.py deleted file mode 100755 index 9a9936dec8b..00000000000 --- a/convert-lora-to-ggml.py +++ /dev/null @@ -1,148 +0,0 @@ -#!/usr/bin/env python3 -from __future__ import annotations - -import json -import os -import struct -import sys -from pathlib import Path -from typing import Any, BinaryIO, Sequence - -import numpy as np -import torch - -if 'NO_LOCAL_GGUF' not in os.environ: - sys.path.insert(1, str(Path(__file__).parent / 'gguf-py' / 'gguf')) -import gguf - -NUMPY_TYPE_TO_FTYPE: dict[str, int] = {"float32": 0, "float16": 1} - - -def write_file_header(fout: BinaryIO, params: dict[str, Any]) -> None: - fout.write(b"ggla"[::-1]) # magic (ggml lora) - fout.write(struct.pack("i", 1)) # file version - fout.write(struct.pack("i", params["r"])) - # https://opendelta.readthedocs.io/en/latest/modules/deltas.html says that `lora_alpha` is an int - # but some models ship a float value instead - # let's convert to int, but fail if lossless conversion is not possible - assert ( - int(params["lora_alpha"]) == params["lora_alpha"] - ), "cannot convert float to int losslessly" - fout.write(struct.pack("i", int(params["lora_alpha"]))) - - -def write_tensor_header(fout: BinaryIO, name: str, shape: Sequence[int], data_type: np.dtype[Any]) -> None: - sname = name.encode("utf-8") - fout.write( - struct.pack( - "iii", - len(shape), - len(sname), - NUMPY_TYPE_TO_FTYPE[data_type.name], - ) - ) - fout.write(struct.pack("i" * len(shape), *shape[::-1])) - fout.write(sname) - fout.seek((fout.tell() + 31) & -32) - - -if __name__ == '__main__': - if len(sys.argv) < 2: - print(f"Usage: python {sys.argv[0]} [arch]") - print( - "Path must contain HuggingFace PEFT LoRA files 'adapter_config.json' and 'adapter_model.bin'" - ) - print(f"Arch must be one of {list(gguf.MODEL_ARCH_NAMES.values())} (default: llama)") - sys.exit(1) - - input_json = os.path.join(sys.argv[1], "adapter_config.json") - input_model = os.path.join(sys.argv[1], "adapter_model.bin") - output_path = os.path.join(sys.argv[1], "ggml-adapter-model.bin") - - if os.path.exists(input_model): - model = torch.load(input_model, map_location="cpu") - else: - input_model = os.path.join(sys.argv[1], "adapter_model.safetensors") - # lazy import load_file only if lora is in safetensors format. - from safetensors.torch import load_file - model = load_file(input_model, device="cpu") - - arch_name = sys.argv[2] if len(sys.argv) == 3 else "llama" - - if arch_name not in gguf.MODEL_ARCH_NAMES.values(): - print(f"Error: unsupported architecture {arch_name}") - sys.exit(1) - - arch = list(gguf.MODEL_ARCH_NAMES.keys())[list(gguf.MODEL_ARCH_NAMES.values()).index(arch_name)] - name_map = gguf.TensorNameMap(arch, 200) # 200 layers ought to be enough for anyone - - with open(input_json, "r") as f: - params = json.load(f) - - if params["peft_type"] != "LORA": - print(f"Error: unsupported adapter type {params['peft_type']}, expected LORA") - sys.exit(1) - - if params["fan_in_fan_out"] is True: - print("Error: param fan_in_fan_out is not supported") - sys.exit(1) - - if params["bias"] is not None and params["bias"] != "none": - print("Error: param bias is not supported") - sys.exit(1) - - # TODO: these seem to be layers that have been trained but without lora. - # doesn't seem widely used but eventually should be supported - if params["modules_to_save"] is not None and len(params["modules_to_save"]) > 0: - print("Error: param modules_to_save is not supported") - sys.exit(1) - - with open(output_path, "wb") as fout: - fout.truncate() - - write_file_header(fout, params) - for k, v in model.items(): - orig_k = k - if k.endswith(".default.weight"): - k = k.replace(".default.weight", ".weight") - if k in ["llama_proj.weight", "llama_proj.bias"]: - continue - if k.endswith("lora_A.weight"): - if v.dtype != torch.float16 and v.dtype != torch.float32: - v = v.float() - v = v.T - else: - v = v.float() - - t = v.detach().numpy() - - prefix = "base_model.model." - if k.startswith(prefix): - k = k[len(prefix) :] - - lora_suffixes = (".lora_A.weight", ".lora_B.weight") - if k.endswith(lora_suffixes): - suffix = k[-len(lora_suffixes[0]):] - k = k[: -len(lora_suffixes[0])] - else: - print(f"Error: unrecognized tensor name {orig_k}") - sys.exit(1) - - tname = name_map.get_name(k) - if tname is None: - print(f"Error: could not map tensor name {orig_k}") - print(" Note: the arch parameter must be specified if the model is not llama") - sys.exit(1) - - if suffix == ".lora_A.weight": - tname += ".weight.loraA" - elif suffix == ".lora_B.weight": - tname += ".weight.loraB" - else: - assert False - - print(f"{k} => {tname} {t.shape} {t.dtype} {t.nbytes/1024/1024:.2f}MB") - write_tensor_header(fout, tname, t.shape, t.dtype) - t.tofile(fout) - - print(f"Converted {input_json} and {input_model} to {output_path}") diff --git a/convert-persimmon-to-gguf.py b/convert-persimmon-to-gguf.py deleted file mode 100755 index 69be17f94ef..00000000000 --- a/convert-persimmon-to-gguf.py +++ /dev/null @@ -1,138 +0,0 @@ -#!/usr/bin/env python3 -from __future__ import annotations - -import argparse -import os -import sys -from pathlib import Path -from pprint import pprint - -import torch -from sentencepiece import SentencePieceProcessor - -if 'NO_LOCAL_GGUF' not in os.environ: - sys.path.insert(1, str(Path(__file__).parent / 'gguf-py')) -import gguf - - -def _flatten_dict(dct, tensors, prefix=None): - assert isinstance(dct, dict) - for key in dct.keys(): - new_prefix = prefix + '.' + key if prefix is not None else key - if isinstance(dct[key], torch.Tensor): - tensors[new_prefix] = dct[key] - elif isinstance(dct[key], dict): - _flatten_dict(dct[key], tensors, new_prefix) - else: - raise ValueError(type(dct[key])) - return None - - -def _get_sentencepiece_tokenizer_info(dir_model: Path): - tokenizer_path = dir_model / 'adept_vocab.model' - print('gguf: getting sentencepiece tokenizer from', tokenizer_path) - tokenizer = SentencePieceProcessor(str(tokenizer_path)) - print('gguf: adding tokens') - tokens: list[bytes] = [] - scores: list[float] = [] - toktypes: list[int] = [] - - for i in range(tokenizer.vocab_size()): - text: bytes - score: float - - piece = tokenizer.id_to_piece(i) - text = piece.encode("utf-8") - score = tokenizer.get_score(i) - - toktype = 1 - if tokenizer.is_unknown(i): - toktype = 2 - if tokenizer.is_control(i): - toktype = 3 - if tokenizer.is_unused(i): - toktype = 5 - if tokenizer.is_byte(i): - toktype = 6 - - tokens.append(text) - scores.append(score) - toktypes.append(toktype) - pass - return tokens, scores, toktypes - - -def main(): - parser = argparse.ArgumentParser(description="Convert a Persimmon model from Adept (e.g. Persimmon 8b chat) to a GGML compatible file") - parser.add_argument("--outfile", type=Path, help="path to write to; default: based on input") - parser.add_argument("--ckpt-path", type=Path, help="path to persimmon checkpoint .pt file") - parser.add_argument("--model-dir", type=Path, help="directory containing model e.g. 8b_chat_model_release") - parser.add_argument("--adept-inference-dir", type=str, help="path to adept-inference code directory") - args = parser.parse_args() - sys.path.append(str(args.adept_inference_dir)) - persimmon_model = torch.load(args.ckpt_path) - hparams = persimmon_model['args'] - pprint(hparams) - tensors: dict[str, torch.Tensor] = {} - _flatten_dict(persimmon_model['model'], tensors, None) - - arch = gguf.MODEL_ARCH.PERSIMMON - gguf_writer = gguf.GGUFWriter(args.outfile, gguf.MODEL_ARCH_NAMES[arch]) - - block_count = hparams.num_layers - head_count = hparams.num_attention_heads - head_count_kv = head_count - ctx_length = hparams.seq_length - hidden_size = hparams.hidden_size - - gguf_writer.add_name('persimmon-8b-chat') - gguf_writer.add_context_length(ctx_length) - gguf_writer.add_embedding_length(hidden_size) - gguf_writer.add_block_count(block_count) - gguf_writer.add_feed_forward_length(hparams.ffn_hidden_size) - # ref: https://github.com/ggerganov/llama.cpp/pull/4889/commits/eea19039fc52ea2dbd1aab45b59ab4e3e29a3443 - gguf_writer.add_rope_dimension_count(hidden_size // head_count // 2) - gguf_writer.add_head_count(head_count) - gguf_writer.add_head_count_kv(head_count_kv) - gguf_writer.add_rope_freq_base(hparams.rotary_emb_base) - gguf_writer.add_layer_norm_eps(hparams.layernorm_epsilon) - - tokens, scores, toktypes = _get_sentencepiece_tokenizer_info(args.model_dir) - gguf_writer.add_tokenizer_model('llama') - gguf_writer.add_token_list(tokens) - gguf_writer.add_token_scores(scores) - gguf_writer.add_token_types(toktypes) - gguf_writer.add_bos_token_id(71013) - gguf_writer.add_eos_token_id(71013) - - tensor_map = gguf.get_tensor_name_map(arch, block_count) - print(tensor_map) - for name in tensors.keys(): - data_torch = tensors[name] - if name.endswith(".self_attention.rotary_emb.inv_freq"): - continue - old_dtype = data_torch.dtype - # TODO: FP16 conversion produces garbage outputs. (Q8_0 does not, so..?) - data = data_torch.to(torch.float32).squeeze().numpy() - new_name = tensor_map.get_name(name, try_suffixes = (".weight", ".bias")) - if new_name is None: - print("Can not map tensor '" + name + "'") - sys.exit() - n_dims = len(data.shape) - print(new_name + ", n_dims = " + str(n_dims) + ", " + str(old_dtype) + " --> " + str(data.dtype)) - gguf_writer.add_tensor(new_name, data) - print("gguf: write header") - gguf_writer.write_header_to_file() - print("gguf: write metadata") - gguf_writer.write_kv_data_to_file() - print("gguf: write tensors") - gguf_writer.write_tensors_to_file() - - gguf_writer.close() - - print(f"gguf: model successfully exported to '{args.outfile}'") - print("") - - -if __name__ == '__main__': - main() diff --git a/convert.py b/convert.py deleted file mode 100755 index 1c700cf6a3d..00000000000 --- a/convert.py +++ /dev/null @@ -1,1555 +0,0 @@ -#!/usr/bin/env python3 -from __future__ import annotations - -import argparse -import concurrent.futures -import enum -import faulthandler -import functools -import itertools -import json -import math -import mmap -import os -import pickle -import re -import signal -import struct -import sys -import textwrap -import time -import zipfile -from abc import ABC, abstractmethod -from concurrent.futures import ProcessPoolExecutor, ThreadPoolExecutor -from dataclasses import dataclass -from pathlib import Path -from typing import TYPE_CHECKING, Any, Callable, ClassVar, IO, Iterable, Literal, Protocol, TypeVar, runtime_checkable - -import numpy as np -from sentencepiece import SentencePieceProcessor - -if 'NO_LOCAL_GGUF' not in os.environ: - sys.path.insert(1, str(Path(__file__).parent / 'gguf-py')) -import gguf - -if TYPE_CHECKING: - from typing_extensions import Self, TypeAlias - -if hasattr(faulthandler, 'register') and hasattr(signal, 'SIGUSR1'): - faulthandler.register(signal.SIGUSR1) - -NDArray: TypeAlias = 'np.ndarray[Any, Any]' - -ARCH = gguf.MODEL_ARCH.LLAMA - -DEFAULT_CONCURRENCY = 8 - -ADDED_TOKENS_FILE = 'added_tokens.json' -FAST_TOKENIZER_FILE = 'tokenizer.json' - -# -# data types -# - - -@dataclass(frozen=True) -class DataType: - name: str - dtype: np.dtype[Any] - valid_conversions: list[str] - - def elements_to_bytes(self, n_elements: int) -> int: - return n_elements * self.dtype.itemsize - - -@dataclass(frozen=True) -class UnquantizedDataType(DataType): - pass - - -DT_F16 = UnquantizedDataType('F16', dtype = np.dtype(np.float16), valid_conversions = ['F32', 'Q8_0']) -DT_F32 = UnquantizedDataType('F32', dtype = np.dtype(np.float32), valid_conversions = ['F16', 'Q8_0']) -DT_I32 = UnquantizedDataType('I32', dtype = np.dtype(np.int16), valid_conversions = []) -DT_BF16 = UnquantizedDataType('BF16', dtype = np.dtype(np.uint16), valid_conversions = ['F32', 'F16', 'Q8_0']) - - -@dataclass(frozen=True) -class QuantizedDataType(DataType): - block_size: int - quantized_dtype: np.dtype[Any] - ggml_type: gguf.GGMLQuantizationType - - def quantize(self, arr: NDArray) -> NDArray: - raise NotImplementedError(f'Quantization for {self.name} not implemented') - - def elements_to_bytes(self, n_elements: int) -> int: - assert n_elements % self.block_size == 0, f'Invalid number of elements {n_elements} for {self.name} with block size {self.block_size}' - return self.quantized_dtype.itemsize * (n_elements // self.block_size) - - -@dataclass(frozen=True) -class Q8_0QuantizedDataType(QuantizedDataType): - # Mini Q8_0 quantization in Python! - def quantize(self, arr: NDArray) -> NDArray: - assert arr.size % self.block_size == 0 and arr.size != 0, f'Bad array size {arr.size}' - assert arr.dtype == np.float32, f'Bad array type {arr.dtype}' - n_blocks = arr.size // self.block_size - blocks = arr.reshape((n_blocks, self.block_size)) - # Much faster implementation of block quantization contributed by @Cebtenzzre - - def quantize_blocks_q8_0(blocks: NDArray) -> Iterable[tuple[Any, Any]]: - d = abs(blocks).max(axis = 1) / np.float32(127) - with np.errstate(divide = 'ignore'): - qs = (blocks / d[:, None]).round() - qs[d == 0] = 0 - yield from zip(d, qs) - return np.fromiter(quantize_blocks_q8_0(blocks), count = n_blocks, dtype = self.quantized_dtype) - - -DT_Q8_0 = Q8_0QuantizedDataType('Q8_0', - dtype = np.dtype(np.float32), valid_conversions = [], - ggml_type = gguf.GGMLQuantizationType.Q8_0, block_size = 32, - quantized_dtype = np.dtype([('d', ' DataType: - dt = GGML_FILE_TYPE_TO_DATA_TYPE.get(self) - if dt is None: - raise ValueError(self) - # Convert all 1D tensors to F32. Most of the codebase that takes in 1D tensors only handles F32 tensors, and most of the outputs tensors are F32. - # Also The 1d tensors aren't much of a performance/size issue. So instead of having to have separate F32 and F16 implementations of both, just convert everything to F32 for now. - return dt if len(tensor.shape) > 1 else DT_F32 - - -GGML_FILE_TYPE_TO_DATA_TYPE: dict[GGMLFileType, DataType] = { - GGMLFileType.AllF32 : DT_F32, - GGMLFileType.MostlyF16 : DT_F16, - GGMLFileType.MostlyQ8_0: DT_Q8_0, -} - -# -# hparams loading -# - - -@dataclass -class Params: - n_vocab: int - n_embd: int - n_layer: int - n_ctx: int - n_ff: int - n_head: int - n_head_kv: int - n_experts: int | None = None - n_experts_used: int | None = None - f_norm_eps: float | None = None - - rope_scaling_type: gguf.RopeScalingType | None = None - f_rope_freq_base: float | None = None - f_rope_scale: float | None = None - n_orig_ctx: int | None = None - rope_finetuned: bool | None = None - - ftype: GGMLFileType | None = None - - # path to the directory containing the model files - path_model: Path | None = None - - @staticmethod - def guessed(model: LazyModel) -> Params: - # try transformer naming first - n_vocab, n_embd = model["model.embed_tokens.weight"].shape if "model.embed_tokens.weight" in model else model["tok_embeddings.weight"].shape - - # try transformer naming first - if "model.layers.0.self_attn.q_proj.weight" in model: - n_layer = next(i for i in itertools.count() if f"model.layers.{i}.self_attn.q_proj.weight" not in model) - elif "model.layers.0.self_attn.W_pack.weight" in model: # next: try baichuan naming - n_layer = next(i for i in itertools.count() if f"model.layers.{i}.self_attn.W_pack.weight" not in model) - else: - n_layer = next(i for i in itertools.count() if f"layers.{i}.attention.wq.weight" not in model) - - if n_layer < 1: - msg = """\ - failed to guess 'n_layer'. This model is unknown or unsupported. - Suggestion: provide 'config.json' of the model in the same directory containing model files.""" - raise KeyError(textwrap.dedent(msg)) - - n_head = n_embd // 128 # guessed - n_mult = 256 # guessed - - # TODO: verify this - n_ff = int(2 * (4 * n_embd) / 3) - n_ff = n_mult * ((n_ff + n_mult - 1) // n_mult) - - return Params( - n_vocab = n_vocab, - n_embd = n_embd, - n_layer = n_layer, - n_ctx = -1, - n_ff = n_ff, - n_head = n_head, - n_head_kv = n_head, - f_norm_eps = 1e-5, - ) - - @staticmethod - def loadHFTransformerJson(model: LazyModel, config_path: Path) -> Params: - with open(config_path) as f: - config = json.load(f) - - rope_scaling_type = f_rope_scale = n_orig_ctx = rope_finetuned = None - rope_scaling = config.get("rope_scaling") - - if rope_scaling is not None and (typ := rope_scaling.get("type")): - rope_factor = rope_scaling.get("factor") - f_rope_scale = rope_factor - if typ == "linear": - rope_scaling_type = gguf.RopeScalingType.LINEAR - elif typ == "yarn": - rope_scaling_type = gguf.RopeScalingType.YARN - n_orig_ctx = rope_scaling['original_max_position_embeddings'] - rope_finetuned = rope_scaling['finetuned'] - else: - raise NotImplementedError(f'Unknown rope scaling type: {typ}') - - if "max_sequence_length" in config: - n_ctx = config["max_sequence_length"] - elif "max_position_embeddings" in config: - n_ctx = config["max_position_embeddings"] - else: - msg = """\ - failed to guess 'n_ctx'. This model is unknown or unsupported. - Suggestion: provide 'config.json' of the model in the same directory containing model files.""" - raise KeyError(textwrap.dedent(msg)) - - n_experts = None - n_experts_used = None - - if "num_local_experts" in config: - n_experts = config["num_local_experts"] - n_experts_used = config["num_experts_per_tok"] - - return Params( - n_vocab = config["vocab_size"], - n_embd = config["hidden_size"], - n_layer = config["num_hidden_layers"], - n_ctx = n_ctx, - n_ff = config["intermediate_size"], - n_head = (n_head := config["num_attention_heads"]), - n_head_kv = config.get("num_key_value_heads", n_head), - n_experts = n_experts, - n_experts_used = n_experts_used, - f_norm_eps = config["rms_norm_eps"], - f_rope_freq_base = config.get("rope_theta"), - rope_scaling_type = rope_scaling_type, - f_rope_scale = f_rope_scale, - n_orig_ctx = n_orig_ctx, - rope_finetuned = rope_finetuned, - ) - - # LLaMA v2 70B params.json - # {"dim": 8192, "multiple_of": 4096, "ffn_dim_multiplier": 1.3, "n_heads": 64, "n_kv_heads": 8, "n_layers": 80, "norm_eps": 1e-05, "vocab_size": -1} - @staticmethod - def loadOriginalParamsJson(model: LazyModel, config_path: Path) -> Params: - with open(config_path) as f: - config = json.load(f) - - n_experts = None - n_experts_used = None - f_rope_freq_base = None - - # hack to determine LLaMA v1 vs v2 vs CodeLlama - if config.get("moe"): - # Mixtral - n_ctx = 32768 - elif config.get("rope_theta") == 1000000: - # CodeLlama - n_ctx = 16384 - elif config["norm_eps"] == 1e-05: - # LLaMA v2 - n_ctx = 4096 - else: - # LLaMA v1 - n_ctx = 2048 - - if "layers.0.feed_forward.w1.weight" in model: - n_ff = model["layers.0.feed_forward.w1.weight"].shape[0] - - if config.get("moe"): - n_ff = model["layers.0.feed_forward.experts.0.w1.weight"].shape[0] - n_experts = config["moe"]["num_experts"] - n_experts_used = config["moe"]["num_experts_per_tok"] - f_rope_freq_base = 1e6 - - return Params( - n_vocab = model["tok_embeddings.weight"].shape[0], - n_embd = config["dim"], - n_layer = config["n_layers"], - n_ctx = n_ctx, - n_ff = n_ff, - n_head = (n_head := config["n_heads"]), - n_head_kv = config.get("n_kv_heads", n_head), - n_experts = n_experts, - n_experts_used = n_experts_used, - f_norm_eps = config["norm_eps"], - f_rope_freq_base = config.get("rope_theta", f_rope_freq_base), - ) - - @staticmethod - def load(model_plus: ModelPlus) -> Params: - hf_config_path = model_plus.paths[0].parent / "config.json" - orig_config_path = model_plus.paths[0].parent / "params.json" - - if hf_config_path.exists(): - params = Params.loadHFTransformerJson(model_plus.model, hf_config_path) - elif orig_config_path.exists(): - params = Params.loadOriginalParamsJson(model_plus.model, orig_config_path) - elif model_plus.format != 'none': - params = Params.guessed(model_plus.model) - else: - raise ValueError('Cannot guess params when model format is none') - - params.path_model = model_plus.paths[0].parent - - return params - - -# -# vocab -# - -@runtime_checkable -class BaseVocab(Protocol): - tokenizer_model: ClassVar[str] - name: ClassVar[str] - - -class NoVocab(BaseVocab): - tokenizer_model = "no_vocab" - name = "no_vocab" - - def __repr__(self) -> str: - return "" - - -@runtime_checkable -class Vocab(BaseVocab, Protocol): - vocab_size: int - added_tokens_dict: dict[str, int] - added_tokens_list: list[str] - fname_tokenizer: Path - - def __init__(self, base_path: Path): ... - def all_tokens(self) -> Iterable[tuple[bytes, float, gguf.TokenType]]: ... - - -class BpeVocab(Vocab): - tokenizer_model = "gpt2" - name = "bpe" - - def __init__(self, base_path: Path): - added_tokens: dict[str, int] = {} - - if (fname_tokenizer := base_path / 'vocab.json').exists(): - # "slow" tokenizer - with open(fname_tokenizer, encoding="utf-8") as f: - self.vocab = json.load(f) - - try: - # FIXME: Verify that added tokens here _cannot_ overlap with the main vocab. - with open(base_path / ADDED_TOKENS_FILE, encoding="utf-8") as f: - added_tokens = json.load(f) - except FileNotFoundError: - pass - else: - # "fast" tokenizer - fname_tokenizer = base_path / FAST_TOKENIZER_FILE - - # if this fails, FileNotFoundError propagates to caller - with open(fname_tokenizer, encoding="utf-8") as f: - tokenizer_json = json.load(f) - - tokenizer_model: dict[str, Any] = tokenizer_json['model'] - if ( - tokenizer_model['type'] != 'BPE' or tokenizer_model.get('byte_fallback', False) - or tokenizer_json['decoder']['type'] != 'ByteLevel' - ): - raise FileNotFoundError('Cannot find GPT-2 BPE tokenizer') - - self.vocab = tokenizer_model["vocab"] - - if (added := tokenizer_json.get('added_tokens')) is not None: - # Added tokens here can be duplicates of the main vocabulary. - added_tokens = {item['content']: item['id'] - for item in added - if item['content'] not in self.vocab} - - vocab_size = len(self.vocab) - expected_ids = list(range(vocab_size, vocab_size + len(added_tokens))) - actual_ids = sorted(added_tokens.values()) - if expected_ids != actual_ids: - expected_end_id = vocab_size + len(actual_ids) - 1 - raise ValueError(f"Expected the {len(actual_ids)} added token ID(s) to be sequential in the range " - f"{vocab_size} - {expected_end_id}; got {actual_ids}") - - items = sorted(added_tokens.items(), key=lambda text_idx: text_idx[1]) - self.added_tokens_dict = added_tokens - self.added_tokens_list = [text for (text, idx) in items] - self.vocab_size_base = vocab_size - self.vocab_size = self.vocab_size_base + len(self.added_tokens_list) - self.fname_tokenizer = fname_tokenizer - - def bpe_tokens(self) -> Iterable[tuple[bytes, float, gguf.TokenType]]: - reverse_vocab = {id: encoded_tok for encoded_tok, id in self.vocab.items()} - - for i, _ in enumerate(self.vocab): - yield reverse_vocab[i], 0.0, gguf.TokenType.NORMAL - - def added_tokens(self) -> Iterable[tuple[bytes, float, gguf.TokenType]]: - for text in self.added_tokens_list: - score = -1000.0 - yield text.encode("utf-8"), score, gguf.TokenType.CONTROL - - def all_tokens(self) -> Iterable[tuple[bytes, float, gguf.TokenType]]: - yield from self.bpe_tokens() - yield from self.added_tokens() - - def __repr__(self) -> str: - return f"" - - -class SentencePieceVocab(Vocab): - tokenizer_model = "llama" - name = "spm" - - def __init__(self, base_path: Path): - added_tokens: dict[str, int] = {} - if (fname_tokenizer := base_path / 'tokenizer.model').exists(): - # normal location - try: - with open(base_path / ADDED_TOKENS_FILE, encoding="utf-8") as f: - added_tokens = json.load(f) - except FileNotFoundError: - pass - elif not (fname_tokenizer := base_path.parent / 'tokenizer.model').exists(): - # not found in alternate location either - raise FileNotFoundError('Cannot find tokenizer.model') - - self.sentencepiece_tokenizer = SentencePieceProcessor(str(fname_tokenizer)) - vocab_size = self.sentencepiece_tokenizer.vocab_size() - - new_tokens = {id: piece for piece, id in added_tokens.items() if id >= vocab_size} - expected_new_ids = list(range(vocab_size, vocab_size + len(new_tokens))) - actual_new_ids = sorted(new_tokens.keys()) - - if expected_new_ids != actual_new_ids: - raise ValueError(f"Expected new token IDs {expected_new_ids} to be sequential; got {actual_new_ids}") - - # Token pieces that were added to the base vocabulary. - self.added_tokens_dict = added_tokens - self.added_tokens_list = [new_tokens[id] for id in actual_new_ids] - self.vocab_size_base = vocab_size - self.vocab_size = self.vocab_size_base + len(self.added_tokens_list) - self.fname_tokenizer = fname_tokenizer - - def sentencepiece_tokens(self) -> Iterable[tuple[bytes, float, gguf.TokenType]]: - tokenizer = self.sentencepiece_tokenizer - for i in range(tokenizer.vocab_size()): - piece = tokenizer.id_to_piece(i) - text = piece.encode("utf-8") - score: float = tokenizer.get_score(i) - - toktype = gguf.TokenType.NORMAL - if tokenizer.is_unknown(i): - toktype = gguf.TokenType.UNKNOWN - if tokenizer.is_control(i): - toktype = gguf.TokenType.CONTROL - - # NOTE: I think added_tokens are user defined. - # ref: https://github.com/google/sentencepiece/blob/master/src/sentencepiece_model.proto - # if tokenizer.is_user_defined(i): toktype = gguf.TokenType.USER_DEFINED - - if tokenizer.is_unused(i): - toktype = gguf.TokenType.UNUSED - if tokenizer.is_byte(i): - toktype = gguf.TokenType.BYTE - - yield text, score, toktype - - def added_tokens(self) -> Iterable[tuple[bytes, float, gguf.TokenType]]: - for text in self.added_tokens_list: - score = -1000.0 - yield text.encode("utf-8"), score, gguf.TokenType.USER_DEFINED - - def all_tokens(self) -> Iterable[tuple[bytes, float, gguf.TokenType]]: - yield from self.sentencepiece_tokens() - yield from self.added_tokens() - - def __repr__(self) -> str: - return f"" - - -class LlamaHfVocab(Vocab): - tokenizer_model = "llama" - name = "hfft" - - def __init__(self, base_path: Path): - fname_tokenizer = base_path / FAST_TOKENIZER_FILE - # if this fails, FileNotFoundError propagates to caller - with open(fname_tokenizer, encoding='utf-8') as f: - tokenizer_json = json.load(f) - - # pre-check so we know if we need transformers - tokenizer_model: dict[str, Any] = tokenizer_json['model'] - is_llama3 = ( - tokenizer_model['type'] == 'BPE' and tokenizer_model.get('ignore_merges', False) - and not tokenizer_model.get('byte_fallback', True) - ) - if is_llama3: - raise TypeError('Llama 3 must be converted with BpeVocab') - - if not is_llama3 and ( - tokenizer_model['type'] != 'BPE' or not tokenizer_model.get('byte_fallback', False) - or tokenizer_json['decoder']['type'] != 'Sequence' - ): - raise FileNotFoundError('Cannot find Llama BPE tokenizer') - - try: - from transformers import AutoTokenizer - except ImportError as e: - raise ImportError( - "To use LlamaHfVocab, please install the `transformers` package. " - "You can install it with `pip install transformers`." - ) from e - - # Allow the tokenizer to default to slow or fast versions. - # Explicitly set tokenizer to use local paths. - self.tokenizer = AutoTokenizer.from_pretrained( - base_path, - cache_dir=base_path, - local_files_only=True, - ) - assert self.tokenizer.is_fast # assume tokenizer.json is used - - # Initialize lists and dictionaries for added tokens - self.added_tokens_list = [] - self.added_tokens_dict = dict() - self.added_tokens_ids = set() - - # Process added tokens - for tok, tokidx in sorted( - self.tokenizer.get_added_vocab().items(), key=lambda x: x[1] - ): - # Only consider added tokens that are not in the base vocabulary - if tokidx >= self.tokenizer.vocab_size: - self.added_tokens_list.append(tok) - self.added_tokens_dict[tok] = tokidx - self.added_tokens_ids.add(tokidx) - - # Store special tokens and their IDs - self.specials = { - tok: self.tokenizer.get_vocab()[tok] - for tok in self.tokenizer.all_special_tokens - } - self.special_ids = set(self.tokenizer.all_special_ids) - - # Set vocabulary sizes - self.vocab_size_base = self.tokenizer.vocab_size - self.vocab_size = self.vocab_size_base + len(self.added_tokens_list) - - self.fname_tokenizer = fname_tokenizer - - def hf_tokens(self) -> Iterable[tuple[bytes, float, gguf.TokenType]]: - reverse_vocab = { - id: encoded_tok for encoded_tok, id in self.tokenizer.get_vocab().items() - } - - for token_id in range(self.vocab_size_base): - # Skip processing added tokens here - if token_id in self.added_tokens_ids: - continue - - # Convert token text to bytes - token_text = reverse_vocab[token_id].encode("utf-8") - - # Yield token text, score, and type - yield token_text, self.get_token_score(token_id), self.get_token_type( - token_id, token_text, self.special_ids # Reuse already stored special IDs - ) - - def get_token_type(self, token_id: int, token_text: bytes, special_ids: set[int]) -> gguf.TokenType: - # Special case for byte tokens - if re.fullmatch(br"<0x[0-9A-Fa-f]{2}>", token_text): - return gguf.TokenType.BYTE - - # Determine token type based on whether it's a special token - return gguf.TokenType.CONTROL if token_id in special_ids else gguf.TokenType.NORMAL - - def get_token_score(self, token_id: int) -> float: - # Placeholder for actual logic to determine the token's score - # This needs to be implemented based on specific requirements - return -1000.0 # Default score - - def added_tokens(self) -> Iterable[tuple[bytes, float, gguf.TokenType]]: - for text in self.added_tokens_list: - if text in self.specials: - toktype = self.get_token_type(self.specials[text], b'', self.special_ids) - score = self.get_token_score(self.specials[text]) - else: - toktype = gguf.TokenType.USER_DEFINED - score = -1000.0 - - yield text.encode("utf-8"), score, toktype - - def has_newline_token(self): - return "<0x0A>" in self.tokenizer.vocab or "\n" in self.tokenizer.vocab - - def all_tokens(self) -> Iterable[tuple[bytes, float, gguf.TokenType]]: - yield from self.hf_tokens() - yield from self.added_tokens() - - def __repr__(self) -> str: - return f"" - - -# -# data loading -# TODO: reuse (probably move to gguf.py?) -# - - -def permute(weights: NDArray, n_head: int, n_head_kv: int) -> NDArray: - # print( "permute debug " + str(weights.shape[0]) + " x " + str(weights.shape[1]) + " nhead " + str(n_head) + " nheadkv " + str(n_kv_head) ) - if n_head_kv is not None and n_head != n_head_kv: - n_head = n_head_kv - return (weights.reshape(n_head, 2, weights.shape[0] // n_head // 2, *weights.shape[1:]) - .swapaxes(1, 2) - .reshape(weights.shape)) - - -class Tensor(ABC): - ndarray: NDArray - data_type: DataType - - @abstractmethod - def astype(self, data_type: DataType) -> Self: ... - @abstractmethod - def permute(self, n_head: int, n_head_kv: int) -> Self: ... - @abstractmethod - def permute_part(self, n_part: int, n_head: int, n_head_kv: int) -> Self: ... - @abstractmethod - def part(self, n_part: int) -> Self: ... - @abstractmethod - def to_ggml(self) -> GGMLCompatibleTensor: ... - - -def bf16_to_fp32(bf16_arr: np.ndarray[Any, np.dtype[np.uint16]]) -> NDArray: - assert bf16_arr.dtype == np.uint16, f"Input array should be of dtype uint16, but got {bf16_arr.dtype}" - fp32_arr = bf16_arr.astype(np.uint32) << 16 - return fp32_arr.view(np.float32) - - -class UnquantizedTensor(Tensor): - def __init__(self, ndarray: NDArray): - assert isinstance(ndarray, np.ndarray) - self.ndarray = ndarray - self.data_type = NUMPY_TYPE_TO_DATA_TYPE[ndarray.dtype] - - def astype(self, data_type: DataType) -> UnquantizedTensor: - dtype = data_type.dtype - if self.data_type == DT_BF16: - self.ndarray = bf16_to_fp32(self.ndarray) - return UnquantizedTensor(self.ndarray.astype(dtype)) - - def to_ggml(self) -> Self: - return self - - def permute_part(self, n_part: int, n_head: int, n_head_kv: int) -> UnquantizedTensor: - r = self.ndarray.shape[0] // 3 - return UnquantizedTensor(permute(self.ndarray[r * n_part : r * n_part + r, ...], n_head, n_head_kv)) - - def part(self, n_part: int) -> UnquantizedTensor: - r = self.ndarray.shape[0] // 3 - return UnquantizedTensor(self.ndarray[r * n_part : r * n_part + r, ...]) - - def permute(self, n_head: int, n_head_kv: int) -> UnquantizedTensor: - return UnquantizedTensor(permute(self.ndarray, n_head, n_head_kv)) - - -def load_unquantized(lazy_tensor: LazyTensor, expected_dtype: Any = None, convert: bool = False) -> NDArray: - tensor = lazy_tensor.load() - assert isinstance(tensor, UnquantizedTensor) - - # double-check: - actual_shape = list(tensor.ndarray.shape) - assert actual_shape == lazy_tensor.shape, (actual_shape, lazy_tensor.shape) - if expected_dtype is not None and expected_dtype != tensor.ndarray.dtype: - if convert: - tensor.ndarray = tensor.ndarray.astype(expected_dtype) - else: - raise ValueError(f'expected this tensor to have dtype {expected_dtype}, got {tensor.ndarray.dtype}') - - return tensor.ndarray - - -GGMLCompatibleTensor = UnquantizedTensor - - -@dataclass -class LazyTensor: - _load: Callable[[], Tensor] - shape: list[int] - data_type: DataType - description: str - - def load(self) -> Tensor: - ret = self._load() - # Should be okay if it maps to the same numpy type? - assert ret.data_type == self.data_type or (self.data_type.dtype == ret.data_type.dtype), \ - (self.data_type, ret.data_type, self.description) - return ret - - def astype(self, data_type: DataType) -> LazyTensor: - self.validate_conversion_to(data_type) - - def load() -> Tensor: - return self.load().astype(data_type) - return LazyTensor(load, self.shape, data_type, f'convert({data_type}) {self.description}') - - def validate_conversion_to(self, data_type: DataType) -> None: - if data_type != self.data_type and data_type.name not in self.data_type.valid_conversions: - raise ValueError(f'Cannot validate conversion from {self.data_type} to {data_type}.') - - -LazyModel: TypeAlias = 'dict[str, LazyTensor]' - - -@dataclass -class ModelPlus: - model: LazyModel - paths: list[Path] # Where this was read from. - format: Literal['ggml', 'torch', 'safetensors', 'none'] - vocab: BaseVocab | None # For GGML models (which have vocab built in), the vocab. - - -def merge_sharded(models: list[LazyModel]) -> LazyModel: - # Original LLaMA models have each file contain one part of each tensor. - # Use a dict instead of a set to preserve order. - names = {name: None for model in models for name in model} - - def convert(name: str) -> LazyTensor: - lazy_tensors = [model[name] for model in models] - if len(lazy_tensors) == 1: - # only one file; don't go through this procedure since there might - # be quantized tensors - return lazy_tensors[0] - if len(lazy_tensors[0].shape) == 1: - # the tensor is just duplicated in every file - return lazy_tensors[0] - if name.startswith('tok_embeddings.') or \ - name.endswith('.attention.wo.weight') or \ - name.endswith('.feed_forward.w2.weight'): - # split by columns - axis = 1 - else: - # split by rows - axis = 0 - concatenated_shape = list(lazy_tensors[0].shape) - concatenated_shape[axis] = sum(tensor.shape[axis] for tensor in lazy_tensors) - - def load() -> UnquantizedTensor: - ndarrays = [load_unquantized(tensor) for tensor in lazy_tensors] - concatenated = np.concatenate(ndarrays, axis=axis) - return UnquantizedTensor(concatenated) - description = 'concatenated[[' + '] | ['.join(lt.description for lt in lazy_tensors) + ']]' - return LazyTensor(load, concatenated_shape, lazy_tensors[0].data_type, description) - return {name: convert(name) for name in names} - - -def merge_multifile_models(models_plus: list[ModelPlus]) -> ModelPlus: - formats = set(mp.format for mp in models_plus) - assert len(formats) == 1, "different formats?" - format = formats.pop() - paths = [path for mp in models_plus for path in mp.paths] - # Use the first non-None vocab, if any. - try: - vocab = next(mp.vocab for mp in models_plus if mp.vocab is not None) - except StopIteration: - vocab = None - - if any("model.embed_tokens.weight" in mp.model for mp in models_plus): - # Transformers models put different tensors in different files, but - # don't split individual tensors between files. - model: LazyModel = {} - for mp in models_plus: - model.update(mp.model) - else: - model = merge_sharded([mp.model for mp in models_plus]) - - return ModelPlus(model, paths, format, vocab) # pytype: disable=wrong-arg-types - - -def permute_lazy(lazy_tensor: LazyTensor, n_head: int, n_head_kv: int) -> LazyTensor: - def load() -> Tensor: - return lazy_tensor.load().permute(n_head, n_head_kv) - return LazyTensor(load, lazy_tensor.shape, lazy_tensor.data_type, f'permute({n_head}, {n_head_kv}) ' + lazy_tensor.description) - - -def permute_part_lazy(lazy_tensor: LazyTensor, n_part: int, n_head: int, n_head_kv: int) -> LazyTensor: - def load() -> Tensor: - return lazy_tensor.load().permute_part(n_part, n_head, n_head_kv) - s = lazy_tensor.shape.copy() - s[0] = s[0] // 3 - return LazyTensor(load, s, lazy_tensor.data_type, f'permute({n_head}, {n_head_kv}) ' + lazy_tensor.description) - - -def part_lazy(lazy_tensor: LazyTensor, n_part: int) -> LazyTensor: - def load() -> Tensor: - return lazy_tensor.load().part(n_part) - s = lazy_tensor.shape.copy() - s[0] = s[0] // 3 - return LazyTensor(load, s, lazy_tensor.data_type, 'part ' + lazy_tensor.description) - - -def pack_experts_lazy(lazy_tensors: list[LazyTensor]) -> LazyTensor: - def load() -> Tensor: - tensors = [lazy_tensor.load() for lazy_tensor in lazy_tensors] - return UnquantizedTensor(np.array([tensor.ndarray for tensor in tensors])) - s = lazy_tensors[0].shape.copy() - s.insert(0, len(lazy_tensors)) - return LazyTensor(load, s, lazy_tensors[0].data_type, 'pack_experts ' + ' | '.join(lt.description for lt in lazy_tensors)) - - -# Functionality that simulates `torch.load` but where individual tensors are -# only loaded into memory on demand, not all at once. -# PyTorch can't do this natively as of time of writing: -# - https://github.com/pytorch/pytorch/issues/64327 -# This allows us to de-shard without multiplying RAM usage, and also -# conveniently drops the PyTorch dependency (though we still need numpy). - - -@dataclass -class LazyStorageKind: - data_type: DataType - - -@dataclass -class LazyStorage: - load: Callable[[int, int], NDArray] - kind: LazyStorageKind - description: str - - -class LazyUnpickler(pickle.Unpickler): - def __init__(self, fp: IO[bytes], data_base_path: str, zip_file: zipfile.ZipFile): - super().__init__(fp) - self.data_base_path = data_base_path - self.zip_file = zip_file - - def persistent_load(self, pid: Any) -> Any: - assert pid[0] == 'storage' - assert isinstance(pid[1], LazyStorageKind) - data_type = pid[1].data_type - filename_stem = pid[2] - filename = f'{self.data_base_path}/{filename_stem}' - info = self.zip_file.getinfo(filename) - - def load(offset: int, elm_count: int) -> NDArray: - dtype = data_type.dtype - with self.zip_file.open(info) as fp: - fp.seek(offset * dtype.itemsize) - size = elm_count * dtype.itemsize - data = fp.read(size) - assert len(data) == size - return np.frombuffer(data, dtype) - description = f'storage data_type={data_type} path-in-zip={filename} path={self.zip_file.filename}' - return LazyStorage(load=load, kind=pid[1], description=description) - - @staticmethod - def lazy_rebuild_tensor_v2(storage: Any, storage_offset: Any, size: Any, stride: Any, - requires_grad: Any, backward_hooks: Any, metadata: Any = None) -> LazyTensor: - assert isinstance(storage, LazyStorage) - - def load() -> UnquantizedTensor: - elm_count = stride[0] * size[0] - return UnquantizedTensor(storage.load(storage_offset, elm_count).reshape(size)) - description = f'pickled storage_offset={storage_offset} in {storage.description}' - return LazyTensor(load, list(size), storage.kind.data_type, description) - - @staticmethod - def rebuild_from_type_v2(func, new_type, args, state): - return func(*args) - - CLASSES = { - # getattr used here as a workaround for mypy not being smart enough to determine - # the staticmethods have a __func__ attribute. - ('torch._tensor', '_rebuild_from_type_v2'): getattr(rebuild_from_type_v2, '__func__'), - ('torch._utils', '_rebuild_tensor_v2'): getattr(lazy_rebuild_tensor_v2, '__func__'), - ('torch', 'BFloat16Storage'): LazyStorageKind(DT_BF16), - ('torch', 'HalfStorage'): LazyStorageKind(DT_F16), - ('torch', 'FloatStorage'): LazyStorageKind(DT_F32), - ('torch', 'IntStorage'): LazyStorageKind(DT_I32), - ('torch', 'Tensor'): LazyTensor, - } - - def find_class(self, module: str, name: str) -> Any: - if not module.startswith('torch'): - return super().find_class(module, name) - return self.CLASSES[(module, name)] - - -def lazy_load_torch_file(outer_fp: IO[bytes], path: Path) -> ModelPlus: - zf = zipfile.ZipFile(outer_fp) - pickle_paths = [name for name in zf.namelist() if name.endswith('.pkl')] - assert len(pickle_paths) == 1, pickle_paths - pickle_fp = zf.open(pickle_paths[0], 'r') - unpickler = LazyUnpickler(pickle_fp, - data_base_path=pickle_paths[0][:-4], - zip_file=zf) - model = unpickler.load() - if 'model' in model: model = model['model'] - as_dict = dict(model.items()) - return ModelPlus(model=as_dict, paths=[path], format='torch', vocab=None) - - -def lazy_load_safetensors_file(fp: IO[bytes], path: Path) -> ModelPlus: - header_size, = struct.unpack(' LazyTensor: - data_type = SAFETENSORS_DATA_TYPES[info['dtype']] - numpy_dtype = data_type.dtype - shape: list[int] = info['shape'] - begin, end = info['data_offsets'] - assert 0 <= begin <= end <= len(byte_buf) - assert end - begin == math.prod(shape) * numpy_dtype.itemsize - buf = byte_buf[begin:end] - - def load() -> UnquantizedTensor: - return UnquantizedTensor(np.frombuffer(buf, dtype=numpy_dtype).reshape(shape)) - description = f'safetensors begin={begin} end={end} type={data_type} path={path}' - return LazyTensor(load, shape, data_type, description) - model = {name: convert(info) for (name, info) in header.items() if name != '__metadata__'} - return ModelPlus(model=model, paths=[path], format='safetensors', vocab=None) - - -def must_read(fp: IO[bytes], length: int) -> bytes: - ret = fp.read(length) - if len(ret) < length: - raise EOFError("unexpectedly reached end of file") - return ret - - -@functools.lru_cache(maxsize=None) -def lazy_load_file(path: Path) -> ModelPlus: - fp = open(path, 'rb') - first8 = fp.read(8) - fp.seek(0) - if first8[:2] == b'PK': - # A zip file, i.e. PyTorch format - return lazy_load_torch_file(fp, path) - elif struct.unpack(' Iterable[Out]: - '''Parallel map, but with backpressure. If the caller doesn't call `next` - fast enough, this will stop calling `func` at some point rather than - letting results pile up in memory. Specifically, there is a max of one - output value buffered per thread.''' - if concurrency < 2: - yield from map(func, iterable) - # Not reached. - iterable = iter(iterable) - executor_class: type[ThreadPoolExecutor] | type[ProcessPoolExecutor] - if use_processpool_executor: - executor_class = ProcessPoolExecutor - else: - executor_class = ThreadPoolExecutor - with executor_class(max_workers=max_workers) as executor: - futures: list[concurrent.futures.Future[Out]] = [] - done = False - for _ in range(concurrency): - try: - futures.append(executor.submit(func, next(iterable))) - except StopIteration: - done = True - break - - while futures: - result = futures.pop(0).result() - while not done and len(futures) < concurrency: - try: - futures.append(executor.submit(func, next(iterable))) - except StopIteration: - done = True - break - yield result - - -def check_vocab_size(params: Params, vocab: BaseVocab, pad_vocab: bool = False) -> None: - # Handle special case where the model's vocab size is not set - if params.n_vocab == -1: - raise ValueError( - "The model's vocab size is set to -1 in params.json. Please update it manually." - + (f" Maybe {vocab.vocab_size}?" if isinstance(vocab, Vocab) else ""), - ) - if not isinstance(vocab, Vocab): - return # model has no vocab - - # Check for a vocab size mismatch - if params.n_vocab == vocab.vocab_size: - print("Ignoring added_tokens.json since model matches vocab size without it.") - return - - if pad_vocab and params.n_vocab > vocab.vocab_size: - pad_count = params.n_vocab - vocab.vocab_size - print( - f"Padding vocab with {pad_count} token(s) - through " - ) - for i in range(1, pad_count + 1): - vocab.added_tokens_dict[f""] = -1 - vocab.added_tokens_list.append(f"") - vocab.vocab_size = params.n_vocab - return - - msg = f"Vocab size mismatch (model has {params.n_vocab}, but {vocab.fname_tokenizer} has {vocab.vocab_size})." - if vocab.vocab_size < params.n_vocab < vocab.vocab_size + 20: - msg += f" Most likely you are missing added_tokens.json (should be in {vocab.fname_tokenizer.parent})." - if vocab.vocab_size < params.n_vocab: - msg += " Add the --pad-vocab option and try again." - - raise ValueError(msg) - - -class OutputFile: - def __init__(self, fname_out: Path, endianess:gguf.GGUFEndian = gguf.GGUFEndian.LITTLE): - self.gguf = gguf.GGUFWriter(fname_out, gguf.MODEL_ARCH_NAMES[ARCH], endianess=endianess) - - def add_meta_arch(self, params: Params) -> None: - name = "LLaMA" - - # TODO: better logic to determine model name - if params.n_ctx == 4096: - name = "LLaMA v2" - elif params.path_model is not None: - name = str(params.path_model.parent).split('/')[-1] - - self.gguf.add_name (name) - self.gguf.add_vocab_size (params.n_vocab) - self.gguf.add_context_length (params.n_ctx) - self.gguf.add_embedding_length (params.n_embd) - self.gguf.add_block_count (params.n_layer) - self.gguf.add_feed_forward_length (params.n_ff) - self.gguf.add_rope_dimension_count(params.n_embd // params.n_head) - self.gguf.add_head_count (params.n_head) - self.gguf.add_head_count_kv (params.n_head_kv) - - if params.n_experts: - self.gguf.add_expert_count(params.n_experts) - - if params.n_experts_used: - self.gguf.add_expert_used_count(params.n_experts_used) - - if params.f_norm_eps: - self.gguf.add_layer_norm_rms_eps(params.f_norm_eps) - else: - raise ValueError('f_norm_eps is None') - - if params.f_rope_freq_base is not None: - self.gguf.add_rope_freq_base(params.f_rope_freq_base) - - if params.rope_scaling_type: - assert params.f_rope_scale is not None - self.gguf.add_rope_scaling_type(params.rope_scaling_type) - self.gguf.add_rope_scaling_factor(params.f_rope_scale) - - if params.n_orig_ctx is not None: - self.gguf.add_rope_scaling_orig_ctx_len(params.n_orig_ctx) - - if params.rope_finetuned is not None: - self.gguf.add_rope_scaling_finetuned(params.rope_finetuned) - - if params.ftype is not None: - self.gguf.add_file_type(params.ftype) - - def extract_vocabulary_from_model(self, vocab: Vocab) -> tuple[list[bytes], list[float], list[gguf.TokenType]]: - tokens = [] - scores = [] - toktypes = [] - - # NOTE: `all_tokens` returns the base vocabulary and added tokens - for text, score, toktype in vocab.all_tokens(): - tokens.append(text) - scores.append(score) - toktypes.append(toktype) - - assert len(tokens) == vocab.vocab_size - - return tokens, scores, toktypes - - def add_meta_vocab(self, vocab: Vocab) -> None: - # Ensure that tokenizer_model is added to the GGUF model - self.gguf.add_tokenizer_model(vocab.tokenizer_model) - - # Extract model vocabulary for model conversion - tokens, scores, toktypes = self.extract_vocabulary_from_model(vocab) - - # Add extracted token information for model conversion - self.gguf.add_token_list(tokens) - self.gguf.add_token_scores(scores) - self.gguf.add_token_types(toktypes) - - def add_meta_special_vocab(self, svocab: gguf.SpecialVocab) -> None: - svocab.add_to_gguf(self.gguf) - - def add_tensor_info(self, name: str, tensor: LazyTensor) -> None: - n_elements = int(np.prod(tensor.shape)) - raw_dtype = getattr(tensor.data_type, 'ggml_type', None) - data_type = getattr(tensor.data_type, 'quantized_type', None) or tensor.data_type.dtype - data_nbytes = tensor.data_type.elements_to_bytes(n_elements) - self.gguf.add_tensor_info(name, tensor.shape, data_type, data_nbytes, raw_dtype=raw_dtype) - - def write_meta(self) -> None: - self.gguf.write_header_to_file() - self.gguf.write_kv_data_to_file() - - def write_tensor_info(self) -> None: - self.gguf.write_ti_data_to_file() - - def write_tensor_data(self, ftype: GGMLFileType, model: LazyModel, concurrency: int) -> None: - ndarrays_inner = bounded_parallel_map(OutputFile.do_item, model.items(), concurrency=concurrency) - if ftype == GGMLFileType.MostlyQ8_0: - ndarrays = bounded_parallel_map( - OutputFile.maybe_do_quantize, ndarrays_inner, concurrency=concurrency, max_workers=concurrency, - use_processpool_executor=True, - ) - else: - ndarrays = map(OutputFile.maybe_do_quantize, ndarrays_inner) - - start = time.time() - for i, ((name, lazy_tensor), ndarray) in enumerate(zip(model.items(), ndarrays)): - elapsed = time.time() - start - size = ' x '.join(f"{dim:6d}" for dim in lazy_tensor.shape) - padi = len(str(len(model))) - print( - f"[{i + 1:{padi}d}/{len(model)}] Writing tensor {name:38s} | size {size:16} | type {lazy_tensor.data_type.name:4} | T+{int(elapsed):4}" - ) - self.gguf.write_tensor_data(ndarray) - - def close(self) -> None: - self.gguf.close() - - @staticmethod - def write_vocab_only( - fname_out: Path, params: Params, vocab: Vocab, svocab: gguf.SpecialVocab, - endianess: gguf.GGUFEndian = gguf.GGUFEndian.LITTLE, pad_vocab: bool = False, - ) -> None: - check_vocab_size(params, vocab, pad_vocab=pad_vocab) - - of = OutputFile(fname_out, endianess=endianess) - - # meta data - of.add_meta_arch(params) - of.add_meta_vocab(vocab) - of.add_meta_special_vocab(svocab) - - of.write_meta() - - of.close() - - @staticmethod - def do_item(item: tuple[str, LazyTensor]) -> tuple[DataType, NDArray]: - name, lazy_tensor = item - tensor = lazy_tensor.load().to_ggml() - return (lazy_tensor.data_type, tensor.ndarray) - - @staticmethod - def maybe_do_quantize(item: tuple[DataType, NDArray]) -> NDArray: - dt, arr = item - if not isinstance(dt, QuantizedDataType): - return arr - return dt.quantize(arr) - - @staticmethod - def write_all( - fname_out: Path, ftype: GGMLFileType, params: Params, model: LazyModel, vocab: BaseVocab, svocab: gguf.SpecialVocab, - concurrency: int = DEFAULT_CONCURRENCY, endianess: gguf.GGUFEndian = gguf.GGUFEndian.LITTLE, - pad_vocab: bool = False, - ) -> None: - check_vocab_size(params, vocab, pad_vocab=pad_vocab) - - of = OutputFile(fname_out, endianess=endianess) - - # meta data - of.add_meta_arch(params) - if isinstance(vocab, Vocab): - of.add_meta_vocab(vocab) - of.add_meta_special_vocab(svocab) - else: # NoVocab - of.gguf.add_tokenizer_model(vocab.tokenizer_model) - - # tensor info - for name, lazy_tensor in model.items(): - of.add_tensor_info(name, lazy_tensor) - - of.write_meta() - of.write_tensor_info() - - # tensor data - of.write_tensor_data(ftype, model, concurrency) - - of.close() - - -def pick_output_type(model: LazyModel, output_type_str: str | None) -> GGMLFileType: - wq_type = model[gguf.TENSOR_NAMES[gguf.MODEL_TENSOR.ATTN_Q].format(bid=0) + ".weight"].data_type - - if output_type_str == "f32" or (output_type_str is None and wq_type in (DT_F32, DT_BF16)): - return GGMLFileType.AllF32 - if output_type_str == "f16" or (output_type_str is None and wq_type == DT_F16): - return GGMLFileType.MostlyF16 - if output_type_str == "q8_0": - return GGMLFileType.MostlyQ8_0 - - name_to_type = {name: lazy_tensor.data_type for (name, lazy_tensor) in model.items()} - - raise ValueError(f"Unexpected combination of types: {name_to_type}") - - -def convert_to_output_type(model: LazyModel, output_type: GGMLFileType) -> LazyModel: - return {name: tensor.astype(output_type.type_for_tensor(name, tensor)) - for (name, tensor) in model.items()} - - -def convert_model_names(model: LazyModel, params: Params, skip_unknown: bool) -> LazyModel: - tmap = gguf.TensorNameMap(ARCH, params.n_layer) - should_skip = set(gguf.MODEL_TENSOR_SKIP.get(ARCH, [])) - - tmp = model - - # merge experts into one tensor - if params.n_experts and params.n_experts > 0: - for i_l in range(params.n_layer): - for w in range(1, 4): - experts = [] - for e in range(params.n_experts): - if f"layers.{i_l}.feed_forward.experts.{e}.w{w}.weight" in model: - experts.append(model[f"layers.{i_l}.feed_forward.experts.{e}.w{w}.weight"]) - del tmp[f"layers.{i_l}.feed_forward.experts.{e}.w{w}.weight"] - elif f"model.layers.{i_l}.block_sparse_moe.experts.{e}.w{w}.weight" in model: - experts.append(model[f"model.layers.{i_l}.block_sparse_moe.experts.{e}.w{w}.weight"]) - del tmp[f"model.layers.{i_l}.block_sparse_moe.experts.{e}.w{w}.weight"] - else: - raise ValueError(f"Expert tensor not found: layers.{i_l}.feed_forward.experts.{e}.w{w}.weight") - tmp[f"layers.{i_l}.feed_forward.experts.w{w}.weight"] = pack_experts_lazy(experts) - - # HF models permut or pack some of the tensors, so we need to undo that - for i in itertools.count(): - if f"model.layers.{i}.self_attn.q_proj.weight" in model: - print(f"Permuting layer {i}") - tmp[f"model.layers.{i}.self_attn.q_proj.weight"] = permute_lazy(model[f"model.layers.{i}.self_attn.q_proj.weight"], params.n_head, params.n_head) - tmp[f"model.layers.{i}.self_attn.k_proj.weight"] = permute_lazy(model[f"model.layers.{i}.self_attn.k_proj.weight"], params.n_head, params.n_head_kv) - # tmp[f"model.layers.{i}.self_attn.v_proj.weight"] = model[f"model.layers.{i}.self_attn.v_proj.weight"] - elif f"model.layers.{i}.self_attn.W_pack.weight" in model: - print(f"Unpacking and permuting layer {i}") - tmp[f"model.layers.{i}.self_attn.q_proj.weight"] = permute_part_lazy(model[f"model.layers.{i}.self_attn.W_pack.weight"], 0, params.n_head, params.n_head) - tmp[f"model.layers.{i}.self_attn.k_proj.weight"] = permute_part_lazy(model[f"model.layers.{i}.self_attn.W_pack.weight"], 1, params.n_head, params.n_head_kv) - tmp[f"model.layers.{i}.self_attn.v_proj.weight"] = part_lazy (model[f"model.layers.{i}.self_attn.W_pack.weight"], 2) - del tmp[f"model.layers.{i}.self_attn.W_pack.weight"] - else: - break - - out: LazyModel = {} - for name, lazy_tensor in model.items(): - tensor_type, name_new = tmap.get_type_and_name(name, try_suffixes = (".weight", ".bias")) or (None, None) - if name_new is None: - if skip_unknown: - print(f"Unexpected tensor name: {name} - skipping") - continue - raise ValueError(f"Unexpected tensor name: {name}. Use --skip-unknown to ignore it (e.g. LLaVA)") - - if tensor_type in should_skip: - print(f"skipping tensor {name_new}") - continue - - print(f"{name:48s} -> {name_new:40s} | {lazy_tensor.data_type.name:6s} | {lazy_tensor.shape}") - out[name_new] = lazy_tensor - - return out - - -def nth_multifile_path(path: Path, n: int) -> Path | None: - '''Given any path belonging to a multi-file model (e.g. foo.bin.1), return - the nth path in the model. - ''' - # Support the following patterns: - patterns = [ - # - x.00.pth, x.01.pth, etc. - (r'\.[0-9]{2}\.pth$', f'.{n:02}.pth'), - # - x-00001-of-00002.bin, x-00002-of-00002.bin, etc. - (r'-[0-9]{5}-of-(.*)$', fr'-{n:05}-of-\1'), - # x.bin, x.bin.1, etc. - (r'(\.[0-9]+)?$', r'\1' if n == 0 else fr'\1.{n}') - ] - for regex, replacement in patterns: - if re.search(regex, path.name): - new_path = path.with_name(re.sub(regex, replacement, path.name)) - if new_path.exists(): - return new_path - return None - - -def find_multifile_paths(path: Path) -> list[Path]: - '''Given any path belonging to a multi-file model (e.g. foo.bin.1), return - the whole list of paths in the model. - ''' - ret: list[Path] = [] - for i in itertools.count(): - nth_path = nth_multifile_path(path, i) - if nth_path is None: - break - ret.append(nth_path) - if not ret: - # No matches. This should only happen if the file was named, e.g., - # foo.0, and there was no file named foo. Oh well, try to process it - # as a single file. - return [path] - return ret - - -def load_some_model(path: Path) -> ModelPlus: - '''Load a model of any supported format.''' - # Be extra-friendly and accept either a file or a directory: - if path.is_dir(): - # Check if it's a set of safetensors files first - globs = ["model-00001-of-*.safetensors", "model.safetensors", "consolidated.safetensors"] - files = [file for glob in globs for file in path.glob(glob)] - if not files: - # Try the PyTorch patterns too, with lower priority - globs = ["consolidated.00.pth", "pytorch_model-00001-of-*.bin", "*.pt", "pytorch_model.bin"] - files = [file for glob in globs for file in path.glob(glob)] - if not files: - raise FileNotFoundError(f"Can't find model in directory {path}") - if len(files) > 1: - raise ValueError(f"Found multiple models in {path}, not sure which to pick: {files}") - path = files[0] - - paths = find_multifile_paths(path) - models_plus: list[ModelPlus] = [] - for path in paths: - print(f"Loading model file {path}") - models_plus.append(lazy_load_file(path)) - - model_plus = merge_multifile_models(models_plus) - return model_plus - - -class VocabFactory: - _VOCAB_CLASSES: list[type[Vocab]] = [SentencePieceVocab, BpeVocab, LlamaHfVocab] - - def __init__(self, path: Path): - self.path = path - - def _create_special_vocab(self, vocab: BaseVocab, model_parent_path: Path) -> gguf.SpecialVocab: - load_merges = vocab.name == "bpe" - n_vocab = vocab.vocab_size if isinstance(vocab, Vocab) else None - return gguf.SpecialVocab( - model_parent_path, - load_merges=load_merges, - special_token_types=None, # Predetermined or passed as a parameter - n_vocab=n_vocab, - ) - - def _create_vocab_by_path(self, vocab_types: list[str]) -> Vocab: - vocab_classes: dict[str, type[Vocab]] = {cls.name: cls for cls in self._VOCAB_CLASSES} - selected_vocabs: dict[str, type[Vocab]] = {} - for vtype in vocab_types: - try: - selected_vocabs[vtype] = vocab_classes[vtype] - except KeyError: - raise ValueError(f"Unsupported vocabulary type {vtype}") from None - - for vtype, cls in selected_vocabs.items(): - try: - vocab = cls(self.path) - break - except FileNotFoundError: - pass # ignore unavailable tokenizers - else: - raise FileNotFoundError(f"Could not find a tokenizer matching any of {vocab_types}") - - print(f"Loaded vocab file {vocab.fname_tokenizer!r}, type {vocab.name!r}") - return vocab - - def load_vocab(self, vocab_types: list[str] | None, model_parent_path: Path) -> tuple[BaseVocab, gguf.SpecialVocab]: - vocab: BaseVocab - if vocab_types is None: - vocab = NoVocab() - else: - vocab = self._create_vocab_by_path(vocab_types) - # FIXME: Respect --vocab-dir? - special_vocab = self._create_special_vocab( - vocab, - model_parent_path, - ) - return vocab, special_vocab - - -def default_outfile(model_paths: list[Path], file_type: GGMLFileType) -> Path: - namestr = { - GGMLFileType.AllF32: "f32", - GGMLFileType.MostlyF16: "f16", - GGMLFileType.MostlyQ8_0:"q8_0", - }[file_type] - ret = model_paths[0].parent / f"ggml-model-{namestr}.gguf" - if ret in model_paths: - sys.stderr.write( - f"Error: Default output path ({ret}) would overwrite the input. " - "Please explicitly specify a path using --outfile.\n") - sys.exit(1) - return ret - - -def do_dump_model(model_plus: ModelPlus) -> None: - print(f"model_plus.paths = {model_plus.paths!r}") - print(f"model_plus.format = {model_plus.format!r}") - print(f"model_plus.vocab = {model_plus.vocab!r}") - for name, lazy_tensor in model_plus.model.items(): - print(f"{name}: shape={lazy_tensor.shape} type={lazy_tensor.data_type}; {lazy_tensor.description}") - - -def main(args_in: list[str] | None = None) -> None: - output_choices = ["f32", "f16"] - if np.uint32(1) == np.uint32(1).newbyteorder("<"): - # We currently only support Q8_0 output on little endian systems. - output_choices.append("q8_0") - parser = argparse.ArgumentParser(description="Convert a LLaMA model to a GGML compatible file") - parser.add_argument("--dump", action="store_true", help="don't convert, just show what's in the model") - parser.add_argument("--dump-single", action="store_true", help="don't convert, just show what's in a single model file") - parser.add_argument("--vocab-only", action="store_true", help="extract only the vocab") - parser.add_argument("--no-vocab", action="store_true", help="store model without the vocab") - parser.add_argument("--outtype", choices=output_choices, help="output format - note: q8_0 may be very slow (default: f16 or f32 based on input)") - parser.add_argument("--vocab-dir", type=Path, help="directory containing tokenizer.model, if separate from model file") - parser.add_argument("--vocab-type", help="vocab types to try in order, choose from 'spm', 'bpe', 'hfft' (default: spm,hfft)", default="spm,hfft") - parser.add_argument("--outfile", type=Path, help="path to write to; default: based on input") - parser.add_argument("model", type=Path, help="directory containing model file, or model file itself (*.pth, *.pt, *.bin)") - parser.add_argument("--ctx", type=int, help="model training context (default: based on input)") - parser.add_argument("--concurrency", type=int, help=f"concurrency used for conversion (default: {DEFAULT_CONCURRENCY})", default=DEFAULT_CONCURRENCY) - parser.add_argument("--big-endian", action="store_true", help="model is executed on big endian machine") - parser.add_argument("--pad-vocab", action="store_true", help="add pad tokens when model vocab expects more than tokenizer metadata provides") - parser.add_argument("--skip-unknown", action="store_true", help="skip unknown tensor names instead of failing") - - args = parser.parse_args(args_in) - if args.no_vocab and args.vocab_only: - raise ValueError("--vocab-only does not make sense with --no-vocab") - - if args.dump_single: - model_plus = lazy_load_file(args.model) - do_dump_model(model_plus) - return - - if not args.vocab_only: - model_plus = load_some_model(args.model) - else: - model_plus = ModelPlus(model = {}, paths = [args.model / 'dummy'], format = 'none', vocab = None) - - if args.dump: - do_dump_model(model_plus) - return - endianess = gguf.GGUFEndian.LITTLE - if args.big_endian: - endianess = gguf.GGUFEndian.BIG - - params = Params.load(model_plus) - if params.n_ctx == -1: - if args.ctx is None: - msg = """\ - The model doesn't have a context size, and you didn't specify one with --ctx - Please specify one with --ctx: - - LLaMA v1: --ctx 2048 - - LLaMA v2: --ctx 4096""" - parser.error(textwrap.dedent(msg)) - params.n_ctx = args.ctx - - if args.outtype: - params.ftype = { - "f32": GGMLFileType.AllF32, - "f16": GGMLFileType.MostlyF16, - "q8_0": GGMLFileType.MostlyQ8_0, - }[args.outtype] - - print(f"params = {params}") - - model_parent_path = model_plus.paths[0].parent - vocab_path = Path(args.vocab_dir or args.model or model_parent_path) - vocab_factory = VocabFactory(vocab_path) - vocab_types = None if args.no_vocab else args.vocab_type.split(",") - vocab, special_vocab = vocab_factory.load_vocab(vocab_types, model_parent_path) - - if args.vocab_only: - assert isinstance(vocab, Vocab) - if not args.outfile: - raise ValueError("need --outfile if using --vocab-only") - outfile = args.outfile - OutputFile.write_vocab_only(outfile, params, vocab, special_vocab, - endianess=endianess, pad_vocab=args.pad_vocab) - print(f"Wrote {outfile}") - return - - if model_plus.vocab is not None and args.vocab_dir is None and not args.no_vocab: - vocab = model_plus.vocab - - print(f"Vocab info: {vocab}") - print(f"Special vocab info: {special_vocab}") - - model = model_plus.model - model = convert_model_names(model, params, args.skip_unknown) - ftype = pick_output_type(model, args.outtype) - model = convert_to_output_type(model, ftype) - outfile = args.outfile or default_outfile(model_plus.paths, ftype) - - params.ftype = ftype - print(f"Writing {outfile}, format {ftype}") - - OutputFile.write_all(outfile, ftype, params, model, vocab, special_vocab, - concurrency=args.concurrency, endianess=endianess, pad_vocab=args.pad_vocab) - print(f"Wrote {outfile}") - - -if __name__ == '__main__': - main() diff --git a/ggml-alloc.c b/ggml-alloc.c deleted file mode 100644 index 1fbd376edf4..00000000000 --- a/ggml-alloc.c +++ /dev/null @@ -1,985 +0,0 @@ -#include "ggml-alloc.h" -#include "ggml-backend-impl.h" -#include "ggml.h" -#include "ggml-impl.h" -#include -#include -#include -#include -#include -#include - -#define MAX(a, b) ((a) > (b) ? (a) : (b)) -#define MAX_FREE_BLOCKS 256 - -//#define GGML_ALLOCATOR_DEBUG - -//#define AT_PRINTF(...) fprintf(stderr, __VA_ARGS__) -#define AT_PRINTF(...) - - -static bool ggml_is_view(const struct ggml_tensor * t) { - return t->view_src != NULL; -} - -static bool ggml_are_same_layout(const struct ggml_tensor * a, const struct ggml_tensor * b) { - if (a->type != b->type) { - return false; - } - for (int i = 0; i < GGML_MAX_DIMS; i++) { - if (a->ne[i] != b->ne[i]) { - return false; - } - if (a->nb[i] != b->nb[i]) { - return false; - } - } - return true; -} - -static bool ggml_op_can_inplace(enum ggml_op op) { - switch (op) { - case GGML_OP_SCALE: - case GGML_OP_DIAG_MASK_ZERO: - case GGML_OP_DIAG_MASK_INF: - case GGML_OP_ADD: - case GGML_OP_ADD1: - case GGML_OP_SUB: - case GGML_OP_MUL: - case GGML_OP_DIV: - case GGML_OP_SQR: - case GGML_OP_SQRT: - case GGML_OP_LOG: - case GGML_OP_UNARY: - case GGML_OP_ROPE: - case GGML_OP_RMS_NORM: - case GGML_OP_SOFT_MAX: - return true; - - default: - return false; - } -} - -static size_t aligned_offset(const void * buffer, size_t offset, size_t alignment) { - assert(alignment && !(alignment & (alignment - 1))); // power of 2 - size_t align = (alignment - (((uintptr_t)buffer + offset) % alignment)) % alignment; - return offset + align; -} - -// tallocr - -struct ggml_tallocr ggml_tallocr_new(ggml_backend_buffer_t buffer) { - void * base = ggml_backend_buffer_get_base(buffer); - size_t align = ggml_backend_buffer_get_alignment(buffer); - - assert(align && !(align & (align - 1))); // power of 2 - - struct ggml_tallocr talloc = (struct ggml_tallocr) { - /*.buffer = */ buffer, - /*.base = */ base, - /*.alignment = */ align, - /*.offset = */ aligned_offset(base, 0, align), - }; - return talloc; -} - -void ggml_tallocr_alloc(struct ggml_tallocr * talloc, struct ggml_tensor * tensor) { - size_t size = ggml_backend_buffer_get_alloc_size(talloc->buffer, tensor); - size = GGML_PAD(size, talloc->alignment); - - if (talloc->offset + size > ggml_backend_buffer_get_size(talloc->buffer)) { - fprintf(stderr, "%s: not enough space in the buffer to allocate %s (needed %zu, available %zu)\n", - __func__, tensor->name, size, ggml_backend_buffer_get_size(talloc->buffer) - talloc->offset); - GGML_ASSERT(!"not enough space in the buffer"); - return; - } - - void * addr = (char *)ggml_backend_buffer_get_base(talloc->buffer) + talloc->offset; - talloc->offset += size; - - assert(((uintptr_t)addr % talloc->alignment) == 0); - - ggml_backend_tensor_alloc(talloc->buffer, tensor, addr); -} - -// dynamic tensor allocator - -struct free_block { - size_t offset; - size_t size; -}; - -struct ggml_dyn_tallocr { - size_t alignment; - int n_free_blocks; - struct free_block free_blocks[MAX_FREE_BLOCKS]; - size_t max_size; - -#ifdef GGML_ALLOCATOR_DEBUG - struct { - const struct ggml_tensor * tensor; - size_t offset; - } allocated_tensors[1024]; -#endif -}; - -#ifdef GGML_ALLOCATOR_DEBUG -static void add_allocated_tensor(struct ggml_dyn_tallocr * alloc, size_t offset, const struct ggml_tensor * tensor) { - for (int i = 0; i < 1024; i++) { - if (alloc->allocated_tensors[i].tensor == NULL) { - alloc->allocated_tensors[i].tensor = tensor; - alloc->allocated_tensors[i].offset = offset; - return; - } - } - GGML_ASSERT(!"out of allocated_tensors"); -} -static void remove_allocated_tensor(struct ggml_dyn_tallocr * alloc, size_t offset, const struct ggml_tensor * tensor) { - for (int i = 0; i < 1024; i++) { - if (alloc->allocated_tensors[i].offset == offset) { - alloc->allocated_tensors[i].tensor = NULL; - return; - } - } - fprintf(stderr, "tried to free tensor %s not found\n", tensor->name); - GGML_ASSERT(!"tensor not found"); -} -#endif - -static size_t ggml_dyn_tallocr_alloc(struct ggml_dyn_tallocr * alloc, size_t size, const struct ggml_tensor * tensor) { - size = aligned_offset(NULL, size, alloc->alignment); - - AT_PRINTF("%s: allocating %s (%zu bytes) - ", __func__, tensor->name, size); - - size_t max_avail = 0; - - // find the best fitting free block besides the last block - int best_fit_block = -1; - size_t best_fit_size = SIZE_MAX; - for (int i = 0; i < alloc->n_free_blocks - 1; i++) { - struct free_block * block = &alloc->free_blocks[i]; - max_avail = MAX(max_avail, block->size); - if (block->size >= size && block->size <= best_fit_size) { - best_fit_block = i; - best_fit_size = block->size; - } - } - - if (best_fit_block == -1) { - // the last block is our last resort - struct free_block * block = &alloc->free_blocks[alloc->n_free_blocks - 1]; - max_avail = MAX(max_avail, block->size); - if (block->size >= size) { - best_fit_block = alloc->n_free_blocks - 1; - } else { - // this should never happen - fprintf(stderr, "%s: not enough space in the buffer to allocate %zu bytes, largest block available %zu bytes\n", - __func__, size, max_avail); - GGML_ASSERT(!"not enough space in the buffer"); - GGML_UNREACHABLE(); - } - } - - struct free_block * block = &alloc->free_blocks[best_fit_block]; - size_t offset = block->offset; - block->offset = offset + size; - block->size -= size; - if (block->size == 0) { - // remove block if empty - alloc->n_free_blocks--; - for (int j = best_fit_block; j < alloc->n_free_blocks; j++) { - alloc->free_blocks[j] = alloc->free_blocks[j+1]; - } - } - - AT_PRINTF("block %d, offset %zu\n", best_fit_block, offset); - -#ifdef GGML_ALLOCATOR_DEBUG - add_allocated_tensor(alloc, offset, tensor); - size_t cur_max = offset + size; - if (cur_max > alloc->max_size) { - // sort allocated_tensors by offset - for (int i = 0; i < 1024; i++) { - for (int j = i + 1; j < 1024; j++) { - if (alloc->allocated_tensors[i].offset > alloc->allocated_tensors[j].offset) { - const struct ggml_tensor * tmp_tensor = alloc->allocated_tensors[i].tensor; - size_t tmp_offset = alloc->allocated_tensors[i].offset; - alloc->allocated_tensors[i].tensor = alloc->allocated_tensors[j].tensor; - alloc->allocated_tensors[i].offset = alloc->allocated_tensors[j].offset; - alloc->allocated_tensors[j].tensor = tmp_tensor; - alloc->allocated_tensors[j].offset = tmp_offset; - } - } - } - fprintf(stderr, "max_size = %.2f MB: tensors: ", cur_max / 1024.0 / 1024.0); - for (int i = 0; i < 1024; i++) { - if (alloc->allocated_tensors[i].tensor) { - fprintf(stderr, "%s [%zx-%zx] (%.2f MB) ", alloc->allocated_tensors[i].tensor->name, - alloc->allocated_tensors[i].offset, - alloc->allocated_tensors[i].offset + ggml_nbytes(alloc->allocated_tensors[i].tensor), - ggml_nbytes(alloc->allocated_tensors[i].tensor) / 1024.0 / 1024.0); - } - } - fprintf(stderr, "\n"); - } -#endif - - alloc->max_size = MAX(alloc->max_size, offset + size); - - return offset; - - GGML_UNUSED(tensor); -} - -// this is a very naive implementation, but for our case the number of free blocks should be very small -static void ggml_dyn_tallocr_free_tensor(struct ggml_dyn_tallocr * alloc, size_t offset, size_t size, const struct ggml_tensor * tensor) { - size = aligned_offset(NULL, size, alloc->alignment); - - AT_PRINTF("%s: freeing %s at %zu (%zu bytes) - n_free_blocks = %d\n", __func__, tensor->name, offset, size, alloc->n_free_blocks); - -#ifdef GGML_ALLOCATOR_DEBUG - remove_allocated_tensor(alloc, offset, tensor); -#endif - - // see if we can merge with an existing block - for (int i = 0; i < alloc->n_free_blocks; i++) { - struct free_block * block = &alloc->free_blocks[i]; - // check if ptr is at the end of the block - if (block->offset + block->size == offset) { - block->size += size; - // check if we can merge with the next block - if (i < alloc->n_free_blocks - 1 && block->offset + block->size == alloc->free_blocks[i+1].offset) { - block->size += alloc->free_blocks[i+1].size; - alloc->n_free_blocks--; - for (int j = i+1; j < alloc->n_free_blocks; j++) { - alloc->free_blocks[j] = alloc->free_blocks[j+1]; - } - } - return; - } - // check if ptr is at the beginning of the block - if (offset + size == block->offset) { - block->offset = offset; - block->size += size; - // check if we can merge with the previous block - if (i > 0 && alloc->free_blocks[i-1].offset + alloc->free_blocks[i-1].size == block->offset) { - alloc->free_blocks[i-1].size += block->size; - alloc->n_free_blocks--; - for (int j = i; j < alloc->n_free_blocks; j++) { - alloc->free_blocks[j] = alloc->free_blocks[j+1]; - } - } - return; - } - } - // otherwise, add a new block - GGML_ASSERT(alloc->n_free_blocks < MAX_FREE_BLOCKS && "out of free blocks"); - // insert the new block in the correct position to keep the array sorted by address (to make merging blocks faster) - int insert_pos = 0; - while (insert_pos < alloc->n_free_blocks && alloc->free_blocks[insert_pos].offset < offset) { - insert_pos++; - } - // shift all blocks from insert_pos onward to make room for the new block - for (int i = alloc->n_free_blocks; i > insert_pos; i--) { - alloc->free_blocks[i] = alloc->free_blocks[i-1]; - } - // insert the new block - alloc->free_blocks[insert_pos].offset = offset; - alloc->free_blocks[insert_pos].size = size; - alloc->n_free_blocks++; - - GGML_UNUSED(tensor); -} - -static void ggml_dyn_tallocr_reset(struct ggml_dyn_tallocr * alloc) { - alloc->n_free_blocks = 1; - alloc->free_blocks[0].offset = 0; - alloc->free_blocks[0].size = SIZE_MAX/2; // restrict maximum size of a measure allocator to half size_t max to avoid overflows - alloc->max_size = 0; -} - -static struct ggml_dyn_tallocr * ggml_dyn_tallocr_new(size_t alignment) { - struct ggml_dyn_tallocr * alloc = (struct ggml_dyn_tallocr *)malloc(sizeof(struct ggml_dyn_tallocr)); - - *alloc = (struct ggml_dyn_tallocr) { - /*.alignment = */ alignment, - /*.n_free_blocks = */ 0, - /*.free_blocks = */ {{0}}, - /*.max_size = */ 0, -#ifdef GGML_ALLOCATOR_DEBUG - /*.allocated_tensors = */ {{0}}, -#endif - }; - - ggml_dyn_tallocr_reset(alloc); - - return alloc; -} - -static void ggml_dyn_tallocr_free(struct ggml_dyn_tallocr * alloc) { - free(alloc); -} - -static size_t ggml_dyn_tallocr_max_size(struct ggml_dyn_tallocr * alloc) { - return alloc->max_size; -} - - -///////////////////////////////////// - -// graph allocator - -struct hash_node { - int n_children; - int n_views; - int buffer_id; - size_t offset; // offset within the buffer - bool allocated; -}; - -struct tensor_alloc { - size_t offset; - size_t size_max; // 0 = pre-allocated, unused, or view -}; - -struct leaf_alloc { - int buffer_id; - struct tensor_alloc leaf; -}; - -struct node_alloc { - int buffer_id; - struct tensor_alloc dst; - struct tensor_alloc src[GGML_MAX_SRC]; -}; - -struct ggml_gallocr { - ggml_backend_buffer_type_t * bufts; // [n_buffers] - ggml_backend_buffer_t * buffers; // [n_buffers] - struct ggml_dyn_tallocr ** buf_tallocs; // [n_buffers] - int n_buffers; - - struct ggml_hash_set hash_set; - struct hash_node * hash_values; // [hash_set.size] - - struct node_alloc * node_allocs; // [n_nodes] - int n_nodes; - - struct leaf_alloc * leaf_allocs; // [n_leafs] - int n_leafs; -}; - -ggml_gallocr_t ggml_gallocr_new_n(ggml_backend_buffer_type_t * bufts, int n_bufs) { - ggml_gallocr_t galloc = (ggml_gallocr_t)calloc(1, sizeof(struct ggml_gallocr)); - GGML_ASSERT(galloc != NULL); - - galloc->bufts = calloc(n_bufs, sizeof(ggml_backend_buffer_type_t)); - GGML_ASSERT(galloc->bufts != NULL); - - galloc->buffers = calloc(n_bufs, sizeof(ggml_backend_buffer_t) * n_bufs); - GGML_ASSERT(galloc->buffers != NULL); - - galloc->buf_tallocs = calloc(n_bufs, sizeof(struct ggml_dyn_tallocr *)); - GGML_ASSERT(galloc->buf_tallocs != NULL); - - for (int i = 0; i < n_bufs; i++) { - galloc->bufts[i] = bufts[i]; - galloc->buffers[i] = NULL; - size_t alignment = ggml_backend_buft_get_alignment(bufts[i]); - galloc->buf_tallocs[i] = ggml_dyn_tallocr_new(alignment); - } - galloc->n_buffers = n_bufs; - - return galloc; -} - -ggml_gallocr_t ggml_gallocr_new(ggml_backend_buffer_type_t buft) { - return ggml_gallocr_new_n(&buft, 1); -} - -void ggml_gallocr_free(ggml_gallocr_t galloc) { - if (galloc == NULL) { - return; - } - - for (int i = 0; i < galloc->n_buffers; i++) { - if (galloc->buffers != NULL) { - ggml_backend_buffer_free(galloc->buffers[i]); - } - if (galloc->buf_tallocs != NULL) { - ggml_dyn_tallocr_free(galloc->buf_tallocs[i]); - } - } - - free(galloc->hash_set.keys); - free(galloc->hash_values); - free(galloc->bufts); - free(galloc->buffers); - free(galloc->buf_tallocs); - free(galloc->node_allocs); - free(galloc->leaf_allocs); - free(galloc); -} - -typedef struct ggml_gallocr * ggml_gallocr_t; - -static struct hash_node * ggml_gallocr_hash_get(ggml_gallocr_t galloc, struct ggml_tensor * t) { - size_t i = ggml_hash_find_or_insert(galloc->hash_set, t); - return &galloc->hash_values[i]; -} - -static bool ggml_gallocr_is_own(ggml_gallocr_t galloc, struct ggml_tensor * t) { - return ggml_gallocr_hash_get(galloc, t)->allocated; -} - -static void ggml_gallocr_set_node_offset(ggml_gallocr_t galloc, struct ggml_tensor * node, int buffer_id, size_t offset) { - struct hash_node * hn = ggml_gallocr_hash_get(galloc, node); - hn->buffer_id = buffer_id; - hn->offset = offset; - hn->allocated = true; -} - -static bool ggml_gallocr_is_allocated(ggml_gallocr_t galloc, struct ggml_tensor * t) { - return t->data != NULL || ggml_gallocr_hash_get(galloc, t)->allocated; -} - -static void ggml_gallocr_allocate_node(ggml_gallocr_t galloc, struct ggml_tensor * node, int buffer_id) { - struct hash_node * hn = ggml_gallocr_hash_get(galloc, node); - - if (!ggml_gallocr_is_allocated(galloc, node) && !ggml_is_view(node)) { - hn->allocated = true; - assert(hn->offset == 0); - - // try to reuse a parent's buffer (inplace) - if (ggml_op_can_inplace(node->op)) { - for (int i = 0; i < GGML_MAX_SRC; i++) { - struct ggml_tensor * parent = node->src[i]; - if (parent == NULL) { - continue; - } - - // if the node's data is external, then we cannot re-use it - if (!ggml_gallocr_is_own(galloc, parent)) { - AT_PRINTF("not reusing parent %s for %s as %p is external\n", parent->name, node->name, parent->data); - continue; - } - - // outputs cannot be reused - if (parent->flags & GGML_TENSOR_FLAG_OUTPUT || (parent->view_src != NULL && parent->view_src->flags & GGML_TENSOR_FLAG_OUTPUT)) { - AT_PRINTF("not reusing parent %s for %s as it is an output\n", parent->name, node->name); - continue; - } - - if (!ggml_are_same_layout(node, parent)) { - AT_PRINTF("not reusing parent %s for %s as layouts are different\n", parent->name, node->name); - continue; - } - - struct hash_node * p_hn = ggml_gallocr_hash_get(galloc, parent); - if (p_hn->n_children == 1 && p_hn->n_views == 0) { - if (ggml_is_view(parent)) { - struct ggml_tensor * view_src = parent->view_src; - struct hash_node * view_src_hn = ggml_gallocr_hash_get(galloc, view_src); - if (view_src_hn->n_views == 1 && view_src_hn->n_children == 0 && view_src->data == parent->data) { - AT_PRINTF("reusing view parent %s (%s) for %s\n", parent->name, view_src->name, node->name); - assert(view_src_hn->offset == p_hn->offset); - hn->buffer_id = p_hn->buffer_id; - hn->offset = p_hn->offset; - p_hn->allocated = false; // avoid freeing the parent - view_src_hn->allocated = false; - return; - } - } else { - AT_PRINTF("reusing parent %s for %s\n", parent->name, node->name); - hn->buffer_id = p_hn->buffer_id; - hn->offset = p_hn->offset; - p_hn->allocated = false; // avoid freeing the parent - return; - } - } - } - } - // allocate tensor from the buffer - struct ggml_dyn_tallocr * alloc = galloc->buf_tallocs[buffer_id]; - ggml_backend_buffer_type_t buft = galloc->bufts[buffer_id]; - size_t size = ggml_backend_buft_get_alloc_size(buft, node); - size_t offset = ggml_dyn_tallocr_alloc(alloc, size, node); - hn->buffer_id = buffer_id; - hn->offset = offset; - return; - } -} - -static void ggml_gallocr_free_node(ggml_gallocr_t galloc, struct ggml_tensor * node, int buffer_id) { - // graph outputs are never freed - if (node->flags & GGML_TENSOR_FLAG_OUTPUT) { - AT_PRINTF("not freeing output %s\n", node->name); - return; - } - - struct ggml_dyn_tallocr * alloc = galloc->buf_tallocs[buffer_id]; - ggml_backend_buffer_type_t buft = galloc->bufts[buffer_id]; - struct hash_node * hn = ggml_gallocr_hash_get(galloc, node); - size_t offset = hn->offset; - size_t size = ggml_backend_buft_get_alloc_size(buft, node); - ggml_dyn_tallocr_free_tensor(alloc, offset, size, node); - hn->allocated = false; -} - -static int get_node_buffer_id(const int * node_buffer_ids, int i) { - return node_buffer_ids ? node_buffer_ids[i] : 0; -} - -static void ggml_gallocr_alloc_graph_impl(ggml_gallocr_t galloc, struct ggml_cgraph * graph, const int * node_buffer_ids, const int * leaf_buffer_ids) { - // clear hash tables - memset(galloc->hash_set.keys, 0, galloc->hash_set.size * sizeof(struct ggml_tensor *)); - memset(galloc->hash_values, 0, galloc->hash_set.size * sizeof(struct hash_node)); - - // allocate leafs - // these may be tensors that the application is not using in the graph, but may still want to allocate for other purposes - for (int i = 0; i < graph->n_leafs; i++) { - struct ggml_tensor * leaf = graph->leafs[i]; - ggml_gallocr_allocate_node(galloc, leaf, get_node_buffer_id(leaf_buffer_ids, i)); - } - - // count number of children and views - // allocate other graph inputs and leafs first to avoid overwriting them - for (int i = 0; i < graph->n_nodes; i++) { - struct ggml_tensor * node = graph->nodes[i]; - - // TODO: better way to add external dependencies - // GGML_OP_NONE does not appear normally in the graph nodes, but is used by ggml-backend to add dependencies to - // control when some tensors are allocated and freed. in this case, the dependencies are in `src`, but the node - // itself is never used and should not be considered a dependency - if (ggml_is_view(node) && node->op != GGML_OP_NONE) { - struct ggml_tensor * view_src = node->view_src; - ggml_gallocr_hash_get(galloc, view_src)->n_views += 1; - } - - if (node->flags & GGML_TENSOR_FLAG_INPUT) { - ggml_gallocr_allocate_node(galloc, graph->nodes[i], get_node_buffer_id(node_buffer_ids, i)); - } - - for (int j = 0; j < GGML_MAX_SRC; j++) { - struct ggml_tensor * src = node->src[j]; - if (src == NULL) { - continue; - } - - ggml_gallocr_hash_get(galloc, src)->n_children += 1; - - // allocate explicit inputs - if (src->flags & GGML_TENSOR_FLAG_INPUT) { - ggml_gallocr_allocate_node(galloc, src, get_node_buffer_id(node_buffer_ids, i)); - } - } - } - - // allocate tensors - for (int i = 0; i < graph->n_nodes; i++) { - struct ggml_tensor * node = graph->nodes[i]; - int buffer_id = get_node_buffer_id(node_buffer_ids, i); - - // allocate parents (only leafs need to be allocated at this point) - for (int j = 0; j < GGML_MAX_SRC; j++) { - struct ggml_tensor * parent = node->src[j]; - if (parent == NULL) { - continue; - } - ggml_gallocr_allocate_node(galloc, parent, buffer_id); - } - - // allocate node - ggml_gallocr_allocate_node(galloc, node, buffer_id); - - AT_PRINTF("exec: %s (%s) <= ", ggml_op_desc(node), node->name); - for (int j = 0; j < GGML_MAX_SRC; j++) { - struct ggml_tensor * parent = node->src[j]; - if (parent == NULL) { - continue; - } - AT_PRINTF("%s", parent->name); - if (j < GGML_MAX_SRC - 1 && node->src[j + 1] != NULL) { - AT_PRINTF(", "); - } - } - AT_PRINTF("\n"); - - // update parents - for (int j = 0; j < GGML_MAX_SRC; j++) { - struct ggml_tensor * parent = node->src[j]; - if (parent == NULL) { - continue; - } - struct hash_node * p_hn = ggml_gallocr_hash_get(galloc, parent); - p_hn->n_children -= 1; - - AT_PRINTF("parent %s: %d children, %d views, allocated: %d\n", - parent->name, p_hn->n_children, p_hn->n_views, p_hn->allocated); - - if (p_hn->n_children == 0 && p_hn->n_views == 0) { - if (ggml_is_view(parent)) { - struct ggml_tensor * view_src = parent->view_src; - struct hash_node * view_src_hn = ggml_gallocr_hash_get(galloc, view_src); - view_src_hn->n_views -= 1; - AT_PRINTF("view_src %s: %d children, %d views\n", - view_src->name, view_src_hn->n_children, view_src_hn->n_views); - if (view_src_hn->n_views == 0 && view_src_hn->n_children == 0 && view_src_hn->allocated) { - ggml_gallocr_free_node(galloc, view_src, buffer_id); - } - } - else if (p_hn->allocated) { - ggml_gallocr_free_node(galloc, parent, buffer_id); - } - } - AT_PRINTF("\n"); - } - } -} - -bool ggml_gallocr_reserve_n(ggml_gallocr_t galloc, struct ggml_cgraph * graph, const int * node_buffer_ids, const int * leaf_buffer_ids) { - size_t hash_size = graph->visited_hash_table.size; - - // initialize hash table - if (galloc->hash_set.size < hash_size) { - free(galloc->hash_set.keys); - free(galloc->hash_values); - galloc->hash_set.size = hash_size; - galloc->hash_set.keys = calloc(hash_size, sizeof(struct ggml_tensor *)); - galloc->hash_values = calloc(hash_size, sizeof(struct hash_node)); - GGML_ASSERT(galloc->hash_set.keys != NULL); - GGML_ASSERT(galloc->hash_values != NULL); - } else { - // reset hash table - memset(galloc->hash_set.keys, 0, sizeof(struct ggml_tensor *) * galloc->hash_set.size); - memset(galloc->hash_values, 0, sizeof(struct hash_node) * galloc->hash_set.size); - } - - // reset allocators - for (int i = 0; i < galloc->n_buffers; i++) { - ggml_dyn_tallocr_reset(galloc->buf_tallocs[i]); - } - - // allocate in hash table - ggml_gallocr_alloc_graph_impl(galloc, graph, node_buffer_ids, leaf_buffer_ids); - - // set the node_allocs from the hash table - if (galloc->n_nodes < graph->n_nodes) { - free(galloc->node_allocs); - galloc->node_allocs = calloc(graph->n_nodes, sizeof(struct node_alloc)); - GGML_ASSERT(galloc->node_allocs != NULL); - } - galloc->n_nodes = graph->n_nodes; - for (int i = 0; i < graph->n_nodes; i++) { - struct ggml_tensor * node = graph->nodes[i]; - struct node_alloc * node_alloc = &galloc->node_allocs[i]; - node_alloc->buffer_id = get_node_buffer_id(node_buffer_ids, i); - if (node->view_src || node->data) { - node_alloc->dst.offset = SIZE_MAX; - node_alloc->dst.size_max = 0; - } else { - struct hash_node * hn = ggml_gallocr_hash_get(galloc, node); - node_alloc->dst.offset = hn->offset; - node_alloc->dst.size_max = ggml_backend_buft_get_alloc_size(galloc->bufts[hn->buffer_id], node); - } - for (int j = 0; j < GGML_MAX_SRC; j++) { - struct ggml_tensor * src = node->src[j]; - if (!src || src->view_src || src->data) { - node_alloc->src[j].offset = SIZE_MAX; - node_alloc->src[j].size_max = 0; - } else { - struct hash_node * hn = ggml_gallocr_hash_get(galloc, src); - node_alloc->src[j].offset = hn->offset; - node_alloc->src[j].size_max = ggml_backend_buft_get_alloc_size(galloc->bufts[hn->buffer_id], src); - } - } - } - if (galloc->n_leafs < graph->n_leafs) { - free(galloc->leaf_allocs); - galloc->leaf_allocs = calloc(graph->n_leafs, sizeof(galloc->leaf_allocs[0])); - GGML_ASSERT(galloc->leaf_allocs != NULL); - } - galloc->n_leafs = graph->n_leafs; - for (int i = 0; i < graph->n_leafs; i++) { - struct ggml_tensor * leaf = graph->leafs[i]; - struct hash_node * hn = ggml_gallocr_hash_get(galloc, leaf); - galloc->leaf_allocs[i].buffer_id = hn->buffer_id; - if (leaf->view_src || leaf->data) { - galloc->leaf_allocs[i].leaf.offset = SIZE_MAX; - galloc->leaf_allocs[i].leaf.size_max = 0; - } else { - galloc->leaf_allocs[i].leaf.offset = hn->offset; - galloc->leaf_allocs[i].leaf.size_max = ggml_backend_buft_get_alloc_size(galloc->bufts[hn->buffer_id], leaf); - } - } - - // reallocate buffers if needed - for (int i = 0; i < galloc->n_buffers; i++) { - size_t cur_size = galloc->buffers[i] ? ggml_backend_buffer_get_size(galloc->buffers[i]) : 0; - size_t new_size = ggml_dyn_tallocr_max_size(galloc->buf_tallocs[i]); - - // even if there are no tensors allocated in this buffer, we still need to allocate it to initialize views - if (new_size > cur_size || galloc->buffers[i] == NULL) { -#ifndef NDEBUG - fprintf(stderr, "%s: reallocating %s buffer from size %.02f MiB to %.02f MiB\n", __func__, ggml_backend_buft_name(galloc->bufts[i]), cur_size / 1024.0 / 1024.0, new_size / 1024.0 / 1024.0); -#endif - ggml_backend_buffer_free(galloc->buffers[i]); - galloc->buffers[i] = ggml_backend_buft_alloc_buffer(galloc->bufts[i], new_size); - if (galloc->buffers[i] == NULL) { - fprintf(stderr, "%s: failed to allocate %s buffer of size %zu\n", __func__, ggml_backend_buft_name(galloc->bufts[i]), new_size); - return false; - } - } - } - - return true; -} - -bool ggml_gallocr_reserve(ggml_gallocr_t galloc, struct ggml_cgraph *graph) { - return ggml_gallocr_reserve_n(galloc, graph, NULL, NULL); -} - -static void ggml_gallocr_init_tensor(ggml_gallocr_t galloc, struct ggml_tensor * tensor, int buffer_id, struct tensor_alloc * tensor_alloc) { - assert(tensor->data || tensor->view_src || ggml_backend_buffer_get_alloc_size(galloc->buffers[buffer_id], tensor) <= tensor_alloc->size_max); - - if (tensor->view_src != NULL) { - if (tensor->buffer == NULL) { - assert(tensor_alloc->offset == SIZE_MAX); - if (tensor->view_src->buffer == NULL) { - // this tensor was allocated without ggml-backend - return; - } - ggml_backend_view_init(galloc->buffers[buffer_id], tensor); - } - } else { - if (tensor->data == NULL) { - assert(tensor_alloc->offset != SIZE_MAX); - assert(ggml_backend_buffer_get_alloc_size(galloc->buffers[buffer_id], tensor) <= tensor_alloc->size_max); - void * base = ggml_backend_buffer_get_base(galloc->buffers[buffer_id]); - void * addr = (char *)base + tensor_alloc->offset; - ggml_backend_tensor_alloc(galloc->buffers[buffer_id], tensor, addr); - } else { - if (tensor->buffer == NULL) { - // this tensor was allocated without ggml-backend - return; - } - } - } -} - -static bool ggml_gallocr_node_needs_realloc(ggml_gallocr_t galloc, struct ggml_tensor * node, struct node_alloc * nalloc, struct tensor_alloc * talloc) { - ggml_backend_buffer_type_t buft = galloc->bufts[nalloc->buffer_id]; - size_t node_size = (node->data || node->view_src) ? 0 : ggml_backend_buft_get_alloc_size(buft, node); - return talloc->size_max >= node_size; -} - -static bool ggml_gallocr_needs_realloc(ggml_gallocr_t galloc, struct ggml_cgraph * graph) { - if (galloc->n_nodes != graph->n_nodes) { -#ifndef NDEBUG - fprintf(stderr, "%s: graph has different number of nodes\n", __func__); -#endif - return true; - } - - if (galloc->n_leafs != graph->n_leafs) { -#ifndef NDEBUG - fprintf(stderr, "%s: graph has different number of leafs\n", __func__); -#endif - return true; - } - - for (int i = 0; i < graph->n_nodes; i++) { - struct ggml_tensor * node = graph->nodes[i]; - struct node_alloc * node_alloc = &galloc->node_allocs[i]; - - if (!ggml_gallocr_node_needs_realloc(galloc, node, node_alloc, &node_alloc->dst)) { -#ifndef NDEBUG - fprintf(stderr, "%s: node %s is not valid\n", __func__, node->name); -#endif - return true; - } - - for (int j = 0; j < GGML_MAX_SRC; j++) { - struct ggml_tensor * src = node->src[j]; - if (src == NULL) { - continue; - } - if (!ggml_gallocr_node_needs_realloc(galloc, src, node_alloc, &node_alloc->src[j])) { -#ifndef NDEBUG - fprintf(stderr, "%s: src %d (%s) of node %s is not valid\n", __func__, j, src->name, node->name); -#endif - return true; - } - } - } - - return false; -} - -bool ggml_gallocr_alloc_graph(ggml_gallocr_t galloc, struct ggml_cgraph * graph) { - if (ggml_gallocr_needs_realloc(galloc, graph)) { - if (galloc->n_buffers == 1) { -#ifndef NDEBUG - fprintf(stderr, "%s: reallocating buffers automatically\n", __func__); -#endif - if (!ggml_gallocr_reserve(galloc, graph)) { - return false; - } - } else { -#ifndef NDEBUG - fprintf(stderr, "%s: cannot reallocate multi buffer graph automatically, call reserve\n", __func__); -#endif - return false; - } - } - - // reset buffers - for (int i = 0; i < galloc->n_buffers; i++) { - if (galloc->buffers[i] != NULL) { - ggml_backend_buffer_reset(galloc->buffers[i]); - } - } - - // allocate the graph tensors from the previous assignments - // leafs - for (int i = 0; i < graph->n_leafs; i++) { - struct ggml_tensor * leaf = graph->leafs[i]; - struct leaf_alloc * leaf_alloc = &galloc->leaf_allocs[i]; - ggml_gallocr_init_tensor(galloc, leaf, leaf_alloc->buffer_id, &leaf_alloc->leaf); - } - // nodes - for (int i = 0; i < graph->n_nodes; i++) { - struct ggml_tensor * node = graph->nodes[i]; - struct node_alloc * node_alloc = &galloc->node_allocs[i]; - for (int j = 0; j < GGML_MAX_SRC; j++) { - struct ggml_tensor * src = node->src[j]; - if (src == NULL) { - continue; - } - ggml_gallocr_init_tensor(galloc, src, node_alloc->buffer_id, &node_alloc->src[j]); - } - ggml_gallocr_init_tensor(galloc, node, node_alloc->buffer_id, &node_alloc->dst); - } - - return true; -} - -size_t ggml_gallocr_get_buffer_size(ggml_gallocr_t galloc, int buffer_id) { - GGML_ASSERT(buffer_id >= 0 && buffer_id < galloc->n_buffers); - - if (galloc->buffers[buffer_id] == NULL) { - return 0; - } - return ggml_backend_buffer_get_size(galloc->buffers[buffer_id]); -} - -// utils - -static bool alloc_tensor_range(struct ggml_context * ctx, - struct ggml_tensor * first, struct ggml_tensor * last, - ggml_backend_buffer_type_t buft, size_t size, - ggml_backend_buffer_t ** buffers, size_t * n_buffers) { - ggml_backend_buffer_t buffer = ggml_backend_buft_alloc_buffer(buft, size); - if (buffer == NULL) { -#ifndef NDEBUG - fprintf(stderr, "%s: failed to allocate %s buffer of size %zu\n", __func__, ggml_backend_buft_name(buft), size); -#endif - for (size_t i = 0; i < *n_buffers; i++) { - ggml_backend_buffer_free(*buffers[i]); - } - free(*buffers); - return false; - } - - struct ggml_tallocr tallocr = ggml_tallocr_new(buffer); - - for (struct ggml_tensor * t = first; t != last; t = ggml_get_next_tensor(ctx, t)) { - if (t->data == NULL) { - if (t->view_src == NULL) { - ggml_tallocr_alloc(&tallocr, t); - } else if (t->buffer == NULL) { - ggml_backend_view_init(buffer, t); - } - } else { - if (t->view_src != NULL && t->buffer == NULL) { - // view of a pre-allocated tensor - ggml_backend_view_init(buffer, t); - } - } - } - - *buffers = realloc(*buffers, sizeof(ggml_backend_buffer_t) * (*n_buffers + 1)); - (*buffers)[(*n_buffers)++] = buffer; - - return true; -} - -ggml_backend_buffer_t ggml_backend_alloc_ctx_tensors_from_buft(struct ggml_context * ctx, ggml_backend_buffer_type_t buft) { - GGML_ASSERT(ggml_get_no_alloc(ctx) == true); - - size_t alignment = ggml_backend_buft_get_alignment(buft); - size_t max_size = ggml_backend_buft_get_max_size(buft); - - ggml_backend_buffer_t * buffers = NULL; - size_t n_buffers = 0; - - size_t cur_buf_size = 0; - struct ggml_tensor * first = ggml_get_first_tensor(ctx); - for (struct ggml_tensor * t = first; t != NULL; t = ggml_get_next_tensor(ctx, t)) { - size_t this_size = 0; - if (t->data == NULL && t->view_src == NULL) { - this_size = GGML_PAD(ggml_backend_buft_get_alloc_size(buft, t), alignment); - } - - if (this_size > max_size) { - fprintf(stderr, "%s: tensor %s is too large to fit in a %s buffer (tensor size: %zu, max buffer size: %zu)\n", - __func__, t->name, - ggml_backend_buft_name(buft), - this_size, max_size); - for (size_t i = 0; i < n_buffers; i++) { - ggml_backend_buffer_free(buffers[i]); - } - free(buffers); - return NULL; - } - - if ((cur_buf_size + this_size) > max_size) { - // allocate tensors in the current buffer - if (!alloc_tensor_range(ctx, first, t, buft, cur_buf_size, &buffers, &n_buffers)) { - return NULL; - } - first = t; - cur_buf_size = this_size; - } else { - cur_buf_size += this_size; - } - } - - // allocate remaining tensors - if (cur_buf_size > 0) { - if (!alloc_tensor_range(ctx, first, NULL, buft, cur_buf_size, &buffers, &n_buffers)) { - return NULL; - } - } - - if (n_buffers == 0) { -#ifndef NDEBUG - fprintf(stderr, "%s: all tensors in the context are already allocated\n", __func__); -#endif - return NULL; - } - - ggml_backend_buffer_t buffer; - if (n_buffers == 1) { - buffer = buffers[0]; - } else { - buffer = ggml_backend_multi_buffer_alloc_buffer(buffers, n_buffers); - } - free(buffers); - return buffer; -} - -ggml_backend_buffer_t ggml_backend_alloc_ctx_tensors(struct ggml_context * ctx, ggml_backend_t backend) { - return ggml_backend_alloc_ctx_tensors_from_buft(ctx, ggml_backend_get_default_buffer_type(backend)); -} diff --git a/ggml-alloc.h b/ggml-alloc.h deleted file mode 100644 index 434c13b34a9..00000000000 --- a/ggml-alloc.h +++ /dev/null @@ -1,76 +0,0 @@ -#pragma once - -#include "ggml.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct ggml_backend_buffer_type * ggml_backend_buffer_type_t; -typedef struct ggml_backend_buffer * ggml_backend_buffer_t; -typedef struct ggml_backend * ggml_backend_t; - -// Tensor allocator -struct ggml_tallocr { - ggml_backend_buffer_t buffer; - void * base; - size_t alignment; - size_t offset; -}; - -GGML_API struct ggml_tallocr ggml_tallocr_new(ggml_backend_buffer_t buffer); -GGML_API void ggml_tallocr_alloc(struct ggml_tallocr * talloc, struct ggml_tensor * tensor); - -// Graph allocator -/* - Example usage: - ggml_gallocr_t galloc = ggml_gallocr_new(ggml_bacckend_cpu_buffer_type()); - - // optional: create a worst-case graph and reserve the buffers to avoid reallocations - ggml_gallocr_reserve(galloc, build_graph(max_batch)); - - // allocate the graph - struct ggml_cgraph * graph = build_graph(batch); - ggml_gallocr_alloc_graph(galloc, graph); - - printf("compute buffer size: %zu bytes\n", ggml_gallocr_get_buffer_size(galloc, 0)); - - // evaluate the graph - ggml_backend_graph_compute(backend, graph); -*/ - -// special tensor flags for use with the graph allocator: -// ggml_set_input(): all input tensors are allocated at the beginning of the graph in non-overlapping addresses -// ggml_set_output(): output tensors are never freed and never overwritten - -typedef struct ggml_gallocr * ggml_gallocr_t; - -GGML_API ggml_gallocr_t ggml_gallocr_new(ggml_backend_buffer_type_t buft); -GGML_API ggml_gallocr_t ggml_gallocr_new_n(ggml_backend_buffer_type_t * bufts, int n_bufs); -GGML_API void ggml_gallocr_free(ggml_gallocr_t galloc); - -// pre-allocate buffers from a measure graph - does not allocate or modify the graph -// call with a worst-case graph to avoid buffer reallocations -// not strictly required for single buffer usage: ggml_gallocr_alloc_graph will reallocate the buffers automatically if needed -// returns false if the buffer allocation failed -GGML_API bool ggml_gallocr_reserve(ggml_gallocr_t galloc, struct ggml_cgraph * graph); -GGML_API bool ggml_gallocr_reserve_n( - ggml_gallocr_t galloc, - struct ggml_cgraph * graph, - const int * node_buffer_ids, - const int * leaf_buffer_ids); - -// automatic reallocation if the topology changes when using a single buffer -// returns false if using multiple buffers and a re-allocation is needed (call ggml_gallocr_reserve_n first to set the node buffers) -GGML_API bool ggml_gallocr_alloc_graph(ggml_gallocr_t galloc, struct ggml_cgraph * graph); - -GGML_API size_t ggml_gallocr_get_buffer_size(ggml_gallocr_t galloc, int buffer_id); - -// Utils -// Create a buffer and allocate all the tensors in a ggml_context -GGML_API struct ggml_backend_buffer * ggml_backend_alloc_ctx_tensors_from_buft(struct ggml_context * ctx, ggml_backend_buffer_type_t buft); -GGML_API struct ggml_backend_buffer * ggml_backend_alloc_ctx_tensors(struct ggml_context * ctx, ggml_backend_t backend); - -#ifdef __cplusplus -} -#endif diff --git a/ggml-backend-impl.h b/ggml-backend-impl.h deleted file mode 100644 index f121e1de420..00000000000 --- a/ggml-backend-impl.h +++ /dev/null @@ -1,141 +0,0 @@ -#pragma once - -// ggml-backend internal header - -#include "ggml-backend.h" - -#ifdef __cplusplus -extern "C" { -#endif - - // - // Backend buffer - // - - // buffer type - typedef void * ggml_backend_buffer_type_context_t; - - struct ggml_backend_buffer_type_i { - const char * (*GGML_CALL get_name) (ggml_backend_buffer_type_t buft); - ggml_backend_buffer_t (*GGML_CALL alloc_buffer) (ggml_backend_buffer_type_t buft, size_t size); - size_t (*GGML_CALL get_alignment) (ggml_backend_buffer_type_t buft); // tensor alignment - size_t (*GGML_CALL get_max_size) (ggml_backend_buffer_type_t buft); // allocation max size - size_t (*GGML_CALL get_alloc_size) (ggml_backend_buffer_type_t buft, const struct ggml_tensor * tensor); // data size needed to allocate the tensor, including padding - bool (*GGML_CALL supports_backend)(ggml_backend_buffer_type_t buft, ggml_backend_t backend); // check if the buffer type is usable by the backend - // check if tensor data is in host memory - // should be equivalent to supports_backend(buft, ggml_backend_cpu_init()) - bool (*GGML_CALL is_host) (ggml_backend_buffer_type_t buft); - }; - - struct ggml_backend_buffer_type { - struct ggml_backend_buffer_type_i iface; - ggml_backend_buffer_type_context_t context; - }; - - // buffer - typedef void * ggml_backend_buffer_context_t; - - struct ggml_backend_buffer_i { - const char * (*GGML_CALL get_name) (ggml_backend_buffer_t buffer); - void (*GGML_CALL free_buffer)(ggml_backend_buffer_t buffer); - void * (*GGML_CALL get_base) (ggml_backend_buffer_t buffer); - void (*GGML_CALL init_tensor)(ggml_backend_buffer_t buffer, struct ggml_tensor * tensor); - void (*GGML_CALL set_tensor) (ggml_backend_buffer_t buffer, struct ggml_tensor * tensor, const void * data, size_t offset, size_t size); - void (*GGML_CALL get_tensor) (ggml_backend_buffer_t buffer, const struct ggml_tensor * tensor, void * data, size_t offset, size_t size); - bool (*GGML_CALL cpy_tensor) (ggml_backend_buffer_t buffer, const struct ggml_tensor * src, struct ggml_tensor * dst); // dst is in the buffer, src may be in any buffer - void (*GGML_CALL clear) (ggml_backend_buffer_t buffer, uint8_t value); - void (*GGML_CALL reset) (ggml_backend_buffer_t buffer); // reset any internal state due to tensor initialization, such as tensor extras - }; - - struct ggml_backend_buffer { - struct ggml_backend_buffer_i iface; - ggml_backend_buffer_type_t buft; - ggml_backend_buffer_context_t context; - size_t size; - enum ggml_backend_buffer_usage usage; - }; - - GGML_CALL ggml_backend_buffer_t ggml_backend_buffer_init( - ggml_backend_buffer_type_t buft, - struct ggml_backend_buffer_i iface, - ggml_backend_buffer_context_t context, - size_t size); - - // do not use directly, use ggml_backend_tensor_copy instead - bool ggml_backend_buffer_copy_tensor(const struct ggml_tensor * src, struct ggml_tensor * dst); - - // buffer that contains a collection of buffers - GGML_CALL ggml_backend_buffer_t ggml_backend_multi_buffer_alloc_buffer(ggml_backend_buffer_t * buffers, size_t n_buffers); - GGML_CALL bool ggml_backend_buffer_is_multi_buffer(ggml_backend_buffer_t buffer); - GGML_CALL void ggml_backend_multi_buffer_set_usage(ggml_backend_buffer_t buffer, enum ggml_backend_buffer_usage usage); - - // - // Backend - // - - typedef void * ggml_backend_context_t; - - struct ggml_backend_i { - const char * (*GGML_CALL get_name)(ggml_backend_t backend); - - void (*GGML_CALL free)(ggml_backend_t backend); - - // buffer allocation - ggml_backend_buffer_type_t (*GGML_CALL get_default_buffer_type)(ggml_backend_t backend); - - // (optional) asynchronous tensor data access - void (*GGML_CALL set_tensor_async)(ggml_backend_t backend, struct ggml_tensor * tensor, const void * data, size_t offset, size_t size); - void (*GGML_CALL get_tensor_async)(ggml_backend_t backend, const struct ggml_tensor * tensor, void * data, size_t offset, size_t size); - bool (*GGML_CALL cpy_tensor_async)(ggml_backend_t backend_src, ggml_backend_t backend_dst, const struct ggml_tensor * src, struct ggml_tensor * dst); - - // (optional) complete all pending operations - void (*GGML_CALL synchronize)(ggml_backend_t backend); - - // compute graph with a plan (not used currently) - ggml_backend_graph_plan_t (*GGML_CALL graph_plan_create) (ggml_backend_t backend, const struct ggml_cgraph * cgraph); - void (*GGML_CALL graph_plan_free) (ggml_backend_t backend, ggml_backend_graph_plan_t plan); - - // compute graph with a plan - enum ggml_status (*GGML_CALL graph_plan_compute)(ggml_backend_t backend, ggml_backend_graph_plan_t plan); - // compute graph without a plan (async) - enum ggml_status (*GGML_CALL graph_compute) (ggml_backend_t backend, struct ggml_cgraph * cgraph); - - // check if the backend supports an operation - bool (*GGML_CALL supports_op)(ggml_backend_t backend, const struct ggml_tensor * op); - - // check if the backend wants to run an operation, even if the weights are allocated in a CPU buffer - // these should be expensive operations with large batch sizes that may benefit from running on this backend - // even if the weight has to be copied from the CPU temporarily - bool (*GGML_CALL offload_op)(ggml_backend_t backend, const struct ggml_tensor * op); - - // (optional) event synchronization - ggml_backend_event_t (*GGML_CALL event_new) (ggml_backend_t backend); - void (*GGML_CALL event_free) (ggml_backend_event_t event); - void (*GGML_CALL event_record) (ggml_backend_event_t event); - void (*GGML_CALL event_wait) (ggml_backend_t backend, ggml_backend_event_t event); - void (*GGML_CALL event_synchronize) (ggml_backend_event_t event); - }; - - struct ggml_backend { - ggml_guid_t guid; - - struct ggml_backend_i iface; - ggml_backend_context_t context; - }; - - struct ggml_backend_event { - ggml_backend_t backend; - void * context; - }; - - // - // Backend registry - // - - typedef ggml_backend_t (*GGML_CALL ggml_backend_init_fn)(const char * params, void * user_data); - - GGML_CALL void ggml_backend_register(const char * name, ggml_backend_init_fn init_fn, ggml_backend_buffer_type_t default_buffer_type, void * user_data); - -#ifdef __cplusplus -} -#endif diff --git a/ggml-backend.c b/ggml-backend.c deleted file mode 100644 index f5bdcf07838..00000000000 --- a/ggml-backend.c +++ /dev/null @@ -1,2101 +0,0 @@ -#include "ggml-backend-impl.h" -#include "ggml-alloc.h" -#include "ggml-impl.h" - -#include -#include -#include -#include -#include -#include - - -#define MAX(a, b) ((a) > (b) ? (a) : (b)) - -// backend buffer type - -const char * ggml_backend_buft_name(ggml_backend_buffer_type_t buft) { - return buft->iface.get_name(buft); -} - -GGML_CALL ggml_backend_buffer_t ggml_backend_buft_alloc_buffer(ggml_backend_buffer_type_t buft, size_t size) { - return buft->iface.alloc_buffer(buft, size); -} - -size_t ggml_backend_buft_get_alignment(ggml_backend_buffer_type_t buft) { - return buft->iface.get_alignment(buft); -} - -size_t ggml_backend_buft_get_max_size(ggml_backend_buffer_type_t buft) { - // get_max_size is optional, defaults to SIZE_MAX - if (buft->iface.get_max_size) { - return buft->iface.get_max_size(buft); - } - return SIZE_MAX; -} - -GGML_CALL size_t ggml_backend_buft_get_alloc_size(ggml_backend_buffer_type_t buft, struct ggml_tensor * tensor) { - // get_alloc_size is optional, defaults to ggml_nbytes - if (buft->iface.get_alloc_size) { - size_t size = buft->iface.get_alloc_size(buft, tensor); - assert(size >= ggml_nbytes(tensor)); - return size; - } - return ggml_nbytes(tensor); -} - -bool ggml_backend_buft_supports_backend(ggml_backend_buffer_type_t buft, ggml_backend_t backend) { - return buft->iface.supports_backend(buft, backend); -} - -bool ggml_backend_buft_is_host(ggml_backend_buffer_type_t buft) { - if (buft->iface.is_host) { - return buft->iface.is_host(buft); - } - return false; -} - -// backend buffer - -GGML_CALL ggml_backend_buffer_t ggml_backend_buffer_init( - ggml_backend_buffer_type_t buft, - struct ggml_backend_buffer_i iface, - ggml_backend_buffer_context_t context, - size_t size) { - ggml_backend_buffer_t buffer = malloc(sizeof(struct ggml_backend_buffer)); - - (*buffer) = (struct ggml_backend_buffer) { - /* .interface = */ iface, - /* .buft = */ buft, - /* .context = */ context, - /* .size = */ size, - /* .usage = */ GGML_BACKEND_BUFFER_USAGE_ANY - }; - - return buffer; -} - -const char * ggml_backend_buffer_name(ggml_backend_buffer_t buffer) { - return buffer->iface.get_name(buffer); -} - -void ggml_backend_buffer_free(ggml_backend_buffer_t buffer) { - if (buffer == NULL) { - return; - } - - if (buffer->iface.free_buffer != NULL) { - buffer->iface.free_buffer(buffer); - } - free(buffer); -} - -size_t ggml_backend_buffer_get_size(ggml_backend_buffer_t buffer) { - return buffer->size; -} - -void * ggml_backend_buffer_get_base(ggml_backend_buffer_t buffer) { - void * base = buffer->iface.get_base(buffer); - - GGML_ASSERT(base != NULL && "backend buffer base cannot be NULL"); - - return base; -} - -GGML_CALL void ggml_backend_buffer_init_tensor(ggml_backend_buffer_t buffer, struct ggml_tensor * tensor) { - // init_tensor is optional - if (buffer->iface.init_tensor) { - buffer->iface.init_tensor(buffer, tensor); - } -} - -size_t ggml_backend_buffer_get_alignment (ggml_backend_buffer_t buffer) { - return ggml_backend_buft_get_alignment(ggml_backend_buffer_get_type(buffer)); -} - -size_t ggml_backend_buffer_get_max_size(ggml_backend_buffer_t buffer) { - return ggml_backend_buft_get_max_size(ggml_backend_buffer_get_type(buffer)); -} - -size_t ggml_backend_buffer_get_alloc_size(ggml_backend_buffer_t buffer, struct ggml_tensor * tensor) { - return ggml_backend_buft_get_alloc_size(ggml_backend_buffer_get_type(buffer), tensor); -} - -void ggml_backend_buffer_clear(ggml_backend_buffer_t buffer, uint8_t value) { - buffer->iface.clear(buffer, value); -} - -bool ggml_backend_buffer_is_host(ggml_backend_buffer_t buffer) { - return ggml_backend_buft_is_host(ggml_backend_buffer_get_type(buffer)); -} - -void ggml_backend_buffer_set_usage(ggml_backend_buffer_t buffer, enum ggml_backend_buffer_usage usage) { - buffer->usage = usage; - - // FIXME: add a generic callback to the buffer interface - if (ggml_backend_buffer_is_multi_buffer(buffer)) { - ggml_backend_multi_buffer_set_usage(buffer, usage); - } -} - -ggml_backend_buffer_type_t ggml_backend_buffer_get_type(ggml_backend_buffer_t buffer) { - return buffer->buft; -} - -void ggml_backend_buffer_reset(ggml_backend_buffer_t buffer) { - if (buffer->iface.reset) { - buffer->iface.reset(buffer); - } -} - -bool ggml_backend_buffer_copy_tensor(const struct ggml_tensor * src, struct ggml_tensor * dst) { - ggml_backend_buffer_t dst_buf = dst->view_src ? dst->view_src->buffer : dst->buffer; - if (dst_buf->iface.cpy_tensor) { - return src->buffer->iface.cpy_tensor(dst_buf, src, dst); - } - return false; -} - -// backend - -ggml_guid_t ggml_backend_guid(ggml_backend_t backend) { - if (backend == NULL) { - return NULL; - } - return backend->guid; -} - -const char * ggml_backend_name(ggml_backend_t backend) { - if (backend == NULL) { - return "NULL"; - } - return backend->iface.get_name(backend); -} - -void ggml_backend_free(ggml_backend_t backend) { - if (backend == NULL) { - return; - } - - backend->iface.free(backend); -} - -ggml_backend_buffer_type_t ggml_backend_get_default_buffer_type(ggml_backend_t backend) { - return backend->iface.get_default_buffer_type(backend); -} - -ggml_backend_buffer_t ggml_backend_alloc_buffer(ggml_backend_t backend, size_t size) { - return ggml_backend_buft_alloc_buffer(ggml_backend_get_default_buffer_type(backend), size); -} - -size_t ggml_backend_get_alignment(ggml_backend_t backend) { - return ggml_backend_buft_get_alignment(ggml_backend_get_default_buffer_type(backend)); -} - -size_t ggml_backend_get_max_size(ggml_backend_t backend) { - return ggml_backend_buft_get_max_size(ggml_backend_get_default_buffer_type(backend)); -} - -void ggml_backend_tensor_set_async(ggml_backend_t backend, struct ggml_tensor * tensor, const void * data, size_t offset, size_t size) { - GGML_ASSERT(tensor->data != NULL && "tensor not allocated"); - GGML_ASSERT(offset + size <= ggml_nbytes(tensor) && "tensor write out of bounds"); - - if (backend->iface.set_tensor_async == NULL) { - ggml_backend_tensor_set(tensor, data, offset, size); - } else { - backend->iface.set_tensor_async(backend, tensor, data, offset, size); - } -} - -void ggml_backend_tensor_get_async(ggml_backend_t backend, const struct ggml_tensor * tensor, void * data, size_t offset, size_t size) { - GGML_ASSERT(tensor->data != NULL && "tensor not allocated"); - GGML_ASSERT(offset + size <= ggml_nbytes(tensor) && "tensor read out of bounds"); - - if (backend->iface.get_tensor_async == NULL) { - ggml_backend_tensor_get(tensor, data, offset, size); - } else { - backend->iface.get_tensor_async(backend, tensor, data, offset, size); - } -} - -GGML_CALL void ggml_backend_tensor_set(struct ggml_tensor * tensor, const void * data, size_t offset, size_t size) { - ggml_backend_buffer_t buf = tensor->view_src ? tensor->view_src->buffer : tensor->buffer; - - GGML_ASSERT(buf != NULL && "tensor buffer not set"); - GGML_ASSERT(tensor->data != NULL && "tensor not allocated"); - GGML_ASSERT(offset + size <= ggml_nbytes(tensor) && "tensor write out of bounds"); - - if (!size) { - return; - } - - buf->iface.set_tensor(buf, tensor, data, offset, size); -} - -GGML_CALL void ggml_backend_tensor_get(const struct ggml_tensor * tensor, void * data, size_t offset, size_t size) { - ggml_backend_buffer_t buf = tensor->view_src ? tensor->view_src->buffer : tensor->buffer; - - GGML_ASSERT(buf != NULL && "tensor buffer not set"); - GGML_ASSERT(tensor->data != NULL && "tensor not allocated"); - GGML_ASSERT(offset + size <= ggml_nbytes(tensor) && "tensor read out of bounds"); - - if (!size) { - return; - } - - buf->iface.get_tensor(buf, tensor, data, offset, size); -} - -void ggml_backend_synchronize(ggml_backend_t backend) { - if (backend->iface.synchronize == NULL) { - return; - } - - backend->iface.synchronize(backend); -} - -ggml_backend_graph_plan_t ggml_backend_graph_plan_create(ggml_backend_t backend, struct ggml_cgraph * cgraph) { - GGML_ASSERT(backend->iface.graph_plan_create != NULL); - - return backend->iface.graph_plan_create(backend, cgraph); -} - -void ggml_backend_graph_plan_free(ggml_backend_t backend, ggml_backend_graph_plan_t plan) { - GGML_ASSERT(backend->iface.graph_plan_free != NULL); - - backend->iface.graph_plan_free(backend, plan); -} - -enum ggml_status ggml_backend_graph_plan_compute(ggml_backend_t backend, ggml_backend_graph_plan_t plan) { - GGML_ASSERT(backend->iface.graph_plan_compute != NULL); - - return backend->iface.graph_plan_compute(backend, plan); -} - -enum ggml_status ggml_backend_graph_compute(ggml_backend_t backend, struct ggml_cgraph * cgraph) { - enum ggml_status err = ggml_backend_graph_compute_async(backend, cgraph); - ggml_backend_synchronize(backend); - return err; -} - -enum ggml_status ggml_backend_graph_compute_async(ggml_backend_t backend, struct ggml_cgraph * cgraph) { - return backend->iface.graph_compute(backend, cgraph); -} - -bool ggml_backend_supports_op(ggml_backend_t backend, const struct ggml_tensor * op) { - return backend->iface.supports_op(backend, op); -} - -bool ggml_backend_offload_op(ggml_backend_t backend, const struct ggml_tensor * op) { - if (backend->iface.offload_op != NULL) { - return backend->iface.offload_op(backend, op); - } - return false; -} - -// backend copy - -static bool ggml_are_same_layout(const struct ggml_tensor * a, const struct ggml_tensor * b) { - if (a->type != b->type) { - return false; - } - for (int i = 0; i < GGML_MAX_DIMS; i++) { - if (a->ne[i] != b->ne[i]) { - return false; - } - if (a->nb[i] != b->nb[i]) { - return false; - } - } - return true; -} - -void ggml_backend_tensor_copy(struct ggml_tensor * src, struct ggml_tensor * dst) { - GGML_ASSERT(ggml_are_same_layout(src, dst) && "cannot copy tensors with different layouts"); - - if (src == dst) { - return; - } - - if (ggml_backend_buffer_is_host(src->buffer)) { - ggml_backend_tensor_set(dst, src->data, 0, ggml_nbytes(src)); - } else if (ggml_backend_buffer_is_host(dst->buffer)) { - ggml_backend_tensor_get(src, dst->data, 0, ggml_nbytes(src)); - } else if (!ggml_backend_buffer_copy_tensor(src, dst)) { -#ifndef NDEBUG - fprintf(stderr, "%s: warning: slow copy from %s to %s\n", __func__, ggml_backend_buffer_name(src->buffer), ggml_backend_buffer_name(dst->buffer)); -#endif - size_t nbytes = ggml_nbytes(src); - void * data = malloc(nbytes); - ggml_backend_tensor_get(src, data, 0, nbytes); - ggml_backend_tensor_set(dst, data, 0, nbytes); - free(data); - } -} - -void ggml_backend_tensor_copy_async(ggml_backend_t backend_src, ggml_backend_t backend_dst, struct ggml_tensor * src, struct ggml_tensor * dst) { - GGML_ASSERT(ggml_are_same_layout(src, dst) && "cannot copy tensors with different layouts"); - - if (src == dst) { - return; - } - - if (backend_dst->iface.cpy_tensor_async != NULL) { - if (backend_dst->iface.cpy_tensor_async(backend_src, backend_dst, src, dst)) { - return; - } - } - - // an async copy would normally happen after all the queued operations on both backends are completed - // sync src, set_async dst - if (ggml_backend_buffer_is_host(src->buffer)) { - ggml_backend_synchronize(backend_src); - ggml_backend_tensor_set_async(backend_dst, dst, src->data, 0, ggml_nbytes(src)); - } else { - ggml_backend_synchronize(backend_src); - ggml_backend_tensor_copy(src, dst); - ggml_backend_synchronize(backend_dst); - } -} - -// events - -ggml_backend_event_t ggml_backend_event_new(ggml_backend_t backend) { - if (backend->iface.event_new == NULL) { - return NULL; - } - return backend->iface.event_new(backend); -} - -void ggml_backend_event_free(ggml_backend_event_t event) { - if (event == NULL) { - return; - } - event->backend->iface.event_free(event); -} - -void ggml_backend_event_record(ggml_backend_event_t event) { - GGML_ASSERT(event->backend->iface.event_record != NULL); - - event->backend->iface.event_record(event); -} - -void ggml_backend_event_synchronize(ggml_backend_event_t event) { - GGML_ASSERT(event->backend->iface.event_synchronize != NULL); - - event->backend->iface.event_synchronize(event); -} - -void ggml_backend_event_wait(ggml_backend_t backend, ggml_backend_event_t event) { - GGML_ASSERT(backend->iface.event_wait != NULL); - - backend->iface.event_wait(backend, event); -} - -// backend registry - -#define GGML_REG_MAX_BACKENDS 16 - -struct ggml_backend_reg { - char name[128]; - ggml_backend_init_fn init_fn; - ggml_backend_buffer_type_t default_buffer_type; - void * user_data; -}; - -static struct ggml_backend_reg ggml_backend_registry[GGML_REG_MAX_BACKENDS]; -static size_t ggml_backend_registry_count = 0; - -GGML_CALL static ggml_backend_t ggml_backend_reg_cpu_init(const char * params, void * user_data); - -GGML_CALL static void ggml_backend_registry_init(void) { - static bool initialized = false; - - if (initialized) { - return; - } - - initialized = true; - - ggml_backend_register("CPU", ggml_backend_reg_cpu_init, ggml_backend_cpu_buffer_type(), NULL); - - // add forward decls here to avoid including the backend headers -#ifdef GGML_USE_CUDA - extern GGML_CALL void ggml_backend_cuda_reg_devices(void); - ggml_backend_cuda_reg_devices(); -#endif - -#ifdef GGML_USE_SYCL - extern void ggml_backend_sycl_reg_devices(void); - ggml_backend_sycl_reg_devices(); -#endif - -#ifdef GGML_USE_METAL - extern GGML_CALL ggml_backend_t ggml_backend_reg_metal_init(const char * params, void * user_data); - extern GGML_CALL ggml_backend_buffer_type_t ggml_backend_metal_buffer_type(void); - ggml_backend_register("Metal", ggml_backend_reg_metal_init, ggml_backend_metal_buffer_type(), NULL); -#endif - -#ifdef GGML_USE_VULKAN - extern GGML_CALL int ggml_backend_vk_reg_devices(void); - ggml_backend_vk_reg_devices(); -#endif - -#ifdef GGML_USE_KOMPUTE - extern GGML_CALL void ggml_backend_kompute_reg_devices(void); - ggml_backend_kompute_reg_devices(); -#endif -} - -GGML_CALL void ggml_backend_register(const char * name, ggml_backend_init_fn init_fn, ggml_backend_buffer_type_t default_buffer_type, void * user_data) { - GGML_ASSERT(ggml_backend_registry_count < GGML_REG_MAX_BACKENDS); - - size_t id = ggml_backend_registry_count; - - ggml_backend_registry[id] = (struct ggml_backend_reg) { - /* .name = */ {0}, - /* .fn = */ init_fn, - /* .default_buffer_type = */ default_buffer_type, - /* .user_data = */ user_data, - }; - - snprintf(ggml_backend_registry[id].name, sizeof(ggml_backend_registry[id].name), "%s", name); - -#ifndef NDEBUG - fprintf(stderr, "%s: registered backend %s\n", __func__, name); -#endif - - ggml_backend_registry_count++; -} - -size_t ggml_backend_reg_get_count(void) { - ggml_backend_registry_init(); - - return ggml_backend_registry_count; -} - -size_t ggml_backend_reg_find_by_name(const char * name) { - ggml_backend_registry_init(); - - for (size_t i = 0; i < ggml_backend_registry_count; i++) { - // TODO: case insensitive in a portable way - if (strcmp(ggml_backend_registry[i].name, name) == 0) { - return i; - } - } - - // not found - return SIZE_MAX; -} - -// init from backend:params string -ggml_backend_t ggml_backend_reg_init_backend_from_str(const char * backend_str) { - ggml_backend_registry_init(); - - const char * params = strchr(backend_str, ':'); - char backend_name[128]; - if (params == NULL) { - snprintf(backend_name, sizeof(backend_name), "%s", backend_str); - params = ""; - } else { - snprintf(backend_name, sizeof(backend_name), "%.*s", (int)(params - backend_str), backend_str); - params++; - } - - size_t backend_i = ggml_backend_reg_find_by_name(backend_name); - - if (backend_i == SIZE_MAX) { - fprintf(stderr, "%s: backend %s not found\n", __func__, backend_name); - return NULL; - } - - return ggml_backend_reg_init_backend(backend_i, params); -} - -const char * ggml_backend_reg_get_name(size_t i) { - ggml_backend_registry_init(); - - GGML_ASSERT(i < ggml_backend_registry_count); - return ggml_backend_registry[i].name; -} - -ggml_backend_t ggml_backend_reg_init_backend(size_t i, const char * params) { - ggml_backend_registry_init(); - - GGML_ASSERT(i < ggml_backend_registry_count); - return ggml_backend_registry[i].init_fn(params, ggml_backend_registry[i].user_data); -} - -ggml_backend_buffer_type_t ggml_backend_reg_get_default_buffer_type(size_t i) { - ggml_backend_registry_init(); - - GGML_ASSERT(i < ggml_backend_registry_count); - return ggml_backend_registry[i].default_buffer_type; -} - -ggml_backend_buffer_t ggml_backend_reg_alloc_buffer(size_t i, size_t size) { - ggml_backend_registry_init(); - - GGML_ASSERT(i < ggml_backend_registry_count); - return ggml_backend_buft_alloc_buffer(ggml_backend_registry[i].default_buffer_type, size); -} - -// backend CPU - -static const size_t TENSOR_ALIGNMENT = 32; // required for mmap as gguf only guarantees 32-byte alignment - -GGML_CALL static const char * ggml_backend_cpu_buffer_name(ggml_backend_buffer_t buffer) { - return "CPU"; - - GGML_UNUSED(buffer); -} - -GGML_CALL static void * ggml_backend_cpu_buffer_get_base(ggml_backend_buffer_t buffer) { - uintptr_t data = (uintptr_t)buffer->context; - - // align the buffer - if (data % TENSOR_ALIGNMENT != 0) { - data = GGML_PAD(data, TENSOR_ALIGNMENT); - } - - return (void *)data; -} - -GGML_CALL static void ggml_backend_cpu_buffer_free_buffer(ggml_backend_buffer_t buffer) { - free(buffer->context); -} - -GGML_CALL static void ggml_backend_cpu_buffer_set_tensor(ggml_backend_buffer_t buffer, struct ggml_tensor * tensor, const void * data, size_t offset, size_t size) { - memcpy((char *)tensor->data + offset, data, size); - - GGML_UNUSED(buffer); -} - -GGML_CALL static void ggml_backend_cpu_buffer_get_tensor(ggml_backend_buffer_t buffer, const struct ggml_tensor * tensor, void * data, size_t offset, size_t size) { - memcpy(data, (const char *)tensor->data + offset, size); - - GGML_UNUSED(buffer); -} - -GGML_CALL static bool ggml_backend_cpu_buffer_cpy_tensor(ggml_backend_buffer_t buffer, const struct ggml_tensor * src, struct ggml_tensor * dst) { - if (ggml_backend_buffer_is_host(src->buffer)) { - memcpy(dst->data, src->data, ggml_nbytes(src)); - return true; - } - return false; - - GGML_UNUSED(buffer); -} - -GGML_CALL static void ggml_backend_cpu_buffer_clear(ggml_backend_buffer_t buffer, uint8_t value) { - memset(buffer->context, value, buffer->size); -} - -static struct ggml_backend_buffer_i cpu_backend_buffer_i = { - /* .get_name = */ ggml_backend_cpu_buffer_name, - /* .free_buffer = */ ggml_backend_cpu_buffer_free_buffer, - /* .get_base = */ ggml_backend_cpu_buffer_get_base, - /* .init_tensor = */ NULL, // no initialization required - /* .set_tensor = */ ggml_backend_cpu_buffer_set_tensor, - /* .get_tensor = */ ggml_backend_cpu_buffer_get_tensor, - /* .cpy_tensor = */ ggml_backend_cpu_buffer_cpy_tensor, - /* .clear = */ ggml_backend_cpu_buffer_clear, - /* .reset = */ NULL, -}; - -// for buffers from ptr, free is not called -static struct ggml_backend_buffer_i cpu_backend_buffer_i_from_ptr = { - /* .get_name = */ ggml_backend_cpu_buffer_name, - /* .free_buffer = */ NULL, // ptr is not owned by the buffer, so it does not need to be freed - /* .get_base = */ ggml_backend_cpu_buffer_get_base, - /* .init_tensor = */ NULL, // no initialization required - /* .set_tensor = */ ggml_backend_cpu_buffer_set_tensor, - /* .get_tensor = */ ggml_backend_cpu_buffer_get_tensor, - /* .cpy_tensor = */ ggml_backend_cpu_buffer_cpy_tensor, - /* .clear = */ ggml_backend_cpu_buffer_clear, - /* .reset = */ NULL, -}; - -GGML_CALL static const char * ggml_backend_cpu_buffer_type_get_name(ggml_backend_buffer_type_t buft) { - return "CPU"; - - GGML_UNUSED(buft); -} - -GGML_CALL static ggml_backend_buffer_t ggml_backend_cpu_buffer_type_alloc_buffer(ggml_backend_buffer_type_t buft, size_t size) { - size += TENSOR_ALIGNMENT; // malloc may return an address that is not aligned - void * data = malloc(size); // TODO: use GGML_ALIGNED_MALLOC (move to ggml-impl.h) - if (data == NULL) { - fprintf(stderr, "%s: failed to allocate buffer of size %zu\n", __func__, size); - return NULL; - } - - return ggml_backend_buffer_init(buft, cpu_backend_buffer_i, data, size); -} - -GGML_CALL static size_t ggml_backend_cpu_buffer_type_get_alignment(ggml_backend_buffer_type_t buft) { - return TENSOR_ALIGNMENT; - - GGML_UNUSED(buft); -} - -GGML_CALL static bool ggml_backend_cpu_buffer_type_supports_backend(ggml_backend_buffer_type_t buft, ggml_backend_t backend) { - return ggml_backend_is_cpu(backend); - - GGML_UNUSED(buft); -} - -GGML_CALL static bool ggml_backend_cpu_buffer_type_is_host(ggml_backend_buffer_type_t buft) { - return true; - - GGML_UNUSED(buft); -} - -GGML_CALL ggml_backend_buffer_type_t ggml_backend_cpu_buffer_type(void) { - static struct ggml_backend_buffer_type ggml_backend_cpu_buffer_type = { - /* .iface = */ { - /* .get_name = */ ggml_backend_cpu_buffer_type_get_name, - /* .alloc_buffer = */ ggml_backend_cpu_buffer_type_alloc_buffer, - /* .get_alignment = */ ggml_backend_cpu_buffer_type_get_alignment, - /* .get_max_size = */ NULL, // defaults to SIZE_MAX - /* .get_alloc_size = */ NULL, // defaults to ggml_nbytes - /* .supports_backend = */ ggml_backend_cpu_buffer_type_supports_backend, - /* .is_host = */ ggml_backend_cpu_buffer_type_is_host, - }, - /* .context = */ NULL, - }; - - return &ggml_backend_cpu_buffer_type; -} - -#ifdef GGML_USE_CPU_HBM - -// buffer type HBM - -#include - -GGML_CALL static const char * ggml_backend_cpu_hbm_buffer_type_get_name(ggml_backend_buffer_type_t buft) { - return "CPU_HBM"; - - GGML_UNUSED(buft); -} - -GGML_CALL static const char * ggml_backend_cpu_hbm_buffer_get_name(ggml_backend_buffer_t buf) { - return "CPU_HBM"; - - GGML_UNUSED(buf); -} - -GGML_CALL static void ggml_backend_cpu_hbm_buffer_free_buffer(ggml_backend_buffer_t buffer) { - hbw_free(buffer->context); -} - -GGML_CALL static ggml_backend_buffer_t ggml_backend_cpu_hbm_buffer_type_alloc_buffer(ggml_backend_buffer_type_t buft, size_t size) { - //void * ptr = hbw_malloc(size); - void * ptr; - int result = hbw_posix_memalign(&ptr, ggml_backend_cpu_buffer_type_get_alignment(buft), size); - if (result != 0) { - fprintf(stderr, "failed to allocate HBM buffer of size %zu\n", size); - return NULL; - } - - ggml_backend_buffer_t buffer = ggml_backend_cpu_buffer_from_ptr(ptr, size); - buffer->buft = buft; - buffer->iface.get_name = ggml_backend_cpu_hbm_buffer_get_name; - buffer->iface.free_buffer = ggml_backend_cpu_hbm_buffer_free_buffer; - - return buffer; -} - -ggml_backend_buffer_type_t ggml_backend_cpu_hbm_buffer_type(void) { - static struct ggml_backend_buffer_type ggml_backend_cpu_buffer_type_hbm = { - /* .iface = */ { - /* .get_name = */ ggml_backend_cpu_hbm_buffer_type_get_name, - /* .alloc_buffer = */ ggml_backend_cpu_hbm_buffer_type_alloc_buffer, - /* .get_alignment = */ ggml_backend_cpu_buffer_type_get_alignment, - /* .get_max_size = */ NULL, // defaults to SIZE_MAX - /* .get_alloc_size = */ NULL, // defaults to ggml_nbytes - /* .supports_backend = */ ggml_backend_cpu_buffer_type_supports_backend, - /* .is_host = */ ggml_backend_cpu_buffer_type_is_host, - }, - /* .context = */ NULL, - }; - - return &ggml_backend_cpu_buffer_type_hbm; -} -#endif - -struct ggml_backend_cpu_context { - int n_threads; - void * work_data; - size_t work_size; - - ggml_abort_callback abort_callback; - void * abort_callback_data; -}; - -GGML_CALL static const char * ggml_backend_cpu_name(ggml_backend_t backend) { - return "CPU"; - - GGML_UNUSED(backend); -} - -GGML_CALL static void ggml_backend_cpu_free(ggml_backend_t backend) { - struct ggml_backend_cpu_context * cpu_ctx = (struct ggml_backend_cpu_context *)backend->context; - free(cpu_ctx->work_data); - free(cpu_ctx); - free(backend); -} - -GGML_CALL static ggml_backend_buffer_type_t ggml_backend_cpu_get_default_buffer_type(ggml_backend_t backend) { - return ggml_backend_cpu_buffer_type(); - - GGML_UNUSED(backend); -} - -struct ggml_backend_plan_cpu { - struct ggml_cplan cplan; - struct ggml_cgraph cgraph; -}; - -GGML_CALL static ggml_backend_graph_plan_t ggml_backend_cpu_graph_plan_create(ggml_backend_t backend, const struct ggml_cgraph * cgraph) { - struct ggml_backend_cpu_context * cpu_ctx = (struct ggml_backend_cpu_context *)backend->context; - - struct ggml_backend_plan_cpu * cpu_plan = malloc(sizeof(struct ggml_backend_plan_cpu)); - - cpu_plan->cplan = ggml_graph_plan(cgraph, cpu_ctx->n_threads); - cpu_plan->cgraph = *cgraph; // FIXME: deep copy - - if (cpu_plan->cplan.work_size > 0) { - cpu_plan->cplan.work_data = malloc(cpu_plan->cplan.work_size); - if (cpu_plan->cplan.work_data == NULL) { - free(cpu_plan); - return NULL; - } - } - - cpu_plan->cplan.abort_callback = cpu_ctx->abort_callback; - cpu_plan->cplan.abort_callback_data = cpu_ctx->abort_callback_data; - - return cpu_plan; -} - -GGML_CALL static void ggml_backend_cpu_graph_plan_free(ggml_backend_t backend, ggml_backend_graph_plan_t plan) { - struct ggml_backend_plan_cpu * cpu_plan = (struct ggml_backend_plan_cpu *)plan; - - free(cpu_plan->cplan.work_data); - free(cpu_plan); - - GGML_UNUSED(backend); -} - -GGML_CALL static enum ggml_status ggml_backend_cpu_graph_plan_compute(ggml_backend_t backend, ggml_backend_graph_plan_t plan) { - struct ggml_backend_plan_cpu * cpu_plan = (struct ggml_backend_plan_cpu *)plan; - - return ggml_graph_compute(&cpu_plan->cgraph, &cpu_plan->cplan); - - GGML_UNUSED(backend); -} - -GGML_CALL static enum ggml_status ggml_backend_cpu_graph_compute(ggml_backend_t backend, struct ggml_cgraph * cgraph) { - struct ggml_backend_cpu_context * cpu_ctx = (struct ggml_backend_cpu_context *)backend->context; - - struct ggml_cplan cplan = ggml_graph_plan(cgraph, cpu_ctx->n_threads); - - if (cpu_ctx->work_size < cplan.work_size) { - free(cpu_ctx->work_data); - cpu_ctx->work_data = malloc(cplan.work_size); - if (cpu_ctx->work_data == NULL) { - cpu_ctx->work_size = 0; - return GGML_STATUS_ALLOC_FAILED; - } - cpu_ctx->work_size = cplan.work_size; - } - cplan.work_data = cpu_ctx->work_data; - - cplan.abort_callback = cpu_ctx->abort_callback; - cplan.abort_callback_data = cpu_ctx->abort_callback_data; - - return ggml_graph_compute(cgraph, &cplan); -} - -GGML_CALL static bool ggml_backend_cpu_supports_op(ggml_backend_t backend, const struct ggml_tensor * op) { - switch (op->op) { - case GGML_OP_CPY: - return - op->type != GGML_TYPE_IQ2_XXS && - op->type != GGML_TYPE_IQ2_XS && - op->type != GGML_TYPE_IQ1_S && - op->type != GGML_TYPE_IQ1_M; // missing type_traits.from_float - case GGML_OP_MUL_MAT: - return op->src[1]->type == GGML_TYPE_F32 || op->src[1]->type == ggml_internal_get_type_traits(op->src[0]->type).vec_dot_type; - default: - return true; - } - - GGML_UNUSED(backend); -} - -static struct ggml_backend_i cpu_backend_i = { - /* .get_name = */ ggml_backend_cpu_name, - /* .free = */ ggml_backend_cpu_free, - /* .get_default_buffer_type = */ ggml_backend_cpu_get_default_buffer_type, - /* .set_tensor_async = */ NULL, - /* .get_tensor_async = */ NULL, - /* .cpy_tensor_async = */ NULL, - /* .synchronize = */ NULL, - /* .graph_plan_create = */ ggml_backend_cpu_graph_plan_create, - /* .graph_plan_free = */ ggml_backend_cpu_graph_plan_free, - /* .graph_plan_compute = */ ggml_backend_cpu_graph_plan_compute, - /* .graph_compute = */ ggml_backend_cpu_graph_compute, - /* .supports_op = */ ggml_backend_cpu_supports_op, - /* .offload_op = */ NULL, - /* .event_new = */ NULL, - /* .event_free = */ NULL, - /* .event_record = */ NULL, - /* .event_wait = */ NULL, - /* .event_synchronize = */ NULL, -}; - -static ggml_guid_t ggml_backend_cpu_guid(void) { - static ggml_guid guid = { 0xaa, 0x67, 0xc7, 0x43, 0x96, 0xe6, 0xa3, 0x8a, 0xe3, 0xaf, 0xea, 0x92, 0x36, 0xbc, 0xfc, 0x89 }; - return &guid; -} - -ggml_backend_t ggml_backend_cpu_init(void) { - struct ggml_backend_cpu_context * ctx = malloc(sizeof(struct ggml_backend_cpu_context)); - if (ctx == NULL) { - return NULL; - } - - ctx->n_threads = GGML_DEFAULT_N_THREADS; - ctx->work_data = NULL; - ctx->work_size = 0; - ctx->abort_callback = NULL; - ctx->abort_callback_data = NULL; - - ggml_backend_t cpu_backend = malloc(sizeof(struct ggml_backend)); - if (cpu_backend == NULL) { - free(ctx); - return NULL; - } - - *cpu_backend = (struct ggml_backend) { - /* .guid = */ ggml_backend_cpu_guid(), - /* .interface = */ cpu_backend_i, - /* .context = */ ctx - }; - return cpu_backend; -} - -GGML_CALL bool ggml_backend_is_cpu(ggml_backend_t backend) { - return backend != NULL && ggml_guid_matches(backend->guid, ggml_backend_cpu_guid()); -} - -void ggml_backend_cpu_set_n_threads(ggml_backend_t backend_cpu, int n_threads) { - GGML_ASSERT(ggml_backend_is_cpu(backend_cpu)); - - struct ggml_backend_cpu_context * ctx = (struct ggml_backend_cpu_context *)backend_cpu->context; - ctx->n_threads = n_threads; -} - -void ggml_backend_cpu_set_abort_callback(ggml_backend_t backend_cpu, ggml_abort_callback abort_callback, void * abort_callback_data) { - GGML_ASSERT(ggml_backend_is_cpu(backend_cpu)); - - struct ggml_backend_cpu_context * ctx = (struct ggml_backend_cpu_context *)backend_cpu->context; - ctx->abort_callback = abort_callback; - ctx->abort_callback_data = abort_callback_data; -} - -GGML_CALL ggml_backend_buffer_t ggml_backend_cpu_buffer_from_ptr(void * ptr, size_t size) { - GGML_ASSERT((uintptr_t)ptr % TENSOR_ALIGNMENT == 0 && "buffer pointer must be aligned"); - return ggml_backend_buffer_init(ggml_backend_cpu_buffer_type(), cpu_backend_buffer_i_from_ptr, ptr, size); -} - -GGML_CALL static ggml_backend_t ggml_backend_reg_cpu_init(const char * params, void * user_data) { - return ggml_backend_cpu_init(); - - GGML_UNUSED(params); - GGML_UNUSED(user_data); -} - -// multi-buffer buffer - -struct ggml_backend_multi_buffer_context { - ggml_backend_buffer_t * buffers; - size_t n_buffers; -}; - -typedef struct ggml_backend_multi_buffer_context * ggml_backend_multi_buffer_context_t; - -GGML_CALL static const char * ggml_backend_multi_buffer_get_name(ggml_backend_buffer_t buffer) { - ggml_backend_multi_buffer_context_t ctx = (ggml_backend_multi_buffer_context_t) buffer->context; - - return ctx->buffers[0]->iface.get_name(ctx->buffers[0]); -} - -GGML_CALL static void ggml_backend_multi_buffer_free_buffer(ggml_backend_buffer_t buffer) { - ggml_backend_multi_buffer_context_t ctx = (ggml_backend_multi_buffer_context_t) buffer->context; - for (size_t i = 0; i < ctx->n_buffers; i++) { - ggml_backend_buffer_free(ctx->buffers[i]); - } - - free(ctx->buffers); - free(ctx); -} - -GGML_CALL static void ggml_backend_multi_buffer_clear(ggml_backend_buffer_t buffer, uint8_t value) { - ggml_backend_multi_buffer_context_t ctx = (ggml_backend_multi_buffer_context_t) buffer->context; - for (size_t i = 0; i < ctx->n_buffers; i++) { - ggml_backend_buffer_clear(ctx->buffers[i], value); - } -} - -static struct ggml_backend_buffer_i ggml_backend_multi_buffer_context_interface(void) { - static struct ggml_backend_buffer_i multi_backend_buffer_i = { - /* .get_name = */ ggml_backend_multi_buffer_get_name, - /* .free_buffer = */ ggml_backend_multi_buffer_free_buffer, - /* .get_base = */ NULL, - /* .init_tensor = */ NULL, - /* .set_tensor = */ NULL, - /* .get_tensor = */ NULL, - /* .cpy_tensor = */ NULL, - /* .clear = */ ggml_backend_multi_buffer_clear, - /* .reset = */ NULL, - }; - - return multi_backend_buffer_i; -} - -GGML_CALL ggml_backend_buffer_t ggml_backend_multi_buffer_alloc_buffer(ggml_backend_buffer_t * buffers, size_t n_buffers) { - ggml_backend_multi_buffer_context_t ctx = (ggml_backend_multi_buffer_context_t) malloc(sizeof(struct ggml_backend_multi_buffer_context)); - ctx->n_buffers = n_buffers; - ctx->buffers = (ggml_backend_buffer_t *) malloc(n_buffers * sizeof(ggml_backend_buffer_t)); - - GGML_ASSERT(ctx->buffers != NULL); - - size_t total_size = 0; - for (size_t i = 0; i < n_buffers; i++) { - ctx->buffers[i] = buffers[i]; - total_size += ggml_backend_buffer_get_size(buffers[i]); - } - - return ggml_backend_buffer_init(buffers[0]->buft, ggml_backend_multi_buffer_context_interface(), ctx, total_size); -} - -GGML_CALL bool ggml_backend_buffer_is_multi_buffer(ggml_backend_buffer_t buffer) { - return buffer->iface.get_name == ggml_backend_multi_buffer_get_name; -} - -GGML_CALL void ggml_backend_multi_buffer_set_usage(ggml_backend_buffer_t buffer, enum ggml_backend_buffer_usage usage) { - GGML_ASSERT(ggml_backend_buffer_is_multi_buffer(buffer)); - ggml_backend_multi_buffer_context_t ctx = (ggml_backend_multi_buffer_context_t) buffer->context; - for (size_t i = 0; i < ctx->n_buffers; i++) { - ggml_backend_buffer_set_usage(ctx->buffers[i], usage); - } -} - -// creates a copy of the tensor with the same memory layout -static struct ggml_tensor * ggml_dup_tensor_layout(struct ggml_context * ctx, const struct ggml_tensor * tensor) { - struct ggml_tensor * dup = ggml_dup_tensor(ctx, tensor); - for (int i = 0; i < GGML_MAX_DIMS; i++) { - dup->nb[i] = tensor->nb[i]; - } - return dup; -} - -static bool ggml_is_view_op(enum ggml_op op) { - return op == GGML_OP_VIEW || op == GGML_OP_RESHAPE || op == GGML_OP_PERMUTE || op == GGML_OP_TRANSPOSE; -} - -// scheduler - -#ifndef GGML_SCHED_MAX_BACKENDS -#define GGML_SCHED_MAX_BACKENDS 16 -#endif - -#ifndef GGML_SCHED_MAX_SPLITS -#define GGML_SCHED_MAX_SPLITS 2048 -#endif - -#ifndef GGML_SCHED_MAX_SPLIT_INPUTS -#define GGML_SCHED_MAX_SPLIT_INPUTS GGML_MAX_SRC -#endif - -#ifndef GGML_SCHED_MAX_COPIES -#define GGML_SCHED_MAX_COPIES 4 -#endif - -struct ggml_backend_sched_split { - int backend_id; - int i_start; - int i_end; - struct ggml_tensor * inputs[GGML_SCHED_MAX_SPLIT_INPUTS]; - int n_inputs; - // graph view of this split - struct ggml_cgraph graph; -}; - -struct ggml_backend_sched { - bool is_reset; // true if the scheduler has been reset since the last graph split - bool is_alloc; - - int n_backends; - - ggml_backend_t backends[GGML_SCHED_MAX_BACKENDS]; - ggml_backend_buffer_type_t bufts[GGML_SCHED_MAX_BACKENDS]; - ggml_gallocr_t galloc; - - // hash keys of the nodes in the graph - struct ggml_hash_set hash_set; - // hash values - int * tensor_backend_id; - struct ggml_tensor * (* tensor_copies)[GGML_SCHED_MAX_BACKENDS][GGML_SCHED_MAX_COPIES]; - - int * node_backend_ids; // [graph_size] - int * leaf_backend_ids; // [graph_size] - - // copy of the graph with modified inputs - struct ggml_cgraph * graph; - - // graph splits - struct ggml_backend_sched_split * splits; - int n_splits; - int splits_capacity; - - // pipeline parallelism support - int n_copies; - int cur_copy; - ggml_backend_event_t events[GGML_SCHED_MAX_BACKENDS][GGML_SCHED_MAX_COPIES]; - struct ggml_tensor * graph_inputs[GGML_SCHED_MAX_SPLIT_INPUTS]; - int n_graph_inputs; - - struct ggml_context * ctx; - - ggml_backend_sched_eval_callback callback_eval; - void * callback_eval_user_data; - - // align context_buffer to GGML_MEM_ALIGN -#ifdef _MSC_VER - __declspec(align(GGML_MEM_ALIGN)) -#else - __attribute__((aligned(GGML_MEM_ALIGN))) -#endif - char context_buffer[GGML_SCHED_MAX_SPLITS*GGML_SCHED_MAX_SPLIT_INPUTS*2*sizeof(struct ggml_tensor) + sizeof(struct ggml_cgraph)]; -}; - -#define hash_id(tensor) ggml_hash_find_or_insert(sched->hash_set, tensor) -#define tensor_backend_id(tensor) sched->tensor_backend_id[hash_id(tensor)] - -// returns the priority of the backend, lower id is higher priority -static int ggml_backend_sched_backend_id(ggml_backend_sched_t sched, ggml_backend_t backend) { - for (int i = 0; i < sched->n_backends; i++) { - if (sched->backends[i] == backend) { - return i; - } - } - return -1; -} - -static int ggml_backend_sched_backend_from_buffer(ggml_backend_sched_t sched, const struct ggml_tensor * tensor) { - ggml_backend_buffer_t buffer = tensor->buffer; - if (buffer == NULL) { - return -1; - } - - // find highest prio backend that supports the buffer type - for (int i = 0; i < sched->n_backends; i++) { - if (ggml_backend_buft_supports_backend(buffer->buft, sched->backends[i])) { - return i; - } - } - - fprintf(stderr, "%s: error: no backend supports buffer type %s used in tensor %s\n", - __func__, ggml_backend_buffer_name(buffer), tensor->name); - GGML_ASSERT(false); - - return -1; -} - -#if 0 -static char causes[GGML_DEFAULT_GRAPH_SIZE*16 + GGML_SCHED_MAX_SPLITS*GGML_SCHED_MAX_SPLIT_INPUTS][128]; // debug only -#define SET_CAUSE(node, ...) sprintf(causes[hash_id(node)], __VA_ARGS__) -#define GET_CAUSE(node) causes[hash_id(node)] -#else -#define SET_CAUSE(node, ...) -#define GET_CAUSE(node) "" -#endif - -// returns the backend that should be used for the node based on the current locations -static int ggml_backend_sched_backend_id_from_cur(ggml_backend_sched_t sched, struct ggml_tensor * tensor) { - // TODO: use supports_op to check if the backend supports the op - - // assign pre-allocated nodes to their backend - int cur_backend_id = ggml_backend_sched_backend_from_buffer(sched, tensor); - if (cur_backend_id != -1) { - SET_CAUSE(tensor, "1.dst"); - return cur_backend_id; - } - - // view_src - if (tensor->view_src != NULL) { - cur_backend_id = ggml_backend_sched_backend_from_buffer(sched, tensor->view_src); - if (cur_backend_id != -1) { - SET_CAUSE(tensor, "1.vsrc"); - return cur_backend_id; - } - } - - // graph input - if (tensor->flags & GGML_TENSOR_FLAG_INPUT) { - cur_backend_id = sched->n_backends - 1; // last backend (assumed CPU) - SET_CAUSE(tensor, "1.inp"); - return cur_backend_id; - } - - // assign nodes that use weights to the backend of the weights - // operations with weights are preferably run on the same backend as the weights - for (int i = 0; i < GGML_MAX_SRC; i++) { - const struct ggml_tensor * src = tensor->src[i]; - if (src == NULL) { - continue; - } - if (src->buffer != NULL && src->buffer->usage == GGML_BACKEND_BUFFER_USAGE_WEIGHTS) { - int src_backend_id = ggml_backend_sched_backend_from_buffer(sched, src); - // check if a backend with higher prio wants to offload the op - if (src_backend_id == sched->n_backends - 1) { - for (int b = 0; b < src_backend_id; b++) { - if (ggml_backend_offload_op(sched->backends[b], tensor)) { - SET_CAUSE(tensor, "1.off"); - return b; - } - } - } - SET_CAUSE(tensor, "1.wgt%d", i); - return src_backend_id; - } - } - - return -1; -} - -static char * fmt_size(size_t size) { - static char buffer[128]; - if (size >= 1024*1024) { - sprintf(buffer, "%zuM", size/1024/1024); - } else { - sprintf(buffer, "%zuK", size/1024); - } - return buffer; -} - -static void ggml_backend_sched_print_assignments(ggml_backend_sched_t sched, struct ggml_cgraph * graph) { - int cur_split = 0; - for (int i = 0; i < graph->n_nodes; i++) { - if (cur_split < sched->n_splits && i == sched->splits[cur_split].i_start) { - ggml_backend_t split_backend = sched->backends[sched->splits[cur_split].backend_id]; - fprintf(stderr, "\n## SPLIT #%d: %s # %d inputs: ", cur_split, ggml_backend_name(split_backend), - sched->splits[cur_split].n_inputs); - for (int j = 0; j < sched->splits[cur_split].n_inputs; j++) { - fprintf(stderr, "[%s (%5.5s)] ", sched->splits[cur_split].inputs[j]->name, - fmt_size(ggml_nbytes(sched->splits[cur_split].inputs[j]))); - } - fprintf(stderr, "\n"); - cur_split++; - } - struct ggml_tensor * node = graph->nodes[i]; - if (ggml_is_view_op(node->op)) { - continue; - } - ggml_backend_t tensor_backend = ggml_backend_sched_get_tensor_backend(sched, node); - fprintf(stderr, "node #%3d (%10.10s): %20.20s (%5.5s) [%5.5s %8.8s]:", i, ggml_op_name(node->op), node->name, - fmt_size(ggml_nbytes(node)), tensor_backend ? ggml_backend_name(tensor_backend) : "NULL", GET_CAUSE(node)); - for (int j = 0; j < GGML_MAX_SRC; j++) { - struct ggml_tensor * src = node->src[j]; - if (src == NULL) { - continue; - } - ggml_backend_t src_backend = ggml_backend_sched_get_tensor_backend(sched, src); - fprintf(stderr, " %20.20s (%5.5s) [%5.5s %8.8s]", src->name, - fmt_size(ggml_nbytes(src)), src_backend ? ggml_backend_name(src_backend) : "NULL", GET_CAUSE(src)); - } - fprintf(stderr, "\n"); - } -} - -//#define DEBUG_PASS1 -//#define DEBUG_PASS2 -//#define DEBUG_PASS3 -//#define DEBUG_PASS4 - -// assigns backends to ops and splits the graph into subgraphs that can be computed on the same backend -static void ggml_backend_sched_split_graph(ggml_backend_sched_t sched, struct ggml_cgraph * graph) { - // reset splits - sched->n_splits = 0; - sched->n_graph_inputs = 0; - sched->is_reset = false; - - struct ggml_init_params params = { - /* .mem_size = */ sizeof(sched->context_buffer), - /* .mem_buffer = */ sched->context_buffer, - /* .no_alloc = */ true - }; - - ggml_free(sched->ctx); - - sched->ctx = ggml_init(params); - if (sched->ctx == NULL) { - fprintf(stderr, "%s: failed to initialize context\n", __func__); - GGML_ASSERT(false); - } - - // pass 1: assign backends to ops with pre-allocated inputs - for (int i = 0; i < graph->n_leafs; i++) { - struct ggml_tensor * leaf = graph->leafs[i]; - int * leaf_backend_id = &tensor_backend_id(leaf); - if (*leaf_backend_id != -1) { - // do not overwrite user assignments - continue; - } - *leaf_backend_id = ggml_backend_sched_backend_id_from_cur(sched, leaf); - } - - for (int i = 0; i < graph->n_nodes; i++) { - struct ggml_tensor * node = graph->nodes[i]; - int * node_backend_id = &tensor_backend_id(node); - if (*node_backend_id != -1) { - // do not overwrite user assignments - continue; - } - *node_backend_id = ggml_backend_sched_backend_id_from_cur(sched, node); - // src - for (int j = 0; j < GGML_MAX_SRC; j++) { - struct ggml_tensor * src = node->src[j]; - if (src == NULL) { - continue; - } - int * src_backend_id = &tensor_backend_id(src); - if (*src_backend_id == -1) { - *src_backend_id = ggml_backend_sched_backend_id_from_cur(sched, src); - } - } - } -#ifdef DEBUG_PASS1 - fprintf(stderr, "PASS 1 ASSIGNMENTS\n"); ggml_backend_sched_print_assignments(sched, graph); -#endif - - // pass 2: expand current backend assignments - // assign the same backend to adjacent nodes - // expand gpu backends (i.e. non last prio) up and down, ignoring cpu (the lowest priority backend) - // thus, cpu will never be used unless weights are on cpu, or there are no gpu ops between cpu ops - - - // pass 2.2 expand gpu down - { - int cur_backend_id = -1; - for (int i = 0; i < graph->n_nodes; i++) { - struct ggml_tensor * node = graph->nodes[i]; - if (ggml_is_view_op(node->op)) { - continue; - } - int * node_backend_id = &tensor_backend_id(node); - if (*node_backend_id != -1) { - if (*node_backend_id == sched->n_backends - 1) { - // skip cpu (lowest prio backend) - cur_backend_id = -1; - } else { - cur_backend_id = *node_backend_id; - } - } else { - *node_backend_id = cur_backend_id; - SET_CAUSE(node, "2.2"); - } - } - } - // pass 2.1 expand gpu up - { - int cur_backend_id = -1; - for (int i = graph->n_nodes - 1; i >= 0; i--) { - struct ggml_tensor * node = graph->nodes[i]; - if (ggml_is_view_op(node->op)) { - continue; - } - int * node_backend_id = &tensor_backend_id(node); - if (*node_backend_id != -1) { - if (*node_backend_id == sched->n_backends - 1) { - // skip cpu (lowest prio backend) - cur_backend_id = -1; - } else { - cur_backend_id = *node_backend_id; - } - } else { - *node_backend_id = cur_backend_id; - SET_CAUSE(node, "2.1"); - } - } - } - // pass 2.4 expand rest down - { - int cur_backend_id = -1; - for (int i = 0; i < graph->n_nodes; i++) { - struct ggml_tensor * node = graph->nodes[i]; - if (ggml_is_view_op(node->op)) { - continue; - } - int * node_backend_id = &tensor_backend_id(node); - if (*node_backend_id != -1) { - cur_backend_id = *node_backend_id; - } else { - *node_backend_id = cur_backend_id; - SET_CAUSE(node, "2.4"); - } - } - } - // pass 2.3 expand rest up - { - int cur_backend_id = -1; - for (int i = graph->n_nodes - 1; i >= 0; i--) { - struct ggml_tensor * node = graph->nodes[i]; - if (ggml_is_view_op(node->op)) { - continue; - } - int * node_backend_id = &tensor_backend_id(node); - if (*node_backend_id != -1) { - cur_backend_id = *node_backend_id; - } else { - *node_backend_id = cur_backend_id; - SET_CAUSE(node, "2.3"); - } - } - } - -#ifdef DEBUG_PASS2 - fprintf(stderr, "PASS 2 ASSIGNMENTS\n"); ggml_backend_sched_print_assignments(sched, graph); -#endif - - // pass 3: assign backends to remaining src from dst and view_src - for (int i = 0; i < graph->n_nodes; i++) { - struct ggml_tensor * node = graph->nodes[i]; - int * cur_backend_id = &tensor_backend_id(node); - if (node->view_src != NULL && *cur_backend_id == -1) { - *cur_backend_id = tensor_backend_id(node->view_src); - SET_CAUSE(node, "3.vsrc"); - } - for (int j = 0; j < GGML_MAX_SRC; j++) { - struct ggml_tensor * src = node->src[j]; - if (src == NULL) { - continue; - } - int * src_backend_id = &tensor_backend_id(src); - if (*src_backend_id == -1) { - if (src->view_src != NULL) { - // views are always on the same backend as the source - *src_backend_id = tensor_backend_id(src->view_src); - SET_CAUSE(src, "3.vsrc"); - } else { - *src_backend_id = *cur_backend_id; - SET_CAUSE(src, "3.cur"); - } - } - } - } -#ifdef DEBUG_PASS3 - fprintf(stderr, "PASS 3 ASSIGNMENTS\n"); ggml_backend_sched_print_assignments(sched, graph); -#endif - - // pass 4: split graph, find tensors that need to be copied - { - int i_split = 0; - struct ggml_backend_sched_split * split = &sched->splits[0]; - // find the backend of the first split, skipping view ops - for (int i = 0; i < graph->n_nodes; i++) { - struct ggml_tensor * node = graph->nodes[i]; - if (!ggml_is_view_op(node->op)) { - split->backend_id = tensor_backend_id(node); - break; - } - } - split->i_start = 0; - split->n_inputs = 0; - memset(split->inputs, 0, sizeof(split->inputs)); //HACK - int cur_backend_id = split->backend_id; - for (int i = 0; i < graph->n_nodes; i++) { - struct ggml_tensor * node = graph->nodes[i]; - - if (ggml_is_view_op(node->op)) { - continue; - } - - const int node_backend_id = tensor_backend_id(node); - - GGML_ASSERT(node_backend_id != -1); // all nodes should be assigned by now - - // check if we should start a new split based on the sources of the current node - bool need_new_split = false; - if (node_backend_id == cur_backend_id && split->n_inputs > 0) { - for (int j = 0; j < GGML_MAX_SRC; j++) { - struct ggml_tensor * src = node->src[j]; - if (src == NULL) { - continue; - } - // check if a weight is on a different backend - // by starting a new split, the memory of the previously offloaded weights can be reused - if (src->buffer != NULL && src->buffer->usage == GGML_BACKEND_BUFFER_USAGE_WEIGHTS) { - int src_backend_id = tensor_backend_id(src); - if (src_backend_id != -1 && src_backend_id != cur_backend_id) { - need_new_split = true; - break; - } - } - // check if the split has too many inputs - if (split->n_inputs == GGML_SCHED_MAX_SPLIT_INPUTS) { - const size_t id = hash_id(src); - int src_backend_id = sched->tensor_backend_id[id]; - if (src_backend_id != cur_backend_id && sched->tensor_copies[hash_id(src)][cur_backend_id][0] == NULL) { - //printf("starting new split because of too many inputs: node %s, input %s\n", node->name, src->name); - need_new_split = true; - break; - } - } - } - } - - if (node_backend_id != cur_backend_id || need_new_split) { - split->i_end = i; - i_split++; - if (i_split >= sched->splits_capacity) { - sched->splits_capacity *= 2; - sched->splits = realloc(sched->splits, sched->splits_capacity * sizeof(struct ggml_backend_sched_split)); - GGML_ASSERT(sched->splits != NULL); - } - GGML_ASSERT(i_split < GGML_SCHED_MAX_SPLITS); - split = &sched->splits[i_split]; - split->backend_id = node_backend_id; - split->i_start = i; - split->n_inputs = 0; - cur_backend_id = node_backend_id; - } - - // find inputs that are not on the same backend - for (int j = 0; j < GGML_MAX_SRC; j++) { - struct ggml_tensor * src = node->src[j]; - if (src == NULL) { - continue; - } - - const int src_backend_id = tensor_backend_id(src); - assert(src_backend_id != -1); // all inputs should be assigned by now - - if (src->flags & GGML_TENSOR_FLAG_INPUT && sched->n_copies > 1) { - size_t id = hash_id(src); - if (sched->tensor_copies[id][src_backend_id][0] == NULL) { - ggml_backend_t backend = sched->backends[src_backend_id]; - for (int c = 0; c < sched->n_copies; c++) { - struct ggml_tensor * tensor_copy; - if (c == sched->cur_copy) { - tensor_copy = src; // use the original tensor as the current copy - } else { - tensor_copy = ggml_dup_tensor_layout(sched->ctx, src); - ggml_format_name(tensor_copy, "%s#%s#%d", ggml_backend_name(backend), src->name, c); - } - if (sched->n_copies > 1) { - ggml_set_input(tensor_copy); - ggml_set_output(tensor_copy); // prevent ggml-alloc from overwriting the tensor - } - sched->tensor_copies[id][src_backend_id][c] = tensor_copy; - SET_CAUSE(tensor_copy, "4.cpy"); - } - int n_graph_inputs = sched->n_graph_inputs++; - GGML_ASSERT(n_graph_inputs < GGML_SCHED_MAX_SPLIT_INPUTS); - sched->graph_inputs[n_graph_inputs] = src; - } - } - - if (src_backend_id != node_backend_id) { - // create a copy of the input in the split's backend - const size_t id = hash_id(src); - if (sched->tensor_copies[id][cur_backend_id][0] == NULL) { - ggml_backend_t backend = sched->backends[cur_backend_id]; - for (int c = 0; c < sched->n_copies; c++) { - struct ggml_tensor * tensor_copy = ggml_dup_tensor_layout(sched->ctx, src); - ggml_format_name(tensor_copy, "%s#%s#%d", ggml_backend_name(backend), src->name, c); - if (sched->n_copies > 1) { - ggml_set_input(tensor_copy); - ggml_set_output(tensor_copy); // prevent ggml-alloc from overwriting the tensor - } - sched->tensor_copies[id][cur_backend_id][c] = tensor_copy; - SET_CAUSE(tensor_copy, "4.cpy"); - } - int n_inputs = split->n_inputs++; - GGML_ASSERT(n_inputs < GGML_SCHED_MAX_SPLIT_INPUTS); - split->inputs[n_inputs] = src; - } - node->src[j] = sched->tensor_copies[id][cur_backend_id][sched->cur_copy]; - } - } - } - split->i_end = graph->n_nodes; - sched->n_splits = i_split + 1; - } -#ifdef DEBUG_PASS4 - fprintf(stderr, "PASS 4 ASSIGNMENTS\n"); ggml_backend_sched_print_assignments(sched, graph); -#endif - - // create copies of the graph for each split - // TODO: avoid this copy - struct ggml_cgraph * graph_copy = ggml_new_graph_custom(sched->ctx, graph->n_nodes + sched->n_splits*GGML_SCHED_MAX_SPLIT_INPUTS*2, false); - for (int i = 0; i < sched->n_splits; i++) { - struct ggml_backend_sched_split * split = &sched->splits[i]; - split->graph = ggml_graph_view(graph, split->i_start, split->i_end); - - // add inputs to the graph copy so that they are allocated by ggml-alloc at the start of the split - for (int j = 0; j < split->n_inputs; j++) { - assert(graph_copy->size > (graph_copy->n_nodes + 1)); - - struct ggml_tensor * input = split->inputs[j]; - const size_t input_id = hash_id(input); - struct ggml_tensor * input_cpy = sched->tensor_copies[input_id][split->backend_id][sched->cur_copy]; - - // add a dependency to the input source so that it is not freed before the copy is done - struct ggml_tensor * input_dep = ggml_view_tensor(sched->ctx, input); - input_dep->src[0] = input; - sched->node_backend_ids[graph_copy->n_nodes] = sched->tensor_backend_id[input_id]; - graph_copy->nodes[graph_copy->n_nodes++] = input_dep; - - // add a dependency to the input copy so that it is allocated at the start of the split - sched->node_backend_ids[graph_copy->n_nodes] = split->backend_id; - graph_copy->nodes[graph_copy->n_nodes++] = input_cpy; - } - - for (int j = split->i_start; j < split->i_end; j++) { - assert(graph_copy->size > graph_copy->n_nodes); - sched->node_backend_ids[graph_copy->n_nodes] = tensor_backend_id(graph->nodes[j]); - graph_copy->nodes[graph_copy->n_nodes++] = graph->nodes[j]; - } - } - - if (sched->n_copies > 1) { - // add input copies as leafs so that they are allocated first - for (int i = 0; i < sched->n_graph_inputs; i++) { - struct ggml_tensor * input = sched->graph_inputs[i]; - size_t id = hash_id(input); - int backend_id = tensor_backend_id(input); - for (int c = 0; c < sched->n_copies; c++) { - struct ggml_tensor * input_cpy = sched->tensor_copies[id][backend_id][c]; - sched->leaf_backend_ids[graph_copy->n_leafs] = backend_id; - graph_copy->leafs[graph_copy->n_leafs++] = input_cpy; - } - } - - for (int i = 0; i < sched->n_splits; i++) { - struct ggml_backend_sched_split * split = &sched->splits[i]; - int backend_id = split->backend_id; - for (int j = 0; j < split->n_inputs; j++) { - struct ggml_tensor * input = split->inputs[j]; - size_t id = hash_id(input); - for (int c = 0; c < sched->n_copies; c++) { - struct ggml_tensor * input_cpy = sched->tensor_copies[id][backend_id][c]; - sched->leaf_backend_ids[graph_copy->n_leafs] = backend_id; - graph_copy->leafs[graph_copy->n_leafs++] = input_cpy; - } - } - } - } - - // add leafs from the original graph - for (int i = 0; i < graph->n_leafs; i++) { - struct ggml_tensor * leaf = graph->leafs[i]; - sched->leaf_backend_ids[graph_copy->n_leafs] = tensor_backend_id(leaf); - graph_copy->leafs[graph_copy->n_leafs++] = leaf; - } - - sched->graph = graph_copy; -} - -static bool ggml_backend_sched_alloc_splits(ggml_backend_sched_t sched) { - // allocate graph - if (!ggml_gallocr_alloc_graph(sched->galloc, sched->graph)) { - // the re-allocation may cause the split inputs to be moved to a different address - ggml_backend_sched_synchronize(sched); -#ifndef NDEBUG - fprintf(stderr, "%s: failed to allocate graph, reserving\n", __func__); -#endif - ggml_gallocr_reserve_n(sched->galloc, sched->graph, sched->node_backend_ids, sched->leaf_backend_ids); - if (!ggml_gallocr_alloc_graph(sched->galloc, sched->graph)) { - fprintf(stderr, "%s: failed to allocate graph\n", __func__); - return false; - } - } - - return true; -} - -static enum ggml_status ggml_backend_sched_compute_splits(ggml_backend_sched_t sched) { - struct ggml_backend_sched_split * splits = sched->splits; - - for (int i = 0; i < sched->n_splits; i++) { - struct ggml_backend_sched_split * split = &splits[i]; - int split_backend_id = split->backend_id; - ggml_backend_t split_backend = sched->backends[split_backend_id]; - - // copy the input tensors to the split backend - for (int j = 0; j < split->n_inputs; j++) { - ggml_backend_t input_backend = ggml_backend_sched_get_tensor_backend(sched, split->inputs[j]); - struct ggml_tensor * input = split->inputs[j]; - struct ggml_tensor * input_cpy = sched->tensor_copies[hash_id(input)][split_backend_id][sched->cur_copy]; - - if (input->flags & GGML_TENSOR_FLAG_INPUT) { - // inputs from the user must be copied immediately to prevent the user overwriting the data before the copy is done - if (sched->events[split_backend_id][sched->cur_copy] != NULL) { - ggml_backend_event_synchronize(sched->events[split_backend_id][sched->cur_copy]); - } else { - ggml_backend_synchronize(split_backend); - } - ggml_backend_tensor_copy(input, input_cpy); - } else { - // wait for the split backend to finish using the input before overwriting it - if (sched->events[split_backend_id][sched->cur_copy] != NULL) { - ggml_backend_event_wait(split_backend, sched->events[split_backend_id][sched->cur_copy]); - } else { - ggml_backend_synchronize(split_backend); - } - ggml_backend_tensor_copy_async(input_backend, split_backend, input, input_cpy); - } - } - - if (!sched->callback_eval) { - enum ggml_status ec = ggml_backend_graph_compute_async(split_backend, &split->graph); - if (ec != GGML_STATUS_SUCCESS) { - return ec; - } - } else { - // similar to ggml_backend_compare_graph_backend - for (int j0 = 0; j0 < split->graph.n_nodes; j0++) { - struct ggml_tensor * t = split->graph.nodes[j0]; - - // check if the user needs data from this node - bool need = sched->callback_eval(t, true, sched->callback_eval_user_data); - - int j1 = j0; - - // determine the range [j0, j1] of nodes that can be computed together - while (!need && j1 < split->graph.n_nodes - 1) { - t = split->graph.nodes[++j1]; - need = sched->callback_eval(t, true, sched->callback_eval_user_data); - } - - struct ggml_cgraph gv = ggml_graph_view(&split->graph, j0, j1 + 1); - - enum ggml_status ec = ggml_backend_graph_compute_async(split_backend, &gv); - if (ec != GGML_STATUS_SUCCESS) { - return ec; - } - - // TODO: pass backend to the callback, then the user can decide if they want to synchronize - ggml_backend_synchronize(split_backend); - - if (need && !sched->callback_eval(t, false, sched->callback_eval_user_data)) { - break; - } - - j0 = j1; - } - } - - // record the event of this copy - if (split->n_inputs > 0) { - if (sched->events[split_backend_id][sched->cur_copy] != NULL) { - ggml_backend_event_record(sched->events[split_backend_id][sched->cur_copy]); - } - } - } - - sched->cur_copy = (sched->cur_copy + 1) % sched->n_copies; - - return GGML_STATUS_SUCCESS; -} - -ggml_backend_sched_t ggml_backend_sched_new( - ggml_backend_t * backends, - ggml_backend_buffer_type_t * bufts, - int n_backends, - size_t graph_size, - bool parallel) { - GGML_ASSERT(n_backends > 0); - GGML_ASSERT(n_backends <= GGML_SCHED_MAX_BACKENDS); - GGML_ASSERT(ggml_backend_is_cpu(backends[n_backends - 1])); // last backend must be CPU - - struct ggml_backend_sched * sched = calloc(1, sizeof(struct ggml_backend_sched)); - - // initialize hash table - sched->hash_set = ggml_hash_set_new(graph_size); - sched->tensor_backend_id = calloc(sched->hash_set.size, sizeof(sched->tensor_backend_id[0])); - sched->tensor_copies = calloc(sched->hash_set.size, sizeof(sched->tensor_copies[0])); - - const size_t nodes_size = graph_size + GGML_SCHED_MAX_SPLITS*GGML_SCHED_MAX_SPLIT_INPUTS*2; - sched->node_backend_ids = calloc(nodes_size, sizeof(sched->node_backend_ids[0])); - sched->leaf_backend_ids = calloc(nodes_size, sizeof(sched->leaf_backend_ids[0])); - - sched->n_backends = n_backends; - - sched->n_copies = parallel ? GGML_SCHED_MAX_COPIES : 1; - - const int initial_splits_capacity = 16; - sched->splits = calloc(initial_splits_capacity, sizeof(sched->splits[0])); - sched->splits_capacity = initial_splits_capacity; - - for (int b = 0; b < n_backends; b++) { - sched->backends[b] = backends[b]; - sched->bufts[b] = bufts ? bufts[b] : ggml_backend_get_default_buffer_type(backends[b]); - GGML_ASSERT(ggml_backend_buft_supports_backend(sched->bufts[b], backends[b])); - if (sched->n_copies > 1) { - for (int c = 0; c < sched->n_copies; c++) { - sched->events[b][c] = ggml_backend_event_new(backends[b]); - } - } - } - - sched->galloc = ggml_gallocr_new_n(sched->bufts, n_backends); - - ggml_backend_sched_reset(sched); - - return sched; -} - -void ggml_backend_sched_free(ggml_backend_sched_t sched) { - if (sched == NULL) { - return; - } - for (int b = 0; b < sched->n_backends; b++) { - for (int c = 0; c < sched->n_copies; c++) { - ggml_backend_event_free(sched->events[b][c]); - } - } - ggml_gallocr_free(sched->galloc); - ggml_free(sched->ctx); - free(sched->splits); - free(sched->hash_set.keys); - free(sched->tensor_backend_id); - free(sched->tensor_copies); - free(sched->node_backend_ids); - free(sched->leaf_backend_ids); - free(sched); -} - -void ggml_backend_sched_reset(ggml_backend_sched_t sched) { - // reset state for the next run - if (!sched->is_reset) { - size_t hash_size = sched->hash_set.size; - memset(sched->hash_set.keys, 0, sizeof(sched->hash_set.keys[0]) * hash_size); // NOLINT - memset(sched->tensor_backend_id, -1, sizeof(sched->tensor_backend_id[0]) * hash_size); - memset(sched->tensor_copies, 0, sizeof(sched->tensor_copies[0]) * hash_size); - - sched->is_reset = true; - } - sched->is_alloc = false; -} - -bool ggml_backend_sched_reserve(ggml_backend_sched_t sched, struct ggml_cgraph * measure_graph) { - GGML_ASSERT((int)sched->hash_set.size >= measure_graph->n_nodes); - - ggml_backend_sched_split_graph(sched, measure_graph); - - // TODO: extract this to a separate function - if (!ggml_gallocr_reserve_n(sched->galloc, sched->graph, sched->node_backend_ids, sched->leaf_backend_ids)) { - return false; - } - - ggml_backend_sched_reset(sched); - ggml_backend_sched_synchronize(sched); - - return true; -} - -bool ggml_backend_sched_alloc_graph(ggml_backend_sched_t sched, struct ggml_cgraph * graph) { - GGML_ASSERT((int)sched->hash_set.size >= graph->n_nodes); - - ggml_backend_sched_split_graph(sched, graph); - - if (!ggml_backend_sched_alloc_splits(sched)) { - return false; - } - - sched->is_alloc = true; - - return true; -} - -enum ggml_status ggml_backend_sched_graph_compute(ggml_backend_sched_t sched, struct ggml_cgraph * graph) { - enum ggml_status err = ggml_backend_sched_graph_compute_async(sched, graph); - ggml_backend_sched_synchronize(sched); - return err; -} - -enum ggml_status ggml_backend_sched_graph_compute_async(ggml_backend_sched_t sched, struct ggml_cgraph * graph) { - if (!sched->is_reset && !sched->is_alloc) { - ggml_backend_sched_reset(sched); - } - - if (!sched->is_alloc) { - if (!ggml_backend_sched_alloc_graph(sched, graph)) { - return GGML_STATUS_ALLOC_FAILED; - } - } - - return ggml_backend_sched_compute_splits(sched); -} - -void ggml_backend_sched_synchronize(ggml_backend_sched_t sched) { - for (int i = 0; i < sched->n_backends; i++) { - ggml_backend_synchronize(sched->backends[i]); - } -} - -void ggml_backend_sched_set_eval_callback(ggml_backend_sched_t sched, ggml_backend_sched_eval_callback callback, void * user_data) { - sched->callback_eval = callback; - sched->callback_eval_user_data = user_data; -} - -int ggml_backend_sched_get_n_splits(ggml_backend_sched_t sched) { - return sched->n_splits; -} - -int ggml_backend_sched_get_n_copies(ggml_backend_sched_t sched) { - return sched->n_copies; -} - -size_t ggml_backend_sched_get_buffer_size(ggml_backend_sched_t sched, ggml_backend_t backend) { - int backend_index = ggml_backend_sched_backend_id(sched, backend); - GGML_ASSERT(backend_index >= 0 && backend_index < sched->n_backends); - - return ggml_gallocr_get_buffer_size(sched->galloc, backend_index); -} - -void ggml_backend_sched_set_tensor_backend(ggml_backend_sched_t sched, struct ggml_tensor * node, ggml_backend_t backend) { - int backend_index = ggml_backend_sched_backend_id(sched, backend); - GGML_ASSERT(backend_index >= 0 && backend_index < sched->n_backends); - tensor_backend_id(node) = backend_index; -} - -ggml_backend_t ggml_backend_sched_get_tensor_backend(ggml_backend_sched_t sched, struct ggml_tensor * node) { - int backend_index = tensor_backend_id(node); - if (backend_index == -1) { - return NULL; - } - return sched->backends[backend_index]; -} - -// utils - -void ggml_backend_view_init(ggml_backend_buffer_t buffer, struct ggml_tensor * tensor) { - GGML_ASSERT(tensor->buffer == NULL); - GGML_ASSERT(tensor->view_src != NULL); - GGML_ASSERT(tensor->view_src->buffer != NULL); - GGML_ASSERT(tensor->view_src->data != NULL); - - tensor->buffer = buffer; - tensor->data = (char *)tensor->view_src->data + tensor->view_offs; - tensor->backend = tensor->view_src->backend; - ggml_backend_buffer_init_tensor(buffer, tensor); -} - -void ggml_backend_tensor_alloc(ggml_backend_buffer_t buffer, struct ggml_tensor * tensor, void * addr) { - GGML_ASSERT(tensor->buffer == NULL); - GGML_ASSERT(tensor->data == NULL); - GGML_ASSERT(tensor->view_src == NULL); - GGML_ASSERT(addr >= ggml_backend_buffer_get_base(buffer)); - GGML_ASSERT((char *)addr + ggml_backend_buffer_get_alloc_size(buffer, tensor) <= - (char *)ggml_backend_buffer_get_base(buffer) + ggml_backend_buffer_get_size(buffer)); - - tensor->buffer = buffer; - tensor->data = addr; - ggml_backend_buffer_init_tensor(buffer, tensor); -} - -static struct ggml_tensor * graph_copy_dup_tensor(struct ggml_hash_set hash_set, struct ggml_tensor ** node_copies, - struct ggml_context * ctx_allocated, struct ggml_context * ctx_unallocated, struct ggml_tensor * src) { - - GGML_ASSERT(src != NULL); - GGML_ASSERT(src->data && "graph must be allocated"); - - size_t id = ggml_hash_insert(hash_set, src); - if (id == GGML_HASHTABLE_ALREADY_EXISTS) { - return node_copies[ggml_hash_find(hash_set, src)]; - } - - struct ggml_tensor * dst = ggml_dup_tensor_layout(src->data && !src->view_src ? ctx_allocated : ctx_unallocated, src); - if (src->view_src != NULL) { - dst->view_src = graph_copy_dup_tensor(hash_set, node_copies, ctx_allocated, ctx_unallocated, src->view_src); - dst->view_offs = src->view_offs; - } - dst->op = src->op; - memcpy(dst->op_params, src->op_params, sizeof(dst->op_params)); - ggml_set_name(dst, src->name); - - // copy src - for (int i = 0; i < GGML_MAX_SRC; i++) { - struct ggml_tensor * s = src->src[i]; - if (s == NULL) { - continue; - } - dst->src[i] = graph_copy_dup_tensor(hash_set, node_copies, ctx_allocated, ctx_unallocated, s); - } - - node_copies[id] = dst; - return dst; -} - -static void graph_copy_init_tensor(struct ggml_hash_set hash_set, struct ggml_tensor ** node_copies, bool * node_init, struct ggml_tensor * src) { - size_t id = ggml_hash_find(hash_set, src); - if (node_init[id]) { - return; - } - node_init[id] = true; - - struct ggml_tensor * dst = node_copies[id]; - if (dst->view_src != NULL) { - graph_copy_init_tensor(hash_set, node_copies, node_init, src->view_src); - ggml_backend_view_init(dst->view_src->buffer, dst); - } - else { - ggml_backend_tensor_copy(src, dst); - } - - // init src - for (int i = 0; i < GGML_MAX_SRC; i++) { - struct ggml_tensor * s = src->src[i]; - if (s == NULL) { - continue; - } - graph_copy_init_tensor(hash_set, node_copies, node_init, s); - } -} - -struct ggml_backend_graph_copy ggml_backend_graph_copy(ggml_backend_t backend, struct ggml_cgraph * graph) { - struct ggml_hash_set hash_set = { - /* .size = */ graph->visited_hash_table.size, - /* .keys = */ calloc(graph->visited_hash_table.size, sizeof(hash_set.keys[0])) // NOLINT - }; - struct ggml_tensor ** node_copies = calloc(hash_set.size, sizeof(node_copies[0])); // NOLINT - bool * node_init = calloc(hash_set.size, sizeof(node_init[0])); - - struct ggml_init_params params = { - /* .mem_size = */ ggml_tensor_overhead()*hash_set.size + ggml_graph_overhead_custom(graph->size, false), - /* .mem_buffer = */ NULL, - /* .no_alloc = */ true - }; - - struct ggml_context * ctx_allocated = ggml_init(params); - struct ggml_context * ctx_unallocated = ggml_init(params); - - if (ctx_allocated == NULL || ctx_unallocated == NULL) { - fprintf(stderr, "failed to allocate context for graph copy\n"); - free(hash_set.keys); - free(node_copies); - free(node_init); - ggml_free(ctx_allocated); - ggml_free(ctx_unallocated); - return (struct ggml_backend_graph_copy) { - /* .buffer = */ NULL, - /* .ctx_allocated = */ NULL, - /* .ctx_unallocated = */ NULL, - /* .graph = */ NULL, - }; - } - - // dup nodes - for (int i = 0; i < graph->n_nodes; i++) { - struct ggml_tensor * node = graph->nodes[i]; - graph_copy_dup_tensor(hash_set, node_copies, ctx_allocated, ctx_unallocated, node); - } - - // allocate nodes - ggml_backend_buffer_t buffer = ggml_backend_alloc_ctx_tensors(ctx_allocated, backend); - if (buffer == NULL) { - fprintf(stderr, "failed to allocate buffer for graph copy\n"); - free(hash_set.keys); - free(node_copies); - free(node_init); - ggml_free(ctx_allocated); - ggml_free(ctx_unallocated); - return (struct ggml_backend_graph_copy) { - /* .buffer = */ NULL, - /* .ctx_allocated = */ NULL, - /* .ctx_unallocated = */ NULL, - /* .graph = */ NULL, - }; - } - - //printf("copy buffer size: %zu MB\n", ggml_backend_buffer_get_size(buffer) / 1024 / 1024); - - // copy data and init views - for (int i = 0; i < graph->n_nodes; i++) { - struct ggml_tensor * node = graph->nodes[i]; - graph_copy_init_tensor(hash_set, node_copies, node_init, node); - } - - // build graph copy - struct ggml_cgraph * graph_copy = ggml_new_graph_custom(ctx_allocated, graph->size, false); - for (int i = 0; i < graph->n_nodes; i++) { - struct ggml_tensor * node = graph->nodes[i]; - struct ggml_tensor * node_copy = node_copies[ggml_hash_find(hash_set, node)]; - graph_copy->nodes[i] = node_copy; - } - graph_copy->n_nodes = graph->n_nodes; - - free(hash_set.keys); - free(node_copies); - free(node_init); - - return (struct ggml_backend_graph_copy) { - /* .buffer = */ buffer, - /* .ctx_allocated = */ ctx_allocated, - /* .ctx_unallocated = */ ctx_unallocated, - /* .graph = */ graph_copy, - }; -} - -void ggml_backend_graph_copy_free(struct ggml_backend_graph_copy copy) { - ggml_backend_buffer_free(copy.buffer); - ggml_free(copy.ctx_allocated); - ggml_free(copy.ctx_unallocated); -} - -bool ggml_backend_compare_graph_backend(ggml_backend_t backend1, ggml_backend_t backend2, struct ggml_cgraph * graph, ggml_backend_eval_callback callback, void * user_data) { - struct ggml_backend_graph_copy copy = ggml_backend_graph_copy(backend2, graph); - if (copy.buffer == NULL) { - return false; - } - - struct ggml_cgraph * g1 = graph; - struct ggml_cgraph * g2 = copy.graph; - - assert(g1->n_nodes == g2->n_nodes); - - for (int i = 0; i < g1->n_nodes; i++) { - //printf("eval %d/%d\n", i, g1->n_nodes); - struct ggml_tensor * t1 = g1->nodes[i]; - struct ggml_tensor * t2 = g2->nodes[i]; - - assert(t1->op == t2->op && ggml_are_same_layout(t1, t2)); - - struct ggml_cgraph g1v = ggml_graph_view(g1, i, i + 1); - struct ggml_cgraph g2v = ggml_graph_view(g2, i, i + 1); - - ggml_backend_graph_compute(backend1, &g1v); - ggml_backend_graph_compute(backend2, &g2v); - - if (ggml_is_view_op(t1->op)) { - continue; - } - - // compare results, calculate rms etc - if (!callback(i, t1, t2, user_data)) { - break; - } - } - - ggml_backend_graph_copy_free(copy); - - return true; -} diff --git a/ggml-backend.h b/ggml-backend.h deleted file mode 100644 index 744b6a77457..00000000000 --- a/ggml-backend.h +++ /dev/null @@ -1,233 +0,0 @@ -#pragma once - -#include "ggml.h" -#include "ggml-alloc.h" - -#ifdef __cplusplus -extern "C" { -#endif - - typedef struct ggml_backend_buffer_type * ggml_backend_buffer_type_t; - typedef struct ggml_backend_buffer * ggml_backend_buffer_t; - typedef struct ggml_backend_event * ggml_backend_event_t; - typedef struct ggml_backend * ggml_backend_t; - typedef void * ggml_backend_graph_plan_t; - - // - // Backend buffer - // - - // buffer type - GGML_API const char * ggml_backend_buft_name (ggml_backend_buffer_type_t buft); - GGML_API GGML_CALL ggml_backend_buffer_t ggml_backend_buft_alloc_buffer (ggml_backend_buffer_type_t buft, size_t size); - GGML_API size_t ggml_backend_buft_get_alignment (ggml_backend_buffer_type_t buft); - GGML_API size_t ggml_backend_buft_get_max_size (ggml_backend_buffer_type_t buft); - GGML_API GGML_CALL size_t ggml_backend_buft_get_alloc_size (ggml_backend_buffer_type_t buft, struct ggml_tensor * tensor); - GGML_API bool ggml_backend_buft_supports_backend(ggml_backend_buffer_type_t buft, ggml_backend_t backend); - GGML_API bool ggml_backend_buft_is_host (ggml_backend_buffer_type_t buft); - - // buffer - enum ggml_backend_buffer_usage { - GGML_BACKEND_BUFFER_USAGE_ANY = 0, - GGML_BACKEND_BUFFER_USAGE_WEIGHTS = 1, - }; - - GGML_API const char * ggml_backend_buffer_name (ggml_backend_buffer_t buffer); - GGML_API void ggml_backend_buffer_free (ggml_backend_buffer_t buffer); - GGML_API void * ggml_backend_buffer_get_base (ggml_backend_buffer_t buffer); - GGML_API size_t ggml_backend_buffer_get_size (ggml_backend_buffer_t buffer); - GGML_API GGML_CALL void ggml_backend_buffer_init_tensor (ggml_backend_buffer_t buffer, struct ggml_tensor * tensor); - GGML_API size_t ggml_backend_buffer_get_alignment (ggml_backend_buffer_t buffer); - GGML_API size_t ggml_backend_buffer_get_max_size (ggml_backend_buffer_t buffer); - GGML_API size_t ggml_backend_buffer_get_alloc_size(ggml_backend_buffer_t buffer, struct ggml_tensor * tensor); - GGML_API void ggml_backend_buffer_clear (ggml_backend_buffer_t buffer, uint8_t value); - GGML_API bool ggml_backend_buffer_is_host (ggml_backend_buffer_t buffer); - GGML_API void ggml_backend_buffer_set_usage (ggml_backend_buffer_t buffer, enum ggml_backend_buffer_usage usage); - GGML_API ggml_backend_buffer_type_t ggml_backend_buffer_get_type (ggml_backend_buffer_t buffer); - GGML_API void ggml_backend_buffer_reset (ggml_backend_buffer_t buffer); - - // - // Backend - // - - GGML_API ggml_guid_t ggml_backend_guid(ggml_backend_t backend); - GGML_API const char * ggml_backend_name(ggml_backend_t backend); - GGML_API void ggml_backend_free(ggml_backend_t backend); - - GGML_API ggml_backend_buffer_type_t ggml_backend_get_default_buffer_type(ggml_backend_t backend); - GGML_API ggml_backend_buffer_t ggml_backend_alloc_buffer(ggml_backend_t backend, size_t size); - GGML_API size_t ggml_backend_get_alignment(ggml_backend_t backend); - GGML_API size_t ggml_backend_get_max_size(ggml_backend_t backend); - - GGML_API void ggml_backend_tensor_set_async(ggml_backend_t backend, struct ggml_tensor * tensor, const void * data, size_t offset, size_t size); - GGML_API void ggml_backend_tensor_get_async(ggml_backend_t backend, const struct ggml_tensor * tensor, void * data, size_t offset, size_t size); - - GGML_API GGML_CALL void ggml_backend_tensor_set( struct ggml_tensor * tensor, const void * data, size_t offset, size_t size); - GGML_API GGML_CALL void ggml_backend_tensor_get(const struct ggml_tensor * tensor, void * data, size_t offset, size_t size); - - GGML_API void ggml_backend_synchronize(ggml_backend_t backend); - - GGML_API ggml_backend_graph_plan_t ggml_backend_graph_plan_create(ggml_backend_t backend, struct ggml_cgraph * cgraph); - GGML_API void ggml_backend_graph_plan_free (ggml_backend_t backend, ggml_backend_graph_plan_t plan); - - GGML_API enum ggml_status ggml_backend_graph_plan_compute (ggml_backend_t backend, ggml_backend_graph_plan_t plan); - GGML_API enum ggml_status ggml_backend_graph_compute (ggml_backend_t backend, struct ggml_cgraph * cgraph); - GGML_API enum ggml_status ggml_backend_graph_compute_async(ggml_backend_t backend, struct ggml_cgraph * cgraph); - GGML_API bool ggml_backend_supports_op(ggml_backend_t backend, const struct ggml_tensor * op); - GGML_API bool ggml_backend_offload_op(ggml_backend_t backend, const struct ggml_tensor * op); - - // tensor copy between different backends - GGML_API void ggml_backend_tensor_copy(struct ggml_tensor * src, struct ggml_tensor * dst); - - // asynchronous copy - // the copy is performed after all the currently queued operations in backend_src - // backend_dst will wait for the copy to complete before performing other operations - // automatic fallback to sync copy if async is not supported - GGML_API void ggml_backend_tensor_copy_async(ggml_backend_t backend_src, ggml_backend_t backend_dst, struct ggml_tensor * src, struct ggml_tensor * dst); - - // events - GGML_API ggml_backend_event_t ggml_backend_event_new (ggml_backend_t backend); - GGML_API void ggml_backend_event_free (ggml_backend_event_t event); - GGML_API void ggml_backend_event_record (ggml_backend_event_t event); - GGML_API void ggml_backend_event_synchronize(ggml_backend_event_t event); - GGML_API void ggml_backend_event_wait (ggml_backend_t backend, ggml_backend_event_t event); // wait async on event - - // - // CPU backend - // - - GGML_API ggml_backend_t ggml_backend_cpu_init(void); - - GGML_API GGML_CALL bool ggml_backend_is_cpu (ggml_backend_t backend); - GGML_API void ggml_backend_cpu_set_n_threads (ggml_backend_t backend_cpu, int n_threads); - GGML_API void ggml_backend_cpu_set_abort_callback(ggml_backend_t backend_cpu, ggml_abort_callback abort_callback, void * abort_callback_data); - - // Create a backend buffer from an existing pointer - GGML_API GGML_CALL ggml_backend_buffer_t ggml_backend_cpu_buffer_from_ptr(void * ptr, size_t size); - - GGML_API GGML_CALL ggml_backend_buffer_type_t ggml_backend_cpu_buffer_type(void); - -#ifdef GGML_USE_CPU_HBM - GGML_API ggml_backend_buffer_type_t ggml_backend_cpu_hbm_buffer_type(void); -#endif - - // - // Backend registry - // - - // The backend registry is a registry of all the available backends, and allows initializing backends in a generic way - - GGML_API size_t ggml_backend_reg_get_count(void); - GGML_API size_t ggml_backend_reg_find_by_name(const char * name); - GGML_API ggml_backend_t ggml_backend_reg_init_backend_from_str(const char * backend_str); // str is name[:params] - GGML_API const char * ggml_backend_reg_get_name(size_t i); - GGML_API ggml_backend_t ggml_backend_reg_init_backend(size_t i, const char * params); // params is backend-specific - GGML_API ggml_backend_buffer_type_t ggml_backend_reg_get_default_buffer_type(size_t i); - GGML_API ggml_backend_buffer_t ggml_backend_reg_alloc_buffer(size_t i, size_t size); - - // - // Backend scheduler - // - - // The backend scheduler allows for multiple backends to be used together - // Handles compute buffer allocation, assignment of tensors to backends, and copying of tensors between backends - // The backends are selected based on: - // - the backend that supports the operation - // - the location of the pre-allocated tensors (e.g. the weights) - /* - Example usage: - - // operations that use tensors allocated in a buffer with USAGE_WEIGHTS will be assigned - // preferrably to run on the same backend as the buffer - ggml_backend_buffer_set_usage(buf_weights, GGML_BACKEND_BUFFER_USAGE_WEIGHTS); - - sched = ggml_backend_sched_new({backend_gpu, backend_gpu2, backend_cpu}, NULL, num_backends, GGML_DEFAULT_GRAPH_SIZE, false); - - // initialize buffers from a max size graph (optional) - reserve_graph = build_graph(sched, max_batch_size); - - // manually assign nodes to a backend (optional, should not be needed in most cases) - struct ggml_tensor * node = ggml_mul_mat(ctx, ...); - ggml_backend_sched_set_tensor_backend(sched, node, backend_gpu); - - ggml_backend_sched_reserve(sched, reserve_graph); - - // compute - graph = build_graph(sched); - ggml_backend_sched_graph_compute(sched, graph); - - // if there are graph inputs: - ggml_backend_sched_reset(sched); - ggml_backend_sched_alloc_graph(sched, graph); - ggml_backend_tensor_set(input_tensor, ...); - ggml_backend_sched_graph_compute(sched, graph); - } - */ - - struct ggml_backend_sched; - typedef struct ggml_backend_sched * ggml_backend_sched_t; - - // when ask == true, the scheduler wants to know if the user wants to observe this node - // this allows the scheduler to batch nodes together in order to evaluate them in a single call - // - // when ask == false, the scheduler is passing the node tensor to the user for observation - // if the user returns false, the scheduler will cancel the graph compute - // - typedef bool (*ggml_backend_sched_eval_callback)(struct ggml_tensor * t, bool ask, void * user_data); - - // Initialize a backend scheduler - GGML_API ggml_backend_sched_t ggml_backend_sched_new(ggml_backend_t * backends, ggml_backend_buffer_type_t * bufts, int n_backends, size_t graph_size, bool parallel); - GGML_API void ggml_backend_sched_free(ggml_backend_sched_t sched); - - // Initialize backend buffers from a measure graph - GGML_API bool ggml_backend_sched_reserve(ggml_backend_sched_t sched, struct ggml_cgraph * measure_graph); - - // Get the number of splits of the last graph - GGML_API int ggml_backend_sched_get_n_splits(ggml_backend_sched_t sched); - GGML_API int ggml_backend_sched_get_n_copies(ggml_backend_sched_t sched); - - GGML_API size_t ggml_backend_sched_get_buffer_size(ggml_backend_sched_t sched, ggml_backend_t backend); - - GGML_API void ggml_backend_sched_set_tensor_backend(ggml_backend_sched_t sched, struct ggml_tensor * node, ggml_backend_t backend); - GGML_API ggml_backend_t ggml_backend_sched_get_tensor_backend(ggml_backend_sched_t sched, struct ggml_tensor * node); - - // Allocate and compute graph on the backend scheduler - GGML_API bool ggml_backend_sched_alloc_graph(ggml_backend_sched_t sched, struct ggml_cgraph * graph); - GGML_API enum ggml_status ggml_backend_sched_graph_compute(ggml_backend_sched_t sched, struct ggml_cgraph * graph); - GGML_API enum ggml_status ggml_backend_sched_graph_compute_async(ggml_backend_sched_t sched, struct ggml_cgraph * graph); - GGML_API void ggml_backend_sched_synchronize(ggml_backend_sched_t sched); - - // Reset all assignments and allocators - must be called before changing the node backends - GGML_API void ggml_backend_sched_reset(ggml_backend_sched_t sched); - - // Set a callback to be called for each resulting node during graph compute - GGML_API void ggml_backend_sched_set_eval_callback(ggml_backend_sched_t sched, ggml_backend_sched_eval_callback callback, void * user_data); - - // - // Utils - // - - struct ggml_backend_graph_copy { - ggml_backend_buffer_t buffer; - struct ggml_context * ctx_allocated; - struct ggml_context * ctx_unallocated; - struct ggml_cgraph * graph; - }; - - // Copy a graph to a different backend - GGML_API struct ggml_backend_graph_copy ggml_backend_graph_copy(ggml_backend_t backend, struct ggml_cgraph * graph); - GGML_API void ggml_backend_graph_copy_free(struct ggml_backend_graph_copy copy); - - typedef bool (*GGML_CALL ggml_backend_eval_callback)(int node_index, struct ggml_tensor * t1, struct ggml_tensor * t2, void * user_data); - - // Compare the output of two backends - GGML_API bool ggml_backend_compare_graph_backend(ggml_backend_t backend1, ggml_backend_t backend2, struct ggml_cgraph * graph, ggml_backend_eval_callback callback, void * user_data); - - // Tensor initialization - GGML_API void ggml_backend_tensor_alloc(ggml_backend_buffer_t buffer, struct ggml_tensor * tensor, void * addr); - GGML_API void ggml_backend_view_init(ggml_backend_buffer_t buffer, struct ggml_tensor * tensor); - - -#ifdef __cplusplus -} -#endif diff --git a/ggml-common.h b/ggml-common.h deleted file mode 100644 index 43c7978a098..00000000000 --- a/ggml-common.h +++ /dev/null @@ -1,1853 +0,0 @@ -#ifndef GGML_COMMON_DECL - -#if defined(GGML_COMMON_DECL_C) -#include - -typedef uint16_t ggml_half; -typedef uint32_t ggml_half2; - -#define GGML_COMMON_AGGR - -#define GGML_COMMON_DECL -#elif defined(GGML_COMMON_DECL_METAL) -#include - -typedef half ggml_half; -typedef half2 ggml_half2; - -#define GGML_COMMON_AGGR - -#define GGML_COMMON_DECL -#elif defined(GGML_COMMON_DECL_CUDA) -#include -#include - -typedef half ggml_half; -typedef half2 ggml_half2; - -#define GGML_COMMON_AGGR data - -#define GGML_COMMON_DECL -#elif defined(GGML_COMMON_DECL_HIP) -#include -#include - -typedef half ggml_half; -typedef half2 ggml_half2; - -#define GGML_COMMON_AGGR data - -#define GGML_COMMON_DECL -#elif defined(GGML_COMMON_DECL_SYCL) -#include -#include - -typedef sycl::half ggml_half; -typedef sycl::half2 ggml_half2; - -#define GGML_COMMON_AGGR data - -#define GGML_COMMON_DECL -#endif - -#if defined(GGML_COMMON_DECL) - -#ifndef __cplusplus -#ifndef static_assert -#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201100L) -#define static_assert(cond, msg) _Static_assert(cond, msg) -#else -#define static_assert(cond, msg) struct global_scope_noop_trick -#endif -#endif -#endif // __cplusplus - -// QK = number of values after dequantization -// QK_K = super-block size - -#ifdef GGML_QKK_64 -#define QK_K 64 -#define K_SCALE_SIZE 4 -#else -#define QK_K 256 -#define K_SCALE_SIZE 12 -#endif // GGML_QKK_64 - -#if defined(GGML_COMMON_DECL_CUDA) || defined(GGML_COMMON_DECL_HIP) || defined(GGML_COMMON_DECL_SYCL) -// QR = QK / number of values before dequantization -// QI = number of 32 bit integers before dequantization - -#define QI4_0 (QK4_0 / (4 * QR4_0)) -#define QR4_0 2 - -#define QI4_1 (QK4_1 / (4 * QR4_1)) -#define QR4_1 2 - -#define QI5_0 (QK5_0 / (4 * QR5_0)) -#define QR5_0 2 - -#define QI5_1 (QK5_1 / (4 * QR5_1)) -#define QR5_1 2 - -#define QI8_0 (QK8_0 / (4 * QR8_0)) -#define QR8_0 1 - -#define QI8_1 (QK8_1 / (4 * QR8_1)) -#define QR8_1 1 - -#define QI2_K (QK_K / (4*QR2_K)) -#define QR2_K 4 - -#define QI3_K (QK_K / (4*QR3_K)) -#define QR3_K 4 - -#define QI4_K (QK_K / (4*QR4_K)) -#define QR4_K 2 - -#define QI5_K (QK_K / (4*QR5_K)) -#define QR5_K 2 - -#define QI6_K (QK_K / (4*QR6_K)) -#define QR6_K 2 - -#define QI2_XXS (QK_K / (4*QR2_XXS)) -#define QR2_XXS 8 - -#define QI2_XS (QK_K / (4*QR2_XS)) -#define QR2_XS 8 - -#define QI2_S (QK_K / (4*QR2_S)) -#define QR2_S 8 - -#define QI3_XXS (QK_K / (4*QR3_XXS)) -#define QR3_XXS 8 - -#define QI3_XS (QK_K / (4*QR3_XS)) -#define QR3_XS 8 - -#define QI1_S (QK_K / (4*QR1_S)) -#define QR1_S 8 - -#define QI4_NL (QK4_NL / (4*QR4_NL)) -#define QR4_NL 2 - -#if QK_K == 64 -#define QI4_XS QI4_NL -#define QR4_XS QR4_NL -#else -#define QI4_XS (QK_K / (4*QR4_XS)) -#define QR4_XS 8 -#endif - -#endif // GGML_COMMON_DECL_CUDA || GGML_COMMON_DECL_HIP - -#define QK4_0 32 -typedef struct { - ggml_half d; // delta - uint8_t qs[QK4_0 / 2]; // nibbles / quants -} block_q4_0; -static_assert(sizeof(block_q4_0) == sizeof(ggml_half) + QK4_0 / 2, "wrong q4_0 block size/padding"); - -#define QK4_1 32 -typedef struct { - union { - struct { - ggml_half d; // delta - ggml_half m; // min - } GGML_COMMON_AGGR; - ggml_half2 dm; - }; - uint8_t qs[QK4_1 / 2]; // nibbles / quants -} block_q4_1; -static_assert(sizeof(block_q4_1) == 2 * sizeof(ggml_half) + QK4_1 / 2, "wrong q4_1 block size/padding"); - -#define QK5_0 32 -typedef struct { - ggml_half d; // delta - uint8_t qh[4]; // 5-th bit of quants - uint8_t qs[QK5_0 / 2]; // nibbles / quants -} block_q5_0; -static_assert(sizeof(block_q5_0) == sizeof(ggml_half) + sizeof(uint32_t) + QK5_0 / 2, "wrong q5_0 block size/padding"); - -#define QK5_1 32 -typedef struct { - union { - struct { - ggml_half d; // delta - ggml_half m; // min - } GGML_COMMON_AGGR; - ggml_half2 dm; - }; - uint8_t qh[4]; // 5-th bit of quants - uint8_t qs[QK5_1 / 2]; // nibbles / quants -} block_q5_1; -static_assert(sizeof(block_q5_1) == 2 * sizeof(ggml_half) + sizeof(uint32_t) + QK5_1 / 2, "wrong q5_1 block size/padding"); - -#define QK8_0 32 -typedef struct { - ggml_half d; // delta - int8_t qs[QK8_0]; // quants -} block_q8_0; -static_assert(sizeof(block_q8_0) == sizeof(ggml_half) + QK8_0, "wrong q8_0 block size/padding"); - -#define QK8_1 32 -typedef struct { - union { - struct { - ggml_half d; // delta - ggml_half s; // d * sum(qs[i]) - } GGML_COMMON_AGGR; - ggml_half2 ds; - }; - int8_t qs[QK8_1]; // quants -} block_q8_1; -static_assert(sizeof(block_q8_1) == 2*sizeof(ggml_half) + QK8_1, "wrong q8_1 block size/padding"); - -// -// Super-block quantization structures -// - -// 2-bit quantization -// weight is represented as x = a * q + b -// 16 blocks of 16 elements each -// Effectively 2.625 bits per weight -typedef struct { - uint8_t scales[QK_K/16]; // scales and mins, quantized with 4 bits - uint8_t qs[QK_K/4]; // quants - union { - struct { - ggml_half d; // super-block scale for quantized scales - ggml_half dmin; // super-block scale for quantized mins - } GGML_COMMON_AGGR; - ggml_half2 dm; - }; -} block_q2_K; -static_assert(sizeof(block_q2_K) == 2*sizeof(ggml_half) + QK_K/16 + QK_K/4, "wrong q2_K block size/padding"); - -// 3-bit quantization -// weight is represented as x = a * q -// 16 blocks of 16 elements each -// Effectively 3.4375 bits per weight -#ifdef GGML_QKK_64 -typedef struct { - uint8_t hmask[QK_K/8]; // quants - high bit - uint8_t qs[QK_K/4]; // quants - low 2 bits - uint8_t scales[2]; - ggml_half d; // super-block scale -} block_q3_K; -static_assert(sizeof(block_q3_K) == sizeof(ggml_half) + QK_K / 4 + QK_K / 8 + 2, "wrong q3_K block size/padding"); -#else -typedef struct { - uint8_t hmask[QK_K/8]; // quants - high bit - uint8_t qs[QK_K/4]; // quants - low 2 bits - uint8_t scales[12]; // scales, quantized with 6 bits - ggml_half d; // super-block scale -} block_q3_K; -static_assert(sizeof(block_q3_K) == sizeof(ggml_half) + QK_K / 4 + QK_K / 8 + 12, "wrong q3_K block size/padding"); -#endif - -// 4-bit quantization -// 8 blocks of 32 elements each -// weight is represented as x = a * q + b -// Effectively 4.5 bits per weight -#ifdef GGML_QKK_64 -typedef struct { - ggml_half d[2]; // super-block scales/mins - uint8_t scales[2]; // 4-bit block scales/mins - uint8_t qs[QK_K/2]; // 4--bit quants -} block_q4_K; -static_assert(sizeof(block_q4_K) == 2*sizeof(ggml_half) + QK_K/2 + 2, "wrong q4_K block size/padding"); -#else -typedef struct { - union { - struct { - ggml_half d; // super-block scale for quantized scales - ggml_half dmin; // super-block scale for quantized mins - } GGML_COMMON_AGGR; - ggml_half2 dm; - }; - uint8_t scales[K_SCALE_SIZE]; // scales and mins, quantized with 6 bits - uint8_t qs[QK_K/2]; // 4--bit quants -} block_q4_K; -static_assert(sizeof(block_q4_K) == 2*sizeof(ggml_half) + K_SCALE_SIZE + QK_K/2, "wrong q4_K block size/padding"); -#endif - -// 5-bit quantization -// 8 blocks of 32 elements each -// weight is represented as x = a * q + b -// Effectively 5.5 bits per weight -#ifdef GGML_QKK_64 -typedef struct { - ggml_half d; // super-block scale - int8_t scales[QK_K/16]; // 8-bit block scales - uint8_t qh[QK_K/8]; // quants, high bit - uint8_t qs[QK_K/2]; // quants, low 4 bits -} block_q5_K; -static_assert(sizeof(block_q5_K) == sizeof(ggml_half) + QK_K/2 + QK_K/8 + QK_K/16, "wrong q5_K block size/padding"); -#else -typedef struct { - union { - struct { - ggml_half d; // super-block scale for quantized scales - ggml_half dmin; // super-block scale for quantized mins - } GGML_COMMON_AGGR; - ggml_half2 dm; - }; - uint8_t scales[K_SCALE_SIZE]; // scales and mins, quantized with 6 bits - uint8_t qh[QK_K/8]; // quants, high bit - uint8_t qs[QK_K/2]; // quants, low 4 bits -} block_q5_K; -static_assert(sizeof(block_q5_K) == 2*sizeof(ggml_half) + K_SCALE_SIZE + QK_K/2 + QK_K/8, "wrong q5_K block size/padding"); -#endif - -// 6-bit quantization -// weight is represented as x = a * q -// 16 blocks of 16 elements each -// Effectively 6.5625 bits per weight -typedef struct { - uint8_t ql[QK_K/2]; // quants, lower 4 bits - uint8_t qh[QK_K/4]; // quants, upper 2 bits - int8_t scales[QK_K/16]; // scales, quantized with 8 bits - ggml_half d; // super-block scale -} block_q6_K; -static_assert(sizeof(block_q6_K) == sizeof(ggml_half) + QK_K / 16 + 3*QK_K/4, "wrong q6_K block size/padding"); - -// This is only used for intermediate quantization and dot products -typedef struct { - float d; // delta - int8_t qs[QK_K]; // quants - int16_t bsums[QK_K/16]; // sum of quants in groups of 16 -} block_q8_K; -static_assert(sizeof(block_q8_K) == sizeof(float) + QK_K + QK_K/16*sizeof(int16_t), "wrong q8_K block size/padding"); - -// (Almost) "true" 2-bit quantization. -// Due to the need to use blocks as per ggml design, it ends up using -// 2.0625 bpw because of the 16-bit scale for each block of 256. -typedef struct { - ggml_half d; - uint16_t qs[QK_K/8]; -} block_iq2_xxs; -static_assert(sizeof(block_iq2_xxs) == sizeof(ggml_half) + QK_K/8*sizeof(uint16_t), "wrong iq2_xxs block size/padding"); - -// 2.3125 bpw quants -typedef struct { - ggml_half d; - uint16_t qs[QK_K/8]; - uint8_t scales[QK_K/32]; -} block_iq2_xs; -static_assert(sizeof(block_iq2_xs) == sizeof(ggml_half) + QK_K/8*sizeof(uint16_t) + QK_K/32, "wrong iq2_xs block size/padding"); - -// 2.5625 bpw quants -typedef struct { - ggml_half d; - uint8_t qs[QK_K/4]; - uint8_t qh[QK_K/32]; - uint8_t scales[QK_K/32]; -} block_iq2_s; -static_assert(sizeof(block_iq2_s) == sizeof(ggml_half) + QK_K/4 + QK_K/16, "wrong iq2_s block size/padding"); - -// (Almost) "true" 3-bit quantization. -// Due to the need to use blocks as per ggml design, it ends up using -// 3.0625 bpw because of the 16-bit scale for each block of 256. -typedef struct { - ggml_half d; - uint8_t qs[3*QK_K/8]; -} block_iq3_xxs; -static_assert(sizeof(block_iq3_xxs) == sizeof(ggml_half) + 3*(QK_K/8), "wrong iq3_xxs block size/padding"); - -// 3.4375 bpw -#if QK_K == 64 -#define IQ3S_N_SCALE 2 -#else -#define IQ3S_N_SCALE QK_K/64 -#endif -typedef struct { - ggml_half d; - uint8_t qs[QK_K/4]; - uint8_t qh[QK_K/32]; - uint8_t signs[QK_K/8]; - uint8_t scales[IQ3S_N_SCALE]; -} block_iq3_s; -static_assert(sizeof(block_iq3_s) == sizeof(ggml_half) + 13*(QK_K/32) + IQ3S_N_SCALE, "wrong iq3_s block size/padding"); - -typedef struct { - ggml_half d; - uint8_t qs[QK_K/8]; - uint16_t qh[QK_K/32]; -} block_iq1_s; -static_assert(sizeof(block_iq1_s) == sizeof(ggml_half) + QK_K/8 + QK_K/16, "wrong iq1_s block size/padding"); - -// 1.75 bpw -typedef struct { - uint8_t qs[QK_K/8]; // grid index, low 8 bits - uint8_t qh[QK_K/16]; // grid index, high 3 bits + grid shift bit (for two groups of 8) -#if QK_K == 64 - ggml_half d; -#endif - uint8_t scales[QK_K/32]; // 3-bit block scales (4-bit if QK_K == 64) -} block_iq1_m; -#if QK_K == 64 -static_assert(sizeof(block_iq1_m) == QK_K/8 + QK_K/16 + QK_K/32 + sizeof(ggml_half), "wrong iq1_m block size/padding"); -#else -static_assert(sizeof(block_iq1_m) == QK_K/8 + QK_K/16 + QK_K/32, "wrong iq1_m block size/padding"); -#endif - -// Used by IQ1_M quants -typedef union { - ggml_half f16; - uint16_t u16; -} iq1m_scale_t; - -// Non-linear quants -#define QK4_NL 32 -typedef struct { - ggml_half d; - uint8_t qs[QK4_NL/2]; -} block_iq4_nl; -static_assert(sizeof(block_iq4_nl) == sizeof(ggml_half) + QK4_NL/2, "wrong iq4_nl block size/padding"); - -#if QK_K == 64 -#define block_iq4_xs block_iq4_nl -#else -typedef struct { - ggml_half d; - uint16_t scales_h; - uint8_t scales_l[QK_K/64]; - uint8_t qs[QK_K/2]; -} block_iq4_xs; -static_assert(sizeof(block_iq4_xs) == sizeof(ggml_half) + sizeof(uint16_t) + QK_K/64 + QK_K/2, "wrong iq4_xs block size/padding"); -#endif - -#endif // GGML_COMMON_DECL -#endif // GGML_COMMON_DECL - -//////////////////////////////////////////////////////////////////////////////// - -#ifndef GGML_COMMON_IMPL - -#if defined(GGML_COMMON_IMPL_C) -#include - -#define GGML_TABLE_BEGIN(type, name, size) static const type name[size] = { -#define GGML_TABLE_END() }; - -#define GGML_COMMON_IMPL -#elif defined(GGML_COMMON_IMPL_METAL) -#include - -#define GGML_TABLE_BEGIN(type, name, size) static const constant type name[size] = { -#define GGML_TABLE_END() }; - -#define GGML_COMMON_IMPL -#elif defined(GGML_COMMON_IMPL_CUDA) || defined(GGML_COMMON_IMPL_HIP) -#include - -#define GGML_TABLE_BEGIN(type, name, size) static const __device__ type name[size] = { -#define GGML_TABLE_END() }; - -#define GGML_COMMON_IMPL -#elif defined(GGML_COMMON_IMPL_SYCL) - -#include - -#define GGML_TABLE_BEGIN(type, name, size) static const type name[size] = { -#define GGML_TABLE_END() }; - -#define GGML_COMMON_IMPL -#endif - -#if defined(GGML_COMMON_IMPL) - -GGML_TABLE_BEGIN(uint8_t, kmask_iq2xs, 8) - 1, 2, 4, 8, 16, 32, 64, 128 -GGML_TABLE_END() - -GGML_TABLE_BEGIN(uint8_t, ksigns_iq2xs, 128) - 0, 129, 130, 3, 132, 5, 6, 135, 136, 9, 10, 139, 12, 141, 142, 15, - 144, 17, 18, 147, 20, 149, 150, 23, 24, 153, 154, 27, 156, 29, 30, 159, - 160, 33, 34, 163, 36, 165, 166, 39, 40, 169, 170, 43, 172, 45, 46, 175, - 48, 177, 178, 51, 180, 53, 54, 183, 184, 57, 58, 187, 60, 189, 190, 63, - 192, 65, 66, 195, 68, 197, 198, 71, 72, 201, 202, 75, 204, 77, 78, 207, - 80, 209, 210, 83, 212, 85, 86, 215, 216, 89, 90, 219, 92, 221, 222, 95, - 96, 225, 226, 99, 228, 101, 102, 231, 232, 105, 106, 235, 108, 237, 238, 111, - 240, 113, 114, 243, 116, 245, 246, 119, 120, 249, 250, 123, 252, 125, 126, 255, -GGML_TABLE_END() - -//#if __CUDA_ARCH__ >= MIN_CC_DP4A // lowest compute capability for integer intrinsics -GGML_TABLE_BEGIN(uint64_t, ksigns64, 128) - 0x0000000000000000, 0xff000000000000ff, 0xff0000000000ff00, 0x000000000000ffff, - 0xff00000000ff0000, 0x0000000000ff00ff, 0x0000000000ffff00, 0xff00000000ffffff, - 0xff000000ff000000, 0x00000000ff0000ff, 0x00000000ff00ff00, 0xff000000ff00ffff, - 0x00000000ffff0000, 0xff000000ffff00ff, 0xff000000ffffff00, 0x00000000ffffffff, - 0xff0000ff00000000, 0x000000ff000000ff, 0x000000ff0000ff00, 0xff0000ff0000ffff, - 0x000000ff00ff0000, 0xff0000ff00ff00ff, 0xff0000ff00ffff00, 0x000000ff00ffffff, - 0x000000ffff000000, 0xff0000ffff0000ff, 0xff0000ffff00ff00, 0x000000ffff00ffff, - 0xff0000ffffff0000, 0x000000ffffff00ff, 0x000000ffffffff00, 0xff0000ffffffffff, - 0xff00ff0000000000, 0x0000ff00000000ff, 0x0000ff000000ff00, 0xff00ff000000ffff, - 0x0000ff0000ff0000, 0xff00ff0000ff00ff, 0xff00ff0000ffff00, 0x0000ff0000ffffff, - 0x0000ff00ff000000, 0xff00ff00ff0000ff, 0xff00ff00ff00ff00, 0x0000ff00ff00ffff, - 0xff00ff00ffff0000, 0x0000ff00ffff00ff, 0x0000ff00ffffff00, 0xff00ff00ffffffff, - 0x0000ffff00000000, 0xff00ffff000000ff, 0xff00ffff0000ff00, 0x0000ffff0000ffff, - 0xff00ffff00ff0000, 0x0000ffff00ff00ff, 0x0000ffff00ffff00, 0xff00ffff00ffffff, - 0xff00ffffff000000, 0x0000ffffff0000ff, 0x0000ffffff00ff00, 0xff00ffffff00ffff, - 0x0000ffffffff0000, 0xff00ffffffff00ff, 0xff00ffffffffff00, 0x0000ffffffffffff, - 0xffff000000000000, 0x00ff0000000000ff, 0x00ff00000000ff00, 0xffff00000000ffff, - 0x00ff000000ff0000, 0xffff000000ff00ff, 0xffff000000ffff00, 0x00ff000000ffffff, - 0x00ff0000ff000000, 0xffff0000ff0000ff, 0xffff0000ff00ff00, 0x00ff0000ff00ffff, - 0xffff0000ffff0000, 0x00ff0000ffff00ff, 0x00ff0000ffffff00, 0xffff0000ffffffff, - 0x00ff00ff00000000, 0xffff00ff000000ff, 0xffff00ff0000ff00, 0x00ff00ff0000ffff, - 0xffff00ff00ff0000, 0x00ff00ff00ff00ff, 0x00ff00ff00ffff00, 0xffff00ff00ffffff, - 0xffff00ffff000000, 0x00ff00ffff0000ff, 0x00ff00ffff00ff00, 0xffff00ffff00ffff, - 0x00ff00ffffff0000, 0xffff00ffffff00ff, 0xffff00ffffffff00, 0x00ff00ffffffffff, - 0x00ffff0000000000, 0xffffff00000000ff, 0xffffff000000ff00, 0x00ffff000000ffff, - 0xffffff0000ff0000, 0x00ffff0000ff00ff, 0x00ffff0000ffff00, 0xffffff0000ffffff, - 0xffffff00ff000000, 0x00ffff00ff0000ff, 0x00ffff00ff00ff00, 0xffffff00ff00ffff, - 0x00ffff00ffff0000, 0xffffff00ffff00ff, 0xffffff00ffffff00, 0x00ffff00ffffffff, - 0xffffffff00000000, 0x00ffffff000000ff, 0x00ffffff0000ff00, 0xffffffff0000ffff, - 0x00ffffff00ff0000, 0xffffffff00ff00ff, 0xffffffff00ffff00, 0x00ffffff00ffffff, - 0x00ffffffff000000, 0xffffffffff0000ff, 0xffffffffff00ff00, 0x00ffffffff00ffff, - 0xffffffffffff0000, 0x00ffffffffff00ff, 0x00ffffffffffff00, 0xffffffffffffffff, -GGML_TABLE_END() -//#endif - - -GGML_TABLE_BEGIN(uint64_t, iq2xxs_grid, 256) - 0x0808080808080808, 0x080808080808082b, 0x0808080808081919, 0x0808080808082b08, - 0x0808080808082b2b, 0x0808080808190819, 0x0808080808191908, 0x08080808082b0808, - 0x08080808082b082b, 0x08080808082b2b08, 0x08080808082b2b2b, 0x0808080819080819, - 0x0808080819081908, 0x0808080819190808, 0x0808080819192b08, 0x08080808192b0819, - 0x08080808192b1908, 0x080808082b080808, 0x080808082b08082b, 0x080808082b082b2b, - 0x080808082b2b082b, 0x0808081908080819, 0x0808081908081908, 0x0808081908190808, - 0x0808081908191919, 0x0808081919080808, 0x080808192b081908, 0x080808192b192b08, - 0x0808082b08080808, 0x0808082b0808082b, 0x0808082b082b082b, 0x0808082b2b08082b, - 0x0808190808080819, 0x0808190808081908, 0x0808190808190808, 0x08081908082b0819, - 0x08081908082b1908, 0x0808190819080808, 0x080819081908082b, 0x0808190819082b08, - 0x08081908192b0808, 0x080819082b080819, 0x080819082b081908, 0x080819082b190808, - 0x080819082b2b1908, 0x0808191908080808, 0x080819190808082b, 0x0808191908082b08, - 0x08081919082b0808, 0x080819191908192b, 0x08081919192b2b19, 0x080819192b080808, - 0x080819192b190819, 0x0808192b08082b19, 0x0808192b08190808, 0x0808192b19080808, - 0x0808192b2b081908, 0x0808192b2b2b1908, 0x08082b0808080808, 0x08082b0808081919, - 0x08082b0808082b08, 0x08082b0808191908, 0x08082b08082b2b08, 0x08082b0819080819, - 0x08082b0819081908, 0x08082b0819190808, 0x08082b081919082b, 0x08082b082b082b08, - 0x08082b1908081908, 0x08082b1919080808, 0x08082b2b0808082b, 0x08082b2b08191908, - 0x0819080808080819, 0x0819080808081908, 0x0819080808190808, 0x08190808082b0819, - 0x0819080819080808, 0x08190808192b0808, 0x081908082b081908, 0x081908082b190808, - 0x081908082b191919, 0x0819081908080808, 0x0819081908082b08, 0x08190819082b0808, - 0x0819081919190808, 0x0819081919192b2b, 0x081908192b080808, 0x0819082b082b1908, - 0x0819082b19081919, 0x0819190808080808, 0x0819190808082b08, 0x08191908082b0808, - 0x08191908082b1919, 0x0819190819082b19, 0x081919082b080808, 0x0819191908192b08, - 0x08191919192b082b, 0x0819192b08080808, 0x0819192b0819192b, 0x08192b0808080819, - 0x08192b0808081908, 0x08192b0808190808, 0x08192b0819080808, 0x08192b082b080819, - 0x08192b1908080808, 0x08192b1908081919, 0x08192b192b2b0808, 0x08192b2b19190819, - 0x082b080808080808, 0x082b08080808082b, 0x082b080808082b2b, 0x082b080819081908, - 0x082b0808192b0819, 0x082b08082b080808, 0x082b08082b08082b, 0x082b0819082b2b19, - 0x082b081919082b08, 0x082b082b08080808, 0x082b082b0808082b, 0x082b190808080819, - 0x082b190808081908, 0x082b190808190808, 0x082b190819080808, 0x082b19081919192b, - 0x082b191908080808, 0x082b191919080819, 0x082b1919192b1908, 0x082b192b2b190808, - 0x082b2b0808082b08, 0x082b2b08082b0808, 0x082b2b082b191908, 0x082b2b2b19081908, - 0x1908080808080819, 0x1908080808081908, 0x1908080808190808, 0x1908080808192b08, - 0x19080808082b0819, 0x19080808082b1908, 0x1908080819080808, 0x1908080819082b08, - 0x190808081919192b, 0x19080808192b0808, 0x190808082b080819, 0x190808082b081908, - 0x190808082b190808, 0x1908081908080808, 0x19080819082b0808, 0x19080819192b0819, - 0x190808192b080808, 0x190808192b081919, 0x1908082b08080819, 0x1908082b08190808, - 0x1908082b19082b08, 0x1908082b1919192b, 0x1908082b192b2b08, 0x1908190808080808, - 0x1908190808082b08, 0x19081908082b0808, 0x190819082b080808, 0x190819082b192b19, - 0x190819190819082b, 0x19081919082b1908, 0x1908192b08080808, 0x19082b0808080819, - 0x19082b0808081908, 0x19082b0808190808, 0x19082b0819080808, 0x19082b0819081919, - 0x19082b1908080808, 0x19082b1919192b08, 0x19082b19192b0819, 0x19082b192b08082b, - 0x19082b2b19081919, 0x19082b2b2b190808, 0x1919080808080808, 0x1919080808082b08, - 0x1919080808190819, 0x1919080808192b19, 0x19190808082b0808, 0x191908082b080808, - 0x191908082b082b08, 0x1919081908081908, 0x191908191908082b, 0x191908192b2b1908, - 0x1919082b2b190819, 0x191919082b190808, 0x191919082b19082b, 0x1919191908082b2b, - 0x1919192b08080819, 0x1919192b19191908, 0x19192b0808080808, 0x19192b0808190819, - 0x19192b0808192b19, 0x19192b08192b1908, 0x19192b1919080808, 0x19192b2b08082b08, - 0x192b080808081908, 0x192b080808190808, 0x192b080819080808, 0x192b0808192b2b08, - 0x192b081908080808, 0x192b081919191919, 0x192b082b08192b08, 0x192b082b192b0808, - 0x192b190808080808, 0x192b190808081919, 0x192b191908190808, 0x192b19190819082b, - 0x192b19192b081908, 0x192b2b081908082b, 0x2b08080808080808, 0x2b0808080808082b, - 0x2b08080808082b2b, 0x2b08080819080819, 0x2b0808082b08082b, 0x2b08081908081908, - 0x2b08081908192b08, 0x2b08081919080808, 0x2b08082b08190819, 0x2b08190808080819, - 0x2b08190808081908, 0x2b08190808190808, 0x2b08190808191919, 0x2b08190819080808, - 0x2b081908192b0808, 0x2b08191908080808, 0x2b0819191908192b, 0x2b0819192b191908, - 0x2b08192b08082b19, 0x2b08192b19080808, 0x2b08192b192b0808, 0x2b082b080808082b, - 0x2b082b1908081908, 0x2b082b2b08190819, 0x2b19080808081908, 0x2b19080808190808, - 0x2b190808082b1908, 0x2b19080819080808, 0x2b1908082b2b0819, 0x2b1908190819192b, - 0x2b1908192b080808, 0x2b19082b19081919, 0x2b19190808080808, 0x2b191908082b082b, - 0x2b19190819081908, 0x2b19191919190819, 0x2b192b082b080819, 0x2b192b19082b0808, - 0x2b2b08080808082b, 0x2b2b080819190808, 0x2b2b08082b081919, 0x2b2b081908082b19, - 0x2b2b082b08080808, 0x2b2b190808192b08, 0x2b2b2b0819190808, 0x2b2b2b1908081908, -GGML_TABLE_END() - -GGML_TABLE_BEGIN(uint64_t, iq2xs_grid, 512) - 0x0808080808080808, 0x080808080808082b, 0x0808080808081919, 0x0808080808082b08, - 0x0808080808082b2b, 0x0808080808190819, 0x0808080808191908, 0x080808080819192b, - 0x0808080808192b19, 0x08080808082b0808, 0x08080808082b082b, 0x08080808082b1919, - 0x08080808082b2b08, 0x0808080819080819, 0x0808080819081908, 0x080808081908192b, - 0x0808080819082b19, 0x0808080819190808, 0x080808081919082b, 0x0808080819191919, - 0x0808080819192b08, 0x08080808192b0819, 0x08080808192b1908, 0x080808082b080808, - 0x080808082b08082b, 0x080808082b081919, 0x080808082b082b08, 0x080808082b190819, - 0x080808082b191908, 0x080808082b192b19, 0x080808082b2b0808, 0x0808081908080819, - 0x0808081908081908, 0x080808190808192b, 0x0808081908082b19, 0x0808081908190808, - 0x080808190819082b, 0x0808081908191919, 0x0808081908192b08, 0x0808081908192b2b, - 0x08080819082b0819, 0x08080819082b1908, 0x0808081919080808, 0x080808191908082b, - 0x0808081919081919, 0x0808081919082b08, 0x0808081919190819, 0x0808081919191908, - 0x08080819192b0808, 0x08080819192b2b08, 0x080808192b080819, 0x080808192b081908, - 0x080808192b190808, 0x0808082b08080808, 0x0808082b0808082b, 0x0808082b08081919, - 0x0808082b08082b08, 0x0808082b08190819, 0x0808082b08191908, 0x0808082b082b0808, - 0x0808082b19080819, 0x0808082b19081908, 0x0808082b19190808, 0x0808082b19191919, - 0x0808082b2b080808, 0x0808082b2b082b2b, 0x0808190808080819, 0x0808190808081908, - 0x080819080808192b, 0x0808190808082b19, 0x0808190808190808, 0x080819080819082b, - 0x0808190808191919, 0x0808190808192b08, 0x08081908082b0819, 0x08081908082b1908, - 0x0808190819080808, 0x080819081908082b, 0x0808190819081919, 0x0808190819082b08, - 0x0808190819190819, 0x0808190819191908, 0x080819081919192b, 0x08081908192b0808, - 0x080819082b080819, 0x080819082b081908, 0x080819082b190808, 0x0808191908080808, - 0x080819190808082b, 0x0808191908081919, 0x0808191908082b08, 0x0808191908190819, - 0x0808191908191908, 0x08081919082b0808, 0x0808191919080819, 0x0808191919081908, - 0x0808191919190808, 0x08081919192b0819, 0x080819192b080808, 0x0808192b08080819, - 0x0808192b08081908, 0x0808192b08190808, 0x0808192b082b192b, 0x0808192b19080808, - 0x0808192b1908082b, 0x0808192b2b081908, 0x08082b0808080808, 0x08082b080808082b, - 0x08082b0808081919, 0x08082b0808082b08, 0x08082b0808082b2b, 0x08082b0808190819, - 0x08082b0808191908, 0x08082b08082b0808, 0x08082b08082b1919, 0x08082b0819080819, - 0x08082b0819081908, 0x08082b0819190808, 0x08082b0819192b08, 0x08082b082b080808, - 0x08082b082b2b0808, 0x08082b082b2b2b2b, 0x08082b1908080819, 0x08082b1908081908, - 0x08082b1908190808, 0x08082b1919080808, 0x08082b192b080819, 0x08082b192b082b19, - 0x08082b2b08080808, 0x08082b2b082b0808, 0x08082b2b082b2b08, 0x08082b2b2b19192b, - 0x08082b2b2b2b0808, 0x0819080808080819, 0x0819080808081908, 0x081908080808192b, - 0x0819080808082b19, 0x0819080808190808, 0x081908080819082b, 0x0819080808191919, - 0x0819080808192b08, 0x08190808082b0819, 0x08190808082b1908, 0x0819080819080808, - 0x081908081908082b, 0x0819080819081919, 0x0819080819082b08, 0x0819080819190819, - 0x0819080819191908, 0x08190808192b0808, 0x08190808192b2b2b, 0x081908082b080819, - 0x081908082b081908, 0x081908082b190808, 0x0819081908080808, 0x081908190808082b, - 0x0819081908081919, 0x0819081908082b08, 0x0819081908190819, 0x0819081908191908, - 0x08190819082b0808, 0x0819081919080819, 0x0819081919081908, 0x0819081919190808, - 0x081908192b080808, 0x081908192b191908, 0x081908192b19192b, 0x0819082b08080819, - 0x0819082b08081908, 0x0819082b0808192b, 0x0819082b08190808, 0x0819082b19080808, - 0x0819082b192b0808, 0x0819190808080808, 0x081919080808082b, 0x0819190808081919, - 0x0819190808082b08, 0x0819190808190819, 0x0819190808191908, 0x08191908082b0808, - 0x0819190819080819, 0x0819190819081908, 0x0819190819082b19, 0x0819190819190808, - 0x08191908192b1908, 0x081919082b080808, 0x0819191908080819, 0x0819191908081908, - 0x0819191908190808, 0x0819191919080808, 0x0819192b08080808, 0x0819192b08191908, - 0x0819192b19082b19, 0x08192b0808080819, 0x08192b0808081908, 0x08192b0808190808, - 0x08192b080819082b, 0x08192b0819080808, 0x08192b0819191908, 0x08192b082b08192b, - 0x08192b1908080808, 0x08192b1908081919, 0x08192b19192b192b, 0x08192b2b19190819, - 0x08192b2b2b2b2b19, 0x082b080808080808, 0x082b08080808082b, 0x082b080808081919, - 0x082b080808082b08, 0x082b080808082b2b, 0x082b080808190819, 0x082b080808191908, - 0x082b0808082b0808, 0x082b080819080819, 0x082b080819081908, 0x082b080819190808, - 0x082b08082b080808, 0x082b08082b2b0808, 0x082b081908080819, 0x082b081908081908, - 0x082b081908190808, 0x082b081919080808, 0x082b081919082b08, 0x082b0819192b1919, - 0x082b082b08080808, 0x082b082b082b082b, 0x082b082b2b080808, 0x082b082b2b2b2b08, - 0x082b190808080819, 0x082b190808081908, 0x082b190808190808, 0x082b1908082b2b19, - 0x082b190819080808, 0x082b191908080808, 0x082b191919080819, 0x082b19191919082b, - 0x082b19192b192b19, 0x082b192b08080819, 0x082b192b08192b2b, 0x082b192b2b2b192b, - 0x082b2b0808080808, 0x082b2b0808082b08, 0x082b2b0808082b2b, 0x082b2b08082b0808, - 0x082b2b0819191919, 0x082b2b082b082b08, 0x082b2b082b2b082b, 0x082b2b19192b2b08, - 0x082b2b192b190808, 0x082b2b2b08082b08, 0x082b2b2b082b0808, 0x082b2b2b2b08082b, - 0x082b2b2b2b082b08, 0x082b2b2b2b082b2b, 0x1908080808080819, 0x1908080808081908, - 0x190808080808192b, 0x1908080808082b19, 0x1908080808190808, 0x190808080819082b, - 0x1908080808191919, 0x1908080808192b08, 0x19080808082b0819, 0x19080808082b1908, - 0x1908080819080808, 0x190808081908082b, 0x1908080819081919, 0x1908080819082b08, - 0x1908080819082b2b, 0x1908080819190819, 0x1908080819191908, 0x19080808192b0808, - 0x19080808192b1919, 0x190808082b080819, 0x190808082b081908, 0x190808082b190808, - 0x1908081908080808, 0x190808190808082b, 0x1908081908081919, 0x1908081908082b08, - 0x1908081908190819, 0x1908081908191908, 0x19080819082b0808, 0x1908081919080819, - 0x1908081919081908, 0x1908081919190808, 0x190808192b080808, 0x190808192b081919, - 0x190808192b2b082b, 0x1908082b08080819, 0x1908082b08081908, 0x1908082b08190808, - 0x1908082b0819082b, 0x1908082b082b2b19, 0x1908082b19080808, 0x1908190808080808, - 0x190819080808082b, 0x1908190808081919, 0x1908190808082b08, 0x1908190808190819, - 0x1908190808191908, 0x1908190808192b19, 0x19081908082b0808, 0x1908190819080819, - 0x1908190819081908, 0x1908190819190808, 0x190819082b080808, 0x190819082b191908, - 0x1908191908080819, 0x1908191908081908, 0x1908191908190808, 0x19081919082b1908, - 0x1908191919080808, 0x190819192b192b2b, 0x1908192b08080808, 0x1908192b08082b2b, - 0x1908192b19081908, 0x1908192b19190808, 0x19082b0808080819, 0x19082b0808081908, - 0x19082b0808190808, 0x19082b0819080808, 0x19082b0819081919, 0x19082b0819191908, - 0x19082b08192b082b, 0x19082b1908080808, 0x19082b1908190819, 0x19082b1919081908, - 0x19082b1919190808, 0x19082b19192b2b19, 0x19082b2b08081908, 0x1919080808080808, - 0x191908080808082b, 0x1919080808081919, 0x1919080808082b08, 0x1919080808190819, - 0x1919080808191908, 0x19190808082b0808, 0x19190808082b2b08, 0x1919080819080819, - 0x1919080819081908, 0x1919080819190808, 0x191908082b080808, 0x1919081908080819, - 0x1919081908081908, 0x1919081908190808, 0x1919081908191919, 0x1919081919080808, - 0x191908191908082b, 0x1919082b08080808, 0x1919082b19081908, 0x1919082b2b2b2b2b, - 0x1919190808080819, 0x1919190808081908, 0x1919190808190808, 0x19191908082b0819, - 0x1919190819080808, 0x19191908192b0808, 0x191919082b080819, 0x191919082b2b0819, - 0x1919191908080808, 0x1919191908082b08, 0x191919192b080808, 0x191919192b082b08, - 0x1919192b082b0819, 0x1919192b192b2b08, 0x1919192b2b2b0819, 0x19192b0808080808, - 0x19192b0808191908, 0x19192b0819080819, 0x19192b0819190808, 0x19192b082b192b19, - 0x19192b1908192b2b, 0x19192b1919080808, 0x19192b191908082b, 0x19192b2b2b081919, - 0x192b080808080819, 0x192b080808081908, 0x192b080808190808, 0x192b080819080808, - 0x192b080819191908, 0x192b0808192b082b, 0x192b08082b08192b, 0x192b08082b2b2b19, - 0x192b081908080808, 0x192b082b082b1908, 0x192b082b19082b2b, 0x192b082b2b19082b, - 0x192b190808080808, 0x192b19080819192b, 0x192b191908190808, 0x192b191919080808, - 0x192b191919081919, 0x192b19192b2b1908, 0x192b2b0808080819, 0x192b2b08192b2b2b, - 0x192b2b19082b1919, 0x192b2b2b0808192b, 0x192b2b2b19191908, 0x192b2b2b192b082b, - 0x2b08080808080808, 0x2b0808080808082b, 0x2b08080808081919, 0x2b08080808082b08, - 0x2b08080808190819, 0x2b08080808191908, 0x2b080808082b0808, 0x2b080808082b2b2b, - 0x2b08080819080819, 0x2b08080819081908, 0x2b08080819190808, 0x2b0808082b080808, - 0x2b0808082b08082b, 0x2b0808082b2b2b08, 0x2b0808082b2b2b2b, 0x2b08081908080819, - 0x2b08081908081908, 0x2b0808190808192b, 0x2b08081908190808, 0x2b08081919080808, - 0x2b08081919190819, 0x2b08081919192b19, 0x2b08082b08080808, 0x2b08082b082b0808, - 0x2b08082b2b080808, 0x2b08082b2b08082b, 0x2b08082b2b2b0808, 0x2b08082b2b2b2b08, - 0x2b08190808080819, 0x2b08190808081908, 0x2b08190808190808, 0x2b0819080819082b, - 0x2b08190808191919, 0x2b08190819080808, 0x2b081908192b0808, 0x2b0819082b082b19, - 0x2b08191908080808, 0x2b08191919081908, 0x2b0819192b2b1919, 0x2b08192b08192b08, - 0x2b08192b192b2b2b, 0x2b082b0808080808, 0x2b082b0808082b08, 0x2b082b08082b1919, - 0x2b082b0819192b2b, 0x2b082b082b080808, 0x2b082b082b08082b, 0x2b082b082b2b2b08, - 0x2b082b190808192b, 0x2b082b2b082b082b, 0x2b082b2b2b080808, 0x2b082b2b2b082b08, - 0x2b082b2b2b19192b, 0x2b082b2b2b2b2b08, 0x2b19080808080819, 0x2b19080808081908, - 0x2b19080808190808, 0x2b19080819080808, 0x2b1908081919192b, 0x2b1908082b081908, - 0x2b19081908080808, 0x2b190819082b082b, 0x2b190819192b1908, 0x2b19082b1919192b, - 0x2b19082b2b082b19, 0x2b19190808080808, 0x2b19190808081919, 0x2b19190819081908, - 0x2b19190819190808, 0x2b19190819192b08, 0x2b191919082b2b19, 0x2b1919192b190808, - 0x2b1919192b19082b, 0x2b19192b19080819, 0x2b192b0819190819, 0x2b192b082b2b192b, - 0x2b192b1919082b19, 0x2b192b2b08191919, 0x2b192b2b192b0808, 0x2b2b080808080808, - 0x2b2b08080808082b, 0x2b2b080808082b08, 0x2b2b080808082b2b, 0x2b2b0808082b0808, - 0x2b2b0808082b2b2b, 0x2b2b08082b2b0808, 0x2b2b081919190819, 0x2b2b081919192b19, - 0x2b2b08192b2b192b, 0x2b2b082b08080808, 0x2b2b082b0808082b, 0x2b2b082b08082b08, - 0x2b2b082b082b2b2b, 0x2b2b082b2b080808, 0x2b2b082b2b2b0808, 0x2b2b190819080808, - 0x2b2b19082b191919, 0x2b2b192b192b1919, 0x2b2b192b2b192b08, 0x2b2b2b0808082b2b, - 0x2b2b2b08082b0808, 0x2b2b2b08082b082b, 0x2b2b2b08082b2b08, 0x2b2b2b082b2b0808, - 0x2b2b2b082b2b2b08, 0x2b2b2b1908081908, 0x2b2b2b192b081908, 0x2b2b2b192b08192b, - 0x2b2b2b2b082b2b08, 0x2b2b2b2b082b2b2b, 0x2b2b2b2b2b190819, 0x2b2b2b2b2b2b2b2b, -GGML_TABLE_END() - -GGML_TABLE_BEGIN(uint64_t, iq2s_grid, 1024) - 0x0808080808080808, 0x080808080808082b, 0x0808080808081919, 0x0808080808082b08, - 0x0808080808082b2b, 0x0808080808190819, 0x0808080808191908, 0x080808080819192b, - 0x0808080808192b19, 0x08080808082b0808, 0x08080808082b082b, 0x08080808082b1919, - 0x08080808082b2b08, 0x0808080819080819, 0x0808080819081908, 0x080808081908192b, - 0x0808080819082b19, 0x0808080819190808, 0x080808081919082b, 0x0808080819191919, - 0x0808080819192b08, 0x08080808192b0819, 0x08080808192b1908, 0x08080808192b192b, - 0x08080808192b2b19, 0x080808082b080808, 0x080808082b08082b, 0x080808082b081919, - 0x080808082b082b08, 0x080808082b190819, 0x080808082b191908, 0x080808082b2b0808, - 0x080808082b2b1919, 0x080808082b2b2b2b, 0x0808081908080819, 0x0808081908081908, - 0x080808190808192b, 0x0808081908082b19, 0x0808081908190808, 0x080808190819082b, - 0x0808081908191919, 0x0808081908192b08, 0x08080819082b0819, 0x08080819082b1908, - 0x0808081919080808, 0x080808191908082b, 0x0808081919081919, 0x0808081919082b08, - 0x0808081919190819, 0x0808081919191908, 0x080808191919192b, 0x0808081919192b19, - 0x08080819192b0808, 0x08080819192b1919, 0x08080819192b2b08, 0x080808192b080819, - 0x080808192b081908, 0x080808192b190808, 0x080808192b19082b, 0x080808192b191919, - 0x080808192b2b0819, 0x080808192b2b1908, 0x0808082b08080808, 0x0808082b0808082b, - 0x0808082b08081919, 0x0808082b08082b08, 0x0808082b08190819, 0x0808082b08191908, - 0x0808082b082b0808, 0x0808082b082b2b2b, 0x0808082b19080819, 0x0808082b19081908, - 0x0808082b1908192b, 0x0808082b19082b19, 0x0808082b19190808, 0x0808082b19191919, - 0x0808082b2b080808, 0x0808082b2b081919, 0x0808082b2b082b2b, 0x0808082b2b191908, - 0x0808082b2b2b082b, 0x0808190808080819, 0x0808190808081908, 0x080819080808192b, - 0x0808190808082b19, 0x0808190808190808, 0x080819080819082b, 0x0808190808191919, - 0x0808190808192b08, 0x08081908082b0819, 0x08081908082b1908, 0x08081908082b192b, - 0x08081908082b2b19, 0x0808190819080808, 0x080819081908082b, 0x0808190819081919, - 0x0808190819082b08, 0x0808190819082b2b, 0x0808190819190819, 0x0808190819191908, - 0x080819081919192b, 0x0808190819192b19, 0x08081908192b0808, 0x08081908192b082b, - 0x08081908192b1919, 0x080819082b080819, 0x080819082b081908, 0x080819082b08192b, - 0x080819082b082b19, 0x080819082b190808, 0x080819082b191919, 0x080819082b192b08, - 0x080819082b2b0819, 0x080819082b2b1908, 0x0808191908080808, 0x080819190808082b, - 0x0808191908081919, 0x0808191908082b08, 0x0808191908082b2b, 0x0808191908190819, - 0x0808191908191908, 0x080819190819192b, 0x0808191908192b19, 0x08081919082b0808, - 0x08081919082b1919, 0x08081919082b2b08, 0x0808191919080819, 0x0808191919081908, - 0x080819191908192b, 0x0808191919082b19, 0x0808191919190808, 0x080819191919082b, - 0x0808191919191919, 0x0808191919192b08, 0x08081919192b0819, 0x08081919192b1908, - 0x080819192b080808, 0x080819192b08082b, 0x080819192b081919, 0x080819192b082b08, - 0x080819192b190819, 0x080819192b191908, 0x080819192b2b0808, 0x0808192b08080819, - 0x0808192b08081908, 0x0808192b0808192b, 0x0808192b08082b19, 0x0808192b08190808, - 0x0808192b08191919, 0x0808192b19080808, 0x0808192b19081919, 0x0808192b19082b08, - 0x0808192b19190819, 0x0808192b19191908, 0x0808192b192b0808, 0x0808192b2b080819, - 0x0808192b2b081908, 0x0808192b2b190808, 0x08082b0808080808, 0x08082b080808082b, - 0x08082b0808081919, 0x08082b0808082b08, 0x08082b0808190819, 0x08082b0808191908, - 0x08082b080819192b, 0x08082b0808192b19, 0x08082b08082b0808, 0x08082b08082b1919, - 0x08082b08082b2b2b, 0x08082b0819080819, 0x08082b0819081908, 0x08082b081908192b, - 0x08082b0819082b19, 0x08082b0819190808, 0x08082b081919082b, 0x08082b0819191919, - 0x08082b0819192b08, 0x08082b08192b0819, 0x08082b08192b1908, 0x08082b082b080808, - 0x08082b082b081919, 0x08082b082b191908, 0x08082b082b2b2b2b, 0x08082b1908080819, - 0x08082b1908081908, 0x08082b1908190808, 0x08082b190819082b, 0x08082b1908191919, - 0x08082b1908192b08, 0x08082b19082b0819, 0x08082b1919080808, 0x08082b1919081919, - 0x08082b1919082b08, 0x08082b1919190819, 0x08082b1919191908, 0x08082b19192b0808, - 0x08082b192b080819, 0x08082b192b190808, 0x08082b2b08080808, 0x08082b2b08190819, - 0x08082b2b08191908, 0x08082b2b082b082b, 0x08082b2b082b2b08, 0x08082b2b082b2b2b, - 0x08082b2b19190808, 0x08082b2b2b192b19, 0x0819080808080819, 0x0819080808081908, - 0x081908080808192b, 0x0819080808082b19, 0x0819080808190808, 0x081908080819082b, - 0x0819080808191919, 0x0819080808192b08, 0x08190808082b0819, 0x08190808082b1908, - 0x08190808082b192b, 0x0819080819080808, 0x081908081908082b, 0x0819080819081919, - 0x0819080819082b08, 0x0819080819190819, 0x0819080819191908, 0x081908081919192b, - 0x0819080819192b19, 0x08190808192b0808, 0x08190808192b082b, 0x08190808192b1919, - 0x08190808192b2b08, 0x081908082b080819, 0x081908082b081908, 0x081908082b08192b, - 0x081908082b190808, 0x081908082b191919, 0x081908082b192b08, 0x081908082b2b0819, - 0x081908082b2b1908, 0x0819081908080808, 0x081908190808082b, 0x0819081908081919, - 0x0819081908082b08, 0x0819081908082b2b, 0x0819081908190819, 0x0819081908191908, - 0x081908190819192b, 0x0819081908192b19, 0x08190819082b0808, 0x08190819082b082b, - 0x08190819082b1919, 0x08190819082b2b08, 0x0819081919080819, 0x0819081919081908, - 0x081908191908192b, 0x0819081919082b19, 0x0819081919190808, 0x081908191919082b, - 0x0819081919191919, 0x0819081919192b08, 0x08190819192b0819, 0x08190819192b1908, - 0x081908192b080808, 0x081908192b08082b, 0x081908192b081919, 0x081908192b082b08, - 0x081908192b190819, 0x081908192b191908, 0x0819082b08080819, 0x0819082b08081908, - 0x0819082b08082b19, 0x0819082b08190808, 0x0819082b08191919, 0x0819082b082b0819, - 0x0819082b082b1908, 0x0819082b19080808, 0x0819082b19081919, 0x0819082b19190819, - 0x0819082b19191908, 0x0819082b2b080819, 0x0819082b2b081908, 0x0819082b2b190808, - 0x0819190808080808, 0x081919080808082b, 0x0819190808081919, 0x0819190808082b08, - 0x0819190808190819, 0x0819190808191908, 0x081919080819192b, 0x0819190808192b19, - 0x08191908082b0808, 0x08191908082b1919, 0x08191908082b2b08, 0x0819190819080819, - 0x0819190819081908, 0x081919081908192b, 0x0819190819082b19, 0x0819190819190808, - 0x081919081919082b, 0x0819190819191919, 0x0819190819192b08, 0x08191908192b0819, - 0x08191908192b1908, 0x081919082b080808, 0x081919082b08082b, 0x081919082b081919, - 0x081919082b082b08, 0x081919082b190819, 0x081919082b191908, 0x081919082b2b0808, - 0x0819191908080819, 0x0819191908081908, 0x081919190808192b, 0x0819191908082b19, - 0x0819191908190808, 0x081919190819082b, 0x0819191908191919, 0x0819191908192b08, - 0x08191919082b0819, 0x08191919082b1908, 0x0819191919080808, 0x081919191908082b, - 0x0819191919081919, 0x0819191919082b08, 0x0819191919190819, 0x0819191919191908, - 0x08191919192b0808, 0x081919192b080819, 0x081919192b081908, 0x081919192b190808, - 0x0819192b08080808, 0x0819192b08081919, 0x0819192b08082b08, 0x0819192b08190819, - 0x0819192b08191908, 0x0819192b082b0808, 0x0819192b19080819, 0x0819192b19081908, - 0x0819192b19190808, 0x0819192b2b080808, 0x0819192b2b2b2b2b, 0x08192b0808080819, - 0x08192b0808081908, 0x08192b080808192b, 0x08192b0808082b19, 0x08192b0808190808, - 0x08192b0808191919, 0x08192b0808192b08, 0x08192b08082b0819, 0x08192b0819080808, - 0x08192b081908082b, 0x08192b0819081919, 0x08192b0819082b08, 0x08192b0819190819, - 0x08192b0819191908, 0x08192b08192b0808, 0x08192b082b080819, 0x08192b082b081908, - 0x08192b1908080808, 0x08192b190808082b, 0x08192b1908081919, 0x08192b1908082b08, - 0x08192b1908190819, 0x08192b1908191908, 0x08192b19082b0808, 0x08192b1919080819, - 0x08192b1919081908, 0x08192b1919190808, 0x08192b19192b2b19, 0x08192b192b2b082b, - 0x08192b2b08081908, 0x08192b2b08190808, 0x08192b2b19080808, 0x08192b2b1919192b, - 0x082b080808080808, 0x082b08080808082b, 0x082b080808081919, 0x082b080808082b08, - 0x082b080808190819, 0x082b080808191908, 0x082b08080819192b, 0x082b080808192b19, - 0x082b0808082b0808, 0x082b0808082b1919, 0x082b0808082b2b2b, 0x082b080819080819, - 0x082b080819081908, 0x082b080819190808, 0x082b08081919082b, 0x082b080819191919, - 0x082b0808192b1908, 0x082b08082b080808, 0x082b08082b082b2b, 0x082b08082b191908, - 0x082b08082b2b2b2b, 0x082b081908080819, 0x082b081908081908, 0x082b081908190808, - 0x082b08190819082b, 0x082b081908191919, 0x082b0819082b0819, 0x082b081919080808, - 0x082b08191908082b, 0x082b081919081919, 0x082b081919190819, 0x082b081919191908, - 0x082b0819192b0808, 0x082b08192b080819, 0x082b08192b081908, 0x082b08192b190808, - 0x082b082b08080808, 0x082b082b08082b2b, 0x082b082b082b082b, 0x082b082b082b2b08, - 0x082b082b082b2b2b, 0x082b082b19081908, 0x082b082b19190808, 0x082b082b2b082b08, - 0x082b082b2b082b2b, 0x082b082b2b2b2b08, 0x082b190808080819, 0x082b190808081908, - 0x082b19080808192b, 0x082b190808082b19, 0x082b190808190808, 0x082b190808191919, - 0x082b190808192b08, 0x082b1908082b0819, 0x082b1908082b1908, 0x082b190819080808, - 0x082b19081908082b, 0x082b190819081919, 0x082b190819082b08, 0x082b190819190819, - 0x082b190819191908, 0x082b1908192b0808, 0x082b19082b080819, 0x082b19082b081908, - 0x082b19082b190808, 0x082b191908080808, 0x082b191908081919, 0x082b191908082b08, - 0x082b191908190819, 0x082b191908191908, 0x082b1919082b0808, 0x082b191919080819, - 0x082b191919081908, 0x082b191919190808, 0x082b1919192b192b, 0x082b19192b080808, - 0x082b192b08080819, 0x082b192b08081908, 0x082b192b08190808, 0x082b192b19080808, - 0x082b192b19192b19, 0x082b2b0808080808, 0x082b2b0808081919, 0x082b2b0808190819, - 0x082b2b0808191908, 0x082b2b0819080819, 0x082b2b0819081908, 0x082b2b0819190808, - 0x082b2b082b082b2b, 0x082b2b082b2b2b2b, 0x082b2b1908080819, 0x082b2b1908081908, - 0x082b2b1908190808, 0x082b2b192b191919, 0x082b2b2b08082b2b, 0x082b2b2b082b082b, - 0x082b2b2b192b1908, 0x082b2b2b2b082b08, 0x082b2b2b2b082b2b, 0x1908080808080819, - 0x1908080808081908, 0x190808080808192b, 0x1908080808082b19, 0x1908080808190808, - 0x190808080819082b, 0x1908080808191919, 0x1908080808192b08, 0x1908080808192b2b, - 0x19080808082b0819, 0x19080808082b1908, 0x19080808082b192b, 0x1908080819080808, - 0x190808081908082b, 0x1908080819081919, 0x1908080819082b08, 0x1908080819082b2b, - 0x1908080819190819, 0x1908080819191908, 0x190808081919192b, 0x1908080819192b19, - 0x19080808192b0808, 0x19080808192b082b, 0x19080808192b1919, 0x190808082b080819, - 0x190808082b081908, 0x190808082b190808, 0x190808082b191919, 0x190808082b192b08, - 0x190808082b2b0819, 0x190808082b2b1908, 0x1908081908080808, 0x190808190808082b, - 0x1908081908081919, 0x1908081908082b08, 0x1908081908190819, 0x1908081908191908, - 0x190808190819192b, 0x1908081908192b19, 0x19080819082b0808, 0x19080819082b082b, - 0x19080819082b1919, 0x1908081919080819, 0x1908081919081908, 0x190808191908192b, - 0x1908081919082b19, 0x1908081919190808, 0x190808191919082b, 0x1908081919191919, - 0x1908081919192b08, 0x19080819192b0819, 0x19080819192b1908, 0x190808192b080808, - 0x190808192b08082b, 0x190808192b081919, 0x190808192b082b08, 0x190808192b190819, - 0x190808192b191908, 0x190808192b2b0808, 0x1908082b08080819, 0x1908082b08081908, - 0x1908082b08190808, 0x1908082b0819082b, 0x1908082b08191919, 0x1908082b08192b08, - 0x1908082b082b1908, 0x1908082b19080808, 0x1908082b19081919, 0x1908082b19082b08, - 0x1908082b19190819, 0x1908082b19191908, 0x1908082b192b0808, 0x1908082b2b080819, - 0x1908082b2b081908, 0x1908190808080808, 0x190819080808082b, 0x1908190808081919, - 0x1908190808082b08, 0x1908190808082b2b, 0x1908190808190819, 0x1908190808191908, - 0x190819080819192b, 0x1908190808192b19, 0x19081908082b0808, 0x19081908082b082b, - 0x19081908082b1919, 0x19081908082b2b08, 0x1908190819080819, 0x1908190819081908, - 0x190819081908192b, 0x1908190819082b19, 0x1908190819190808, 0x190819081919082b, - 0x1908190819191919, 0x1908190819192b08, 0x19081908192b0819, 0x19081908192b1908, - 0x190819082b080808, 0x190819082b08082b, 0x190819082b081919, 0x190819082b082b08, - 0x190819082b190819, 0x190819082b191908, 0x190819082b2b0808, 0x1908191908080819, - 0x1908191908081908, 0x190819190808192b, 0x1908191908082b19, 0x1908191908190808, - 0x190819190819082b, 0x1908191908191919, 0x1908191908192b08, 0x19081919082b0819, - 0x19081919082b1908, 0x1908191919080808, 0x190819191908082b, 0x1908191919081919, - 0x1908191919082b08, 0x1908191919190819, 0x1908191919191908, 0x19081919192b0808, - 0x19081919192b2b2b, 0x190819192b080819, 0x190819192b081908, 0x190819192b190808, - 0x1908192b08080808, 0x1908192b0808082b, 0x1908192b08081919, 0x1908192b08082b08, - 0x1908192b08190819, 0x1908192b08191908, 0x1908192b082b0808, 0x1908192b19080819, - 0x1908192b19081908, 0x1908192b19190808, 0x1908192b2b080808, 0x1908192b2b2b1919, - 0x19082b0808080819, 0x19082b0808081908, 0x19082b0808082b19, 0x19082b0808190808, - 0x19082b080819082b, 0x19082b0808191919, 0x19082b0808192b08, 0x19082b08082b0819, - 0x19082b08082b1908, 0x19082b0819080808, 0x19082b081908082b, 0x19082b0819081919, - 0x19082b0819082b08, 0x19082b0819190819, 0x19082b0819191908, 0x19082b08192b0808, - 0x19082b082b081908, 0x19082b082b190808, 0x19082b1908080808, 0x19082b190808082b, - 0x19082b1908081919, 0x19082b1908082b08, 0x19082b1908190819, 0x19082b1908191908, - 0x19082b19082b0808, 0x19082b1919080819, 0x19082b1919081908, 0x19082b1919190808, - 0x19082b192b080808, 0x19082b192b19192b, 0x19082b2b08080819, 0x19082b2b08081908, - 0x19082b2b08190808, 0x19082b2b19080808, 0x1919080808080808, 0x191908080808082b, - 0x1919080808081919, 0x1919080808082b08, 0x1919080808190819, 0x1919080808191908, - 0x191908080819192b, 0x1919080808192b19, 0x19190808082b0808, 0x19190808082b082b, - 0x19190808082b1919, 0x19190808082b2b08, 0x1919080819080819, 0x1919080819081908, - 0x191908081908192b, 0x1919080819082b19, 0x1919080819190808, 0x191908081919082b, - 0x1919080819191919, 0x1919080819192b08, 0x19190808192b0819, 0x19190808192b1908, - 0x191908082b080808, 0x191908082b08082b, 0x191908082b081919, 0x191908082b082b08, - 0x191908082b190819, 0x191908082b191908, 0x1919081908080819, 0x1919081908081908, - 0x191908190808192b, 0x1919081908082b19, 0x1919081908190808, 0x191908190819082b, - 0x1919081908191919, 0x1919081908192b08, 0x19190819082b0819, 0x19190819082b1908, - 0x1919081919080808, 0x191908191908082b, 0x1919081919081919, 0x1919081919082b08, - 0x1919081919190819, 0x1919081919191908, 0x19190819192b0808, 0x191908192b080819, - 0x191908192b081908, 0x191908192b190808, 0x1919082b08080808, 0x1919082b08081919, - 0x1919082b08082b08, 0x1919082b08190819, 0x1919082b08191908, 0x1919082b082b0808, - 0x1919082b19080819, 0x1919082b19081908, 0x1919082b19190808, 0x1919082b192b2b19, - 0x1919082b2b080808, 0x1919190808080819, 0x1919190808081908, 0x191919080808192b, - 0x1919190808082b19, 0x1919190808190808, 0x191919080819082b, 0x1919190808191919, - 0x1919190808192b08, 0x19191908082b0819, 0x19191908082b1908, 0x1919190819080808, - 0x191919081908082b, 0x1919190819081919, 0x1919190819082b08, 0x1919190819190819, - 0x1919190819191908, 0x19191908192b0808, 0x191919082b080819, 0x191919082b081908, - 0x191919082b190808, 0x1919191908080808, 0x191919190808082b, 0x1919191908081919, - 0x1919191908082b08, 0x1919191908190819, 0x1919191908191908, 0x19191919082b0808, - 0x1919191919080819, 0x1919191919081908, 0x1919191919190808, 0x191919192b080808, - 0x1919192b08080819, 0x1919192b08081908, 0x1919192b08190808, 0x1919192b082b192b, - 0x1919192b19080808, 0x19192b0808080808, 0x19192b080808082b, 0x19192b0808081919, - 0x19192b0808082b08, 0x19192b0808190819, 0x19192b0808191908, 0x19192b08082b0808, - 0x19192b0819080819, 0x19192b0819081908, 0x19192b0819190808, 0x19192b0819192b2b, - 0x19192b082b080808, 0x19192b1908080819, 0x19192b1908081908, 0x19192b1908190808, - 0x19192b1919080808, 0x19192b2b08080808, 0x19192b2b08192b19, 0x19192b2b2b081919, - 0x19192b2b2b2b2b08, 0x192b080808080819, 0x192b080808081908, 0x192b08080808192b, - 0x192b080808190808, 0x192b08080819082b, 0x192b080808191919, 0x192b080808192b08, - 0x192b0808082b0819, 0x192b0808082b1908, 0x192b080819080808, 0x192b080819081919, - 0x192b080819082b08, 0x192b080819190819, 0x192b080819191908, 0x192b0808192b0808, - 0x192b08082b081908, 0x192b08082b190808, 0x192b081908080808, 0x192b08190808082b, - 0x192b081908081919, 0x192b081908082b08, 0x192b081908190819, 0x192b081908191908, - 0x192b0819082b0808, 0x192b081919080819, 0x192b081919081908, 0x192b081919190808, - 0x192b08192b080808, 0x192b08192b192b19, 0x192b082b08081908, 0x192b082b08190808, - 0x192b082b19080808, 0x192b082b1919192b, 0x192b082b2b2b0819, 0x192b190808080808, - 0x192b190808081919, 0x192b190808082b08, 0x192b190808190819, 0x192b190808191908, - 0x192b1908082b0808, 0x192b190819080819, 0x192b190819081908, 0x192b190819190808, - 0x192b19082b080808, 0x192b191908080819, 0x192b191908081908, 0x192b191908190808, - 0x192b191919080808, 0x192b191919082b2b, 0x192b1919192b2b08, 0x192b19192b19082b, - 0x192b192b08080808, 0x192b192b2b191908, 0x192b2b0808080819, 0x192b2b0808081908, - 0x192b2b0808190808, 0x192b2b08192b1919, 0x192b2b082b192b08, 0x192b2b1908080808, - 0x192b2b19082b2b2b, 0x192b2b2b1908082b, 0x192b2b2b2b2b0819, 0x2b08080808080808, - 0x2b0808080808082b, 0x2b08080808081919, 0x2b08080808082b08, 0x2b08080808190819, - 0x2b08080808191908, 0x2b08080808192b19, 0x2b080808082b0808, 0x2b080808082b1919, - 0x2b08080819080819, 0x2b08080819081908, 0x2b08080819190808, 0x2b0808081919082b, - 0x2b08080819191919, 0x2b08080819192b08, 0x2b080808192b0819, 0x2b0808082b080808, - 0x2b0808082b081919, 0x2b0808082b190819, 0x2b0808082b191908, 0x2b08081908080819, - 0x2b08081908081908, 0x2b08081908082b19, 0x2b08081908190808, 0x2b0808190819082b, - 0x2b08081908191919, 0x2b08081908192b08, 0x2b080819082b0819, 0x2b080819082b1908, - 0x2b08081919080808, 0x2b0808191908082b, 0x2b08081919081919, 0x2b08081919082b08, - 0x2b08081919190819, 0x2b08081919191908, 0x2b0808192b080819, 0x2b0808192b081908, - 0x2b0808192b190808, 0x2b0808192b2b2b19, 0x2b08082b08080808, 0x2b08082b08081919, - 0x2b08082b08082b2b, 0x2b08082b08190819, 0x2b08082b08191908, 0x2b08082b19080819, - 0x2b08082b19081908, 0x2b08082b19190808, 0x2b08190808080819, 0x2b08190808081908, - 0x2b0819080808192b, 0x2b08190808082b19, 0x2b08190808190808, 0x2b0819080819082b, - 0x2b08190808191919, 0x2b08190808192b08, 0x2b081908082b0819, 0x2b08190819080808, - 0x2b0819081908082b, 0x2b08190819081919, 0x2b08190819082b08, 0x2b08190819190819, - 0x2b08190819191908, 0x2b081908192b0808, 0x2b0819082b080819, 0x2b0819082b081908, - 0x2b0819082b190808, 0x2b08191908080808, 0x2b0819190808082b, 0x2b08191908081919, - 0x2b08191908082b08, 0x2b08191908190819, 0x2b08191908191908, 0x2b081919082b0808, - 0x2b08191919080819, 0x2b08191919081908, 0x2b08191919190808, 0x2b0819192b080808, - 0x2b0819192b082b2b, 0x2b08192b08080819, 0x2b08192b08081908, 0x2b08192b08190808, - 0x2b08192b082b2b19, 0x2b08192b19080808, 0x2b082b0808080808, 0x2b082b0808081919, - 0x2b082b0808190819, 0x2b082b0808191908, 0x2b082b0819080819, 0x2b082b0819081908, - 0x2b082b0819190808, 0x2b082b082b2b082b, 0x2b082b1908080819, 0x2b082b1908081908, - 0x2b082b1919080808, 0x2b082b19192b1919, 0x2b082b2b082b082b, 0x2b082b2b19192b08, - 0x2b082b2b19192b2b, 0x2b082b2b2b08082b, 0x2b082b2b2b2b082b, 0x2b19080808080819, - 0x2b19080808081908, 0x2b19080808082b19, 0x2b19080808190808, 0x2b1908080819082b, - 0x2b19080808191919, 0x2b19080808192b08, 0x2b190808082b1908, 0x2b19080819080808, - 0x2b1908081908082b, 0x2b19080819081919, 0x2b19080819082b08, 0x2b19080819190819, - 0x2b19080819191908, 0x2b190808192b0808, 0x2b1908082b080819, 0x2b1908082b081908, - 0x2b1908082b190808, 0x2b19081908080808, 0x2b19081908081919, 0x2b19081908190819, - 0x2b19081908191908, 0x2b19081919080819, 0x2b19081919081908, 0x2b19081919190808, - 0x2b19081919192b2b, 0x2b19082b08080819, 0x2b19082b08081908, 0x2b19082b08190808, - 0x2b19082b19080808, 0x2b19082b2b2b192b, 0x2b19190808080808, 0x2b1919080808082b, - 0x2b19190808081919, 0x2b19190808082b08, 0x2b19190808190819, 0x2b19190808191908, - 0x2b191908082b0808, 0x2b19190819080819, 0x2b19190819081908, 0x2b19190819190808, - 0x2b1919082b080808, 0x2b1919082b19192b, 0x2b19191908080819, 0x2b19191908081908, - 0x2b19191908190808, 0x2b19191919080808, 0x2b1919192b192b08, 0x2b1919192b2b0819, - 0x2b19192b08080808, 0x2b19192b1908192b, 0x2b19192b192b1908, 0x2b192b0808080819, - 0x2b192b0808081908, 0x2b192b0808190808, 0x2b192b08082b192b, 0x2b192b0819080808, - 0x2b192b082b2b2b19, 0x2b192b1908080808, 0x2b192b1919082b19, 0x2b192b191919082b, - 0x2b192b2b2b190808, 0x2b2b080808080808, 0x2b2b080808081919, 0x2b2b080808082b2b, - 0x2b2b080808191908, 0x2b2b0808082b082b, 0x2b2b0808082b2b2b, 0x2b2b080819080819, - 0x2b2b080819081908, 0x2b2b080819190808, 0x2b2b08082b2b082b, 0x2b2b08082b2b2b2b, - 0x2b2b081919080808, 0x2b2b0819192b1919, 0x2b2b082b0808082b, 0x2b2b082b08082b2b, - 0x2b2b082b082b082b, 0x2b2b082b082b2b08, 0x2b2b082b082b2b2b, 0x2b2b082b2b08082b, - 0x2b2b082b2b082b08, 0x2b2b082b2b082b2b, 0x2b2b082b2b2b2b08, 0x2b2b190808080819, - 0x2b2b190808081908, 0x2b2b190808190808, 0x2b2b190819080808, 0x2b2b19082b082b19, - 0x2b2b19082b2b1908, 0x2b2b191908080808, 0x2b2b191908192b19, 0x2b2b192b19190819, - 0x2b2b2b0808082b2b, 0x2b2b2b08082b2b08, 0x2b2b2b082b2b082b, 0x2b2b2b1919191908, - 0x2b2b2b192b08192b, 0x2b2b2b2b08082b08, 0x2b2b2b2b08082b2b, 0x2b2b2b2b082b0808, - 0x2b2b2b2b082b082b, 0x2b2b2b2b082b2b08, 0x2b2b2b2b2b082b08, 0x2b2b2b2b2b2b2b2b, -GGML_TABLE_END() - -GGML_TABLE_BEGIN(uint32_t, iq3xxs_grid, 256) - 0x04040404, 0x04040414, 0x04040424, 0x04040c0c, 0x04040c1c, 0x04040c3e, 0x04041404, 0x04041414, - 0x04041c0c, 0x04042414, 0x04043e1c, 0x04043e2c, 0x040c040c, 0x040c041c, 0x040c0c04, 0x040c0c14, - 0x040c140c, 0x040c142c, 0x040c1c04, 0x040c1c14, 0x040c240c, 0x040c2c24, 0x040c3e04, 0x04140404, - 0x04140414, 0x04140424, 0x04140c0c, 0x04141404, 0x04141414, 0x04141c0c, 0x04141c1c, 0x04141c3e, - 0x04142c0c, 0x04142c3e, 0x04143e2c, 0x041c040c, 0x041c043e, 0x041c0c04, 0x041c0c14, 0x041c142c, - 0x041c3e04, 0x04240c1c, 0x04241c3e, 0x04242424, 0x04242c3e, 0x04243e1c, 0x04243e2c, 0x042c040c, - 0x042c043e, 0x042c1c14, 0x042c2c14, 0x04341c2c, 0x04343424, 0x043e0c04, 0x043e0c24, 0x043e0c34, - 0x043e241c, 0x043e340c, 0x0c04040c, 0x0c04041c, 0x0c040c04, 0x0c040c14, 0x0c04140c, 0x0c04141c, - 0x0c041c04, 0x0c041c14, 0x0c041c24, 0x0c04243e, 0x0c042c04, 0x0c0c0404, 0x0c0c0414, 0x0c0c0c0c, - 0x0c0c1404, 0x0c0c1414, 0x0c14040c, 0x0c14041c, 0x0c140c04, 0x0c140c14, 0x0c14140c, 0x0c141c04, - 0x0c143e14, 0x0c1c0404, 0x0c1c0414, 0x0c1c1404, 0x0c1c1c0c, 0x0c1c2434, 0x0c1c3434, 0x0c24040c, - 0x0c24042c, 0x0c242c04, 0x0c2c1404, 0x0c2c1424, 0x0c2c2434, 0x0c2c3e0c, 0x0c34042c, 0x0c3e1414, - 0x0c3e2404, 0x14040404, 0x14040414, 0x14040c0c, 0x14040c1c, 0x14041404, 0x14041414, 0x14041434, - 0x14041c0c, 0x14042414, 0x140c040c, 0x140c041c, 0x140c042c, 0x140c0c04, 0x140c0c14, 0x140c140c, - 0x140c1c04, 0x140c341c, 0x140c343e, 0x140c3e04, 0x14140404, 0x14140414, 0x14140c0c, 0x14140c3e, - 0x14141404, 0x14141414, 0x14141c3e, 0x14142404, 0x14142c2c, 0x141c040c, 0x141c0c04, 0x141c0c24, - 0x141c3e04, 0x141c3e24, 0x14241c2c, 0x14242c1c, 0x142c041c, 0x142c143e, 0x142c240c, 0x142c3e24, - 0x143e040c, 0x143e041c, 0x143e0c34, 0x143e242c, 0x1c04040c, 0x1c040c04, 0x1c040c14, 0x1c04140c, - 0x1c04141c, 0x1c042c04, 0x1c04342c, 0x1c043e14, 0x1c0c0404, 0x1c0c0414, 0x1c0c1404, 0x1c0c1c0c, - 0x1c0c2424, 0x1c0c2434, 0x1c14040c, 0x1c14041c, 0x1c140c04, 0x1c14142c, 0x1c142c14, 0x1c143e14, - 0x1c1c0c0c, 0x1c1c1c1c, 0x1c241c04, 0x1c24243e, 0x1c243e14, 0x1c2c0404, 0x1c2c0434, 0x1c2c1414, - 0x1c2c2c2c, 0x1c340c24, 0x1c341c34, 0x1c34341c, 0x1c3e1c1c, 0x1c3e3404, 0x24040424, 0x24040c3e, - 0x24041c2c, 0x24041c3e, 0x24042c1c, 0x24042c3e, 0x240c3e24, 0x24141404, 0x24141c3e, 0x24142404, - 0x24143404, 0x24143434, 0x241c043e, 0x241c242c, 0x24240424, 0x24242c0c, 0x24243424, 0x242c142c, - 0x242c241c, 0x242c3e04, 0x243e042c, 0x243e0c04, 0x243e0c14, 0x243e1c04, 0x2c040c14, 0x2c04240c, - 0x2c043e04, 0x2c0c0404, 0x2c0c0434, 0x2c0c1434, 0x2c0c2c2c, 0x2c140c24, 0x2c141c14, 0x2c143e14, - 0x2c1c0414, 0x2c1c2c1c, 0x2c240c04, 0x2c24141c, 0x2c24143e, 0x2c243e14, 0x2c2c0414, 0x2c2c1c0c, - 0x2c342c04, 0x2c3e1424, 0x2c3e2414, 0x34041424, 0x34042424, 0x34042434, 0x34043424, 0x340c140c, - 0x340c340c, 0x34140c3e, 0x34143424, 0x341c1c04, 0x341c1c34, 0x34242424, 0x342c042c, 0x342c2c14, - 0x34341c1c, 0x343e041c, 0x343e140c, 0x3e04041c, 0x3e04042c, 0x3e04043e, 0x3e040c04, 0x3e041c14, - 0x3e042c14, 0x3e0c1434, 0x3e0c2404, 0x3e140c14, 0x3e14242c, 0x3e142c14, 0x3e1c0404, 0x3e1c0c2c, - 0x3e1c1c1c, 0x3e1c3404, 0x3e24140c, 0x3e24240c, 0x3e2c0404, 0x3e2c0414, 0x3e2c1424, 0x3e341c04, -GGML_TABLE_END() - -GGML_TABLE_BEGIN(uint32_t, iq3s_grid, 512) - 0x01010101, 0x01010103, 0x01010105, 0x0101010b, 0x0101010f, 0x01010301, 0x01010303, 0x01010305, - 0x01010309, 0x0101030d, 0x01010501, 0x01010503, 0x0101050b, 0x01010707, 0x01010901, 0x01010905, - 0x0101090b, 0x0101090f, 0x01010b03, 0x01010b07, 0x01010d01, 0x01010d05, 0x01010f03, 0x01010f09, - 0x01010f0f, 0x01030101, 0x01030103, 0x01030105, 0x01030109, 0x01030301, 0x01030303, 0x0103030b, - 0x01030501, 0x01030507, 0x0103050f, 0x01030703, 0x0103070b, 0x01030909, 0x01030d03, 0x01030d0b, - 0x01030f05, 0x01050101, 0x01050103, 0x0105010b, 0x0105010f, 0x01050301, 0x01050307, 0x0105030d, - 0x01050503, 0x0105050b, 0x01050701, 0x01050709, 0x01050905, 0x0105090b, 0x0105090f, 0x01050b03, - 0x01050b07, 0x01050f01, 0x01050f07, 0x01070107, 0x01070303, 0x0107030b, 0x01070501, 0x01070505, - 0x01070703, 0x01070707, 0x0107070d, 0x01070909, 0x01070b01, 0x01070b05, 0x01070d0f, 0x01070f03, - 0x01070f0b, 0x01090101, 0x01090307, 0x0109030f, 0x01090503, 0x01090509, 0x01090705, 0x01090901, - 0x01090907, 0x01090b03, 0x01090f01, 0x010b0105, 0x010b0109, 0x010b0501, 0x010b0505, 0x010b050d, - 0x010b0707, 0x010b0903, 0x010b090b, 0x010b090f, 0x010b0d0d, 0x010b0f07, 0x010d010d, 0x010d0303, - 0x010d0307, 0x010d0703, 0x010d0b05, 0x010d0f03, 0x010f0101, 0x010f0105, 0x010f0109, 0x010f0501, - 0x010f0505, 0x010f050d, 0x010f0707, 0x010f0b01, 0x010f0b09, 0x03010101, 0x03010103, 0x03010105, - 0x03010109, 0x03010301, 0x03010303, 0x03010307, 0x0301030b, 0x0301030f, 0x03010501, 0x03010505, - 0x03010703, 0x03010709, 0x0301070d, 0x03010b09, 0x03010b0d, 0x03010d03, 0x03010f05, 0x03030101, - 0x03030103, 0x03030107, 0x0303010d, 0x03030301, 0x03030309, 0x03030503, 0x03030701, 0x03030707, - 0x03030903, 0x03030b01, 0x03030b05, 0x03030f01, 0x03030f0d, 0x03050101, 0x03050305, 0x0305030b, - 0x0305030f, 0x03050501, 0x03050509, 0x03050705, 0x03050901, 0x03050907, 0x03050b0b, 0x03050d01, - 0x03050f05, 0x03070103, 0x03070109, 0x0307010f, 0x03070301, 0x03070307, 0x03070503, 0x0307050f, - 0x03070701, 0x03070709, 0x03070903, 0x03070d05, 0x03070f01, 0x03090107, 0x0309010b, 0x03090305, - 0x03090309, 0x03090703, 0x03090707, 0x03090905, 0x0309090d, 0x03090b01, 0x03090b09, 0x030b0103, - 0x030b0301, 0x030b0307, 0x030b0503, 0x030b0701, 0x030b0705, 0x030b0b03, 0x030d0501, 0x030d0509, - 0x030d050f, 0x030d0909, 0x030d090d, 0x030f0103, 0x030f0107, 0x030f0301, 0x030f0305, 0x030f0503, - 0x030f070b, 0x030f0903, 0x030f0d05, 0x030f0f01, 0x05010101, 0x05010103, 0x05010107, 0x0501010b, - 0x0501010f, 0x05010301, 0x05010305, 0x05010309, 0x0501030d, 0x05010503, 0x05010507, 0x0501050f, - 0x05010701, 0x05010705, 0x05010903, 0x05010907, 0x0501090b, 0x05010b01, 0x05010b05, 0x05010d0f, - 0x05010f01, 0x05010f07, 0x05010f0b, 0x05030101, 0x05030105, 0x05030301, 0x05030307, 0x0503030f, - 0x05030505, 0x0503050b, 0x05030703, 0x05030709, 0x05030905, 0x05030b03, 0x05050103, 0x05050109, - 0x0505010f, 0x05050503, 0x05050507, 0x05050701, 0x0505070f, 0x05050903, 0x05050b07, 0x05050b0f, - 0x05050f03, 0x05050f09, 0x05070101, 0x05070105, 0x0507010b, 0x05070303, 0x05070505, 0x05070509, - 0x05070703, 0x05070707, 0x05070905, 0x05070b01, 0x05070d0d, 0x05090103, 0x0509010f, 0x05090501, - 0x05090507, 0x05090705, 0x0509070b, 0x05090903, 0x05090f05, 0x05090f0b, 0x050b0109, 0x050b0303, - 0x050b0505, 0x050b070f, 0x050b0901, 0x050b0b07, 0x050b0f01, 0x050d0101, 0x050d0105, 0x050d010f, - 0x050d0503, 0x050d0b0b, 0x050d0d03, 0x050f010b, 0x050f0303, 0x050f050d, 0x050f0701, 0x050f0907, - 0x050f0b01, 0x07010105, 0x07010303, 0x07010307, 0x0701030b, 0x0701030f, 0x07010505, 0x07010703, - 0x07010707, 0x0701070b, 0x07010905, 0x07010909, 0x0701090f, 0x07010b03, 0x07010d07, 0x07010f03, - 0x07030103, 0x07030107, 0x0703010b, 0x07030309, 0x07030503, 0x07030507, 0x07030901, 0x07030d01, - 0x07030f05, 0x07030f0d, 0x07050101, 0x07050305, 0x07050501, 0x07050705, 0x07050709, 0x07050b01, - 0x07070103, 0x07070301, 0x07070309, 0x07070503, 0x07070507, 0x0707050f, 0x07070701, 0x07070903, - 0x07070907, 0x0707090f, 0x07070b0b, 0x07070f07, 0x07090107, 0x07090303, 0x0709030d, 0x07090505, - 0x07090703, 0x07090b05, 0x07090d01, 0x07090d09, 0x070b0103, 0x070b0301, 0x070b0305, 0x070b050b, - 0x070b0705, 0x070b0909, 0x070b0b0d, 0x070b0f07, 0x070d030d, 0x070d0903, 0x070f0103, 0x070f0107, - 0x070f0501, 0x070f0505, 0x070f070b, 0x09010101, 0x09010109, 0x09010305, 0x09010501, 0x09010509, - 0x0901050f, 0x09010705, 0x09010903, 0x09010b01, 0x09010f01, 0x09030105, 0x0903010f, 0x09030303, - 0x09030307, 0x09030505, 0x09030701, 0x0903070b, 0x09030907, 0x09030b03, 0x09030b0b, 0x09050103, - 0x09050107, 0x09050301, 0x0905030b, 0x09050503, 0x09050707, 0x09050901, 0x09050b0f, 0x09050d05, - 0x09050f01, 0x09070109, 0x09070303, 0x09070307, 0x09070501, 0x09070505, 0x09070703, 0x0907070b, - 0x09090101, 0x09090105, 0x09090509, 0x0909070f, 0x09090901, 0x09090f03, 0x090b010b, 0x090b010f, - 0x090b0503, 0x090b0d05, 0x090d0307, 0x090d0709, 0x090d0d01, 0x090f0301, 0x090f030b, 0x090f0701, - 0x090f0907, 0x090f0b03, 0x0b010105, 0x0b010301, 0x0b010309, 0x0b010505, 0x0b010901, 0x0b010909, - 0x0b01090f, 0x0b010b05, 0x0b010d0d, 0x0b010f09, 0x0b030103, 0x0b030107, 0x0b03010b, 0x0b030305, - 0x0b030503, 0x0b030705, 0x0b030f05, 0x0b050101, 0x0b050303, 0x0b050507, 0x0b050701, 0x0b05070d, - 0x0b050b07, 0x0b070105, 0x0b07010f, 0x0b070301, 0x0b07050f, 0x0b070909, 0x0b070b03, 0x0b070d0b, - 0x0b070f07, 0x0b090103, 0x0b090109, 0x0b090501, 0x0b090705, 0x0b09090d, 0x0b0b0305, 0x0b0b050d, - 0x0b0b0b03, 0x0b0b0b07, 0x0b0d0905, 0x0b0f0105, 0x0b0f0109, 0x0b0f0505, 0x0d010303, 0x0d010307, - 0x0d01030b, 0x0d010703, 0x0d010707, 0x0d010d01, 0x0d030101, 0x0d030501, 0x0d03050f, 0x0d030d09, - 0x0d050305, 0x0d050709, 0x0d050905, 0x0d050b0b, 0x0d050d05, 0x0d050f01, 0x0d070101, 0x0d070309, - 0x0d070503, 0x0d070901, 0x0d09050b, 0x0d090907, 0x0d090d05, 0x0d0b0101, 0x0d0b0107, 0x0d0b0709, - 0x0d0b0d01, 0x0d0d010b, 0x0d0d0901, 0x0d0f0303, 0x0d0f0307, 0x0f010101, 0x0f010109, 0x0f01010f, - 0x0f010501, 0x0f010505, 0x0f01070d, 0x0f010901, 0x0f010b09, 0x0f010d05, 0x0f030105, 0x0f030303, - 0x0f030509, 0x0f030907, 0x0f03090b, 0x0f050103, 0x0f050109, 0x0f050301, 0x0f05030d, 0x0f050503, - 0x0f050701, 0x0f050b03, 0x0f070105, 0x0f070705, 0x0f07070b, 0x0f070b07, 0x0f090103, 0x0f09010b, - 0x0f090307, 0x0f090501, 0x0f090b01, 0x0f0b0505, 0x0f0b0905, 0x0f0d0105, 0x0f0d0703, 0x0f0f0101, -GGML_TABLE_END() - -#define NGRID_IQ1S 2048 -#define IQ1S_DELTA 0.125f -#define IQ1M_DELTA 0.125f -#if defined(GGML_COMMON_IMPL_C) -GGML_TABLE_BEGIN(uint64_t, iq1s_grid, NGRID_IQ1S) - 0xffffffffffffffff, 0xffffffffffffff01, 0xffffffffffff0000, 0xffffffffffff01ff, - 0xffffffffffff0101, 0xffffffffff00ff00, 0xffffffffff000000, 0xffffffffff01ffff, - 0xffffffffff01ff01, 0xffffffffff0101ff, 0xffffffffff010101, 0xffffffff00ff0000, - 0xffffffff0000ff00, 0xffffffff000000ff, 0xffffffff00000001, 0xffffffff00010000, - 0xffffffff01ffffff, 0xffffffff01ffff01, 0xffffffff01ff01ff, 0xffffffff01ff0101, - 0xffffffff01000000, 0xffffffff0101ffff, 0xffffffff0101ff01, 0xffffffff010101ff, - 0xffffffff01010101, 0xffffff00ffff00ff, 0xffffff00ffff0000, 0xffffff00ff00ff00, - 0xffffff00ff0000ff, 0xffffff00ff000001, 0xffffff00ff000100, 0xffffff00ff000101, - 0xffffff00ff010000, 0xffffff0000ffff00, 0xffffff0000ff0001, 0xffffff0000ff0100, - 0xffffff000000ff01, 0xffffff0000000000, 0xffffff0000000101, 0xffffff000001ff00, - 0xffffff00000100ff, 0xffffff0000010001, 0xffffff00000101ff, 0xffffff0001ff0000, - 0xffffff000100ff00, 0xffffff00010000ff, 0xffffff0001000001, 0xffffff0001010000, - 0xffffff01ffffffff, 0xffffff01ffffff01, 0xffffff01ffff01ff, 0xffffff01ffff0101, - 0xffffff01ff000000, 0xffffff01ff01ffff, 0xffffff01ff01ff01, 0xffffff01ff0101ff, - 0xffffff01ff010101, 0xffffff0100ff0000, 0xffffff010000ff00, 0xffffff0100000100, - 0xffffff01000100ff, 0xffffff0100010100, 0xffffff0101ffffff, 0xffffff0101ffff01, - 0xffffff0101ff01ff, 0xffffff0101ff0101, 0xffffff010100ff00, 0xffffff0101000000, - 0xffffff0101000100, 0xffffff010101ffff, 0xffffff010101ff01, 0xffffff01010101ff, - 0xffffff0101010101, 0xffff00ffff00ff00, 0xffff00ffff0000ff, 0xffff00ffff000001, - 0xffff00ffff010000, 0xffff00ff00ffff00, 0xffff00ff00ff0100, 0xffff00ff00000000, - 0xffff00ff00000101, 0xffff00ff000100ff, 0xffff00ff00010000, 0xffff00ff0100ff00, - 0xffff00ff01000100, 0xffff00ff01010000, 0xffff0000ffffff00, 0xffff0000ffff00ff, - 0xffff0000ffff0000, 0xffff0000ffff0001, 0xffff0000ff000000, 0xffff0000ff0001ff, - 0xffff0000ff000101, 0xffff0000ff010100, 0xffff000000ffffff, 0xffff000000ff0000, - 0xffff000000ff0101, 0xffff00000000ffff, 0xffff00000000ff00, 0xffff0000000000ff, - 0xffff000000000000, 0xffff000000000001, 0xffff000000000100, 0xffff00000001ffff, - 0xffff00000001ff01, 0xffff000000010000, 0xffff0000000101ff, 0xffff000000010101, - 0xffff000001ffff00, 0xffff00000100ff00, 0xffff000001000000, 0xffff0000010001ff, - 0xffff000001000101, 0xffff00000101ff00, 0xffff0000010100ff, 0xffff000001010000, - 0xffff000001010001, 0xffff000001010100, 0xffff0001ff0000ff, 0xffff0001ff000100, - 0xffff000100ffff00, 0xffff000100ff00ff, 0xffff00010000ffff, 0xffff00010000ff01, - 0xffff000100000000, 0xffff0001000001ff, 0xffff00010001ffff, 0xffff00010001ff00, - 0xffff000100010001, 0xffff000100010100, 0xffff000101ff0000, 0xffff00010100ff00, - 0xffff0001010000ff, 0xffff000101000100, 0xffff01ffffffffff, 0xffff01ffffffff01, - 0xffff01ffffff01ff, 0xffff01ffffff0101, 0xffff01ffff000000, 0xffff01ffff01ffff, - 0xffff01ffff01ff01, 0xffff01ffff0101ff, 0xffff01ffff010101, 0xffff01ff00ff0000, - 0xffff01ff0000ff00, 0xffff01ff00000001, 0xffff01ff00010000, 0xffff01ff01ffffff, - 0xffff01ff01ffff01, 0xffff01ff01ff01ff, 0xffff01ff01ff0101, 0xffff01ff01000000, - 0xffff01ff0101ffff, 0xffff01ff0101ff01, 0xffff01ff010101ff, 0xffff01ff01010101, - 0xffff0100ffff0000, 0xffff0100ff00ff00, 0xffff0100ff0000ff, 0xffff0100ff000100, - 0xffff0100ff0100ff, 0xffff0100ff010000, 0xffff010000ffff00, 0xffff01000000ffff, - 0xffff01000000ff00, 0xffff010000000000, 0xffff01000001ff00, 0xffff0100000100ff, - 0xffff010000010100, 0xffff01000100ff00, 0xffff0100010000ff, 0xffff010001000001, - 0xffff010001000100, 0xffff010001010000, 0xffff0101ffffffff, 0xffff0101ffffff01, - 0xffff0101ffff01ff, 0xffff0101ffff0101, 0xffff0101ff000000, 0xffff0101ff01ffff, - 0xffff0101ff01ff01, 0xffff0101ff0101ff, 0xffff0101ff010101, 0xffff010100ff0000, - 0xffff01010000ff00, 0xffff010100000100, 0xffff01010001ff00, 0xffff010100010000, - 0xffff010101ffffff, 0xffff010101ffff01, 0xffff010101ff0000, 0xffff010101ff01ff, - 0xffff010101ff0101, 0xffff010101000000, 0xffff01010101ffff, 0xffff01010101ff01, - 0xffff0101010101ff, 0xffff010101010101, 0xff00ffffff00ffff, 0xff00ffffff00ff00, - 0xff00ffffff0000ff, 0xff00ffffff000100, 0xff00ffffff0100ff, 0xff00ffffff010000, - 0xff00ffff00ffff00, 0xff00ffff00ff00ff, 0xff00ffff0000ffff, 0xff00ffff00000000, - 0xff00ffff000001ff, 0xff00ffff0001ff00, 0xff00ffff000100ff, 0xff00ffff00010000, - 0xff00ffff00010100, 0xff00ffff0100ff00, 0xff00ffff010000ff, 0xff00ffff01000001, - 0xff00ffff0101ff00, 0xff00ffff01010000, 0xff00ff00ffffff00, 0xff00ff00ffff00ff, - 0xff00ff00ffff0001, 0xff00ff00ffff0100, 0xff00ff00ff00ffff, 0xff00ff00ff00ff01, - 0xff00ff00ff000000, 0xff00ff00ff0001ff, 0xff00ff00ff01ff00, 0xff00ff00ff0100ff, - 0xff00ff00ff010100, 0xff00ff0000ff0000, 0xff00ff0000ff0101, 0xff00ff000000ffff, - 0xff00ff000000ff00, 0xff00ff000000ff01, 0xff00ff00000000ff, 0xff00ff0000000000, - 0xff00ff0000000001, 0xff00ff0000000100, 0xff00ff000001ffff, 0xff00ff0000010000, - 0xff00ff0001ff00ff, 0xff00ff000100ff01, 0xff00ff0001000000, 0xff00ff000101ff00, - 0xff00ff00010100ff, 0xff00ff01ff00ff00, 0xff00ff01ff0000ff, 0xff00ff01ff000001, - 0xff00ff01ff010000, 0xff00ff0100ffffff, 0xff00ff0100ff0001, 0xff00ff0100ff0100, - 0xff00ff010000ff01, 0xff00ff0100000000, 0xff00ff01000001ff, 0xff00ff0100000101, - 0xff00ff01000100ff, 0xff00ff0100010001, 0xff00ff0101ff0000, 0xff00ff010100ff00, - 0xff00ff01010000ff, 0xff00ff0101000001, 0xff00ff0101010000, 0xff0000ffffffff00, - 0xff0000ffffff0001, 0xff0000ffffff0100, 0xff0000ffff0000ff, 0xff0000ffff000000, - 0xff0000ffff0001ff, 0xff0000ffff000100, 0xff0000ffff01ff00, 0xff0000ffff010001, - 0xff0000ff00ffff00, 0xff0000ff00ff0000, 0xff0000ff00ff0001, 0xff0000ff00ff01ff, - 0xff0000ff00ff0101, 0xff0000ff0000ff00, 0xff0000ff000000ff, 0xff0000ff00000000, - 0xff0000ff00000001, 0xff0000ff00000100, 0xff0000ff0001ff01, 0xff0000ff00010000, - 0xff0000ff000101ff, 0xff0000ff01ff00ff, 0xff0000ff01ff0100, 0xff0000ff0100ffff, - 0xff0000ff010000ff, 0xff0000ff01000000, 0xff0000ff010001ff, 0xff0000ff01000100, - 0xff0000ff01000101, 0xff0000ff0101ff00, 0xff0000ff010100ff, 0xff0000ff01010000, - 0xff0000ff01010100, 0xff000000ffffff01, 0xff000000ffff0000, 0xff000000ffff0101, - 0xff000000ff00ff00, 0xff000000ff0000ff, 0xff000000ff000000, 0xff000000ff000001, - 0xff000000ff000100, 0xff000000ff01ffff, 0xff000000ff01ff01, 0xff000000ff010000, - 0xff000000ff0101ff, 0xff000000ff010101, 0xff00000000ffff00, 0xff00000000ff00ff, - 0xff00000000ff0000, 0xff00000000ff0001, 0xff0000000000ff00, 0xff0000000000ff01, - 0xff000000000000ff, 0xff00000000000000, 0xff00000000000001, 0xff00000000000100, - 0xff00000000000101, 0xff0000000001ff00, 0xff000000000100ff, 0xff00000000010000, - 0xff00000000010001, 0xff00000000010100, 0xff00000001ffffff, 0xff00000001ffff01, - 0xff00000001ff00ff, 0xff00000001ff0000, 0xff00000001ff01ff, 0xff00000001ff0101, - 0xff0000000100ffff, 0xff0000000100ff00, 0xff000000010000ff, 0xff00000001000000, - 0xff00000001000001, 0xff00000001000100, 0xff00000001000101, 0xff0000000101ffff, - 0xff0000000101ff01, 0xff00000001010000, 0xff000001ffffff00, 0xff000001ffff00ff, - 0xff000001ffff0000, 0xff000001ffff0001, 0xff000001ff000000, 0xff000001ff000001, - 0xff000001ff0001ff, 0xff000001ff000101, 0xff000001ff01ff00, 0xff000001ff010001, - 0xff00000100ffffff, 0xff00000100ffff01, 0xff00000100ff00ff, 0xff00000100ff0000, - 0xff00000100ff01ff, 0xff00000100ff0101, 0xff0000010000ff00, 0xff00000100000000, - 0xff00000100000001, 0xff000001000001ff, 0xff00000100000100, 0xff0000010001ff00, - 0xff000001000100ff, 0xff00000100010000, 0xff000001000101ff, 0xff00000100010100, - 0xff00000100010101, 0xff00000101ff0001, 0xff00000101ff0101, 0xff0000010100ff01, - 0xff00000101000000, 0xff000001010100ff, 0xff00000101010100, 0xff0001ffff00ff00, - 0xff0001ffff000001, 0xff0001ffff010000, 0xff0001ff00ffff00, 0xff0001ff00ff00ff, - 0xff0001ff00ff0001, 0xff0001ff00ff0100, 0xff0001ff0000ffff, 0xff0001ff00000000, - 0xff0001ff000001ff, 0xff0001ff00000101, 0xff0001ff0001ffff, 0xff0001ff0001ff00, - 0xff0001ff000100ff, 0xff0001ff00010001, 0xff0001ff00010100, 0xff0001ff01ff0000, - 0xff0001ff0100ff00, 0xff0001ff010000ff, 0xff0001ff01010000, 0xff000100ff00ffff, - 0xff000100ff00ff01, 0xff000100ff000000, 0xff000100ff000101, 0xff000100ff01ff00, - 0xff000100ff010000, 0xff00010000ffff01, 0xff00010000ff00ff, 0xff00010000ff0000, - 0xff00010000ff01ff, 0xff0001000000ff00, 0xff000100000000ff, 0xff00010000000000, - 0xff00010000000001, 0xff00010000000100, 0xff00010000000101, 0xff0001000001ffff, - 0xff00010000010000, 0xff00010000010101, 0xff00010001ff0100, 0xff0001000100ff00, - 0xff0001000100ff01, 0xff00010001000000, 0xff000100010001ff, 0xff0001000101ff00, - 0xff00010001010001, 0xff00010001010100, 0xff000101ffff0100, 0xff000101ff000001, - 0xff000101ff0100ff, 0xff000101ff010001, 0xff00010100ff00ff, 0xff00010100ff0001, - 0xff00010100ff0100, 0xff0001010000ffff, 0xff0001010000ff01, 0xff00010100000000, - 0xff000101000001ff, 0xff0001010001ff00, 0xff00010100010001, 0xff00010100010100, - 0xff00010101ff0000, 0xff0001010100ff00, 0xff00010101000001, 0xff00010101000101, - 0xff01ffffffffffff, 0xff01ffffffffff01, 0xff01ffffffff01ff, 0xff01ffffffff0101, - 0xff01ffffff000000, 0xff01ffffff01ffff, 0xff01ffffff01ff01, 0xff01ffffff010000, - 0xff01ffffff0101ff, 0xff01ffffff010101, 0xff01ffff00ff0000, 0xff01ffff0000ff00, - 0xff01ffff00000100, 0xff01ffff0001ff00, 0xff01ffff00010000, 0xff01ffff01ffffff, - 0xff01ffff01ffff01, 0xff01ffff01ff01ff, 0xff01ffff01ff0101, 0xff01ffff01000000, - 0xff01ffff0101ffff, 0xff01ffff0101ff01, 0xff01ffff01010000, 0xff01ffff010101ff, - 0xff01ffff01010101, 0xff01ff00ffff0000, 0xff01ff00ff00ff00, 0xff01ff00ff0000ff, - 0xff01ff00ff000100, 0xff01ff00ff010000, 0xff01ff0000ffff01, 0xff01ff0000ff00ff, - 0xff01ff0000ff0100, 0xff01ff0000000000, 0xff01ff00000001ff, 0xff01ff0000000101, - 0xff01ff000001ff00, 0xff01ff00000100ff, 0xff01ff0000010000, 0xff01ff0000010001, - 0xff01ff0001ff0000, 0xff01ff000100ffff, 0xff01ff0001000001, 0xff01ff0001000100, - 0xff01ff0001010000, 0xff01ff01ffffff00, 0xff01ff01ffff01ff, 0xff01ff01ffff0101, - 0xff01ff01ff00ff00, 0xff01ff01ff000000, 0xff01ff01ff01ffff, 0xff01ff01ff01ff01, - 0xff01ff01ff0101ff, 0xff01ff01ff010101, 0xff01ff0100ff0000, 0xff01ff010000ff00, - 0xff01ff0100000001, 0xff01ff0100000100, 0xff01ff0100010000, 0xff01ff0101ffff00, - 0xff01ff0101ff01ff, 0xff01ff0101ff0101, 0xff01ff010100ff00, 0xff01ff0101000000, - 0xff01ff010101ffff, 0xff01ff010101ff01, 0xff01ff01010101ff, 0xff01ff0101010101, - 0xff0100ffffff0000, 0xff0100ffff0000ff, 0xff0100ffff000001, 0xff0100ffff000100, - 0xff0100ffff010000, 0xff0100ff00ff00ff, 0xff0100ff00ff0000, 0xff0100ff00ff0001, - 0xff0100ff00ff0100, 0xff0100ff0000ff01, 0xff0100ff00000000, 0xff0100ff000001ff, - 0xff0100ff00000101, 0xff0100ff00010001, 0xff0100ff01ff0000, 0xff0100ff0100ff00, - 0xff0100ff010000ff, 0xff0100ff01000100, 0xff0100ff0101ff00, 0xff0100ff01010000, - 0xff010000ffff0100, 0xff010000ff000000, 0xff010000ff01ff00, 0xff010000ff010100, - 0xff01000000ffffff, 0xff01000000ff0000, 0xff01000000ff01ff, 0xff0100000000ff00, - 0xff010000000000ff, 0xff01000000000000, 0xff01000000000100, 0xff0100000001ff01, - 0xff01000000010000, 0xff010000000101ff, 0xff01000001ff0100, 0xff0100000100ffff, - 0xff010000010000ff, 0xff01000001000000, 0xff010000010001ff, 0xff01000001000101, - 0xff0100000101ff00, 0xff010000010100ff, 0xff01000001010001, 0xff01000001010100, - 0xff010001ffff0000, 0xff010001ff00ffff, 0xff010001ff00ff01, 0xff010001ff000100, - 0xff010001ff010000, 0xff01000100ffff00, 0xff01000100ff0100, 0xff01000100000000, - 0xff0100010001ffff, 0xff0100010001ff00, 0xff01000100010100, 0xff01000101ff00ff, - 0xff01000101ff0001, 0xff0100010100ffff, 0xff01000101000101, 0xff0101ffffffffff, - 0xff0101ffffffff01, 0xff0101ffffff01ff, 0xff0101ffffff0101, 0xff0101ffff000000, - 0xff0101ffff01ffff, 0xff0101ffff01ff01, 0xff0101ffff0101ff, 0xff0101ffff010101, - 0xff0101ff00ff0000, 0xff0101ff0000ff00, 0xff0101ff000000ff, 0xff0101ff00010000, - 0xff0101ff01ffffff, 0xff0101ff01ffff01, 0xff0101ff01ff01ff, 0xff0101ff01ff0101, - 0xff0101ff0101ffff, 0xff0101ff0101ff01, 0xff0101ff010101ff, 0xff0101ff01010101, - 0xff010100ffff0100, 0xff010100ff00ff00, 0xff010100ff0000ff, 0xff010100ff000100, - 0xff010100ff010000, 0xff01010000ff0001, 0xff01010000ff0100, 0xff0101000000ff01, - 0xff01010000000000, 0xff0101000001ff00, 0xff010100000100ff, 0xff01010000010001, - 0xff01010000010100, 0xff01010001ff0000, 0xff0101000100ffff, 0xff01010001000001, - 0xff01010001000100, 0xff010100010100ff, 0xff01010001010000, 0xff010101ffffffff, - 0xff010101ffffff01, 0xff010101ffff01ff, 0xff010101ffff0101, 0xff010101ff01ffff, - 0xff010101ff01ff01, 0xff010101ff0101ff, 0xff010101ff010101, 0xff01010100ff0000, - 0xff0101010000ff00, 0xff01010100000001, 0xff01010100000100, 0xff01010100010000, - 0xff01010101ffffff, 0xff01010101ffff01, 0xff01010101ff01ff, 0xff01010101ff0101, - 0xff01010101000000, 0xff0101010101ffff, 0xff0101010101ff01, 0xff010101010101ff, - 0xff01010101010101, 0x00ffffffffff0000, 0x00ffffffff00ff00, 0x00ffffffff000001, - 0x00ffffffff010000, 0x00ffffff00ff0100, 0x00ffffff0000ff01, 0x00ffffff00000000, - 0x00ffffff000001ff, 0x00ffffff00000101, 0x00ffffff0001ff00, 0x00ffffff000100ff, - 0x00ffffff00010001, 0x00ffffff010000ff, 0x00ffffff01000100, 0x00ffffff0101ff00, - 0x00ffffff01010001, 0x00ffff00ffffffff, 0x00ffff00ffffff00, 0x00ffff00ffff00ff, - 0x00ffff00ffff0001, 0x00ffff00ffff0100, 0x00ffff00ff00ff01, 0x00ffff00ff000000, - 0x00ffff00ff000001, 0x00ffff00ff0001ff, 0x00ffff00ff000101, 0x00ffff00ff01ff00, - 0x00ffff00ff010001, 0x00ffff00ff010100, 0x00ffff0000ff0000, 0x00ffff0000ff01ff, - 0x00ffff0000ff0101, 0x00ffff000000ff00, 0x00ffff00000000ff, 0x00ffff0000000000, - 0x00ffff0000000001, 0x00ffff0000000100, 0x00ffff0000000101, 0x00ffff0000010000, - 0x00ffff00000101ff, 0x00ffff0000010101, 0x00ffff0001ffff00, 0x00ffff0001ff00ff, - 0x00ffff0001ff0001, 0x00ffff000100ffff, 0x00ffff000100ff01, 0x00ffff0001000000, - 0x00ffff000101ffff, 0x00ffff000101ff00, 0x00ffff000101ff01, 0x00ffff01ffff0000, - 0x00ffff01ff00ff00, 0x00ffff01ff0000ff, 0x00ffff01ff000001, 0x00ffff01ff010000, - 0x00ffff0100ffff00, 0x00ffff010000ff01, 0x00ffff0100000000, 0x00ffff0100000101, - 0x00ffff01000100ff, 0x00ffff0100010100, 0x00ffff0101ff0100, 0x00ffff01010000ff, - 0x00ffff0101010000, 0x00ff00ffffffff00, 0x00ff00ffff000000, 0x00ff00ffff000100, - 0x00ff00ffff010100, 0x00ff00ff00ff0000, 0x00ff00ff00ff01ff, 0x00ff00ff00ff0101, - 0x00ff00ff0000ff00, 0x00ff00ff000000ff, 0x00ff00ff00000000, 0x00ff00ff00000001, - 0x00ff00ff0001ff00, 0x00ff00ff0001ff01, 0x00ff00ff00010000, 0x00ff00ff000101ff, - 0x00ff00ff00010101, 0x00ff00ff01ffff00, 0x00ff00ff01ff0001, 0x00ff00ff01ff0100, - 0x00ff00ff0100ffff, 0x00ff00ff0100ff01, 0x00ff00ff01000000, 0x00ff00ff0101ffff, - 0x00ff00ff0101ff00, 0x00ff00ff01010100, 0x00ff0000ffffff00, 0x00ff0000ffffff01, - 0x00ff0000ffff0000, 0x00ff0000ffff0101, 0x00ff0000ff00ff00, 0x00ff0000ff0000ff, - 0x00ff0000ff000000, 0x00ff0000ff000001, 0x00ff0000ff000100, 0x00ff0000ff01ffff, - 0x00ff0000ff010000, 0x00ff0000ff010101, 0x00ff000000ffff00, 0x00ff000000ff00ff, - 0x00ff000000ff0000, 0x00ff000000ff0001, 0x00ff000000ff0100, 0x00ff00000000ffff, - 0x00ff00000000ff00, 0x00ff0000000000ff, 0x00ff000000000000, 0x00ff000000000001, - 0x00ff0000000001ff, 0x00ff000000000100, 0x00ff00000001ff00, 0x00ff0000000100ff, - 0x00ff000000010000, 0x00ff000000010001, 0x00ff000000010100, 0x00ff000001ffff01, - 0x00ff000001ff00ff, 0x00ff000001ff0000, 0x00ff000001ff01ff, 0x00ff00000100ff00, - 0x00ff0000010000ff, 0x00ff000001000000, 0x00ff000001000001, 0x00ff000001000100, - 0x00ff000001000101, 0x00ff000001010000, 0x00ff0000010101ff, 0x00ff000001010101, - 0x00ff0001ffffff00, 0x00ff0001ffff0000, 0x00ff0001ffff0100, 0x00ff0001ff0000ff, - 0x00ff0001ff000000, 0x00ff0001ff0001ff, 0x00ff0001ff000101, 0x00ff0001ff01ff00, - 0x00ff0001ff0100ff, 0x00ff0001ff010100, 0x00ff000100ffffff, 0x00ff000100ffff01, - 0x00ff000100ff0000, 0x00ff000100ff01ff, 0x00ff00010000ffff, 0x00ff00010000ff00, - 0x00ff00010000ff01, 0x00ff000100000000, 0x00ff000100000001, 0x00ff000100000100, - 0x00ff00010001ff01, 0x00ff000100010000, 0x00ff0001000101ff, 0x00ff000101ffff00, - 0x00ff000101ff0000, 0x00ff000101ff0101, 0x00ff0001010000ff, 0x00ff000101000000, - 0x00ff00010101ff00, 0x00ff0001010100ff, 0x00ff000101010001, 0x00ff01ffffff0000, - 0x00ff01ffff00ff00, 0x00ff01ffff000000, 0x00ff01ffff000101, 0x00ff01ffff010000, - 0x00ff01ff00ffff01, 0x00ff01ff00ff0100, 0x00ff01ff0000ffff, 0x00ff01ff00000000, - 0x00ff01ff000001ff, 0x00ff01ff0001ff00, 0x00ff01ff000100ff, 0x00ff01ff00010001, - 0x00ff01ff00010100, 0x00ff01ff01ff0000, 0x00ff01ff0100ff00, 0x00ff01ff010000ff, - 0x00ff01ff01000001, 0x00ff01ff01000100, 0x00ff01ff01010000, 0x00ff0100ffffff00, - 0x00ff0100ffff0000, 0x00ff0100ffff0001, 0x00ff0100ffff0101, 0x00ff0100ff00ffff, - 0x00ff0100ff0000ff, 0x00ff0100ff000000, 0x00ff0100ff0001ff, 0x00ff0100ff01ff00, - 0x00ff0100ff0100ff, 0x00ff0100ff010001, 0x00ff010000ffffff, 0x00ff010000ff0000, - 0x00ff010000ff0101, 0x00ff01000000ff00, 0x00ff01000000ff01, 0x00ff0100000000ff, - 0x00ff010000000000, 0x00ff010000000001, 0x00ff010000000100, 0x00ff01000001ffff, - 0x00ff01000001ff01, 0x00ff010000010000, 0x00ff010000010001, 0x00ff010000010101, - 0x00ff010001ff0001, 0x00ff010001ff0100, 0x00ff01000100ff01, 0x00ff010001000000, - 0x00ff010001000001, 0x00ff0100010001ff, 0x00ff01000101ff00, 0x00ff0100010100ff, - 0x00ff010001010001, 0x00ff010001010100, 0x00ff0101ff000001, 0x00ff010100ff00ff, - 0x00ff010100ff0001, 0x00ff010100ff0100, 0x00ff010100000000, 0x00ff0101000001ff, - 0x00ff010100000101, 0x00ff0101000100ff, 0x00ff010100010100, 0x00ff0101010000ff, - 0x00ff010101010000, 0x0000ffffffffff00, 0x0000ffffffff00ff, 0x0000ffffffff0000, - 0x0000ffffffff0001, 0x0000ffffffff0100, 0x0000ffffff00ff01, 0x0000ffffff000000, - 0x0000ffffff000101, 0x0000ffffff01ff00, 0x0000ffffff0100ff, 0x0000ffffff010100, - 0x0000ffff00ffffff, 0x0000ffff00ff0000, 0x0000ffff00ff01ff, 0x0000ffff0000ff00, - 0x0000ffff000000ff, 0x0000ffff00000000, 0x0000ffff00000001, 0x0000ffff00000100, - 0x0000ffff00010000, 0x0000ffff000101ff, 0x0000ffff01ff0001, 0x0000ffff01ff0100, - 0x0000ffff01000000, 0x0000ffff010001ff, 0x0000ffff0101ffff, 0x0000ffff0101ff00, - 0x0000ffff01010001, 0x0000ffff01010100, 0x0000ff00ffff0000, 0x0000ff00ffff01ff, - 0x0000ff00ffff0100, 0x0000ff00ffff0101, 0x0000ff00ff00ff00, 0x0000ff00ff0000ff, - 0x0000ff00ff000000, 0x0000ff00ff000001, 0x0000ff00ff0001ff, 0x0000ff00ff000100, - 0x0000ff00ff01ffff, 0x0000ff00ff010000, 0x0000ff00ff010001, 0x0000ff00ff0101ff, - 0x0000ff00ff010101, 0x0000ff0000ffff00, 0x0000ff0000ff00ff, 0x0000ff0000ff0000, - 0x0000ff0000ff0001, 0x0000ff0000ff0100, 0x0000ff000000ffff, 0x0000ff000000ff00, - 0x0000ff000000ff01, 0x0000ff00000000ff, 0x0000ff0000000000, 0x0000ff0000000001, - 0x0000ff00000001ff, 0x0000ff0000000100, 0x0000ff0000000101, 0x0000ff000001ff00, - 0x0000ff00000100ff, 0x0000ff0000010000, 0x0000ff0000010001, 0x0000ff0000010100, - 0x0000ff0001ffff01, 0x0000ff0001ff0000, 0x0000ff000100ff00, 0x0000ff00010000ff, - 0x0000ff0001000000, 0x0000ff0001000001, 0x0000ff0001000100, 0x0000ff000101ffff, - 0x0000ff0001010000, 0x0000ff0001010101, 0x0000ff01ffffff00, 0x0000ff01ffff0001, - 0x0000ff01ff00ff01, 0x0000ff01ff000000, 0x0000ff01ff000101, 0x0000ff01ff01ff00, - 0x0000ff01ff0100ff, 0x0000ff0100ffff01, 0x0000ff0100ff0000, 0x0000ff0100ff0101, - 0x0000ff010000ff00, 0x0000ff01000000ff, 0x0000ff0100000000, 0x0000ff0100000001, - 0x0000ff0100000100, 0x0000ff010001ff01, 0x0000ff0100010000, 0x0000ff0101ff0000, - 0x0000ff010100ffff, 0x0000ff010100ff01, 0x0000ff0101000000, 0x0000ff0101000100, - 0x0000ff0101000101, 0x0000ff01010100ff, 0x000000ffffff00ff, 0x000000ffffff0000, - 0x000000ffff00ff00, 0x000000ffff0000ff, 0x000000ffff000000, 0x000000ffff000001, - 0x000000ffff0001ff, 0x000000ffff000100, 0x000000ffff01ff00, 0x000000ffff010000, - 0x000000ffff0101ff, 0x000000ffff010101, 0x000000ff00ffff00, 0x000000ff00ff00ff, - 0x000000ff00ff0000, 0x000000ff00ff0001, 0x000000ff00ff0100, 0x000000ff00ff0101, - 0x000000ff0000ffff, 0x000000ff0000ff00, 0x000000ff000000ff, 0x000000ff00000000, - 0x000000ff00000001, 0x000000ff000001ff, 0x000000ff00000100, 0x000000ff00000101, - 0x000000ff0001ff00, 0x000000ff0001ff01, 0x000000ff000100ff, 0x000000ff00010000, - 0x000000ff00010001, 0x000000ff00010100, 0x000000ff01ffffff, 0x000000ff01ff01ff, - 0x000000ff01ff0101, 0x000000ff0100ff00, 0x000000ff010000ff, 0x000000ff01000000, - 0x000000ff01000001, 0x000000ff01000100, 0x000000ff0101ff00, 0x000000ff010100ff, - 0x000000ff01010000, 0x000000ff01010101, 0x00000000ffffff00, 0x00000000ffffff01, - 0x00000000ffff00ff, 0x00000000ffff0000, 0x00000000ffff0001, 0x00000000ffff0100, - 0x00000000ff00ffff, 0x00000000ff00ff00, 0x00000000ff00ff01, 0x00000000ff0000ff, - 0x00000000ff000000, 0x00000000ff000001, 0x00000000ff000100, 0x00000000ff000101, - 0x00000000ff01ff00, 0x00000000ff0100ff, 0x00000000ff010000, 0x00000000ff010001, - 0x00000000ff010100, 0x0000000000ffffff, 0x0000000000ffff00, 0x0000000000ffff01, - 0x0000000000ff00ff, 0x0000000000ff0000, 0x0000000000ff0001, 0x0000000000ff01ff, - 0x0000000000ff0100, 0x000000000000ffff, 0x000000000000ff00, 0x000000000000ff01, - 0x00000000000000ff, 0x0000000000000000, 0x0000000000000001, 0x00000000000001ff, - 0x0000000000000100, 0x0000000000000101, 0x000000000001ffff, 0x000000000001ff00, - 0x00000000000100ff, 0x0000000000010000, 0x0000000000010001, 0x00000000000101ff, - 0x0000000000010100, 0x0000000000010101, 0x0000000001ffff00, 0x0000000001ff00ff, - 0x0000000001ff0000, 0x0000000001ff0100, 0x0000000001ff0101, 0x000000000100ffff, - 0x000000000100ff00, 0x00000000010000ff, 0x0000000001000000, 0x0000000001000001, - 0x00000000010001ff, 0x0000000001000100, 0x000000000101ff00, 0x00000000010100ff, - 0x0000000001010000, 0x0000000001010001, 0x0000000001010100, 0x00000001ffffffff, - 0x00000001ffffff00, 0x00000001ffffff01, 0x00000001ffff00ff, 0x00000001ffff0001, - 0x00000001ffff01ff, 0x00000001ffff0100, 0x00000001ff00ff00, 0x00000001ff0000ff, - 0x00000001ff000000, 0x00000001ff0001ff, 0x00000001ff000100, 0x00000001ff01ffff, - 0x00000001ff01ff00, 0x00000001ff01ff01, 0x00000001ff0100ff, 0x00000001ff010000, - 0x00000001ff010001, 0x00000001ff0101ff, 0x00000001ff010100, 0x0000000100ffff00, - 0x0000000100ff0000, 0x0000000100ff0001, 0x0000000100ff01ff, 0x0000000100ff0100, - 0x0000000100ff0101, 0x000000010000ffff, 0x000000010000ff00, 0x000000010000ff01, - 0x00000001000000ff, 0x0000000100000000, 0x0000000100000001, 0x00000001000001ff, - 0x0000000100000100, 0x0000000100000101, 0x000000010001ff00, 0x00000001000100ff, - 0x0000000100010000, 0x0000000100010100, 0x0000000101ffff01, 0x0000000101ff0000, - 0x0000000101ff0001, 0x0000000101ff01ff, 0x0000000101ff0100, 0x0000000101ff0101, - 0x000000010100ff00, 0x0000000101000000, 0x0000000101000101, 0x000000010101ff01, - 0x0000000101010000, 0x0000000101010001, 0x00000001010101ff, 0x0000000101010100, - 0x000001ffffff00ff, 0x000001ffffff0000, 0x000001ffffff0001, 0x000001ffffff0100, - 0x000001ffff00ffff, 0x000001ffff000000, 0x000001ffff0001ff, 0x000001ffff01ff00, - 0x000001ffff010101, 0x000001ff00ff0000, 0x000001ff00ff01ff, 0x000001ff00ff0101, - 0x000001ff0000ff00, 0x000001ff000000ff, 0x000001ff00000000, 0x000001ff00000001, - 0x000001ff000001ff, 0x000001ff00000100, 0x000001ff0001ffff, 0x000001ff0001ff01, - 0x000001ff000100ff, 0x000001ff00010000, 0x000001ff01ffff01, 0x000001ff01ff0100, - 0x000001ff0100ffff, 0x000001ff0100ff01, 0x000001ff01000000, 0x000001ff010001ff, - 0x000001ff0101ff00, 0x000001ff01010100, 0x00000100ffffff00, 0x00000100ffffff01, - 0x00000100ffff0000, 0x00000100ffff0101, 0x00000100ff00ff00, 0x00000100ff0000ff, - 0x00000100ff000000, 0x00000100ff000001, 0x00000100ff000100, 0x00000100ff010000, - 0x0000010000ffff00, 0x0000010000ff00ff, 0x0000010000ff0000, 0x0000010000ff0001, - 0x0000010000ff0100, 0x000001000000ffff, 0x000001000000ff00, 0x000001000000ff01, - 0x00000100000000ff, 0x0000010000000000, 0x0000010000000001, 0x00000100000001ff, - 0x0000010000000100, 0x0000010000000101, 0x000001000001ff00, 0x00000100000100ff, - 0x0000010000010000, 0x0000010000010001, 0x0000010000010100, 0x0000010001ffff00, - 0x0000010001ff0000, 0x0000010001ff0100, 0x000001000100ff00, 0x00000100010000ff, - 0x0000010001000000, 0x0000010001000001, 0x00000100010001ff, 0x0000010001000100, - 0x0000010001010000, 0x00000101ffff00ff, 0x00000101ffff01ff, 0x00000101ff000000, - 0x00000101ff000101, 0x00000101ff01ffff, 0x00000101ff010000, 0x00000101ff010001, - 0x00000101ff010100, 0x0000010100ff0000, 0x0000010100ff01ff, 0x0000010100ff0100, - 0x000001010000ff00, 0x0000010100000000, 0x0000010100000001, 0x00000101000001ff, - 0x0000010100000100, 0x000001010001ff01, 0x0000010100010000, 0x00000101000101ff, - 0x0000010100010101, 0x0000010101ffff00, 0x0000010101ff0101, 0x000001010100ff01, - 0x0000010101000000, 0x0000010101000001, 0x00000101010001ff, 0x0000010101000101, - 0x000001010101ff00, 0x0001ffffffff0000, 0x0001ffffff0000ff, 0x0001ffffff000001, - 0x0001ffffff000100, 0x0001ffffff010000, 0x0001ffff00ff00ff, 0x0001ffff0000ffff, - 0x0001ffff00000000, 0x0001ffff00000001, 0x0001ffff000001ff, 0x0001ffff00000101, - 0x0001ffff0001ff00, 0x0001ffff000100ff, 0x0001ffff00010001, 0x0001ffff00010100, - 0x0001ffff01ffff00, 0x0001ffff01000001, 0x0001ffff01010000, 0x0001ff00ffffff00, - 0x0001ff00ffff00ff, 0x0001ff00ffff0001, 0x0001ff00ffff0100, 0x0001ff00ff00ff01, - 0x0001ff00ff000000, 0x0001ff00ff01ff00, 0x0001ff00ff01ff01, 0x0001ff00ff010001, - 0x0001ff00ff010100, 0x0001ff0000ff0000, 0x0001ff0000ff0100, 0x0001ff000000ff00, - 0x0001ff0000000000, 0x0001ff0000000001, 0x0001ff0000000100, 0x0001ff0000010000, - 0x0001ff0000010001, 0x0001ff0000010101, 0x0001ff0001ff00ff, 0x0001ff0001ff0101, - 0x0001ff000100ff01, 0x0001ff0001000000, 0x0001ff000101ff00, 0x0001ff0001010001, - 0x0001ff0001010100, 0x0001ff01ff00ff00, 0x0001ff01ff000001, 0x0001ff01ff000100, - 0x0001ff0100ffffff, 0x0001ff0100ffff00, 0x0001ff0100ff0001, 0x0001ff0100000000, - 0x0001ff0100000001, 0x0001ff01000001ff, 0x0001ff010001ffff, 0x0001ff0101ff0000, - 0x0001ff010100ff00, 0x0001ff0101000001, 0x0001ff0101010000, 0x000100ffff00ff00, - 0x000100ffff00ff01, 0x000100ffff000000, 0x000100ffff000001, 0x000100ffff000101, - 0x000100ffff01ff00, 0x000100ffff010001, 0x000100ffff010100, 0x000100ff00ffffff, - 0x000100ff00ffff01, 0x000100ff00ff0000, 0x000100ff00ff01ff, 0x000100ff00ff0101, - 0x000100ff0000ff00, 0x000100ff000000ff, 0x000100ff00000000, 0x000100ff00000001, - 0x000100ff00000100, 0x000100ff00000101, 0x000100ff0001ffff, 0x000100ff0001ff01, - 0x000100ff00010000, 0x000100ff01ff00ff, 0x000100ff01ff0000, 0x000100ff01ff0100, - 0x000100ff0100ffff, 0x000100ff0100ff01, 0x000100ff010000ff, 0x000100ff01000000, - 0x000100ff01000001, 0x000100ff010001ff, 0x000100ff01000101, 0x000100ff0101ff00, - 0x000100ff010100ff, 0x000100ff01010100, 0x00010000ffff0000, 0x00010000ffff01ff, - 0x00010000ffff0101, 0x00010000ff00ff00, 0x00010000ff000000, 0x00010000ff000001, - 0x00010000ff000100, 0x0001000000ff00ff, 0x0001000000ff0000, 0x0001000000ff0001, - 0x0001000000ff0100, 0x000100000000ffff, 0x000100000000ff00, 0x00010000000000ff, - 0x0001000000000000, 0x0001000000000001, 0x0001000000000100, 0x000100000001ff00, - 0x00010000000100ff, 0x0001000000010000, 0x0001000000010001, 0x0001000000010100, - 0x0001000001ff0001, 0x0001000001ff0100, 0x0001000001ff0101, 0x000100000100ff00, - 0x0001000001000000, 0x0001000001000001, 0x0001000001000100, 0x0001000001000101, - 0x000100000101ff01, 0x0001000001010000, 0x0001000001010001, 0x00010000010101ff, - 0x00010001ffffff01, 0x00010001ffff0100, 0x00010001ff000000, 0x00010001ff01ffff, - 0x00010001ff010001, 0x00010001ff0101ff, 0x00010001ff010100, 0x0001000100ffffff, - 0x0001000100ff0000, 0x0001000100ff01ff, 0x0001000100ff0101, 0x000100010000ff00, - 0x00010001000000ff, 0x0001000100000000, 0x0001000100000001, 0x00010001000001ff, - 0x0001000100000101, 0x000100010001ffff, 0x0001000100010000, 0x00010001000101ff, - 0x0001000101ffffff, 0x0001000101ffff01, 0x0001000101ff0000, 0x0001000101ff0101, - 0x00010001010000ff, 0x0001000101000001, 0x00010001010001ff, 0x0001000101000100, - 0x000100010101ffff, 0x00010001010100ff, 0x0001000101010001, 0x0001000101010101, - 0x000101ffff000001, 0x000101ffff000100, 0x000101ffff010000, 0x000101ff00ffff00, - 0x000101ff0000ff01, 0x000101ff00000000, 0x000101ff00000101, 0x000101ff0001ff00, - 0x000101ff00010100, 0x000101ff01ff0000, 0x000101ff0100ff00, 0x000101ff010001ff, - 0x000101ff01010001, 0x00010100ffffff00, 0x00010100ffff00ff, 0x00010100ff00ffff, - 0x00010100ff000000, 0x00010100ff01ff00, 0x00010100ff0100ff, 0x00010100ff010001, - 0x00010100ff010100, 0x0001010000ffffff, 0x0001010000ffff00, 0x0001010000ff0000, - 0x0001010000ff0001, 0x0001010000ff01ff, 0x000101000000ff00, 0x00010100000000ff, - 0x0001010000000000, 0x0001010000000001, 0x0001010000000100, 0x000101000001ffff, - 0x0001010000010000, 0x0001010000010101, 0x0001010001ffff01, 0x0001010001ff00ff, - 0x0001010001ff0101, 0x0001010001000000, 0x000101000101ff00, 0x00010100010100ff, - 0x0001010001010000, 0x0001010001010100, 0x00010101ff00ff00, 0x00010101ff000001, - 0x00010101ff0001ff, 0x0001010100ffff00, 0x0001010100ff00ff, 0x0001010100ff0100, - 0x000101010000ffff, 0x0001010100000000, 0x00010101000001ff, 0x0001010100000101, - 0x00010101000100ff, 0x0001010100010000, 0x0001010100010100, 0x0001010101ff0001, - 0x00010101010000ff, 0x00010101010001ff, 0x0001010101000101, 0x0001010101010001, - 0x01ffffffffffffff, 0x01ffffffffffff01, 0x01ffffffffff01ff, 0x01ffffffffff0101, - 0x01ffffffff01ffff, 0x01ffffffff01ff01, 0x01ffffffff0101ff, 0x01ffffffff010101, - 0x01ffffff00ff0000, 0x01ffffff0000ffff, 0x01ffffff0000ff00, 0x01ffffff000000ff, - 0x01ffffff00000001, 0x01ffffff00000100, 0x01ffffff00010000, 0x01ffffff01ffffff, - 0x01ffffff01ffff01, 0x01ffffff01ff01ff, 0x01ffffff01ff0101, 0x01ffffff01000000, - 0x01ffffff0101ffff, 0x01ffffff0101ff01, 0x01ffffff010101ff, 0x01ffffff01010101, - 0x01ffff00ffff0000, 0x01ffff00ff00ff00, 0x01ffff00ff0000ff, 0x01ffff00ff000001, - 0x01ffff00ff000100, 0x01ffff00ff010000, 0x01ffff0000ffff00, 0x01ffff0000ff00ff, - 0x01ffff0000ff0100, 0x01ffff000000ffff, 0x01ffff000000ff01, 0x01ffff0000000000, - 0x01ffff0000000001, 0x01ffff00000001ff, 0x01ffff0000000100, 0x01ffff00000100ff, - 0x01ffff0000010001, 0x01ffff0000010100, 0x01ffff0001ff0000, 0x01ffff0001ff0100, - 0x01ffff00010000ff, 0x01ffff0001000001, 0x01ffff0001000100, 0x01ffff0001010000, - 0x01ffff01ffffffff, 0x01ffff01ffffff01, 0x01ffff01ffff01ff, 0x01ffff01ffff0101, - 0x01ffff01ff000000, 0x01ffff01ff01ffff, 0x01ffff01ff01ff01, 0x01ffff01ff0101ff, - 0x01ffff01ff010101, 0x01ffff010000ff00, 0x01ffff01000000ff, 0x01ffff0100000100, - 0x01ffff0100010000, 0x01ffff0101ffffff, 0x01ffff0101ffff01, 0x01ffff0101ff01ff, - 0x01ffff0101ff0101, 0x01ffff0101000000, 0x01ffff010101ffff, 0x01ffff010101ff01, - 0x01ffff01010101ff, 0x01ffff0101010101, 0x01ff00ffff0000ff, 0x01ff00ffff000100, - 0x01ff00ff00ffff00, 0x01ff00ff00ff00ff, 0x01ff00ff0000ff00, 0x01ff00ff00000000, - 0x01ff00ff00000101, 0x01ff00ff0001ff00, 0x01ff00ff000100ff, 0x01ff00ff00010100, - 0x01ff00ff010000ff, 0x01ff00ff01000100, 0x01ff0000ffffff00, 0x01ff0000ffff0100, - 0x01ff0000ff00ff01, 0x01ff0000ff000000, 0x01ff0000ff000101, 0x01ff0000ff010001, - 0x01ff0000ff010100, 0x01ff000000ffffff, 0x01ff000000ffff00, 0x01ff000000ff0000, - 0x01ff000000ff01ff, 0x01ff00000000ff00, 0x01ff0000000000ff, 0x01ff000000000000, - 0x01ff000000000001, 0x01ff000000000100, 0x01ff000000000101, 0x01ff000000010000, - 0x01ff000000010001, 0x01ff0000000101ff, 0x01ff000000010101, 0x01ff000001ffff00, - 0x01ff000001ff00ff, 0x01ff000001ff0001, 0x01ff000001ff0100, 0x01ff00000100ffff, - 0x01ff00000100ff01, 0x01ff000001000000, 0x01ff0000010001ff, 0x01ff000001010001, - 0x01ff0001ff00ff00, 0x01ff0001ff000001, 0x01ff0001ff000100, 0x01ff0001ff010000, - 0x01ff000100ffff00, 0x01ff000100ff00ff, 0x01ff000100ff0100, 0x01ff000100ff0101, - 0x01ff00010000ffff, 0x01ff000100000000, 0x01ff000100000100, 0x01ff000100000101, - 0x01ff00010001ff00, 0x01ff000100010001, 0x01ff000100010101, 0x01ff000101ff0000, - 0x01ff00010100ff00, 0x01ff000101000101, 0x01ff0001010100ff, 0x01ff01ffffffffff, - 0x01ff01ffffffff01, 0x01ff01ffffff01ff, 0x01ff01ffffff0101, 0x01ff01ffff000000, - 0x01ff01ffff01ffff, 0x01ff01ffff01ff01, 0x01ff01ffff0101ff, 0x01ff01ffff010101, - 0x01ff01ff00ffff00, 0x01ff01ff00ff0000, 0x01ff01ff0000ff00, 0x01ff01ff000000ff, - 0x01ff01ff00000100, 0x01ff01ff00010000, 0x01ff01ff00010100, 0x01ff01ff01ffffff, - 0x01ff01ff01ffff01, 0x01ff01ff01ff01ff, 0x01ff01ff01ff0101, 0x01ff01ff01000000, - 0x01ff01ff0101ffff, 0x01ff01ff0101ff01, 0x01ff01ff010101ff, 0x01ff01ff01010101, - 0x01ff0100ffff0000, 0x01ff0100ffff0001, 0x01ff0100ff00ff00, 0x01ff0100ff0000ff, - 0x01ff0100ff000001, 0x01ff0100ff010000, 0x01ff010000ffff00, 0x01ff010000ff00ff, - 0x01ff010000ff0001, 0x01ff010000ff0100, 0x01ff01000000ffff, 0x01ff01000000ff01, - 0x01ff010000000000, 0x01ff010000000101, 0x01ff01000001ff00, 0x01ff0100000100ff, - 0x01ff010001ff0000, 0x01ff010001000001, 0x01ff010001000100, 0x01ff010001010000, - 0x01ff0101ffffffff, 0x01ff0101ffffff01, 0x01ff0101ffff01ff, 0x01ff0101ffff0101, - 0x01ff0101ff000000, 0x01ff0101ff01ffff, 0x01ff0101ff01ff01, 0x01ff0101ff0101ff, - 0x01ff0101ff010101, 0x01ff010100ff0000, 0x01ff01010000ff00, 0x01ff0101000000ff, - 0x01ff010100000001, 0x01ff010101ffffff, 0x01ff010101ffff01, 0x01ff010101ff01ff, - 0x01ff010101ff0101, 0x01ff010101000000, 0x01ff01010101ffff, 0x01ff01010101ff01, - 0x01ff0101010101ff, 0x01ff010101010101, 0x0100ffffffff0000, 0x0100ffffff00ff00, - 0x0100ffffff000001, 0x0100ffffff0001ff, 0x0100ffffff000100, 0x0100ffffff010000, - 0x0100ffff00ffff00, 0x0100ffff00ff0001, 0x0100ffff00ff0100, 0x0100ffff00000000, - 0x0100ffff000001ff, 0x0100ffff00000101, 0x0100ffff00010100, 0x0100ffff00010101, - 0x0100ffff01ff0000, 0x0100ffff0100ff00, 0x0100ffff010000ff, 0x0100ffff01000001, - 0x0100ffff01000100, 0x0100ffff01010000, 0x0100ff00ffffff00, 0x0100ff00ffff00ff, - 0x0100ff00ffff0001, 0x0100ff00ffff0100, 0x0100ff00ff00ffff, 0x0100ff00ff000000, - 0x0100ff00ff0001ff, 0x0100ff00ff000101, 0x0100ff00ff01ff00, 0x0100ff00ff0100ff, - 0x0100ff00ff010001, 0x0100ff00ff010100, 0x0100ff0000ffffff, 0x0100ff0000ff0000, - 0x0100ff000000ffff, 0x0100ff000000ff00, 0x0100ff00000000ff, 0x0100ff0000000000, - 0x0100ff0000000001, 0x0100ff0000000100, 0x0100ff000001ff01, 0x0100ff0000010000, - 0x0100ff0001ff00ff, 0x0100ff0001ff0001, 0x0100ff000100ff01, 0x0100ff0001000000, - 0x0100ff00010001ff, 0x0100ff000101ff00, 0x0100ff00010100ff, 0x0100ff0001010001, - 0x0100ff0001010100, 0x0100ff01ffff0000, 0x0100ff01ff00ff00, 0x0100ff01ff0000ff, - 0x0100ff01ff000100, 0x0100ff01ff010000, 0x0100ff0100ff00ff, 0x0100ff0100ff0001, - 0x0100ff0100ff0100, 0x0100ff010000ffff, 0x0100ff010000ff01, 0x0100ff0100000000, - 0x0100ff01000001ff, 0x0100ff0100010001, 0x0100ff0100010100, 0x0100ff0101ff0000, - 0x0100ff01010000ff, 0x0100ff0101000001, 0x0100ff0101010100, 0x010000ffffffff00, - 0x010000ffffff00ff, 0x010000ffffff0001, 0x010000ffff00ffff, 0x010000ffff000000, - 0x010000ffff0001ff, 0x010000ffff010001, 0x010000ff00ffffff, 0x010000ff00ff0101, - 0x010000ff0000ff00, 0x010000ff000000ff, 0x010000ff00000000, 0x010000ff00000001, - 0x010000ff000001ff, 0x010000ff00000100, 0x010000ff0001ffff, 0x010000ff0001ff00, - 0x010000ff0001ff01, 0x010000ff00010000, 0x010000ff01ff00ff, 0x010000ff01ff0001, - 0x010000ff0100ff01, 0x010000ff010000ff, 0x010000ff01000000, 0x010000ff010001ff, - 0x010000ff0101ff00, 0x010000ff01010100, 0x01000000ffffffff, 0x01000000ffff0000, - 0x01000000ffff01ff, 0x01000000ffff0101, 0x01000000ff00ffff, 0x01000000ff00ff00, - 0x01000000ff0000ff, 0x01000000ff000000, 0x01000000ff000001, 0x01000000ff000100, - 0x01000000ff01ff00, 0x01000000ff010000, 0x01000000ff010100, 0x01000000ff010101, - 0x0100000000ffff00, 0x0100000000ff00ff, 0x0100000000ff0000, 0x0100000000ff0001, - 0x0100000000ff0100, 0x010000000000ffff, 0x010000000000ff00, 0x010000000000ff01, - 0x01000000000000ff, 0x0100000000000000, 0x0100000000000001, 0x01000000000001ff, - 0x0100000000000100, 0x0100000000000101, 0x010000000001ff00, 0x01000000000100ff, - 0x0100000000010000, 0x0100000000010001, 0x0100000000010100, 0x0100000001ffff00, - 0x0100000001ff0000, 0x0100000001ff01ff, 0x010000000100ff00, 0x010000000100ff01, - 0x01000000010000ff, 0x0100000001000000, 0x0100000001000001, 0x0100000001000100, - 0x0100000001000101, 0x010000000101ffff, 0x010000000101ff01, 0x0100000001010000, - 0x01000000010101ff, 0x0100000001010101, 0x01000001ffffff00, 0x01000001ffff00ff, - 0x01000001ff00ffff, 0x01000001ff000000, 0x01000001ff000100, 0x01000001ff01ffff, - 0x01000001ff010001, 0x01000001ff010100, 0x0100000100ff0000, 0x0100000100ff01ff, - 0x0100000100ff0100, 0x010000010000ff00, 0x010000010000ff01, 0x0100000100000000, - 0x0100000100000001, 0x0100000100000100, 0x0100000100010000, 0x01000001000101ff, - 0x0100000101ffff01, 0x0100000101ff00ff, 0x0100000101ff0100, 0x0100000101ff0101, - 0x010000010100ff01, 0x01000001010000ff, 0x0100000101000000, 0x01000001010100ff, - 0x0100000101010001, 0x0100000101010100, 0x010001ffffff0000, 0x010001ffff000001, - 0x010001ffff000100, 0x010001ffff010000, 0x010001ff00ffff00, 0x010001ff00ff0001, - 0x010001ff0000ffff, 0x010001ff0000ff01, 0x010001ff00000000, 0x010001ff00000001, - 0x010001ff00000101, 0x010001ff000100ff, 0x010001ff00010000, 0x010001ff01ff0000, - 0x010001ff0100ff00, 0x010001ff01000001, 0x010001ff01000100, 0x010001ff01010000, - 0x01000100ffff00ff, 0x01000100ffff0001, 0x01000100ffff0100, 0x01000100ff00ffff, - 0x01000100ff00ff01, 0x01000100ff000000, 0x01000100ff0001ff, 0x01000100ff000101, - 0x01000100ff01ffff, 0x01000100ff01ff00, 0x01000100ff0100ff, 0x01000100ff010001, - 0x0100010000ffffff, 0x0100010000ffff01, 0x0100010000ff0000, 0x0100010000ff01ff, - 0x0100010000ff0101, 0x010001000000ff00, 0x01000100000000ff, 0x0100010000000000, - 0x0100010000000001, 0x0100010000000100, 0x010001000001ff01, 0x0100010000010000, - 0x0100010000010001, 0x0100010000010101, 0x0100010001ffff00, 0x0100010001ff00ff, - 0x010001000100ffff, 0x010001000100ff01, 0x0100010001000000, 0x0100010001000101, - 0x010001000101ff00, 0x0100010001010001, 0x01000101ffff0000, 0x01000101ff000000, - 0x01000101ff010000, 0x0100010100ff00ff, 0x0100010100ff0001, 0x0100010100ff0100, - 0x010001010000ffff, 0x0100010100000000, 0x01000101000001ff, 0x010001010001ff00, - 0x0100010101ff0000, 0x010001010100ff00, 0x01000101010000ff, 0x0100010101000000, - 0x0100010101000001, 0x0101ffffffffffff, 0x0101ffffffffff01, 0x0101ffffffff01ff, - 0x0101ffffffff0101, 0x0101ffffff000000, 0x0101ffffff01ffff, 0x0101ffffff01ff01, - 0x0101ffffff0101ff, 0x0101ffffff010101, 0x0101ffff00ff0000, 0x0101ffff0000ff00, - 0x0101ffff000000ff, 0x0101ffff00000001, 0x0101ffff00000100, 0x0101ffff01ffffff, - 0x0101ffff01ffff01, 0x0101ffff01ff01ff, 0x0101ffff01ff0101, 0x0101ffff01000000, - 0x0101ffff0101ffff, 0x0101ffff0101ff01, 0x0101ffff010101ff, 0x0101ffff01010101, - 0x0101ff00ffff0000, 0x0101ff00ffff0100, 0x0101ff00ff00ff00, 0x0101ff00ff0000ff, - 0x0101ff00ff000001, 0x0101ff00ff000100, 0x0101ff00ff000101, 0x0101ff0000ff0001, - 0x0101ff0000ff0100, 0x0101ff000000ff00, 0x0101ff0000000000, 0x0101ff00000001ff, - 0x0101ff0000000101, 0x0101ff000001ff00, 0x0101ff00000100ff, 0x0101ff0001ff0000, - 0x0101ff000100ffff, 0x0101ff000100ff01, 0x0101ff0001000001, 0x0101ff0001000100, - 0x0101ff01ffffff01, 0x0101ff01ffff01ff, 0x0101ff01ffff0101, 0x0101ff01ff00ffff, - 0x0101ff01ff000100, 0x0101ff01ff01ff01, 0x0101ff01ff0101ff, 0x0101ff01ff010101, - 0x0101ff0100ff0000, 0x0101ff010000ff00, 0x0101ff0100000001, 0x0101ff0100000100, - 0x0101ff0100010000, 0x0101ff0101ffffff, 0x0101ff0101ffff01, 0x0101ff0101ff01ff, - 0x0101ff0101ff0101, 0x0101ff0101000000, 0x0101ff010101ffff, 0x0101ff010101ff01, - 0x0101ff01010101ff, 0x0101ff0101010101, 0x010100ffff000100, 0x010100ffff010000, - 0x010100ff00ffff00, 0x010100ff00ff00ff, 0x010100ff0000ffff, 0x010100ff000000ff, - 0x010100ff00000000, 0x010100ff000001ff, 0x010100ff00000101, 0x010100ff0001ff00, - 0x010100ff00010000, 0x010100ff00010001, 0x010100ff000101ff, 0x010100ff00010100, - 0x010100ff01ff0000, 0x01010000ffff0001, 0x01010000ffff0100, 0x01010000ff00ffff, - 0x01010000ff00ff01, 0x01010000ff000000, 0x01010000ff0001ff, 0x01010000ff010001, - 0x01010000ff010100, 0x0101000000ffff01, 0x0101000000ff0000, 0x010100000000ff00, - 0x01010000000000ff, 0x0101000000000000, 0x0101000000000001, 0x0101000000000100, - 0x0101000000010000, 0x0101000000010101, 0x0101000001ffff00, 0x0101000001ff00ff, - 0x0101000001ff0000, 0x0101000001ff0001, 0x0101000001ff0100, 0x010100000100ff01, - 0x0101000001000000, 0x01010000010001ff, 0x01010001ffff0000, 0x01010001ff00ff00, - 0x01010001ff000001, 0x01010001ff000101, 0x01010001ff01ff00, 0x01010001ff010000, - 0x0101000100ff00ff, 0x0101000100ff0001, 0x0101000100ff0101, 0x010100010000ff01, - 0x0101000100000000, 0x0101000100000001, 0x01010001000001ff, 0x010100010001ffff, - 0x010100010001ff01, 0x0101000101ff0001, 0x010100010100ffff, 0x0101000101000000, - 0x0101000101000001, 0x0101000101000100, 0x010100010101ff00, 0x01010001010100ff, - 0x0101000101010001, 0x010101ffffffffff, 0x010101ffffffff01, 0x010101ffffff01ff, - 0x010101ffffff0101, 0x010101ffff01ffff, 0x010101ffff01ff01, 0x010101ffff0101ff, - 0x010101ffff010101, 0x010101ff0000ff00, 0x010101ff000000ff, 0x010101ff00000001, - 0x010101ff00000100, 0x010101ff01ffffff, 0x010101ff01ffff01, 0x010101ff01ff01ff, - 0x010101ff01ff0101, 0x010101ff01000000, 0x010101ff0101ffff, 0x010101ff0101ff01, - 0x010101ff010101ff, 0x010101ff01010101, 0x01010100ffff0000, 0x01010100ff0000ff, - 0x01010100ff000100, 0x01010100ff01ff00, 0x01010100ff010000, 0x0101010000ffff00, - 0x010101000000ffff, 0x0101010000000000, 0x0101010000000101, 0x010101000001ff00, - 0x0101010000010001, 0x0101010000010100, 0x010101000100ffff, 0x0101010001000001, - 0x01010101ffffffff, 0x01010101ffffff01, 0x01010101ffff01ff, 0x01010101ffff0101, - 0x01010101ff01ffff, 0x01010101ff01ff01, 0x01010101ff0101ff, 0x01010101ff010101, - 0x010101010000ff00, 0x01010101000000ff, 0x0101010100000001, 0x0101010101ffffff, - 0x0101010101ffff01, 0x0101010101ff01ff, 0x0101010101ff0101, 0x0101010101000000, - 0x010101010101ffff, 0x010101010101ff01, 0x01010101010101ff, 0x0101010101010101, -GGML_TABLE_END() -#else -GGML_TABLE_BEGIN(uint32_t, iq1s_grid_gpu, NGRID_IQ1S) - 0x00000000, 0x00000002, 0x00000101, 0x00000200, 0x00000202, 0x00010001, 0x00010101, 0x00020000, - 0x00020002, 0x00020200, 0x00020202, 0x01000101, 0x01010001, 0x01010100, 0x01010102, 0x01020101, - 0x02000000, 0x02000002, 0x02000200, 0x02000202, 0x02010101, 0x02020000, 0x02020002, 0x02020200, - 0x02020202, 0x00000110, 0x00000111, 0x00010011, 0x00010110, 0x00010112, 0x00010211, 0x00010212, - 0x00020111, 0x01000011, 0x01000112, 0x01000211, 0x01010012, 0x01010111, 0x01010212, 0x01020011, - 0x01020110, 0x01020112, 0x01020210, 0x02000111, 0x02010011, 0x02010110, 0x02010112, 0x02020111, - 0x00000020, 0x00000022, 0x00000220, 0x00000222, 0x00010121, 0x00020020, 0x00020022, 0x00020220, - 0x00020222, 0x01000121, 0x01010021, 0x01010221, 0x01020120, 0x01020221, 0x02000020, 0x02000022, - 0x02000220, 0x02000222, 0x02010021, 0x02010121, 0x02010221, 0x02020020, 0x02020022, 0x02020220, - 0x02020222, 0x00011001, 0x00011100, 0x00011102, 0x00021101, 0x01001001, 0x01001201, 0x01011101, - 0x01011202, 0x01021100, 0x01021101, 0x02011001, 0x02011201, 0x02021101, 0x00001011, 0x00001110, - 0x00001111, 0x00001112, 0x00011111, 0x00011210, 0x00011212, 0x00021211, 0x01001010, 0x01001111, - 0x01001212, 0x01011010, 0x01011011, 0x01011110, 0x01011111, 0x01011112, 0x01011211, 0x01021010, - 0x01021012, 0x01021111, 0x01021210, 0x01021212, 0x02001011, 0x02011011, 0x02011111, 0x02011210, - 0x02011212, 0x02021011, 0x02021110, 0x02021111, 0x02021112, 0x02021211, 0x00011120, 0x00011221, - 0x01001021, 0x01001120, 0x01011020, 0x01011022, 0x01011121, 0x01011220, 0x01021020, 0x01021021, - 0x01021122, 0x01021221, 0x02001121, 0x02011021, 0x02011120, 0x02011221, 0x00002000, 0x00002002, - 0x00002200, 0x00002202, 0x00012101, 0x00022000, 0x00022002, 0x00022200, 0x00022202, 0x01002101, - 0x01012001, 0x01012102, 0x01022101, 0x02002000, 0x02002002, 0x02002200, 0x02002202, 0x02012101, - 0x02022000, 0x02022002, 0x02022200, 0x02022202, 0x00002111, 0x00012011, 0x00012110, 0x00012211, - 0x00022110, 0x00022111, 0x01002011, 0x01012010, 0x01012011, 0x01012111, 0x01022011, 0x01022110, - 0x01022211, 0x02012011, 0x02012110, 0x02012112, 0x02012211, 0x02022111, 0x00002020, 0x00002022, - 0x00002220, 0x00002222, 0x00012121, 0x00022020, 0x00022022, 0x00022220, 0x00022222, 0x01002121, - 0x01012021, 0x01012221, 0x01022021, 0x01022121, 0x02002020, 0x02002022, 0x02002121, 0x02002220, - 0x02002222, 0x02012121, 0x02022020, 0x02022022, 0x02022220, 0x02022222, 0x00110000, 0x00110001, - 0x00110100, 0x00110201, 0x00120100, 0x00120101, 0x01100001, 0x01100100, 0x01110000, 0x01110101, - 0x01110200, 0x01120001, 0x01120100, 0x01120101, 0x01120201, 0x02110001, 0x02110100, 0x02110102, - 0x02120001, 0x02120101, 0x00100011, 0x00100110, 0x00100112, 0x00100211, 0x00110010, 0x00110012, - 0x00110111, 0x00110210, 0x00120011, 0x00120110, 0x00120211, 0x01100111, 0x01100212, 0x01110010, - 0x01110011, 0x01110012, 0x01110110, 0x01110111, 0x01110112, 0x01110211, 0x01120010, 0x01120111, - 0x02100110, 0x02110012, 0x02110111, 0x02120011, 0x02120110, 0x00110021, 0x00110120, 0x00110122, - 0x00120121, 0x01100020, 0x01100122, 0x01100221, 0x01110022, 0x01110121, 0x01110220, 0x01110222, - 0x01120120, 0x01120122, 0x02100121, 0x02110021, 0x02110120, 0x02110122, 0x02120121, 0x00101001, - 0x00101102, 0x00101201, 0x00111100, 0x00111101, 0x00111200, 0x00111201, 0x00121001, 0x00121102, - 0x01101001, 0x01101101, 0x01101102, 0x01101200, 0x01101202, 0x01111001, 0x01111100, 0x01111101, - 0x01111102, 0x01111201, 0x01121002, 0x01121101, 0x01121200, 0x02101100, 0x02101201, 0x02111000, - 0x02111100, 0x02111101, 0x02111200, 0x02111201, 0x02111202, 0x02121001, 0x02121100, 0x02121101, - 0x02121201, 0x00101012, 0x00101111, 0x00101212, 0x00111011, 0x00111110, 0x00111111, 0x00111112, - 0x00111211, 0x00121010, 0x00121012, 0x00121111, 0x00121210, 0x00121212, 0x01101011, 0x01101110, - 0x01101111, 0x01101112, 0x01111011, 0x01111012, 0x01111110, 0x01111111, 0x01111112, 0x01111211, - 0x01111212, 0x01121011, 0x01121110, 0x01121111, 0x01121112, 0x01121211, 0x02101010, 0x02101012, - 0x02101110, 0x02101111, 0x02101210, 0x02101212, 0x02111010, 0x02111011, 0x02111110, 0x02111111, - 0x02111112, 0x02111211, 0x02111212, 0x02121010, 0x02121012, 0x02121111, 0x00101021, 0x00101120, - 0x00101121, 0x00101122, 0x00111121, 0x00111122, 0x00111220, 0x00111222, 0x00121021, 0x00121122, - 0x01101020, 0x01101022, 0x01101120, 0x01101121, 0x01101220, 0x01101222, 0x01111021, 0x01111121, - 0x01111122, 0x01111220, 0x01111221, 0x01121021, 0x01121120, 0x01121121, 0x01121220, 0x01121221, - 0x01121222, 0x02101122, 0x02101222, 0x02111022, 0x02111121, 0x02121120, 0x02121221, 0x00112001, - 0x00112102, 0x00122101, 0x01102001, 0x01102100, 0x01102102, 0x01102201, 0x01112000, 0x01112101, - 0x01112200, 0x01112202, 0x01122000, 0x01122001, 0x01122100, 0x01122102, 0x01122201, 0x02102101, - 0x02112001, 0x02112100, 0x02122101, 0x00112010, 0x00112012, 0x00112111, 0x00112212, 0x00122011, - 0x00122111, 0x01102012, 0x01102110, 0x01102111, 0x01102210, 0x01112011, 0x01112110, 0x01112111, - 0x01112112, 0x01112211, 0x01112212, 0x01122010, 0x01122111, 0x01122212, 0x02102211, 0x02112011, - 0x02112012, 0x02112111, 0x02112210, 0x02122011, 0x02122112, 0x02122211, 0x00102221, 0x00112122, - 0x00122120, 0x00122122, 0x01102120, 0x01102122, 0x01102221, 0x01112020, 0x01112022, 0x01112121, - 0x01112220, 0x01122021, 0x01122122, 0x01122221, 0x02102121, 0x02112021, 0x02112122, 0x02112222, - 0x00200000, 0x00200002, 0x00200200, 0x00200202, 0x00210101, 0x00220000, 0x00220002, 0x00220101, - 0x00220200, 0x00220202, 0x01200101, 0x01210001, 0x01210201, 0x01220001, 0x01220101, 0x02200000, - 0x02200002, 0x02200200, 0x02200202, 0x02210101, 0x02220000, 0x02220002, 0x02220101, 0x02220200, - 0x02220202, 0x00200111, 0x00210011, 0x00210110, 0x00210211, 0x00220111, 0x01200012, 0x01200110, - 0x01200211, 0x01210111, 0x01210210, 0x01210212, 0x01220011, 0x01220110, 0x01220111, 0x01220112, - 0x02200111, 0x02210010, 0x02210112, 0x02210211, 0x02220111, 0x00200021, 0x00200220, 0x00200222, - 0x00210021, 0x00210121, 0x00220020, 0x00220022, 0x00220220, 0x00220222, 0x01200121, 0x01210021, - 0x01210122, 0x01210221, 0x01220121, 0x02200021, 0x02200220, 0x02200222, 0x02210021, 0x02210121, - 0x02220020, 0x02220022, 0x02220220, 0x02220222, 0x00201101, 0x00211100, 0x00211102, 0x00211201, - 0x00221101, 0x01201100, 0x01201101, 0x01201102, 0x01201201, 0x01211002, 0x01211101, 0x01211200, - 0x01211202, 0x01221102, 0x02201101, 0x02211001, 0x02211100, 0x02211201, 0x02221001, 0x02221101, - 0x00201211, 0x00211111, 0x00221011, 0x00221211, 0x01201010, 0x01201111, 0x01201210, 0x01211011, - 0x01211110, 0x01211111, 0x01211211, 0x01221012, 0x01221111, 0x01221210, 0x02201211, 0x02211010, - 0x02211110, 0x02211111, 0x02211210, 0x02211212, 0x02221011, 0x02221110, 0x02221112, 0x02221211, - 0x00201121, 0x00211020, 0x00211022, 0x00211221, 0x00221121, 0x01201021, 0x01201221, 0x01211121, - 0x01221020, 0x01221021, 0x01221221, 0x02201120, 0x02201122, 0x02211020, 0x02211222, 0x00202000, - 0x00202002, 0x00202200, 0x00202202, 0x00212101, 0x00222000, 0x00222002, 0x00222200, 0x00222202, - 0x01202101, 0x01212001, 0x01212100, 0x01222101, 0x02202000, 0x02202002, 0x02202200, 0x02202202, - 0x02222000, 0x02222002, 0x02222200, 0x02222202, 0x00202211, 0x00212011, 0x00212110, 0x00212211, - 0x00222111, 0x01202112, 0x01202211, 0x01212012, 0x01212111, 0x01222011, 0x01222110, 0x01222112, - 0x01222211, 0x02202111, 0x02212010, 0x02212112, 0x02212211, 0x02222110, 0x02222111, 0x00202020, - 0x00202022, 0x00202220, 0x00202222, 0x00222020, 0x00222022, 0x00222220, 0x00222222, 0x01202121, - 0x01212021, 0x01212122, 0x01212221, 0x01222121, 0x02202020, 0x02202022, 0x02202220, 0x02202222, - 0x02212121, 0x02222020, 0x02222022, 0x02222220, 0x02222222, 0x10000101, 0x10010001, 0x10010102, - 0x10020101, 0x11000201, 0x11010002, 0x11010101, 0x11010200, 0x11010202, 0x11020001, 0x11020100, - 0x11020102, 0x12010100, 0x12010201, 0x12020001, 0x12020102, 0x10000010, 0x10000011, 0x10000110, - 0x10000112, 0x10000211, 0x10010012, 0x10010111, 0x10010112, 0x10010210, 0x10010212, 0x10020011, - 0x10020112, 0x10020211, 0x11000111, 0x11000210, 0x11000212, 0x11010011, 0x11010110, 0x11010111, - 0x11010112, 0x11010211, 0x11010212, 0x11020111, 0x11020210, 0x11020212, 0x12000011, 0x12000110, - 0x12000112, 0x12010010, 0x12010012, 0x12010111, 0x12020010, 0x12020011, 0x12020012, 0x10000121, - 0x10010021, 0x10010120, 0x10010122, 0x10020121, 0x11000021, 0x11010022, 0x11010121, 0x11010222, - 0x11020120, 0x11020221, 0x12000221, 0x12010120, 0x12020121, 0x10001001, 0x10011101, 0x10011201, - 0x10021201, 0x11001101, 0x11001200, 0x11001202, 0x11011001, 0x11011100, 0x11011101, 0x11011102, - 0x11021001, 0x11021002, 0x11021101, 0x11021200, 0x11021202, 0x12001001, 0x12001102, 0x12001201, - 0x12011000, 0x12011002, 0x12011101, 0x12021000, 0x12021001, 0x12021201, 0x10001011, 0x10001012, - 0x10001111, 0x10001212, 0x10011011, 0x10011110, 0x10011111, 0x10011112, 0x10011211, 0x10021010, - 0x10021111, 0x10021212, 0x11001011, 0x11001110, 0x11001111, 0x11001112, 0x11001211, 0x11011010, - 0x11011011, 0x11011110, 0x11011111, 0x11011112, 0x11011210, 0x11011211, 0x11021011, 0x11021110, - 0x11021111, 0x11021112, 0x11021211, 0x12001012, 0x12001110, 0x12001111, 0x12001210, 0x12011011, - 0x12011110, 0x12011111, 0x12011112, 0x12011211, 0x12011212, 0x12021111, 0x12021210, 0x12021212, - 0x10001021, 0x10001121, 0x10001221, 0x10011120, 0x10011121, 0x10011220, 0x10011222, 0x10021021, - 0x10021120, 0x10021221, 0x11001020, 0x11001022, 0x11001121, 0x11001220, 0x11011020, 0x11011021, - 0x11011022, 0x11011121, 0x11011122, 0x11011221, 0x11021022, 0x11021121, 0x11021220, 0x12001021, - 0x12001121, 0x12001222, 0x12011120, 0x12011121, 0x12021021, 0x12021120, 0x12021122, 0x10002101, - 0x10012001, 0x10012101, 0x10012202, 0x10022101, 0x11002002, 0x11002201, 0x11012000, 0x11012101, - 0x11012200, 0x11022001, 0x11022100, 0x11022102, 0x11022201, 0x12002101, 0x12012001, 0x12012100, - 0x12012102, 0x12012201, 0x12022101, 0x10002011, 0x10002111, 0x10002112, 0x10002212, 0x10012010, - 0x10012110, 0x10012111, 0x10012210, 0x10022011, 0x10022110, 0x10022112, 0x11002010, 0x11002111, - 0x11002212, 0x11012011, 0x11012012, 0x11012110, 0x11012111, 0x11012112, 0x11012211, 0x11022010, - 0x11022012, 0x11022111, 0x11022112, 0x11022212, 0x12002112, 0x12002211, 0x12012012, 0x12012111, - 0x12012112, 0x12012210, 0x12022011, 0x12022110, 0x12022112, 0x12022211, 0x10012122, 0x11002120, - 0x11002122, 0x11002221, 0x11012121, 0x11012220, 0x11012222, 0x11022120, 0x11022221, 0x12012120, - 0x12022121, 0x10100001, 0x10100100, 0x10100101, 0x10100102, 0x10100201, 0x10110002, 0x10110101, - 0x10110202, 0x10120001, 0x10120100, 0x10120201, 0x11100000, 0x11100101, 0x11100200, 0x11110001, - 0x11110100, 0x11110101, 0x11110102, 0x11110201, 0x11120101, 0x11120200, 0x12100102, 0x12100201, - 0x12110101, 0x12110200, 0x12120000, 0x12120001, 0x12120102, 0x12120201, 0x10100111, 0x10100210, - 0x10100211, 0x10100212, 0x10110011, 0x10110110, 0x10110111, 0x10110112, 0x10110210, 0x10110211, - 0x10120010, 0x10120111, 0x10120112, 0x10120210, 0x10120212, 0x11100011, 0x11100110, 0x11100111, - 0x11100112, 0x11100211, 0x11110010, 0x11110011, 0x11110012, 0x11110110, 0x11110111, 0x11110112, - 0x11110210, 0x11110211, 0x11110212, 0x11120011, 0x11120110, 0x11120111, 0x11120112, 0x11120211, - 0x12100012, 0x12100111, 0x12110011, 0x12110110, 0x12110111, 0x12110112, 0x12110211, 0x12120010, - 0x12120111, 0x12120212, 0x10100021, 0x10100122, 0x10110022, 0x10110121, 0x10110222, 0x10120021, - 0x10120120, 0x11100022, 0x11100121, 0x11100222, 0x11110021, 0x11110120, 0x11110121, 0x11110122, - 0x11110221, 0x11120022, 0x11120121, 0x12100121, 0x12110020, 0x12110022, 0x12110121, 0x12110221, - 0x12110222, 0x12120120, 0x10101100, 0x10101101, 0x10111001, 0x10111100, 0x10111101, 0x10111102, - 0x10111200, 0x10111201, 0x10121001, 0x10121101, 0x10121200, 0x10121202, 0x11101001, 0x11101100, - 0x11101101, 0x11101102, 0x11101201, 0x11101202, 0x11111000, 0x11111001, 0x11111100, 0x11111101, - 0x11111102, 0x11111200, 0x11111201, 0x11111202, 0x11121001, 0x11121002, 0x11121100, 0x11121101, - 0x11121102, 0x11121201, 0x12101000, 0x12101200, 0x12101202, 0x12111001, 0x12111100, 0x12111101, - 0x12111102, 0x12111201, 0x12121001, 0x12121100, 0x12121101, 0x12121202, 0x10101011, 0x10101012, - 0x10101110, 0x10101111, 0x10101112, 0x10101211, 0x10111010, 0x10111011, 0x10111012, 0x10111110, - 0x10111111, 0x10111112, 0x10111211, 0x10111212, 0x10121011, 0x10121110, 0x10121111, 0x10121112, - 0x10121211, 0x11101010, 0x11101011, 0x11101012, 0x11101110, 0x11101111, 0x11101112, 0x11101210, - 0x11101211, 0x11111010, 0x11111011, 0x11111012, 0x11111110, 0x11111111, 0x11111112, 0x11111210, - 0x11111211, 0x11111212, 0x11121010, 0x11121011, 0x11121110, 0x11121111, 0x11121112, 0x11121210, - 0x11121211, 0x11121212, 0x12101011, 0x12101110, 0x12101111, 0x12101211, 0x12101212, 0x12111010, - 0x12111011, 0x12111110, 0x12111111, 0x12111112, 0x12111210, 0x12111211, 0x12121011, 0x12121110, - 0x12121111, 0x12121112, 0x12121211, 0x10101020, 0x10101021, 0x10101022, 0x10101120, 0x10101122, - 0x10101220, 0x10101221, 0x10111021, 0x10111120, 0x10111121, 0x10111220, 0x10111221, 0x10121020, - 0x10121021, 0x10121022, 0x10121120, 0x10121121, 0x10121122, 0x10121220, 0x10121221, 0x11101021, - 0x11101121, 0x11101122, 0x11101220, 0x11101221, 0x11101222, 0x11111020, 0x11111021, 0x11111022, - 0x11111120, 0x11111121, 0x11111122, 0x11111220, 0x11111221, 0x11111222, 0x11121021, 0x11121120, - 0x11121121, 0x11121221, 0x12101022, 0x12101121, 0x12101122, 0x12101220, 0x12101221, 0x12101222, - 0x12111021, 0x12111121, 0x12111222, 0x12121022, 0x12121121, 0x12121122, 0x12121220, 0x12121221, - 0x10102100, 0x10102101, 0x10102102, 0x10102201, 0x10112000, 0x10112101, 0x10112200, 0x10122001, - 0x10122202, 0x11102101, 0x11102200, 0x11102202, 0x11112001, 0x11112100, 0x11112101, 0x11112102, - 0x11112200, 0x11112201, 0x11122000, 0x11122002, 0x11122100, 0x11122101, 0x12102002, 0x12102201, - 0x12112000, 0x12112002, 0x12112101, 0x12112200, 0x12122001, 0x12122201, 0x10102011, 0x10102012, - 0x10102111, 0x10102212, 0x10112011, 0x10112110, 0x10112111, 0x10112112, 0x10112211, 0x10122111, - 0x11102011, 0x11102110, 0x11102111, 0x11102112, 0x11102211, 0x11112010, 0x11112011, 0x11112012, - 0x11112110, 0x11112111, 0x11112112, 0x11112210, 0x11112211, 0x11112212, 0x11122011, 0x11122110, - 0x11122111, 0x11122112, 0x11122211, 0x12102011, 0x12102111, 0x12102211, 0x12112011, 0x12112110, - 0x12112111, 0x12112112, 0x12112210, 0x12112211, 0x12122111, 0x10102120, 0x10102220, 0x10112121, - 0x10112222, 0x10122020, 0x10122121, 0x10122122, 0x10122221, 0x11102121, 0x11102220, 0x11102221, - 0x11112021, 0x11112121, 0x11112122, 0x11112220, 0x11112221, 0x11122022, 0x11122121, 0x11122220, - 0x11122222, 0x12102021, 0x12102222, 0x12112022, 0x12112121, 0x12112122, 0x12112220, 0x12112222, - 0x12122021, 0x10200101, 0x10210100, 0x10210102, 0x10210201, 0x10220101, 0x11200100, 0x11210000, - 0x11210101, 0x11210102, 0x11210200, 0x11210202, 0x11220001, 0x11220100, 0x11220102, 0x11220201, - 0x12200001, 0x12210102, 0x12220101, 0x10200011, 0x10200110, 0x10200112, 0x10200211, 0x10210012, - 0x10210111, 0x10220011, 0x10220012, 0x10220112, 0x10220211, 0x11200111, 0x11200211, 0x11210011, - 0x11210111, 0x11210112, 0x11210211, 0x11220111, 0x11220112, 0x11220212, 0x12200110, 0x12200212, - 0x12210012, 0x12210111, 0x12220011, 0x12220112, 0x12220211, 0x10210021, 0x10210122, 0x10210221, - 0x11200020, 0x11200021, 0x11200122, 0x11210121, 0x11210122, 0x11210220, 0x11220020, 0x12200121, - 0x12210021, 0x12210122, 0x12220121, 0x10211001, 0x10211002, 0x10211101, 0x10211102, 0x10211202, - 0x10221001, 0x10221102, 0x10221201, 0x11201000, 0x11201002, 0x11201101, 0x11201200, 0x11201202, - 0x11211001, 0x11211100, 0x11211101, 0x11211102, 0x11211201, 0x11211202, 0x11221000, 0x11221002, - 0x11221101, 0x12201100, 0x12201101, 0x12201201, 0x12211000, 0x12211002, 0x12211100, 0x12211101, - 0x12211102, 0x12211200, 0x12211202, 0x12221001, 0x12221100, 0x12221201, 0x10201111, 0x10201210, - 0x10201212, 0x10211011, 0x10211111, 0x10211112, 0x10211211, 0x11201110, 0x11201111, 0x11201112, - 0x11201211, 0x11211010, 0x11211011, 0x11211110, 0x11211111, 0x11211112, 0x11211211, 0x11221011, - 0x11221110, 0x11221111, 0x11221112, 0x11221211, 0x12201112, 0x12201211, 0x12201212, 0x12211011, - 0x12211111, 0x12211112, 0x12211211, 0x12211212, 0x12221012, 0x12221111, 0x12221112, 0x12221210, - 0x10201022, 0x10201221, 0x10211121, 0x10221020, 0x10221122, 0x10221220, 0x10221221, 0x11201020, - 0x11201121, 0x11201220, 0x11201222, 0x11211021, 0x11211120, 0x11211121, 0x11211122, 0x11211220, - 0x11211222, 0x11221020, 0x11221121, 0x11221220, 0x12201020, 0x12201022, 0x12201121, 0x12201222, - 0x12211120, 0x12211122, 0x12211220, 0x12211221, 0x12221020, 0x12221120, 0x12221122, 0x12221222, - 0x10212102, 0x10212201, 0x10222101, 0x11202001, 0x11212002, 0x11212101, 0x11212202, 0x11222001, - 0x11222201, 0x12202101, 0x12212001, 0x12212200, 0x12222102, 0x10202011, 0x10202110, 0x10212010, - 0x10212111, 0x10222011, 0x10222110, 0x10222112, 0x10222211, 0x11202010, 0x11202011, 0x11202111, - 0x11202112, 0x11202210, 0x11212011, 0x11212110, 0x11212111, 0x11212112, 0x11212211, 0x11222010, - 0x11222111, 0x11222212, 0x12202012, 0x12202110, 0x12202212, 0x12212111, 0x12222011, 0x12222110, - 0x12222111, 0x12222211, 0x10212021, 0x10212122, 0x10212220, 0x11202021, 0x11202120, 0x11202221, - 0x11212020, 0x11212121, 0x11212220, 0x11212222, 0x11222120, 0x11222121, 0x11222221, 0x12202122, - 0x12212120, 0x12212220, 0x12212222, 0x12222122, 0x20000000, 0x20000002, 0x20000200, 0x20000202, - 0x20020000, 0x20020002, 0x20020200, 0x20020202, 0x21000101, 0x21010000, 0x21010001, 0x21010100, - 0x21010102, 0x21010201, 0x21020101, 0x22000000, 0x22000002, 0x22000200, 0x22000202, 0x22010101, - 0x22020000, 0x22020002, 0x22020200, 0x22020202, 0x20000111, 0x20010011, 0x20010110, 0x20010112, - 0x20010211, 0x20020111, 0x21000011, 0x21000110, 0x21000211, 0x21010010, 0x21010012, 0x21010111, - 0x21010112, 0x21010210, 0x21010211, 0x21020110, 0x21020112, 0x21020211, 0x22000111, 0x22000211, - 0x22010110, 0x22010112, 0x22010211, 0x22020111, 0x20000020, 0x20000022, 0x20000220, 0x20000222, - 0x20010121, 0x20020020, 0x20020022, 0x20020220, 0x20020222, 0x21010021, 0x21010120, 0x21010221, - 0x21020121, 0x22000020, 0x22000022, 0x22000220, 0x22000222, 0x22010121, 0x22020020, 0x22020022, - 0x22020220, 0x22020222, 0x20011100, 0x20011201, 0x21001001, 0x21001100, 0x21011001, 0x21011101, - 0x21011202, 0x21021001, 0x21021100, 0x21021201, 0x22011100, 0x22011201, 0x20001011, 0x20001211, - 0x20011012, 0x20011111, 0x20011212, 0x20021112, 0x20021211, 0x21001010, 0x21001011, 0x21001111, - 0x21001210, 0x21011011, 0x21011110, 0x21011111, 0x21011112, 0x21011211, 0x21011212, 0x21021111, - 0x21021112, 0x21021210, 0x21021212, 0x22001011, 0x22001110, 0x22001112, 0x22001211, 0x22011010, - 0x22011012, 0x22011111, 0x22011210, 0x22021112, 0x20011021, 0x20011122, 0x20011221, 0x20021121, - 0x21001021, 0x21001120, 0x21001221, 0x21001222, 0x21011020, 0x21011121, 0x21011221, 0x21011222, - 0x21021021, 0x21021122, 0x21021222, 0x22001121, 0x22011021, 0x22011222, 0x22021120, 0x20002000, - 0x20002002, 0x20002200, 0x20002202, 0x20012101, 0x20022000, 0x20022002, 0x20022200, 0x20022202, - 0x21002001, 0x21002101, 0x21012001, 0x21012100, 0x21012201, 0x21022101, 0x21022201, 0x22002000, - 0x22002002, 0x22002200, 0x22002202, 0x22012101, 0x22022000, 0x22022002, 0x22022200, 0x22022202, - 0x20002111, 0x20002112, 0x20012011, 0x20012110, 0x20012112, 0x20022111, 0x21002011, 0x21002110, - 0x21002112, 0x21002211, 0x21012010, 0x21012012, 0x21012111, 0x21012212, 0x21022011, 0x21022110, - 0x22002111, 0x22012112, 0x22012211, 0x22022111, 0x20002020, 0x20002022, 0x20002220, 0x20002222, - 0x20012121, 0x20022020, 0x20022022, 0x20022220, 0x20022222, 0x21002121, 0x21012021, 0x21012120, - 0x21012122, 0x22002020, 0x22002022, 0x22002220, 0x22002222, 0x22012121, 0x22022020, 0x22022022, - 0x22022220, 0x22022222, 0x20100101, 0x20110001, 0x20110102, 0x20110200, 0x20110201, 0x20120101, - 0x21100001, 0x21100102, 0x21100201, 0x21110101, 0x21110200, 0x21110202, 0x21120201, 0x21120202, - 0x22100101, 0x22110001, 0x22110100, 0x22110102, 0x22110201, 0x22120101, 0x20100011, 0x20100110, - 0x20100112, 0x20100211, 0x20110010, 0x20110111, 0x20110210, 0x20110212, 0x20120011, 0x20120110, - 0x20120112, 0x20120211, 0x21100010, 0x21100111, 0x21110010, 0x21110011, 0x21110110, 0x21110111, - 0x21110112, 0x21110211, 0x21120012, 0x21120111, 0x22100110, 0x22100112, 0x22110012, 0x22110111, - 0x22110210, 0x22120011, 0x22120110, 0x22120112, 0x22120211, 0x20100121, 0x20110021, 0x20110120, - 0x20110221, 0x20120121, 0x21100120, 0x21100122, 0x21100221, 0x21110020, 0x21110022, 0x21110121, - 0x21110220, 0x21120122, 0x21120221, 0x22100121, 0x22110120, 0x22110122, 0x22120221, 0x20101001, - 0x20101100, 0x20101102, 0x20111000, 0x20111101, 0x20111200, 0x20121102, 0x21101000, 0x21101202, - 0x21111001, 0x21111100, 0x21111101, 0x21111102, 0x21111200, 0x21111201, 0x21121000, 0x21121001, - 0x21121002, 0x21121101, 0x22101100, 0x22101102, 0x22111002, 0x22111100, 0x22111101, 0x22111200, - 0x22121001, 0x22121201, 0x20101010, 0x20101111, 0x20101210, 0x20101212, 0x20111010, 0x20111011, - 0x20111110, 0x20111111, 0x20111112, 0x20111211, 0x20121011, 0x20121111, 0x20121211, 0x20121212, - 0x21101011, 0x21101110, 0x21101111, 0x21101112, 0x21101211, 0x21111010, 0x21111011, 0x21111012, - 0x21111110, 0x21111111, 0x21111112, 0x21111210, 0x21111211, 0x21111212, 0x21121011, 0x21121110, - 0x21121111, 0x21121112, 0x21121211, 0x22101011, 0x22101111, 0x22101210, 0x22111011, 0x22111012, - 0x22111110, 0x22111111, 0x22111112, 0x22111211, 0x22111212, 0x22121010, 0x22121012, 0x22121111, - 0x22121210, 0x22121212, 0x20101021, 0x20101120, 0x20111020, 0x20111121, 0x20111221, 0x20121020, - 0x20121122, 0x20121221, 0x21101121, 0x21101220, 0x21101221, 0x21111021, 0x21111022, 0x21111121, - 0x21111122, 0x21111221, 0x21121121, 0x21121220, 0x22101022, 0x22101120, 0x22101221, 0x22101222, - 0x22111022, 0x22111120, 0x22111121, 0x22121120, 0x22121122, 0x22121221, 0x20102101, 0x20112102, - 0x20112201, 0x20122101, 0x21102001, 0x21102102, 0x21112000, 0x21112002, 0x21112101, 0x21112102, - 0x21112202, 0x21122100, 0x21122101, 0x22102101, 0x22112001, 0x22112102, 0x22112201, 0x22122101, - 0x20102110, 0x20102112, 0x20102211, 0x20112010, 0x20112012, 0x20112111, 0x20112210, 0x20112212, - 0x20122010, 0x20122011, 0x20122110, 0x20122112, 0x21102010, 0x21102012, 0x21102111, 0x21102210, - 0x21102212, 0x21112011, 0x21112110, 0x21112111, 0x21112112, 0x21112211, 0x21122012, 0x21122111, - 0x21122112, 0x21122212, 0x22102011, 0x22102110, 0x22112010, 0x22112012, 0x22112111, 0x22112212, - 0x22122011, 0x22122112, 0x20102121, 0x20112121, 0x20122121, 0x21102120, 0x21102122, 0x21102221, - 0x21112020, 0x21112121, 0x21112220, 0x21122021, 0x22102121, 0x22112021, 0x22112120, 0x22112121, - 0x22112122, 0x20200000, 0x20200002, 0x20200200, 0x20200202, 0x20210101, 0x20220000, 0x20220002, - 0x20220200, 0x20220202, 0x21200101, 0x21210001, 0x21210100, 0x21210102, 0x21210201, 0x22200000, - 0x22200002, 0x22200200, 0x22200202, 0x22210101, 0x22220000, 0x22220002, 0x22220200, 0x22220202, - 0x20200111, 0x20200211, 0x20210011, 0x20210110, 0x20210112, 0x20210211, 0x20210212, 0x21200112, - 0x21200211, 0x21210011, 0x21210111, 0x21210210, 0x21210212, 0x21220011, 0x21220110, 0x22200111, - 0x22210010, 0x22210012, 0x22210112, 0x22210211, 0x20200022, 0x20200220, 0x20200222, 0x20210020, - 0x20210221, 0x20220022, 0x20220220, 0x20220222, 0x21200121, 0x21210021, 0x21210122, 0x21210221, - 0x21220121, 0x22200020, 0x22200022, 0x22200220, 0x22200222, 0x22210121, 0x22220020, 0x22220022, - 0x22220220, 0x22220222, 0x20211201, 0x20221101, 0x21201001, 0x21201100, 0x21211000, 0x21211100, - 0x21211101, 0x21211200, 0x21211202, 0x21221001, 0x21221101, 0x21221102, 0x21221200, 0x21221201, - 0x22201101, 0x20201112, 0x20201211, 0x20211010, 0x20211012, 0x20211111, 0x20211210, 0x20221112, - 0x20221211, 0x21201012, 0x21201111, 0x21211011, 0x21211110, 0x21211111, 0x21211112, 0x21211211, - 0x21221111, 0x21221212, 0x22201011, 0x22201110, 0x22201111, 0x22201112, 0x22201211, 0x22211012, - 0x22211111, 0x22211210, 0x20201121, 0x20211021, 0x20211122, 0x20211222, 0x20221021, 0x20221121, - 0x21201120, 0x21201122, 0x21201222, 0x21211022, 0x21211121, 0x21211122, 0x21211220, 0x21221020, - 0x21221022, 0x22201122, 0x22211020, 0x22211121, 0x22211122, 0x22211221, 0x22221021, 0x22221120, - 0x22221122, 0x20202000, 0x20202002, 0x20202200, 0x20202202, 0x20222000, 0x20222002, 0x20222200, - 0x20222202, 0x21212001, 0x21212100, 0x21212102, 0x21212201, 0x22202000, 0x22202002, 0x22202200, - 0x22202202, 0x22212101, 0x22222000, 0x22222002, 0x22222200, 0x22222202, 0x20202111, 0x20212110, - 0x20212211, 0x20222011, 0x20222111, 0x21202011, 0x21212010, 0x21212111, 0x21212212, 0x21222011, - 0x21222112, 0x21222211, 0x22212010, 0x22212112, 0x20202020, 0x20202022, 0x20202220, 0x20202222, - 0x20222020, 0x20222022, 0x20222220, 0x20222222, 0x21212021, 0x21212120, 0x21212122, 0x22202020, - 0x22202022, 0x22202220, 0x22202222, 0x22212121, 0x22222020, 0x22222022, 0x22222220, 0x22222222, -GGML_TABLE_END() -#endif - -#endif // GGML_COMMON_IMPL -#endif // GGML_COMMON_IMPL diff --git a/ggml-cuda.cu b/ggml-cuda.cu deleted file mode 100644 index d277104d121..00000000000 --- a/ggml-cuda.cu +++ /dev/null @@ -1,2756 +0,0 @@ -#include "ggml-cuda.h" -#include "ggml.h" -#include "ggml-backend-impl.h" - -#include "ggml-cuda/common.cuh" -#include "ggml-cuda/acc.cuh" -#include "ggml-cuda/alibi.cuh" -#include "ggml-cuda/arange.cuh" -#include "ggml-cuda/argsort.cuh" -#include "ggml-cuda/binbcast.cuh" -#include "ggml-cuda/clamp.cuh" -#include "ggml-cuda/concat.cuh" -#include "ggml-cuda/convert.cuh" -#include "ggml-cuda/cpy.cuh" -#include "ggml-cuda/diagmask.cuh" -#include "ggml-cuda/dmmv.cuh" -#include "ggml-cuda/getrows.cuh" -#include "ggml-cuda/im2col.cuh" -#include "ggml-cuda/mmq.cuh" -#include "ggml-cuda/mmvq.cuh" -#include "ggml-cuda/norm.cuh" -#include "ggml-cuda/pad.cuh" -#include "ggml-cuda/pool2d.cuh" -#include "ggml-cuda/quantize.cuh" -#include "ggml-cuda/rope.cuh" -#include "ggml-cuda/scale.cuh" -#include "ggml-cuda/softmax.cuh" -#include "ggml-cuda/sumrows.cuh" -#include "ggml-cuda/tsembd.cuh" -#include "ggml-cuda/unary.cuh" -#include "ggml-cuda/upscale.cuh" - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -static_assert(sizeof(half) == sizeof(ggml_fp16_t), "wrong fp16 size"); - -[[noreturn]] -void ggml_cuda_error(const char * stmt, const char * func, const char * file, int line, const char * msg) { - int id = -1; // in case cudaGetDevice fails - cudaGetDevice(&id); - - fprintf(stderr, "CUDA error: %s\n", msg); - fprintf(stderr, " current device: %d, in function %s at %s:%d\n", id, func, file, line); - fprintf(stderr, " %s\n", stmt); - // abort with GGML_ASSERT to get a stack trace - GGML_ASSERT(!"CUDA error"); -} - -// this is faster on Windows -// probably because the Windows CUDA libraries forget to make this check before invoking the drivers -void ggml_cuda_set_device(int device) { - int current_device; - CUDA_CHECK(cudaGetDevice(¤t_device)); - - if (device == current_device) { - return; - } - - CUDA_CHECK(cudaSetDevice(device)); -} - -int ggml_cuda_get_device() { - int id; - CUDA_CHECK(cudaGetDevice(&id)); - return id; -} - -static ggml_cuda_device_info ggml_cuda_init() { -#ifdef __HIP_PLATFORM_AMD__ - // Workaround for a rocBLAS bug when using multiple graphics cards: - // https://github.com/ROCmSoftwarePlatform/rocBLAS/issues/1346 - rocblas_initialize(); - CUDA_CHECK(cudaDeviceSynchronize()); -#endif - - ggml_cuda_device_info info = {}; - - cudaError_t err = cudaGetDeviceCount(&info.device_count); - if (err != cudaSuccess) { - fprintf(stderr, "%s: failed to initialize " GGML_CUDA_NAME ": %s\n", __func__, cudaGetErrorString(err)); - return info; - } - - GGML_ASSERT(info.device_count <= GGML_CUDA_MAX_DEVICES); - - int64_t total_vram = 0; -#if defined(GGML_CUDA_FORCE_MMQ) - fprintf(stderr, "%s: GGML_CUDA_FORCE_MMQ: yes\n", __func__); -#else - fprintf(stderr, "%s: GGML_CUDA_FORCE_MMQ: no\n", __func__); -#endif -#if defined(CUDA_USE_TENSOR_CORES) - fprintf(stderr, "%s: CUDA_USE_TENSOR_CORES: yes\n", __func__); -#else - fprintf(stderr, "%s: CUDA_USE_TENSOR_CORES: no\n", __func__); -#endif - fprintf(stderr, "%s: found %d " GGML_CUDA_NAME " devices:\n", __func__, info.device_count); - for (int id = 0; id < info.device_count; ++id) { - int device_vmm = 0; - -#if !defined(GGML_USE_HIPBLAS) - CUdevice device; - CU_CHECK(cuDeviceGet(&device, id)); - CU_CHECK(cuDeviceGetAttribute(&device_vmm, CU_DEVICE_ATTRIBUTE_VIRTUAL_MEMORY_MANAGEMENT_SUPPORTED, device)); - - if (device_vmm) { - CUmemAllocationProp alloc_prop = {}; - alloc_prop.type = CU_MEM_ALLOCATION_TYPE_PINNED; - alloc_prop.location.type = CU_MEM_LOCATION_TYPE_DEVICE; - alloc_prop.location.id = id; - CU_CHECK(cuMemGetAllocationGranularity(&info.devices[id].vmm_granularity, &alloc_prop, CU_MEM_ALLOC_GRANULARITY_RECOMMENDED)); - } -#endif // !defined(GGML_USE_HIPBLAS) - info.devices[id].vmm = !!device_vmm; - - cudaDeviceProp prop; - CUDA_CHECK(cudaGetDeviceProperties(&prop, id)); - fprintf(stderr, " Device %d: %s, compute capability %d.%d, VMM: %s\n", id, prop.name, prop.major, prop.minor, device_vmm ? "yes" : "no"); - - info.default_tensor_split[id] = total_vram; - total_vram += prop.totalGlobalMem; - -#if defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__) - info.devices[id].cc = 100*prop.major + 10*prop.minor + CC_OFFSET_AMD; -#else - info.devices[id].cc = 100*prop.major + 10*prop.minor; -#endif // defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__) - info.devices[id].smpb = prop.sharedMemPerBlock; - } - - for (int id = 0; id < info.device_count; ++id) { - info.default_tensor_split[id] /= total_vram; - } - - // configure logging to stdout - // CUBLAS_CHECK(cublasLoggerConfigure(1, 1, 0, nullptr)); - - return info; -} - -const ggml_cuda_device_info & ggml_cuda_info() { - static ggml_cuda_device_info info = ggml_cuda_init(); - return info; -} - -// #define DEBUG_CUDA_MALLOC - -// buffer pool for cuda (legacy) -struct ggml_cuda_pool_leg : public ggml_cuda_pool { - static const int MAX_BUFFERS = 256; - - int device; - struct ggml_cuda_buffer { - void * ptr = nullptr; - size_t size = 0; - }; - - ggml_cuda_buffer buffer_pool[MAX_BUFFERS] = {}; - size_t pool_size = 0; - - explicit ggml_cuda_pool_leg(int device) : - device(device) { - } - - ~ggml_cuda_pool_leg() { - ggml_cuda_set_device(device); - for (int i = 0; i < MAX_BUFFERS; ++i) { - ggml_cuda_buffer & b = buffer_pool[i]; - if (b.ptr != nullptr) { - CUDA_CHECK(cudaFree(b.ptr)); - pool_size -= b.size; - } - } - GGML_ASSERT(pool_size == 0); - } - - void * alloc(size_t size, size_t * actual_size) override { -#ifdef DEBUG_CUDA_MALLOC - int nnz = 0; - size_t max_size = 0; -#endif - size_t best_diff = 1ull << 36; - int ibest = -1; - for (int i = 0; i < MAX_BUFFERS; ++i) { - ggml_cuda_buffer& b = buffer_pool[i]; - if (b.ptr != nullptr) { -#ifdef DEBUG_CUDA_MALLOC - ++nnz; - if (b.size > max_size) max_size = b.size; -#endif - if (b.size >= size) { - size_t diff = b.size - size; - if (diff < best_diff) { - best_diff = diff; - ibest = i; - if (!best_diff) { - void * ptr = b.ptr; - *actual_size = b.size; - b.ptr = nullptr; - b.size = 0; - return ptr; - } - } - } - } - } - if (ibest >= 0) { - ggml_cuda_buffer& b = buffer_pool[ibest]; - void * ptr = b.ptr; - *actual_size = b.size; - b.ptr = nullptr; - b.size = 0; - return ptr; - } - void * ptr; - size_t look_ahead_size = (size_t) (1.05 * size); - look_ahead_size = 256 * ((look_ahead_size + 255)/256); - ggml_cuda_set_device(device); - CUDA_CHECK(cudaMalloc((void **) &ptr, look_ahead_size)); - *actual_size = look_ahead_size; - pool_size += look_ahead_size; -#ifdef DEBUG_CUDA_MALLOC - fprintf(stderr, "%s[%d]: %d buffers, max_size = %u MB, pool_size = %u MB, requested %u MB\n", __func__, device, nnz, - (uint32_t)(max_size/1024/1024), (uint32_t)(pool_size/1024/1024), (uint32_t)(size/1024/1024)); -#endif - return ptr; - } - - void free(void * ptr, size_t size) override { - for (int i = 0; i < MAX_BUFFERS; ++i) { - ggml_cuda_buffer& b = buffer_pool[i]; - if (b.ptr == nullptr) { - b.ptr = ptr; - b.size = size; - return; - } - } - fprintf(stderr, "WARNING: cuda buffer pool full, increase MAX_CUDA_BUFFERS\n"); - ggml_cuda_set_device(device); - CUDA_CHECK(cudaFree(ptr)); - pool_size -= size; - } -}; - -// pool with virtual memory -#if !defined(GGML_USE_HIPBLAS) -struct ggml_cuda_pool_vmm : public ggml_cuda_pool { - static const size_t CUDA_POOL_VMM_MAX_SIZE = 1ull << 35; // 32 GB - - int device; - CUdeviceptr pool_addr = 0; - size_t pool_used = 0; - size_t pool_size = 0; - size_t granularity; - - explicit ggml_cuda_pool_vmm(int device) : - device(device), - granularity(ggml_cuda_info().devices[device].vmm_granularity) { - } - - ~ggml_cuda_pool_vmm() { - if (pool_addr != 0) { - CU_CHECK(cuMemUnmap(pool_addr, pool_size)); - CU_CHECK(cuMemAddressFree(pool_addr, CUDA_POOL_VMM_MAX_SIZE)); - } - } - - void * alloc(size_t size, size_t * actual_size) override { - // round up the allocation size to the alignment to ensure that all allocations are aligned for all data types - const size_t alignment = 128; - size = alignment * ((size + alignment - 1) / alignment); - - size_t avail = pool_size - pool_used; - - if (size > avail) { - // round up to the next multiple of the granularity - size_t reserve_size = size - avail; - reserve_size = granularity * ((reserve_size + granularity - 1) / granularity); - - GGML_ASSERT(pool_size + reserve_size <= CUDA_POOL_VMM_MAX_SIZE); - - // allocate more physical memory - CUmemAllocationProp prop = {}; - prop.type = CU_MEM_ALLOCATION_TYPE_PINNED; - prop.location.type = CU_MEM_LOCATION_TYPE_DEVICE; - prop.location.id = device; - CUmemGenericAllocationHandle handle; - CU_CHECK(cuMemCreate(&handle, reserve_size, &prop, 0)); - - // reserve virtual address space (if not already reserved) - if (pool_addr == 0) { - CU_CHECK(cuMemAddressReserve(&pool_addr, CUDA_POOL_VMM_MAX_SIZE, 0, 0, 0)); - } - - // map at the end of the pool - CU_CHECK(cuMemMap(pool_addr + pool_size, reserve_size, 0, handle, 0)); - - // the memory allocation handle is no longer needed after mapping - CU_CHECK(cuMemRelease(handle)); - - // set access - CUmemAccessDesc access = {}; - access.location.type = CU_MEM_LOCATION_TYPE_DEVICE; - access.location.id = device; - access.flags = CU_MEM_ACCESS_FLAGS_PROT_READWRITE; - CU_CHECK(cuMemSetAccess(pool_addr + pool_size, reserve_size, &access, 1)); - - // add to the pool - pool_size += reserve_size; - - //printf("cuda pool[%d]: size increased to %llu MB (reserved %llu MB)\n", - // device, (unsigned long long) (pool_size/1024/1024), - // (unsigned long long) (reserve_size/1024/1024)); - } - - GGML_ASSERT(pool_addr != 0); - - void * ptr = (void *) (pool_addr + pool_used); - *actual_size = size; - pool_used += size; - -#ifdef DEBUG_CUDA_MALLOC - printf("cuda pool[%d]: allocated %llu bytes at %llx\n", device, (unsigned long long) size, ptr); -#endif - - return ptr; - } - - void free(void * ptr, size_t size) override { -#ifdef DEBUG_CUDA_MALLOC - printf("cuda pool[%d]: freed %llu bytes at %llx\n", device, (unsigned long long) size, ptr); -#endif - - pool_used -= size; - - // all deallocations must be in reverse order of the allocations - GGML_ASSERT(ptr == (void *) (pool_addr + pool_used)); - } -}; -#endif // !defined(GGML_USE_HIPBLAS) - -std::unique_ptr ggml_backend_cuda_context::new_pool_for_device(int device) { -#if !defined(GGML_USE_HIPBLAS) - if (ggml_cuda_info().devices[device].vmm) { - return std::unique_ptr(new ggml_cuda_pool_vmm(device)); - } -#endif - return std::unique_ptr(new ggml_cuda_pool_leg(device)); -} - -// cuda buffer - -struct ggml_backend_cuda_buffer_context { - int device; - void * dev_ptr = nullptr; - std::string name; - - ggml_backend_cuda_buffer_context(int device, void * dev_ptr) : - device(device), dev_ptr(dev_ptr), - name(GGML_CUDA_NAME + std::to_string(device)) { - } - - ~ggml_backend_cuda_buffer_context() { - CUDA_CHECK(cudaFree(dev_ptr)); - } -}; - -GGML_CALL static const char * ggml_backend_cuda_buffer_get_name(ggml_backend_buffer_t buffer) { - ggml_backend_cuda_buffer_context * ctx = (ggml_backend_cuda_buffer_context *)buffer->context; - return ctx->name.c_str(); -} - -GGML_CALL static bool ggml_backend_buffer_is_cuda(ggml_backend_buffer_t buffer) { - return buffer->iface.get_name == ggml_backend_cuda_buffer_get_name; -} - -GGML_CALL static void ggml_backend_cuda_buffer_free_buffer(ggml_backend_buffer_t buffer) { - ggml_backend_cuda_buffer_context * ctx = (ggml_backend_cuda_buffer_context *)buffer->context; - delete ctx; -} - -GGML_CALL static void * ggml_backend_cuda_buffer_get_base(ggml_backend_buffer_t buffer) { - ggml_backend_cuda_buffer_context * ctx = (ggml_backend_cuda_buffer_context *)buffer->context; - return ctx->dev_ptr; -} - -GGML_CALL static void ggml_backend_cuda_buffer_init_tensor(ggml_backend_buffer_t buffer, ggml_tensor * tensor) { - ggml_backend_cuda_buffer_context * ctx = (ggml_backend_cuda_buffer_context *)buffer->context; - - if (tensor->view_src != NULL) { - assert(tensor->view_src->buffer->buft == buffer->buft); - return; - } - - if (ggml_is_quantized(tensor->type)) { - // initialize padding to 0 to avoid possible NaN values - size_t original_size = ggml_nbytes(tensor); - size_t padded_size = ggml_backend_buft_get_alloc_size(buffer->buft, tensor); - - if (padded_size > original_size && tensor->view_src == nullptr) { - ggml_cuda_set_device(ctx->device); - CUDA_CHECK(cudaMemset((char *)tensor->data + original_size, 0, padded_size - original_size)); - } - } -} - -GGML_CALL static void ggml_backend_cuda_buffer_set_tensor(ggml_backend_buffer_t buffer, ggml_tensor * tensor, const void * data, size_t offset, size_t size) { - ggml_backend_cuda_buffer_context * ctx = (ggml_backend_cuda_buffer_context *)buffer->context; - - ggml_cuda_set_device(ctx->device); - CUDA_CHECK(cudaMemcpyAsync((char *)tensor->data + offset, data, size, cudaMemcpyHostToDevice, cudaStreamPerThread)); - CUDA_CHECK(cudaStreamSynchronize(cudaStreamPerThread)); -} - -GGML_CALL static void ggml_backend_cuda_buffer_get_tensor(ggml_backend_buffer_t buffer, const ggml_tensor * tensor, void * data, size_t offset, size_t size) { - ggml_backend_cuda_buffer_context * ctx = (ggml_backend_cuda_buffer_context *)buffer->context; - - ggml_cuda_set_device(ctx->device); - CUDA_CHECK(cudaMemcpyAsync(data, (const char *)tensor->data + offset, size, cudaMemcpyDeviceToHost, cudaStreamPerThread)); - CUDA_CHECK(cudaStreamSynchronize(cudaStreamPerThread)); -} - -GGML_CALL static bool ggml_backend_cuda_buffer_cpy_tensor(ggml_backend_buffer_t buffer, const ggml_tensor * src, ggml_tensor * dst) { - if (ggml_backend_buffer_is_cuda(src->buffer)) { - ggml_backend_cuda_buffer_context * src_ctx = (ggml_backend_cuda_buffer_context *)src->buffer->context; - ggml_backend_cuda_buffer_context * dst_ctx = (ggml_backend_cuda_buffer_context *)dst->buffer->context; - if (src_ctx->device == dst_ctx->device) { - CUDA_CHECK(cudaMemcpyAsync(dst->data, src->data, ggml_nbytes(src), cudaMemcpyDeviceToDevice, cudaStreamPerThread)); - } else { -#ifdef GGML_CUDA_NO_PEER_COPY - return false; -#else - CUDA_CHECK(cudaMemcpyPeerAsync(dst->data, dst_ctx->device, src->data, src_ctx->device, ggml_nbytes(src), cudaStreamPerThread)); -#endif - } - CUDA_CHECK(cudaStreamSynchronize(cudaStreamPerThread)); - return true; - } - return false; - - GGML_UNUSED(buffer); -} - -GGML_CALL static void ggml_backend_cuda_buffer_clear(ggml_backend_buffer_t buffer, uint8_t value) { - ggml_backend_cuda_buffer_context * ctx = (ggml_backend_cuda_buffer_context *)buffer->context; - - ggml_cuda_set_device(ctx->device); - CUDA_CHECK(cudaDeviceSynchronize()); - CUDA_CHECK(cudaMemset(ctx->dev_ptr, value, buffer->size)); - CUDA_CHECK(cudaDeviceSynchronize()); -} - -static ggml_backend_buffer_i ggml_backend_cuda_buffer_interface = { - /* .get_name = */ ggml_backend_cuda_buffer_get_name, - /* .free_buffer = */ ggml_backend_cuda_buffer_free_buffer, - /* .get_base = */ ggml_backend_cuda_buffer_get_base, - /* .init_tensor = */ ggml_backend_cuda_buffer_init_tensor, - /* .set_tensor = */ ggml_backend_cuda_buffer_set_tensor, - /* .get_tensor = */ ggml_backend_cuda_buffer_get_tensor, - /* .cpy_tensor = */ ggml_backend_cuda_buffer_cpy_tensor, - /* .clear = */ ggml_backend_cuda_buffer_clear, - /* .reset = */ NULL, -}; - -// cuda buffer type -struct ggml_backend_cuda_buffer_type_context { - int device; - std::string name; -}; - -GGML_CALL static const char * ggml_backend_cuda_buffer_type_name(ggml_backend_buffer_type_t buft) { - ggml_backend_cuda_buffer_type_context * ctx = (ggml_backend_cuda_buffer_type_context *)buft->context; - - return ctx->name.c_str(); -} - -GGML_CALL static ggml_backend_buffer_t ggml_backend_cuda_buffer_type_alloc_buffer(ggml_backend_buffer_type_t buft, size_t size) { - ggml_backend_cuda_buffer_type_context * buft_ctx = (ggml_backend_cuda_buffer_type_context *)buft->context; - - ggml_cuda_set_device(buft_ctx->device); - - size = std::max(size, (size_t)1); // cudaMalloc returns null for size 0 - - void * dev_ptr; - cudaError_t err = cudaMalloc(&dev_ptr, size); - if (err != cudaSuccess) { - fprintf(stderr, "%s: allocating %.2f MiB on device %d: cudaMalloc failed: %s\n", __func__, size/1024.0/1024.0, buft_ctx->device, cudaGetErrorString(err)); - return nullptr; - } - - ggml_backend_cuda_buffer_context * ctx = new ggml_backend_cuda_buffer_context(buft_ctx->device, dev_ptr); - - return ggml_backend_buffer_init(buft, ggml_backend_cuda_buffer_interface, ctx, size); -} - -GGML_CALL static size_t ggml_backend_cuda_buffer_type_get_alignment(ggml_backend_buffer_type_t buft) { - return 128; - - GGML_UNUSED(buft); -} - -GGML_CALL static size_t ggml_backend_cuda_buffer_type_get_alloc_size(ggml_backend_buffer_type_t buft, const ggml_tensor * tensor) { - size_t size = ggml_nbytes(tensor); - int64_t ne0 = tensor->ne[0]; - - if (ggml_is_quantized(tensor->type)) { - if (ne0 % MATRIX_ROW_PADDING != 0) { - size += ggml_row_size(tensor->type, MATRIX_ROW_PADDING - ne0 % MATRIX_ROW_PADDING); - } - } - - return size; - - GGML_UNUSED(buft); -} - -GGML_CALL static bool ggml_backend_cuda_buffer_type_supports_backend(ggml_backend_buffer_type_t buft, ggml_backend_t backend) { - if (!ggml_backend_is_cuda(backend)) { - return false; - } - - ggml_backend_cuda_buffer_type_context * buft_ctx = (ggml_backend_cuda_buffer_type_context *)buft->context; - ggml_backend_cuda_context * cuda_ctx = (ggml_backend_cuda_context *)backend->context; - - return buft_ctx->device == cuda_ctx->device; -} - -static ggml_backend_buffer_type_i ggml_backend_cuda_buffer_type_interface = { - /* .get_name = */ ggml_backend_cuda_buffer_type_name, - /* .alloc_buffer = */ ggml_backend_cuda_buffer_type_alloc_buffer, - /* .get_alignment = */ ggml_backend_cuda_buffer_type_get_alignment, - /* .get_max_size = */ NULL, // defaults to SIZE_MAX - /* .get_alloc_size = */ ggml_backend_cuda_buffer_type_get_alloc_size, - /* .supports_backend = */ ggml_backend_cuda_buffer_type_supports_backend, - /* .is_host = */ NULL, -}; - -GGML_CALL ggml_backend_buffer_type_t ggml_backend_cuda_buffer_type(int device) { - static std::mutex mutex; - std::lock_guard lock(mutex); - - if (device >= ggml_backend_cuda_get_device_count()) { - return nullptr; - } - - static ggml_backend_buffer_type ggml_backend_cuda_buffer_types[GGML_CUDA_MAX_DEVICES]; - - static bool ggml_backend_cuda_buffer_type_initialized = false; - - if (!ggml_backend_cuda_buffer_type_initialized) { - for (int i = 0; i < GGML_CUDA_MAX_DEVICES; i++) { - ggml_backend_cuda_buffer_types[i] = { - /* .iface = */ ggml_backend_cuda_buffer_type_interface, - /* .context = */ new ggml_backend_cuda_buffer_type_context{i, GGML_CUDA_NAME + std::to_string(i)}, - }; - } - ggml_backend_cuda_buffer_type_initialized = true; - } - - return &ggml_backend_cuda_buffer_types[device]; -} - -// cuda split buffer - -static int64_t get_row_rounding(ggml_type type, const std::array & tensor_split) { - int64_t min_compute_capability = INT_MAX; - int64_t max_compute_capability = INT_MIN; - for (int id = 0; id < ggml_backend_cuda_get_device_count(); ++id) { - if (tensor_split[id] < (id + 1 < ggml_backend_cuda_get_device_count() ? tensor_split[id + 1] : 1.0f)) { - if (min_compute_capability > ggml_cuda_info().devices[id].cc) { - min_compute_capability = ggml_cuda_info().devices[id].cc; - } - if (max_compute_capability < ggml_cuda_info().devices[id].cc) { - max_compute_capability = ggml_cuda_info().devices[id].cc; - } - } - } - -#if defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__) - switch(type) { - case GGML_TYPE_Q4_0: - case GGML_TYPE_Q4_1: - case GGML_TYPE_Q5_0: - case GGML_TYPE_Q5_1: - case GGML_TYPE_Q8_0: - return max_compute_capability >= CC_RDNA2 ? 128 : 64; - case GGML_TYPE_F16: - case GGML_TYPE_F32: - return 1; - case GGML_TYPE_Q2_K: - return max_compute_capability >= CC_RDNA2 ? 128 : 32; - case GGML_TYPE_Q3_K: - return min_compute_capability < CC_RDNA2 ? 128 : 64; - case GGML_TYPE_Q4_K: - case GGML_TYPE_Q5_K: - case GGML_TYPE_Q6_K: - case GGML_TYPE_IQ2_XXS: - case GGML_TYPE_IQ2_XS: - case GGML_TYPE_IQ2_S: - case GGML_TYPE_IQ3_XXS: - case GGML_TYPE_IQ1_S: - case GGML_TYPE_IQ1_M: - case GGML_TYPE_IQ4_NL: - case GGML_TYPE_IQ4_XS: - case GGML_TYPE_IQ3_S: - return max_compute_capability >= CC_RDNA2 ? 128 : 64; - default: - GGML_ASSERT(false); - } -#else - switch(type) { - case GGML_TYPE_Q4_0: - case GGML_TYPE_Q4_1: - return max_compute_capability >= CC_VOLTA ? 128 : 64; - case GGML_TYPE_Q5_0: - case GGML_TYPE_Q5_1: - case GGML_TYPE_Q8_0: - return 64; - case GGML_TYPE_F16: - case GGML_TYPE_F32: - return 1; - case GGML_TYPE_Q2_K: - case GGML_TYPE_Q3_K: - case GGML_TYPE_Q4_K: - case GGML_TYPE_Q5_K: - case GGML_TYPE_IQ2_XXS: - case GGML_TYPE_IQ2_XS: - case GGML_TYPE_IQ2_S: - case GGML_TYPE_IQ3_XXS: - case GGML_TYPE_IQ1_S: - case GGML_TYPE_IQ1_M: - case GGML_TYPE_IQ4_NL: - case GGML_TYPE_IQ4_XS: - case GGML_TYPE_IQ3_S: - return max_compute_capability >= CC_VOLTA ? 128 : 64; - case GGML_TYPE_Q6_K: - return 64; - default: - GGML_ASSERT(false); - } -#endif // defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__) -} - -static void get_row_split(int64_t * row_low, int64_t * row_high, const ggml_tensor * tensor, const std::array & tensor_split, int id) { - const int64_t nrows = ggml_nrows(tensor); - const int64_t rounding = get_row_rounding(tensor->type, tensor_split); - - *row_low = id == 0 ? 0 : nrows*tensor_split[id]; - *row_low -= *row_low % rounding; - - if (id == ggml_backend_cuda_get_device_count() - 1) { - *row_high = nrows; - } else { - *row_high = nrows*tensor_split[id + 1]; - *row_high -= *row_high % rounding; - } -} - -static size_t ggml_nbytes_split(const struct ggml_tensor * tensor, int nrows_split) { - static_assert(GGML_MAX_DIMS == 4, "GGML_MAX_DIMS is not 4 - update this function"); - - return nrows_split*ggml_row_size(tensor->type, tensor->ne[0]); -} - -struct ggml_backend_cuda_split_buffer_type_context { - std::array tensor_split; -}; - -struct ggml_backend_cuda_split_buffer_context { - ~ggml_backend_cuda_split_buffer_context() { - for (ggml_tensor_extra_gpu * extra : tensor_extras) { - for (int id = 0; id < GGML_CUDA_MAX_DEVICES; ++id) { - for (int64_t is = 0; is < GGML_CUDA_MAX_STREAMS; ++is) { - if (extra->events[id][is] != nullptr) { - CUDA_CHECK(cudaEventDestroy(extra->events[id][is])); - } - } - if (extra->data_device[id] != nullptr) { - CUDA_CHECK(cudaFree(extra->data_device[id])); - } - } - delete extra; - } - } - - std::vector tensor_extras; -}; - -GGML_CALL static const char * ggml_backend_cuda_split_buffer_get_name(ggml_backend_buffer_t buffer) { - return GGML_CUDA_NAME "_Split"; - - GGML_UNUSED(buffer); -} - -static bool ggml_backend_buffer_is_cuda_split(ggml_backend_buffer_t buffer) { - return buffer->iface.get_name == ggml_backend_cuda_split_buffer_get_name; - GGML_UNUSED(ggml_backend_buffer_is_cuda_split); // only used in debug builds currently, avoid unused function warning in release builds -} - -GGML_CALL static void ggml_backend_cuda_split_buffer_free_buffer(ggml_backend_buffer_t buffer) { - ggml_backend_cuda_split_buffer_context * ctx = (ggml_backend_cuda_split_buffer_context *)buffer->context; - delete ctx; -} - -GGML_CALL static void * ggml_backend_cuda_split_buffer_get_base(ggml_backend_buffer_t buffer) { - // the pointers are stored in the tensor extras, this is just a dummy address and never dereferenced - return (void *)0x1000; - - GGML_UNUSED(buffer); -} - -GGML_CALL static void ggml_backend_cuda_split_buffer_init_tensor(ggml_backend_buffer_t buffer, ggml_tensor * tensor) { - GGML_ASSERT(tensor->view_src == nullptr); // views of split tensors are not supported - - ggml_backend_cuda_split_buffer_context * ctx = (ggml_backend_cuda_split_buffer_context *)buffer->context; - ggml_backend_cuda_split_buffer_type_context * buft_ctx = (ggml_backend_cuda_split_buffer_type_context *)buffer->buft->context; - - const int64_t ne0 = tensor->ne[0]; - - ggml_tensor_extra_gpu * extra = new ggml_tensor_extra_gpu{}; - ctx->tensor_extras.push_back(extra); - - for (int id = 0; id < ggml_backend_cuda_get_device_count(); ++id) { - int64_t row_low, row_high; - get_row_split(&row_low, &row_high, tensor, buft_ctx->tensor_split, id); - - int64_t nrows_split = row_high - row_low; - if (nrows_split == 0) { - continue; - } - - size_t size = ggml_nbytes_split(tensor, nrows_split); - const size_t original_size = size; - - // pad last row to a multiple of 512 elements to avoid out-of-bounds memory accesses - if (ne0 % MATRIX_ROW_PADDING != 0) { - size += ggml_row_size(tensor->type, MATRIX_ROW_PADDING - ne0 % MATRIX_ROW_PADDING); - } - - // FIXME: do not crash if cudaMalloc fails - // currently, init_tensor cannot fail, it needs to be fixed in ggml-backend first - ggml_cuda_set_device(id); - char * buf; - CUDA_CHECK(cudaMalloc(&buf, size)); - - // set padding to 0 to avoid possible NaN values - if (size > original_size) { - CUDA_CHECK(cudaMemset(buf + original_size, 0, size - original_size)); - } - - extra->data_device[id] = buf; - - for (int64_t is = 0; is < GGML_CUDA_MAX_STREAMS; ++is) { - CUDA_CHECK(cudaEventCreateWithFlags(&extra->events[id][is], cudaEventDisableTiming)); - } - } - tensor->extra = extra; -} - -GGML_CALL static void ggml_backend_cuda_split_buffer_set_tensor(ggml_backend_buffer_t buffer, ggml_tensor * tensor, const void * data, size_t offset, size_t size) { - // split tensors must always be set in their entirety at once - GGML_ASSERT(offset == 0); - GGML_ASSERT(size == ggml_nbytes(tensor)); - - ggml_backend_cuda_split_buffer_type_context * buft_ctx = (ggml_backend_cuda_split_buffer_type_context *)buffer->buft->context; - - const int64_t ne0 = tensor->ne[0]; - const size_t nb1 = tensor->nb[1]; - ggml_tensor_extra_gpu * extra = (ggml_tensor_extra_gpu *)tensor->extra; - - for (int id = 0; id < ggml_backend_cuda_get_device_count(); ++id) { - int64_t row_low, row_high; - get_row_split(&row_low, &row_high, tensor, buft_ctx->tensor_split, id); - - int64_t nrows_split = row_high - row_low; - if (nrows_split == 0) { - continue; - } - - const size_t offset_split = row_low*nb1; - size_t size = ggml_nbytes_split(tensor, nrows_split); - const size_t original_size = size; - - // pad last row to a multiple of 512 elements to avoid out-of-bounds memory accesses - if (ne0 % MATRIX_ROW_PADDING != 0) { - size += ggml_row_size(tensor->type, MATRIX_ROW_PADDING - ne0 % MATRIX_ROW_PADDING); - } - - const char * buf_host = (const char *)data + offset_split; - CUDA_CHECK(cudaMemcpyAsync(extra->data_device[id], buf_host, original_size, cudaMemcpyHostToDevice, cudaStreamPerThread)); - } - - for (int id = 0; id < ggml_backend_cuda_get_device_count(); ++id) { - CUDA_CHECK(cudaStreamSynchronize(cudaStreamPerThread)); - } -} - -GGML_CALL static void ggml_backend_cuda_split_buffer_get_tensor(ggml_backend_buffer_t buffer, const ggml_tensor * tensor, void * data, size_t offset, size_t size) { - // split tensors must always be set in their entirety at once - GGML_ASSERT(offset == 0); - GGML_ASSERT(size == ggml_nbytes(tensor)); - - ggml_backend_cuda_split_buffer_type_context * buft_ctx = (ggml_backend_cuda_split_buffer_type_context *)buffer->buft->context; - - const int64_t ne0 = tensor->ne[0]; - const size_t nb1 = tensor->nb[1]; - ggml_tensor_extra_gpu * extra = (ggml_tensor_extra_gpu *)tensor->extra; - - for (int id = 0; id < ggml_backend_cuda_get_device_count(); ++id) { - int64_t row_low, row_high; - get_row_split(&row_low, &row_high, tensor, buft_ctx->tensor_split, id); - - int64_t nrows_split = row_high - row_low; - if (nrows_split == 0) { - continue; - } - - const size_t offset_split = row_low*nb1; - size_t size = ggml_nbytes_split(tensor, nrows_split); - const size_t original_size = size; - - // pad last row to a multiple of 512 elements to avoid out-of-bounds memory accesses - if (ne0 % MATRIX_ROW_PADDING != 0) { - size += ggml_row_size(tensor->type, MATRIX_ROW_PADDING - ne0 % MATRIX_ROW_PADDING); - } - - char * buf_host = (char *)data + offset_split; - CUDA_CHECK(cudaMemcpyAsync(buf_host, extra->data_device[id], original_size, cudaMemcpyDeviceToHost, cudaStreamPerThread)); - } - - for (int id = 0; id < ggml_backend_cuda_get_device_count(); ++id) { - CUDA_CHECK(cudaStreamSynchronize(cudaStreamPerThread)); - } -} - -GGML_CALL static void ggml_backend_cuda_split_buffer_clear(ggml_backend_buffer_t buffer, uint8_t value) { - GGML_UNUSED(buffer); - GGML_UNUSED(value); -} - -static struct ggml_backend_buffer_i ggml_backend_cuda_split_buffer_interface = { - /* .get_name = */ ggml_backend_cuda_split_buffer_get_name, - /* .free_buffer = */ ggml_backend_cuda_split_buffer_free_buffer, - /* .get_base = */ ggml_backend_cuda_split_buffer_get_base, - /* .init_tensor = */ ggml_backend_cuda_split_buffer_init_tensor, - /* .set_tensor = */ ggml_backend_cuda_split_buffer_set_tensor, - /* .get_tensor = */ ggml_backend_cuda_split_buffer_get_tensor, - /* .cpy_tensor = */ NULL, - /* .clear = */ ggml_backend_cuda_split_buffer_clear, - /* .reset = */ NULL, -}; - -// cuda split buffer type - -GGML_CALL static const char * ggml_backend_cuda_split_buffer_type_name(ggml_backend_buffer_type_t buft) { - return GGML_CUDA_NAME "_Split"; - - GGML_UNUSED(buft); -} - -GGML_CALL static ggml_backend_buffer_t ggml_backend_cuda_split_buffer_type_alloc_buffer(ggml_backend_buffer_type_t buft, size_t size) { - // since we don't know the exact split after rounding, we cannot allocate the device buffers at this point - // instead, we allocate them for each tensor separately in init_tensor - // however, the size still represents the maximum cumulative size of all the device buffers after the tensors are allocated, - // as returned by get_alloc_size. this limit is enforced during tensor allocation by ggml-alloc, so it must be correct. - ggml_backend_cuda_split_buffer_context * ctx = new ggml_backend_cuda_split_buffer_context(); - - return ggml_backend_buffer_init(buft, ggml_backend_cuda_split_buffer_interface, ctx, size); -} - -GGML_CALL static size_t ggml_backend_cuda_split_buffer_type_get_alignment(ggml_backend_buffer_type_t buft) { - return 128; - - GGML_UNUSED(buft); -} - -GGML_CALL static size_t ggml_backend_cuda_split_buffer_type_get_alloc_size(ggml_backend_buffer_type_t buft, const ggml_tensor * tensor) { - ggml_backend_cuda_split_buffer_type_context * ctx = (ggml_backend_cuda_split_buffer_type_context *)buft->context; - - size_t total_size = 0; - - const int64_t ne0 = tensor->ne[0]; - - for (int id = 0; id < ggml_backend_cuda_get_device_count(); ++id) { - int64_t row_low, row_high; - get_row_split(&row_low, &row_high, tensor, ctx->tensor_split, id); - - int64_t nrows_split = row_high - row_low; - if (nrows_split == 0) { - continue; - } - - total_size += ggml_nbytes_split(tensor, nrows_split); - - // pad last row to a multiple of 512 elements to avoid out-of-bounds memory accesses - if (ne0 % MATRIX_ROW_PADDING != 0) { - total_size += ggml_row_size(tensor->type, MATRIX_ROW_PADDING - ne0 % MATRIX_ROW_PADDING); - } - } - - return total_size; -} - -GGML_CALL static bool ggml_backend_cuda_split_buffer_type_supports_backend(ggml_backend_buffer_type_t buft, ggml_backend_t backend) { - return ggml_backend_is_cuda(backend); - - GGML_UNUSED(buft); -} - -GGML_CALL static bool ggml_backend_cuda_split_buffer_type_is_host(ggml_backend_buffer_type_t buft) { - return false; - - GGML_UNUSED(buft); -} - -static ggml_backend_buffer_type_i ggml_backend_cuda_split_buffer_type_interface = { - /* .get_name = */ ggml_backend_cuda_split_buffer_type_name, - /* .alloc_buffer = */ ggml_backend_cuda_split_buffer_type_alloc_buffer, - /* .get_alignment = */ ggml_backend_cuda_split_buffer_type_get_alignment, - /* .get_max_size = */ NULL, // defaults to SIZE_MAX - /* .get_alloc_size = */ ggml_backend_cuda_split_buffer_type_get_alloc_size, - /* .supports_backend = */ ggml_backend_cuda_split_buffer_type_supports_backend, - /* .is_host = */ ggml_backend_cuda_split_buffer_type_is_host, -}; - -GGML_CALL ggml_backend_buffer_type_t ggml_backend_cuda_split_buffer_type(const float * tensor_split) { - static std::mutex mutex; - std::lock_guard lock(mutex); - - static std::map, struct ggml_backend_buffer_type> buft_map; - - std::array tensor_split_arr = {}; - - bool all_zero = tensor_split == nullptr || std::all_of(tensor_split, tensor_split + GGML_CUDA_MAX_DEVICES, [](float x) { return x == 0.0f; }); - if (all_zero) { - tensor_split_arr = ggml_cuda_info().default_tensor_split; - } else { - float split_sum = 0.0f; - for (int i = 0; i < ggml_backend_cuda_get_device_count(); ++i) { - tensor_split_arr[i] = split_sum; - split_sum += tensor_split[i]; - } - for (int i = 0; i < ggml_backend_cuda_get_device_count(); ++i) { - tensor_split_arr[i] /= split_sum; - } - } - - auto it = buft_map.find(tensor_split_arr); - if (it != buft_map.end()) { - return &it->second; - } - - struct ggml_backend_buffer_type buft { - /* .iface = */ ggml_backend_cuda_split_buffer_type_interface, - /* .context = */ new ggml_backend_cuda_split_buffer_type_context{tensor_split_arr}, - }; - - auto result = buft_map.emplace(tensor_split_arr, buft); - return &result.first->second; -} - -// host buffer type - -GGML_CALL static const char * ggml_backend_cuda_host_buffer_type_name(ggml_backend_buffer_type_t buft) { - return GGML_CUDA_NAME "_Host"; - - GGML_UNUSED(buft); -} - -GGML_CALL static const char * ggml_backend_cuda_host_buffer_name(ggml_backend_buffer_t buffer) { - return GGML_CUDA_NAME "_Host"; - - GGML_UNUSED(buffer); -} - -GGML_CALL static void ggml_backend_cuda_host_buffer_free_buffer(ggml_backend_buffer_t buffer) { - CUDA_CHECK(cudaFreeHost(buffer->context)); -} - -static void * ggml_cuda_host_malloc(size_t size) { - if (getenv("GGML_CUDA_NO_PINNED") != nullptr) { - return nullptr; - } - - void * ptr = nullptr; - cudaError_t err = cudaMallocHost((void **) &ptr, size); - if (err != cudaSuccess) { - // clear the error - cudaGetLastError(); - fprintf(stderr, "%s: warning: failed to allocate %.2f MiB of pinned memory: %s\n", __func__, - size/1024.0/1024.0, cudaGetErrorString(err)); - return nullptr; - } - - return ptr; -} - -GGML_CALL static ggml_backend_buffer_t ggml_backend_cuda_host_buffer_type_alloc_buffer(ggml_backend_buffer_type_t buft, size_t size) { - void * ptr = ggml_cuda_host_malloc(size); - - if (ptr == nullptr) { - // fallback to cpu buffer - return ggml_backend_buft_alloc_buffer(ggml_backend_cpu_buffer_type(), size); - } - - ggml_backend_buffer_t buffer = ggml_backend_cpu_buffer_from_ptr(ptr, size); - buffer->buft = buft; - buffer->iface.get_name = ggml_backend_cuda_host_buffer_name; - buffer->iface.free_buffer = ggml_backend_cuda_host_buffer_free_buffer; - - return buffer; -} - -GGML_CALL ggml_backend_buffer_type_t ggml_backend_cuda_host_buffer_type() { - static struct ggml_backend_buffer_type ggml_backend_cuda_buffer_type_host = { - /* .iface = */ { - /* .get_name = */ ggml_backend_cuda_host_buffer_type_name, - /* .alloc_buffer = */ ggml_backend_cuda_host_buffer_type_alloc_buffer, - /* .get_alignment = */ ggml_backend_cpu_buffer_type()->iface.get_alignment, - /* .get_max_size = */ NULL, // defaults to SIZE_MAX - /* .get_alloc_size = */ ggml_backend_cpu_buffer_type()->iface.get_alloc_size, - /* .supports_backend = */ ggml_backend_cpu_buffer_type()->iface.supports_backend, - /* .is_host = */ ggml_backend_cpu_buffer_type()->iface.is_host, - }, - /* .context = */ nullptr, - }; - - return &ggml_backend_cuda_buffer_type_host; -} - -//static bool ggml_backend_buffer_is_cuda_host(ggml_backend_buffer_t buffer) { -// return buffer->buft->iface.get_name == ggml_backend_cuda_host_buffer_type_name; -//} - -/// kernels - -typedef void (*ggml_cuda_op_mul_mat_t)( - ggml_backend_cuda_context & ctx, - const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst, const char * src0_dd_i, const float * src1_ddf_i, - const char * src1_ddq_i, float * dst_dd_i, const int64_t row_low, const int64_t row_high, const int64_t src1_ncols, - const int64_t src1_padded_row_size, cudaStream_t stream); - -#ifndef GGML_CUDA_PEER_MAX_BATCH_SIZE -#define GGML_CUDA_PEER_MAX_BATCH_SIZE 128 -#endif // GGML_CUDA_PEER_MAX_BATCH_SIZE - -#define MUL_MAT_SRC1_COL_STRIDE 128 - -static __global__ void mul_mat_p021_f16_f32( - const void * __restrict__ vx, const float * __restrict__ y, float * __restrict__ dst, - const int ncols_x, const int nrows_x, const int nchannels_x, const int nchannels_y) { - - const half * x = (const half *) vx; - - const int row_x = blockDim.y*blockIdx.y + threadIdx.y; - const int channel = blockDim.z*blockIdx.z + threadIdx.z; - const int channel_x = channel / (nchannels_y / nchannels_x); - - const int nrows_y = ncols_x; - const int nrows_dst = nrows_x; - const int row_dst = row_x; - - float tmp = 0.0f; - - for (int col_x0 = 0; col_x0 < ncols_x; col_x0 += blockDim.x) { - const int col_x = col_x0 + threadIdx.x; - - if (col_x >= ncols_x) { - break; - } - - // x is transposed and permuted - const int ix = row_x*nchannels_x*ncols_x + channel_x*ncols_x + col_x; - const float xi = __half2float(x[ix]); - - const int row_y = col_x; - - // y is not transposed but permuted - const int iy = channel*nrows_y + row_y; - - tmp += xi * y[iy]; - } - - // dst is not transposed and not permuted - const int idst = channel*nrows_dst + row_dst; - - // sum up partial sums and write back result - tmp = warp_reduce_sum(tmp); - - if (threadIdx.x == 0) { - dst[idst] = tmp; - } -} - -static __global__ void mul_mat_vec_nc_f16_f32( // nc == non-contiguous - const void * __restrict__ vx, const float * __restrict__ y, float * __restrict__ dst, const int ncols_x, const int nrows_x, - const int row_stride_x, const int channel_stride_x, const int channel_x_divisor) { - - const half * x = (const half *) vx; - - const int row_x = blockDim.y*blockIdx.y + threadIdx.y; - const int channel = blockDim.z*blockIdx.z + threadIdx.z; - const int channel_x = channel / channel_x_divisor; - - const int nrows_y = ncols_x; - const int nrows_dst = nrows_x; - const int row_dst = row_x; - - const int idst = channel*nrows_dst + row_dst; - - float tmp = 0.0f; - - for (int col_x0 = 0; col_x0 < ncols_x; col_x0 += blockDim.x) { - const int col_x = col_x0 + threadIdx.x; - - if (col_x >= ncols_x) { - break; - } - - const int row_y = col_x; - - const int ix = channel_x*channel_stride_x + row_x*row_stride_x + col_x; - const int iy = channel*nrows_y + row_y; - - const float xi = __half2float(x[ix]); - - tmp += xi * y[iy]; - } - - // sum up partial sums and write back result - tmp = warp_reduce_sum(tmp); - - if (threadIdx.x == 0) { - dst[idst] = tmp; - } -} - -static void ggml_mul_mat_p021_f16_f32_cuda( - const void * vx, const float * y, float * dst, const int ncols_x, const int nrows_x, - const int nchannels_x, const int nchannels_y, cudaStream_t stream) { - - const dim3 block_nums(1, nrows_x, nchannels_y); - const dim3 block_dims(WARP_SIZE, 1, 1); - mul_mat_p021_f16_f32<<>>(vx, y, dst, ncols_x, nrows_x, nchannels_x, nchannels_y); -} - -static void ggml_mul_mat_vec_nc_f16_f32_cuda( - const void * vx, const float * y, float * dst, const int ncols_x, const int nrows_x, const int row_stride_x, - const int nchannels_x, const int nchannels_y, const int channel_stride_x, cudaStream_t stream) { - - const dim3 block_nums(1, nrows_x, nchannels_y); - const dim3 block_dims(WARP_SIZE, 1, 1); - mul_mat_vec_nc_f16_f32<<>> - (vx, y, dst, ncols_x, nrows_x, row_stride_x, channel_stride_x, nchannels_y/nchannels_x); -} - -static cudaError_t ggml_cuda_cpy_tensor_2d( - void * dst, const struct ggml_tensor * src, int64_t i3, int64_t i2, int64_t i1_low, int64_t i1_high, cudaStream_t stream) { - - GGML_ASSERT(ggml_backend_buffer_is_cuda(src->buffer)); - char * src_ptr = (char *) src->data; - char * dst_ptr = (char *) dst; - - const int64_t ne0 = src->ne[0]; - const int64_t nb0 = src->nb[0]; - const int64_t nb1 = src->nb[1]; - const int64_t nb2 = src->nb[2]; - const int64_t nb3 = src->nb[3]; - const enum ggml_type type = src->type; - const int64_t ts = ggml_type_size(type); - const int64_t bs = ggml_blck_size(type); - int64_t i1_diff = i1_high - i1_low; - - const char * x = src_ptr + i1_low*nb1 + i2*nb2 + i3*nb3; - if (nb0 == ts && nb1 == ts*ne0/bs) { - return cudaMemcpyAsync(dst_ptr, x, i1_diff*nb1, cudaMemcpyDeviceToDevice, stream); - } else if (nb0 == ts) { - return cudaMemcpy2DAsync(dst_ptr, ts*ne0/bs, x, nb1, ts*ne0/bs, i1_diff, cudaMemcpyDeviceToDevice, stream); - } else { - for (int64_t i1 = 0; i1 < i1_diff; i1++) { - const void * rx = (const void *) ((const char *) x + i1*nb1); - void * rd = (void *) (dst_ptr + i1*ts*ne0/bs); - // pretend the row is a matrix with cols=1 - cudaError_t r = cudaMemcpy2DAsync(rd, ts/bs, rx, nb0, ts/bs, ne0, cudaMemcpyDeviceToDevice, stream); - if (r != cudaSuccess) { - return r; - } - } - return cudaSuccess; - } -} - -static void ggml_cuda_op_mul_mat_cublas( - ggml_backend_cuda_context & ctx, - const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst, const char * src0_dd_i, const float * src1_ddf_i, - const char * src1_ddq_i, float * dst_dd_i, const int64_t row_low, const int64_t row_high, const int64_t src1_ncols, - const int64_t src1_padded_row_size, cudaStream_t stream) { - - GGML_ASSERT(src0_dd_i != nullptr); - GGML_ASSERT(src1_ddf_i != nullptr); - GGML_ASSERT(dst_dd_i != nullptr); - - const int64_t ne00 = src0->ne[0]; - const int64_t ne10 = src1->ne[0]; - - const int64_t ne0 = dst->ne[0]; - - const int64_t row_diff = row_high - row_low; - - int id = ggml_cuda_get_device(); - - // the main device has a larger memory buffer to hold the results from all GPUs - // ldc == nrows of the matrix that cuBLAS writes into - int64_t ldc = id == ctx.device ? ne0 : row_diff; - - const int compute_capability = ggml_cuda_info().devices[id].cc; - - if (compute_capability >= CC_VOLTA && (src0->type == GGML_TYPE_F16 || ggml_is_quantized(src0->type)) && ggml_is_contiguous(src0) && row_diff == src0->ne[1] && dst->op_params[0] == GGML_PREC_DEFAULT) { - // convert src0 and src1 to fp16, multiply as fp16, convert dst to fp32 - ggml_cuda_pool_alloc src0_as_f16(ctx.pool(id)); - if (src0->type != GGML_TYPE_F16) { - const to_fp16_cuda_t to_fp16_cuda = ggml_get_to_fp16_cuda(src0->type); - GGML_ASSERT(to_fp16_cuda != nullptr); - size_t ne = row_diff*ne00; - src0_as_f16.alloc(ne); - to_fp16_cuda(src0_dd_i, src0_as_f16.get(), ne, stream); - } - const half * src0_ptr = src0->type == GGML_TYPE_F16 ? (const half *) src0_dd_i : src0_as_f16.get(); - - ggml_cuda_pool_alloc src1_as_f16(ctx.pool(id)); - if (src1->type != GGML_TYPE_F16) { - const to_fp16_cuda_t to_fp16_cuda = ggml_get_to_fp16_cuda(src1->type); - GGML_ASSERT(to_fp16_cuda != nullptr); - size_t ne = src1_ncols*ne10; - src1_as_f16.alloc(ne); - to_fp16_cuda(src1_ddf_i, src1_as_f16.get(), ne, stream); - } - const half * src1_ptr = src1->type == GGML_TYPE_F16 ? (const half *) src1_ddf_i : src1_as_f16.get(); - ggml_cuda_pool_alloc dst_f16(ctx.pool(id), row_diff*src1_ncols); - - const half alpha_f16 = 1.0f; - const half beta_f16 = 0.0f; - - CUBLAS_CHECK(cublasSetStream(ctx.cublas_handle(id), stream)); - CUBLAS_CHECK( - cublasGemmEx(ctx.cublas_handle(id), CUBLAS_OP_T, CUBLAS_OP_N, - row_diff, src1_ncols, ne10, - &alpha_f16, src0_ptr, CUDA_R_16F, ne00, - src1_ptr, CUDA_R_16F, ne10, - &beta_f16, dst_f16.get(), CUDA_R_16F, ldc, - CUBLAS_COMPUTE_16F, - CUBLAS_GEMM_DEFAULT_TENSOR_OP)); - - const to_fp32_cuda_t to_fp32_cuda = ggml_get_to_fp32_cuda(GGML_TYPE_F16); - to_fp32_cuda(dst_f16.get(), dst_dd_i, row_diff*src1_ncols, stream); - } else { - ggml_cuda_pool_alloc src0_ddq_as_f32(ctx.pool(id)); - ggml_cuda_pool_alloc src1_ddq_as_f32(ctx.pool(id)); - - if (src0->type != GGML_TYPE_F32) { - const to_fp32_cuda_t to_fp32_cuda = ggml_get_to_fp32_cuda(src0->type); - GGML_ASSERT(to_fp32_cuda != nullptr); - src0_ddq_as_f32.alloc(row_diff*ne00); - to_fp32_cuda(src0_dd_i, src0_ddq_as_f32.get(), row_diff*ne00, stream); - } - if (src1->type != GGML_TYPE_F32) { - const to_fp32_cuda_t to_fp32_cuda = ggml_get_to_fp32_cuda(src1->type); - GGML_ASSERT(to_fp32_cuda != nullptr); - src1_ddq_as_f32.alloc(src1_ncols*ne10); - to_fp32_cuda(src1_ddf_i, src1_ddq_as_f32.get(), src1_ncols*ne10, stream); - } - - const float * src0_ddf_i = src0->type == GGML_TYPE_F32 ? (const float *) src0_dd_i : src0_ddq_as_f32.get(); - const float * src1_ddf1_i = src1->type == GGML_TYPE_F32 ? (const float *) src1_ddf_i : src1_ddq_as_f32.get(); - - const float alpha = 1.0f; - const float beta = 0.0f; - - CUBLAS_CHECK(cublasSetStream(ctx.cublas_handle(id), stream)); - CUBLAS_CHECK( - cublasSgemm(ctx.cublas_handle(id), CUBLAS_OP_T, CUBLAS_OP_N, - row_diff, src1_ncols, ne10, - &alpha, src0_ddf_i, ne00, - src1_ddf1_i, ne10, - &beta, dst_dd_i, ldc)); - } - - GGML_UNUSED(dst); - GGML_UNUSED(src1_ddq_i); - GGML_UNUSED(src1_padded_row_size); -} - -static void ggml_cuda_set_peer_access(const int n_tokens, int main_device) { - static bool peer_access_enabled = false; - - const bool enable_peer_access = n_tokens <= GGML_CUDA_PEER_MAX_BATCH_SIZE; - - if (peer_access_enabled == enable_peer_access) { - return; - } - -#ifdef NDEBUG - for (int id = 0; id < ggml_backend_cuda_get_device_count(); ++id) { - ggml_cuda_set_device(id); - CUDA_CHECK(cudaDeviceSynchronize()); - } - - for (int id = 0; id < ggml_backend_cuda_get_device_count(); ++id) { - ggml_cuda_set_device(id); - - for (int id_other = 0; id_other < ggml_backend_cuda_get_device_count(); ++id_other) { - if (id == id_other) { - continue; - } - if (id != main_device && id_other != main_device) { - continue; - } - - int can_access_peer; - CUDA_CHECK(cudaDeviceCanAccessPeer(&can_access_peer, id, id_other)); - if (can_access_peer) { - if (enable_peer_access) { - cudaError_t err = cudaDeviceEnablePeerAccess(id_other, 0); - if (err != cudaErrorPeerAccessAlreadyEnabled) { - CUDA_CHECK(err); - } - } else { - cudaError_t err = cudaDeviceDisablePeerAccess(id_other); - if (err != cudaErrorPeerAccessNotEnabled) { - CUDA_CHECK(err); - } - } - } - } - } - - ggml_cuda_set_device(main_device); -#endif // NDEBUG - - peer_access_enabled = enable_peer_access; - - GGML_UNUSED(main_device); -} - -static void ggml_cuda_op_mul_mat( - ggml_backend_cuda_context & ctx, - const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst, ggml_cuda_op_mul_mat_t op, - const bool convert_src1_to_q8_1) { - - const int64_t ne00 = src0->ne[0]; - const int64_t ne01 = src0->ne[1]; - const int64_t ne02 = src0->ne[2]; - const int64_t ne03 = src0->ne[3]; - - const int64_t ne10 = src1->ne[0]; - const int64_t ne11 = src1->ne[1]; - const int64_t ne12 = src1->ne[2]; - const int64_t ne13 = src1->ne[3]; - const int64_t nrows1 = ggml_nrows(src1); - - GGML_ASSERT(ne03 == ne13); - - const int64_t ne0 = dst->ne[0]; - const int64_t ne1 = dst->ne[1]; - - const int64_t nb2 = dst->nb[2]; - const int64_t nb3 = dst->nb[3]; - - GGML_ASSERT(ggml_backend_buffer_is_cuda(dst->buffer)); - GGML_ASSERT(ggml_backend_buffer_is_cuda(src1->buffer)); - ggml_backend_cuda_buffer_context * src1_ctx = (ggml_backend_cuda_buffer_context *) src1->buffer->context; - ggml_backend_cuda_buffer_context * dst_ctx = (ggml_backend_cuda_buffer_context *) dst->buffer->context; - - GGML_ASSERT(src1->type == GGML_TYPE_F32 || (src1->ne[2] == 1 && src1->ne[3] == 1)); - - GGML_ASSERT(ne12 >= ne02 && ne12 % ne02 == 0); - - const int64_t i02_divisor = ne12 / ne02; - - const size_t src0_ts = ggml_type_size(src0->type); - const size_t src0_bs = ggml_blck_size(src0->type); - const size_t q8_1_ts = sizeof(block_q8_1); - const size_t q8_1_bs = QK8_1; - - const bool src0_is_contiguous = ggml_is_contiguous(src0); - const bool src1_is_contiguous = ggml_is_contiguous(src1); - - const int64_t src1_padded_col_size = GGML_PAD(ne10, MATRIX_ROW_PADDING); - - const bool split = ggml_backend_buffer_is_cuda_split(src0->buffer); - GGML_ASSERT(!(split && ne02 > 1)); - GGML_ASSERT(!(split && ne03 > 1)); - GGML_ASSERT(!(split && ne02 < ne12)); - - ggml_tensor_extra_gpu * src0_extra = split ? (ggml_tensor_extra_gpu *) src0->extra : nullptr; - - - std::array tensor_split; - if (split) { - ggml_backend_cuda_split_buffer_type_context * buft_ctx = (ggml_backend_cuda_split_buffer_type_context *) src0->buffer->buft->context; - tensor_split = buft_ctx->tensor_split; - } - - struct dev_data { - ggml_cuda_pool_alloc src0_dd_alloc; - ggml_cuda_pool_alloc src1_ddf_alloc; - ggml_cuda_pool_alloc src1_ddq_alloc; - ggml_cuda_pool_alloc dst_dd_alloc; - - char * src0_dd = nullptr; - float * src1_ddf = nullptr; // float - char * src1_ddq = nullptr; // q8_1 - float * dst_dd = nullptr; - - int64_t row_low; - int64_t row_high; - }; - - dev_data dev[GGML_CUDA_MAX_DEVICES]; - - int used_devices = 0; - - for (int id = 0; id < ggml_backend_cuda_get_device_count(); ++id) { - // by default, use all rows - dev[id].row_low = 0; - dev[id].row_high = ne01; - - // for multi GPU, get the row boundaries from tensor split - // and round to mul_mat_q tile sizes - if (split) { - const int64_t rounding = get_row_rounding(src0->type, tensor_split); - - if (id != 0) { - dev[id].row_low = ne01*tensor_split[id]; - if (dev[id].row_low < ne01) { - dev[id].row_low -= dev[id].row_low % rounding; - } - } - - if (id != ggml_backend_cuda_get_device_count() - 1) { - dev[id].row_high = ne01*tensor_split[id + 1]; - if (dev[id].row_high < ne01) { - dev[id].row_high -= dev[id].row_high % rounding; - } - } - } - } - - for (int id = 0; id < ggml_backend_cuda_get_device_count(); ++id) { - if ((!split && id != ctx.device) || dev[id].row_low == dev[id].row_high) { - continue; - } - - used_devices++; - - const bool src1_on_device = id == src1_ctx->device; - const bool dst_on_device = id == dst_ctx->device; - - ggml_cuda_set_device(id); - cudaStream_t stream = ctx.stream(id, 0); - - if (src0_is_contiguous) { - dev[id].src0_dd = split ? (char *) src0_extra->data_device[id] : (char *) src0->data; - } else { - dev[id].src0_dd = dev[id].src0_dd_alloc.alloc(ctx.pool(id), ggml_nbytes(src0)); - } - - if (src1_on_device && src1_is_contiguous) { - dev[id].src1_ddf = (float *) src1->data; - } else { - dev[id].src1_ddf = dev[id].src1_ddf_alloc.alloc(ctx.pool(id), ggml_nelements(src1)); - } - - if (convert_src1_to_q8_1) { - dev[id].src1_ddq = dev[id].src1_ddq_alloc.alloc(ctx.pool(id), nrows1*src1_padded_col_size*q8_1_ts/q8_1_bs); - - if (src1_on_device && src1_is_contiguous) { - quantize_row_q8_1_cuda(dev[id].src1_ddf, dev[id].src1_ddq, ne10, nrows1, src1_padded_col_size, stream); - CUDA_CHECK(cudaGetLastError()); - } - } - - if (dst_on_device) { - dev[id].dst_dd = (float *) dst->data; - } else { - const size_t size_dst_ddf = split ? (dev[id].row_high - dev[id].row_low)*ne1 : ggml_nelements(dst); - dev[id].dst_dd = dev[id].dst_dd_alloc.alloc(ctx.pool(id), size_dst_ddf); - } - } - - // if multiple devices are used they need to wait for the main device - // here an event is recorded that signals that the main device has finished calculating the input data - if (split && used_devices > 1) { - ggml_cuda_set_device(ctx.device); - CUDA_CHECK(cudaEventRecord(src0_extra->events[ctx.device][0], ctx.stream())); - } - - const int64_t src1_col_stride = split && used_devices > 1 ? MUL_MAT_SRC1_COL_STRIDE : ne11; - for (int64_t src1_col_0 = 0; src1_col_0 < ne11; src1_col_0 += src1_col_stride) { - const int64_t is = split ? (src1_col_0/src1_col_stride) % GGML_CUDA_MAX_STREAMS : 0; - const int64_t src1_ncols = src1_col_0 + src1_col_stride > ne11 ? ne11 - src1_col_0 : src1_col_stride; - - for (int id = 0; id < ggml_backend_cuda_get_device_count(); ++id) { - if ((!split && id != ctx.device) || dev[id].row_low == dev[id].row_high) { - continue; - } - - const bool src1_on_device = id == src1_ctx->device; - const bool dst_on_device = id == dst_ctx->device; - const int64_t row_diff = dev[id].row_high - dev[id].row_low; - - ggml_cuda_set_device(id); - cudaStream_t stream = ctx.stream(id, is); - - // wait for main GPU data if necessary - if (split && (id != ctx.device || is != 0)) { - CUDA_CHECK(cudaStreamWaitEvent(stream, src0_extra->events[ctx.device][0], 0)); - } - - for (int64_t i0 = 0; i0 < ne13*ne12; ++i0) { - const int64_t i03 = i0 / ne12; - const int64_t i02 = i0 % ne12; - - const size_t src1_ddq_i_offset = (i0*ne11 + src1_col_0) * src1_padded_col_size*q8_1_ts/q8_1_bs; - - // for split tensors the data begins at i0 == i0_offset_low - char * src0_dd_i = dev[id].src0_dd + (i0/i02_divisor) * (ne01*ne00*src0_ts)/src0_bs; - float * src1_ddf_i = dev[id].src1_ddf + (i0*ne11 + src1_col_0) * ne10; - char * src1_ddq_i = dev[id].src1_ddq + src1_ddq_i_offset; - float * dst_dd_i = dev[id].dst_dd + (i0*ne1 + src1_col_0) * (dst_on_device ? ne0 : row_diff); - - // the main device memory buffer can be on VRAM scratch, with space for all partial results - // in that case an offset on dst_ddf_i is needed - if (id == ctx.device) { - dst_dd_i += dev[id].row_low; // offset is 0 if no tensor split - } - - // copy src0, src1 to device if necessary - if (src1_is_contiguous) { - if (id != ctx.device) { - if (convert_src1_to_q8_1) { - char * src1_ddq_i_source = dev[ctx.device].src1_ddq + src1_ddq_i_offset; - CUDA_CHECK(cudaMemcpyPeerAsync(src1_ddq_i, id, src1_ddq_i_source, ctx.device, - src1_ncols*src1_padded_col_size*q8_1_ts/q8_1_bs, stream)); - } else { - float * src1_ddf_i_source = (float *) src1->data; - src1_ddf_i_source += (i0*ne11 + src1_col_0) * ne10; - CUDA_CHECK(cudaMemcpyPeerAsync(src1_ddf_i, id, src1_ddf_i_source, ctx.device, - src1_ncols*ne10*sizeof(float), stream)); - } - } - } else if (src1_on_device && !src1_is_contiguous) { - CUDA_CHECK(ggml_cuda_cpy_tensor_2d( - src1_ddf_i, src1, i03, i02, src1_col_0, src1_col_0+src1_ncols, stream)); - } else { - GGML_ASSERT(false); - } - - if (convert_src1_to_q8_1 && !src1_is_contiguous) { - quantize_row_q8_1_cuda(src1_ddf_i, src1_ddq_i, ne10, src1_ncols, src1_padded_col_size, stream); - CUDA_CHECK(cudaGetLastError()); - } - - if (src1_col_0 == 0 && !src0_is_contiguous && i02 % i02_divisor == 0) { - CUDA_CHECK(ggml_cuda_cpy_tensor_2d(src0_dd_i, src0, i03, i02/i02_divisor, dev[id].row_low, dev[id].row_high, stream)); - } - - // do the computation - op(ctx, src0, src1, dst, src0_dd_i, src1_ddf_i, src1_ddq_i, dst_dd_i, - dev[id].row_low, dev[id].row_high, src1_ncols, src1_padded_col_size, stream); - CUDA_CHECK(cudaGetLastError()); - - // copy dst to host or other device if necessary - if (!dst_on_device) { - void * dst_off_device = dst->data; - if (split) { - // src0 = weight matrix is saved as a transposed matrix for better memory layout. - // dst is NOT transposed. - // The outputs of matrix matrix multiplications can therefore NOT simply be concatenated for >1 GPU. - // Instead they need to be copied to the correct slice in ne0 = dst row index. - // If dst is a vector with ne0 == 1 then you don't have to do this but it still produces correct results. - float * dhf_dst_i = (float *) ((char *) dst_off_device + i02*nb2 + i03*nb3); - GGML_ASSERT(dst->nb[1] == ne0*sizeof(float)); - dhf_dst_i += src1_col_0*ne0 + dev[id].row_low; -#if !defined(GGML_USE_HIPBLAS) - // cudaMemcpy2DAsync may fail with copies between vmm pools of different devices - cudaMemcpy3DPeerParms p = {}; - p.dstDevice = ctx.device; - p.dstPtr = make_cudaPitchedPtr(dhf_dst_i, ne0*sizeof(float), row_diff, src1_ncols); - p.srcDevice = id; - p.srcPtr = make_cudaPitchedPtr(dst_dd_i, row_diff*sizeof(float), row_diff, src1_ncols); - p.extent = make_cudaExtent(row_diff*sizeof(float), src1_ncols, 1); - CUDA_CHECK(cudaMemcpy3DPeerAsync(&p, stream)); -#else - // HIP does not support cudaMemcpy3DPeerAsync or vmm pools - CUDA_CHECK(cudaMemcpy2DAsync(dhf_dst_i, ne0*sizeof(float), - dst_dd_i, row_diff*sizeof(float), - row_diff*sizeof(float), src1_ncols, - cudaMemcpyDeviceToDevice, stream)); -#endif - } else { - float * dhf_dst_i = (float *) ((char *) dst_off_device + i02*nb2 + i03*nb3); - GGML_ASSERT(dst->nb[1] == ne0*sizeof(float)); - dhf_dst_i += src1_col_0*ne0; - CUDA_CHECK(cudaMemcpyAsync(dhf_dst_i, dst_dd_i, src1_ncols*ne0*sizeof(float), cudaMemcpyDeviceToDevice, stream)); - } - } - - // add event for the main device to wait on until other device is done - if (split && (id != ctx.device || is != 0)) { - CUDA_CHECK(cudaEventRecord(src0_extra->events[id][is], stream)); - } - } - } - } - - // main device waits for all other devices to be finished - if (split && ggml_backend_cuda_get_device_count() > 1) { - int64_t is_max = (ne11 + MUL_MAT_SRC1_COL_STRIDE - 1) / MUL_MAT_SRC1_COL_STRIDE; - is_max = is_max <= GGML_CUDA_MAX_STREAMS ? is_max : GGML_CUDA_MAX_STREAMS; - - ggml_cuda_set_device(ctx.device); - for (int id = 0; id < ggml_backend_cuda_get_device_count(); ++id) { - if (dev[id].row_low == dev[id].row_high) { - continue; - } - for (int64_t is = 0; is < is_max; ++is) { - CUDA_CHECK(cudaStreamWaitEvent(ctx.stream(), src0_extra->events[id][is], 0)); - } - } - } -} - -static void ggml_cuda_mul_mat_vec_p021(ggml_backend_cuda_context & ctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst){ - GGML_ASSERT(ggml_is_permuted(src0) && ggml_is_permuted(src1)); - GGML_ASSERT(ggml_backend_buffer_is_cuda(src0->buffer)); - GGML_ASSERT(src0->nb[0] <= src0->nb[1] && src0->nb[2] <= src0->nb[3]); // 0213 permutation - GGML_ASSERT(src1->nb[0] <= src1->nb[1] && src1->nb[2] <= src1->nb[3]); // 0213 permutation - GGML_ASSERT(src0->type == GGML_TYPE_F16); - GGML_ASSERT(src1->type == GGML_TYPE_F32); - - const int64_t ne00 = src0->ne[0]; - const int64_t ne01 = src0->ne[1]; - const int64_t ne02 = src0->ne[2]; - - const int64_t ne12 = src1->ne[2]; - - cudaStream_t main_stream = ctx.stream(); - - void * src0_ddq = src0->data; - float * src1_ddf = (float *) src1->data; - float * dst_ddf = (float *) dst->data; - - ggml_mul_mat_p021_f16_f32_cuda(src0_ddq, src1_ddf, dst_ddf, ne00, ne01, ne02, ne12, main_stream); -} - -static void ggml_cuda_mul_mat_vec_nc(ggml_backend_cuda_context & ctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst){ - GGML_ASSERT(!ggml_is_transposed(src0)); - GGML_ASSERT(!ggml_is_transposed(src1)); - GGML_ASSERT(!ggml_is_permuted(src0)); - GGML_ASSERT(ggml_backend_buffer_is_cuda(src0->buffer)); - GGML_ASSERT(src0->type == GGML_TYPE_F16); - GGML_ASSERT(src1->type == GGML_TYPE_F32); - - const int64_t ne00 = src0->ne[0]; - const int64_t ne01 = src0->ne[1]; - const int64_t ne02 = src0->ne[2]; - - const int64_t nb01 = src0->nb[1]; - const int64_t nb02 = src0->nb[2]; - - const int64_t ne12 = src1->ne[2]; - - cudaStream_t main_stream = ctx.stream(); - - void * src0_ddq = src0->data; - float * src1_ddf = (float *) src1->data; - float * dst_ddf = (float *) dst->data; - - const int64_t row_stride_x = nb01 / sizeof(half); - const int64_t channel_stride_x = nb02 / sizeof(half); - - ggml_mul_mat_vec_nc_f16_f32_cuda(src0_ddq, src1_ddf, dst_ddf, ne00, ne01, row_stride_x, ne02, ne12, channel_stride_x, main_stream); -} - -static __global__ void k_compute_batched_ptrs( - const half * src0_as_f16, const half * src1_as_f16, char * dst, - const void ** ptrs_src, void ** ptrs_dst, - int64_t ne12, int64_t ne13, - int64_t ne23, - size_t nb02, size_t nb03, - size_t nb12, size_t nb13, - size_t nbd2, size_t nbd3, - int64_t r2, int64_t r3) { - int64_t i13 = blockIdx.x * blockDim.x + threadIdx.x; - int64_t i12 = blockIdx.y * blockDim.y + threadIdx.y; - - if (i13 >= ne13 || i12 >= ne12) { - return; - } - - int64_t i03 = i13 / r3; - int64_t i02 = i12 / r2; - - ptrs_src[0*ne23 + i12 + i13*ne12] = (const char *) src0_as_f16 + i02*nb02 + i03*nb03; - ptrs_src[1*ne23 + i12 + i13*ne12] = (const char *) src1_as_f16 + i12*nb12 + i13*nb13; - ptrs_dst[0*ne23 + i12 + i13*ne12] = ( char *) dst + i12*nbd2 + i13*nbd3; -} - -static void ggml_cuda_mul_mat_batched_cublas(ggml_backend_cuda_context & ctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) { - GGML_ASSERT(!ggml_is_transposed(src0)); - GGML_ASSERT(!ggml_is_transposed(src1)); - - GGML_ASSERT(ggml_backend_buffer_is_cuda(src0->buffer)); - GGML_ASSERT(src0->type == GGML_TYPE_F16); - - GGML_TENSOR_BINARY_OP_LOCALS - - const int64_t ne_dst = ggml_nelements(dst); - - cudaStream_t main_stream = ctx.stream(); - - CUBLAS_CHECK(cublasSetStream(ctx.cublas_handle(), main_stream)); - - void * src0_ddq = src0->data; - half * src0_f16 = (half *) src0_ddq; - float * src1_ddf = (float *) src1->data; - float * dst_ddf = (float *) dst->data; - - // convert src1 to fp16 - ggml_cuda_pool_alloc src1_f16_alloc(ctx.pool()); - if (src1->type != GGML_TYPE_F16) { - const to_fp16_cuda_t to_fp16_cuda = ggml_get_to_fp16_cuda(src1->type); - const int64_t ne_src1 = ggml_nelements(src1); - src1_f16_alloc.alloc(ne_src1); - GGML_ASSERT(to_fp16_cuda != nullptr); - to_fp16_cuda(src1_ddf, src1_f16_alloc.get(), ne_src1, main_stream); - } - half * src1_f16 = src1->type == GGML_TYPE_F16 ? (half *) src1_ddf : src1_f16_alloc.get(); - - ggml_cuda_pool_alloc dst_f16(ctx.pool()); - char * dst_t; - - cublasComputeType_t cu_compute_type = CUBLAS_COMPUTE_16F; - cudaDataType_t cu_data_type = CUDA_R_16F; - - // dst strides - size_t nbd2 = dst->nb[2]; - size_t nbd3 = dst->nb[3]; - - const half alpha_f16 = 1.0f; - const half beta_f16 = 0.0f; - - const float alpha_f32 = 1.0f; - const float beta_f32 = 0.0f; - - const void * alpha = &alpha_f16; - const void * beta = &beta_f16; - - if (dst->op_params[0] == GGML_PREC_DEFAULT) { - dst_t = (char *) dst_f16.alloc(ne_dst); - - nbd2 /= sizeof(float) / sizeof(half); - nbd3 /= sizeof(float) / sizeof(half); - } else { - dst_t = (char *) dst_ddf; - - cu_compute_type = CUBLAS_COMPUTE_32F; - cu_data_type = CUDA_R_32F; - - alpha = &alpha_f32; - beta = &beta_f32; - } - - GGML_ASSERT(ne12 % ne02 == 0); - GGML_ASSERT(ne13 % ne03 == 0); - - // broadcast factors - const int64_t r2 = ne12/ne02; - const int64_t r3 = ne13/ne03; - -#if 0 - // use cublasGemmEx - { - for (int i13 = 0; i13 < ne13; ++i13) { - for (int i12 = 0; i12 < ne12; ++i12) { - int i03 = i13 / r3; - int i02 = i12 / r2; - - CUBLAS_CHECK( - cublasGemmEx(g_cublas_handles[g_main_device], CUBLAS_OP_T, CUBLAS_OP_N, - ne01, ne11, ne10, - alpha, (const char *) src0_as_f16 + i02*src0->nb[2] + i03*src0->nb[3] , CUDA_R_16F, nb01/sizeof(half), - (const char *) src1_as_f16 + i12*src1->nb[2]/2 + i13*src1->nb[3]/2, CUDA_R_16F, nb11/sizeof(float), - beta, ( char *) dst_t + i12*nbd2 + i13*nbd3, cu_data_type, ne01, - cu_compute_type, - CUBLAS_GEMM_DEFAULT_TENSOR_OP)); - } - } - } -#else - if (r2 == 1 && r3 == 1 && src0->nb[2]*src0->ne[2] == src0->nb[3] && src1->nb[2]*src1->ne[2] == src1->nb[3]) { - // there is no broadcast and src0, src1 are contiguous across dims 2, 3 - // use cublasGemmStridedBatchedEx - CUBLAS_CHECK( - cublasGemmStridedBatchedEx(ctx.cublas_handle(), CUBLAS_OP_T, CUBLAS_OP_N, - ne01, ne11, ne10, - alpha, (const char *) src0_f16, CUDA_R_16F, nb01/nb00, nb02/nb00, // strideA - (const char *) src1_f16, CUDA_R_16F, nb11/nb10, nb12/nb10, // strideB - beta, ( char *) dst_t, cu_data_type, ne01, nb2/nb0, // strideC - ne12*ne13, - cu_compute_type, - CUBLAS_GEMM_DEFAULT_TENSOR_OP)); - } else { - // use cublasGemmBatchedEx - const int ne23 = ne12*ne13; - - ggml_cuda_pool_alloc ptrs_src(ctx.pool(), 2*ne23); - ggml_cuda_pool_alloc< void *> ptrs_dst(ctx.pool(), 1*ne23); - - dim3 block_dims(ne13, ne12); - k_compute_batched_ptrs<<<1, block_dims, 0, main_stream>>>( - src0_f16, src1_f16, dst_t, - ptrs_src.get(), ptrs_dst.get(), - ne12, ne13, - ne23, - nb02, nb03, - src1->type == GGML_TYPE_F16 ? nb12 : nb12/2, - src1->type == GGML_TYPE_F16 ? nb13 : nb13/2, - nbd2, nbd3, - r2, r3); - CUDA_CHECK(cudaGetLastError()); - - CUBLAS_CHECK( - cublasGemmBatchedEx(ctx.cublas_handle(), CUBLAS_OP_T, CUBLAS_OP_N, - ne01, ne11, ne10, - alpha, (const void **) (ptrs_src.get() + 0*ne23), CUDA_R_16F, nb01/nb00, - (const void **) (ptrs_src.get() + 1*ne23), CUDA_R_16F, nb11/nb10, - beta, ( void **) (ptrs_dst.get() + 0*ne23), cu_data_type, ne01, - ne23, - cu_compute_type, - CUBLAS_GEMM_DEFAULT_TENSOR_OP)); - } -#endif - - if (dst->op_params[0] == GGML_PREC_DEFAULT) { - const to_fp32_cuda_t to_fp32_cuda = ggml_get_to_fp32_cuda(GGML_TYPE_F16); - to_fp32_cuda(dst_f16.get(), dst_ddf, ne_dst, main_stream); - } -} - -static void ggml_cuda_mul_mat(ggml_backend_cuda_context & ctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) { - const bool split = ggml_backend_buffer_is_cuda_split(src0->buffer); - - int64_t min_compute_capability = INT_MAX; - - bool any_pascal_with_slow_fp16 = false; - if (split) { - ggml_backend_cuda_split_buffer_type_context * buft_ctx = (ggml_backend_cuda_split_buffer_type_context *) src0->buffer->buft->context; - auto & tensor_split = buft_ctx->tensor_split; - for (int id = 0; id < ggml_backend_cuda_get_device_count(); ++id) { - // skip devices that are not going to do any work: - if (tensor_split[id] >= (id + 1 < ggml_backend_cuda_get_device_count() ? tensor_split[id + 1] : 1.0f)) { - continue; - } - - if (min_compute_capability > ggml_cuda_info().devices[id].cc) { - min_compute_capability = ggml_cuda_info().devices[id].cc; - } - if (ggml_cuda_info().devices[id].cc == 610) { - any_pascal_with_slow_fp16 = true; - } - } - } else { - min_compute_capability = ggml_cuda_info().devices[ctx.device].cc; - any_pascal_with_slow_fp16 = ggml_cuda_info().devices[ctx.device].cc == 610; - } - - // check data types and tensor shapes for custom matrix multiplication kernels: - bool use_dequantize_mul_mat_vec = (ggml_is_quantized(src0->type) || src0->type == GGML_TYPE_F16) - && src1->type == GGML_TYPE_F32 && dst->type == GGML_TYPE_F32 - && src0->ne[0] % GGML_CUDA_DMMV_X == 0 && src1->ne[1] == 1; - - bool use_mul_mat_vec_q = ggml_is_quantized(src0->type) - && src1->type == GGML_TYPE_F32 && dst->type == GGML_TYPE_F32 - && src1->ne[1] <= MMVQ_MAX_BATCH_SIZE; - - bool use_mul_mat_q = ggml_cuda_supports_mmq(src0->type) - && src1->type == GGML_TYPE_F32 && dst->type == GGML_TYPE_F32; - -#if defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__) - - const bool fp16_performance_good = min_compute_capability >= CC_RDNA1; - -#ifdef CUDA_USE_TENSOR_CORES - use_mul_mat_q = use_mul_mat_q && min_compute_capability < CC_RDNA3; -#endif // CUDA_USE_TENSOR_CORES - -#else - - // fp16 performance is good on Volta or newer and on P100 (compute capability 6.0) - const bool fp16_performance_good = min_compute_capability >= CC_PASCAL && !any_pascal_with_slow_fp16; - - // mmvq and mmq need the __dp4a instruction which on NVIDIA is only available for CC >= 6.1 - use_mul_mat_vec_q = use_mul_mat_vec_q && min_compute_capability >= MIN_CC_DP4A; - use_mul_mat_q = use_mul_mat_q && min_compute_capability >= MIN_CC_DP4A; - -#ifdef CUDA_USE_TENSOR_CORES - // when tensor cores are available, use them for large batch size - // ref: https://github.com/ggerganov/llama.cpp/pull/3776 - use_mul_mat_q = use_mul_mat_q && (!fp16_performance_good || src1->ne[1] <= MMQ_MAX_BATCH_SIZE); -#endif // CUDA_USE_TENSOR_CORES - -#endif // defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__) - - // if mmvq is available it's a better choice than dmmv: -#ifndef GGML_CUDA_FORCE_DMMV - use_dequantize_mul_mat_vec = use_dequantize_mul_mat_vec && !use_mul_mat_vec_q; -#endif // GGML_CUDA_FORCE_DMMV - - // debug helpers - //printf("src0: %8d %8d %8d %8d\n", src0->ne[0], src0->ne[1], src0->ne[2], src0->ne[3]); - //printf(" %8d %8d %8d %8d\n", src0->nb[0], src0->nb[1], src0->nb[2], src0->nb[3]); - //printf("src1: %8d %8d %8d %8d\n", src1->ne[0], src1->ne[1], src1->ne[2], src1->ne[3]); - //printf(" %8d %8d %8d %8d\n", src1->nb[0], src1->nb[1], src1->nb[2], src1->nb[3]); - //printf("src0 is contiguous %d, transposed %d, type = %s, name = %s\n", ggml_is_contiguous(src0), ggml_is_transposed(src0), ggml_type_name(src0->type), src0->name); - //printf("src1 is contiguous %d, transposed %d, type = %s, name = %s\n", ggml_is_contiguous(src1), ggml_is_transposed(src1), ggml_type_name(src1->type), src1->name); - - if (!split && !fp16_performance_good && src0->type == GGML_TYPE_F16 && ggml_is_permuted(src0) && ggml_is_permuted(src1) && src1->ne[1] == 1) { - // KQ single-batch - ggml_cuda_mul_mat_vec_p021(ctx, src0, src1, dst); - } else if (!split && !fp16_performance_good && src0->type == GGML_TYPE_F16 && !ggml_is_contiguous(src0) && !ggml_is_transposed(src1) && src1->ne[1] == 1) { - // KQV single-batch - ggml_cuda_mul_mat_vec_nc(ctx, src0, src1, dst); - } else if (!split && src0->type == GGML_TYPE_F16 && (src1->type == GGML_TYPE_F16 || fp16_performance_good) && !ggml_is_transposed(src0) && !ggml_is_transposed(src1) && src1->ne[2]*src1->ne[3] > 1) { - // KQ + KQV multi-batch - ggml_cuda_mul_mat_batched_cublas(ctx, src0, src1, dst); - } else if (use_dequantize_mul_mat_vec) { - ggml_cuda_op_mul_mat(ctx, src0, src1, dst, ggml_cuda_op_dequantize_mul_mat_vec, false); - } else if (use_mul_mat_vec_q) { - ggml_cuda_op_mul_mat(ctx, src0, src1, dst, ggml_cuda_op_mul_mat_vec_q, true); - } else if (use_mul_mat_q) { - ggml_cuda_op_mul_mat(ctx, src0, src1, dst, ggml_cuda_op_mul_mat_q, true); - } else { - ggml_cuda_op_mul_mat(ctx, src0, src1, dst, ggml_cuda_op_mul_mat_cublas, false); - } -} - -struct mmid_row_mapping { - int32_t i1; - int32_t i2; -}; - -static __global__ void k_copy_src1_to_contiguous(const char * __restrict__ src1_original, char * __restrict__ src1_contiguous, - int * __restrict__ cur_src1_row, mmid_row_mapping * __restrict__ row_mapping, - const char * __restrict ids, int64_t i02, size_t ids_nb1, size_t ids_nb0, - int64_t ne11, int64_t ne10, - size_t nb11, size_t nb12) { - int32_t iid1 = blockIdx.x; - int32_t id = blockIdx.y; - - const int32_t row_id_i = *(const int32_t *) (ids + iid1*ids_nb1 + id*ids_nb0); - - if (row_id_i != i02) { - return; - } - - const int64_t i11 = id % ne11; - const int64_t i12 = iid1; - - __shared__ int src1_row; - if (threadIdx.x == 0) { - src1_row = atomicAdd(cur_src1_row, 1); - row_mapping[src1_row] = {id, iid1}; - } - __syncthreads(); - - const float * src1_row_original = (const float *)(src1_original + i11*nb11 + i12*nb12); - float * src1_row_contiguous = (float *)(src1_contiguous + src1_row*nb11); - - for (int i = threadIdx.x; i < ne10; i += blockDim.x) { - src1_row_contiguous[i] = src1_row_original[i]; - } -} - -static __global__ void k_copy_dst_from_contiguous(char * __restrict__ dst_original, const char * __restrict__ dst_contiguous, - const mmid_row_mapping * __restrict__ row_mapping, - int64_t ne0, - size_t nb1, size_t nb2) { - int32_t i = blockIdx.x; - - const int32_t i1 = row_mapping[i].i1; - const int32_t i2 = row_mapping[i].i2; - - const float * dst_row_contiguous = (const float *)(dst_contiguous + i*nb1); - float * dst_row_original = (float *)(dst_original + i1*nb1 + i2*nb2); - - for (int j = threadIdx.x; j < ne0; j += blockDim.x) { - dst_row_original[j] = dst_row_contiguous[j]; - } -} - -static void ggml_cuda_mul_mat_id(ggml_backend_cuda_context & ctx, ggml_tensor * dst) { - const ggml_tensor * src0 = dst->src[0]; - const ggml_tensor * src1 = dst->src[1]; - const ggml_tensor * ids = dst->src[2]; - - GGML_TENSOR_BINARY_OP_LOCALS - - GGML_ASSERT(!ggml_backend_buffer_is_cuda_split(src0->buffer) && "mul_mat_id does not support split buffers"); - - cudaStream_t stream = ctx.stream(); - - const int64_t n_as = ne02; - const int64_t n_ids = ids->ne[0]; - - std::vector ids_host(ggml_nbytes(ids)); - const char * ids_dev = (const char *) ids->data; - CUDA_CHECK(cudaMemcpyAsync(ids_host.data(), ids_dev, ggml_nbytes(ids), cudaMemcpyDeviceToHost, stream)); - CUDA_CHECK(cudaStreamSynchronize(stream)); - - ggml_tensor src0_row = *src0; - ggml_tensor src1_row = *src1; - ggml_tensor dst_row = *dst; - - char * src0_original = (char *) src0->data; - char * src1_original = (char *) src1->data; - char * dst_original = (char *) dst->data; - - src0_row.ne[2] = 1; - src0_row.ne[3] = 1; - src0_row.nb[3] = nb02; - - src1_row.ne[1] = 1; - src1_row.ne[2] = 1; - src1_row.ne[3] = 1; - src1_row.nb[2] = nb11; - src1_row.nb[3] = nb11; - - dst_row.ne[1] = 1; - dst_row.ne[2] = 1; - dst_row.ne[3] = 1; - dst_row.nb[2] = nb1; - dst_row.nb[3] = nb1; - - if (ne12 == 1) { - for (int64_t iid1 = 0; iid1 < ids->ne[1]; iid1++) { - for (int64_t id = 0; id < n_ids; id++) { - const int32_t i02 = *(const int32_t *) (ids_host.data() + iid1*ids->nb[1] + id*ids->nb[0]); - - GGML_ASSERT(i02 >= 0 && i02 < n_as); - - const int64_t i11 = id % ne11; - const int64_t i12 = iid1; - - const int64_t i1 = id; - const int64_t i2 = i12; - - src0_row.data = src0_original + i02*nb02; - src1_row.data = src1_original + i11*nb11 + i12*nb12; - dst_row.data = dst_original + i1*nb1 + i2*nb2; - - ggml_cuda_mul_mat(ctx, &src0_row, &src1_row, &dst_row); - } - } - } else { - ggml_cuda_pool_alloc src1_contiguous(ctx.pool(), sizeof(float)*ggml_nelements(src1)); - ggml_cuda_pool_alloc dst_contiguous(ctx.pool(), sizeof(float)*ggml_nelements(dst)); - - src1_row.data = src1_contiguous.get(); - dst_row.data = dst_contiguous.get(); - - for (int64_t i02 = 0; i02 < n_as; i02++) { - int64_t num_src1_rows = 0; - - for (int64_t iid1 = 0; iid1 < ids->ne[1]; iid1++) { - for (int64_t id = 0; id < n_ids; id++) { - const int32_t row_id_i = *(const int32_t *) (ids_host.data() + iid1*ids->nb[1] + id*ids->nb[0]); - - GGML_ASSERT(row_id_i >= 0 && row_id_i < n_as); - - if (row_id_i != i02) { - continue; - } - - num_src1_rows++; - } - } - - if (num_src1_rows == 0) { - continue; - } - - ggml_cuda_pool_alloc dev_cur_src1_row(ctx.pool(), 1); - ggml_cuda_pool_alloc dev_row_mapping(ctx.pool(), num_src1_rows); - CUDA_CHECK(cudaMemsetAsync(dev_cur_src1_row.get(), 0, sizeof(int), stream)); - - { - dim3 block_dims(std::min((unsigned int)ne10, 768u)); - dim3 grid_dims(ids->ne[1], n_ids); - k_copy_src1_to_contiguous<<>>( - src1_original, src1_contiguous.get(), - dev_cur_src1_row.get(), dev_row_mapping.get(), - ids_dev, i02, ids->nb[1], ids->nb[0], - ne11, ne10, - nb11, nb12); - CUDA_CHECK(cudaGetLastError()); - } - - src0_row.data = src0_original + i02*nb02; - - GGML_ASSERT(nb11 == sizeof(float)*ne10); - GGML_ASSERT(nb1 == sizeof(float)*ne0); - - src1_row.ne[1] = num_src1_rows; - src1_row.nb[1] = nb11; - src1_row.nb[2] = num_src1_rows*nb11; - src1_row.nb[3] = num_src1_rows*nb11; - - dst_row.ne[1] = num_src1_rows; - dst_row.nb[1] = nb1; - dst_row.nb[2] = num_src1_rows*nb1; - dst_row.nb[3] = num_src1_rows*nb1; - - ggml_cuda_mul_mat(ctx, &src0_row, &src1_row, &dst_row); - - { - dim3 block_dims(std::min((unsigned int)ne0, 768u)); - dim3 grid_dims(num_src1_rows); - k_copy_dst_from_contiguous<<>>( - dst_original, dst_contiguous.get(), - dev_row_mapping.get(), - ne0, - nb1, nb2); - CUDA_CHECK(cudaGetLastError()); - } - } - } -} - -static bool ggml_cuda_compute_forward(ggml_backend_cuda_context & ctx, struct ggml_tensor * dst) { - // why is this here instead of mul_mat? - if (dst->src[0] != nullptr && ggml_backend_buffer_is_cuda_split(dst->src[0]->buffer)) { - ggml_cuda_set_peer_access(dst->src[1]->ne[1], ctx.device); - } - - switch (dst->op) { - case GGML_OP_REPEAT: - ggml_cuda_op_repeat(ctx, dst); - break; - case GGML_OP_GET_ROWS: - ggml_cuda_op_get_rows(ctx, dst); - break; - case GGML_OP_DUP: - ggml_cuda_dup(ctx, dst); - break; - case GGML_OP_CPY: - ggml_cuda_cpy(ctx, dst->src[0], dst->src[1]); - break; - case GGML_OP_CONT: - ggml_cuda_dup(ctx, dst); - break; - case GGML_OP_ADD: - ggml_cuda_op_add(ctx, dst); - break; - case GGML_OP_ACC: - ggml_cuda_op_acc(ctx, dst); - break; - case GGML_OP_MUL: - ggml_cuda_op_mul(ctx, dst); - break; - case GGML_OP_DIV: - ggml_cuda_op_div(ctx, dst); - break; - case GGML_OP_UNARY: - switch (ggml_get_unary_op(dst)) { - case GGML_UNARY_OP_GELU: - ggml_cuda_op_gelu(ctx, dst); - break; - case GGML_UNARY_OP_SILU: - ggml_cuda_op_silu(ctx, dst); - break; - case GGML_UNARY_OP_GELU_QUICK: - ggml_cuda_op_gelu_quick(ctx, dst); - break; - case GGML_UNARY_OP_TANH: - ggml_cuda_op_tanh(ctx, dst); - break; - case GGML_UNARY_OP_RELU: - ggml_cuda_op_relu(ctx, dst); - break; - case GGML_UNARY_OP_HARDSIGMOID: - ggml_cuda_op_hardsigmoid(ctx, dst); - break; - case GGML_UNARY_OP_HARDSWISH: - ggml_cuda_op_hardswish(ctx, dst); - break; - default: - return false; - } - break; - case GGML_OP_NORM: - ggml_cuda_op_norm(ctx, dst); - break; - case GGML_OP_GROUP_NORM: - ggml_cuda_op_group_norm(ctx, dst); - break; - case GGML_OP_CONCAT: - ggml_cuda_op_concat(ctx, dst); - break; - case GGML_OP_UPSCALE: - ggml_cuda_op_upscale(ctx, dst); - break; - case GGML_OP_PAD: - ggml_cuda_op_pad(ctx, dst); - break; - case GGML_OP_ARANGE: - ggml_cuda_op_arange(ctx, dst); - break; - case GGML_OP_TIMESTEP_EMBEDDING: - ggml_cuda_op_timestep_embedding(ctx, dst); - break; - case GGML_OP_LEAKY_RELU: - ggml_cuda_op_leaky_relu(ctx, dst); - break; - case GGML_OP_RMS_NORM: - ggml_cuda_op_rms_norm(ctx, dst); - break; - case GGML_OP_MUL_MAT: - if (dst->src[0]->ne[3] != dst->src[1]->ne[3]) { - fprintf(stderr, "%s: cannot compute %s: src0->ne[3] = %" PRId64 ", src1->ne[3] = %" PRId64 " - fallback to CPU\n", __func__, dst->name, dst->src[0]->ne[3], dst->src[1]->ne[3]); - return false; - } else { - ggml_cuda_mul_mat(ctx, dst->src[0], dst->src[1], dst); - } - break; - case GGML_OP_MUL_MAT_ID: - ggml_cuda_mul_mat_id(ctx, dst); - break; - case GGML_OP_SCALE: - ggml_cuda_op_scale(ctx, dst); - break; - case GGML_OP_SQR: - ggml_cuda_op_sqr(ctx, dst); - break; - case GGML_OP_CLAMP: - ggml_cuda_op_clamp(ctx, dst); - break; - case GGML_OP_NONE: - case GGML_OP_RESHAPE: - case GGML_OP_VIEW: - case GGML_OP_PERMUTE: - case GGML_OP_TRANSPOSE: - break; - case GGML_OP_DIAG_MASK_INF: - ggml_cuda_op_diag_mask_inf(ctx, dst); - break; - case GGML_OP_SOFT_MAX: - ggml_cuda_op_soft_max(ctx, dst); - break; - case GGML_OP_ROPE: - ggml_cuda_op_rope(ctx, dst); - break; - case GGML_OP_ALIBI: - ggml_cuda_op_alibi(ctx, dst); - break; - case GGML_OP_IM2COL: - ggml_cuda_op_im2col(ctx, dst); - break; - case GGML_OP_POOL_2D: - ggml_cuda_op_pool2d(ctx, dst); - break; - case GGML_OP_SUM_ROWS: - ggml_cuda_op_sum_rows(ctx, dst); - break; - case GGML_OP_ARGSORT: - ggml_cuda_op_argsort(ctx, dst); - break; - default: - return false; - } - - cudaError_t err = cudaGetLastError(); - if (err != cudaSuccess) { - fprintf(stderr, "%s: %s failed\n", __func__, ggml_op_desc(dst)); - CUDA_CHECK(err); - } - - return true; -} - -//////////////////////////////////////////////////////////////////////////////// - -// backend - -GGML_CALL static const char * ggml_backend_cuda_name(ggml_backend_t backend) { - ggml_backend_cuda_context * cuda_ctx = (ggml_backend_cuda_context *)backend->context; - - return cuda_ctx->name.c_str(); -} - -GGML_CALL static void ggml_backend_cuda_free(ggml_backend_t backend) { - ggml_backend_cuda_context * cuda_ctx = (ggml_backend_cuda_context *)backend->context; - - delete cuda_ctx; - delete backend; -} - -GGML_CALL static ggml_backend_buffer_type_t ggml_backend_cuda_get_default_buffer_type(ggml_backend_t backend) { - ggml_backend_cuda_context * cuda_ctx = (ggml_backend_cuda_context *)backend->context; - - return ggml_backend_cuda_buffer_type(cuda_ctx->device); -} - -GGML_CALL static void ggml_backend_cuda_set_tensor_async(ggml_backend_t backend, ggml_tensor * tensor, const void * data, size_t offset, size_t size) { - ggml_backend_cuda_context * cuda_ctx = (ggml_backend_cuda_context *)backend->context; - ggml_backend_buffer_t buf = tensor->view_src ? tensor->view_src->buffer : tensor->buffer; - - GGML_ASSERT(buf->buft == ggml_backend_cuda_buffer_type(cuda_ctx->device) && "unsupported buffer type"); - - CUDA_CHECK(cudaMemcpyAsync((char *)tensor->data + offset, data, size, cudaMemcpyHostToDevice, cuda_ctx->stream())); -} - -GGML_CALL static void ggml_backend_cuda_get_tensor_async(ggml_backend_t backend, const ggml_tensor * tensor, void * data, size_t offset, size_t size) { - ggml_backend_cuda_context * cuda_ctx = (ggml_backend_cuda_context *)backend->context; - ggml_backend_buffer_t buf = tensor->view_src ? tensor->view_src->buffer : tensor->buffer; - - GGML_ASSERT(buf->buft == ggml_backend_cuda_buffer_type(cuda_ctx->device) && "unsupported buffer type"); - - CUDA_CHECK(cudaMemcpyAsync(data, (const char *)tensor->data + offset, size, cudaMemcpyDeviceToHost, cuda_ctx->stream())); -} - -GGML_CALL static bool ggml_backend_cuda_cpy_tensor_async(ggml_backend_t backend_src, ggml_backend_t backend_dst, const ggml_tensor * src, ggml_tensor * dst) { - GGML_ASSERT(ggml_backend_is_cuda(backend_src) || ggml_backend_is_cuda(backend_dst)); - - ggml_backend_buffer_t buf_src = src->view_src ? src->view_src->buffer : src->buffer; - ggml_backend_buffer_t buf_dst = dst->view_src ? dst->view_src->buffer : dst->buffer; - - if (!ggml_backend_buffer_is_cuda(src->buffer)) { - return false; - } - - if (!ggml_backend_buffer_is_cuda(dst->buffer)) { - return false; - } - - // device -> device - ggml_backend_cuda_context * cuda_ctx_src = (ggml_backend_cuda_context *)backend_src->context; - ggml_backend_cuda_context * cuda_ctx_dst = (ggml_backend_cuda_context *)backend_dst->context; - - if (backend_src != backend_dst) { - ggml_backend_cuda_buffer_context * buf_ctx_src = (ggml_backend_cuda_buffer_context *)buf_src->context; - ggml_backend_cuda_buffer_context * buf_ctx_dst = (ggml_backend_cuda_buffer_context *)buf_dst->context; - - GGML_ASSERT(cuda_ctx_src->device == buf_ctx_src->device); - GGML_ASSERT(cuda_ctx_dst->device == buf_ctx_dst->device); - - // copy on src stream - if (cuda_ctx_src->device == cuda_ctx_dst->device) { - CUDA_CHECK(cudaMemcpyAsync(dst->data, src->data, ggml_nbytes(dst), cudaMemcpyDeviceToDevice, cuda_ctx_dst->stream())); - } else { -#ifdef GGML_CUDA_NO_PEER_COPY - return false; -#else - CUDA_CHECK(cudaMemcpyPeerAsync(dst->data, cuda_ctx_dst->device, src->data, cuda_ctx_src->device, ggml_nbytes(dst), cuda_ctx_src->stream())); -#endif - } - - // record event on src stream - if (!cuda_ctx_src->copy_event) { - ggml_cuda_set_device(cuda_ctx_src->device); - CUDA_CHECK(cudaEventCreateWithFlags(&cuda_ctx_src->copy_event, cudaEventDisableTiming)); - } - - CUDA_CHECK(cudaEventRecord(cuda_ctx_src->copy_event, cuda_ctx_src->stream())); - - // wait on dst stream for the copy to complete - CUDA_CHECK(cudaStreamWaitEvent(cuda_ctx_dst->stream(), cuda_ctx_src->copy_event, 0)); - } else { - // src and dst are on the same backend - CUDA_CHECK(cudaMemcpyAsync(dst->data, src->data, ggml_nbytes(dst), cudaMemcpyDeviceToDevice, cuda_ctx_dst->stream())); - } - return true; -} - -GGML_CALL static void ggml_backend_cuda_synchronize(ggml_backend_t backend) { - ggml_backend_cuda_context * cuda_ctx = (ggml_backend_cuda_context *)backend->context; - - CUDA_CHECK(cudaStreamSynchronize(cuda_ctx->stream())); - - GGML_UNUSED(backend); -} - -GGML_CALL static enum ggml_status ggml_backend_cuda_graph_compute(ggml_backend_t backend, ggml_cgraph * cgraph) { - ggml_backend_cuda_context * cuda_ctx = (ggml_backend_cuda_context *)backend->context; - - ggml_cuda_set_device(cuda_ctx->device); - - for (int i = 0; i < cgraph->n_nodes; i++) { - ggml_tensor * node = cgraph->nodes[i]; - - if (ggml_is_empty(node) || node->op == GGML_OP_RESHAPE || node->op == GGML_OP_TRANSPOSE || node->op == GGML_OP_VIEW || node->op == GGML_OP_PERMUTE || node->op == GGML_OP_NONE) { - continue; - } - -#ifndef NDEBUG - assert(node->buffer->buft == ggml_backend_cuda_buffer_type(cuda_ctx->device)); - for (int j = 0; j < GGML_MAX_SRC; j++) { - if (node->src[j] != nullptr) { - assert(node->src[j]->buffer->buft == ggml_backend_cuda_buffer_type(cuda_ctx->device) || ggml_backend_buffer_is_cuda_split(node->src[j]->buffer)); - } - } -#endif - - bool ok = ggml_cuda_compute_forward(*cuda_ctx, node); - if (!ok) { - fprintf(stderr, "%s: error: op not supported %s (%s)\n", __func__, node->name, ggml_op_name(node->op)); - } - GGML_ASSERT(ok); - } - - return GGML_STATUS_SUCCESS; -} - -GGML_CALL static bool ggml_backend_cuda_supports_op(ggml_backend_t backend, const ggml_tensor * op) { - switch (op->op) { - case GGML_OP_UNARY: - switch (ggml_get_unary_op(op)) { - case GGML_UNARY_OP_GELU: - case GGML_UNARY_OP_SILU: - case GGML_UNARY_OP_RELU: - case GGML_UNARY_OP_HARDSIGMOID: - case GGML_UNARY_OP_HARDSWISH: - case GGML_UNARY_OP_GELU_QUICK: - case GGML_UNARY_OP_TANH: - return true; - default: - return false; - } - break; - case GGML_OP_MUL_MAT: - case GGML_OP_MUL_MAT_ID: - { - struct ggml_tensor * a; - struct ggml_tensor * b; - if (op->op == GGML_OP_MUL_MAT) { - a = op->src[0]; - b = op->src[1]; - } else { - a = op->src[2]; - b = op->src[1]; - } - if (a->ne[3] != b->ne[3]) { - return false; - } - ggml_type a_type = a->type; - if (a_type == GGML_TYPE_IQ2_XXS || a_type == GGML_TYPE_IQ2_XS || a_type == GGML_TYPE_IQ3_XXS || - a_type == GGML_TYPE_IQ1_S || a_type == GGML_TYPE_IQ4_NL || a_type == GGML_TYPE_IQ3_S || - a_type == GGML_TYPE_IQ1_M || a_type == GGML_TYPE_IQ2_S || a_type == GGML_TYPE_IQ4_XS) { - if (b->ne[1] == 1 && ggml_nrows(b) > 1) { - return false; - } - } - return true; - } break; - case GGML_OP_GET_ROWS: - { - switch (op->src[0]->type) { - case GGML_TYPE_F16: - case GGML_TYPE_F32: - case GGML_TYPE_Q4_0: - case GGML_TYPE_Q4_1: - case GGML_TYPE_Q5_0: - case GGML_TYPE_Q5_1: - case GGML_TYPE_Q8_0: - return true; - default: - return false; - } - } break; - case GGML_OP_CPY: - { - ggml_type src0_type = op->src[0]->type; - ggml_type src1_type = op->src[1]->type; - if (src0_type == GGML_TYPE_F32 && src1_type == GGML_TYPE_F32) { - return true; - } - if (src0_type == GGML_TYPE_F32 && src1_type == GGML_TYPE_F16) { - return true; - } - if (src0_type == GGML_TYPE_F32 && src1_type == GGML_TYPE_Q8_0) { - return true; - } - if (src0_type == GGML_TYPE_F32 && src1_type == GGML_TYPE_Q4_0) { - return true; - } - if (src0_type == GGML_TYPE_F32 && src1_type == GGML_TYPE_Q4_1) { - return true; - } - if (src0_type == GGML_TYPE_F32 && src1_type == GGML_TYPE_Q5_0) { - return true; - } - if (src0_type == GGML_TYPE_F32 && src1_type == GGML_TYPE_Q5_1) { - return true; - } - if (src0_type == GGML_TYPE_F32 && src1_type == GGML_TYPE_IQ4_NL) { - return true; - } - if (src0_type == GGML_TYPE_F16 && src1_type == GGML_TYPE_F16) { - return true; - } - if (src0_type == GGML_TYPE_F16 && src1_type == GGML_TYPE_F32) { - return true; - } - return false; - } break; - case GGML_OP_DUP: - case GGML_OP_REPEAT: - case GGML_OP_CONCAT: - { - ggml_type src0_type = op->src[0]->type; - return src0_type != GGML_TYPE_I32 && src0_type != GGML_TYPE_I16; - } break; - case GGML_OP_NONE: - case GGML_OP_RESHAPE: - case GGML_OP_VIEW: - case GGML_OP_PERMUTE: - case GGML_OP_TRANSPOSE: - case GGML_OP_NORM: - case GGML_OP_ADD: - case GGML_OP_MUL: - case GGML_OP_DIV: - case GGML_OP_RMS_NORM: - case GGML_OP_SCALE: - case GGML_OP_SQR: - case GGML_OP_CLAMP: - case GGML_OP_CONT: - case GGML_OP_DIAG_MASK_INF: - case GGML_OP_SOFT_MAX: - case GGML_OP_ROPE: - case GGML_OP_ALIBI: - case GGML_OP_IM2COL: - case GGML_OP_POOL_2D: - case GGML_OP_SUM_ROWS: - case GGML_OP_ARGSORT: - case GGML_OP_ACC: - case GGML_OP_GROUP_NORM: - case GGML_OP_UPSCALE: - case GGML_OP_PAD: - case GGML_OP_ARANGE: - case GGML_OP_TIMESTEP_EMBEDDING: - case GGML_OP_LEAKY_RELU: - return true; - default: - return false; - } - - GGML_UNUSED(backend); -} - -GGML_CALL static bool ggml_backend_cuda_offload_op(ggml_backend_t backend, const ggml_tensor * op) { - const int min_batch_size = 32; - - return (op->ne[1] >= min_batch_size && op->op != GGML_OP_GET_ROWS) || - (op->ne[2] >= min_batch_size && op->op == GGML_OP_MUL_MAT_ID); - - GGML_UNUSED(backend); -} - -static ggml_backend_event_t ggml_backend_cuda_event_new(ggml_backend_t backend) { -#ifdef GGML_CUDA_NO_PEER_COPY - return nullptr; -#else - ggml_backend_cuda_context * cuda_ctx = (ggml_backend_cuda_context *)backend->context; - - ggml_cuda_set_device(cuda_ctx->device); - - cudaEvent_t event; - CUDA_CHECK(cudaEventCreateWithFlags(&event, cudaEventDisableTiming)); - - return new ggml_backend_event { - /* .backend = */ backend, - /* .context = */ event, - }; -#endif -} - -static void ggml_backend_cuda_event_free(ggml_backend_event_t event) { - CUDA_CHECK(cudaEventDestroy((cudaEvent_t)event->context)); - - delete event; -} - -static void ggml_backend_cuda_event_record(ggml_backend_event_t event) { - ggml_backend_cuda_context * cuda_ctx = (ggml_backend_cuda_context *)event->backend->context; - - CUDA_CHECK(cudaEventRecord((cudaEvent_t)event->context, cuda_ctx->stream())); -} - -static void ggml_backend_cuda_event_wait(ggml_backend_t backend, ggml_backend_event_t event) { - ggml_backend_cuda_context * cuda_ctx = (ggml_backend_cuda_context *)backend->context; - - if (ggml_backend_is_cuda(event->backend)) { - CUDA_CHECK(cudaStreamWaitEvent(cuda_ctx->stream(), (cudaEvent_t)event->context, 0)); - } else { -#if 0 - // untested - auto wait_fn = [](void * user_data) { - ggml_backend_event_t event = (ggml_backend_event_t)user_data; - ggml_backend_event_synchronize(event); - }; - - CUDA_CHECK(cudaLaunchHostFunc(cuda_ctx->stream(), wait_fn, event)); -#endif - GGML_ASSERT(false); - } -} - -static void ggml_backend_cuda_event_synchronize(ggml_backend_event_t event) { - CUDA_CHECK(cudaEventSynchronize((cudaEvent_t)event->context)); -} - -static ggml_backend_i ggml_backend_cuda_interface = { - /* .get_name = */ ggml_backend_cuda_name, - /* .free = */ ggml_backend_cuda_free, - /* .get_default_buffer_type = */ ggml_backend_cuda_get_default_buffer_type, - /* .set_tensor_async = */ ggml_backend_cuda_set_tensor_async, - /* .get_tensor_async = */ ggml_backend_cuda_get_tensor_async, - /* .cpy_tensor_async = */ ggml_backend_cuda_cpy_tensor_async, - /* .synchronize = */ ggml_backend_cuda_synchronize, - /* .graph_plan_create = */ NULL, - /* .graph_plan_free = */ NULL, - /* .graph_plan_compute = */ NULL, - /* .graph_compute = */ ggml_backend_cuda_graph_compute, - /* .supports_op = */ ggml_backend_cuda_supports_op, - /* .offload_op = */ ggml_backend_cuda_offload_op, - /* .event_new = */ ggml_backend_cuda_event_new, - /* .event_free = */ ggml_backend_cuda_event_free, - /* .event_record = */ ggml_backend_cuda_event_record, - /* .event_wait = */ ggml_backend_cuda_event_wait, - /* .event_synchronize = */ ggml_backend_cuda_event_synchronize, -}; - -static ggml_guid_t ggml_backend_cuda_guid() { - static ggml_guid guid = { 0x2c, 0xdd, 0xe8, 0x1c, 0x65, 0xb3, 0x65, 0x73, 0x6a, 0x12, 0x88, 0x61, 0x1c, 0xc9, 0xdc, 0x25 }; - return &guid; -} - -GGML_CALL ggml_backend_t ggml_backend_cuda_init(int device) { - if (device < 0 || device >= ggml_backend_cuda_get_device_count()) { - fprintf(stderr, "%s: error: invalid device %d\n", __func__, device); - return nullptr; - } - - ggml_backend_cuda_context * ctx = new ggml_backend_cuda_context(device); - if (ctx == nullptr) { - fprintf(stderr, "%s: error: failed to allocate context\n", __func__); - return nullptr; - } - - ggml_backend_t cuda_backend = new ggml_backend { - /* .guid = */ ggml_backend_cuda_guid(), - /* .interface = */ ggml_backend_cuda_interface, - /* .context = */ ctx - }; - - return cuda_backend; -} - -GGML_CALL bool ggml_backend_is_cuda(ggml_backend_t backend) { - return backend != NULL && ggml_guid_matches(backend->guid, ggml_backend_cuda_guid()); -} - -GGML_CALL int ggml_backend_cuda_get_device_count() { - return ggml_cuda_info().device_count; -} - -GGML_CALL void ggml_backend_cuda_get_device_description(int device, char * description, size_t description_size) { - cudaDeviceProp prop; - CUDA_CHECK(cudaGetDeviceProperties(&prop, device)); - snprintf(description, description_size, "%s", prop.name); -} - -GGML_CALL void ggml_backend_cuda_get_device_memory(int device, size_t * free, size_t * total) { - ggml_cuda_set_device(device); - - CUDA_CHECK(cudaMemGetInfo(free, total)); -} - -GGML_CALL bool ggml_backend_cuda_register_host_buffer(void * buffer, size_t size) { - if (getenv("GGML_CUDA_REGISTER_HOST") == nullptr) { - return false; - } - -#if CUDART_VERSION >= 11100 - cudaError_t err = cudaHostRegister(buffer, size, cudaHostRegisterPortable | cudaHostRegisterReadOnly); - if (err != cudaSuccess) { - // clear the error - cudaGetLastError(); - - fprintf(stderr, "%s: warning: failed to register %.2f MiB of pinned memory: %s\n", __func__, - size/1024.0/1024.0, cudaGetErrorString(err)); - return false; - } - return true; -#else - return false; -#endif -} - -GGML_CALL void ggml_backend_cuda_unregister_host_buffer(void * buffer) { - if (getenv("GGML_CUDA_REGISTER_HOST") == nullptr) { - return; - } - - cudaError_t err = cudaHostUnregister(buffer); - if (err != cudaSuccess) { - // clear the error - cudaGetLastError(); - } -} - -// backend registry -GGML_CALL static ggml_backend_t ggml_backend_reg_cuda_init(const char * params, void * user_data) { - ggml_backend_t cuda_backend = ggml_backend_cuda_init((int) (intptr_t) user_data); - return cuda_backend; - - GGML_UNUSED(params); -} - -extern "C" GGML_CALL int ggml_backend_cuda_reg_devices(); - -GGML_CALL int ggml_backend_cuda_reg_devices() { - int device_count = ggml_backend_cuda_get_device_count(); - //int device_count = 1; // DEBUG: some tools require delaying CUDA initialization - for (int i = 0; i < device_count; i++) { - char name[128]; - snprintf(name, sizeof(name), "%s%d", GGML_CUDA_NAME, i); - ggml_backend_register(name, ggml_backend_reg_cuda_init, ggml_backend_cuda_buffer_type(i), (void *) (intptr_t) i); - } - return device_count; -} diff --git a/ggml-cuda.h b/ggml-cuda.h deleted file mode 100644 index 5eb4af40f4d..00000000000 --- a/ggml-cuda.h +++ /dev/null @@ -1,43 +0,0 @@ -#pragma once - -#include "ggml.h" -#include "ggml-backend.h" - -#ifdef GGML_USE_HIPBLAS -#define GGML_CUDA_NAME "ROCm" -#define GGML_CUBLAS_NAME "hipBLAS" -#else -#define GGML_CUDA_NAME "CUDA" -#define GGML_CUBLAS_NAME "cuBLAS" -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -#define GGML_CUDA_MAX_DEVICES 16 - -// backend API -GGML_API GGML_CALL ggml_backend_t ggml_backend_cuda_init(int device); - -GGML_API GGML_CALL bool ggml_backend_is_cuda(ggml_backend_t backend); - -// device buffer -GGML_API GGML_CALL ggml_backend_buffer_type_t ggml_backend_cuda_buffer_type(int device); - -// split tensor buffer that splits matrices by rows across multiple devices -GGML_API GGML_CALL ggml_backend_buffer_type_t ggml_backend_cuda_split_buffer_type(const float * tensor_split); - -// pinned host buffer for use with the CPU backend for faster copies between CPU and GPU -GGML_API GGML_CALL ggml_backend_buffer_type_t ggml_backend_cuda_host_buffer_type(void); - -GGML_API GGML_CALL int ggml_backend_cuda_get_device_count(void); -GGML_API GGML_CALL void ggml_backend_cuda_get_device_description(int device, char * description, size_t description_size); -GGML_API GGML_CALL void ggml_backend_cuda_get_device_memory(int device, size_t * free, size_t * total); - -GGML_API GGML_CALL bool ggml_backend_cuda_register_host_buffer(void * buffer, size_t size); -GGML_API GGML_CALL void ggml_backend_cuda_unregister_host_buffer(void * buffer); - -#ifdef __cplusplus -} -#endif diff --git a/ggml-cuda/acc.cu b/ggml-cuda/acc.cu deleted file mode 100644 index 96bfe1c9d81..00000000000 --- a/ggml-cuda/acc.cu +++ /dev/null @@ -1,47 +0,0 @@ -#include "acc.cuh" - -static __global__ void acc_f32(const float * x, const float * y, float * dst, const int ne, - const int ne10, const int ne11, const int ne12, - const int nb1, const int nb2, int offset) { - const int i = blockDim.x * blockIdx.x + threadIdx.x; - if (i >= ne) { - return; - } - int src1_idx = i - offset; - int oz = src1_idx / nb2; - int oy = (src1_idx - (oz * nb2)) / nb1; - int ox = src1_idx % nb1; - if (src1_idx >= 0 && ox < ne10 && oy < ne11 && oz < ne12) { - dst[i] = x[i] + y[ox + oy * ne10 + oz * ne10 * ne11]; - } else { - dst[i] = x[i]; - } -} - -static void acc_f32_cuda(const float * x, const float * y, float * dst, const int n_elements, - const int ne10, const int ne11, const int ne12, - const int nb1, const int nb2, const int offset, cudaStream_t stream) { - int num_blocks = (n_elements + CUDA_ACC_BLOCK_SIZE - 1) / CUDA_ACC_BLOCK_SIZE; - acc_f32<<>>(x, y, dst, n_elements, ne10, ne11, ne12, nb1, nb2, offset); -} - -void ggml_cuda_op_acc(ggml_backend_cuda_context & ctx, ggml_tensor * dst) { - const ggml_tensor * src0 = dst->src[0]; - const ggml_tensor * src1 = dst->src[1]; - const float * src0_d = (const float *)src0->data; - const float * src1_d = (const float *)src1->data; - float * dst_d = (float *)dst->data; - cudaStream_t stream = ctx.stream(); - - GGML_ASSERT(src0->type == GGML_TYPE_F32); - GGML_ASSERT(src1->type == GGML_TYPE_F32); - GGML_ASSERT( dst->type == GGML_TYPE_F32); - GGML_ASSERT(dst->ne[3] == 1); // just 3D tensors supported - - int nb1 = dst->op_params[0] / 4; // 4 bytes of float32 - int nb2 = dst->op_params[1] / 4; // 4 bytes of float32 - // int nb3 = dst->op_params[2] / 4; // 4 bytes of float32 - unused - int offset = dst->op_params[3] / 4; // offset in bytes - - acc_f32_cuda(src0_d, src1_d, dst_d, ggml_nelements(dst), src1->ne[0], src1->ne[1], src1->ne[2], nb1, nb2, offset, stream); -} diff --git a/ggml-cuda/acc.cuh b/ggml-cuda/acc.cuh deleted file mode 100644 index 1168ea1b2e8..00000000000 --- a/ggml-cuda/acc.cuh +++ /dev/null @@ -1,5 +0,0 @@ -#include "common.cuh" - -#define CUDA_ACC_BLOCK_SIZE 256 - -void ggml_cuda_op_acc(ggml_backend_cuda_context & ctx, ggml_tensor * dst); diff --git a/ggml-cuda/alibi.cu b/ggml-cuda/alibi.cu deleted file mode 100644 index 6c7f1fd9562..00000000000 --- a/ggml-cuda/alibi.cu +++ /dev/null @@ -1,63 +0,0 @@ -#include "alibi.cuh" - -static __global__ void alibi_f32(const float * x, float * dst, const int ncols, const int k_rows, - const int n_heads_log2_floor, const float m0, const float m1) { - const int col = blockDim.x*blockIdx.x + threadIdx.x; - - if (col >= ncols) { - return; - } - - const int row = blockDim.y*blockIdx.y + threadIdx.y; - const int i = row*ncols + col; - - const int k = row/k_rows; - - float m_k; - if (k < n_heads_log2_floor) { - m_k = powf(m0, k + 1); - } else { - m_k = powf(m1, 2 * (k - n_heads_log2_floor) + 1); - } - - dst[i] = col * m_k + x[i]; -} - -static void alibi_f32_cuda(const float * x, float * dst, const int ncols, const int nrows, - const int k_rows, const int n_heads_log2_floor, const float m0, - const float m1, cudaStream_t stream) { - const dim3 block_dims(CUDA_ALIBI_BLOCK_SIZE, 1, 1); - const int num_blocks_x = (ncols + CUDA_ALIBI_BLOCK_SIZE - 1) / (CUDA_ALIBI_BLOCK_SIZE); - const dim3 block_nums(num_blocks_x, nrows, 1); - alibi_f32<<>>(x, dst, ncols, k_rows, n_heads_log2_floor, m0, m1); -} - -void ggml_cuda_op_alibi(ggml_backend_cuda_context & ctx, ggml_tensor * dst) { - const ggml_tensor * src0 = dst->src[0]; - const float * src0_d = (const float *)src0->data; - float * dst_d = (float *)dst->data; - cudaStream_t stream = ctx.stream(); - - GGML_ASSERT(src0->type == GGML_TYPE_F32); - GGML_ASSERT( dst->type == GGML_TYPE_F32); - - const int64_t ne00 = src0->ne[0]; - const int64_t ne01 = src0->ne[1]; - const int64_t ne02 = src0->ne[2]; - const int64_t nrows = ggml_nrows(src0); - - //const int n_past = ((int32_t *) dst->op_params)[0]; - const int n_head = ((int32_t *) dst->op_params)[1]; - float max_bias; - memcpy(&max_bias, (int32_t *) dst->op_params + 2, sizeof(float)); - - //GGML_ASSERT(ne01 + n_past == ne00); - GGML_ASSERT(n_head == ne02); - - const int n_heads_log2_floor = 1 << (int) floor(log2(n_head)); - - const float m0 = powf(2.0f, -(max_bias) / n_heads_log2_floor); - const float m1 = powf(2.0f, -(max_bias / 2.0f) / n_heads_log2_floor); - - alibi_f32_cuda(src0_d, dst_d, ne00, nrows, ne01, n_heads_log2_floor, m0, m1, stream); -} diff --git a/ggml-cuda/alibi.cuh b/ggml-cuda/alibi.cuh deleted file mode 100644 index 630adfc7f63..00000000000 --- a/ggml-cuda/alibi.cuh +++ /dev/null @@ -1,5 +0,0 @@ -#include "common.cuh" - -#define CUDA_ALIBI_BLOCK_SIZE 32 - -void ggml_cuda_op_alibi(ggml_backend_cuda_context & ctx, ggml_tensor * dst); diff --git a/ggml-cuda/arange.cu b/ggml-cuda/arange.cu deleted file mode 100644 index b5e495a2462..00000000000 --- a/ggml-cuda/arange.cu +++ /dev/null @@ -1,34 +0,0 @@ -#include "arange.cuh" - -static __global__ void arange_f32(float * dst, const int ne0, const float start, const float step) { - // blockIDx.x: idx of ne0 / BLOCK_SIZE - int nidx = threadIdx.x + blockIdx.x * blockDim.x; - if (nidx >= ne0) { - return; - } - dst[nidx] = start + step * nidx; -} - -static void arange_f32_cuda(float * dst, const int ne0, const float start, const float step, cudaStream_t stream) { - int num_blocks = (ne0 + CUDA_ARANGE_BLOCK_SIZE - 1) / CUDA_ARANGE_BLOCK_SIZE; - arange_f32<<>>(dst, ne0, start, step); -} - -void ggml_cuda_op_arange(ggml_backend_cuda_context & ctx, ggml_tensor * dst) { - float * dst_d = (float *)dst->data; - cudaStream_t stream = ctx.stream(); - - GGML_ASSERT(dst->type == GGML_TYPE_F32); - - float start; - float stop; - float step; - memcpy(&start, (float *)dst->op_params + 0, sizeof(float)); - memcpy(&stop, (float *)dst->op_params + 1, sizeof(float)); - memcpy(&step, (float *)dst->op_params + 2, sizeof(float)); - - int64_t steps = (int64_t)ceil((stop - start) / step); - GGML_ASSERT(ggml_nelements(dst) == steps); - - arange_f32_cuda(dst_d, dst->ne[0], start, step, stream); -} diff --git a/ggml-cuda/arange.cuh b/ggml-cuda/arange.cuh deleted file mode 100644 index 41e74fdfc20..00000000000 --- a/ggml-cuda/arange.cuh +++ /dev/null @@ -1,5 +0,0 @@ -#include "common.cuh" - -#define CUDA_ARANGE_BLOCK_SIZE 256 - -void ggml_cuda_op_arange(ggml_backend_cuda_context & ctx, ggml_tensor * dst); diff --git a/ggml-cuda/argsort.cu b/ggml-cuda/argsort.cu deleted file mode 100644 index 16414406177..00000000000 --- a/ggml-cuda/argsort.cu +++ /dev/null @@ -1,103 +0,0 @@ -#include "argsort.cuh" - -template -static inline __device__ void ggml_cuda_swap(T & a, T & b) { - T tmp = a; - a = b; - b = tmp; -} - -template -static __global__ void k_argsort_f32_i32(const float * x, int * dst, const int ncols, int ncols_pad) { - // bitonic sort - int col = threadIdx.x; - int row = blockIdx.y; - - if (col >= ncols_pad) { - return; - } - - const float * x_row = x + row * ncols; - extern __shared__ int dst_row[]; - - // initialize indices - dst_row[col] = col; - - __syncthreads(); - - for (int k = 2; k <= ncols_pad; k *= 2) { - for (int j = k / 2; j > 0; j /= 2) { - int ixj = col ^ j; - if (ixj > col) { - if ((col & k) == 0) { - if (dst_row[col] >= ncols || - (dst_row[ixj] < ncols && (order == GGML_SORT_ORDER_ASC ? - x_row[dst_row[col]] > x_row[dst_row[ixj]] : - x_row[dst_row[col]] < x_row[dst_row[ixj]])) - ) { - ggml_cuda_swap(dst_row[col], dst_row[ixj]); - } - } else { - if (dst_row[ixj] >= ncols || - (dst_row[col] < ncols && (order == GGML_SORT_ORDER_ASC ? - x_row[dst_row[col]] < x_row[dst_row[ixj]] : - x_row[dst_row[col]] > x_row[dst_row[ixj]])) - ) { - ggml_cuda_swap(dst_row[col], dst_row[ixj]); - } - } - } - __syncthreads(); - } - } - - // copy the result to dst without the padding - if (col < ncols) { - dst[row * ncols + col] = dst_row[col]; - } -} - -static int next_power_of_2(int x) { - int n = 1; - while (n < x) { - n *= 2; - } - return n; -} - -static void argsort_f32_i32_cuda(const float * x, int * dst, const int ncols, const int nrows, ggml_sort_order order, cudaStream_t stream) { - // bitonic sort requires ncols to be power of 2 - const int ncols_pad = next_power_of_2(ncols); - - const dim3 block_dims(ncols_pad, 1, 1); - const dim3 block_nums(1, nrows, 1); - const size_t shared_mem = ncols_pad * sizeof(int); - - GGML_ASSERT(shared_mem <= ggml_cuda_info().devices[ggml_cuda_get_device()].smpb); - - if (order == GGML_SORT_ORDER_ASC) { - k_argsort_f32_i32<<>>(x, dst, ncols, ncols_pad); - } else if (order == GGML_SORT_ORDER_DESC) { - k_argsort_f32_i32<<>>(x, dst, ncols, ncols_pad); - } else { - GGML_ASSERT(false); - } -} - -void ggml_cuda_op_argsort(ggml_backend_cuda_context & ctx, ggml_tensor * dst) { - const ggml_tensor * src0 = dst->src[0]; - const float * src0_d = (const float *)src0->data; - float * dst_d = (float *)dst->data; - cudaStream_t stream = ctx.stream(); - - GGML_ASSERT(src0->type == GGML_TYPE_F32); - GGML_ASSERT( dst->type == GGML_TYPE_I32); - GGML_ASSERT(ggml_is_contiguous(src0)); - - const int64_t ncols = src0->ne[0]; - const int64_t nrows = ggml_nrows(src0); - - enum ggml_sort_order order = (enum ggml_sort_order) dst->op_params[0]; - - argsort_f32_i32_cuda(src0_d, (int *)dst_d, ncols, nrows, order, stream); -} diff --git a/ggml-cuda/argsort.cuh b/ggml-cuda/argsort.cuh deleted file mode 100644 index 68a001547ff..00000000000 --- a/ggml-cuda/argsort.cuh +++ /dev/null @@ -1,3 +0,0 @@ -#include "common.cuh" - -void ggml_cuda_op_argsort(ggml_backend_cuda_context & ctx, ggml_tensor * dst); diff --git a/ggml-cuda/binbcast.cu b/ggml-cuda/binbcast.cu deleted file mode 100644 index 19b08b74fb0..00000000000 --- a/ggml-cuda/binbcast.cu +++ /dev/null @@ -1,280 +0,0 @@ -#include "binbcast.cuh" - -static __device__ __forceinline__ float op_repeat(const float a, const float b) { - return b; - GGML_UNUSED(a); -} - -static __device__ __forceinline__ float op_add(const float a, const float b) { - return a + b; -} - -static __device__ __forceinline__ float op_mul(const float a, const float b) { - return a * b; -} - -static __device__ __forceinline__ float op_div(const float a, const float b) { - return a / b; -} - -template -static __global__ void k_bin_bcast(const src0_t * src0, const src1_t * src1, dst_t * dst, - int ne0, int ne1, int ne2, int ne3, - int ne10, int ne11, int ne12, int ne13, - /*int s0, */ int s1, int s2, int s3, - /*int s00,*/ int s01, int s02, int s03, - /*int s10,*/ int s11, int s12, int s13) { - const int i0s = blockDim.x*blockIdx.x + threadIdx.x; - const int i1 = (blockDim.y*blockIdx.y + threadIdx.y); - const int i2 = (blockDim.z*blockIdx.z + threadIdx.z) / ne3; - const int i3 = (blockDim.z*blockIdx.z + threadIdx.z) % ne3; - - if (i0s >= ne0 || i1 >= ne1 || i2 >= ne2 || i3 >= ne3) { - return; - } - - const int i11 = i1 % ne11; - const int i12 = i2 % ne12; - const int i13 = i3 % ne13; - - const size_t i_src0 = i3*s03 + i2*s02 + i1*s01; - const size_t i_src1 = i13*s13 + i12*s12 + i11*s11; - const size_t i_dst = i3*s3 + i2*s2 + i1*s1; - - const src0_t * src0_row = src0 + i_src0; - const src1_t * src1_row = src1 + i_src1; - dst_t * dst_row = dst + i_dst; - - for (int i0 = i0s; i0 < ne0; i0 += blockDim.x*gridDim.x) { - const int i10 = i0 % ne10; - dst_row[i0] = (dst_t)bin_op(src0 ? (float)src0_row[i0] : 0.0f, (float)src1_row[i10]); - } -} - -template -static __global__ void k_bin_bcast_unravel(const src0_t * src0, const src1_t * src1, dst_t * dst, - int ne0, int ne1, int ne2, int ne3, - int ne10, int ne11, int ne12, int ne13, - /*int s0, */ int s1, int s2, int s3, - /*int s00,*/ int s01, int s02, int s03, - /*int s10,*/ int s11, int s12, int s13) { - - const int i = blockDim.x*blockIdx.x + threadIdx.x; - - const int i3 = i/(ne2*ne1*ne0); - const int i2 = (i/(ne1*ne0)) % ne2; - const int i1 = (i/ne0) % ne1; - const int i0 = i % ne0; - - if (i0 >= ne0 || i1 >= ne1 || i2 >= ne2 || i3 >= ne3) { - return; - } - - const int i11 = i1 % ne11; - const int i12 = i2 % ne12; - const int i13 = i3 % ne13; - - const size_t i_src0 = i3*s03 + i2*s02 + i1*s01; - const size_t i_src1 = i13*s13 + i12*s12 + i11*s11; - const size_t i_dst = i3*s3 + i2*s2 + i1*s1; - - const src0_t * src0_row = src0 + i_src0; - const src1_t * src1_row = src1 + i_src1; - dst_t * dst_row = dst + i_dst; - - const int i10 = i0 % ne10; - dst_row[i0] = (dst_t)bin_op(src0 ? (float)src0_row[i0] : 0.0f, (float)src1_row[i10]); -} - -template -struct bin_bcast_cuda { - template - void operator()(const struct ggml_tensor * src0, const struct ggml_tensor * src1, struct ggml_tensor * dst, - const src0_t * src0_dd, const src1_t * src1_dd, dst_t * dst_dd, - cudaStream_t stream) { - - GGML_TENSOR_BINARY_OP_LOCALS - - int nr0 = ne10/ne0; - int nr1 = ne11/ne1; - int nr2 = ne12/ne2; - int nr3 = ne13/ne3; - - int nr[4] = { nr0, nr1, nr2, nr3 }; - - // collapse dimensions until first broadcast dimension - int64_t cne[] = {ne0, ne1, ne2, ne3}; - int64_t cne0[] = {ne00, ne01, ne02, ne03}; - int64_t cne1[] = {ne10, ne11, ne12, ne13}; - - size_t cnb[] = {nb0, nb1, nb2, nb3}; - size_t cnb0[] = {nb00, nb01, nb02, nb03}; - size_t cnb1[] = {nb10, nb11, nb12, nb13}; - - auto collapse = [](int64_t cne[]) { - cne[0] *= cne[1]; - cne[1] = cne[2]; - cne[2] = cne[3]; - cne[3] = 1; - }; - - auto collapse_nb = [](size_t cnb[], const int64_t cne[]) { - cnb[1] *= cne[1]; - cnb[2] *= cne[2]; - cnb[3] *= cne[3]; - }; - - if (ggml_is_contiguous(src0) && ggml_is_contiguous(src1) && ggml_is_contiguous(dst)) { - for (int i = 0; i < 4; i++) { - if (nr[i] != 1) { - break; - } - if (i > 0) { - collapse_nb(cnb, cne); - collapse_nb(cnb0, cne0); - collapse_nb(cnb1, cne1); - collapse(cne); - collapse(cne0); - collapse(cne1); - } - } - } - - { - int64_t ne0 = cne[0]; - int64_t ne1 = cne[1]; - int64_t ne2 = cne[2]; - int64_t ne3 = cne[3]; - - //int64_t ne00 = cne0[0]; GGML_UNUSED(ne00); - //int64_t ne01 = cne0[1]; GGML_UNUSED(ne01); - //int64_t ne02 = cne0[2]; GGML_UNUSED(ne02); - //int64_t ne03 = cne0[3]; GGML_UNUSED(ne03); - - int64_t ne10 = cne1[0]; - int64_t ne11 = cne1[1]; - int64_t ne12 = cne1[2]; - int64_t ne13 = cne1[3]; - - size_t nb0 = cnb[0]; - size_t nb1 = cnb[1]; - size_t nb2 = cnb[2]; - size_t nb3 = cnb[3]; - - size_t nb00 = cnb0[0]; - size_t nb01 = cnb0[1]; - size_t nb02 = cnb0[2]; - size_t nb03 = cnb0[3]; - - size_t nb10 = cnb1[0]; - size_t nb11 = cnb1[1]; - size_t nb12 = cnb1[2]; - size_t nb13 = cnb1[3]; - - size_t s0 = nb0 / sizeof(dst_t); - size_t s1 = nb1 / sizeof(dst_t); - size_t s2 = nb2 / sizeof(dst_t); - size_t s3 = nb3 / sizeof(dst_t); - - size_t s10 = nb10 / sizeof(src1_t); - size_t s11 = nb11 / sizeof(src1_t); - size_t s12 = nb12 / sizeof(src1_t); - size_t s13 = nb13 / sizeof(src1_t); - - size_t s00 = nb00 / sizeof(src0_t); - size_t s01 = nb01 / sizeof(src0_t); - size_t s02 = nb02 / sizeof(src0_t); - size_t s03 = nb03 / sizeof(src0_t); - - GGML_ASSERT(nb0 % sizeof(dst_t) == 0); - GGML_ASSERT(nb1 % sizeof(dst_t) == 0); - GGML_ASSERT(nb2 % sizeof(dst_t) == 0); - GGML_ASSERT(nb3 % sizeof(dst_t) == 0); - - GGML_ASSERT(nb00 % sizeof(src0_t) == 0); - GGML_ASSERT(nb01 % sizeof(src0_t) == 0); - GGML_ASSERT(nb02 % sizeof(src0_t) == 0); - GGML_ASSERT(nb03 % sizeof(src0_t) == 0); - - GGML_ASSERT(nb10 % sizeof(src1_t) == 0); - GGML_ASSERT(nb11 % sizeof(src1_t) == 0); - GGML_ASSERT(nb12 % sizeof(src1_t) == 0); - GGML_ASSERT(nb13 % sizeof(src1_t) == 0); - - GGML_ASSERT(s0 == 1); - GGML_ASSERT(s00 == 1); - GGML_ASSERT(s10 == 1); - - const int block_size = 128; - - int64_t hne0 = std::max(ne0/2LL, 1LL); - - dim3 block_dims; - block_dims.x = std::min(hne0, block_size); - block_dims.y = std::min(ne1, block_size / block_dims.x); - block_dims.z = std::min(std::min(ne2*ne3, block_size / block_dims.x / block_dims.y), 64U); - - dim3 block_nums( - (hne0 + block_dims.x - 1) / block_dims.x, - (ne1 + block_dims.y - 1) / block_dims.y, - (ne2*ne3 + block_dims.z - 1) / block_dims.z - ); - - if (block_nums.z > 65535) { - // this is the maximum number of blocks in z dimension, fallback to 1D grid kernel - int block_num = (ne0*ne1*ne2*ne3 + block_size - 1) / block_size; - k_bin_bcast_unravel<<>>( - src0_dd, src1_dd, dst_dd, - ne0, ne1, ne2, ne3, - ne10, ne11, ne12, ne13, - /* s0, */ s1, s2, s3, - /* s00, */ s01, s02, s03, - /* s10, */ s11, s12, s13); - } else { - k_bin_bcast<<>>( - src0_dd, src1_dd, dst_dd, - ne0, ne1, ne2, ne3, - ne10, ne11, ne12, ne13, - /* s0, */ s1, s2, s3, - /* s00, */ s01, s02, s03, - /* s10, */ s11, s12, s13); - } - } - } -}; - -template -static void ggml_cuda_op_bin_bcast( - const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst, - const void * src0_dd, const void * src1_dd, void * dst_dd, cudaStream_t stream) { - - GGML_ASSERT(src1->type == GGML_TYPE_F32); - - if (src0->type == GGML_TYPE_F32 && dst->type == GGML_TYPE_F32) { - op()(src0, src1, dst, (const float *)src0_dd, (const float *)src1_dd, (float *)dst_dd, stream); - } else if (src0->type == GGML_TYPE_F16 && dst->type == GGML_TYPE_F16) { - op()(src0, src1, dst, (const half *) src0_dd, (const float *)src1_dd, (half *) dst_dd, stream); - } else if (src0->type == GGML_TYPE_F16 && dst->type == GGML_TYPE_F32) { - op()(src0, src1, dst, (const half *) src0_dd, (const float *)src1_dd, (float *)dst_dd, stream); - } else { - fprintf(stderr, "%s: unsupported types: dst: %s, src0: %s, src1: %s\n", __func__, - ggml_type_name(dst->type), ggml_type_name(src0->type), ggml_type_name(src1->type)); - GGML_ASSERT(false); - } -} - -void ggml_cuda_op_repeat(ggml_backend_cuda_context & ctx, ggml_tensor * dst) { - ggml_cuda_op_bin_bcast>(dst, dst->src[0], dst, nullptr, dst->src[0]->data, dst->data, ctx.stream()); -} - -void ggml_cuda_op_add(ggml_backend_cuda_context & ctx, ggml_tensor * dst) { - ggml_cuda_op_bin_bcast>(dst->src[0], dst->src[1], dst, dst->src[0]->data, dst->src[1]->data, dst->data, ctx.stream()); -} - -void ggml_cuda_op_mul(ggml_backend_cuda_context & ctx, ggml_tensor * dst) { - ggml_cuda_op_bin_bcast>(dst->src[0], dst->src[1], dst, dst->src[0]->data, dst->src[1]->data, dst->data, ctx.stream()); -} - -void ggml_cuda_op_div(ggml_backend_cuda_context & ctx, ggml_tensor * dst) { - ggml_cuda_op_bin_bcast>(dst->src[0], dst->src[1], dst, dst->src[0]->data, dst->src[1]->data, dst->data, ctx.stream()); -} diff --git a/ggml-cuda/binbcast.cuh b/ggml-cuda/binbcast.cuh deleted file mode 100644 index 4f63d6372eb..00000000000 --- a/ggml-cuda/binbcast.cuh +++ /dev/null @@ -1,6 +0,0 @@ -#include "common.cuh" - -void ggml_cuda_op_repeat(ggml_backend_cuda_context & ctx, ggml_tensor * dst); -void ggml_cuda_op_add(ggml_backend_cuda_context & ctx, ggml_tensor * dst); -void ggml_cuda_op_mul(ggml_backend_cuda_context & ctx, ggml_tensor * dst); -void ggml_cuda_op_div(ggml_backend_cuda_context & ctx, ggml_tensor * dst); diff --git a/ggml-cuda/clamp.cu b/ggml-cuda/clamp.cu deleted file mode 100644 index 379ded042d8..00000000000 --- a/ggml-cuda/clamp.cu +++ /dev/null @@ -1,35 +0,0 @@ -#include "clamp.cuh" - -static __global__ void clamp_f32(const float * x, float * dst, const float min, const float max, const int k) { - const int i = blockDim.x*blockIdx.x + threadIdx.x; - - if (i >= k) { - return; - } - - dst[i] = x[i] < min ? min : (x[i] > max ? max : x[i]); -} - -static void clamp_f32_cuda(const float * x, float * dst, const float min, const float max, const int k, cudaStream_t stream) { - const int num_blocks = (k + CUDA_CLAMP_BLOCK_SIZE - 1) / CUDA_CLAMP_BLOCK_SIZE; - clamp_f32<<>>(x, dst, min, max, k); -} - - -void ggml_cuda_op_clamp(ggml_backend_cuda_context & ctx, ggml_tensor * dst) { - const ggml_tensor * src0 = dst->src[0]; - const float * src0_d = (const float *)src0->data; - float * dst_d = (float *)dst->data; - cudaStream_t stream = ctx.stream(); - - GGML_ASSERT(src0->type == GGML_TYPE_F32); - GGML_ASSERT( dst->type == GGML_TYPE_F32); - - float min; - float max; - memcpy(&min, dst->op_params, sizeof(float)); - memcpy(&max, (float *) dst->op_params + 1, sizeof(float)); - - clamp_f32_cuda(src0_d, dst_d, min, max, ggml_nelements(src0), stream); - CUDA_CHECK(cudaGetLastError()); -} diff --git a/ggml-cuda/clamp.cuh b/ggml-cuda/clamp.cuh deleted file mode 100644 index 7f9559dd17e..00000000000 --- a/ggml-cuda/clamp.cuh +++ /dev/null @@ -1,5 +0,0 @@ -#include "common.cuh" - -#define CUDA_CLAMP_BLOCK_SIZE 256 - -void ggml_cuda_op_clamp(ggml_backend_cuda_context & ctx, ggml_tensor * dst); diff --git a/ggml-cuda/common.cuh b/ggml-cuda/common.cuh deleted file mode 100644 index 481065b2a34..00000000000 --- a/ggml-cuda/common.cuh +++ /dev/null @@ -1,551 +0,0 @@ -#pragma once - -#include "ggml.h" -#include "ggml-cuda.h" - -#include - -#if defined(GGML_USE_HIPBLAS) -#define GGML_COMMON_DECL_HIP -#define GGML_COMMON_IMPL_HIP -#else -#define GGML_COMMON_DECL_CUDA -#define GGML_COMMON_IMPL_CUDA -#endif -#include "ggml-common.h" - -#include -#include -#include -#include -#include - -#if defined(GGML_USE_HIPBLAS) -#include -#include -#include -#ifdef __HIP_PLATFORM_AMD__ -// for rocblas_initialize() -#include "rocblas/rocblas.h" -#endif // __HIP_PLATFORM_AMD__ -#define CUBLAS_COMPUTE_16F HIPBLAS_R_16F -#define CUBLAS_COMPUTE_32F HIPBLAS_R_32F -#define CUBLAS_COMPUTE_32F_FAST_16F HIPBLAS_R_32F -#define CUBLAS_GEMM_DEFAULT HIPBLAS_GEMM_DEFAULT -#define CUBLAS_GEMM_DEFAULT_TENSOR_OP HIPBLAS_GEMM_DEFAULT -#define CUBLAS_OP_N HIPBLAS_OP_N -#define CUBLAS_OP_T HIPBLAS_OP_T -#define CUBLAS_STATUS_SUCCESS HIPBLAS_STATUS_SUCCESS -#define CUBLAS_TF32_TENSOR_OP_MATH 0 -#define CUDA_R_16F HIPBLAS_R_16F -#define CUDA_R_32F HIPBLAS_R_32F -#define __shfl_xor_sync(mask, var, laneMask, width) __shfl_xor(var, laneMask, width) -#define cublasComputeType_t hipblasDatatype_t //deprecated, new hipblasComputeType_t not in 5.6 -#define cublasCreate hipblasCreate -#define cublasDestroy hipblasDestroy -#define cublasGemmEx hipblasGemmEx -#define cublasGemmBatchedEx hipblasGemmBatchedEx -#define cublasGemmStridedBatchedEx hipblasGemmStridedBatchedEx -#define cublasHandle_t hipblasHandle_t -#define cublasSetMathMode(handle, mode) CUBLAS_STATUS_SUCCESS -#define cublasSetStream hipblasSetStream -#define cublasSgemm hipblasSgemm -#define cublasStatus_t hipblasStatus_t -#define cudaDataType_t hipblasDatatype_t //deprecated, new hipblasDatatype not in 5.6 -#define cudaDeviceCanAccessPeer hipDeviceCanAccessPeer -#define cudaDeviceDisablePeerAccess hipDeviceDisablePeerAccess -#define cudaDeviceEnablePeerAccess hipDeviceEnablePeerAccess -#define cudaDeviceProp hipDeviceProp_t -#define cudaDeviceSynchronize hipDeviceSynchronize -#define cudaError_t hipError_t -#define cudaErrorPeerAccessAlreadyEnabled hipErrorPeerAccessAlreadyEnabled -#define cudaErrorPeerAccessNotEnabled hipErrorPeerAccessNotEnabled -#define cudaEventCreateWithFlags hipEventCreateWithFlags -#define cudaEventDisableTiming hipEventDisableTiming -#define cudaEventRecord hipEventRecord -#define cudaEventSynchronize hipEventSynchronize -#define cudaEvent_t hipEvent_t -#define cudaEventDestroy hipEventDestroy -#define cudaFree hipFree -#define cudaFreeHost hipHostFree -#define cudaGetDevice hipGetDevice -#define cudaGetDeviceCount hipGetDeviceCount -#define cudaGetDeviceProperties hipGetDeviceProperties -#define cudaGetErrorString hipGetErrorString -#define cudaGetLastError hipGetLastError -#define cudaHostRegister hipHostRegister -#define cudaHostRegisterPortable hipHostRegisterPortable -#define cudaHostRegisterReadOnly hipHostRegisterReadOnly -#define cudaHostUnregister hipHostUnregister -#define cudaLaunchHostFunc hipLaunchHostFunc -#ifdef GGML_HIP_UMA -#define cudaMalloc hipMallocManaged -#define cudaMallocHost(ptr, size) hipHostMalloc(ptr, size) -#else -#define cudaMalloc hipMalloc -#define cudaMallocHost(ptr, size) hipHostMalloc(ptr, size, hipHostMallocDefault) -#endif -#define cudaMemcpy hipMemcpy -#define cudaMemcpyAsync hipMemcpyAsync -#define cudaMemcpyPeerAsync hipMemcpyPeerAsync -#define cudaMemcpy2DAsync hipMemcpy2DAsync -#define cudaMemcpyDeviceToDevice hipMemcpyDeviceToDevice -#define cudaMemcpyDeviceToHost hipMemcpyDeviceToHost -#define cudaMemcpyHostToDevice hipMemcpyHostToDevice -#define cudaMemcpyKind hipMemcpyKind -#define cudaMemset hipMemset -#define cudaMemsetAsync hipMemsetAsync -#define cudaMemGetInfo hipMemGetInfo -#define cudaOccupancyMaxPotentialBlockSize hipOccupancyMaxPotentialBlockSize -#define cudaSetDevice hipSetDevice -#define cudaStreamCreateWithFlags hipStreamCreateWithFlags -#define cudaStreamDestroy hipStreamDestroy -#define cudaStreamFireAndForget hipStreamFireAndForget -#define cudaStreamNonBlocking hipStreamNonBlocking -#define cudaStreamPerThread hipStreamPerThread -#define cudaStreamSynchronize hipStreamSynchronize -#define cudaStreamWaitEvent(stream, event, flags) hipStreamWaitEvent(stream, event, flags) -#define cudaStream_t hipStream_t -#define cudaSuccess hipSuccess -#define __trap abort -#define CUBLAS_STATUS_SUCCESS HIPBLAS_STATUS_SUCCESS -#define CUBLAS_STATUS_NOT_INITIALIZED HIPBLAS_STATUS_NOT_INITIALIZED -#define CUBLAS_STATUS_ALLOC_FAILED HIPBLAS_STATUS_ALLOC_FAILED -#define CUBLAS_STATUS_INVALID_VALUE HIPBLAS_STATUS_INVALID_VALUE -#define CUBLAS_STATUS_ARCH_MISMATCH HIPBLAS_STATUS_ARCH_MISMATCH -#define CUBLAS_STATUS_MAPPING_ERROR HIPBLAS_STATUS_MAPPING_ERROR -#define CUBLAS_STATUS_EXECUTION_FAILED HIPBLAS_STATUS_EXECUTION_FAILED -#define CUBLAS_STATUS_INTERNAL_ERROR HIPBLAS_STATUS_INTERNAL_ERROR -#define CUBLAS_STATUS_NOT_SUPPORTED HIPBLAS_STATUS_NOT_SUPPORTED -#else -#include -#include -#include -#include - -#if CUDART_VERSION < 11020 -#define CU_DEVICE_ATTRIBUTE_VIRTUAL_MEMORY_MANAGEMENT_SUPPORTED CU_DEVICE_ATTRIBUTE_VIRTUAL_ADDRESS_MANAGEMENT_SUPPORTED -#define CUBLAS_TF32_TENSOR_OP_MATH CUBLAS_TENSOR_OP_MATH -#define CUBLAS_COMPUTE_16F CUDA_R_16F -#define CUBLAS_COMPUTE_32F CUDA_R_32F -#define cublasComputeType_t cudaDataType_t -#endif // CUDART_VERSION < 11020 - -#endif // defined(GGML_USE_HIPBLAS) - -#define STRINGIZE_IMPL(...) #__VA_ARGS__ -#define STRINGIZE(...) STRINGIZE_IMPL(__VA_ARGS__) - -#define WARP_SIZE 32 -#define CUDART_HMAX 11070 // CUDA 11.7, min. ver. for which __hmax and __hmax2 are known to work (may be higher than needed) - -#define CC_PASCAL 600 -#define MIN_CC_DP4A 610 // minimum compute capability for __dp4a, an intrinsic for byte-wise dot products -#define CC_VOLTA 700 -#define CC_OFFSET_AMD 1000000 -#define CC_RDNA1 (CC_OFFSET_AMD + 1010) -#define CC_RDNA2 (CC_OFFSET_AMD + 1030) -#define CC_RDNA3 (CC_OFFSET_AMD + 1100) - -// define this if you want to always fallback to MMQ kernels and not use cuBLAS for matrix multiplication -// on modern hardware, using cuBLAS is recommended as it utilizes F16 tensor cores which are very performant -// for large computational tasks. the drawback is that this requires some extra amount of VRAM: -// - 7B quantum model: +100-200 MB -// - 13B quantum model: +200-400 MB -// -//#define GGML_CUDA_FORCE_MMQ - -// TODO: improve this to be correct for more hardware -// for example, currently fails for GeForce GTX 1660 which is TURING arch (> VOLTA) but does not have tensor cores -#if !defined(GGML_CUDA_FORCE_MMQ) -#define CUDA_USE_TENSOR_CORES -#endif - -#define MMVQ_MAX_BATCH_SIZE 8 // max batch size to use MMVQ kernels -#define MMQ_MAX_BATCH_SIZE 32 // max batch size to use MMQ kernels when tensor cores are available - -#define MATRIX_ROW_PADDING 512 // last row of quant. matrices is a multiple of this to avoid out-of-bounds memory accesses - -#if defined(_MSC_VER) -#pragma warning(disable: 4244 4267) // possible loss of data -#endif - -#define GGML_CUDA_MAX_STREAMS 8 - -[[noreturn]] -void ggml_cuda_error(const char * stmt, const char * func, const char * file, int line, const char * msg); - -#define CUDA_CHECK_GEN(err, success, error_fn) \ - do { \ - auto err_ = (err); \ - if (err_ != (success)) { \ - ggml_cuda_error(#err, __func__, __FILE__, __LINE__, error_fn(err_)); \ - } \ - } while (0) - -#define CUDA_CHECK(err) CUDA_CHECK_GEN(err, cudaSuccess, cudaGetErrorString) - -#if CUDART_VERSION >= 12000 - static const char * cublas_get_error_str(const cublasStatus_t err) { - return cublasGetStatusString(err); - } -#else - static const char * cublas_get_error_str(const cublasStatus_t err) { - switch (err) { - case CUBLAS_STATUS_SUCCESS: return "CUBLAS_STATUS_SUCCESS"; - case CUBLAS_STATUS_NOT_INITIALIZED: return "CUBLAS_STATUS_NOT_INITIALIZED"; - case CUBLAS_STATUS_ALLOC_FAILED: return "CUBLAS_STATUS_ALLOC_FAILED"; - case CUBLAS_STATUS_INVALID_VALUE: return "CUBLAS_STATUS_INVALID_VALUE"; - case CUBLAS_STATUS_ARCH_MISMATCH: return "CUBLAS_STATUS_ARCH_MISMATCH"; - case CUBLAS_STATUS_MAPPING_ERROR: return "CUBLAS_STATUS_MAPPING_ERROR"; - case CUBLAS_STATUS_EXECUTION_FAILED: return "CUBLAS_STATUS_EXECUTION_FAILED"; - case CUBLAS_STATUS_INTERNAL_ERROR: return "CUBLAS_STATUS_INTERNAL_ERROR"; - case CUBLAS_STATUS_NOT_SUPPORTED: return "CUBLAS_STATUS_NOT_SUPPORTED"; - default: return "unknown error"; - } - } -#endif // CUDART_VERSION >= 12000 - -#define CUBLAS_CHECK(err) CUDA_CHECK_GEN(err, CUBLAS_STATUS_SUCCESS, cublas_get_error_str) - -#if !defined(GGML_USE_HIPBLAS) -static const char * cu_get_error_str(CUresult err) { - const char * err_str; - cuGetErrorString(err, &err_str); - return err_str; -} -#define CU_CHECK(err) CUDA_CHECK_GEN(err, CUDA_SUCCESS, cu_get_error_str) -#endif - -#if CUDART_VERSION >= 11100 -#define GGML_CUDA_ASSUME(x) __builtin_assume(x) -#else -#define GGML_CUDA_ASSUME(x) -#endif // CUDART_VERSION >= 11100 - -#ifdef GGML_CUDA_F16 -typedef half dfloat; // dequantize float -typedef half2 dfloat2; -#else -typedef float dfloat; // dequantize float -typedef float2 dfloat2; -#endif //GGML_CUDA_F16 - -[[noreturn]] -static __device__ void no_device_code( - const char * file_name, const int line, const char * function_name, const int arch, const char * arch_list) { - -#if defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__) - printf("%s:%d: ERROR: HIP kernel %s has no device code compatible with HIP arch %d.\n", - file_name, line, function_name, arch); - GGML_UNUSED(arch_list); -#else - printf("%s:%d: ERROR: CUDA kernel %s has no device code compatible with CUDA arch %d. ggml-cuda.cu was compiled for: %s\n", - file_name, line, function_name, arch, arch_list); -#endif // defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__) - __trap(); - - GGML_UNUSED(no_device_code); // suppress unused function warning -} - -#ifdef __CUDA_ARCH__ -#define NO_DEVICE_CODE no_device_code(__FILE__, __LINE__, __FUNCTION__, __CUDA_ARCH__, STRINGIZE(__CUDA_ARCH_LIST__)) -#else -#define NO_DEVICE_CODE //GGML_ASSERT(false && "NO_DEVICE_CODE not valid in host code.") -#endif // __CUDA_ARCH__ - -static __device__ __forceinline__ float warp_reduce_sum(float x) { -#pragma unroll - for (int mask = 16; mask > 0; mask >>= 1) { - x += __shfl_xor_sync(0xffffffff, x, mask, 32); - } - return x; -} - -static __device__ __forceinline__ float2 warp_reduce_sum(float2 a) { -#pragma unroll - for (int mask = 16; mask > 0; mask >>= 1) { - a.x += __shfl_xor_sync(0xffffffff, a.x, mask, 32); - a.y += __shfl_xor_sync(0xffffffff, a.y, mask, 32); - } - return a; -} - -#ifdef GGML_CUDA_F16 -static __device__ __forceinline__ half2 warp_reduce_sum(half2 a) { -#if !(defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__)) && __CUDA_ARCH__ >= CC_PASCAL -#pragma unroll - for (int mask = 16; mask > 0; mask >>= 1) { - a = __hadd2(a, __shfl_xor_sync(0xffffffff, a, mask, 32)); - } - return a; -#else - GGML_UNUSED(a); - NO_DEVICE_CODE; -#endif // !(defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__)) && __CUDA_ARCH__ >= CC_PASCAL -} -#endif // GGML_CUDA_F16 - -static __device__ __forceinline__ float warp_reduce_max(float x) { -#pragma unroll - for (int mask = 16; mask > 0; mask >>= 1) { - x = fmaxf(x, __shfl_xor_sync(0xffffffff, x, mask, 32)); - } - return x; -} - -//static __device__ __forceinline__ half2 warp_reduce_max(half2 x) { -//#if !(defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__)) && __CUDA_ARCH__ >= CC_PASCAL && CUDART_VERSION >= CUDART_HMAX -//#pragma unroll -// for (int mask = 16; mask > 0; mask >>= 1) { -// x = __hmax2(x, __shfl_xor_sync(0xffffffff, x, mask, 32)); -// } -// return x; -//#else -// GGML_UNUSED(x); -// NO_DEVICE_CODE; -//#endif // !(defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__)) && __CUDA_ARCH__ >= CC_PASCAL && CUDART_VERSION >= CUDART_HMAX -//} - - -#if defined(GGML_USE_HIPBLAS) -#define __CUDA_ARCH__ 1300 - -#if defined(__gfx1100__) || defined(__gfx1101__) || defined(__gfx1102__) || defined(__gfx1103__) || \ - defined(__gfx1150__) || defined(__gfx1151__) -#define RDNA3 -#endif - -#if defined(__gfx1030__) || defined(__gfx1031__) || defined(__gfx1032__) || defined(__gfx1033__) || \ - defined(__gfx1034__) || defined(__gfx1035__) || defined(__gfx1036__) || defined(__gfx1037__) -#define RDNA2 -#endif - -#ifndef __has_builtin - #define __has_builtin(x) 0 -#endif - -typedef int8_t int8x4_t __attribute__((ext_vector_type(4))); -typedef uint8_t uint8x4_t __attribute__((ext_vector_type(4))); -static __device__ __forceinline__ int __vsubss4(const int a, const int b) { - const int8x4_t va = reinterpret_cast(a); - const int8x4_t vb = reinterpret_cast(b); -#if __has_builtin(__builtin_elementwise_sub_sat) - const int8x4_t c = __builtin_elementwise_sub_sat(va, vb); - return reinterpret_cast(c); -#else - int8x4_t c; - int16_t tmp; -#pragma unroll - for (int i = 0; i < 4; i++) { - tmp = va[i] - vb[i]; - if(tmp > std::numeric_limits::max()) tmp = std::numeric_limits::max(); - if(tmp < std::numeric_limits::min()) tmp = std::numeric_limits::min(); - c[i] = tmp; - } - return reinterpret_cast(c); -#endif // __has_builtin(__builtin_elementwise_sub_sat) -} - -static __device__ __forceinline__ int __vsub4(const int a, const int b) { - return __vsubss4(a, b); -} - -static __device__ __forceinline__ unsigned int __vcmpeq4(unsigned int a, unsigned int b) { - const uint8x4_t& va = reinterpret_cast(a); - const uint8x4_t& vb = reinterpret_cast(b); - unsigned int c; - uint8x4_t& vc = reinterpret_cast(c); -#pragma unroll - for (int i = 0; i < 4; ++i) { - vc[i] = va[i] == vb[i] ? 0xff : 0x00; - } - return c; -} - -static __device__ __forceinline__ int __dp4a(const int a, const int b, int c) { -#if defined(__gfx906__) || defined(__gfx908__) || defined(__gfx90a__) || defined(__gfx1030__) - c = __builtin_amdgcn_sdot4(a, b, c, false); -#elif defined(RDNA3) - c = __builtin_amdgcn_sudot4( true, a, true, b, c, false); -#elif defined(__gfx1010__) || defined(__gfx900__) - int tmp1; - int tmp2; - asm("\n \ - v_mul_i32_i24 %1, sext(%3), sext(%4) dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:BYTE_0 \n \ - v_mul_i32_i24 %2, sext(%3), sext(%4) dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_1 src1_sel:BYTE_1 \n \ - v_add3_u32 %0, %1, %2, %0 \n \ - v_mul_i32_i24 %1, sext(%3), sext(%4) dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_2 src1_sel:BYTE_2 \n \ - v_mul_i32_i24 %2, sext(%3), sext(%4) dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_3 src1_sel:BYTE_3 \n \ - v_add3_u32 %0, %1, %2, %0 \n \ - " - : "+v"(c), "=&v"(tmp1), "=&v"(tmp2) - : "v"(a), "v"(b) - ); -#else - const int8x4_t va = reinterpret_cast(a); - const int8x4_t vb = reinterpret_cast(b); - c += va[0] * vb[0] + va[1] * vb[1] + va[2] * vb[2] + va[3] * vb[3]; -#endif - return c; -} -#endif // defined(GGML_USE_HIPBLAS) - -// TODO: move to ggml-common.h -static const __device__ int8_t kvalues_iq4nl[16] = {-127, -104, -83, -65, -49, -35, -22, -10, 1, 13, 25, 38, 53, 69, 89, 113}; - -typedef void (*dequantize_kernel_t)(const void * vx, const int64_t ib, const int iqs, dfloat2 & v); - - -////////////////////// - -struct ggml_cuda_device_info { - int device_count; - - struct cuda_device_info { - int cc; // compute capability - size_t smpb; // max. shared memory per block - bool vmm; // virtual memory support - size_t vmm_granularity; // granularity of virtual memory - size_t total_vram; - }; - - cuda_device_info devices[GGML_CUDA_MAX_DEVICES] = {}; - - std::array default_tensor_split = {}; -}; - -const ggml_cuda_device_info & ggml_cuda_info(); - -void ggml_cuda_set_device(int device); -int ggml_cuda_get_device(); - -struct ggml_cuda_pool { - virtual ~ggml_cuda_pool() = default; - - virtual void * alloc(size_t size, size_t * actual_size) = 0; - virtual void free(void * ptr, size_t size) = 0; -}; - -template -struct ggml_cuda_pool_alloc { - ggml_cuda_pool * pool = nullptr; - T * ptr = nullptr; - size_t actual_size = 0; - - ggml_cuda_pool_alloc() = default; - - explicit ggml_cuda_pool_alloc(ggml_cuda_pool & pool) : pool(&pool) { - } - - ggml_cuda_pool_alloc(ggml_cuda_pool & pool, size_t size) : pool(&pool) { - alloc(size); - } - - ~ggml_cuda_pool_alloc() { - if (ptr != nullptr) { - pool->free(ptr, actual_size); - } - } - - // size is in number of elements - T * alloc(size_t size) { - GGML_ASSERT(pool != nullptr); - GGML_ASSERT(ptr == nullptr); - ptr = (T *) pool->alloc(size * sizeof(T), &this->actual_size); - return ptr; - } - - T * alloc(ggml_cuda_pool & pool, size_t size) { - this->pool = &pool; - return alloc(size); - } - - T * get() { - return ptr; - } - - ggml_cuda_pool_alloc(const ggml_cuda_pool_alloc &) = delete; - ggml_cuda_pool_alloc(ggml_cuda_pool_alloc &&) = delete; - ggml_cuda_pool_alloc& operator=(const ggml_cuda_pool_alloc &) = delete; - ggml_cuda_pool_alloc& operator=(ggml_cuda_pool_alloc &&) = delete; -}; - - -// backend interface - -struct ggml_tensor_extra_gpu { - void * data_device[GGML_CUDA_MAX_DEVICES]; // 1 pointer for each device for split tensors - cudaEvent_t events[GGML_CUDA_MAX_DEVICES][GGML_CUDA_MAX_STREAMS]; // events for synchronizing multiple GPUs -}; - -struct ggml_backend_cuda_context { - int device; - std::string name; - cudaEvent_t copy_event = nullptr; - - cudaStream_t streams[GGML_CUDA_MAX_DEVICES][GGML_CUDA_MAX_STREAMS] = { { nullptr } }; - cublasHandle_t cublas_handles[GGML_CUDA_MAX_DEVICES] = {nullptr}; - - explicit ggml_backend_cuda_context(int device) : - device(device), - name(GGML_CUDA_NAME + std::to_string(device)) { - } - - ~ggml_backend_cuda_context() { - if (copy_event != nullptr) { - CUDA_CHECK(cudaEventDestroy(copy_event)); - } - for (int i = 0; i < GGML_CUDA_MAX_DEVICES; ++i) { - for (int j = 0; j < GGML_CUDA_MAX_STREAMS; ++j) { - if (streams[i][j] != nullptr) { - CUDA_CHECK(cudaStreamDestroy(streams[i][j])); - } - } - if (cublas_handles[i] != nullptr) { - CUBLAS_CHECK(cublasDestroy(cublas_handles[i])); - } - } - } - - cudaStream_t stream(int device, int stream) { - if (streams[device][stream] == nullptr) { - ggml_cuda_set_device(device); - CUDA_CHECK(cudaStreamCreateWithFlags(&streams[device][stream], cudaStreamNonBlocking)); - } - return streams[device][stream]; - } - - cudaStream_t stream() { - return stream(device, 0); - } - - cublasHandle_t cublas_handle(int device) { - if (cublas_handles[device] == nullptr) { - ggml_cuda_set_device(device); - CUBLAS_CHECK(cublasCreate(&cublas_handles[device])); - CUBLAS_CHECK(cublasSetMathMode(cublas_handles[device], CUBLAS_TF32_TENSOR_OP_MATH)); - } - return cublas_handles[device]; - } - - cublasHandle_t cublas_handle() { - return cublas_handle(device); - } - - // pool - std::unique_ptr pools[GGML_CUDA_MAX_DEVICES]; - - static std::unique_ptr new_pool_for_device(int device); - - ggml_cuda_pool & pool(int device) { - if (pools[device] == nullptr) { - pools[device] = new_pool_for_device(device); - } - return *pools[device]; - } - - ggml_cuda_pool & pool() { - return pool(device); - } -}; diff --git a/ggml-cuda/concat.cu b/ggml-cuda/concat.cu deleted file mode 100644 index 2941d2f1770..00000000000 --- a/ggml-cuda/concat.cu +++ /dev/null @@ -1,49 +0,0 @@ -#include "concat.cuh" - -static __global__ void concat_f32(const float * x,const float * y, float * dst, const int ne0, const int ne02) { - int nidx = threadIdx.x + blockIdx.x * blockDim.x; - if (nidx >= ne0) { - return; - } - // operation - int offset_dst = - nidx + - blockIdx.y * ne0 + - blockIdx.z * ne0 * gridDim.y; - if (blockIdx.z < ne02) { // src0 - int offset_src = - nidx + - blockIdx.y * ne0 + - blockIdx.z * ne0 * gridDim.y; - dst[offset_dst] = x[offset_src]; - } else { - int offset_src = - nidx + - blockIdx.y * ne0 + - (blockIdx.z - ne02) * ne0 * gridDim.y; - dst[offset_dst] = y[offset_src]; - } -} - -static void concat_f32_cuda(const float * x, const float * y, float * dst, const int ne0, int ne1, int ne2, int ne02, cudaStream_t stream) { - int num_blocks = (ne0 + CUDA_CONCAT_BLOCK_SIZE - 1) / CUDA_CONCAT_BLOCK_SIZE; - dim3 gridDim(num_blocks, ne1, ne2); - concat_f32<<>>(x, y, dst, ne0, ne02); -} - -void ggml_cuda_op_concat(ggml_backend_cuda_context & ctx, ggml_tensor * dst) { - const ggml_tensor * src0 = dst->src[0]; - const ggml_tensor * src1 = dst->src[1]; - const float * src0_d = (const float *)src0->data; - const float * src1_d = (const float *)src1->data; - float * dst_d = (float *)dst->data; - cudaStream_t stream = ctx.stream(); - - GGML_ASSERT(src0->type == GGML_TYPE_F32); - GGML_ASSERT(src1->type == GGML_TYPE_F32); - GGML_ASSERT(dst->type == GGML_TYPE_F32); - - for (int i3 = 0; i3 < dst->ne[3]; i3++) { - concat_f32_cuda(src0_d + i3 * (src0->nb[3] / 4), src1_d + i3 * (src1->nb[3] / 4), dst_d + i3 * (dst->nb[3] / 4), dst->ne[0], dst->ne[1], dst->ne[2], src0->ne[2], stream); - } -} diff --git a/ggml-cuda/concat.cuh b/ggml-cuda/concat.cuh deleted file mode 100644 index aa506a05f2c..00000000000 --- a/ggml-cuda/concat.cuh +++ /dev/null @@ -1,5 +0,0 @@ -#include "common.cuh" - -#define CUDA_CONCAT_BLOCK_SIZE 256 - -void ggml_cuda_op_concat(ggml_backend_cuda_context & ctx, ggml_tensor * dst); diff --git a/ggml-cuda/convert.cu b/ggml-cuda/convert.cu deleted file mode 100644 index b15e3578267..00000000000 --- a/ggml-cuda/convert.cu +++ /dev/null @@ -1,826 +0,0 @@ -#include "convert.cuh" -#include "dequantize.cuh" - -#define CUDA_Q8_0_NE_ALIGN 2048 - -template -static __global__ void dequantize_block(const void * __restrict__ vx, dst_t * __restrict__ y, const int64_t k) { - const int64_t i = 2*(blockDim.x*blockIdx.x + threadIdx.x); - - if (i >= k) { - return; - } - - const int64_t ib = i/qk; // block index - const int iqs = (i%qk)/qr; // quant index - const int iybs = i - i%qk; // y block start index - const int y_offset = qr == 1 ? 1 : qk/2; - - // dequantize - dfloat2 v; - dequantize_kernel(vx, ib, iqs, v); - - y[iybs + iqs + 0] = v.x; - y[iybs + iqs + y_offset] = v.y; -} - -template -static __global__ void dequantize_block_q8_0_f16(const void * __restrict__ vx, half * __restrict__ y, const int64_t k) { -#if __CUDA_ARCH__ >= CC_PASCAL - constexpr int nint = CUDA_Q8_0_NE_ALIGN/sizeof(int) + WARP_SIZE; - - const int i0 = CUDA_Q8_0_NE_ALIGN*blockIdx.x; - const int * x0 = ((int *) vx) + blockIdx.x * nint; - half2 * y2 = (half2 *) (y + i0); - - __shared__ int vals[nint]; - -#pragma unroll - for (int ix0 = 0; ix0 < nint; ix0 += WARP_SIZE) { - if (need_check && i0*sizeof(block_q8_0)/QK8_0 + sizeof(int)*(ix0 + threadIdx.x) >= k*sizeof(block_q8_0)/QK8_0) { - break; - } - - const int ix = ix0 + threadIdx.x; - vals[ix] = x0[ix]; - } - - __syncthreads(); - -#pragma unroll - for (int iy = 0; iy < CUDA_Q8_0_NE_ALIGN; iy += 2*WARP_SIZE) { - if (need_check && i0 + iy + 2*threadIdx.x >= k) { - return; - } - - const half * b0 = ((const half *) vals) + (sizeof(block_q8_0)/sizeof(half)) * ((iy + 2*threadIdx.x)/QK8_0); - const half d = *b0; - const char2 qs = ((const char2 *) (b0 + 1))[threadIdx.x % (QK8_0/2)]; - - y2[iy/2 + threadIdx.x] = __hmul2(make_half2(qs.x, qs.y), __half2half2(d)); - } -#else - GGML_UNUSED(vx); - GGML_UNUSED(y); - GGML_UNUSED(k); - NO_DEVICE_CODE; -#endif // __CUDA_ARCH__ >= CC_PASCAL -} - -template -static __global__ void dequantize_block_q4_0(const void * __restrict__ vx, dst_t * __restrict__ yy, int nb32) { - - const int64_t i = blockIdx.x; - - // assume 32 threads - const int tid = threadIdx.x; - const int il = tid/8; - const int ir = tid%8; - const int64_t ib = 8*i + ir; - if (ib >= nb32) { - return; - } - - dst_t * y = yy + 256*i + 32*ir + 4*il; - - const block_q4_0 * x = (const block_q4_0 *)vx + ib; - const float d = __half2float(x->d); - const float dm = -8*d; - - const uint8_t * q = x->qs + 4*il; - - for (int l = 0; l < 4; ++l) { - y[l+ 0] = d * (q[l] & 0xF) + dm; - y[l+16] = d * (q[l] >> 4) + dm; - } -} - -template -static __global__ void dequantize_block_q4_1(const void * __restrict__ vx, dst_t * __restrict__ yy, int nb32) { - - const int64_t i = blockIdx.x; - - // assume 32 threads - const int tid = threadIdx.x; - const int il = tid/8; - const int ir = tid%8; - const int64_t ib = 8*i + ir; - if (ib >= nb32) { - return; - } - - dst_t * y = yy + 256*i + 32*ir + 4*il; - - const block_q4_1 * x = (const block_q4_1 *)vx + ib; - const float2 d = __half22float2(x->dm); - - const uint8_t * q = x->qs + 4*il; - - for (int l = 0; l < 4; ++l) { - y[l+ 0] = d.x * (q[l] & 0xF) + d.y; - y[l+16] = d.x * (q[l] >> 4) + d.y; - } -} - -//================================== k-quants - -template -static __global__ void dequantize_block_q2_K(const void * __restrict__ vx, dst_t * __restrict__ yy) { - - const int i = blockIdx.x; - const block_q2_K * x = (const block_q2_K *) vx; - - const int tid = threadIdx.x; -#if QK_K == 256 - const int n = tid/32; - const int l = tid - 32*n; - const int is = 8*n + l/16; - - const uint8_t q = x[i].qs[32*n + l]; - dst_t * y = yy + i*QK_K + 128*n; - - float dall = __low2half(x[i].dm); - float dmin = __high2half(x[i].dm); - y[l+ 0] = dall * (x[i].scales[is+0] & 0xF) * ((q >> 0) & 3) - dmin * (x[i].scales[is+0] >> 4); - y[l+32] = dall * (x[i].scales[is+2] & 0xF) * ((q >> 2) & 3) - dmin * (x[i].scales[is+2] >> 4); - y[l+64] = dall * (x[i].scales[is+4] & 0xF) * ((q >> 4) & 3) - dmin * (x[i].scales[is+4] >> 4); - y[l+96] = dall * (x[i].scales[is+6] & 0xF) * ((q >> 6) & 3) - dmin * (x[i].scales[is+6] >> 4); -#else - const int is = tid/16; // 0 or 1 - const int il = tid%16; // 0...15 - const uint8_t q = x[i].qs[il] >> (2*is); - dst_t * y = yy + i*QK_K + 16*is + il; - float dall = __low2half(x[i].dm); - float dmin = __high2half(x[i].dm); - y[ 0] = dall * (x[i].scales[is+0] & 0xF) * ((q >> 0) & 3) - dmin * (x[i].scales[is+0] >> 4); - y[32] = dall * (x[i].scales[is+2] & 0xF) * ((q >> 4) & 3) - dmin * (x[i].scales[is+2] >> 4); -#endif - -} - -template -static __global__ void dequantize_block_q3_K(const void * __restrict__ vx, dst_t * __restrict__ yy) { - - const int i = blockIdx.x; - const block_q3_K * x = (const block_q3_K *) vx; - -#if QK_K == 256 - const int r = threadIdx.x/4; - const int tid = r/2; - const int is0 = r%2; - const int l0 = 16*is0 + 4*(threadIdx.x%4); - const int n = tid / 4; - const int j = tid - 4*n; - - uint8_t m = 1 << (4*n + j); - int is = 8*n + 2*j + is0; - int shift = 2*j; - - int8_t us = is < 4 ? (x[i].scales[is-0] & 0xF) | (((x[i].scales[is+8] >> 0) & 3) << 4) : - is < 8 ? (x[i].scales[is-0] & 0xF) | (((x[i].scales[is+4] >> 2) & 3) << 4) : - is < 12 ? (x[i].scales[is-8] >> 4) | (((x[i].scales[is+0] >> 4) & 3) << 4) : - (x[i].scales[is-8] >> 4) | (((x[i].scales[is-4] >> 6) & 3) << 4); - float d_all = x[i].d; - float dl = d_all * (us - 32); - - dst_t * y = yy + i*QK_K + 128*n + 32*j; - const uint8_t * q = x[i].qs + 32*n; - const uint8_t * hm = x[i].hmask; - - for (int l = l0; l < l0+4; ++l) y[l] = dl * ((int8_t)((q[l] >> shift) & 3) - ((hm[l] & m) ? 0 : 4)); -#else - const int tid = threadIdx.x; - const int is = tid/16; // 0 or 1 - const int il = tid%16; // 0...15 - const int im = il/8; // 0...1 - const int in = il%8; // 0...7 - - dst_t * y = yy + i*QK_K + 16*is + il; - - const uint8_t q = x[i].qs[il] >> (2*is); - const uint8_t h = x[i].hmask[in] >> (2*is + im); - const float d = (float)x[i].d; - - if (is == 0) { - y[ 0] = d * ((x[i].scales[0] & 0xF) - 8) * ((int8_t)((q >> 0) & 3) - ((h >> 0) & 1 ? 0 : 4)); - y[32] = d * ((x[i].scales[1] & 0xF) - 8) * ((int8_t)((q >> 4) & 3) - ((h >> 4) & 1 ? 0 : 4)); - } else { - y[ 0] = d * ((x[i].scales[0] >> 4) - 8) * ((int8_t)((q >> 0) & 3) - ((h >> 0) & 1 ? 0 : 4)); - y[32] = d * ((x[i].scales[1] >> 4) - 8) * ((int8_t)((q >> 4) & 3) - ((h >> 4) & 1 ? 0 : 4)); - } -#endif - -} - -#if QK_K == 256 -static inline __device__ void get_scale_min_k4(int j, const uint8_t * q, uint8_t & d, uint8_t & m) { - if (j < 4) { - d = q[j] & 63; m = q[j + 4] & 63; - } else { - d = (q[j+4] & 0xF) | ((q[j-4] >> 6) << 4); - m = (q[j+4] >> 4) | ((q[j-0] >> 6) << 4); - } -} -#endif - -template -static __global__ void dequantize_block_q4_K(const void * __restrict__ vx, dst_t * __restrict__ yy) { - const block_q4_K * x = (const block_q4_K *) vx; - - const int i = blockIdx.x; - -#if QK_K == 256 - // assume 32 threads - const int tid = threadIdx.x; - const int il = tid/8; - const int ir = tid%8; - const int is = 2*il; - const int n = 4; - - dst_t * y = yy + i*QK_K + 64*il + n*ir; - - const float dall = __low2half(x[i].dm); - const float dmin = __high2half(x[i].dm); - - const uint8_t * q = x[i].qs + 32*il + n*ir; - - uint8_t sc, m; - get_scale_min_k4(is + 0, x[i].scales, sc, m); - const float d1 = dall * sc; const float m1 = dmin * m; - get_scale_min_k4(is + 1, x[i].scales, sc, m); - const float d2 = dall * sc; const float m2 = dmin * m; - for (int l = 0; l < n; ++l) { - y[l + 0] = d1 * (q[l] & 0xF) - m1; - y[l +32] = d2 * (q[l] >> 4) - m2; - } -#else - const int tid = threadIdx.x; - const uint8_t * q = x[i].qs; - dst_t * y = yy + i*QK_K; - const float d = (float)x[i].dm[0]; - const float m = (float)x[i].dm[1]; - y[tid+ 0] = d * (x[i].scales[0] & 0xF) * (q[tid] & 0xF) - m * (x[i].scales[0] >> 4); - y[tid+32] = d * (x[i].scales[1] & 0xF) * (q[tid] >> 4) - m * (x[i].scales[1] >> 4); -#endif -} - -template -static __global__ void dequantize_block_q5_K(const void * __restrict__ vx, dst_t * __restrict__ yy) { - const block_q5_K * x = (const block_q5_K *) vx; - - const int i = blockIdx.x; - -#if QK_K == 256 - // assume 64 threads - this is very slightly better than the one below - const int tid = threadIdx.x; - const int il = tid/16; // il is in 0...3 - const int ir = tid%16; // ir is in 0...15 - const int is = 2*il; // is is in 0...6 - - dst_t * y = yy + i*QK_K + 64*il + 2*ir; - - const float dall = __low2half(x[i].dm); - const float dmin = __high2half(x[i].dm); - - const uint8_t * ql = x[i].qs + 32*il + 2*ir; - const uint8_t * qh = x[i].qh + 2*ir; - - uint8_t sc, m; - get_scale_min_k4(is + 0, x[i].scales, sc, m); - const float d1 = dall * sc; const float m1 = dmin * m; - get_scale_min_k4(is + 1, x[i].scales, sc, m); - const float d2 = dall * sc; const float m2 = dmin * m; - - uint8_t hm = 1 << (2*il); - y[ 0] = d1 * ((ql[ 0] & 0xF) + (qh[ 0] & hm ? 16 : 0)) - m1; - y[ 1] = d1 * ((ql[ 1] & 0xF) + (qh[ 1] & hm ? 16 : 0)) - m1; - hm <<= 1; - y[32] = d2 * ((ql[ 0] >> 4) + (qh[ 0] & hm ? 16 : 0)) - m2; - y[33] = d2 * ((ql[ 1] >> 4) + (qh[ 1] & hm ? 16 : 0)) - m2; -#else - const int tid = threadIdx.x; - const uint8_t q = x[i].qs[tid]; - const int im = tid/8; // 0...3 - const int in = tid%8; // 0...7 - const int is = tid/16; // 0 or 1 - const uint8_t h = x[i].qh[in] >> im; - const float d = x[i].d; - dst_t * y = yy + i*QK_K + tid; - y[ 0] = d * x[i].scales[is+0] * ((q & 0xF) - ((h >> 0) & 1 ? 0 : 16)); - y[32] = d * x[i].scales[is+2] * ((q >> 4) - ((h >> 4) & 1 ? 0 : 16)); -#endif -} - -template -static __global__ void dequantize_block_q6_K(const void * __restrict__ vx, dst_t * __restrict__ yy) { - const block_q6_K * x = (const block_q6_K *) vx; - - const int64_t i = blockIdx.x; -#if QK_K == 256 - - // assume 64 threads - this is very slightly better than the one below - const int64_t tid = threadIdx.x; - const int64_t ip = tid/32; // ip is 0 or 1 - const int64_t il = tid - 32*ip; // 0...32 - const int64_t is = 8*ip + il/16; - - dst_t * y = yy + i*QK_K + 128*ip + il; - - const float d = x[i].d; - - const uint8_t * ql = x[i].ql + 64*ip + il; - const uint8_t qh = x[i].qh[32*ip + il]; - const int8_t * sc = x[i].scales + is; - - y[ 0] = d * sc[0] * ((int8_t)((ql[ 0] & 0xF) | (((qh >> 0) & 3) << 4)) - 32); - y[32] = d * sc[2] * ((int8_t)((ql[32] & 0xF) | (((qh >> 2) & 3) << 4)) - 32); - y[64] = d * sc[4] * ((int8_t)((ql[ 0] >> 4) | (((qh >> 4) & 3) << 4)) - 32); - y[96] = d * sc[6] * ((int8_t)((ql[32] >> 4) | (((qh >> 6) & 3) << 4)) - 32); -#else - - // assume 32 threads - const int64_t tid = threadIdx.x; - const int64_t ip = tid/16; // 0 or 1 - const int64_t il = tid - 16*ip; // 0...15 - - dst_t * y = yy + i*QK_K + 16*ip + il; - - const float d = x[i].d; - - const uint8_t ql = x[i].ql[16*ip + il]; - const uint8_t qh = x[i].qh[il] >> (2*ip); - const int8_t * sc = x[i].scales; - - y[ 0] = d * sc[ip+0] * ((int8_t)((ql & 0xF) | (((qh >> 0) & 3) << 4)) - 32); - y[32] = d * sc[ip+2] * ((int8_t)((ql >> 4) | (((qh >> 4) & 3) << 4)) - 32); -#endif -} - -template -static __global__ void dequantize_block_iq2_xxs(const void * __restrict__ vx, dst_t * __restrict__ yy) { - - const int i = blockIdx.x; - const block_iq2_xxs * x = (const block_iq2_xxs *) vx; - - const int tid = threadIdx.x; -#if QK_K == 256 - const int il = tid/8; // 0...3 - const int ib = tid%8; // 0...7 - dst_t * y = yy + i*QK_K + 32*ib + 8*il; - const uint16_t * q2 = x[i].qs + 4*ib; - const uint8_t * aux8 = (const uint8_t *)q2; - const uint8_t * grid = (const uint8_t *)(iq2xxs_grid + aux8[il]); - const uint32_t aux32 = q2[2] | (q2[3] << 16); - const float d = (float)x[i].d * (0.5f + (aux32 >> 28)) * 0.25f; - const uint8_t signs = ksigns_iq2xs[(aux32 >> 7*il) & 127]; - for (int j = 0; j < 8; ++j) y[j] = d * grid[j] * (signs & kmask_iq2xs[j] ? -1.f : 1.f); -#else - NO_DEVICE_CODE; -#endif - -} - -template -static __global__ void dequantize_block_iq2_xs(const void * __restrict__ vx, dst_t * __restrict__ yy) { - - const int i = blockIdx.x; - const block_iq2_xs * x = (const block_iq2_xs *) vx; - - const int tid = threadIdx.x; -#if QK_K == 256 - const int il = tid/8; // 0...3 - const int ib = tid%8; // 0...7 - dst_t * y = yy + i*QK_K + 32*ib + 8*il; - const uint16_t * q2 = x[i].qs + 4*ib; - const uint8_t * grid = (const uint8_t *)(iq2xs_grid + (q2[il] & 511)); - const float d = (float)x[i].d * (0.5f + ((x[i].scales[ib] >> 4*(il/2)) & 0xf)) * 0.25f; - const uint8_t signs = ksigns_iq2xs[q2[il] >> 9]; - for (int j = 0; j < 8; ++j) y[j] = d * grid[j] * (signs & kmask_iq2xs[j] ? -1.f : 1.f); -#else - NO_DEVICE_CODE; -#endif - -} - -template -static __global__ void dequantize_block_iq2_s(const void * __restrict__ vx, dst_t * __restrict__ yy) { - - const int i = blockIdx.x; - const block_iq2_s * x = (const block_iq2_s *) vx; - - const int tid = threadIdx.x; -#if QK_K == 256 - const int il = tid/8; // 0...3 - const int ib = tid%8; // 0...7 - dst_t * y = yy + i*QK_K + 32*ib + 8*il; - const uint8_t * grid = (const uint8_t *)(iq2s_grid + (x[i].qs[4*ib+il] | ((x[i].qh[ib] << (8-2*il)) & 0x300))); - const float d = (float)x[i].d * (0.5f + ((x[i].scales[ib] >> 4*(il/2)) & 0xf)) * 0.25f; - const uint8_t signs = x[i].qs[QK_K/8+4*ib+il]; - for (int j = 0; j < 8; ++j) y[j] = d * grid[j] * (signs & kmask_iq2xs[j] ? -1.f : 1.f); -#else - NO_DEVICE_CODE; -#endif - -} - -template -static __global__ void dequantize_block_iq3_xxs(const void * __restrict__ vx, dst_t * __restrict__ yy) { - - const int i = blockIdx.x; - const block_iq3_xxs * x = (const block_iq3_xxs *) vx; - - const int tid = threadIdx.x; -#if QK_K == 256 - const int il = tid/8; // 0...3 - const int ib = tid%8; // 0...7 - dst_t * y = yy + i*QK_K + 32*ib + 8*il; - const uint8_t * q3 = x[i].qs + 8*ib; - const uint16_t * gas = (const uint16_t *)(x[i].qs + QK_K/4) + 2*ib; - const uint8_t * grid1 = (const uint8_t *)(iq3xxs_grid + q3[2*il+0]); - const uint8_t * grid2 = (const uint8_t *)(iq3xxs_grid + q3[2*il+1]); - const uint32_t aux32 = gas[0] | (gas[1] << 16); - const float d = (float)x[i].d * (0.5f + (aux32 >> 28)) * 0.5f; - const uint8_t signs = ksigns_iq2xs[(aux32 >> 7*il) & 127]; - for (int j = 0; j < 4; ++j) { - y[j+0] = d * grid1[j] * (signs & kmask_iq2xs[j+0] ? -1.f : 1.f); - y[j+4] = d * grid2[j] * (signs & kmask_iq2xs[j+4] ? -1.f : 1.f); - } -#else - NO_DEVICE_CODE; -#endif - -} - -template -static __global__ void dequantize_block_iq3_s(const void * __restrict__ vx, dst_t * __restrict__ yy) { - - const int i = blockIdx.x; - const block_iq3_s * x = (const block_iq3_s *) vx; - - const int tid = threadIdx.x; -#if QK_K == 256 - const int il = tid/8; // 0...3 - const int ib = tid%8; // 0...7 - dst_t * y = yy + i*QK_K + 32*ib + 8*il; - const uint8_t * qs = x[i].qs + 8*ib; - const uint8_t * grid1 = (const uint8_t *)(iq3s_grid + (qs[2*il+0] | ((x[i].qh[ib] << (8-2*il)) & 256))); - const uint8_t * grid2 = (const uint8_t *)(iq3s_grid + (qs[2*il+1] | ((x[i].qh[ib] << (7-2*il)) & 256))); - const float d = (float)x[i].d * (1 + 2*((x[i].scales[ib/2] >> 4*(ib%2)) & 0xf)); - const uint8_t signs = x[i].signs[4*ib + il]; - for (int j = 0; j < 4; ++j) { - y[j+0] = d * grid1[j] * (signs & kmask_iq2xs[j+0] ? -1.f : 1.f); - y[j+4] = d * grid2[j] * (signs & kmask_iq2xs[j+4] ? -1.f : 1.f); - } -#else - NO_DEVICE_CODE; -#endif - -} - -template -static __global__ void dequantize_block_iq1_s(const void * __restrict__ vx, dst_t * __restrict__ yy) { - - const int i = blockIdx.x; - const block_iq1_s * x = (const block_iq1_s *) vx; - - const int tid = threadIdx.x; -#if QK_K == 256 - const int il = tid/8; // 0...3 - const int ib = tid%8; // 0...7 - dst_t * y = yy + i*QK_K + 32*ib + 8*il; - const float delta = x[i].qh[ib] & 0x8000 ? -1 - IQ1S_DELTA : -1 + IQ1S_DELTA; - const float d = (float)x[i].d * (2*((x[i].qh[ib] >> 12) & 7) + 1); - uint32_t grid32[2]; const int8_t * q = (const int8_t *)grid32; - grid32[0] = iq1s_grid_gpu[x[i].qs[4*ib+il] | (((x[i].qh[ib] >> 3*il) & 7) << 8)]; - grid32[1] = (grid32[0] >> 4) & 0x0f0f0f0f; - grid32[0] &= 0x0f0f0f0f; - for (int j = 0; j < 8; ++j) { - y[j] = d * (q[j] + delta); - } -#else - NO_DEVICE_CODE; -#endif - -} - -template -static __global__ void dequantize_block_iq1_m(const void * __restrict__ vx, dst_t * __restrict__ yy) { - - const int i = blockIdx.x; - const block_iq1_m * x = (const block_iq1_m *) vx; - - const int tid = threadIdx.x; -#if QK_K == 256 - const int il = tid/8; // 0...3 - const int ib = tid%8; // 0...7 - dst_t * y = yy + i*QK_K + 32*ib + 8*il; - const uint16_t * sc = (const uint16_t *)x[i].scales; - iq1m_scale_t scale; - scale.u16 = (sc[0] >> 12) | ((sc[1] >> 8) & 0x00f0) | ((sc[2] >> 4) & 0x0f00) | (sc[3] & 0xf000); - const int ib16 = 2*ib + il/2; // sc[ib16/4] >> 3*(ib16%4) -> sc[ib/2] >> 3*((2*ib+il/2)%4); - const float d = (float)scale.f16 * (2*((sc[ib16/4] >> 3*(ib16%4)) & 0x7) + 1); - const float delta = x[i].qh[2*ib+il/2] & (0x08 << 4*(il%2)) ? -1 - IQ1M_DELTA : -1 + IQ1M_DELTA; - uint32_t grid32[2]; const int8_t * q = (const int8_t *)grid32; - grid32[0] = iq1s_grid_gpu[x[i].qs[4*ib+il] | (((x[i].qh[2*ib+il/2] >> 4*(il%2)) & 7) << 8)]; - grid32[1] = (grid32[0] >> 4) & 0x0f0f0f0f; - grid32[0] &= 0x0f0f0f0f; - for (int j = 0; j < 8; ++j) { - y[j] = d * (q[j] + delta); - } -#else - NO_DEVICE_CODE; -#endif - -} - - -template -static __global__ void dequantize_block_iq4_nl(const void * __restrict__ vx, dst_t * __restrict__ yy) { - - const int i = blockIdx.x; - const block_iq4_nl * x = (const block_iq4_nl *) vx + i*(QK_K/QK4_NL); - - const int tid = threadIdx.x; - const int il = tid/8; // 0...3 - const int ib = tid%8; // 0...7 - dst_t * y = yy + i*QK_K + 32*ib + 4*il; - const uint8_t * q4 = x[ib].qs + 4*il; - const float d = (float)x[ib].d; - for (int j = 0; j < 4; ++j) { - y[j+ 0] = d * kvalues_iq4nl[q4[j] & 0xf]; - y[j+16] = d * kvalues_iq4nl[q4[j] >> 4]; - } - -} - -#if QK_K != 64 -template -static __global__ void dequantize_block_iq4_xs(const void * __restrict__ vx, dst_t * __restrict__ yy) { - const int i = blockIdx.x; - const block_iq4_xs * x = (const block_iq4_xs *)vx; - - const int tid = threadIdx.x; - const int il = tid/8; // 0...3 - const int ib = tid%8; // 0...7 - dst_t * y = yy + i*QK_K + 32*ib + 4*il; - const uint8_t * q4 = x[i].qs + 16*ib + 4*il; - const float d = (float)x[i].d * ((((x[i].scales_l[ib/2] >> 4*(ib%2)) & 0xf) | (((x[i].scales_h >> 2*ib) & 3) << 4)) - 32); - for (int j = 0; j < 4; ++j) { - y[j+ 0] = d * kvalues_iq4nl[q4[j] & 0xf]; - y[j+16] = d * kvalues_iq4nl[q4[j] >> 4]; - } -} -#endif - -template -static void dequantize_block_cuda(const void * __restrict__ vx, dst_t * __restrict__ y, const int64_t k, cudaStream_t stream) { - const int num_blocks = (k + 2*CUDA_DEQUANTIZE_BLOCK_SIZE - 1) / (2*CUDA_DEQUANTIZE_BLOCK_SIZE); - dequantize_block<<>>(vx, y, k); -} - -static void dequantize_block_q8_0_f16_cuda(const void * __restrict__ vx, half * __restrict__ y, const int64_t k, cudaStream_t stream) { - const int num_blocks = (k + CUDA_Q8_0_NE_ALIGN - 1) / CUDA_Q8_0_NE_ALIGN; - if (k % CUDA_Q8_0_NE_ALIGN == 0) { - const bool need_check = false; - dequantize_block_q8_0_f16<<>>(vx, y, k); - } else { - const bool need_check = true; - dequantize_block_q8_0_f16<<>>(vx, y, k); - } -} - -template -static void dequantize_row_q2_K_cuda(const void * vx, dst_t * y, const int64_t k, cudaStream_t stream) { - const int nb = k / QK_K; -#if QK_K == 256 - dequantize_block_q2_K<<>>(vx, y); -#else - dequantize_block_q2_K<<>>(vx, y); -#endif -} - -template -static void dequantize_row_q3_K_cuda(const void * vx, dst_t * y, const int64_t k, cudaStream_t stream) { - const int nb = k / QK_K; -#if QK_K == 256 - dequantize_block_q3_K<<>>(vx, y); -#else - dequantize_block_q3_K<<>>(vx, y); -#endif -} - -template -static void dequantize_row_q4_0_cuda(const void * vx, dst_t * y, const int64_t k, cudaStream_t stream) { - const int nb32 = k / 32; - const int nb = (k + 255) / 256; - dequantize_block_q4_0<<>>(vx, y, nb32); -} - -template -static void dequantize_row_q4_1_cuda(const void * vx, dst_t * y, const int64_t k, cudaStream_t stream) { - const int nb32 = k / 32; - const int nb = (k + 255) / 256; - dequantize_block_q4_1<<>>(vx, y, nb32); -} - -template -static void dequantize_row_q4_K_cuda(const void * vx, dst_t * y, const int64_t k, cudaStream_t stream) { - const int nb = k / QK_K; - dequantize_block_q4_K<<>>(vx, y); -} - -template -static void dequantize_row_q5_K_cuda(const void * vx, dst_t * y, const int64_t k, cudaStream_t stream) { - const int nb = k / QK_K; -#if QK_K == 256 - dequantize_block_q5_K<<>>(vx, y); -#else - dequantize_block_q5_K<<>>(vx, y); -#endif -} - -template -static void dequantize_row_q6_K_cuda(const void * vx, dst_t * y, const int64_t k, cudaStream_t stream) { - const int nb = k / QK_K; -#if QK_K == 256 - dequantize_block_q6_K<<>>(vx, y); -#else - dequantize_block_q6_K<<>>(vx, y); -#endif -} - -template -static void dequantize_row_iq2_xxs_cuda(const void * vx, dst_t * y, const int64_t k, cudaStream_t stream) { - const int nb = k / QK_K; - dequantize_block_iq2_xxs<<>>(vx, y); -} - -template -static void dequantize_row_iq2_xs_cuda(const void * vx, dst_t * y, const int64_t k, cudaStream_t stream) { - const int nb = k / QK_K; - dequantize_block_iq2_xs<<>>(vx, y); -} - -template -static void dequantize_row_iq2_s_cuda(const void * vx, dst_t * y, const int64_t k, cudaStream_t stream) { - const int nb = k / QK_K; - dequantize_block_iq2_s<<>>(vx, y); -} - -template -static void dequantize_row_iq3_xxs_cuda(const void * vx, dst_t * y, const int64_t k, cudaStream_t stream) { - const int nb = k / QK_K; - dequantize_block_iq3_xxs<<>>(vx, y); -} - -template -static void dequantize_row_iq3_s_cuda(const void * vx, dst_t * y, const int64_t k, cudaStream_t stream) { - const int nb = k / QK_K; - dequantize_block_iq3_s<<>>(vx, y); -} - -template -static void dequantize_row_iq1_s_cuda(const void * vx, dst_t * y, const int64_t k, cudaStream_t stream) { - const int nb = k / QK_K; - dequantize_block_iq1_s<<>>(vx, y); -} - -template -static void dequantize_row_iq4_nl_cuda(const void * vx, dst_t * y, const int64_t k, cudaStream_t stream) { - const int nb = (k + QK_K - 1) / QK_K; - dequantize_block_iq4_nl<<>>(vx, y); -} - -template -static void dequantize_row_iq1_m_cuda(const void * vx, dst_t * y, const int64_t k, cudaStream_t stream) { - const int nb = k / QK_K; - dequantize_block_iq1_m<<>>(vx, y); -} - -template -static void dequantize_row_iq4_xs_cuda(const void * vx, dst_t * y, const int64_t k, cudaStream_t stream) { - const int nb = (k + QK_K - 1) / QK_K; -#if QK_K == 64 - dequantize_block_iq4_nl<<>>(vx, y); -#else - dequantize_block_iq4_xs<<>>(vx, y); -#endif -} - -template -static __global__ void convert_unary(const void * __restrict__ vx, dst_t * __restrict__ y, const int64_t k) { - const int64_t i = (int64_t)blockDim.x*blockIdx.x + threadIdx.x; - - if (i >= k) { - return; - } - - const src_t * x = (src_t *) vx; - - y[i] = x[i]; -} - -template -static void convert_unary_cuda(const void * __restrict__ vx, dst_t * __restrict__ y, const int64_t k, cudaStream_t stream) { - const int num_blocks = (k + CUDA_DEQUANTIZE_BLOCK_SIZE - 1) / CUDA_DEQUANTIZE_BLOCK_SIZE; - convert_unary<<>>(vx, y, k); -} - -to_fp16_cuda_t ggml_get_to_fp16_cuda(ggml_type type) { - int id; - switch (type) { - case GGML_TYPE_Q4_0: - return dequantize_row_q4_0_cuda; - case GGML_TYPE_Q4_1: - return dequantize_row_q4_1_cuda; - case GGML_TYPE_Q5_0: - return dequantize_block_cuda; - case GGML_TYPE_Q5_1: - return dequantize_block_cuda; - case GGML_TYPE_Q8_0: - CUDA_CHECK(cudaGetDevice(&id)); - if (ggml_cuda_info().devices[id].cc >= CC_PASCAL) { - return dequantize_block_q8_0_f16_cuda; - } - return dequantize_block_cuda; - case GGML_TYPE_Q2_K: - return dequantize_row_q2_K_cuda; - case GGML_TYPE_Q3_K: - return dequantize_row_q3_K_cuda; - case GGML_TYPE_Q4_K: - return dequantize_row_q4_K_cuda; - case GGML_TYPE_Q5_K: - return dequantize_row_q5_K_cuda; - case GGML_TYPE_Q6_K: - return dequantize_row_q6_K_cuda; - case GGML_TYPE_IQ2_XXS: - return dequantize_row_iq2_xxs_cuda; - case GGML_TYPE_IQ2_XS: - return dequantize_row_iq2_xs_cuda; - case GGML_TYPE_IQ2_S: - return dequantize_row_iq2_s_cuda; - case GGML_TYPE_IQ3_XXS: - return dequantize_row_iq3_xxs_cuda; - case GGML_TYPE_IQ1_S: - return dequantize_row_iq1_s_cuda; - case GGML_TYPE_IQ1_M: - return dequantize_row_iq1_m_cuda; - case GGML_TYPE_IQ4_NL: - return dequantize_row_iq4_nl_cuda; - case GGML_TYPE_IQ4_XS: - return dequantize_row_iq4_xs_cuda; - case GGML_TYPE_IQ3_S: - return dequantize_row_iq3_s_cuda; - case GGML_TYPE_F32: - return convert_unary_cuda; - default: - return nullptr; - } -} - -to_fp32_cuda_t ggml_get_to_fp32_cuda(ggml_type type) { - switch (type) { - case GGML_TYPE_Q4_0: - return dequantize_row_q4_0_cuda; - case GGML_TYPE_Q4_1: - return dequantize_row_q4_1_cuda; - case GGML_TYPE_Q5_0: - return dequantize_block_cuda; - case GGML_TYPE_Q5_1: - return dequantize_block_cuda; - case GGML_TYPE_Q8_0: - return dequantize_block_cuda; - case GGML_TYPE_Q2_K: - return dequantize_row_q2_K_cuda; - case GGML_TYPE_Q3_K: - return dequantize_row_q3_K_cuda; - case GGML_TYPE_Q4_K: - return dequantize_row_q4_K_cuda; - case GGML_TYPE_Q5_K: - return dequantize_row_q5_K_cuda; - case GGML_TYPE_Q6_K: - return dequantize_row_q6_K_cuda; - case GGML_TYPE_IQ2_XXS: - return dequantize_row_iq2_xxs_cuda; - case GGML_TYPE_IQ2_XS: - return dequantize_row_iq2_xs_cuda; - case GGML_TYPE_IQ2_S: - return dequantize_row_iq2_s_cuda; - case GGML_TYPE_IQ3_XXS: - return dequantize_row_iq3_xxs_cuda; - case GGML_TYPE_IQ1_S: - return dequantize_row_iq1_s_cuda; - case GGML_TYPE_IQ1_M: - return dequantize_row_iq1_m_cuda; - case GGML_TYPE_IQ4_NL: - return dequantize_row_iq4_nl_cuda; - case GGML_TYPE_IQ4_XS: - return dequantize_row_iq4_xs_cuda; - case GGML_TYPE_IQ3_S: - return dequantize_row_iq3_s_cuda; - case GGML_TYPE_F16: - return convert_unary_cuda; - default: - return nullptr; - } -} diff --git a/ggml-cuda/convert.cuh b/ggml-cuda/convert.cuh deleted file mode 100644 index 5394be9f161..00000000000 --- a/ggml-cuda/convert.cuh +++ /dev/null @@ -1,13 +0,0 @@ -#include "common.cuh" - -#define CUDA_DEQUANTIZE_BLOCK_SIZE 256 - -template -using to_t_cuda_t = void (*)(const void * __restrict__ x, T * __restrict__ y, int64_t k, cudaStream_t stream); - -typedef to_t_cuda_t to_fp32_cuda_t; -typedef to_t_cuda_t to_fp16_cuda_t; - -to_fp16_cuda_t ggml_get_to_fp16_cuda(ggml_type type); - -to_fp32_cuda_t ggml_get_to_fp32_cuda(ggml_type type); diff --git a/ggml-cuda/cpy.cu b/ggml-cuda/cpy.cu deleted file mode 100644 index 16d9c8fffb4..00000000000 --- a/ggml-cuda/cpy.cu +++ /dev/null @@ -1,461 +0,0 @@ -#include "cpy.cuh" - -typedef void (*cpy_kernel_t)(const char * cx, char * cdst); - -static __device__ void cpy_1_f32_f32(const char * cxi, char * cdsti) { - const float * xi = (const float *) cxi; - float * dsti = (float *) cdsti; - - *dsti = *xi; -} - -static __device__ void cpy_1_f32_f16(const char * cxi, char * cdsti) { - const float * xi = (const float *) cxi; - half * dsti = (half *) cdsti; - - *dsti = __float2half(*xi); -} - -static __device__ void cpy_1_f16_f16(const char * cxi, char * cdsti) { - const half * xi = (const half *) cxi; - half * dsti = (half *) cdsti; - - *dsti = *xi; -} - -static __device__ void cpy_1_f16_f32(const char * cxi, char * cdsti) { - const half * xi = (const half *) cxi; - float * dsti = (float *) cdsti; - - *dsti = *xi; -} - -template -static __global__ void cpy_f32_f16(const char * cx, char * cdst, const int ne, - const int ne00, const int ne01, const int ne02, const int nb00, const int nb01, const int nb02, - const int nb03, const int ne10, const int ne11, const int ne12, const int nb10, const int nb11, - const int nb12, const int nb13) { - const int64_t i = blockDim.x*blockIdx.x + threadIdx.x; - - if (i >= ne) { - return; - } - - // determine indices i03/i13, i02/i12, i01/i11, i00/i10 as a function of index i of flattened tensor - // then combine those indices with the corresponding byte offsets to get the total offsets - const int64_t i03 = i/(ne00 * ne01 * ne02); - const int64_t i02 = (i - i03*ne00*ne01*ne02 )/ (ne00*ne01); - const int64_t i01 = (i - i03*ne00*ne01*ne02 - i02*ne01*ne00) / ne00; - const int64_t i00 = i - i03*ne00*ne01*ne02 - i02*ne01*ne00 - i01*ne00; - const int64_t x_offset = i00*nb00 + i01*nb01 + i02*nb02 + i03 * nb03; - - const int64_t i13 = i/(ne10 * ne11 * ne12); - const int64_t i12 = (i - i13*ne10*ne11*ne12) / (ne10*ne11); - const int64_t i11 = (i - i13*ne10*ne11*ne12 - i12*ne10*ne11) / ne10; - const int64_t i10 = i - i13*ne10*ne11*ne12 - i12*ne10*ne11 - i11*ne10; - const int64_t dst_offset = i10*nb10 + i11*nb11 + i12*nb12 + i13 * nb13; - - cpy_1(cx + x_offset, cdst + dst_offset); -} - -static __device__ void cpy_blck_f32_q8_0(const char * cxi, char * cdsti) { - const float * xi = (const float *) cxi; - block_q8_0 * dsti = (block_q8_0 *) cdsti; - - float amax = 0.0f; // absolute max - - for (int j = 0; j < QK8_0; j++) { - const float v = xi[j]; - amax = fmaxf(amax, fabsf(v)); - } - - const float d = amax / ((1 << 7) - 1); - const float id = d ? 1.0f/d : 0.0f; - - dsti->d = d; - - for (int j = 0; j < QK8_0; ++j) { - const float x0 = xi[j]*id; - - dsti->qs[j] = roundf(x0); - } -} - -static __device__ void cpy_blck_f32_q4_0(const char * cxi, char * cdsti) { - const float * xi = (const float *) cxi; - block_q4_0 * dsti = (block_q4_0 *) cdsti; - - float amax = 0.0f; - float vmax = 0.0f; - - for (int j = 0; j < QK4_0; ++j) { - const float v = xi[j]; - if (amax < fabsf(v)) { - amax = fabsf(v); - vmax = v; - } - } - - const float d = vmax / -8; - const float id = d ? 1.0f/d : 0.0f; - - dsti->d = d; - - for (int j = 0; j < QK4_0/2; ++j) { - const float x0 = xi[0 + j]*id; - const float x1 = xi[QK4_0/2 + j]*id; - - const uint8_t xi0 = min(15, (int8_t)(x0 + 8.5f)); - const uint8_t xi1 = min(15, (int8_t)(x1 + 8.5f)); - - dsti->qs[j] = xi0; - dsti->qs[j] |= xi1 << 4; - } -} - -static __device__ void cpy_blck_f32_q4_1(const char * cxi, char * cdsti) { - const float * xi = (const float *) cxi; - block_q4_1 * dsti = (block_q4_1 *) cdsti; - - float vmin = FLT_MAX; - float vmax = -FLT_MAX; - - for (int j = 0; j < QK4_1; ++j) { - const float v = xi[j]; - - if (v < vmin) vmin = v; - if (v > vmax) vmax = v; - } - - const float d = (vmax - vmin) / ((1 << 4) - 1); - const float id = d ? 1.0f/d : 0.0f; - - dsti->dm.x = d; - dsti->dm.y = vmin; - - for (int j = 0; j < QK4_1/2; ++j) { - const float x0 = (xi[0 + j] - vmin)*id; - const float x1 = (xi[QK4_1/2 + j] - vmin)*id; - - const uint8_t xi0 = min(15, (int8_t)(x0 + 0.5f)); - const uint8_t xi1 = min(15, (int8_t)(x1 + 0.5f)); - - dsti->qs[j] = xi0; - dsti->qs[j] |= xi1 << 4; - } -} - -static __device__ void cpy_blck_f32_q5_0(const char * cxi, char * cdsti) { - const float * xi = (const float *) cxi; - block_q5_0 * dsti = (block_q5_0 *) cdsti; - - float amax = 0.0f; - float vmax = 0.0f; - - for (int j = 0; j < QK5_0; ++j) { - const float v = xi[j]; - if (amax < fabsf(v)) { - amax = fabsf(v); - vmax = v; - } - } - - const float d = vmax / -16; - const float id = d ? 1.0f/d : 0.0f; - - dsti->d = d; - - uint32_t qh = 0; - for (int j = 0; j < QK5_0/2; ++j) { - const float x0 = xi[0 + j]*id; - const float x1 = xi[QK5_0/2 + j]*id; - - const uint8_t xi0 = min(31, (int8_t)(x0 + 16.5f)); - const uint8_t xi1 = min(31, (int8_t)(x1 + 16.5f)); - - dsti->qs[j] = (xi0 & 0xf) | ((xi1 & 0xf) << 4); - qh |= ((xi0 & 0x10u) >> 4) << (j + 0); - qh |= ((xi1 & 0x10u) >> 4) << (j + QK5_0/2); - } - memcpy(dsti->qh, &qh, sizeof(qh)); -} - -static __device__ void cpy_blck_f32_q5_1(const char * cxi, char * cdsti) { - const float * xi = (const float *) cxi; - block_q5_1 * dsti = (block_q5_1 *) cdsti; - - float min = xi[0]; - float max = xi[0]; - - for (int j = 1; j < QK5_1; ++j) { - const float v = xi[j]; - min = v < min ? v : min; - max = v > max ? v : max; - } - - const float d = (max - min) / 31; - const float id = d ? 1.0f/d : 0.0f; - - dsti->dm.x = d; - dsti->dm.y = min; - - uint32_t qh = 0; - for (int j = 0; j < QK5_1/2; ++j) { - const float x0 = (xi[0 + j] - min)*id; - const float x1 = (xi[QK5_1/2 + j] - min)*id; - - const uint8_t xi0 = (uint8_t)(x0 + 0.5f); - const uint8_t xi1 = (uint8_t)(x1 + 0.5f); - - dsti->qs[j] = (xi0 & 0xf) | ((xi1 & 0xf) << 4); - qh |= ((xi0 & 0x10u) >> 4) << (j + 0); - qh |= ((xi1 & 0x10u) >> 4) << (j + QK5_1/2); - } - memcpy(dsti->qh, &qh, sizeof(qh)); -} - - -static __device__ __forceinline__ int best_index_int8(int n, const int8_t * val, float x) { - if (x <= val[0]) return 0; - if (x >= val[n-1]) return n-1; - int ml = 0, mu = n-1; - while (mu-ml > 1) { - int mav = (ml+mu)/2; - if (x < val[mav]) mu = mav; else ml = mav; - } - return x - val[mu-1] < val[mu] - x ? mu-1 : mu; -} - -static __device__ void cpy_blck_f32_iq4_nl(const char * cxi, char * cdsti) { - const float * xi = (const float *) cxi; - block_iq4_nl * dsti = (block_iq4_nl *) cdsti; - - float amax = 0.0f; - float vmax = 0.0f; - - for (int j = 0; j < QK4_NL; ++j) { - const float v = xi[j]; - if (amax < fabsf(v)) { - amax = fabsf(v); - vmax = v; - } - } - - float d = vmax / kvalues_iq4nl[0]; - const float id = d ? 1.0f/d : 0.0f; - - float sumqx = 0, sumq2 = 0; - for (int j = 0; j < QK4_NL/2; ++j) { - const float x0 = xi[0 + j]*id; - const float x1 = xi[QK4_NL/2 + j]*id; - const uint8_t xi0 = best_index_int8(16, kvalues_iq4nl, x0); - const uint8_t xi1 = best_index_int8(16, kvalues_iq4nl, x1); - dsti->qs[j] = xi0 | (xi1 << 4); - const float v0 = kvalues_iq4nl[xi0]; - const float v1 = kvalues_iq4nl[xi1]; - const float w0 = xi[0 + j]*xi[0 + j]; - const float w1 = xi[QK4_NL/2 + j]*xi[QK4_NL/2 + j]; - sumqx += w0*v0*xi[j] + w1*v1*xi[QK4_NL/2 + j]; - sumq2 += w0*v0*v0 + w1*v1*v1; - } - - dsti->d = sumq2 > 0 ? sumqx/sumq2 : d; -} - -template -static __global__ void cpy_f32_q(const char * cx, char * cdst, const int ne, - const int ne00, const int ne01, const int ne02, const int nb00, const int nb01, const int nb02, - const int nb03, const int ne10, const int ne11, const int ne12, const int nb10, const int nb11, - const int nb12, const int nb13) { - const int i = (blockDim.x*blockIdx.x + threadIdx.x)*qk; - - if (i >= ne) { - return; - } - - const int i03 = i/(ne00 * ne01 * ne02); - const int i02 = (i - i03*ne00*ne01*ne02 )/ (ne00*ne01); - const int i01 = (i - i03*ne00*ne01*ne02 - i02*ne01*ne00) / ne00; - const int i00 = i - i03*ne00*ne01*ne02 - i02*ne01*ne00 - i01*ne00; - const int x_offset = i00*nb00 + i01*nb01 + i02*nb02 + i03 * nb03; - - const int i13 = i/(ne10 * ne11 * ne12); - const int i12 = (i - i13*ne10*ne11*ne12) / (ne10*ne11); - const int i11 = (i - i13*ne10*ne11*ne12 - i12*ne10*ne11) / ne10; - const int i10 = i - i13*ne10*ne11*ne12 - i12*ne10*ne11 - i11*ne10; - const int dst_offset = (i10/qk)*nb10 + i11*nb11 + i12*nb12 + i13*nb13; - - cpy_blck(cx + x_offset, cdst + dst_offset); -} - -static void ggml_cpy_f16_f32_cuda( - const char * cx, char * cdst, const int ne, - const int ne00, const int ne01, const int ne02, const int nb00, const int nb01, const int nb02, - const int nb03, const int ne10, const int ne11, const int ne12, const int nb10, const int nb11, const int nb12, const int nb13, cudaStream_t stream) { - - const int num_blocks = (ne + CUDA_CPY_BLOCK_SIZE - 1) / CUDA_CPY_BLOCK_SIZE; - cpy_f32_f16<<>> - (cx, cdst, ne, ne00, ne01, ne02, nb00, nb01, nb02, nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13); -} - -static void ggml_cpy_f32_f32_cuda( - const char * cx, char * cdst, const int ne, - const int ne00, const int ne01, const int ne02, const int nb00, const int nb01, const int nb02, - const int nb03, const int ne10, const int ne11, const int ne12, const int nb10, const int nb11, const int nb12, const int nb13, cudaStream_t stream) { - - const int num_blocks = (ne + CUDA_CPY_BLOCK_SIZE - 1) / CUDA_CPY_BLOCK_SIZE; - cpy_f32_f16<<>> - (cx, cdst, ne, ne00, ne01, ne02, nb00, nb01, nb02, nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13); -} - -static void ggml_cpy_f32_f16_cuda( - const char * cx, char * cdst, const int ne, - const int ne00, const int ne01, const int ne02, const int nb00, const int nb01, const int nb02, - const int nb03, const int ne10, const int ne11, const int ne12, const int nb10, const int nb11, const int nb12, const int nb13, cudaStream_t stream) { - - const int num_blocks = (ne + CUDA_CPY_BLOCK_SIZE - 1) / CUDA_CPY_BLOCK_SIZE; - cpy_f32_f16<<>> - (cx, cdst, ne, ne00, ne01, ne02, nb00, nb01, nb02, nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13); -} - -static void ggml_cpy_f32_q8_0_cuda( - const char * cx, char * cdst, const int ne, - const int ne00, const int ne01, const int ne02, const int nb00, const int nb01, const int nb02, - const int nb03, const int ne10, const int ne11, const int ne12, const int nb10, const int nb11, const int nb12, const int nb13, cudaStream_t stream) { - - GGML_ASSERT(ne % QK8_0 == 0); - const int num_blocks = ne / QK8_0; - cpy_f32_q<<>> - (cx, cdst, ne, ne00, ne01, ne02, nb00, nb01, nb02, nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13); -} - -static void ggml_cpy_f32_q4_0_cuda( - const char * cx, char * cdst, const int ne, - const int ne00, const int ne01, const int ne02, const int nb00, const int nb01, const int nb02, - const int nb03, const int ne10, const int ne11, const int ne12, const int nb10, const int nb11, const int nb12, const int nb13, cudaStream_t stream) { - - GGML_ASSERT(ne % QK4_0 == 0); - const int num_blocks = ne / QK4_0; - cpy_f32_q<<>> - (cx, cdst, ne, ne00, ne01, ne02, nb00, nb01, nb02, nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13); -} - -static void ggml_cpy_f32_q4_1_cuda( - const char * cx, char * cdst, const int ne, - const int ne00, const int ne01, const int ne02, const int nb00, const int nb01, const int nb02, - const int nb03, const int ne10, const int ne11, const int ne12, const int nb10, const int nb11, const int nb12, const int nb13, cudaStream_t stream) { - - GGML_ASSERT(ne % QK4_1 == 0); - const int num_blocks = ne / QK4_1; - cpy_f32_q<<>> - (cx, cdst, ne, ne00, ne01, ne02, nb00, nb01, nb02, nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13); -} - -static void ggml_cpy_f32_q5_0_cuda( - const char * cx, char * cdst, const int ne, - const int ne00, const int ne01, const int ne02, const int nb00, const int nb01, const int nb02, - const int nb03, const int ne10, const int ne11, const int ne12, const int nb10, const int nb11, const int nb12, const int nb13, cudaStream_t stream) { - - GGML_ASSERT(ne % QK5_0 == 0); - const int num_blocks = ne / QK5_0; - cpy_f32_q<<>> - (cx, cdst, ne, ne00, ne01, ne02, nb00, nb01, nb02, nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13); -} - -static void ggml_cpy_f32_q5_1_cuda( - const char * cx, char * cdst, const int ne, - const int ne00, const int ne01, const int ne02, const int nb00, const int nb01, const int nb02, - const int nb03, const int ne10, const int ne11, const int ne12, const int nb10, const int nb11, const int nb12, const int nb13, cudaStream_t stream) { - - GGML_ASSERT(ne % QK5_1 == 0); - const int num_blocks = ne / QK5_1; - cpy_f32_q<<>> - (cx, cdst, ne, ne00, ne01, ne02, nb00, nb01, nb02, nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13); -} - -static void ggml_cpy_f32_iq4_nl_cuda( - const char * cx, char * cdst, const int ne, - const int ne00, const int ne01, const int ne02, const int nb00, const int nb01, const int nb02, - const int nb03, const int ne10, const int ne11, const int ne12, const int nb10, const int nb11, const int nb12, const int nb13, cudaStream_t stream) { - - GGML_ASSERT(ne % QK4_NL == 0); - const int num_blocks = ne / QK4_NL; - cpy_f32_q<<>> - (cx, cdst, ne, ne00, ne01, ne02, nb00, nb01, nb02, nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13); -} - -static void ggml_cpy_f16_f16_cuda( - const char * cx, char * cdst, const int ne, - const int ne00, const int ne01, const int ne02, const int nb00, const int nb01, const int nb02, - const int nb03, const int ne10, const int ne11, const int ne12, const int nb10, const int nb11, const int nb12, const int nb13, cudaStream_t stream) { - - const int num_blocks = (ne + CUDA_CPY_BLOCK_SIZE - 1) / CUDA_CPY_BLOCK_SIZE; - cpy_f32_f16<<>> - (cx, cdst, ne, ne00, ne01, ne02, nb00, nb01, nb02, nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13); -} - -void ggml_cuda_cpy(ggml_backend_cuda_context & ctx, const ggml_tensor * src0, ggml_tensor * src1) { - const int64_t ne = ggml_nelements(src0); - GGML_ASSERT(ne == ggml_nelements(src1)); - - GGML_ASSERT(ggml_nbytes(src0) <= INT_MAX); - GGML_ASSERT(ggml_nbytes(src1) <= INT_MAX); - - const int64_t ne00 = src0->ne[0]; - const int64_t ne01 = src0->ne[1]; - const int64_t ne02 = src0->ne[2]; - - //GGML_ASSERT(src0->ne[3] == 1); - - const int64_t nb00 = src0->nb[0]; - const int64_t nb01 = src0->nb[1]; - const int64_t nb02 = src0->nb[2]; - const int64_t nb03 = src0->nb[3]; - - const int64_t ne10 = src1->ne[0]; - const int64_t ne11 = src1->ne[1]; - const int64_t ne12 = src1->ne[2]; - - //GGML_ASSERT(src1->ne[3] == 1); - - const int64_t nb10 = src1->nb[0]; - const int64_t nb11 = src1->nb[1]; - const int64_t nb12 = src1->nb[2]; - const int64_t nb13 = src1->nb[3]; - - cudaStream_t main_stream = ctx.stream(); - - char * src0_ddc = (char *) src0->data; - char * src1_ddc = (char *) src1->data; - - if (src0->type == GGML_TYPE_F32 && src1->type == GGML_TYPE_F32) { - ggml_cpy_f32_f32_cuda (src0_ddc, src1_ddc, ne, ne00, ne01, ne02, nb00, nb01, nb02, nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13, main_stream); - } else if (src0->type == GGML_TYPE_F32 && src1->type == GGML_TYPE_F16) { - ggml_cpy_f32_f16_cuda (src0_ddc, src1_ddc, ne, ne00, ne01, ne02, nb00, nb01, nb02, nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13, main_stream); - } else if (src0->type == GGML_TYPE_F32 && src1->type == GGML_TYPE_Q8_0) { - ggml_cpy_f32_q8_0_cuda(src0_ddc, src1_ddc, ne, ne00, ne01, ne02, nb00, nb01, nb02, nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13, main_stream); - } else if (src0->type == GGML_TYPE_F32 && src1->type == GGML_TYPE_Q4_0) { - ggml_cpy_f32_q4_0_cuda(src0_ddc, src1_ddc, ne, ne00, ne01, ne02, nb00, nb01, nb02, nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13, main_stream); - } else if (src0->type == GGML_TYPE_F32 && src1->type == GGML_TYPE_Q4_1) { - ggml_cpy_f32_q4_1_cuda(src0_ddc, src1_ddc, ne, ne00, ne01, ne02, nb00, nb01, nb02, nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13, main_stream); - } else if (src0->type == GGML_TYPE_F32 && src1->type == GGML_TYPE_Q5_0) { - ggml_cpy_f32_q5_0_cuda(src0_ddc, src1_ddc, ne, ne00, ne01, ne02, nb00, nb01, nb02, nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13, main_stream); - } else if (src0->type == GGML_TYPE_F32 && src1->type == GGML_TYPE_IQ4_NL) { - ggml_cpy_f32_iq4_nl_cuda(src0_ddc, src1_ddc, ne, ne00, ne01, ne02, nb00, nb01, nb02, nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13, main_stream); - } else if (src0->type == GGML_TYPE_F32 && src1->type == GGML_TYPE_Q5_1) { - ggml_cpy_f32_q5_1_cuda(src0_ddc, src1_ddc, ne, ne00, ne01, ne02, nb00, nb01, nb02, nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13, main_stream); - } else if (src0->type == GGML_TYPE_F16 && src1->type == GGML_TYPE_F16) { - ggml_cpy_f16_f16_cuda (src0_ddc, src1_ddc, ne, ne00, ne01, ne02, nb00, nb01, nb02, nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13, main_stream); - } else if (src0->type == GGML_TYPE_F16 && src1->type == GGML_TYPE_F32) { - ggml_cpy_f16_f32_cuda (src0_ddc, src1_ddc, ne, ne00, ne01, ne02, nb00, nb01, nb02, nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13, main_stream); - } else { - fprintf(stderr, "%s: unsupported type combination (%s to %s)\n", __func__, - ggml_type_name(src0->type), ggml_type_name(src1->type)); - GGML_ASSERT(false); - } -} - -void ggml_cuda_dup(ggml_backend_cuda_context & ctx, ggml_tensor * dst) { - const ggml_tensor * src0 = dst->src[0]; - ggml_cuda_cpy(ctx, src0, dst); -} diff --git a/ggml-cuda/cpy.cuh b/ggml-cuda/cpy.cuh deleted file mode 100644 index f0b2c453bfe..00000000000 --- a/ggml-cuda/cpy.cuh +++ /dev/null @@ -1,7 +0,0 @@ -#include "common.cuh" - -#define CUDA_CPY_BLOCK_SIZE 32 - -void ggml_cuda_cpy(ggml_backend_cuda_context & ctx, const ggml_tensor * src0, ggml_tensor * src1); - -void ggml_cuda_dup(ggml_backend_cuda_context & ctx, ggml_tensor * dst); diff --git a/ggml-cuda/dequantize.cuh b/ggml-cuda/dequantize.cuh deleted file mode 100644 index bd3c2d9db94..00000000000 --- a/ggml-cuda/dequantize.cuh +++ /dev/null @@ -1,103 +0,0 @@ -#include "common.cuh" - -static __device__ __forceinline__ void dequantize_q4_0(const void * vx, const int64_t ib, const int iqs, dfloat2 & v){ - const block_q4_0 * x = (const block_q4_0 *) vx; - - const dfloat d = x[ib].d; - - const int vui = x[ib].qs[iqs]; - - v.x = vui & 0xF; - v.y = vui >> 4; - -#ifdef GGML_CUDA_F16 - v = __hsub2(v, {8.0f, 8.0f}); - v = __hmul2(v, {d, d}); -#else - v.x = (v.x - 8.0f) * d; - v.y = (v.y - 8.0f) * d; -#endif // GGML_CUDA_F16 -} - -static __device__ __forceinline__ void dequantize_q4_1(const void * vx, const int64_t ib, const int iqs, dfloat2 & v){ - const block_q4_1 * x = (const block_q4_1 *) vx; - - const dfloat d = __low2half(x[ib].dm); - const dfloat m = __high2half(x[ib].dm); - - const int vui = x[ib].qs[iqs]; - - v.x = vui & 0xF; - v.y = vui >> 4; - -#ifdef GGML_CUDA_F16 - v = __hmul2(v, {d, d}); - v = __hadd2(v, {m, m}); -#else - v.x = (v.x * d) + m; - v.y = (v.y * d) + m; -#endif // GGML_CUDA_F16 -} - -static __device__ __forceinline__ void dequantize_q5_0(const void * vx, const int64_t ib, const int iqs, dfloat2 & v){ - const block_q5_0 * x = (const block_q5_0 *) vx; - - const dfloat d = x[ib].d; - - uint32_t qh; - memcpy(&qh, x[ib].qh, sizeof(qh)); - - const int xh_0 = ((qh >> (iqs + 0)) << 4) & 0x10; - const int xh_1 = ((qh >> (iqs + 12)) ) & 0x10; - - v.x = ((x[ib].qs[iqs] & 0xf) | xh_0); - v.y = ((x[ib].qs[iqs] >> 4) | xh_1); - -#ifdef GGML_CUDA_F16 - v = __hsub2(v, {16.0f, 16.0f}); - v = __hmul2(v, {d, d}); -#else - v.x = (v.x - 16.0f) * d; - v.y = (v.y - 16.0f) * d; -#endif // GGML_CUDA_F16 -} - -static __device__ __forceinline__ void dequantize_q5_1(const void * vx, const int64_t ib, const int iqs, dfloat2 & v){ - const block_q5_1 * x = (const block_q5_1 *) vx; - - const dfloat d = __low2half(x[ib].dm); - const dfloat m = __high2half(x[ib].dm); - - uint32_t qh; - memcpy(&qh, x[ib].qh, sizeof(qh)); - - const int xh_0 = ((qh >> (iqs + 0)) << 4) & 0x10; - const int xh_1 = ((qh >> (iqs + 12)) ) & 0x10; - - v.x = ((x[ib].qs[iqs] & 0xf) | xh_0); - v.y = ((x[ib].qs[iqs] >> 4) | xh_1); - -#ifdef GGML_CUDA_F16 - v = __hmul2(v, {d, d}); - v = __hadd2(v, {m, m}); -#else - v.x = (v.x * d) + m; - v.y = (v.y * d) + m; -#endif // GGML_CUDA_F16 -} - -static __device__ __forceinline__ void dequantize_q8_0(const void * vx, const int64_t ib, const int iqs, dfloat2 & v){ - const block_q8_0 * x = (const block_q8_0 *) vx; - - const dfloat d = x[ib].d; - - v.x = x[ib].qs[iqs + 0]; - v.y = x[ib].qs[iqs + 1]; - -#ifdef GGML_CUDA_F16 - v = __hmul2(v, {d, d}); -#else - v.x *= d; - v.y *= d; -#endif // GGML_CUDA_F16 -} diff --git a/ggml-cuda/diagmask.cu b/ggml-cuda/diagmask.cu deleted file mode 100644 index 4b713ba22eb..00000000000 --- a/ggml-cuda/diagmask.cu +++ /dev/null @@ -1,40 +0,0 @@ -#include "diagmask.cuh" - -static __global__ void diag_mask_inf_f32(const float * x, float * dst, const int ncols, const int rows_per_channel, const int n_past) { - const int col = blockDim.y*blockIdx.y + threadIdx.y; - const int row = blockDim.x*blockIdx.x + threadIdx.x; - - if (col >= ncols) { - return; - } - - const int i = row*ncols + col; - //dst[i] = col > (n_past + row % rows_per_channel) ? -INFINITY : x[i]; - //dst[i] = x[i] - (col > n_past + row % rows_per_channel) * INT_MAX; // equivalent within rounding error but slightly faster on GPU - dst[i] = x[i] - (col > n_past + row % rows_per_channel) * FLT_MAX; -} - -static void diag_mask_inf_f32_cuda(const float * x, float * dst, const int ncols_x, const int nrows_x, const int rows_per_channel, const int n_past, cudaStream_t stream) { - const dim3 block_dims(1, CUDA_DIAG_MASK_INF_BLOCK_SIZE, 1); - const int block_num_x = (ncols_x + CUDA_DIAG_MASK_INF_BLOCK_SIZE - 1) / CUDA_DIAG_MASK_INF_BLOCK_SIZE; - const dim3 block_nums(nrows_x, block_num_x, 1); - diag_mask_inf_f32<<>>(x, dst, ncols_x, rows_per_channel, n_past); -} - -void ggml_cuda_op_diag_mask_inf(ggml_backend_cuda_context & ctx, ggml_tensor * dst) { - const ggml_tensor * src0 = dst->src[0]; - const float * src0_d = (const float *)src0->data; - float * dst_d = (float *)dst->data; - cudaStream_t stream = ctx.stream(); - - GGML_ASSERT(src0->type == GGML_TYPE_F32); - GGML_ASSERT( dst->type == GGML_TYPE_F32); - - const int64_t ne00 = src0->ne[0]; - const int64_t ne01 = src0->ne[1]; - const int nrows0 = ggml_nrows(src0); - - const int n_past = ((int32_t *) dst->op_params)[0]; - - diag_mask_inf_f32_cuda(src0_d, dst_d, ne00, nrows0, ne01, n_past, stream); -} diff --git a/ggml-cuda/diagmask.cuh b/ggml-cuda/diagmask.cuh deleted file mode 100644 index 6cdbef17e34..00000000000 --- a/ggml-cuda/diagmask.cuh +++ /dev/null @@ -1,5 +0,0 @@ -#include "common.cuh" - -#define CUDA_DIAG_MASK_INF_BLOCK_SIZE 32 - -void ggml_cuda_op_diag_mask_inf(ggml_backend_cuda_context & ctx, ggml_tensor * dst); diff --git a/ggml-cuda/dmmv.cu b/ggml-cuda/dmmv.cu deleted file mode 100644 index 7313e3e1753..00000000000 --- a/ggml-cuda/dmmv.cu +++ /dev/null @@ -1,813 +0,0 @@ -#include "dmmv.cuh" -#include "dequantize.cuh" -#include "convert.cuh" - -#ifndef K_QUANTS_PER_ITERATION -#define K_QUANTS_PER_ITERATION 2 -#else -static_assert(K_QUANTS_PER_ITERATION == 1 || K_QUANTS_PER_ITERATION == 2, "K_QUANTS_PER_ITERATION must be 1 or 2"); -#endif - -static __global__ void dequantize_mul_mat_vec_q2_k(const void * __restrict__ vx, const float * __restrict__ yy, float * __restrict__ dst, const int ncols, int nrows) { - - static_assert(16%K_QUANTS_PER_ITERATION == 0, "16 must be divisible by K_QUANTS_PER_ITERATION"); - - const int row = blockIdx.x*blockDim.y + threadIdx.y; - if (row > nrows) return; - - const int num_blocks_per_row = ncols / QK_K; - const int ib0 = row*num_blocks_per_row; - - const block_q2_K * x = (const block_q2_K *)vx + ib0; - - float tmp = 0; // partial sum for thread in warp - -#if QK_K == 256 - const int tid = threadIdx.x/K_QUANTS_PER_ITERATION; // 0...31 or 0...15 - const int ix = threadIdx.x%K_QUANTS_PER_ITERATION; // 0 or 0,1 - - const int step = 16/K_QUANTS_PER_ITERATION; - - const int im = tid/step; // 0 or 1. 0 computes 0..., 1 computes 128... - const int in = tid - step*im; // 0...15 or 0...7 - - const int l0 = K_QUANTS_PER_ITERATION*in; // 0...15 or 0...14 in steps of 2 - const int q_offset = 32*im + l0; - const int s_offset = 8*im; - const int y_offset = 128*im + l0; - - uint32_t aux[4]; - const uint8_t * d = (const uint8_t *)aux; - const uint8_t * m = (const uint8_t *)(aux + 2); - - for (int i = ix; i < num_blocks_per_row; i += K_QUANTS_PER_ITERATION) { - - const float * y = yy + i * QK_K + y_offset; - const uint8_t * q = x[i].qs + q_offset; - - const float dall = __low2half(x[i].dm); - const float dmin = __high2half(x[i].dm); - - const uint32_t * a = (const uint32_t *)(x[i].scales + s_offset); - aux[0] = a[0] & 0x0f0f0f0f; - aux[1] = a[1] & 0x0f0f0f0f; - aux[2] = (a[0] >> 4) & 0x0f0f0f0f; - aux[3] = (a[1] >> 4) & 0x0f0f0f0f; - - float sum1 = 0, sum2 = 0; - for (int l = 0; l < K_QUANTS_PER_ITERATION; ++l) { - sum1 += y[l+ 0] * d[0] * ((q[l+ 0] >> 0) & 3) - + y[l+32] * d[2] * ((q[l+ 0] >> 2) & 3) - + y[l+64] * d[4] * ((q[l+ 0] >> 4) & 3) - + y[l+96] * d[6] * ((q[l+ 0] >> 6) & 3) - + y[l+16] * d[1] * ((q[l+16] >> 0) & 3) - + y[l+48] * d[3] * ((q[l+16] >> 2) & 3) - + y[l+80] * d[5] * ((q[l+16] >> 4) & 3) - +y[l+112] * d[7] * ((q[l+16] >> 6) & 3); - sum2 += y[l+ 0] * m[0] + y[l+32] * m[2] + y[l+64] * m[4] + y[ l+96] * m[6] - + y[l+16] * m[1] + y[l+48] * m[3] + y[l+80] * m[5] + y[l+112] * m[7]; - - } - tmp += dall * sum1 - dmin * sum2; - - } -#else - const int tid = threadIdx.x/(2*K_QUANTS_PER_ITERATION); // 0...15 or 0...7 - const int ix = threadIdx.x%(2*K_QUANTS_PER_ITERATION); // 0....1 or 0...3 - const int offset = tid * K_QUANTS_PER_ITERATION; - - uint32_t uaux[2]; - const uint8_t * d = (const uint8_t *)uaux; - - for (int i = ix; i < num_blocks_per_row; i += 2*K_QUANTS_PER_ITERATION) { - - const float * y = yy + i * QK_K + offset; - const uint8_t * q = x[i].qs + offset; - const uint32_t * s = (const uint32_t *)x[i].scales; - - uaux[0] = s[0] & 0x0f0f0f0f; - uaux[1] = (s[0] >> 4) & 0x0f0f0f0f; - - const float2 dall = __half22float2(x[i].dm); - - float sum1 = 0, sum2 = 0; - for (int l = 0; l < K_QUANTS_PER_ITERATION; ++l) { - const uint8_t ql = q[l]; - sum1 += y[l+ 0] * d[0] * ((ql >> 0) & 3) - + y[l+16] * d[1] * ((ql >> 2) & 3) - + y[l+32] * d[2] * ((ql >> 4) & 3) - + y[l+48] * d[3] * ((ql >> 6) & 3); - sum2 += y[l+0] * d[4] + y[l+16] * d[5] + y[l+32] * d[6] + y[l+48] * d[7]; - } - tmp += dall.x * sum1 - dall.y * sum2; - } -#endif - - // sum up partial sums and write back result - tmp = warp_reduce_sum(tmp); - - if (threadIdx.x == 0) { - dst[row] = tmp; - } -} - -static __global__ void dequantize_mul_mat_vec_q3_k(const void * __restrict__ vx, const float * __restrict__ yy, float * __restrict__ dst, const int ncols, int nrows) { - - const int row = blockIdx.x*blockDim.y + threadIdx.y; - if (row > nrows) return; - - const int num_blocks_per_row = ncols / QK_K; - const int ib0 = row*num_blocks_per_row; - - const block_q3_K * x = (const block_q3_K *)vx + ib0; - - float tmp = 0; // partial sum for thread in warp - -#if QK_K == 256 - - const uint16_t kmask1 = 0x0303; - const uint16_t kmask2 = 0x0f0f; - - const int tid = threadIdx.x/K_QUANTS_PER_ITERATION; // 0...31 or 0...16 - const int ix = threadIdx.x%K_QUANTS_PER_ITERATION; // 0 or 0,1 - - const int n = K_QUANTS_PER_ITERATION; // iterations in the inner loop - const int step = 16/K_QUANTS_PER_ITERATION; - const int im = tid/step; // 0 or 1. 0 computes 0..., 1 computes 128... - const int in = tid - step*im; // 0....15 or 0...7 - - const uint8_t m = 1 << (4*im); - - const int l0 = n*in; // 0...15 or 0...14 in steps of 2 - const int q_offset = 32*im + l0; - const int y_offset = 128*im + l0; - - uint16_t utmp[4]; - const int8_t * s = (const int8_t *)utmp; - - const uint16_t s_shift = 4*im; - - for (int i = ix; i < num_blocks_per_row; i += K_QUANTS_PER_ITERATION) { - - const float * y = yy + i * QK_K + y_offset; - const uint8_t * q = x[i].qs + q_offset; - const uint8_t * h = x[i].hmask + l0; - - const uint16_t * a = (const uint16_t *)x[i].scales; - utmp[0] = ((a[0] >> s_shift) & kmask2) | (((a[4] >> (s_shift + 0)) & kmask1) << 4); - utmp[1] = ((a[1] >> s_shift) & kmask2) | (((a[5] >> (s_shift + 0)) & kmask1) << 4); - utmp[2] = ((a[2] >> s_shift) & kmask2) | (((a[4] >> (s_shift + 2)) & kmask1) << 4); - utmp[3] = ((a[3] >> s_shift) & kmask2) | (((a[5] >> (s_shift + 2)) & kmask1) << 4); - - const float d = x[i].d; - - float sum = 0; - for (int l = 0; l < n; ++l) { - sum += y[l+ 0] * (s[0] - 32) * (((q[l] >> 0) & 3) - (h[l] & (m << 0) ? 0 : 4)) - + y[l+32] * (s[2] - 32) * (((q[l] >> 2) & 3) - (h[l] & (m << 1) ? 0 : 4)) - + y[l+64] * (s[4] - 32) * (((q[l] >> 4) & 3) - (h[l] & (m << 2) ? 0 : 4)) - + y[l+96] * (s[6] - 32) * (((q[l] >> 6) & 3) - (h[l] & (m << 3) ? 0 : 4)); - sum += y[l+16] * (s[1] - 32) * (((q[l+16] >> 0) & 3) - (h[l+16] & (m << 0) ? 0 : 4)) - + y[l+48] * (s[3] - 32) * (((q[l+16] >> 2) & 3) - (h[l+16] & (m << 1) ? 0 : 4)) - + y[l+80] * (s[5] - 32) * (((q[l+16] >> 4) & 3) - (h[l+16] & (m << 2) ? 0 : 4)) - + y[l+112] * (s[7] - 32) * (((q[l+16] >> 6) & 3) - (h[l+16] & (m << 3) ? 0 : 4)); - } - tmp += d * sum; - - } -#else - - const int tid = threadIdx.x/(2*K_QUANTS_PER_ITERATION); // 0...15 or 0...7 - const int ix = threadIdx.x%(2*K_QUANTS_PER_ITERATION); // 0....1 or 0...3 - const int offset = tid * K_QUANTS_PER_ITERATION; // 0...15 or 0...14 - const int in = offset/8; // 0 or 1 - const int im = offset%8; // 0...7 - - for (int i = ix; i < num_blocks_per_row; i += 2*K_QUANTS_PER_ITERATION) { - - const float * y = yy + i * QK_K + offset; - const uint8_t * q = x[i].qs + offset; - const uint8_t * s = x[i].scales; - - const float dall = (float)x[i].d; - - float sum = 0; - for (int l = 0; l < K_QUANTS_PER_ITERATION; ++l) { - const uint8_t hl = x[i].hmask[im+l] >> in; - const uint8_t ql = q[l]; - sum += y[l+ 0] * dall * ((s[0] & 0xF) - 8) * ((int8_t)((ql >> 0) & 3) - ((hl >> 0) & 1 ? 0 : 4)) - + y[l+16] * dall * ((s[0] >> 4) - 8) * ((int8_t)((ql >> 2) & 3) - ((hl >> 2) & 1 ? 0 : 4)) - + y[l+32] * dall * ((s[1] & 0xF) - 8) * ((int8_t)((ql >> 4) & 3) - ((hl >> 4) & 1 ? 0 : 4)) - + y[l+48] * dall * ((s[1] >> 4) - 8) * ((int8_t)((ql >> 6) & 3) - ((hl >> 6) & 1 ? 0 : 4)); - } - tmp += sum; - } -#endif - - // sum up partial sums and write back result - tmp = warp_reduce_sum(tmp); - - if (threadIdx.x == 0) { - dst[row] = tmp; - } -} - -static __global__ void dequantize_mul_mat_vec_q4_k(const void * __restrict__ vx, const float * __restrict__ yy, float * __restrict__ dst, const int ncols, int nrows) { - - const int row = blockIdx.x*blockDim.y + threadIdx.y; - if (row > nrows) return; - const int num_blocks_per_row = ncols / QK_K; - const int ib0 = row*num_blocks_per_row; - - const block_q4_K * x = (const block_q4_K *)vx + ib0; - -#if QK_K == 256 - const uint16_t kmask1 = 0x3f3f; - const uint16_t kmask2 = 0x0f0f; - const uint16_t kmask3 = 0xc0c0; - - const int tid = threadIdx.x/K_QUANTS_PER_ITERATION; // 0...31 or 0...16 - const int ix = threadIdx.x%K_QUANTS_PER_ITERATION; // 0 or 0,1 - - const int step = 8/K_QUANTS_PER_ITERATION; // 8 or 4 - - const int il = tid/step; // 0...3 - const int ir = tid - step*il; // 0...7 or 0...3 - const int n = 2 * K_QUANTS_PER_ITERATION; // 2 or 4 - - const int im = il/2; // 0 or 1. 0 computes 0,32 + 128,160, 1 computes 64,96 + 192,224 - const int in = il%2; - - const int l0 = n*(2*ir + in); - const int q_offset = 32*im + l0; - const int y_offset = 64*im + l0; - - uint16_t aux[4]; - const uint8_t * sc = (const uint8_t *)aux; - -#if K_QUANTS_PER_ITERATION == 2 - uint32_t q32[4]; - const uint8_t * q4 = (const uint8_t *)q32; -#else - uint16_t q16[4]; - const uint8_t * q4 = (const uint8_t *)q16; -#endif - - float tmp = 0; // partial sum for thread in warp - - for (int i = ix; i < num_blocks_per_row; i += K_QUANTS_PER_ITERATION) { - - const float * y1 = yy + i*QK_K + y_offset; - const float * y2 = y1 + 128; - - const float dall = __low2half(x[i].dm); - const float dmin = __high2half(x[i].dm); - - const uint16_t * a = (const uint16_t *)x[i].scales; - aux[0] = a[im+0] & kmask1; - aux[1] = a[im+2] & kmask1; - aux[2] = ((a[im+4] >> 0) & kmask2) | ((a[im+0] & kmask3) >> 2); - aux[3] = ((a[im+4] >> 4) & kmask2) | ((a[im+2] & kmask3) >> 2); - -#if K_QUANTS_PER_ITERATION == 2 - const uint32_t * q1 = (const uint32_t *)(x[i].qs + q_offset); - const uint32_t * q2 = q1 + 16; - - q32[0] = q1[0] & 0x0f0f0f0f; - q32[1] = q1[0] & 0xf0f0f0f0; - q32[2] = q2[0] & 0x0f0f0f0f; - q32[3] = q2[0] & 0xf0f0f0f0; - - float4 s = {0.f, 0.f, 0.f, 0.f}; - float smin = 0; - for (int l = 0; l < 4; ++l) { - s.x += y1[l] * q4[l+0]; s.y += y1[l+32] * q4[l+ 4]; - s.z += y2[l] * q4[l+8]; s.w += y2[l+32] * q4[l+12]; - smin += y1[l] * sc[2] + y1[l+32] * sc[3] + y2[l] * sc[6] + y2[l+32] * sc[7]; - } - tmp += dall * (s.x * sc[0] + s.y * sc[1] * 1.f/16.f + s.z * sc[4] + s.w * sc[5] * 1.f/16.f) - dmin * smin; -#else - const uint16_t * q1 = (const uint16_t *)(x[i].qs + q_offset); - const uint16_t * q2 = q1 + 32; - - q16[0] = q1[0] & 0x0f0f; - q16[1] = q1[0] & 0xf0f0; - q16[2] = q2[0] & 0x0f0f; - q16[3] = q2[0] & 0xf0f0; - - float4 s = {0.f, 0.f, 0.f, 0.f}; - float smin = 0; - for (int l = 0; l < 2; ++l) { - s.x += y1[l] * q4[l+0]; s.y += y1[l+32] * q4[l+2]; - s.z += y2[l] * q4[l+4]; s.w += y2[l+32] * q4[l+6]; - smin += y1[l] * sc[2] + y1[l+32] * sc[3] + y2[l] * sc[6] + y2[l+32] * sc[7]; - } - tmp += dall * (s.x * sc[0] + s.y * sc[1] * 1.f/16.f + s.z * sc[4] + s.w * sc[5] * 1.f/16.f) - dmin * smin; -#endif - - } -#else - const int tid = threadIdx.x/(2*K_QUANTS_PER_ITERATION); // 0...15 - const int ix = threadIdx.x%(2*K_QUANTS_PER_ITERATION); - - const int step = tid * K_QUANTS_PER_ITERATION; - - uint16_t aux16[2]; - const uint8_t * s = (const uint8_t *)aux16; - - float tmp = 0; - - for (int i = ix; i < num_blocks_per_row; i += 2*K_QUANTS_PER_ITERATION) { - const uint8_t * q = x[i].qs + step; - const float * y = yy + i*QK_K + step; - const uint16_t * a = (const uint16_t *)x[i].scales; - aux16[0] = a[0] & 0x0f0f; - aux16[1] = (a[0] >> 4) & 0x0f0f; - const float d = (float)x[i].dm[0]; - const float m = (float)x[i].dm[1]; - float sum = 0.f; - for (int j = 0; j < K_QUANTS_PER_ITERATION; ++j) { - sum += y[j+ 0] * (d * s[0] * (q[j+ 0] & 0xF) - m * s[2]) - + y[j+16] * (d * s[0] * (q[j+16] & 0xF) - m * s[2]) - + y[j+32] * (d * s[1] * (q[j+ 0] >> 4) - m * s[3]) - + y[j+48] * (d * s[1] * (q[j+16] >> 4) - m * s[3]); - } - tmp += sum; - } - -#endif - - // sum up partial sums and write back result - tmp = warp_reduce_sum(tmp); - - if (tid == 0) { - dst[row] = tmp; - } -} - -static __global__ void dequantize_mul_mat_vec_q5_k(const void * __restrict__ vx, const float * __restrict__ yy, float * __restrict__ dst, const int ncols) { - - const int row = blockIdx.x; - const int num_blocks_per_row = ncols / QK_K; - const int ib0 = row*num_blocks_per_row; - - const block_q5_K * x = (const block_q5_K *)vx + ib0; - - float tmp = 0; // partial sum for thread in warp - -#if QK_K == 256 - const uint16_t kmask1 = 0x3f3f; - const uint16_t kmask2 = 0x0f0f; - const uint16_t kmask3 = 0xc0c0; - - const int tid = threadIdx.x/2; // 0...15 - const int ix = threadIdx.x%2; - - const int il = tid/4; // 0...3 - const int ir = tid - 4*il;// 0...3 - const int n = 2; - - const int im = il/2; // 0 or 1. 0 computes 0,32 + 128,160, 1 computes 64,96 + 192,224 - const int in = il%2; - - const int l0 = n*(2*ir + in); - const int q_offset = 32*im + l0; - const int y_offset = 64*im + l0; - - const uint8_t hm1 = 1 << (2*im); - const uint8_t hm2 = hm1 << 4; - - uint16_t aux[4]; - const uint8_t * sc = (const uint8_t *)aux; - - uint16_t q16[8]; - const uint8_t * q4 = (const uint8_t *)q16; - - for (int i = ix; i < num_blocks_per_row; i += 2) { - - const uint8_t * ql1 = x[i].qs + q_offset; - const uint8_t * qh = x[i].qh + l0; - const float * y1 = yy + i*QK_K + y_offset; - const float * y2 = y1 + 128; - - const float dall = __low2half(x[i].dm); - const float dmin = __high2half(x[i].dm); - - const uint16_t * a = (const uint16_t *)x[i].scales; - aux[0] = a[im+0] & kmask1; - aux[1] = a[im+2] & kmask1; - aux[2] = ((a[im+4] >> 0) & kmask2) | ((a[im+0] & kmask3) >> 2); - aux[3] = ((a[im+4] >> 4) & kmask2) | ((a[im+2] & kmask3) >> 2); - - float4 sum = {0.f, 0.f, 0.f, 0.f}; - float smin = 0; - const uint16_t * q1 = (const uint16_t *)ql1; - const uint16_t * q2 = q1 + 32; - q16[0] = q1[0] & 0x0f0f; - q16[1] = q1[8] & 0x0f0f; - q16[2] = (q1[0] >> 4) & 0x0f0f; - q16[3] = (q1[8] >> 4) & 0x0f0f; - q16[4] = q2[0] & 0x0f0f; - q16[5] = q2[8] & 0x0f0f; - q16[6] = (q2[0] >> 4) & 0x0f0f; - q16[7] = (q2[8] >> 4) & 0x0f0f; - for (int l = 0; l < n; ++l) { - sum.x += y1[l+ 0] * (q4[l +0] + (qh[l+ 0] & (hm1 << 0) ? 16 : 0)) - + y1[l+16] * (q4[l +2] + (qh[l+16] & (hm1 << 0) ? 16 : 0)); - sum.y += y1[l+32] * (q4[l +4] + (qh[l+ 0] & (hm1 << 1) ? 16 : 0)) - + y1[l+48] * (q4[l +6] + (qh[l+16] & (hm1 << 1) ? 16 : 0)); - sum.z += y2[l+ 0] * (q4[l +8] + (qh[l+ 0] & (hm2 << 0) ? 16 : 0)) - + y2[l+16] * (q4[l+10] + (qh[l+16] & (hm2 << 0) ? 16 : 0)); - sum.w += y2[l+32] * (q4[l+12] + (qh[l+ 0] & (hm2 << 1) ? 16 : 0)) - + y2[l+48] * (q4[l+14] + (qh[l+16] & (hm2 << 1) ? 16 : 0)); - smin += (y1[l] + y1[l+16]) * sc[2] + (y1[l+32] + y1[l+48]) * sc[3] - + (y2[l] + y2[l+16]) * sc[6] + (y2[l+32] + y2[l+48]) * sc[7]; - } - tmp += dall * (sum.x * sc[0] + sum.y * sc[1] + sum.z * sc[4] + sum.w * sc[5]) - dmin * smin; - } - -#else - const int tid = threadIdx.x/(2*K_QUANTS_PER_ITERATION); // 0...15 - const int ix = threadIdx.x%(2*K_QUANTS_PER_ITERATION); - const int step = tid * K_QUANTS_PER_ITERATION; - const int im = step/8; - const int in = step%8; - - for (int i = ix; i < num_blocks_per_row; i += 2*K_QUANTS_PER_ITERATION) { - const uint8_t * q = x[i].qs + step; - const int8_t * s = x[i].scales; - const float * y = yy + i*QK_K + step; - const float d = x[i].d; - float sum = 0.f; - for (int j = 0; j < K_QUANTS_PER_ITERATION; ++j) { - const uint8_t h = x[i].qh[in+j] >> im; - sum += y[j+ 0] * d * s[0] * ((q[j+ 0] & 0xF) - ((h >> 0) & 1 ? 0 : 16)) - + y[j+16] * d * s[1] * ((q[j+16] & 0xF) - ((h >> 2) & 1 ? 0 : 16)) - + y[j+32] * d * s[2] * ((q[j+ 0] >> 4) - ((h >> 4) & 1 ? 0 : 16)) - + y[j+48] * d * s[3] * ((q[j+16] >> 4) - ((h >> 6) & 1 ? 0 : 16)); - } - tmp += sum; - } -#endif - - // sum up partial sums and write back result - tmp = warp_reduce_sum(tmp); - - if (threadIdx.x == 0) { - dst[row] = tmp; - } -} - -static __global__ void dequantize_mul_mat_vec_q6_k(const void * __restrict__ vx, const float * __restrict__ yy, float * __restrict__ dst, const int ncols, int nrows) { - - static_assert(16%K_QUANTS_PER_ITERATION == 0, "16 must be divisible by K_QUANTS_PER_ITERATION"); - - const int row = blockIdx.x*blockDim.y + threadIdx.y; - if (row > nrows) return; - - const int num_blocks_per_row = ncols / QK_K; - const int ib0 = row*num_blocks_per_row; - - const block_q6_K * x = (const block_q6_K *)vx + ib0; - -#if QK_K == 256 - - const int tid = threadIdx.x/K_QUANTS_PER_ITERATION; // 0...31 or 0...16 - const int ix = threadIdx.x%K_QUANTS_PER_ITERATION; // 0 or 0, 1 - - const int step = 16/K_QUANTS_PER_ITERATION; // 16 or 8 - - const int im = tid/step; // 0 or 1. 0 computes 0..., 1 computes 128... - const int in = tid - step*im; // 0...15 or 0...7 - -#if K_QUANTS_PER_ITERATION == 1 - const int l0 = K_QUANTS_PER_ITERATION*in; // 0...15 - const int is = 0; -#else - const int l0 = 4 * in; // 0, 4, 8, ..., 28 - const int is = in / 4; -#endif - const int ql_offset = 64*im + l0; - const int qh_offset = 32*im + l0; - const int s_offset = 8*im + is; - const int y_offset = 128*im + l0; - - float tmp = 0; // partial sum for thread in warp - - for (int i = ix; i < num_blocks_per_row; i += K_QUANTS_PER_ITERATION) { - - const float * y = yy + i * QK_K + y_offset; - const uint8_t * ql = x[i].ql + ql_offset; - const uint8_t * qh = x[i].qh + qh_offset; - const int8_t * s = x[i].scales + s_offset; - - const float d = x[i].d; - -#if K_QUANTS_PER_ITERATION == 1 - float sum = y[ 0] * s[0] * d * ((int8_t)((ql[ 0] & 0xF) | ((qh[ 0] & 0x03) << 4)) - 32) - + y[16] * s[1] * d * ((int8_t)((ql[16] & 0xF) | ((qh[16] & 0x03) << 4)) - 32) - + y[32] * s[2] * d * ((int8_t)((ql[32] & 0xF) | ((qh[ 0] & 0x0c) << 2)) - 32) - + y[48] * s[3] * d * ((int8_t)((ql[48] & 0xF) | ((qh[16] & 0x0c) << 2)) - 32) - + y[64] * s[4] * d * ((int8_t)((ql[ 0] >> 4) | ((qh[ 0] & 0x30) >> 0)) - 32) - + y[80] * s[5] * d * ((int8_t)((ql[16] >> 4) | ((qh[16] & 0x30) >> 0)) - 32) - + y[96] * s[6] * d * ((int8_t)((ql[32] >> 4) | ((qh[ 0] & 0xc0) >> 2)) - 32) - +y[112] * s[7] * d * ((int8_t)((ql[48] >> 4) | ((qh[16] & 0xc0) >> 2)) - 32); - tmp += sum; -#else - float sum = 0; - for (int l = 0; l < 4; ++l) { - sum += y[l+ 0] * s[0] * d * ((int8_t)((ql[l+ 0] & 0xF) | (((qh[l] >> 0) & 3) << 4)) - 32) - + y[l+32] * s[2] * d * ((int8_t)((ql[l+32] & 0xF) | (((qh[l] >> 2) & 3) << 4)) - 32) - + y[l+64] * s[4] * d * ((int8_t)((ql[l+ 0] >> 4) | (((qh[l] >> 4) & 3) << 4)) - 32) - + y[l+96] * s[6] * d * ((int8_t)((ql[l+32] >> 4) | (((qh[l] >> 6) & 3) << 4)) - 32); - } - tmp += sum; -#endif - - } - -#else - - const int tid = threadIdx.x/(2*K_QUANTS_PER_ITERATION); // 0...7 - const int ix = threadIdx.x%(2*K_QUANTS_PER_ITERATION); // 0...3 - - const int step = tid * K_QUANTS_PER_ITERATION; - - float tmp = 0; // partial sum for thread in warp - - for (int i = ix; i < num_blocks_per_row; i += 2*K_QUANTS_PER_ITERATION) { - - const float * y = yy + i * QK_K + step; - const uint8_t * ql = x[i].ql + step; - const uint8_t * qh = x[i].qh + step; - const int8_t * s = x[i].scales; - - const float d = x[i+0].d; - - float sum = 0; - for (int j = 0; j < K_QUANTS_PER_ITERATION; ++j) { - sum += y[j+ 0] * s[0] * d * ((int8_t)((ql[j+ 0] & 0xF) | ((qh[j] & 0x03) << 4)) - 32) - + y[j+16] * s[1] * d * ((int8_t)((ql[j+16] & 0xF) | ((qh[j] & 0x0c) << 2)) - 32) - + y[j+32] * s[2] * d * ((int8_t)((ql[j+ 0] >> 4) | ((qh[j] & 0x30) >> 0)) - 32) - + y[j+48] * s[3] * d * ((int8_t)((ql[j+16] >> 4) | ((qh[j] & 0xc0) >> 2)) - 32); - } - tmp += sum; - - } - -#endif - - // sum up partial sums and write back result - tmp = warp_reduce_sum(tmp); - - if (tid == 0) { - dst[row] = tmp; - } -} - -static __device__ void convert_f16(const void * vx, const int64_t ib, const int iqs, dfloat2 & v){ - const half * x = (const half *) vx; - - // automatic half -> float type cast if dfloat == float - v.x = x[ib + iqs + 0]; - v.y = x[ib + iqs + 1]; -} - -template -static __global__ void dequantize_mul_mat_vec(const void * __restrict__ vx, const dfloat * __restrict__ y, float * __restrict__ dst, const int ncols, const int nrows) { - // qk = quantized weights per x block - // qr = number of quantized weights per data value in x block - const int64_t row = (int64_t)blockIdx.x*blockDim.y + threadIdx.y; - - if (row >= nrows) { - return; - } - - const int tid = threadIdx.x; - - const int iter_stride = 2*GGML_CUDA_DMMV_X; - const int vals_per_iter = iter_stride / WARP_SIZE; // num quantized vals per thread and i iter - const int y_offset = qr == 1 ? 1 : qk/2; - -// partial sum for each thread -#ifdef GGML_CUDA_F16 - half2 tmp = {0.0f, 0.0f}; // two sums for f16 to take advantage of half2 intrinsics -#else - float tmp = 0.0f; -#endif // GGML_CUDA_F16 - - for (int i = 0; i < ncols; i += iter_stride) { - const int col = i + vals_per_iter*tid; - const int64_t ib = ((int64_t)row*ncols + col)/qk; // x block index - const int iqs = (col%qk)/qr; // x quant index - const int iybs = col - col%qk; // y block start index - -// processing >2 values per i iter is faster for fast GPUs -#pragma unroll - for (int j = 0; j < vals_per_iter; j += 2) { - // process 2 vals per j iter - - // dequantize - // for qr = 2 the iqs needs to increase by 1 per j iter because 2 weights per data val - dfloat2 v; - dequantize_kernel(vx, ib, iqs + j/qr, v); - - // matrix multiplication - // for qr = 2 the y index needs to increase by 1 per j iter because of y_offset = qk/2 -#ifdef GGML_CUDA_F16 - tmp += __hmul2(v, { - y[iybs + iqs + j/qr + 0], - y[iybs + iqs + j/qr + y_offset] - }); -#else - tmp += v.x * y[iybs + iqs + j/qr + 0]; - tmp += v.y * y[iybs + iqs + j/qr + y_offset]; -#endif // GGML_CUDA_F16 - } - } - - // sum up partial sums and write back result - tmp = warp_reduce_sum(tmp); - - if (tid == 0) { -#ifdef GGML_CUDA_F16 - dst[row] = tmp.x + tmp.y; -#else - dst[row] = tmp; -#endif // GGML_CUDA_F16 - } -} - -static void dequantize_mul_mat_vec_q4_0_cuda(const void * vx, const dfloat * y, float * dst, const int ncols, const int nrows, cudaStream_t stream) { - GGML_ASSERT(ncols % GGML_CUDA_DMMV_X == 0); - const int block_num_y = (nrows + GGML_CUDA_MMV_Y - 1) / GGML_CUDA_MMV_Y; - // the number of rows may exceed maximum grid size in the y or z dimensions, use the x dimension instead - const dim3 block_nums(block_num_y, 1, 1); - const dim3 block_dims(WARP_SIZE, GGML_CUDA_MMV_Y, 1); - dequantize_mul_mat_vec - <<>>(vx, y, dst, ncols, nrows); -} - -static void dequantize_mul_mat_vec_q4_1_cuda(const void * vx, const dfloat * y, float * dst, const int ncols, const int nrows, cudaStream_t stream) { - GGML_ASSERT(ncols % GGML_CUDA_DMMV_X == 0); - const int block_num_y = (nrows + GGML_CUDA_MMV_Y - 1) / GGML_CUDA_MMV_Y; - const dim3 block_nums(block_num_y, 1, 1); - const dim3 block_dims(WARP_SIZE, GGML_CUDA_MMV_Y, 1); - dequantize_mul_mat_vec - <<>>(vx, y, dst, ncols, nrows); -} - -static void dequantize_mul_mat_vec_q5_0_cuda(const void * vx, const dfloat * y, float * dst, const int ncols, const int nrows, cudaStream_t stream) { - GGML_ASSERT(ncols % GGML_CUDA_DMMV_X == 0); - const int block_num_y = (nrows + GGML_CUDA_MMV_Y - 1) / GGML_CUDA_MMV_Y; - const dim3 block_nums(block_num_y, 1, 1); - const dim3 block_dims(WARP_SIZE, GGML_CUDA_MMV_Y, 1); - dequantize_mul_mat_vec - <<>>(vx, y, dst, ncols, nrows); -} - -static void dequantize_mul_mat_vec_q5_1_cuda(const void * vx, const dfloat * y, float * dst, const int ncols, const int nrows, cudaStream_t stream) { - GGML_ASSERT(ncols % GGML_CUDA_DMMV_X == 0); - const int block_num_y = (nrows + GGML_CUDA_MMV_Y - 1) / GGML_CUDA_MMV_Y; - const dim3 block_nums(block_num_y, 1, 1); - const dim3 block_dims(WARP_SIZE, GGML_CUDA_MMV_Y, 1); - dequantize_mul_mat_vec - <<>>(vx, y, dst, ncols, nrows); -} - -static void dequantize_mul_mat_vec_q8_0_cuda(const void * vx, const dfloat * y, float * dst, const int ncols, const int nrows, cudaStream_t stream) { - GGML_ASSERT(ncols % GGML_CUDA_DMMV_X == 0); - const int block_num_y = (nrows + GGML_CUDA_MMV_Y - 1) / GGML_CUDA_MMV_Y; - const dim3 block_nums(block_num_y, 1, 1); - const dim3 block_dims(WARP_SIZE, GGML_CUDA_MMV_Y, 1); - dequantize_mul_mat_vec - <<>>(vx, y, dst, ncols, nrows); -} - -static void dequantize_mul_mat_vec_q2_K_cuda(const void * vx, const float * y, float * dst, const int ncols, const int nrows, cudaStream_t stream) { - GGML_ASSERT(ncols % QK_K == 0); - const int ny = 2; // very slightly faster than 1 even when K_QUANTS_PER_ITERATION = 2 - const int block_num_y = (nrows + ny - 1) / ny; - const dim3 block_nums(block_num_y, 1, 1); - const dim3 block_dims(32, ny, 1); - dequantize_mul_mat_vec_q2_k<<>>(vx, y, dst, ncols, nrows); -} - -static void dequantize_mul_mat_vec_q3_K_cuda(const void * vx, const float * y, float * dst, const int ncols, const int nrows, cudaStream_t stream) { - GGML_ASSERT(ncols % QK_K == 0); - const int ny = 2 / K_QUANTS_PER_ITERATION; - const int block_num_y = (nrows + ny - 1) / ny; - const dim3 block_nums(block_num_y, 1, 1); - const dim3 block_dims(32, ny, 1); - dequantize_mul_mat_vec_q3_k<<>>(vx, y, dst, ncols, nrows); -} - -static void dequantize_mul_mat_vec_q4_K_cuda(const void * vx, const float * y, float * dst, const int ncols, const int nrows, cudaStream_t stream) { - GGML_ASSERT(ncols % QK_K == 0); - const int ny = 2 / K_QUANTS_PER_ITERATION; - const int block_num_y = (nrows + ny - 1) / ny; - const dim3 block_nums(block_num_y, 1, 1); - const dim3 block_dims(32, ny, 1); - dequantize_mul_mat_vec_q4_k<<>>(vx, y, dst, ncols, nrows); -} - -static void dequantize_mul_mat_vec_q5_K_cuda(const void * vx, const float * y, float * dst, const int ncols, const int nrows, cudaStream_t stream) { - GGML_ASSERT(ncols % QK_K == 0); - const dim3 block_dims(32, 1, 1); - dequantize_mul_mat_vec_q5_k<<>>(vx, y, dst, ncols); -} - -static void dequantize_mul_mat_vec_q6_K_cuda(const void * vx, const float * y, float * dst, const int ncols, const int nrows, cudaStream_t stream) { - GGML_ASSERT(ncols % QK_K == 0); - const int ny = 2 / K_QUANTS_PER_ITERATION; - const int block_num_y = (nrows + ny - 1) / ny; - const dim3 block_nums(block_num_y, 1, 1); - const dim3 block_dims(32, ny, 1); - dequantize_mul_mat_vec_q6_k<<>>(vx, y, dst, ncols, nrows); -} - -static void convert_mul_mat_vec_f16_cuda(const void * vx, const dfloat * y, float * dst, const int ncols, const int nrows, cudaStream_t stream) { - GGML_ASSERT(ncols % GGML_CUDA_DMMV_X == 0); - const int block_num_y = (nrows + GGML_CUDA_MMV_Y - 1) / GGML_CUDA_MMV_Y; - const dim3 block_nums(block_num_y, 1, 1); - const dim3 block_dims(WARP_SIZE, GGML_CUDA_MMV_Y, 1); - dequantize_mul_mat_vec<1, 1, convert_f16> - <<>>(vx, y, dst, ncols, nrows); -} - -void ggml_cuda_op_dequantize_mul_mat_vec( - ggml_backend_cuda_context & ctx, - const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst, const char * src0_dd_i, const float * src1_ddf_i, - const char * src1_ddq_i, float * dst_dd_i, const int64_t row_low, const int64_t row_high, const int64_t src1_ncols, - const int64_t src1_padded_row_size, cudaStream_t stream) { - GGML_UNUSED(ctx); - const int64_t ne00 = src0->ne[0]; - const int64_t row_diff = row_high - row_low; - - GGML_ASSERT(src1->type == GGML_TYPE_F32); - - // on some GPUs it is faster to convert src1 to half and to use half precision intrinsics -#ifdef GGML_CUDA_F16 - ggml_cuda_pool_alloc src1_dfloat_a(ctx.pool()); - half * src1_dfloat = nullptr; // dfloat == half - - bool src1_convert_f16 = - src0->type == GGML_TYPE_Q4_0 || src0->type == GGML_TYPE_Q4_1 || - src0->type == GGML_TYPE_Q5_0 || src0->type == GGML_TYPE_Q5_1 || - src0->type == GGML_TYPE_Q8_0 || src0->type == GGML_TYPE_F16; - - if (src1_convert_f16) { - src1_dfloat = src1_dfloat_a.alloc(ne00); - const to_fp16_cuda_t to_fp16_cuda = ggml_get_to_fp16_cuda(src1->type); - GGML_ASSERT(to_fp16_cuda != nullptr); - to_fp16_cuda(src1_ddf_i, src1_dfloat, ne00, stream); - } -#else - const dfloat * src1_dfloat = (const dfloat *) src1_ddf_i; // dfloat == float, no conversion -#endif // GGML_CUDA_F16 - - switch (src0->type) { - case GGML_TYPE_Q4_0: - dequantize_mul_mat_vec_q4_0_cuda(src0_dd_i, src1_dfloat, dst_dd_i, ne00, row_diff, stream); - break; - case GGML_TYPE_Q4_1: - dequantize_mul_mat_vec_q4_1_cuda(src0_dd_i, src1_dfloat, dst_dd_i, ne00, row_diff, stream); - break; - case GGML_TYPE_Q5_0: - dequantize_mul_mat_vec_q5_0_cuda(src0_dd_i, src1_dfloat, dst_dd_i, ne00, row_diff, stream); - break; - case GGML_TYPE_Q5_1: - dequantize_mul_mat_vec_q5_1_cuda(src0_dd_i, src1_dfloat, dst_dd_i, ne00, row_diff, stream); - break; - case GGML_TYPE_Q8_0: - dequantize_mul_mat_vec_q8_0_cuda(src0_dd_i, src1_dfloat, dst_dd_i, ne00, row_diff, stream); - break; - case GGML_TYPE_Q2_K: - dequantize_mul_mat_vec_q2_K_cuda(src0_dd_i, src1_ddf_i, dst_dd_i, ne00, row_diff, stream); - break; - case GGML_TYPE_Q3_K: - dequantize_mul_mat_vec_q3_K_cuda(src0_dd_i, src1_ddf_i, dst_dd_i, ne00, row_diff, stream); - break; - case GGML_TYPE_Q4_K: - dequantize_mul_mat_vec_q4_K_cuda(src0_dd_i, src1_ddf_i, dst_dd_i, ne00, row_diff, stream); - break; - case GGML_TYPE_Q5_K: - dequantize_mul_mat_vec_q5_K_cuda(src0_dd_i, src1_ddf_i, dst_dd_i, ne00, row_diff, stream); - break; - case GGML_TYPE_Q6_K: - dequantize_mul_mat_vec_q6_K_cuda(src0_dd_i, src1_ddf_i, dst_dd_i, ne00, row_diff, stream); - break; - case GGML_TYPE_F16: - convert_mul_mat_vec_f16_cuda(src0_dd_i, src1_dfloat, dst_dd_i, ne00, row_diff, stream); - break; - default: - GGML_ASSERT(false); - break; - } - - GGML_UNUSED(src1); - GGML_UNUSED(dst); - GGML_UNUSED(src1_ddq_i); - GGML_UNUSED(src1_ncols); - GGML_UNUSED(src1_padded_row_size); -} diff --git a/ggml-cuda/dmmv.cuh b/ggml-cuda/dmmv.cuh deleted file mode 100644 index 4c5ebd475fd..00000000000 --- a/ggml-cuda/dmmv.cuh +++ /dev/null @@ -1,18 +0,0 @@ -#include "common.cuh" - -// dmmv = dequantize_mul_mat_vec - -// TODO: remove this? -#ifndef GGML_CUDA_DMMV_X -#define GGML_CUDA_DMMV_X 32 -#endif - -#ifndef GGML_CUDA_MMV_Y -#define GGML_CUDA_MMV_Y 1 -#endif - -void ggml_cuda_op_dequantize_mul_mat_vec( - ggml_backend_cuda_context & ctx, - const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst, const char * src0_dd_i, const float * src1_ddf_i, - const char * src1_ddq_i, float * dst_dd_i, const int64_t row_low, const int64_t row_high, const int64_t src1_ncols, - const int64_t src1_padded_row_size, cudaStream_t stream); diff --git a/ggml-cuda/getrows.cu b/ggml-cuda/getrows.cu deleted file mode 100644 index 55af195fd45..00000000000 --- a/ggml-cuda/getrows.cu +++ /dev/null @@ -1,178 +0,0 @@ -#include "getrows.cuh" -#include "dequantize.cuh" - -template -static __global__ void k_get_rows( - const void * src0, const int32_t * src1, dst_t * dst, - int64_t ne00, /*int64_t ne01, int64_t ne02, int64_t ne03,*/ - /*int64_t ne10, int64_t ne11,*/ int64_t ne12, /*int64_t ne13,*/ - /*size_t s0,*/ size_t s1, size_t s2, size_t s3, - /*size_t nb00,*/ size_t nb01, size_t nb02, size_t nb03, - size_t s10, size_t s11, size_t s12/*, size_t s13*/) { - - const int i00 = (blockIdx.x*blockDim.x + threadIdx.x)*2; - const int i10 = blockDim.y*blockIdx.y + threadIdx.y; - const int i11 = (blockIdx.z*blockDim.z + threadIdx.z)/ne12; - const int i12 = (blockIdx.z*blockDim.z + threadIdx.z)%ne12; - - if (i00 >= ne00) { - return; - } - - const int i01 = src1[i10*s10 + i11*s11 + i12*s12]; - - dst_t * dst_row = dst + i10*s1 + i11*s2 + i12*s3; - const void * src0_row = (const char *)src0 + i01*nb01 + i11*nb02 + i12*nb03; - - const int ib = i00/qk; // block index - const int iqs = (i00%qk)/qr; // quant index - const int iybs = i00 - i00%qk; // dst block start index - const int y_offset = qr == 1 ? 1 : qk/2; - - // dequantize - dfloat2 v; - dequantize_kernel(src0_row, ib, iqs, v); - - dst_row[iybs + iqs + 0] = v.x; - dst_row[iybs + iqs + y_offset] = v.y; -} - -template -static __global__ void k_get_rows_float( - const src0_t * src0, const int32_t * src1, dst_t * dst, - int64_t ne00, /*int64_t ne01, int64_t ne02, int64_t ne03,*/ - /*int64_t ne10, int64_t ne11,*/ int64_t ne12, /*int64_t ne13,*/ - /*size_t s0,*/ size_t s1, size_t s2, size_t s3, - /*size_t nb00,*/ size_t nb01, size_t nb02, size_t nb03, - size_t s10, size_t s11, size_t s12/*, size_t s13*/) { - - const int i00 = blockIdx.x*blockDim.x + threadIdx.x; - const int i10 = blockDim.y*blockIdx.y + threadIdx.y; - const int i11 = (blockIdx.z*blockDim.z + threadIdx.z)/ne12; - const int i12 = (blockIdx.z*blockDim.z + threadIdx.z)%ne12; - - if (i00 >= ne00) { - return; - } - - const int i01 = src1[i10*s10 + i11*s11 + i12*s12]; - - dst_t * dst_row = dst + i10*s1 + i11*s2 + i12*s3; - const src0_t * src0_row = (const src0_t *)((const char *)src0 + i01*nb01 + i11*nb02 + i12*nb03); - - dst_row[i00] = src0_row[i00]; -} - -template -static void get_rows_cuda(const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst, - const void * src0_dd, const int32_t * src1_dd, float * dst_dd, cudaStream_t stream) { - - GGML_TENSOR_BINARY_OP_LOCALS - - const dim3 block_dims(CUDA_GET_ROWS_BLOCK_SIZE, 1, 1); - const int block_num_x = (ne00 + 2*CUDA_GET_ROWS_BLOCK_SIZE - 1) / (2*CUDA_GET_ROWS_BLOCK_SIZE); - const dim3 block_nums(block_num_x, ne10, ne11*ne12); - - // strides in elements - //const size_t s0 = nb0 / ggml_element_size(dst); - const size_t s1 = nb1 / ggml_element_size(dst); - const size_t s2 = nb2 / ggml_element_size(dst); - const size_t s3 = nb3 / ggml_element_size(dst); - - const size_t s10 = nb10 / ggml_element_size(src1); - const size_t s11 = nb11 / ggml_element_size(src1); - const size_t s12 = nb12 / ggml_element_size(src1); - //const size_t s13 = nb13 / ggml_element_size(src1); - - GGML_ASSERT(ne00 % 2 == 0); - - k_get_rows<<>>( - src0_dd, src1_dd, dst_dd, - ne00, /*ne01, ne02, ne03,*/ - /*ne10, ne11,*/ ne12, /*ne13,*/ - /* s0,*/ s1, s2, s3, - /* nb00,*/ nb01, nb02, nb03, - s10, s11, s12/*, s13*/); - - GGML_UNUSED(dst); -} - -template -static void get_rows_cuda_float(const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst, - const src0_t * src0_dd, const int32_t * src1_dd, float * dst_dd, cudaStream_t stream) { - - GGML_TENSOR_BINARY_OP_LOCALS - - const dim3 block_dims(CUDA_GET_ROWS_BLOCK_SIZE, 1, 1); - const int block_num_x = (ne00 + CUDA_GET_ROWS_BLOCK_SIZE - 1) / CUDA_GET_ROWS_BLOCK_SIZE; - const dim3 block_nums(block_num_x, ne10, ne11*ne12); - - // strides in elements - //const size_t s0 = nb0 / ggml_element_size(dst); - const size_t s1 = nb1 / ggml_element_size(dst); - const size_t s2 = nb2 / ggml_element_size(dst); - const size_t s3 = nb3 / ggml_element_size(dst); - - const size_t s10 = nb10 / ggml_element_size(src1); - const size_t s11 = nb11 / ggml_element_size(src1); - const size_t s12 = nb12 / ggml_element_size(src1); - //const size_t s13 = nb13 / ggml_element_size(src1); - - k_get_rows_float<<>>( - src0_dd, src1_dd, dst_dd, - ne00, /*ne01, ne02, ne03,*/ - /*ne10, ne11,*/ ne12, /*ne13,*/ - /* s0,*/ s1, s2, s3, - /* nb00,*/ nb01, nb02, nb03, - s10, s11, s12/*, s13*/); - - GGML_UNUSED(dst); -} - -void ggml_cuda_op_get_rows(ggml_backend_cuda_context & ctx, ggml_tensor * dst) { - const ggml_tensor * src0 = dst->src[0]; - const ggml_tensor * src1 = dst->src[1]; - const float * src0_d = (const float *)src0->data; - const float * src1_d = (const float *)src1->data; - float * dst_d = (float *)dst->data; - cudaStream_t stream = ctx.stream(); - - - GGML_ASSERT(src1->type == GGML_TYPE_I32); - GGML_ASSERT(dst->type == GGML_TYPE_F32); - - GGML_ASSERT(src0->nb[0] == ggml_type_size(src0->type)); - GGML_ASSERT(src1->nb[0] == ggml_type_size(src1->type)); - GGML_ASSERT(dst->nb[0] == ggml_type_size(dst->type)); - - const int32_t * src1_i32 = (const int32_t *) src1_d; - - switch (src0->type) { - case GGML_TYPE_F16: - get_rows_cuda_float(src0, src1, dst, (const half *)src0_d, src1_i32, dst_d, stream); - break; - case GGML_TYPE_F32: - get_rows_cuda_float(src0, src1, dst, src0_d, src1_i32, dst_d, stream); - break; - case GGML_TYPE_Q4_0: - get_rows_cuda(src0, src1, dst, src0_d, src1_i32, dst_d, stream); - break; - case GGML_TYPE_Q4_1: - get_rows_cuda(src0, src1, dst, src0_d, src1_i32, dst_d, stream); - break; - case GGML_TYPE_Q5_0: - get_rows_cuda(src0, src1, dst, src0_d, src1_i32, dst_d, stream); - break; - case GGML_TYPE_Q5_1: - get_rows_cuda(src0, src1, dst, src0_d, src1_i32, dst_d, stream); - break; - case GGML_TYPE_Q8_0: - get_rows_cuda(src0, src1, dst, src0_d, src1_i32, dst_d, stream); - break; - default: - // TODO: k-quants - fprintf(stderr, "%s: unsupported type: %s\n", __func__, ggml_type_name(src0->type)); - GGML_ASSERT(false); - break; - } -} diff --git a/ggml-cuda/getrows.cuh b/ggml-cuda/getrows.cuh deleted file mode 100644 index bbf1302325c..00000000000 --- a/ggml-cuda/getrows.cuh +++ /dev/null @@ -1,5 +0,0 @@ -#include "common.cuh" - -#define CUDA_GET_ROWS_BLOCK_SIZE 256 - -void ggml_cuda_op_get_rows(ggml_backend_cuda_context & ctx, ggml_tensor * dst); diff --git a/ggml-cuda/im2col.cu b/ggml-cuda/im2col.cu deleted file mode 100644 index 3d0d8d4e6c6..00000000000 --- a/ggml-cuda/im2col.cu +++ /dev/null @@ -1,104 +0,0 @@ -#include "im2col.cuh" - -template -static __global__ void im2col_kernel( - const float * x, T * dst, int64_t batch_offset, - int64_t offset_delta, int64_t IC, int64_t IW, int64_t IH, int64_t OH, int64_t OW, int64_t KW, int64_t KH, int64_t pelements, int64_t CHW, - int s0, int s1, int p0, int p1, int d0, int d1) { - const int64_t i = threadIdx.x + blockIdx.x * blockDim.x; - if (i >= pelements) { - return; - } - - const int64_t ksize = OW * (KH > 1 ? KW : 1); - const int64_t kx = i / ksize; - const int64_t kd = kx * ksize; - const int64_t ky = (i - kd) / OW; - const int64_t ix = i % OW; - - const int64_t oh = blockIdx.y; - const int64_t batch = blockIdx.z / IC; - const int64_t ic = blockIdx.z % IC; - - const int64_t iiw = ix * s0 + kx * d0 - p0; - const int64_t iih = oh * s1 + ky * d1 - p1; - - const int64_t offset_dst = - ((batch * OH + oh) * OW + ix) * CHW + - (ic * (KW * KH) + ky * KW + kx); - - if (iih < 0 || iih >= IH || iiw < 0 || iiw >= IW) { - dst[offset_dst] = 0.0f; - } else { - const int64_t offset_src = ic * offset_delta + batch * batch_offset; - dst[offset_dst] = x[offset_src + iih * IW + iiw]; - } -} - -template -static void im2col_cuda(const float * x, T* dst, - int64_t IW, int64_t IH, int64_t OW, int64_t OH, int64_t KW, int64_t KH, int64_t IC, - int64_t batch, int64_t batch_offset, int64_t offset_delta, - int s0,int s1,int p0,int p1,int d0,int d1, cudaStream_t stream) { - const int parallel_elements = OW * KW * KH; - const int num_blocks = (parallel_elements + CUDA_IM2COL_BLOCK_SIZE - 1) / CUDA_IM2COL_BLOCK_SIZE; - dim3 block_nums(num_blocks, OH, batch * IC); - im2col_kernel<<>>(x, dst, batch_offset, offset_delta, IC, IW, IH, OH, OW, KW, KH, parallel_elements, (IC * KH * KW), s0, s1, p0, p1, d0, d1); -} - -static void im2col_cuda_f16(const float * x, half * dst, - int64_t IW, int64_t IH, int64_t OW, int64_t OH, int64_t KW, int64_t KH, int64_t IC, - int64_t batch, int64_t batch_offset, int64_t offset_delta, - int s0,int s1,int p0,int p1,int d0,int d1, cudaStream_t stream) { - - im2col_cuda(x, dst, IW, IH, OW, OH, KW, KH, IC, batch, batch_offset, offset_delta, s0, s1, p0, p1, d0, d1, stream); -} - -static void im2col_cuda_f32(const float * x, float * dst, - int64_t IW, int64_t IH, int64_t OW, int64_t OH, int64_t KW, int64_t KH, int64_t IC, - int64_t batch, int64_t batch_offset, int64_t offset_delta, - int s0,int s1,int p0,int p1,int d0,int d1, cudaStream_t stream) { - - im2col_cuda(x, dst, IW, IH, OW, OH, KW, KH, IC, batch, batch_offset, offset_delta, s0, s1, p0, p1, d0, d1, stream); -} - -void ggml_cuda_op_im2col(ggml_backend_cuda_context & ctx, ggml_tensor * dst) { - const ggml_tensor * src0 = dst->src[0]; - const ggml_tensor * src1 = dst->src[1]; - const float * src1_d = (const float *)src1->data; - float * dst_d = (float *)dst->data; - cudaStream_t stream = ctx.stream(); - - GGML_ASSERT(src0->type == GGML_TYPE_F16); - GGML_ASSERT(src1->type == GGML_TYPE_F32); - GGML_ASSERT( dst->type == GGML_TYPE_F16 || dst->type == GGML_TYPE_F32); - - const int32_t s0 = ((const int32_t*)(dst->op_params))[0]; - const int32_t s1 = ((const int32_t*)(dst->op_params))[1]; - const int32_t p0 = ((const int32_t*)(dst->op_params))[2]; - const int32_t p1 = ((const int32_t*)(dst->op_params))[3]; - const int32_t d0 = ((const int32_t*)(dst->op_params))[4]; - const int32_t d1 = ((const int32_t*)(dst->op_params))[5]; - - const bool is_2D = ((const int32_t*)(dst->op_params))[6] == 1; - - const int64_t IC = src1->ne[is_2D ? 2 : 1]; - const int64_t IH = is_2D ? src1->ne[1] : 1; - const int64_t IW = src1->ne[0]; - - const int64_t KH = is_2D ? src0->ne[1] : 1; - const int64_t KW = src0->ne[0]; - - const int64_t OH = is_2D ? dst->ne[2] : 1; - const int64_t OW = dst->ne[1]; - - const size_t delta_offset = src1->nb[is_2D ? 2 : 1] / 4; // nb is byte offset, src is type float32 - const int64_t batch = src1->ne[3]; - const size_t batch_offset = src1->nb[3] / 4; // nb is byte offset, src is type float32 - - if(dst->type == GGML_TYPE_F16) { - im2col_cuda_f16(src1_d, (half *) dst_d, IW, IH, OW, OH, KW, KH, IC, batch, batch_offset, delta_offset, s0, s1, p0, p1, d0, d1, stream); - } else { - im2col_cuda_f32(src1_d, (float *) dst_d, IW, IH, OW, OH, KW, KH, IC, batch, batch_offset, delta_offset, s0, s1, p0, p1, d0, d1, stream); - } -} diff --git a/ggml-cuda/im2col.cuh b/ggml-cuda/im2col.cuh deleted file mode 100644 index 1ce8fae4d9a..00000000000 --- a/ggml-cuda/im2col.cuh +++ /dev/null @@ -1,5 +0,0 @@ -#include "common.cuh" - -#define CUDA_IM2COL_BLOCK_SIZE 256 - -void ggml_cuda_op_im2col(ggml_backend_cuda_context & ctx, ggml_tensor * dst); diff --git a/ggml-cuda/mmq.cu b/ggml-cuda/mmq.cu deleted file mode 100644 index 60d6616a860..00000000000 --- a/ggml-cuda/mmq.cu +++ /dev/null @@ -1,2265 +0,0 @@ -#include "mmq.cuh" -#include "vecdotq.cuh" - -typedef void (*allocate_tiles_cuda_t)(int ** x_ql, half2 ** x_dm, int ** x_qh, int ** x_sc); -typedef void (*load_tiles_cuda_t)( - const void * __restrict__ vx, int * __restrict__ x_ql, half2 * __restrict__ x_dm, int * __restrict__ x_qh, - int * __restrict__ x_sc, const int & i_offset, const int & i_max, const int & k, const int & blocks_per_row); -typedef float (*vec_dot_q_mul_mat_cuda_t)( - const int * __restrict__ x_ql, const half2 * __restrict__ x_dm, const int * __restrict__ x_qh, const int * __restrict__ x_sc, - const int * __restrict__ y_qs, const half2 * __restrict__ y_ms, const int & i, const int & j, const int & k); -typedef void (*dot_kernel_k_t)(const void * __restrict__ vx, const int ib, const int iqs, const float * __restrict__ y, float & v); - -template static __device__ __forceinline__ void allocate_tiles_q4_0(int ** x_ql, half2 ** x_dm, int ** x_qh, int ** x_sc) { - GGML_UNUSED(x_qh); - GGML_UNUSED(x_sc); - - __shared__ int tile_x_qs[mmq_y * (WARP_SIZE) + mmq_y]; - __shared__ float tile_x_d[mmq_y * (WARP_SIZE/QI4_0) + mmq_y/QI4_0]; - - *x_ql = tile_x_qs; - *x_dm = (half2 *) tile_x_d; -} - -template static __device__ __forceinline__ void load_tiles_q4_0( - const void * __restrict__ vx, int * __restrict__ x_ql, half2 * __restrict__ x_dm, int * __restrict__ x_qh, - int * __restrict__ x_sc, const int & i_offset, const int & i_max, const int & k, const int & blocks_per_row) { - GGML_UNUSED(x_qh); GGML_UNUSED(x_sc); - GGML_CUDA_ASSUME(i_offset >= 0); - GGML_CUDA_ASSUME(i_offset < nwarps); - GGML_CUDA_ASSUME(k >= 0); - GGML_CUDA_ASSUME(k < WARP_SIZE); - - const int kbx = k / QI4_0; - const int kqsx = k % QI4_0; - - const block_q4_0 * bx0 = (const block_q4_0 *) vx; - - float * x_dmf = (float *) x_dm; - -#pragma unroll - for (int i0 = 0; i0 < mmq_y; i0 += nwarps) { - int i = i0 + i_offset; - - if (need_check) { - i = min(i, i_max); - } - - const block_q4_0 * bxi = bx0 + i*blocks_per_row + kbx; - - x_ql[i * (WARP_SIZE + 1) + k] = get_int_from_uint8(bxi->qs, kqsx); - // x_dmf[i * (WARP_SIZE/QI4_0) + i / QI4_0 + kbx] = bxi->d; - } - - const int blocks_per_tile_x_row = WARP_SIZE / QI4_0; - const int kbxd = k % blocks_per_tile_x_row; - -#pragma unroll - for (int i0 = 0; i0 < mmq_y; i0 += nwarps * QI4_0) { - int i = i0 + i_offset * QI4_0 + k / blocks_per_tile_x_row; - - if (need_check) { - i = min(i, i_max); - } - - const block_q4_0 * bxi = bx0 + i*blocks_per_row + kbxd; - - x_dmf[i * (WARP_SIZE/QI4_0) + i / QI4_0 + kbxd] = bxi->d; - } -} - -static __device__ __forceinline__ float vec_dot_q4_0_q8_1_mul_mat( - const int * __restrict__ x_ql, const half2 * __restrict__ x_dm, const int * __restrict__ x_qh, const int * __restrict__ x_sc, - const int * __restrict__ y_qs, const half2 * __restrict__ y_ds, const int & i, const int & j, const int & k) { - GGML_UNUSED(x_qh); GGML_UNUSED(x_sc); - - const int kyqs = k % (QI8_1/2) + QI8_1 * (k / (QI8_1/2)); - const float * x_dmf = (const float *) x_dm; - - int u[2*VDR_Q4_0_Q8_1_MMQ]; - -#pragma unroll - for (int l = 0; l < VDR_Q4_0_Q8_1_MMQ; ++l) { - u[2*l+0] = y_qs[j * WARP_SIZE + (kyqs + l) % WARP_SIZE]; - u[2*l+1] = y_qs[j * WARP_SIZE + (kyqs + l + QI4_0) % WARP_SIZE]; - } - - return vec_dot_q4_0_q8_1_impl - (&x_ql[i * (WARP_SIZE + 1) + k], u, x_dmf[i * (WARP_SIZE/QI4_0) + i/QI4_0 + k/QI4_0], - y_ds[j * (WARP_SIZE/QI8_1) + (2*k/QI8_1) % (WARP_SIZE/QI8_1)]); -} - -template static __device__ __forceinline__ void allocate_tiles_q4_1(int ** x_ql, half2 ** x_dm, int ** x_qh, int ** x_sc) { - GGML_UNUSED(x_qh); GGML_UNUSED(x_sc); - - __shared__ int tile_x_qs[mmq_y * (WARP_SIZE) + + mmq_y]; - __shared__ half2 tile_x_dm[mmq_y * (WARP_SIZE/QI4_1) + mmq_y/QI4_1]; - - *x_ql = tile_x_qs; - *x_dm = tile_x_dm; -} - -template static __device__ __forceinline__ void load_tiles_q4_1( - const void * __restrict__ vx, int * __restrict__ x_ql, half2 * __restrict__ x_dm, int * __restrict__ x_qh, - int * __restrict__ x_sc, const int & i_offset, const int & i_max, const int & k, const int & blocks_per_row) { - GGML_UNUSED(x_qh); GGML_UNUSED(x_sc); - - GGML_CUDA_ASSUME(i_offset >= 0); - GGML_CUDA_ASSUME(i_offset < nwarps); - GGML_CUDA_ASSUME(k >= 0); - GGML_CUDA_ASSUME(k < WARP_SIZE); - - const int kbx = k / QI4_1; - const int kqsx = k % QI4_1; - - const block_q4_1 * bx0 = (const block_q4_1 *) vx; - -#pragma unroll - for (int i0 = 0; i0 < mmq_y; i0 += nwarps) { - int i = i0 + i_offset; - - if (need_check) { - i = min(i, i_max); - } - - const block_q4_1 * bxi = bx0 + i*blocks_per_row + kbx; - - x_ql[i * (WARP_SIZE + 1) + k] = get_int_from_uint8_aligned(bxi->qs, kqsx); - } - - const int blocks_per_tile_x_row = WARP_SIZE / QI4_1; - const int kbxd = k % blocks_per_tile_x_row; - -#pragma unroll - for (int i0 = 0; i0 < mmq_y; i0 += nwarps * QI4_1) { - int i = i0 + i_offset * QI4_1 + k / blocks_per_tile_x_row; - - if (need_check) { - i = min(i, i_max); - } - - const block_q4_1 * bxi = bx0 + i*blocks_per_row + kbxd; - - x_dm[i * (WARP_SIZE/QI4_1) + i / QI4_1 + kbxd] = bxi->dm; - } -} - -static __device__ __forceinline__ float vec_dot_q4_1_q8_1_mul_mat( - const int * __restrict__ x_ql, const half2 * __restrict__ x_dm, const int * __restrict__ x_qh, const int * __restrict__ x_sc, - const int * __restrict__ y_qs, const half2 * __restrict__ y_ds, const int & i, const int & j, const int & k) { - GGML_UNUSED(x_qh); GGML_UNUSED(x_sc); - - const int kyqs = k % (QI8_1/2) + QI8_1 * (k / (QI8_1/2)); - - int u[2*VDR_Q4_1_Q8_1_MMQ]; - -#pragma unroll - for (int l = 0; l < VDR_Q4_1_Q8_1_MMQ; ++l) { - u[2*l+0] = y_qs[j * WARP_SIZE + (kyqs + l) % WARP_SIZE]; - u[2*l+1] = y_qs[j * WARP_SIZE + (kyqs + l + QI4_1) % WARP_SIZE]; - } - - return vec_dot_q4_1_q8_1_impl - (&x_ql[i * (WARP_SIZE + 1) + k], u, x_dm[i * (WARP_SIZE/QI4_1) + i/QI4_1 + k/QI4_1], - y_ds[j * (WARP_SIZE/QI8_1) + (2*k/QI8_1) % (WARP_SIZE/QI8_1)]); -} - -template static __device__ __forceinline__ void allocate_tiles_q5_0(int ** x_ql, half2 ** x_dm, int ** x_qh, int ** x_sc) { - GGML_UNUSED(x_qh); GGML_UNUSED(x_sc); - - __shared__ int tile_x_ql[mmq_y * (2*WARP_SIZE) + mmq_y]; - __shared__ float tile_x_d[mmq_y * (WARP_SIZE/QI5_0) + mmq_y/QI5_0]; - - *x_ql = tile_x_ql; - *x_dm = (half2 *) tile_x_d; -} - -template static __device__ __forceinline__ void load_tiles_q5_0( - const void * __restrict__ vx, int * __restrict__ x_ql, half2 * __restrict__ x_dm, int * __restrict__ x_qh, - int * __restrict__ x_sc, const int & i_offset, const int & i_max, const int & k, const int & blocks_per_row) { - GGML_UNUSED(x_qh); GGML_UNUSED(x_sc); - - GGML_CUDA_ASSUME(i_offset >= 0); - GGML_CUDA_ASSUME(i_offset < nwarps); - GGML_CUDA_ASSUME(k >= 0); - GGML_CUDA_ASSUME(k < WARP_SIZE); - - const int kbx = k / QI5_0; - const int kqsx = k % QI5_0; - - const block_q5_0 * bx0 = (const block_q5_0 *) vx; - -#pragma unroll - for (int i0 = 0; i0 < mmq_y; i0 += nwarps) { - int i = i0 + i_offset; - - if (need_check) { - i = min(i, i_max); - } - - const block_q5_0 * bxi = bx0 + i*blocks_per_row + kbx; - - const int ql = get_int_from_uint8(bxi->qs, kqsx); - const int qh = get_int_from_uint8(bxi->qh, 0) >> (4 * (k % QI5_0)); - - int qs0 = (ql >> 0) & 0x0F0F0F0F; - qs0 |= (qh << 4) & 0x00000010; // 0 -> 4 - qs0 |= (qh << 11) & 0x00001000; // 1 -> 12 - qs0 |= (qh << 18) & 0x00100000; // 2 -> 20 - qs0 |= (qh << 25) & 0x10000000; // 3 -> 28 - qs0 = __vsubss4(qs0, 0x10101010); // subtract 16 - - x_ql[i * (2*WARP_SIZE + 1) + 2*k+0] = qs0; - - int qs1 = (ql >> 4) & 0x0F0F0F0F; - qs1 |= (qh >> 12) & 0x00000010; // 16 -> 4 - qs1 |= (qh >> 5) & 0x00001000; // 17 -> 12 - qs1 |= (qh << 2) & 0x00100000; // 18 -> 20 - qs1 |= (qh << 9) & 0x10000000; // 19 -> 28 - qs1 = __vsubss4(qs1, 0x10101010); // subtract 16 - - x_ql[i * (2*WARP_SIZE + 1) + 2*k+1] = qs1; - } - - const int blocks_per_tile_x_row = WARP_SIZE / QI5_0; - const int kbxd = k % blocks_per_tile_x_row; - float * x_dmf = (float *) x_dm; - -#pragma unroll - for (int i0 = 0; i0 < mmq_y; i0 += nwarps * QI5_0) { - int i = i0 + i_offset * QI5_0 + k / blocks_per_tile_x_row; - - if (need_check) { - i = min(i, i_max); - } - - const block_q5_0 * bxi = bx0 + i*blocks_per_row + kbxd; - - x_dmf[i * (WARP_SIZE/QI5_0) + i / QI5_0 + kbxd] = bxi->d; - } -} - -static __device__ __forceinline__ float vec_dot_q5_0_q8_1_mul_mat( - const int * __restrict__ x_ql, const half2 * __restrict__ x_dm, const int * __restrict__ x_qh, const int * __restrict__ x_sc, - const int * __restrict__ y_qs, const half2 * __restrict__ y_ds, const int & i, const int & j, const int & k) { - GGML_UNUSED(x_qh); GGML_UNUSED(x_sc); - - const int kyqs = k % (QI8_1/2) + QI8_1 * (k / (QI8_1/2)); - const int index_bx = i * (WARP_SIZE/QI5_0) + i/QI5_0 + k/QI5_0; - const float * x_dmf = (const float *) x_dm; - const float * y_df = (const float *) y_ds; - - int u[2*VDR_Q5_0_Q8_1_MMQ]; - -#pragma unroll - for (int l = 0; l < VDR_Q5_0_Q8_1_MMQ; ++l) { - u[2*l+0] = y_qs[j * WARP_SIZE + (kyqs + l) % WARP_SIZE]; - u[2*l+1] = y_qs[j * WARP_SIZE + (kyqs + l + QI5_0) % WARP_SIZE]; - } - - return vec_dot_q8_0_q8_1_impl - (&x_ql[i * (2*WARP_SIZE + 1) + 2 * k], u, x_dmf[index_bx], y_df[j * (WARP_SIZE/QI8_1) + (2*k/QI8_1) % (WARP_SIZE/QI8_1)]); -} - - -template static __device__ __forceinline__ void allocate_tiles_q5_1(int ** x_ql, half2 ** x_dm, int ** x_qh, int ** x_sc) { - GGML_UNUSED(x_qh); GGML_UNUSED(x_sc); - - __shared__ int tile_x_ql[mmq_y * (2*WARP_SIZE) + mmq_y]; - __shared__ half2 tile_x_dm[mmq_y * (WARP_SIZE/QI5_1) + mmq_y/QI5_1]; - - *x_ql = tile_x_ql; - *x_dm = tile_x_dm; -} - -template static __device__ __forceinline__ void load_tiles_q5_1( - const void * __restrict__ vx, int * __restrict__ x_ql, half2 * __restrict__ x_dm, int * __restrict__ x_qh, - int * __restrict__ x_sc, const int & i_offset, const int & i_max, const int & k, const int & blocks_per_row) { - GGML_UNUSED(x_qh); GGML_UNUSED(x_sc); - - GGML_CUDA_ASSUME(i_offset >= 0); - GGML_CUDA_ASSUME(i_offset < nwarps); - GGML_CUDA_ASSUME(k >= 0); - GGML_CUDA_ASSUME(k < WARP_SIZE); - - const int kbx = k / QI5_1; - const int kqsx = k % QI5_1; - - const block_q5_1 * bx0 = (const block_q5_1 *) vx; - -#pragma unroll - for (int i0 = 0; i0 < mmq_y; i0 += nwarps) { - int i = i0 + i_offset; - - if (need_check) { - i = min(i, i_max); - } - - const block_q5_1 * bxi = bx0 + i*blocks_per_row + kbx; - - const int ql = get_int_from_uint8_aligned(bxi->qs, kqsx); - const int qh = get_int_from_uint8_aligned(bxi->qh, 0) >> (4 * (k % QI5_1)); - - int qs0 = (ql >> 0) & 0x0F0F0F0F; - qs0 |= (qh << 4) & 0x00000010; // 0 -> 4 - qs0 |= (qh << 11) & 0x00001000; // 1 -> 12 - qs0 |= (qh << 18) & 0x00100000; // 2 -> 20 - qs0 |= (qh << 25) & 0x10000000; // 3 -> 28 - - x_ql[i * (2*WARP_SIZE + 1) + 2*k+0] = qs0; - - int qs1 = (ql >> 4) & 0x0F0F0F0F; - qs1 |= (qh >> 12) & 0x00000010; // 16 -> 4 - qs1 |= (qh >> 5) & 0x00001000; // 17 -> 12 - qs1 |= (qh << 2) & 0x00100000; // 18 -> 20 - qs1 |= (qh << 9) & 0x10000000; // 19 -> 28 - - x_ql[i * (2*WARP_SIZE + 1) + 2*k+1] = qs1; - } - - const int blocks_per_tile_x_row = WARP_SIZE / QI5_1; - const int kbxd = k % blocks_per_tile_x_row; - -#pragma unroll - for (int i0 = 0; i0 < mmq_y; i0 += nwarps * QI5_1) { - int i = i0 + i_offset * QI5_1 + k / blocks_per_tile_x_row; - - if (need_check) { - i = min(i, i_max); - } - - const block_q5_1 * bxi = bx0 + i*blocks_per_row + kbxd; - - x_dm[i * (WARP_SIZE/QI5_1) + i / QI5_1 + kbxd] = bxi->dm; - } -} - -static __device__ __forceinline__ float vec_dot_q5_1_q8_1_mul_mat( - const int * __restrict__ x_ql, const half2 * __restrict__ x_dm, const int * __restrict__ x_qh, const int * __restrict__ x_sc, - const int * __restrict__ y_qs, const half2 * __restrict__ y_ds, const int & i, const int & j, const int & k) { - GGML_UNUSED(x_qh); GGML_UNUSED(x_sc); - - const int kyqs = k % (QI8_1/2) + QI8_1 * (k / (QI8_1/2)); - const int index_bx = i * (WARP_SIZE/QI5_1) + + i/QI5_1 + k/QI5_1; - - int u[2*VDR_Q5_1_Q8_1_MMQ]; - -#pragma unroll - for (int l = 0; l < VDR_Q5_1_Q8_1_MMQ; ++l) { - u[2*l+0] = y_qs[j * WARP_SIZE + (kyqs + l) % WARP_SIZE]; - u[2*l+1] = y_qs[j * WARP_SIZE + (kyqs + l + QI5_1) % WARP_SIZE]; - } - - return vec_dot_q8_1_q8_1_impl - (&x_ql[i * (2*WARP_SIZE + 1) + 2 * k], u, x_dm[index_bx], y_ds[j * (WARP_SIZE/QI8_1) + (2*k/QI8_1) % (WARP_SIZE/QI8_1)]); -} - -template static __device__ __forceinline__ void allocate_tiles_q8_0(int ** x_ql, half2 ** x_dm, int ** x_qh, int ** x_sc) { - GGML_UNUSED(x_qh); GGML_UNUSED(x_sc); - - __shared__ int tile_x_qs[mmq_y * (WARP_SIZE) + mmq_y]; - __shared__ float tile_x_d[mmq_y * (WARP_SIZE/QI8_0) + mmq_y/QI8_0]; - - *x_ql = tile_x_qs; - *x_dm = (half2 *) tile_x_d; -} - -template static __device__ __forceinline__ void load_tiles_q8_0( - const void * __restrict__ vx, int * __restrict__ x_ql, half2 * __restrict__ x_dm, int * __restrict__ x_qh, - int * __restrict__ x_sc, const int & i_offset, const int & i_max, const int & k, const int & blocks_per_row) { - GGML_UNUSED(x_qh); GGML_UNUSED(x_sc); - - GGML_CUDA_ASSUME(i_offset >= 0); - GGML_CUDA_ASSUME(i_offset < nwarps); - GGML_CUDA_ASSUME(k >= 0); - GGML_CUDA_ASSUME(k < WARP_SIZE); - - const int kbx = k / QI8_0; - const int kqsx = k % QI8_0; - float * x_dmf = (float *) x_dm; - - const block_q8_0 * bx0 = (const block_q8_0 *) vx; - -#pragma unroll - for (int i0 = 0; i0 < mmq_y; i0 += nwarps) { - int i = i0 + i_offset; - - if (need_check) { - i = min(i, i_max); - } - - const block_q8_0 * bxi = bx0 + i*blocks_per_row + kbx; - - x_ql[i * (WARP_SIZE + 1) + k] = get_int_from_int8(bxi->qs, kqsx); - } - - const int blocks_per_tile_x_row = WARP_SIZE / QI8_0; - const int kbxd = k % blocks_per_tile_x_row; - -#pragma unroll - for (int i0 = 0; i0 < mmq_y; i0 += nwarps * QI8_0) { - int i = i0 + i_offset * QI8_0 + k / blocks_per_tile_x_row; - - if (need_check) { - i = min(i, i_max); - } - - const block_q8_0 * bxi = bx0 + i*blocks_per_row + kbxd; - - x_dmf[i * (WARP_SIZE/QI8_0) + i / QI8_0 + kbxd] = bxi->d; - } -} - -static __device__ __forceinline__ float vec_dot_q8_0_q8_1_mul_mat( - const int * __restrict__ x_ql, const half2 * __restrict__ x_dm, const int * __restrict__ x_qh, const int * __restrict__ x_sc, - const int * __restrict__ y_qs, const half2 * __restrict__ y_ds, const int & i, const int & j, const int & k) { - GGML_UNUSED(x_qh); GGML_UNUSED(x_sc); - - const float * x_dmf = (const float *) x_dm; - const float * y_df = (const float *) y_ds; - - return vec_dot_q8_0_q8_1_impl - (&x_ql[i * (WARP_SIZE + 1) + k], &y_qs[j * WARP_SIZE + k], x_dmf[i * (WARP_SIZE/QI8_0) + i/QI8_0 + k/QI8_0], - y_df[j * (WARP_SIZE/QI8_1) + k/QI8_1]); -} - -template static __device__ __forceinline__ void allocate_tiles_q2_K(int ** x_ql, half2 ** x_dm, int ** x_qh, int ** x_sc) { - GGML_UNUSED(x_qh); - - __shared__ int tile_x_ql[mmq_y * (WARP_SIZE) + mmq_y]; - __shared__ half2 tile_x_dm[mmq_y * (WARP_SIZE/QI2_K) + mmq_y/QI2_K]; - __shared__ int tile_x_sc[mmq_y * (WARP_SIZE/4) + mmq_y/4]; - - *x_ql = tile_x_ql; - *x_dm = tile_x_dm; - *x_sc = tile_x_sc; -} - -template static __device__ __forceinline__ void load_tiles_q2_K( - const void * __restrict__ vx, int * __restrict__ x_ql, half2 * __restrict__ x_dm, int * __restrict__ x_qh, - int * __restrict__ x_sc, const int & i_offset, const int & i_max, const int & k, const int & blocks_per_row) { - GGML_UNUSED(x_qh); - - GGML_CUDA_ASSUME(i_offset >= 0); - GGML_CUDA_ASSUME(i_offset < nwarps); - GGML_CUDA_ASSUME(k >= 0); - GGML_CUDA_ASSUME(k < WARP_SIZE); - - const int kbx = k / QI2_K; - const int kqsx = k % QI2_K; - - const block_q2_K * bx0 = (const block_q2_K *) vx; - -#pragma unroll - for (int i0 = 0; i0 < mmq_y; i0 += nwarps) { - int i = i0 + i_offset; - - if (need_check) { - i = min(i, i_max); - } - - const block_q2_K * bxi = bx0 + i*blocks_per_row + kbx; - - x_ql[i * (WARP_SIZE + 1) + k] = get_int_from_uint8_aligned(bxi->qs, kqsx); - } - - const int blocks_per_tile_x_row = WARP_SIZE / QI2_K; - const int kbxd = k % blocks_per_tile_x_row; - -#pragma unroll - for (int i0 = 0; i0 < mmq_y; i0 += nwarps * QI2_K) { - int i = (i0 + i_offset * QI2_K + k / blocks_per_tile_x_row) % mmq_y; - - if (need_check) { - i = min(i, i_max); - } - - const block_q2_K * bxi = bx0 + i*blocks_per_row + kbxd; - - x_dm[i * (WARP_SIZE/QI2_K) + i / QI2_K + kbxd] = bxi->dm; - } - -#pragma unroll - for (int i0 = 0; i0 < mmq_y; i0 += nwarps * 4) { - int i = i0 + i_offset * 4 + k / (WARP_SIZE/4); - - if (need_check) { - i = min(i, i_max); - } - - const block_q2_K * bxi = bx0 + i*blocks_per_row + (k % (WARP_SIZE/4)) / (QI2_K/4); - - x_sc[i * (WARP_SIZE/4) + i / 4 + k % (WARP_SIZE/4)] = get_int_from_uint8_aligned(bxi->scales, k % (QI2_K/4)); - } -} - -static __device__ __forceinline__ float vec_dot_q2_K_q8_1_mul_mat( - const int * __restrict__ x_ql, const half2 * __restrict__ x_dm, const int * __restrict__ x_qh, const int * __restrict__ x_sc, - const int * __restrict__ y_qs, const half2 * __restrict__ y_ds, const int & i, const int & j, const int & k) { - GGML_UNUSED(x_qh); - - const int kbx = k / QI2_K; - const int ky = (k % QI2_K) * QR2_K; - const float * y_df = (const float *) y_ds; - - int v[QR2_K*VDR_Q2_K_Q8_1_MMQ]; - - const int kqsx = i * (WARP_SIZE + 1) + kbx*QI2_K + (QI2_K/2) * (ky/(2*QI2_K)) + ky % (QI2_K/2); - const int shift = 2 * ((ky % (2*QI2_K)) / (QI2_K/2)); - -#pragma unroll - for (int l = 0; l < QR2_K*VDR_Q2_K_Q8_1_MMQ; ++l) { - v[l] = (x_ql[kqsx + l] >> shift) & 0x03030303; - } - - const uint8_t * scales = ((const uint8_t *) &x_sc[i * (WARP_SIZE/4) + i/4 + kbx*4]) + ky/4; - - const int index_y = j * WARP_SIZE + (QR2_K*k) % WARP_SIZE; - return vec_dot_q2_K_q8_1_impl_mmq(v, &y_qs[index_y], scales, x_dm[i * (WARP_SIZE/QI2_K) + i/QI2_K + kbx], y_df[index_y/QI8_1]); -} - -template static __device__ __forceinline__ void allocate_tiles_q3_K(int ** x_ql, half2 ** x_dm, int ** x_qh, int ** x_sc) { - - __shared__ int tile_x_ql[mmq_y * (WARP_SIZE) + mmq_y]; - __shared__ half2 tile_x_dm[mmq_y * (WARP_SIZE/QI3_K) + mmq_y/QI3_K]; - __shared__ int tile_x_qh[mmq_y * (WARP_SIZE/2) + mmq_y/2]; - __shared__ int tile_x_sc[mmq_y * (WARP_SIZE/4) + mmq_y/4]; - - *x_ql = tile_x_ql; - *x_dm = tile_x_dm; - *x_qh = tile_x_qh; - *x_sc = tile_x_sc; -} - -template static __device__ __forceinline__ void load_tiles_q3_K( - const void * __restrict__ vx, int * __restrict__ x_ql, half2 * __restrict__ x_dm, int * __restrict__ x_qh, - int * __restrict__ x_sc, const int & i_offset, const int & i_max, const int & k, const int & blocks_per_row) { - - GGML_CUDA_ASSUME(i_offset >= 0); - GGML_CUDA_ASSUME(i_offset < nwarps); - GGML_CUDA_ASSUME(k >= 0); - GGML_CUDA_ASSUME(k < WARP_SIZE); - - const int kbx = k / QI3_K; - const int kqsx = k % QI3_K; - - const block_q3_K * bx0 = (const block_q3_K *) vx; - -#pragma unroll - for (int i0 = 0; i0 < mmq_y; i0 += nwarps) { - int i = i0 + i_offset; - - if (need_check) { - i = min(i, i_max); - } - - const block_q3_K * bxi = bx0 + i*blocks_per_row + kbx; - - x_ql[i * (WARP_SIZE + 1) + k] = get_int_from_uint8(bxi->qs, kqsx); - } - - const int blocks_per_tile_x_row = WARP_SIZE / QI3_K; - const int kbxd = k % blocks_per_tile_x_row; - float * x_dmf = (float *) x_dm; - -#pragma unroll - for (int i0 = 0; i0 < mmq_y; i0 += nwarps * QI3_K) { - int i = (i0 + i_offset * QI3_K + k / blocks_per_tile_x_row) % mmq_y; - - if (need_check) { - i = min(i, i_max); - } - - const block_q3_K * bxi = bx0 + i*blocks_per_row + kbxd; - - x_dmf[i * (WARP_SIZE/QI3_K) + i / QI3_K + kbxd] = bxi->d; - } - -#pragma unroll - for (int i0 = 0; i0 < mmq_y; i0 += nwarps * 2) { - int i = i0 + i_offset * 2 + k / (WARP_SIZE/2); - - if (need_check) { - i = min(i, i_max); - } - - const block_q3_K * bxi = bx0 + i*blocks_per_row + (k % (WARP_SIZE/2)) / (QI3_K/2); - - // invert the mask with ~ so that a 0/1 results in 4/0 being subtracted - x_qh[i * (WARP_SIZE/2) + i / 2 + k % (WARP_SIZE/2)] = ~get_int_from_uint8(bxi->hmask, k % (QI3_K/2)); - } - -#pragma unroll - for (int i0 = 0; i0 < mmq_y; i0 += nwarps * 4) { - int i = i0 + i_offset * 4 + k / (WARP_SIZE/4); - - if (need_check) { - i = min(i, i_max); - } - - const block_q3_K * bxi = bx0 + i*blocks_per_row + (k % (WARP_SIZE/4)) / (QI3_K/4); - - const int ksc = k % (QI3_K/4); - - const int ksc_low = ksc % (QI3_K/8); - const int shift_low = 4 * (ksc / (QI3_K/8)); - const int sc_low = (get_int_from_uint8(bxi->scales, ksc_low) >> shift_low) & 0x0F0F0F0F; - - const int ksc_high = QI3_K/8; - const int shift_high = 2 * ksc; - const int sc_high = ((get_int_from_uint8(bxi->scales, ksc_high) >> shift_high) << 4) & 0x30303030; - - const int sc = __vsubss4(sc_low | sc_high, 0x20202020); - - x_sc[i * (WARP_SIZE/4) + i / 4 + k % (WARP_SIZE/4)] = sc; - } -} - -static __device__ __forceinline__ float vec_dot_q3_K_q8_1_mul_mat( - const int * __restrict__ x_ql, const half2 * __restrict__ x_dm, const int * __restrict__ x_qh, const int * __restrict__ x_sc, - const int * __restrict__ y_qs, const half2 * __restrict__ y_ds, const int & i, const int & j, const int & k) { - - const int kbx = k / QI3_K; - const int ky = (k % QI3_K) * QR3_K; - const float * x_dmf = (const float *) x_dm; - const float * y_df = (const float *) y_ds; - - const int8_t * scales = ((const int8_t *) (x_sc + i * (WARP_SIZE/4) + i/4 + kbx*4)) + ky/4; - - int v[QR3_K*VDR_Q3_K_Q8_1_MMQ]; - -#pragma unroll - for (int l = 0; l < QR3_K*VDR_Q3_K_Q8_1_MMQ; ++l) { - const int kqsx = i * (WARP_SIZE + 1) + kbx*QI3_K + (QI3_K/2) * (ky/(2*QI3_K)) + ky % (QI3_K/2); - const int shift = 2 * ((ky % 32) / 8); - const int vll = (x_ql[kqsx + l] >> shift) & 0x03030303; - - const int vh = x_qh[i * (WARP_SIZE/2) + i/2 + kbx * (QI3_K/2) + (ky+l)%8] >> ((ky+l) / 8); - const int vlh = (vh << 2) & 0x04040404; - - v[l] = __vsubss4(vll, vlh); - } - - const int index_y = j * WARP_SIZE + (k*QR3_K) % WARP_SIZE; - return vec_dot_q3_K_q8_1_impl_mmq(v, &y_qs[index_y], scales, x_dmf[i * (WARP_SIZE/QI3_K) + i/QI3_K + kbx], y_df[index_y/QI8_1]); -} - -template static __device__ __forceinline__ void allocate_tiles_q4_K(int ** x_ql, half2 ** x_dm, int ** x_qh, int ** x_sc) { - GGML_UNUSED(x_qh); - - __shared__ int tile_x_ql[mmq_y * (WARP_SIZE) + mmq_y]; - __shared__ half2 tile_x_dm[mmq_y * (WARP_SIZE/QI4_K) + mmq_y/QI4_K]; - __shared__ int tile_x_sc[mmq_y * (WARP_SIZE/8) + mmq_y/8]; - - *x_ql = tile_x_ql; - *x_dm = tile_x_dm; - *x_sc = tile_x_sc; -} - -template static __device__ __forceinline__ void load_tiles_q4_K( - const void * __restrict__ vx, int * __restrict__ x_ql, half2 * __restrict__ x_dm, int * __restrict__ x_qh, - int * __restrict__ x_sc, const int & i_offset, const int & i_max, const int & k, const int & blocks_per_row) { - GGML_UNUSED(x_qh); - - GGML_CUDA_ASSUME(i_offset >= 0); - GGML_CUDA_ASSUME(i_offset < nwarps); - GGML_CUDA_ASSUME(k >= 0); - GGML_CUDA_ASSUME(k < WARP_SIZE); - - const int kbx = k / QI4_K; // == 0 if QK_K == 256 - const int kqsx = k % QI4_K; // == k if QK_K == 256 - - const block_q4_K * bx0 = (const block_q4_K *) vx; - -#pragma unroll - for (int i0 = 0; i0 < mmq_y; i0 += nwarps) { - int i = i0 + i_offset; - - if (need_check) { - i = min(i, i_max); - } - - const block_q4_K * bxi = bx0 + i*blocks_per_row + kbx; - - x_ql[i * (WARP_SIZE + 1) + k] = get_int_from_uint8_aligned(bxi->qs, kqsx); - } - - const int blocks_per_tile_x_row = WARP_SIZE / QI4_K; // == 1 if QK_K == 256 - const int kbxd = k % blocks_per_tile_x_row; // == 0 if QK_K == 256 - -#pragma unroll - for (int i0 = 0; i0 < mmq_y; i0 += nwarps * QI4_K) { - int i = (i0 + i_offset * QI4_K + k / blocks_per_tile_x_row) % mmq_y; - - if (need_check) { - i = min(i, i_max); - } - - const block_q4_K * bxi = bx0 + i*blocks_per_row + kbxd; - -#if QK_K == 256 - x_dm[i * (WARP_SIZE/QI4_K) + i / QI4_K + kbxd] = bxi->dm; -#else - x_dm[i * (WARP_SIZE/QI4_K) + i / QI4_K + kbxd] = {bxi->dm[0], bxi->dm[1]}; -#endif - } - -#pragma unroll - for (int i0 = 0; i0 < mmq_y; i0 += nwarps * 8) { - int i = (i0 + i_offset * 8 + k / (WARP_SIZE/8)) % mmq_y; - - if (need_check) { - i = min(i, i_max); - } - - const block_q4_K * bxi = bx0 + i*blocks_per_row + (k % (WARP_SIZE/8)) / (QI4_K/8); - - const int * scales = (const int *) bxi->scales; - - const int ksc = k % (WARP_SIZE/8); - - // scale arrangement after the following two lines: sc0,...,sc3, sc4,...,sc7, m0,...,m3, m4,...,m8 - int scales8 = (scales[(ksc%2) + (ksc!=0)] >> (4 * (ksc & (ksc/2)))) & 0x0F0F0F0F; // lower 4 bits - scales8 |= (scales[ksc/2] >> (2 * (ksc % 2))) & 0x30303030; // upper 2 bits - - x_sc[i * (WARP_SIZE/8) + i / 8 + ksc] = scales8; - } -} - -static __device__ __forceinline__ float vec_dot_q4_K_q8_1_mul_mat( - const int * __restrict__ x_ql, const half2 * __restrict__ x_dm, const int * __restrict__ x_qh, const int * __restrict__ x_sc, - const int * __restrict__ y_qs, const half2 * __restrict__ y_ds, const int & i, const int & j, const int & k) { - GGML_UNUSED(x_qh); - - const uint8_t * sc = ((const uint8_t *) &x_sc[i * (WARP_SIZE/8) + i/8 + k/16]) + 2*((k % 16) / 8); - - const int index_y = j * WARP_SIZE + (QR4_K*k) % WARP_SIZE; - return vec_dot_q4_K_q8_1_impl_mmq(&x_ql[i * (WARP_SIZE + 1) + k], &y_qs[index_y], sc, sc+8, - x_dm[i * (WARP_SIZE/QI4_K) + i/QI4_K], &y_ds[index_y/QI8_1]); -} - -template static __device__ __forceinline__ void allocate_tiles_q5_K(int ** x_ql, half2 ** x_dm, int ** x_qh, int ** x_sc) { - GGML_UNUSED(x_qh); - - __shared__ int tile_x_ql[mmq_y * (2*WARP_SIZE) + mmq_y]; - __shared__ half2 tile_x_dm[mmq_y * (WARP_SIZE/QI5_K) + mmq_y/QI5_K]; - __shared__ int tile_x_sc[mmq_y * (WARP_SIZE/8) + mmq_y/8]; - - *x_ql = tile_x_ql; - *x_dm = tile_x_dm; - *x_sc = tile_x_sc; -} - -template static __device__ __forceinline__ void load_tiles_q5_K( - const void * __restrict__ vx, int * __restrict__ x_ql, half2 * __restrict__ x_dm, int * __restrict__ x_qh, - int * __restrict__ x_sc, const int & i_offset, const int & i_max, const int & k, const int & blocks_per_row) { - GGML_UNUSED(x_qh); - - GGML_CUDA_ASSUME(i_offset >= 0); - GGML_CUDA_ASSUME(i_offset < nwarps); - GGML_CUDA_ASSUME(k >= 0); - GGML_CUDA_ASSUME(k < WARP_SIZE); - - const int kbx = k / QI5_K; // == 0 if QK_K == 256 - const int kqsx = k % QI5_K; // == k if QK_K == 256 - - const block_q5_K * bx0 = (const block_q5_K *) vx; - -#pragma unroll - for (int i0 = 0; i0 < mmq_y; i0 += nwarps) { - int i = i0 + i_offset; - - if (need_check) { - i = min(i, i_max); - } - - const block_q5_K * bxi = bx0 + i*blocks_per_row + kbx; - const int ky = QR5_K*kqsx; - - const int ql = get_int_from_uint8_aligned(bxi->qs, kqsx); - const int ql0 = (ql >> 0) & 0x0F0F0F0F; - const int ql1 = (ql >> 4) & 0x0F0F0F0F; - - const int qh = get_int_from_uint8_aligned(bxi->qh, kqsx % (QI5_K/4)); - const int qh0 = ((qh >> (2 * (kqsx / (QI5_K/4)) + 0)) << 4) & 0x10101010; - const int qh1 = ((qh >> (2 * (kqsx / (QI5_K/4)) + 1)) << 4) & 0x10101010; - - const int kq0 = ky - ky % (QI5_K/2) + k % (QI5_K/4) + 0; - const int kq1 = ky - ky % (QI5_K/2) + k % (QI5_K/4) + (QI5_K/4); - - x_ql[i * (2*WARP_SIZE + 1) + kq0] = ql0 | qh0; - x_ql[i * (2*WARP_SIZE + 1) + kq1] = ql1 | qh1; - } - - const int blocks_per_tile_x_row = WARP_SIZE / QI5_K; // == 1 if QK_K == 256 - const int kbxd = k % blocks_per_tile_x_row; // == 0 if QK_K == 256 - -#pragma unroll - for (int i0 = 0; i0 < mmq_y; i0 += nwarps * QI5_K) { - int i = (i0 + i_offset * QI5_K + k / blocks_per_tile_x_row) % mmq_y; - - if (need_check) { - i = min(i, i_max); - } - - const block_q5_K * bxi = bx0 + i*blocks_per_row + kbxd; - -#if QK_K == 256 - x_dm[i * (WARP_SIZE/QI5_K) + i / QI5_K + kbxd] = bxi->dm; -#endif - } - -#pragma unroll - for (int i0 = 0; i0 < mmq_y; i0 += nwarps * 8) { - int i = (i0 + i_offset * 8 + k / (WARP_SIZE/8)) % mmq_y; - - if (need_check) { - i = min(i, i_max); - } - - const block_q5_K * bxi = bx0 + i*blocks_per_row + (k % (WARP_SIZE/8)) / (QI5_K/8); - - const int * scales = (const int *) bxi->scales; - - const int ksc = k % (WARP_SIZE/8); - - // scale arrangement after the following two lines: sc0,...,sc3, sc4,...,sc7, m0,...,m3, m4,...,m8 - int scales8 = (scales[(ksc%2) + (ksc!=0)] >> (4 * (ksc & (ksc/2)))) & 0x0F0F0F0F; // lower 4 bits - scales8 |= (scales[ksc/2] >> (2 * (ksc % 2))) & 0x30303030; // upper 2 bits - - x_sc[i * (WARP_SIZE/8) + i / 8 + ksc] = scales8; - } -} - -static __device__ __forceinline__ float vec_dot_q5_K_q8_1_mul_mat( - const int * __restrict__ x_ql, const half2 * __restrict__ x_dm, const int * __restrict__ x_qh, const int * __restrict__ x_sc, - const int * __restrict__ y_qs, const half2 * __restrict__ y_ds, const int & i, const int & j, const int & k) { - GGML_UNUSED(x_qh); - - const uint8_t * sc = ((const uint8_t *) &x_sc[i * (WARP_SIZE/8) + i/8 + k/16]) + 2 * ((k % 16) / 8); - - const int index_x = i * (QR5_K*WARP_SIZE + 1) + QR5_K*k; - const int index_y = j * WARP_SIZE + (QR5_K*k) % WARP_SIZE; - return vec_dot_q5_K_q8_1_impl_mmq(&x_ql[index_x], &y_qs[index_y], sc, sc+8, - x_dm[i * (WARP_SIZE/QI5_K) + i/QI5_K], &y_ds[index_y/QI8_1]); -} - -template static __device__ __forceinline__ void allocate_tiles_q6_K(int ** x_ql, half2 ** x_dm, int ** x_qh, int ** x_sc) { - GGML_UNUSED(x_qh); - - __shared__ int tile_x_ql[mmq_y * (2*WARP_SIZE) + mmq_y]; - __shared__ half2 tile_x_dm[mmq_y * (WARP_SIZE/QI6_K) + mmq_y/QI6_K]; - __shared__ int tile_x_sc[mmq_y * (WARP_SIZE/8) + mmq_y/8]; - - *x_ql = tile_x_ql; - *x_dm = tile_x_dm; - *x_sc = tile_x_sc; -} - -template static __device__ __forceinline__ void load_tiles_q6_K( - const void * __restrict__ vx, int * __restrict__ x_ql, half2 * __restrict__ x_dm, int * __restrict__ x_qh, - int * __restrict__ x_sc, const int & i_offset, const int & i_max, const int & k, const int & blocks_per_row) { - GGML_UNUSED(x_qh); - - GGML_CUDA_ASSUME(i_offset >= 0); - GGML_CUDA_ASSUME(i_offset < nwarps); - GGML_CUDA_ASSUME(k >= 0); - GGML_CUDA_ASSUME(k < WARP_SIZE); - - const int kbx = k / QI6_K; // == 0 if QK_K == 256 - const int kqsx = k % QI6_K; // == k if QK_K == 256 - - const block_q6_K * bx0 = (const block_q6_K *) vx; - -#pragma unroll - for (int i0 = 0; i0 < mmq_y; i0 += nwarps) { - int i = i0 + i_offset; - - if (need_check) { - i = min(i, i_max); - } - - const block_q6_K * bxi = bx0 + i*blocks_per_row + kbx; - const int ky = QR6_K*kqsx; - - const int ql = get_int_from_uint8(bxi->ql, kqsx); - const int ql0 = (ql >> 0) & 0x0F0F0F0F; - const int ql1 = (ql >> 4) & 0x0F0F0F0F; - - const int qh = get_int_from_uint8(bxi->qh, (QI6_K/4) * (kqsx / (QI6_K/2)) + kqsx % (QI6_K/4)); - const int qh0 = ((qh >> (2 * ((kqsx % (QI6_K/2)) / (QI6_K/4)))) << 4) & 0x30303030; - const int qh1 = (qh >> (2 * ((kqsx % (QI6_K/2)) / (QI6_K/4)))) & 0x30303030; - - const int kq0 = ky - ky % QI6_K + k % (QI6_K/2) + 0; - const int kq1 = ky - ky % QI6_K + k % (QI6_K/2) + (QI6_K/2); - - x_ql[i * (2*WARP_SIZE + 1) + kq0] = __vsubss4(ql0 | qh0, 0x20202020); - x_ql[i * (2*WARP_SIZE + 1) + kq1] = __vsubss4(ql1 | qh1, 0x20202020); - } - - const int blocks_per_tile_x_row = WARP_SIZE / QI6_K; // == 1 if QK_K == 256 - const int kbxd = k % blocks_per_tile_x_row; // == 0 if QK_K == 256 - float * x_dmf = (float *) x_dm; - -#pragma unroll - for (int i0 = 0; i0 < mmq_y; i0 += nwarps * QI6_K) { - int i = (i0 + i_offset * QI6_K + k / blocks_per_tile_x_row) % mmq_y; - - if (need_check) { - i = min(i, i_max); - } - - const block_q6_K * bxi = bx0 + i*blocks_per_row + kbxd; - - x_dmf[i * (WARP_SIZE/QI6_K) + i / QI6_K + kbxd] = bxi->d; - } - -#pragma unroll - for (int i0 = 0; i0 < mmq_y; i0 += nwarps * 8) { - int i = (i0 + i_offset * 8 + k / (WARP_SIZE/8)) % mmq_y; - - if (need_check) { - i = min(i, i_max); - } - - const block_q6_K * bxi = bx0 + i*blocks_per_row + (k % (WARP_SIZE/8)) / 4; - - x_sc[i * (WARP_SIZE/8) + i / 8 + k % (WARP_SIZE/8)] = get_int_from_int8(bxi->scales, k % (QI6_K/8)); - } -} - -static __device__ __forceinline__ float vec_dot_q6_K_q8_1_mul_mat( - const int * __restrict__ x_ql, const half2 * __restrict__ x_dm, const int * __restrict__ x_qh, const int * __restrict__ x_sc, - const int * __restrict__ y_qs, const half2 * __restrict__ y_ds, const int & i, const int & j, const int & k) { - GGML_UNUSED(x_qh); - - const float * x_dmf = (const float *) x_dm; - const float * y_df = (const float *) y_ds; - - const int8_t * sc = ((const int8_t *) &x_sc[i * (WARP_SIZE/8) + i/8 + k/8]); - - const int index_x = i * (QR6_K*WARP_SIZE + 1) + QR6_K*k; - const int index_y = j * WARP_SIZE + (QR6_K*k) % WARP_SIZE; - return vec_dot_q6_K_q8_1_impl_mmq(&x_ql[index_x], &y_qs[index_y], sc, x_dmf[i * (WARP_SIZE/QI6_K) + i/QI6_K], &y_df[index_y/QI8_1]); -} - -#define MMQ_X_Q4_0_RDNA2 64 -#define MMQ_Y_Q4_0_RDNA2 128 -#define NWARPS_Q4_0_RDNA2 8 -#define MMQ_X_Q4_0_RDNA1 64 -#define MMQ_Y_Q4_0_RDNA1 64 -#define NWARPS_Q4_0_RDNA1 8 -#if defined(CUDA_USE_TENSOR_CORES) -#define MMQ_X_Q4_0_AMPERE 4 -#define MMQ_Y_Q4_0_AMPERE 32 -#define NWARPS_Q4_0_AMPERE 4 -#else -#define MMQ_X_Q4_0_AMPERE 64 -#define MMQ_Y_Q4_0_AMPERE 128 -#define NWARPS_Q4_0_AMPERE 4 -#endif -#define MMQ_X_Q4_0_PASCAL 64 -#define MMQ_Y_Q4_0_PASCAL 64 -#define NWARPS_Q4_0_PASCAL 8 - -template -static __device__ __forceinline__ void mul_mat_q( - const void * __restrict__ vx, const void * __restrict__ vy, float * __restrict__ dst, - const int ncols_x, const int nrows_x, const int ncols_y, const int nrows_y, const int nrows_dst) { - - const block_q_t * x = (const block_q_t *) vx; - const block_q8_1 * y = (const block_q8_1 *) vy; - - const int blocks_per_row_x = ncols_x / qk; - const int blocks_per_col_y = nrows_y / QK8_1; - const int blocks_per_warp = WARP_SIZE / qi; - - const int & ncols_dst = ncols_y; - - const int row_dst_0 = blockIdx.x*mmq_y; - const int & row_x_0 = row_dst_0; - - const int col_dst_0 = blockIdx.y*mmq_x; - const int & col_y_0 = col_dst_0; - - int * tile_x_ql = nullptr; - half2 * tile_x_dm = nullptr; - int * tile_x_qh = nullptr; - int * tile_x_sc = nullptr; - - allocate_tiles(&tile_x_ql, &tile_x_dm, &tile_x_qh, &tile_x_sc); - - __shared__ int tile_y_qs[mmq_x * WARP_SIZE]; - __shared__ half2 tile_y_ds[mmq_x * WARP_SIZE/QI8_1]; - - float sum[mmq_y/WARP_SIZE][mmq_x/nwarps] = {{0.0f}}; - - for (int ib0 = 0; ib0 < blocks_per_row_x; ib0 += blocks_per_warp) { - - load_tiles(x + row_x_0*blocks_per_row_x + ib0, tile_x_ql, tile_x_dm, tile_x_qh, tile_x_sc, - threadIdx.y, nrows_x-row_x_0-1, threadIdx.x, blocks_per_row_x); - -#pragma unroll - for (int ir = 0; ir < qr; ++ir) { - const int kqs = ir*WARP_SIZE + threadIdx.x; - const int kbxd = kqs / QI8_1; - -#pragma unroll - for (int i = 0; i < mmq_x; i += nwarps) { - const int col_y_eff = min(col_y_0 + threadIdx.y + i, ncols_y-1); // to prevent out-of-bounds memory accesses - - const block_q8_1 * by0 = &y[col_y_eff*blocks_per_col_y + ib0 * (qk/QK8_1) + kbxd]; - - const int index_y = (threadIdx.y + i) * WARP_SIZE + kqs % WARP_SIZE; - tile_y_qs[index_y] = get_int_from_int8_aligned(by0->qs, threadIdx.x % QI8_1); - } - -#pragma unroll - for (int ids0 = 0; ids0 < mmq_x; ids0 += nwarps * QI8_1) { - const int ids = (ids0 + threadIdx.y * QI8_1 + threadIdx.x / (WARP_SIZE/QI8_1)) % mmq_x; - const int kby = threadIdx.x % (WARP_SIZE/QI8_1); - const int col_y_eff = min(col_y_0 + ids, ncols_y-1); - - // if the sum is not needed it's faster to transform the scale to f32 ahead of time - const half2 * dsi_src = &y[col_y_eff*blocks_per_col_y + ib0 * (qk/QK8_1) + ir*(WARP_SIZE/QI8_1) + kby].ds; - half2 * dsi_dst = &tile_y_ds[ids * (WARP_SIZE/QI8_1) + kby]; - if (need_sum) { - *dsi_dst = *dsi_src; - } else { - float * dfi_dst = (float *) dsi_dst; - *dfi_dst = __low2float(*dsi_src); - } - } - - __syncthreads(); - -// #pragma unroll // unrolling this loop causes too much register pressure - for (int k = ir*WARP_SIZE/qr; k < (ir+1)*WARP_SIZE/qr; k += vdr) { -#pragma unroll - for (int j = 0; j < mmq_x; j += nwarps) { -#pragma unroll - for (int i = 0; i < mmq_y; i += WARP_SIZE) { - sum[i/WARP_SIZE][j/nwarps] += vec_dot( - tile_x_ql, tile_x_dm, tile_x_qh, tile_x_sc, tile_y_qs, tile_y_ds, - threadIdx.x + i, threadIdx.y + j, k); - } - } - } - - __syncthreads(); - } - } - -#pragma unroll - for (int j = 0; j < mmq_x; j += nwarps) { - const int col_dst = col_dst_0 + j + threadIdx.y; - - if (col_dst >= ncols_dst) { - return; - } - -#pragma unroll - for (int i = 0; i < mmq_y; i += WARP_SIZE) { - const int row_dst = row_dst_0 + threadIdx.x + i; - - if (row_dst >= nrows_dst) { - continue; - } - - dst[col_dst*nrows_dst + row_dst] = sum[i/WARP_SIZE][j/nwarps]; - } - } -} - -template static __global__ void -#if defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__) -#if defined(RDNA3) || defined(RDNA2) - __launch_bounds__(WARP_SIZE*NWARPS_Q4_0_RDNA2, 2) -#endif // defined(RDNA3) || defined(RDNA2) -#endif // defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__) - mul_mat_q4_0( - const void * __restrict__ vx, const void * __restrict__ vy, float * __restrict__ dst, - const int ncols_x, const int nrows_x, const int ncols_y, const int nrows_y, const int nrows_dst) { - -#if defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__) -#if defined(RDNA3) || defined(RDNA2) - const int mmq_x = MMQ_X_Q4_0_RDNA2; - const int mmq_y = MMQ_Y_Q4_0_RDNA2; - const int nwarps = NWARPS_Q4_0_RDNA2; -#else - const int mmq_x = MMQ_X_Q4_0_RDNA1; - const int mmq_y = MMQ_Y_Q4_0_RDNA1; - const int nwarps = NWARPS_Q4_0_RDNA1; -#endif // defined(RDNA3) || defined(RDNA2) - - mul_mat_q, - load_tiles_q4_0, VDR_Q4_0_Q8_1_MMQ, vec_dot_q4_0_q8_1_mul_mat> - (vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst); - -#elif __CUDA_ARCH__ >= CC_VOLTA - const int mmq_x = MMQ_X_Q4_0_AMPERE; - const int mmq_y = MMQ_Y_Q4_0_AMPERE; - const int nwarps = NWARPS_Q4_0_AMPERE; - - mul_mat_q, - load_tiles_q4_0, VDR_Q4_0_Q8_1_MMQ, vec_dot_q4_0_q8_1_mul_mat> - (vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst); - -#elif __CUDA_ARCH__ >= MIN_CC_DP4A - const int mmq_x = MMQ_X_Q4_0_PASCAL; - const int mmq_y = MMQ_Y_Q4_0_PASCAL; - const int nwarps = NWARPS_Q4_0_PASCAL; - - mul_mat_q, - load_tiles_q4_0, VDR_Q4_0_Q8_1_MMQ, vec_dot_q4_0_q8_1_mul_mat> - (vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst); -#else - GGML_UNUSED(vec_dot_q4_0_q8_1_mul_mat); - NO_DEVICE_CODE; -#endif // __CUDA_ARCH__ >= CC_VOLTA -} - -#define MMQ_X_Q4_1_RDNA2 64 -#define MMQ_Y_Q4_1_RDNA2 128 -#define NWARPS_Q4_1_RDNA2 8 -#define MMQ_X_Q4_1_RDNA1 64 -#define MMQ_Y_Q4_1_RDNA1 64 -#define NWARPS_Q4_1_RDNA1 8 -#if defined(CUDA_USE_TENSOR_CORES) -#define MMQ_X_Q4_1_AMPERE 4 -#define MMQ_Y_Q4_1_AMPERE 32 -#define NWARPS_Q4_1_AMPERE 4 -#else -#define MMQ_X_Q4_1_AMPERE 64 -#define MMQ_Y_Q4_1_AMPERE 128 -#define NWARPS_Q4_1_AMPERE 4 -#endif -#define MMQ_X_Q4_1_PASCAL 64 -#define MMQ_Y_Q4_1_PASCAL 64 -#define NWARPS_Q4_1_PASCAL 8 - -template static __global__ void -#if defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__) -#if defined(RDNA3) || defined(RDNA2) - __launch_bounds__(WARP_SIZE*NWARPS_Q4_1_RDNA2, 2) -#endif // defined(RDNA3) || defined(RDNA2) -#elif __CUDA_ARCH__ < CC_VOLTA - __launch_bounds__(WARP_SIZE*NWARPS_Q4_1_PASCAL, 2) -#endif // __CUDA_ARCH__ < CC_VOLTA - mul_mat_q4_1( - const void * __restrict__ vx, const void * __restrict__ vy, float * __restrict__ dst, - const int ncols_x, const int nrows_x, const int ncols_y, const int nrows_y, const int nrows_dst) { - -#if defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__) -#if defined(RDNA3) || defined(RDNA2) - const int mmq_x = MMQ_X_Q4_1_RDNA2; - const int mmq_y = MMQ_Y_Q4_1_RDNA2; - const int nwarps = NWARPS_Q4_1_RDNA2; -#else - const int mmq_x = MMQ_X_Q4_1_RDNA1; - const int mmq_y = MMQ_Y_Q4_1_RDNA1; - const int nwarps = NWARPS_Q4_1_RDNA1; -#endif // defined(RDNA3) || defined(RDNA2) - - mul_mat_q, - load_tiles_q4_1, VDR_Q4_1_Q8_1_MMQ, vec_dot_q4_1_q8_1_mul_mat> - (vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst); - -#elif __CUDA_ARCH__ >= CC_VOLTA - const int mmq_x = MMQ_X_Q4_1_AMPERE; - const int mmq_y = MMQ_Y_Q4_1_AMPERE; - const int nwarps = NWARPS_Q4_1_AMPERE; - - mul_mat_q, - load_tiles_q4_1, VDR_Q4_1_Q8_1_MMQ, vec_dot_q4_1_q8_1_mul_mat> - (vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst); - -#elif __CUDA_ARCH__ >= MIN_CC_DP4A - const int mmq_x = MMQ_X_Q4_1_PASCAL; - const int mmq_y = MMQ_Y_Q4_1_PASCAL; - const int nwarps = NWARPS_Q4_1_PASCAL; - - mul_mat_q, - load_tiles_q4_1, VDR_Q4_1_Q8_1_MMQ, vec_dot_q4_1_q8_1_mul_mat> - (vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst); -#else - GGML_UNUSED(vec_dot_q4_1_q8_1_mul_mat); - NO_DEVICE_CODE; -#endif // __CUDA_ARCH__ >= CC_VOLTA -} - -#define MMQ_X_Q5_0_RDNA2 64 -#define MMQ_Y_Q5_0_RDNA2 128 -#define NWARPS_Q5_0_RDNA2 8 -#define MMQ_X_Q5_0_RDNA1 64 -#define MMQ_Y_Q5_0_RDNA1 64 -#define NWARPS_Q5_0_RDNA1 8 -#if defined(CUDA_USE_TENSOR_CORES) -#define MMQ_X_Q5_0_AMPERE 4 -#define MMQ_Y_Q5_0_AMPERE 32 -#define NWARPS_Q5_0_AMPERE 4 -#else -#define MMQ_X_Q5_0_AMPERE 128 -#define MMQ_Y_Q5_0_AMPERE 64 -#define NWARPS_Q5_0_AMPERE 4 -#endif -#define MMQ_X_Q5_0_PASCAL 64 -#define MMQ_Y_Q5_0_PASCAL 64 -#define NWARPS_Q5_0_PASCAL 8 - -template static __global__ void -#if defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__) -#if defined(RDNA3) || defined(RDNA2) - __launch_bounds__(WARP_SIZE*NWARPS_Q5_0_RDNA2, 2) -#endif // defined(RDNA3) || defined(RDNA2) -#endif // defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__) - mul_mat_q5_0( - const void * __restrict__ vx, const void * __restrict__ vy, float * __restrict__ dst, - const int ncols_x, const int nrows_x, const int ncols_y, const int nrows_y, const int nrows_dst) { - -#if defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__) -#if defined(RDNA3) || defined(RDNA2) - const int mmq_x = MMQ_X_Q5_0_RDNA2; - const int mmq_y = MMQ_Y_Q5_0_RDNA2; - const int nwarps = NWARPS_Q5_0_RDNA2; -#else - const int mmq_x = MMQ_X_Q5_0_RDNA1; - const int mmq_y = MMQ_Y_Q5_0_RDNA1; - const int nwarps = NWARPS_Q5_0_RDNA1; -#endif // defined(RDNA3) || defined(RDNA2) - - mul_mat_q, - load_tiles_q5_0, VDR_Q5_0_Q8_1_MMQ, vec_dot_q5_0_q8_1_mul_mat> - (vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst); - -#elif __CUDA_ARCH__ >= CC_VOLTA - const int mmq_x = MMQ_X_Q5_0_AMPERE; - const int mmq_y = MMQ_Y_Q5_0_AMPERE; - const int nwarps = NWARPS_Q5_0_AMPERE; - - mul_mat_q, - load_tiles_q5_0, VDR_Q5_0_Q8_1_MMQ, vec_dot_q5_0_q8_1_mul_mat> - (vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst); - -#elif __CUDA_ARCH__ >= MIN_CC_DP4A - const int mmq_x = MMQ_X_Q5_0_PASCAL; - const int mmq_y = MMQ_Y_Q5_0_PASCAL; - const int nwarps = NWARPS_Q5_0_PASCAL; - - mul_mat_q, - load_tiles_q5_0, VDR_Q5_0_Q8_1_MMQ, vec_dot_q5_0_q8_1_mul_mat> - (vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst); -#else - GGML_UNUSED(vec_dot_q5_0_q8_1_mul_mat); - NO_DEVICE_CODE; -#endif // __CUDA_ARCH__ >= CC_VOLTA -} - -#define MMQ_X_Q5_1_RDNA2 64 -#define MMQ_Y_Q5_1_RDNA2 128 -#define NWARPS_Q5_1_RDNA2 8 -#define MMQ_X_Q5_1_RDNA1 64 -#define MMQ_Y_Q5_1_RDNA1 64 -#define NWARPS_Q5_1_RDNA1 8 -#if defined(CUDA_USE_TENSOR_CORES) -#define MMQ_X_Q5_1_AMPERE 4 -#define MMQ_Y_Q5_1_AMPERE 32 -#define NWARPS_Q5_1_AMPERE 4 -#else -#define MMQ_X_Q5_1_AMPERE 128 -#define MMQ_Y_Q5_1_AMPERE 64 -#define NWARPS_Q5_1_AMPERE 4 -#endif -#define MMQ_X_Q5_1_PASCAL 64 -#define MMQ_Y_Q5_1_PASCAL 64 -#define NWARPS_Q5_1_PASCAL 8 - -template static __global__ void -#if defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__) -#if defined(RDNA3) || defined(RDNA2) - __launch_bounds__(WARP_SIZE*NWARPS_Q5_1_RDNA2, 2) -#endif // defined(RDNA3) || defined(RDNA2) -#endif // defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__) -mul_mat_q5_1( - const void * __restrict__ vx, const void * __restrict__ vy, float * __restrict__ dst, - const int ncols_x, const int nrows_x, const int ncols_y, const int nrows_y, const int nrows_dst) { - -#if defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__) -#if defined(RDNA3) || defined(RDNA2) - const int mmq_x = MMQ_X_Q5_1_RDNA2; - const int mmq_y = MMQ_Y_Q5_1_RDNA2; - const int nwarps = NWARPS_Q5_1_RDNA2; -#else - const int mmq_x = MMQ_X_Q5_1_RDNA1; - const int mmq_y = MMQ_Y_Q5_1_RDNA1; - const int nwarps = NWARPS_Q5_1_RDNA1; -#endif // defined(RDNA3) || defined(RDNA2) - - mul_mat_q, - load_tiles_q5_1, VDR_Q5_1_Q8_1_MMQ, vec_dot_q5_1_q8_1_mul_mat> - (vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst); - -#elif __CUDA_ARCH__ >= CC_VOLTA - const int mmq_x = MMQ_X_Q5_1_AMPERE; - const int mmq_y = MMQ_Y_Q5_1_AMPERE; - const int nwarps = NWARPS_Q5_1_AMPERE; - - mul_mat_q, - load_tiles_q5_1, VDR_Q5_1_Q8_1_MMQ, vec_dot_q5_1_q8_1_mul_mat> - (vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst); - -#elif __CUDA_ARCH__ >= MIN_CC_DP4A - const int mmq_x = MMQ_X_Q5_1_PASCAL; - const int mmq_y = MMQ_Y_Q5_1_PASCAL; - const int nwarps = NWARPS_Q5_1_PASCAL; - - mul_mat_q, - load_tiles_q5_1, VDR_Q5_1_Q8_1_MMQ, vec_dot_q5_1_q8_1_mul_mat> - (vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst); -#else - GGML_UNUSED(vec_dot_q5_1_q8_1_mul_mat); - NO_DEVICE_CODE; -#endif // __CUDA_ARCH__ >= CC_VOLTA -} - -#define MMQ_X_Q8_0_RDNA2 64 -#define MMQ_Y_Q8_0_RDNA2 128 -#define NWARPS_Q8_0_RDNA2 8 -#define MMQ_X_Q8_0_RDNA1 64 -#define MMQ_Y_Q8_0_RDNA1 64 -#define NWARPS_Q8_0_RDNA1 8 -#if defined(CUDA_USE_TENSOR_CORES) -#define MMQ_X_Q8_0_AMPERE 4 -#define MMQ_Y_Q8_0_AMPERE 32 -#define NWARPS_Q8_0_AMPERE 4 -#else -#define MMQ_X_Q8_0_AMPERE 128 -#define MMQ_Y_Q8_0_AMPERE 64 -#define NWARPS_Q8_0_AMPERE 4 -#endif -#define MMQ_X_Q8_0_PASCAL 64 -#define MMQ_Y_Q8_0_PASCAL 64 -#define NWARPS_Q8_0_PASCAL 8 - -template static __global__ void -#if defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__) -#if defined(RDNA3) || defined(RDNA2) - __launch_bounds__(WARP_SIZE*NWARPS_Q8_0_RDNA2, 2) -#endif // defined(RDNA3) || defined(RDNA2) -#endif // defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__) - mul_mat_q8_0( - const void * __restrict__ vx, const void * __restrict__ vy, float * __restrict__ dst, - const int ncols_x, const int nrows_x, const int ncols_y, const int nrows_y, const int nrows_dst) { - -#if defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__) -#if defined(RDNA3) || defined(RDNA2) - const int mmq_x = MMQ_X_Q8_0_RDNA2; - const int mmq_y = MMQ_Y_Q8_0_RDNA2; - const int nwarps = NWARPS_Q8_0_RDNA2; -#else - const int mmq_x = MMQ_X_Q8_0_RDNA1; - const int mmq_y = MMQ_Y_Q8_0_RDNA1; - const int nwarps = NWARPS_Q8_0_RDNA1; -#endif // defined(RDNA3) || defined(RDNA2) - - mul_mat_q, - load_tiles_q8_0, VDR_Q8_0_Q8_1_MMQ, vec_dot_q8_0_q8_1_mul_mat> - (vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst); - -#elif __CUDA_ARCH__ >= CC_VOLTA - const int mmq_x = MMQ_X_Q8_0_AMPERE; - const int mmq_y = MMQ_Y_Q8_0_AMPERE; - const int nwarps = NWARPS_Q8_0_AMPERE; - - mul_mat_q, - load_tiles_q8_0, VDR_Q8_0_Q8_1_MMQ, vec_dot_q8_0_q8_1_mul_mat> - (vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst); - -#elif __CUDA_ARCH__ >= MIN_CC_DP4A - const int mmq_x = MMQ_X_Q8_0_PASCAL; - const int mmq_y = MMQ_Y_Q8_0_PASCAL; - const int nwarps = NWARPS_Q8_0_PASCAL; - - mul_mat_q, - load_tiles_q8_0, VDR_Q8_0_Q8_1_MMQ, vec_dot_q8_0_q8_1_mul_mat> - (vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst); -#else - GGML_UNUSED(vec_dot_q8_0_q8_1_mul_mat); - NO_DEVICE_CODE; -#endif // __CUDA_ARCH__ >= CC_VOLTA -} - -#define MMQ_X_Q2_K_RDNA2 64 -#define MMQ_Y_Q2_K_RDNA2 128 -#define NWARPS_Q2_K_RDNA2 8 -#define MMQ_X_Q2_K_RDNA1 128 -#define MMQ_Y_Q2_K_RDNA1 32 -#define NWARPS_Q2_K_RDNA1 8 -#if defined(CUDA_USE_TENSOR_CORES) -#define MMQ_X_Q2_K_AMPERE 4 -#define MMQ_Y_Q2_K_AMPERE 32 -#define NWARPS_Q2_K_AMPERE 4 -#else -#define MMQ_X_Q2_K_AMPERE 64 -#define MMQ_Y_Q2_K_AMPERE 128 -#define NWARPS_Q2_K_AMPERE 4 -#endif -#define MMQ_X_Q2_K_PASCAL 64 -#define MMQ_Y_Q2_K_PASCAL 64 -#define NWARPS_Q2_K_PASCAL 8 - -template static __global__ void -#if defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__) -#if defined(RDNA3) || defined(RDNA2) - __launch_bounds__(WARP_SIZE*NWARPS_Q2_K_RDNA2, 2) -#endif // defined(RDNA3) || defined(RDNA2) -#endif // defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__) -mul_mat_q2_K( - const void * __restrict__ vx, const void * __restrict__ vy, float * __restrict__ dst, - const int ncols_x, const int nrows_x, const int ncols_y, const int nrows_y, const int nrows_dst) { - -#if defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__) -#if defined(RDNA3) || defined(RDNA2) - const int mmq_x = MMQ_X_Q2_K_RDNA2; - const int mmq_y = MMQ_Y_Q2_K_RDNA2; - const int nwarps = NWARPS_Q2_K_RDNA2; -#else - const int mmq_x = MMQ_X_Q2_K_RDNA1; - const int mmq_y = MMQ_Y_Q2_K_RDNA1; - const int nwarps = NWARPS_Q2_K_RDNA1; -#endif // defined(RDNA3) || defined(RDNA2) - - mul_mat_q, - load_tiles_q2_K, VDR_Q2_K_Q8_1_MMQ, vec_dot_q2_K_q8_1_mul_mat> - (vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst); - -#elif __CUDA_ARCH__ >= CC_VOLTA - const int mmq_x = MMQ_X_Q2_K_AMPERE; - const int mmq_y = MMQ_Y_Q2_K_AMPERE; - const int nwarps = NWARPS_Q2_K_AMPERE; - - mul_mat_q, - load_tiles_q2_K, VDR_Q2_K_Q8_1_MMQ, vec_dot_q2_K_q8_1_mul_mat> - (vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst); - -#elif __CUDA_ARCH__ >= MIN_CC_DP4A - const int mmq_x = MMQ_X_Q2_K_PASCAL; - const int mmq_y = MMQ_Y_Q2_K_PASCAL; - const int nwarps = NWARPS_Q2_K_PASCAL; - - mul_mat_q, - load_tiles_q2_K, VDR_Q2_K_Q8_1_MMQ, vec_dot_q2_K_q8_1_mul_mat> - (vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst); -#else - GGML_UNUSED(vec_dot_q2_K_q8_1_mul_mat); - NO_DEVICE_CODE; -#endif // __CUDA_ARCH__ >= CC_VOLTA -} - -#define MMQ_X_Q3_K_RDNA2 128 -#define MMQ_Y_Q3_K_RDNA2 64 -#define NWARPS_Q3_K_RDNA2 8 -#define MMQ_X_Q3_K_RDNA1 32 -#define MMQ_Y_Q3_K_RDNA1 128 -#define NWARPS_Q3_K_RDNA1 8 -#if defined(CUDA_USE_TENSOR_CORES) -#define MMQ_X_Q3_K_AMPERE 4 -#define MMQ_Y_Q3_K_AMPERE 32 -#define NWARPS_Q3_K_AMPERE 4 -#else -#define MMQ_X_Q3_K_AMPERE 128 -#define MMQ_Y_Q3_K_AMPERE 128 -#define NWARPS_Q3_K_AMPERE 4 -#endif -#define MMQ_X_Q3_K_PASCAL 64 -#define MMQ_Y_Q3_K_PASCAL 64 -#define NWARPS_Q3_K_PASCAL 8 - -template static __global__ void -#if defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__) -#if defined(RDNA3) || defined(RDNA2) - __launch_bounds__(WARP_SIZE*NWARPS_Q3_K_RDNA2, 2) -#endif // defined(RDNA3) || defined(RDNA2) -#elif __CUDA_ARCH__ < CC_VOLTA - __launch_bounds__(WARP_SIZE*NWARPS_Q3_K_PASCAL, 2) -#endif // __CUDA_ARCH__ < CC_VOLTA - mul_mat_q3_K( - const void * __restrict__ vx, const void * __restrict__ vy, float * __restrict__ dst, - const int ncols_x, const int nrows_x, const int ncols_y, const int nrows_y, const int nrows_dst) { - -#if defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__) -#if defined(RDNA3) || defined(RDNA2) - const int mmq_x = MMQ_X_Q3_K_RDNA2; - const int mmq_y = MMQ_Y_Q3_K_RDNA2; - const int nwarps = NWARPS_Q3_K_RDNA2; -#else - const int mmq_x = MMQ_X_Q3_K_RDNA1; - const int mmq_y = MMQ_Y_Q3_K_RDNA1; - const int nwarps = NWARPS_Q3_K_RDNA1; -#endif // defined(RDNA3) || defined(RDNA2) - - mul_mat_q, - load_tiles_q3_K, VDR_Q3_K_Q8_1_MMQ, vec_dot_q3_K_q8_1_mul_mat> - (vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst); - -#elif __CUDA_ARCH__ >= CC_VOLTA - const int mmq_x = MMQ_X_Q3_K_AMPERE; - const int mmq_y = MMQ_Y_Q3_K_AMPERE; - const int nwarps = NWARPS_Q3_K_AMPERE; - - mul_mat_q, - load_tiles_q3_K, VDR_Q3_K_Q8_1_MMQ, vec_dot_q3_K_q8_1_mul_mat> - (vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst); - -#elif __CUDA_ARCH__ >= MIN_CC_DP4A - const int mmq_x = MMQ_X_Q3_K_PASCAL; - const int mmq_y = MMQ_Y_Q3_K_PASCAL; - const int nwarps = NWARPS_Q3_K_PASCAL; - - mul_mat_q, - load_tiles_q3_K, VDR_Q3_K_Q8_1_MMQ, vec_dot_q3_K_q8_1_mul_mat> - (vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst); -#else - GGML_UNUSED(vec_dot_q3_K_q8_1_mul_mat); - NO_DEVICE_CODE; -#endif // __CUDA_ARCH__ >= CC_VOLTA -} - -#define MMQ_X_Q4_K_RDNA2 64 -#define MMQ_Y_Q4_K_RDNA2 128 -#define NWARPS_Q4_K_RDNA2 8 -#define MMQ_X_Q4_K_RDNA1 32 -#define MMQ_Y_Q4_K_RDNA1 64 -#define NWARPS_Q4_K_RDNA1 8 -#if defined(CUDA_USE_TENSOR_CORES) -#define MMQ_X_Q4_K_AMPERE 4 -#define MMQ_Y_Q4_K_AMPERE 32 -#define NWARPS_Q4_K_AMPERE 4 -#else -#define MMQ_X_Q4_K_AMPERE 64 -#define MMQ_Y_Q4_K_AMPERE 128 -#define NWARPS_Q4_K_AMPERE 4 -#endif -#define MMQ_X_Q4_K_PASCAL 64 -#define MMQ_Y_Q4_K_PASCAL 64 -#define NWARPS_Q4_K_PASCAL 8 - -template static __global__ void -#if defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__) -#if defined(RDNA3) || defined(RDNA2) - __launch_bounds__(WARP_SIZE*NWARPS_Q4_K_RDNA2, 2) -#endif // defined(RDNA3) || defined(RDNA2) -#elif __CUDA_ARCH__ < CC_VOLTA - __launch_bounds__(WARP_SIZE*NWARPS_Q4_K_PASCAL, 2) -#endif // __CUDA_ARCH__ < CC_VOLTA - mul_mat_q4_K( - const void * __restrict__ vx, const void * __restrict__ vy, float * __restrict__ dst, - const int ncols_x, const int nrows_x, const int ncols_y, const int nrows_y, const int nrows_dst) { - -#if defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__) -#if defined(RDNA3) || defined(RDNA2) - const int mmq_x = MMQ_X_Q4_K_RDNA2; - const int mmq_y = MMQ_Y_Q4_K_RDNA2; - const int nwarps = NWARPS_Q4_K_RDNA2; -#else - const int mmq_x = MMQ_X_Q4_K_RDNA1; - const int mmq_y = MMQ_Y_Q4_K_RDNA1; - const int nwarps = NWARPS_Q4_K_RDNA1; -#endif // defined(RDNA3) || defined(RDNA2) - - mul_mat_q, - load_tiles_q4_K, VDR_Q4_K_Q8_1_MMQ, vec_dot_q4_K_q8_1_mul_mat> - (vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst); - -#elif __CUDA_ARCH__ >= CC_VOLTA - const int mmq_x = MMQ_X_Q4_K_AMPERE; - const int mmq_y = MMQ_Y_Q4_K_AMPERE; - const int nwarps = NWARPS_Q4_K_AMPERE; - - mul_mat_q, - load_tiles_q4_K, VDR_Q4_K_Q8_1_MMQ, vec_dot_q4_K_q8_1_mul_mat> - (vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst); - -#elif __CUDA_ARCH__ >= MIN_CC_DP4A - const int mmq_x = MMQ_X_Q4_K_PASCAL; - const int mmq_y = MMQ_Y_Q4_K_PASCAL; - const int nwarps = NWARPS_Q4_K_PASCAL; - - mul_mat_q, - load_tiles_q4_K, VDR_Q4_K_Q8_1_MMQ, vec_dot_q4_K_q8_1_mul_mat> - (vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst); -#else - GGML_UNUSED(vec_dot_q4_K_q8_1_mul_mat); - NO_DEVICE_CODE; -#endif // __CUDA_ARCH__ >= CC_VOLTA -} - -#define MMQ_X_Q5_K_RDNA2 64 -#define MMQ_Y_Q5_K_RDNA2 128 -#define NWARPS_Q5_K_RDNA2 8 -#define MMQ_X_Q5_K_RDNA1 32 -#define MMQ_Y_Q5_K_RDNA1 64 -#define NWARPS_Q5_K_RDNA1 8 -#if defined(CUDA_USE_TENSOR_CORES) -#define MMQ_X_Q5_K_AMPERE 4 -#define MMQ_Y_Q5_K_AMPERE 32 -#define NWARPS_Q5_K_AMPERE 4 -#else -#define MMQ_X_Q5_K_AMPERE 64 -#define MMQ_Y_Q5_K_AMPERE 128 -#define NWARPS_Q5_K_AMPERE 4 -#endif -#define MMQ_X_Q5_K_PASCAL 64 -#define MMQ_Y_Q5_K_PASCAL 64 -#define NWARPS_Q5_K_PASCAL 8 - -template static __global__ void -#if defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__) -#if defined(RDNA3) || defined(RDNA2) - __launch_bounds__(WARP_SIZE*NWARPS_Q5_K_RDNA2, 2) -#endif // defined(RDNA3) || defined(RDNA2) -#endif // defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__) -mul_mat_q5_K( - const void * __restrict__ vx, const void * __restrict__ vy, float * __restrict__ dst, - const int ncols_x, const int nrows_x, const int ncols_y, const int nrows_y, const int nrows_dst) { - -#if defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__) -#if defined(RDNA3) || defined(RDNA2) - const int mmq_x = MMQ_X_Q5_K_RDNA2; - const int mmq_y = MMQ_Y_Q5_K_RDNA2; - const int nwarps = NWARPS_Q5_K_RDNA2; -#else - const int mmq_x = MMQ_X_Q5_K_RDNA1; - const int mmq_y = MMQ_Y_Q5_K_RDNA1; - const int nwarps = NWARPS_Q5_K_RDNA1; -#endif // defined(RDNA3) || defined(RDNA2) - - mul_mat_q, - load_tiles_q5_K, VDR_Q5_K_Q8_1_MMQ, vec_dot_q5_K_q8_1_mul_mat> - (vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst); - -#elif __CUDA_ARCH__ >= CC_VOLTA - const int mmq_x = MMQ_X_Q5_K_AMPERE; - const int mmq_y = MMQ_Y_Q5_K_AMPERE; - const int nwarps = NWARPS_Q5_K_AMPERE; - - mul_mat_q, - load_tiles_q5_K, VDR_Q5_K_Q8_1_MMQ, vec_dot_q5_K_q8_1_mul_mat> - (vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst); - -#elif __CUDA_ARCH__ >= MIN_CC_DP4A - const int mmq_x = MMQ_X_Q5_K_PASCAL; - const int mmq_y = MMQ_Y_Q5_K_PASCAL; - const int nwarps = NWARPS_Q5_K_PASCAL; - - mul_mat_q, - load_tiles_q5_K, VDR_Q5_K_Q8_1_MMQ, vec_dot_q5_K_q8_1_mul_mat> - (vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst); -#else - GGML_UNUSED(vec_dot_q5_K_q8_1_mul_mat); - NO_DEVICE_CODE; -#endif // __CUDA_ARCH__ >= CC_VOLTA -} - -#define MMQ_X_Q6_K_RDNA2 64 -#define MMQ_Y_Q6_K_RDNA2 128 -#define NWARPS_Q6_K_RDNA2 8 -#define MMQ_X_Q6_K_RDNA1 32 -#define MMQ_Y_Q6_K_RDNA1 64 -#define NWARPS_Q6_K_RDNA1 8 -#if defined(CUDA_USE_TENSOR_CORES) -#define MMQ_X_Q6_K_AMPERE 4 -#define MMQ_Y_Q6_K_AMPERE 32 -#define NWARPS_Q6_K_AMPERE 4 -#else -#define MMQ_X_Q6_K_AMPERE 64 -#define MMQ_Y_Q6_K_AMPERE 64 -#define NWARPS_Q6_K_AMPERE 4 -#endif -#define MMQ_X_Q6_K_PASCAL 64 -#define MMQ_Y_Q6_K_PASCAL 64 -#define NWARPS_Q6_K_PASCAL 8 - -template static __global__ void -#if defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__) -#if defined(RDNA3) || defined(RDNA2) - __launch_bounds__(WARP_SIZE*NWARPS_Q6_K_RDNA2, 2) -#endif // defined(RDNA3) || defined(RDNA2) -#elif __CUDA_ARCH__ < CC_VOLTA - __launch_bounds__(WARP_SIZE*NWARPS_Q6_K_PASCAL, 2) -#endif // __CUDA_ARCH__ < CC_VOLTA - mul_mat_q6_K( - const void * __restrict__ vx, const void * __restrict__ vy, float * __restrict__ dst, - const int ncols_x, const int nrows_x, const int ncols_y, const int nrows_y, const int nrows_dst) { - -#if defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__) -#if defined(RDNA3) || defined(RDNA2) - const int mmq_x = MMQ_X_Q6_K_RDNA2; - const int mmq_y = MMQ_Y_Q6_K_RDNA2; - const int nwarps = NWARPS_Q6_K_RDNA2; -#else - const int mmq_x = MMQ_X_Q6_K_RDNA1; - const int mmq_y = MMQ_Y_Q6_K_RDNA1; - const int nwarps = NWARPS_Q6_K_RDNA1; -#endif // defined(RDNA3) || defined(RDNA2) - - mul_mat_q, - load_tiles_q6_K, VDR_Q6_K_Q8_1_MMQ, vec_dot_q6_K_q8_1_mul_mat> - (vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst); - -#elif __CUDA_ARCH__ >= CC_VOLTA - const int mmq_x = MMQ_X_Q6_K_AMPERE; - const int mmq_y = MMQ_Y_Q6_K_AMPERE; - const int nwarps = NWARPS_Q6_K_AMPERE; - - mul_mat_q, - load_tiles_q6_K, VDR_Q6_K_Q8_1_MMQ, vec_dot_q6_K_q8_1_mul_mat> - (vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst); - -#elif __CUDA_ARCH__ >= MIN_CC_DP4A - const int mmq_x = MMQ_X_Q6_K_PASCAL; - const int mmq_y = MMQ_Y_Q6_K_PASCAL; - const int nwarps = NWARPS_Q6_K_PASCAL; - - mul_mat_q, - load_tiles_q6_K, VDR_Q6_K_Q8_1_MMQ, vec_dot_q6_K_q8_1_mul_mat> - (vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst); -#else - GGML_UNUSED(vec_dot_q6_K_q8_1_mul_mat); - NO_DEVICE_CODE; -#endif // __CUDA_ARCH__ >= CC_VOLTA -} - -static void ggml_mul_mat_q4_0_q8_1_cuda( - const void * vx, const void * vy, float * dst, const int ncols_x, const int nrows_x, - const int ncols_y, const int nrows_y, const int nrows_dst, cudaStream_t stream) { - - int id; - CUDA_CHECK(cudaGetDevice(&id)); - const int compute_capability = ggml_cuda_info().devices[id].cc; - - int mmq_x, mmq_y, nwarps; - if (compute_capability >= CC_RDNA2) { - mmq_x = MMQ_X_Q4_0_RDNA2; - mmq_y = MMQ_Y_Q4_0_RDNA2; - nwarps = NWARPS_Q4_0_RDNA2; - } else if (compute_capability >= CC_OFFSET_AMD) { - mmq_x = MMQ_X_Q4_0_RDNA1; - mmq_y = MMQ_Y_Q4_0_RDNA1; - nwarps = NWARPS_Q4_0_RDNA1; - } else if (compute_capability >= CC_VOLTA) { - mmq_x = MMQ_X_Q4_0_AMPERE; - mmq_y = MMQ_Y_Q4_0_AMPERE; - nwarps = NWARPS_Q4_0_AMPERE; - } else if (compute_capability >= MIN_CC_DP4A) { - mmq_x = MMQ_X_Q4_0_PASCAL; - mmq_y = MMQ_Y_Q4_0_PASCAL; - nwarps = NWARPS_Q4_0_PASCAL; - } else { - GGML_ASSERT(false); - } - - const int block_num_x = (nrows_x + mmq_y - 1) / mmq_y; - const int block_num_y = (ncols_y + mmq_x - 1) / mmq_x; - const dim3 block_nums(block_num_x, block_num_y, 1); - const dim3 block_dims(WARP_SIZE, nwarps, 1); - - if (nrows_x % mmq_y == 0) { - const bool need_check = false; - mul_mat_q4_0<<>> - (vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst); - } else { - const bool need_check = true; - mul_mat_q4_0<<>> - (vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst); - } -} - -static void ggml_mul_mat_q4_1_q8_1_cuda( - const void * vx, const void * vy, float * dst, const int ncols_x, const int nrows_x, - const int ncols_y, const int nrows_y, const int nrows_dst, cudaStream_t stream) { - - int id; - CUDA_CHECK(cudaGetDevice(&id)); - const int compute_capability = ggml_cuda_info().devices[id].cc; - - int mmq_x, mmq_y, nwarps; - if (compute_capability >= CC_RDNA2) { - mmq_x = MMQ_X_Q4_1_RDNA2; - mmq_y = MMQ_Y_Q4_1_RDNA2; - nwarps = NWARPS_Q4_1_RDNA2; - } else if (compute_capability >= CC_OFFSET_AMD) { - mmq_x = MMQ_X_Q4_1_RDNA1; - mmq_y = MMQ_Y_Q4_1_RDNA1; - nwarps = NWARPS_Q4_1_RDNA1; - } else if (compute_capability >= CC_VOLTA) { - mmq_x = MMQ_X_Q4_1_AMPERE; - mmq_y = MMQ_Y_Q4_1_AMPERE; - nwarps = NWARPS_Q4_1_AMPERE; - } else if (compute_capability >= MIN_CC_DP4A) { - mmq_x = MMQ_X_Q4_1_PASCAL; - mmq_y = MMQ_Y_Q4_1_PASCAL; - nwarps = NWARPS_Q4_1_PASCAL; - } else { - GGML_ASSERT(false); - } - - const int block_num_x = (nrows_x + mmq_y - 1) / mmq_y; - const int block_num_y = (ncols_y + mmq_x - 1) / mmq_x; - const dim3 block_nums(block_num_x, block_num_y, 1); - const dim3 block_dims(WARP_SIZE, nwarps, 1); - - if (nrows_x % mmq_y == 0) { - const bool need_check = false; - mul_mat_q4_1<<>> - (vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst); - } else { - const bool need_check = true; - mul_mat_q4_1<<>> - (vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst); - } -} - -static void ggml_mul_mat_q5_0_q8_1_cuda( - const void * vx, const void * vy, float * dst, const int ncols_x, const int nrows_x, - const int ncols_y, const int nrows_y, const int nrows_dst, cudaStream_t stream) { - - int id; - CUDA_CHECK(cudaGetDevice(&id)); - const int compute_capability = ggml_cuda_info().devices[id].cc; - - int mmq_x, mmq_y, nwarps; - if (compute_capability >= CC_RDNA2) { - mmq_x = MMQ_X_Q5_0_RDNA2; - mmq_y = MMQ_Y_Q5_0_RDNA2; - nwarps = NWARPS_Q5_0_RDNA2; - } else if (compute_capability >= CC_OFFSET_AMD) { - mmq_x = MMQ_X_Q5_0_RDNA1; - mmq_y = MMQ_Y_Q5_0_RDNA1; - nwarps = NWARPS_Q5_0_RDNA1; - } else if (compute_capability >= CC_VOLTA) { - mmq_x = MMQ_X_Q5_0_AMPERE; - mmq_y = MMQ_Y_Q5_0_AMPERE; - nwarps = NWARPS_Q5_0_AMPERE; - } else if (compute_capability >= MIN_CC_DP4A) { - mmq_x = MMQ_X_Q5_0_PASCAL; - mmq_y = MMQ_Y_Q5_0_PASCAL; - nwarps = NWARPS_Q5_0_PASCAL; - } else { - GGML_ASSERT(false); - } - - const int block_num_x = (nrows_x + mmq_y - 1) / mmq_y; - const int block_num_y = (ncols_y + mmq_x - 1) / mmq_x; - const dim3 block_nums(block_num_x, block_num_y, 1); - const dim3 block_dims(WARP_SIZE, nwarps, 1); - - if (nrows_x % mmq_y == 0) { - const bool need_check = false; - mul_mat_q5_0<<>> - (vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst); - } else { - const bool need_check = true; - mul_mat_q5_0<<>> - (vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst); - } -} - -static void ggml_mul_mat_q5_1_q8_1_cuda( - const void * vx, const void * vy, float * dst, const int ncols_x, const int nrows_x, - const int ncols_y, const int nrows_y, const int nrows_dst, cudaStream_t stream) { - - int id; - CUDA_CHECK(cudaGetDevice(&id)); - const int compute_capability = ggml_cuda_info().devices[id].cc; - - int mmq_x, mmq_y, nwarps; - if (compute_capability >= CC_RDNA2) { - mmq_x = MMQ_X_Q5_1_RDNA2; - mmq_y = MMQ_Y_Q5_1_RDNA2; - nwarps = NWARPS_Q5_1_RDNA2; - } else if (compute_capability >= CC_OFFSET_AMD) { - mmq_x = MMQ_X_Q5_1_RDNA1; - mmq_y = MMQ_Y_Q5_1_RDNA1; - nwarps = NWARPS_Q5_1_RDNA1; - } else if (compute_capability >= CC_VOLTA) { - mmq_x = MMQ_X_Q5_1_AMPERE; - mmq_y = MMQ_Y_Q5_1_AMPERE; - nwarps = NWARPS_Q5_1_AMPERE; - } else if (compute_capability >= MIN_CC_DP4A) { - mmq_x = MMQ_X_Q5_1_PASCAL; - mmq_y = MMQ_Y_Q5_1_PASCAL; - nwarps = NWARPS_Q5_1_PASCAL; - } else { - GGML_ASSERT(false); - } - - const int block_num_x = (nrows_x + mmq_y - 1) / mmq_y; - const int block_num_y = (ncols_y + mmq_x - 1) / mmq_x; - const dim3 block_nums(block_num_x, block_num_y, 1); - const dim3 block_dims(WARP_SIZE, nwarps, 1); - - if (nrows_x % mmq_y == 0) { - const bool need_check = false; - mul_mat_q5_1<<>> - (vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst); - } else { - const bool need_check = true; - mul_mat_q5_1<<>> - (vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst); - } -} - -static void ggml_mul_mat_q8_0_q8_1_cuda( - const void * vx, const void * vy, float * dst, const int ncols_x, const int nrows_x, - const int ncols_y, const int nrows_y, const int nrows_dst, cudaStream_t stream) { - - int id; - CUDA_CHECK(cudaGetDevice(&id)); - const int compute_capability = ggml_cuda_info().devices[id].cc; - - int mmq_x, mmq_y, nwarps; - if (compute_capability >= CC_RDNA2) { - mmq_x = MMQ_X_Q8_0_RDNA2; - mmq_y = MMQ_Y_Q8_0_RDNA2; - nwarps = NWARPS_Q8_0_RDNA2; - } else if (compute_capability >= CC_OFFSET_AMD) { - mmq_x = MMQ_X_Q8_0_RDNA1; - mmq_y = MMQ_Y_Q8_0_RDNA1; - nwarps = NWARPS_Q8_0_RDNA1; - } else if (compute_capability >= CC_VOLTA) { - mmq_x = MMQ_X_Q8_0_AMPERE; - mmq_y = MMQ_Y_Q8_0_AMPERE; - nwarps = NWARPS_Q8_0_AMPERE; - } else if (compute_capability >= MIN_CC_DP4A) { - mmq_x = MMQ_X_Q8_0_PASCAL; - mmq_y = MMQ_Y_Q8_0_PASCAL; - nwarps = NWARPS_Q8_0_PASCAL; - } else { - GGML_ASSERT(false); - } - - const int block_num_x = (nrows_x + mmq_y - 1) / mmq_y; - const int block_num_y = (ncols_y + mmq_x - 1) / mmq_x; - const dim3 block_nums(block_num_x, block_num_y, 1); - const dim3 block_dims(WARP_SIZE, nwarps, 1); - - if (nrows_x % mmq_y == 0) { - const bool need_check = false; - mul_mat_q8_0<<>> - (vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst); - } else { - const bool need_check = true; - mul_mat_q8_0<<>> - (vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst); - } -} - -static void ggml_mul_mat_q2_K_q8_1_cuda( - const void * vx, const void * vy, float * dst, const int ncols_x, const int nrows_x, - const int ncols_y, const int nrows_y, const int nrows_dst, cudaStream_t stream) { - - int id; - CUDA_CHECK(cudaGetDevice(&id)); - const int compute_capability = ggml_cuda_info().devices[id].cc; - - int mmq_x, mmq_y, nwarps; - if (compute_capability >= CC_RDNA2) { - mmq_x = MMQ_X_Q2_K_RDNA2; - mmq_y = MMQ_Y_Q2_K_RDNA2; - nwarps = NWARPS_Q2_K_RDNA2; - } else if (compute_capability >= CC_OFFSET_AMD) { - mmq_x = MMQ_X_Q2_K_RDNA1; - mmq_y = MMQ_Y_Q2_K_RDNA1; - nwarps = NWARPS_Q2_K_RDNA1; - } else if (compute_capability >= CC_VOLTA) { - mmq_x = MMQ_X_Q2_K_AMPERE; - mmq_y = MMQ_Y_Q2_K_AMPERE; - nwarps = NWARPS_Q2_K_AMPERE; - } else if (compute_capability >= MIN_CC_DP4A) { - mmq_x = MMQ_X_Q2_K_PASCAL; - mmq_y = MMQ_Y_Q2_K_PASCAL; - nwarps = NWARPS_Q2_K_PASCAL; - } else { - GGML_ASSERT(false); - } - - const int block_num_x = (nrows_x + mmq_y - 1) / mmq_y; - const int block_num_y = (ncols_y + mmq_x - 1) / mmq_x; - const dim3 block_nums(block_num_x, block_num_y, 1); - const dim3 block_dims(WARP_SIZE, nwarps, 1); - - if (nrows_x % mmq_y == 0) { - const bool need_check = false; - mul_mat_q2_K<<>> - (vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst); - } else { - const bool need_check = true; - mul_mat_q2_K<<>> - (vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst); - } -} - -static void ggml_mul_mat_q3_K_q8_1_cuda( - const void * vx, const void * vy, float * dst, const int ncols_x, const int nrows_x, - const int ncols_y, const int nrows_y, const int nrows_dst, cudaStream_t stream) { - -#if QK_K == 256 - - int id; - CUDA_CHECK(cudaGetDevice(&id)); - const int compute_capability = ggml_cuda_info().devices[id].cc; - - int mmq_x, mmq_y, nwarps; - if (compute_capability >= CC_RDNA2) { - mmq_x = MMQ_X_Q3_K_RDNA2; - mmq_y = MMQ_Y_Q3_K_RDNA2; - nwarps = NWARPS_Q3_K_RDNA2; - } else if (compute_capability >= CC_OFFSET_AMD) { - mmq_x = MMQ_X_Q3_K_RDNA1; - mmq_y = MMQ_Y_Q3_K_RDNA1; - nwarps = NWARPS_Q3_K_RDNA1; - } else if (compute_capability >= CC_VOLTA) { - mmq_x = MMQ_X_Q3_K_AMPERE; - mmq_y = MMQ_Y_Q3_K_AMPERE; - nwarps = NWARPS_Q3_K_AMPERE; - } else if (compute_capability >= MIN_CC_DP4A) { - mmq_x = MMQ_X_Q3_K_PASCAL; - mmq_y = MMQ_Y_Q3_K_PASCAL; - nwarps = NWARPS_Q3_K_PASCAL; - } else { - GGML_ASSERT(false); - } - - const int block_num_x = (nrows_x + mmq_y - 1) / mmq_y; - const int block_num_y = (ncols_y + mmq_x - 1) / mmq_x; - const dim3 block_nums(block_num_x, block_num_y, 1); - const dim3 block_dims(WARP_SIZE, nwarps, 1); - - if (nrows_x % mmq_y == 0) { - const bool need_check = false; - mul_mat_q3_K<<>> - (vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst); - } else { - const bool need_check = true; - mul_mat_q3_K<<>> - (vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst); - } -#endif -} - -static void ggml_mul_mat_q4_K_q8_1_cuda( - const void * vx, const void * vy, float * dst, const int ncols_x, const int nrows_x, - const int ncols_y, const int nrows_y, const int nrows_dst, cudaStream_t stream) { - - int id; - CUDA_CHECK(cudaGetDevice(&id)); - const int compute_capability = ggml_cuda_info().devices[id].cc; - - int mmq_x, mmq_y, nwarps; - if (compute_capability >= CC_RDNA2) { - mmq_x = MMQ_X_Q4_K_RDNA2; - mmq_y = MMQ_Y_Q4_K_RDNA2; - nwarps = NWARPS_Q4_K_RDNA2; - } else if (compute_capability >= CC_OFFSET_AMD) { - mmq_x = MMQ_X_Q4_K_RDNA1; - mmq_y = MMQ_Y_Q4_K_RDNA1; - nwarps = NWARPS_Q4_K_RDNA1; - } else if (compute_capability >= CC_VOLTA) { - mmq_x = MMQ_X_Q4_K_AMPERE; - mmq_y = MMQ_Y_Q4_K_AMPERE; - nwarps = NWARPS_Q4_K_AMPERE; - } else if (compute_capability >= MIN_CC_DP4A) { - mmq_x = MMQ_X_Q4_K_PASCAL; - mmq_y = MMQ_Y_Q4_K_PASCAL; - nwarps = NWARPS_Q4_K_PASCAL; - } else { - GGML_ASSERT(false); - } - - const int block_num_x = (nrows_x + mmq_y - 1) / mmq_y; - const int block_num_y = (ncols_y + mmq_x - 1) / mmq_x; - const dim3 block_nums(block_num_x, block_num_y, 1); - const dim3 block_dims(WARP_SIZE, nwarps, 1); - - if (nrows_x % mmq_y == 0) { - const bool need_check = false; - mul_mat_q4_K<<>> - (vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst); - } else { - const bool need_check = true; - mul_mat_q4_K<<>> - (vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst); - } -} - -static void ggml_mul_mat_q5_K_q8_1_cuda( - const void * vx, const void * vy, float * dst, const int ncols_x, const int nrows_x, - const int ncols_y, const int nrows_y, const int nrows_dst, cudaStream_t stream) { - - int id; - CUDA_CHECK(cudaGetDevice(&id)); - const int compute_capability = ggml_cuda_info().devices[id].cc; - - int mmq_x, mmq_y, nwarps; - if (compute_capability >= CC_RDNA2) { - mmq_x = MMQ_X_Q5_K_RDNA2; - mmq_y = MMQ_Y_Q5_K_RDNA2; - nwarps = NWARPS_Q5_K_RDNA2; - } else if (compute_capability >= CC_OFFSET_AMD) { - mmq_x = MMQ_X_Q5_K_RDNA1; - mmq_y = MMQ_Y_Q5_K_RDNA1; - nwarps = NWARPS_Q5_K_RDNA1; - } else if (compute_capability >= CC_VOLTA) { - mmq_x = MMQ_X_Q5_K_AMPERE; - mmq_y = MMQ_Y_Q5_K_AMPERE; - nwarps = NWARPS_Q5_K_AMPERE; - } else if (compute_capability >= MIN_CC_DP4A) { - mmq_x = MMQ_X_Q5_K_PASCAL; - mmq_y = MMQ_Y_Q5_K_PASCAL; - nwarps = NWARPS_Q5_K_PASCAL; - } else { - GGML_ASSERT(false); - } - - const int block_num_x = (nrows_x + mmq_y - 1) / mmq_y; - const int block_num_y = (ncols_y + mmq_x - 1) / mmq_x; - const dim3 block_nums(block_num_x, block_num_y, 1); - const dim3 block_dims(WARP_SIZE, nwarps, 1); - - if (nrows_x % mmq_y == 0) { - const bool need_check = false; - mul_mat_q5_K<<>> - (vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst); - } else { - const bool need_check = true; - mul_mat_q5_K<<>> - (vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst); - } -} - -static void ggml_mul_mat_q6_K_q8_1_cuda( - const void * vx, const void * vy, float * dst, const int ncols_x, const int nrows_x, - const int ncols_y, const int nrows_y, const int nrows_dst, cudaStream_t stream) { - - int id; - CUDA_CHECK(cudaGetDevice(&id)); - const int compute_capability = ggml_cuda_info().devices[id].cc; - - int mmq_x, mmq_y, nwarps; - if (compute_capability >= CC_RDNA2) { - mmq_x = MMQ_X_Q6_K_RDNA2; - mmq_y = MMQ_Y_Q6_K_RDNA2; - nwarps = NWARPS_Q6_K_RDNA2; - } else if (compute_capability >= CC_OFFSET_AMD) { - mmq_x = MMQ_X_Q6_K_RDNA1; - mmq_y = MMQ_Y_Q6_K_RDNA1; - nwarps = NWARPS_Q6_K_RDNA1; - } else if (compute_capability >= CC_VOLTA) { - mmq_x = MMQ_X_Q6_K_AMPERE; - mmq_y = MMQ_Y_Q6_K_AMPERE; - nwarps = NWARPS_Q6_K_AMPERE; - } else if (compute_capability >= MIN_CC_DP4A) { - mmq_x = MMQ_X_Q6_K_PASCAL; - mmq_y = MMQ_Y_Q6_K_PASCAL; - nwarps = NWARPS_Q6_K_PASCAL; - } else { - GGML_ASSERT(false); - } - - const int block_num_x = (nrows_x + mmq_y - 1) / mmq_y; - const int block_num_y = (ncols_y + mmq_x - 1) / mmq_x; - const dim3 block_nums(block_num_x, block_num_y, 1); - const dim3 block_dims(WARP_SIZE, nwarps, 1); - - if (nrows_x % mmq_y == 0) { - const bool need_check = false; - mul_mat_q6_K<<>> - (vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst); - } else { - const bool need_check = true; - mul_mat_q6_K<<>> - (vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst); - } -} - -void ggml_cuda_op_mul_mat_q( - ggml_backend_cuda_context & ctx, - const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst, const char * src0_dd_i, const float * src1_ddf_i, - const char * src1_ddq_i, float * dst_dd_i, const int64_t row_low, const int64_t row_high, const int64_t src1_ncols, - const int64_t src1_padded_row_size, cudaStream_t stream) { - - const int64_t ne00 = src0->ne[0]; - - const int64_t ne10 = src1->ne[0]; - GGML_ASSERT(ne10 % QK8_1 == 0); - - const int64_t ne0 = dst->ne[0]; - - const int64_t row_diff = row_high - row_low; - - int id = ggml_cuda_get_device(); - - // the main device has a larger memory buffer to hold the results from all GPUs - // nrows_dst == nrows of the matrix that the kernel writes into - const int64_t nrows_dst = id == ctx.device ? ne0 : row_diff; - - switch (src0->type) { - case GGML_TYPE_Q4_0: - ggml_mul_mat_q4_0_q8_1_cuda(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, src1_ncols, src1_padded_row_size, nrows_dst, stream); - break; - case GGML_TYPE_Q4_1: - ggml_mul_mat_q4_1_q8_1_cuda(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, src1_ncols, src1_padded_row_size, nrows_dst, stream); - break; - case GGML_TYPE_Q5_0: - ggml_mul_mat_q5_0_q8_1_cuda(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, src1_ncols, src1_padded_row_size, nrows_dst, stream); - break; - case GGML_TYPE_Q5_1: - ggml_mul_mat_q5_1_q8_1_cuda(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, src1_ncols, src1_padded_row_size, nrows_dst, stream); - break; - case GGML_TYPE_Q8_0: - ggml_mul_mat_q8_0_q8_1_cuda(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, src1_ncols, src1_padded_row_size, nrows_dst, stream); - break; - case GGML_TYPE_Q2_K: - ggml_mul_mat_q2_K_q8_1_cuda(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, src1_ncols, src1_padded_row_size, nrows_dst, stream); - break; - case GGML_TYPE_Q3_K: - ggml_mul_mat_q3_K_q8_1_cuda(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, src1_ncols, src1_padded_row_size, nrows_dst, stream); - break; - case GGML_TYPE_Q4_K: - ggml_mul_mat_q4_K_q8_1_cuda(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, src1_ncols, src1_padded_row_size, nrows_dst, stream); - break; - case GGML_TYPE_Q5_K: - ggml_mul_mat_q5_K_q8_1_cuda(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, src1_ncols, src1_padded_row_size, nrows_dst, stream); - break; - case GGML_TYPE_Q6_K: - ggml_mul_mat_q6_K_q8_1_cuda(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, src1_ncols, src1_padded_row_size, nrows_dst, stream); - break; - default: - GGML_ASSERT(false); - break; - } - - GGML_UNUSED(src1); - GGML_UNUSED(dst); - GGML_UNUSED(src1_ddf_i); -} - -bool ggml_cuda_supports_mmq(enum ggml_type type) { - switch (type) { - case GGML_TYPE_Q4_0: - case GGML_TYPE_Q4_1: - case GGML_TYPE_Q5_0: - case GGML_TYPE_Q5_1: - case GGML_TYPE_Q8_0: - case GGML_TYPE_Q2_K: - case GGML_TYPE_Q3_K: - case GGML_TYPE_Q4_K: - case GGML_TYPE_Q5_K: - case GGML_TYPE_Q6_K: - return true; - default: - return false; - } -} diff --git a/ggml-cuda/mmq.cuh b/ggml-cuda/mmq.cuh deleted file mode 100644 index 807817c4a71..00000000000 --- a/ggml-cuda/mmq.cuh +++ /dev/null @@ -1,9 +0,0 @@ -#include "common.cuh" - -void ggml_cuda_op_mul_mat_q( - ggml_backend_cuda_context & ctx, - const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst, const char * src0_dd_i, const float * src1_ddf_i, - const char * src1_ddq_i, float * dst_dd_i, const int64_t row_low, const int64_t row_high, const int64_t src1_ncols, - const int64_t src1_padded_row_size, cudaStream_t stream); - -bool ggml_cuda_supports_mmq(enum ggml_type type); diff --git a/ggml-cuda/mmvq.cu b/ggml-cuda/mmvq.cu deleted file mode 100644 index 3965590017b..00000000000 --- a/ggml-cuda/mmvq.cu +++ /dev/null @@ -1,406 +0,0 @@ -#include "mmvq.cuh" -#include "vecdotq.cuh" - -typedef float (*vec_dot_q_cuda_t)(const void * __restrict__ vbq, const block_q8_1 * __restrict__ bq8_1, const int & iqs); - -template -#if !(defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__)) -// tell the compiler to use as many registers as it wants, see nwarps definition below -__launch_bounds__((ncols_y <= 4 ? 4 : 2)*WARP_SIZE, 1) -#endif // !(defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__)) -static __global__ void mul_mat_vec_q( - const void * __restrict__ vx, const void * __restrict__ vy, float * __restrict__ dst, - const int ncols_x, const int nrows_x, const int nrows_y, const int nrows_dst) { - -#if defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__) && (defined(RDNA2) || defined(RDNA3)) - constexpr int nwarps = 1; - constexpr int rows_per_cuda_block = 1; -#else - constexpr int nwarps = ncols_y <= 4 ? 4 : 2; - constexpr int rows_per_cuda_block = ncols_y == 1 ? 1 : 2; -#endif // defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__) && !defined(RDNA2) && !defined(RDNA3) - - const int tid = WARP_SIZE*threadIdx.y + threadIdx.x; - const int row0 = rows_per_cuda_block*blockIdx.x; - const int blocks_per_row_x = ncols_x / qk; - const int blocks_per_col_y = nrows_y / QK8_1; - constexpr int blocks_per_iter = vdr * nwarps*WARP_SIZE / qi; - -// partial sum for each thread - float tmp[ncols_y][rows_per_cuda_block] = {0.0f}; - - const block_q_t * x = (const block_q_t *) vx; - const block_q8_1 * y = (const block_q8_1 *) vy; - - for (int kbx = tid / (qi/vdr); kbx < blocks_per_row_x; kbx += blocks_per_iter) { - const int kby = kbx * (qk/QK8_1); // y block index that aligns with kbx - - // x block quant index when casting the quants to int - const int kqs = vdr * (tid % (qi/vdr)); - -#pragma unroll - for (int j = 0; j < ncols_y; ++j) { -#pragma unroll - for (int i = 0; i < rows_per_cuda_block; ++i) { - tmp[j][i] += vec_dot_q_cuda( - &x[kbx + (row0 + i)*blocks_per_row_x], &y[j*blocks_per_col_y + kby], kqs); - } - } - } - - __shared__ float tmp_shared[nwarps-1 > 0 ? nwarps-1 : 1][ncols_y][rows_per_cuda_block][WARP_SIZE]; - if (threadIdx.y > 0) { -#pragma unroll - for (int j = 0; j < ncols_y; ++j) { -#pragma unroll - for (int i = 0; i < rows_per_cuda_block; ++i) { - tmp_shared[threadIdx.y-1][j][i][threadIdx.x] = tmp[j][i]; - } - } - } - __syncthreads(); - if (threadIdx.y > 0) { - return; - } - - // sum up partial sums and write back result -#pragma unroll - for (int j = 0; j < ncols_y; ++j) { -#pragma unroll - for (int i = 0; i < rows_per_cuda_block; ++i) { -#pragma unroll - for (int l = 0; l < nwarps-1; ++l) { - tmp[j][i] += tmp_shared[l][j][i][threadIdx.x]; - } - tmp[j][i] = warp_reduce_sum(tmp[j][i]); - } - - if (threadIdx.x < rows_per_cuda_block) { - dst[j*nrows_dst + row0 + threadIdx.x] = tmp[j][threadIdx.x]; - } - } -} - -template -static void mul_mat_vec_q_cuda( - const void * vx, const void * vy, float * dst, - const int ncols_x, const int nrows_x, const int nrows_y, const int ncols_y, const int nrows_dst, cudaStream_t stream) { - - GGML_ASSERT(ncols_x % qk == 0); - GGML_ASSERT(ncols_y <= MMVQ_MAX_BATCH_SIZE); - - int id; - CUDA_CHECK(cudaGetDevice(&id)); - - int64_t nwarps = 1; - int64_t rows_per_cuda_block = 1; - - if (ggml_cuda_info().devices[id].cc < CC_RDNA2) { // NVIDIA and AMD older than RDNA2 - switch(ncols_y) { - case 1: - nwarps = 4; - rows_per_cuda_block = 1; - break; - case 2: - case 3: - case 4: - nwarps = 4; - rows_per_cuda_block = 2; - break; - case 5: - case 6: - case 7: - case 8: - nwarps = 2; - rows_per_cuda_block = 2; - break; - default: - GGML_ASSERT(false); - break; - } - } - const int64_t nblocks = (nrows_x + rows_per_cuda_block - 1) / rows_per_cuda_block; - const dim3 block_nums(nblocks, 1, 1); - const dim3 block_dims(WARP_SIZE, nwarps, 1); - - switch (ncols_y) { - case 1: - mul_mat_vec_q<1, qk, qi, block_q_t, vdr, vec_dot> - <<>>(vx, vy, dst, ncols_x, nrows_x, nrows_y, nrows_dst); - break; - case 2: - mul_mat_vec_q<2, qk, qi, block_q_t, vdr, vec_dot> - <<>>(vx, vy, dst, ncols_x, nrows_x, nrows_y, nrows_dst); - break; - case 3: - mul_mat_vec_q<3, qk, qi, block_q_t, vdr, vec_dot> - <<>>(vx, vy, dst, ncols_x, nrows_x, nrows_y, nrows_dst); - break; - case 4: - mul_mat_vec_q<4, qk, qi, block_q_t, vdr, vec_dot> - <<>>(vx, vy, dst, ncols_x, nrows_x, nrows_y, nrows_dst); - break; - case 5: - mul_mat_vec_q<5, qk, qi, block_q_t, vdr, vec_dot> - <<>>(vx, vy, dst, ncols_x, nrows_x, nrows_y, nrows_dst); - break; - case 6: - mul_mat_vec_q<6, qk, qi, block_q_t, vdr, vec_dot> - <<>>(vx, vy, dst, ncols_x, nrows_x, nrows_y, nrows_dst); - break; - case 7: - mul_mat_vec_q<7, qk, qi, block_q_t, vdr, vec_dot> - <<>>(vx, vy, dst, ncols_x, nrows_x, nrows_y, nrows_dst); - break; - case 8: - mul_mat_vec_q<8, qk, qi, block_q_t, vdr, vec_dot> - <<>>(vx, vy, dst, ncols_x, nrows_x, nrows_y, nrows_dst); - break; - default: - GGML_ASSERT(false); - break; - } -} - -static void mul_mat_vec_q4_0_q8_1_cuda( - const void * vx, const void * vy, float * dst, - const int ncols_x, const int nrows_x, const int nrows_y, const int ncols_y, const int nrows_dst, cudaStream_t stream) { - - mul_mat_vec_q_cuda - (vx, vy, dst, ncols_x, nrows_x, nrows_y, ncols_y, nrows_dst, stream); -} - -static void mul_mat_vec_q4_1_q8_1_cuda( - const void * vx, const void * vy, float * dst, - const int ncols_x, const int nrows_x, const int nrows_y, const int ncols_y, const int nrows_dst, cudaStream_t stream) { - - mul_mat_vec_q_cuda - (vx, vy, dst, ncols_x, nrows_x, nrows_y, ncols_y, nrows_dst, stream); -} - -static void mul_mat_vec_q5_0_q8_1_cuda( - const void * vx, const void * vy, float * dst, - const int ncols_x, const int nrows_x, const int nrows_y, const int ncols_y, const int nrows_dst, cudaStream_t stream) { - - mul_mat_vec_q_cuda - (vx, vy, dst, ncols_x, nrows_x, nrows_y, ncols_y, nrows_dst, stream); -} - -static void mul_mat_vec_q5_1_q8_1_cuda( - const void * vx, const void * vy, float * dst, - const int ncols_x, const int nrows_x, const int nrows_y, const int ncols_y, const int nrows_dst, cudaStream_t stream) { - - mul_mat_vec_q_cuda - (vx, vy, dst, ncols_x, nrows_x, nrows_y, ncols_y, nrows_dst, stream); -} - -static void mul_mat_vec_q8_0_q8_1_cuda( - const void * vx, const void * vy, float * dst, - const int ncols_x, const int nrows_x, const int nrows_y, const int ncols_y, const int nrows_dst, cudaStream_t stream) { - - mul_mat_vec_q_cuda - (vx, vy, dst, ncols_x, nrows_x, nrows_y, ncols_y, nrows_dst, stream); -} - -static void mul_mat_vec_q2_K_q8_1_cuda( - const void * vx, const void * vy, float * dst, - const int ncols_x, const int nrows_x, const int nrows_y, const int ncols_y, const int nrows_dst, cudaStream_t stream) { - - mul_mat_vec_q_cuda - (vx, vy, dst, ncols_x, nrows_x, nrows_y, ncols_y, nrows_dst, stream); -} - -static void mul_mat_vec_q3_K_q8_1_cuda( - const void * vx, const void * vy, float * dst, - const int ncols_x, const int nrows_x, const int nrows_y, const int ncols_y, const int nrows_dst, cudaStream_t stream) { - - mul_mat_vec_q_cuda - (vx, vy, dst, ncols_x, nrows_x, nrows_y, ncols_y, nrows_dst, stream); -} - -static void mul_mat_vec_q4_K_q8_1_cuda( - const void * vx, const void * vy, float * dst, - const int ncols_x, const int nrows_x, const int nrows_y, const int ncols_y, const int nrows_dst, cudaStream_t stream) { - - mul_mat_vec_q_cuda - (vx, vy, dst, ncols_x, nrows_x, nrows_y, ncols_y, nrows_dst, stream); -} - -static void mul_mat_vec_q5_K_q8_1_cuda( - const void * vx, const void * vy, float * dst, - const int ncols_x, const int nrows_x, const int nrows_y, const int ncols_y, const int nrows_dst, cudaStream_t stream) { - - mul_mat_vec_q_cuda - (vx, vy, dst, ncols_x, nrows_x, nrows_y, ncols_y, nrows_dst, stream); -} - -static void mul_mat_vec_q6_K_q8_1_cuda( - const void * vx, const void * vy, float * dst, - const int ncols_x, const int nrows_x, const int nrows_y, const int ncols_y, const int nrows_dst, cudaStream_t stream) { - - mul_mat_vec_q_cuda - (vx, vy, dst, ncols_x, nrows_x, nrows_y, ncols_y, nrows_dst, stream); -} - -static void mul_mat_vec_iq2_xxs_q8_1_cuda( - const void * vx, const void * vy, float * dst, - const int ncols_x, const int nrows_x, const int nrows_y, const int ncols_y, const int nrows_dst, cudaStream_t stream) { - - mul_mat_vec_q_cuda - (vx, vy, dst, ncols_x, nrows_x, nrows_y, ncols_y, nrows_dst, stream); -} - -static void mul_mat_vec_iq2_xs_q8_1_cuda( - const void * vx, const void * vy, float * dst, - const int ncols_x, const int nrows_x, const int nrows_y, const int ncols_y, const int nrows_dst, cudaStream_t stream) { - - mul_mat_vec_q_cuda - (vx, vy, dst, ncols_x, nrows_x, nrows_y, ncols_y, nrows_dst, stream); -} - -static void mul_mat_vec_iq2_s_q8_1_cuda( - const void * vx, const void * vy, float * dst, - const int ncols_x, const int nrows_x, const int nrows_y, const int ncols_y, const int nrows_dst, cudaStream_t stream) { - - mul_mat_vec_q_cuda - (vx, vy, dst, ncols_x, nrows_x, nrows_y, ncols_y, nrows_dst, stream); -} - -static void mul_mat_vec_iq3_xxs_q8_1_cuda( - const void * vx, const void * vy, float * dst, - const int ncols_x, const int nrows_x, const int nrows_y, const int ncols_y, const int nrows_dst, cudaStream_t stream) { - - mul_mat_vec_q_cuda - (vx, vy, dst, ncols_x, nrows_x, nrows_y, ncols_y, nrows_dst, stream); -} - -static void mul_mat_vec_iq1_s_q8_1_cuda( - const void * vx, const void * vy, float * dst, - const int ncols_x, const int nrows_x, const int nrows_y, const int ncols_y, const int nrows_dst, cudaStream_t stream) { - - mul_mat_vec_q_cuda - (vx, vy, dst, ncols_x, nrows_x, nrows_y, ncols_y, nrows_dst, stream); -} - -static void mul_mat_vec_iq1_m_q8_1_cuda( - const void * vx, const void * vy, float * dst, - const int ncols_x, const int nrows_x, const int nrows_y, const int ncols_y, const int nrows_dst, cudaStream_t stream) { - - mul_mat_vec_q_cuda - (vx, vy, dst, ncols_x, nrows_x, nrows_y, ncols_y, nrows_dst, stream); -} - -static void mul_mat_vec_iq4_nl_q8_1_cuda( - const void * vx, const void * vy, float * dst, - const int ncols_x, const int nrows_x, const int nrows_y, const int ncols_y, const int nrows_dst, cudaStream_t stream) { - - mul_mat_vec_q_cuda - (vx, vy, dst, ncols_x, nrows_x, nrows_y, ncols_y, nrows_dst, stream); -} - -static void mul_mat_vec_iq4_xs_q8_1_cuda( - const void * vx, const void * vy, float * dst, - const int ncols_x, const int nrows_x, const int nrows_y, const int ncols_y, const int nrows_dst, cudaStream_t stream) { - - mul_mat_vec_q_cuda - (vx, vy, dst, ncols_x, nrows_x, nrows_y, ncols_y, nrows_dst, stream); -} - -static void mul_mat_vec_iq3_s_q8_1_cuda( - const void * vx, const void * vy, float * dst, - const int ncols_x, const int nrows_x, const int nrows_y, const int ncols_y, const int nrows_dst, cudaStream_t stream) { - - mul_mat_vec_q_cuda - (vx, vy, dst, ncols_x, nrows_x, nrows_y, ncols_y, nrows_dst, stream); -} - -void ggml_cuda_op_mul_mat_vec_q( - ggml_backend_cuda_context & ctx, - const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst, const char * src0_dd_i, const float * src1_ddf_i, - const char * src1_ddq_i, float * dst_dd_i, const int64_t row_low, const int64_t row_high, const int64_t src1_ncols, - const int64_t src1_padded_row_size, cudaStream_t stream) { - - const int64_t ne00 = src0->ne[0]; - const int64_t row_diff = row_high - row_low; - - const int64_t ne10 = src1->ne[0]; - GGML_ASSERT(ne10 % QK8_1 == 0); - - const int64_t ne0 = dst->ne[0]; - - int id; - CUDA_CHECK(cudaGetDevice(&id)); - - // the main device has a larger memory buffer to hold the results from all GPUs - // nrows_dst == nrows of the matrix that the kernel writes into - const int64_t nrows_dst = id == ctx.device ? ne0 : row_diff; - - switch (src0->type) { - case GGML_TYPE_Q4_0: - mul_mat_vec_q4_0_q8_1_cuda(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, src1_padded_row_size, src1_ncols, nrows_dst, stream); - break; - case GGML_TYPE_Q4_1: - mul_mat_vec_q4_1_q8_1_cuda(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, src1_padded_row_size, src1_ncols, nrows_dst, stream); - break; - case GGML_TYPE_Q5_0: - mul_mat_vec_q5_0_q8_1_cuda(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, src1_padded_row_size, src1_ncols, nrows_dst, stream); - break; - case GGML_TYPE_Q5_1: - mul_mat_vec_q5_1_q8_1_cuda(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, src1_padded_row_size, src1_ncols, nrows_dst, stream); - break; - case GGML_TYPE_Q8_0: - mul_mat_vec_q8_0_q8_1_cuda(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, src1_padded_row_size, src1_ncols, nrows_dst, stream); - break; - case GGML_TYPE_Q2_K: - mul_mat_vec_q2_K_q8_1_cuda(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, src1_padded_row_size, src1_ncols, nrows_dst, stream); - break; - case GGML_TYPE_Q3_K: - mul_mat_vec_q3_K_q8_1_cuda(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, src1_padded_row_size, src1_ncols, nrows_dst, stream); - break; - case GGML_TYPE_Q4_K: - mul_mat_vec_q4_K_q8_1_cuda(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, src1_padded_row_size, src1_ncols, nrows_dst, stream); - break; - case GGML_TYPE_Q5_K: - mul_mat_vec_q5_K_q8_1_cuda(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, src1_padded_row_size, src1_ncols, nrows_dst, stream); - break; - case GGML_TYPE_Q6_K: - mul_mat_vec_q6_K_q8_1_cuda(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, src1_padded_row_size, src1_ncols, nrows_dst, stream); - break; - case GGML_TYPE_IQ2_XXS: - mul_mat_vec_iq2_xxs_q8_1_cuda(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, src1_padded_row_size, src1_ncols, nrows_dst, stream); - break; - case GGML_TYPE_IQ2_XS: - mul_mat_vec_iq2_xs_q8_1_cuda(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, src1_padded_row_size, src1_ncols, nrows_dst, stream); - break; - case GGML_TYPE_IQ2_S: - mul_mat_vec_iq2_s_q8_1_cuda(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, src1_padded_row_size, src1_ncols, nrows_dst, stream); - break; - case GGML_TYPE_IQ3_XXS: - mul_mat_vec_iq3_xxs_q8_1_cuda(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, src1_padded_row_size, src1_ncols, nrows_dst, stream); - break; - case GGML_TYPE_IQ1_S: - mul_mat_vec_iq1_s_q8_1_cuda(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, src1_padded_row_size, src1_ncols, nrows_dst, stream); - break; - case GGML_TYPE_IQ1_M: - mul_mat_vec_iq1_m_q8_1_cuda(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, src1_padded_row_size, src1_ncols, nrows_dst, stream); - break; - case GGML_TYPE_IQ4_NL: - mul_mat_vec_iq4_nl_q8_1_cuda(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, src1_padded_row_size, src1_ncols, nrows_dst, stream); - break; - case GGML_TYPE_IQ4_XS: - mul_mat_vec_iq4_xs_q8_1_cuda(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, src1_padded_row_size, src1_ncols, nrows_dst, stream); - break; - case GGML_TYPE_IQ3_S: - mul_mat_vec_iq3_s_q8_1_cuda(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, src1_padded_row_size, src1_ncols, nrows_dst, stream); - break; - default: - GGML_ASSERT(false); - break; - } - - GGML_UNUSED(src1); - GGML_UNUSED(dst); - GGML_UNUSED(src1_ddf_i); - GGML_UNUSED(src1_ncols); - GGML_UNUSED(src1_padded_row_size); -} diff --git a/ggml-cuda/mmvq.cuh b/ggml-cuda/mmvq.cuh deleted file mode 100644 index 88c42c4b7a8..00000000000 --- a/ggml-cuda/mmvq.cuh +++ /dev/null @@ -1,7 +0,0 @@ -#include "common.cuh" - -void ggml_cuda_op_mul_mat_vec_q( - ggml_backend_cuda_context & ctx, - const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst, const char * src0_dd_i, const float * src1_ddf_i, - const char * src1_ddq_i, float * dst_dd_i, const int64_t row_low, const int64_t row_high, const int64_t src1_ncols, - const int64_t src1_padded_row_size, cudaStream_t stream); diff --git a/ggml-cuda/norm.cu b/ggml-cuda/norm.cu deleted file mode 100644 index 86f77453449..00000000000 --- a/ggml-cuda/norm.cu +++ /dev/null @@ -1,215 +0,0 @@ -#include "norm.cuh" - -template -static __global__ void norm_f32(const float * x, float * dst, const int ncols, const float eps) { - const int row = blockIdx.x*blockDim.y + threadIdx.y; - const int tid = threadIdx.x; - - float2 mean_var = make_float2(0.f, 0.f); - - for (int col = tid; col < ncols; col += block_size) { - const float xi = x[row*ncols + col]; - mean_var.x += xi; - mean_var.y += xi * xi; - } - - // sum up partial sums - mean_var = warp_reduce_sum(mean_var); - if (block_size > WARP_SIZE) { - __shared__ float2 s_sum[32]; - int warp_id = threadIdx.x / WARP_SIZE; - int lane_id = threadIdx.x % WARP_SIZE; - if (lane_id == 0) { - s_sum[warp_id] = mean_var; - } - __syncthreads(); - mean_var = s_sum[lane_id]; - mean_var = warp_reduce_sum(mean_var); - } - - const float mean = mean_var.x / ncols; - const float var = mean_var.y / ncols - mean * mean; - const float inv_std = rsqrtf(var + eps); - - for (int col = tid; col < ncols; col += block_size) { - dst[row*ncols + col] = (x[row*ncols + col] - mean) * inv_std; - } -} - -template -static __global__ void group_norm_f32(const float * x, float * dst, const int group_size, const int ne_elements, const float eps) { - // blockIdx.x: num_groups idx - // threadIdx.x: block_size idx - int start = blockIdx.x * group_size; - int end = start + group_size; - - start += threadIdx.x; - - if (end >= ne_elements) { - end = ne_elements; - } - - float tmp = 0.0f; // partial sum for thread in warp - - for (int j = start; j < end; j += block_size) { - tmp += x[j]; - } - - tmp = warp_reduce_sum(tmp); - if (block_size > WARP_SIZE) { - __shared__ float s_sum[32]; - int warp_id = threadIdx.x / WARP_SIZE; - int lane_id = threadIdx.x % WARP_SIZE; - if (lane_id == 0) { - s_sum[warp_id] = tmp; - } - __syncthreads(); - tmp = s_sum[lane_id]; - tmp = warp_reduce_sum(tmp); - } - - float mean = tmp / group_size; - tmp = 0.0f; - - for (int j = start; j < end; j += block_size) { - float xi = x[j] - mean; - dst[j] = xi; - tmp += xi * xi; - } - - tmp = warp_reduce_sum(tmp); - if (block_size > WARP_SIZE) { - __shared__ float s_sum[32]; - int warp_id = threadIdx.x / WARP_SIZE; - int lane_id = threadIdx.x % WARP_SIZE; - if (lane_id == 0) { - s_sum[warp_id] = tmp; - } - __syncthreads(); - tmp = s_sum[lane_id]; - tmp = warp_reduce_sum(tmp); - } - - float variance = tmp / group_size; - float scale = rsqrtf(variance + eps); - for (int j = start; j < end; j += block_size) { - dst[j] *= scale; - } -} - -template -static __global__ void rms_norm_f32(const float * x, float * dst, const int ncols, const float eps) { - const int row = blockIdx.x*blockDim.y + threadIdx.y; - const int tid = threadIdx.x; - - float tmp = 0.0f; // partial sum for thread in warp - - for (int col = tid; col < ncols; col += block_size) { - const float xi = x[row*ncols + col]; - tmp += xi * xi; - } - - // sum up partial sums - tmp = warp_reduce_sum(tmp); - if (block_size > WARP_SIZE) { - __shared__ float s_sum[32]; - int warp_id = threadIdx.x / WARP_SIZE; - int lane_id = threadIdx.x % WARP_SIZE; - if (lane_id == 0) { - s_sum[warp_id] = tmp; - } - __syncthreads(); - tmp = s_sum[lane_id]; - tmp = warp_reduce_sum(tmp); - } - - const float mean = tmp / ncols; - const float scale = rsqrtf(mean + eps); - - for (int col = tid; col < ncols; col += block_size) { - dst[row*ncols + col] = scale * x[row*ncols + col]; - } -} - -static void norm_f32_cuda(const float * x, float * dst, const int ncols, const int nrows, const float eps, cudaStream_t stream) { - GGML_ASSERT(ncols % WARP_SIZE == 0); - if (ncols < 1024) { - const dim3 block_dims(WARP_SIZE, 1, 1); - norm_f32<<>>(x, dst, ncols, eps); - } else { - const dim3 block_dims(1024, 1, 1); - norm_f32<1024><<>>(x, dst, ncols, eps); - } -} - -static void group_norm_f32_cuda(const float * x, float * dst, const int num_groups, const int group_size, const int ne_elements, cudaStream_t stream) { - static const float eps = 1e-6f; - if (group_size < 1024) { - const dim3 block_dims(WARP_SIZE, 1, 1); - group_norm_f32<<>>(x, dst, group_size, ne_elements, eps); - } else { - const dim3 block_dims(1024, 1, 1); - group_norm_f32<1024><<>>(x, dst, group_size, ne_elements, eps); - } -} - -static void rms_norm_f32_cuda(const float * x, float * dst, const int ncols, const int nrows, const float eps, cudaStream_t stream) { - GGML_ASSERT(ncols % WARP_SIZE == 0); - if (ncols < 1024) { - const dim3 block_dims(WARP_SIZE, 1, 1); - rms_norm_f32<<>>(x, dst, ncols, eps); - } else { - const dim3 block_dims(1024, 1, 1); - rms_norm_f32<1024><<>>(x, dst, ncols, eps); - } -} - -void ggml_cuda_op_norm(ggml_backend_cuda_context & ctx, ggml_tensor * dst) { - const ggml_tensor * src0 = dst->src[0]; - const float * src0_d = (const float *)src0->data; - float * dst_d = (float *)dst->data; - cudaStream_t stream = ctx.stream(); - - GGML_ASSERT(src0->type == GGML_TYPE_F32); - GGML_ASSERT( dst->type == GGML_TYPE_F32); - - const int64_t ne00 = src0->ne[0]; - const int64_t nrows = ggml_nrows(src0); - - float eps; - memcpy(&eps, dst->op_params, sizeof(float)); - - norm_f32_cuda(src0_d, dst_d, ne00, nrows, eps, stream); -} - -void ggml_cuda_op_group_norm(ggml_backend_cuda_context & ctx, ggml_tensor * dst) { - const ggml_tensor * src0 = dst->src[0]; - const float * src0_d = (const float *)src0->data; - float * dst_d = (float *)dst->data; - cudaStream_t stream = ctx.stream(); - - GGML_ASSERT(src0->type == GGML_TYPE_F32); - GGML_ASSERT( dst->type == GGML_TYPE_F32); - - int num_groups = dst->op_params[0]; - int group_size = src0->ne[0] * src0->ne[1] * ((src0->ne[2] + num_groups - 1) / num_groups); - group_norm_f32_cuda(src0_d, dst_d, num_groups * src0->ne[3], group_size, ggml_nelements(src0), stream); -} - -void ggml_cuda_op_rms_norm(ggml_backend_cuda_context & ctx, ggml_tensor * dst) { - const ggml_tensor * src0 = dst->src[0]; - const float * src0_d = (const float *)src0->data; - float * dst_d = (float *)dst->data; - cudaStream_t stream = ctx.stream(); - - GGML_ASSERT(src0->type == GGML_TYPE_F32); - GGML_ASSERT( dst->type == GGML_TYPE_F32); - - const int64_t ne00 = src0->ne[0]; - const int64_t nrows = ggml_nrows(src0); - - float eps; - memcpy(&eps, dst->op_params, sizeof(float)); - - rms_norm_f32_cuda(src0_d, dst_d, ne00, nrows, eps, stream); -} diff --git a/ggml-cuda/norm.cuh b/ggml-cuda/norm.cuh deleted file mode 100644 index 431a8f74d55..00000000000 --- a/ggml-cuda/norm.cuh +++ /dev/null @@ -1,7 +0,0 @@ -#include "common.cuh" - -void ggml_cuda_op_norm(ggml_backend_cuda_context & ctx, ggml_tensor * dst); - -void ggml_cuda_op_group_norm(ggml_backend_cuda_context & ctx, ggml_tensor * dst); - -void ggml_cuda_op_rms_norm(ggml_backend_cuda_context & ctx, ggml_tensor * dst); diff --git a/ggml-cuda/pad.cu b/ggml-cuda/pad.cu deleted file mode 100644 index aba539e8dad..00000000000 --- a/ggml-cuda/pad.cu +++ /dev/null @@ -1,49 +0,0 @@ -#include "pad.cuh" - -static __global__ void pad_f32(const float * x, float * dst, const int ne0, const int ne00, const int ne01, const int ne02, const int ne03) { - // blockIdx.z: idx of ne2*ne3, aka ne02*ne03 - // blockIdx.y: idx of ne1 - // blockIDx.x: idx of ne0 / BLOCK_SIZE - int nidx = threadIdx.x + blockIdx.x * blockDim.x; - if (nidx >= ne0) { - return; - } - - // operation - int offset_dst = - nidx + - blockIdx.y * ne0 + - blockIdx.z * ne0 * gridDim.y; - if (nidx < ne00 && blockIdx.y < ne01 && blockIdx.z < ne02*ne03) { - int offset_src = - nidx + - blockIdx.y * ne00 + - blockIdx.z * ne00 * ne01; - dst[offset_dst] = x[offset_src]; - } else { - dst[offset_dst] = 0.0f; - } -} - -static void pad_f32_cuda(const float * x, float * dst, - const int ne00, const int ne01, const int ne02, const int ne03, - const int ne0, const int ne1, const int ne2, const int ne3, cudaStream_t stream) { - int num_blocks = (ne0 + CUDA_PAD_BLOCK_SIZE - 1) / CUDA_PAD_BLOCK_SIZE; - dim3 gridDim(num_blocks, ne1, ne2*ne3); - pad_f32<<>>(x, dst, ne0, ne00, ne01, ne02, ne03); -} - -void ggml_cuda_op_pad(ggml_backend_cuda_context & ctx, ggml_tensor * dst) { - const ggml_tensor * src0 = dst->src[0]; - const float * src0_d = (const float *)src0->data; - float * dst_d = (float *)dst->data; - cudaStream_t stream = ctx.stream(); - - GGML_ASSERT(src0->type == GGML_TYPE_F32); - GGML_ASSERT(dst->type == GGML_TYPE_F32); - GGML_ASSERT(src0->ne[3] == 1 && dst->ne[3] == 1); // just 3D tensors - - pad_f32_cuda(src0_d, dst_d, - src0->ne[0], src0->ne[1], src0->ne[2], src0->ne[3], - dst->ne[0], dst->ne[1], dst->ne[2], dst->ne[3], stream); -} diff --git a/ggml-cuda/pad.cuh b/ggml-cuda/pad.cuh deleted file mode 100644 index 8fd386b008c..00000000000 --- a/ggml-cuda/pad.cuh +++ /dev/null @@ -1,5 +0,0 @@ -#include "common.cuh" - -#define CUDA_PAD_BLOCK_SIZE 256 - -void ggml_cuda_op_pad(ggml_backend_cuda_context & ctx, ggml_tensor * dst); diff --git a/ggml-cuda/pool2d.cu b/ggml-cuda/pool2d.cu deleted file mode 100644 index c6d51e4d655..00000000000 --- a/ggml-cuda/pool2d.cu +++ /dev/null @@ -1,94 +0,0 @@ -#include "pool2d.cuh" - -template -static __global__ void pool2d_nchw_kernel( - const int ih, const int iw, const int oh, const int ow, - const int kh, const int kw, const int sh, const int sw, - const int ph, const int pw, const int parallel_elements, - const Ti* src, To* dst, const enum ggml_op_pool op) { - int idx = threadIdx.x + blockIdx.x * blockDim.x; - if (idx >= parallel_elements) { - return; - } - - const int I_HW = ih * iw; - const int O_HW = oh * ow; - const int nc = idx / O_HW; - const int cur_oh = idx % O_HW / ow; - const int cur_ow = idx % O_HW % ow; - const Ti* i_ptr = src + nc * I_HW; - To* o_ptr = dst + nc * O_HW; - const int start_h = cur_oh * sh - ph; - const int bh = max(0, start_h); - const int eh = min(ih, start_h + kh); - const int start_w = cur_ow * sw - pw; - const int bw = max(0, start_w); - const int ew = min(iw, start_w + kw); - const To scale = 1. / (kh * kw); - To res = 0; - - switch (op) { - case GGML_OP_POOL_AVG: res = 0; break; - case GGML_OP_POOL_MAX: res = -FLT_MAX; break; - default: assert(false); - } - - for (int i = bh; i < eh; i += 1) { - for (int j = bw; j < ew; j += 1) { -#if __CUDA_ARCH__ >= 350 - Ti cur = __ldg(i_ptr + i * iw + j); -#else - Ti cur = i_ptr[i * iw + j]; -#endif - switch (op) { - case GGML_OP_POOL_AVG: res += cur * scale; break; - case GGML_OP_POOL_MAX: res = max(res, (To)cur); break; - default: assert(false); - } - } - } - o_ptr[cur_oh * ow + cur_ow] = res; -} - -static void pool2d_nchw_kernel_f32_f32_cuda( - const int ih, const int iw, const int oh, const int ow, - const int kh, const int kw, const int sh, const int sw, - const int ph, const int pw, const int parallel_elements, - const float * src, float * dst, const enum ggml_op_pool op, - cudaStream_t stream) { - - const int num_blocks = (parallel_elements + CUDA_POOL2D_BLOCK_SIZE - 1) / CUDA_POOL2D_BLOCK_SIZE; - dim3 block_nums(num_blocks); - pool2d_nchw_kernel<<>>(ih, iw, oh, ow, kh, kw, sh, sw, ph, pw, parallel_elements, src, dst, op); -} - -void ggml_cuda_op_pool2d(ggml_backend_cuda_context & ctx, ggml_tensor * dst) { - const ggml_tensor * src0 = dst->src[0]; - const float * src0_d = (const float *)src0->data; - float * dst_d = (float *)dst->data; - cudaStream_t stream = ctx.stream(); - - GGML_ASSERT(src0->type == GGML_TYPE_F32); - GGML_ASSERT( dst->type == GGML_TYPE_F32); - - const int32_t * opts = (const int32_t *)dst->op_params; - enum ggml_op_pool op = static_cast(opts[0]); - const int k0 = opts[1]; - const int k1 = opts[2]; - const int s0 = opts[3]; - const int s1 = opts[4]; - const int p0 = opts[5]; - const int p1 = opts[6]; - - const int64_t IH = src0->ne[1]; - const int64_t IW = src0->ne[0]; - - const int64_t N = dst->ne[3]; - const int64_t OC = dst->ne[2]; - const int64_t OH = dst->ne[1]; - const int64_t OW = dst->ne[0]; - - const int parallel_elements = N * OC * OH * OW; - - pool2d_nchw_kernel_f32_f32_cuda(IH, IW, OH, OW, k1, k0, s1, s0, p1, p0, parallel_elements, src0_d, dst_d, op, stream); -} diff --git a/ggml-cuda/pool2d.cuh b/ggml-cuda/pool2d.cuh deleted file mode 100644 index 7841292bcc2..00000000000 --- a/ggml-cuda/pool2d.cuh +++ /dev/null @@ -1,5 +0,0 @@ -#include "common.cuh" - -#define CUDA_POOL2D_BLOCK_SIZE 256 - -void ggml_cuda_op_pool2d(ggml_backend_cuda_context & ctx, ggml_tensor * dst); diff --git a/ggml-cuda/quantize.cu b/ggml-cuda/quantize.cu deleted file mode 100644 index 7578c4b6c7c..00000000000 --- a/ggml-cuda/quantize.cu +++ /dev/null @@ -1,45 +0,0 @@ -#include "quantize.cuh" - -static __global__ void quantize_q8_1(const float * __restrict__ x, void * __restrict__ vy, const int64_t kx, const int64_t kx_padded) { - const int64_t ix = (int64_t)blockDim.x*blockIdx.x + threadIdx.x; - - if (ix >= kx_padded) { - return; - } - - const int64_t iy = (int64_t)blockDim.y*blockIdx.y + threadIdx.y; - - const int64_t i_padded = (int64_t)iy*kx_padded + ix; - - block_q8_1 * y = (block_q8_1 *) vy; - - const int64_t ib = i_padded / QK8_1; // block index - const int64_t iqs = i_padded % QK8_1; // quant index - - const float xi = ix < kx ? x[iy*kx + ix] : 0.0f; - float amax = fabsf(xi); - float sum = xi; - - amax = warp_reduce_max(amax); - sum = warp_reduce_sum(sum); - - const float d = amax / 127; - const int8_t q = amax == 0.0f ? 0 : roundf(xi / d); - - y[ib].qs[iqs] = q; - - if (iqs > 0) { - return; - } - - reinterpret_cast(y[ib].ds.x) = d; - reinterpret_cast(y[ib].ds.y) = sum; -} - -void quantize_row_q8_1_cuda(const float * x, void * vy, const int64_t kx, const int64_t ky, const int64_t kx_padded, cudaStream_t stream) { - const int64_t block_num_x = (kx_padded + CUDA_QUANTIZE_BLOCK_SIZE - 1) / CUDA_QUANTIZE_BLOCK_SIZE; - const dim3 num_blocks(block_num_x, ky, 1); - const dim3 block_size(CUDA_QUANTIZE_BLOCK_SIZE, 1, 1); - quantize_q8_1<<>>(x, vy, kx, kx_padded); -} - diff --git a/ggml-cuda/quantize.cuh b/ggml-cuda/quantize.cuh deleted file mode 100644 index b37a4752f2d..00000000000 --- a/ggml-cuda/quantize.cuh +++ /dev/null @@ -1,5 +0,0 @@ -#include "common.cuh" - -#define CUDA_QUANTIZE_BLOCK_SIZE 256 - -void quantize_row_q8_1_cuda(const float * x, void * vy, const int64_t kx, const int64_t ky, const int64_t kx_padded, cudaStream_t stream); diff --git a/ggml-cuda/rope.cu b/ggml-cuda/rope.cu deleted file mode 100644 index 4b0d2e5adbb..00000000000 --- a/ggml-cuda/rope.cu +++ /dev/null @@ -1,308 +0,0 @@ -#include "rope.cuh" - -struct rope_corr_dims { - float v[4]; -}; - -static __device__ float rope_yarn_ramp(const float low, const float high, const int i0) { - const float y = (i0 / 2 - low) / max(0.001f, high - low); - return 1.0f - min(1.0f, max(0.0f, y)); -} - -// YaRN algorithm based on LlamaYaRNScaledRotaryEmbedding.py from https://github.com/jquesnelle/yarn -// MIT licensed. Copyright (c) 2023 Jeffrey Quesnelle and Bowen Peng. -static __device__ void rope_yarn( - float theta_extrap, float freq_scale, rope_corr_dims corr_dims, int64_t i0, float ext_factor, float mscale, - float * cos_theta, float * sin_theta -) { - // Get n-d rotational scaling corrected for extrapolation - float theta_interp = freq_scale * theta_extrap; - float theta = theta_interp; - if (ext_factor != 0.0f) { - float ramp_mix = rope_yarn_ramp(corr_dims.v[0], corr_dims.v[1], i0) * ext_factor; - theta = theta_interp * (1 - ramp_mix) + theta_extrap * ramp_mix; - - // Get n-d magnitude scaling corrected for interpolation - mscale *= 1.0f + 0.1f * logf(1.0f / freq_scale); - } - *cos_theta = cosf(theta) * mscale; - *sin_theta = sinf(theta) * mscale; -} - -// rope == RoPE == rotary positional embedding -template -static __global__ void rope( - const T * x, T * dst, int ncols, const int32_t * pos, float freq_scale, int p_delta_rows, float freq_base, - float ext_factor, float attn_factor, rope_corr_dims corr_dims -) { - const int col = 2*(blockDim.y*blockIdx.y + threadIdx.y); - - if (col >= ncols) { - return; - } - - const int row = blockDim.x*blockIdx.x + threadIdx.x; - const int i = row*ncols + col; - const int i2 = row/p_delta_rows; - - const int p = has_pos ? pos[i2] : 0; - const float theta_base = p*powf(freq_base, -float(col)/ncols); - - float cos_theta, sin_theta; - rope_yarn(theta_base, freq_scale, corr_dims, col, ext_factor, attn_factor, &cos_theta, &sin_theta); - - const float x0 = x[i + 0]; - const float x1 = x[i + 1]; - - dst[i + 0] = x0*cos_theta - x1*sin_theta; - dst[i + 1] = x0*sin_theta + x1*cos_theta; -} - -template -static __global__ void rope_neox( - const T * x, T * dst, int ncols, int n_dims, const int32_t * pos, float freq_scale, int p_delta_rows, - float ext_factor, float attn_factor, rope_corr_dims corr_dims, float theta_scale, float inv_ndims -) { - const int col = 2*(blockDim.y*blockIdx.y + threadIdx.y); - - if (col >= ncols) { - return; - } - - const int row = blockDim.x*blockIdx.x + threadIdx.x; - const int ib = col / n_dims; - const int ic = col % n_dims; - - if (ib > 0) { - const int i = row*ncols + ib*n_dims + ic; - - dst[i + 0] = x[i + 0]; - dst[i + 1] = x[i + 1]; - - return; - } - - const int i = row*ncols + ib*n_dims + ic/2; - const int i2 = row/p_delta_rows; - - float cur_rot = inv_ndims * ic - ib; - - const int p = has_pos ? pos[i2] : 0; - const float theta_base = p*freq_scale*powf(theta_scale, col/2.0f); - - float cos_theta, sin_theta; - rope_yarn(theta_base, freq_scale, corr_dims, cur_rot, ext_factor, attn_factor, &cos_theta, &sin_theta); - - const float x0 = x[i + 0]; - const float x1 = x[i + n_dims/2]; - - dst[i + 0] = x0*cos_theta - x1*sin_theta; - dst[i + n_dims/2] = x0*sin_theta + x1*cos_theta; -} - -static __global__ void rope_glm_f32( - const float * x, float * dst, int ncols, const int32_t * pos, float freq_scale, int p_delta_rows, float freq_base, - int n_ctx -) { - const int col = blockDim.x*blockIdx.x + threadIdx.x; - const int half_n_dims = ncols/4; - - if (col >= half_n_dims) { - return; - } - - const int row = blockDim.y*blockIdx.y + threadIdx.y; - const int i = row*ncols + col; - const int i2 = row/p_delta_rows; - - const float col_theta_scale = powf(freq_base, -2.0f*col/ncols); - // FIXME: this is likely wrong - const int p = pos != nullptr ? pos[i2] : 0; - - const float theta = min(p, n_ctx - 2)*freq_scale*col_theta_scale; - const float sin_theta = sinf(theta); - const float cos_theta = cosf(theta); - - const float x0 = x[i + 0]; - const float x1 = x[i + half_n_dims]; - - dst[i + 0] = x0*cos_theta - x1*sin_theta; - dst[i + half_n_dims] = x0*sin_theta + x1*cos_theta; - - const float block_theta = ((float)max(p - n_ctx - 2, 0))*col_theta_scale; - const float sin_block_theta = sinf(block_theta); - const float cos_block_theta = cosf(block_theta); - - const float x2 = x[i + half_n_dims * 2]; - const float x3 = x[i + half_n_dims * 3]; - - dst[i + half_n_dims * 2] = x2*cos_block_theta - x3*sin_block_theta; - dst[i + half_n_dims * 3] = x2*sin_block_theta + x3*cos_block_theta; -} - - -template -static void rope_cuda( - const T * x, T * dst, int ncols, int nrows, const int32_t * pos, float freq_scale, int p_delta_rows, - float freq_base, float ext_factor, float attn_factor, rope_corr_dims corr_dims, cudaStream_t stream -) { - GGML_ASSERT(ncols % 2 == 0); - const dim3 block_dims(1, CUDA_ROPE_BLOCK_SIZE, 1); - const int num_blocks_x = (ncols + 2*CUDA_ROPE_BLOCK_SIZE - 1) / (2*CUDA_ROPE_BLOCK_SIZE); - const dim3 block_nums(nrows, num_blocks_x, 1); - if (pos == nullptr) { - rope<<>>( - x, dst, ncols, pos, freq_scale, p_delta_rows, freq_base, ext_factor, attn_factor, corr_dims - ); - } else { - rope<<>>( - x, dst, ncols, pos, freq_scale, p_delta_rows, freq_base, ext_factor, attn_factor, corr_dims - ); - } -} - -template -static void rope_neox_cuda( - const T * x, T * dst, int ncols, int n_dims, int nrows, const int32_t * pos, float freq_scale, int p_delta_rows, - float freq_base, float ext_factor, float attn_factor, rope_corr_dims corr_dims, cudaStream_t stream -) { - GGML_ASSERT(ncols % 2 == 0); - const dim3 block_dims(1, CUDA_ROPE_BLOCK_SIZE, 1); - const int num_blocks_x = (ncols + 2*CUDA_ROPE_BLOCK_SIZE - 1) / (2*CUDA_ROPE_BLOCK_SIZE); - const dim3 block_nums(nrows, num_blocks_x, 1); - - const float theta_scale = powf(freq_base, -2.0f/n_dims); - const float inv_ndims = -1.0f / n_dims; - - if (pos == nullptr) { - rope_neox<<>>( - x, dst, ncols, n_dims, pos, freq_scale, p_delta_rows, ext_factor, attn_factor, corr_dims, - theta_scale, inv_ndims - ); - } else { - rope_neox<<>>( - x, dst, ncols, n_dims, pos, freq_scale, p_delta_rows, ext_factor, attn_factor, corr_dims, - theta_scale, inv_ndims - ); - } -} - -static void rope_glm_f32_cuda( - const float * x, float * dst, int ncols, int nrows, const int32_t * pos, float freq_scale, int p_delta_rows, - float freq_base, int n_ctx, cudaStream_t stream -) { - GGML_ASSERT(ncols % 4 == 0); - const dim3 block_dims(CUDA_ROPE_BLOCK_SIZE/4, 1, 1); - const int num_blocks_x = (ncols + CUDA_ROPE_BLOCK_SIZE - 1) / CUDA_ROPE_BLOCK_SIZE; - const dim3 block_nums(num_blocks_x, nrows, 1); - rope_glm_f32<<>>(x, dst, ncols, pos, freq_scale, p_delta_rows, freq_base, n_ctx); -} - -static void rope_cuda_f16( - const half * x, half * dst, int ncols, int nrows, const int32_t * pos, float freq_scale, int p_delta_rows, - float freq_base, float ext_factor, float attn_factor, rope_corr_dims corr_dims, cudaStream_t stream) { - - rope_cuda(x, dst, ncols, nrows, pos, freq_scale, p_delta_rows, freq_base, ext_factor, attn_factor, corr_dims, stream); -} - -static void rope_cuda_f32( - const float * x, float * dst, int ncols, int nrows, const int32_t * pos, float freq_scale, int p_delta_rows, - float freq_base, float ext_factor, float attn_factor, rope_corr_dims corr_dims, cudaStream_t stream) { - - rope_cuda(x, dst, ncols, nrows, pos, freq_scale, p_delta_rows, freq_base, ext_factor, attn_factor, corr_dims, stream); -} - -static void rope_neox_cuda_f16( - const half * x, half * dst, int ncols, int n_dims, int nrows, const int32_t * pos, float freq_scale, int p_delta_rows, - float freq_base, float ext_factor, float attn_factor, rope_corr_dims corr_dims, cudaStream_t stream) { - - rope_neox_cuda(x, dst, ncols, n_dims, nrows, pos, freq_scale, p_delta_rows, freq_base, ext_factor, attn_factor, corr_dims, stream); -} - -static void rope_neox_cuda_f32( - const float * x, float * dst, int ncols, int n_dims, int nrows, const int32_t * pos, float freq_scale, int p_delta_rows, - float freq_base, float ext_factor, float attn_factor, rope_corr_dims corr_dims, cudaStream_t stream -) { - - rope_neox_cuda(x, dst, ncols, n_dims, nrows, pos, freq_scale, p_delta_rows, freq_base, ext_factor, attn_factor, corr_dims, stream); -} - -void ggml_cuda_op_rope(ggml_backend_cuda_context & ctx, ggml_tensor * dst) { - const ggml_tensor * src0 = dst->src[0]; - const ggml_tensor * src1 = dst->src[1]; - const float * src0_d = (const float *)src0->data; - const float * src1_d = (const float *)src1->data; - float * dst_d = (float *)dst->data; - cudaStream_t stream = ctx.stream(); - - GGML_ASSERT(src0->type == GGML_TYPE_F32 || src0->type == GGML_TYPE_F16); - GGML_ASSERT( dst->type == GGML_TYPE_F32 || dst->type == GGML_TYPE_F16); - GGML_ASSERT(src0->type == dst->type); - - const int64_t ne00 = src0->ne[0]; - const int64_t ne01 = src0->ne[1]; - const int64_t ne2 = dst->ne[2]; - const int64_t nrows = ggml_nrows(src0); - - //const int n_past = ((int32_t *) dst->op_params)[0]; - const int n_dims = ((int32_t *) dst->op_params)[1]; - const int mode = ((int32_t *) dst->op_params)[2]; - const int n_ctx = ((int32_t *) dst->op_params)[3]; - const int n_orig_ctx = ((int32_t *) dst->op_params)[4]; - - // RoPE alteration for extended context - float freq_base, freq_scale, ext_factor, attn_factor, beta_fast, beta_slow; - memcpy(&freq_base, (int32_t *) dst->op_params + 5, sizeof(float)); - memcpy(&freq_scale, (int32_t *) dst->op_params + 6, sizeof(float)); - memcpy(&ext_factor, (int32_t *) dst->op_params + 7, sizeof(float)); - memcpy(&attn_factor, (int32_t *) dst->op_params + 8, sizeof(float)); - memcpy(&beta_fast, (int32_t *) dst->op_params + 9, sizeof(float)); - memcpy(&beta_slow, (int32_t *) dst->op_params + 10, sizeof(float)); - - const int32_t * pos = nullptr; - if ((mode & 1) == 0) { - GGML_ASSERT(src1->type == GGML_TYPE_I32); - GGML_ASSERT(src1->ne[0] == ne2); - pos = (const int32_t *) src1_d; - } - - const bool is_neox = mode & 2; - const bool is_glm = mode & 4; - - rope_corr_dims corr_dims; - ggml_rope_yarn_corr_dims(n_dims, n_orig_ctx, freq_base, beta_fast, beta_slow, corr_dims.v); - - // compute - if (is_glm) { - GGML_ASSERT(false); - rope_glm_f32_cuda(src0_d, dst_d, ne00, nrows, pos, freq_scale, ne01, freq_base, n_ctx, stream); - } else if (is_neox) { - if (src0->type == GGML_TYPE_F32) { - rope_neox_cuda_f32( - (const float *)src0_d, (float *)dst_d, ne00, n_dims, nrows, pos, freq_scale, ne01, freq_base, ext_factor, - attn_factor, corr_dims, stream - ); - } else if (src0->type == GGML_TYPE_F16) { - rope_neox_cuda_f16( - (const half *)src0_d, (half *)dst_d, ne00, n_dims, nrows, pos, freq_scale, ne01, freq_base, ext_factor, - attn_factor, corr_dims, stream - ); - } else { - GGML_ASSERT(false); - } - } else { - if (src0->type == GGML_TYPE_F32) { - rope_cuda_f32( - (const float *)src0_d, (float *)dst_d, ne00, nrows, pos, freq_scale, ne01, freq_base, ext_factor, - attn_factor, corr_dims, stream - ); - } else if (src0->type == GGML_TYPE_F16) { - rope_cuda_f16( - (const half *)src0_d, (half *)dst_d, ne00, nrows, pos, freq_scale, ne01, freq_base, ext_factor, - attn_factor, corr_dims, stream - ); - } else { - GGML_ASSERT(false); - } - } -} diff --git a/ggml-cuda/rope.cuh b/ggml-cuda/rope.cuh deleted file mode 100644 index 0f787a0b2f7..00000000000 --- a/ggml-cuda/rope.cuh +++ /dev/null @@ -1,5 +0,0 @@ -#include "common.cuh" - -#define CUDA_ROPE_BLOCK_SIZE 256 - -void ggml_cuda_op_rope(ggml_backend_cuda_context & ctx, ggml_tensor * dst); diff --git a/ggml-cuda/scale.cu b/ggml-cuda/scale.cu deleted file mode 100644 index 6e3617d1cdb..00000000000 --- a/ggml-cuda/scale.cu +++ /dev/null @@ -1,32 +0,0 @@ -#include "scale.cuh" - -static __global__ void scale_f32(const float * x, float * dst, const float scale, const int k) { - const int i = blockDim.x*blockIdx.x + threadIdx.x; - - if (i >= k) { - return; - } - - dst[i] = scale * x[i]; -} - -static void scale_f32_cuda(const float * x, float * dst, const float scale, const int k, cudaStream_t stream) { - const int num_blocks = (k + CUDA_SCALE_BLOCK_SIZE - 1) / CUDA_SCALE_BLOCK_SIZE; - scale_f32<<>>(x, dst, scale, k); -} - -void ggml_cuda_op_scale(ggml_backend_cuda_context & ctx, ggml_tensor * dst) { - const ggml_tensor * src0 = dst->src[0]; - const float * src0_d = (const float *)src0->data; - float * dst_d = (float *)dst->data; - cudaStream_t stream = ctx.stream(); - - GGML_ASSERT(src0->type == GGML_TYPE_F32); - GGML_ASSERT( dst->type == GGML_TYPE_F32); - - float scale; - memcpy(&scale, dst->op_params, sizeof(float)); - - scale_f32_cuda(src0_d, dst_d, scale, ggml_nelements(src0), stream); - CUDA_CHECK(cudaGetLastError()); -} diff --git a/ggml-cuda/scale.cuh b/ggml-cuda/scale.cuh deleted file mode 100644 index 8ff75c8298b..00000000000 --- a/ggml-cuda/scale.cuh +++ /dev/null @@ -1,5 +0,0 @@ -#include "common.cuh" - -#define CUDA_SCALE_BLOCK_SIZE 256 - -void ggml_cuda_op_scale(ggml_backend_cuda_context & ctx, ggml_tensor * dst); diff --git a/ggml-cuda/softmax.cu b/ggml-cuda/softmax.cu deleted file mode 100644 index 9bda18e581c..00000000000 --- a/ggml-cuda/softmax.cu +++ /dev/null @@ -1,201 +0,0 @@ -#include "softmax.cuh" - -template -static __global__ void soft_max_f32(const float * x, const float * mask, const float * pos, float * dst, const int ncols_par, const int nrows_y, const float scale, const float max_bias, const float m0, const float m1, uint32_t n_head_log2) { - const int ncols = ncols_template == 0 ? ncols_par : ncols_template; - - const int tid = threadIdx.x; - const int rowx = blockIdx.x; - const int rowy = rowx % nrows_y; // broadcast the mask in the row dimension - - const int block_size = block_size_template == 0 ? blockDim.x : block_size_template; - - const int warp_id = threadIdx.x / WARP_SIZE; - const int lane_id = threadIdx.x % WARP_SIZE; - - float slope = 0.0f; - - // ALiBi - if (max_bias > 0.0f) { - const int h = rowx/nrows_y; // head index - - const float base = h < n_head_log2 ? m0 : m1; - const int exp = h < n_head_log2 ? h + 1 : 2*(h - n_head_log2) + 1; - - slope = powf(base, exp); - } - - extern __shared__ float data_soft_max_f32[]; - float * buf_iw = data_soft_max_f32; // shared memory buffer for inter-warp communication - // shared memory buffer to cache values between iterations: - float * vals = vals_smem ? buf_iw + WARP_SIZE : dst + rowx*ncols; - - float max_val = -INFINITY; - -#pragma unroll - for (int col0 = 0; col0 < ncols; col0 += block_size) { - const int col = col0 + tid; - - if (ncols_template == 0 && col >= ncols) { - break; - } - - const int ix = rowx*ncols + col; - const int iy = rowy*ncols + col; - - const float val = x[ix]*scale + (mask ? mask[iy] : 0.0f) + (pos ? slope*pos[col] : 0.0f); - - vals[col] = val; - max_val = max(max_val, val); - } - - // find the max value in the block - max_val = warp_reduce_max(max_val); - if (block_size > WARP_SIZE) { - if (warp_id == 0) { - buf_iw[lane_id] = -INFINITY; - } - __syncthreads(); - - if (lane_id == 0) { - buf_iw[warp_id] = max_val; - } - __syncthreads(); - - max_val = buf_iw[lane_id]; - max_val = warp_reduce_max(max_val); - } - - float tmp = 0.0f; // partial sum - -#pragma unroll - for (int col0 = 0; col0 < ncols; col0 += block_size) { - const int col = col0 + tid; - - if (ncols_template == 0 && col >= ncols) { - break; - } - - const float val = expf(vals[col] - max_val); - tmp += val; - vals[col] = val; - } - - // find the sum of exps in the block - tmp = warp_reduce_sum(tmp); - if (block_size > WARP_SIZE) { - __syncthreads(); - if (warp_id == 0) { - buf_iw[lane_id] = 0.0f; - } - __syncthreads(); - - if (lane_id == 0) { - buf_iw[warp_id] = tmp; - } - __syncthreads(); - - tmp = buf_iw[lane_id]; - tmp = warp_reduce_sum(tmp); - } - - const float inv_sum = 1.0f / tmp; - -#pragma unroll - for (int col0 = 0; col0 < ncols; col0 += block_size) { - const int col = col0 + tid; - - if (ncols_template == 0 && col >= ncols) { - return; - } - - const int idst = rowx*ncols + col; - dst[idst] = vals[col] * inv_sum; - } -} - -static void soft_max_f32_cuda(const float * x, const float * mask, const float * pos, float * dst, const int ncols_x, const int nrows_x, const int nrows_y, const float scale, const float max_bias, cudaStream_t stream) { - int nth = WARP_SIZE; - while (nth < ncols_x && nth < CUDA_SOFT_MAX_BLOCK_SIZE) nth *= 2; - const dim3 block_dims(nth, 1, 1); - const dim3 block_nums(nrows_x, 1, 1); - const size_t shmem = (GGML_PAD(ncols_x, WARP_SIZE) + WARP_SIZE)*sizeof(float); - static_assert(CUDA_SOFT_MAX_BLOCK_SIZE == 1024, "These values need to be adjusted."); - - const uint32_t n_head_kv = nrows_x/nrows_y; - const uint32_t n_head_log2 = 1u << (uint32_t) floorf(log2f((float) n_head_kv)); - - const float m0 = powf(2.0f, -(max_bias ) / n_head_log2); - const float m1 = powf(2.0f, -(max_bias / 2.0f) / n_head_log2); - - if (shmem < ggml_cuda_info().devices[ggml_cuda_get_device()].smpb) { - switch (ncols_x) { - case 32: - soft_max_f32<<>>(x, mask, pos, dst, ncols_x, nrows_y, scale, max_bias, m0, m1, n_head_log2); - break; - case 64: - soft_max_f32<<>>(x, mask, pos, dst, ncols_x, nrows_y, scale, max_bias, m0, m1, n_head_log2); - break; - case 128: - soft_max_f32<<>>(x, mask, pos, dst, ncols_x, nrows_y, scale, max_bias, m0, m1, n_head_log2); - break; - case 256: - soft_max_f32<<>>(x, mask, pos, dst, ncols_x, nrows_y, scale, max_bias, m0, m1, n_head_log2); - break; - case 512: - soft_max_f32<<>>(x, mask, pos, dst, ncols_x, nrows_y, scale, max_bias, m0, m1, n_head_log2); - break; - case 1024: - soft_max_f32<<>>(x, mask, pos, dst, ncols_x, nrows_y, scale, max_bias, m0, m1, n_head_log2); - break; - case 2048: - soft_max_f32<<>>(x, mask, pos, dst, ncols_x, nrows_y, scale, max_bias, m0, m1, n_head_log2); - break; - case 4096: - soft_max_f32<<>>(x, mask, pos, dst, ncols_x, nrows_y, scale, max_bias, m0, m1, n_head_log2); - break; - default: - soft_max_f32<<>>(x, mask, pos, dst, ncols_x, nrows_y, scale, max_bias, m0, m1, n_head_log2); - break; - } - } else { - const size_t shmem_low = WARP_SIZE*sizeof(float); - soft_max_f32<<>>(x, mask, pos, dst, ncols_x, nrows_y, scale, max_bias, m0, m1, n_head_log2); - } -} - -void ggml_cuda_op_soft_max(ggml_backend_cuda_context & ctx, ggml_tensor * dst) { - const ggml_tensor * src0 = dst->src[0]; - const ggml_tensor * src1 = dst->src[1]; - const float * src0_d = (const float *)src0->data; - const float * src1_d = src1 ? (const float *)src1->data : nullptr; - float * dst_d = (float *)dst->data; - cudaStream_t stream = ctx.stream(); - - GGML_ASSERT(src0->type == GGML_TYPE_F32); - GGML_ASSERT( dst->type == GGML_TYPE_F32); - - GGML_ASSERT(!src1 || src1->type == GGML_TYPE_F32); // src1 contains mask and it is optional - - const int64_t ne00 = src0->ne[0]; - const int64_t nrows_x = ggml_nrows(src0); - const int64_t nrows_y = src0->ne[1]; - - float scale = 1.0f; - float max_bias = 0.0f; - - memcpy(&scale, (float *) dst->op_params + 0, sizeof(float)); - memcpy(&max_bias, (float *) dst->op_params + 1, sizeof(float)); - - // positions tensor - float * src2_dd = nullptr; - - ggml_tensor * src2 = dst->src[2]; - const bool use_src2 = src2 != nullptr; - - if (use_src2) { - src2_dd = (float *)src2->data; - } - - soft_max_f32_cuda(src0_d, src1_d, src2_dd, dst_d, ne00, nrows_x, nrows_y, scale, max_bias, stream); -} diff --git a/ggml-cuda/softmax.cuh b/ggml-cuda/softmax.cuh deleted file mode 100644 index 4ef4ff86c9c..00000000000 --- a/ggml-cuda/softmax.cuh +++ /dev/null @@ -1,5 +0,0 @@ -#include "common.cuh" - -#define CUDA_SOFT_MAX_BLOCK_SIZE 1024 - -void ggml_cuda_op_soft_max(ggml_backend_cuda_context & ctx, ggml_tensor * dst); diff --git a/ggml-cuda/sumrows.cu b/ggml-cuda/sumrows.cu deleted file mode 100644 index 82e8e875f9b..00000000000 --- a/ggml-cuda/sumrows.cu +++ /dev/null @@ -1,40 +0,0 @@ -#include "sumrows.cuh" - -static __global__ void k_sum_rows_f32(const float * x, float * dst, const int ncols) { - const int row = blockIdx.x; - const int col = threadIdx.x; - - float sum = 0.0f; - for (int i = col; i < ncols; i += blockDim.x) { - sum += x[row * ncols + i]; - } - - sum = warp_reduce_sum(sum); - - if (col == 0) { - dst[row] = sum; - } -} - -static void sum_rows_f32_cuda(const float * x, float * dst, const int ncols, const int nrows, cudaStream_t stream) { - const dim3 block_dims(WARP_SIZE, 1, 1); - const dim3 block_nums(nrows, 1, 1); - k_sum_rows_f32<<>>(x, dst, ncols); -} - -void ggml_cuda_op_sum_rows(ggml_backend_cuda_context & ctx, ggml_tensor * dst) { - const ggml_tensor * src0 = dst->src[0]; - const float * src0_d = (const float *)src0->data; - float * dst_d = (float *)dst->data; - cudaStream_t stream = ctx.stream(); - - GGML_ASSERT(src0->type == GGML_TYPE_F32); - GGML_ASSERT( dst->type == GGML_TYPE_F32); - GGML_ASSERT(ggml_is_contiguous(src0)); - - - const int64_t ncols = src0->ne[0]; - const int64_t nrows = ggml_nrows(src0); - - sum_rows_f32_cuda(src0_d, dst_d, ncols, nrows, stream); -} diff --git a/ggml-cuda/sumrows.cuh b/ggml-cuda/sumrows.cuh deleted file mode 100644 index e7545f83c49..00000000000 --- a/ggml-cuda/sumrows.cuh +++ /dev/null @@ -1,3 +0,0 @@ -#include "common.cuh" - -void ggml_cuda_op_sum_rows(ggml_backend_cuda_context & ctx, ggml_tensor * dst); diff --git a/ggml-cuda/tsembd.cu b/ggml-cuda/tsembd.cu deleted file mode 100644 index 153ddbcda92..00000000000 --- a/ggml-cuda/tsembd.cu +++ /dev/null @@ -1,47 +0,0 @@ -#include "tsembd.cuh" - -static __global__ void timestep_embedding_f32(const float * timesteps, float * dst, const int nb1, const int dim, const int max_period) { - // blockIDx.y: idx of timesteps->ne[0] - // blockIDx.x: idx of ((dim + 1) / 2) / BLOCK_SIZE - int i = blockIdx.y; - int j = threadIdx.x + blockIdx.x * blockDim.x; - float * embed_data = (float *)((char *)dst + i*nb1); - - if (dim % 2 != 0 && j == ((dim + 1) / 2)) { - embed_data[dim] = 0.f; - } - - int half = dim / 2; - if (j >= half) { - return; - } - - float timestep = timesteps[i]; - float freq = (float)expf(-logf(max_period) * j / half); - float arg = timestep * freq; - embed_data[j] = cosf(arg); - embed_data[j + half] = sinf(arg); -} - -static void timestep_embedding_f32_cuda(const float * x, float * dst, const int ne00, const int nb1, - const int dim, const int max_period, cudaStream_t stream) { - int half_ceil = (dim + 1) / 2; - int num_blocks = (half_ceil + CUDA_TIMESTEP_EMBEDDING_BLOCK_SIZE - 1) / CUDA_TIMESTEP_EMBEDDING_BLOCK_SIZE; - dim3 gridDim(num_blocks, ne00, 1); - timestep_embedding_f32<<>>(x, dst, nb1, dim, max_period); -} - -void ggml_cuda_op_timestep_embedding(ggml_backend_cuda_context & ctx, ggml_tensor * dst) { - const ggml_tensor * src0 = dst->src[0]; - const float * src0_d = (const float *)src0->data; - float * dst_d = (float *)dst->data; - cudaStream_t stream = ctx.stream(); - - GGML_ASSERT(src0->type == GGML_TYPE_F32); - GGML_ASSERT(dst->type == GGML_TYPE_F32); - - const int dim = dst->op_params[0]; - const int max_period = dst->op_params[1]; - - timestep_embedding_f32_cuda(src0_d, dst_d, src0->ne[0], dst->nb[1], dim, max_period, stream); -} diff --git a/ggml-cuda/tsembd.cuh b/ggml-cuda/tsembd.cuh deleted file mode 100644 index 84340e3d7d2..00000000000 --- a/ggml-cuda/tsembd.cuh +++ /dev/null @@ -1,5 +0,0 @@ -#include "common.cuh" - -#define CUDA_TIMESTEP_EMBEDDING_BLOCK_SIZE 256 - -void ggml_cuda_op_timestep_embedding(ggml_backend_cuda_context & ctx, ggml_tensor * dst); diff --git a/ggml-cuda/unary.cu b/ggml-cuda/unary.cu deleted file mode 100644 index 1a7f0946972..00000000000 --- a/ggml-cuda/unary.cu +++ /dev/null @@ -1,240 +0,0 @@ -#include "unary.cuh" - -static __global__ void gelu_f32(const float * x, float * dst, const int k) { - const float GELU_COEF_A = 0.044715f; - const float SQRT_2_OVER_PI = 0.79788456080286535587989211986876f; - const int i = blockDim.x*blockIdx.x + threadIdx.x; - - if (i >= k) { - return; - } - - float xi = x[i]; - dst[i] = 0.5f*xi*(1.0f + tanhf(SQRT_2_OVER_PI*xi*(1.0f + GELU_COEF_A*xi*xi))); -} - -static __global__ void gelu_quick_f32(const float * x, float * dst, int k) { - const float GELU_QUICK_COEF = -1.702f; - const int i = blockDim.x*blockIdx.x + threadIdx.x; - if (i >= k) { - return; - } - dst[i] = x[i] * (1.0f / (1.0f + expf(GELU_QUICK_COEF * x[i]))); -} - -static __global__ void silu_f32(const float * x, float * dst, const int k) { - const int i = blockDim.x*blockIdx.x + threadIdx.x; - - if (i >= k) { - return; - } - dst[i] = x[i] / (1.0f + expf(-x[i])); -} - -static __global__ void tanh_f32(const float * x, float * dst, int k) { - const int i = blockDim.x*blockIdx.x + threadIdx.x; - if (i >= k) { - return; - } - dst[i] = tanhf(x[i]); -} - -static __global__ void relu_f32(const float * x, float * dst, const int k) { - const int i = blockDim.x*blockIdx.x + threadIdx.x; - - if (i >= k) { - return; - } - dst[i] = fmaxf(x[i], 0); -} - -static __global__ void hardsigmoid_f32(const float * x, float * dst, const int k) { - const int i = blockDim.x*blockIdx.x + threadIdx.x; - - if (i >= k) { - return; - } - dst[i] = fminf(1.0f, fmaxf(0.0f, (x[i] + 3.0f) / 6.0f)); -} - -static __global__ void hardswish_f32(const float * x, float * dst, const int k) { - const int i = blockDim.x*blockIdx.x + threadIdx.x; - - if (i >= k) { - return; - } - dst[i] = x[i] * fminf(1.0f, fmaxf(0.0f, (x[i] + 3.0f) / 6.0f)); -} - -static __global__ void leaky_relu_f32(const float * x, float * dst, const int k, const float negative_slope) { - const int i = blockDim.x*blockIdx.x + threadIdx.x; - if (i >= k) { - return; - } - dst[i] = fmaxf(x[i], 0) + fminf(x[i], 0.0f) * negative_slope; -} - -static __global__ void sqr_f32(const float * x, float * dst, const int k) { - const int i = blockDim.x*blockIdx.x + threadIdx.x; - - if (i >= k) { - return; - } - dst[i] = x[i] * x[i]; -} - -static void gelu_f32_cuda(const float * x, float * dst, const int k, cudaStream_t stream) { - const int num_blocks = (k + CUDA_GELU_BLOCK_SIZE - 1) / CUDA_GELU_BLOCK_SIZE; - gelu_f32<<>>(x, dst, k); -} - -static void gelu_quick_f32_cuda(const float * x, float * dst, const int k, cudaStream_t stream) { - const int num_blocks = (k + CUDA_GELU_BLOCK_SIZE - 1) / CUDA_GELU_BLOCK_SIZE; - gelu_quick_f32<<>>(x, dst, k); -} - -static void silu_f32_cuda(const float * x, float * dst, const int k, cudaStream_t stream) { - const int num_blocks = (k + CUDA_SILU_BLOCK_SIZE - 1) / CUDA_SILU_BLOCK_SIZE; - silu_f32<<>>(x, dst, k); -} - -static void tanh_f32_cuda(const float * x, float * dst, const int k, cudaStream_t stream) { - const int num_blocks = (k + CUDA_TANH_BLOCK_SIZE - 1) / CUDA_TANH_BLOCK_SIZE; - tanh_f32<<>>(x, dst, k); -} - -static void relu_f32_cuda(const float * x, float * dst, const int k, cudaStream_t stream) { - const int num_blocks = (k + CUDA_RELU_BLOCK_SIZE - 1) / CUDA_RELU_BLOCK_SIZE; - relu_f32<<>>(x, dst, k); -} - -static void hardsigmoid_f32_cuda(const float * x, float * dst, const int k, cudaStream_t stream) { - const int num_blocks = (k + CUDA_HARDSIGMOID_BLOCK_SIZE - 1) / CUDA_HARDSIGMOID_BLOCK_SIZE; - hardsigmoid_f32<<>>(x, dst, k); -} - -static void hardswish_f32_cuda(const float * x, float * dst, const int k, cudaStream_t stream) { - const int num_blocks = (k + CUDA_HARDSWISH_BLOCK_SIZE - 1) / CUDA_HARDSWISH_BLOCK_SIZE; - hardswish_f32<<>>(x, dst, k); -} - -static void leaky_relu_f32_cuda(const float * x, float * dst, const int k, const float negative_slope, cudaStream_t stream) { - const int num_blocks = (k + CUDA_RELU_BLOCK_SIZE - 1) / CUDA_RELU_BLOCK_SIZE; - leaky_relu_f32<<>>(x, dst, k, negative_slope); -} - -static void sqr_f32_cuda(const float * x, float * dst, const int k, cudaStream_t stream) { - const int num_blocks = (k + CUDA_SQR_BLOCK_SIZE - 1) / CUDA_SQR_BLOCK_SIZE; - sqr_f32<<>>(x, dst, k); -} - -void ggml_cuda_op_gelu(ggml_backend_cuda_context & ctx, ggml_tensor * dst) { - const ggml_tensor * src0 = dst->src[0]; - const float * src0_d = (const float *)src0->data; - float * dst_d = (float *)dst->data; - cudaStream_t stream = ctx.stream(); - - GGML_ASSERT(src0->type == GGML_TYPE_F32); - GGML_ASSERT( dst->type == GGML_TYPE_F32); - - gelu_f32_cuda(src0_d, dst_d, ggml_nelements(src0), stream); -} - -void ggml_cuda_op_silu(ggml_backend_cuda_context & ctx, ggml_tensor * dst) { - const ggml_tensor * src0 = dst->src[0]; - const float * src0_d = (const float *)src0->data; - float * dst_d = (float *)dst->data; - cudaStream_t stream = ctx.stream(); - - GGML_ASSERT(src0->type == GGML_TYPE_F32); - GGML_ASSERT( dst->type == GGML_TYPE_F32); - - silu_f32_cuda(src0_d, dst_d, ggml_nelements(src0), stream); -} - -void ggml_cuda_op_gelu_quick(ggml_backend_cuda_context & ctx, ggml_tensor * dst) { - const ggml_tensor * src0 = dst->src[0]; - const float * src0_d = (const float *)src0->data; - float * dst_d = (float *)dst->data; - cudaStream_t stream = ctx.stream(); - - GGML_ASSERT(src0->type == GGML_TYPE_F32); - GGML_ASSERT( dst->type == GGML_TYPE_F32); - - gelu_quick_f32_cuda(src0_d, dst_d, ggml_nelements(src0), stream); -} - -void ggml_cuda_op_tanh(ggml_backend_cuda_context & ctx, ggml_tensor * dst) { - const ggml_tensor * src0 = dst->src[0]; - const float * src0_d = (const float *)src0->data; - float * dst_d = (float *)dst->data; - cudaStream_t stream = ctx.stream(); - - GGML_ASSERT(src0->type == GGML_TYPE_F32); - GGML_ASSERT( dst->type == GGML_TYPE_F32); - - tanh_f32_cuda(src0_d, dst_d, ggml_nelements(src0), stream); -} - -void ggml_cuda_op_relu(ggml_backend_cuda_context & ctx, ggml_tensor * dst) { - const ggml_tensor * src0 = dst->src[0]; - const float * src0_d = (const float *)src0->data; - float * dst_d = (float *)dst->data; - cudaStream_t stream = ctx.stream(); - - GGML_ASSERT(src0->type == GGML_TYPE_F32); - GGML_ASSERT( dst->type == GGML_TYPE_F32); - - relu_f32_cuda(src0_d, dst_d, ggml_nelements(src0), stream); -} - -void ggml_cuda_op_hardsigmoid(ggml_backend_cuda_context & ctx, ggml_tensor * dst) { - const ggml_tensor * src0 = dst->src[0]; - const float * src0_d = (const float *)src0->data; - float * dst_d = (float *)dst->data; - cudaStream_t stream = ctx.stream(); - - GGML_ASSERT(src0->type == GGML_TYPE_F32); - GGML_ASSERT( dst->type == GGML_TYPE_F32); - - hardsigmoid_f32_cuda(src0_d, dst_d, ggml_nelements(src0), stream); -} - -void ggml_cuda_op_hardswish(ggml_backend_cuda_context & ctx, ggml_tensor * dst) { - const ggml_tensor * src0 = dst->src[0]; - const float * src0_d = (const float *)src0->data; - float * dst_d = (float *)dst->data; - cudaStream_t stream = ctx.stream(); - - GGML_ASSERT(src0->type == GGML_TYPE_F32); - GGML_ASSERT( dst->type == GGML_TYPE_F32); - - hardswish_f32_cuda(src0_d, dst_d, ggml_nelements(src0), stream); -} - -void ggml_cuda_op_leaky_relu(ggml_backend_cuda_context & ctx, ggml_tensor * dst) { - const ggml_tensor * src0 = dst->src[0]; - const float * src0_d = (const float *)src0->data; - float * dst_d = (float *)dst->data; - cudaStream_t stream = ctx.stream(); - - GGML_ASSERT(src0->type == GGML_TYPE_F32); - GGML_ASSERT( dst->type == GGML_TYPE_F32); - - float negative_slope; - memcpy(&negative_slope, dst->op_params, sizeof(float)); - - leaky_relu_f32_cuda(src0_d, dst_d, ggml_nelements(src0), negative_slope, stream); -} - -void ggml_cuda_op_sqr(ggml_backend_cuda_context & ctx, ggml_tensor * dst) { - const ggml_tensor * src0 = dst->src[0]; - const float * src0_d = (const float *)src0->data; - float * dst_d = (float *)dst->data; - cudaStream_t stream = ctx.stream(); - - GGML_ASSERT(src0->type == GGML_TYPE_F32); - GGML_ASSERT( dst->type == GGML_TYPE_F32); - - sqr_f32_cuda(src0_d, dst_d, ggml_nelements(src0), stream); -} diff --git a/ggml-cuda/unary.cuh b/ggml-cuda/unary.cuh deleted file mode 100644 index 2002ed98920..00000000000 --- a/ggml-cuda/unary.cuh +++ /dev/null @@ -1,27 +0,0 @@ -#include "common.cuh" - -#define CUDA_GELU_BLOCK_SIZE 256 -#define CUDA_SILU_BLOCK_SIZE 256 -#define CUDA_TANH_BLOCK_SIZE 256 -#define CUDA_RELU_BLOCK_SIZE 256 -#define CUDA_HARDSIGMOID_BLOCK_SIZE 256 -#define CUDA_HARDSWISH_BLOCK_SIZE 256 -#define CUDA_SQR_BLOCK_SIZE 256 - -void ggml_cuda_op_gelu(ggml_backend_cuda_context & ctx, ggml_tensor * dst); - -void ggml_cuda_op_silu(ggml_backend_cuda_context & ctx, ggml_tensor * dst); - -void ggml_cuda_op_gelu_quick(ggml_backend_cuda_context & ctx, ggml_tensor * dst); - -void ggml_cuda_op_tanh(ggml_backend_cuda_context & ctx, ggml_tensor * dst); - -void ggml_cuda_op_relu(ggml_backend_cuda_context & ctx, ggml_tensor * dst); - -void ggml_cuda_op_hardsigmoid(ggml_backend_cuda_context & ctx, ggml_tensor * dst); - -void ggml_cuda_op_hardswish(ggml_backend_cuda_context & ctx, ggml_tensor * dst); - -void ggml_cuda_op_leaky_relu(ggml_backend_cuda_context & ctx, ggml_tensor * dst); - -void ggml_cuda_op_sqr(ggml_backend_cuda_context & ctx, ggml_tensor * dst); diff --git a/ggml-cuda/upscale.cu b/ggml-cuda/upscale.cu deleted file mode 100644 index 2f62fed4888..00000000000 --- a/ggml-cuda/upscale.cu +++ /dev/null @@ -1,48 +0,0 @@ -#include "upscale.cuh" - -static __global__ void upscale_f32(const float * x, float * dst, const int ne00, const int ne00xne01, const int scale_factor) { - // blockIdx.z: idx of ne02*ne03 - // blockIdx.y: idx of ne01*scale_factor, aka ne1 - // blockIDx.x: idx of ne00*scale_factor / BLOCK_SIZE - // ne00xne01: ne00 * ne01 - int ne0 = ne00 * scale_factor; - int nidx = threadIdx.x + blockIdx.x * blockDim.x; - if (nidx >= ne0) { - return; - } - // operation - int i00 = nidx / scale_factor; - int i01 = blockIdx.y / scale_factor; - int offset_src = - i00 + - i01 * ne00 + - blockIdx.z * ne00xne01; - int offset_dst = - nidx + - blockIdx.y * ne0 + - blockIdx.z * ne0 * gridDim.y; - dst[offset_dst] = x[offset_src]; -} - -static void upscale_f32_cuda(const float * x, float * dst, const int ne00, const int ne01, const int ne02, const int ne03, - const int scale_factor, cudaStream_t stream) { - int ne0 = (ne00 * scale_factor); - int num_blocks = (ne0 + CUDA_UPSCALE_BLOCK_SIZE - 1) / CUDA_UPSCALE_BLOCK_SIZE; - dim3 gridDim(num_blocks, (ne01 * scale_factor), ne02*ne03); - upscale_f32<<>>(x, dst, ne00, ne00 * ne01, scale_factor); -} - -void ggml_cuda_op_upscale(ggml_backend_cuda_context & ctx, ggml_tensor * dst) { - const ggml_tensor * src0 = dst->src[0]; - const float * src0_d = (const float *)src0->data; - float * dst_d = (float *)dst->data; - cudaStream_t stream = ctx.stream(); - - GGML_ASSERT(src0->type == GGML_TYPE_F32); - GGML_ASSERT(dst->type == GGML_TYPE_F32); - GGML_ASSERT(src0->ne[3] == 1 && dst->ne[3] == 1); // just 3D tensors - - const int scale_factor = dst->op_params[0]; - - upscale_f32_cuda(src0_d, dst_d, src0->ne[0], src0->ne[1], src0->ne[2], src0->ne[3], scale_factor, stream); -} diff --git a/ggml-cuda/upscale.cuh b/ggml-cuda/upscale.cuh deleted file mode 100644 index d4d7652308e..00000000000 --- a/ggml-cuda/upscale.cuh +++ /dev/null @@ -1,5 +0,0 @@ -#include "common.cuh" - -#define CUDA_UPSCALE_BLOCK_SIZE 256 - -void ggml_cuda_op_upscale(ggml_backend_cuda_context & ctx, ggml_tensor * dst); diff --git a/ggml-cuda/vecdotq.cuh b/ggml-cuda/vecdotq.cuh deleted file mode 100644 index 86b87fa936d..00000000000 --- a/ggml-cuda/vecdotq.cuh +++ /dev/null @@ -1,1280 +0,0 @@ -#include "common.cuh" - -static __device__ __forceinline__ int get_int_from_int8(const int8_t * x8, const int & i32) { - const uint16_t * x16 = (const uint16_t *) (x8 + sizeof(int) * i32); // assume at least 2 byte alignment - - int x32 = 0; - x32 |= x16[0] << 0; - x32 |= x16[1] << 16; - - return x32; -} - -static __device__ __forceinline__ int get_int_from_uint8(const uint8_t * x8, const int & i32) { - const uint16_t * x16 = (const uint16_t *) (x8 + sizeof(int) * i32); // assume at least 2 byte alignment - - int x32 = 0; - x32 |= x16[0] << 0; - x32 |= x16[1] << 16; - - return x32; -} - -static __device__ __forceinline__ int get_int_from_int8_aligned(const int8_t * x8, const int & i32) { - return *((const int *) (x8 + sizeof(int) * i32)); // assume at least 4 byte alignment -} - -static __device__ __forceinline__ int get_int_from_uint8_aligned(const uint8_t * x8, const int & i32) { - return *((const int *) (x8 + sizeof(int) * i32)); // assume at least 4 byte alignment -} - - -// VDR = vec dot ratio, how many contiguous integers each thread processes when the vec dot kernel is called -// MMVQ = mul_mat_vec_q, MMQ = mul_mat_q - -#define VDR_Q4_0_Q8_1_MMVQ 2 -#define VDR_Q4_0_Q8_1_MMQ 4 - -template static __device__ __forceinline__ float vec_dot_q4_0_q8_1_impl( - const int * v, const int * u, const float & d4, const half2 & ds8) { - -#if __CUDA_ARCH__ >= MIN_CC_DP4A // lowest compute capability for integer intrinsics - int sumi = 0; - -#pragma unroll - for (int i = 0; i < vdr; ++i) { - const int vi0 = (v[i] >> 0) & 0x0F0F0F0F; - const int vi1 = (v[i] >> 4) & 0x0F0F0F0F; - - // SIMD dot product of quantized values - sumi = __dp4a(vi0, u[2*i+0], sumi); - sumi = __dp4a(vi1, u[2*i+1], sumi); - } - - const float2 ds8f = __half22float2(ds8); - - // second part effectively subtracts 8 from each quant value - return d4 * (sumi * ds8f.x - (8*vdr/QI4_0) * ds8f.y); -#else - NO_DEVICE_CODE; -#endif // __CUDA_ARCH__ >= MIN_CC_DP4A -} - -#define VDR_Q4_1_Q8_1_MMVQ 2 -#define VDR_Q4_1_Q8_1_MMQ 4 - -template static __device__ __forceinline__ float vec_dot_q4_1_q8_1_impl( - const int * v, const int * u, const half2 & dm4, const half2 & ds8) { - -#if __CUDA_ARCH__ >= MIN_CC_DP4A // lowest compute capability for integer intrinsics - int sumi = 0; - -#pragma unroll - for (int i = 0; i < vdr; ++i) { - const int vi0 = (v[i] >> 0) & 0x0F0F0F0F; - const int vi1 = (v[i] >> 4) & 0x0F0F0F0F; - - // SIMD dot product of quantized values - sumi = __dp4a(vi0, u[2*i+0], sumi); - sumi = __dp4a(vi1, u[2*i+1], sumi); - } - -#ifdef GGML_CUDA_F16 - const float2 tmp = __half22float2(__hmul2(dm4, ds8)); - const float d4d8 = tmp.x; - const float m4s8 = tmp.y; -#else - const float2 dm4f = __half22float2(dm4); - const float2 ds8f = __half22float2(ds8); - const float d4d8 = dm4f.x * ds8f.x; - const float m4s8 = dm4f.y * ds8f.y; -#endif // GGML_CUDA_F16 - - // scale second part of sum by QI8_1/(vdr * QR4_1) to compensate for multiple threads adding it - return sumi * d4d8 + m4s8 / (QI8_1 / (vdr * QR4_1)); -#else - NO_DEVICE_CODE; -#endif // __CUDA_ARCH__ >= MIN_CC_DP4A -} - -#define VDR_Q5_0_Q8_1_MMVQ 2 -#define VDR_Q5_0_Q8_1_MMQ 4 - -template static __device__ __forceinline__ float vec_dot_q5_0_q8_1_impl( - const int * vl, const int * vh, const int * u, const float & d5, const half2 & ds8) { - -#if __CUDA_ARCH__ >= MIN_CC_DP4A // lowest compute capability for integer intrinsics - int sumi = 0; - -#pragma unroll - for (int i = 0; i < vdr; ++i) { - int vi0 = (vl[i] >> 0) & 0x0F0F0F0F; // lower 4 qs bits, still need qh as 5th bits - vi0 |= (vh[i] << 4) & 0x00000010; // 0 -> 4 - vi0 |= (vh[i] << 11) & 0x00001000; // 1 -> 12 - vi0 |= (vh[i] << 18) & 0x00100000; // 2 -> 20 - vi0 |= (vh[i] << 25) & 0x10000000; // 3 -> 28 - sumi = __dp4a(vi0, u[2*i+0], sumi); // SIMD dot product of quantized values - - int vi1 = (vl[i] >> 4) & 0x0F0F0F0F; // upper 4 qs bits, still need qh as 5th bits - vi1 |= (vh[i] >> 12) & 0x00000010; // 16 -> 4 - vi1 |= (vh[i] >> 5) & 0x00001000; // 17 -> 12 - vi1 |= (vh[i] << 2) & 0x00100000; // 18 -> 20 - vi1 |= (vh[i] << 9) & 0x10000000; // 19 -> 28 - sumi = __dp4a(vi1, u[2*i+1], sumi); // SIMD dot product of quantized values - } - - const float2 ds8f = __half22float2(ds8); - - // second part effectively subtracts 16 from each quant value - return d5 * (sumi * ds8f.x - (16*vdr/QI5_0) * ds8f.y); -#else - NO_DEVICE_CODE; -#endif // __CUDA_ARCH__ >= MIN_CC_DP4A -} - -#define VDR_Q5_1_Q8_1_MMVQ 2 -#define VDR_Q5_1_Q8_1_MMQ 4 - -template static __device__ __forceinline__ float vec_dot_q5_1_q8_1_impl( - const int * vl, const int * vh, const int * u, const half2 & dm5, const half2 & ds8) { - -#if __CUDA_ARCH__ >= MIN_CC_DP4A // lowest compute capability for integer intrinsics - int sumi = 0; - -#pragma unroll - for (int i = 0; i < vdr; ++i) { - int vi0 = (vl[i] >> 0) & 0x0F0F0F0F; // lower 4 qs bits, still need qh as 5th bits - vi0 |= (vh[i] << 4) & 0x00000010; // 0 -> 4 - vi0 |= (vh[i] << 11) & 0x00001000; // 1 -> 12 - vi0 |= (vh[i] << 18) & 0x00100000; // 2 -> 20 - vi0 |= (vh[i] << 25) & 0x10000000; // 3 -> 28 - sumi = __dp4a(vi0, u[2*i+0], sumi); // SIMD dot product of quantized values - - int vi1 = (vl[i] >> 4) & 0x0F0F0F0F; // upper 4 qs bits, still need qh as 5th bits - vi1 |= (vh[i] >> 12) & 0x00000010; // 16 -> 4 - vi1 |= (vh[i] >> 5) & 0x00001000; // 17 -> 12 - vi1 |= (vh[i] << 2) & 0x00100000; // 18 -> 20 - vi1 |= (vh[i] << 9) & 0x10000000; // 19 -> 28 - sumi = __dp4a(vi1, u[2*i+1], sumi); // SIMD dot product of quantized values - } - -#ifdef GGML_CUDA_F16 - const float2 tmp = __half22float2(__hmul2(dm5, ds8)); - const float d5d8 = tmp.x; - const float m5s8 = tmp.y; -#else - const float2 dm5f = __half22float2(dm5); - const float2 ds8f = __half22float2(ds8); - const float d5d8 = dm5f.x * ds8f.x; - const float m5s8 = dm5f.y * ds8f.y; -#endif // GGML_CUDA_F16 - - // scale second part of sum by QI5_1 / vdr to compensate for multiple threads adding it - return sumi*d5d8 + m5s8 / (QI5_1 / vdr); - -#else - NO_DEVICE_CODE; -#endif // __CUDA_ARCH__ >= MIN_CC_DP4A -} - -#define VDR_Q8_0_Q8_1_MMVQ 2 -#define VDR_Q8_0_Q8_1_MMQ 8 - -template static __device__ __forceinline__ float vec_dot_q8_0_q8_1_impl( - const int * v, const int * u, const float & d8_0, const float & d8_1) { - -#if __CUDA_ARCH__ >= MIN_CC_DP4A // lowest compute capability for integer intrinsics - int sumi = 0; - -#pragma unroll - for (int i = 0; i < vdr; ++i) { - // SIMD dot product of quantized values - sumi = __dp4a(v[i], u[i], sumi); - } - - return d8_0*d8_1 * sumi; -#else - NO_DEVICE_CODE; -#endif // __CUDA_ARCH__ >= MIN_CC_DP4A -} - -template static __device__ __forceinline__ float vec_dot_q8_1_q8_1_impl( - const int * v, const int * u, const half2 & dm8, const half2 & ds8) { - -#if __CUDA_ARCH__ >= MIN_CC_DP4A // lowest compute capability for integer intrinsics - int sumi = 0; - -#pragma unroll - for (int i = 0; i < vdr; ++i) { - // SIMD dot product of quantized values - sumi = __dp4a(v[i], u[i], sumi); - } - -#ifdef GGML_CUDA_F16 - const float2 tmp = __half22float2(__hmul2(dm8, ds8)); - const float d8d8 = tmp.x; - const float m8s8 = tmp.y; -#else - const float2 dm8f = __half22float2(dm8); - const float2 ds8f = __half22float2(ds8); - const float d8d8 = dm8f.x * ds8f.x; - const float m8s8 = dm8f.y * ds8f.y; -#endif // GGML_CUDA_F16 - - // scale second part of sum by QI8_1/ vdr to compensate for multiple threads adding it - return sumi*d8d8 + m8s8 / (QI8_1 / vdr); -#else - NO_DEVICE_CODE; -#endif // __CUDA_ARCH__ >= MIN_CC_DP4A -} - -#define VDR_Q2_K_Q8_1_MMVQ 1 -#define VDR_Q2_K_Q8_1_MMQ 2 - -// contiguous v/x values -static __device__ __forceinline__ float vec_dot_q2_K_q8_1_impl_mmvq( - const int & v, const int * __restrict__ u, const uint8_t * __restrict__ scales, - const half2 & dm2, const float * __restrict__ d8) { - -#if __CUDA_ARCH__ >= MIN_CC_DP4A // lowest compute capability for integer intrinsics - float sumf_d = 0.0f; - float sumf_m = 0.0f; - -#pragma unroll - for (int i = 0; i < QR2_K; ++i) { - const int sc = scales[2*i]; - - const int vi = (v >> (2*i)) & 0x03030303; - - sumf_d += d8[i] * (__dp4a(vi, u[i], 0) * (sc & 0xF)); // SIMD dot product - - // fill int with 4x m - int m = sc >> 4; - m |= m << 8; - m |= m << 16; - sumf_m += d8[i] * __dp4a(m, u[i], 0); // multiply constant q2_K part with sum of q8_1 values - } - - const float2 dm2f = __half22float2(dm2); - - return dm2f.x*sumf_d - dm2f.y*sumf_m; -#else - NO_DEVICE_CODE; -#endif // __CUDA_ARCH__ >= MIN_CC_DP4A -} - -// contiguous u/y values -static __device__ __forceinline__ float vec_dot_q2_K_q8_1_impl_mmq( - const int * __restrict__ v, const int * __restrict__ u, const uint8_t * __restrict__ scales, - const half2 & dm2, const float & d8) { - -#if __CUDA_ARCH__ >= MIN_CC_DP4A // lowest compute capability for integer intrinsics - int sumi_d = 0; - int sumi_m = 0; - -#pragma unroll - for (int i0 = 0; i0 < QI8_1; i0 += QI8_1/2) { - int sumi_d_sc = 0; - - const int sc = scales[i0 / (QI8_1/2)]; - - // fill int with 4x m - int m = sc >> 4; - m |= m << 8; - m |= m << 16; - -#pragma unroll - for (int i = i0; i < i0 + QI8_1/2; ++i) { - sumi_d_sc = __dp4a(v[i], u[i], sumi_d_sc); // SIMD dot product - sumi_m = __dp4a(m, u[i], sumi_m); // multiply sum of q8_1 values with m - } - - sumi_d += sumi_d_sc * (sc & 0xF); - } - - const float2 dm2f = __half22float2(dm2); - - return d8 * (dm2f.x*sumi_d - dm2f.y*sumi_m); -#else - NO_DEVICE_CODE; -#endif // __CUDA_ARCH__ >= MIN_CC_DP4A -} - -#define VDR_Q3_K_Q8_1_MMVQ 1 -#define VDR_Q3_K_Q8_1_MMQ 2 - -// contiguous v/x values -static __device__ __forceinline__ float vec_dot_q3_K_q8_1_impl_mmvq( - const int & vl, const int & vh, const int * __restrict__ u, const uint8_t * __restrict__ scales, - const int & scale_offset, const float & d3, const float * __restrict__ d8) { - -#if __CUDA_ARCH__ >= MIN_CC_DP4A // lowest compute capability for integer intrinsics - float sumf = 0.0f; - -#pragma unroll - for (int i = 0; i < QR3_K; ++i) { - const int isc = scale_offset + 2*i; - - const int isc_low = isc % (QK_K/32); - const int sc_shift_low = 4 * (isc / (QK_K/32)); - const int sc_low = (scales[isc_low] >> sc_shift_low) & 0xF; - - const int isc_high = isc % (QK_K/64); - const int sc_shift_high = 2 * (isc / (QK_K/64)); - const int sc_high = ((scales[(QK_K/32) + isc_high] >> sc_shift_high) & 3) << 4; - - const int sc = (sc_low | sc_high) - 32; - - const int vil = (vl >> (2*i)) & 0x03030303; - - const int vih = ((vh >> i) << 2) & 0x04040404; - - const int vi = __vsubss4(vil, vih); - - sumf += d8[i] * (__dp4a(vi, u[i], 0) * sc); // SIMD dot product - } - - return d3 * sumf; -#else - NO_DEVICE_CODE; -#endif // __CUDA_ARCH__ >= MIN_CC_DP4A -} - -// contiguous u/y values -static __device__ __forceinline__ float vec_dot_q3_K_q8_1_impl_mmq( - const int * __restrict__ v, const int * __restrict__ u, const int8_t * __restrict__ scales, - const float & d3, const float & d8) { - -#if __CUDA_ARCH__ >= MIN_CC_DP4A // lowest compute capability for integer intrinsics - int sumi = 0; - -#pragma unroll - for (int i0 = 0; i0 < QR3_K*VDR_Q3_K_Q8_1_MMQ; i0 += QI8_1/2) { - int sumi_sc = 0; - - for (int i = i0; i < i0 + QI8_1/2; ++i) { - sumi_sc = __dp4a(v[i], u[i], sumi_sc); // SIMD dot product - } - - sumi += sumi_sc * scales[i0 / (QI8_1/2)]; - } - - return d3*d8 * sumi; -#else - NO_DEVICE_CODE; -#endif // __CUDA_ARCH__ >= MIN_CC_DP4A -} - -#define VDR_Q4_K_Q8_1_MMVQ 2 -#define VDR_Q4_K_Q8_1_MMQ 8 - -// contiguous v/x values -static __device__ __forceinline__ float vec_dot_q4_K_q8_1_impl_vmmq( - const int * __restrict__ v, const int * __restrict__ u, const uint8_t * __restrict__ sc, - const uint8_t * __restrict__ m, const half2 & dm4, const float * __restrict__ d8) { - -#if __CUDA_ARCH__ >= MIN_CC_DP4A // lowest compute capability for integer intrinsics - float sumf_d = 0.0f; - float sumf_m = 0.0f; - -#pragma unroll - for (int i = 0; i < QR4_K; ++i) { - const int v0i = (v[0] >> (4*i)) & 0x0F0F0F0F; - const int v1i = (v[1] >> (4*i)) & 0x0F0F0F0F; - - const int dot1 = __dp4a(v1i, u[2*i+1], __dp4a(v0i, u[2*i+0], 0)); // SIMD dot product - const int dot2 = __dp4a(0x01010101, u[2*i+1], __dp4a(0x01010101, u[2*i+0], 0)); // sum of u - - sumf_d += d8[i] * (dot1 * sc[i]); - sumf_m += d8[i] * (dot2 * m[i]); // multiply constant part of q4_K with sum of q8_1 values - } - - const float2 dm4f = __half22float2(dm4); - - return dm4f.x*sumf_d - dm4f.y*sumf_m; - -#else - NO_DEVICE_CODE; -#endif // __CUDA_ARCH__ >= MIN_CC_DP4A -} - -// contiguous u/y values -static __device__ __forceinline__ float vec_dot_q4_K_q8_1_impl_mmq( - const int * __restrict__ v, const int * __restrict__ u, const uint8_t * __restrict__ sc, - const uint8_t * __restrict__ m, const half2 & dm4, const half2 * __restrict__ ds8) { - -#if __CUDA_ARCH__ >= MIN_CC_DP4A // lowest compute capability for integer intrinsics - float sumf_d = 0.0f; - float sumf_m = 0.0f; - -#pragma unroll - for (int i = 0; i < QR4_K*VDR_Q4_K_Q8_1_MMQ/QI8_1; ++i) { - int sumi_d = 0; - -#pragma unroll - for (int j = 0; j < QI8_1; ++j) { - sumi_d = __dp4a((v[j] >> (4*i)) & 0x0F0F0F0F, u[i*QI8_1 + j], sumi_d); // SIMD dot product - } - - const float2 ds8f = __half22float2(ds8[i]); - - sumf_d += ds8f.x * (sc[i] * sumi_d); - sumf_m += ds8f.y * m[i]; // sum of q8_1 block * q4_K min val - } - - const float2 dm4f = __half22float2(dm4); - - return dm4f.x*sumf_d - dm4f.y*sumf_m; - -#else - NO_DEVICE_CODE; -#endif // __CUDA_ARCH__ >= MIN_CC_DP4A -} - -#define VDR_Q5_K_Q8_1_MMVQ 2 -#define VDR_Q5_K_Q8_1_MMQ 8 - -// contiguous v/x values -static __device__ __forceinline__ float vec_dot_q5_K_q8_1_impl_vmmq( - const int * __restrict__ vl, const int * __restrict__ vh, const int * __restrict__ u, const uint8_t * __restrict__ sc, - const uint8_t * __restrict__ m, const half2 & dm5, const float * __restrict__ d8) { - -#if __CUDA_ARCH__ >= MIN_CC_DP4A // lowest compute capability for integer intrinsics - float sumf_d = 0.0f; - float sumf_m = 0.0f; - -#pragma unroll - for (int i = 0; i < QR5_K; ++i) { - const int vl0i = (vl[0] >> (4*i)) & 0x0F0F0F0F; - const int vl1i = (vl[1] >> (4*i)) & 0x0F0F0F0F; - - const int vh0i = ((vh[0] >> i) << 4) & 0x10101010; - const int vh1i = ((vh[1] >> i) << 4) & 0x10101010; - - const int v0i = vl0i | vh0i; - const int v1i = vl1i | vh1i; - - const int dot1 = __dp4a(v0i, u[2*i+0], __dp4a(v1i, u[2*i+1], 0)); // SIMD dot product - const int dot2 = __dp4a(0x01010101, u[2*i+0], __dp4a(0x01010101, u[2*i+1], 0)); // sum of u - - sumf_d += d8[i] * (dot1 * sc[i]); - sumf_m += d8[i] * (dot2 * m[i]); - - } - - const float2 dm5f = __half22float2(dm5); - - return dm5f.x*sumf_d - dm5f.y*sumf_m; - -#else - NO_DEVICE_CODE; -#endif // __CUDA_ARCH__ >= MIN_CC_DP4A -} - -// contiguous u/y values -static __device__ __forceinline__ float vec_dot_q5_K_q8_1_impl_mmq( - const int * __restrict__ v, const int * __restrict__ u, const uint8_t * __restrict__ sc, - const uint8_t * __restrict__ m, const half2 & dm4, const half2 * __restrict__ ds8) { - -#if __CUDA_ARCH__ >= MIN_CC_DP4A // lowest compute capability for integer intrinsics - float sumf_d = 0.0f; - float sumf_m = 0.0f; - -#pragma unroll - for (int i = 0; i < QR5_K*VDR_Q5_K_Q8_1_MMQ/QI8_1; ++i) { - int sumi_d = 0; - -#pragma unroll - for (int j = 0; j < QI8_1; ++j) { - sumi_d = __dp4a(v[i*QI8_1 + j], u[i*QI8_1 + j], sumi_d); // SIMD dot product - } - - const float2 ds8f = __half22float2(ds8[i]); - - sumf_d += ds8f.x * (sc[i] * sumi_d); - sumf_m += ds8f.y * m[i]; // sum of q8_1 block * q4_K min val - } - - const float2 dm4f = __half22float2(dm4); - - return dm4f.x*sumf_d - dm4f.y*sumf_m; - -#else - NO_DEVICE_CODE; -#endif // __CUDA_ARCH__ >= MIN_CC_DP4A -} - -#define VDR_Q6_K_Q8_1_MMVQ 1 -#define VDR_Q6_K_Q8_1_MMQ 8 - -// contiguous v/x values -static __device__ __forceinline__ float vec_dot_q6_K_q8_1_impl_mmvq( - const int & vl, const int & vh, const int * __restrict__ u, const int8_t * __restrict__ scales, - const float & d, const float * __restrict__ d8) { - -#if __CUDA_ARCH__ >= MIN_CC_DP4A // lowest compute capability for integer intrinsics - float sumf = 0.0f; - -#pragma unroll - for (int i = 0; i < QR6_K; ++i) { - const int sc = scales[4*i]; - - const int vil = (vl >> (4*i)) & 0x0F0F0F0F; - - const int vih = ((vh >> (4*i)) << 4) & 0x30303030; - - const int vi = __vsubss4((vil | vih), 0x20202020); // vi = (vil | vih) - 32 - - sumf += d8[i] * (__dp4a(vi, u[i], 0) * sc); // SIMD dot product - } - - return d*sumf; -#else - NO_DEVICE_CODE; -#endif // __CUDA_ARCH__ >= MIN_CC_DP4A -} - -// contiguous u/y values -static __device__ __forceinline__ float vec_dot_q6_K_q8_1_impl_mmq( - const int * __restrict__ v, const int * __restrict__ u, const int8_t * __restrict__ sc, - const float & d6, const float * __restrict__ d8) { - -#if __CUDA_ARCH__ >= MIN_CC_DP4A // lowest compute capability for integer intrinsics - float sumf_d = 0.0f; - -#pragma unroll - for (int i0 = 0; i0 < VDR_Q6_K_Q8_1_MMQ; i0 += 4) { - int2 sumi_d = {0, 0}; // 2 q6_K scales per q8_1 scale - -#pragma unroll - for (int i = i0; i < i0 + 2; ++i) { - sumi_d.x = __dp4a(v[2*i+0], u[2*i+0], sumi_d.x); // SIMD dot product - sumi_d.x = __dp4a(v[2*i+1], u[2*i+1], sumi_d.x); // SIMD dot product - - sumi_d.y = __dp4a(v[2*i+4], u[2*i+4], sumi_d.y); // SIMD dot product - sumi_d.y = __dp4a(v[2*i+5], u[2*i+5], sumi_d.y); // SIMD dot product - } - - sumf_d += d8[i0/4] * (sc[i0/2+0]*sumi_d.x + sc[i0/2+1]*sumi_d.y); - } - - return d6 * sumf_d; - -#else - NO_DEVICE_CODE; -#endif // __CUDA_ARCH__ >= MIN_CC_DP4A -} - -static __device__ __forceinline__ float vec_dot_q4_0_q8_1( - const void * __restrict__ vbq, const block_q8_1 * __restrict__ bq8_1, const int & iqs) { - - const block_q4_0 * bq4_0 = (const block_q4_0 *) vbq; - - int v[VDR_Q4_0_Q8_1_MMVQ]; - int u[2*VDR_Q4_0_Q8_1_MMVQ]; - -#pragma unroll - for (int i = 0; i < VDR_Q4_0_Q8_1_MMVQ; ++i) { - v[i] = get_int_from_uint8(bq4_0->qs, iqs + i); - u[2*i+0] = get_int_from_int8_aligned(bq8_1->qs, iqs + i); - u[2*i+1] = get_int_from_int8_aligned(bq8_1->qs, iqs + i + QI4_0); - } - - return vec_dot_q4_0_q8_1_impl(v, u, bq4_0->d, bq8_1->ds); -} - - -static __device__ __forceinline__ float vec_dot_q4_1_q8_1( - const void * __restrict__ vbq, const block_q8_1 * __restrict__ bq8_1, const int & iqs) { - - const block_q4_1 * bq4_1 = (const block_q4_1 *) vbq; - - int v[VDR_Q4_1_Q8_1_MMVQ]; - int u[2*VDR_Q4_1_Q8_1_MMVQ]; - -#pragma unroll - for (int i = 0; i < VDR_Q4_1_Q8_1_MMVQ; ++i) { - v[i] = get_int_from_uint8_aligned(bq4_1->qs, iqs + i); - u[2*i+0] = get_int_from_int8_aligned(bq8_1->qs, iqs + i); - u[2*i+1] = get_int_from_int8_aligned(bq8_1->qs, iqs + i + QI4_1); - } - - return vec_dot_q4_1_q8_1_impl(v, u, bq4_1->dm, bq8_1->ds); -} - -static __device__ __forceinline__ float vec_dot_q5_0_q8_1( - const void * __restrict__ vbq, const block_q8_1 * __restrict__ bq8_1, const int & iqs) { - - const block_q5_0 * bq5_0 = (const block_q5_0 *) vbq; - - int vl[VDR_Q5_0_Q8_1_MMVQ]; - int vh[VDR_Q5_0_Q8_1_MMVQ]; - int u[2*VDR_Q5_0_Q8_1_MMVQ]; - -#pragma unroll - for (int i = 0; i < VDR_Q5_0_Q8_1_MMVQ; ++i) { - vl[i] = get_int_from_uint8(bq5_0->qs, iqs + i); - vh[i] = get_int_from_uint8(bq5_0->qh, 0) >> (4 * (iqs + i)); - u[2*i+0] = get_int_from_int8_aligned(bq8_1->qs, iqs + i); - u[2*i+1] = get_int_from_int8_aligned(bq8_1->qs, iqs + i + QI5_0); - } - - return vec_dot_q5_0_q8_1_impl(vl, vh, u, bq5_0->d, bq8_1->ds); -} - -static __device__ __forceinline__ float vec_dot_q5_1_q8_1( - const void * __restrict__ vbq, const block_q8_1 * __restrict__ bq8_1, const int & iqs) { - - const block_q5_1 * bq5_1 = (const block_q5_1 *) vbq; - - int vl[VDR_Q5_1_Q8_1_MMVQ]; - int vh[VDR_Q5_1_Q8_1_MMVQ]; - int u[2*VDR_Q5_1_Q8_1_MMVQ]; - -#pragma unroll - for (int i = 0; i < VDR_Q5_1_Q8_1_MMVQ; ++i) { - vl[i] = get_int_from_uint8_aligned(bq5_1->qs, iqs + i); - vh[i] = get_int_from_uint8_aligned(bq5_1->qh, 0) >> (4 * (iqs + i)); - u[2*i+0] = get_int_from_int8_aligned(bq8_1->qs, iqs + i); - u[2*i+1] = get_int_from_int8_aligned(bq8_1->qs, iqs + i + QI5_1); - } - - return vec_dot_q5_1_q8_1_impl(vl, vh, u, bq5_1->dm, bq8_1->ds); -} - -static __device__ __forceinline__ float vec_dot_q8_0_q8_1( - const void * __restrict__ vbq, const block_q8_1 * __restrict__ bq8_1, const int & iqs) { - - const block_q8_0 * bq8_0 = (const block_q8_0 *) vbq; - - int v[VDR_Q8_0_Q8_1_MMVQ]; - int u[VDR_Q8_0_Q8_1_MMVQ]; - -#pragma unroll - for (int i = 0; i < VDR_Q8_0_Q8_1_MMVQ; ++i) { - v[i] = get_int_from_int8(bq8_0->qs, iqs + i); - u[i] = get_int_from_int8_aligned(bq8_1->qs, iqs + i); - } - - return vec_dot_q8_0_q8_1_impl(v, u, bq8_0->d, __low2half(bq8_1->ds)); -} - -static __device__ __forceinline__ float vec_dot_q2_K_q8_1( - const void * __restrict__ vbq, const block_q8_1 * __restrict__ bq8_1, const int & iqs) { - - const block_q2_K * bq2_K = (const block_q2_K *) vbq; - - const int bq8_offset = QR2_K * (iqs / QI8_1); - const int scale_offset = iqs - iqs % QI8_1 + (iqs % QI8_1) / (QI8_1/2); - - const uint8_t * scales = bq2_K->scales + scale_offset; - - const int v = get_int_from_uint8_aligned(bq2_K->qs, iqs); - int u[QR2_K]; - float d8[QR2_K]; - -#pragma unroll - for (int i = 0; i < QR2_K; ++ i) { - u[i] = get_int_from_int8_aligned(bq8_1[bq8_offset + i].qs, iqs % QI8_1); - d8[i] = __low2float(bq8_1[bq8_offset + i].ds); - } - - return vec_dot_q2_K_q8_1_impl_mmvq(v, u, scales, bq2_K->dm, d8); -} - -static __device__ __forceinline__ float vec_dot_q3_K_q8_1( - const void * __restrict__ vbq, const block_q8_1 * __restrict__ bq8_1, const int & iqs) { - - const block_q3_K * bq3_K = (const block_q3_K *) vbq; - - const int bq8_offset = QR3_K * (iqs / (QI3_K/2)); - const int scale_offset = iqs - iqs % QI8_1 + (iqs % QI8_1) / (QI8_1/2); - - const float d = bq3_K->d; - - const int vl = get_int_from_uint8(bq3_K->qs, iqs); - - // invert the mask with ~ so that a 0/1 results in 4/0 being subtracted - const int vh = ~get_int_from_uint8(bq3_K->hmask, iqs % (QI3_K/2)) >> bq8_offset; - - int u[QR3_K]; - float d8[QR3_K]; - -#pragma unroll - for (int i = 0; i < QR3_K; ++i) { - u[i] = get_int_from_int8_aligned(bq8_1[bq8_offset + i].qs, iqs % QI8_1); - d8[i] = __low2float(bq8_1[bq8_offset + i].ds); - } - - return vec_dot_q3_K_q8_1_impl_mmvq(vl, vh, u, bq3_K->scales, scale_offset, d, d8); -} - -static __device__ __forceinline__ float vec_dot_q4_K_q8_1( - const void * __restrict__ vbq, const block_q8_1 * __restrict__ bq8_1, const int & iqs) { - -#ifndef GGML_QKK_64 - const block_q4_K * bq4_K = (const block_q4_K *) vbq; - - int v[2]; - int u[2*QR4_K]; - float d8[QR4_K]; - - // iqs is in 0,2..30. bq8_offset = iqs/4 -> bq8_offset = 0, 2, 4, 6 - const int bq8_offset = QR4_K * ((iqs/2) / (QI8_1/2)); - - // iqs = 0....3 -> bq8_offset = 0, want q4_offset = 0, 4, 8, 12 - // iqs = 4....7 -> bq8_offset = 2, want q4_offset = 32, 36, 40, 44 - // iqs = 8...11 -> bq8_offset = 4, want q4_offset = 64, 68, 72, 76 - // iqs = 12..15 -> bq8_offset = 6, want q4_offset = 96, 100, 104, 108 - - const int * q4 = (const int *)(bq4_K->qs + 16 * bq8_offset + 4 * ((iqs/2)%4)); - v[0] = q4[0]; - v[1] = q4[4]; - - const uint16_t * scales = (const uint16_t *)bq4_K->scales; - uint16_t aux[2]; - const int j = bq8_offset/2; - if (j < 2) { - aux[0] = scales[j+0] & 0x3f3f; - aux[1] = scales[j+2] & 0x3f3f; - } else { - aux[0] = ((scales[j+2] >> 0) & 0x0f0f) | ((scales[j-2] & 0xc0c0) >> 2); - aux[1] = ((scales[j+2] >> 4) & 0x0f0f) | ((scales[j-0] & 0xc0c0) >> 2); - } - const uint8_t * sc = (const uint8_t *)aux; - const uint8_t * m = sc + 2; - - for (int i = 0; i < QR4_K; ++i) { - const block_q8_1 * bq8i = bq8_1 + bq8_offset + i; - d8[i] = __low2float(bq8i->ds); - - const int * q8 = (const int *)bq8i->qs + ((iqs/2)%4); - u[2*i+0] = q8[0]; - u[2*i+1] = q8[4]; - } - - return vec_dot_q4_K_q8_1_impl_vmmq(v, u, sc, m, bq4_K->dm, d8); - -#else - -#if __CUDA_ARCH__ >= MIN_CC_DP4A // lowest compute capability for integer intrinsics - const block_q4_K * bq4_K = (const block_q4_K *) vbq; - - float sumf_d = 0.0f; - float sumf_m = 0.0f; - - uint16_t aux16[2]; - const uint8_t * s = (const uint8_t *)aux16; - - const uint16_t * a = (const uint16_t *)bq4_K->scales; - aux16[0] = a[0] & 0x0f0f; - aux16[1] = (a[0] >> 4) & 0x0f0f; - - const float dall = bq4_K->dm[0]; - const float dmin = bq4_K->dm[1]; - - const float d8_1 = __low2float(bq8_1[0].ds); - const float d8_2 = __low2float(bq8_1[1].ds); - - const int ui1 = *((const int *)bq8_1[0].qs + (iqs/2)); - const int ui2 = *((const int *)bq8_1[0].qs + (iqs/2) + 4); - const int ui3 = *((const int *)bq8_1[1].qs + (iqs/2)); - const int ui4 = *((const int *)bq8_1[1].qs + (iqs/2) + 4); - - const int * q4 = (const int *)bq4_K->qs + (iqs/2); - const int v1 = q4[0]; - const int v2 = q4[4]; - - const int dot1 = __dp4a(ui2, v2 & 0x0f0f0f0f, __dp4a(ui1, v1 & 0x0f0f0f0f, 0)); - const int dot2 = __dp4a(ui4, (v2 >> 4) & 0x0f0f0f0f, __dp4a(ui3, (v1 >> 4) & 0x0f0f0f0f, 0)); - const int dot3 = __dp4a(0x01010101, ui2, __dp4a(0x01010101, ui1, 0)); - const int dot4 = __dp4a(0x01010101, ui4, __dp4a(0x01010101, ui3, 0)); - - sumf_d += d8_1 * (dot1 * s[0]) + d8_2 * (dot2 * s[1]); - sumf_m += d8_1 * (dot3 * s[2]) + d8_2 * (dot4 * s[3]); - - return dall * sumf_d - dmin * sumf_m; - -#else - NO_DEVICE_CODE; -#endif // __CUDA_ARCH__ >= MIN_CC_DP4A - -#endif -} - -static __device__ __forceinline__ float vec_dot_q5_K_q8_1( - const void * __restrict__ vbq, const block_q8_1 * __restrict__ bq8_1, const int & iqs) { - -#ifndef GGML_QKK_64 - const block_q5_K * bq5_K = (const block_q5_K *) vbq; - - int vl[2]; - int vh[2]; - int u[2*QR5_K]; - float d8[QR5_K]; - - const int bq8_offset = QR5_K * ((iqs/2) / (QI8_1/2)); - const int * ql = (const int *)(bq5_K->qs + 16 * bq8_offset + 4 * ((iqs/2)%4)); - const int * qh = (const int *)(bq5_K->qh + 4 * ((iqs/2)%4)); - - vl[0] = ql[0]; - vl[1] = ql[4]; - - vh[0] = qh[0] >> bq8_offset; - vh[1] = qh[4] >> bq8_offset; - - const uint16_t * scales = (const uint16_t *)bq5_K->scales; - uint16_t aux[2]; - const int j = bq8_offset/2; - if (j < 2) { - aux[0] = scales[j+0] & 0x3f3f; - aux[1] = scales[j+2] & 0x3f3f; - } else { - aux[0] = ((scales[j+2] >> 0) & 0x0f0f) | ((scales[j-2] & 0xc0c0) >> 2); - aux[1] = ((scales[j+2] >> 4) & 0x0f0f) | ((scales[j-0] & 0xc0c0) >> 2); - } - const uint8_t * sc = (const uint8_t *)aux; - const uint8_t * m = sc + 2; - -#pragma unroll - for (int i = 0; i < QR5_K; ++i) { - const block_q8_1 * bq8i = bq8_1 + bq8_offset + i; - d8[i] = __low2float(bq8i->ds); - - const int * q8 = (const int *)bq8i->qs + ((iqs/2)%4); - u[2*i+0] = q8[0]; - u[2*i+1] = q8[4]; - } - - return vec_dot_q5_K_q8_1_impl_vmmq(vl, vh, u, sc, m, bq5_K->dm, d8); - -#else - -#if __CUDA_ARCH__ >= MIN_CC_DP4A // lowest compute capability for integer intrinsics - const block_q5_K * bq5_K = (const block_q5_K *) vbq; - - const int8_t * s = bq5_K->scales; - - const float d = bq5_K->d; - - const float d8_1 = __low2half(bq8_1[0].ds); - const float d8_2 = __low2half(bq8_1[1].ds); - - const int ui1 = *((const int *)bq8_1[0].qs + (iqs/2)); - const int ui2 = *((const int *)bq8_1[0].qs + (iqs/2) + 4); - const int ui3 = *((const int *)bq8_1[1].qs + (iqs/2)); - const int ui4 = *((const int *)bq8_1[1].qs + (iqs/2) + 4); - - const int * ql = (const int *)bq5_K->qs + (iqs/2); - const int vl1 = ql[0]; - const int vl2 = ql[4]; - - const int step = 4 * (iqs/2); // 0, 4, 8, 12 - const int im = step/8; // = 0 for iqs = 0, 2, = 1 for iqs = 4, 6 - const int in = step%8; // 0, 4, 0, 4 - const int vh = (*((const int *)(bq5_K->qh + in))) >> im; - - const int v1 = (((vh << 4) & 0x10101010) ^ 0x10101010) | ((vl1 >> 0) & 0x0f0f0f0f); - const int v2 = (((vh << 2) & 0x10101010) ^ 0x10101010) | ((vl2 >> 0) & 0x0f0f0f0f); - const int v3 = (((vh >> 0) & 0x10101010) ^ 0x10101010) | ((vl1 >> 4) & 0x0f0f0f0f); - const int v4 = (((vh >> 2) & 0x10101010) ^ 0x10101010) | ((vl2 >> 4) & 0x0f0f0f0f); - - const float sumf_d = d8_1 * (__dp4a(ui1, v1, 0) * s[0] + __dp4a(ui2, v2, 0) * s[1]) - + d8_2 * (__dp4a(ui3, v3, 0) * s[2] + __dp4a(ui4, v4, 0) * s[3]); - - return d * sumf_d; - -#else - NO_DEVICE_CODE; -#endif // __CUDA_ARCH__ >= MIN_CC_DP4A - -#endif -} - -static __device__ __forceinline__ float vec_dot_q6_K_q8_1( - const void * __restrict__ vbq, const block_q8_1 * __restrict__ bq8_1, const int & iqs) { - - const block_q6_K * bq6_K = (const block_q6_K *) vbq; - - const int bq8_offset = 2 * QR6_K * (iqs / (QI6_K/2)) + (iqs % (QI6_K/2)) / (QI6_K/4); - const int scale_offset = (QI6_K/4) * (iqs / (QI6_K/2)) + (iqs % (QI6_K/2)) / (QI6_K/8); - const int vh_shift = 2 * ((iqs % (QI6_K/2)) / (QI6_K/4)); - - const int vl = get_int_from_uint8(bq6_K->ql, iqs); - const int vh = get_int_from_uint8(bq6_K->qh, (QI6_K/4) * (iqs / (QI6_K/2)) + iqs % (QI6_K/4)) >> vh_shift; - - const int8_t * scales = bq6_K->scales + scale_offset; - - int u[QR6_K]; - float d8[QR6_K]; - -#pragma unroll - for (int i = 0; i < QR6_K; ++i) { - u[i] = get_int_from_int8_aligned(bq8_1[bq8_offset + 2*i].qs, iqs % QI8_1); - d8[i] = __low2float(bq8_1[bq8_offset + 2*i].ds); - } - - return vec_dot_q6_K_q8_1_impl_mmvq(vl, vh, u, scales, bq6_K->d, d8); -} - -static __device__ __forceinline__ float vec_dot_iq2_xxs_q8_1( - const void * __restrict__ vbq, const block_q8_1 * __restrict__ bq8_1, const int & iqs) { -#if QK_K == 256 - const block_iq2_xxs * bq2 = (const block_iq2_xxs *) vbq; - -#if QR2_XXS == 8 - const int ib32 = iqs; - const uint16_t * q2 = bq2->qs + 4*ib32; - const uint8_t * aux8 = (const uint8_t *)q2; - const int8_t * q8 = bq8_1[ib32].qs; - uint32_t aux32 = q2[2] | (q2[3] << 16); - int sumi = 0; - for (int l = 0; l < 4; ++l) { - const uint8_t * grid = (const uint8_t *)(iq2xxs_grid + aux8[l]); - const uint8_t signs = ksigns_iq2xs[aux32 & 127]; - for (int j = 0; j < 8; ++j) { - sumi += q8[j] * grid[j] * (signs & kmask_iq2xs[j] ? -1 : 1); - } - q8 += 8; - aux32 >>= 7; - } - const float d = (float)bq2->d * (0.5f + aux32) * __low2float(bq8_1[ib32].ds) * 0.25f; - return d * sumi; -#else - // iqs is 0...15 - const int ib32 = iqs/2; - const int il = iqs%2; - const uint16_t * q2 = bq2->qs + 4*ib32; - const uint8_t * aux8 = (const uint8_t *)q2; - const uint8_t * grid1 = (const uint8_t *)(iq2xxs_grid + aux8[2*il+0]); - const uint8_t * grid2 = (const uint8_t *)(iq2xxs_grid + aux8[2*il+1]); - const uint32_t aux32 = q2[2] | (q2[3] << 16); - const float d = (float)bq2->d * (0.5f + (aux32 >> 28)) * __low2float(bq8_1[ib32].ds) * 0.25f; - const uint8_t signs1 = ksigns_iq2xs[(aux32 >> 14*il) & 127]; - const uint8_t signs2 = ksigns_iq2xs[(aux32 >> (14*il + 7)) & 127]; - const int8_t * q8 = bq8_1[ib32].qs + 16*il; - int sumi1 = 0, sumi2 = 0; - for (int j = 0; j < 8; ++j) { - sumi1 += q8[j+0] * grid1[j] * (signs1 & kmask_iq2xs[j] ? -1 : 1); - sumi2 += q8[j+8] * grid2[j] * (signs2 & kmask_iq2xs[j] ? -1 : 1); - } - return d * (sumi1 + sumi2); -#endif -#else - NO_DEVICE_CODE; -#endif -} - -static __device__ __forceinline__ float vec_dot_iq2_xs_q8_1( - const void * __restrict__ vbq, const block_q8_1 * __restrict__ bq8_1, const int & iqs) { -#if __CUDA_ARCH__ >= MIN_CC_DP4A // lowest compute capability for integer intrinsics -#if QK_K == 256 - const block_iq2_xs * bq2 = (const block_iq2_xs *) vbq; - - const int ib32 = iqs; - const uint16_t * q2 = bq2->qs + 4*ib32; - const int8_t * q8 = bq8_1[ib32].qs; - const uint8_t ls1 = bq2->scales[ib32] & 0xf; - const uint8_t ls2 = bq2->scales[ib32] >> 4; - int sumi1 = 0; - for (int l = 0; l < 2; ++l) { - const uint32_t * grid = (const uint32_t *)(iq2xs_grid + (q2[l] & 511)); - const uint32_t * signs = (const uint32_t *)(ksigns64 + (q2[l] >> 9)); - const int grid_l = __vsub4(grid[0] ^ signs[0], signs[0]); - const int grid_h = __vsub4(grid[1] ^ signs[1], signs[1]); - sumi1 = __dp4a(grid_l, *((const int *)q8 + 0), sumi1); - sumi1 = __dp4a(grid_h, *((const int *)q8 + 1), sumi1); - q8 += 8; - } - int sumi2 = 0; - for (int l = 2; l < 4; ++l) { - const uint32_t * grid = (const uint32_t *)(iq2xs_grid + (q2[l] & 511)); - const uint32_t * signs = (const uint32_t *)(ksigns64 + (q2[l] >> 9)); - const int grid_l = __vsub4(grid[0] ^ signs[0], signs[0]); - const int grid_h = __vsub4(grid[1] ^ signs[1], signs[1]); - sumi2 = __dp4a(grid_l, *((const int *)q8 + 0), sumi2); - sumi2 = __dp4a(grid_h, *((const int *)q8 + 1), sumi2); - q8 += 8; - } - const float d = (float)bq2->d * __low2float(bq8_1[ib32].ds) * 0.25f; - return d * ((0.5f + ls1) * sumi1 + (0.5f + ls2) * sumi2); -#else - GGML_UNUSED(ksigns64); - NO_DEVICE_CODE; -#endif -#else - GGML_UNUSED(ksigns64); - NO_DEVICE_CODE; -#endif -} - -// TODO -static __device__ __forceinline__ float vec_dot_iq2_s_q8_1( - const void * __restrict__ vbq, const block_q8_1 * __restrict__ bq8_1, const int & iqs) { -#if __CUDA_ARCH__ >= MIN_CC_DP4A // lowest compute capability for integer intrinsics -#if QK_K == 256 - const block_iq2_s * bq2 = (const block_iq2_s *) vbq; - - const int ib32 = iqs; - const int8_t * q8 = bq8_1[ib32].qs; - const uint8_t * signs = bq2->qs + QK_K/8 + 4*ib32; - const uint8_t ls1 = bq2->scales[ib32] & 0xf; - const uint8_t ls2 = bq2->scales[ib32] >> 4; - int sumi1 = 0; - for (int l = 0; l < 2; ++l) { - const uint32_t * grid = (const uint32_t *)(iq2s_grid + (bq2->qs[4*ib32+l] | ((bq2->qh[ib32] << (8-2*l)) & 0x300))); - const uint32_t signs0 = __vcmpeq4(((signs[l] & 0xf) * 0x01010101) & 0x08040201, 0x08040201); - const uint32_t signs1 = __vcmpeq4(((signs[l] >> 4) * 0x01010101) & 0x08040201, 0x08040201); - const int grid_l = __vsub4(grid[0] ^ signs0, signs0); - const int grid_h = __vsub4(grid[1] ^ signs1, signs1); - sumi1 = __dp4a(grid_l, *((const int *)q8 + 0), sumi1); - sumi1 = __dp4a(grid_h, *((const int *)q8 + 1), sumi1); - q8 += 8; - } - int sumi2 = 0; - for (int l = 2; l < 4; ++l) { - const uint32_t * grid = (const uint32_t *)(iq2s_grid + (bq2->qs[4*ib32+l] | ((bq2->qh[ib32] << (8-2*l)) & 0x300))); - const uint32_t signs0 = __vcmpeq4(((signs[l] & 0xf) * 0x01010101) & 0x08040201, 0x08040201); - const uint32_t signs1 = __vcmpeq4(((signs[l] >> 4) * 0x01010101) & 0x08040201, 0x08040201); - const int grid_l = __vsub4(grid[0] ^ signs0, signs0); - const int grid_h = __vsub4(grid[1] ^ signs1, signs1); - sumi2 = __dp4a(grid_l, *((const int *)q8 + 0), sumi2); - sumi2 = __dp4a(grid_h, *((const int *)q8 + 1), sumi2); - q8 += 8; - } - const float d = (float)bq2->d * __low2float(bq8_1[ib32].ds) * 0.25f; - return d * ((0.5f + ls1) * sumi1 + (0.5f + ls2) * sumi2); -#else - GGML_UNUSED(ksigns64); - NO_DEVICE_CODE; -#endif -#else - GGML_UNUSED(ksigns64); - NO_DEVICE_CODE; -#endif -} - -static __device__ __forceinline__ float vec_dot_iq3_xxs_q8_1( - const void * __restrict__ vbq, const block_q8_1 * __restrict__ bq8_1, const int & iqs) { -#if __CUDA_ARCH__ >= MIN_CC_DP4A // lowest compute capability for integer intrinsics -#if QK_K == 256 - const block_iq3_xxs * bq2 = (const block_iq3_xxs *) vbq; - - const int ib32 = iqs; - const uint8_t * q3 = bq2->qs + 8*ib32; - const uint16_t * gas = (const uint16_t *)(bq2->qs + QK_K/4) + 2*ib32; - const int8_t * q8 = bq8_1[ib32].qs; - uint32_t aux32 = gas[0] | (gas[1] << 16); - int sumi = 0; - for (int l = 0; l < 4; ++l) { - const uint32_t * grid1 = iq3xxs_grid + q3[2*l+0]; - const uint32_t * grid2 = iq3xxs_grid + q3[2*l+1]; - const uint32_t * signs = (const uint32_t *)(ksigns64 + (aux32 & 127)); - const int grid_l = __vsub4(grid1[0] ^ signs[0], signs[0]); - const int grid_h = __vsub4(grid2[0] ^ signs[1], signs[1]); - sumi = __dp4a(grid_l, *((int *)q8+0), sumi); - sumi = __dp4a(grid_h, *((int *)q8+1), sumi); - q8 += 8; - aux32 >>= 7; - } - const float d = (float)bq2->d * (0.5f + aux32) * __low2float(bq8_1[ib32].ds) * 0.5f; - return d * sumi; -#else - NO_DEVICE_CODE; -#endif -#else - NO_DEVICE_CODE; -#endif -} - -// TODO: don't use lookup table for signs -static __device__ __forceinline__ float vec_dot_iq3_s_q8_1( - const void * __restrict__ vbq, const block_q8_1 * __restrict__ bq8_1, const int & iqs) { -#if __CUDA_ARCH__ >= MIN_CC_DP4A // lowest compute capability for integer intrinsics -#if QK_K == 256 - const block_iq3_s * bq2 = (const block_iq3_s *) vbq; - - const int ib32 = iqs; - const uint8_t * qs = bq2->qs + 8*ib32; - const int8_t * q8 = bq8_1[ib32].qs; - int sumi = 0; - for (int l = 0; l < 4; ++l) { - const uint32_t * grid1 = iq3s_grid + (qs[2*l+0] | ((bq2->qh[ib32] << (8 - 2*l)) & 256)); - const uint32_t * grid2 = iq3s_grid + (qs[2*l+1] | ((bq2->qh[ib32] << (7 - 2*l)) & 256)); - uint32_t signs0 = __vcmpeq4(((bq2->signs[4*ib32+l] & 0xf) * 0x01010101) & 0x08040201, 0x08040201); - uint32_t signs1 = __vcmpeq4(((bq2->signs[4*ib32+l] >> 4) * 0x01010101) & 0x08040201, 0x08040201); - const int grid_l = __vsub4(grid1[0] ^ signs0, signs0); - const int grid_h = __vsub4(grid2[0] ^ signs1, signs1); - sumi = __dp4a(grid_l, *((int *)q8+0), sumi); - sumi = __dp4a(grid_h, *((int *)q8+1), sumi); - q8 += 8; - } - const float d = (float)bq2->d * (1 + 2*((bq2->scales[ib32/2] >> 4*(ib32%2)) & 0xf)) * __low2float(bq8_1[ib32].ds); - return d * sumi; -#else - NO_DEVICE_CODE; -#endif -#else - NO_DEVICE_CODE; -#endif -} - -static __device__ __forceinline__ float vec_dot_iq1_s_q8_1( - const void * __restrict__ vbq, const block_q8_1 * __restrict__ bq8_1, const int & iqs) { -#if QK_K == 256 - const block_iq1_s * bq1 = (const block_iq1_s *) vbq; - - const int ib32 = iqs; - int sumi = 0; -#if __CUDA_ARCH__ >= MIN_CC_DP4A // lowest compute capability for integer intrinsics - const int * q8 = (const int *)bq8_1[ib32].qs; - for (int l = 0; l < 4; ++l) { - const int * grid = (const int *)(iq1s_grid_gpu + (bq1->qs[4*ib32+l] | (((bq1->qh[ib32] >> 3*l) & 7) << 8))); - int grid0 = grid[0] & 0x0f0f0f0f; - int grid1 = (grid[0] >> 4) & 0x0f0f0f0f; - sumi = __dp4a(q8[2*l+1], grid1, __dp4a(q8[2*l+0], grid0, sumi)); - } -#else - const int8_t * q8 = bq8_1[ib32].qs; - for (int l = 0; l < 4; ++l) { - const uint8_t * grid = (const uint8_t *)(iq1s_grid_gpu + (bq1->qs[4*ib32+l] | (((bq1->qh[ib32] >> 3*l) & 7) << 8))); - for (int j = 0; j < 4; ++j) { - sumi += q8[j] * (grid[j] & 0xf) + q8[j+4] * (grid[j] >> 4); - } - q8 += 8; - } -#endif - const float delta = bq1->qh[ib32] & 0x8000 ? -1-IQ1S_DELTA : -1+IQ1S_DELTA; - const float d1q = (float)bq1->d * (2*((bq1->qh[ib32] >> 12) & 7) + 1); - const float d = d1q * __low2float (bq8_1[ib32].ds); - const float m = d1q * __high2float(bq8_1[ib32].ds); - return d * sumi + m * delta; -#else - NO_DEVICE_CODE; -#endif -} - -static __device__ __forceinline__ float vec_dot_iq1_m_q8_1( - const void * __restrict__ vbq, const block_q8_1 * __restrict__ bq8_1, const int & iqs) { -#if QK_K == 256 - const block_iq1_m * bq1 = (const block_iq1_m *) vbq; - - const int ib32 = iqs; - int sumi[2] = {0, 0}; - float sumf[2] = {0.f, 0.f}; -#if __CUDA_ARCH__ >= MIN_CC_DP4A // lowest compute capability for integer intrinsics - const int * q8 = (const int *)bq8_1[ib32].qs; - for (int l = 0; l < 4; ++l) { - const int * grid = (const int *)(iq1s_grid_gpu + (bq1->qs[4*ib32+l] | (((bq1->qh[2*ib32+l/2] >> 4*(l%2)) & 7) << 8))); - int grid0 = grid[0] & 0x0f0f0f0f; - int grid1 = (grid[0] >> 4) & 0x0f0f0f0f; - sumi[l/2] = __dp4a(q8[2*l+1], grid1, __dp4a(q8[2*l+0], grid0, sumi[l/2])); - const float delta = (bq1->qh[2*ib32+l/2] >> 4*(l%2)) & 0x08 ? -1-IQ1M_DELTA : -1+IQ1M_DELTA; - const int sumy = __dp4a(q8[2*l+1], 0x01010101, __dp4a(q8[2*l+0], 0x01010101, 0)); - sumf[l/2] += delta*sumy; - } -#else - const int8_t * q8 = bq8_1[ib32].qs; - for (int l = 0; l < 4; ++l) { - const uint8_t * grid = (const uint8_t *)(iq1s_grid_gpu + (bq1->qs[4*ib32+l] | (((bq1->qh[ib32] >> 3*l) & 7) << 8))); - int sumy = 0; - for (int j = 0; j < 4; ++j) { - sumi[l/2] += q8[j] * (grid[j] & 0xf) + q8[j+4] * (grid[j] >> 4); - sumy += q8[j] + q8[j+4]; - } - const float delta = (bq1->qh[2*ib32+l/2] >> 4*(l%2)) & 0x08 ? -1-IQ1M_DELTA : -1+IQ1M_DELTA; - sumf[l/2] += delta*sumy; - q8 += 8; - } -#endif - iq1m_scale_t scale; - const uint16_t * sc = (const uint16_t *)bq1->scales; - scale.u16 = (sc[0] >> 12) | ((sc[1] >> 8) & 0x00f0) | ((sc[2] >> 4) & 0x0f00) | (sc[3] & 0xf000); - const float d = (float)scale.f16 * __low2float (bq8_1[ib32].ds); - return d * ((sumi[0] + sumf[0]) * (2*((sc[ib32/2] >> 6*(ib32%2)) & 0x7) + 1) + (sumi[1] + sumf[1]) * (2*((sc[ib32/2] >> (6*(ib32%2)+3)) & 0x7) + 1)); -#else - NO_DEVICE_CODE; -#endif -} - -#if __CUDA_ARCH__ >= MIN_CC_DP4A // lowest compute capability for integer intrinsics -static __device__ __forceinline__ void get_int_from_table_16(const uint32_t & q4, const uint8_t * values, - int & val1, int & val2) { - - uint32_t aux32; const uint8_t * q8 = (const uint8_t *)&aux32; - aux32 = q4 & 0x0f0f0f0f; - uint16_t v1 = values[q8[0]] | (values[q8[1]] << 8); - uint16_t v2 = values[q8[2]] | (values[q8[3]] << 8); - val1 = v1 | (v2 << 16); - aux32 = (q4 >> 4) & 0x0f0f0f0f; - v1 = values[q8[0]] | (values[q8[1]] << 8); - v2 = values[q8[2]] | (values[q8[3]] << 8); - val2 = v1 | (v2 << 16); -} -#endif - -static __device__ __forceinline__ float vec_dot_iq4_nl_q8_1( - const void * __restrict__ vbq, const block_q8_1 * __restrict__ bq8_1, const int & iqs) { - - const block_iq4_nl * bq = (const block_iq4_nl *) vbq; - -#if __CUDA_ARCH__ >= MIN_CC_DP4A // lowest compute capability for integer intrinsics - const uint16_t * q4 = (const uint16_t *)bq->qs + 2*iqs; - const int32_t * q8 = (const int32_t *)bq8_1->qs + iqs; - - const uint8_t * values = (const uint8_t *)kvalues_iq4nl; - - int v1, v2; - int sumi1 = 0, sumi2 = 0; - for (int l = 0; l < VDR_Q4_0_Q8_1_MMVQ; ++l) { - const uint32_t aux = q4[2*l] | (q4[2*l+1] << 16); - get_int_from_table_16(aux, values, v1, v2); - sumi1 = __dp4a(v1, q8[l+0], sumi1); - sumi2 = __dp4a(v2, q8[l+4], sumi2); - } - -#else - const uint8_t * q4 = bq->qs + 4*iqs; - const int8_t * q8 = bq8_1->qs + 4*iqs; - - int sumi1 = 0, sumi2 = 0; - for (int l = 0; l < 4*VDR_Q4_0_Q8_1_MMVQ; ++l) { - sumi1 += q8[l+ 0] * kvalues_iq4nl[q4[l] & 0xf]; - sumi2 += q8[l+16] * kvalues_iq4nl[q4[l] >> 4]; - } -#endif - const float d = (float)bq->d * __low2float(bq8_1->ds); - return d * (sumi1 + sumi2); -} - -static __device__ __forceinline__ float vec_dot_iq4_xs_q8_1( - const void * __restrict__ vbq, const block_q8_1 * __restrict__ bq8_1, const int & iqs) { - -#if QK_K == 256 -#if __CUDA_ARCH__ >= MIN_CC_DP4A // lowest compute capability for integer intrinsics - - const block_iq4_xs * bq4 = (const block_iq4_xs *) vbq; - const uint8_t * values = (const uint8_t *)kvalues_iq4nl; - - // iqs is 0...7 - const int ib32 = iqs; - const int32_t * q8 = (const int *)bq8_1[ib32].qs; - const uint32_t * q4 = (const uint32_t *)bq4->qs + 4*ib32; - const int8_t ls = ((bq4->scales_l[ib32/2] >> 4*(ib32%2)) & 0xf) | (((bq4->scales_h >> 2*ib32) & 3) << 4); - const float d = (float)bq4->d * (ls - 32) * __low2float(bq8_1[ib32].ds); - int v1, v2; - int sumi1 = 0, sumi2 = 0; - for (int j = 0; j < 4; ++j) { - get_int_from_table_16(q4[j], values, v1, v2); - sumi1 = __dp4a(v1, q8[j+0], sumi1); - sumi2 = __dp4a(v2, q8[j+4], sumi2); - } - return d * (sumi1 + sumi2); - -#else - NO_DEVICE_CODE; -#endif -#else - return vec_dot_iq4_xs_q8_1(vbq, bq8_1, iqs); -#endif -} diff --git a/ggml-impl.h b/ggml-impl.h deleted file mode 100644 index 2087f7ded7b..00000000000 --- a/ggml-impl.h +++ /dev/null @@ -1,523 +0,0 @@ -#pragma once - -#include "ggml.h" - -// GGML internal header - -#include -#include // load `stdlib.h` before other headers to work around MinGW bug: https://sourceforge.net/p/mingw-w64/bugs/192/ -#include -#include -#include // memcpy -#include // fabsf - -#undef MIN -#undef MAX - -#define MIN(a, b) ((a) < (b) ? (a) : (b)) -#define MAX(a, b) ((a) > (b) ? (a) : (b)) - -#ifdef __cplusplus -extern "C" { -#endif - -// static_assert should be a #define, but if it's not, -// fall back to the _Static_assert C11 keyword. -// if C99 - static_assert is noop -// ref: https://stackoverflow.com/a/53923785/4039976 -#ifndef __cplusplus -#ifndef static_assert -#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201100L) -#define static_assert(cond, msg) _Static_assert(cond, msg) -#else -#define static_assert(cond, msg) struct global_scope_noop_trick -#endif -#endif -#endif - -// __FMA__ and __F16C__ are not defined in MSVC, however they are implied with AVX2/AVX512 -#if defined(_MSC_VER) && (defined(__AVX2__) || defined(__AVX512F__)) -#ifndef __FMA__ -#define __FMA__ -#endif -#ifndef __F16C__ -#define __F16C__ -#endif -#ifndef __SSE3__ -#define __SSE3__ -#endif -#endif - -// 16-bit float -// on Arm, we use __fp16 -// on x86, we use uint16_t -#if defined(__ARM_NEON) - -// if YCM cannot find , make a symbolic link to it, for example: -// -// $ ln -sfn /Library/Developer/CommandLineTools/usr/lib/clang/13.1.6/include/arm_neon.h ./src/ -// -#include - -#ifdef _MSC_VER - -typedef uint16_t ggml_fp16_internal_t; - -#define ggml_vld1q_u32(w,x,y,z) { ((w) + ((uint64_t)(x) << 32)), ((y) + ((uint64_t)(z) << 32)) } - -#else - -typedef __fp16 ggml_fp16_internal_t; - -#define ggml_vld1q_u32(w,x,y,z) { (w), (x), (y), (z) } - -#endif // _MSC_VER - -#if !defined(__aarch64__) - -// 32-bit ARM compatibility - -// vaddvq_s16 -// vpaddq_s16 -// vpaddq_s32 -// vaddvq_s32 -// vaddvq_f32 -// vmaxvq_f32 -// vcvtnq_s32_f32 -// vzip1_u8 -// vzip2_u8 - -inline static int32_t vaddvq_s16(int16x8_t v) { - return - (int32_t)vgetq_lane_s16(v, 0) + (int32_t)vgetq_lane_s16(v, 1) + - (int32_t)vgetq_lane_s16(v, 2) + (int32_t)vgetq_lane_s16(v, 3) + - (int32_t)vgetq_lane_s16(v, 4) + (int32_t)vgetq_lane_s16(v, 5) + - (int32_t)vgetq_lane_s16(v, 6) + (int32_t)vgetq_lane_s16(v, 7); -} - -inline static int16x8_t vpaddq_s16(int16x8_t a, int16x8_t b) { - int16x4_t a0 = vpadd_s16(vget_low_s16(a), vget_high_s16(a)); - int16x4_t b0 = vpadd_s16(vget_low_s16(b), vget_high_s16(b)); - return vcombine_s16(a0, b0); -} - -inline static int32x4_t vpaddq_s32(int32x4_t a, int32x4_t b) { - int32x2_t a0 = vpadd_s32(vget_low_s32(a), vget_high_s32(a)); - int32x2_t b0 = vpadd_s32(vget_low_s32(b), vget_high_s32(b)); - return vcombine_s32(a0, b0); -} - -inline static int32_t vaddvq_s32(int32x4_t v) { - return vgetq_lane_s32(v, 0) + vgetq_lane_s32(v, 1) + vgetq_lane_s32(v, 2) + vgetq_lane_s32(v, 3); -} - -inline static float vaddvq_f32(float32x4_t v) { - return vgetq_lane_f32(v, 0) + vgetq_lane_f32(v, 1) + vgetq_lane_f32(v, 2) + vgetq_lane_f32(v, 3); -} - -inline static float vmaxvq_f32(float32x4_t v) { - return - MAX(MAX(vgetq_lane_f32(v, 0), vgetq_lane_f32(v, 1)), - MAX(vgetq_lane_f32(v, 2), vgetq_lane_f32(v, 3))); -} - -inline static int32x4_t vcvtnq_s32_f32(float32x4_t v) { - int32x4_t res; - - res[0] = roundf(vgetq_lane_f32(v, 0)); - res[1] = roundf(vgetq_lane_f32(v, 1)); - res[2] = roundf(vgetq_lane_f32(v, 2)); - res[3] = roundf(vgetq_lane_f32(v, 3)); - - return res; -} - -inline static uint8x8_t vzip1_u8(uint8x8_t a, uint8x8_t b) { - uint8x8_t res; - - res[0] = a[0]; res[1] = b[0]; - res[2] = a[1]; res[3] = b[1]; - res[4] = a[2]; res[5] = b[2]; - res[6] = a[3]; res[7] = b[3]; - - return res; -} - -inline static uint8x8_t vzip2_u8(uint8x8_t a, uint8x8_t b) { - uint8x8_t res; - - res[0] = a[4]; res[1] = b[4]; - res[2] = a[5]; res[3] = b[5]; - res[4] = a[6]; res[5] = b[6]; - res[6] = a[7]; res[7] = b[7]; - - return res; -} - -// vld1q_s16_x2 -// vld1q_u8_x2 -// vld1q_u8_x4 -// vld1q_s8_x2 -// vld1q_s8_x4 -// TODO: double-check these work correctly - -typedef struct ggml_int16x8x2_t { - int16x8_t val[2]; -} ggml_int16x8x2_t; - -inline static ggml_int16x8x2_t ggml_vld1q_s16_x2(const int16_t * ptr) { - ggml_int16x8x2_t res; - - res.val[0] = vld1q_s16(ptr + 0); - res.val[1] = vld1q_s16(ptr + 8); - - return res; -} - -typedef struct ggml_uint8x16x2_t { - uint8x16_t val[2]; -} ggml_uint8x16x2_t; - -inline static ggml_uint8x16x2_t ggml_vld1q_u8_x2(const uint8_t * ptr) { - ggml_uint8x16x2_t res; - - res.val[0] = vld1q_u8(ptr + 0); - res.val[1] = vld1q_u8(ptr + 16); - - return res; -} - -typedef struct ggml_uint8x16x4_t { - uint8x16_t val[4]; -} ggml_uint8x16x4_t; - -inline static ggml_uint8x16x4_t ggml_vld1q_u8_x4(const uint8_t * ptr) { - ggml_uint8x16x4_t res; - - res.val[0] = vld1q_u8(ptr + 0); - res.val[1] = vld1q_u8(ptr + 16); - res.val[2] = vld1q_u8(ptr + 32); - res.val[3] = vld1q_u8(ptr + 48); - - return res; -} - -typedef struct ggml_int8x16x2_t { - int8x16_t val[2]; -} ggml_int8x16x2_t; - -inline static ggml_int8x16x2_t ggml_vld1q_s8_x2(const int8_t * ptr) { - ggml_int8x16x2_t res; - - res.val[0] = vld1q_s8(ptr + 0); - res.val[1] = vld1q_s8(ptr + 16); - - return res; -} - -typedef struct ggml_int8x16x4_t { - int8x16_t val[4]; -} ggml_int8x16x4_t; - -inline static ggml_int8x16x4_t ggml_vld1q_s8_x4(const int8_t * ptr) { - ggml_int8x16x4_t res; - - res.val[0] = vld1q_s8(ptr + 0); - res.val[1] = vld1q_s8(ptr + 16); - res.val[2] = vld1q_s8(ptr + 32); - res.val[3] = vld1q_s8(ptr + 48); - - return res; -} - -// NOTE: not tested -inline static int8x16_t ggml_vqtbl1q_s8(int8x16_t a, uint8x16_t b) { - int8x16_t res; - - res[ 0] = a[b[ 0]]; - res[ 1] = a[b[ 1]]; - res[ 2] = a[b[ 2]]; - res[ 3] = a[b[ 3]]; - res[ 4] = a[b[ 4]]; - res[ 5] = a[b[ 5]]; - res[ 6] = a[b[ 6]]; - res[ 7] = a[b[ 7]]; - res[ 8] = a[b[ 8]]; - res[ 9] = a[b[ 9]]; - res[10] = a[b[10]]; - res[11] = a[b[11]]; - res[12] = a[b[12]]; - res[13] = a[b[13]]; - res[14] = a[b[14]]; - res[15] = a[b[15]]; - - return res; -} - -// NOTE: not tested -inline static uint8x16_t ggml_vqtbl1q_u8(uint8x16_t a, uint8x16_t b) { - uint8x16_t res; - - res[ 0] = a[b[ 0]]; - res[ 1] = a[b[ 1]]; - res[ 2] = a[b[ 2]]; - res[ 3] = a[b[ 3]]; - res[ 4] = a[b[ 4]]; - res[ 5] = a[b[ 5]]; - res[ 6] = a[b[ 6]]; - res[ 7] = a[b[ 7]]; - res[ 8] = a[b[ 8]]; - res[ 9] = a[b[ 9]]; - res[10] = a[b[10]]; - res[11] = a[b[11]]; - res[12] = a[b[12]]; - res[13] = a[b[13]]; - res[14] = a[b[14]]; - res[15] = a[b[15]]; - - return res; -} - -#else - -#define ggml_int16x8x2_t int16x8x2_t -#define ggml_uint8x16x2_t uint8x16x2_t -#define ggml_uint8x16x4_t uint8x16x4_t -#define ggml_int8x16x2_t int8x16x2_t -#define ggml_int8x16x4_t int8x16x4_t - -#define ggml_vld1q_s16_x2 vld1q_s16_x2 -#define ggml_vld1q_u8_x2 vld1q_u8_x2 -#define ggml_vld1q_u8_x4 vld1q_u8_x4 -#define ggml_vld1q_s8_x2 vld1q_s8_x2 -#define ggml_vld1q_s8_x4 vld1q_s8_x4 -#define ggml_vqtbl1q_s8 vqtbl1q_s8 -#define ggml_vqtbl1q_u8 vqtbl1q_u8 - -#endif // !defined(__aarch64__) - -#if !defined(__ARM_FEATURE_DOTPROD) - -inline static int32x4_t ggml_vdotq_s32(int32x4_t acc, int8x16_t a, int8x16_t b) { - const int16x8_t p0 = vmull_s8(vget_low_s8 (a), vget_low_s8 (b)); - const int16x8_t p1 = vmull_s8(vget_high_s8(a), vget_high_s8(b)); - - return vaddq_s32(acc, vaddq_s32(vpaddlq_s16(p0), vpaddlq_s16(p1))); -} - -#else - -#define ggml_vdotq_s32(a, b, c) vdotq_s32(a, b, c) - -#endif // !defined(__ARM_FEATURE_DOTPROD) - -#endif // defined(__ARM_NEON) - -#if defined(__ARM_NEON) && !defined(__MSC_VER) - -#define GGML_COMPUTE_FP16_TO_FP32(x) ggml_compute_fp16_to_fp32(x) -#define GGML_COMPUTE_FP32_TO_FP16(x) ggml_compute_fp32_to_fp16(x) - -#define GGML_FP16_TO_FP32(x) ggml_compute_fp16_to_fp32(x) - -static inline float ggml_compute_fp16_to_fp32(ggml_fp16_t h) { - ggml_fp16_internal_t tmp; - memcpy(&tmp, &h, sizeof(ggml_fp16_t)); - return (float)tmp; -} - -static inline ggml_fp16_t ggml_compute_fp32_to_fp16(float f) { - ggml_fp16_t res; - ggml_fp16_internal_t tmp = f; - memcpy(&res, &tmp, sizeof(ggml_fp16_t)); - return res; -} - -#else - -#ifdef __wasm_simd128__ -#include -#else -#ifdef __POWER9_VECTOR__ -#include -#undef bool -#define bool _Bool -#else -#if defined(_MSC_VER) || defined(__MINGW32__) -#include -#else -#if defined(__AVX__) || defined(__AVX2__) || defined(__AVX512F__) || defined(__SSSE3__) || defined(__SSE3__) || defined(__SSE__) -#if !defined(__riscv) -#include -#endif -#endif -#endif -#endif -#endif - -#ifdef __riscv_v_intrinsic -#include -#endif - -#ifdef __F16C__ - -#ifdef _MSC_VER -#define GGML_COMPUTE_FP16_TO_FP32(x) _mm_cvtss_f32(_mm_cvtph_ps(_mm_cvtsi32_si128(x))) -#define GGML_COMPUTE_FP32_TO_FP16(x) _mm_extract_epi16(_mm_cvtps_ph(_mm_set_ss(x), 0), 0) -#else -#define GGML_COMPUTE_FP16_TO_FP32(x) _cvtsh_ss(x) -#define GGML_COMPUTE_FP32_TO_FP16(x) _cvtss_sh(x, 0) -#endif - -#elif defined(__POWER9_VECTOR__) - -#define GGML_COMPUTE_FP16_TO_FP32(x) ggml_compute_fp16_to_fp32(x) -#define GGML_COMPUTE_FP32_TO_FP16(x) ggml_compute_fp32_to_fp16(x) -/* the inline asm below is about 12% faster than the lookup method */ -#define GGML_FP16_TO_FP32(x) GGML_COMPUTE_FP16_TO_FP32(x) -#define GGML_FP32_TO_FP16(x) GGML_COMPUTE_FP32_TO_FP16(x) - -static inline float ggml_compute_fp16_to_fp32(ggml_fp16_t h) { - register float f; - register double d; - __asm__( - "mtfprd %0,%2\n" - "xscvhpdp %0,%0\n" - "frsp %1,%0\n" : - /* temp */ "=d"(d), - /* out */ "=f"(f): - /* in */ "r"(h)); - return f; -} - -static inline ggml_fp16_t ggml_compute_fp32_to_fp16(float f) { - register double d; - register ggml_fp16_t r; - __asm__( /* xscvdphp can work on double or single precision */ - "xscvdphp %0,%2\n" - "mffprd %1,%0\n" : - /* temp */ "=d"(d), - /* out */ "=r"(r): - /* in */ "f"(f)); - return r; -} - -#else - -// FP16 <-> FP32 -// ref: https://github.com/Maratyszcza/FP16 - -static inline float fp32_from_bits(uint32_t w) { - union { - uint32_t as_bits; - float as_value; - } fp32; - fp32.as_bits = w; - return fp32.as_value; -} - -static inline uint32_t fp32_to_bits(float f) { - union { - float as_value; - uint32_t as_bits; - } fp32; - fp32.as_value = f; - return fp32.as_bits; -} - -static inline float ggml_compute_fp16_to_fp32(ggml_fp16_t h) { - const uint32_t w = (uint32_t) h << 16; - const uint32_t sign = w & UINT32_C(0x80000000); - const uint32_t two_w = w + w; - - const uint32_t exp_offset = UINT32_C(0xE0) << 23; -#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) || defined(__GNUC__) && !defined(__STRICT_ANSI__) - const float exp_scale = 0x1.0p-112f; -#else - const float exp_scale = fp32_from_bits(UINT32_C(0x7800000)); -#endif - const float normalized_value = fp32_from_bits((two_w >> 4) + exp_offset) * exp_scale; - - const uint32_t magic_mask = UINT32_C(126) << 23; - const float magic_bias = 0.5f; - const float denormalized_value = fp32_from_bits((two_w >> 17) | magic_mask) - magic_bias; - - const uint32_t denormalized_cutoff = UINT32_C(1) << 27; - const uint32_t result = sign | - (two_w < denormalized_cutoff ? fp32_to_bits(denormalized_value) : fp32_to_bits(normalized_value)); - return fp32_from_bits(result); -} - -static inline ggml_fp16_t ggml_compute_fp32_to_fp16(float f) { -#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) || defined(__GNUC__) && !defined(__STRICT_ANSI__) - const float scale_to_inf = 0x1.0p+112f; - const float scale_to_zero = 0x1.0p-110f; -#else - const float scale_to_inf = fp32_from_bits(UINT32_C(0x77800000)); - const float scale_to_zero = fp32_from_bits(UINT32_C(0x08800000)); -#endif - float base = (fabsf(f) * scale_to_inf) * scale_to_zero; - - const uint32_t w = fp32_to_bits(f); - const uint32_t shl1_w = w + w; - const uint32_t sign = w & UINT32_C(0x80000000); - uint32_t bias = shl1_w & UINT32_C(0xFF000000); - if (bias < UINT32_C(0x71000000)) { - bias = UINT32_C(0x71000000); - } - - base = fp32_from_bits((bias >> 1) + UINT32_C(0x07800000)) + base; - const uint32_t bits = fp32_to_bits(base); - const uint32_t exp_bits = (bits >> 13) & UINT32_C(0x00007C00); - const uint32_t mantissa_bits = bits & UINT32_C(0x00000FFF); - const uint32_t nonsign = exp_bits + mantissa_bits; - return (sign >> 16) | (shl1_w > UINT32_C(0xFF000000) ? UINT16_C(0x7E00) : nonsign); -} - -#define GGML_COMPUTE_FP16_TO_FP32(x) ggml_compute_fp16_to_fp32(x) -#define GGML_COMPUTE_FP32_TO_FP16(x) ggml_compute_fp32_to_fp16(x) - -#endif // __F16C__ - -#endif // defined(__ARM_NEON) && (!defined(__MSC_VER) - -// precomputed f32 table for f16 (256 KB) -// defined in ggml.c, initialized in ggml_init() -extern float ggml_table_f32_f16[1 << 16]; - -// On ARM NEON, it's quicker to directly convert x -> x instead of calling into ggml_lookup_fp16_to_fp32, -// so we define GGML_FP16_TO_FP32 and GGML_FP32_TO_FP16 elsewhere for NEON. -// This is also true for POWER9. -#if !defined(GGML_FP16_TO_FP32) -inline static float ggml_lookup_fp16_to_fp32(ggml_fp16_t f) { - uint16_t s; - memcpy(&s, &f, sizeof(uint16_t)); - return ggml_table_f32_f16[s]; -} - -#define GGML_FP16_TO_FP32(x) ggml_lookup_fp16_to_fp32(x) -#endif - -#if !defined(GGML_FP32_TO_FP16) -#define GGML_FP32_TO_FP16(x) GGML_COMPUTE_FP32_TO_FP16(x) -#endif - -#define GGML_HASHTABLE_FULL ((size_t)-1) -#define GGML_HASHTABLE_ALREADY_EXISTS ((size_t)-2) - -struct ggml_hash_set ggml_hash_set_new(size_t size); - -bool ggml_hash_contains (const struct ggml_hash_set hash_set, struct ggml_tensor * key); - -// returns GGML_HASHTABLE_FULL if table is full, otherwise the current index of the key or where it should be inserted -size_t ggml_hash_find (const struct ggml_hash_set hash_set, struct ggml_tensor * key); - -// returns GGML_HASHTABLE_ALREADY_EXISTS if key already exists, index otherwise, asserts if table is full -size_t ggml_hash_insert ( struct ggml_hash_set hash_set, struct ggml_tensor * key); - -// return index, asserts if table is full -size_t ggml_hash_find_or_insert( struct ggml_hash_set hash_set, struct ggml_tensor * key); - -#ifdef __cplusplus -} -#endif diff --git a/ggml-kompute.cpp b/ggml-kompute.cpp deleted file mode 100644 index 407062e6fd4..00000000000 --- a/ggml-kompute.cpp +++ /dev/null @@ -1,2006 +0,0 @@ -#include "ggml.h" -#include "ggml-backend.h" -#include "ggml-backend-impl.h" -#include "ggml-kompute.h" - -// These are generated at build time by cmake custom command -#include "shaderop_scale.h" -#include "shaderop_scale_8.h" -#include "shaderop_add.h" -#include "shaderop_addrow.h" -#include "shaderop_mul.h" -#include "shaderop_silu.h" -#include "shaderop_relu.h" -#include "shaderop_gelu.h" -#include "shaderop_softmax.h" -#include "shaderop_norm.h" -#include "shaderop_rmsnorm.h" -#include "shaderop_diagmask.h" -#include "shaderop_mul_mat_f16.h" -#include "shaderop_mul_mat_q8_0.h" -#include "shaderop_mul_mat_q4_0.h" -#include "shaderop_mul_mat_q4_1.h" -#include "shaderop_mul_mat_q6_k.h" -#include "shaderop_mul_mat_mat_f32.h" -#include "shaderop_getrows_f16.h" -#include "shaderop_getrows_q4_0.h" -#include "shaderop_getrows_q4_1.h" -#include "shaderop_getrows_q6_k.h" -#include "shaderop_rope_f16.h" -#include "shaderop_rope_f32.h" -#include "shaderop_cpy_f16_f16.h" -#include "shaderop_cpy_f16_f32.h" -#include "shaderop_cpy_f32_f16.h" -#include "shaderop_cpy_f32_f32.h" - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -#ifdef __linux__ -#include // for setenv -#endif - -#define QK4_0 32 -#define QR4_0 2 -#define QK4_1 32 -#define QK_NL 16 - -typedef ggml_fp16_t half; - -static std::string ggml_kompute_format_name(int device) { - return "Kompute" + std::to_string(device); -} - -struct ggml_kompute_context { - int device; - std::string name; - std::shared_ptr pool; - - ggml_kompute_context(int device) - : device(device), name(ggml_kompute_format_name(device)) {} -}; - -// FIXME: It would be good to consolidate the kompute manager and the kompute context into one object -// and consolidate the init functions and simplify object lifetime management. As it currently stands, -// we *have* to have the kompute manager no matter what for device discovery, but the kompute context -// is only created when a device is set and vulkan is explicitly turned on. -static ggml_kompute_context *s_kompute_context = nullptr; - -class kompute_manager { - kp::Manager *s_mgr = nullptr; - -public: - kp::Manager *operator()() { - if (s_mgr && !s_mgr->hasInstance()) { - destroy(); - } - if (!s_mgr) { - s_mgr = new kp::Manager; - } - return s_mgr; - } - - void destroy() { - delete s_mgr; - s_mgr = nullptr; - } -}; - -static kompute_manager komputeManager; - -struct ggml_vk_memory { - void *data = nullptr; - size_t size = 0; - vk::DeviceMemory *primaryMemory = nullptr; - vk::Buffer *primaryBuffer = nullptr; - vk::DeviceMemory *stagingMemory = nullptr; - vk::Buffer *stagingBuffer = nullptr; -}; - -#ifdef __linux__ -__attribute__((constructor)) -static void enable_sam() { - setenv("RADV_PERFTEST", "sam", false); -} -#endif - -static bool ggml_vk_checkPhysicalDeviceFeatures(vk::PhysicalDevice physical_device) { - vk::PhysicalDeviceFeatures availableFeatures; - physical_device.getFeatures(&availableFeatures); - - if (!availableFeatures.shaderInt16) - return false; - - vk::PhysicalDeviceVulkan11Features availableFeatures11; - vk::PhysicalDeviceVulkan12Features availableFeatures12; - - availableFeatures11.pNext = &availableFeatures12; - availableFeatures12.pNext = nullptr; - - vk::PhysicalDeviceFeatures2 features2; - features2.pNext = &availableFeatures11; - - physical_device.getFeatures2(&features2); - - if (!availableFeatures11.uniformAndStorageBuffer16BitAccess || - !availableFeatures11.storageBuffer16BitAccess) { - return false; - } - - if (!availableFeatures12.storageBuffer8BitAccess || - !availableFeatures12.uniformAndStorageBuffer8BitAccess || - !availableFeatures12.shaderFloat16 || - !availableFeatures12.shaderInt8) { - return false; - } - - return true; -} - -static const char * ggml_vk_getVendorName(uint32_t vendorID) { - switch (vendorID) { - case 0x10DE: - return "nvidia"; - case 0x1002: - return "amd"; - case 0x8086: - return "intel"; - default: - return "unknown"; - } -} - -static std::vector ggml_vk_available_devices_internal(size_t memoryRequired) { - std::vector results; - if (!komputeManager()->hasVulkan() || !komputeManager()->hasInstance()) - return results; - - std::vector physical_devices; - try { - physical_devices = komputeManager()->listDevices(); - } catch (vk::SystemError & err) { - std::cerr << __func__ << ": ignoring Vulkan exception: " << err.what() << "\n"; - return results; - } - - uint32_t deviceCount = physical_devices.size(); - if (deviceCount == 0) - return results; - - std::unordered_map count_by_name; - - for (uint32_t i = 0; i < deviceCount; i++) { - const auto & physical_device = physical_devices[i]; - - VkPhysicalDeviceProperties dev_props = physical_device.getProperties(); - VkPhysicalDeviceMemoryProperties memoryProperties = physical_device.getMemoryProperties(); - const uint32_t major = VK_VERSION_MAJOR(dev_props.apiVersion); - const uint32_t minor = VK_VERSION_MINOR(dev_props.apiVersion); - if (major < 1 || minor < 2) - continue; - - if (!ggml_vk_checkPhysicalDeviceFeatures(physical_device)) - continue; - - size_t heapSize = 0; - for (uint32_t j = 0; j < memoryProperties.memoryHeapCount; ++j) { - VkMemoryHeap heap = memoryProperties.memoryHeaps[j]; - if (heap.flags & VK_MEMORY_HEAP_DEVICE_LOCAL_BIT) { - heapSize = heap.size; - break; - } - } - - if (heapSize < memoryRequired) - continue; - - auto ext_props = physical_device.enumerateDeviceExtensionProperties(); - bool has_maintenance4 = false; - - // Check if maintenance4 is supported - for (const auto & properties : ext_props) { - if (strcmp("VK_KHR_maintenance4", properties.extensionName) == 0) { - has_maintenance4 = true; - } - } - - vk::PhysicalDeviceSubgroupProperties subgroup_props; - vk::PhysicalDeviceProperties2 dev_props2; - vk::PhysicalDeviceMaintenance3Properties dev_props3; - vk::PhysicalDeviceMaintenance4Properties dev_props4; - dev_props2.pNext = &dev_props3; - dev_props3.pNext = &subgroup_props; - if (has_maintenance4) { - subgroup_props.pNext = &dev_props4; - } - physical_device.getProperties2(&dev_props2); - - if (subgroup_props.subgroupSize < 32) - continue; - - ggml_vk_device d; - d.index = i; - d.type = dev_props.deviceType; - d.heapSize = heapSize; - d.vendor = strdup(ggml_vk_getVendorName(dev_props.vendorID)); - d.subgroupSize = subgroup_props.subgroupSize; - d.bufferAlignment = dev_props.limits.minStorageBufferOffsetAlignment; - - if (has_maintenance4) { - d.maxAlloc = std::min(dev_props3.maxMemoryAllocationSize, dev_props4.maxBufferSize); - } else { - d.maxAlloc = dev_props3.maxMemoryAllocationSize; - } - - std::string name(dev_props.deviceName); - size_t n_idx = ++count_by_name[name]; - if (n_idx > 1) { - name += " (" + std::to_string(n_idx) + ")"; - } - d.name = strdup(name.c_str()); - - results.push_back(d); - } - - std::stable_sort(results.begin(), results.end(), - [](const ggml_vk_device& lhs, const ggml_vk_device& rhs) -> bool { - if (lhs.type != rhs.type) { - if (lhs.type == VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU) return true; - if (rhs.type == VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU) return false; - - if (lhs.type == VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU) return true; - if (rhs.type == VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU) return false; - } - return lhs.heapSize < rhs.heapSize; - } - ); - - return results; -} - -// public API returns a C-style array -ggml_vk_device * ggml_vk_available_devices(size_t memoryRequired, size_t * count) { - auto devices = ggml_vk_available_devices_internal(memoryRequired); - *count = devices.size(); - if (devices.empty()) { - return nullptr; - } - - size_t nbytes = sizeof (ggml_vk_device) * (devices.size()); - auto * arr = static_cast(malloc(nbytes)); - memcpy(arr, devices.data(), nbytes); - return arr; -} - -static void ggml_vk_filterByVendor(std::vector& devices, const std::string& targetVendor) { - devices.erase( - std::remove_if(devices.begin(), devices.end(), - [&targetVendor](const ggml_vk_device& device) { - return device.vendor != targetVendor; - }), - devices.end() - ); -} - -static void ggml_vk_filterByName(std::vector& devices, const std::string& targetName) { - devices.erase( - std::remove_if(devices.begin(), devices.end(), - [&targetName](const ggml_vk_device& device) { - return device.name != targetName; - }), - devices.end() - ); -} - -static bool ggml_vk_get_device(ggml_vk_device * device, size_t memoryRequired, const std::string & name) { - if (name.empty()) - return false; - - auto devices = ggml_vk_available_devices_internal(memoryRequired); - if (name == "amd" || name == "nvidia" || name == "intel") { - ggml_vk_filterByVendor(devices, name); - } else if (name != "gpu") { - ggml_vk_filterByName(devices, name); - } - - if (devices.empty()) - return false; - - *device = devices.front(); - return true; -} - -bool ggml_vk_get_device(ggml_vk_device * device, size_t memoryRequired, const char * name) { - return ggml_vk_get_device(device, memoryRequired, std::string(name)); -} - -bool ggml_vk_has_vulkan() { - return komputeManager()->hasVulkan(); -} - -bool ggml_vk_has_device() { - return komputeManager()->hasDevice(); -} - -ggml_vk_device ggml_vk_current_device() { - if (!komputeManager()->hasDevice()) - return ggml_vk_device(); - - auto devices = ggml_vk_available_devices_internal(0); - ggml_vk_filterByName(devices, komputeManager()->physicalDevice()->getProperties().deviceName.data()); - GGML_ASSERT(!devices.empty()); - return devices.front(); -} - -static -void ggml_vk_allocate_descriptor_pool(struct ggml_kompute_context * ctx, size_t size) { - std::vector descriptorPoolSizes = { - vk::DescriptorPoolSize( - vk::DescriptorType::eStorageBuffer, - 3 * size // Descriptor count is number of possible tensors to pass into an algorithm - ) - }; - - vk::DescriptorPoolCreateInfo descriptorPoolInfo( - vk::DescriptorPoolCreateFlags(), - size, // Max sets - static_cast(descriptorPoolSizes.size()), - descriptorPoolSizes.data()); - - ctx->pool = std::make_shared(); - vk::Result r = komputeManager()->device()->createDescriptorPool( - &descriptorPoolInfo, nullptr, ctx->pool.get()); - if (r != vk::Result::eSuccess) - std::cerr << "Error allocating descriptor pool" << vk::to_string(r); -} - -static -void ggml_vk_free_descriptor_pool(struct ggml_kompute_context * ctx) { - if (ctx->pool) { - komputeManager()->device()->destroy( - *ctx->pool, - (vk::Optional)nullptr); - ctx->pool = nullptr; - } -} - -static -vk::Buffer *ggml_vk_allocate_buffer(size_t size) { - vk::BufferCreateInfo bufferCreateInfo; - bufferCreateInfo.size = size; - bufferCreateInfo.usage = vk::BufferUsageFlagBits::eStorageBuffer | - vk::BufferUsageFlagBits::eTransferSrc | - vk::BufferUsageFlagBits::eTransferDst; - bufferCreateInfo.sharingMode = vk::SharingMode::eExclusive; - - vk::Buffer *vkBuffer = new vk::Buffer; - vk::Result r = komputeManager()->device()->createBuffer(&bufferCreateInfo, nullptr, vkBuffer); - if (r != vk::Result::eSuccess) - std::cerr << "Error allocating buffer " << vk::to_string(r) << std::endl; - return vkBuffer; -} - -static -vk::DeviceMemory *ggml_vk_allocate(size_t size, vk::MemoryPropertyFlags flags, vk::MemoryRequirements requirements, bool *isHostVisible) { - - uint32_t memoryTypeIndex = -1; - bool memoryTypeIndexFound = false; - vk::PhysicalDeviceMemoryProperties memoryProperties = komputeManager()->physicalDevice()->getMemoryProperties(); - for (uint32_t i = 0; i < memoryProperties.memoryTypeCount; i++) { - const vk::MemoryType &memoryType = memoryProperties.memoryTypes[i]; - const vk::MemoryHeap &memoryHeap = memoryProperties.memoryHeaps[memoryType.heapIndex]; - if (memoryHeap.size < size) { - continue; - } - - if (requirements.memoryTypeBits & (1 << i)) { - if (((memoryProperties.memoryTypes[i]).propertyFlags & - flags) == flags) { - memoryTypeIndex = i; - memoryTypeIndexFound = true; - if (isHostVisible && (memoryProperties.memoryTypes[i].propertyFlags & vk::MemoryPropertyFlagBits::eHostVisible)) { - *isHostVisible = true; - } - break; - } - } - } - if (!memoryTypeIndexFound) { - throw std::runtime_error( - "Memory type index for buffer creation not found"); - } - - vk::MemoryAllocateInfo allocInfo; - allocInfo.allocationSize = size; - allocInfo.memoryTypeIndex = memoryTypeIndex; - vk::DeviceMemory *vkDeviceMemory = new vk::DeviceMemory; - vk::Result r = komputeManager()->device()->allocateMemory(&allocInfo, nullptr, vkDeviceMemory); - if (r != vk::Result::eSuccess) { - std::cerr << "Error allocating memory " << vk::to_string(r) << std::endl; - throw std::runtime_error("Error allocating vulkan memory."); - } - return vkDeviceMemory; -} - -static size_t ggml_vk_aligned_offset(ggml_backend_buffer_t buffer, size_t offset) { - size_t minStorageBufferOffsetAlignment = ggml_backend_buffer_get_alignment(buffer); - - // If offset is already aligned, return it directly - if (offset % minStorageBufferOffsetAlignment == 0) { - return offset; - } - - // Otherwise, return the largest multiple of minStorageBufferOffsetAlignment less than offset - return (offset / minStorageBufferOffsetAlignment) * minStorageBufferOffsetAlignment; -} - -static ggml_vk_memory ggml_vk_allocate(size_t size) { - ggml_vk_memory memory; - bool isHostVisible = false; - { - memory.primaryBuffer = ggml_vk_allocate_buffer(size); - vk::MemoryRequirements memoryRequirements = komputeManager()->device()->getBufferMemoryRequirements(*memory.primaryBuffer); - vk::MemoryPropertyFlags memoryPropertyFlags = vk::MemoryPropertyFlagBits::eDeviceLocal; - memory.primaryMemory = ggml_vk_allocate(size, memoryPropertyFlags, memoryRequirements, &isHostVisible); - komputeManager()->device()->bindBufferMemory(*memory.primaryBuffer, *memory.primaryMemory, 0); - if (isHostVisible) { - vk::Result r = komputeManager()->device()->mapMemory(*memory.primaryMemory, 0, size, vk::MemoryMapFlags(), &memory.data); - if (r != vk::Result::eSuccess) - std::cerr << "Error mapping memory" << vk::to_string(r); - } - } - - if (!isHostVisible) { - memory.stagingBuffer = ggml_vk_allocate_buffer(size); - vk::MemoryRequirements memoryRequirements = komputeManager()->device()->getBufferMemoryRequirements(*memory.stagingBuffer); - vk::MemoryPropertyFlags memoryPropertyFlags = vk::MemoryPropertyFlagBits::eHostVisible | - vk::MemoryPropertyFlagBits::eHostCoherent | - vk::MemoryPropertyFlagBits::eHostCached; - memory.stagingMemory = ggml_vk_allocate(size, memoryPropertyFlags, memoryRequirements, &isHostVisible); - komputeManager()->device()->bindBufferMemory(*memory.stagingBuffer, *memory.stagingMemory, 0); - vk::Result r = komputeManager()->device()->mapMemory(*memory.stagingMemory, 0, size, vk::MemoryMapFlags(), &memory.data); - if (r != vk::Result::eSuccess) - std::cerr << "Error mapping memory" << vk::to_string(r); - } - - memory.size = size; - return memory; -} - -static void ggml_vk_free_memory(ggml_vk_memory &memory) -{ - komputeManager()->device()->destroy( - *memory.primaryBuffer, - (vk::Optional)nullptr); - if (memory.stagingBuffer) { - komputeManager()->device()->destroy( - *memory.stagingBuffer, - (vk::Optional)nullptr); - } - komputeManager()->device()->freeMemory( - *memory.primaryMemory, - (vk::Optional)nullptr); - if (memory.stagingMemory) { - komputeManager()->device()->freeMemory( - *memory.stagingMemory, - (vk::Optional)nullptr); - } -} - -static const char * ggml_backend_kompute_buffer_type_get_name(ggml_backend_buffer_type_t buft); - -static -ggml_vk_memory * ggml_vk_find_tensor(const struct ggml_tensor * t, uint64_t & offset) { - ggml_backend_buffer_t buffer = t->view_src ? t->view_src->buffer : t->buffer; - - // compatibility with ggml-backend - GGML_ASSERT(buffer && buffer->buft->iface.get_name == ggml_backend_kompute_buffer_type_get_name); - - ggml_vk_memory * buf_ctx = static_cast(buffer->context); - - const intptr_t ioffs = intptr_t(t->data) - intptr_t(buf_ctx->data); - - GGML_ASSERT(ioffs >= 0 && ioffs + int64_t(ggml_nbytes(t)) <= int64_t(buffer->size)); - - offset = uint64_t(ioffs); - return buf_ctx; -} - -static -const std::shared_ptr ggml_vk_get_tensor(const struct ggml_tensor * t, uint32_t * alignedOffset = nullptr) { - uint64_t originalOffset = 0; - auto * res = ggml_vk_find_tensor(t, originalOffset); - if (!res) { - static std::shared_ptr nullTensor = nullptr; - return nullTensor; - } - - // Create a tensor whose memory will be composed of our buffers at the correct offset - const size_t nelements = ggml_nelements(t); - size_t nbytes = ggml_nbytes(t); - - size_t vulkanOffset = ggml_vk_aligned_offset(t->buffer, originalOffset); - if (alignedOffset) { - *alignedOffset = originalOffset - vulkanOffset; - nbytes += *alignedOffset; - } - - return komputeManager()->tensor( - t->data, - nelements, - nbytes, kp::Tensor::TensorDataTypes::eFloat, - res->primaryMemory, res->primaryBuffer, - res->stagingMemory, res->stagingBuffer, - vulkanOffset); -} - -static std::vector getSpirvShader(const unsigned char* rawData, size_t size) { - if (size % sizeof(uint32_t) != 0) { - throw std::runtime_error("Invalid size: must be divisible by sizeof(uint32_t)"); - } - - const uint32_t* data_ptr = reinterpret_cast(rawData); - size_t count = size / sizeof(uint32_t); - return std::vector(data_ptr, data_ptr + count); -} - -inline static -uint32_t safe_divide(uint32_t a, uint32_t b) { - if (b <= 1) { - return a; - } - if ((a % b) != 0) { - fprintf(stderr, "((%u %% %u) == %u) != 0\n", a, b, a % b); - GGML_ASSERT(!"safe_divide result would've had remainder"); - } - return a / b; -} - -static void ggml_vk_add( - kp::Sequence& seq, - const std::shared_ptr& inA, - const std::shared_ptr& inB, - const std::shared_ptr& out, - uint32_t inAOff, uint32_t inBOff, uint32_t outOff, - int32_t ne00, int32_t ne01, int32_t ne02, int32_t ne03, - int32_t nb00, int32_t nb01, int32_t nb02, int32_t nb03, - int32_t ne10, int32_t ne11, int32_t ne12, int32_t ne13, - int32_t nb10, int32_t nb11, int32_t nb12, int32_t nb13, - int32_t ne0, - int32_t nb0, int32_t nb1, int32_t nb2, int32_t nb3 -) { - const static auto spirv = getSpirvShader(kp::shader_data::op_add_comp_spv, - kp::shader_data::op_add_comp_spv_len); - - struct PushConstants { - uint32_t inAOff, inBOff, outOff; - int32_t ne00; - int32_t nb00, nb01, nb02, nb03; - int32_t ne10, ne11, ne12, ne13; - int32_t nb10, nb11, nb12, nb13; - int32_t ne0; - int32_t nb0, nb1, nb2, nb3; - } const pushConsts { - safe_divide(inAOff, 4), safe_divide(inBOff, 4), safe_divide(outOff, 4), - ne00, - nb00, nb01, nb02, nb03, - ne10, ne11, ne12, ne13, - nb10, nb11, nb12, nb13, - ne0, - nb0, nb1, nb2, nb3 - }; - - std::shared_ptr s_algo = nullptr; - if (!komputeManager()->hasAlgorithm(__func__)) { - s_algo = komputeManager()->algorithm(__func__, s_kompute_context->pool.get(), {inA, inB, out}, spirv, {unsigned(ne01), unsigned(ne02), unsigned(ne03)}, {}, {pushConsts}); - } else { - s_algo = komputeManager()->getAlgorithm(__func__); - s_algo->setTensors({inA, inB, out}); - s_algo->setWorkgroup({unsigned(ne01), unsigned(ne02), unsigned(ne03)}); - s_algo->setPushConstants({pushConsts}); - s_algo->updateDescriptors(s_kompute_context->pool.get()); - } - seq.record(s_algo); -} - -static void ggml_vk_addrow(kp::Sequence& seq, - const std::shared_ptr& inA, - const std::shared_ptr& inB, - const std::shared_ptr& out, - uint32_t inAOff, uint32_t inBOff, uint32_t outOff, - uint32_t size, uint32_t row = 0) { - - const static auto spirv = getSpirvShader(kp::shader_data::op_addrow_comp_spv, - kp::shader_data::op_addrow_comp_spv_len); - - struct PushConstants { - uint32_t inAOff, inBOff, outOff; - uint32_t row; - } const pushConsts { - safe_divide(inAOff, 4), safe_divide(inBOff, 4), safe_divide(outOff, 4), - row - }; - - std::shared_ptr s_algo = nullptr; - if (!komputeManager()->hasAlgorithm(__func__)) - s_algo = komputeManager()->algorithm(__func__, s_kompute_context->pool.get(), {inA, inB, out}, spirv, {size}, {}, {pushConsts}); - else { - s_algo = komputeManager()->getAlgorithm(__func__); - s_algo->setTensors({inA, inB, out}); - s_algo->setWorkgroup({size}); - s_algo->setPushConstants({pushConsts}); - s_algo->updateDescriptors(s_kompute_context->pool.get()); - } - seq.record(s_algo); -} - -static void ggml_vk_mul( - kp::Sequence& seq, - const std::shared_ptr& inA, - const std::shared_ptr& inB, - const std::shared_ptr& out, - uint32_t inAOff, uint32_t inBOff, uint32_t outOff, - int32_t ne00, int32_t ne01, int32_t ne02, int32_t ne03, - int32_t nb00, int32_t nb01, int32_t nb02, int32_t nb03, - int32_t ne10, int32_t ne11, int32_t ne12, int32_t ne13, - int32_t nb10, int32_t nb11, int32_t nb12, int32_t nb13, - int32_t ne0, - int32_t nb0, int32_t nb1, int32_t nb2, int32_t nb3 -) { - const static auto spirv = getSpirvShader(kp::shader_data::op_mul_comp_spv, - kp::shader_data::op_mul_comp_spv_len); - - struct PushConstants { - uint32_t inAOff, inBOff, outOff; - int32_t ne00; - int32_t nb00, nb01, nb02, nb03; - int32_t ne10, ne11, ne12, ne13; - int32_t nb10, nb11, nb12, nb13; - int32_t ne0; - int32_t nb0, nb1, nb2, nb3; - } const pushConsts { - safe_divide(inAOff, 4), safe_divide(inBOff, 4), safe_divide(outOff, 4), - ne00, - nb00, nb01, nb02, nb03, - ne10, ne11, ne12, ne13, - nb10, nb11, nb12, nb13, - ne0, - nb0, nb1, nb2, nb3 - }; - - std::shared_ptr s_algo = nullptr; - if (!komputeManager()->hasAlgorithm(__func__)) { - s_algo = komputeManager()->algorithm(__func__, s_kompute_context->pool.get(), {inA, inB, out}, spirv, {unsigned(ne01), unsigned(ne02), unsigned(ne03)}, {}, {pushConsts}); - } else { - s_algo = komputeManager()->getAlgorithm(__func__); - s_algo->setTensors({inA, inB, out}); - s_algo->setWorkgroup({unsigned(ne01), unsigned(ne02), unsigned(ne03)}); - s_algo->setPushConstants({pushConsts}); - s_algo->updateDescriptors(s_kompute_context->pool.get()); - } - seq.record(s_algo); -} - -static void ggml_vk_scale(kp::Sequence& seq, - const std::shared_ptr& in, - const std::shared_ptr& out, - uint32_t inOff, uint32_t outOff, - uint32_t size, float scale) { - const static auto spirv_1 = getSpirvShader( - kp::shader_data::op_scale_comp_spv, kp::shader_data::op_scale_comp_spv_len - ); - const static auto spirv_8 = getSpirvShader( - kp::shader_data::op_scale_8_comp_spv, kp::shader_data::op_scale_8_comp_spv_len - ); - - struct PushConstants { - uint32_t inOff, outOff; - float scale; - } const pushConsts { - safe_divide(inOff, 4), safe_divide(outOff, 4), - scale - }; - - const auto * spirv = &spirv_1; - std::string name(__func__); - if (size % 8 == 0) { - size /= 8; - name += "_8"; - spirv = &spirv_8; - } - - std::shared_ptr s_algo = nullptr; - if (!komputeManager()->hasAlgorithm(name)) { - s_algo = komputeManager()->algorithm(name, s_kompute_context->pool.get(), {in, out}, *spirv, {size}, {}, {pushConsts}); - } else { - s_algo = komputeManager()->getAlgorithm(name); - s_algo->setTensors({in, out}); - s_algo->setWorkgroup({size}); - s_algo->setPushConstants({pushConsts}); - s_algo->updateDescriptors(s_kompute_context->pool.get()); - } - seq.record(s_algo); -} - -static void ggml_vk_xxlu( - const std::vector& spirv, const char * suffix, kp::Sequence& seq, - const std::shared_ptr& in, - const std::shared_ptr& out, - uint32_t inOff, uint32_t outOff, - uint32_t size -) { - struct PushConstants { - uint32_t inOff, outOff; - } const pushConsts { - safe_divide(inOff, 4), safe_divide(outOff, 4), - }; - - auto name = std::string(__func__) + "_" + suffix; - std::shared_ptr s_algo = nullptr; - if (!komputeManager()->hasAlgorithm(name)) { - s_algo = komputeManager()->algorithm(name, s_kompute_context->pool.get(), {in, out}, spirv, {size}, {}, {pushConsts}); - } else { - s_algo = komputeManager()->getAlgorithm(name); - s_algo->setTensors({in, out}); - s_algo->setWorkgroup({size}); - s_algo->setPushConstants({pushConsts}); - s_algo->updateDescriptors(s_kompute_context->pool.get()); - } - seq.record(s_algo); -} - -template -static void ggml_vk_silu(Args&&... args) { - const static auto spirv = getSpirvShader(kp::shader_data::op_silu_comp_spv, - kp::shader_data::op_silu_comp_spv_len); - - ggml_vk_xxlu(spirv, "silu", std::forward(args)...); -} - -template -static void ggml_vk_relu(Args&&... args) { - const static auto spirv = getSpirvShader(kp::shader_data::op_relu_comp_spv, - kp::shader_data::op_relu_comp_spv_len); - - ggml_vk_xxlu(spirv, "relu", std::forward(args)...); -} - -template -static void ggml_vk_gelu(Args&&... args) { - const static auto spirv = getSpirvShader(kp::shader_data::op_gelu_comp_spv, - kp::shader_data::op_gelu_comp_spv_len); - - ggml_vk_xxlu(spirv, "gelu", std::forward(args)...); -} - -static void ggml_vk_soft_max( - kp::Sequence& seq, - const std::shared_ptr& inA, - const std::shared_ptr& inB, - const std::shared_ptr& out, - uint32_t inAOff, uint32_t inBOff, uint32_t outOff, - int32_t ne00, int32_t ne01, int32_t ne02, uint32_t ne03, - float scale -) { - const static auto spirv = getSpirvShader(kp::shader_data::op_softmax_comp_spv, - kp::shader_data::op_softmax_comp_spv_len); - - struct PushConstants { - uint32_t inAOff, inBOff, outOff; - int32_t ne00, ne01, ne02; - float scale; - int32_t mask; - } pushConsts { - safe_divide(inAOff, 4), safe_divide(inBOff, 4), safe_divide(outOff, 4), - ne00, ne01, ne02, - scale, - bool(inB) - }; - - auto & inB_ = inB ? inB : inA; - - std::shared_ptr s_algo = nullptr; - if (!komputeManager()->hasAlgorithm(__func__)) { - // FIXME: The softmax kernel needs to be fixed to use the subgroupsize which can vary by device - const uint32_t local_x = 32; - s_algo = komputeManager()->algorithm(__func__, s_kompute_context->pool.get(), {inA, inB_, out}, spirv, {unsigned(ne01), unsigned(ne02), unsigned(ne03)}, {local_x}, {pushConsts}); - } else { - s_algo = komputeManager()->getAlgorithm(__func__); - s_algo->setTensors({inA, inB_, out}); - s_algo->setWorkgroup({unsigned(ne01), unsigned(ne02), unsigned(ne03)}); - s_algo->setPushConstants({pushConsts}); - s_algo->updateDescriptors(s_kompute_context->pool.get()); - } - seq.record(s_algo); -} - -static void ggml_vk_norm_( - const std::vector& spirv, const char * suffix, kp::Sequence& seq, - const std::shared_ptr& in, - const std::shared_ptr& out, - uint32_t inOff, uint32_t outOff, - int32_t ne00, int32_t nb01, - int32_t nrows, float epsilon -) { - GGML_ASSERT(nb01%sizeof(float) == 0); - GGML_ASSERT(ne00%sizeof(float) == 0); - - struct PushConstants { - uint32_t inOff, outOff; - uint32_t ne00, nb01; - float eps; - } pushConsts { - safe_divide(inOff, 4), safe_divide(outOff, 4), - (uint32_t)ne00, (uint32_t)nb01, epsilon - }; - - auto name = std::string(__func__) + "_" + suffix; - std::shared_ptr s_algo = nullptr; - if (!komputeManager()->hasAlgorithm(name)) { - s_algo = komputeManager()->algorithm(name, s_kompute_context->pool.get(), {in, out}, spirv, {(uint32_t)nrows}, {}, {pushConsts}); - } else { - s_algo = komputeManager()->getAlgorithm(name); - s_algo->setTensors({in, out}); - s_algo->setWorkgroup({(uint32_t)nrows}); - s_algo->setPushConstants({pushConsts}); - s_algo->updateDescriptors(s_kompute_context->pool.get()); - } - seq.record(s_algo); -} - -template -static void ggml_vk_norm(Args&&... args) { - const static auto spirv = getSpirvShader(kp::shader_data::op_norm_comp_spv, - kp::shader_data::op_norm_comp_spv_len); - - ggml_vk_norm_(spirv, "norm", std::forward(args)...); -} - -template -static void ggml_vk_rms_norm(Args&&... args) { - const static auto spirv = getSpirvShader(kp::shader_data::op_rmsnorm_comp_spv, - kp::shader_data::op_rmsnorm_comp_spv_len); - - ggml_vk_norm_(spirv, "rms", std::forward(args)...); -} - -static void ggml_vk_diag_mask_inf(kp::Sequence& seq, - const std::shared_ptr& in, - const std::shared_ptr& out, - uint32_t inOff, uint32_t outOff, - uint32_t n_past, - int32_t ne00, int32_t ne01, int32_t ne02) { - const static auto spirv = getSpirvShader(kp::shader_data::op_diagmask_comp_spv, - kp::shader_data::op_diagmask_comp_spv_len); - - struct PushConstants { - uint32_t inOff, outOff; - uint32_t n_past; - int32_t ne00, ne01; - } pushConsts { - safe_divide(inOff, 4), safe_divide(outOff, 4), - n_past, - ne00, ne01 - }; - - std::shared_ptr s_algo = nullptr; - if (!komputeManager()->hasAlgorithm(__func__)) - s_algo = komputeManager()->algorithm(__func__, s_kompute_context->pool.get(), {in, out}, spirv, {unsigned(ne00), unsigned(ne01), unsigned(ne02)}, {}, {pushConsts}); - else { - s_algo = komputeManager()->getAlgorithm(__func__); - s_algo->setTensors({in, out}); - s_algo->setWorkgroup({unsigned(ne00), unsigned(ne01), unsigned(ne02)}); - s_algo->setPushConstants({pushConsts}); - s_algo->updateDescriptors(s_kompute_context->pool.get()); - } - seq.record(s_algo); -} - -static void ggml_vk_mul_mat_f16( - kp::Sequence& seq, - const std::shared_ptr& inA, - const std::shared_ptr& inB, - const std::shared_ptr& out, - uint32_t inAOff, uint32_t inBOff, uint32_t outOff, - int32_t ne00, int32_t ne01, int32_t ne02, - uint32_t nb00, uint32_t nb01, uint32_t nb02, - int32_t ne10, int32_t ne11, int32_t ne12, int32_t ne13, - uint32_t nb10, uint32_t nb11, uint32_t nb12, - int32_t ne0, int32_t ne1, - uint32_t r2, uint32_t r3 -) { - const static auto spirv = getSpirvShader(kp::shader_data::op_mul_mat_f16_comp_spv, - kp::shader_data::op_mul_mat_f16_comp_spv_len); - - struct PushConstants { - uint32_t inAOff, inBOff, outOff; - int32_t ne00, ne01, ne02; - uint32_t nb00, nb01, nb02; - int32_t ne10, ne11, ne12; - uint32_t nb10, nb11, nb12; - int32_t ne0, ne1; - uint32_t r2, r3; - } pushConsts { - safe_divide(inAOff, 2), safe_divide(inBOff, 4), safe_divide(outOff, 4), - ne00, ne01, ne02, - nb00, nb01, nb02, - ne10, ne11, ne12, - nb10, nb11, nb12, - ne0, ne1, - r2, r3 - }; - - const unsigned ny = unsigned((ne11 + 4 - 1)/4); - - std::shared_ptr s_algo = nullptr; - if (!komputeManager()->hasAlgorithm(__func__)) { - const uint32_t local_x = ggml_vk_current_device().subgroupSize * 2; - s_algo = komputeManager()->algorithm(__func__, s_kompute_context->pool.get(), {inA, inB, out}, spirv, {unsigned(ne01), ny, unsigned(ne12*ne13)}, {local_x}, {pushConsts}); - } else { - s_algo = komputeManager()->getAlgorithm(__func__); - s_algo->setTensors({inA, inB, out}); - s_algo->setWorkgroup({unsigned(ne01), ny, unsigned(ne12*ne13)}); - s_algo->setPushConstants({pushConsts}); - s_algo->updateDescriptors(s_kompute_context->pool.get()); - } - seq.record(s_algo); -} - -static void ggml_vk_mul_mat_mat_f32(kp::Sequence& seq, - const std::shared_ptr& inA, - const std::shared_ptr& inB, - const std::shared_ptr& out, - uint32_t inAOff, uint32_t inBOff, uint32_t outOff, - int32_t ne00, int32_t ne01, int32_t ne02, - uint32_t nb01, uint32_t nb02, - int32_t ne11, int32_t ne12, - uint32_t nb11, uint32_t nb12, - uint32_t nb1, uint32_t nb2) { - const static auto spirv = getSpirvShader(kp::shader_data::op_mul_mat_mat_f32_comp_spv, - kp::shader_data::op_mul_mat_mat_f32_comp_spv_len); - - struct PushConstants { - uint32_t inAOff, inBOff, outOff; - int32_t ne00, ne01, ne02, ne11, ne12; - uint32_t nb01, nb02; - uint32_t nb11, nb12; - uint32_t nb1, nb2; - } pushConsts { - safe_divide(inAOff, 4), safe_divide(inBOff, 4), safe_divide(outOff, 4), - ne00, ne01, ne02, ne11, ne12, - nb01, nb02, nb11, nb12, - nb1, nb2 - }; - - const uint32_t local_x = ggml_vk_current_device().subgroupSize; - std::shared_ptr s_algo = nullptr; - if (!komputeManager()->hasAlgorithm(__func__)) { - s_algo = komputeManager()->algorithm(__func__, s_kompute_context->pool.get(), - {inA, inB, out}, spirv, - {unsigned(ne01), - unsigned(ne11), - unsigned(std::max(ne12, ne02)) - }, - {local_x}, - {pushConsts}); - } else { - s_algo = komputeManager()->getAlgorithm(__func__); - s_algo->setTensors({inA, inB, out}); - s_algo->setWorkgroup({unsigned(ne01), - unsigned(ne11), - unsigned(std::max(ne12, ne02)), - }); - s_algo->setPushConstants({pushConsts}); - s_algo->updateDescriptors(s_kompute_context->pool.get()); - } - seq.record(s_algo); -} - -static void ggml_vk_mul_mat_impl( - const std::vector& spirv, const char * suffix, uint32_t block_size, kp::Sequence& seq, - const std::shared_ptr& inA, - const std::shared_ptr& inB, - const std::shared_ptr& out, - uint32_t inAOff, uint32_t inBOff, uint32_t outOff, - int32_t ne00, int32_t ne01, int32_t ne02, - int32_t ne10, int32_t ne11, int32_t ne12, int32_t ne13, - int32_t ne0, int32_t ne1, - uint32_t r2, uint32_t r3 -) { - struct PushConstants { - uint32_t inAOff, inBOff, outOff; - int32_t ne00, ne01, ne02; - int32_t ne10, ne12; - int32_t ne0, ne1; - uint32_t r2, r3; - } pushConsts { - safe_divide(inAOff, block_size), safe_divide(inBOff, 4), safe_divide(outOff, 4), - ne00, ne01, ne02, - ne10, ne12, - ne0, ne1, - r2, r3 - }; - - auto name = std::string(__func__) + "_" + suffix; - std::shared_ptr s_algo = nullptr; - if (!komputeManager()->hasAlgorithm(name)) { - const uint32_t local_x = ggml_vk_current_device().subgroupSize * 2; - s_algo = komputeManager()->algorithm(name, s_kompute_context->pool.get(), {inA, inB, out}, spirv, {unsigned((ne01 + 7)/8), unsigned(ne11), unsigned(ne12*ne13)}, {local_x}, {pushConsts}); - } else { - s_algo = komputeManager()->getAlgorithm(name); - s_algo->setTensors({inA, inB, out}); - s_algo->setWorkgroup({unsigned((ne01 + 7)/8), unsigned(ne11), unsigned(ne12*ne13)}); - s_algo->setPushConstants({pushConsts}); - s_algo->updateDescriptors(s_kompute_context->pool.get()); - } - seq.record(s_algo); -} - -template -static void ggml_vk_mul_mat_q4_0(Args&&... args) { - const static auto spirv = getSpirvShader(kp::shader_data::op_mul_mat_q4_0_comp_spv, - kp::shader_data::op_mul_mat_q4_0_comp_spv_len); - - ggml_vk_mul_mat_impl(spirv, "q4_0", 1/*We access blocks unaligned*/, std::forward(args)...); -} - -template -static void ggml_vk_mul_mat_q4_1(Args&&... args) { - const static auto spirv = getSpirvShader(kp::shader_data::op_mul_mat_q4_1_comp_spv, - kp::shader_data::op_mul_mat_q4_1_comp_spv_len); - - ggml_vk_mul_mat_impl(spirv, "q4_1", 1/*We access blocks unaligned*/, std::forward(args)...); -} - -template -static void ggml_vk_mul_mat_q8_0(Args&&... args) { - const static auto spirv = getSpirvShader(kp::shader_data::op_mul_mat_q8_0_comp_spv, - kp::shader_data::op_mul_mat_q8_0_comp_spv_len); - - ggml_vk_mul_mat_impl(spirv, "q8_0", 1/*We access blocks unaligned*/, std::forward(args)...); -} - -static void ggml_vk_mul_mat_q6_k( - kp::Sequence& seq, - const std::shared_ptr& inA, - const std::shared_ptr& inB, - const std::shared_ptr& out, - uint32_t inAOff, uint32_t inBOff, uint32_t outOff, - int32_t ne00, int32_t ne10, int32_t ne0, int32_t ne1, - int32_t ne01, int32_t ne11, int32_t ne12, int32_t ne02 -) { - const static auto spirv = getSpirvShader(kp::shader_data::op_mul_mat_q6_k_comp_spv, - kp::shader_data::op_mul_mat_q6_k_comp_spv_len); - - struct PushConstants { - uint32_t inAOff, inBOff, outOff; - int32_t ne00, ne10, ne0, ne1, ne01, gqa; - } pushConsts { - inAOff, safe_divide(inBOff, 4), safe_divide(outOff, 4), - ne00, ne10, ne0, ne1, ne01, ne12/ne02 - }; - - std::shared_ptr s_algo = nullptr; - if (!komputeManager()->hasAlgorithm(__func__)) { - const uint32_t local_x = ggml_vk_current_device().subgroupSize * 2; - s_algo = komputeManager()->algorithm(__func__, s_kompute_context->pool.get(), {inA, inB, out}, spirv, {unsigned((ne01 + 1)/2), unsigned(ne11), unsigned(ne12)}, {local_x}, {pushConsts}); - } else { - s_algo = komputeManager()->getAlgorithm(__func__); - s_algo->setTensors({inA, inB, out}); - s_algo->setWorkgroup({unsigned((ne01 + 1)/2), unsigned(ne11), unsigned(ne12)}); - s_algo->setPushConstants({pushConsts}); - s_algo->updateDescriptors(s_kompute_context->pool.get()); - } - seq.record(s_algo); -} - -static void ggml_vk_get_rows( - const std::vector& spirv, - const char * suffix, - unsigned element_size, unsigned qk, - kp::Sequence& seq, - const std::shared_ptr& inA, - const std::shared_ptr& inB, - const std::shared_ptr& out, - uint32_t inAOff, uint32_t inBOff, uint32_t outOff, - int32_t ne00, int32_t nb01, int32_t nb1, - uint32_t size -) { - GGML_ASSERT(nb01%element_size == 0); - GGML_ASSERT(nb1%sizeof(float) == 0); - if (qk) GGML_ASSERT(ne00%qk == 0); - - struct PushConstants { - uint32_t inAOff, inBOff, outOff; - int32_t ne00, nb01, nb1; - } pushConsts { - safe_divide(inAOff, element_size), safe_divide(inBOff, 4), safe_divide(outOff, 4), - ne00, nb01, nb1 - }; - - auto name = std::string(__func__) + "_" + suffix; - std::shared_ptr s_algo = nullptr; - if (!komputeManager()->hasAlgorithm(name)) { - s_algo = komputeManager()->algorithm(name, s_kompute_context->pool.get(), {inA, inB, out}, spirv, {size}, {}, {pushConsts}); - } else { - s_algo = komputeManager()->getAlgorithm(name); - s_algo->setTensors({inA, inB, out}); - s_algo->setWorkgroup({size}); - s_algo->setPushConstants({pushConsts}); - s_algo->updateDescriptors(s_kompute_context->pool.get()); - } - seq.record(s_algo); -} - -template -static void ggml_vk_get_rows_f16(Args&&... args) { - const static auto spirv = getSpirvShader(kp::shader_data::op_getrows_f16_comp_spv, - kp::shader_data::op_getrows_f16_comp_spv_len); - - ggml_vk_get_rows(spirv, "f16", sizeof(half), 0, std::forward(args)...); -} - -template -static void ggml_vk_get_rows_q4_0(Args&&... args) { - const static auto spirv = getSpirvShader(kp::shader_data::op_getrows_q4_0_comp_spv, - kp::shader_data::op_getrows_q4_0_comp_spv_len); - - ggml_vk_get_rows(spirv, "q4_0", 1/*We access blocks unaligned*/, QK4_0, std::forward(args)...); -} - -template -static void ggml_vk_get_rows_q4_1(Args&&... args) { - const static auto spirv = getSpirvShader(kp::shader_data::op_getrows_q4_1_comp_spv, - kp::shader_data::op_getrows_q4_1_comp_spv_len); - - ggml_vk_get_rows(spirv, "q4_1", 1/*We access blocks unaligned*/, QK4_1, std::forward(args)...); -} - -template -static void ggml_vk_get_rows_q6_k(Args&&... args) { - const static auto spirv = getSpirvShader(kp::shader_data::op_getrows_q6_k_comp_spv, - kp::shader_data::op_getrows_q6_k_comp_spv_len); - ggml_vk_get_rows(spirv, "q6_k", 1/*We access blocks unaligned*/, QK_NL, std::forward(args)...); -} - -static void ggml_vk_rope( - kp::Sequence& seq, - const std::shared_ptr& inA, - const std::shared_ptr& inB, - const std::shared_ptr& out, - uint32_t inAOff, uint32_t inBOff, uint32_t outOff, - ggml_type src0t, int32_t n_dims, int32_t mode, int32_t n_orig_ctx, - float freq_base, float freq_scale, float ext_factor, float attn_factor, float beta_fast, float beta_slow, - int32_t ne01, int32_t ne02, int32_t ne03, - uint32_t nb00, uint32_t nb01, uint32_t nb02, uint32_t nb03, - int32_t ne0, - uint32_t nb0, uint32_t nb1, uint32_t nb2, uint32_t nb3 -) { - GGML_ASSERT(src0t == GGML_TYPE_F16 || src0t == GGML_TYPE_F32); - - static const auto spirv_f16 = getSpirvShader( - kp::shader_data::op_rope_f16_comp_spv, kp::shader_data::op_rope_f16_comp_spv_len - ); - static const auto spirv_f32 = getSpirvShader( - kp::shader_data::op_rope_f32_comp_spv, kp::shader_data::op_rope_f32_comp_spv_len - ); - - int type_size = src0t == GGML_TYPE_F16 ? 2 : 4; - - GGML_ASSERT(nb03 % type_size == 0); - GGML_ASSERT(nb02 % type_size == 0); - GGML_ASSERT(nb01 % type_size == 0); - GGML_ASSERT(nb00 % type_size == 0); - GGML_ASSERT(nb3 % type_size == 0); - GGML_ASSERT(nb2 % type_size == 0); - GGML_ASSERT(nb1 % type_size == 0); - GGML_ASSERT(nb0 % type_size == 0); - - struct PushConstants { - uint32_t inAOff, inBOff, outOff; - int32_t n_dims, mode, n_orig_ctx; - float freq_base, freq_scale, ext_factor, attn_factor, beta_fast, beta_slow; - uint32_t nb00, nb01, nb02, nb03; - int32_t ne0; - uint32_t nb0, nb1, nb2, nb3; - } pushConsts { - safe_divide(inAOff, type_size), safe_divide(inBOff, 4), safe_divide(outOff, type_size), - n_dims, mode, n_orig_ctx, - freq_base, freq_scale, ext_factor, attn_factor, beta_fast, beta_slow, - nb00, nb01, nb02, nb03, - ne0, - nb0, nb1, nb2, nb3 - }; - - auto name = std::string(__func__) + (src0t == GGML_TYPE_F16 ? "_f16" : "_f32"); - std::shared_ptr s_algo = nullptr; - if (!komputeManager()->hasAlgorithm(name)) { - s_algo = komputeManager()->algorithm( - name, s_kompute_context->pool.get(), {inA, inB, out}, - src0t == GGML_TYPE_F16 ? spirv_f16 : spirv_f32, - {unsigned(ne01), unsigned(ne02), unsigned(ne03)}, {}, {pushConsts} - ); - } else { - s_algo = komputeManager()->getAlgorithm(name); - s_algo->setTensors({inA, inB, out}); - s_algo->setWorkgroup({unsigned(ne01), unsigned(ne02), unsigned(ne03)}); - s_algo->setPushConstants({pushConsts}); - s_algo->updateDescriptors(s_kompute_context->pool.get()); - } - seq.record(s_algo); -} - -static void ggml_vk_cpy( - const std::vector& spirv, - uint32_t in_element_size, uint32_t out_element_size, - kp::Sequence& seq, - const std::shared_ptr& in, - const std::shared_ptr& out, - uint32_t inOff, uint32_t outOff, - int32_t ne00, int32_t ne01, int32_t ne02, int32_t ne03, - uint32_t nb00, uint32_t nb01, uint32_t nb02, uint32_t nb03, - int32_t ne0, int32_t ne1, int32_t ne2, - uint32_t nb0, uint32_t nb1, uint32_t nb2, uint32_t nb3 -) { - struct PushConstants { - uint32_t inOff, outOff; - int32_t ne00, ne01, ne02; - uint32_t nb00, nb01, nb02, nb03; - int32_t ne0, ne1, ne2; - uint32_t nb0, nb1, nb2, nb3; - } pushConsts { - safe_divide(inOff, in_element_size), safe_divide(outOff, out_element_size), - ne00, ne01, ne02, - nb00, nb01, nb02, nb03, - ne0, ne1, ne2, - nb0, nb1, nb2, nb3 - }; - - std::string name = std::string(__func__) - + "_i_" + std::to_string(in_element_size) - + "_o_" + std::to_string(out_element_size); - std::shared_ptr s_algo = nullptr; - if (!komputeManager()->hasAlgorithm(name)) - s_algo = komputeManager()->algorithm(name, s_kompute_context->pool.get(), {in, out}, spirv, {unsigned(ne01), unsigned(ne02), unsigned(ne03)}, {}, {pushConsts}); - else { - s_algo = komputeManager()->getAlgorithm(name); - s_algo->setTensors({in, out}); - s_algo->setWorkgroup({unsigned(ne01), unsigned(ne02), unsigned(ne03)}); - s_algo->setPushConstants({pushConsts}); - s_algo->updateDescriptors(s_kompute_context->pool.get()); - } - seq.record(s_algo); -} - -template -static void ggml_vk_cpy_f32_f16(Args&&... args) { - const static auto spirv = getSpirvShader(kp::shader_data::op_cpy_f32_f16_comp_spv, - kp::shader_data::op_cpy_f32_f16_comp_spv_len); - ggml_vk_cpy(spirv, 4, 2, std::forward(args)...); -} - -template -static void ggml_vk_cpy_f32_f32(Args&&... args) { - const static auto spirv = getSpirvShader(kp::shader_data::op_cpy_f32_f32_comp_spv, - kp::shader_data::op_cpy_f32_f32_comp_spv_len); - ggml_vk_cpy(spirv, 4, 4, std::forward(args)...); -} - -template -static void ggml_vk_cpy_f16_f16(Args&&... args) { - const static auto spirv = getSpirvShader(kp::shader_data::op_cpy_f16_f16_comp_spv, - kp::shader_data::op_cpy_f16_f16_comp_spv_len); - ggml_vk_cpy(spirv, 2, 2, std::forward(args)...); -} - -template -static void ggml_vk_cpy_f16_f32(Args&&... args) { - const static auto spirv = getSpirvShader(kp::shader_data::op_cpy_f16_f32_comp_spv, - kp::shader_data::op_cpy_f16_f32_comp_spv_len); - ggml_vk_cpy(spirv, 2, 4, std::forward(args)...); -} - -static bool ggml_vk_supports_op(const struct ggml_tensor * op) { - switch (op->type) { - case GGML_TYPE_F16: - case GGML_TYPE_F32: - case GGML_TYPE_Q4_0: - case GGML_TYPE_Q4_1: - break; - default: - return false; - } - - switch (op->op) { - case GGML_OP_UNARY: - switch (ggml_get_unary_op(op)) { - case GGML_UNARY_OP_RELU: - case GGML_UNARY_OP_GELU: - case GGML_UNARY_OP_SILU: - return true; - default: - ; - } - break; - case GGML_OP_NONE: - case GGML_OP_RESHAPE: - case GGML_OP_VIEW: - case GGML_OP_TRANSPOSE: - case GGML_OP_PERMUTE: - case GGML_OP_ADD: - case GGML_OP_MUL: - case GGML_OP_SCALE: - case GGML_OP_SOFT_MAX: - case GGML_OP_RMS_NORM: - case GGML_OP_NORM: - case GGML_OP_ROPE: - return true; - case GGML_OP_DUP: - case GGML_OP_CPY: - case GGML_OP_CONT: - switch (op->src[0]->type) { - case GGML_TYPE_F32: - case GGML_TYPE_F16: - break; - default: - return false; - } - switch (op->type) { - case GGML_TYPE_F32: - case GGML_TYPE_F16: - break; - default: - return false; - } - return true; - case GGML_OP_DIAG_MASK_INF: - return op->ne[3] == 1; - case GGML_OP_GET_ROWS: - switch (op->src[0]->type) { - case GGML_TYPE_F16: - case GGML_TYPE_Q4_0: - case GGML_TYPE_Q4_1: - case GGML_TYPE_Q6_K: - return op->ne[2] == 1 && op->ne[3] == 1; - default: - ; - } - return false; - case GGML_OP_MUL_MAT: - if (op->src[1]->type != GGML_TYPE_F32 || ggml_is_transposed(op->src[0]) || ggml_is_transposed(op->src[1])) - return false; - - switch (op->src[0]->type) { - case GGML_TYPE_F32: - case GGML_TYPE_Q6_K: - return op->ne[3] == 1; - case GGML_TYPE_F16: - case GGML_TYPE_Q8_0: - case GGML_TYPE_Q4_0: - case GGML_TYPE_Q4_1: - return true; - default: - ; - } - default: - ; - } - return false; -} - -static void ggml_vk_graph_compute(struct ggml_kompute_context * ctx, struct ggml_cgraph * gf) { - const int n_seq = 8; - - // FIXME: Figure out if we can somehow optimize the size of the pool... right now we're setting - // it to the size of the graph, but I think it can be made smaller? - ggml_vk_allocate_descriptor_pool(ctx, gf->n_nodes); - - std::vector> sequences(n_seq); - - for (auto& sequence : sequences) { - sequence = komputeManager()->sequence(); - } - for (int seq_idx = 0; seq_idx < n_seq; ++seq_idx) { - const int n_nodes_per_seq = (gf->n_nodes + n_seq - 1) / n_seq; - - auto& seq = *sequences[seq_idx]; - - const int node_start = (seq_idx + 0) * n_nodes_per_seq; - const int node_end = std::min((seq_idx == n_seq - 1) ? gf->n_nodes : (seq_idx + 1) * n_nodes_per_seq, gf->n_nodes); - - bool any_commands_recorded = false; - - for (int i = node_start; i < node_end; ++i) { - struct ggml_tensor * src0 = gf->nodes[i]->src[0]; - struct ggml_tensor * src1 = gf->nodes[i]->src[1]; - struct ggml_tensor * dst = gf->nodes[i]; - GGML_ASSERT(dst->data != nullptr); - - if (ggml_is_empty(dst)) { - continue; - } - - switch (dst->op) { - case GGML_OP_NONE: - case GGML_OP_RESHAPE: - case GGML_OP_VIEW: - case GGML_OP_TRANSPOSE: - case GGML_OP_PERMUTE: - continue; // noop -> next node - default: - break; - } - - any_commands_recorded = true; - - if (!ggml_vk_supports_op(dst)) { - fprintf(stderr, "%s: error: unsupported op '%s'\n", __func__, ggml_op_desc(dst)); - GGML_ASSERT(!"unsupported op"); - } - - const int32_t ne00 = src0 ? src0->ne[0] : 0; - const int32_t ne01 = src0 ? src0->ne[1] : 0; - const int32_t ne02 = src0 ? src0->ne[2] : 0; - const int32_t ne03 = src0 ? src0->ne[3] : 0; - - const uint32_t nb00 = src0 ? src0->nb[0] : 0; - const uint32_t nb01 = src0 ? src0->nb[1] : 0; - const uint32_t nb02 = src0 ? src0->nb[2] : 0; - const uint32_t nb03 = src0 ? src0->nb[3] : 0; - - const int32_t ne10 = src1 ? src1->ne[0] : 0; - const int32_t ne11 = src1 ? src1->ne[1] : 0; - const int32_t ne12 = src1 ? src1->ne[2] : 0; - const int32_t ne13 = src1 ? src1->ne[3] : 0; - - const uint32_t nb10 = src1 ? src1->nb[0] : 0; - const uint32_t nb11 = src1 ? src1->nb[1] : 0; - const uint32_t nb12 = src1 ? src1->nb[2] : 0; - const uint32_t nb13 = src1 ? src1->nb[3] : 0; - - const int32_t ne0 = dst ? dst->ne[0] : 0; - const int32_t ne1 = dst ? dst->ne[1] : 0; - const int32_t ne2 = dst ? dst->ne[2] : 0; -// const int32_t ne3 = dst ? dst->ne[3] : 0; - - const uint32_t nb0 = dst ? dst->nb[0] : 0; - const uint32_t nb1 = dst ? dst->nb[1] : 0; - const uint32_t nb2 = dst ? dst->nb[2] : 0; - const uint32_t nb3 = dst ? dst->nb[3] : 0; - - const enum ggml_type src0t = src0 ? src0->type : GGML_TYPE_COUNT; - const enum ggml_type src1t = src1 ? src1->type : GGML_TYPE_COUNT; - const enum ggml_type dstt = dst ? dst->type : GGML_TYPE_COUNT; - - const static std::shared_ptr nullTensor = nullptr; - uint32_t off_src0 = 0; - uint32_t off_src1 = 0; - uint32_t off_dst = 0; - const std::shared_ptr& id_src0 = src0 ? ggml_vk_get_tensor(src0, &off_src0) : nullTensor; - const std::shared_ptr& id_src1 = src1 ? ggml_vk_get_tensor(src1, &off_src1) : nullTensor; - const std::shared_ptr& id_dst = dst ? ggml_vk_get_tensor(dst, &off_dst) : nullTensor; - - switch (dst->op) { - case GGML_OP_ADD: - { - if (ggml_nelements(src1) == ne10 && ggml_is_contiguous(src1) && ne00 % 4 == 0 && ne10 % 4 == 0) { - // src1 is a row - ggml_vk_addrow(seq, id_src0, id_src1, id_dst, off_src0, off_src1, off_dst, ggml_nelements(dst)/4, ne00); - } else { - ggml_vk_add( - seq, id_src0, id_src1, id_dst, off_src0, off_src1, off_dst, - ne00, ne01, ne02, ne03, - nb00, nb01, nb02, nb03, - ne10, ne11, ne12, ne13, - nb10, nb11, nb12, nb13, - ne0, - nb0, nb1, nb2, nb3 - ); - } - } break; - case GGML_OP_MUL: - { - ggml_vk_mul( - seq, id_src0, id_src1, id_dst, off_src0, off_src1, off_dst, - ne00, ne01, ne02, ne03, - nb00, nb01, nb02, nb03, - ne10, ne11, ne12, ne13, - nb10, nb11, nb12, nb13, - ne0, - nb0, nb1, nb2, nb3 - ); - } break; - case GGML_OP_SCALE: - { - float scale; memcpy(&scale, dst->op_params, sizeof(float)); - - ggml_vk_scale(seq, id_src0, id_dst, off_src0, off_dst, ggml_nelements(dst), scale); - } break; - case GGML_OP_UNARY: - { - int64_t n = ggml_nelements(dst); - GGML_ASSERT(n % 4 == 0); - switch (ggml_get_unary_op(gf->nodes[i])) { - case GGML_UNARY_OP_SILU: - { - ggml_vk_silu(seq, id_src0, id_dst, off_src0, off_dst, n/4); - } break; - case GGML_UNARY_OP_RELU: - { - ggml_vk_relu(seq, id_src0, id_dst, off_src0, off_dst, n/4); - } break; - case GGML_UNARY_OP_GELU: - { - GGML_ASSERT(n % 8 == 0); - ggml_vk_gelu(seq, id_src0, id_dst, off_src0, off_dst, n/8); - } break; - default: - { - fprintf(stderr, "%s: node %3d, op = %8s not implemented\n", __func__, i, ggml_op_name(dst->op)); - GGML_ASSERT(false); - } - } - } break; - case GGML_OP_SOFT_MAX: - { - float scale; - memcpy(&scale, dst->op_params, sizeof(float)); - ggml_vk_soft_max(seq, id_src0, id_src1, id_dst, off_src0, off_src1, off_dst, ne00, ne01, ne02, ne03, scale); - } break; - case GGML_OP_DIAG_MASK_INF: - { - const int n_past = ((int32_t *)(dst->op_params))[0]; - ggml_vk_diag_mask_inf(seq, id_src0, id_dst, off_src0, off_dst, n_past, ne00, ne01, ne02); - } break; - case GGML_OP_NORM: - { - float eps; - memcpy(&eps, dst->op_params, sizeof(float)); - ggml_vk_norm(seq, id_src0, id_dst, off_src0, off_dst, ne00, nb01, ggml_nrows(src0), eps); - } break; - case GGML_OP_RMS_NORM: - { - GGML_ASSERT(ne00 % 4 == 0); - - float eps; - memcpy(&eps, dst->op_params, sizeof(float)); - ggml_vk_rms_norm(seq, id_src0, id_dst, off_src0, off_dst, ne00, nb01, ggml_nrows(src0), eps); - } break; - case GGML_OP_MUL_MAT: - { - GGML_ASSERT(ne00 == ne10); - - // TODO: assert that dim2 and dim3 are contiguous - GGML_ASSERT(ne12 % ne02 == 0); - GGML_ASSERT(ne13 % ne03 == 0); - - const uint32_t r2 = ne12/ne02; - const uint32_t r3 = ne13/ne03; - - if (src1t != GGML_TYPE_F32) { - fprintf(stderr, "%s: %s: Unsupported src1 type: %u/%u\n", __func__, ggml_op_name(dst->op), src0t, src1t); - goto not_implemented; - } - - if (ggml_is_transposed(src0) || - ggml_is_transposed(src1)) { - fprintf(stderr, "%s: %s: matmul on tranposed tensor not supported: %u/%u\n", __func__, ggml_op_name(dst->op), src0t, src1t); - goto not_implemented; - } - - switch (src0t) { - case GGML_TYPE_F32: - ggml_vk_mul_mat_mat_f32( - seq, id_src0, id_src1, id_dst, off_src0, off_src1, off_dst, - ne00, ne01, ne02, nb01, nb02, ne11, ne12, nb11, nb12, nb1, nb2 - ); - break; - case GGML_TYPE_F16: - ggml_vk_mul_mat_f16( - seq, id_src0, id_src1, id_dst, off_src0, off_src1, off_dst, - ne00, ne01, ne02, nb00, nb01, nb02, ne10, ne11, ne12, ne13, nb10, nb11, nb12, - ne0, ne1, r2, r3 - ); - break; - case GGML_TYPE_Q8_0: - ggml_vk_mul_mat_q8_0( - seq, id_src0, id_src1, id_dst, off_src0, off_src1, off_dst, - ne00, ne01, ne02, ne10, ne11, ne12, ne13, ne0, ne1, r2, r3 - ); - break; - case GGML_TYPE_Q4_0: - ggml_vk_mul_mat_q4_0( - seq, id_src0, id_src1, id_dst, off_src0, off_src1, off_dst, - ne00, ne01, ne02, ne10, ne11, ne12, ne13, ne0, ne1, r2, r3 - ); - break; - case GGML_TYPE_Q4_1: - ggml_vk_mul_mat_q4_1( - seq, id_src0, id_src1, id_dst, off_src0, off_src1, off_dst, - ne00, ne01, ne02, ne10, ne11, ne12, ne13, ne0, ne1, r2, r3 - ); - break; - case GGML_TYPE_Q6_K: - ggml_vk_mul_mat_q6_k( - seq, id_src0, id_src1, id_dst, off_src0, off_src1, off_dst, - ne00, ne10, ne0, ne1, ne01, ne11, ne12, ne02 - ); - break; - default: { - fprintf(stderr, "%s: %s: Unsupported quantization: %u/%u\n", __func__, ggml_op_name(dst->op), src0t, src1t); - goto not_implemented; - } - } - - } break; - case GGML_OP_GET_ROWS: - { - if (src0t == GGML_TYPE_F16) { - ggml_vk_get_rows_f16(seq, id_src0, id_src1, id_dst, off_src0, off_src1, off_dst, ne00, nb01, nb1, ggml_nelements(src1)); - } else if (src0t == GGML_TYPE_Q4_0) { - ggml_vk_get_rows_q4_0(seq, id_src0, id_src1, id_dst, off_src0, off_src1, off_dst, ne00, nb01, nb1, ggml_nelements(src1)); - } else if (src0t == GGML_TYPE_Q4_1) { - ggml_vk_get_rows_q4_1(seq, id_src0, id_src1, id_dst, off_src0, off_src1, off_dst, ne00, nb01, nb1, ggml_nelements(src1)); - } else if (src0t == GGML_TYPE_Q6_K) { - ggml_vk_get_rows_q6_k(seq, id_src0, id_src1, id_dst, off_src0, off_src1, off_dst, ne00, nb01, nb1, ggml_nelements(src1)); - } else { - fprintf(stderr, "%s: %s: Unsupported quantization: %u\n", __func__, ggml_op_name(dst->op), src0t); - goto not_implemented; - } - } break; - case GGML_OP_ROPE: - { - GGML_ASSERT(ne10 == ne02); - GGML_ASSERT(src0t == dstt); - // const int n_past = ((int32_t *) dst->op_params)[0]; - const int n_dims = ((int32_t *) dst->op_params)[1]; - const int mode = ((int32_t *) dst->op_params)[2]; - // skip 3, n_ctx used in GLM RoPE, unimplemented in Vulkan - const int n_orig_ctx = ((int32_t *) dst->op_params)[4]; - - float freq_base, freq_scale, ext_factor, attn_factor, beta_fast, beta_slow; - memcpy(&freq_base, (int32_t *) dst->op_params + 5, sizeof(float)); - memcpy(&freq_scale, (int32_t *) dst->op_params + 6, sizeof(float)); - memcpy(&ext_factor, (int32_t *) dst->op_params + 7, sizeof(float)); - memcpy(&attn_factor, (int32_t *) dst->op_params + 8, sizeof(float)); - memcpy(&beta_fast, (int32_t *) dst->op_params + 9, sizeof(float)); - memcpy(&beta_slow, (int32_t *) dst->op_params + 10, sizeof(float)); - ggml_vk_rope( - seq, id_src0, id_src1, id_dst, off_src0, off_src1, off_dst, src0t, n_dims, mode, n_orig_ctx, - freq_base, freq_scale, ext_factor, attn_factor, beta_fast, beta_slow, - ne01, ne02, ne03, nb00, nb01, nb02, nb03, ne0, nb0, nb1, nb2, nb3 - ); - } break; - case GGML_OP_DUP: - case GGML_OP_CPY: - case GGML_OP_CONT: - { - switch (src0t) { - case GGML_TYPE_F32: - { - switch (dstt) { - case GGML_TYPE_F16: ggml_vk_cpy_f32_f16(seq, id_src0, id_dst, off_src0, off_dst, ne00, ne01, ne02, ne03, nb00, nb01, nb02, nb03, ne0, ne1, ne2, nb0, nb1, nb2, nb3); break; - case GGML_TYPE_F32: ggml_vk_cpy_f32_f32(seq, id_src0, id_dst, off_src0, off_dst, ne00, ne01, ne02, ne03, nb00, nb01, nb02, nb03, ne0, ne1, ne2, nb0, nb1, nb2, nb3); break; - default: goto not_implemented; - } - } break; - case GGML_TYPE_F16: - { - switch (dstt) { - case GGML_TYPE_F16: ggml_vk_cpy_f16_f16(seq, id_src0, id_dst, off_src0, off_dst, ne00, ne01, ne02, ne03, nb00, nb01, nb02, nb03, ne0, ne1, ne2, nb0, nb1, nb2, nb3); break; - case GGML_TYPE_F32: ggml_vk_cpy_f16_f32(seq, id_src0, id_dst, off_src0, off_dst, ne00, ne01, ne02, ne03, nb00, nb01, nb02, nb03, ne0, ne1, ne2, nb0, nb1, nb2, nb3); break; - default: goto not_implemented; - } break; - default: goto not_implemented; - } - } - } break; - default: goto not_implemented; - } - continue; - not_implemented: {} - fprintf(stderr, "%s: node %3d, op = %8s not implemented\n", __func__, i, ggml_op_name(dst->op)); - //GGML_ASSERT(false); - } - - // Evaluate sequence - if (any_commands_recorded) { - seq.evalAsync(); - } - } - - // Wait for all sequences to finish - for (auto& sequence : sequences) { - if (sequence->isRunning()) - sequence->evalAwait(); - } - - ggml_vk_free_descriptor_pool(ctx); -} - -template<> -kp::Tensor::TensorDataTypes -kp::TensorT::dataType() -{ - return TensorDataTypes::eFloat; -} - -template<> -kp::Tensor::TensorDataTypes -kp::TensorT::dataType() -{ - return TensorDataTypes::eUnsignedInt; -} - -//////////////////////////////////////////////////////////////////////////////// - -// backend interface - -struct ggml_backend_kompute_buffer_type_context { - int device; - int device_ref = 0; - uint64_t buffer_alignment; - uint64_t max_alloc; - std::string name; - - ggml_backend_kompute_buffer_type_context(int device, uint64_t buffer_alignment, uint64_t max_alloc) - : device(device), buffer_alignment(buffer_alignment), max_alloc(max_alloc), name(ggml_kompute_format_name(device)) {} -}; - -static void ggml_backend_kompute_device_ref(ggml_backend_buffer_type_t buft) { - auto * ctx = static_cast(buft->context); - - if (!ctx->device_ref) { - komputeManager()->initializeDevice( - ctx->device, {}, { - "VK_KHR_shader_float16_int8", "VK_KHR_8bit_storage", - "VK_KHR_16bit_storage", "VK_KHR_shader_non_semantic_info" - } - ); - } - - assert(ggml_vk_has_device()); - ctx->device_ref++; -} - -static void ggml_backend_kompute_device_unref(ggml_backend_buffer_type_t buft) { - auto * ctx = static_cast(buft->context); - - assert(ctx->device_ref > 0); - - ctx->device_ref--; - - if (!ctx->device_ref) { - komputeManager.destroy(); - } -} - -static const char * ggml_backend_kompute_buffer_get_name(ggml_backend_buffer_t buffer) { - auto * ctx = static_cast(buffer->buft->context); - return ctx->name.c_str(); -} - -static void ggml_backend_kompute_buffer_free_buffer(ggml_backend_buffer_t buffer) { - auto * memory = (ggml_vk_memory *)buffer->context; - if (ggml_vk_has_device()) { - ggml_vk_free_memory(*memory); - } - delete memory; -} - -static void * ggml_backend_kompute_buffer_get_base(ggml_backend_buffer_t buffer) { - return ((ggml_vk_memory *)buffer->context)->data; -} - -static void ggml_backend_kompute_buffer_set_tensor(ggml_backend_buffer_t buffer, ggml_tensor * tensor, const void * data, size_t offset, size_t size) { - GGML_UNUSED(buffer); - - const auto res = ggml_vk_get_tensor(tensor); - GGML_ASSERT(res); - - memcpy((char *)tensor->data + offset, data, size); - - komputeManager()->sequence()->eval({res}); -} - -static void ggml_backend_kompute_buffer_get_tensor(ggml_backend_buffer_t buffer, const ggml_tensor * tensor, void * data, size_t offset, size_t size) { - GGML_UNUSED(buffer); - - const auto res = ggml_vk_get_tensor(tensor); - GGML_ASSERT(res); - - komputeManager()->sequence()->eval({res}); - - memcpy(data, (const char *)tensor->data + offset, size); -} - -static void ggml_backend_kompute_buffer_clear(ggml_backend_buffer_t buffer, uint8_t value) { - auto * memory = (ggml_vk_memory *)buffer->context; - memset(memory->data, value, buffer->size); - - if (memory->stagingBuffer) - komputeManager()->sequence()->eval(memory->primaryBuffer, memory->stagingBuffer, memory->size); -} - -static ggml_backend_buffer_i ggml_backend_kompute_buffer_i = { - /* .get_name = */ ggml_backend_kompute_buffer_get_name, - /* .free_buffer = */ ggml_backend_kompute_buffer_free_buffer, - /* .get_base = */ ggml_backend_kompute_buffer_get_base, - /* .init_tensor = */ NULL, - /* .set_tensor = */ ggml_backend_kompute_buffer_set_tensor, - /* .get_tensor = */ ggml_backend_kompute_buffer_get_tensor, - /* .cpy_tensor = */ NULL, - /* .clear = */ ggml_backend_kompute_buffer_clear, - /* .reset = */ NULL, -}; - -// default buffer type - -static const char * ggml_backend_kompute_buffer_type_get_name(ggml_backend_buffer_type_t buft) { - auto * ctx = static_cast(buft->context); - return ctx->name.c_str(); -} - -static ggml_backend_buffer_t ggml_backend_kompute_buffer_type_alloc_buffer(ggml_backend_buffer_type_t buft, size_t size) { - ggml_backend_kompute_device_ref(buft); - auto * ctx = new ggml_vk_memory(ggml_vk_allocate(size)); - return ggml_backend_buffer_init(buft, ggml_backend_kompute_buffer_i, ctx, size); -} - -static size_t ggml_backend_kompute_buffer_type_get_alignment(ggml_backend_buffer_type_t buft) { - auto * ctx = static_cast(buft->context); - return ctx->buffer_alignment; -} - -static size_t ggml_backend_vk_buffer_type_get_max_size(ggml_backend_buffer_type_t buft) { - auto * ctx = static_cast(buft->context); - return ctx->max_alloc; -} - -static bool ggml_backend_kompute_buffer_type_supports_backend(ggml_backend_buffer_type_t buft, ggml_backend_t backend) { - GGML_UNUSED(buft); - return ggml_backend_is_kompute(backend); -} - -static ggml_backend_buffer_type_i ggml_backend_kompute_buffer_type_interface = { - /* .get_name = */ ggml_backend_kompute_buffer_type_get_name, - /* .alloc_buffer = */ ggml_backend_kompute_buffer_type_alloc_buffer, - /* .get_alignment = */ ggml_backend_kompute_buffer_type_get_alignment, - /* .get_max_size = */ ggml_backend_vk_buffer_type_get_max_size, - /* .get_alloc_size = */ NULL, // defaults to ggml_nbytes - /* .supports_backend = */ ggml_backend_kompute_buffer_type_supports_backend, - /* .is_host = */ NULL, -}; - -ggml_backend_buffer_type_t ggml_backend_kompute_buffer_type(int device) { - static std::vector bufts = []() { - std::vector vec; - auto devices = ggml_vk_available_devices_internal(0); - vec.reserve(devices.size()); - - for (const auto & dev : devices) { - vec.push_back({ - /* .iface = */ ggml_backend_kompute_buffer_type_interface, - /* .context = */ new ggml_backend_kompute_buffer_type_context(dev.index, dev.bufferAlignment, dev.maxAlloc) - }); - } - return vec; - }(); - - auto it = std::find_if(bufts.begin(), bufts.end(), [device](const ggml_backend_buffer_type & t) { - return device == static_cast(t.context)->device; - }); - return it < bufts.end() ? &*it : nullptr; -} - -// backend - -static const char * ggml_backend_kompute_name(ggml_backend_t backend) { - auto * ctx = static_cast(backend->context); - return ctx->name.c_str(); -} - -static void ggml_backend_kompute_free(ggml_backend_t backend) { - auto * ctx = static_cast(backend->context); - - assert(ctx == s_kompute_context); - s_kompute_context = nullptr; - if (ctx != nullptr) { - delete ctx; - } - - delete backend; -} - -static ggml_backend_buffer_type_t ggml_backend_kompute_get_default_buffer_type(ggml_backend_t backend) { - auto * ctx = static_cast(backend->context); - return ggml_backend_kompute_buffer_type(ctx->device); -} - -static ggml_status ggml_backend_kompute_graph_compute(ggml_backend_t backend, struct ggml_cgraph * cgraph) { - auto * ctx = static_cast(backend->context); - ggml_vk_graph_compute(ctx, cgraph); - return GGML_STATUS_SUCCESS; -} - -static bool ggml_backend_kompute_supports_op(ggml_backend_t backend, const struct ggml_tensor * op) { - GGML_UNUSED(backend); - return ggml_vk_supports_op(op); -} - -static struct ggml_backend_i kompute_backend_i = { - /* .get_name = */ ggml_backend_kompute_name, - /* .free = */ ggml_backend_kompute_free, - /* .get_default_buffer_type = */ ggml_backend_kompute_get_default_buffer_type, - /* .set_tensor_async = */ NULL, - /* .get_tensor_async = */ NULL, - /* .cpy_tensor_async = */ NULL, - /* .synchronize = */ NULL, - /* .graph_plan_create = */ NULL, - /* .graph_plan_free = */ NULL, - /* .graph_plan_compute = */ NULL, - /* .graph_compute = */ ggml_backend_kompute_graph_compute, - /* .supports_op = */ ggml_backend_kompute_supports_op, - /* .offload_op = */ NULL, - /* .event_new = */ NULL, - /* .event_free = */ NULL, - /* .event_record = */ NULL, - /* .event_wait = */ NULL, - /* .event_synchronize = */ NULL, -}; - -static ggml_guid_t ggml_backend_kompute_guid() { - static ggml_guid guid = { 0x7b, 0x57, 0xdc, 0xaf, 0xde, 0x12, 0x1d, 0x49, 0xfb, 0x35, 0xfa, 0x9b, 0x18, 0x31, 0x1d, 0xca }; - return &guid; -} - -ggml_backend_t ggml_backend_kompute_init(int device) { - GGML_ASSERT(s_kompute_context == nullptr); - s_kompute_context = new ggml_kompute_context(device); - - ggml_backend_t kompute_backend = new ggml_backend { - /* .guid = */ ggml_backend_kompute_guid(), - /* .interface = */ kompute_backend_i, - /* .context = */ s_kompute_context, - }; - - return kompute_backend; -} - -bool ggml_backend_is_kompute(ggml_backend_t backend) { - return backend != NULL && ggml_guid_matches(backend->guid, ggml_backend_kompute_guid()); -} - -static ggml_backend_t ggml_backend_reg_kompute_init(const char * params, void * user_data) { - GGML_UNUSED(params); - return ggml_backend_kompute_init(intptr_t(user_data)); -} - -extern "C" int ggml_backend_kompute_reg_devices(); - -int ggml_backend_kompute_reg_devices() { - auto devices = ggml_vk_available_devices_internal(0); - for (const auto & device : devices) { - ggml_backend_register( - ggml_kompute_format_name(device.index).c_str(), - ggml_backend_reg_kompute_init, - ggml_backend_kompute_buffer_type(device.index), - reinterpret_cast(intptr_t(device.index)) - ); - } - return devices.size(); -} diff --git a/ggml-kompute.h b/ggml-kompute.h deleted file mode 100644 index 171465456a5..00000000000 --- a/ggml-kompute.h +++ /dev/null @@ -1,46 +0,0 @@ -#pragma once - -#include "ggml.h" -#include "ggml-backend.h" - -#include -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -struct ggml_vk_device { - int index; - int type; // same as VkPhysicalDeviceType - size_t heapSize; - const char * name; - const char * vendor; - int subgroupSize; - uint64_t bufferAlignment; - uint64_t maxAlloc; -}; - -struct ggml_vk_device * ggml_vk_available_devices(size_t memoryRequired, size_t * count); -bool ggml_vk_get_device(struct ggml_vk_device * device, size_t memoryRequired, const char * name); -bool ggml_vk_has_vulkan(void); -bool ggml_vk_has_device(void); -struct ggml_vk_device ggml_vk_current_device(void); - -// -// backend API -// - -// forward declaration -typedef struct ggml_backend * ggml_backend_t; - -GGML_API ggml_backend_t ggml_backend_kompute_init(int device); - -GGML_API bool ggml_backend_is_kompute(ggml_backend_t backend); - -GGML_API ggml_backend_buffer_type_t ggml_backend_kompute_buffer_type(int device); - -#ifdef __cplusplus -} -#endif diff --git a/ggml-metal.h b/ggml-metal.h deleted file mode 100644 index a5c542189c2..00000000000 --- a/ggml-metal.h +++ /dev/null @@ -1,66 +0,0 @@ -// An interface allowing to compute ggml_cgraph with Metal -// -// This is a fully functional interface that extends ggml with GPU support for Apple devices. -// A similar interface can be created for other GPU backends (e.g. Vulkan, CUDA, OpenCL, etc.) -// -// How it works? -// -// As long as your program can create and evaluate a ggml_cgraph on the CPU, you can use this -// interface to evaluate the same graph on the GPU. Instead of using ggml_graph_compute(), you -// use ggml_metal_graph_compute() (or ggml_vulkan_graph_compute(), etc.) -// -// You only need to make sure that all memory buffers that you used during the graph creation -// are mapped to the device memory with the ggml_metal_add_buffer() function. This mapping is -// used during the graph evaluation to determine the arguments of the compute kernels. -// -// Synchronization between device and host memory (for example for input and output tensors) -// is done with the ggml_metal_set_tensor() and ggml_metal_get_tensor() functions. -// - -#pragma once - -#include "ggml.h" -#include "ggml-backend.h" - -#include -#include - -// max memory buffers that can be mapped to the device -#define GGML_METAL_MAX_BUFFERS 64 - -struct ggml_tensor; -struct ggml_cgraph; - -#ifdef __cplusplus -extern "C" { -#endif - -// -// backend API -// user-code should use only these functions -// - -GGML_API void ggml_backend_metal_log_set_callback(ggml_log_callback log_callback, void * user_data); - -GGML_API ggml_backend_t ggml_backend_metal_init(void); - -GGML_API bool ggml_backend_is_metal(ggml_backend_t backend); - -GGML_API GGML_CALL ggml_backend_buffer_t ggml_backend_metal_buffer_from_ptr(void * data, size_t size, size_t max_size); - -GGML_API void ggml_backend_metal_set_n_cb(ggml_backend_t backend, int n_cb); - -GGML_API GGML_CALL ggml_backend_buffer_type_t ggml_backend_metal_buffer_type(void); - -// helper to check if the device supports a specific family -// ideally, the user code should be doing these checks -// ref: https://developer.apple.com/metal/Metal-Feature-Set-Tables.pdf -GGML_API bool ggml_backend_metal_supports_family(ggml_backend_t backend, int family); - -// capture all command buffers committed the next time `ggml_backend_graph_compute` is called -GGML_API void ggml_backend_metal_capture_next_compute(ggml_backend_t backend); - -#ifdef __cplusplus -} -#endif - diff --git a/ggml-metal.m b/ggml-metal.m deleted file mode 100644 index 9cb4219885c..00000000000 --- a/ggml-metal.m +++ /dev/null @@ -1,2999 +0,0 @@ -#import "ggml-metal.h" - -#import "ggml-backend-impl.h" -#import "ggml.h" - -#import - -#import - -#undef MIN -#undef MAX -#define MIN(a, b) ((a) < (b) ? (a) : (b)) -#define MAX(a, b) ((a) > (b) ? (a) : (b)) - -#ifdef GGML_METAL_NDEBUG -#define GGML_METAL_LOG_INFO(...) -#define GGML_METAL_LOG_WARN(...) -#define GGML_METAL_LOG_ERROR(...) -#else -#define GGML_METAL_LOG_INFO(...) ggml_metal_log(GGML_LOG_LEVEL_INFO, __VA_ARGS__) -#define GGML_METAL_LOG_WARN(...) ggml_metal_log(GGML_LOG_LEVEL_WARN, __VA_ARGS__) -#define GGML_METAL_LOG_ERROR(...) ggml_metal_log(GGML_LOG_LEVEL_ERROR, __VA_ARGS__) -#endif - -#define UNUSED(x) (void)(x) - -struct ggml_metal_kernel { - id pipeline; -}; - -enum ggml_metal_kernel_type { - GGML_METAL_KERNEL_TYPE_ADD, - GGML_METAL_KERNEL_TYPE_ADD_ROW, - GGML_METAL_KERNEL_TYPE_MUL, - GGML_METAL_KERNEL_TYPE_MUL_ROW, - GGML_METAL_KERNEL_TYPE_DIV, - GGML_METAL_KERNEL_TYPE_DIV_ROW, - GGML_METAL_KERNEL_TYPE_SCALE, - GGML_METAL_KERNEL_TYPE_SCALE_4, - GGML_METAL_KERNEL_TYPE_CLAMP, - GGML_METAL_KERNEL_TYPE_TANH, - GGML_METAL_KERNEL_TYPE_RELU, - GGML_METAL_KERNEL_TYPE_GELU, - GGML_METAL_KERNEL_TYPE_GELU_4, - GGML_METAL_KERNEL_TYPE_GELU_QUICK, - GGML_METAL_KERNEL_TYPE_GELU_QUICK_4, - GGML_METAL_KERNEL_TYPE_SILU, - GGML_METAL_KERNEL_TYPE_SILU_4, - GGML_METAL_KERNEL_TYPE_SOFT_MAX, - GGML_METAL_KERNEL_TYPE_SOFT_MAX_4, - GGML_METAL_KERNEL_TYPE_DIAG_MASK_INF, - GGML_METAL_KERNEL_TYPE_DIAG_MASK_INF_8, - GGML_METAL_KERNEL_TYPE_GET_ROWS_F32, - GGML_METAL_KERNEL_TYPE_GET_ROWS_F16, - GGML_METAL_KERNEL_TYPE_GET_ROWS_Q4_0, - GGML_METAL_KERNEL_TYPE_GET_ROWS_Q4_1, - GGML_METAL_KERNEL_TYPE_GET_ROWS_Q5_0, - GGML_METAL_KERNEL_TYPE_GET_ROWS_Q5_1, - GGML_METAL_KERNEL_TYPE_GET_ROWS_Q8_0, - GGML_METAL_KERNEL_TYPE_GET_ROWS_Q2_K, - GGML_METAL_KERNEL_TYPE_GET_ROWS_Q3_K, - GGML_METAL_KERNEL_TYPE_GET_ROWS_Q4_K, - GGML_METAL_KERNEL_TYPE_GET_ROWS_Q5_K, - GGML_METAL_KERNEL_TYPE_GET_ROWS_Q6_K, - GGML_METAL_KERNEL_TYPE_GET_ROWS_IQ2_XXS, - GGML_METAL_KERNEL_TYPE_GET_ROWS_IQ2_XS, - GGML_METAL_KERNEL_TYPE_GET_ROWS_IQ3_XXS, - GGML_METAL_KERNEL_TYPE_GET_ROWS_IQ3_S, - GGML_METAL_KERNEL_TYPE_GET_ROWS_IQ2_S, - GGML_METAL_KERNEL_TYPE_GET_ROWS_IQ1_S, - GGML_METAL_KERNEL_TYPE_GET_ROWS_IQ1_M, - GGML_METAL_KERNEL_TYPE_GET_ROWS_IQ4_NL, - GGML_METAL_KERNEL_TYPE_GET_ROWS_IQ4_XS, - GGML_METAL_KERNEL_TYPE_GET_ROWS_I32, - GGML_METAL_KERNEL_TYPE_RMS_NORM, - GGML_METAL_KERNEL_TYPE_GROUP_NORM, - GGML_METAL_KERNEL_TYPE_NORM, - GGML_METAL_KERNEL_TYPE_MUL_MV_F32_F32, - GGML_METAL_KERNEL_TYPE_MUL_MV_F16_F16, - GGML_METAL_KERNEL_TYPE_MUL_MV_F16_F32, - GGML_METAL_KERNEL_TYPE_MUL_MV_F16_F32_1ROW, - GGML_METAL_KERNEL_TYPE_MUL_MV_F16_F32_L4, - GGML_METAL_KERNEL_TYPE_MUL_MV_Q4_0_F32, - GGML_METAL_KERNEL_TYPE_MUL_MV_Q4_1_F32, - GGML_METAL_KERNEL_TYPE_MUL_MV_Q5_0_F32, - GGML_METAL_KERNEL_TYPE_MUL_MV_Q5_1_F32, - GGML_METAL_KERNEL_TYPE_MUL_MV_Q8_0_F32, - GGML_METAL_KERNEL_TYPE_MUL_MV_Q2_K_F32, - GGML_METAL_KERNEL_TYPE_MUL_MV_Q3_K_F32, - GGML_METAL_KERNEL_TYPE_MUL_MV_Q4_K_F32, - GGML_METAL_KERNEL_TYPE_MUL_MV_Q5_K_F32, - GGML_METAL_KERNEL_TYPE_MUL_MV_Q6_K_F32, - GGML_METAL_KERNEL_TYPE_MUL_MV_IQ2_XXS_F32, - GGML_METAL_KERNEL_TYPE_MUL_MV_IQ2_XS_F32, - GGML_METAL_KERNEL_TYPE_MUL_MV_IQ3_XXS_F32, - GGML_METAL_KERNEL_TYPE_MUL_MV_IQ3_S_F32, - GGML_METAL_KERNEL_TYPE_MUL_MV_IQ2_S_F32, - GGML_METAL_KERNEL_TYPE_MUL_MV_IQ1_S_F32, - GGML_METAL_KERNEL_TYPE_MUL_MV_IQ1_M_F32, - GGML_METAL_KERNEL_TYPE_MUL_MV_IQ4_NL_F32, - GGML_METAL_KERNEL_TYPE_MUL_MV_IQ4_XS_F32, - GGML_METAL_KERNEL_TYPE_MUL_MV_ID_F32_F32, - //GGML_METAL_KERNEL_TYPE_MUL_MV_ID_F16_F16, - GGML_METAL_KERNEL_TYPE_MUL_MV_ID_F16_F32, - //GGML_METAL_KERNEL_TYPE_MUL_MV_ID_F16_F32_1ROW, - //GGML_METAL_KERNEL_TYPE_MUL_MV_ID_F16_F32_L4, - GGML_METAL_KERNEL_TYPE_MUL_MV_ID_Q4_0_F32, - GGML_METAL_KERNEL_TYPE_MUL_MV_ID_Q4_1_F32, - GGML_METAL_KERNEL_TYPE_MUL_MV_ID_Q5_0_F32, - GGML_METAL_KERNEL_TYPE_MUL_MV_ID_Q5_1_F32, - GGML_METAL_KERNEL_TYPE_MUL_MV_ID_Q8_0_F32, - GGML_METAL_KERNEL_TYPE_MUL_MV_ID_Q2_K_F32, - GGML_METAL_KERNEL_TYPE_MUL_MV_ID_Q3_K_F32, - GGML_METAL_KERNEL_TYPE_MUL_MV_ID_Q4_K_F32, - GGML_METAL_KERNEL_TYPE_MUL_MV_ID_Q5_K_F32, - GGML_METAL_KERNEL_TYPE_MUL_MV_ID_Q6_K_F32, - GGML_METAL_KERNEL_TYPE_MUL_MV_ID_IQ2_XXS_F32, - GGML_METAL_KERNEL_TYPE_MUL_MV_ID_IQ2_XS_F32, - GGML_METAL_KERNEL_TYPE_MUL_MV_ID_IQ3_XXS_F32, - GGML_METAL_KERNEL_TYPE_MUL_MV_ID_IQ3_S_F32, - GGML_METAL_KERNEL_TYPE_MUL_MV_ID_IQ2_S_F32, - GGML_METAL_KERNEL_TYPE_MUL_MV_ID_IQ1_S_F32, - GGML_METAL_KERNEL_TYPE_MUL_MV_ID_IQ1_M_F32, - GGML_METAL_KERNEL_TYPE_MUL_MV_ID_IQ4_NL_F32, - GGML_METAL_KERNEL_TYPE_MUL_MV_ID_IQ4_XS_F32, - GGML_METAL_KERNEL_TYPE_MUL_MM_F32_F32, - GGML_METAL_KERNEL_TYPE_MUL_MM_F16_F32, - GGML_METAL_KERNEL_TYPE_MUL_MM_Q4_0_F32, - GGML_METAL_KERNEL_TYPE_MUL_MM_Q4_1_F32, - GGML_METAL_KERNEL_TYPE_MUL_MM_Q5_0_F32, - GGML_METAL_KERNEL_TYPE_MUL_MM_Q5_1_F32, - GGML_METAL_KERNEL_TYPE_MUL_MM_Q8_0_F32, - GGML_METAL_KERNEL_TYPE_MUL_MM_Q2_K_F32, - GGML_METAL_KERNEL_TYPE_MUL_MM_Q3_K_F32, - GGML_METAL_KERNEL_TYPE_MUL_MM_Q4_K_F32, - GGML_METAL_KERNEL_TYPE_MUL_MM_Q5_K_F32, - GGML_METAL_KERNEL_TYPE_MUL_MM_Q6_K_F32, - GGML_METAL_KERNEL_TYPE_MUL_MM_IQ2_XXS_F32, - GGML_METAL_KERNEL_TYPE_MUL_MM_IQ2_XS_F32, - GGML_METAL_KERNEL_TYPE_MUL_MM_IQ3_XXS_F32, - GGML_METAL_KERNEL_TYPE_MUL_MM_IQ3_S_F32, - GGML_METAL_KERNEL_TYPE_MUL_MM_IQ2_S_F32, - GGML_METAL_KERNEL_TYPE_MUL_MM_IQ1_S_F32, - GGML_METAL_KERNEL_TYPE_MUL_MM_IQ1_M_F32, - GGML_METAL_KERNEL_TYPE_MUL_MM_IQ4_NL_F32, - GGML_METAL_KERNEL_TYPE_MUL_MM_IQ4_XS_F32, - GGML_METAL_KERNEL_TYPE_MUL_MM_ID_F32_F32, - GGML_METAL_KERNEL_TYPE_MUL_MM_ID_F16_F32, - GGML_METAL_KERNEL_TYPE_MUL_MM_ID_Q4_0_F32, - GGML_METAL_KERNEL_TYPE_MUL_MM_ID_Q4_1_F32, - GGML_METAL_KERNEL_TYPE_MUL_MM_ID_Q5_0_F32, - GGML_METAL_KERNEL_TYPE_MUL_MM_ID_Q5_1_F32, - GGML_METAL_KERNEL_TYPE_MUL_MM_ID_Q8_0_F32, - GGML_METAL_KERNEL_TYPE_MUL_MM_ID_Q2_K_F32, - GGML_METAL_KERNEL_TYPE_MUL_MM_ID_Q3_K_F32, - GGML_METAL_KERNEL_TYPE_MUL_MM_ID_Q4_K_F32, - GGML_METAL_KERNEL_TYPE_MUL_MM_ID_Q5_K_F32, - GGML_METAL_KERNEL_TYPE_MUL_MM_ID_Q6_K_F32, - GGML_METAL_KERNEL_TYPE_MUL_MM_ID_IQ2_XXS_F32, - GGML_METAL_KERNEL_TYPE_MUL_MM_ID_IQ2_XS_F32, - GGML_METAL_KERNEL_TYPE_MUL_MM_ID_IQ3_XXS_F32, - GGML_METAL_KERNEL_TYPE_MUL_MM_ID_IQ3_S_F32, - GGML_METAL_KERNEL_TYPE_MUL_MM_ID_IQ2_S_F32, - GGML_METAL_KERNEL_TYPE_MUL_MM_ID_IQ1_S_F32, - GGML_METAL_KERNEL_TYPE_MUL_MM_ID_IQ1_M_F32, - GGML_METAL_KERNEL_TYPE_MUL_MM_ID_IQ4_NL_F32, - GGML_METAL_KERNEL_TYPE_MUL_MM_ID_IQ4_XS_F32, - GGML_METAL_KERNEL_TYPE_ROPE_F32, - GGML_METAL_KERNEL_TYPE_ROPE_F16, - GGML_METAL_KERNEL_TYPE_ALIBI_F32, - GGML_METAL_KERNEL_TYPE_IM2COL_F16, - GGML_METAL_KERNEL_TYPE_IM2COL_F32, - GGML_METAL_KERNEL_TYPE_UPSCALE_F32, - GGML_METAL_KERNEL_TYPE_PAD_F32, - GGML_METAL_KERNEL_TYPE_ARANGE_F32, - GGML_METAL_KERNEL_TYPE_TIMESTEP_EMBEDDING_F32, - GGML_METAL_KERNEL_TYPE_ARGSORT_F32_I32_ASC, - GGML_METAL_KERNEL_TYPE_ARGSORT_F32_I32_DESC, - GGML_METAL_KERNEL_TYPE_LEAKY_RELU_F32, - GGML_METAL_KERNEL_TYPE_CPY_F32_F16, - GGML_METAL_KERNEL_TYPE_CPY_F32_F32, - GGML_METAL_KERNEL_TYPE_CPY_F32_Q8_0, - GGML_METAL_KERNEL_TYPE_CPY_F32_Q4_0, - GGML_METAL_KERNEL_TYPE_CPY_F32_Q4_1, - GGML_METAL_KERNEL_TYPE_CPY_F32_Q5_0, - GGML_METAL_KERNEL_TYPE_CPY_F32_Q5_1, - GGML_METAL_KERNEL_TYPE_CPY_F32_IQ4_NL, - GGML_METAL_KERNEL_TYPE_CPY_F16_F16, - GGML_METAL_KERNEL_TYPE_CPY_F16_F32, - GGML_METAL_KERNEL_TYPE_CONCAT, - GGML_METAL_KERNEL_TYPE_SQR, - GGML_METAL_KERNEL_TYPE_SUM_ROWS, - - GGML_METAL_KERNEL_TYPE_COUNT -}; - -struct ggml_metal_context { - int n_cb; - - id device; - id queue; - - dispatch_queue_t d_queue; - - struct ggml_metal_kernel kernels[GGML_METAL_KERNEL_TYPE_COUNT]; - - bool support_simdgroup_reduction; - bool support_simdgroup_mm; - - bool should_capture_next_compute; -}; - -// MSL code -// TODO: move the contents here when ready -// for now it is easier to work in a separate file -// static NSString * const msl_library_source = @"see metal.metal"; - -// Here to assist with NSBundle Path Hack -@interface GGMLMetalClass : NSObject -@end -@implementation GGMLMetalClass -@end - -static void ggml_metal_default_log_callback(enum ggml_log_level level, const char * msg, void * user_data) { - fprintf(stderr, "%s", msg); - - UNUSED(level); - UNUSED(user_data); -} - -ggml_log_callback ggml_metal_log_callback = ggml_metal_default_log_callback; -void * ggml_metal_log_user_data = NULL; - -GGML_ATTRIBUTE_FORMAT(2, 3) -static void ggml_metal_log(enum ggml_log_level level, const char * format, ...){ - if (ggml_metal_log_callback != NULL) { - va_list args; - va_start(args, format); - char buffer[128]; - int len = vsnprintf(buffer, 128, format, args); - if (len < 128) { - ggml_metal_log_callback(level, buffer, ggml_metal_log_user_data); - } else { - char* buffer2 = malloc(len+1); - va_end(args); - va_start(args, format); - vsnprintf(buffer2, len+1, format, args); - buffer2[len] = 0; - ggml_metal_log_callback(level, buffer2, ggml_metal_log_user_data); - free(buffer2); - } - va_end(args); - } -} - -static void * ggml_metal_host_malloc(size_t n) { - void * data = NULL; - const int result = posix_memalign((void **) &data, sysconf(_SC_PAGESIZE), n); - if (result != 0) { - GGML_METAL_LOG_ERROR("%s: error: posix_memalign failed\n", __func__); - return NULL; - } - - return data; -} - -static struct ggml_metal_context * ggml_metal_init(int n_cb) { - GGML_METAL_LOG_INFO("%s: allocating\n", __func__); - -#if TARGET_OS_OSX && !GGML_METAL_NDEBUG - // Show all the Metal device instances in the system - NSArray * devices = MTLCopyAllDevices(); - for (id device in devices) { - GGML_METAL_LOG_INFO("%s: found device: %s\n", __func__, [[device name] UTF8String]); - } - [devices release]; // since it was created by a *Copy* C method -#endif - - // Pick and show default Metal device - id device = MTLCreateSystemDefaultDevice(); - GGML_METAL_LOG_INFO("%s: picking default device: %s\n", __func__, [[device name] UTF8String]); - - // Configure context - struct ggml_metal_context * ctx = malloc(sizeof(struct ggml_metal_context)); - ctx->device = device; - ctx->n_cb = MIN(n_cb, GGML_METAL_MAX_BUFFERS); - ctx->queue = [ctx->device newCommandQueue]; - ctx->d_queue = dispatch_queue_create("ggml-metal", DISPATCH_QUEUE_CONCURRENT); - - id metal_library; - - // load library - // - // - first check if the library is embedded - // - then check if the library is in the bundle - // - if not found, load the source and compile it - // - if that fails, return NULL - { - NSBundle * bundle = nil; -#ifdef SWIFT_PACKAGE - bundle = SWIFTPM_MODULE_BUNDLE; -#else - bundle = [NSBundle bundleForClass:[GGMLMetalClass class]]; -#endif - - NSError * error = nil; - -#if GGML_METAL_EMBED_LIBRARY - const bool try_metallib = false; -#else - const bool try_metallib = true; -#endif - - NSString * path_lib = [bundle pathForResource:@"default" ofType:@"metallib"]; - if (try_metallib && path_lib != nil) { - // pre-compiled library found - NSURL * libURL = [NSURL fileURLWithPath:path_lib]; - GGML_METAL_LOG_INFO("%s: loading '%s'\n", __func__, [path_lib UTF8String]); - - metal_library = [ctx->device newLibraryWithURL:libURL error:&error]; - if (error) { - GGML_METAL_LOG_ERROR("%s: error: %s\n", __func__, [[error description] UTF8String]); - return NULL; - } - } else { -#if GGML_METAL_EMBED_LIBRARY - GGML_METAL_LOG_INFO("%s: using embedded metal library\n", __func__); - - extern const char ggml_metallib_start[]; - extern const char ggml_metallib_end[]; - - NSString * src = [[NSString alloc] initWithBytes:ggml_metallib_start length:(ggml_metallib_end-ggml_metallib_start) encoding:NSUTF8StringEncoding]; -#else - GGML_METAL_LOG_INFO("%s: default.metallib not found, loading from source\n", __func__); - - NSString * path_source; - NSString * path_resource = [[NSProcessInfo processInfo].environment objectForKey:@"GGML_METAL_PATH_RESOURCES"]; - - GGML_METAL_LOG_INFO("%s: GGML_METAL_PATH_RESOURCES = %s\n", __func__, path_resource ? [path_resource UTF8String] : "nil"); - - if (path_resource) { - path_source = [path_resource stringByAppendingPathComponent:@"ggml-metal.metal"]; - } else { - path_source = [bundle pathForResource:@"ggml-metal" ofType:@"metal"]; - } - - if (path_source == nil) { - GGML_METAL_LOG_WARN("%s: error: could not use bundle path to find ggml-metal.metal, falling back to trying cwd\n", __func__); - path_source = @"ggml-metal.metal"; - } - - GGML_METAL_LOG_INFO("%s: loading '%s'\n", __func__, [path_source UTF8String]); - - NSString * src = [NSString stringWithContentsOfFile:path_source encoding:NSUTF8StringEncoding error:&error]; - if (error) { - GGML_METAL_LOG_ERROR("%s: error: %s\n", __func__, [[error description] UTF8String]); - return NULL; - } -#endif // GGML_METAL_EMBED_LIBRARY - - @autoreleasepool { - // dictionary of preprocessor macros - NSMutableDictionary * prep = [NSMutableDictionary dictionary]; - -#ifdef GGML_QKK_64 - prep[@"GGML_QKK_64"] = @(1); -#endif - - MTLCompileOptions* options = [MTLCompileOptions new]; - options.preprocessorMacros = prep; - - //[options setFastMathEnabled:false]; - - metal_library = [ctx->device newLibraryWithSource:src options:options error:&error]; - if (error) { - GGML_METAL_LOG_ERROR("%s: error: %s\n", __func__, [[error description] UTF8String]); - return NULL; - } - } - } - } - - // print MTL GPU family: - GGML_METAL_LOG_INFO("%s: GPU name: %s\n", __func__, [[ctx->device name] UTF8String]); - - const NSInteger MTLGPUFamilyMetal3 = 5001; - - // determine max supported GPU family - // https://developer.apple.com/metal/Metal-Shading-Language-Specification.pdf - // https://developer.apple.com/metal/Metal-Feature-Set-Tables.pdf - { - for (int i = MTLGPUFamilyApple1 + 20; i >= MTLGPUFamilyApple1; --i) { - if ([ctx->device supportsFamily:i]) { - GGML_METAL_LOG_INFO("%s: GPU family: MTLGPUFamilyApple%d (%d)\n", __func__, i - (int) MTLGPUFamilyApple1 + 1, i); - break; - } - } - - for (int i = MTLGPUFamilyCommon1 + 5; i >= MTLGPUFamilyCommon1; --i) { - if ([ctx->device supportsFamily:i]) { - GGML_METAL_LOG_INFO("%s: GPU family: MTLGPUFamilyCommon%d (%d)\n", __func__, i - (int) MTLGPUFamilyCommon1 + 1, i); - break; - } - } - - for (int i = MTLGPUFamilyMetal3 + 5; i >= MTLGPUFamilyMetal3; --i) { - if ([ctx->device supportsFamily:i]) { - GGML_METAL_LOG_INFO("%s: GPU family: MTLGPUFamilyMetal%d (%d)\n", __func__, i - (int) MTLGPUFamilyMetal3 + 3, i); - break; - } - } - } - - ctx->support_simdgroup_reduction = [ctx->device supportsFamily:MTLGPUFamilyApple7]; - ctx->support_simdgroup_reduction |= [ctx->device supportsFamily:MTLGPUFamilyMetal3]; - - ctx->support_simdgroup_mm = [ctx->device supportsFamily:MTLGPUFamilyApple7]; - - GGML_METAL_LOG_INFO("%s: simdgroup reduction support = %s\n", __func__, ctx->support_simdgroup_reduction ? "true" : "false"); - GGML_METAL_LOG_INFO("%s: simdgroup matrix mul. support = %s\n", __func__, ctx->support_simdgroup_mm ? "true" : "false"); - GGML_METAL_LOG_INFO("%s: hasUnifiedMemory = %s\n", __func__, ctx->device.hasUnifiedMemory ? "true" : "false"); - - ctx->should_capture_next_compute = false; - -#if TARGET_OS_OSX || (TARGET_OS_IOS && __clang_major__ >= 15) - if (@available(macOS 10.12, iOS 16.0, *)) { - GGML_METAL_LOG_INFO("%s: recommendedMaxWorkingSetSize = %8.2f MB\n", __func__, ctx->device.recommendedMaxWorkingSetSize / 1e6); - } -#elif TARGET_OS_OSX - if (ctx->device.maxTransferRate != 0) { - GGML_METAL_LOG_INFO("%s: maxTransferRate = %8.2f MB/s\n", __func__, ctx->device.maxTransferRate / 1e6); - } else { - GGML_METAL_LOG_INFO("%s: maxTransferRate = built-in GPU\n", __func__); - } -#endif - - // load kernels - { - NSError * error = nil; - - for (int i = 0; i < GGML_METAL_KERNEL_TYPE_COUNT; ++i) { - ctx->kernels[i].pipeline = nil; - } - - /* - GGML_METAL_LOG_INFO("%s: loaded %-32s %16p | th_max = %4d | th_width = %4d\n", __func__, "kernel_"#name, (void *) kernel->pipeline, \ - (int) kernel->pipeline.maxTotalThreadsPerThreadgroup, \ - (int) kernel->pipeline.threadExecutionWidth); \ - */ -#define GGML_METAL_ADD_KERNEL(e, name, supported) \ - if (supported) { \ - struct ggml_metal_kernel * kernel = &ctx->kernels[e]; \ - id metal_function = [metal_library newFunctionWithName:@"kernel_"#name]; \ - kernel->pipeline = [ctx->device newComputePipelineStateWithFunction:metal_function error:&error]; \ - [metal_function release]; \ - if (error) { \ - GGML_METAL_LOG_ERROR("%s: error: load pipeline error: %s\n", __func__, [[error description] UTF8String]); \ - [metal_library release]; \ - return NULL; \ - } \ - } else { \ - GGML_METAL_LOG_WARN("%s: skipping %-32s (not supported)\n", __func__, "kernel_"#name); \ - } - - // simd_sum and simd_max requires MTLGPUFamilyApple7 - - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_ADD, add, true); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_ADD_ROW, add_row, true); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL, mul, true); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_ROW, mul_row, true); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_DIV, div, true); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_DIV_ROW, div_row, true); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_SCALE, scale, true); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_SCALE_4, scale_4, true); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_CLAMP, clamp, true); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_TANH, tanh, true); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_RELU, relu, true); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_GELU, gelu, true); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_GELU_4, gelu_4, true); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_GELU_QUICK, gelu_quick, true); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_GELU_QUICK_4, gelu_quick_4, true); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_SILU, silu, true); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_SILU_4, silu_4, true); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_SOFT_MAX, soft_max, ctx->support_simdgroup_reduction); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_SOFT_MAX_4, soft_max_4, ctx->support_simdgroup_reduction); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_DIAG_MASK_INF, diag_mask_inf, true); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_DIAG_MASK_INF_8, diag_mask_inf_8, true); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_GET_ROWS_F32, get_rows_f32, true); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_GET_ROWS_F16, get_rows_f16, true); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_GET_ROWS_Q4_0, get_rows_q4_0, true); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_GET_ROWS_Q4_1, get_rows_q4_1, true); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_GET_ROWS_Q5_0, get_rows_q5_0, true); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_GET_ROWS_Q5_1, get_rows_q5_1, true); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_GET_ROWS_Q8_0, get_rows_q8_0, true); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_GET_ROWS_Q2_K, get_rows_q2_K, true); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_GET_ROWS_Q3_K, get_rows_q3_K, true); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_GET_ROWS_Q4_K, get_rows_q4_K, true); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_GET_ROWS_Q5_K, get_rows_q5_K, true); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_GET_ROWS_Q6_K, get_rows_q6_K, true); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_GET_ROWS_IQ2_XXS, get_rows_iq2_xxs, true); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_GET_ROWS_IQ2_XS, get_rows_iq2_xs, true); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_GET_ROWS_IQ3_XXS, get_rows_iq3_xxs, true); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_GET_ROWS_IQ3_S, get_rows_iq3_s, true); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_GET_ROWS_IQ2_S, get_rows_iq2_s, true); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_GET_ROWS_IQ1_S, get_rows_iq1_s, true); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_GET_ROWS_IQ1_M, get_rows_iq1_m, true); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_GET_ROWS_IQ4_NL, get_rows_iq4_nl, true); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_GET_ROWS_IQ4_XS, get_rows_iq4_xs, true); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_GET_ROWS_I32, get_rows_i32, true); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_RMS_NORM, rms_norm, ctx->support_simdgroup_reduction); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_GROUP_NORM, group_norm, ctx->support_simdgroup_reduction); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_NORM, norm, true); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_F32_F32, mul_mv_f32_f32, ctx->support_simdgroup_reduction); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_F16_F16, mul_mv_f16_f16, ctx->support_simdgroup_reduction); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_F16_F32, mul_mv_f16_f32, ctx->support_simdgroup_reduction); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_F16_F32_1ROW, mul_mv_f16_f32_1row, ctx->support_simdgroup_reduction); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_F16_F32_L4, mul_mv_f16_f32_l4, ctx->support_simdgroup_reduction); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_Q4_0_F32, mul_mv_q4_0_f32, ctx->support_simdgroup_reduction); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_Q4_1_F32, mul_mv_q4_1_f32, ctx->support_simdgroup_reduction); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_Q5_0_F32, mul_mv_q5_0_f32, ctx->support_simdgroup_reduction); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_Q5_1_F32, mul_mv_q5_1_f32, ctx->support_simdgroup_reduction); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_Q8_0_F32, mul_mv_q8_0_f32, ctx->support_simdgroup_reduction); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_Q2_K_F32, mul_mv_q2_K_f32, ctx->support_simdgroup_reduction); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_Q3_K_F32, mul_mv_q3_K_f32, ctx->support_simdgroup_reduction); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_Q4_K_F32, mul_mv_q4_K_f32, ctx->support_simdgroup_reduction); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_Q5_K_F32, mul_mv_q5_K_f32, ctx->support_simdgroup_reduction); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_Q6_K_F32, mul_mv_q6_K_f32, ctx->support_simdgroup_reduction); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_IQ2_XXS_F32, mul_mv_iq2_xxs_f32, ctx->support_simdgroup_reduction); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_IQ2_XS_F32, mul_mv_iq2_xs_f32, ctx->support_simdgroup_reduction); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_IQ3_XXS_F32, mul_mv_iq3_xxs_f32, ctx->support_simdgroup_reduction); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_IQ3_S_F32, mul_mv_iq3_s_f32, ctx->support_simdgroup_reduction); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_IQ2_S_F32, mul_mv_iq2_s_f32, ctx->support_simdgroup_reduction); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_IQ1_S_F32, mul_mv_iq1_s_f32, ctx->support_simdgroup_reduction); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_IQ1_M_F32, mul_mv_iq1_m_f32, ctx->support_simdgroup_reduction); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_IQ4_NL_F32, mul_mv_iq4_nl_f32, ctx->support_simdgroup_reduction); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_IQ4_XS_F32, mul_mv_iq4_xs_f32, ctx->support_simdgroup_reduction); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_ID_F32_F32, mul_mv_id_f32_f32, ctx->support_simdgroup_reduction); - //GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_ID_F16_F16, mul_mv_id_f16_f16, ctx->support_simdgroup_reduction); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_ID_F16_F32, mul_mv_id_f16_f32, ctx->support_simdgroup_reduction); - //GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_ID_F16_F32_1ROW, mul_mv_id_f16_f32_1row, ctx->support_simdgroup_reduction); - //GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_ID_F16_F32_L4, mul_mv_id_f16_f32_l4, ctx->support_simdgroup_reduction); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_ID_Q4_0_F32, mul_mv_id_q4_0_f32, ctx->support_simdgroup_reduction); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_ID_Q4_1_F32, mul_mv_id_q4_1_f32, ctx->support_simdgroup_reduction); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_ID_Q5_0_F32, mul_mv_id_q5_0_f32, ctx->support_simdgroup_reduction); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_ID_Q5_1_F32, mul_mv_id_q5_1_f32, ctx->support_simdgroup_reduction); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_ID_Q8_0_F32, mul_mv_id_q8_0_f32, ctx->support_simdgroup_reduction); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_ID_Q2_K_F32, mul_mv_id_q2_K_f32, ctx->support_simdgroup_reduction); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_ID_Q3_K_F32, mul_mv_id_q3_K_f32, ctx->support_simdgroup_reduction); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_ID_Q4_K_F32, mul_mv_id_q4_K_f32, ctx->support_simdgroup_reduction); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_ID_Q5_K_F32, mul_mv_id_q5_K_f32, ctx->support_simdgroup_reduction); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_ID_Q6_K_F32, mul_mv_id_q6_K_f32, ctx->support_simdgroup_reduction); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_ID_IQ2_XXS_F32, mul_mv_id_iq2_xxs_f32, ctx->support_simdgroup_reduction); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_ID_IQ2_XS_F32, mul_mv_id_iq2_xs_f32, ctx->support_simdgroup_reduction); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_ID_IQ3_XXS_F32, mul_mv_id_iq3_xxs_f32, ctx->support_simdgroup_reduction); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_ID_IQ3_S_F32, mul_mv_id_iq3_s_f32, ctx->support_simdgroup_reduction); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_ID_IQ2_S_F32, mul_mv_id_iq2_s_f32, ctx->support_simdgroup_reduction); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_ID_IQ1_S_F32, mul_mv_id_iq1_s_f32, ctx->support_simdgroup_reduction); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_ID_IQ1_M_F32, mul_mv_id_iq1_m_f32, ctx->support_simdgroup_reduction); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_ID_IQ4_NL_F32, mul_mv_id_iq4_nl_f32, ctx->support_simdgroup_reduction); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_ID_IQ4_XS_F32, mul_mv_id_iq4_xs_f32, ctx->support_simdgroup_reduction); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_F32_F32, mul_mm_f32_f32, ctx->support_simdgroup_mm); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_F16_F32, mul_mm_f16_f32, ctx->support_simdgroup_mm); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_Q4_0_F32, mul_mm_q4_0_f32, ctx->support_simdgroup_mm); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_Q4_1_F32, mul_mm_q4_1_f32, ctx->support_simdgroup_mm); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_Q5_0_F32, mul_mm_q5_0_f32, ctx->support_simdgroup_mm); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_Q5_1_F32, mul_mm_q5_1_f32, ctx->support_simdgroup_mm); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_Q8_0_F32, mul_mm_q8_0_f32, ctx->support_simdgroup_mm); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_Q2_K_F32, mul_mm_q2_K_f32, ctx->support_simdgroup_mm); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_Q3_K_F32, mul_mm_q3_K_f32, ctx->support_simdgroup_mm); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_Q4_K_F32, mul_mm_q4_K_f32, ctx->support_simdgroup_mm); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_Q5_K_F32, mul_mm_q5_K_f32, ctx->support_simdgroup_mm); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_Q6_K_F32, mul_mm_q6_K_f32, ctx->support_simdgroup_mm); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_IQ2_XXS_F32, mul_mm_iq2_xxs_f32, ctx->support_simdgroup_mm); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_IQ2_XS_F32, mul_mm_iq2_xs_f32, ctx->support_simdgroup_mm); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_IQ3_XXS_F32, mul_mm_iq3_xxs_f32, ctx->support_simdgroup_mm); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_IQ3_S_F32, mul_mm_iq3_s_f32, ctx->support_simdgroup_mm); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_IQ2_S_F32, mul_mm_iq2_s_f32, ctx->support_simdgroup_mm); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_IQ1_S_F32, mul_mm_iq1_s_f32, ctx->support_simdgroup_mm); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_IQ1_M_F32, mul_mm_iq1_m_f32, ctx->support_simdgroup_mm); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_IQ4_NL_F32, mul_mm_iq4_nl_f32, ctx->support_simdgroup_mm); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_IQ4_XS_F32, mul_mm_iq4_xs_f32, ctx->support_simdgroup_mm); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_ID_F32_F32, mul_mm_id_f32_f32, ctx->support_simdgroup_mm); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_ID_F16_F32, mul_mm_id_f16_f32, ctx->support_simdgroup_mm); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_ID_Q4_0_F32, mul_mm_id_q4_0_f32, ctx->support_simdgroup_mm); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_ID_Q4_1_F32, mul_mm_id_q4_1_f32, ctx->support_simdgroup_mm); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_ID_Q5_0_F32, mul_mm_id_q5_0_f32, ctx->support_simdgroup_mm); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_ID_Q5_1_F32, mul_mm_id_q5_1_f32, ctx->support_simdgroup_mm); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_ID_Q8_0_F32, mul_mm_id_q8_0_f32, ctx->support_simdgroup_mm); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_ID_Q2_K_F32, mul_mm_id_q2_K_f32, ctx->support_simdgroup_mm); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_ID_Q3_K_F32, mul_mm_id_q3_K_f32, ctx->support_simdgroup_mm); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_ID_Q4_K_F32, mul_mm_id_q4_K_f32, ctx->support_simdgroup_mm); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_ID_Q5_K_F32, mul_mm_id_q5_K_f32, ctx->support_simdgroup_mm); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_ID_Q6_K_F32, mul_mm_id_q6_K_f32, ctx->support_simdgroup_mm); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_ID_IQ2_XXS_F32, mul_mm_id_iq2_xxs_f32, ctx->support_simdgroup_mm); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_ID_IQ2_XS_F32, mul_mm_id_iq2_xs_f32, ctx->support_simdgroup_mm); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_ID_IQ3_XXS_F32, mul_mm_id_iq3_xxs_f32, ctx->support_simdgroup_mm); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_ID_IQ3_S_F32, mul_mm_id_iq3_s_f32, ctx->support_simdgroup_mm); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_ID_IQ2_S_F32, mul_mm_id_iq2_s_f32, ctx->support_simdgroup_mm); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_ID_IQ1_S_F32, mul_mm_id_iq1_s_f32, ctx->support_simdgroup_mm); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_ID_IQ1_M_F32, mul_mm_id_iq1_m_f32, ctx->support_simdgroup_mm); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_ID_IQ4_NL_F32, mul_mm_id_iq4_nl_f32, ctx->support_simdgroup_mm); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_ID_IQ4_XS_F32, mul_mm_id_iq4_xs_f32, ctx->support_simdgroup_mm); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_ROPE_F32, rope_f32, true); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_ROPE_F16, rope_f16, true); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_ALIBI_F32, alibi_f32, true); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_IM2COL_F16, im2col_f16, true); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_IM2COL_F32, im2col_f32, true); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_UPSCALE_F32, upscale_f32, true); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_PAD_F32, pad_f32, true); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_TIMESTEP_EMBEDDING_F32, timestep_embedding_f32, true); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_ARANGE_F32, arange_f32, true); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_ARGSORT_F32_I32_ASC, argsort_f32_i32_asc, true); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_ARGSORT_F32_I32_DESC, argsort_f32_i32_desc, true); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_LEAKY_RELU_F32, leaky_relu_f32, true); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_CPY_F32_F16, cpy_f32_f16, true); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_CPY_F32_F32, cpy_f32_f32, true); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_CPY_F32_Q8_0, cpy_f32_q8_0, true); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_CPY_F32_Q4_0, cpy_f32_q4_0, true); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_CPY_F32_Q4_1, cpy_f32_q4_1, true); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_CPY_F32_Q5_0, cpy_f32_q5_0, true); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_CPY_F32_Q5_1, cpy_f32_q5_1, true); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_CPY_F32_IQ4_NL, cpy_f32_iq4_nl, true); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_CPY_F16_F16, cpy_f16_f16, true); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_CPY_F16_F32, cpy_f16_f32, true); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_CONCAT, concat, true); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_SQR, sqr, true); - GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_SUM_ROWS, sum_rows, true); - } - - [metal_library release]; - return ctx; -} - -static void ggml_metal_free(struct ggml_metal_context * ctx) { - GGML_METAL_LOG_INFO("%s: deallocating\n", __func__); - - for (int i = 0; i < GGML_METAL_KERNEL_TYPE_COUNT; ++i) { - [ctx->kernels[i].pipeline release]; - } - - [ctx->queue release]; - [ctx->device release]; - - dispatch_release(ctx->d_queue); - - free(ctx); -} - -// temporarily defined here for compatibility between ggml-backend and the old API - -struct ggml_backend_metal_buffer { - void * data; - size_t size; - - id metal; -}; - -struct ggml_backend_metal_buffer_context { - void * all_data; - size_t all_size; - bool owned; - - // multiple buffers are used only to avoid the maximum buffer size limitation when using mmap - int n_buffers; - struct ggml_backend_metal_buffer buffers[GGML_METAL_MAX_BUFFERS]; -}; - -// finds the Metal buffer that contains the tensor data on the GPU device -// the assumption is that there is 1-to-1 mapping between the host and device memory buffers, so we can find the -// Metal buffer based on the host memory pointer -// -static id ggml_metal_get_buffer(struct ggml_tensor * t, size_t * offs) { - //GGML_METAL_LOG_INFO("%s: data tensor '%16s', offs_data = %8ld, offs_eval = %8ld, offs_cach = %8ld\n", __func__, t->name, offs_data, offs_eval, offs_cach); - - const int64_t tsize = ggml_nbytes(t); - - ggml_backend_buffer_t buffer = t->view_src ? t->view_src->buffer : t->buffer; - - struct ggml_backend_metal_buffer_context * buf_ctx = (struct ggml_backend_metal_buffer_context *) buffer->context; - - // find the view that contains the tensor fully - for (int i = 0; i < buf_ctx->n_buffers; ++i) { - const int64_t ioffs = (int64_t) t->data - (int64_t) buf_ctx->buffers[i].data; - - //GGML_METAL_LOG_INFO("ioffs = %10ld, tsize = %10ld, sum = %10ld, buf_ctx->buffers[%d].size = %10ld\n", ioffs, tsize, ioffs + tsize, i, buf_ctx->buffers[i].size); - if (ioffs >= 0 && ioffs + tsize <= (int64_t) buf_ctx->buffers[i].size) { - *offs = (size_t) ioffs; - - //GGML_METAL_LOG_INFO("%s: tensor '%16s', offs = %8ld\n", __func__, t->name, *offs); - - return buf_ctx->buffers[i].metal; - } - } - - GGML_METAL_LOG_ERROR("%s: error: tensor '%s' buffer is nil\n", __func__, t->name); - - return nil; -} - -static bool ggml_metal_supports_op(const struct ggml_metal_context * ctx, const struct ggml_tensor * op) { - switch (op->op) { - case GGML_OP_UNARY: - switch (ggml_get_unary_op(op)) { - case GGML_UNARY_OP_TANH: - case GGML_UNARY_OP_RELU: - case GGML_UNARY_OP_GELU: - case GGML_UNARY_OP_GELU_QUICK: - case GGML_UNARY_OP_SILU: - return true; - default: - return false; - } - case GGML_OP_NONE: - case GGML_OP_RESHAPE: - case GGML_OP_VIEW: - case GGML_OP_TRANSPOSE: - case GGML_OP_PERMUTE: - case GGML_OP_CONCAT: - case GGML_OP_ADD: - case GGML_OP_ACC: - case GGML_OP_MUL: - case GGML_OP_DIV: - case GGML_OP_SCALE: - case GGML_OP_CLAMP: - case GGML_OP_SQR: - case GGML_OP_SUM_ROWS: - return true; - case GGML_OP_SOFT_MAX: - case GGML_OP_RMS_NORM: - case GGML_OP_GROUP_NORM: - return ctx->support_simdgroup_reduction; - case GGML_OP_NORM: - case GGML_OP_ALIBI: - case GGML_OP_ROPE: - case GGML_OP_IM2COL: - return true; - case GGML_OP_POOL_1D: - case GGML_OP_POOL_2D: - return false; - case GGML_OP_UPSCALE: - case GGML_OP_PAD: - case GGML_OP_ARANGE: - case GGML_OP_TIMESTEP_EMBEDDING: - case GGML_OP_ARGSORT: - case GGML_OP_LEAKY_RELU: - return true; - case GGML_OP_MUL_MAT: - case GGML_OP_MUL_MAT_ID: - return ctx->support_simdgroup_reduction && - (op->src[0]->type != GGML_TYPE_F32 || op->src[1]->type == GGML_TYPE_F32); - case GGML_OP_CPY: - case GGML_OP_DUP: - case GGML_OP_CONT: - { - switch (op->src[0]->type) { - case GGML_TYPE_F32: - switch (op->type) { - case GGML_TYPE_F16: - case GGML_TYPE_F32: - case GGML_TYPE_Q8_0: - case GGML_TYPE_Q4_0: - case GGML_TYPE_Q4_1: - case GGML_TYPE_Q5_0: - case GGML_TYPE_Q5_1: - case GGML_TYPE_IQ4_NL: - return true; - default: - return false; - } - case GGML_TYPE_F16: - switch (op->type) { - case GGML_TYPE_F16: - case GGML_TYPE_F32: - return true; - default: - return false; - } - default: - return false; - }; - } - case GGML_OP_DIAG_MASK_INF: - case GGML_OP_GET_ROWS: - { - return op->ne[3] == 1; - } - default: - return false; - } -} - -static enum ggml_status ggml_metal_graph_compute( - struct ggml_metal_context * ctx, - struct ggml_cgraph * gf) { - - @autoreleasepool { - MTLComputePassDescriptor * edesc = MTLComputePassDescriptor.computePassDescriptor; - edesc.dispatchType = MTLDispatchTypeSerial; - - // create multiple command buffers and enqueue them - // then, we encode the graph into the command buffers in parallel - - const int n_nodes = gf->n_nodes; - const int n_cb = ctx->n_cb; - const int n_nodes_per_cb = (n_nodes + n_cb - 1) / n_cb; - - const bool should_capture = ctx->should_capture_next_compute; - if (should_capture) { - ctx->should_capture_next_compute = false; - - MTLCaptureDescriptor * descriptor = [MTLCaptureDescriptor new]; - descriptor.captureObject = ctx->queue; - - NSError * error = nil; - if (![[MTLCaptureManager sharedCaptureManager] startCaptureWithDescriptor:descriptor error:&error]) { - GGML_METAL_LOG_ERROR("%s: error: unable to start capture '%s'\n", __func__, [[error localizedDescription] UTF8String]); - GGML_ASSERT(!"capture failed"); - } - } - - id command_buffer_builder[n_cb]; - for (int cb_idx = 0; cb_idx < n_cb; ++cb_idx) { - id command_buffer = [ctx->queue commandBufferWithUnretainedReferences]; - command_buffer_builder[cb_idx] = command_buffer; - - // enqueue the command buffers in order to specify their execution order - [command_buffer enqueue]; - } - - const id *command_buffers = command_buffer_builder; - - dispatch_apply(n_cb, ctx->d_queue, ^(size_t iter) { - const int cb_idx = iter; - - size_t offs_src0 = 0; - size_t offs_src1 = 0; - size_t offs_src2 = 0; - size_t offs_dst = 0; - - id command_buffer = command_buffers[cb_idx]; - id encoder = [command_buffer computeCommandEncoderWithDescriptor: edesc]; - - const int node_start = (cb_idx + 0) * n_nodes_per_cb; - const int node_end = MIN((cb_idx == n_cb - 1) ? n_nodes : (cb_idx + 1) * n_nodes_per_cb, n_nodes); - - for (int i = node_start; i < node_end; ++i) { - if (i == -1) { - [encoder memoryBarrierWithScope:MTLBarrierScopeBuffers]; - continue; - } - - //GGML_METAL_LOG_INFO("%s: encoding node %3d, op = %8s\n", __func__, i, ggml_op_name(gf->nodes[i]->op)); - - struct ggml_tensor * src0 = gf->nodes[i]->src[0]; - struct ggml_tensor * src1 = gf->nodes[i]->src[1]; - struct ggml_tensor * src2 = gf->nodes[i]->src[2]; - struct ggml_tensor * dst = gf->nodes[i]; - - if (ggml_is_empty(dst)) { - continue; - } - - switch (dst->op) { - case GGML_OP_NONE: - case GGML_OP_RESHAPE: - case GGML_OP_VIEW: - case GGML_OP_TRANSPOSE: - case GGML_OP_PERMUTE: - { - // noop -> next node - } continue; - default: - { - } break; - } - - if (!ggml_metal_supports_op(ctx, dst)) { - GGML_METAL_LOG_ERROR("%s: error: unsupported op '%s'\n", __func__, ggml_op_desc(dst)); - GGML_ASSERT(!"unsupported op"); - } - - if (should_capture) { - [encoder pushDebugGroup:[NSString stringWithCString:ggml_op_desc(dst) encoding:NSUTF8StringEncoding]]; - } - - const int64_t ne00 = src0 ? src0->ne[0] : 0; - const int64_t ne01 = src0 ? src0->ne[1] : 0; - const int64_t ne02 = src0 ? src0->ne[2] : 0; - const int64_t ne03 = src0 ? src0->ne[3] : 0; - - const uint64_t nb00 = src0 ? src0->nb[0] : 0; - const uint64_t nb01 = src0 ? src0->nb[1] : 0; - const uint64_t nb02 = src0 ? src0->nb[2] : 0; - const uint64_t nb03 = src0 ? src0->nb[3] : 0; - - const int64_t ne10 = src1 ? src1->ne[0] : 0; - const int64_t ne11 = src1 ? src1->ne[1] : 0; - const int64_t ne12 = src1 ? src1->ne[2] : 0; - const int64_t ne13 = src1 ? src1->ne[3] : 0; UNUSED(ne13); - - const uint64_t nb10 = src1 ? src1->nb[0] : 0; - const uint64_t nb11 = src1 ? src1->nb[1] : 0; - const uint64_t nb12 = src1 ? src1->nb[2] : 0; - const uint64_t nb13 = src1 ? src1->nb[3] : 0; UNUSED(nb13); - - const int64_t ne0 = dst ? dst->ne[0] : 0; - const int64_t ne1 = dst ? dst->ne[1] : 0; - const int64_t ne2 = dst ? dst->ne[2] : 0; - const int64_t ne3 = dst ? dst->ne[3] : 0; - - const uint64_t nb0 = dst ? dst->nb[0] : 0; - const uint64_t nb1 = dst ? dst->nb[1] : 0; - const uint64_t nb2 = dst ? dst->nb[2] : 0; - const uint64_t nb3 = dst ? dst->nb[3] : 0; - - const enum ggml_type src0t = src0 ? src0->type : GGML_TYPE_COUNT; - const enum ggml_type src1t = src1 ? src1->type : GGML_TYPE_COUNT; - const enum ggml_type dstt = dst ? dst->type : GGML_TYPE_COUNT; - - id id_src0 = src0 ? ggml_metal_get_buffer(src0, &offs_src0) : nil; - id id_src1 = src1 ? ggml_metal_get_buffer(src1, &offs_src1) : nil; - id id_src2 = src2 ? ggml_metal_get_buffer(src2, &offs_src2) : nil; - id id_dst = dst ? ggml_metal_get_buffer(dst, &offs_dst) : nil; - - //GGML_METAL_LOG_INFO("%s: op - %s\n", __func__, ggml_op_name(dst->op)); - //if (src0) { - // GGML_METAL_LOG_INFO("%s: src0 - %4s [%5lld, %5lld, %5lld], %d, %s\n", __func__, ggml_type_name(src0t), ne00, ne01, ne02, - // ggml_is_contiguous(src0), src0->name); - //} - //if (src1) { - // GGML_METAL_LOG_INFO("%s: src1 - %4s [%5lld, %5lld, %5lld], %d, %s\n", __func__, ggml_type_name(src1t), ne10, ne11, ne12, - // ggml_is_contiguous(src1), src1->name); - //} - //if (dst) { - // GGML_METAL_LOG_INFO("%s: dst - %4s [%5lld, %5lld, %5lld], 1, %s\n", __func__, ggml_type_name(dstt), ne0, ne1, ne2, - // dst->name); - //} - - switch (dst->op) { - case GGML_OP_CONCAT: - { - const int64_t nb = ne00; - - id pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_CONCAT].pipeline; - - [encoder setComputePipelineState:pipeline]; - [encoder setBuffer:id_src0 offset:offs_src0 atIndex:0]; - [encoder setBuffer:id_src1 offset:offs_src1 atIndex:1]; - [encoder setBuffer:id_dst offset:offs_dst atIndex:2]; - [encoder setBytes:&ne00 length:sizeof(ne00) atIndex:3]; - [encoder setBytes:&ne01 length:sizeof(ne01) atIndex:4]; - [encoder setBytes:&ne02 length:sizeof(ne02) atIndex:5]; - [encoder setBytes:&ne03 length:sizeof(ne03) atIndex:6]; - [encoder setBytes:&nb00 length:sizeof(nb00) atIndex:7]; - [encoder setBytes:&nb01 length:sizeof(nb01) atIndex:8]; - [encoder setBytes:&nb02 length:sizeof(nb02) atIndex:9]; - [encoder setBytes:&nb03 length:sizeof(nb03) atIndex:10]; - [encoder setBytes:&ne10 length:sizeof(ne10) atIndex:11]; - [encoder setBytes:&ne11 length:sizeof(ne11) atIndex:12]; - [encoder setBytes:&ne12 length:sizeof(ne12) atIndex:13]; - [encoder setBytes:&ne13 length:sizeof(ne13) atIndex:14]; - [encoder setBytes:&nb10 length:sizeof(nb10) atIndex:15]; - [encoder setBytes:&nb11 length:sizeof(nb11) atIndex:16]; - [encoder setBytes:&nb12 length:sizeof(nb12) atIndex:17]; - [encoder setBytes:&nb13 length:sizeof(nb13) atIndex:18]; - [encoder setBytes:&ne0 length:sizeof(ne0) atIndex:19]; - [encoder setBytes:&ne1 length:sizeof(ne1) atIndex:20]; - [encoder setBytes:&ne2 length:sizeof(ne2) atIndex:21]; - [encoder setBytes:&ne3 length:sizeof(ne3) atIndex:22]; - [encoder setBytes:&nb0 length:sizeof(nb0) atIndex:23]; - [encoder setBytes:&nb1 length:sizeof(nb1) atIndex:24]; - [encoder setBytes:&nb2 length:sizeof(nb2) atIndex:25]; - [encoder setBytes:&nb3 length:sizeof(nb3) atIndex:26]; - [encoder setBytes:&nb length:sizeof(nb) atIndex:27]; - - const int nth = MIN(1024, ne0); - - [encoder dispatchThreadgroups:MTLSizeMake(ne1, ne2, ne3) threadsPerThreadgroup:MTLSizeMake(nth, 1, 1)]; - } break; - case GGML_OP_ADD: - case GGML_OP_MUL: - case GGML_OP_DIV: - { - const size_t offs = 0; - - bool bcast_row = false; - - int64_t nb = ne00; - - id pipeline = nil; - - if (ggml_nelements(src1) == ne10 && ggml_is_contiguous(src1) && ne00 % 4 == 0 && ne10 % 4 == 0) { - GGML_ASSERT(ggml_is_contiguous(src0)); - - // src1 is a row - GGML_ASSERT(ne11 == 1); - - nb = ne00 / 4; - switch (dst->op) { - case GGML_OP_ADD: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_ADD_ROW].pipeline; break; - case GGML_OP_MUL: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_ROW].pipeline; break; - case GGML_OP_DIV: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_DIV_ROW].pipeline; break; - default: GGML_ASSERT(false); - } - - bcast_row = true; - } else { - switch (dst->op) { - case GGML_OP_ADD: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_ADD].pipeline; break; - case GGML_OP_MUL: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL].pipeline; break; - case GGML_OP_DIV: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_DIV].pipeline; break; - default: GGML_ASSERT(false); - } - } - - [encoder setComputePipelineState:pipeline]; - [encoder setBuffer:id_src0 offset:offs_src0 atIndex:0]; - [encoder setBuffer:id_src1 offset:offs_src1 atIndex:1]; - [encoder setBuffer:id_dst offset:offs_dst atIndex:2]; - [encoder setBytes:&ne00 length:sizeof(ne00) atIndex:3]; - [encoder setBytes:&ne01 length:sizeof(ne01) atIndex:4]; - [encoder setBytes:&ne02 length:sizeof(ne02) atIndex:5]; - [encoder setBytes:&ne03 length:sizeof(ne03) atIndex:6]; - [encoder setBytes:&nb00 length:sizeof(nb00) atIndex:7]; - [encoder setBytes:&nb01 length:sizeof(nb01) atIndex:8]; - [encoder setBytes:&nb02 length:sizeof(nb02) atIndex:9]; - [encoder setBytes:&nb03 length:sizeof(nb03) atIndex:10]; - [encoder setBytes:&ne10 length:sizeof(ne10) atIndex:11]; - [encoder setBytes:&ne11 length:sizeof(ne11) atIndex:12]; - [encoder setBytes:&ne12 length:sizeof(ne12) atIndex:13]; - [encoder setBytes:&ne13 length:sizeof(ne13) atIndex:14]; - [encoder setBytes:&nb10 length:sizeof(nb10) atIndex:15]; - [encoder setBytes:&nb11 length:sizeof(nb11) atIndex:16]; - [encoder setBytes:&nb12 length:sizeof(nb12) atIndex:17]; - [encoder setBytes:&nb13 length:sizeof(nb13) atIndex:18]; - [encoder setBytes:&ne0 length:sizeof(ne0) atIndex:19]; - [encoder setBytes:&ne1 length:sizeof(ne1) atIndex:20]; - [encoder setBytes:&ne2 length:sizeof(ne2) atIndex:21]; - [encoder setBytes:&ne3 length:sizeof(ne3) atIndex:22]; - [encoder setBytes:&nb0 length:sizeof(nb0) atIndex:23]; - [encoder setBytes:&nb1 length:sizeof(nb1) atIndex:24]; - [encoder setBytes:&nb2 length:sizeof(nb2) atIndex:25]; - [encoder setBytes:&nb3 length:sizeof(nb3) atIndex:26]; - [encoder setBytes:&offs length:sizeof(offs) atIndex:27]; - [encoder setBytes:&nb length:sizeof(nb) atIndex:28]; - - if (bcast_row) { - const int64_t n = ggml_nelements(dst)/4; - - [encoder dispatchThreadgroups:MTLSizeMake(n, 1, 1) threadsPerThreadgroup:MTLSizeMake(1, 1, 1)]; - } else { - const int nth = MIN((int) pipeline.maxTotalThreadsPerThreadgroup, ne0); - - [encoder dispatchThreadgroups:MTLSizeMake(ne01, ne02, ne03) threadsPerThreadgroup:MTLSizeMake(nth, 1, 1)]; - } - } break; - case GGML_OP_ACC: - { - GGML_ASSERT(src0t == GGML_TYPE_F32); - GGML_ASSERT(src1t == GGML_TYPE_F32); - GGML_ASSERT(dstt == GGML_TYPE_F32); - - GGML_ASSERT(ggml_is_contiguous(src0)); - GGML_ASSERT(ggml_is_contiguous(src1)); - - const size_t pnb1 = ((int32_t *) dst->op_params)[0]; - const size_t pnb2 = ((int32_t *) dst->op_params)[1]; - const size_t pnb3 = ((int32_t *) dst->op_params)[2]; - const size_t offs = ((int32_t *) dst->op_params)[3]; - - const bool inplace = (bool) ((int32_t *) dst->op_params)[4]; - - if (!inplace) { - // run a separete kernel to cpy src->dst - // not sure how to avoid this - // TODO: make a simpler cpy_bytes kernel - - const id pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_CPY_F32_F32].pipeline; - - [encoder setComputePipelineState:pipeline]; - [encoder setBuffer:id_src0 offset:offs_src0 atIndex:0]; - [encoder setBuffer:id_dst offset:offs_dst atIndex:1]; - [encoder setBytes:&ne00 length:sizeof( int64_t) atIndex:2]; - [encoder setBytes:&ne01 length:sizeof( int64_t) atIndex:3]; - [encoder setBytes:&ne02 length:sizeof( int64_t) atIndex:4]; - [encoder setBytes:&ne03 length:sizeof( int64_t) atIndex:5]; - [encoder setBytes:&nb00 length:sizeof(uint64_t) atIndex:6]; - [encoder setBytes:&nb01 length:sizeof(uint64_t) atIndex:7]; - [encoder setBytes:&nb02 length:sizeof(uint64_t) atIndex:8]; - [encoder setBytes:&nb03 length:sizeof(uint64_t) atIndex:9]; - [encoder setBytes:&ne0 length:sizeof( int64_t) atIndex:10]; - [encoder setBytes:&ne1 length:sizeof( int64_t) atIndex:11]; - [encoder setBytes:&ne2 length:sizeof( int64_t) atIndex:12]; - [encoder setBytes:&ne3 length:sizeof( int64_t) atIndex:13]; - [encoder setBytes:&nb0 length:sizeof(uint64_t) atIndex:14]; - [encoder setBytes:&nb1 length:sizeof(uint64_t) atIndex:15]; - [encoder setBytes:&nb2 length:sizeof(uint64_t) atIndex:16]; - [encoder setBytes:&nb3 length:sizeof(uint64_t) atIndex:17]; - - const int nth = MIN((int) pipeline.maxTotalThreadsPerThreadgroup, ne00); - - [encoder dispatchThreadgroups:MTLSizeMake(ne01, ne02, ne03) threadsPerThreadgroup:MTLSizeMake(nth, 1, 1)]; - } - - const id pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_ADD].pipeline; - - [encoder setComputePipelineState:pipeline]; - [encoder setBuffer:id_src0 offset:offs_src0 atIndex:0]; - [encoder setBuffer:id_src1 offset:offs_src1 atIndex:1]; - [encoder setBuffer:id_dst offset:offs_dst atIndex:2]; - [encoder setBytes:&ne00 length:sizeof(ne00) atIndex:3]; - [encoder setBytes:&ne01 length:sizeof(ne01) atIndex:4]; - [encoder setBytes:&ne02 length:sizeof(ne02) atIndex:5]; - [encoder setBytes:&ne03 length:sizeof(ne03) atIndex:6]; - [encoder setBytes:&nb00 length:sizeof(nb00) atIndex:7]; - [encoder setBytes:&pnb1 length:sizeof(pnb1) atIndex:8]; - [encoder setBytes:&pnb2 length:sizeof(pnb2) atIndex:9]; - [encoder setBytes:&pnb3 length:sizeof(pnb3) atIndex:10]; - [encoder setBytes:&ne10 length:sizeof(ne10) atIndex:11]; - [encoder setBytes:&ne11 length:sizeof(ne11) atIndex:12]; - [encoder setBytes:&ne12 length:sizeof(ne12) atIndex:13]; - [encoder setBytes:&ne13 length:sizeof(ne13) atIndex:14]; - [encoder setBytes:&nb10 length:sizeof(nb10) atIndex:15]; - [encoder setBytes:&nb11 length:sizeof(nb11) atIndex:16]; - [encoder setBytes:&nb12 length:sizeof(nb12) atIndex:17]; - [encoder setBytes:&nb13 length:sizeof(nb13) atIndex:18]; - [encoder setBytes:&ne0 length:sizeof(ne0) atIndex:19]; - [encoder setBytes:&ne1 length:sizeof(ne1) atIndex:20]; - [encoder setBytes:&ne2 length:sizeof(ne2) atIndex:21]; - [encoder setBytes:&ne3 length:sizeof(ne3) atIndex:22]; - [encoder setBytes:&nb0 length:sizeof(nb0) atIndex:23]; - [encoder setBytes:&pnb1 length:sizeof(pnb1) atIndex:24]; - [encoder setBytes:&pnb2 length:sizeof(pnb2) atIndex:25]; - [encoder setBytes:&pnb3 length:sizeof(pnb3) atIndex:26]; - [encoder setBytes:&offs length:sizeof(offs) atIndex:27]; - - const int nth = MIN((int) pipeline.maxTotalThreadsPerThreadgroup, ne00); - - [encoder dispatchThreadgroups:MTLSizeMake(ne11, ne12, ne13) threadsPerThreadgroup:MTLSizeMake(nth, 1, 1)]; - } break; - case GGML_OP_SCALE: - { - GGML_ASSERT(ggml_is_contiguous(src0)); - - float scale; - memcpy(&scale, dst->op_params, sizeof(scale)); - - int64_t n = ggml_nelements(dst); - - id pipeline = nil; - - if (n % 4 == 0) { - n /= 4; - pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_SCALE_4].pipeline; - } else { - pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_SCALE].pipeline; - } - - [encoder setComputePipelineState:pipeline]; - [encoder setBuffer:id_src0 offset:offs_src0 atIndex:0]; - [encoder setBuffer:id_dst offset:offs_dst atIndex:1]; - [encoder setBytes:&scale length:sizeof(scale) atIndex:2]; - - [encoder dispatchThreadgroups:MTLSizeMake(n, 1, 1) threadsPerThreadgroup:MTLSizeMake(1, 1, 1)]; - } break; - case GGML_OP_CLAMP: - { - id pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_CLAMP].pipeline; - - float min; - float max; - memcpy(&min, ((int32_t *) dst->op_params) + 0, sizeof(float)); - memcpy(&max, ((int32_t *) dst->op_params) + 1, sizeof(float)); - - [encoder setComputePipelineState:pipeline]; - [encoder setBuffer:id_src0 offset:offs_src0 atIndex:0]; - [encoder setBuffer:id_dst offset:offs_dst atIndex:1]; - [encoder setBytes:&min length:sizeof(min) atIndex:2]; - [encoder setBytes:&max length:sizeof(max) atIndex:3]; - - const int64_t n = ggml_nelements(dst); - - [encoder dispatchThreadgroups:MTLSizeMake(n, 1, 1) threadsPerThreadgroup:MTLSizeMake(1, 1, 1)]; - } break; - case GGML_OP_UNARY: - switch (ggml_get_unary_op(gf->nodes[i])) { - // we are not taking into account the strides, so for now require contiguous tensors - GGML_ASSERT(ggml_is_contiguous(src0)); - - case GGML_UNARY_OP_TANH: - { - id pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_TANH].pipeline; - - [encoder setComputePipelineState:pipeline]; - [encoder setBuffer:id_src0 offset:offs_src0 atIndex:0]; - [encoder setBuffer:id_dst offset:offs_dst atIndex:1]; - - const int64_t n = ggml_nelements(dst); - - [encoder dispatchThreadgroups:MTLSizeMake(n, 1, 1) threadsPerThreadgroup:MTLSizeMake(1, 1, 1)]; - } break; - case GGML_UNARY_OP_RELU: - { - id pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_RELU].pipeline; - - [encoder setComputePipelineState:pipeline]; - [encoder setBuffer:id_src0 offset:offs_src0 atIndex:0]; - [encoder setBuffer:id_dst offset:offs_dst atIndex:1]; - - const int64_t n = ggml_nelements(dst); - - [encoder dispatchThreadgroups:MTLSizeMake(n, 1, 1) threadsPerThreadgroup:MTLSizeMake(1, 1, 1)]; - } break; - case GGML_UNARY_OP_GELU: - { - int64_t n = ggml_nelements(dst); - - id pipeline = nil; - - if (n % 4 == 0) { - pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_GELU_4].pipeline; - n /= 4; - } else { - pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_GELU].pipeline; - } - - [encoder setComputePipelineState:pipeline]; - [encoder setBuffer:id_src0 offset:offs_src0 atIndex:0]; - [encoder setBuffer:id_dst offset:offs_dst atIndex:1]; - - [encoder dispatchThreadgroups:MTLSizeMake(n, 1, 1) threadsPerThreadgroup:MTLSizeMake(1, 1, 1)]; - } break; - case GGML_UNARY_OP_GELU_QUICK: - { - int64_t n = ggml_nelements(dst); - - id pipeline = nil; - - if (n % 4 == 0) { - pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_GELU_QUICK_4].pipeline; - n /= 4; - } else { - pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_GELU_QUICK].pipeline; - } - - [encoder setComputePipelineState:pipeline]; - [encoder setBuffer:id_src0 offset:offs_src0 atIndex:0]; - [encoder setBuffer:id_dst offset:offs_dst atIndex:1]; - - [encoder dispatchThreadgroups:MTLSizeMake(n, 1, 1) threadsPerThreadgroup:MTLSizeMake(1, 1, 1)]; - } break; - case GGML_UNARY_OP_SILU: - { - int64_t n = ggml_nelements(dst); - - id pipeline = nil; - - if (n % 4 == 0) { - pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_SILU_4].pipeline; - n /= 4; - } else { - pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_SILU].pipeline; - } - - [encoder setComputePipelineState:pipeline]; - [encoder setBuffer:id_src0 offset:offs_src0 atIndex:0]; - [encoder setBuffer:id_dst offset:offs_dst atIndex:1]; - - [encoder dispatchThreadgroups:MTLSizeMake(n, 1, 1) threadsPerThreadgroup:MTLSizeMake(1, 1, 1)]; - } break; - default: - { - GGML_METAL_LOG_WARN("%s: node %3d, op = %8s not implemented\n", __func__, i, ggml_op_name(dst->op)); - GGML_ASSERT(false); - } - } break; - case GGML_OP_SQR: - { - GGML_ASSERT(ggml_is_contiguous(src0)); - - id pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_SQR].pipeline; - - [encoder setComputePipelineState:pipeline]; - [encoder setBuffer:id_src0 offset:offs_src0 atIndex:0]; - [encoder setBuffer:id_dst offset:offs_dst atIndex:1]; - - const int64_t n = ggml_nelements(dst); - - [encoder dispatchThreadgroups:MTLSizeMake(n, 1, 1) threadsPerThreadgroup:MTLSizeMake(1, 1, 1)]; - } break; - case GGML_OP_SUM_ROWS: - { - GGML_ASSERT(src0->nb[0] == ggml_type_size(src0->type)); - - id pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_SUM_ROWS].pipeline; - - [encoder setComputePipelineState:pipeline]; - [encoder setBuffer:id_src0 offset:offs_src0 atIndex:0]; - [encoder setBuffer:id_dst offset:offs_dst atIndex:1]; - [encoder setBytes:&ne00 length:sizeof(ne00) atIndex:2]; - [encoder setBytes:&ne01 length:sizeof(ne01) atIndex:3]; - [encoder setBytes:&ne02 length:sizeof(ne02) atIndex:4]; - [encoder setBytes:&ne03 length:sizeof(ne03) atIndex:5]; - [encoder setBytes:&nb00 length:sizeof(nb00) atIndex:6]; - [encoder setBytes:&nb01 length:sizeof(nb01) atIndex:7]; - [encoder setBytes:&nb02 length:sizeof(nb02) atIndex:8]; - [encoder setBytes:&nb03 length:sizeof(nb03) atIndex:9]; - [encoder setBytes:&ne10 length:sizeof(ne10) atIndex:10]; - [encoder setBytes:&ne11 length:sizeof(ne11) atIndex:11]; - [encoder setBytes:&ne12 length:sizeof(ne12) atIndex:12]; - [encoder setBytes:&ne13 length:sizeof(ne13) atIndex:13]; - [encoder setBytes:&nb10 length:sizeof(nb10) atIndex:14]; - [encoder setBytes:&nb11 length:sizeof(nb11) atIndex:15]; - [encoder setBytes:&nb12 length:sizeof(nb12) atIndex:16]; - [encoder setBytes:&nb13 length:sizeof(nb13) atIndex:17]; - [encoder setBytes:&ne0 length:sizeof(ne0) atIndex:18]; - [encoder setBytes:&ne1 length:sizeof(ne1) atIndex:19]; - [encoder setBytes:&ne2 length:sizeof(ne2) atIndex:20]; - [encoder setBytes:&ne3 length:sizeof(ne3) atIndex:21]; - [encoder setBytes:&nb0 length:sizeof(nb0) atIndex:22]; - [encoder setBytes:&nb1 length:sizeof(nb1) atIndex:23]; - [encoder setBytes:&nb2 length:sizeof(nb2) atIndex:24]; - [encoder setBytes:&nb3 length:sizeof(nb3) atIndex:25]; - - [encoder dispatchThreadgroups:MTLSizeMake(ne01, ne02, ne03) threadsPerThreadgroup:MTLSizeMake(1, 1, 1)]; - } break; - case GGML_OP_SOFT_MAX: - { - int nth = 32; // SIMD width - - id pipeline = nil; - - if (ne00%4 == 0) { - while (nth < ne00/4 && nth < 256) { - nth *= 2; - } - pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_SOFT_MAX_4].pipeline; - } else { - while (nth < ne00 && nth < 1024) { - nth *= 2; - } - pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_SOFT_MAX].pipeline; - } - - float scale; - float max_bias; - - memcpy(&scale, ((int32_t *) dst->op_params) + 0, sizeof(scale)); - memcpy(&max_bias, ((int32_t *) dst->op_params) + 1, sizeof(max_bias)); - - const int64_t nrows_x = ggml_nrows(src0); - const int64_t nrows_y = src0->ne[1]; - - const uint32_t n_head_kv = nrows_x/nrows_y; - const uint32_t n_head_log2 = 1u << (uint32_t) floorf(log2f((float) n_head_kv)); - - const float m0 = powf(2.0f, -(max_bias ) / n_head_log2); - const float m1 = powf(2.0f, -(max_bias / 2.0f) / n_head_log2); - - [encoder setComputePipelineState:pipeline]; - [encoder setBuffer:id_src0 offset:offs_src0 atIndex:0]; - if (id_src1) { - [encoder setBuffer:id_src1 offset:offs_src1 atIndex:1]; - } else { - [encoder setBuffer:id_src0 offset:offs_src0 atIndex:1]; - } - if (id_src2) { - [encoder setBuffer:id_src2 offset:offs_src2 atIndex:2]; - } else { - [encoder setBuffer:id_src0 offset:offs_src0 atIndex:2]; - } - [encoder setBuffer:id_dst offset:offs_dst atIndex:3]; - [encoder setBytes:&ne00 length:sizeof(ne00) atIndex:4]; - [encoder setBytes:&ne01 length:sizeof(ne01) atIndex:5]; - [encoder setBytes:&ne02 length:sizeof(ne02) atIndex:6]; - [encoder setBytes:&scale length:sizeof(scale) atIndex:7]; - [encoder setBytes:&max_bias length:sizeof(max_bias) atIndex:8]; - [encoder setBytes:&m0 length:sizeof(m0) atIndex:9]; - [encoder setBytes:&m1 length:sizeof(m1) atIndex:10]; - [encoder setBytes:&n_head_log2 length:sizeof(n_head_log2) atIndex:11]; - [encoder setThreadgroupMemoryLength:32*sizeof(float) atIndex:0]; - - [encoder dispatchThreadgroups:MTLSizeMake(ne01*ne02*ne03, 1, 1) threadsPerThreadgroup:MTLSizeMake(nth, 1, 1)]; - } break; - case GGML_OP_DIAG_MASK_INF: - { - const int n_past = ((int32_t *)(dst->op_params))[0]; - - id pipeline = nil; - - if (ne00%8 == 0) { - pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_DIAG_MASK_INF_8].pipeline; - } else { - pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_DIAG_MASK_INF].pipeline; - } - - [encoder setComputePipelineState:pipeline]; - [encoder setBuffer:id_src0 offset:offs_src0 atIndex:0]; - [encoder setBuffer:id_dst offset:offs_dst atIndex:1]; - [encoder setBytes:&ne00 length:sizeof(ne00) atIndex:2]; - [encoder setBytes:&ne01 length:sizeof(ne01) atIndex:3]; - [encoder setBytes:&n_past length:sizeof(int) atIndex:4]; - - if (ne00%8 == 0) { - [encoder dispatchThreadgroups:MTLSizeMake(ne00*ne01*ne02/8, 1, 1) threadsPerThreadgroup:MTLSizeMake(1, 1, 1)]; - } - else { - [encoder dispatchThreadgroups:MTLSizeMake(ne00, ne01, ne02) threadsPerThreadgroup:MTLSizeMake(1, 1, 1)]; - } - } break; - case GGML_OP_MUL_MAT: - { - GGML_ASSERT(ne00 == ne10); - - // TODO: assert that dim2 and dim3 are contiguous - GGML_ASSERT(ne12 % ne02 == 0); - GGML_ASSERT(ne13 % ne03 == 0); - - const uint r2 = ne12/ne02; - const uint r3 = ne13/ne03; - - // find the break-even point where the matrix-matrix kernel becomes more efficient compared - // to the matrix-vector kernel - int ne11_mm_min = 1; - -#if 0 - // the numbers below are measured on M2 Ultra for 7B and 13B models - // these numbers do not translate to other devices or model sizes - // TODO: need to find a better approach - if ([ctx->device.name isEqualToString:@"Apple M2 Ultra"]) { - switch (src0t) { - case GGML_TYPE_F16: ne11_mm_min = 2; break; - case GGML_TYPE_Q8_0: ne11_mm_min = 7; break; - case GGML_TYPE_Q2_K: ne11_mm_min = 15; break; - case GGML_TYPE_Q3_K: ne11_mm_min = 7; break; - case GGML_TYPE_Q4_0: - case GGML_TYPE_Q4_1: ne11_mm_min = 15; break; - case GGML_TYPE_Q4_K: ne11_mm_min = 11; break; - case GGML_TYPE_Q5_0: // not tested yet - case GGML_TYPE_Q5_1: ne11_mm_min = 13; break; // not tested yet - case GGML_TYPE_Q5_K: ne11_mm_min = 7; break; - case GGML_TYPE_Q6_K: ne11_mm_min = 7; break; - default: ne11_mm_min = 1; break; - } - } -#endif - - // for now the matrix-matrix multiplication kernel only works on A14+/M1+ SoCs - // AMD GPU and older A-chips will reuse matrix-vector multiplication kernel - if ([ctx->device supportsFamily:MTLGPUFamilyApple7] && - !ggml_is_transposed(src0) && - !ggml_is_transposed(src1) && - src1t == GGML_TYPE_F32 && - ne00 % 32 == 0 && ne00 >= 64 && - (ne11 > ne11_mm_min || (ggml_is_quantized(src0t) && ne12 > 1))) { - //printf("matrix: ne00 = %6d, ne01 = %6d, ne02 = %6d, ne11 = %6d, ne12 = %6d\n", ne00, ne01, ne02, ne11, ne12); - - // some Metal matrix data types require aligned pointers - // ref: https://developer.apple.com/metal/Metal-Shading-Language-Specification.pdf (Table 2.5) - switch (src0->type) { - case GGML_TYPE_F32: GGML_ASSERT(nb01 % 16 == 0); break; - case GGML_TYPE_F16: GGML_ASSERT(nb01 % 8 == 0); break; - default: break; - } - - id pipeline = nil; - - switch (src0->type) { - case GGML_TYPE_F32: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_F32_F32 ].pipeline; break; - case GGML_TYPE_F16: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_F16_F32 ].pipeline; break; - case GGML_TYPE_Q4_0: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_Q4_0_F32 ].pipeline; break; - case GGML_TYPE_Q4_1: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_Q4_1_F32 ].pipeline; break; - case GGML_TYPE_Q5_0: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_Q5_0_F32 ].pipeline; break; - case GGML_TYPE_Q5_1: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_Q5_1_F32 ].pipeline; break; - case GGML_TYPE_Q8_0: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_Q8_0_F32 ].pipeline; break; - case GGML_TYPE_Q2_K: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_Q2_K_F32 ].pipeline; break; - case GGML_TYPE_Q3_K: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_Q3_K_F32 ].pipeline; break; - case GGML_TYPE_Q4_K: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_Q4_K_F32 ].pipeline; break; - case GGML_TYPE_Q5_K: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_Q5_K_F32 ].pipeline; break; - case GGML_TYPE_Q6_K: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_Q6_K_F32 ].pipeline; break; - case GGML_TYPE_IQ2_XXS: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_IQ2_XXS_F32].pipeline; break; - case GGML_TYPE_IQ2_XS: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_IQ2_XS_F32 ].pipeline; break; - case GGML_TYPE_IQ3_XXS: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_IQ3_XXS_F32].pipeline; break; - case GGML_TYPE_IQ3_S: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_IQ3_S_F32 ].pipeline; break; - case GGML_TYPE_IQ2_S: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_IQ2_S_F32 ].pipeline; break; - case GGML_TYPE_IQ1_S: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_IQ1_S_F32 ].pipeline; break; - case GGML_TYPE_IQ1_M: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_IQ1_M_F32 ].pipeline; break; - case GGML_TYPE_IQ4_NL: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_IQ4_NL_F32 ].pipeline; break; - case GGML_TYPE_IQ4_XS: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_IQ4_XS_F32 ].pipeline; break; - default: GGML_ASSERT(false && "MUL MAT-MAT not implemented"); - } - - [encoder setComputePipelineState:pipeline]; - [encoder setBuffer:id_src0 offset:offs_src0 atIndex:0]; - [encoder setBuffer:id_src1 offset:offs_src1 atIndex:1]; - [encoder setBuffer:id_dst offset:offs_dst atIndex:2]; - [encoder setBytes:&ne00 length:sizeof(ne00) atIndex:3]; - [encoder setBytes:&ne02 length:sizeof(ne02) atIndex:4]; - [encoder setBytes:&nb01 length:sizeof(nb01) atIndex:5]; - [encoder setBytes:&nb02 length:sizeof(nb02) atIndex:6]; - [encoder setBytes:&ne12 length:sizeof(ne12) atIndex:7]; - [encoder setBytes:&nb10 length:sizeof(nb10) atIndex:8]; - [encoder setBytes:&nb11 length:sizeof(nb11) atIndex:9]; - [encoder setBytes:&nb12 length:sizeof(nb12) atIndex:10]; - [encoder setBytes:&ne0 length:sizeof(ne0) atIndex:11]; - [encoder setBytes:&ne1 length:sizeof(ne1) atIndex:12]; - [encoder setBytes:&r2 length:sizeof(r2) atIndex:13]; - [encoder setBytes:&r3 length:sizeof(r3) atIndex:14]; - [encoder setThreadgroupMemoryLength:8192 atIndex:0]; - [encoder dispatchThreadgroups:MTLSizeMake( (ne11 + 31)/32, (ne01 + 63)/64, ne12*ne13) threadsPerThreadgroup:MTLSizeMake(128, 1, 1)]; - } else { - int nth0 = 32; - int nth1 = 1; - int nrows = 1; - //printf("vector: ne00 = %6d, ne01 = %6d, ne02 = %6d, ne11 = %6d, ne12 = %6d\n", ne00, ne01, ne02, ne11, ne12); - - id pipeline = nil; - - // use custom matrix x vector kernel - switch (src0t) { - case GGML_TYPE_F32: - { - GGML_ASSERT(src1t == GGML_TYPE_F32); - pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_F32_F32].pipeline; - nrows = 4; - } break; - case GGML_TYPE_F16: - { - nth0 = 32; - nth1 = 1; - if (src1t == GGML_TYPE_F32) { - if (ne11 * ne12 < 4) { - pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_F16_F32_1ROW].pipeline; - } else if (ne00 >= 128 && ne01 >= 8 && ne00%4 == 0) { - pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_F16_F32_L4].pipeline; - nrows = ne11; - } else { - pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_F16_F32].pipeline; - nrows = 4; - } - } else { - pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_F16_F16].pipeline; - nrows = 4; - } - } break; - case GGML_TYPE_Q4_0: - { - nth0 = 8; - nth1 = 8; - pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_Q4_0_F32].pipeline; - } break; - case GGML_TYPE_Q4_1: - { - nth0 = 8; - nth1 = 8; - pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_Q4_1_F32].pipeline; - } break; - case GGML_TYPE_Q5_0: - { - nth0 = 8; - nth1 = 8; - pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_Q5_0_F32].pipeline; - } break; - case GGML_TYPE_Q5_1: - { - nth0 = 8; - nth1 = 8; - pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_Q5_1_F32].pipeline; - } break; - case GGML_TYPE_Q8_0: - { - nth0 = 8; - nth1 = 8; - pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_Q8_0_F32].pipeline; - } break; - case GGML_TYPE_Q2_K: - { - nth0 = 2; - nth1 = 32; - pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_Q2_K_F32].pipeline; - } break; - case GGML_TYPE_Q3_K: - { - nth0 = 2; - nth1 = 32; - pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_Q3_K_F32].pipeline; - } break; - case GGML_TYPE_Q4_K: - { - nth0 = 4; //1; - nth1 = 8; //32; - pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_Q4_K_F32].pipeline; - } break; - case GGML_TYPE_Q5_K: - { - nth0 = 2; - nth1 = 32; - pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_Q5_K_F32].pipeline; - } break; - case GGML_TYPE_Q6_K: - { - nth0 = 2; - nth1 = 32; - pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_Q6_K_F32].pipeline; - } break; - case GGML_TYPE_IQ2_XXS: - { - nth0 = 4; - nth1 = 16; - pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_IQ2_XXS_F32].pipeline; - } break; - case GGML_TYPE_IQ2_XS: - { - nth0 = 4; - nth1 = 16; - pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_IQ2_XS_F32].pipeline; - } break; - case GGML_TYPE_IQ3_XXS: - { - nth0 = 4; - nth1 = 16; - pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_IQ3_XXS_F32].pipeline; - } break; - case GGML_TYPE_IQ3_S: - { - nth0 = 4; - nth1 = 16; - pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_IQ3_S_F32].pipeline; - } break; - case GGML_TYPE_IQ2_S: - { - nth0 = 4; - nth1 = 16; - pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_IQ2_S_F32].pipeline; - } break; - case GGML_TYPE_IQ1_S: - { - nth0 = 4; - nth1 = 16; - pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_IQ1_S_F32].pipeline; - } break; - case GGML_TYPE_IQ1_M: - { - nth0 = 4; - nth1 = 16; - pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_IQ1_M_F32].pipeline; - } break; - case GGML_TYPE_IQ4_NL: - { - nth0 = 4; - nth1 = 16; - pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_IQ4_NL_F32].pipeline; - } break; - case GGML_TYPE_IQ4_XS: - { - nth0 = 4; - nth1 = 16; - pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_IQ4_XS_F32].pipeline; - } break; - default: - { - GGML_METAL_LOG_ERROR("Asserting on type %d\n", (int)src0t); - GGML_ASSERT(false && "not implemented"); - } - }; - - if (ggml_is_quantized(src0t)) { - GGML_ASSERT(ne00 >= nth0*nth1); - } - - [encoder setComputePipelineState:pipeline]; - [encoder setBuffer:id_src0 offset:offs_src0 atIndex:0]; - [encoder setBuffer:id_src1 offset:offs_src1 atIndex:1]; - [encoder setBuffer:id_dst offset:offs_dst atIndex:2]; - [encoder setBytes:&ne00 length:sizeof(ne00) atIndex:3]; - [encoder setBytes:&ne01 length:sizeof(ne01) atIndex:4]; - [encoder setBytes:&ne02 length:sizeof(ne02) atIndex:5]; - [encoder setBytes:&nb00 length:sizeof(nb00) atIndex:6]; - [encoder setBytes:&nb01 length:sizeof(nb01) atIndex:7]; - [encoder setBytes:&nb02 length:sizeof(nb02) atIndex:8]; - [encoder setBytes:&ne10 length:sizeof(ne10) atIndex:9]; - [encoder setBytes:&ne11 length:sizeof(ne11) atIndex:10]; - [encoder setBytes:&ne12 length:sizeof(ne12) atIndex:11]; - [encoder setBytes:&nb10 length:sizeof(nb10) atIndex:12]; - [encoder setBytes:&nb11 length:sizeof(nb11) atIndex:13]; - [encoder setBytes:&nb12 length:sizeof(nb12) atIndex:14]; - [encoder setBytes:&ne0 length:sizeof(ne0) atIndex:15]; - [encoder setBytes:&ne1 length:sizeof(ne1) atIndex:16]; - [encoder setBytes:&r2 length:sizeof(r2) atIndex:17]; - [encoder setBytes:&r3 length:sizeof(r3) atIndex:18]; - - if (src0t == GGML_TYPE_Q4_0 || src0t == GGML_TYPE_Q4_1 || src0t == GGML_TYPE_Q5_0 || - src0t == GGML_TYPE_Q5_1 || src0t == GGML_TYPE_Q8_0 || src0t == GGML_TYPE_Q2_K || - src0t == GGML_TYPE_IQ1_S || src0t == GGML_TYPE_IQ1_M || src0t == GGML_TYPE_IQ2_S) { - [encoder dispatchThreadgroups:MTLSizeMake((ne01 + 7)/8, ne11, ne12*ne13) threadsPerThreadgroup:MTLSizeMake(nth0, nth1, 1)]; - } - else if (src0t == GGML_TYPE_IQ2_XXS || src0t == GGML_TYPE_IQ2_XS) { - const int mem_size = src0t == GGML_TYPE_IQ2_XXS ? 256*8+128 : 512*8+128; - [encoder setThreadgroupMemoryLength:mem_size atIndex:0]; - [encoder dispatchThreadgroups:MTLSizeMake((ne01 + 7)/8, ne11, ne12*ne13) threadsPerThreadgroup:MTLSizeMake(nth0, nth1, 1)]; - } - else if (src0t == GGML_TYPE_IQ3_XXS || src0t == GGML_TYPE_IQ3_S) { - const int mem_size = src0t == GGML_TYPE_IQ3_XXS ? 256*4+128 : 512*4; - [encoder setThreadgroupMemoryLength:mem_size atIndex:0]; - [encoder dispatchThreadgroups:MTLSizeMake((ne01 + 7)/8, ne11, ne12*ne13) threadsPerThreadgroup:MTLSizeMake(nth0, nth1, 1)]; - } - else if (src0t == GGML_TYPE_IQ4_NL || src0t == GGML_TYPE_IQ4_XS) { - const int mem_size = 32*sizeof(float); - [encoder setThreadgroupMemoryLength:mem_size atIndex:0]; - [encoder dispatchThreadgroups:MTLSizeMake((ne01 + 3)/4, ne11, ne12*ne13) threadsPerThreadgroup:MTLSizeMake(nth0, nth1, 1)]; - } - else if (src0t == GGML_TYPE_Q4_K) { - [encoder dispatchThreadgroups:MTLSizeMake((ne01 + 3)/4, ne11, ne12*ne13) threadsPerThreadgroup:MTLSizeMake(nth0, nth1, 1)]; - } - else if (src0t == GGML_TYPE_Q3_K) { -#ifdef GGML_QKK_64 - [encoder dispatchThreadgroups:MTLSizeMake((ne01 + 1)/2, ne11, ne12*ne13) threadsPerThreadgroup:MTLSizeMake(nth0, nth1, 1)]; -#else - [encoder dispatchThreadgroups:MTLSizeMake((ne01 + 3)/4, ne11, ne12*ne13) threadsPerThreadgroup:MTLSizeMake(nth0, nth1, 1)]; -#endif - } - else if (src0t == GGML_TYPE_Q5_K) { - [encoder dispatchThreadgroups:MTLSizeMake((ne01 + 3)/4, ne11, ne12*ne13) threadsPerThreadgroup:MTLSizeMake(nth0, nth1, 1)]; - } - else if (src0t == GGML_TYPE_Q6_K) { - [encoder dispatchThreadgroups:MTLSizeMake((ne01 + 1)/2, ne11, ne12*ne13) threadsPerThreadgroup:MTLSizeMake(nth0, nth1, 1)]; - } else { - const int64_t ny = (ne11 + nrows - 1)/nrows; - [encoder dispatchThreadgroups:MTLSizeMake(ne01, ny, ne12*ne13) threadsPerThreadgroup:MTLSizeMake(nth0, nth1, 1)]; - } - } - } break; - case GGML_OP_MUL_MAT_ID: - { - const int n_as = src0->ne[2]; - - // src2 = ids - const int64_t ne20 = src2->ne[0]; - const int64_t ne21 = src2->ne[1]; - const int64_t ne22 = src2->ne[2]; GGML_UNUSED(ne22); - const int64_t ne23 = src2->ne[3]; GGML_UNUSED(ne23); - - const uint64_t nb20 = src2->nb[0]; GGML_UNUSED(nb20); - const uint64_t nb21 = src2->nb[1]; - const uint64_t nb22 = src2->nb[2]; GGML_UNUSED(nb22); - const uint64_t nb23 = src2->nb[3]; GGML_UNUSED(nb23); - - const enum ggml_type src2t = src2->type; GGML_UNUSED(src2t); - - GGML_ASSERT(src2t == GGML_TYPE_I32); - - GGML_ASSERT(!ggml_is_transposed(src0)); - GGML_ASSERT(!ggml_is_transposed(src1)); - - GGML_ASSERT(src1t == GGML_TYPE_F32); - - // find the break-even point where the matrix-matrix kernel becomes more efficient compared - // to the matrix-vector kernel - // ne20 = n_used_experts - // ne21 = n_rows - const int dst_rows = ne20*ne21; - const int dst_rows_min = n_as; - - // max size of the rowids array in the kernel shared buffer - GGML_ASSERT(dst_rows <= 2048); - - // for now the matrix-matrix multiplication kernel only works on A14+/M1+ SoCs - // AMD GPU and older A-chips will reuse matrix-vector multiplication kernel - // !!! - // TODO: for now, always use mat-vec kernels until we figure out how to improve the - // indirect matrix multiplication - // !!! - if ([ctx->device supportsFamily:MTLGPUFamilyApple7] && - ne00 % 32 == 0 && ne00 >= 64 && - dst_rows > dst_rows_min) { - - // some Metal matrix data types require aligned pointers - // ref: https://developer.apple.com/metal/Metal-Shading-Language-Specification.pdf (Table 2.5) - switch (src0->type) { - case GGML_TYPE_F32: GGML_ASSERT(nb01 % 16 == 0); break; - case GGML_TYPE_F16: GGML_ASSERT(nb01 % 8 == 0); break; - default: break; - } - - id pipeline = nil; - - switch (src0->type) { - case GGML_TYPE_F32: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_ID_F32_F32 ].pipeline; break; - case GGML_TYPE_F16: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_ID_F16_F32 ].pipeline; break; - case GGML_TYPE_Q4_0: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_ID_Q4_0_F32 ].pipeline; break; - case GGML_TYPE_Q4_1: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_ID_Q4_1_F32 ].pipeline; break; - case GGML_TYPE_Q5_0: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_ID_Q5_0_F32 ].pipeline; break; - case GGML_TYPE_Q5_1: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_ID_Q5_1_F32 ].pipeline; break; - case GGML_TYPE_Q8_0: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_ID_Q8_0_F32 ].pipeline; break; - case GGML_TYPE_Q2_K: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_ID_Q2_K_F32 ].pipeline; break; - case GGML_TYPE_Q3_K: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_ID_Q3_K_F32 ].pipeline; break; - case GGML_TYPE_Q4_K: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_ID_Q4_K_F32 ].pipeline; break; - case GGML_TYPE_Q5_K: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_ID_Q5_K_F32 ].pipeline; break; - case GGML_TYPE_Q6_K: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_ID_Q6_K_F32 ].pipeline; break; - case GGML_TYPE_IQ2_XXS: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_ID_IQ2_XXS_F32].pipeline; break; - case GGML_TYPE_IQ2_XS: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_ID_IQ2_XS_F32 ].pipeline; break; - case GGML_TYPE_IQ3_XXS: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_ID_IQ3_XXS_F32].pipeline; break; - case GGML_TYPE_IQ3_S: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_ID_IQ3_S_F32 ].pipeline; break; - case GGML_TYPE_IQ2_S: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_ID_IQ2_S_F32 ].pipeline; break; - case GGML_TYPE_IQ1_S: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_ID_IQ1_S_F32 ].pipeline; break; - case GGML_TYPE_IQ1_M: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_ID_IQ1_M_F32 ].pipeline; break; - case GGML_TYPE_IQ4_NL: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_ID_IQ4_NL_F32 ].pipeline; break; - case GGML_TYPE_IQ4_XS: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_ID_IQ4_XS_F32 ].pipeline; break; - default: GGML_ASSERT(false && "MUL_MAT_ID not implemented"); - } - - [encoder setComputePipelineState:pipeline]; - [encoder setBuffer:id_src0 offset:offs_src0 atIndex:0]; - [encoder setBuffer:id_src1 offset:offs_src1 atIndex:1]; - [encoder setBuffer:id_dst offset:offs_dst atIndex:2]; - [encoder setBuffer:id_src2 offset:offs_src2 atIndex:3]; - [encoder setBytes:&ne20 length:sizeof(ne20) atIndex:4]; - [encoder setBytes:&ne21 length:sizeof(ne21) atIndex:5]; - [encoder setBytes:&nb21 length:sizeof(nb21) atIndex:6]; - [encoder setBytes:&ne00 length:sizeof(ne00) atIndex:7]; - [encoder setBytes:&ne02 length:sizeof(ne02) atIndex:8]; - [encoder setBytes:&nb01 length:sizeof(nb01) atIndex:9]; - [encoder setBytes:&nb02 length:sizeof(nb02) atIndex:10]; - [encoder setBytes:&ne11 length:sizeof(ne11) atIndex:11]; - [encoder setBytes:&ne12 length:sizeof(ne12) atIndex:12]; - [encoder setBytes:&ne13 length:sizeof(ne13) atIndex:13]; - [encoder setBytes:&nb10 length:sizeof(nb10) atIndex:14]; - [encoder setBytes:&nb11 length:sizeof(nb11) atIndex:15]; - [encoder setBytes:&nb12 length:sizeof(nb12) atIndex:16]; - [encoder setBytes:&ne0 length:sizeof(ne0) atIndex:17]; - [encoder setBytes:&ne1 length:sizeof(ne1) atIndex:18]; - [encoder setBytes:&nb1 length:sizeof(nb1) atIndex:19]; - - [encoder setThreadgroupMemoryLength:GGML_PAD(8192 + dst_rows*4/*sizeof(ushort2)*/, 16) atIndex:0]; - - [encoder dispatchThreadgroups:MTLSizeMake((ne21 + 31)/32, (ne01 + 63)/64, n_as) threadsPerThreadgroup:MTLSizeMake(128, 1, 1)]; - } else { - int nth0 = 32; - int nth1 = 1; - int nrows = 1; - //printf("vector: ne00 = %6d, ne01 = %6d, ne02 = %6d, ne11 = %6d, ne12 = %6d\n", ne00, ne01, ne02, ne11, ne12); - - id pipeline = nil; - - // use custom matrix x vector kernel - switch (src0t) { - case GGML_TYPE_F32: - { - GGML_ASSERT(src1t == GGML_TYPE_F32); - pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_ID_F32_F32].pipeline; - } break; - case GGML_TYPE_F16: - { - GGML_ASSERT(src1t == GGML_TYPE_F32); - nth0 = 32; - nth1 = 1; - pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_ID_F16_F32].pipeline; - } break; - case GGML_TYPE_Q4_0: - { - nth0 = 8; - nth1 = 8; - pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_ID_Q4_0_F32].pipeline; - } break; - case GGML_TYPE_Q4_1: - { - nth0 = 8; - nth1 = 8; - pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_ID_Q4_1_F32].pipeline; - } break; - case GGML_TYPE_Q5_0: - { - nth0 = 8; - nth1 = 8; - pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_ID_Q5_0_F32].pipeline; - } break; - case GGML_TYPE_Q5_1: - { - nth0 = 8; - nth1 = 8; - pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_ID_Q5_1_F32].pipeline; - } break; - case GGML_TYPE_Q8_0: - { - nth0 = 8; - nth1 = 8; - pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_ID_Q8_0_F32].pipeline; - } break; - case GGML_TYPE_Q2_K: - { - nth0 = 2; - nth1 = 32; - pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_ID_Q2_K_F32].pipeline; - } break; - case GGML_TYPE_Q3_K: - { - nth0 = 2; - nth1 = 32; - pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_ID_Q3_K_F32].pipeline; - } break; - case GGML_TYPE_Q4_K: - { - nth0 = 4; //1; - nth1 = 8; //32; - pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_ID_Q4_K_F32].pipeline; - } break; - case GGML_TYPE_Q5_K: - { - nth0 = 2; - nth1 = 32; - pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_ID_Q5_K_F32].pipeline; - } break; - case GGML_TYPE_Q6_K: - { - nth0 = 2; - nth1 = 32; - pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_ID_Q6_K_F32].pipeline; - } break; - case GGML_TYPE_IQ2_XXS: - { - nth0 = 4; - nth1 = 16; - pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_ID_IQ2_XXS_F32].pipeline; - } break; - case GGML_TYPE_IQ2_XS: - { - nth0 = 4; - nth1 = 16; - pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_ID_IQ2_XS_F32].pipeline; - } break; - case GGML_TYPE_IQ3_XXS: - { - nth0 = 4; - nth1 = 16; - pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_ID_IQ3_XXS_F32].pipeline; - } break; - case GGML_TYPE_IQ3_S: - { - nth0 = 4; - nth1 = 16; - pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_ID_IQ3_S_F32].pipeline; - } break; - case GGML_TYPE_IQ2_S: - { - nth0 = 4; - nth1 = 16; - pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_ID_IQ2_S_F32].pipeline; - } break; - case GGML_TYPE_IQ1_S: - { - nth0 = 4; - nth1 = 16; - pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_ID_IQ1_S_F32].pipeline; - } break; - case GGML_TYPE_IQ1_M: - { - nth0 = 4; - nth1 = 16; - pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_ID_IQ1_M_F32].pipeline; - } break; - case GGML_TYPE_IQ4_NL: - { - nth0 = 4; - nth1 = 16; - pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_ID_IQ4_NL_F32].pipeline; - } break; - case GGML_TYPE_IQ4_XS: - { - nth0 = 4; - nth1 = 16; - #if QK_K == 64 - pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_ID_IQ4_NL_F32].pipeline; - #else - pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_ID_IQ4_XS_F32].pipeline; - #endif - - } break; - default: - { - GGML_METAL_LOG_ERROR("Asserting on type %d\n", (int)src2t); - GGML_ASSERT(false && "not implemented"); - } - }; - - if (ggml_is_quantized(src0t)) { - GGML_ASSERT(ne00 >= nth0*nth1); - } - - [encoder setComputePipelineState:pipeline]; - [encoder setBuffer:id_src0 offset:offs_src0 atIndex:0]; - [encoder setBuffer:id_src1 offset:offs_src1 atIndex:1]; - [encoder setBuffer:id_dst offset:offs_dst atIndex:2]; - [encoder setBuffer:id_src2 offset:offs_src2 atIndex:3]; - [encoder setBytes:&ne20 length:sizeof(ne20) atIndex:4]; - [encoder setBytes:&ne21 length:sizeof(ne21) atIndex:5]; - [encoder setBytes:&nb21 length:sizeof(nb21) atIndex:6]; - [encoder setBytes:&ne00 length:sizeof(ne00) atIndex:7]; - [encoder setBytes:&ne01 length:sizeof(ne01) atIndex:8]; - [encoder setBytes:&ne02 length:sizeof(ne02) atIndex:9]; - [encoder setBytes:&nb00 length:sizeof(nb00) atIndex:10]; - [encoder setBytes:&nb01 length:sizeof(nb01) atIndex:11]; - [encoder setBytes:&nb02 length:sizeof(nb02) atIndex:12]; - [encoder setBytes:&ne10 length:sizeof(ne10) atIndex:13]; - [encoder setBytes:&ne11 length:sizeof(ne11) atIndex:14]; - [encoder setBytes:&ne12 length:sizeof(ne12) atIndex:15]; - [encoder setBytes:&ne13 length:sizeof(ne13) atIndex:16]; - [encoder setBytes:&nb10 length:sizeof(nb10) atIndex:17]; - [encoder setBytes:&nb11 length:sizeof(nb11) atIndex:18]; - [encoder setBytes:&nb12 length:sizeof(nb12) atIndex:19]; - [encoder setBytes:&ne0 length:sizeof(ne0) atIndex:20]; - [encoder setBytes:&ne1 length:sizeof(ne1) atIndex:21]; - [encoder setBytes:&nb1 length:sizeof(nb1) atIndex:22]; - - const int64_t _ne1 = 1; - const int tgz = dst_rows; - - if (src0t == GGML_TYPE_Q4_0 || src0t == GGML_TYPE_Q4_1 || src0t == GGML_TYPE_Q5_0 || - src0t == GGML_TYPE_Q5_1 || src0t == GGML_TYPE_Q8_0 || src0t == GGML_TYPE_Q2_K || - src0t == GGML_TYPE_IQ1_S || src0t == GGML_TYPE_IQ1_M || src0t == GGML_TYPE_IQ2_S) { - [encoder dispatchThreadgroups:MTLSizeMake((ne01 + 7)/8, _ne1, tgz) threadsPerThreadgroup:MTLSizeMake(nth0, nth1, 1)]; - } - else if (src0t == GGML_TYPE_IQ2_XXS || src0t == GGML_TYPE_IQ2_XS) { - const int mem_size = src0t == GGML_TYPE_IQ2_XXS ? 256*8+128 : 512*8+128; - [encoder setThreadgroupMemoryLength:mem_size atIndex:0]; - [encoder dispatchThreadgroups:MTLSizeMake((ne01 + 7)/8, _ne1, tgz) threadsPerThreadgroup:MTLSizeMake(nth0, nth1, 1)]; - } - else if (src0t == GGML_TYPE_IQ3_XXS || src0t == GGML_TYPE_IQ3_S) { - const int mem_size = src0t == GGML_TYPE_IQ3_XXS ? 256*4+128 : 512*4; - [encoder setThreadgroupMemoryLength:mem_size atIndex:0]; - [encoder dispatchThreadgroups:MTLSizeMake((ne01 + 7)/8, _ne1, tgz) threadsPerThreadgroup:MTLSizeMake(nth0, nth1, 1)]; - } - else if (src0t == GGML_TYPE_IQ4_NL || src0t == GGML_TYPE_IQ4_XS) { - const int mem_size = 32*sizeof(float); - [encoder setThreadgroupMemoryLength:mem_size atIndex:0]; - [encoder dispatchThreadgroups:MTLSizeMake((ne01 + 3)/4, _ne1, tgz) threadsPerThreadgroup:MTLSizeMake(nth0, nth1, 1)]; - } - else if (src0t == GGML_TYPE_Q4_K) { - [encoder dispatchThreadgroups:MTLSizeMake((ne01 + 3)/4, _ne1, tgz) threadsPerThreadgroup:MTLSizeMake(nth0, nth1, 1)]; - } - else if (src0t == GGML_TYPE_Q3_K) { -#ifdef GGML_QKK_64 - [encoder dispatchThreadgroups:MTLSizeMake((ne01 + 1)/2, _ne1, tgz) threadsPerThreadgroup:MTLSizeMake(nth0, nth1, 1)]; -#else - [encoder dispatchThreadgroups:MTLSizeMake((ne01 + 3)/4, _ne1, tgz) threadsPerThreadgroup:MTLSizeMake(nth0, nth1, 1)]; -#endif - } - else if (src0t == GGML_TYPE_Q5_K) { - [encoder dispatchThreadgroups:MTLSizeMake((ne01 + 3)/4, _ne1, tgz) threadsPerThreadgroup:MTLSizeMake(nth0, nth1, 1)]; - } - else if (src0t == GGML_TYPE_Q6_K) { - [encoder dispatchThreadgroups:MTLSizeMake((ne01 + 1)/2, _ne1, tgz) threadsPerThreadgroup:MTLSizeMake(nth0, nth1, 1)]; - } else { - const int64_t ny = (_ne1 + nrows - 1)/nrows; // = _ne1 - [encoder dispatchThreadgroups:MTLSizeMake(ne01, ny, tgz) threadsPerThreadgroup:MTLSizeMake(nth0, nth1, 1)]; - } - } - } break; - case GGML_OP_GET_ROWS: - { - id pipeline = nil; - - switch (src0->type) { - case GGML_TYPE_F32: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_GET_ROWS_F32 ].pipeline; break; - case GGML_TYPE_F16: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_GET_ROWS_F16 ].pipeline; break; - case GGML_TYPE_Q4_0: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_GET_ROWS_Q4_0 ].pipeline; break; - case GGML_TYPE_Q4_1: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_GET_ROWS_Q4_1 ].pipeline; break; - case GGML_TYPE_Q5_0: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_GET_ROWS_Q5_0 ].pipeline; break; - case GGML_TYPE_Q5_1: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_GET_ROWS_Q5_1 ].pipeline; break; - case GGML_TYPE_Q8_0: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_GET_ROWS_Q8_0 ].pipeline; break; - case GGML_TYPE_Q2_K: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_GET_ROWS_Q2_K ].pipeline; break; - case GGML_TYPE_Q3_K: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_GET_ROWS_Q3_K ].pipeline; break; - case GGML_TYPE_Q4_K: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_GET_ROWS_Q4_K ].pipeline; break; - case GGML_TYPE_Q5_K: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_GET_ROWS_Q5_K ].pipeline; break; - case GGML_TYPE_Q6_K: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_GET_ROWS_Q6_K ].pipeline; break; - case GGML_TYPE_IQ2_XXS: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_GET_ROWS_IQ2_XXS].pipeline; break; - case GGML_TYPE_IQ2_XS: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_GET_ROWS_IQ2_XS ].pipeline; break; - case GGML_TYPE_IQ3_XXS: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_GET_ROWS_IQ3_XXS].pipeline; break; - case GGML_TYPE_IQ3_S: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_GET_ROWS_IQ3_S ].pipeline; break; - case GGML_TYPE_IQ2_S: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_GET_ROWS_IQ2_S ].pipeline; break; - case GGML_TYPE_IQ1_S: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_GET_ROWS_IQ1_S ].pipeline; break; - case GGML_TYPE_IQ1_M: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_GET_ROWS_IQ1_M ].pipeline; break; - case GGML_TYPE_IQ4_NL: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_GET_ROWS_IQ4_NL ].pipeline; break; - case GGML_TYPE_IQ4_XS: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_GET_ROWS_IQ4_XS ].pipeline; break; - case GGML_TYPE_I32: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_GET_ROWS_I32 ].pipeline; break; - default: GGML_ASSERT(false && "not implemented"); - } - - [encoder setComputePipelineState:pipeline]; - [encoder setBuffer:id_src0 offset:offs_src0 atIndex:0]; - [encoder setBuffer:id_src1 offset:offs_src1 atIndex:1]; - [encoder setBuffer:id_dst offset:offs_dst atIndex:2]; - [encoder setBytes:&ne00 length:sizeof( int64_t) atIndex:3]; - [encoder setBytes:&nb01 length:sizeof(uint64_t) atIndex:4]; - [encoder setBytes:&nb02 length:sizeof(uint64_t) atIndex:5]; - [encoder setBytes:&ne10 length:sizeof( int64_t) atIndex:6]; - [encoder setBytes:&nb10 length:sizeof( int64_t) atIndex:7]; - [encoder setBytes:&nb11 length:sizeof( int64_t) atIndex:8]; - [encoder setBytes:&nb1 length:sizeof(uint64_t) atIndex:9]; - [encoder setBytes:&nb2 length:sizeof(uint64_t) atIndex:10]; - - [encoder dispatchThreadgroups:MTLSizeMake(ne10, ne11, 1) threadsPerThreadgroup:MTLSizeMake(32, 1, 1)]; - } break; - case GGML_OP_RMS_NORM: - { - GGML_ASSERT(ne00 % 4 == 0); - - float eps; - memcpy(&eps, dst->op_params, sizeof(float)); - - int nth = 32; // SIMD width - - while (nth < ne00/4 && nth < 1024) { - nth *= 2; - } - - id pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_RMS_NORM].pipeline; - - [encoder setComputePipelineState:pipeline]; - [encoder setBuffer:id_src0 offset:offs_src0 atIndex:0]; - [encoder setBuffer:id_dst offset:offs_dst atIndex:1]; - [encoder setBytes:&ne00 length:sizeof( int64_t) atIndex:2]; - [encoder setBytes:&nb01 length:sizeof(uint64_t) atIndex:3]; - [encoder setBytes:&eps length:sizeof( float) atIndex:4]; - [encoder setThreadgroupMemoryLength:32*sizeof(float) atIndex:0]; - - const int64_t nrows = ggml_nrows(src0); - - [encoder dispatchThreadgroups:MTLSizeMake(nrows, 1, 1) threadsPerThreadgroup:MTLSizeMake(nth, 1, 1)]; - } break; - case GGML_OP_GROUP_NORM: - { - GGML_ASSERT(ne00 % 4 == 0); - - //float eps; - //memcpy(&eps, dst->op_params, sizeof(float)); - - const float eps = 1e-6f; // TODO: temporarily hardcoded - - const int32_t n_groups = ((int32_t *) dst->op_params)[0]; - - int nth = 32; // SIMD width - - //while (nth < ne00/4 && nth < 1024) { - // nth *= 2; - //} - - id pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_GROUP_NORM].pipeline; - - [encoder setComputePipelineState:pipeline]; - [encoder setBuffer:id_src0 offset:offs_src0 atIndex:0]; - [encoder setBuffer:id_dst offset:offs_dst atIndex:1]; - [encoder setBytes:&ne00 length:sizeof( int64_t) atIndex:2]; - [encoder setBytes:&ne01 length:sizeof( int64_t) atIndex:3]; - [encoder setBytes:&ne02 length:sizeof( int64_t) atIndex:4]; - [encoder setBytes:&nb00 length:sizeof(uint64_t) atIndex:5]; - [encoder setBytes:&nb01 length:sizeof(uint64_t) atIndex:6]; - [encoder setBytes:&nb02 length:sizeof(uint64_t) atIndex:7]; - [encoder setBytes:&n_groups length:sizeof( int32_t) atIndex:8]; - [encoder setBytes:&eps length:sizeof( float) atIndex:9]; - [encoder setThreadgroupMemoryLength:32*sizeof(float) atIndex:0]; - - [encoder dispatchThreadgroups:MTLSizeMake(n_groups, 1, 1) threadsPerThreadgroup:MTLSizeMake(nth, 1, 1)]; - } break; - case GGML_OP_NORM: - { - float eps; - memcpy(&eps, dst->op_params, sizeof(float)); - - const int nth = MIN(256, ne00); - - id pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_NORM].pipeline; - - [encoder setComputePipelineState:pipeline]; - [encoder setBuffer:id_src0 offset:offs_src0 atIndex:0]; - [encoder setBuffer:id_dst offset:offs_dst atIndex:1]; - [encoder setBytes:&ne00 length:sizeof( int64_t) atIndex:2]; - [encoder setBytes:&nb01 length:sizeof(uint64_t) atIndex:3]; - [encoder setBytes:&eps length:sizeof( float) atIndex:4]; - [encoder setThreadgroupMemoryLength:GGML_PAD(nth*sizeof(float), 16) atIndex:0]; - - const int64_t nrows = ggml_nrows(src0); - - [encoder dispatchThreadgroups:MTLSizeMake(nrows, 1, 1) threadsPerThreadgroup:MTLSizeMake(nth, 1, 1)]; - } break; - case GGML_OP_ALIBI: - { - GGML_ASSERT((src0t == GGML_TYPE_F32)); - - const int nth = MIN(1024, ne00); - - //const int n_past = ((int32_t *) dst->op_params)[0]; - const int n_head = ((int32_t *) dst->op_params)[1]; - - float max_bias; - memcpy(&max_bias, (int32_t *) dst->op_params + 2, sizeof(float)); - - const int n_heads_log2_floor = 1 << (int) floor(log2(n_head)); - const float m0 = powf(2.0f, -(max_bias) / n_heads_log2_floor); - const float m1 = powf(2.0f, -(max_bias / 2.0f) / n_heads_log2_floor); - - id pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_ALIBI_F32].pipeline; - - [encoder setComputePipelineState:pipeline]; - [encoder setBuffer:id_src0 offset:offs_src0 atIndex:0]; - [encoder setBuffer:id_dst offset:offs_dst atIndex:1]; - [encoder setBytes:&ne00 length:sizeof( int64_t) atIndex:2]; - [encoder setBytes:&ne01 length:sizeof( int64_t) atIndex:3]; - [encoder setBytes:&ne02 length:sizeof( int64_t) atIndex:4]; - [encoder setBytes:&ne03 length:sizeof( int64_t) atIndex:5]; - [encoder setBytes:&nb00 length:sizeof(uint64_t) atIndex:6]; - [encoder setBytes:&nb01 length:sizeof(uint64_t) atIndex:7]; - [encoder setBytes:&nb02 length:sizeof(uint64_t) atIndex:8]; - [encoder setBytes:&nb03 length:sizeof(uint64_t) atIndex:9]; - [encoder setBytes:&ne0 length:sizeof( int64_t) atIndex:10]; - [encoder setBytes:&ne1 length:sizeof( int64_t) atIndex:11]; - [encoder setBytes:&ne2 length:sizeof( int64_t) atIndex:12]; - [encoder setBytes:&ne3 length:sizeof( int64_t) atIndex:13]; - [encoder setBytes:&nb0 length:sizeof(uint64_t) atIndex:14]; - [encoder setBytes:&nb1 length:sizeof(uint64_t) atIndex:15]; - [encoder setBytes:&nb2 length:sizeof(uint64_t) atIndex:16]; - [encoder setBytes:&nb3 length:sizeof(uint64_t) atIndex:17]; - [encoder setBytes:&m0 length:sizeof( float) atIndex:18]; - [encoder setBytes:&m1 length:sizeof( float) atIndex:19]; - [encoder setBytes:&n_heads_log2_floor length:sizeof(int) atIndex:20]; - - [encoder dispatchThreadgroups:MTLSizeMake(ne01, ne02, ne03) threadsPerThreadgroup:MTLSizeMake(nth, 1, 1)]; - } break; - case GGML_OP_ROPE: - { - GGML_ASSERT(ne10 == ne02); - - const int nth = MIN(1024, ne00); - - const int n_past = ((int32_t *) dst->op_params)[0]; - const int n_dims = ((int32_t *) dst->op_params)[1]; - const int mode = ((int32_t *) dst->op_params)[2]; - // skip 3, n_ctx, used in GLM RoPE, unimplemented in metal - const int n_orig_ctx = ((int32_t *) dst->op_params)[4]; - - float freq_base, freq_scale, ext_factor, attn_factor, beta_fast, beta_slow; - memcpy(&freq_base, (int32_t *) dst->op_params + 5, sizeof(float)); - memcpy(&freq_scale, (int32_t *) dst->op_params + 6, sizeof(float)); - memcpy(&ext_factor, (int32_t *) dst->op_params + 7, sizeof(float)); - memcpy(&attn_factor, (int32_t *) dst->op_params + 8, sizeof(float)); - memcpy(&beta_fast, (int32_t *) dst->op_params + 9, sizeof(float)); - memcpy(&beta_slow, (int32_t *) dst->op_params + 10, sizeof(float)); - - id pipeline = nil; - - switch (src0->type) { - case GGML_TYPE_F32: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_ROPE_F32].pipeline; break; - case GGML_TYPE_F16: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_ROPE_F16].pipeline; break; - default: GGML_ASSERT(false); - }; - - [encoder setComputePipelineState:pipeline]; - [encoder setBuffer:id_src0 offset:offs_src0 atIndex:0]; - [encoder setBuffer:id_src1 offset:offs_src1 atIndex:1]; - [encoder setBuffer:id_dst offset:offs_dst atIndex:2]; - [encoder setBytes:&ne00 length:sizeof( int64_t) atIndex:3]; - [encoder setBytes:&ne01 length:sizeof( int64_t) atIndex:4]; - [encoder setBytes:&ne02 length:sizeof( int64_t) atIndex:5]; - [encoder setBytes:&ne03 length:sizeof( int64_t) atIndex:6]; - [encoder setBytes:&nb00 length:sizeof(uint64_t) atIndex:7]; - [encoder setBytes:&nb01 length:sizeof(uint64_t) atIndex:8]; - [encoder setBytes:&nb02 length:sizeof(uint64_t) atIndex:9]; - [encoder setBytes:&nb03 length:sizeof(uint64_t) atIndex:10]; - [encoder setBytes:&ne0 length:sizeof( int64_t) atIndex:11]; - [encoder setBytes:&ne1 length:sizeof( int64_t) atIndex:12]; - [encoder setBytes:&ne2 length:sizeof( int64_t) atIndex:13]; - [encoder setBytes:&ne3 length:sizeof( int64_t) atIndex:14]; - [encoder setBytes:&nb0 length:sizeof(uint64_t) atIndex:15]; - [encoder setBytes:&nb1 length:sizeof(uint64_t) atIndex:16]; - [encoder setBytes:&nb2 length:sizeof(uint64_t) atIndex:17]; - [encoder setBytes:&nb3 length:sizeof(uint64_t) atIndex:18]; - [encoder setBytes:&n_past length:sizeof( int) atIndex:19]; - [encoder setBytes:&n_dims length:sizeof( int) atIndex:20]; - [encoder setBytes:&mode length:sizeof( int) atIndex:21]; - [encoder setBytes:&n_orig_ctx length:sizeof( int) atIndex:22]; - [encoder setBytes:&freq_base length:sizeof( float) atIndex:23]; - [encoder setBytes:&freq_scale length:sizeof( float) atIndex:24]; - [encoder setBytes:&ext_factor length:sizeof( float) atIndex:25]; - [encoder setBytes:&attn_factor length:sizeof( float) atIndex:26]; - [encoder setBytes:&beta_fast length:sizeof( float) atIndex:27]; - [encoder setBytes:&beta_slow length:sizeof( float) atIndex:28]; - - [encoder dispatchThreadgroups:MTLSizeMake(ne01, ne02, ne03) threadsPerThreadgroup:MTLSizeMake(nth, 1, 1)]; - } break; - case GGML_OP_IM2COL: - { - GGML_ASSERT(src0->type == GGML_TYPE_F16); - GGML_ASSERT(src1->type == GGML_TYPE_F32); - GGML_ASSERT( dst->type == GGML_TYPE_F16 || dst->type == GGML_TYPE_F32); - - const int32_t s0 = ((const int32_t *)(dst->op_params))[0]; - const int32_t s1 = ((const int32_t *)(dst->op_params))[1]; - const int32_t p0 = ((const int32_t *)(dst->op_params))[2]; - const int32_t p1 = ((const int32_t *)(dst->op_params))[3]; - const int32_t d0 = ((const int32_t *)(dst->op_params))[4]; - const int32_t d1 = ((const int32_t *)(dst->op_params))[5]; - - const bool is_2D = ((const int32_t *)(dst->op_params))[6] == 1; - - const int32_t N = src1->ne[is_2D ? 3 : 2]; - const int32_t IC = src1->ne[is_2D ? 2 : 1]; - const int32_t IH = is_2D ? src1->ne[1] : 1; - const int32_t IW = src1->ne[0]; - - const int32_t KH = is_2D ? src0->ne[1] : 1; - const int32_t KW = src0->ne[0]; - - const int32_t OH = is_2D ? dst->ne[2] : 1; - const int32_t OW = dst->ne[1]; - - const int32_t CHW = IC * KH * KW; - - const int32_t ofs0 = src1->nb[is_2D ? 3 : 2] / 4; - const int32_t ofs1 = src1->nb[is_2D ? 2 : 1] / 4; - - id pipeline = nil; - - switch (dst->type) { - case GGML_TYPE_F32: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_IM2COL_F32].pipeline; break; - case GGML_TYPE_F16: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_IM2COL_F16].pipeline; break; - default: GGML_ASSERT(false); - }; - - [encoder setComputePipelineState:pipeline]; - [encoder setBuffer:id_src1 offset:offs_src1 atIndex:0]; - [encoder setBuffer:id_dst offset:offs_dst atIndex:1]; - [encoder setBytes:&ofs0 length:sizeof( int32_t) atIndex:2]; - [encoder setBytes:&ofs1 length:sizeof( int32_t) atIndex:3]; - [encoder setBytes:&IW length:sizeof( int32_t) atIndex:4]; - [encoder setBytes:&IH length:sizeof( int32_t) atIndex:5]; - [encoder setBytes:&CHW length:sizeof( int32_t) atIndex:6]; - [encoder setBytes:&s0 length:sizeof( int32_t) atIndex:7]; - [encoder setBytes:&s1 length:sizeof( int32_t) atIndex:8]; - [encoder setBytes:&p0 length:sizeof( int32_t) atIndex:9]; - [encoder setBytes:&p1 length:sizeof( int32_t) atIndex:10]; - [encoder setBytes:&d0 length:sizeof( int32_t) atIndex:11]; - [encoder setBytes:&d1 length:sizeof( int32_t) atIndex:12]; - - [encoder dispatchThreadgroups:MTLSizeMake(IC, OH, OW) threadsPerThreadgroup:MTLSizeMake(N, KH, KW)]; - } break; - case GGML_OP_UPSCALE: - { - GGML_ASSERT(src0->type == GGML_TYPE_F32); - - const int sf = dst->op_params[0]; - - const id pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_UPSCALE_F32].pipeline; - - [encoder setComputePipelineState:pipeline]; - [encoder setBuffer:id_src0 offset:offs_src0 atIndex:0]; - [encoder setBuffer:id_dst offset:offs_dst atIndex:1]; - [encoder setBytes:&ne00 length:sizeof(ne00) atIndex:2]; - [encoder setBytes:&ne01 length:sizeof(ne01) atIndex:3]; - [encoder setBytes:&ne02 length:sizeof(ne02) atIndex:4]; - [encoder setBytes:&ne03 length:sizeof(ne03) atIndex:5]; - [encoder setBytes:&nb00 length:sizeof(nb00) atIndex:6]; - [encoder setBytes:&nb01 length:sizeof(nb01) atIndex:7]; - [encoder setBytes:&nb02 length:sizeof(nb02) atIndex:8]; - [encoder setBytes:&nb03 length:sizeof(nb03) atIndex:9]; - [encoder setBytes:&ne0 length:sizeof(ne0) atIndex:10]; - [encoder setBytes:&ne1 length:sizeof(ne1) atIndex:11]; - [encoder setBytes:&ne2 length:sizeof(ne2) atIndex:12]; - [encoder setBytes:&ne3 length:sizeof(ne3) atIndex:13]; - [encoder setBytes:&nb0 length:sizeof(nb0) atIndex:14]; - [encoder setBytes:&nb1 length:sizeof(nb1) atIndex:15]; - [encoder setBytes:&nb2 length:sizeof(nb2) atIndex:16]; - [encoder setBytes:&nb3 length:sizeof(nb3) atIndex:17]; - [encoder setBytes:&sf length:sizeof(sf) atIndex:18]; - - const int nth = MIN((int) pipeline.maxTotalThreadsPerThreadgroup, ne0); - - [encoder dispatchThreadgroups:MTLSizeMake(ne1, ne2, ne3) threadsPerThreadgroup:MTLSizeMake(nth, 1, 1)]; - } break; - case GGML_OP_PAD: - { - GGML_ASSERT(src0->type == GGML_TYPE_F32); - - id pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_PAD_F32].pipeline; - - [encoder setComputePipelineState:pipeline]; - [encoder setBuffer:id_src0 offset:offs_src0 atIndex:0]; - [encoder setBuffer:id_dst offset:offs_dst atIndex:1]; - [encoder setBytes:&ne00 length:sizeof(ne00) atIndex:2]; - [encoder setBytes:&ne01 length:sizeof(ne01) atIndex:3]; - [encoder setBytes:&ne02 length:sizeof(ne02) atIndex:4]; - [encoder setBytes:&ne03 length:sizeof(ne03) atIndex:5]; - [encoder setBytes:&nb00 length:sizeof(nb00) atIndex:6]; - [encoder setBytes:&nb01 length:sizeof(nb01) atIndex:7]; - [encoder setBytes:&nb02 length:sizeof(nb02) atIndex:8]; - [encoder setBytes:&nb03 length:sizeof(nb03) atIndex:9]; - [encoder setBytes:&ne0 length:sizeof(ne0) atIndex:10]; - [encoder setBytes:&ne1 length:sizeof(ne1) atIndex:11]; - [encoder setBytes:&ne2 length:sizeof(ne2) atIndex:12]; - [encoder setBytes:&ne3 length:sizeof(ne3) atIndex:13]; - [encoder setBytes:&nb0 length:sizeof(nb0) atIndex:14]; - [encoder setBytes:&nb1 length:sizeof(nb1) atIndex:15]; - [encoder setBytes:&nb2 length:sizeof(nb2) atIndex:16]; - [encoder setBytes:&nb3 length:sizeof(nb3) atIndex:17]; - - const int nth = MIN(1024, ne0); - - [encoder dispatchThreadgroups:MTLSizeMake(ne1, ne2, ne3) threadsPerThreadgroup:MTLSizeMake(nth, 1, 1)]; - } break; - case GGML_OP_ARANGE: - { - GGML_ASSERT(dst->type == GGML_TYPE_F32); - - float start; - float step; - - memcpy(&start, ((int32_t *) dst->op_params) + 0, sizeof(float)); - memcpy(&step, ((int32_t *) dst->op_params) + 2, sizeof(float)); - - id pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_ARANGE_F32].pipeline; - - [encoder setComputePipelineState:pipeline]; - [encoder setBuffer:id_dst offset:offs_dst atIndex:0]; - [encoder setBytes:&ne0 length:sizeof(ne0) atIndex:1]; - [encoder setBytes:&start length:sizeof(start) atIndex:2]; - [encoder setBytes:&step length:sizeof(step) atIndex:3]; - - const int nth = MIN(1024, ne0); - - [encoder dispatchThreadgroups:MTLSizeMake(1, 1, 1) threadsPerThreadgroup:MTLSizeMake(nth, 1, 1)]; - } break; - case GGML_OP_TIMESTEP_EMBEDDING: - { - GGML_ASSERT(src0->type == GGML_TYPE_F32); - - const int dim = dst->op_params[0]; - const int max_period = dst->op_params[1]; - - const int half = dim / 2; - - id pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_TIMESTEP_EMBEDDING_F32].pipeline; - - [encoder setComputePipelineState:pipeline]; - [encoder setBuffer:id_src0 offset:offs_src0 atIndex:0]; - [encoder setBuffer:id_dst offset:offs_dst atIndex:1]; - [encoder setBytes:&nb1 length:sizeof(nb1) atIndex:2]; - [encoder setBytes:&dim length:sizeof(dim) atIndex:3]; - [encoder setBytes:&max_period length:sizeof(max_period) atIndex:4]; - - const int nth = MIN(1024, half); - - [encoder dispatchThreadgroups:MTLSizeMake(ne00, 1, 1) threadsPerThreadgroup:MTLSizeMake(nth, 1, 1)]; - } break; - case GGML_OP_ARGSORT: - { - GGML_ASSERT(src0->type == GGML_TYPE_F32); - GGML_ASSERT( dst->type == GGML_TYPE_I32); - - const int nrows = ggml_nrows(src0); - - enum ggml_sort_order order = (enum ggml_sort_order) dst->op_params[0]; - - // bitonic sort requires the number of elements to be power of 2 - int64_t ne00_padded = 1; - while (ne00_padded < ne00) { - ne00_padded *= 2; - } - - // Metal kernels require the buffer size to be multiple of 16 bytes - // https://developer.apple.com/documentation/metal/mtlcomputecommandencoder/1443142-setthreadgroupmemorylength - const int mem_size = GGML_PAD(ne00_padded*sizeof(int32_t), 16); - - id pipeline = nil; - - switch (order) { - case GGML_SORT_ORDER_ASC: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_ARGSORT_F32_I32_ASC].pipeline; break; - case GGML_SORT_ORDER_DESC: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_ARGSORT_F32_I32_DESC].pipeline; break; - default: GGML_ASSERT(false); - }; - - [encoder setComputePipelineState:pipeline]; - [encoder setBuffer:id_src0 offset:offs_src0 atIndex:0]; - [encoder setBuffer:id_dst offset:offs_dst atIndex:1]; - [encoder setBytes:&ne00 length:sizeof( int64_t) atIndex:2]; - [encoder setBytes:&ne00_padded length:sizeof( int64_t) atIndex:3]; - [encoder setThreadgroupMemoryLength:mem_size atIndex:0]; - - [encoder dispatchThreadgroups:MTLSizeMake(1, nrows, 1) threadsPerThreadgroup:MTLSizeMake(ne00_padded, 1, 1)]; - } break; - case GGML_OP_LEAKY_RELU: - { - GGML_ASSERT(src0->type == GGML_TYPE_F32); - - float slope; - memcpy(&slope, dst->op_params, sizeof(float)); - - id pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_LEAKY_RELU_F32].pipeline; - - [encoder setComputePipelineState:pipeline]; - [encoder setBuffer:id_src0 offset:offs_src0 atIndex:0]; - [encoder setBuffer:id_dst offset:offs_dst atIndex:1]; - [encoder setBytes:&slope length:sizeof(slope) atIndex:2]; - - const int64_t n = ggml_nelements(dst); - - [encoder dispatchThreadgroups:MTLSizeMake(n, 1, 1) threadsPerThreadgroup:MTLSizeMake(1, 1, 1)]; - } break; - case GGML_OP_DUP: - case GGML_OP_CPY: - case GGML_OP_CONT: - { - GGML_ASSERT(ne00 % ggml_blck_size(src0->type) == 0); - - int nth = MIN(1024, ne00/ggml_blck_size(src0->type)); - - id pipeline = nil; - - switch (src0t) { - case GGML_TYPE_F32: - { - GGML_ASSERT(ne0 % ggml_blck_size(dst->type) == 0); - - switch (dstt) { - case GGML_TYPE_F16: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_CPY_F32_F16].pipeline; break; - case GGML_TYPE_F32: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_CPY_F32_F32].pipeline; break; - case GGML_TYPE_Q8_0: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_CPY_F32_Q8_0].pipeline; break; - case GGML_TYPE_Q4_0: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_CPY_F32_Q4_0].pipeline; break; - case GGML_TYPE_Q4_1: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_CPY_F32_Q4_1].pipeline; break; - case GGML_TYPE_Q5_0: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_CPY_F32_Q5_0].pipeline; break; - case GGML_TYPE_Q5_1: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_CPY_F32_Q5_1].pipeline; break; - case GGML_TYPE_IQ4_NL: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_CPY_F32_IQ4_NL].pipeline; break; - default: GGML_ASSERT(false && "not implemented"); - }; - } break; - case GGML_TYPE_F16: - { - switch (dstt) { - case GGML_TYPE_F16: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_CPY_F16_F16].pipeline; break; - case GGML_TYPE_F32: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_CPY_F16_F32].pipeline; break; - default: GGML_ASSERT(false && "not implemented"); - }; - } break; - default: GGML_ASSERT(false && "not implemented"); - } - - [encoder setComputePipelineState:pipeline]; - [encoder setBuffer:id_src0 offset:offs_src0 atIndex:0]; - [encoder setBuffer:id_dst offset:offs_dst atIndex:1]; - [encoder setBytes:&ne00 length:sizeof( int64_t) atIndex:2]; - [encoder setBytes:&ne01 length:sizeof( int64_t) atIndex:3]; - [encoder setBytes:&ne02 length:sizeof( int64_t) atIndex:4]; - [encoder setBytes:&ne03 length:sizeof( int64_t) atIndex:5]; - [encoder setBytes:&nb00 length:sizeof(uint64_t) atIndex:6]; - [encoder setBytes:&nb01 length:sizeof(uint64_t) atIndex:7]; - [encoder setBytes:&nb02 length:sizeof(uint64_t) atIndex:8]; - [encoder setBytes:&nb03 length:sizeof(uint64_t) atIndex:9]; - [encoder setBytes:&ne0 length:sizeof( int64_t) atIndex:10]; - [encoder setBytes:&ne1 length:sizeof( int64_t) atIndex:11]; - [encoder setBytes:&ne2 length:sizeof( int64_t) atIndex:12]; - [encoder setBytes:&ne3 length:sizeof( int64_t) atIndex:13]; - [encoder setBytes:&nb0 length:sizeof(uint64_t) atIndex:14]; - [encoder setBytes:&nb1 length:sizeof(uint64_t) atIndex:15]; - [encoder setBytes:&nb2 length:sizeof(uint64_t) atIndex:16]; - [encoder setBytes:&nb3 length:sizeof(uint64_t) atIndex:17]; - - [encoder dispatchThreadgroups:MTLSizeMake(ne01, ne02, ne03) threadsPerThreadgroup:MTLSizeMake(nth, 1, 1)]; - } break; - default: - { - GGML_METAL_LOG_ERROR("%s: error: node %3d, op = %8s not implemented\n", __func__, i, ggml_op_name(dst->op)); - GGML_ASSERT(false); - } - } - - if (should_capture) { - [encoder popDebugGroup]; - } - } - - [encoder endEncoding]; - - [command_buffer commit]; - }); - - // Wait for completion and check status of each command buffer - // needed to detect if the device ran out-of-memory for example (#1881) - - for (int i = 0; i < n_cb; ++i) { - id command_buffer = command_buffers[i]; - [command_buffer waitUntilCompleted]; - - MTLCommandBufferStatus status = [command_buffer status]; - if (status != MTLCommandBufferStatusCompleted) { - GGML_METAL_LOG_INFO("%s: command buffer %d failed with status %lu\n", __func__, i, status); - return GGML_STATUS_FAILED; - } - } - - if (should_capture) { - [[MTLCaptureManager sharedCaptureManager] stopCapture]; - } - - } - return GGML_STATUS_SUCCESS; -} - -//////////////////////////////////////////////////////////////////////////////// - -// backend interface - -// default buffer -static id g_backend_device = nil; -static int g_backend_device_ref_count = 0; - -static id ggml_backend_metal_get_device(void) { - if (g_backend_device == nil) { - g_backend_device = MTLCreateSystemDefaultDevice(); - } - - g_backend_device_ref_count++; - - return g_backend_device; -} - -static void ggml_backend_metal_free_device(void) { - assert(g_backend_device_ref_count > 0); - - g_backend_device_ref_count--; - - if (g_backend_device_ref_count == 0) { - [g_backend_device release]; - g_backend_device = nil; - } -} - -GGML_CALL static const char * ggml_backend_metal_buffer_get_name(ggml_backend_buffer_t buffer) { - return "Metal"; - - UNUSED(buffer); -} - -GGML_CALL static void ggml_backend_metal_buffer_free_buffer(ggml_backend_buffer_t buffer) { - struct ggml_backend_metal_buffer_context * ctx = (struct ggml_backend_metal_buffer_context *)buffer->context; - - for (int i = 0; i < ctx->n_buffers; i++) { - [ctx->buffers[i].metal release]; - } - ggml_backend_metal_free_device(); - - if (ctx->owned) { - free(ctx->all_data); - } - - free(ctx); -} - -GGML_CALL static void * ggml_backend_metal_buffer_get_base(ggml_backend_buffer_t buffer) { - struct ggml_backend_metal_buffer_context * ctx = (struct ggml_backend_metal_buffer_context *)buffer->context; - - return ctx->all_data; -} - -GGML_CALL static void ggml_backend_metal_buffer_set_tensor(ggml_backend_buffer_t buffer, struct ggml_tensor * tensor, const void * data, size_t offset, size_t size) { - memcpy((char *)tensor->data + offset, data, size); - - UNUSED(buffer); -} - -GGML_CALL static void ggml_backend_metal_buffer_get_tensor(ggml_backend_buffer_t buffer, const struct ggml_tensor * tensor, void * data, size_t offset, size_t size) { - memcpy(data, (const char *)tensor->data + offset, size); - - UNUSED(buffer); -} - -GGML_CALL static bool ggml_backend_metal_buffer_cpy_tensor(ggml_backend_buffer_t buffer, const struct ggml_tensor * src, struct ggml_tensor * dst) { - if (ggml_backend_buffer_is_host(src->buffer)) { - memcpy(dst->data, src->data, ggml_nbytes(src)); - return true; - } - return false; - - UNUSED(buffer); -} - -GGML_CALL static void ggml_backend_metal_buffer_clear(ggml_backend_buffer_t buffer, uint8_t value) { - struct ggml_backend_metal_buffer_context * ctx = (struct ggml_backend_metal_buffer_context *)buffer->context; - - memset(ctx->all_data, value, ctx->all_size); -} - -static struct ggml_backend_buffer_i ggml_backend_metal_buffer_i = { - /* .get_name = */ ggml_backend_metal_buffer_get_name, - /* .free_buffer = */ ggml_backend_metal_buffer_free_buffer, - /* .get_base = */ ggml_backend_metal_buffer_get_base, - /* .init_tensor = */ NULL, - /* .set_tensor = */ ggml_backend_metal_buffer_set_tensor, - /* .get_tensor = */ ggml_backend_metal_buffer_get_tensor, - /* .cpy_tensor = */ ggml_backend_metal_buffer_cpy_tensor, - /* .clear = */ ggml_backend_metal_buffer_clear, - /* .reset = */ NULL, -}; - -// default buffer type - -GGML_CALL static const char * ggml_backend_metal_buffer_type_get_name(ggml_backend_buffer_type_t buft) { - return "Metal"; - - UNUSED(buft); -} - -static void ggml_backend_metal_log_allocated_size(id device) { -#if TARGET_OS_OSX || (TARGET_OS_IOS && __clang_major__ >= 15) - if (@available(macOS 10.12, iOS 16.0, *)) { - GGML_METAL_LOG_INFO(", (%8.2f / %8.2f)", - device.currentAllocatedSize / 1024.0 / 1024.0, - device.recommendedMaxWorkingSetSize / 1024.0 / 1024.0); - - if (device.currentAllocatedSize > device.recommendedMaxWorkingSetSize) { - GGML_METAL_LOG_WARN("%s: warning: current allocated size is greater than the recommended max working set size\n", __func__); - } else { - GGML_METAL_LOG_INFO("\n"); - } - } else { - GGML_METAL_LOG_INFO(", (%8.2f)\n", device.currentAllocatedSize / 1024.0 / 1024.0); - } -#endif - UNUSED(device); -} - -GGML_CALL static ggml_backend_buffer_t ggml_backend_metal_buffer_type_alloc_buffer(ggml_backend_buffer_type_t buft, size_t size) { - struct ggml_backend_metal_buffer_context * ctx = malloc(sizeof(struct ggml_backend_metal_buffer_context)); - - const size_t size_page = sysconf(_SC_PAGESIZE); - - size_t size_aligned = size; - if ((size_aligned % size_page) != 0) { - size_aligned += (size_page - (size_aligned % size_page)); - } - - id device = ggml_backend_metal_get_device(); - - ctx->all_data = ggml_metal_host_malloc(size_aligned); - ctx->all_size = size_aligned; - ctx->owned = true; - ctx->n_buffers = 1; - - ctx->buffers[0].data = ctx->all_data; - ctx->buffers[0].size = size; - ctx->buffers[0].metal = [device newBufferWithBytesNoCopy:ctx->all_data - length:size_aligned - options:MTLResourceStorageModeShared - deallocator:nil]; - - if (ctx->buffers[0].metal == nil) { - GGML_METAL_LOG_ERROR("%s: error: failed to allocate buffer, size = %8.2f MiB\n", __func__, size_aligned / 1024.0 / 1024.0); - free(ctx); - ggml_backend_metal_free_device(); - return NULL; - } - - GGML_METAL_LOG_INFO("%s: allocated buffer, size = %8.2f MiB", __func__, size_aligned / 1024.0 / 1024.0); - ggml_backend_metal_log_allocated_size(device); - - return ggml_backend_buffer_init(buft, ggml_backend_metal_buffer_i, ctx, size); -} - -GGML_CALL static size_t ggml_backend_metal_buffer_type_get_alignment(ggml_backend_buffer_type_t buft) { - return 32; - UNUSED(buft); -} - -GGML_CALL static size_t ggml_backend_metal_buffer_type_get_max_size(ggml_backend_buffer_type_t buft) { - id device = ggml_backend_metal_get_device(); - size_t max_size = device.maxBufferLength; - ggml_backend_metal_free_device(); - - return max_size; - - UNUSED(buft); -} - -GGML_CALL static bool ggml_backend_metal_buffer_type_supports_backend(ggml_backend_buffer_type_t buft, ggml_backend_t backend) { - return ggml_backend_is_metal(backend) || ggml_backend_is_cpu(backend); - - UNUSED(buft); -} - -GGML_CALL static bool ggml_backend_metal_buffer_type_is_host(ggml_backend_buffer_type_t buft) { - return true; - - UNUSED(buft); -} - -GGML_CALL ggml_backend_buffer_type_t ggml_backend_metal_buffer_type(void) { - static struct ggml_backend_buffer_type ggml_backend_buffer_type_metal = { - /* .iface = */ { - /* .get_name = */ ggml_backend_metal_buffer_type_get_name, - /* .alloc_buffer = */ ggml_backend_metal_buffer_type_alloc_buffer, - /* .get_alignment = */ ggml_backend_metal_buffer_type_get_alignment, - /* .get_max_size = */ ggml_backend_metal_buffer_type_get_max_size, - /* .get_alloc_size = */ NULL, // defaults to ggml_nbytes - /* .supports_backend = */ ggml_backend_metal_buffer_type_supports_backend, - /* .is_host = */ ggml_backend_metal_buffer_type_is_host, - }, - /* .context = */ NULL, - }; - - return &ggml_backend_buffer_type_metal; -} - -// buffer from ptr - -GGML_CALL ggml_backend_buffer_t ggml_backend_metal_buffer_from_ptr(void * data, size_t size, size_t max_size) { - struct ggml_backend_metal_buffer_context * ctx = malloc(sizeof(struct ggml_backend_metal_buffer_context)); - - ctx->all_data = data; - ctx->all_size = size; - ctx->owned = false; - ctx->n_buffers = 0; - - const size_t size_page = sysconf(_SC_PAGESIZE); - - // page-align the data ptr - { - const uintptr_t offs = (uintptr_t) data % size_page; - data = (void *) ((char *) data - offs); - size += offs; - } - - size_t size_aligned = size; - if ((size_aligned % size_page) != 0) { - size_aligned += (size_page - (size_aligned % size_page)); - } - - id device = ggml_backend_metal_get_device(); - - // the buffer fits into the max buffer size allowed by the device - if (size_aligned <= device.maxBufferLength) { - ctx->buffers[ctx->n_buffers].data = data; - ctx->buffers[ctx->n_buffers].size = size; - - ctx->buffers[ctx->n_buffers].metal = [device newBufferWithBytesNoCopy:data length:size_aligned options:MTLResourceStorageModeShared deallocator:nil]; - - if (ctx->buffers[ctx->n_buffers].metal == nil) { - GGML_METAL_LOG_ERROR("%s: error: failed to allocate buffer, size = %8.2f MiB\n", __func__, size_aligned / 1024.0 / 1024.0); - return false; - } - - GGML_METAL_LOG_INFO("%s: allocated buffer, size = %8.2f MiB", __func__, size_aligned / 1024.0 / 1024.0); - - ++ctx->n_buffers; - } else { - // this overlap between the views will guarantee that the tensor with the maximum size will fully fit into - // one of the views - const size_t size_ovlp = ((max_size + size_page - 1) / size_page + 1) * size_page; // round-up 2 pages just in case - const size_t size_step = device.maxBufferLength - size_ovlp; - const size_t size_view = device.maxBufferLength; - - for (size_t i = 0; i < size; i += size_step) { - const size_t size_step_aligned = (i + size_view <= size) ? size_view : (size_aligned - i); - - ctx->buffers[ctx->n_buffers].data = (void *) ((uint8_t *) data + i); - ctx->buffers[ctx->n_buffers].size = size_step_aligned; - - ctx->buffers[ctx->n_buffers].metal = [device newBufferWithBytesNoCopy:(void *) ((uint8_t *) data + i) length:size_step_aligned options:MTLResourceStorageModeShared deallocator:nil]; - - if (ctx->buffers[ctx->n_buffers].metal == nil) { - GGML_METAL_LOG_ERROR("%s: error: failed to allocate buffer, size = %8.2f MiB\n", __func__, size_step_aligned / 1024.0 / 1024.0); - return false; - } - - GGML_METAL_LOG_INFO("%s: allocated buffer, size = %8.2f MiB, offs = %12ld", __func__, size_step_aligned / 1024.0 / 1024.0, i); - if (i + size_step < size) { - GGML_METAL_LOG_INFO("\n"); - } - - ++ctx->n_buffers; - } - } - - ggml_backend_metal_log_allocated_size(device); - - return ggml_backend_buffer_init(ggml_backend_metal_buffer_type(), ggml_backend_metal_buffer_i, ctx, size); -} - -// backend - -GGML_CALL static const char * ggml_backend_metal_name(ggml_backend_t backend) { - return "Metal"; - - UNUSED(backend); -} - -GGML_CALL static void ggml_backend_metal_free(ggml_backend_t backend) { - struct ggml_metal_context * ctx = (struct ggml_metal_context *)backend->context; - ggml_metal_free(ctx); - free(backend); -} - -GGML_CALL static ggml_backend_buffer_type_t ggml_backend_metal_get_default_buffer_type(ggml_backend_t backend) { - return ggml_backend_metal_buffer_type(); - - UNUSED(backend); -} - -GGML_CALL static enum ggml_status ggml_backend_metal_graph_compute(ggml_backend_t backend, struct ggml_cgraph * cgraph) { - struct ggml_metal_context * metal_ctx = (struct ggml_metal_context *)backend->context; - - return ggml_metal_graph_compute(metal_ctx, cgraph); -} - -GGML_CALL static bool ggml_backend_metal_supports_op(ggml_backend_t backend, const struct ggml_tensor * op) { - struct ggml_metal_context * metal_ctx = (struct ggml_metal_context *)backend->context; - - return ggml_metal_supports_op(metal_ctx, op); -} - -static struct ggml_backend_i ggml_backend_metal_i = { - /* .get_name = */ ggml_backend_metal_name, - /* .free = */ ggml_backend_metal_free, - /* .get_default_buffer_type = */ ggml_backend_metal_get_default_buffer_type, - /* .set_tensor_async = */ NULL, - /* .get_tensor_async = */ NULL, - /* .cpy_tensor_async = */ NULL, - /* .synchronize = */ NULL, - /* .graph_plan_create = */ NULL, - /* .graph_plan_free = */ NULL, - /* .graph_plan_compute = */ NULL, - /* .graph_compute = */ ggml_backend_metal_graph_compute, - /* .supports_op = */ ggml_backend_metal_supports_op, - /* .offload_op = */ NULL, - /* .event_new = */ NULL, - /* .event_free = */ NULL, - /* .event_record = */ NULL, - /* .event_wait = */ NULL, - /* .event_synchronize = */ NULL, -}; - -void ggml_backend_metal_log_set_callback(ggml_log_callback log_callback, void * user_data) { - ggml_metal_log_callback = log_callback; - ggml_metal_log_user_data = user_data; -} - -static ggml_guid_t ggml_backend_metal_guid(void) { - static ggml_guid guid = { 0x81, 0xa1, 0x8b, 0x1e, 0x71, 0xec, 0x79, 0xed, 0x2b, 0x85, 0xdc, 0x8a, 0x61, 0x98, 0x30, 0xe6 }; - return &guid; -} - -ggml_backend_t ggml_backend_metal_init(void) { - struct ggml_metal_context * ctx = ggml_metal_init(GGML_DEFAULT_N_THREADS); - - if (ctx == NULL) { - return NULL; - } - - ggml_backend_t metal_backend = malloc(sizeof(struct ggml_backend)); - - *metal_backend = (struct ggml_backend) { - /* .guid = */ ggml_backend_metal_guid(), - /* .interface = */ ggml_backend_metal_i, - /* .context = */ ctx, - }; - - return metal_backend; -} - -bool ggml_backend_is_metal(ggml_backend_t backend) { - return backend != NULL && ggml_guid_matches(backend->guid, ggml_backend_metal_guid()); -} - -void ggml_backend_metal_set_n_cb(ggml_backend_t backend, int n_cb) { - GGML_ASSERT(ggml_backend_is_metal(backend)); - - struct ggml_metal_context * ctx = (struct ggml_metal_context *)backend->context; - - ctx->n_cb = MIN(n_cb, GGML_METAL_MAX_BUFFERS); -} - -bool ggml_backend_metal_supports_family(ggml_backend_t backend, int family) { - GGML_ASSERT(ggml_backend_is_metal(backend)); - - struct ggml_metal_context * ctx = (struct ggml_metal_context *)backend->context; - - return [ctx->device supportsFamily:(MTLGPUFamilyApple1 + family - 1)]; -} - -void ggml_backend_metal_capture_next_compute(ggml_backend_t backend) { - GGML_ASSERT(ggml_backend_is_metal(backend)); - - struct ggml_metal_context * ctx = (struct ggml_metal_context *)backend->context; - ctx->should_capture_next_compute = true; -} - -GGML_CALL ggml_backend_t ggml_backend_reg_metal_init(const char * params, void * user_data); // silence warning - -GGML_CALL ggml_backend_t ggml_backend_reg_metal_init(const char * params, void * user_data) { - return ggml_backend_metal_init(); - - GGML_UNUSED(params); - GGML_UNUSED(user_data); -} diff --git a/ggml-metal.metal b/ggml-metal.metal deleted file mode 100644 index 191880af179..00000000000 --- a/ggml-metal.metal +++ /dev/null @@ -1,6246 +0,0 @@ -#define GGML_COMMON_DECL_METAL -#define GGML_COMMON_IMPL_METAL -#include "ggml-common.h" - -#include - -using namespace metal; - -#define MAX(x, y) ((x) > (y) ? (x) : (y)) -#define MIN(x, y) ((x) < (y) ? (x) : (y)) -#define SWAP(x, y) { auto tmp = (x); (x) = (y); (y) = tmp; } - -#define N_SIMDWIDTH 32 // assuming SIMD group size is 32 - -enum ggml_sort_order { - GGML_SORT_ORDER_ASC, - GGML_SORT_ORDER_DESC, -}; - -// general-purpose kernel for addition, multiplication and division of two tensors -// pros: works for non-contiguous tensors, supports broadcast across all dims -// cons: not very efficient -kernel void kernel_add( - device const char * src0, - device const char * src1, - device char * dst, - constant int64_t & ne00, - constant int64_t & ne01, - constant int64_t & ne02, - constant int64_t & ne03, - constant uint64_t & nb00, - constant uint64_t & nb01, - constant uint64_t & nb02, - constant uint64_t & nb03, - constant int64_t & ne10, - constant int64_t & ne11, - constant int64_t & ne12, - constant int64_t & ne13, - constant uint64_t & nb10, - constant uint64_t & nb11, - constant uint64_t & nb12, - constant uint64_t & nb13, - constant int64_t & ne0, - constant int64_t & ne1, - constant int64_t & ne2, - constant int64_t & ne3, - constant uint64_t & nb0, - constant uint64_t & nb1, - constant uint64_t & nb2, - constant uint64_t & nb3, - constant int64_t & offs, - uint3 tgpig[[threadgroup_position_in_grid]], - uint3 tpitg[[thread_position_in_threadgroup]], - uint3 ntg[[threads_per_threadgroup]]) { - const int64_t i03 = tgpig.z; - const int64_t i02 = tgpig.y; - const int64_t i01 = tgpig.x; - - const int64_t i13 = i03 % ne13; - const int64_t i12 = i02 % ne12; - const int64_t i11 = i01 % ne11; - - device const char * src0_ptr = src0 + i03*nb03 + i02*nb02 + i01*nb01 + offs; - device const char * src1_ptr = src1 + i13*nb13 + i12*nb12 + i11*nb11; - device char * dst_ptr = dst + i03*nb3 + i02*nb2 + i01*nb1 + offs; - - for (int i0 = tpitg.x; i0 < ne0; i0 += ntg.x) { - const int i10 = i0 % ne10; - *((device float *)(dst_ptr + i0*nb0)) = *((device float *)(src0_ptr + i0*nb00)) + *((device float *)(src1_ptr + i10*nb10)); - } -} - -kernel void kernel_mul( - device const char * src0, - device const char * src1, - device char * dst, - constant int64_t & ne00, - constant int64_t & ne01, - constant int64_t & ne02, - constant int64_t & ne03, - constant uint64_t & nb00, - constant uint64_t & nb01, - constant uint64_t & nb02, - constant uint64_t & nb03, - constant int64_t & ne10, - constant int64_t & ne11, - constant int64_t & ne12, - constant int64_t & ne13, - constant uint64_t & nb10, - constant uint64_t & nb11, - constant uint64_t & nb12, - constant uint64_t & nb13, - constant int64_t & ne0, - constant int64_t & ne1, - constant int64_t & ne2, - constant int64_t & ne3, - constant uint64_t & nb0, - constant uint64_t & nb1, - constant uint64_t & nb2, - constant uint64_t & nb3, - uint3 tgpig[[threadgroup_position_in_grid]], - uint3 tpitg[[thread_position_in_threadgroup]], - uint3 ntg[[threads_per_threadgroup]]) { - const int64_t i03 = tgpig.z; - const int64_t i02 = tgpig.y; - const int64_t i01 = tgpig.x; - - const int64_t i13 = i03 % ne13; - const int64_t i12 = i02 % ne12; - const int64_t i11 = i01 % ne11; - - device const char * src0_ptr = src0 + i03*nb03 + i02*nb02 + i01*nb01; - device const char * src1_ptr = src1 + i13*nb13 + i12*nb12 + i11*nb11; - device char * dst_ptr = dst + i03*nb3 + i02*nb2 + i01*nb1; - - for (int i0 = tpitg.x; i0 < ne0; i0 += ntg.x) { - const int i10 = i0 % ne10; - *((device float *)(dst_ptr + i0*nb0)) = *((device float *)(src0_ptr + i0*nb00)) * *((device float *)(src1_ptr + i10*nb10)); - } -} - -kernel void kernel_div( - device const char * src0, - device const char * src1, - device char * dst, - constant int64_t & ne00, - constant int64_t & ne01, - constant int64_t & ne02, - constant int64_t & ne03, - constant uint64_t & nb00, - constant uint64_t & nb01, - constant uint64_t & nb02, - constant uint64_t & nb03, - constant int64_t & ne10, - constant int64_t & ne11, - constant int64_t & ne12, - constant int64_t & ne13, - constant uint64_t & nb10, - constant uint64_t & nb11, - constant uint64_t & nb12, - constant uint64_t & nb13, - constant int64_t & ne0, - constant int64_t & ne1, - constant int64_t & ne2, - constant int64_t & ne3, - constant uint64_t & nb0, - constant uint64_t & nb1, - constant uint64_t & nb2, - constant uint64_t & nb3, - uint3 tgpig[[threadgroup_position_in_grid]], - uint3 tpitg[[thread_position_in_threadgroup]], - uint3 ntg[[threads_per_threadgroup]]) { - const int64_t i03 = tgpig.z; - const int64_t i02 = tgpig.y; - const int64_t i01 = tgpig.x; - - const int64_t i13 = i03 % ne13; - const int64_t i12 = i02 % ne12; - const int64_t i11 = i01 % ne11; - - device const char * src0_ptr = src0 + i03*nb03 + i02*nb02 + i01*nb01; - device const char * src1_ptr = src1 + i13*nb13 + i12*nb12 + i11*nb11; - device char * dst_ptr = dst + i03*nb3 + i02*nb2 + i01*nb1; - - for (int i0 = tpitg.x; i0 < ne0; i0 += ntg.x) { - const int i10 = i0 % ne10; - *((device float *)(dst_ptr + i0*nb0)) = *((device float *)(src0_ptr + i0*nb00)) / *((device float *)(src1_ptr + i10*nb10)); - } -} - -// assumption: src1 is a row -// broadcast src1 into src0 -kernel void kernel_add_row( - device const float4 * src0, - device const float4 * src1, - device float4 * dst, - constant uint64_t & nb [[buffer(28)]], - uint tpig[[thread_position_in_grid]]) { - dst[tpig] = src0[tpig] + src1[tpig % nb]; -} - -kernel void kernel_mul_row( - device const float4 * src0, - device const float4 * src1, - device float4 * dst, - constant uint64_t & nb [[buffer(28)]], - uint tpig[[thread_position_in_grid]]) { - dst[tpig] = src0[tpig] * src1[tpig % nb]; -} - -kernel void kernel_div_row( - device const float4 * src0, - device const float4 * src1, - device float4 * dst, - constant uint64_t & nb [[buffer(28)]], - uint tpig[[thread_position_in_grid]]) { - dst[tpig] = src0[tpig] / src1[tpig % nb]; -} - -kernel void kernel_scale( - device const float * src0, - device float * dst, - constant float & scale, - uint tpig[[thread_position_in_grid]]) { - dst[tpig] = src0[tpig] * scale; -} - -kernel void kernel_scale_4( - device const float4 * src0, - device float4 * dst, - constant float & scale, - uint tpig[[thread_position_in_grid]]) { - dst[tpig] = src0[tpig] * scale; -} - -kernel void kernel_clamp( - device const float * src0, - device float * dst, - constant float & min, - constant float & max, - uint tpig[[thread_position_in_grid]]) { - dst[tpig] = src0[tpig] < min ? min : (src0[tpig] > max ? max : src0[tpig]); -} - -kernel void kernel_relu( - device const float * src0, - device float * dst, - uint tpig[[thread_position_in_grid]]) { - dst[tpig] = max(0.0f, src0[tpig]); -} - -kernel void kernel_tanh( - device const float * src0, - device float * dst, - uint tpig[[thread_position_in_grid]]) { - device const float & x = src0[tpig]; - dst[tpig] = precise::tanh(x); -} - -constant float GELU_COEF_A = 0.044715f; -constant float GELU_QUICK_COEF = -1.702f; -constant float SQRT_2_OVER_PI = 0.79788456080286535587989211986876f; - -kernel void kernel_gelu( - device const float * src0, - device float * dst, - uint tpig[[thread_position_in_grid]]) { - device const float & x = src0[tpig]; - - dst[tpig] = 0.5f*x*(1.0f + precise::tanh(SQRT_2_OVER_PI*x*(1.0f + GELU_COEF_A*x*x))); -} - -kernel void kernel_gelu_4( - device const float4 * src0, - device float4 * dst, - uint tpig[[thread_position_in_grid]]) { - device const float4 & x = src0[tpig]; - - // BEWARE !!! - // Simply using "tanh" instead of "precise::tanh" will sometimes results in NaNs! - // This was observed with Falcon 7B and 40B models - // - dst[tpig] = 0.5f*x*(1.0f + precise::tanh(SQRT_2_OVER_PI*x*(1.0f + GELU_COEF_A*x*x))); -} - -kernel void kernel_gelu_quick( - device const float * src0, - device float * dst, - uint tpig[[thread_position_in_grid]]) { - device const float & x = src0[tpig]; - - dst[tpig] = x*(1.0f/(1.0f+exp(GELU_QUICK_COEF*x))); -} - -kernel void kernel_gelu_quick_4( - device const float4 * src0, - device float4 * dst, - uint tpig[[thread_position_in_grid]]) { - device const float4 & x = src0[tpig]; - - dst[tpig] = x*(1.0f/(1.0f+exp(GELU_QUICK_COEF*x))); -} - -kernel void kernel_silu( - device const float * src0, - device float * dst, - uint tpig[[thread_position_in_grid]]) { - device const float & x = src0[tpig]; - dst[tpig] = x / (1.0f + exp(-x)); -} - -kernel void kernel_silu_4( - device const float4 * src0, - device float4 * dst, - uint tpig[[thread_position_in_grid]]) { - device const float4 & x = src0[tpig]; - dst[tpig] = x / (1.0f + exp(-x)); -} - -kernel void kernel_sqr( - device const float * src0, - device float * dst, - uint tpig[[thread_position_in_grid]]) { - dst[tpig] = src0[tpig] * src0[tpig]; -} - -kernel void kernel_sum_rows( - device const float * src0, - device float * dst, - constant int64_t & ne00, - constant int64_t & ne01, - constant int64_t & ne02, - constant int64_t & ne03, - constant uint64_t & nb00, - constant uint64_t & nb01, - constant uint64_t & nb02, - constant uint64_t & nb03, - constant int64_t & ne10, - constant int64_t & ne11, - constant int64_t & ne12, - constant int64_t & ne13, - constant uint64_t & nb10, - constant uint64_t & nb11, - constant uint64_t & nb12, - constant uint64_t & nb13, - constant int64_t & ne0, - constant int64_t & ne1, - constant int64_t & ne2, - constant int64_t & ne3, - constant uint64_t & nb0, - constant uint64_t & nb1, - constant uint64_t & nb2, - constant uint64_t & nb3, - uint3 tpig[[thread_position_in_grid]]) { - int64_t i3 = tpig.z; - int64_t i2 = tpig.y; - int64_t i1 = tpig.x; - - if (i3 >= ne03 || i2 >= ne02 || i1 >= ne01) { - return; - } - - device const float * src_row = (device const float *) ((device const char *) src0 + i1*nb01 + i2*nb02 + i3*nb03); - device float * dst_row = (device float *) ((device char *) dst + i1*nb1 + i2*nb2 + i3*nb3); - - float row_sum = 0; - - for (int64_t i0 = 0; i0 < ne00; i0++) { - row_sum += src_row[i0]; - } - - dst_row[0] = row_sum; -} - -kernel void kernel_soft_max( - device const float * src0, - device const float * src1, - device const float * src2, - device float * dst, - constant int64_t & ne00, - constant int64_t & ne01, - constant int64_t & ne02, - constant float & scale, - constant float & max_bias, - constant float & m0, - constant float & m1, - constant uint32_t & n_head_log2, - threadgroup float * buf [[threadgroup(0)]], - uint tgpig[[threadgroup_position_in_grid]], - uint tpitg[[thread_position_in_threadgroup]], - uint sgitg[[simdgroup_index_in_threadgroup]], - uint tiisg[[thread_index_in_simdgroup]], - uint ntg[[threads_per_threadgroup]]) { - const int64_t i03 = (tgpig) / (ne02*ne01); - const int64_t i02 = (tgpig - i03*ne02*ne01) / ne01; - const int64_t i01 = (tgpig - i03*ne02*ne01 - i02*ne01); - - device const float * psrc0 = src0 + i03*ne02*ne01*ne00 + i02*ne01*ne00 + i01*ne00; - device const float * pmask = src1 != src0 ? src1 + i01*ne00 : nullptr; - device const float * ppos = src2 != src0 ? src2 : nullptr; - device float * pdst = dst + i03*ne02*ne01*ne00 + i02*ne01*ne00 + i01*ne00; - - float slope = 0.0f; - - // ALiBi - if (max_bias > 0.0f) { - const int64_t h = i02; - - const float base = h < n_head_log2 ? m0 : m1; - const int exp = h < n_head_log2 ? h + 1 : 2*(h - n_head_log2) + 1; - - slope = pow(base, exp); - } - - // parallel max - float lmax = -INFINITY; - - for (int i00 = tpitg; i00 < ne00; i00 += ntg) { - lmax = MAX(lmax, psrc0[i00]*scale + (pmask ? pmask[i00] : 0.0f) + (ppos ? slope*ppos[i00] : 0.0f)); - } - - // find the max value in the block - float max_val = simd_max(lmax); - if (ntg > N_SIMDWIDTH) { - if (sgitg == 0) { - buf[tiisg] = -INFINITY; - } - - threadgroup_barrier(mem_flags::mem_threadgroup); - - if (tiisg == 0) { - buf[sgitg] = max_val; - } - - threadgroup_barrier(mem_flags::mem_threadgroup); - - max_val = buf[tiisg]; - max_val = simd_max(max_val); - } - - // parallel sum - float lsum = 0.0f; - for (int i00 = tpitg; i00 < ne00; i00 += ntg) { - const float exp_psrc0 = exp((psrc0[i00]*scale + (pmask ? pmask[i00] : 0.0f) + (ppos ? slope*ppos[i00] : 0.0f)) - max_val); - lsum += exp_psrc0; - pdst[i00] = exp_psrc0; - } - - // This barrier fixes a failing test - // ref: https://github.com/ggerganov/ggml/pull/621#discussion_r1425156335 - threadgroup_barrier(mem_flags::mem_none); - - float sum = simd_sum(lsum); - - if (ntg > N_SIMDWIDTH) { - if (sgitg == 0) { - buf[tiisg] = 0.0f; - } - - threadgroup_barrier(mem_flags::mem_threadgroup); - - if (tiisg == 0) { - buf[sgitg] = sum; - } - - threadgroup_barrier(mem_flags::mem_threadgroup); - - sum = buf[tiisg]; - sum = simd_sum(sum); - } - - const float inv_sum = 1.0f/sum; - - for (int i00 = tpitg; i00 < ne00; i00 += ntg) { - pdst[i00] *= inv_sum; - } -} - -kernel void kernel_soft_max_4( - device const float * src0, - device const float * src1, - device const float * src2, - device float * dst, - constant int64_t & ne00, - constant int64_t & ne01, - constant int64_t & ne02, - constant float & scale, - constant float & max_bias, - constant float & m0, - constant float & m1, - constant uint32_t & n_head_log2, - threadgroup float * buf [[threadgroup(0)]], - uint tgpig[[threadgroup_position_in_grid]], - uint tpitg[[thread_position_in_threadgroup]], - uint sgitg[[simdgroup_index_in_threadgroup]], - uint tiisg[[thread_index_in_simdgroup]], - uint ntg[[threads_per_threadgroup]]) { - const int64_t i03 = (tgpig) / (ne02*ne01); - const int64_t i02 = (tgpig - i03*ne02*ne01) / ne01; - const int64_t i01 = (tgpig - i03*ne02*ne01 - i02*ne01); - - device const float4 * psrc4 = (device const float4 *)(src0 + i03*ne02*ne01*ne00 + i02*ne01*ne00 + i01*ne00); - device const float4 * pmask = src1 != src0 ? (device const float4 *)(src1 + i01*ne00) : nullptr; - device const float4 * ppos = src2 != src0 ? (device const float4 *)(src2) : nullptr; - device float4 * pdst4 = (device float4 *)(dst + i03*ne02*ne01*ne00 + i02*ne01*ne00 + i01*ne00); - - float slope = 0.0f; - - if (max_bias > 0.0f) { - const int64_t h = i02; - - const float base = h < n_head_log2 ? m0 : m1; - const int exp = h < n_head_log2 ? h + 1 : 2*(h - n_head_log2) + 1; - - slope = pow(base, exp); - } - - // parallel max - float4 lmax4 = -INFINITY; - - for (int i00 = tpitg; i00 < ne00/4; i00 += ntg) { - lmax4 = fmax(lmax4, psrc4[i00]*scale + (pmask ? pmask[i00] : 0.0f) + (ppos ? slope*ppos[i00] : 0.0f)); - } - - const float lmax = MAX(MAX(lmax4[0], lmax4[1]), MAX(lmax4[2], lmax4[3])); - - float max_val = simd_max(lmax); - if (ntg > N_SIMDWIDTH) { - if (sgitg == 0) { - buf[tiisg] = -INFINITY; - } - - threadgroup_barrier(mem_flags::mem_threadgroup); - - if (tiisg == 0) { - buf[sgitg] = max_val; - } - - threadgroup_barrier(mem_flags::mem_threadgroup); - - max_val = buf[tiisg]; - max_val = simd_max(max_val); - } - - // parallel sum - float4 lsum4 = 0.0f; - for (int i00 = tpitg; i00 < ne00/4; i00 += ntg) { - const float4 exp_psrc4 = exp((psrc4[i00]*scale + (pmask ? pmask[i00] : 0.0f) + (ppos ? slope*ppos[i00] : 0.0f)) - max_val); - lsum4 += exp_psrc4; - pdst4[i00] = exp_psrc4; - } - - const float lsum = lsum4[0] + lsum4[1] + lsum4[2] + lsum4[3]; - - // This barrier fixes a failing test - // ref: https://github.com/ggerganov/ggml/pull/621#discussion_r1425156335 - threadgroup_barrier(mem_flags::mem_none); - - float sum = simd_sum(lsum); - - if (ntg > N_SIMDWIDTH) { - if (sgitg == 0) { - buf[tiisg] = 0.0f; - } - - threadgroup_barrier(mem_flags::mem_threadgroup); - - if (tiisg == 0) { - buf[sgitg] = sum; - } - - threadgroup_barrier(mem_flags::mem_threadgroup); - - sum = buf[tiisg]; - sum = simd_sum(sum); - } - - const float inv_sum = 1.0f/sum; - - for (int i00 = tpitg; i00 < ne00/4; i00 += ntg) { - pdst4[i00] *= inv_sum; - } -} - -kernel void kernel_diag_mask_inf( - device const float * src0, - device float * dst, - constant int64_t & ne00, - constant int64_t & ne01, - constant int & n_past, - uint3 tpig[[thread_position_in_grid]]) { - const int64_t i02 = tpig[2]; - const int64_t i01 = tpig[1]; - const int64_t i00 = tpig[0]; - - if (i00 > n_past + i01) { - dst[i02*ne01*ne00 + i01*ne00 + i00] = -INFINITY; - } else { - dst[i02*ne01*ne00 + i01*ne00 + i00] = src0[i02*ne01*ne00 + i01*ne00 + i00]; - } -} - -kernel void kernel_diag_mask_inf_8( - device const float4 * src0, - device float4 * dst, - constant int64_t & ne00, - constant int64_t & ne01, - constant int & n_past, - uint3 tpig[[thread_position_in_grid]]) { - - const int64_t i = 2*tpig[0]; - - dst[i+0] = src0[i+0]; - dst[i+1] = src0[i+1]; - int64_t i4 = 4*i; - const int64_t i02 = i4/(ne00*ne01); i4 -= i02*ne00*ne01; - const int64_t i01 = i4/(ne00); i4 -= i01*ne00; - const int64_t i00 = i4; - for (int k = 3; k >= 0; --k) { - if (i00 + 4 + k <= n_past + i01) { - break; - } - dst[i+1][k] = -INFINITY; - if (i00 + k > n_past + i01) { - dst[i][k] = -INFINITY; - } - } -} - -kernel void kernel_norm( - device const void * src0, - device float * dst, - constant int64_t & ne00, - constant uint64_t & nb01, - constant float & eps, - threadgroup float * sum [[threadgroup(0)]], - uint tgpig[[threadgroup_position_in_grid]], - uint tpitg[[thread_position_in_threadgroup]], - uint ntg[[threads_per_threadgroup]]) { - device const float * x = (device const float *) ((device const char *) src0 + tgpig*nb01); - // MEAN - // parallel sum - sum[tpitg] = 0.0f; - for (int i00 = tpitg; i00 < ne00; i00 += ntg) { - sum[tpitg] += x[i00]; - } - // reduce - threadgroup_barrier(mem_flags::mem_threadgroup); - for (uint i = ntg/2; i > 0; i /= 2) { - if (tpitg < i) { - sum[tpitg] += sum[tpitg + i]; - } - threadgroup_barrier(mem_flags::mem_threadgroup); - } - const float mean = sum[0] / ne00; - - // recenter and VARIANCE - threadgroup_barrier(mem_flags::mem_threadgroup); - device float * y = dst + tgpig*ne00; - sum[tpitg] = 0.0f; - for (int i00 = tpitg; i00 < ne00; i00 += ntg) { - y[i00] = x[i00] - mean; - sum[tpitg] += y[i00] * y[i00]; - } - - // reduce - threadgroup_barrier(mem_flags::mem_threadgroup); - for (uint i = ntg/2; i > 0; i /= 2) { - if (tpitg < i) { - sum[tpitg] += sum[tpitg + i]; - } - threadgroup_barrier(mem_flags::mem_threadgroup); - } - const float variance = sum[0] / ne00; - - const float scale = 1.0f/sqrt(variance + eps); - for (int i00 = tpitg; i00 < ne00; i00 += ntg) { - y[i00] = y[i00] * scale; - } -} - -kernel void kernel_rms_norm( - device const void * src0, - device float * dst, - constant int64_t & ne00, - constant uint64_t & nb01, - constant float & eps, - threadgroup float * buf [[threadgroup(0)]], - uint tgpig[[threadgroup_position_in_grid]], - uint tpitg[[thread_position_in_threadgroup]], - uint sgitg[[simdgroup_index_in_threadgroup]], - uint tiisg[[thread_index_in_simdgroup]], - uint ntg[[threads_per_threadgroup]]) { - device const float4 * x = (device const float4 *) ((device const char *) src0 + tgpig*nb01); - - float4 sumf = 0; - float all_sum = 0; - - // parallel sum - for (int i00 = tpitg; i00 < ne00/4; i00 += ntg) { - sumf += x[i00] * x[i00]; - } - all_sum = sumf[0] + sumf[1] + sumf[2] + sumf[3]; - all_sum = simd_sum(all_sum); - if (ntg > N_SIMDWIDTH) { - if (sgitg == 0) { - buf[tiisg] = 0.0f; - } - - threadgroup_barrier(mem_flags::mem_threadgroup); - - if (tiisg == 0) { - buf[sgitg] = all_sum; - } - - threadgroup_barrier(mem_flags::mem_threadgroup); - - all_sum = buf[tiisg]; - all_sum = simd_sum(all_sum); - } - - const float mean = all_sum/ne00; - const float scale = 1.0f/sqrt(mean + eps); - - device float4 * y = (device float4 *) (dst + tgpig*ne00); - for (int i00 = tpitg; i00 < ne00/4; i00 += ntg) { - y[i00] = x[i00] * scale; - } -} - -kernel void kernel_group_norm( - device const float * src0, - device float * dst, - constant int64_t & ne00, - constant int64_t & ne01, - constant int64_t & ne02, - constant uint64_t & nb00, - constant uint64_t & nb01, - constant uint64_t & nb02, - constant int32_t & n_groups, - constant float & eps, - threadgroup float * buf [[threadgroup(0)]], - uint tgpig[[threadgroup_position_in_grid]], - uint tpitg[[thread_position_in_threadgroup]], - uint sgitg[[simdgroup_index_in_threadgroup]], - uint tiisg[[thread_index_in_simdgroup]], - uint ntg[[threads_per_threadgroup]]) { - const int64_t ne = ne00*ne01*ne02; - const int64_t gs = ne00*ne01*((ne02 + n_groups - 1) / n_groups); - - int start = tgpig * gs; - int end = start + gs; - - start += tpitg; - - if (end >= ne) { - end = ne; - } - - float tmp = 0.0f; // partial sum for thread in warp - - for (int j = start; j < end; j += ntg) { - tmp += src0[j]; - } - - threadgroup_barrier(mem_flags::mem_threadgroup); - tmp = simd_sum(tmp); - if (ntg > N_SIMDWIDTH) { - if (sgitg == 0) { - buf[tiisg] = 0.0f; - } - - threadgroup_barrier(mem_flags::mem_threadgroup); - - if (tiisg == 0) { - buf[sgitg] = tmp; - } - - threadgroup_barrier(mem_flags::mem_threadgroup); - - tmp = buf[tiisg]; - tmp = simd_sum(tmp); - } - - const float mean = tmp / gs; - tmp = 0.0f; - - for (int j = start; j < end; j += ntg) { - float xi = src0[j] - mean; - dst[j] = xi; - tmp += xi * xi; - } - - tmp = simd_sum(tmp); - if (ntg > N_SIMDWIDTH) { - if (sgitg == 0) { - buf[tiisg] = 0.0f; - } - - threadgroup_barrier(mem_flags::mem_threadgroup); - - if (tiisg == 0) { - buf[sgitg] = tmp; - } - - threadgroup_barrier(mem_flags::mem_threadgroup); - - tmp = buf[tiisg]; - tmp = simd_sum(tmp); - } - - const float variance = tmp / gs; - const float scale = 1.0f/sqrt(variance + eps); - for (int j = start; j < end; j += ntg) { - dst[j] *= scale; - } -} - -// function for calculate inner product between half a q4_0 block and 16 floats (yl), sumy is SUM(yl[i]) -// il indicates where the q4 quants begin (0 or QK4_0/4) -// we assume that the yl's have been multiplied with the appropriate scale factor -// that corresponds to the missing bit shifts (1, 1/16, 1/256, 1/4096) -inline float block_q_n_dot_y(device const block_q4_0 * qb_curr, float sumy, thread float * yl, int il) { - float d = qb_curr->d; - - float2 acc = 0.f; - - device const uint16_t * qs = ((device const uint16_t *)qb_curr + 1 + il/2); - - for (int i = 0; i < 8; i+=2) { - acc[0] += yl[i + 0] * (qs[i / 2] & 0x000F) - + yl[i + 1] * (qs[i / 2] & 0x0F00); - acc[1] += yl[i + 8] * (qs[i / 2] & 0x00F0) - + yl[i + 9] * (qs[i / 2] & 0xF000); - } - return d * (sumy * -8.f + acc[0] + acc[1]); -} - -// function for calculate inner product between half a q4_1 block and 16 floats (yl), sumy is SUM(yl[i]) -// il indicates where the q4 quants begin (0 or QK4_0/4) -// we assume that the yl's have been multiplied with the appropriate scale factor -// that corresponds to the missing bit shifts (1, 1/16, 1/256, 1/4096) -inline float block_q_n_dot_y(device const block_q4_1 * qb_curr, float sumy, thread float * yl, int il) { - float d = qb_curr->d; - float m = qb_curr->m; - - float2 acc = 0.f; - - device const uint16_t * qs = ((device const uint16_t *)qb_curr + 2 + il/2); - - for (int i = 0; i < 8; i+=2) { - acc[0] += yl[i + 0] * (qs[i / 2] & 0x000F) - + yl[i + 1] * (qs[i / 2] & 0x0F00); - acc[1] += yl[i + 8] * (qs[i / 2] & 0x00F0) - + yl[i + 9] * (qs[i / 2] & 0xF000); - } - return d * (acc[0] + acc[1]) + sumy * m; -} - -// function for calculate inner product between half a q5_0 block and 16 floats (yl), sumy is SUM(yl[i]) -// il indicates where the q5 quants begin (0 or QK5_0/4) -// we assume that the yl's have been multiplied with the appropriate scale factor -// that corresponds to the missing bit shifts (1, 1/16, 1/256, 1/4096) -inline float block_q_n_dot_y(device const block_q5_0 * qb_curr, float sumy, thread float * yl, int il) { - float d = qb_curr->d; - - float2 acc = 0.f; - - device const uint16_t * qs = ((device const uint16_t *)qb_curr + 3 + il/2); - const uint32_t qh = *((device const uint32_t *)qb_curr->qh); - - for (int i = 0; i < 8; i+=2) { - acc[0] += yl[i + 0] * ((qs[i / 2] & 0x000F) | ((qh >> (i+0+il ) << 4 ) & 0x00010)) - + yl[i + 1] * ((qs[i / 2] & 0x0F00) | ((qh >> (i+1+il ) << 12) & 0x01000)); - acc[1] += yl[i + 8] * ((qs[i / 2] & 0x00F0) | ((qh >> (i+0+il+QK5_0/2) << 8 ) & 0x00100)) - + yl[i + 9] * ((qs[i / 2] & 0xF000) | ((qh >> (i+1+il+QK5_0/2) << 16) & 0x10000)); - } - return d * (sumy * -16.f + acc[0] + acc[1]); -} - -// function for calculate inner product between half a q5_1 block and 16 floats (yl), sumy is SUM(yl[i]) -// il indicates where the q5 quants begin (0 or QK5_1/4) -// we assume that the yl's have been multiplied with the appropriate scale factor -// that corresponds to the missing bit shifts (1, 1/16, 1/256, 1/4096) -inline float block_q_n_dot_y(device const block_q5_1 * qb_curr, float sumy, thread float * yl, int il) { - float d = qb_curr->d; - float m = qb_curr->m; - - float2 acc = 0.f; - - device const uint16_t * qs = ((device const uint16_t *)qb_curr + 4 + il/2); - const uint32_t qh = *((device const uint32_t *)qb_curr->qh); - - for (int i = 0; i < 8; i+=2) { - acc[0] += yl[i + 0] * ((qs[i / 2] & 0x000F) | ((qh >> (i+0+il ) << 4 ) & 0x00010)) - + yl[i + 1] * ((qs[i / 2] & 0x0F00) | ((qh >> (i+1+il ) << 12) & 0x01000)); - acc[1] += yl[i + 8] * ((qs[i / 2] & 0x00F0) | ((qh >> (i+0+il+QK5_0/2) << 8 ) & 0x00100)) - + yl[i + 9] * ((qs[i / 2] & 0xF000) | ((qh >> (i+1+il+QK5_0/2) << 16) & 0x10000)); - } - return d * (acc[0] + acc[1]) + sumy * m; -} - -// putting them in the kernel cause a significant performance penalty -#define N_DST 4 // each SIMD group works on 4 rows -#define N_SIMDGROUP 2 // number of SIMD groups in a thread group -//Note: This is a template, but strictly speaking it only applies to -// quantizations where the block size is 32. It also does not -// guard against the number of rows not being divisible by -// N_DST, so this is another explicit assumption of the implementation. -template -void mul_vec_q_n_f32_impl( - device const void * src0, - device const float * src1, - device float * dst, - int64_t ne00, - int64_t ne01, - int64_t ne02, - int64_t ne10, - int64_t ne12, - int64_t ne0, - int64_t ne1, - uint r2, - uint r3, - threadgroup int8_t * shared_values, - uint3 tgpig, uint tiisg, uint sgitg) { - const int nb = ne00/QK4_0; - - const int r0 = tgpig.x; - const int r1 = tgpig.y; - const int im = tgpig.z; - - const int first_row = (r0 * nsg + sgitg) * nr; - - const uint i12 = im%ne12; - const uint i13 = im/ne12; - - const uint offset0 = first_row * nb + (i12/r2)*(nb*ne01) + (i13/r3)*(nb*ne01*ne02); - - device const block_q_type * x = (device const block_q_type *) src0 + offset0; - device const float * y = (device const float *) src1 + r1*ne10 + im*ne00*ne1; - - float yl[16]; // src1 vector cache - float sumf[nr] = {0.f}; - - const int ix = (tiisg/2); - const int il = (tiisg%2)*8; - - device const float * yb = y + ix * QK4_0 + il; - - // each thread in a SIMD group deals with half a block. - for (int ib = ix; ib < nb; ib += nw/2) { - float sumy = 0; - for (int i = 0; i < 8; i += 2) { - sumy += yb[i] + yb[i+1]; - yl[i+0] = yb[i+ 0]; - yl[i+1] = yb[i+ 1]/256.f; - - sumy += yb[i+16] + yb[i+17]; - yl[i+8] = yb[i+16]/16.f; - yl[i+9] = yb[i+17]/4096.f; - } - - for (int row = 0; row < nr; row++) { - sumf[row] += block_q_n_dot_y(x+ib+row*nb, sumy, yl, il); - } - - yb += QK4_0 * 16; - } - - for (int row = 0; row < nr; ++row) { - const float tot = simd_sum(sumf[row]); - if (tiisg == 0 && first_row + row < ne01) { - dst[im*ne0*ne1 + r1*ne0 + first_row + row] = tot; - } - } -} - -kernel void kernel_mul_mv_q4_0_f32( - device const void * src0, - device const float * src1, - device float * dst, - constant int64_t & ne00, - constant int64_t & ne01, - constant int64_t & ne02, - constant uint64_t & nb00, - constant uint64_t & nb01, - constant uint64_t & nb02, - constant int64_t & ne10, - constant int64_t & ne11, - constant int64_t & ne12, - constant uint64_t & nb10, - constant uint64_t & nb11, - constant uint64_t & nb12, - constant int64_t & ne0, - constant int64_t & ne1, - constant uint & r2, - constant uint & r3, - uint3 tgpig[[threadgroup_position_in_grid]], - uint tiisg[[thread_index_in_simdgroup]], - uint sgitg[[simdgroup_index_in_threadgroup]]) { - mul_vec_q_n_f32_impl(src0,src1,dst,ne00,ne01,ne02,ne10,ne12,ne0,ne1,r2,r3,nullptr,tgpig,tiisg,sgitg); -} - -kernel void kernel_mul_mv_q4_1_f32( - device const void * src0, - device const float * src1, - device float * dst, - constant int64_t & ne00, - constant int64_t & ne01, - constant int64_t & ne02, - constant uint64_t & nb00, - constant uint64_t & nb01, - constant uint64_t & nb02, - constant int64_t & ne10, - constant int64_t & ne11, - constant int64_t & ne12, - constant uint64_t & nb10, - constant uint64_t & nb11, - constant uint64_t & nb12, - constant int64_t & ne0, - constant int64_t & ne1, - constant uint & r2, - constant uint & r3, - uint3 tgpig[[threadgroup_position_in_grid]], - uint tiisg[[thread_index_in_simdgroup]], - uint sgitg[[simdgroup_index_in_threadgroup]]) { - mul_vec_q_n_f32_impl(src0,src1,dst,ne00,ne01,ne02,ne10,ne12,ne0,ne1,r2,r3,nullptr,tgpig,tiisg,sgitg); -} - -kernel void kernel_mul_mv_q5_0_f32( - device const void * src0, - device const float * src1, - device float * dst, - constant int64_t & ne00, - constant int64_t & ne01, - constant int64_t & ne02, - constant uint64_t & nb00, - constant uint64_t & nb01, - constant uint64_t & nb02, - constant int64_t & ne10, - constant int64_t & ne11, - constant int64_t & ne12, - constant uint64_t & nb10, - constant uint64_t & nb11, - constant uint64_t & nb12, - constant int64_t & ne0, - constant int64_t & ne1, - constant uint & r2, - constant uint & r3, - uint3 tgpig[[threadgroup_position_in_grid]], - uint tiisg[[thread_index_in_simdgroup]], - uint sgitg[[simdgroup_index_in_threadgroup]]) { - mul_vec_q_n_f32_impl(src0,src1,dst,ne00,ne01,ne02,ne10,ne12,ne0,ne1,r2,r3,nullptr,tgpig,tiisg,sgitg); -} - -kernel void kernel_mul_mv_q5_1_f32( - device const void * src0, - device const float * src1, - device float * dst, - constant int64_t & ne00, - constant int64_t & ne01, - constant int64_t & ne02, - constant uint64_t & nb00, - constant uint64_t & nb01, - constant uint64_t & nb02, - constant int64_t & ne10, - constant int64_t & ne11, - constant int64_t & ne12, - constant uint64_t & nb10, - constant uint64_t & nb11, - constant uint64_t & nb12, - constant int64_t & ne0, - constant int64_t & ne1, - constant uint & r2, - constant uint & r3, - uint3 tgpig[[threadgroup_position_in_grid]], - uint tiisg[[thread_index_in_simdgroup]], - uint sgitg[[simdgroup_index_in_threadgroup]]) { - mul_vec_q_n_f32_impl(src0,src1,dst,ne00,ne01,ne02,ne10,ne12,ne0,ne1,r2,r3,nullptr,tgpig,tiisg,sgitg); -} - - -#define NB_Q8_0 8 - -void kernel_mul_mv_q8_0_f32_impl( - device const void * src0, - device const float * src1, - device float * dst, - int64_t ne00, - int64_t ne01, - int64_t ne02, - int64_t ne10, - int64_t ne12, - int64_t ne0, - int64_t ne1, - uint r2, - uint r3, - threadgroup int8_t * shared_values, - uint3 tgpig, - uint tiisg, - uint sgitg) { - const int nr = N_DST; - const int nsg = N_SIMDGROUP; - const int nw = N_SIMDWIDTH; - - const int nb = ne00/QK8_0; - const int r0 = tgpig.x; - const int r1 = tgpig.y; - const int im = tgpig.z; - - const int first_row = (r0 * nsg + sgitg) * nr; - - const uint i12 = im%ne12; - const uint i13 = im/ne12; - - const uint offset0 = first_row * nb + (i12/r2)*(nb*ne01) + (i13/r3)*(nb*ne01*ne02); - - device const block_q8_0 * x = (device const block_q8_0 *) src0 + offset0; - device const float * y = (device const float *) src1 + r1*ne10 + im*ne00*ne1; - - float yl[NB_Q8_0]; - float sumf[nr]={0.f}; - - const int ix = tiisg/4; - const int il = tiisg%4; - - device const float * yb = y + ix * QK8_0 + NB_Q8_0*il; - - // each thread in a SIMD group deals with NB_Q8_0 quants at a time - for (int ib = ix; ib < nb; ib += nw/4) { - for (int i = 0; i < NB_Q8_0; ++i) { - yl[i] = yb[i]; - } - - for (int row = 0; row < nr; row++) { - device const int8_t * qs = x[ib+row*nb].qs + NB_Q8_0*il; - float sumq = 0.f; - for (int iq = 0; iq < NB_Q8_0; ++iq) { - sumq += qs[iq] * yl[iq]; - } - sumf[row] += sumq*x[ib+row*nb].d; - } - - yb += NB_Q8_0 * nw; - } - - for (int row = 0; row < nr; ++row) { - const float tot = simd_sum(sumf[row]); - if (tiisg == 0 && first_row + row < ne01) { - dst[r1*ne0 + im*ne0*ne1 + first_row + row] = tot; - } - } -} - -[[host_name("kernel_mul_mv_q8_0_f32")]] -kernel void kernel_mul_mv_q8_0_f32( - device const void * src0, - device const float * src1, - device float * dst, - constant int64_t & ne00, - constant int64_t & ne01, - constant int64_t & ne02, - constant uint64_t & nb00, - constant uint64_t & nb01, - constant uint64_t & nb02, - constant int64_t & ne10, - constant int64_t & ne11, - constant int64_t & ne12, - constant uint64_t & nb10, - constant uint64_t & nb11, - constant uint64_t & nb12, - constant int64_t & ne0, - constant int64_t & ne1, - constant uint & r2, - constant uint & r3, - uint3 tgpig[[threadgroup_position_in_grid]], - uint tiisg[[thread_index_in_simdgroup]], - uint sgitg[[simdgroup_index_in_threadgroup]]) { - kernel_mul_mv_q8_0_f32_impl(src0,src1,dst,ne00,ne01,ne02,ne10,ne12,ne0,ne1,r2,r3,nullptr,tgpig,tiisg,sgitg); -} - -#define N_F32_F32 4 - -void kernel_mul_mv_f32_f32_impl( - device const char * src0, - device const char * src1, - device float * dst, - int64_t ne00, - int64_t ne01, - int64_t ne02, - uint64_t nb00, - uint64_t nb01, - uint64_t nb02, - int64_t ne10, - int64_t ne11, - int64_t ne12, - uint64_t nb10, - uint64_t nb11, - uint64_t nb12, - int64_t ne0, - int64_t ne1, - uint r2, - uint r3, - uint3 tgpig, - uint tiisg) { - - const int64_t r0 = tgpig.x; - const int64_t rb = tgpig.y*N_F32_F32; - const int64_t im = tgpig.z; - - const uint i12 = im%ne12; - const uint i13 = im/ne12; - - const uint offset0 = r0*nb01 + (i12/r2)*nb02 + (i13/r3)*nb02*ne02; - - device const float * x = (device const float *) (src0 + offset0); - - if (ne00 < 128) { - for (int row = 0; row < N_F32_F32; ++row) { - int r1 = rb + row; - if (r1 >= ne11) { - break; - } - - device const float * y = (device const float *) (src1 + r1*nb11 + im*nb12); - - float sumf = 0; - for (int i = tiisg; i < ne00; i += 32) { - sumf += (float) x[i] * (float) y[i]; - } - - float all_sum = simd_sum(sumf); - if (tiisg == 0) { - dst[im*ne1*ne0 + r1*ne0 + r0] = all_sum; - } - } - } else { - device const float4 * x4 = (device const float4 *)x; - for (int row = 0; row < N_F32_F32; ++row) { - int r1 = rb + row; - if (r1 >= ne11) { - break; - } - - device const float * y = (device const float *) (src1 + r1*nb11 + im*nb12); - device const float4 * y4 = (device const float4 *) y; - - float sumf = 0; - for (int i = tiisg; i < ne00/4; i += 32) { - for (int k = 0; k < 4; ++k) sumf += (float) x4[i][k] * y4[i][k]; - } - - float all_sum = simd_sum(sumf); - if (tiisg == 0) { - for (int i = 4*(ne00/4); i < ne00; ++i) all_sum += (float) x[i] * y[i]; - dst[im*ne1*ne0 + r1*ne0 + r0] = all_sum; - } - } - } -} - -[[host_name("kernel_mul_mv_f32_f32")]] -kernel void kernel_mul_mv_f32_f32( - device const char * src0, - device const char * src1, - device float * dst, - constant int64_t & ne00, - constant int64_t & ne01, - constant int64_t & ne02, - constant uint64_t & nb00, - constant uint64_t & nb01, - constant uint64_t & nb02, - constant int64_t & ne10, - constant int64_t & ne11, - constant int64_t & ne12, - constant uint64_t & nb10, - constant uint64_t & nb11, - constant uint64_t & nb12, - constant int64_t & ne0, - constant int64_t & ne1, - constant uint & r2, - constant uint & r3, - uint3 tgpig[[threadgroup_position_in_grid]], - uint tiisg[[thread_index_in_simdgroup]]) { - kernel_mul_mv_f32_f32_impl(src0, src1, dst, ne00, ne01, ne02, nb00, nb01, nb02, ne10, ne11, ne12, nb10, nb11, nb12, ne0, ne1, r2, r3, tgpig, tiisg); -} - -#define N_F16_F16 4 - -kernel void kernel_mul_mv_f16_f16( - device const char * src0, - device const char * src1, - device float * dst, - constant int64_t & ne00, - constant int64_t & ne01, - constant int64_t & ne02, - constant uint64_t & nb00, - constant uint64_t & nb01, - constant uint64_t & nb02, - constant int64_t & ne10, - constant int64_t & ne11, - constant int64_t & ne12, - constant uint64_t & nb10, - constant uint64_t & nb11, - constant uint64_t & nb12, - constant int64_t & ne0, - constant int64_t & ne1, - constant uint & r2, - constant uint & r3, - uint3 tgpig[[threadgroup_position_in_grid]], - uint tiisg[[thread_index_in_simdgroup]]) { - - const int64_t r0 = tgpig.x; - const int64_t rb = tgpig.y*N_F16_F16; - const int64_t im = tgpig.z; - - const uint i12 = im%ne12; - const uint i13 = im/ne12; - - const uint offset0 = r0*nb01 + (i12/r2)*nb02 + (i13/r3)*nb02*ne02; - - device const half * x = (device const half *) (src0 + offset0); - - if (ne00 < 128) { - for (int row = 0; row < N_F16_F16; ++row) { - int r1 = rb + row; - if (r1 >= ne11) { - break; - } - - device const half * y = (device const half *) (src1 + r1*nb11 + im*nb12); - - float sumf = 0; - for (int i = tiisg; i < ne00; i += 32) { - sumf += (half) x[i] * (half) y[i]; - } - - float all_sum = simd_sum(sumf); - if (tiisg == 0) { - dst[im*ne1*ne0 + r1*ne0 + r0] = all_sum; - } - } - } else { - device const half4 * x4 = (device const half4 *)x; - for (int row = 0; row < N_F16_F16; ++row) { - int r1 = rb + row; - if (r1 >= ne11) { - break; - } - - device const half * y = (device const half *) (src1 + r1*nb11 + im*nb12); - device const half4 * y4 = (device const half4 *) y; - - float sumf = 0; - for (int i = tiisg; i < ne00/4; i += 32) { - for (int k = 0; k < 4; ++k) sumf += (half) x4[i][k] * y4[i][k]; - } - - float all_sum = simd_sum(sumf); - if (tiisg == 0) { - for (int i = 4*(ne00/4); i < ne00; ++i) all_sum += (half) x[i] * y[i]; - dst[im*ne1*ne0 + r1*ne0 + r0] = all_sum; - } - } - } -} - -void kernel_mul_mv_f16_f32_1row_impl( - device const char * src0, - device const char * src1, - device float * dst, - constant int64_t & ne00, - constant int64_t & ne01, - constant int64_t & ne02, - constant uint64_t & nb00, - constant uint64_t & nb01, - constant uint64_t & nb02, - constant int64_t & ne10, - constant int64_t & ne11, - constant int64_t & ne12, - constant uint64_t & nb10, - constant uint64_t & nb11, - constant uint64_t & nb12, - constant int64_t & ne0, - constant int64_t & ne1, - constant uint & r2, - constant uint & r3, - uint3 tgpig[[threadgroup_position_in_grid]], - uint tiisg[[thread_index_in_simdgroup]]) { - - const int64_t r0 = tgpig.x; - const int64_t r1 = tgpig.y; - const int64_t im = tgpig.z; - - const uint i12 = im%ne12; - const uint i13 = im/ne12; - - const uint offset0 = r0*nb01 + (i12/r2)*nb02 + (i13/r3)*nb02*ne02; - - device const half * x = (device const half *) (src0 + offset0); - device const float * y = (device const float *) (src1 + r1*nb11 + im*nb12); - - float sumf = 0; - if (ne00 < 128) { - for (int i = tiisg; i < ne00; i += 32) { - sumf += (float) x[i] * (float) y[i]; - } - float all_sum = simd_sum(sumf); - if (tiisg == 0) { - dst[im*ne1*ne0 + r1*ne0 + r0] = all_sum; - } - } else { - device const half4 * x4 = (device const half4 *) x; - device const float4 * y4 = (device const float4 *) y; - for (int i = tiisg; i < ne00/4; i += 32) { - for (int k = 0; k < 4; ++k) sumf += (float)x4[i][k] * y4[i][k]; - } - float all_sum = simd_sum(sumf); - if (tiisg == 0) { - for (int i = 4*(ne00/4); i < ne00; ++i) all_sum += (float) x[i] * y[i]; - dst[im*ne1*ne0 + r1*ne0 + r0] = all_sum; - } - } -} - -[[host_name("kernel_mul_mv_f16_f32_1row")]] -kernel void kernel_mul_mv_f16_f32_1row( - device const char * src0, - device const char * src1, - device float * dst, - constant int64_t & ne00, - constant int64_t & ne01, - constant int64_t & ne02, - constant uint64_t & nb00, - constant uint64_t & nb01, - constant uint64_t & nb02, - constant int64_t & ne10, - constant int64_t & ne11, - constant int64_t & ne12, - constant uint64_t & nb10, - constant uint64_t & nb11, - constant uint64_t & nb12, - constant int64_t & ne0, - constant int64_t & ne1, - constant uint & r2, - constant uint & r3, - uint3 tgpig[[threadgroup_position_in_grid]], - uint tiisg[[thread_index_in_simdgroup]]) { - kernel_mul_mv_f16_f32_1row_impl(src0, src1, dst, ne00, ne01, ne02, nb00, nb01, nb02, ne10, ne11, ne12, nb10, nb11, nb12, ne0, ne1, r2, r3, tgpig, tiisg); -} - -#define N_F16_F32 4 - -void kernel_mul_mv_f16_f32_impl( - device const char * src0, - device const char * src1, - device float * dst, - int64_t ne00, - int64_t ne01, - int64_t ne02, - uint64_t nb00, - uint64_t nb01, - uint64_t nb02, - int64_t ne10, - int64_t ne11, - int64_t ne12, - uint64_t nb10, - uint64_t nb11, - uint64_t nb12, - int64_t ne0, - int64_t ne1, - uint r2, - uint r3, - uint3 tgpig, - uint tiisg) { - - const int64_t r0 = tgpig.x; - const int64_t rb = tgpig.y*N_F16_F32; - const int64_t im = tgpig.z; - - const uint i12 = im%ne12; - const uint i13 = im/ne12; - - const uint offset0 = r0*nb01 + (i12/r2)*nb02 + (i13/r3)*nb02*ne02; - - device const half * x = (device const half *) (src0 + offset0); - - if (ne00 < 128) { - for (int row = 0; row < N_F16_F32; ++row) { - int r1 = rb + row; - if (r1 >= ne11) { - break; - } - - device const float * y = (device const float *) (src1 + r1*nb11 + im*nb12); - - float sumf = 0; - for (int i = tiisg; i < ne00; i += 32) { - sumf += (float) x[i] * (float) y[i]; - } - - float all_sum = simd_sum(sumf); - if (tiisg == 0) { - dst[im*ne1*ne0 + r1*ne0 + r0] = all_sum; - } - } - } else { - device const half4 * x4 = (device const half4 *)x; - for (int row = 0; row < N_F16_F32; ++row) { - int r1 = rb + row; - if (r1 >= ne11) { - break; - } - - device const float * y = (device const float *) (src1 + r1*nb11 + im*nb12); - device const float4 * y4 = (device const float4 *) y; - - float sumf = 0; - for (int i = tiisg; i < ne00/4; i += 32) { - for (int k = 0; k < 4; ++k) sumf += (float) x4[i][k] * y4[i][k]; - } - - float all_sum = simd_sum(sumf); - if (tiisg == 0) { - for (int i = 4*(ne00/4); i < ne00; ++i) all_sum += (float) x[i] * y[i]; - dst[im*ne1*ne0 + r1*ne0 + r0] = all_sum; - } - } - } -} - -[[host_name("kernel_mul_mv_f16_f32")]] -kernel void kernel_mul_mv_f16_f32( - device const char * src0, - device const char * src1, - device float * dst, - constant int64_t & ne00, - constant int64_t & ne01, - constant int64_t & ne02, - constant uint64_t & nb00, - constant uint64_t & nb01, - constant uint64_t & nb02, - constant int64_t & ne10, - constant int64_t & ne11, - constant int64_t & ne12, - constant uint64_t & nb10, - constant uint64_t & nb11, - constant uint64_t & nb12, - constant int64_t & ne0, - constant int64_t & ne1, - constant uint & r2, - constant uint & r3, - uint3 tgpig[[threadgroup_position_in_grid]], - uint tiisg[[thread_index_in_simdgroup]]) { - kernel_mul_mv_f16_f32_impl(src0, src1, dst, ne00, ne01, ne02, nb00, nb01, nb02, ne10, ne11, ne12, nb10, nb11, nb12, ne0, ne1, r2, r3, tgpig, tiisg); -} - -// Assumes row size (ne00) is a multiple of 4 -kernel void kernel_mul_mv_f16_f32_l4( - device const char * src0, - device const char * src1, - device float * dst, - constant int64_t & ne00, - constant int64_t & ne01, - constant int64_t & ne02, - constant uint64_t & nb00, - constant uint64_t & nb01, - constant uint64_t & nb02, - constant int64_t & ne10, - constant int64_t & ne11, - constant int64_t & ne12, - constant uint64_t & nb10, - constant uint64_t & nb11, - constant uint64_t & nb12, - constant int64_t & ne0, - constant int64_t & ne1, - constant uint & r2, - constant uint & r3, - uint3 tgpig[[threadgroup_position_in_grid]], - uint tiisg[[thread_index_in_simdgroup]]) { - - const int nrows = ne11; - const int64_t r0 = tgpig.x; - const int64_t im = tgpig.z; - - const uint i12 = im%ne12; - const uint i13 = im/ne12; - - const uint offset0 = r0*nb01 + (i12/r2)*nb02 + (i13/r3)*nb02*ne02; - - device const half4 * x4 = (device const half4 *) (src0 + offset0); - - for (int r1 = 0; r1 < nrows; ++r1) { - device const float4 * y4 = (device const float4 *) (src1 + r1*nb11 + im*nb12); - - float sumf = 0; - for (int i = tiisg; i < ne00/4; i += 32) { - for (int k = 0; k < 4; ++k) sumf += (float) x4[i][k] * y4[i][k]; - } - - float all_sum = simd_sum(sumf); - if (tiisg == 0) { - dst[im*ne1*ne0 + r1*ne0 + r0] = all_sum; - } - } -} - -kernel void kernel_alibi_f32( - device const float * src0, - device float * dst, - constant int64_t & ne00, - constant int64_t & ne01, - constant int64_t & ne02, - constant int64_t & ne03, - constant uint64_t & nb00, - constant uint64_t & nb01, - constant uint64_t & nb02, - constant uint64_t & nb03, - constant int64_t & ne0, - constant int64_t & ne1, - constant int64_t & ne2, - constant int64_t & ne3, - constant uint64_t & nb0, - constant uint64_t & nb1, - constant uint64_t & nb2, - constant uint64_t & nb3, - constant float & m0, - constant float & m1, - constant int & n_heads_log2_floor, - uint3 tgpig[[threadgroup_position_in_grid]], - uint3 tpitg[[thread_position_in_threadgroup]], - uint3 ntg[[threads_per_threadgroup]]) { - const int64_t i03 = tgpig[2]; - const int64_t i02 = tgpig[1]; - const int64_t i01 = tgpig[0]; - - const int64_t n = i03*ne02*ne01*ne00 + i02*ne01*ne00 + i01*ne00; - - const int64_t i3 = n / (ne2*ne1*ne0); - const int64_t i2 = (n - i3*ne2*ne1*ne0) / (ne1*ne0); - const int64_t i1 = (n - i3*ne2*ne1*ne0 - i2*ne1*ne0) / ne0; - //const int64_t i0 = (n - i3*ne2*ne1*ne0 - i2*ne1*ne0 - i1*ne0); - - const int64_t k = i3*ne3 + i2; - - float m_k; - if (k < n_heads_log2_floor) { - m_k = pow(m0, k + 1); - } else { - m_k = pow(m1, 2 * (k - n_heads_log2_floor) + 1); - } - - device char * dst_row = (device char *) dst + i3*nb3 + i2*nb2 + i1*nb1; - device const char * src_row = (device char *) src0 + i03*nb03 + i02*nb02 + i01*nb01; - for (int64_t i00 = tpitg.x; i00 < ne00; i00 += ntg.x) { - const float src_v = *(device float *)(src_row + i00*nb00); - device float * dst_v = (device float *)(dst_row + i00*nb0); - *dst_v = i00 * m_k + src_v; - } -} - -static float rope_yarn_ramp(const float low, const float high, const int i0) { - const float y = (i0 / 2 - low) / max(0.001f, high - low); - return 1.0f - min(1.0f, max(0.0f, y)); -} - -// YaRN algorithm based on LlamaYaRNScaledRotaryEmbedding.py from https://github.com/jquesnelle/yarn -// MIT licensed. Copyright (c) 2023 Jeffrey Quesnelle and Bowen Peng. -static void rope_yarn( - float theta_extrap, float freq_scale, float corr_dims[2], int64_t i0, float ext_factor, float mscale, - thread float * cos_theta, thread float * sin_theta -) { - // Get n-d rotational scaling corrected for extrapolation - float theta_interp = freq_scale * theta_extrap; - float theta = theta_interp; - if (ext_factor != 0.0f) { - float ramp_mix = rope_yarn_ramp(corr_dims[0], corr_dims[1], i0) * ext_factor; - theta = theta_interp * (1 - ramp_mix) + theta_extrap * ramp_mix; - - // Get n-d magnitude scaling corrected for interpolation - mscale *= 1.0f + 0.1f * log(1.0f / freq_scale); - } - *cos_theta = cos(theta) * mscale; - *sin_theta = sin(theta) * mscale; -} - -// Apparently solving `n_rot = 2pi * x * base^((2 * max_pos_emb) / n_dims)` for x, we get -// `corr_fac(n_rot) = n_dims * log(max_pos_emb / (n_rot * 2pi)) / (2 * log(base))` -static float rope_yarn_corr_factor(int n_dims, int n_orig_ctx, float n_rot, float base) { - return n_dims * log(n_orig_ctx / (n_rot * 2 * M_PI_F)) / (2 * log(base)); -} - -static void rope_yarn_corr_dims( - int n_dims, int n_orig_ctx, float freq_base, float beta_fast, float beta_slow, float dims[2] -) { - // start and end correction dims - dims[0] = max(0.0f, floor(rope_yarn_corr_factor(n_dims, n_orig_ctx, beta_fast, freq_base))); - dims[1] = min(n_dims - 1.0f, ceil(rope_yarn_corr_factor(n_dims, n_orig_ctx, beta_slow, freq_base))); -} - -typedef void (rope_t)( - device const void * src0, - device const int32_t * src1, - device float * dst, - constant int64_t & ne00, - constant int64_t & ne01, - constant int64_t & ne02, - constant int64_t & ne03, - constant uint64_t & nb00, - constant uint64_t & nb01, - constant uint64_t & nb02, - constant uint64_t & nb03, - constant int64_t & ne0, - constant int64_t & ne1, - constant int64_t & ne2, - constant int64_t & ne3, - constant uint64_t & nb0, - constant uint64_t & nb1, - constant uint64_t & nb2, - constant uint64_t & nb3, - constant int & n_past, - constant int & n_dims, - constant int & mode, - constant int & n_orig_ctx, - constant float & freq_base, - constant float & freq_scale, - constant float & ext_factor, - constant float & attn_factor, - constant float & beta_fast, - constant float & beta_slow, - uint tiitg[[thread_index_in_threadgroup]], - uint3 tptg[[threads_per_threadgroup]], - uint3 tgpig[[threadgroup_position_in_grid]]); - -template -kernel void kernel_rope( - device const void * src0, - device const int32_t * src1, - device float * dst, - constant int64_t & ne00, - constant int64_t & ne01, - constant int64_t & ne02, - constant int64_t & ne03, - constant uint64_t & nb00, - constant uint64_t & nb01, - constant uint64_t & nb02, - constant uint64_t & nb03, - constant int64_t & ne0, - constant int64_t & ne1, - constant int64_t & ne2, - constant int64_t & ne3, - constant uint64_t & nb0, - constant uint64_t & nb1, - constant uint64_t & nb2, - constant uint64_t & nb3, - constant int & n_past, - constant int & n_dims, - constant int & mode, - constant int & n_orig_ctx, - constant float & freq_base, - constant float & freq_scale, - constant float & ext_factor, - constant float & attn_factor, - constant float & beta_fast, - constant float & beta_slow, - uint tiitg[[thread_index_in_threadgroup]], - uint3 tptg[[threads_per_threadgroup]], - uint3 tgpig[[threadgroup_position_in_grid]]) { - const int64_t i3 = tgpig[2]; - const int64_t i2 = tgpig[1]; - const int64_t i1 = tgpig[0]; - - const bool is_neox = mode & 2; - - float corr_dims[2]; - rope_yarn_corr_dims(n_dims, n_orig_ctx, freq_base, beta_fast, beta_slow, corr_dims); - - device const int32_t * pos = src1; - - const int64_t p = pos[i2]; - - const float theta_0 = (float)p; - const float inv_ndims = -1.f/n_dims; - - if (!is_neox) { - for (int64_t i0 = 2*tiitg; i0 < ne0; i0 += 2*tptg.x) { - - const float theta = theta_0 * pow(freq_base, inv_ndims*i0); - float cos_theta, sin_theta; - rope_yarn(theta, freq_scale, corr_dims, i0, ext_factor, attn_factor, &cos_theta, &sin_theta); - - device const T * const src = (device T *)((device char *) src0 + i3*nb03 + i2*nb02 + i1*nb01 + i0*nb00); - device T * dst_data = (device T *)((device char *) dst + i3*nb3 + i2*nb2 + i1*nb1 + i0*nb0); - - const T x0 = src[0]; - const T x1 = src[1]; - - dst_data[0] = x0*cos_theta - x1*sin_theta; - dst_data[1] = x0*sin_theta + x1*cos_theta; - } - } else { - for (int64_t ic = 2*tiitg; ic < ne0; ic += 2*tptg.x) { - if (ic < n_dims) { - const int64_t ib = 0; - - // simplified from `(ib * n_dims + ic) * inv_ndims` - const float cur_rot = inv_ndims*ic - ib; - - const float theta = theta_0 * pow(freq_base, cur_rot); - float cos_theta, sin_theta; - rope_yarn(theta, freq_scale, corr_dims, cur_rot, ext_factor, attn_factor, &cos_theta, &sin_theta); - - const int64_t i0 = ib*n_dims + ic/2; - - device const T * const src = (device T *)((device char *) src0 + i3*nb03 + i2*nb02 + i1*nb01 + i0*nb00); - device T * dst_data = (device T *)((device char *) dst + i3*nb3 + i2*nb2 + i1*nb1 + i0*nb0); - - const float x0 = src[0]; - const float x1 = src[n_dims/2]; - - dst_data[0] = x0*cos_theta - x1*sin_theta; - dst_data[n_dims/2] = x0*sin_theta + x1*cos_theta; - } else { - const int64_t i0 = ic; - - device const T * const src = (device T *)((device char *) src0 + i3*nb03 + i2*nb02 + i1*nb01 + i0*nb00); - device T * dst_data = (device T *)((device char *) dst + i3*nb3 + i2*nb2 + i1*nb1 + i0*nb0); - - dst_data[0] = src[0]; - dst_data[1] = src[1]; - } - } - } -} - -template [[host_name("kernel_rope_f32")]] kernel rope_t kernel_rope; -template [[host_name("kernel_rope_f16")]] kernel rope_t kernel_rope; - -typedef void (im2col_t)( - device const float * x, - device char * dst, - constant int32_t & ofs0, - constant int32_t & ofs1, - constant int32_t & IW, - constant int32_t & IH, - constant int32_t & CHW, - constant int32_t & s0, - constant int32_t & s1, - constant int32_t & p0, - constant int32_t & p1, - constant int32_t & d0, - constant int32_t & d1, - uint3 tgpig[[threadgroup_position_in_grid]], - uint3 tgpg[[threadgroups_per_grid]], - uint3 tpitg[[thread_position_in_threadgroup]], - uint3 ntg[[threads_per_threadgroup]]); - -template -kernel void kernel_im2col( - device const float * x, - device char * dst, - constant int32_t & ofs0, - constant int32_t & ofs1, - constant int32_t & IW, - constant int32_t & IH, - constant int32_t & CHW, - constant int32_t & s0, - constant int32_t & s1, - constant int32_t & p0, - constant int32_t & p1, - constant int32_t & d0, - constant int32_t & d1, - uint3 tgpig[[threadgroup_position_in_grid]], - uint3 tgpg[[threadgroups_per_grid]], - uint3 tpitg[[thread_position_in_threadgroup]], - uint3 ntg[[threads_per_threadgroup]]) { - const int32_t iiw = tgpig[2] * s0 + tpitg[2] * d0 - p0; - const int32_t iih = tgpig[1] * s1 + tpitg[1] * d1 - p1; - - const int32_t offset_dst = - (tpitg[0] * tgpg[1] * tgpg[2] + tgpig[1] * tgpg[2] + tgpig[2]) * CHW + - (tgpig[0] * (ntg[1] * ntg[2]) + tpitg[1] * ntg[2] + tpitg[2]); - - device T * pdst = (device T *) (dst); - - if (iih < 0 || iih >= IH || iiw < 0 || iiw >= IW) { - pdst[offset_dst] = 0.0f; - } else { - const int32_t offset_src = tpitg[0] * ofs0 + tgpig[0] * ofs1; - pdst[offset_dst] = x[offset_src + iih * IW + iiw]; - } -} - -template [[host_name("kernel_im2col_f32")]] kernel im2col_t kernel_im2col; -template [[host_name("kernel_im2col_f16")]] kernel im2col_t kernel_im2col; - -kernel void kernel_upscale_f32( - device const char * src0, - device char * dst, - constant int64_t & ne00, - constant int64_t & ne01, - constant int64_t & ne02, - constant int64_t & ne03, - constant uint64_t & nb00, - constant uint64_t & nb01, - constant uint64_t & nb02, - constant uint64_t & nb03, - constant int64_t & ne0, - constant int64_t & ne1, - constant int64_t & ne2, - constant int64_t & ne3, - constant uint64_t & nb0, - constant uint64_t & nb1, - constant uint64_t & nb2, - constant uint64_t & nb3, - constant int32_t & sf, - uint3 tgpig[[threadgroup_position_in_grid]], - uint3 tpitg[[thread_position_in_threadgroup]], - uint3 ntg[[threads_per_threadgroup]]) { - - const int64_t i3 = tgpig.z; - const int64_t i2 = tgpig.y; - const int64_t i1 = tgpig.x; - - const int64_t i03 = i3; - const int64_t i02 = i2; - const int64_t i01 = i1/sf; - - device const float * src0_ptr = (device const float *) (src0 + i03*nb03 + i02*nb02 + i01*nb01); - device float * dst_ptr = (device float *) (dst + i3*nb3 + i2*nb2 + i1*nb1); - - for (int i0 = tpitg.x; i0 < ne0; i0 += ntg.x) { - dst_ptr[i0] = src0_ptr[i0/sf]; - } -} - -kernel void kernel_pad_f32( - device const char * src0, - device char * dst, - constant int64_t & ne00, - constant int64_t & ne01, - constant int64_t & ne02, - constant int64_t & ne03, - constant uint64_t & nb00, - constant uint64_t & nb01, - constant uint64_t & nb02, - constant uint64_t & nb03, - constant int64_t & ne0, - constant int64_t & ne1, - constant int64_t & ne2, - constant int64_t & ne3, - constant uint64_t & nb0, - constant uint64_t & nb1, - constant uint64_t & nb2, - constant uint64_t & nb3, - uint3 tgpig[[threadgroup_position_in_grid]], - uint3 tpitg[[thread_position_in_threadgroup]], - uint3 ntg[[threads_per_threadgroup]]) { - - const int64_t i3 = tgpig.z; - const int64_t i2 = tgpig.y; - const int64_t i1 = tgpig.x; - - const int64_t i03 = i3; - const int64_t i02 = i2; - const int64_t i01 = i1; - - device const float * src0_ptr = (device const float *) (src0 + i03*nb03 + i02*nb02 + i01*nb01); - device float * dst_ptr = (device float *) (dst + i3*nb3 + i2*nb2 + i1*nb1); - - if (i1 < ne01 && i2 < ne02 && i3 < ne03) { - for (int i0 = tpitg.x; i0 < ne0; i0 += ntg.x) { - if (i0 < ne00) { - dst_ptr[i0] = src0_ptr[i0]; - } else { - dst_ptr[i0] = 0.0f; - } - } - - return; - } - - for (int i0 = tpitg.x; i0 < ne0; i0 += ntg.x) { - dst_ptr[i0] = 0.0f; - } -} - -kernel void kernel_arange_f32( - device char * dst, - constant int64_t & ne0, - constant float & start, - constant float & step, - uint3 tgpig[[threadgroup_position_in_grid]], - uint3 tpitg[[thread_position_in_threadgroup]], - uint3 ntg[[threads_per_threadgroup]]) { - - device float * dst_ptr = (device float *) dst; - - for (int i0 = tpitg.x; i0 < ne0; i0 += ntg.x) { - dst_ptr[i0] = start + step * i0; - } -} - -kernel void kernel_timestep_embedding_f32( - device const char * src0, - device char * dst, - constant uint64_t & nb1, - constant int & dim, - constant int & max_period, - uint3 tgpig[[threadgroup_position_in_grid]], - uint3 tpitg[[thread_position_in_threadgroup]], - uint3 ntg[[threads_per_threadgroup]]) { - - int i = tgpig.x; - device float * embed_data = (device float *)(dst + i*nb1); - - int half_ = dim / 2; - for (int j = tpitg.x; j < half_; j += ntg.x) { - float timestep = ((device float *)src0)[i]; - float freq = (float)exp(-log((float)max_period) * j / half_); - float arg = timestep * freq; - embed_data[j ] = cos(arg); - embed_data[j + half_] = sin(arg); - } - - if (dim % 2 != 0 && tpitg.x == 0) { - embed_data[dim] = 0.f; - } -} - -// bitonic sort implementation following the CUDA kernels as reference -typedef void (argsort_t)( - device const float * x, - device int32_t * dst, - constant int64_t & ncols, - constant int64_t & ncols_pad, - threadgroup int32_t * shared_values [[threadgroup(0)]], - uint3 tgpig[[threadgroup_position_in_grid]], - uint3 tpitg[[thread_position_in_threadgroup]]); - -template -kernel void kernel_argsort_f32_i32( - device const float * x, - device int32_t * dst, - constant int64_t & ncols, - constant int64_t & ncols_pad, - threadgroup int32_t * shared_values [[threadgroup(0)]], - uint3 tgpig[[threadgroup_position_in_grid]], - uint3 tpitg[[thread_position_in_threadgroup]]) { - // bitonic sort - int col = tpitg[0]; - int row = tgpig[1]; - - if (col >= ncols_pad) return; - - device const float * x_row = x + row * ncols; - threadgroup int32_t * dst_row = shared_values; - - // initialize indices - dst_row[col] = col; - - threadgroup_barrier(mem_flags::mem_threadgroup); - - for (int k = 2; k <= ncols_pad; k *= 2) { - for (int j = k / 2; j > 0; j /= 2) { - int ixj = col ^ j; - if (ixj > col) { - if ((col & k) == 0) { - if (dst_row[col] >= ncols || - (dst_row[ixj] < ncols && (order == GGML_SORT_ORDER_ASC ? - x_row[dst_row[col]] > x_row[dst_row[ixj]] : - x_row[dst_row[col]] < x_row[dst_row[ixj]])) - ) { - SWAP(dst_row[col], dst_row[ixj]); - } - } else { - if (dst_row[ixj] >= ncols || - (dst_row[col] < ncols && (order == GGML_SORT_ORDER_ASC ? - x_row[dst_row[col]] < x_row[dst_row[ixj]] : - x_row[dst_row[col]] > x_row[dst_row[ixj]])) - ) { - SWAP(dst_row[col], dst_row[ixj]); - } - } - } - threadgroup_barrier(mem_flags::mem_threadgroup); - } - } - - // copy the result to dst without the padding - if (col < ncols) { - dst[row * ncols + col] = dst_row[col]; - } -} - -template [[host_name("kernel_argsort_f32_i32_asc")]] kernel argsort_t kernel_argsort_f32_i32; -template [[host_name("kernel_argsort_f32_i32_desc")]] kernel argsort_t kernel_argsort_f32_i32; - -kernel void kernel_leaky_relu_f32( - device const float * src0, - device float * dst, - constant float & slope, - uint tpig[[thread_position_in_grid]]) { - dst[tpig] = src0[tpig] > 0.0f ? src0[tpig] : src0[tpig] * slope; -} - -kernel void kernel_cpy_f16_f16( - device const half * src0, - device half * dst, - constant int64_t & ne00, - constant int64_t & ne01, - constant int64_t & ne02, - constant int64_t & ne03, - constant uint64_t & nb00, - constant uint64_t & nb01, - constant uint64_t & nb02, - constant uint64_t & nb03, - constant int64_t & ne0, - constant int64_t & ne1, - constant int64_t & ne2, - constant int64_t & ne3, - constant uint64_t & nb0, - constant uint64_t & nb1, - constant uint64_t & nb2, - constant uint64_t & nb3, - uint3 tgpig[[threadgroup_position_in_grid]], - uint3 tpitg[[thread_position_in_threadgroup]], - uint3 ntg[[threads_per_threadgroup]]) { - const int64_t i03 = tgpig[2]; - const int64_t i02 = tgpig[1]; - const int64_t i01 = tgpig[0]; - - const int64_t n = i03*ne02*ne01*ne00 + i02*ne01*ne00 + i01*ne00; - - const int64_t i3 = n / (ne2*ne1*ne0); - const int64_t i2 = (n - i3*ne2*ne1*ne0) / (ne1*ne0); - const int64_t i1 = (n - i3*ne2*ne1*ne0 - i2*ne1*ne0) / ne0; - const int64_t i0 = (n - i3*ne2*ne1*ne0 - i2*ne1*ne0 - i1*ne0); - - device half * dst_data = (device half *) ((device char *) dst + i3*nb3 + i2*nb2 + i1*nb1 + i0*nb0); - - for (int64_t i00 = tpitg.x; i00 < ne00; i00 += ntg.x) { - device const half * src = (device half *)((device char *) src0 + i03*nb03 + i02*nb02 + i01*nb01 + i00*nb00); - dst_data[i00] = src[0]; - } -} - -kernel void kernel_cpy_f16_f32( - device const half * src0, - device float * dst, - constant int64_t & ne00, - constant int64_t & ne01, - constant int64_t & ne02, - constant int64_t & ne03, - constant uint64_t & nb00, - constant uint64_t & nb01, - constant uint64_t & nb02, - constant uint64_t & nb03, - constant int64_t & ne0, - constant int64_t & ne1, - constant int64_t & ne2, - constant int64_t & ne3, - constant uint64_t & nb0, - constant uint64_t & nb1, - constant uint64_t & nb2, - constant uint64_t & nb3, - uint3 tgpig[[threadgroup_position_in_grid]], - uint3 tpitg[[thread_position_in_threadgroup]], - uint3 ntg[[threads_per_threadgroup]]) { - const int64_t i03 = tgpig[2]; - const int64_t i02 = tgpig[1]; - const int64_t i01 = tgpig[0]; - - const int64_t n = i03*ne02*ne01*ne00 + i02*ne01*ne00 + i01*ne00; - - const int64_t i3 = n / (ne2*ne1*ne0); - const int64_t i2 = (n - i3*ne2*ne1*ne0) / (ne1*ne0); - const int64_t i1 = (n - i3*ne2*ne1*ne0 - i2*ne1*ne0) / ne0; - const int64_t i0 = (n - i3*ne2*ne1*ne0 - i2*ne1*ne0 - i1*ne0); - - device float * dst_data = (device float *) ((device char *) dst + i3*nb3 + i2*nb2 + i1*nb1 + i0*nb0); - - for (int64_t i00 = tpitg.x; i00 < ne00; i00 += ntg.x) { - device const half * src = (device half *)((device char *) src0 + i03*nb03 + i02*nb02 + i01*nb01 + i00*nb00); - dst_data[i00] = src[0]; - } -} - -kernel void kernel_cpy_f32_f16( - device const float * src0, - device half * dst, - constant int64_t & ne00, - constant int64_t & ne01, - constant int64_t & ne02, - constant int64_t & ne03, - constant uint64_t & nb00, - constant uint64_t & nb01, - constant uint64_t & nb02, - constant uint64_t & nb03, - constant int64_t & ne0, - constant int64_t & ne1, - constant int64_t & ne2, - constant int64_t & ne3, - constant uint64_t & nb0, - constant uint64_t & nb1, - constant uint64_t & nb2, - constant uint64_t & nb3, - uint3 tgpig[[threadgroup_position_in_grid]], - uint3 tpitg[[thread_position_in_threadgroup]], - uint3 ntg[[threads_per_threadgroup]]) { - const int64_t i03 = tgpig[2]; - const int64_t i02 = tgpig[1]; - const int64_t i01 = tgpig[0]; - - const int64_t n = i03*ne02*ne01*ne00 + i02*ne01*ne00 + i01*ne00; - - const int64_t i3 = n / (ne2*ne1*ne0); - const int64_t i2 = (n - i3*ne2*ne1*ne0) / (ne1*ne0); - const int64_t i1 = (n - i3*ne2*ne1*ne0 - i2*ne1*ne0) / ne0; - const int64_t i0 = (n - i3*ne2*ne1*ne0 - i2*ne1*ne0 - i1*ne0); - - device half * dst_data = (device half *) ((device char *) dst + i3*nb3 + i2*nb2 + i1*nb1 + i0*nb0); - - for (int64_t i00 = tpitg.x; i00 < ne00; i00 += ntg.x) { - device const float * src = (device float *)((device char *) src0 + i03*nb03 + i02*nb02 + i01*nb01 + i00*nb00); - - dst_data[i00] = src[0]; - } -} - -kernel void kernel_cpy_f32_f32( - device const float * src0, - device float * dst, - constant int64_t & ne00, - constant int64_t & ne01, - constant int64_t & ne02, - constant int64_t & ne03, - constant uint64_t & nb00, - constant uint64_t & nb01, - constant uint64_t & nb02, - constant uint64_t & nb03, - constant int64_t & ne0, - constant int64_t & ne1, - constant int64_t & ne2, - constant int64_t & ne3, - constant uint64_t & nb0, - constant uint64_t & nb1, - constant uint64_t & nb2, - constant uint64_t & nb3, - uint3 tgpig[[threadgroup_position_in_grid]], - uint3 tpitg[[thread_position_in_threadgroup]], - uint3 ntg[[threads_per_threadgroup]]) { - const int64_t i03 = tgpig[2]; - const int64_t i02 = tgpig[1]; - const int64_t i01 = tgpig[0]; - - const int64_t n = i03*ne02*ne01*ne00 + i02*ne01*ne00 + i01*ne00; - - const int64_t i3 = n / (ne2*ne1*ne0); - const int64_t i2 = (n - i3*ne2*ne1*ne0) / (ne1*ne0); - const int64_t i1 = (n - i3*ne2*ne1*ne0 - i2*ne1*ne0) / ne0; - const int64_t i0 = (n - i3*ne2*ne1*ne0 - i2*ne1*ne0 - i1*ne0); - - device float * dst_data = (device float *) ((device char *) dst + i3*nb3 + i2*nb2 + i1*nb1 + i0*nb0); - - for (int64_t i00 = tpitg.x; i00 < ne00; i00 += ntg.x) { - device const float * src = (device float *)((device char *) src0 + i03*nb03 + i02*nb02 + i01*nb01 + i00*nb00); - - dst_data[i00] = src[0]; - } -} - -kernel void kernel_cpy_f32_q8_0( - device const float * src0, - device void * dst, - constant int64_t & ne00, - constant int64_t & ne01, - constant int64_t & ne02, - constant int64_t & ne03, - constant uint64_t & nb00, - constant uint64_t & nb01, - constant uint64_t & nb02, - constant uint64_t & nb03, - constant int64_t & ne0, - constant int64_t & ne1, - constant int64_t & ne2, - constant int64_t & ne3, - constant uint64_t & nb0, - constant uint64_t & nb1, - constant uint64_t & nb2, - constant uint64_t & nb3, - uint3 tgpig[[threadgroup_position_in_grid]], - uint3 tpitg[[thread_position_in_threadgroup]], - uint3 ntg[[threads_per_threadgroup]]) { - const int64_t i03 = tgpig[2]; - const int64_t i02 = tgpig[1]; - const int64_t i01 = tgpig[0]; - - const int64_t n = i03*ne02*ne01*ne00 + i02*ne01*ne00 + i01*ne00; - - const int64_t i3 = n / (ne2*ne1*ne0); - const int64_t i2 = (n - i3*ne2*ne1*ne0) / (ne1*ne0); - const int64_t i1 = (n - i3*ne2*ne1*ne0 - i2*ne1*ne0) / ne0; - const int64_t i0 = (n - i3*ne2*ne1*ne0 - i2*ne1*ne0 - i1*ne0)/QK8_0; - - device block_q8_0 * dst_data = (device block_q8_0 *) ((device char *) dst + i3*nb3 + i2*nb2 + i1*nb1 + i0*nb0); - - for (int64_t i00 = tpitg.x*QK8_0; i00 < ne00; i00 += ntg.x*QK8_0) { - device const float * src = (device float *)((device char *) src0 + i03*nb03 + i02*nb02 + i01*nb01 + i00*nb00); - - float amax = 0.0f; // absolute max - - for (int j = 0; j < QK8_0; j++) { - const float v = src[j]; - amax = MAX(amax, fabs(v)); - } - - const float d = amax / ((1 << 7) - 1); - const float id = d ? 1.0f/d : 0.0f; - - dst_data[i00/QK8_0].d = d; - - for (int j = 0; j < QK8_0; ++j) { - const float x0 = src[j]*id; - - dst_data[i00/QK8_0].qs[j] = round(x0); - } - } -} - -kernel void kernel_cpy_f32_q4_0( - device const float * src0, - device void * dst, - constant int64_t & ne00, - constant int64_t & ne01, - constant int64_t & ne02, - constant int64_t & ne03, - constant uint64_t & nb00, - constant uint64_t & nb01, - constant uint64_t & nb02, - constant uint64_t & nb03, - constant int64_t & ne0, - constant int64_t & ne1, - constant int64_t & ne2, - constant int64_t & ne3, - constant uint64_t & nb0, - constant uint64_t & nb1, - constant uint64_t & nb2, - constant uint64_t & nb3, - uint3 tgpig[[threadgroup_position_in_grid]], - uint3 tpitg[[thread_position_in_threadgroup]], - uint3 ntg[[threads_per_threadgroup]]) { - const int64_t i03 = tgpig[2]; - const int64_t i02 = tgpig[1]; - const int64_t i01 = tgpig[0]; - - const int64_t n = i03*ne02*ne01*ne00 + i02*ne01*ne00 + i01*ne00; - - const int64_t i3 = n / (ne2*ne1*ne0); - const int64_t i2 = (n - i3*ne2*ne1*ne0) / (ne1*ne0); - const int64_t i1 = (n - i3*ne2*ne1*ne0 - i2*ne1*ne0) / ne0; - const int64_t i0 = (n - i3*ne2*ne1*ne0 - i2*ne1*ne0 - i1*ne0)/QK4_0; - - device block_q4_0 * dst_data = (device block_q4_0 *) ((device char *) dst + i3*nb3 + i2*nb2 + i1*nb1 + i0*nb0); - - for (int64_t i00 = tpitg.x*QK4_0; i00 < ne00; i00 += ntg.x*QK4_0) { - device const float * src = (device float *)((device char *) src0 + i03*nb03 + i02*nb02 + i01*nb01 + i00*nb00); - - float amax = 0.0f; // absolute max - float max = 0.0f; - - for (int j = 0; j < QK4_0; j++) { - const float v = src[j]; - if (amax < fabs(v)) { - amax = fabs(v); - max = v; - } - } - - const float d = max / -8; - const float id = d ? 1.0f/d : 0.0f; - - dst_data[i00/QK4_0].d = d; - - for (int j = 0; j < QK4_0/2; ++j) { - const float x0 = src[0 + j]*id; - const float x1 = src[QK4_0/2 + j]*id; - - const uint8_t xi0 = MIN(15, (int8_t)(x0 + 8.5f)); - const uint8_t xi1 = MIN(15, (int8_t)(x1 + 8.5f)); - - dst_data[i00/QK4_0].qs[j] = xi0; - dst_data[i00/QK4_0].qs[j] |= xi1 << 4; - } - } -} - -kernel void kernel_cpy_f32_q4_1( - device const float * src0, - device void * dst, - constant int64_t & ne00, - constant int64_t & ne01, - constant int64_t & ne02, - constant int64_t & ne03, - constant uint64_t & nb00, - constant uint64_t & nb01, - constant uint64_t & nb02, - constant uint64_t & nb03, - constant int64_t & ne0, - constant int64_t & ne1, - constant int64_t & ne2, - constant int64_t & ne3, - constant uint64_t & nb0, - constant uint64_t & nb1, - constant uint64_t & nb2, - constant uint64_t & nb3, - uint3 tgpig[[threadgroup_position_in_grid]], - uint3 tpitg[[thread_position_in_threadgroup]], - uint3 ntg[[threads_per_threadgroup]]) { - const int64_t i03 = tgpig[2]; - const int64_t i02 = tgpig[1]; - const int64_t i01 = tgpig[0]; - - const int64_t n = i03*ne02*ne01*ne00 + i02*ne01*ne00 + i01*ne00; - - const int64_t i3 = n / (ne2*ne1*ne0); - const int64_t i2 = (n - i3*ne2*ne1*ne0) / (ne1*ne0); - const int64_t i1 = (n - i3*ne2*ne1*ne0 - i2*ne1*ne0) / ne0; - const int64_t i0 = (n - i3*ne2*ne1*ne0 - i2*ne1*ne0 - i1*ne0)/QK4_1; - - device block_q4_1 * dst_data = (device block_q4_1 *) ((device char *) dst + i3*nb3 + i2*nb2 + i1*nb1 + i0*nb0); - - for (int64_t i00 = tpitg.x*QK4_1; i00 < ne00; i00 += ntg.x*QK4_1) { - device const float * src = (device float *)((device char *) src0 + i03*nb03 + i02*nb02 + i01*nb01 + i00*nb00); - - float min = FLT_MAX; - float max = -FLT_MAX; - - for (int j = 0; j < QK4_1; j++) { - const float v = src[j]; - if (min > v) min = v; - if (max < v) max = v; - } - - const float d = (max - min) / ((1 << 4) - 1); - const float id = d ? 1.0f/d : 0.0f; - - dst_data[i00/QK4_1].d = d; - dst_data[i00/QK4_1].m = min; - - for (int j = 0; j < QK4_1/2; ++j) { - const float x0 = (src[0 + j] - min)*id; - const float x1 = (src[QK4_1/2 + j] - min)*id; - - const uint8_t xi0 = MIN(15, (int8_t)(x0 + 0.5f)); - const uint8_t xi1 = MIN(15, (int8_t)(x1 + 0.5f)); - - dst_data[i00/QK4_1].qs[j] = xi0; - dst_data[i00/QK4_1].qs[j] |= xi1 << 4; - } - } -} - -kernel void kernel_cpy_f32_q5_0( - device const float * src0, - device void * dst, - constant int64_t & ne00, - constant int64_t & ne01, - constant int64_t & ne02, - constant int64_t & ne03, - constant uint64_t & nb00, - constant uint64_t & nb01, - constant uint64_t & nb02, - constant uint64_t & nb03, - constant int64_t & ne0, - constant int64_t & ne1, - constant int64_t & ne2, - constant int64_t & ne3, - constant uint64_t & nb0, - constant uint64_t & nb1, - constant uint64_t & nb2, - constant uint64_t & nb3, - uint3 tgpig[[threadgroup_position_in_grid]], - uint3 tpitg[[thread_position_in_threadgroup]], - uint3 ntg[[threads_per_threadgroup]]) { - const int64_t i03 = tgpig[2]; - const int64_t i02 = tgpig[1]; - const int64_t i01 = tgpig[0]; - - const int64_t n = i03*ne02*ne01*ne00 + i02*ne01*ne00 + i01*ne00; - - const int64_t i3 = n / (ne2*ne1*ne0); - const int64_t i2 = (n - i3*ne2*ne1*ne0) / (ne1*ne0); - const int64_t i1 = (n - i3*ne2*ne1*ne0 - i2*ne1*ne0) / ne0; - const int64_t i0 = (n - i3*ne2*ne1*ne0 - i2*ne1*ne0 - i1*ne0)/QK5_0; - - device block_q5_0 * dst_data = (device block_q5_0 *) ((device char *) dst + i3*nb3 + i2*nb2 + i1*nb1 + i0*nb0); - - for (int64_t i00 = tpitg.x*QK5_0; i00 < ne00; i00 += ntg.x*QK5_0) { - device const float * src = (device float *)((device char *) src0 + i03*nb03 + i02*nb02 + i01*nb01 + i00*nb00); - - float amax = 0.0f; // absolute max - float max = 0.0f; - - for (int j = 0; j < QK5_0; j++) { - const float v = src[j]; - if (amax < fabs(v)) { - amax = fabs(v); - max = v; - } - } - - const float d = max / -16; - const float id = d ? 1.0f/d : 0.0f; - - dst_data[i00/QK5_0].d = d; - - uint32_t qh = 0; - for (int j = 0; j < QK5_0/2; ++j) { - const float x0 = src[0 + j]*id; - const float x1 = src[QK5_0/2 + j]*id; - - const uint8_t xi0 = MIN(31, (int8_t)(x0 + 16.5f)); - const uint8_t xi1 = MIN(31, (int8_t)(x1 + 16.5f)); - - dst_data[i00/QK5_0].qs[j] = (xi0 & 0xf) | ((xi1 & 0xf) << 4); - qh |= ((xi0 & 0x10u) >> 4) << (j + 0); - qh |= ((xi1 & 0x10u) >> 4) << (j + QK5_0/2); - } - thread const uint8_t * qh8 = (thread const uint8_t *)&qh; - for (int j = 0; j < 4; ++j) { - dst_data[i00/QK5_0].qh[j] = qh8[j]; - } - } -} - -kernel void kernel_cpy_f32_q5_1( - device const float * src0, - device void * dst, - constant int64_t & ne00, - constant int64_t & ne01, - constant int64_t & ne02, - constant int64_t & ne03, - constant uint64_t & nb00, - constant uint64_t & nb01, - constant uint64_t & nb02, - constant uint64_t & nb03, - constant int64_t & ne0, - constant int64_t & ne1, - constant int64_t & ne2, - constant int64_t & ne3, - constant uint64_t & nb0, - constant uint64_t & nb1, - constant uint64_t & nb2, - constant uint64_t & nb3, - uint3 tgpig[[threadgroup_position_in_grid]], - uint3 tpitg[[thread_position_in_threadgroup]], - uint3 ntg[[threads_per_threadgroup]]) { - const int64_t i03 = tgpig[2]; - const int64_t i02 = tgpig[1]; - const int64_t i01 = tgpig[0]; - - const int64_t n = i03*ne02*ne01*ne00 + i02*ne01*ne00 + i01*ne00; - - const int64_t i3 = n / (ne2*ne1*ne0); - const int64_t i2 = (n - i3*ne2*ne1*ne0) / (ne1*ne0); - const int64_t i1 = (n - i3*ne2*ne1*ne0 - i2*ne1*ne0) / ne0; - const int64_t i0 = (n - i3*ne2*ne1*ne0 - i2*ne1*ne0 - i1*ne0)/QK5_1; - - device block_q5_1 * dst_data = (device block_q5_1 *) ((device char *) dst + i3*nb3 + i2*nb2 + i1*nb1 + i0*nb0); - - for (int64_t i00 = tpitg.x*QK5_1; i00 < ne00; i00 += ntg.x*QK5_1) { - device const float * src = (device float *)((device char *) src0 + i03*nb03 + i02*nb02 + i01*nb01 + i00*nb00); - - float max = src[0]; - float min = src[0]; - - for (int j = 1; j < QK5_1; j++) { - const float v = src[j]; - min = v < min ? v : min; - max = v > max ? v : max; - } - - const float d = (max - min) / 31; - const float id = d ? 1.0f/d : 0.0f; - - dst_data[i00/QK5_1].d = d; - dst_data[i00/QK5_1].m = min; - - uint32_t qh = 0; - for (int j = 0; j < QK5_1/2; ++j) { - const float x0 = (src[0 + j] - min)*id; - const float x1 = (src[QK5_1/2 + j] - min)*id; - - const uint8_t xi0 = (uint8_t)(x0 + 0.5f); - const uint8_t xi1 = (uint8_t)(x1 + 0.5f); - - dst_data[i00/QK5_1].qs[j] = (xi0 & 0xf) | ((xi1 & 0xf) << 4); - qh |= ((xi0 & 0x10u) >> 4) << (j + 0); - qh |= ((xi1 & 0x10u) >> 4) << (j + QK5_1/2); - } - thread const uint8_t * qh8 = (thread const uint8_t *)&qh; - for (int j = 0; j < 4; ++j) { - dst_data[i00/QK5_1].qh[j] = qh8[j]; - } - } -} - -static inline int best_index_int8(int n, constant float * val, float x) { - if (x <= val[0]) return 0; - if (x >= val[n-1]) return n-1; - int ml = 0, mu = n-1; - while (mu-ml > 1) { - int mav = (ml+mu)/2; - if (x < val[mav]) mu = mav; else ml = mav; - } - return x - val[mu-1] < val[mu] - x ? mu-1 : mu; -} - -constexpr constant static float kvalues_iq4nl_f[16] = { - -127.f, -104.f, -83.f, -65.f, -49.f, -35.f, -22.f, -10.f, 1.f, 13.f, 25.f, 38.f, 53.f, 69.f, 89.f, 113.f -}; - -kernel void kernel_cpy_f32_iq4_nl( - device const float * src0, - device void * dst, - constant int64_t & ne00, - constant int64_t & ne01, - constant int64_t & ne02, - constant int64_t & ne03, - constant uint64_t & nb00, - constant uint64_t & nb01, - constant uint64_t & nb02, - constant uint64_t & nb03, - constant int64_t & ne0, - constant int64_t & ne1, - constant int64_t & ne2, - constant int64_t & ne3, - constant uint64_t & nb0, - constant uint64_t & nb1, - constant uint64_t & nb2, - constant uint64_t & nb3, - uint3 tgpig[[threadgroup_position_in_grid]], - uint3 tpitg[[thread_position_in_threadgroup]], - uint3 ntg[[threads_per_threadgroup]]) { - const int64_t i03 = tgpig[2]; - const int64_t i02 = tgpig[1]; - const int64_t i01 = tgpig[0]; - - const int64_t n = i03*ne02*ne01*ne00 + i02*ne01*ne00 + i01*ne00; - - const int64_t i3 = n / (ne2*ne1*ne0); - const int64_t i2 = (n - i3*ne2*ne1*ne0) / (ne1*ne0); - const int64_t i1 = (n - i3*ne2*ne1*ne0 - i2*ne1*ne0) / ne0; - const int64_t i0 = (n - i3*ne2*ne1*ne0 - i2*ne1*ne0 - i1*ne0)/QK4_NL; - - device block_iq4_nl * dst_data = (device block_iq4_nl *) ((device char *) dst + i3*nb3 + i2*nb2 + i1*nb1 + i0*nb0); - - for (int64_t i00 = tpitg.x*QK4_NL; i00 < ne00; i00 += ntg.x*QK4_NL) { - device const float * src = (device float *)((device char *) src0 + i03*nb03 + i02*nb02 + i01*nb01 + i00*nb00); - - float amax = 0.0f; // absolute max - float max = 0.0f; - - for (int j = 0; j < QK4_0; j++) { - const float v = src[j]; - if (amax < fabs(v)) { - amax = fabs(v); - max = v; - } - } - - const float d = max / kvalues_iq4nl_f[0]; - const float id = d ? 1.0f/d : 0.0f; - - float sumqx = 0, sumq2 = 0; - for (int j = 0; j < QK4_NL/2; ++j) { - const float x0 = src[0 + j]*id; - const float x1 = src[QK4_NL/2 + j]*id; - - const uint8_t xi0 = best_index_int8(16, kvalues_iq4nl_f, x0); - const uint8_t xi1 = best_index_int8(16, kvalues_iq4nl_f, x1); - - dst_data[i00/QK4_NL].qs[j] = xi0 | (xi1 << 4); - - const float v0 = kvalues_iq4nl_f[xi0]; - const float v1 = kvalues_iq4nl_f[xi1]; - const float w0 = src[0 + j]*src[0 + j]; - const float w1 = src[QK4_NL/2 + j]*src[QK4_NL/2 + j]; - sumqx += w0*v0*src[j] + w1*v1*src[QK4_NL/2 + j]; - sumq2 += w0*v0*v0 + w1*v1*v1; - - } - - dst_data[i00/QK4_NL].d = sumq2 > 0 ? sumqx/sumq2 : d; - - } -} - -kernel void kernel_concat( - device const char * src0, - device const char * src1, - device char * dst, - constant int64_t & ne00, - constant int64_t & ne01, - constant int64_t & ne02, - constant int64_t & ne03, - constant uint64_t & nb00, - constant uint64_t & nb01, - constant uint64_t & nb02, - constant uint64_t & nb03, - constant int64_t & ne10, - constant int64_t & ne11, - constant int64_t & ne12, - constant int64_t & ne13, - constant uint64_t & nb10, - constant uint64_t & nb11, - constant uint64_t & nb12, - constant uint64_t & nb13, - constant int64_t & ne0, - constant int64_t & ne1, - constant int64_t & ne2, - constant int64_t & ne3, - constant uint64_t & nb0, - constant uint64_t & nb1, - constant uint64_t & nb2, - constant uint64_t & nb3, - uint3 tgpig[[threadgroup_position_in_grid]], - uint3 tpitg[[thread_position_in_threadgroup]], - uint3 ntg[[threads_per_threadgroup]]) { - - const int64_t i03 = tgpig.z; - const int64_t i02 = tgpig.y; - const int64_t i01 = tgpig.x; - - const int64_t i13 = i03 % ne13; - const int64_t i12 = i02 % ne12; - const int64_t i11 = i01 % ne11; - - device const char * src0_ptr = src0 + i03*nb03 + i02*nb02 + i01*nb01 + tpitg.x*nb00; - device const char * src1_ptr = src1 + i13*nb13 + i12*nb12 + i11*nb11 + tpitg.x*nb10; - device char * dst_ptr = dst + i03*nb3 + i02*nb2 + i01*nb1 + tpitg.x*nb0; - - for (int i0 = tpitg.x; i0 < ne0; i0 += ntg.x) { - if (i02 < ne02) { - ((device float *)dst_ptr)[0] = ((device float *)src0_ptr)[0]; - src0_ptr += ntg.x*nb00; - } else { - ((device float *)dst_ptr)[0] = ((device float *)src1_ptr)[0]; - src1_ptr += ntg.x*nb10; - } - dst_ptr += ntg.x*nb0; - } -} - -void kernel_mul_mv_q2_K_f32_impl( - device const void * src0, - device const float * src1, - device float * dst, - int64_t ne00, - int64_t ne01, - int64_t ne02, - int64_t ne10, - int64_t ne12, - int64_t ne0, - int64_t ne1, - uint r2, - uint r3, - threadgroup int8_t * shared_values, - uint3 tgpig, - uint tiisg, - uint sgitg) { - - const int nb = ne00/QK_K; - const int r0 = tgpig.x; - const int r1 = tgpig.y; - const int im = tgpig.z; - - const int first_row = (r0 * N_SIMDGROUP + sgitg) * N_DST; - const int ib_row = first_row * nb; - - const uint i12 = im%ne12; - const uint i13 = im/ne12; - - const uint offset0 = (i12/r2)*(nb*ne01) + (i13/r3)*(nb*ne01*ne02); - - device const block_q2_K * x = (device const block_q2_K *) src0 + ib_row + offset0; - device const float * y = (device const float *) src1 + r1*ne10 + im*ne00*ne1; - - float yl[32]; - float sumf[N_DST]={0.f}, all_sum; - - const int step = sizeof(block_q2_K) * nb; - -#if QK_K == 256 - const int ix = tiisg/8; // 0...3 - const int it = tiisg%8; // 0...7 - const int iq = it/4; // 0 or 1 - const int ir = it%4; // 0...3 - const int is = (8*ir)/16;// 0 or 1 - - device const float * y4 = y + ix * QK_K + 128 * iq + 8 * ir; - - for (int ib = ix; ib < nb; ib += 4) { - - float4 sumy = {0.f, 0.f, 0.f, 0.f}; - for (int i = 0; i < 8; ++i) { - yl[i+ 0] = y4[i+ 0]; sumy[0] += yl[i+ 0]; - yl[i+ 8] = y4[i+32]; sumy[1] += yl[i+ 8]; - yl[i+16] = y4[i+64]; sumy[2] += yl[i+16]; - yl[i+24] = y4[i+96]; sumy[3] += yl[i+24]; - } - - device const uint8_t * sc = (device const uint8_t *)x[ib].scales + 8*iq + is; - device const uint16_t * qs = (device const uint16_t *)x[ib].qs + 16 * iq + 4 * ir; - device const half * dh = &x[ib].d; - - for (int row = 0; row < N_DST; row++) { - - float4 acc1 = {0.f, 0.f, 0.f, 0.f}; - float4 acc2 = {0.f, 0.f, 0.f, 0.f}; - for (int i = 0; i < 8; i += 2) { - acc1[0] += yl[i+ 0] * (qs[i/2] & 0x0003); - acc2[0] += yl[i+ 1] * (qs[i/2] & 0x0300); - acc1[1] += yl[i+ 8] * (qs[i/2] & 0x000c); - acc2[1] += yl[i+ 9] * (qs[i/2] & 0x0c00); - acc1[2] += yl[i+16] * (qs[i/2] & 0x0030); - acc2[2] += yl[i+17] * (qs[i/2] & 0x3000); - acc1[3] += yl[i+24] * (qs[i/2] & 0x00c0); - acc2[3] += yl[i+25] * (qs[i/2] & 0xc000); - } - float dall = dh[0]; - float dmin = dh[1] * 1.f/16.f; - sumf[row] += dall * ((acc1[0] + 1.f/256.f * acc2[0]) * (sc[0] & 0xF) * 1.f/ 1.f + - (acc1[1] + 1.f/256.f * acc2[1]) * (sc[2] & 0xF) * 1.f/ 4.f + - (acc1[2] + 1.f/256.f * acc2[2]) * (sc[4] & 0xF) * 1.f/16.f + - (acc1[3] + 1.f/256.f * acc2[3]) * (sc[6] & 0xF) * 1.f/64.f) - - dmin * (sumy[0] * (sc[0] & 0xF0) + sumy[1] * (sc[2] & 0xF0) + sumy[2] * (sc[4] & 0xF0) + sumy[3] * (sc[6] & 0xF0)); - - qs += step/2; - sc += step; - dh += step/2; - } - - y4 += 4 * QK_K; - } -#else - const int ix = tiisg/2; // 0...15 - const int it = tiisg%2; // 0...1 - - device const float * y4 = y + ix * QK_K + 8 * it; - - for (int ib = ix; ib < nb; ib += 16) { - - float4 sumy = {0.f, 0.f, 0.f, 0.f}; - for (int i = 0; i < 8; ++i) { - yl[i+ 0] = y4[i+ 0]; sumy[0] += yl[i+ 0]; - yl[i+ 8] = y4[i+16]; sumy[1] += yl[i+ 8]; - yl[i+16] = y4[i+32]; sumy[2] += yl[i+16]; - yl[i+24] = y4[i+48]; sumy[3] += yl[i+24]; - } - - device const uint8_t * sc = (device const uint8_t *)x[ib].scales; - device const uint16_t * qs = (device const uint16_t *)x[ib].qs + 4 * it; - device const half * dh = &x[ib].d; - - for (int row = 0; row < N_DST; row++) { - - float4 acc1 = {0.f, 0.f, 0.f, 0.f}; - float4 acc2 = {0.f, 0.f, 0.f, 0.f}; - for (int i = 0; i < 8; i += 2) { - acc1[0] += yl[i+ 0] * (qs[i/2] & 0x0003); - acc2[0] += yl[i+ 1] * (qs[i/2] & 0x0300); - acc1[1] += yl[i+ 8] * (qs[i/2] & 0x000c); - acc2[1] += yl[i+ 9] * (qs[i/2] & 0x0c00); - acc1[2] += yl[i+16] * (qs[i/2] & 0x0030); - acc2[2] += yl[i+17] * (qs[i/2] & 0x3000); - acc1[3] += yl[i+24] * (qs[i/2] & 0x00c0); - acc2[3] += yl[i+25] * (qs[i/2] & 0xc000); - } - - float dall = dh[0]; - float dmin = dh[1]; - sumf[row] += dall * ((acc1[0] + 1.f/256.f * acc2[0]) * (sc[0] & 0xF) * 1.f/ 1.f + - (acc1[1] + 1.f/256.f * acc2[1]) * (sc[1] & 0xF) * 1.f/ 4.f + - (acc1[2] + 1.f/256.f * acc2[2]) * (sc[2] & 0xF) * 1.f/16.f + - (acc1[3] + 1.f/256.f * acc2[3]) * (sc[3] & 0xF) * 1.f/64.f) - - dmin * (sumy[0] * (sc[0] >> 4) + sumy[1] * (sc[1] >> 4) + sumy[2] * (sc[2] >> 4) + sumy[3] * (sc[3] >> 4)); - - qs += step/2; - sc += step; - dh += step/2; - } - - y4 += 16 * QK_K; - } -#endif - - for (int row = 0; row < N_DST; ++row) { - all_sum = simd_sum(sumf[row]); - if (tiisg == 0) { - dst[r1*ne0 + im*ne0*ne1 + first_row + row] = all_sum; - } - } -} - -[[host_name("kernel_mul_mv_q2_K_f32")]] -kernel void kernel_mul_mv_q2_K_f32( - device const void * src0, - device const float * src1, - device float * dst, - constant int64_t & ne00, - constant int64_t & ne01, - constant int64_t & ne02, - constant uint64_t & nb00, - constant uint64_t & nb01, - constant uint64_t & nb02, - constant int64_t & ne10, - constant int64_t & ne11, - constant int64_t & ne12, - constant uint64_t & nb10, - constant uint64_t & nb11, - constant uint64_t & nb12, - constant int64_t & ne0, - constant int64_t & ne1, - constant uint & r2, - constant uint & r3, - uint3 tgpig[[threadgroup_position_in_grid]], - uint tiisg[[thread_index_in_simdgroup]], - uint sgitg[[simdgroup_index_in_threadgroup]]) { - - kernel_mul_mv_q2_K_f32_impl(src0, src1, dst, ne00, ne01, ne02, ne10, ne12, ne0, ne1, r2, r3, nullptr, tgpig, tiisg, sgitg); -} - -#if QK_K == 256 -void kernel_mul_mv_q3_K_f32_impl( - device const void * src0, - device const float * src1, - device float * dst, - int64_t ne00, - int64_t ne01, - int64_t ne02, - int64_t ne10, - int64_t ne12, - int64_t ne0, - int64_t ne1, - uint r2, - uint r3, - threadgroup int8_t * shared_values, - uint3 tgpig, - uint tiisg, - uint sgitg) { - - const int nb = ne00/QK_K; - - const int64_t r0 = tgpig.x; - const int64_t r1 = tgpig.y; - const int64_t im = tgpig.z; - - const int first_row = (r0 * N_SIMDGROUP + sgitg) * 2; - - const uint i12 = im%ne12; - const uint i13 = im/ne12; - - const uint offset0 = (i12/r2)*(nb*ne01) + (i13/r3)*(nb*ne01*ne02); - - device const block_q3_K * x = (device const block_q3_K *) src0 + first_row*nb + offset0; - device const float * yy = (device const float *) src1 + r1*ne10 + im*ne00*ne1; - - float yl[32]; - - //const uint16_t kmask1 = 0x3030; - //const uint16_t kmask2 = 0x0f0f; - - const int tid = tiisg/4; - const int ix = tiisg%4; - const int ip = tid/4; // 0 or 1 - const int il = 2*((tid%4)/2); // 0 or 2 - const int ir = tid%2; - const int n = 8; - const int l0 = n*ir; - - // One would think that the Metal compiler would figure out that ip and il can only have - // 4 possible states, and optimize accordingly. Well, no. It needs help, and we do it - // with these two tales. - // - // Possible masks for the high bit - const ushort4 mm[4] = {{0x0001, 0x0100, 0x0002, 0x0200}, // ip = 0, il = 0 - {0x0004, 0x0400, 0x0008, 0x0800}, // ip = 0, il = 2 - {0x0010, 0x1000, 0x0020, 0x2000}, // ip = 1, il = 0 - {0x0040, 0x4000, 0x0080, 0x8000}}; // ip = 1, il = 2 - - // Possible masks for the low 2 bits - const int4 qm[2] = {{0x0003, 0x0300, 0x000c, 0x0c00}, {0x0030, 0x3000, 0x00c0, 0xc000}}; - - const ushort4 hm = mm[2*ip + il/2]; - - const int shift = 2*il; - const float v1 = il == 0 ? 4.f : 64.f; - const float v2 = 4.f * v1; - - const uint16_t s_shift1 = 4*ip; - const uint16_t s_shift2 = s_shift1 + il; - - const int q_offset = 32*ip + l0; - const int y_offset = 128*ip + 32*il + l0; - - const int step = sizeof(block_q3_K) * nb / 2; - - device const float * y1 = yy + ix*QK_K + y_offset; - - uint32_t scales32, aux32; - thread uint16_t * scales16 = (thread uint16_t *)&scales32; - thread const int8_t * scales = (thread const int8_t *)&scales32; - - float sumf1[2] = {0.f}; - float sumf2[2] = {0.f}; - for (int i = ix; i < nb; i += 4) { - - for (int l = 0; l < 8; ++l) { - yl[l+ 0] = y1[l+ 0]; - yl[l+ 8] = y1[l+16]; - yl[l+16] = y1[l+32]; - yl[l+24] = y1[l+48]; - } - - device const uint16_t * q = (device const uint16_t *)(x[i].qs + q_offset); - device const uint16_t * h = (device const uint16_t *)(x[i].hmask + l0); - device const uint16_t * a = (device const uint16_t *)(x[i].scales); - device const half * dh = &x[i].d; - - for (int row = 0; row < 2; ++row) { - - const float d_all = (float)dh[0]; - - scales16[0] = a[4]; - scales16[1] = a[5]; - aux32 = ((scales32 >> s_shift2) << 4) & 0x30303030; - scales16[0] = a[il+0]; - scales16[1] = a[il+1]; - scales32 = ((scales32 >> s_shift1) & 0x0f0f0f0f) | aux32; - - float s1 = 0, s2 = 0, s3 = 0, s4 = 0, s5 = 0, s6 = 0; - for (int l = 0; l < n; l += 2) { - const int32_t qs = q[l/2]; - s1 += yl[l+0] * (qs & qm[il/2][0]); - s2 += yl[l+1] * (qs & qm[il/2][1]); - s3 += ((h[l/2] & hm[0]) ? 0.f : yl[l+0]) + ((h[l/2] & hm[1]) ? 0.f : yl[l+1]); - s4 += yl[l+16] * (qs & qm[il/2][2]); - s5 += yl[l+17] * (qs & qm[il/2][3]); - s6 += ((h[l/2] & hm[2]) ? 0.f : yl[l+16]) + ((h[l/2] & hm[3]) ? 0.f : yl[l+17]); - } - float d1 = d_all * (s1 + 1.f/256.f * s2 - s3*v1); - float d2 = d_all * (s4 + 1.f/256.f * s5 - s6*v2); - sumf1[row] += d1 * (scales[0] - 32); - sumf2[row] += d2 * (scales[2] - 32); - - s1 = s2 = s3 = s4 = s5 = s6 = 0; - for (int l = 0; l < n; l += 2) { - const int32_t qs = q[l/2+8]; - s1 += yl[l+8] * (qs & qm[il/2][0]); - s2 += yl[l+9] * (qs & qm[il/2][1]); - s3 += ((h[l/2+8] & hm[0]) ? 0.f : yl[l+8]) + ((h[l/2+8] & hm[1]) ? 0.f : yl[l+9]); - s4 += yl[l+24] * (qs & qm[il/2][2]); - s5 += yl[l+25] * (qs & qm[il/2][3]); - s6 += ((h[l/2+8] & hm[2]) ? 0.f : yl[l+24]) + ((h[l/2+8] & hm[3]) ? 0.f : yl[l+25]); - } - d1 = d_all * (s1 + 1.f/256.f * s2 - s3*v1); - d2 = d_all * (s4 + 1.f/256.f * s5 - s6*v2); - sumf1[row] += d1 * (scales[1] - 32); - sumf2[row] += d2 * (scales[3] - 32); - - q += step; - h += step; - a += step; - dh += step; - - } - - y1 += 4 * QK_K; - - } - - for (int row = 0; row < 2; ++row) { - const float sumf = (sumf1[row] + 0.25f * sumf2[row]) / (1 << shift); - sumf1[row] = simd_sum(sumf); - } - if (tiisg == 0) { - for (int row = 0; row < 2; ++row) { - dst[r1*ne0 + im*ne0*ne1 + first_row + row] = sumf1[row]; - } - } -} -#else -void kernel_mul_mv_q3_K_f32_impl( - device const void * src0, - device const float * src1, - device float * dst, - constant int64_t & ne00, - constant int64_t & ne01, - constant int64_t & ne02, - constant int64_t & ne10, - constant int64_t & ne12, - constant int64_t & ne0, - constant int64_t & ne1, - constant uint & r2, - constant uint & r3, - threadgroup int8_t * shared_values [[threadgroup(0)]], - uint3 tgpig[[threadgroup_position_in_grid]], - uint tiisg[[thread_index_in_simdgroup]], - uint sgitg[[simdgroup_index_in_threadgroup]]) { - - const int nb = ne00/QK_K; - - const int64_t r0 = tgpig.x; - const int64_t r1 = tgpig.y; - const int64_t im = tgpig.z; - - const int row = 2 * r0 + sgitg; - - const uint i12 = im%ne12; - const uint i13 = im/ne12; - - const uint offset0 = (i12/r2)*(nb*ne01) + (i13/r3)*(nb*ne01*ne02); - - device const block_q3_K * x = (device const block_q3_K *) src0 + row*nb + offset0; - device const float * yy = (device const float *) src1 + r1*ne10 + im*ne00*ne1; - - const int ix = tiisg/4; - const int il = 4 * (tiisg%4);// 0, 4, 8, 12 - const int iq = il/8; // 0, 0, 1, 1 - const int in = il%8; // 0, 4, 0, 4 - - float2 sum = {0.f, 0.f}; - - for (int i = ix; i < nb; i += 8) { - - const float d_all = (float)(x[i].d); - - device const uint16_t * q = (device const uint16_t *)(x[i].qs + il); - device const uint16_t * h = (device const uint16_t *)(x[i].hmask + in); - device const uint16_t * s = (device const uint16_t *)(x[i].scales); - device const float * y = yy + i * QK_K + il; - - const float d1 = d_all * ((int32_t)(s[0] & 0x000F) - 8); - const float d2 = d_all * ((int32_t)(s[0] & 0x00F0) - 128) * 1.f/64.f; - const float d3 = d_all * ((int32_t)(s[0] & 0x0F00) - 2048) * 1.f/4096.f; - const float d4 = d_all * ((int32_t)(s[0] & 0xF000) - 32768) * 1.f/262144.f; - - for (int l = 0; l < 4; l += 2) { - const uint16_t hm = h[l/2] >> iq; - sum[0] += y[l+ 0] * d1 * ((int32_t)(q[l/2] & 0x0003) - ((hm & 0x0001) ? 0 : 4)) - + y[l+16] * d2 * ((int32_t)(q[l/2] & 0x000c) - ((hm & 0x0004) ? 0 : 16)) - + y[l+32] * d3 * ((int32_t)(q[l/2] & 0x0030) - ((hm & 0x0010) ? 0 : 64)) - + y[l+48] * d4 * ((int32_t)(q[l/2] & 0x00c0) - ((hm & 0x0040) ? 0 : 256)); - sum[1] += y[l+ 1] * d1 * ((int32_t)(q[l/2] & 0x0300) - ((hm & 0x0100) ? 0 : 1024)) - + y[l+17] * d2 * ((int32_t)(q[l/2] & 0x0c00) - ((hm & 0x0400) ? 0 : 4096)) - + y[l+33] * d3 * ((int32_t)(q[l/2] & 0x3000) - ((hm & 0x1000) ? 0 : 16384)) - + y[l+49] * d4 * ((int32_t)(q[l/2] & 0xc000) - ((hm & 0x4000) ? 0 : 65536)); - } - - } - const float sumf = sum[0] + sum[1] * 1.f/256.f; - - const float tot = simd_sum(sumf); - if (tiisg == 0) { - dst[r1*ne0 + im*ne0*ne1 + row] = tot; - } - -} -#endif - -[[host_name("kernel_mul_mv_q3_K_f32")]] -kernel void kernel_mul_mv_q3_K_f32( - device const void * src0, - device const float * src1, - device float * dst, - constant int64_t & ne00, - constant int64_t & ne01, - constant int64_t & ne02, - constant uint64_t & nb00, - constant uint64_t & nb01, - constant uint64_t & nb02, - constant int64_t & ne10, - constant int64_t & ne11, - constant int64_t & ne12, - constant uint64_t & nb10, - constant uint64_t & nb11, - constant uint64_t & nb12, - constant int64_t & ne0, - constant int64_t & ne1, - constant uint & r2, - constant uint & r3, - uint3 tgpig[[threadgroup_position_in_grid]], - uint tiisg[[thread_index_in_simdgroup]], - uint sgitg[[simdgroup_index_in_threadgroup]]) { - - kernel_mul_mv_q3_K_f32_impl(src0, src1, dst, ne00, ne01, ne02, ne10, ne12, ne0, ne1, r2, r3, nullptr, tgpig, tiisg, sgitg); -} - -#if QK_K == 256 -void kernel_mul_mv_q4_K_f32_impl( - device const void * src0, - device const float * src1, - device float * dst, - int64_t ne00, - int64_t ne01, - int64_t ne02, - int64_t ne10, - int64_t ne12, - int64_t ne0, - int64_t ne1, - uint r2, - uint r3, - threadgroup int8_t * shared_values, - uint3 tgpig, - uint tiisg, - uint sgitg) { - - const uint16_t kmask1 = 0x3f3f; - const uint16_t kmask2 = 0x0f0f; - const uint16_t kmask3 = 0xc0c0; - - const int ix = tiisg/8; // 0...3 - const int it = tiisg%8; // 0...7 - const int iq = it/4; // 0 or 1 - const int ir = it%4; // 0...3 - - const int nb = ne00/QK_K; - const int r0 = tgpig.x; - const int r1 = tgpig.y; - const int im = tgpig.z; - //const int first_row = (r0 * N_SIMDGROUP + sgitg) * N_DST; - const int first_row = r0 * N_DST; - const int ib_row = first_row * nb; - - const uint i12 = im%ne12; - const uint i13 = im/ne12; - - const uint offset0 = (i12/r2)*(nb*ne01) + (i13/r3)*(nb*ne01*ne02); - - device const block_q4_K * x = (device const block_q4_K *) src0 + ib_row + offset0; - device const float * y = (device const float *) src1 + r1*ne10 + im*ne00*ne1; - - float yl[16]; - float yh[16]; - float sumf[N_DST]={0.f}, all_sum; - - const int step = sizeof(block_q4_K) * nb / 2; - - device const float * y4 = y + ix * QK_K + 64 * iq + 8 * ir; - - uint16_t sc16[4]; - thread const uint8_t * sc8 = (thread const uint8_t *)sc16; - - for (int ib = ix; ib < nb; ib += 4) { - - float4 sumy = {0.f, 0.f, 0.f, 0.f}; - for (int i = 0; i < 8; ++i) { - yl[i+0] = y4[i+ 0]; sumy[0] += yl[i+0]; - yl[i+8] = y4[i+ 32]; sumy[1] += yl[i+8]; - yh[i+0] = y4[i+128]; sumy[2] += yh[i+0]; - yh[i+8] = y4[i+160]; sumy[3] += yh[i+8]; - } - - device const uint16_t * sc = (device const uint16_t *)x[ib].scales + iq; - device const uint16_t * q1 = (device const uint16_t *)x[ib].qs + 16 * iq + 4 * ir; - device const half * dh = &x[ib].d; - - for (int row = 0; row < N_DST; row++) { - - sc16[0] = sc[0] & kmask1; - sc16[1] = sc[2] & kmask1; - sc16[2] = ((sc[4] >> 0) & kmask2) | ((sc[0] & kmask3) >> 2); - sc16[3] = ((sc[4] >> 4) & kmask2) | ((sc[2] & kmask3) >> 2); - - device const uint16_t * q2 = q1 + 32; - - float4 acc1 = {0.f, 0.f, 0.f, 0.f}; - float4 acc2 = {0.f, 0.f, 0.f, 0.f}; - for (int i = 0; i < 8; i += 2) { - acc1[0] += yl[i+0] * (q1[i/2] & 0x000F); - acc1[1] += yl[i+1] * (q1[i/2] & 0x0F00); - acc1[2] += yl[i+8] * (q1[i/2] & 0x00F0); - acc1[3] += yl[i+9] * (q1[i/2] & 0xF000); - acc2[0] += yh[i+0] * (q2[i/2] & 0x000F); - acc2[1] += yh[i+1] * (q2[i/2] & 0x0F00); - acc2[2] += yh[i+8] * (q2[i/2] & 0x00F0); - acc2[3] += yh[i+9] * (q2[i/2] & 0xF000); - } - - float dall = dh[0]; - float dmin = dh[1]; - sumf[row] += dall * ((acc1[0] + 1.f/256.f * acc1[1]) * sc8[0] + - (acc1[2] + 1.f/256.f * acc1[3]) * sc8[1] * 1.f/16.f + - (acc2[0] + 1.f/256.f * acc2[1]) * sc8[4] + - (acc2[2] + 1.f/256.f * acc2[3]) * sc8[5] * 1.f/16.f) - - dmin * (sumy[0] * sc8[2] + sumy[1] * sc8[3] + sumy[2] * sc8[6] + sumy[3] * sc8[7]); - - q1 += step; - sc += step; - dh += step; - } - - y4 += 4 * QK_K; - } - - for (int row = 0; row < N_DST; ++row) { - all_sum = simd_sum(sumf[row]); - if (tiisg == 0) { - dst[r1*ne0 + im*ne0*ne1 + first_row + row] = all_sum; - } - } -} -#else -void kernel_mul_mv_q4_K_f32_impl( - device const void * src0, - device const float * src1, - device float * dst, - constant int64_t & ne00, - constant int64_t & ne01, - constant int64_t & ne02, - constant int64_t & ne10, - constant int64_t & ne12, - constant int64_t & ne0, - constant int64_t & ne1, - constant uint & r2, - constant uint & r3, - threadgroup int8_t * shared_values [[threadgroup(0)]], - uint3 tgpig[[threadgroup_position_in_grid]], - uint tiisg[[thread_index_in_simdgroup]], - uint sgitg[[simdgroup_index_in_threadgroup]]) { - - const int ix = tiisg/4; // 0...7 - const int it = tiisg%4; // 0...3 - - const int nb = ne00/QK_K; - const int r0 = tgpig.x; - const int r1 = tgpig.y; - const int im = tgpig.z; - const int first_row = r0 * N_DST; - const int ib_row = first_row * nb; - - const uint i12 = im%ne12; - const uint i13 = im/ne12; - - const uint offset0 = (i12/r2)*(nb*ne01) + (i13/r3)*(nb*ne01*ne02); - - device const block_q4_K * x = (device const block_q4_K *) src0 + ib_row + offset0; - device const float * y = (device const float *) src1 + r1*ne10 + im*ne00*ne1; - - float yl[8]; - float yh[8]; - float sumf[N_DST]={0.f}, all_sum; - - const int step = sizeof(block_q4_K) * nb / 2; - - device const float * y4 = y + ix * QK_K + 8 * it; - - uint16_t sc16[4]; - - for (int ib = ix; ib < nb; ib += 8) { - - float2 sumy = {0.f, 0.f}; - for (int i = 0; i < 8; ++i) { - yl[i] = y4[i+ 0]; sumy[0] += yl[i]; - yh[i] = y4[i+32]; sumy[1] += yh[i]; - } - - device const uint16_t * sc = (device const uint16_t *)x[ib].scales; - device const uint16_t * qs = (device const uint16_t *)x[ib].qs + 4 * it; - device const half * dh = x[ib].d; - - for (int row = 0; row < N_DST; row++) { - - sc16[0] = sc[0] & 0x000f; - sc16[1] = sc[0] & 0x0f00; - sc16[2] = sc[0] & 0x00f0; - sc16[3] = sc[0] & 0xf000; - - float2 acc1 = {0.f, 0.f}; - float2 acc2 = {0.f, 0.f}; - for (int i = 0; i < 8; i += 2) { - acc1[0] += yl[i+0] * (qs[i/2] & 0x000F); - acc1[1] += yl[i+1] * (qs[i/2] & 0x0F00); - acc2[0] += yh[i+0] * (qs[i/2] & 0x00F0); - acc2[1] += yh[i+1] * (qs[i/2] & 0xF000); - } - - float dall = dh[0]; - float dmin = dh[1]; - sumf[row] += dall * ((acc1[0] + 1.f/256.f * acc1[1]) * sc16[0] + - (acc2[0] + 1.f/256.f * acc2[1]) * sc16[1] * 1.f/4096.f) - - dmin * 1.f/16.f * (sumy[0] * sc16[2] + sumy[1] * sc16[3] * 1.f/256.f); - - qs += step; - sc += step; - dh += step; - } - - y4 += 8 * QK_K; - } - - for (int row = 0; row < N_DST; ++row) { - all_sum = simd_sum(sumf[row]); - if (tiisg == 0) { - dst[r1*ne0 + im*ne0*ne1 + first_row + row] = all_sum; - } - } -} -#endif - -[[host_name("kernel_mul_mv_q4_K_f32")]] -kernel void kernel_mul_mv_q4_K_f32( - device const void * src0, - device const float * src1, - device float * dst, - constant int64_t & ne00, - constant int64_t & ne01, - constant int64_t & ne02, - constant uint64_t & nb00, - constant uint64_t & nb01, - constant uint64_t & nb02, - constant int64_t & ne10, - constant int64_t & ne11, - constant int64_t & ne12, - constant uint64_t & nb10, - constant uint64_t & nb11, - constant uint64_t & nb12, - constant int64_t & ne0, - constant int64_t & ne1, - constant uint & r2, - constant uint & r3, - uint3 tgpig[[threadgroup_position_in_grid]], - uint tiisg[[thread_index_in_simdgroup]], - uint sgitg[[simdgroup_index_in_threadgroup]]) { - - kernel_mul_mv_q4_K_f32_impl(src0, src1, dst, ne00, ne01, ne02, ne10, ne12, ne0, ne1, r2, r3, nullptr, tgpig, tiisg, sgitg); -} - -void kernel_mul_mv_q5_K_f32_impl( - device const void * src0, - device const float * src1, - device float * dst, - int64_t ne00, - int64_t ne01, - int64_t ne02, - int64_t ne10, - int64_t ne12, - int64_t ne0, - int64_t ne1, - uint r2, - uint r3, - threadgroup int8_t * shared_values, - uint3 tgpig, - uint tiisg, - uint sgitg) { - - const int nb = ne00/QK_K; - - const int64_t r0 = tgpig.x; - const int64_t r1 = tgpig.y; - const int im = tgpig.z; - - const int first_row = (r0 * N_SIMDGROUP + sgitg) * 2; - - const uint i12 = im%ne12; - const uint i13 = im/ne12; - - const uint offset0 = (i12/r2)*(nb*ne01) + (i13/r3)*(nb*ne01*ne02); - - device const block_q5_K * x = (device const block_q5_K *) src0 + first_row*nb + offset0; - device const float * yy = (device const float *) src1 + r1*ne10 + im*ne00*ne1; - - float sumf[2]={0.f}; - - const int step = sizeof(block_q5_K) * nb; - -#if QK_K == 256 -# - float yl[16], yh[16]; - - const uint16_t kmask1 = 0x3f3f; - const uint16_t kmask2 = 0x0f0f; - const uint16_t kmask3 = 0xc0c0; - - const int tid = tiisg/4; - const int ix = tiisg%4; - const int iq = tid/4; - const int ir = tid%4; - const int n = 8; - - const int l0 = n*ir; - const int q_offset = 32*iq + l0; - const int y_offset = 64*iq + l0; - - const uint8_t hm1 = 1u << (2*iq); - const uint8_t hm2 = hm1 << 1; - const uint8_t hm3 = hm1 << 4; - const uint8_t hm4 = hm2 << 4; - - uint16_t sc16[4]; - thread const uint8_t * sc8 = (thread const uint8_t *)sc16; - - device const float * y1 = yy + ix*QK_K + y_offset; - - for (int i = ix; i < nb; i += 4) { - - device const uint8_t * q1 = x[i].qs + q_offset; - device const uint8_t * qh = x[i].qh + l0; - device const half * dh = &x[i].d; - device const uint16_t * a = (device const uint16_t *)x[i].scales + iq; - - device const float * y2 = y1 + 128; - float4 sumy = {0.f, 0.f, 0.f, 0.f}; - for (int l = 0; l < 8; ++l) { - yl[l+0] = y1[l+ 0]; sumy[0] += yl[l+0]; - yl[l+8] = y1[l+32]; sumy[1] += yl[l+8]; - yh[l+0] = y2[l+ 0]; sumy[2] += yh[l+0]; - yh[l+8] = y2[l+32]; sumy[3] += yh[l+8]; - } - - for (int row = 0; row < 2; ++row) { - - device const uint8_t * q2 = q1 + 64; - - sc16[0] = a[0] & kmask1; - sc16[1] = a[2] & kmask1; - sc16[2] = ((a[4] >> 0) & kmask2) | ((a[0] & kmask3) >> 2); - sc16[3] = ((a[4] >> 4) & kmask2) | ((a[2] & kmask3) >> 2); - - float4 acc1 = {0.f}; - float4 acc2 = {0.f}; - for (int l = 0; l < n; ++l) { - uint8_t h = qh[l]; - acc1[0] += yl[l+0] * (q1[l] & 0x0F); - acc1[1] += yl[l+8] * (q1[l] & 0xF0); - acc1[2] += yh[l+0] * (q2[l] & 0x0F); - acc1[3] += yh[l+8] * (q2[l] & 0xF0); - acc2[0] += h & hm1 ? yl[l+0] : 0.f; - acc2[1] += h & hm2 ? yl[l+8] : 0.f; - acc2[2] += h & hm3 ? yh[l+0] : 0.f; - acc2[3] += h & hm4 ? yh[l+8] : 0.f; - } - const float dall = dh[0]; - const float dmin = dh[1]; - sumf[row] += dall * (sc8[0] * (acc1[0] + 16.f*acc2[0]) + - sc8[1] * (acc1[1]/16.f + 16.f*acc2[1]) + - sc8[4] * (acc1[2] + 16.f*acc2[2]) + - sc8[5] * (acc1[3]/16.f + 16.f*acc2[3])) - - dmin * (sumy[0] * sc8[2] + sumy[1] * sc8[3] + sumy[2] * sc8[6] + sumy[3] * sc8[7]); - - q1 += step; - qh += step; - dh += step/2; - a += step/2; - - } - - y1 += 4 * QK_K; - - } -#else - float yl[8], yh[8]; - - const int il = 4 * (tiisg/8); // 0, 4, 8, 12 - const int ix = tiisg%8; - const int iq = il/8; // 0, 0, 1, 1 - const int in = il%8; // 0, 4, 0, 4 - - device const float * y = yy + ix*QK_K + il; - - for (int i = ix; i < nb; i += 8) { - - for (int l = 0; l < 4; ++l) { - yl[l+0] = y[l+ 0]; - yl[l+4] = y[l+16]; - yh[l+0] = y[l+32]; - yh[l+4] = y[l+48]; - } - - device const half * dh = &x[i].d; - device const uint8_t * q = x[i].qs + il; - device const uint8_t * h = x[i].qh + in; - device const int8_t * s = x[i].scales; - - for (int row = 0; row < 2; ++row) { - - const float d = dh[0]; - - float2 acc = {0.f, 0.f}; - for (int l = 0; l < 4; ++l) { - const uint8_t hl = h[l] >> iq; - acc[0] += yl[l+0] * s[0] * ((int16_t)(q[l+ 0] & 0x0F) - (hl & 0x01 ? 0 : 16)) - + yl[l+4] * s[1] * ((int16_t)(q[l+16] & 0x0F) - (hl & 0x04 ? 0 : 16)); - acc[1] += yh[l+0] * s[2] * ((int16_t)(q[l+ 0] & 0xF0) - (hl & 0x10 ? 0 : 256)) - + yh[l+4] * s[3] * ((int16_t)(q[l+16] & 0xF0) - (hl & 0x40 ? 0 : 256)); - } - sumf[row] += d * (acc[0] + 1.f/16.f * acc[1]); - - q += step; - h += step; - s += step; - dh += step/2; - - } - - y += 8 * QK_K; - } -#endif - - for (int row = 0; row < 2; ++row) { - const float tot = simd_sum(sumf[row]); - if (tiisg == 0) { - dst[r1*ne0 + im*ne0*ne1 + first_row + row] = tot; - } - } -} - -[[host_name("kernel_mul_mv_q5_K_f32")]] -kernel void kernel_mul_mv_q5_K_f32( - device const void * src0, - device const float * src1, - device float * dst, - constant int64_t & ne00, - constant int64_t & ne01, - constant int64_t & ne02, - constant uint64_t & nb00, - constant uint64_t & nb01, - constant uint64_t & nb02, - constant int64_t & ne10, - constant int64_t & ne11, - constant int64_t & ne12, - constant uint64_t & nb10, - constant uint64_t & nb11, - constant uint64_t & nb12, - constant int64_t & ne0, - constant int64_t & ne1, - constant uint & r2, - constant uint & r3, - uint3 tgpig[[threadgroup_position_in_grid]], - uint tiisg[[thread_index_in_simdgroup]], - uint sgitg[[simdgroup_index_in_threadgroup]]) { - - kernel_mul_mv_q5_K_f32_impl(src0, src1, dst, ne00, ne01, ne02, ne10, ne12, ne0, ne1, r2, r3, nullptr, tgpig, tiisg, sgitg); -} - -void kernel_mul_mv_q6_K_f32_impl( - device const void * src0, - device const float * src1, - device float * dst, - int64_t ne00, - int64_t ne01, - int64_t ne02, - int64_t ne10, - int64_t ne12, - int64_t ne0, - int64_t ne1, - uint r2, - uint r3, - threadgroup int8_t * shared_values, - uint3 tgpig, - uint tiisg, - uint sgitg) { - - const uint8_t kmask1 = 0x03; - const uint8_t kmask2 = 0x0C; - const uint8_t kmask3 = 0x30; - const uint8_t kmask4 = 0xC0; - - const int nb = ne00/QK_K; - - const int64_t r0 = tgpig.x; - const int64_t r1 = tgpig.y; - const int im = tgpig.z; - - const int row = 2 * r0 + sgitg; - - const uint i12 = im%ne12; - const uint i13 = im/ne12; - - const uint offset0 = (i12/r2)*(nb*ne01) + (i13/r3)*(nb*ne01*ne02); - - device const block_q6_K * x = (device const block_q6_K *) src0 + row * nb + offset0; - device const float * yy = (device const float *) src1 + r1*ne10 + im*ne00*ne1; - - float sumf = 0; - -#if QK_K == 256 - const int tid = tiisg/2; - const int ix = tiisg%2; - const int ip = tid/8; // 0 or 1 - const int il = tid%8; - const int n = 4; - const int l0 = n*il; - const int is = 8*ip + l0/16; - - const int y_offset = 128*ip + l0; - const int q_offset_l = 64*ip + l0; - const int q_offset_h = 32*ip + l0; - - for (int i = ix; i < nb; i += 2) { - - device const uint8_t * q1 = x[i].ql + q_offset_l; - device const uint8_t * q2 = q1 + 32; - device const uint8_t * qh = x[i].qh + q_offset_h; - device const int8_t * sc = x[i].scales + is; - - device const float * y = yy + i * QK_K + y_offset; - - const float dall = x[i].d; - - float4 sums = {0.f, 0.f, 0.f, 0.f}; - for (int l = 0; l < n; ++l) { - sums[0] += y[l+ 0] * ((int8_t)((q1[l] & 0xF) | ((qh[l] & kmask1) << 4)) - 32); - sums[1] += y[l+32] * ((int8_t)((q2[l] & 0xF) | ((qh[l] & kmask2) << 2)) - 32); - sums[2] += y[l+64] * ((int8_t)((q1[l] >> 4) | ((qh[l] & kmask3) << 0)) - 32); - sums[3] += y[l+96] * ((int8_t)((q2[l] >> 4) | ((qh[l] & kmask4) >> 2)) - 32); - } - - sumf += dall * (sums[0] * sc[0] + sums[1] * sc[2] + sums[2] * sc[4] + sums[3] * sc[6]); - - } - -#else - const int ix = tiisg/4; - const int il = 4*(tiisg%4); - - for (int i = ix; i < nb; i += 8) { - device const float * y = yy + i * QK_K + il; - device const uint8_t * ql = x[i].ql + il; - device const uint8_t * qh = x[i].qh + il; - device const int8_t * s = x[i].scales; - - const float d = x[i].d; - - float4 sums = {0.f, 0.f, 0.f, 0.f}; - for (int l = 0; l < 4; ++l) { - sums[0] += y[l+ 0] * ((int8_t)((ql[l+ 0] & 0xF) | ((qh[l] & kmask1) << 4)) - 32); - sums[1] += y[l+16] * ((int8_t)((ql[l+16] & 0xF) | ((qh[l] & kmask2) << 2)) - 32); - sums[2] += y[l+32] * ((int8_t)((ql[l+ 0] >> 4) | ((qh[l] & kmask3) >> 0)) - 32); - sums[3] += y[l+48] * ((int8_t)((ql[l+16] >> 4) | ((qh[l] & kmask4) >> 2)) - 32); - } - sumf += d * (sums[0] * s[0] + sums[1] * s[1] + sums[2] * s[2] + sums[3] * s[3]); - } - -#endif - - const float tot = simd_sum(sumf); - if (tiisg == 0) { - dst[r1*ne0 + im*ne0*ne1 + row] = tot; - } -} - -[[host_name("kernel_mul_mv_q6_K_f32")]] -kernel void kernel_mul_mv_q6_K_f32( - device const void * src0, - device const float * src1, - device float * dst, - constant int64_t & ne00, - constant int64_t & ne01, - constant int64_t & ne02, - constant uint64_t & nb00, - constant uint64_t & nb01, - constant uint64_t & nb02, - constant int64_t & ne10, - constant int64_t & ne11, - constant int64_t & ne12, - constant uint64_t & nb10, - constant uint64_t & nb11, - constant uint64_t & nb12, - constant int64_t & ne0, - constant int64_t & ne1, - constant uint & r2, - constant uint & r3, - uint3 tgpig[[threadgroup_position_in_grid]], - uint tiisg[[thread_index_in_simdgroup]], - uint sgitg[[simdgroup_index_in_threadgroup]]) { - - kernel_mul_mv_q6_K_f32_impl(src0, src1, dst, ne00, ne01, ne02, ne10, ne12, ne0, ne1, r2, r3, nullptr, tgpig, tiisg, sgitg); -} - -// ======================= "True" 2-bit - -void kernel_mul_mv_iq2_xxs_f32_impl( - device const void * src0, - device const float * src1, - device float * dst, - int64_t ne00, - int64_t ne01, - int64_t ne02, - int64_t ne10, - int64_t ne12, - int64_t ne0, - int64_t ne1, - uint r2, - uint r3, - threadgroup int8_t * shared_values, - uint3 tgpig, - uint tiisg, - uint sgitg) { - - const int nb = ne00/QK_K; - const int r0 = tgpig.x; - const int r1 = tgpig.y; - const int im = tgpig.z; - - const int first_row = (r0 * N_SIMDGROUP + sgitg) * N_DST; - const int ib_row = first_row * nb; - - const uint i12 = im%ne12; - const uint i13 = im/ne12; - - const uint offset0 = (i12/r2)*(nb*ne01) + (i13/r3)*(nb*ne01*ne02); - - device const block_iq2_xxs * x = (device const block_iq2_xxs *) src0 + ib_row + offset0; - device const float * y = (device const float *) src1 + r1*ne10 + im*ne00*ne1; - - float yl[32]; - float sumf[N_DST]={0.f}, all_sum; - - const int nb32 = nb * (QK_K / 32); - - threadgroup uint64_t * values = (threadgroup uint64_t *)shared_values; - threadgroup uint8_t * shared_signs = (threadgroup uint8_t *)(values + 256); - { - int nval = 4; - int pos = (32*sgitg + tiisg)*nval; - for (int i = 0; i < nval; ++i) values[pos + i] = iq2xxs_grid[pos + i]; - nval = 2; - pos = (32*sgitg + tiisg)*nval; - for (int i = 0; i < nval; ++i) shared_signs[pos+i] = ksigns_iq2xs[pos+i]; - threadgroup_barrier(mem_flags::mem_threadgroup); - } - - const int ix = tiisg; - - device const float * y4 = y + 32 * ix; - - for (int ib32 = ix; ib32 < nb32; ib32 += 32) { - - for (int i = 0; i < 32; ++i) { - yl[i] = y4[i]; - } - - const int ibl = ib32 / (QK_K / 32); - const int ib = ib32 % (QK_K / 32); - - device const block_iq2_xxs * xr = x + ibl; - device const uint16_t * q2 = xr->qs + 4 * ib; - device const half * dh = &xr->d; - - for (int row = 0; row < N_DST; row++) { - - const float db = dh[0]; - device const uint8_t * aux8 = (device const uint8_t *)q2; - const uint32_t aux32 = q2[2] | (q2[3] << 16); - const float d = db * (0.5f + (aux32 >> 28)); - - float sum = 0; - for (int l = 0; l < 4; ++l) { - const threadgroup uint8_t * grid = (const threadgroup uint8_t *)(values + aux8[l]); - const uint8_t signs = shared_signs[(aux32 >> 7*l) & 127]; - for (int j = 0; j < 8; ++j) { - sum += yl[8*l + j] * grid[j] * (signs & kmask_iq2xs[j] ? -1.f : 1.f); - } - } - sumf[row] += d * sum; - - dh += nb*sizeof(block_iq2_xxs)/2; - q2 += nb*sizeof(block_iq2_xxs)/2; - } - - y4 += 32 * 32; - } - - for (int row = 0; row < N_DST; ++row) { - all_sum = simd_sum(sumf[row]); - if (tiisg == 0) { - dst[r1*ne0 + im*ne0*ne1 + first_row + row] = all_sum * 0.25f; - } - } -} - -[[host_name("kernel_mul_mv_iq2_xxs_f32")]] -kernel void kernel_mul_mv_iq2_xxs_f32( - device const void * src0, - device const float * src1, - device float * dst, - constant int64_t & ne00, - constant int64_t & ne01, - constant int64_t & ne02, - constant uint64_t & nb00, - constant uint64_t & nb01, - constant uint64_t & nb02, - constant int64_t & ne10, - constant int64_t & ne11, - constant int64_t & ne12, - constant uint64_t & nb10, - constant uint64_t & nb11, - constant uint64_t & nb12, - constant int64_t & ne0, - constant int64_t & ne1, - constant uint & r2, - constant uint & r3, - threadgroup int8_t * shared_values [[threadgroup(0)]], - uint3 tgpig[[threadgroup_position_in_grid]], - uint tiisg[[thread_index_in_simdgroup]], - uint sgitg[[simdgroup_index_in_threadgroup]]) { - - kernel_mul_mv_iq2_xxs_f32_impl(src0, src1, dst, ne00, ne01, ne02, ne10, ne12, ne0, ne1, r2, r3, shared_values, tgpig, tiisg, sgitg); -} - -void kernel_mul_mv_iq2_xs_f32_impl( - device const void * src0, - device const float * src1, - device float * dst, - int64_t ne00, - int64_t ne01, - int64_t ne02, - int64_t ne10, - int64_t ne12, - int64_t ne0, - int64_t ne1, - uint r2, - uint r3, - threadgroup int8_t * shared_values, - uint3 tgpig, - uint tiisg, - uint sgitg) { - - const int nb = ne00/QK_K; - const int r0 = tgpig.x; - const int r1 = tgpig.y; - const int im = tgpig.z; - - const int first_row = (r0 * N_SIMDGROUP + sgitg) * N_DST; - const int ib_row = first_row * nb; - - const uint i12 = im%ne12; - const uint i13 = im/ne12; - - const uint offset0 = (i12/r2)*(nb*ne01) + (i13/r3)*(nb*ne01*ne02); - - device const block_iq2_xs * x = (device const block_iq2_xs *) src0 + ib_row + offset0; - device const float * y = (device const float *) src1 + r1*ne10 + im*ne00*ne1; - - float yl[32]; - float sumf[N_DST]={0.f}, all_sum; - - const int nb32 = nb * (QK_K / 32); - - threadgroup uint64_t * values = (threadgroup uint64_t *)shared_values; - threadgroup uint8_t * shared_signs = (threadgroup uint8_t *)(values + 512); - { - int nval = 8; - int pos = (32*sgitg + tiisg)*nval; - for (int i = 0; i < nval; ++i) values[pos + i] = iq2xs_grid[pos + i]; - nval = 2; - pos = (32*sgitg + tiisg)*nval; - for (int i = 0; i < nval; ++i) shared_signs[pos+i] = ksigns_iq2xs[pos+i]; - threadgroup_barrier(mem_flags::mem_threadgroup); - } - - const int ix = tiisg; - - device const float * y4 = y + 32 * ix; - - for (int ib32 = ix; ib32 < nb32; ib32 += 32) { - - for (int i = 0; i < 32; ++i) { - yl[i] = y4[i]; - } - - const int ibl = ib32 / (QK_K / 32); - const int ib = ib32 % (QK_K / 32); - - device const block_iq2_xs * xr = x + ibl; - device const uint16_t * q2 = xr->qs + 4 * ib; - device const uint8_t * sc = xr->scales + ib; - device const half * dh = &xr->d; - - for (int row = 0; row < N_DST; row++) { - - const float db = dh[0]; - const uint8_t ls1 = sc[0] & 0xf; - const uint8_t ls2 = sc[0] >> 4; - const float d1 = db * (0.5f + ls1); - const float d2 = db * (0.5f + ls2); - - float sum1 = 0, sum2 = 0; - for (int l = 0; l < 2; ++l) { - const threadgroup uint8_t * grid = (const threadgroup uint8_t *)(values + (q2[l] & 511)); - const uint8_t signs = shared_signs[(q2[l] >> 9)]; - for (int j = 0; j < 8; ++j) { - sum1 += yl[8*l + j] * grid[j] * (signs & kmask_iq2xs[j] ? -1.f : 1.f); - } - } - for (int l = 2; l < 4; ++l) { - const threadgroup uint8_t * grid = (const threadgroup uint8_t *)(values + (q2[l] & 511)); - const uint8_t signs = shared_signs[(q2[l] >> 9)]; - for (int j = 0; j < 8; ++j) { - sum2 += yl[8*l + j] * grid[j] * (signs & kmask_iq2xs[j] ? -1.f : 1.f); - } - } - sumf[row] += d1 * sum1 + d2 * sum2; - - dh += nb*sizeof(block_iq2_xs)/2; - q2 += nb*sizeof(block_iq2_xs)/2; - sc += nb*sizeof(block_iq2_xs); - } - - y4 += 32 * 32; - } - - for (int row = 0; row < N_DST; ++row) { - all_sum = simd_sum(sumf[row]); - if (tiisg == 0) { - dst[r1*ne0 + im*ne0*ne1 + first_row + row] = all_sum * 0.25f; - } - } -} - -[[host_name("kernel_mul_mv_iq2_xs_f32")]] -kernel void kernel_mul_mv_iq2_xs_f32( - device const void * src0, - device const float * src1, - device float * dst, - constant int64_t & ne00, - constant int64_t & ne01, - constant int64_t & ne02, - constant uint64_t & nb00, - constant uint64_t & nb01, - constant uint64_t & nb02, - constant int64_t & ne10, - constant int64_t & ne11, - constant int64_t & ne12, - constant uint64_t & nb10, - constant uint64_t & nb11, - constant uint64_t & nb12, - constant int64_t & ne0, - constant int64_t & ne1, - constant uint & r2, - constant uint & r3, - threadgroup int8_t * shared_values [[threadgroup(0)]], - uint3 tgpig[[threadgroup_position_in_grid]], - uint tiisg[[thread_index_in_simdgroup]], - uint sgitg[[simdgroup_index_in_threadgroup]]) { - - kernel_mul_mv_iq2_xs_f32_impl(src0, src1, dst, ne00, ne01, ne02, ne10, ne12, ne0, ne1, r2, r3, shared_values, tgpig, tiisg, sgitg); -} - -void kernel_mul_mv_iq3_xxs_f32_impl( - device const void * src0, - device const float * src1, - device float * dst, - int64_t ne00, - int64_t ne01, - int64_t ne02, - int64_t ne10, - int64_t ne12, - int64_t ne0, - int64_t ne1, - uint r2, - uint r3, - threadgroup int8_t * shared_values, - uint3 tgpig, - uint tiisg, - uint sgitg) { - - const int nb = ne00/QK_K; - const int r0 = tgpig.x; - const int r1 = tgpig.y; - const int im = tgpig.z; - - const int first_row = (r0 * N_SIMDGROUP + sgitg) * N_DST; - const int ib_row = first_row * nb; - - const uint i12 = im%ne12; - const uint i13 = im/ne12; - - const uint offset0 = (i12/r2)*(nb*ne01) + (i13/r3)*(nb*ne01*ne02); - - device const block_iq3_xxs * x = (device const block_iq3_xxs *) src0 + ib_row + offset0; - device const float * y = (device const float *) src1 + r1*ne10 + im*ne00*ne1; - - float yl[32]; - float sumf[N_DST]={0.f}, all_sum; - - const int nb32 = nb * (QK_K / 32); - - threadgroup uint32_t * values = (threadgroup uint32_t *)shared_values; - threadgroup uint8_t * shared_signs = (threadgroup uint8_t *)(values + 256); - { - int nval = 4; - int pos = (32*sgitg + tiisg)*nval; - for (int i = 0; i < nval; ++i) values[pos + i] = iq3xxs_grid[pos + i]; - nval = 2; - pos = (32*sgitg + tiisg)*nval; - for (int i = 0; i < nval; ++i) shared_signs[pos+i] = ksigns_iq2xs[pos+i]; - threadgroup_barrier(mem_flags::mem_threadgroup); - } - - const int ix = tiisg; - - device const float * y4 = y + 32 * ix; - - for (int ib32 = ix; ib32 < nb32; ib32 += 32) { - - for (int i = 0; i < 32; ++i) { - yl[i] = y4[i]; - } - - const int ibl = ib32 / (QK_K / 32); - const int ib = ib32 % (QK_K / 32); - - device const block_iq3_xxs * xr = x + ibl; - device const uint8_t * q3 = xr->qs + 8 * ib; - device const uint16_t * gas = (device const uint16_t *)(xr->qs + QK_K/4) + 2 * ib; - device const half * dh = &xr->d; - - for (int row = 0; row < N_DST; row++) { - - const float db = dh[0]; - const uint32_t aux32 = gas[0] | (gas[1] << 16); - const float d = db * (0.5f + (aux32 >> 28)); - - float2 sum = {0}; - for (int l = 0; l < 4; ++l) { - const threadgroup uint8_t * grid1 = (const threadgroup uint8_t *)(values + q3[2*l+0]); - const threadgroup uint8_t * grid2 = (const threadgroup uint8_t *)(values + q3[2*l+1]); - const uint8_t signs = shared_signs[(aux32 >> 7*l) & 127]; - for (int j = 0; j < 4; ++j) { - sum[0] += yl[8*l + j + 0] * grid1[j] * (signs & kmask_iq2xs[j+0] ? -1.f : 1.f); - sum[1] += yl[8*l + j + 4] * grid2[j] * (signs & kmask_iq2xs[j+4] ? -1.f : 1.f); - } - } - sumf[row] += d * (sum[0] + sum[1]); - - dh += nb*sizeof(block_iq3_xxs)/2; - q3 += nb*sizeof(block_iq3_xxs); - gas += nb*sizeof(block_iq3_xxs)/2; - } - - y4 += 32 * 32; - } - - for (int row = 0; row < N_DST; ++row) { - all_sum = simd_sum(sumf[row]); - if (tiisg == 0) { - dst[r1*ne0 + im*ne0*ne1 + first_row + row] = all_sum * 0.5f; - } - } -} - -[[host_name("kernel_mul_mv_iq3_xxs_f32")]] -kernel void kernel_mul_mv_iq3_xxs_f32( - device const void * src0, - device const float * src1, - device float * dst, - constant int64_t & ne00, - constant int64_t & ne01, - constant int64_t & ne02, - constant uint64_t & nb00, - constant uint64_t & nb01, - constant uint64_t & nb02, - constant int64_t & ne10, - constant int64_t & ne11, - constant int64_t & ne12, - constant uint64_t & nb10, - constant uint64_t & nb11, - constant uint64_t & nb12, - constant int64_t & ne0, - constant int64_t & ne1, - constant uint & r2, - constant uint & r3, - threadgroup int8_t * shared_values [[threadgroup(0)]], - uint3 tgpig[[threadgroup_position_in_grid]], - uint tiisg[[thread_index_in_simdgroup]], - uint sgitg[[simdgroup_index_in_threadgroup]]) { - - kernel_mul_mv_iq3_xxs_f32_impl(src0, src1, dst, ne00, ne01, ne02, ne10, ne12, ne0, ne1, r2, r3, shared_values, tgpig, tiisg, sgitg); -} - -void kernel_mul_mv_iq3_s_f32_impl( - device const void * src0, - device const float * src1, - device float * dst, - int64_t ne00, - int64_t ne01, - int64_t ne02, - int64_t ne10, - int64_t ne12, - int64_t ne0, - int64_t ne1, - uint r2, - uint r3, - threadgroup int8_t * shared_values, - uint3 tgpig, - uint tiisg, - uint sgitg) { - - const int nb = ne00/QK_K; - const int r0 = tgpig.x; - const int r1 = tgpig.y; - const int im = tgpig.z; - - const int first_row = (r0 * N_SIMDGROUP + sgitg) * N_DST; - const int ib_row = first_row * nb; - - const uint i12 = im%ne12; - const uint i13 = im/ne12; - - const uint offset0 = (i12/r2)*(nb*ne01) + (i13/r3)*(nb*ne01*ne02); - - device const block_iq3_s * x = (device const block_iq3_s *) src0 + ib_row + offset0; - device const float * y = (device const float *) src1 + r1*ne10 + im*ne00*ne1; - - float yl[32]; - float sumf[N_DST]={0.f}, all_sum; - - const int nb32 = nb * (QK_K / 32); - - threadgroup uint32_t * values = (threadgroup uint32_t *)shared_values; - { - int nval = 8; - int pos = (32*sgitg + tiisg)*nval; - for (int i = 0; i < nval; ++i) values[pos + i] = iq3s_grid[pos + i]; - threadgroup_barrier(mem_flags::mem_threadgroup); - } - - const int ix = tiisg; - - device const float * y4 = y + 32 * ix; - - for (int ib32 = ix; ib32 < nb32; ib32 += 32) { - - for (int i = 0; i < 32; ++i) { - yl[i] = y4[i]; - } - - const int ibl = ib32 / (QK_K / 32); - const int ib = ib32 % (QK_K / 32); - - device const block_iq3_s * xr = x + ibl; - device const uint8_t * qs = xr->qs + 8 * ib; - device const uint8_t * qh = xr->qh + ib; - device const uint8_t * sc = xr->scales + (ib/2); - device const uint8_t * signs = xr->signs + 4 * ib; - device const half * dh = &xr->d; - - for (int row = 0; row < N_DST; row++) { - - const float db = dh[0]; - const float d = db * (1 + 2*((sc[0] >> 4*(ib%2)) & 0xf)); - - float2 sum = {0}; - for (int l = 0; l < 4; ++l) { - const threadgroup uint32_t * table1 = qh[0] & kmask_iq2xs[2*l+0] ? values + 256 : values; - const threadgroup uint32_t * table2 = qh[0] & kmask_iq2xs[2*l+1] ? values + 256 : values; - const threadgroup uint8_t * grid1 = (const threadgroup uint8_t *)(table1 + qs[2*l+0]); - const threadgroup uint8_t * grid2 = (const threadgroup uint8_t *)(table2 + qs[2*l+1]); - for (int j = 0; j < 4; ++j) { - sum[0] += yl[8*l + j + 0] * grid1[j] * select(1, -1, signs[l] & kmask_iq2xs[j+0]); - sum[1] += yl[8*l + j + 4] * grid2[j] * select(1, -1, signs[l] & kmask_iq2xs[j+4]); - } - } - sumf[row] += d * (sum[0] + sum[1]); - - dh += nb*sizeof(block_iq3_s)/2; - qs += nb*sizeof(block_iq3_s); - qh += nb*sizeof(block_iq3_s); - sc += nb*sizeof(block_iq3_s); - signs += nb*sizeof(block_iq3_s); - } - - y4 += 32 * 32; - } - - for (int row = 0; row < N_DST; ++row) { - all_sum = simd_sum(sumf[row]); - if (tiisg == 0) { - dst[r1*ne0 + im*ne0*ne1 + first_row + row] = all_sum; - } - } -} - -[[host_name("kernel_mul_mv_iq3_s_f32")]] -kernel void kernel_mul_mv_iq3_s_f32( - device const void * src0, - device const float * src1, - device float * dst, - constant int64_t & ne00, - constant int64_t & ne01, - constant int64_t & ne02, - constant uint64_t & nb00, - constant uint64_t & nb01, - constant uint64_t & nb02, - constant int64_t & ne10, - constant int64_t & ne11, - constant int64_t & ne12, - constant uint64_t & nb10, - constant uint64_t & nb11, - constant uint64_t & nb12, - constant int64_t & ne0, - constant int64_t & ne1, - constant uint & r2, - constant uint & r3, - threadgroup int8_t * shared_values [[threadgroup(0)]], - uint3 tgpig[[threadgroup_position_in_grid]], - uint tiisg[[thread_index_in_simdgroup]], - uint sgitg[[simdgroup_index_in_threadgroup]]) { - - kernel_mul_mv_iq3_s_f32_impl(src0, src1, dst, ne00, ne01, ne02, ne10, ne12, ne0, ne1, r2, r3, shared_values, tgpig, tiisg, sgitg); -} - -void kernel_mul_mv_iq2_s_f32_impl( - device const void * src0, - device const float * src1, - device float * dst, - int64_t ne00, - int64_t ne01, - int64_t ne02, - int64_t ne10, - int64_t ne12, - int64_t ne0, - int64_t ne1, - uint r2, - uint r3, - threadgroup int8_t * shared_values, - uint3 tgpig, - uint tiisg, - uint sgitg) { - - const int nb = ne00/QK_K; - const int r0 = tgpig.x; - const int r1 = tgpig.y; - const int im = tgpig.z; - - const int first_row = (r0 * N_SIMDGROUP + sgitg) * N_DST; - const int ib_row = first_row * nb; - - const uint i12 = im%ne12; - const uint i13 = im/ne12; - - const uint offset0 = (i12/r2)*(nb*ne01) + (i13/r3)*(nb*ne01*ne02); - - device const block_iq2_s * x = (device const block_iq2_s *) src0 + ib_row + offset0; - device const float * y = (device const float *) src1 + r1*ne10 + im*ne00*ne1; - - float yl[32]; - float sumf[N_DST]={0.f}, all_sum; - - const int nb32 = nb * (QK_K / 32); - - //threadgroup uint64_t * values = (threadgroup uint64_t *)shared_values; - //{ - // int nval = 32; - // int pos = (32*sgitg + tiisg)*nval; - // for (int i = 0; i < nval; ++i) values[pos + i] = iq2s_grid[pos + i]; - // threadgroup_barrier(mem_flags::mem_threadgroup); - //} - - const int ix = tiisg; - - device const float * y4 = y + 32 * ix; - - for (int ib32 = ix; ib32 < nb32; ib32 += 32) { - - for (int i = 0; i < 32; ++i) { - yl[i] = y4[i]; - } - - const int ibl = ib32 / (QK_K / 32); - const int ib = ib32 % (QK_K / 32); - - device const block_iq2_s * xr = x + ibl; - device const uint8_t * qs = xr->qs + 4 * ib; - device const uint8_t * qh = xr->qh + ib; - device const uint8_t * sc = xr->scales + ib; - device const uint8_t * signs = qs + QK_K/8; - device const half * dh = &xr->d; - - for (int row = 0; row < N_DST; row++) { - - const float db = dh[0]; - const float d1 = db * (0.5f + (sc[0] & 0xf)); - const float d2 = db * (0.5f + (sc[0] >> 4)); - - float2 sum = {0}; - for (int l = 0; l < 2; ++l) { - //const threadgroup uint8_t * grid1 = (const threadgroup uint8_t *)(values + (qs[l+0] | ((qh[0] << (8-2*l)) & 0x300))); - //const threadgroup uint8_t * grid2 = (const threadgroup uint8_t *)(values + (qs[l+2] | ((qh[0] << (4-2*l)) & 0x300))); - constant uint8_t * grid1 = (constant uint8_t *)(iq2s_grid + (qs[l+0] | ((qh[0] << (8-2*l)) & 0x300))); - constant uint8_t * grid2 = (constant uint8_t *)(iq2s_grid + (qs[l+2] | ((qh[0] << (4-2*l)) & 0x300))); - for (int j = 0; j < 8; ++j) { - sum[0] += yl[8*l + j + 0] * grid1[j] * select(1, -1, signs[l+0] & kmask_iq2xs[j]); - sum[1] += yl[8*l + j + 16] * grid2[j] * select(1, -1, signs[l+2] & kmask_iq2xs[j]); - } - } - sumf[row] += d1 * sum[0] + d2 * sum[1]; - - dh += nb*sizeof(block_iq2_s)/2; - qs += nb*sizeof(block_iq2_s); - qh += nb*sizeof(block_iq2_s); - sc += nb*sizeof(block_iq2_s); - signs += nb*sizeof(block_iq2_s); - } - - y4 += 32 * 32; - } - - for (int row = 0; row < N_DST; ++row) { - all_sum = simd_sum(sumf[row]); - if (tiisg == 0) { - dst[r1*ne0 + im*ne0*ne1 + first_row + row] = all_sum * 0.25f; - } - } -} - -[[host_name("kernel_mul_mv_iq2_s_f32")]] -kernel void kernel_mul_mv_iq2_s_f32( - device const void * src0, - device const float * src1, - device float * dst, - constant int64_t & ne00, - constant int64_t & ne01, - constant int64_t & ne02, - constant uint64_t & nb00, - constant uint64_t & nb01, - constant uint64_t & nb02, - constant int64_t & ne10, - constant int64_t & ne11, - constant int64_t & ne12, - constant uint64_t & nb10, - constant uint64_t & nb11, - constant uint64_t & nb12, - constant int64_t & ne0, - constant int64_t & ne1, - constant uint & r2, - constant uint & r3, - threadgroup int8_t * shared_values [[threadgroup(0)]], - uint3 tgpig[[threadgroup_position_in_grid]], - uint tiisg[[thread_index_in_simdgroup]], - uint sgitg[[simdgroup_index_in_threadgroup]]) { - - kernel_mul_mv_iq2_s_f32_impl(src0, src1, dst, ne00, ne01, ne02, ne10, ne12, ne0, ne1, r2, r3, shared_values, tgpig, tiisg, sgitg); -} - -void kernel_mul_mv_iq1_s_f32_impl( - device const void * src0, - device const float * src1, - device float * dst, - int64_t ne00, - int64_t ne01, - int64_t ne02, - int64_t ne10, - int64_t ne12, - int64_t ne0, - int64_t ne1, - uint r2, - uint r3, - threadgroup int8_t * shared_value, - uint3 tgpig, - uint tiisg, - uint sgitg) { - - const int nb = ne00/QK_K; - const int r0 = tgpig.x; - const int r1 = tgpig.y; - const int im = tgpig.z; - - const int first_row = (r0 * N_SIMDGROUP + sgitg) * N_DST; - const int ib_row = first_row * nb; - - const uint i12 = im%ne12; - const uint i13 = im/ne12; - - const uint offset0 = (i12/r2)*(nb*ne01) + (i13/r3)*(nb*ne01*ne02); - device const block_iq1_s * x = (device const block_iq1_s *) src0 + ib_row + offset0; - device const float * y = (device const float *) src1 + r1*ne10 + im*ne00*ne1; - - float yl[32]; - float sumf[N_DST]={0.f}, all_sum; - - const int nb32 = nb * (QK_K / 32); - - const int ix = tiisg; - - device const float * y4 = y + 32 * ix; - - for (int ib32 = ix; ib32 < nb32; ib32 += 32) { - - float sumy = 0; - for (int i = 0; i < 32; ++i) { - yl[i] = y4[i]; - sumy += yl[i]; - } - - const int ibl = ib32 / (QK_K / 32); - const int ib = ib32 % (QK_K / 32); - - device const block_iq1_s * xr = x + ibl; - device const uint8_t * qs = xr->qs + 4 * ib; - device const uint16_t * qh = xr->qh + ib; - device const half * dh = &xr->d; - - for (int row = 0; row < N_DST; row++) { - - constant uint8_t * grid1 = (constant uint8_t *)(iq1s_grid_gpu + (qs[0] | ((qh[0] << 8) & 0x700))); - constant uint8_t * grid2 = (constant uint8_t *)(iq1s_grid_gpu + (qs[1] | ((qh[0] << 5) & 0x700))); - constant uint8_t * grid3 = (constant uint8_t *)(iq1s_grid_gpu + (qs[2] | ((qh[0] << 2) & 0x700))); - constant uint8_t * grid4 = (constant uint8_t *)(iq1s_grid_gpu + (qs[3] | ((qh[0] >> 1) & 0x700))); - - float sum = 0; - for (int j = 0; j < 4; ++j) { - sum += yl[j+ 0] * (grid1[j] & 0xf) + yl[j+ 4] * (grid1[j] >> 4) - + yl[j+ 8] * (grid2[j] & 0xf) + yl[j+12] * (grid2[j] >> 4) - + yl[j+16] * (grid3[j] & 0xf) + yl[j+20] * (grid3[j] >> 4) - + yl[j+24] * (grid4[j] & 0xf) + yl[j+28] * (grid4[j] >> 4); - } - sumf[row] += (float)dh[0] * (sum + sumy * (qh[0] & 0x8000 ? -1 - IQ1S_DELTA : -1 + IQ1S_DELTA)) * (2*((qh[0] >> 12) & 7) + 1); - - dh += nb*sizeof(block_iq1_s)/2; - qs += nb*sizeof(block_iq1_s); - qh += nb*sizeof(block_iq1_s)/2; - } - - y4 += 32 * 32; - } - - for (int row = 0; row < N_DST; ++row) { - all_sum = simd_sum(sumf[row]); - if (tiisg == 0) { - dst[r1*ne0 + im*ne0*ne1 + first_row + row] = all_sum; - } - } -} - -void kernel_mul_mv_iq1_m_f32_impl( - device const void * src0, - device const float * src1, - device float * dst, - int64_t ne00, - int64_t ne01, - int64_t ne02, - int64_t ne10, - int64_t ne12, - int64_t ne0, - int64_t ne1, - uint r2, - uint r3, - threadgroup int8_t * shared_value, - uint3 tgpig, - uint tiisg, - uint sgitg) { - - const int nb = ne00/QK_K; - const int r0 = tgpig.x; - const int r1 = tgpig.y; - const int im = tgpig.z; - - const int first_row = (r0 * N_SIMDGROUP + sgitg) * N_DST; - const int ib_row = first_row * nb; - - const uint i12 = im%ne12; - const uint i13 = im/ne12; - - const uint offset0 = (i12/r2)*(nb*ne01) + (i13/r3)*(nb*ne01*ne02); - device const block_iq1_m * x = (device const block_iq1_m *) src0 + ib_row + offset0; - device const float * y = (device const float *) src1 + r1*ne10 + im*ne00*ne1; - - float yl[32]; - float sumf[N_DST]={0.f}, all_sum; - - const int nb32 = nb * (QK_K / 32); - - const int ix = tiisg; - - device const float * y4 = y + 32 * ix; - -#if QK_K != 64 - iq1m_scale_t scale; -#endif - - for (int ib32 = ix; ib32 < nb32; ib32 += 32) { - - float4 sumy = {0.f}; - for (int i = 0; i < 8; ++i) { - yl[i+ 0] = y4[i+ 0]; sumy[0] += yl[i+ 0]; - yl[i+ 8] = y4[i+ 8]; sumy[1] += yl[i+ 8]; - yl[i+16] = y4[i+16]; sumy[2] += yl[i+16]; - yl[i+24] = y4[i+24]; sumy[3] += yl[i+24]; - } - - const int ibl = ib32 / (QK_K / 32); - const int ib = ib32 % (QK_K / 32); - - device const block_iq1_m * xr = x + ibl; - device const uint8_t * qs = xr->qs + 4 * ib; - device const uint8_t * qh = xr->qh + 2 * ib; - device const uint16_t * sc = (device const uint16_t *)xr->scales; - - for (int row = 0; row < N_DST; row++) { - -#if QK_K != 64 - scale.u16 = (sc[0] >> 12) | ((sc[1] >> 8) & 0x00f0) | ((sc[2] >> 4) & 0x0f00) | (sc[3] & 0xf000); -#endif - - constant uint8_t * grid1 = (constant uint8_t *)(iq1s_grid_gpu + (qs[0] | ((qh[0] << 8) & 0x700))); - constant uint8_t * grid2 = (constant uint8_t *)(iq1s_grid_gpu + (qs[1] | ((qh[0] << 4) & 0x700))); - constant uint8_t * grid3 = (constant uint8_t *)(iq1s_grid_gpu + (qs[2] | ((qh[1] << 8) & 0x700))); - constant uint8_t * grid4 = (constant uint8_t *)(iq1s_grid_gpu + (qs[3] | ((qh[1] << 4) & 0x700))); - - float2 sum = {0.f}; - for (int j = 0; j < 4; ++j) { - sum[0] += yl[j+ 0] * (grid1[j] & 0xf) + yl[j+ 4] * (grid1[j] >> 4) - + yl[j+ 8] * (grid2[j] & 0xf) + yl[j+12] * (grid2[j] >> 4); - sum[1] += yl[j+16] * (grid3[j] & 0xf) + yl[j+20] * (grid3[j] >> 4) - + yl[j+24] * (grid4[j] & 0xf) + yl[j+28] * (grid4[j] >> 4); - } - const float delta1 = sumy[0] * (qh[0] & 0x08 ? -1 - IQ1M_DELTA : -1 + IQ1M_DELTA) + sumy[1] * (qh[0] & 0x80 ? -1 - IQ1M_DELTA : -1 + IQ1M_DELTA); - const float delta2 = sumy[2] * (qh[1] & 0x08 ? -1 - IQ1M_DELTA : -1 + IQ1M_DELTA) + sumy[3] * (qh[1] & 0x80 ? -1 - IQ1M_DELTA : -1 + IQ1M_DELTA); -#if QK_K == 64 - const float d = (float) *((device const half *)(sc - 1)); - sumf[row] += d * ((sum[0] + delta1) * (2*((sc[0] >> (8*(ib%2)+0)) & 0xf) + 1) + - (sum[1] + delta2) * (2*((sc[0] >> (8*(ib%2)+4)) & 0xf) + 1)); -#else - sumf[row] += (float)scale.f16 * ((sum[0] + delta1) * (2*((sc[ib/2] >> (6*(ib%2)+0)) & 7) + 1) + - (sum[1] + delta2) * (2*((sc[ib/2] >> (6*(ib%2)+3)) & 7) + 1)); -#endif - - sc += nb*sizeof(block_iq1_m)/2; - qs += nb*sizeof(block_iq1_m); - qh += nb*sizeof(block_iq1_m); - } - - y4 += 32 * 32; - } - - for (int row = 0; row < N_DST; ++row) { - all_sum = simd_sum(sumf[row]); - if (tiisg == 0) { - dst[r1*ne0 + im*ne0*ne1 + first_row + row] = all_sum; - } - } -} - -void kernel_mul_mv_iq4_nl_f32_impl( - device const void * src0, - device const float * src1, - device float * dst, - int64_t ne00, - int64_t ne01, - int64_t ne02, - int64_t ne10, - int64_t ne12, - int64_t ne0, - int64_t ne1, - uint r2, - uint r3, - threadgroup int8_t * shared_values_i8, - uint3 tgpig, - uint tiisg, - uint sgitg) { - - threadgroup float * shared_values = (threadgroup float *)shared_values_i8; - const int nb = ne00/QK4_NL; - const int r0 = tgpig.x; - const int r1 = tgpig.y; - const int im = tgpig.z; - const int first_row = (r0 * 2 + sgitg) * 2; - const int ib_row = first_row * nb; - - const uint i12 = im%ne12; - const uint i13 = im/ne12; - - const uint offset0 = (i12/r2)*(nb*ne01) + (i13/r3)*(nb*ne01*ne02); - device const block_iq4_nl * x = (device const block_iq4_nl *) src0 + ib_row + offset0; - device const float * y = (device const float *) src1 + r1*ne10 + im*ne00*ne1; - - const int ix = tiisg/2; // 0...15 - const int it = tiisg%2; // 0 or 1 - - shared_values[tiisg] = kvalues_iq4nl_f[tiisg%16]; - threadgroup_barrier(mem_flags::mem_threadgroup); - - float4 yl[4]; - float sumf[2]={0.f}, all_sum; - - device const float * yb = y + ix * QK4_NL + it * 8; - - uint32_t aux32[2]; - thread const uint8_t * q8 = (thread const uint8_t *)aux32; - - float4 qf1, qf2; - - for (int ib = ix; ib < nb; ib += 16) { - - device const float4 * y4 = (device const float4 *)yb; - yl[0] = y4[0]; yl[1] = y4[4]; yl[2] = y4[1]; yl[3] = y4[5]; - - for (int row = 0; row < 2; ++row) { - - device const block_iq4_nl & xb = x[row*nb + ib]; - device const uint16_t * q4 = (device const uint16_t *)(xb.qs + 8*it); - - float4 acc1 = {0.f}, acc2 = {0.f}; - - aux32[0] = q4[0] | (q4[1] << 16); - aux32[1] = (aux32[0] >> 4) & 0x0f0f0f0f; - aux32[0] &= 0x0f0f0f0f; - qf1 = {shared_values[q8[0]], shared_values[q8[1]], shared_values[q8[2]], shared_values[q8[3]]}; - qf2 = {shared_values[q8[4]], shared_values[q8[5]], shared_values[q8[6]], shared_values[q8[7]]}; - acc1 += yl[0] * qf1; - acc2 += yl[1] * qf2; - - aux32[0] = q4[2] | (q4[3] << 16); - aux32[1] = (aux32[0] >> 4) & 0x0f0f0f0f; - aux32[0] &= 0x0f0f0f0f; - qf1 = {shared_values[q8[0]], shared_values[q8[1]], shared_values[q8[2]], shared_values[q8[3]]}; - qf2 = {shared_values[q8[4]], shared_values[q8[5]], shared_values[q8[6]], shared_values[q8[7]]}; - acc1 += yl[2] * qf1; - acc2 += yl[3] * qf2; - - acc1 += acc2; - - sumf[row] += (float)xb.d * (acc1[0] + acc1[1] + acc1[2] + acc1[3]); - - } - - yb += 16 * QK4_NL; - } - - for (int row = 0; row < 2; ++row) { - all_sum = simd_sum(sumf[row]); - if (tiisg == 0) { - dst[r1*ne0 + im*ne0*ne1 + first_row + row] = all_sum; - } - } -} - -#if QK_K != 64 -void kernel_mul_mv_iq4_xs_f32_impl( - device const void * src0, - device const float * src1, - device float * dst, - int64_t ne00, - int64_t ne01, - int64_t ne02, - int64_t ne10, - int64_t ne12, - int64_t ne0, - int64_t ne1, - uint r2, - uint r3, - threadgroup int8_t * shared_values_i8, - uint3 tgpig, - uint tiisg, - uint sgitg) { - - threadgroup float * shared_values = (threadgroup float *)shared_values_i8; - const int nb = ne00/QK_K; - const int r0 = tgpig.x; - const int r1 = tgpig.y; - const int im = tgpig.z; - const int first_row = (r0 * 2 + sgitg) * 2; - const int ib_row = first_row * nb; - - const uint i12 = im%ne12; - const uint i13 = im/ne12; - - const uint offset0 = (i12/r2)*(nb*ne01) + (i13/r3)*(nb*ne01*ne02); - device const block_iq4_xs * x = (device const block_iq4_xs *) src0 + ib_row + offset0; - device const float * y = (device const float *) src1 + r1*ne10 + im*ne00*ne1; - - const int ix = tiisg/16; // 0 or 1 - const int it = tiisg%16; // 0...15 - const int ib = it/2; - const int il = it%2; - - shared_values[tiisg] = kvalues_iq4nl_f[tiisg%16]; - threadgroup_barrier(mem_flags::mem_threadgroup); - - float4 yl[4]; - float sumf[2]={0.f}, all_sum; - - device const float * yb = y + ix * QK_K + ib * 32 + il * 8; - - uint32_t aux32[2]; - thread const uint8_t * q8 = (thread const uint8_t *)aux32; - - float4 qf1, qf2; - - for (int ibl = ix; ibl < nb; ibl += 2) { - - device const float4 * y4 = (device const float4 *)yb; - yl[0] = y4[0]; yl[1] = y4[4]; yl[2] = y4[1]; yl[3] = y4[5]; - - for (int row = 0; row < 2; ++row) { - - device const block_iq4_xs & xb = x[row*nb + ibl]; - device const uint32_t * q4 = (device const uint32_t *)(xb.qs + 16*ib + 8*il); - - float4 acc1 = {0.f}, acc2 = {0.f}; - - aux32[0] = q4[0] & 0x0f0f0f0f; - aux32[1] = (q4[0] >> 4) & 0x0f0f0f0f; - qf1 = {shared_values[q8[0]], shared_values[q8[1]], shared_values[q8[2]], shared_values[q8[3]]}; - qf2 = {shared_values[q8[4]], shared_values[q8[5]], shared_values[q8[6]], shared_values[q8[7]]}; - acc1 += yl[0] * qf1; - acc2 += yl[1] * qf2; - - aux32[0] = q4[1] & 0x0f0f0f0f; - aux32[1] = (q4[1] >> 4) & 0x0f0f0f0f; - qf1 = {shared_values[q8[0]], shared_values[q8[1]], shared_values[q8[2]], shared_values[q8[3]]}; - qf2 = {shared_values[q8[4]], shared_values[q8[5]], shared_values[q8[6]], shared_values[q8[7]]}; - acc1 += yl[2] * qf1; - acc2 += yl[3] * qf2; - - acc1 += acc2; - - const int ls = (((xb.scales_l[ib/2] >> 4*(ib%2)) & 0xf) | (((xb.scales_h >> 2*ib) & 3) << 4)) - 32; - sumf[row] += (float)xb.d * ls * (acc1[0] + acc1[1] + acc1[2] + acc1[3]); - - } - - yb += 2 * QK_K; - } - - for (int row = 0; row < 2; ++row) { - all_sum = simd_sum(sumf[row]); - if (tiisg == 0) { - dst[r1*ne0 + im*ne0*ne1 + first_row + row] = all_sum; - } - } -} -#endif - -[[host_name("kernel_mul_mv_iq1_s_f32")]] -kernel void kernel_mul_mv_iq1_s_f32( - device const void * src0, - device const float * src1, - device float * dst, - constant int64_t & ne00, - constant int64_t & ne01, - constant int64_t & ne02, - constant uint64_t & nb00, - constant uint64_t & nb01, - constant uint64_t & nb02, - constant int64_t & ne10, - constant int64_t & ne11, - constant int64_t & ne12, - constant uint64_t & nb10, - constant uint64_t & nb11, - constant uint64_t & nb12, - constant int64_t & ne0, - constant int64_t & ne1, - constant uint & r2, - constant uint & r3, - uint3 tgpig[[threadgroup_position_in_grid]], - uint tiisg[[thread_index_in_simdgroup]], - uint sgitg[[simdgroup_index_in_threadgroup]]) { - - kernel_mul_mv_iq1_s_f32_impl(src0, src1, dst, ne00, ne01, ne02, ne10, ne12, ne0, ne1, r2, r3, nullptr, tgpig, tiisg, sgitg); -} - -[[host_name("kernel_mul_mv_iq1_m_f32")]] -kernel void kernel_mul_mv_iq1_m_f32( - device const void * src0, - device const float * src1, - device float * dst, - constant int64_t & ne00, - constant int64_t & ne01, - constant int64_t & ne02, - constant uint64_t & nb00, - constant uint64_t & nb01, - constant uint64_t & nb02, - constant int64_t & ne10, - constant int64_t & ne11, - constant int64_t & ne12, - constant uint64_t & nb10, - constant uint64_t & nb11, - constant uint64_t & nb12, - constant int64_t & ne0, - constant int64_t & ne1, - constant uint & r2, - constant uint & r3, - uint3 tgpig[[threadgroup_position_in_grid]], - uint tiisg[[thread_index_in_simdgroup]], - uint sgitg[[simdgroup_index_in_threadgroup]]) { - - kernel_mul_mv_iq1_m_f32_impl(src0, src1, dst, ne00, ne01, ne02, ne10, ne12, ne0, ne1, r2, r3, nullptr, tgpig, tiisg, sgitg); -} - -[[host_name("kernel_mul_mv_iq4_nl_f32")]] -kernel void kernel_mul_mv_iq4_nl_f32( - device const void * src0, - device const float * src1, - device float * dst, - constant int64_t & ne00, - constant int64_t & ne01, - constant int64_t & ne02, - constant uint64_t & nb00, - constant uint64_t & nb01, - constant uint64_t & nb02, - constant int64_t & ne10, - constant int64_t & ne11, - constant int64_t & ne12, - constant uint64_t & nb10, - constant uint64_t & nb11, - constant uint64_t & nb12, - constant int64_t & ne0, - constant int64_t & ne1, - constant uint & r2, - constant uint & r3, - threadgroup int8_t * shared_values [[threadgroup(0)]], - uint3 tgpig[[threadgroup_position_in_grid]], - uint tiisg[[thread_index_in_simdgroup]], - uint sgitg[[simdgroup_index_in_threadgroup]]) { - - kernel_mul_mv_iq4_nl_f32_impl(src0, src1, dst, ne00, ne01, ne02, ne10, ne12, ne0, ne1, r2, r3, shared_values, tgpig, tiisg, sgitg); -} - -[[host_name("kernel_mul_mv_iq4_xs_f32")]] -kernel void kernel_mul_mv_iq4_xs_f32( - device const void * src0, - device const float * src1, - device float * dst, - constant int64_t & ne00, - constant int64_t & ne01, - constant int64_t & ne02, - constant uint64_t & nb00, - constant uint64_t & nb01, - constant uint64_t & nb02, - constant int64_t & ne10, - constant int64_t & ne11, - constant int64_t & ne12, - constant uint64_t & nb10, - constant uint64_t & nb11, - constant uint64_t & nb12, - constant int64_t & ne0, - constant int64_t & ne1, - constant uint & r2, - constant uint & r3, - threadgroup int8_t * shared_values [[threadgroup(0)]], - uint3 tgpig[[threadgroup_position_in_grid]], - uint tiisg[[thread_index_in_simdgroup]], - uint sgitg[[simdgroup_index_in_threadgroup]]) { - -#if QK_K == 64 - kernel_mul_mv_iq4_nl_f32_impl(src0, src1, dst, ne00, ne01, ne02, ne10, ne12, ne0, ne1, r2, r3, shared_values, tgpig, tiisg, sgitg); -#else - kernel_mul_mv_iq4_xs_f32_impl(src0, src1, dst, ne00, ne01, ne02, ne10, ne12, ne0, ne1, r2, r3, shared_values, tgpig, tiisg, sgitg); -#endif -} - -//============================= templates and their specializations ============================= - -// NOTE: this is not dequantizing - we are simply fitting the template -template -void dequantize_f32(device const float4x4 * src, short il, thread type4x4 & reg) { - float4x4 temp = *(((device float4x4 *)src)); - for (int i = 0; i < 16; i++){ - reg[i/4][i%4] = temp[i/4][i%4]; - } -} - -template -void dequantize_f16(device const half4x4 * src, short il, thread type4x4 & reg) { - half4x4 temp = *(((device half4x4 *)src)); - for (int i = 0; i < 16; i++){ - reg[i/4][i%4] = temp[i/4][i%4]; - } -} - -template -void dequantize_q4_0(device const block_q4_0 *xb, short il, thread type4x4 & reg) { - device const uint16_t * qs = ((device const uint16_t *)xb + 1); - const float d1 = il ? (xb->d / 16.h) : xb->d; - const float d2 = d1 / 256.f; - const float md = -8.h * xb->d; - const ushort mask0 = il ? 0x00F0 : 0x000F; - const ushort mask1 = mask0 << 8; - - for (int i=0;i<8;i++) { - reg[i/2][2*(i%2)+0] = d1 * (qs[i] & mask0) + md; - reg[i/2][2*(i%2)+1] = d2 * (qs[i] & mask1) + md; - } -} - -template -void dequantize_q4_1(device const block_q4_1 *xb, short il, thread type4x4 & reg) { - device const uint16_t * qs = ((device const uint16_t *)xb + 2); - const float d1 = il ? (xb->d / 16.h) : xb->d; - const float d2 = d1 / 256.f; - const float m = xb->m; - const ushort mask0 = il ? 0x00F0 : 0x000F; - const ushort mask1 = mask0 << 8; - - for (int i=0;i<8;i++) { - reg[i/2][2*(i%2)+0] = ((qs[i] & mask0) * d1) + m; - reg[i/2][2*(i%2)+1] = ((qs[i] & mask1) * d2) + m; - } -} - -template -void dequantize_q5_0(device const block_q5_0 *xb, short il, thread type4x4 & reg) { - device const uint16_t * qs = ((device const uint16_t *)xb + 3); - const float d = xb->d; - const float md = -16.h * xb->d; - const ushort mask = il ? 0x00F0 : 0x000F; - - const uint32_t qh = *((device const uint32_t *)xb->qh); - - const int x_mv = il ? 4 : 0; - - const int gh_mv = il ? 12 : 0; - const int gh_bk = il ? 0 : 4; - - for (int i = 0; i < 8; i++) { - // extract the 5-th bits for x0 and x1 - const uint8_t xh_0 = ((qh >> (gh_mv + 2*i )) << gh_bk) & 0x10; - const uint8_t xh_1 = ((qh >> (gh_mv + 2*i+1)) << gh_bk) & 0x10; - - // combine the 4-bits from qs with the 5th bit - const int32_t x0 = ((((qs[i] ) & mask) >> x_mv) | xh_0); - const int32_t x1 = ((((qs[i] >> 8) & mask) >> x_mv) | xh_1); - - reg[i/2][2*(i%2)+0] = d * x0 + md; - reg[i/2][2*(i%2)+1] = d * x1 + md; - } -} - -template -void dequantize_q5_1(device const block_q5_1 *xb, short il, thread type4x4 & reg) { - device const uint16_t * qs = ((device const uint16_t *)xb + 4); - const float d = xb->d; - const float m = xb->m; - const ushort mask = il ? 0x00F0 : 0x000F; - - const uint32_t qh = *((device const uint32_t *)xb->qh); - - const int x_mv = il ? 4 : 0; - - const int gh_mv = il ? 12 : 0; - const int gh_bk = il ? 0 : 4; - - for (int i = 0; i < 8; i++) { - // extract the 5-th bits for x0 and x1 - const uint8_t xh_0 = ((qh >> (gh_mv + 2*i )) << gh_bk) & 0x10; - const uint8_t xh_1 = ((qh >> (gh_mv + 2*i+1)) << gh_bk) & 0x10; - - // combine the 4-bits from qs with the 5th bit - const int32_t x0 = ((((qs[i] ) & mask) >> x_mv) | xh_0); - const int32_t x1 = ((((qs[i] >> 8) & mask) >> x_mv) | xh_1); - - reg[i/2][2*(i%2)+0] = d * x0 + m; - reg[i/2][2*(i%2)+1] = d * x1 + m; - } -} - -template -void dequantize_q8_0(device const block_q8_0 *xb, short il, thread type4x4 & reg) { - device const int8_t * qs = ((device const int8_t *)xb->qs); - const half d = xb->d; - - for (int i = 0; i < 16; i++) { - reg[i/4][i%4] = (qs[i + 16*il] * d); - } -} - -template -void dequantize_q2_K(device const block_q2_K *xb, short il, thread type4x4 & reg) { - const float d = xb->d; - const float min = xb->dmin; - device const uint8_t * q = (device const uint8_t *)xb->qs; - float dl, ml; - uint8_t sc = xb->scales[il]; - -#if QK_K == 256 - q = q + 32*(il/8) + 16*(il&1); - il = (il/2)%4; -#endif - half coef = il>1 ? (il>2 ? 1/64.h : 1/16.h) : (il>0 ? 1/4.h : 1.h); - uchar mask = il>1 ? (il>2 ? 192 : 48) : (il>0 ? 12 : 3); - dl = d * (sc & 0xF) * coef, ml = min * (sc >> 4); - for (int i = 0; i < 16; ++i) { - reg[i/4][i%4] = dl * (q[i] & mask) - ml; - } -} - -template -void dequantize_q3_K(device const block_q3_K *xb, short il, thread type4x4 & reg) { - const half d_all = xb->d; - device const uint8_t * q = (device const uint8_t *)xb->qs; - device const uint8_t * h = (device const uint8_t *)xb->hmask; - device const int8_t * scales = (device const int8_t *)xb->scales; - -#if QK_K == 256 - q = q + 32 * (il/8) + 16 * (il&1); - h = h + 16 * (il&1); - uint8_t m = 1 << (il/2); - uint16_t kmask1 = (il/4)>1 ? ((il/4)>2 ? 192 : 48) : \ - ((il/4)>0 ? 12 : 3); - uint16_t kmask2 = il/8 ? 0xF0 : 0x0F; - uint16_t scale_2 = scales[il%8], scale_1 = scales[8 + il%4]; - int16_t dl_int = (il/4)&1 ? (scale_2&kmask2) | ((scale_1&kmask1) << 2) - : (scale_2&kmask2) | ((scale_1&kmask1) << 4); - float dl = il<8 ? d_all * (dl_int - 32.f) : d_all * (dl_int / 16.f - 32.f); - const float ml = 4.f * dl; - - il = (il/2) & 3; - const half coef = il>1 ? (il>2 ? 1/64.h : 1/16.h) : (il>0 ? 1/4.h : 1.h); - const uint8_t mask = il>1 ? (il>2 ? 192 : 48) : (il>0 ? 12 : 3); - dl *= coef; - - for (int i = 0; i < 16; ++i) { - reg[i/4][i%4] = dl * (q[i] & mask) - (h[i] & m ? 0 : ml); - } -#else - float kcoef = il&1 ? 1.f/16.f : 1.f; - uint16_t kmask = il&1 ? 0xF0 : 0x0F; - float dl = d_all * ((scales[il/2] & kmask) * kcoef - 8); - float coef = il>1 ? (il>2 ? 1/64.h : 1/16.h) : (il>0 ? 1/4.h : 1.h); - uint8_t mask = il>1 ? (il>2 ? 192 : 48) : (il>0 ? 12 : 3); - uint8_t m = 1<<(il*2); - for (int i = 0; i < 16; ++i) { - reg[i/4][i%4] = coef * dl * ((q[i] & mask) - ((h[i%8] & (m * (1 + i/8))) ? 0 : 4.f/coef)); - } -#endif -} - -static inline uchar2 get_scale_min_k4_just2(int j, int k, device const uchar * q) { - return j < 4 ? uchar2{uchar(q[j+0+k] & 63), uchar(q[j+4+k] & 63)} - : uchar2{uchar((q[j+4+k] & 0xF) | ((q[j-4+k] & 0xc0) >> 2)), uchar((q[j+4+k] >> 4) | ((q[j-0+k] & 0xc0) >> 2))}; -} - -template -void dequantize_q4_K(device const block_q4_K *xb, short il, thread type4x4 & reg) { - device const uchar * q = xb->qs; - -#if QK_K == 256 - short is = (il/4) * 2; - q = q + (il/4) * 32 + 16 * (il&1); - il = il & 3; - const uchar2 sc = get_scale_min_k4_just2(is, il/2, xb->scales); - const float d = il < 2 ? xb->d : xb->d / 16.h; - const float min = xb->dmin; - const float dl = d * sc[0]; - const float ml = min * sc[1]; -#else - (void) get_scale_min_k4_just2; - - q = q + 16 * (il&1); - device const uint8_t * s = xb->scales; - device const half2 * dh = (device const half2 *)xb->d; - const float2 d = (float2)dh[0]; - const float dl = il<2 ? d[0] * (s[0]&0xF) : d[0] * (s[1]&0xF)/16.h; - const float ml = il<2 ? d[1] * (s[0]>>4) : d[1] * (s[1]>>4); -#endif - const ushort mask = il<2 ? 0x0F : 0xF0; - for (int i = 0; i < 16; ++i) { - reg[i/4][i%4] = dl * (q[i] & mask) - ml; - } -} - -template -void dequantize_q5_K(device const block_q5_K *xb, short il, thread type4x4 & reg) { - device const uint8_t * q = xb->qs; - device const uint8_t * qh = xb->qh; - -#if QK_K == 256 - short is = (il/4) * 2; - q = q + 32 * (il/4) + 16 * (il&1); - qh = qh + 16 * (il&1); - uint8_t ul = 1 << (il/2); - il = il & 3; - const uchar2 sc = get_scale_min_k4_just2(is, il/2, xb->scales); - const float d = il < 2 ? xb->d : xb->d / 16.f; - const float min = xb->dmin; - const float dl = d * sc[0]; - const float ml = min * sc[1]; - - const ushort mask = il<2 ? 0x0F : 0xF0; - const float qh_val = il<2 ? 16.f : 256.f; - for (int i = 0; i < 16; ++i) { - reg[i/4][i%4] = dl * ((q[i] & mask) + (qh[i] & ul ? qh_val : 0)) - ml; - } -#else - q = q + 16 * (il&1); - device const int8_t * s = xb->scales; - const float dl = xb->d * s[il]; - uint8_t m = 1<<(il*2); - const float coef = il<2 ? 1.f : 1.f/16.f; - const ushort mask = il<2 ? 0x0F : 0xF0; - for (int i = 0; i < 16; ++i) { - reg[i/4][i%4] = coef * dl * ((q[i] & mask) - (qh[i%8] & (m*(1+i/8)) ? 0.f : 16.f/coef)); - } -#endif -} - -template -void dequantize_q6_K(device const block_q6_K *xb, short il, thread type4x4 & reg) { - const half d_all = xb->d; - device const uint8_t * ql = (device const uint8_t *)xb->ql; - device const uint8_t * qh = (device const uint8_t *)xb->qh; - device const int8_t * scales = (device const int8_t *)xb->scales; - -#if QK_K == 256 - ql = ql + 64*(il/8) + 32*((il/2)&1) + 16*(il&1); - qh = qh + 32*(il/8) + 16*(il&1); - float sc = scales[(il%2) + 2 * ((il/2))]; - il = (il/2) & 3; -#else - ql = ql + 16 * (il&1); - float sc = scales[il]; -#endif - const uint16_t kmask1 = il>1 ? (il>2 ? 192 : 48) : (il>0 ? 12 : 3); - const uint16_t kmask2 = il>1 ? 0xF0 : 0x0F; - const float coef = il>1 ? 1.f/16.f : 1.f; - const float ml = d_all * sc * 32.f; - const float dl = d_all * sc * coef; - for (int i = 0; i < 16; ++i) { - const half q = il&1 ? ((ql[i] & kmask2) | ((qh[i] & kmask1) << 2)) - : ((ql[i] & kmask2) | ((qh[i] & kmask1) << 4)); - reg[i/4][i%4] = dl * q - ml; - } -} - -template -void dequantize_iq2_xxs(device const block_iq2_xxs * xb, short il, thread type4x4 & reg) { - // il is 0...15 for QK_K = 256 => index of block of 32 is il/2 - const float d = xb->d; - const int ib32 = il/2; - il = il%2; - // il = 0 or 1. il = 0 processes the first 16 quants in a block of 32, il = 1 the second 16 - // each block of 32 needs 2 uint32_t's for the quants & scale, so 4 uint16_t's. - device const uint16_t * q2 = xb->qs + 4*ib32; - const uint32_t aux32_g = q2[0] | (q2[1] << 16); - const uint32_t aux32_s = q2[2] | (q2[3] << 16); - thread const uint8_t * aux8 = (thread const uint8_t *)&aux32_g; - const float dl = d * (0.5f + (aux32_s >> 28)) * 0.25f; - constant uint8_t * grid = (constant uint8_t *)(iq2xxs_grid + aux8[2*il+0]); - uint8_t signs = ksigns_iq2xs[(aux32_s >> 14*il) & 127]; - for (int i = 0; i < 8; ++i) { - reg[i/4][i%4] = dl * grid[i] * (signs & kmask_iq2xs[i] ? -1.f : 1.f); - } - grid = (constant uint8_t *)(iq2xxs_grid + aux8[2*il+1]); - signs = ksigns_iq2xs[(aux32_s >> (14*il+7)) & 127]; - for (int i = 0; i < 8; ++i) { - reg[2+i/4][i%4] = dl * grid[i] * (signs & kmask_iq2xs[i] ? -1.f : 1.f); - } -} - -template -void dequantize_iq2_xs(device const block_iq2_xs * xb, short il, thread type4x4 & reg) { - // il is 0...15 for QK_K = 256 => index of block of 32 is il/2 - const float d = xb->d; - const int ib32 = il/2; - il = il%2; - // il = 0 or 1. il = 0 processes the first 16 quants in a block of 32, il = 1 the second 16 - device const uint16_t * q2 = xb->qs + 4*ib32; - const float dl = d * (0.5f + ((xb->scales[ib32] >> 4*il) & 0xf)) * 0.25f; - constant uint8_t * grid = (constant uint8_t *)(iq2xs_grid + (q2[2*il+0] & 511)); - uint8_t signs = ksigns_iq2xs[q2[2*il+0] >> 9]; - for (int i = 0; i < 8; ++i) { - reg[i/4][i%4] = dl * grid[i] * (signs & kmask_iq2xs[i] ? -1.f : 1.f); - } - grid = (constant uint8_t *)(iq2xs_grid + (q2[2*il+1] & 511)); - signs = ksigns_iq2xs[q2[2*il+1] >> 9]; - for (int i = 0; i < 8; ++i) { - reg[2+i/4][i%4] = dl * grid[i] * (signs & kmask_iq2xs[i] ? -1.f : 1.f); - } -} - -template -void dequantize_iq3_xxs(device const block_iq3_xxs * xb, short il, thread type4x4 & reg) { - // il is 0...15 for QK_K = 256 => index of block of 32 is il/2 - const float d = xb->d; - const int ib32 = il/2; - il = il%2; - // il = 0 or 1. il = 0 processes the first 16 quants in a block of 32, il = 1 the second 16 - device const uint8_t * q3 = xb->qs + 8*ib32; - device const uint16_t * gas = (device const uint16_t *)(xb->qs + QK_K/4) + 2*ib32; - const uint32_t aux32 = gas[0] | (gas[1] << 16); - const float dl = d * (0.5f + (aux32 >> 28)) * 0.5f; - constant uint8_t * grid1 = (constant uint8_t *)(iq3xxs_grid + q3[4*il+0]); - constant uint8_t * grid2 = (constant uint8_t *)(iq3xxs_grid + q3[4*il+1]); - uint8_t signs = ksigns_iq2xs[(aux32 >> 14*il) & 127]; - for (int i = 0; i < 4; ++i) { - reg[0][i] = dl * grid1[i] * (signs & kmask_iq2xs[i+0] ? -1.f : 1.f); - reg[1][i] = dl * grid2[i] * (signs & kmask_iq2xs[i+4] ? -1.f : 1.f); - } - grid1 = (constant uint8_t *)(iq3xxs_grid + q3[4*il+2]); - grid2 = (constant uint8_t *)(iq3xxs_grid + q3[4*il+3]); - signs = ksigns_iq2xs[(aux32 >> (14*il+7)) & 127]; - for (int i = 0; i < 4; ++i) { - reg[2][i] = dl * grid1[i] * (signs & kmask_iq2xs[i+0] ? -1.f : 1.f); - reg[3][i] = dl * grid2[i] * (signs & kmask_iq2xs[i+4] ? -1.f : 1.f); - } -} - -template -void dequantize_iq3_s(device const block_iq3_s * xb, short il, thread type4x4 & reg) { - // il is 0...15 for QK_K = 256 => index of block of 32 is il/2 - const float d = xb->d; - const int ib32 = il/2; - il = il%2; - // il = 0 or 1. il = 0 processes the first 16 quants in a block of 32, il = 1 the second 16 - device const uint8_t * qs = xb->qs + 8*ib32; - device const uint8_t * signs = xb->signs + 4*ib32 + 2*il; - const uint8_t qh = xb->qh[ib32] >> 4*il; - const float dl = d * (1 + 2*((xb->scales[ib32/2] >> 4*(ib32%2)) & 0xf)); - constant uint8_t * grid1 = (constant uint8_t *)(iq3s_grid + (qs[4*il+0] | ((qh << 8) & 256))); - constant uint8_t * grid2 = (constant uint8_t *)(iq3s_grid + (qs[4*il+1] | ((qh << 7) & 256))); - for (int i = 0; i < 4; ++i) { - reg[0][i] = dl * grid1[i] * select(1, -1, signs[0] & kmask_iq2xs[i+0]); - reg[1][i] = dl * grid2[i] * select(1, -1, signs[0] & kmask_iq2xs[i+4]); - } - grid1 = (constant uint8_t *)(iq3s_grid + (qs[4*il+2] | ((qh << 6) & 256))); - grid2 = (constant uint8_t *)(iq3s_grid + (qs[4*il+3] | ((qh << 5) & 256))); - for (int i = 0; i < 4; ++i) { - reg[2][i] = dl * grid1[i] * select(1, -1, signs[1] & kmask_iq2xs[i+0]); - reg[3][i] = dl * grid2[i] * select(1, -1, signs[1] & kmask_iq2xs[i+4]); - } -} - -template -void dequantize_iq2_s(device const block_iq2_s * xb, short il, thread type4x4 & reg) { - // il is 0...15 for QK_K = 256 => index of block of 32 is il/2 - const float d = xb->d; - const int ib32 = il/2; - il = il%2; - // il = 0 or 1. il = 0 processes the first 16 quants in a block of 32, il = 1 the second 16 - device const uint8_t * qs = xb->qs + 4*ib32 + 2*il; - device const uint8_t * signs = qs + QK_K/8; - const uint8_t qh = xb->qh[ib32] >> 4*il; - const float dl = d * (0.5f + ((xb->scales[ib32] >> 4*il) & 0xf)) * 0.25f; - constant uint8_t * grid1 = (constant uint8_t *)(iq2s_grid + (qs[0] | ((qh << 8) & 0x300))); - constant uint8_t * grid2 = (constant uint8_t *)(iq2s_grid + (qs[1] | ((qh << 6) & 0x300))); - for (int i = 0; i < 8; ++i) { - reg[i/4+0][i%4] = dl * grid1[i] * select(1, -1, signs[0] & kmask_iq2xs[i]); - reg[i/4+2][i%4] = dl * grid2[i] * select(1, -1, signs[1] & kmask_iq2xs[i]); - } -} - -template -void dequantize_iq1_s(device const block_iq1_s * xb, short il, thread type4x4 & reg) { - // il is 0...15 for QK_K = 256 => index of block of 32 is il/2 - const int ib32 = il/2; - il = il%2; - const float d = xb->d; - device const uint8_t * qs = xb->qs + 4*ib32 + 2*il; - device const uint16_t * qh = xb->qh; - const float dl = d * (2*((qh[ib32] >> 12) & 7) + 1); - const float ml = dl * (qh[ib32] & 0x8000 ? -1 - IQ1S_DELTA : -1 + IQ1S_DELTA); - const uint16_t h = qh[ib32] >> 6*il; - constant uint8_t * grid1 = (constant uint8_t *)(iq1s_grid_gpu + (qs[0] | ((h << 8) & 0x700))); - constant uint8_t * grid2 = (constant uint8_t *)(iq1s_grid_gpu + (qs[1] | ((h << 5) & 0x700))); - for (int i = 0; i < 4; ++i) { - reg[0][i] = dl * (grid1[i] & 0xf) + ml; - reg[1][i] = dl * (grid1[i] >> 4) + ml; - reg[2][i] = dl * (grid2[i] & 0xf) + ml; - reg[3][i] = dl * (grid2[i] >> 4) + ml; - } -} - -template -void dequantize_iq1_m(device const block_iq1_m * xb, short il, thread type4x4 & reg) { - // il is 0...15 for QK_K = 256 => index of block of 32 is il/2 - const int ib32 = il/2; - il = il%2; - device const uint16_t * sc = (device const uint16_t *)xb->scales; -#if QK_K == 64 - const float d = xb->d; -#else - iq1m_scale_t scale; - scale.u16 = (sc[0] >> 12) | ((sc[1] >> 8) & 0x00f0) | ((sc[2] >> 4) & 0x0f00) | (sc[3] & 0xf000); - const float d = scale.f16; -#endif - device const uint8_t * qs = xb->qs + 4*ib32 + 2*il; - device const uint8_t * qh = xb->qh + 2*ib32 + il; -#if QK_K == 64 - const float dl = d * (2*((sc[ib32/2] >> (8*(ib32%2)+4*il)) & 0xf) + 1); -#else - const float dl = d * (2*((sc[ib32/2] >> (6*(ib32%2)+3*il)) & 7) + 1); -#endif - const float ml1 = dl * (qh[0] & 0x08 ? -1 - IQ1M_DELTA : -1 + IQ1M_DELTA); - const float ml2 = dl * (qh[0] & 0x80 ? -1 - IQ1M_DELTA : -1 + IQ1M_DELTA); - constant uint8_t * grid1 = (constant uint8_t *)(iq1s_grid_gpu + (qs[0] | ((qh[0] << 8) & 0x700))); - constant uint8_t * grid2 = (constant uint8_t *)(iq1s_grid_gpu + (qs[1] | ((qh[0] << 4) & 0x700))); - for (int i = 0; i < 4; ++i) { - reg[0][i] = dl * (grid1[i] & 0xf) + ml1; - reg[1][i] = dl * (grid1[i] >> 4) + ml1; - reg[2][i] = dl * (grid2[i] & 0xf) + ml2; - reg[3][i] = dl * (grid2[i] >> 4) + ml2; - } -} - -template -void dequantize_iq4_nl(device const block_iq4_nl * xb, short il, thread type4x4 & reg) { - device const uint16_t * q4 = (device const uint16_t *)xb->qs; - const float d = xb->d; - uint32_t aux32; - thread const uint8_t * q8 = (thread const uint8_t *)&aux32; - for (int i = 0; i < 4; ++i) { - aux32 = ((q4[2*i] | (q4[2*i+1] << 16)) >> 4*il) & 0x0f0f0f0f; - reg[i][0] = d * kvalues_iq4nl_f[q8[0]]; - reg[i][1] = d * kvalues_iq4nl_f[q8[1]]; - reg[i][2] = d * kvalues_iq4nl_f[q8[2]]; - reg[i][3] = d * kvalues_iq4nl_f[q8[3]]; - } -} - -template -void dequantize_iq4_xs(device const block_iq4_xs * xb, short il, thread type4x4 & reg) { -#if QK_K == 64 - dequantize_iq4_nl(xb, il, reg); -#else - // il is 0...15 for QK_K = 256 => index of block of 32 is il/2 - const int ib32 = il/2; - il = il%2; - // il = 0 or 1. il = 0 processes the first 16 quants in a block of 32, il = 1 the second 16 - device const uint32_t * q4 = (device const uint32_t *)xb->qs + 4*ib32; - const int ls = ((xb->scales_l[ib32/2] >> 4*(ib32%2)) & 0xf) | (((xb->scales_h >> 2*ib32) & 3) << 4); - const float d = (float)xb->d * (ls - 32); - uint32_t aux32; - thread const uint8_t * q8 = (thread const uint8_t *)&aux32; - for (int i = 0; i < 4; ++i) { - aux32 = (q4[i] >> 4*il) & 0x0f0f0f0f; - reg[i][0] = d * kvalues_iq4nl_f[q8[0]]; - reg[i][1] = d * kvalues_iq4nl_f[q8[1]]; - reg[i][2] = d * kvalues_iq4nl_f[q8[2]]; - reg[i][3] = d * kvalues_iq4nl_f[q8[3]]; - } -#endif -} - -template -kernel void kernel_get_rows( - device const void * src0, - device const char * src1, - device float * dst, - constant int64_t & ne00, - constant uint64_t & nb01, - constant uint64_t & nb02, - constant int64_t & ne10, - constant uint64_t & nb10, - constant uint64_t & nb11, - constant uint64_t & nb1, - constant uint64_t & nb2, - uint3 tgpig[[threadgroup_position_in_grid]], - uint tiitg[[thread_index_in_threadgroup]], - uint3 tptg [[threads_per_threadgroup]]) { - //const int64_t i = tgpig; - //const int64_t r = ((device int32_t *) src1)[i]; - - const int64_t i10 = tgpig.x; - const int64_t i11 = tgpig.y; - - const int64_t r = ((device int32_t *) ((device char *) src1 + i11*nb11 + i10*nb10))[0]; - - const int64_t i02 = i11; - - for (int64_t ind = tiitg; ind < ne00/16; ind += tptg.x) { - float4x4 temp; - dequantize_func( - ((device const block_q *) ((device char *) src0 + r*nb01 + i02*nb02)) + ind/nl, ind%nl, temp); - *(((device float4x4 *) ((device char *) dst + i11*nb2 + i10*nb1)) + ind) = temp; - } -} - -kernel void kernel_get_rows_f32( - device const void * src0, - device const char * src1, - device float * dst, - constant int64_t & ne00, - constant uint64_t & nb01, - constant uint64_t & nb02, - constant int64_t & ne10, - constant uint64_t & nb10, - constant uint64_t & nb11, - constant uint64_t & nb1, - constant uint64_t & nb2, - uint3 tgpig[[threadgroup_position_in_grid]], - uint tiitg[[thread_index_in_threadgroup]], - uint3 tptg [[threads_per_threadgroup]]) { - const int64_t i10 = tgpig.x; - const int64_t i11 = tgpig.y; - - const int64_t r = ((device int32_t *) ((device char *) src1 + i11*nb11 + i10*nb10))[0]; - - const int64_t i02 = i11; - - for (int ind = tiitg; ind < ne00; ind += tptg.x) { - ((device float *) ((device char *) dst + i11*nb2 + i10*nb1))[ind] = - ((device float *) ((device char *) src0 + r*nb01 + i02*nb02))[ind]; - } -} - -kernel void kernel_get_rows_f16( - device const void * src0, - device const char * src1, - device float * dst, - constant int64_t & ne00, - constant uint64_t & nb01, - constant uint64_t & nb02, - constant int64_t & ne10, - constant uint64_t & nb10, - constant uint64_t & nb11, - constant uint64_t & nb1, - constant uint64_t & nb2, - uint3 tgpig[[threadgroup_position_in_grid]], - uint tiitg[[thread_index_in_threadgroup]], - uint3 tptg [[threads_per_threadgroup]]) { - const int64_t i10 = tgpig.x; - const int64_t i11 = tgpig.y; - - const int64_t r = ((device int32_t *) ((device char *) src1 + i11*nb11 + i10*nb10))[0]; - - const int64_t i02 = i11; - - for (int ind = tiitg; ind < ne00; ind += tptg.x) { - ((device float *) ((device char *) dst + i11*nb2 + i10*nb1))[ind] = - ((device half *) ((device char *) src0 + r*nb01 + i02*nb02))[ind]; - } -} - -kernel void kernel_get_rows_i32( - device const void * src0, - device const char * src1, - device int32_t * dst, - constant int64_t & ne00, - constant uint64_t & nb01, - constant uint64_t & nb02, - constant int64_t & ne10, - constant uint64_t & nb10, - constant uint64_t & nb11, - constant uint64_t & nb1, - constant uint64_t & nb2, - uint3 tgpig[[threadgroup_position_in_grid]], - uint tiitg[[thread_index_in_threadgroup]], - uint3 tptg [[threads_per_threadgroup]]) { - const int64_t i10 = tgpig.x; - const int64_t i11 = tgpig.y; - - const int64_t r = ((device int32_t *) ((device char *) src1 + i11*nb11 + i10*nb10))[0]; - - const int64_t i02 = i11; - - for (int ind = tiitg; ind < ne00; ind += tptg.x) { - ((device int32_t *) ((device char *) dst + i11*nb2 + i10*nb1))[ind] = - ((device int32_t *) ((device char *) src0 + r*nb01 + i02*nb02))[ind]; - } -} - - -#define BLOCK_SIZE_M 64 // 8 simdgroup matrices from matrix A -#define BLOCK_SIZE_N 32 // 4 simdgroup matrices from matrix B -#define BLOCK_SIZE_K 32 -#define THREAD_MAT_M 4 // each thread take 4 simdgroup matrices from matrix A -#define THREAD_MAT_N 2 // each thread take 2 simdgroup matrices from matrix B -#define THREAD_PER_BLOCK 128 -#define THREAD_PER_ROW 2 // 2 thread for each row in matrix A to load numbers -#define THREAD_PER_COL 4 // 4 thread for each row in matrix B to load numbers -#define SG_MAT_SIZE 64 // simdgroup matrix is of shape 8x8 -#define SG_MAT_ROW 8 - -// each block_q contains 16*nl weights -template -void kernel_mul_mm_impl(device const uchar * src0, - device const uchar * src1, - device float * dst, - constant int64_t & ne00, - constant int64_t & ne02, - constant uint64_t & nb01, - constant uint64_t & nb02, - constant int64_t & ne12, - constant uint64_t & nb10, - constant uint64_t & nb11, - constant uint64_t & nb12, - constant int64_t & ne0, - constant int64_t & ne1, - constant uint & r2, - constant uint & r3, - threadgroup uchar * shared_memory [[threadgroup(0)]], - uint3 tgpig[[threadgroup_position_in_grid]], - uint tiitg[[thread_index_in_threadgroup]], - uint sgitg[[simdgroup_index_in_threadgroup]]) { - - threadgroup half * sa = (threadgroup half *)(shared_memory); - threadgroup float * sb = (threadgroup float *)(shared_memory + 4096); - - const uint r0 = tgpig.y; - const uint r1 = tgpig.x; - const uint im = tgpig.z; - - // if this block is of 64x32 shape or smaller - short n_rows = (ne0 - r0 * BLOCK_SIZE_M < BLOCK_SIZE_M) ? (ne0 - r0 * BLOCK_SIZE_M) : BLOCK_SIZE_M; - short n_cols = (ne1 - r1 * BLOCK_SIZE_N < BLOCK_SIZE_N) ? (ne1 - r1 * BLOCK_SIZE_N) : BLOCK_SIZE_N; - - // a thread shouldn't load data outside of the matrix - short thread_row = ((short)tiitg/THREAD_PER_ROW) < n_rows ? ((short)tiitg/THREAD_PER_ROW) : n_rows - 1; - short thread_col = ((short)tiitg/THREAD_PER_COL) < n_cols ? ((short)tiitg/THREAD_PER_COL) : n_cols - 1; - - simdgroup_half8x8 ma[4]; - simdgroup_float8x8 mb[2]; - simdgroup_float8x8 c_res[8]; - for (int i = 0; i < 8; i++){ - c_res[i] = make_filled_simdgroup_matrix(0.f); - } - - short il = (tiitg % THREAD_PER_ROW); - - const uint i12 = im%ne12; - const uint i13 = im/ne12; - - uint offset0 = (i12/r2)*nb02 + (i13/r3)*(nb02*ne02); - ushort offset1 = il/nl; - - device const block_q * x = (device const block_q *)(src0 + (r0 * BLOCK_SIZE_M + thread_row) * nb01 + offset0) + offset1; - device const float * y = (device const float *)(src1 - + nb12 * im - + nb11 * (r1 * BLOCK_SIZE_N + thread_col) - + nb10 * (BLOCK_SIZE_K / THREAD_PER_COL * (tiitg % THREAD_PER_COL))); - - for (int loop_k = 0; loop_k < ne00; loop_k += BLOCK_SIZE_K) { - // load data and store to threadgroup memory - half4x4 temp_a; - dequantize_func(x, il, temp_a); - threadgroup_barrier(mem_flags::mem_threadgroup); - - #pragma unroll(16) - for (int i = 0; i < 16; i++) { - *(sa + SG_MAT_SIZE * ((tiitg / THREAD_PER_ROW / 8) \ - + (tiitg % THREAD_PER_ROW) * 16 + (i / 8) * 8) \ - + (tiitg / THREAD_PER_ROW) % 8 + (i & 7) * 8) = temp_a[i/4][i%4]; - } - - *(threadgroup float2x4 *)(sb + (tiitg % THREAD_PER_COL) * 8 * 32 + 8 * (tiitg / THREAD_PER_COL)) = *((device float2x4 *)y); - - il = (il + 2 < nl) ? il + 2 : il % 2; - x = (il < 2) ? x + (2+nl-1)/nl : x; - y += BLOCK_SIZE_K; - - threadgroup_barrier(mem_flags::mem_threadgroup); - - // load matrices from threadgroup memory and conduct outer products - threadgroup half * lsma = (sa + THREAD_MAT_M * SG_MAT_SIZE * (sgitg % 2)); - threadgroup float * lsmb = (sb + THREAD_MAT_N * SG_MAT_SIZE * (sgitg / 2)); - - #pragma unroll(4) - for (int ik = 0; ik < BLOCK_SIZE_K / 8; ik++) { - #pragma unroll(4) - for (int i = 0; i < 4; i++) { - simdgroup_load(ma[i],lsma + SG_MAT_SIZE * i); - } - simdgroup_barrier(mem_flags::mem_none); - #pragma unroll(2) - for (int i = 0; i < 2; i++) { - simdgroup_load(mb[i],lsmb + SG_MAT_SIZE * i); - } - - lsma += BLOCK_SIZE_M / SG_MAT_ROW * SG_MAT_SIZE; - lsmb += BLOCK_SIZE_N / SG_MAT_ROW * SG_MAT_SIZE; - - #pragma unroll(8) - for (int i = 0; i < 8; i++){ - simdgroup_multiply_accumulate(c_res[i], mb[i/4], ma[i%4], c_res[i]); - } - } - } - - if ((r0 + 1) * BLOCK_SIZE_M <= ne0 && (r1 + 1) * BLOCK_SIZE_N <= ne1) { - device float * C = dst + (BLOCK_SIZE_M * r0 + 32 * (sgitg & 1)) \ - + (BLOCK_SIZE_N * r1 + 16 * (sgitg >> 1)) * ne0 + im*ne1*ne0; - for (int i = 0; i < 8; i++) { - simdgroup_store(c_res[i], C + 8 * (i%4) + 8 * ne0 * (i/4), ne0); - } - } else { - // block is smaller than 64x32, we should avoid writing data outside of the matrix - threadgroup_barrier(mem_flags::mem_threadgroup); - threadgroup float * temp_str = ((threadgroup float *)shared_memory) \ - + 32 * (sgitg&1) + (16 * (sgitg>>1)) * BLOCK_SIZE_M; - for (int i = 0; i < 8; i++) { - simdgroup_store(c_res[i], temp_str + 8 * (i%4) + 8 * BLOCK_SIZE_M * (i/4), BLOCK_SIZE_M); - } - - threadgroup_barrier(mem_flags::mem_threadgroup); - - device float * C = dst + (BLOCK_SIZE_M * r0) + (BLOCK_SIZE_N * r1) * ne0 + im*ne1*ne0; - if (sgitg == 0) { - for (int i = 0; i < n_rows; i++) { - for (int j = tiitg; j < n_cols; j += BLOCK_SIZE_N) { - *(C + i + j * ne0) = *(temp_str + i + j * BLOCK_SIZE_M); - } - } - } - } -} - -// same as kernel_mul_mm_impl, but src1 and dst are accessed via indices stored in rowids -template -void kernel_mul_mm_id_impl( - device const uchar * src0, - device const uchar * src1, - threadgroup ushort2 * rowids, - device float * dst, - constant int64_t & ne00, - constant int64_t & ne02, - constant uint64_t & nb01, - constant uint64_t & nb02, - constant int64_t & ne11, - constant int64_t & ne12, - constant uint64_t & nb10, - constant uint64_t & nb11, - constant uint64_t & nb12, - constant int64_t & ne0, - int64_t ne1, - int64_t ne0ne1, - threadgroup uchar * shared_memory, - uint3 tgpig[[threadgroup_position_in_grid]], - uint tiitg[[thread_index_in_threadgroup]], - uint sgitg[[simdgroup_index_in_threadgroup]]) { - - threadgroup half * sa = (threadgroup half *)(shared_memory); - threadgroup float * sb = (threadgroup float *)(shared_memory + 4096); - - const uint r0 = tgpig.y; - const uint r1 = tgpig.x; - - if (r1 * BLOCK_SIZE_N >= ne1) return; - - // if this block is of 64x32 shape or smaller - short n_rows = (ne0 - r0 * BLOCK_SIZE_M < BLOCK_SIZE_M) ? (ne0 - r0 * BLOCK_SIZE_M) : BLOCK_SIZE_M; - short n_cols = (ne1 - r1 * BLOCK_SIZE_N < BLOCK_SIZE_N) ? (ne1 - r1 * BLOCK_SIZE_N) : BLOCK_SIZE_N; - - // a thread shouldn't load data outside of the matrix - short thread_row = ((short)tiitg/THREAD_PER_ROW) < n_rows ? ((short)tiitg/THREAD_PER_ROW) : n_rows - 1; - short thread_col = ((short)tiitg/THREAD_PER_COL) < n_cols ? ((short)tiitg/THREAD_PER_COL) : n_cols - 1; - - simdgroup_half8x8 ma[4]; - simdgroup_float8x8 mb[2]; - simdgroup_float8x8 c_res[8]; - for (int i = 0; i < 8; i++){ - c_res[i] = make_filled_simdgroup_matrix(0.f); - } - short il = (tiitg % THREAD_PER_ROW); - - ushort offset1 = il/nl; - - threadgroup const auto & id = rowids[r1 * BLOCK_SIZE_N + thread_col]; - - device const block_q * x = (device const block_q *)(src0 + (r0 * BLOCK_SIZE_M + thread_row) * nb01) + offset1; - device const float * y = (device const float *)(src1 - + nb12 * id[1] - + nb11 * (id[0] % ne11) - + nb10 * (BLOCK_SIZE_K / THREAD_PER_COL * (tiitg % THREAD_PER_COL))); - - for (int loop_k = 0; loop_k < ne00; loop_k += BLOCK_SIZE_K) { - // load data and store to threadgroup memory - half4x4 temp_a; - dequantize_func(x, il, temp_a); - threadgroup_barrier(mem_flags::mem_threadgroup); - - for (int i = 0; i < 16; i++) { - *(sa + SG_MAT_SIZE * ((tiitg / THREAD_PER_ROW / 8) \ - + (tiitg % THREAD_PER_ROW) * 16 + (i / 8) * 8) \ - + (tiitg / THREAD_PER_ROW) % 8 + (i & 7) * 8) = temp_a[i/4][i%4]; - } - - *(threadgroup float2x4 *)(sb + (tiitg % THREAD_PER_COL) * 8 * 32 + 8 * (tiitg / THREAD_PER_COL)) = *((device float2x4 *)y); - - il = (il + 2 < nl) ? il + 2 : il % 2; - x = (il < 2) ? x + (2+nl-1)/nl : x; - y += BLOCK_SIZE_K; - - threadgroup_barrier(mem_flags::mem_threadgroup); - - // load matrices from threadgroup memory and conduct outer products - threadgroup half * lsma = (sa + THREAD_MAT_M * SG_MAT_SIZE * (sgitg % 2)); - threadgroup float * lsmb = (sb + THREAD_MAT_N * SG_MAT_SIZE * (sgitg / 2)); - - for (int ik = 0; ik < BLOCK_SIZE_K / 8; ik++) { - for (int i = 0; i < 4; i++) { - simdgroup_load(ma[i], lsma + SG_MAT_SIZE * i); - } - simdgroup_barrier(mem_flags::mem_none); - for (int i = 0; i < 2; i++) { - simdgroup_load(mb[i], lsmb + SG_MAT_SIZE * i); - } - - lsma += BLOCK_SIZE_M / SG_MAT_ROW * SG_MAT_SIZE; - lsmb += BLOCK_SIZE_N / SG_MAT_ROW * SG_MAT_SIZE; - - for (int i = 0; i < 8; i++){ - simdgroup_multiply_accumulate(c_res[i], mb[i/4], ma[i%4], c_res[i]); - } - } - } - - { - threadgroup_barrier(mem_flags::mem_threadgroup); - threadgroup float * temp_str = ((threadgroup float *)shared_memory) \ - + 32 * (sgitg&1) + (16 * (sgitg>>1)) * BLOCK_SIZE_M; - for (int i = 0; i < 8; i++) { - simdgroup_store(c_res[i], temp_str + 8 * (i%4) + 8 * BLOCK_SIZE_M * (i/4), BLOCK_SIZE_M); - } - - threadgroup_barrier(mem_flags::mem_threadgroup); - - device float * C = dst + (BLOCK_SIZE_M * r0); - if (sgitg == 0) { - for (int j = tiitg; j < n_cols; j += BLOCK_SIZE_N) { - threadgroup const auto & jid = rowids[r1 * BLOCK_SIZE_N + j]; - int joff = jid[0] * ne0 + jid[1] * ne0ne1; - for (int i = 0; i < n_rows; i++) { - *(C + i + joff) = *(temp_str + i + j * BLOCK_SIZE_M); - } - } - } - } -} - -template -kernel void kernel_mul_mm(device const uchar * src0, - device const uchar * src1, - device float * dst, - constant int64_t & ne00, - constant int64_t & ne02, - constant uint64_t & nb01, - constant uint64_t & nb02, - constant int64_t & ne12, - constant uint64_t & nb10, - constant uint64_t & nb11, - constant uint64_t & nb12, - constant int64_t & ne0, - constant int64_t & ne1, - constant uint & r2, - constant uint & r3, - threadgroup uchar * shared_memory [[threadgroup(0)]], - uint3 tgpig[[threadgroup_position_in_grid]], - uint tiitg[[thread_index_in_threadgroup]], - uint sgitg[[simdgroup_index_in_threadgroup]]) { - kernel_mul_mm_impl( - src0, - src1, - dst, - ne00, - ne02, - nb01, - nb02, - ne12, - nb10, - nb11, - nb12, - ne0, - ne1, - r2, - r3, - shared_memory, - tgpig, - tiitg, - sgitg); -} - -template -kernel void kernel_mul_mm_id( - device const uchar * src0s, - device const uchar * src1, - device float * dst, - device const uchar * ids, - constant int64_t & nei0, - constant int64_t & nei1, - constant uint64_t & nbi1, - constant int64_t & ne00, - constant int64_t & ne02, - constant uint64_t & nb01, - constant uint64_t & nb02, - constant int64_t & ne11, - constant int64_t & ne12, - constant int64_t & ne13, - constant uint64_t & nb10, - constant uint64_t & nb11, - constant uint64_t & nb12, - constant int64_t & ne0, - constant int64_t & ne1, - constant uint64_t & nb1, - threadgroup uchar * shared_memory [[threadgroup(0)]], - uint3 tgpig[[threadgroup_position_in_grid]], - uint tiitg[[thread_index_in_threadgroup]], - uint sgitg[[simdgroup_index_in_threadgroup]]) { - - const int32_t i02 = tgpig.z; - tgpig.z = 0; - - device const uchar * src0 = src0s + i02*nb02; - - // row indices - threadgroup ushort2 * rowids = (threadgroup ushort2 *)(shared_memory + 8192); - - // TODO: parallelize this loop - int64_t _ne1 = 0; - for (ushort ii1 = 0; ii1 < nei1; ii1++) { - for (ushort ii0 = 0; ii0 < nei0; ii0++) { - int32_t id = ((device int32_t *) (ids + ii1*nbi1))[ii0]; - if (id == i02) { - //if (tiitg == 0) { - rowids[_ne1] = ushort2(ii0, ii1); - //} - _ne1++; - } - } - } - - threadgroup_barrier(mem_flags::mem_threadgroup); - - kernel_mul_mm_id_impl( - src0, - src1, - rowids, - dst, - ne00, - ne02, - nb01, - nb02, - ne11, - ne12, - nb10, - nb11, - nb12, - ne0, - _ne1, - ne0*ne1, - shared_memory, - tgpig, - tiitg, - sgitg); -} - -#if QK_K == 256 -#define QK_NL 16 -#else -#define QK_NL 4 -#endif - -// -// get rows -// - -typedef void (get_rows_t)( - device const void * src0, - device const char * src1, - device float * dst, - constant int64_t & ne00, - constant uint64_t & nb01, - constant uint64_t & nb02, - constant int64_t & ne10, - constant uint64_t & nb10, - constant uint64_t & nb11, - constant uint64_t & nb1, - constant uint64_t & nb2, - uint3, uint, uint3); - -//template [[host_name("kernel_get_rows_f32")]] kernel get_rows_t kernel_get_rows; -//template [[host_name("kernel_get_rows_f16")]] kernel get_rows_t kernel_get_rows; -template [[host_name("kernel_get_rows_q4_0")]] kernel get_rows_t kernel_get_rows; -template [[host_name("kernel_get_rows_q4_1")]] kernel get_rows_t kernel_get_rows; -template [[host_name("kernel_get_rows_q5_0")]] kernel get_rows_t kernel_get_rows; -template [[host_name("kernel_get_rows_q5_1")]] kernel get_rows_t kernel_get_rows; -template [[host_name("kernel_get_rows_q8_0")]] kernel get_rows_t kernel_get_rows; -template [[host_name("kernel_get_rows_q2_K")]] kernel get_rows_t kernel_get_rows; -template [[host_name("kernel_get_rows_q3_K")]] kernel get_rows_t kernel_get_rows; -template [[host_name("kernel_get_rows_q4_K")]] kernel get_rows_t kernel_get_rows; -template [[host_name("kernel_get_rows_q5_K")]] kernel get_rows_t kernel_get_rows; -template [[host_name("kernel_get_rows_q6_K")]] kernel get_rows_t kernel_get_rows; -template [[host_name("kernel_get_rows_iq2_xxs")]] kernel get_rows_t kernel_get_rows; -template [[host_name("kernel_get_rows_iq2_xs")]] kernel get_rows_t kernel_get_rows; -template [[host_name("kernel_get_rows_iq3_xxs")]] kernel get_rows_t kernel_get_rows; -template [[host_name("kernel_get_rows_iq3_s")]] kernel get_rows_t kernel_get_rows; -template [[host_name("kernel_get_rows_iq2_s")]] kernel get_rows_t kernel_get_rows; -template [[host_name("kernel_get_rows_iq1_s")]] kernel get_rows_t kernel_get_rows; -template [[host_name("kernel_get_rows_iq1_m")]] kernel get_rows_t kernel_get_rows; -template [[host_name("kernel_get_rows_iq4_nl")]] kernel get_rows_t kernel_get_rows; -#if QK_K == 64 -template [[host_name("kernel_get_rows_iq4_xs")]] kernel get_rows_t kernel_get_rows; -#else -template [[host_name("kernel_get_rows_iq4_xs")]] kernel get_rows_t kernel_get_rows; -#endif - -// -// matrix-matrix multiplication -// - -typedef decltype(kernel_mul_mm) mat_mm_t; - -template [[host_name("kernel_mul_mm_f32_f32")]] kernel mat_mm_t kernel_mul_mm; -template [[host_name("kernel_mul_mm_f16_f32")]] kernel mat_mm_t kernel_mul_mm; -template [[host_name("kernel_mul_mm_q4_0_f32")]] kernel mat_mm_t kernel_mul_mm; -template [[host_name("kernel_mul_mm_q4_1_f32")]] kernel mat_mm_t kernel_mul_mm; -template [[host_name("kernel_mul_mm_q5_0_f32")]] kernel mat_mm_t kernel_mul_mm; -template [[host_name("kernel_mul_mm_q5_1_f32")]] kernel mat_mm_t kernel_mul_mm; -template [[host_name("kernel_mul_mm_q8_0_f32")]] kernel mat_mm_t kernel_mul_mm; -template [[host_name("kernel_mul_mm_q2_K_f32")]] kernel mat_mm_t kernel_mul_mm; -template [[host_name("kernel_mul_mm_q3_K_f32")]] kernel mat_mm_t kernel_mul_mm; -template [[host_name("kernel_mul_mm_q4_K_f32")]] kernel mat_mm_t kernel_mul_mm; -template [[host_name("kernel_mul_mm_q5_K_f32")]] kernel mat_mm_t kernel_mul_mm; -template [[host_name("kernel_mul_mm_q6_K_f32")]] kernel mat_mm_t kernel_mul_mm; -template [[host_name("kernel_mul_mm_iq2_xxs_f32")]] kernel mat_mm_t kernel_mul_mm; -template [[host_name("kernel_mul_mm_iq2_xs_f32")]] kernel mat_mm_t kernel_mul_mm; -template [[host_name("kernel_mul_mm_iq3_xxs_f32")]] kernel mat_mm_t kernel_mul_mm; -template [[host_name("kernel_mul_mm_iq3_s_f32")]] kernel mat_mm_t kernel_mul_mm; -template [[host_name("kernel_mul_mm_iq2_s_f32")]] kernel mat_mm_t kernel_mul_mm; -template [[host_name("kernel_mul_mm_iq1_s_f32")]] kernel mat_mm_t kernel_mul_mm; -template [[host_name("kernel_mul_mm_iq1_m_f32")]] kernel mat_mm_t kernel_mul_mm; -template [[host_name("kernel_mul_mm_iq4_nl_f32")]] kernel mat_mm_t kernel_mul_mm; -#if QK_K == 64 -template [[host_name("kernel_mul_mm_iq4_xs_f32")]] kernel mat_mm_t kernel_mul_mm; -#else -template [[host_name("kernel_mul_mm_iq4_xs_f32")]] kernel mat_mm_t kernel_mul_mm; -#endif - -// -// indirect matrix-matrix multiplication -// - -typedef decltype(kernel_mul_mm_id) mat_mm_id_t; - -template [[host_name("kernel_mul_mm_id_f32_f32")]] kernel mat_mm_id_t kernel_mul_mm_id; -template [[host_name("kernel_mul_mm_id_f16_f32")]] kernel mat_mm_id_t kernel_mul_mm_id; -template [[host_name("kernel_mul_mm_id_q4_0_f32")]] kernel mat_mm_id_t kernel_mul_mm_id; -template [[host_name("kernel_mul_mm_id_q4_1_f32")]] kernel mat_mm_id_t kernel_mul_mm_id; -template [[host_name("kernel_mul_mm_id_q5_0_f32")]] kernel mat_mm_id_t kernel_mul_mm_id; -template [[host_name("kernel_mul_mm_id_q5_1_f32")]] kernel mat_mm_id_t kernel_mul_mm_id; -template [[host_name("kernel_mul_mm_id_q8_0_f32")]] kernel mat_mm_id_t kernel_mul_mm_id; -template [[host_name("kernel_mul_mm_id_q2_K_f32")]] kernel mat_mm_id_t kernel_mul_mm_id; -template [[host_name("kernel_mul_mm_id_q3_K_f32")]] kernel mat_mm_id_t kernel_mul_mm_id; -template [[host_name("kernel_mul_mm_id_q4_K_f32")]] kernel mat_mm_id_t kernel_mul_mm_id; -template [[host_name("kernel_mul_mm_id_q5_K_f32")]] kernel mat_mm_id_t kernel_mul_mm_id; -template [[host_name("kernel_mul_mm_id_q6_K_f32")]] kernel mat_mm_id_t kernel_mul_mm_id; -template [[host_name("kernel_mul_mm_id_iq2_xxs_f32")]] kernel mat_mm_id_t kernel_mul_mm_id; -template [[host_name("kernel_mul_mm_id_iq2_xs_f32")]] kernel mat_mm_id_t kernel_mul_mm_id; -template [[host_name("kernel_mul_mm_id_iq3_xxs_f32")]] kernel mat_mm_id_t kernel_mul_mm_id; -template [[host_name("kernel_mul_mm_id_iq3_s_f32")]] kernel mat_mm_id_t kernel_mul_mm_id; -template [[host_name("kernel_mul_mm_id_iq2_s_f32")]] kernel mat_mm_id_t kernel_mul_mm_id; -template [[host_name("kernel_mul_mm_id_iq1_s_f32")]] kernel mat_mm_id_t kernel_mul_mm_id; -template [[host_name("kernel_mul_mm_id_iq1_m_f32")]] kernel mat_mm_id_t kernel_mul_mm_id; -template [[host_name("kernel_mul_mm_id_iq4_nl_f32")]] kernel mat_mm_id_t kernel_mul_mm_id; -#if QK_K == 64 -template [[host_name("kernel_mul_mm_id_iq4_xs_f32")]] kernel mat_mm_id_t kernel_mul_mm_id; -#else -template [[host_name("kernel_mul_mm_id_iq4_xs_f32")]] kernel mat_mm_id_t kernel_mul_mm_id; -#endif - -// -// matrix-vector multiplication -// - -typedef void (kernel_mul_mv_impl_t)( - device const char * src0, - device const char * src1, - device float * dst, - int64_t ne00, - int64_t ne01, - int64_t ne02, - uint64_t nb00, - uint64_t nb01, - uint64_t nb02, - int64_t ne10, - int64_t ne11, - int64_t ne12, - uint64_t nb10, - uint64_t nb11, - uint64_t nb12, - int64_t ne0, - int64_t ne1, - uint r2, - uint r3, - uint3 tgpig, - uint tiisg); - -typedef void (kernel_mul_mv2_impl_t)( - device const void * src0, - device const float * src1, - device float * dst, - int64_t ne00, - int64_t ne01, - int64_t ne02, - int64_t ne10, - int64_t ne12, - int64_t ne0, - int64_t ne1, - uint r2, - uint r3, - threadgroup int8_t * shared_values, - uint3 tgpig, - uint tiisg, - uint sgitg); - -template -void mmv_fn( - device const char * src0, - device const char * src1, - device float * dst, - int64_t ne00, - int64_t ne01, - int64_t ne02, - uint64_t nb00, - uint64_t nb01, - uint64_t nb02, - int64_t ne10, - int64_t ne11, - int64_t ne12, - int64_t ne13, - uint64_t nb10, - uint64_t nb11, - uint64_t nb12, - int64_t ne0, - int64_t ne1, - uint64_t nb1, - uint r2, - uint r3, - threadgroup int8_t * shared_values, - uint3 tgpig, - uint tiitg, - uint tiisg, - uint sgitg) { - impl_fn(src0,src1,dst,ne00,ne01,ne02,nb00,nb01,nb02,ne10,ne11,ne12,nb10,nb11,nb12,ne0,ne1,r2,r3,tgpig,tiisg); -} - -template -void mmv_fn( - device const char * src0, - device const char * src1, - device float * dst, - int64_t ne00, - int64_t ne01, - int64_t ne02, - uint64_t nb00, - uint64_t nb01, - uint64_t nb02, - int64_t ne10, - int64_t ne11, - int64_t ne12, - int64_t ne13, - uint64_t nb10, - uint64_t nb11, - uint64_t nb12, - int64_t ne0, - int64_t ne1, - uint64_t nb1, - uint r2, - uint r3, - threadgroup int8_t * shared_values, - uint3 tgpig, - uint tiitg, - uint tiisg, - uint sgitg) { - impl_fn(src0,(const device float *)src1,dst,ne00,ne01,ne02,ne10,ne12,ne0,ne1,r2,r3,shared_values,tgpig,tiisg,sgitg); -} - -typedef decltype(mmv_fn) mul_mv_impl_fn_t; - -template -kernel void kernel_mul_mv_id( - device const char * src0s, - device const char * src1, - device float * dst, - device const char * ids, - constant int64_t & nei0, - constant int64_t & nei1, - constant uint64_t & nbi1, - constant int64_t & ne00, - constant int64_t & ne01, - constant int64_t & ne02, - constant uint64_t & nb00, - constant uint64_t & nb01, - constant uint64_t & nb02, - constant int64_t & ne10, - constant int64_t & ne11, - constant int64_t & ne12, - constant int64_t & ne13, - constant uint64_t & nb10, - constant uint64_t & nb11, - constant uint64_t & nb12, - constant int64_t & ne0, - constant int64_t & ne1, - constant uint64_t & nb1, - threadgroup int8_t * shared_values [[threadgroup(0)]], - uint3 tgpig[[threadgroup_position_in_grid]], - uint tiitg[[thread_index_in_threadgroup]], - uint tiisg[[thread_index_in_simdgroup]], - uint sgitg[[simdgroup_index_in_threadgroup]]) { - const int iid1 = tgpig.z/nei0; - const int idx = tgpig.z%nei0; - - tgpig.z = 0; - - const int32_t i02 = ((device const int32_t *) (ids + iid1*nbi1))[idx]; - - const int64_t i11 = idx % ne11; - const int64_t i12 = iid1; - - const int64_t i1 = idx; - const int64_t i2 = i12; - - device const char * src0_cur = src0s + i02*nb02; - device const char * src1_cur = src1 + i11*nb11 + i12*nb12; - device float * dst_cur = dst + i1*ne0 + i2*ne1*ne0; - - impl_fn( - /* src0 */ src0_cur, - /* src1 */ src1_cur, - /* dst */ dst_cur, - /* ne00 */ ne00, - /* ne01 */ ne01, - /* ne02 */ 1,//ne02, - /* nb00 */ nb00, - /* nb01 */ nb01, - /* nb02 */ nb02, - /* ne10 */ ne10, - /* ne11 */ 1,//ne11, - /* ne12 */ 1,//ne12, - /* ne13 */ 1,//ne13, - /* nb10 */ nb10, - /* nb11 */ nb11, - /* nb12 */ nb12, - /* ne0 */ ne0, - /* ne1 */ 1,//ne1, - /* nb1 */ nb1, - /* r2 */ 1, - /* r3 */ 1, - shared_values, - tgpig, - tiitg, - tiisg, - sgitg); -} - -typedef decltype(kernel_mul_mv_id>) kernel_mul_mv_id_t; - -template [[host_name("kernel_mul_mv_id_f32_f32")]] kernel kernel_mul_mv_id_t kernel_mul_mv_id>; -template [[host_name("kernel_mul_mv_id_f16_f32")]] kernel kernel_mul_mv_id_t kernel_mul_mv_id>; -template [[host_name("kernel_mul_mv_id_q8_0_f32")]] kernel kernel_mul_mv_id_t kernel_mul_mv_id>; -template [[host_name("kernel_mul_mv_id_q4_0_f32")]] kernel kernel_mul_mv_id_t kernel_mul_mv_id>>; -template [[host_name("kernel_mul_mv_id_q4_1_f32")]] kernel kernel_mul_mv_id_t kernel_mul_mv_id>>; -template [[host_name("kernel_mul_mv_id_q5_0_f32")]] kernel kernel_mul_mv_id_t kernel_mul_mv_id>>; -template [[host_name("kernel_mul_mv_id_q5_1_f32")]] kernel kernel_mul_mv_id_t kernel_mul_mv_id>>; -template [[host_name("kernel_mul_mv_id_q2_K_f32")]] kernel kernel_mul_mv_id_t kernel_mul_mv_id>; -template [[host_name("kernel_mul_mv_id_q3_K_f32")]] kernel kernel_mul_mv_id_t kernel_mul_mv_id>; -template [[host_name("kernel_mul_mv_id_q4_K_f32")]] kernel kernel_mul_mv_id_t kernel_mul_mv_id>; -template [[host_name("kernel_mul_mv_id_q5_K_f32")]] kernel kernel_mul_mv_id_t kernel_mul_mv_id>; -template [[host_name("kernel_mul_mv_id_q6_K_f32")]] kernel kernel_mul_mv_id_t kernel_mul_mv_id>; -template [[host_name("kernel_mul_mv_id_iq1_s_f32")]] kernel kernel_mul_mv_id_t kernel_mul_mv_id>; -template [[host_name("kernel_mul_mv_id_iq1_m_f32")]] kernel kernel_mul_mv_id_t kernel_mul_mv_id>; -template [[host_name("kernel_mul_mv_id_iq2_xxs_f32")]] kernel kernel_mul_mv_id_t kernel_mul_mv_id>; -template [[host_name("kernel_mul_mv_id_iq2_xs_f32")]] kernel kernel_mul_mv_id_t kernel_mul_mv_id>; -template [[host_name("kernel_mul_mv_id_iq3_xxs_f32")]] kernel kernel_mul_mv_id_t kernel_mul_mv_id>; -template [[host_name("kernel_mul_mv_id_iq3_s_f32")]] kernel kernel_mul_mv_id_t kernel_mul_mv_id>; -template [[host_name("kernel_mul_mv_id_iq2_s_f32")]] kernel kernel_mul_mv_id_t kernel_mul_mv_id>; -template [[host_name("kernel_mul_mv_id_iq4_nl_f32")]] kernel kernel_mul_mv_id_t kernel_mul_mv_id>; -#if QK_K != 64 -template [[host_name("kernel_mul_mv_id_iq4_xs_f32")]] kernel kernel_mul_mv_id_t kernel_mul_mv_id>; -#endif - diff --git a/ggml-mpi.c b/ggml-mpi.c deleted file mode 100644 index ae176d70758..00000000000 --- a/ggml-mpi.c +++ /dev/null @@ -1,216 +0,0 @@ -#include "ggml-mpi.h" - -#include "ggml.h" - -#include - -#include -#include - -#define MIN(a, b) ((a) < (b) ? (a) : (b)) - -#define UNUSED GGML_UNUSED - -struct ggml_mpi_context { - int rank; - int size; -}; - -void ggml_mpi_backend_init(void) { - MPI_Init(NULL, NULL); -} - -void ggml_mpi_backend_free(void) { - MPI_Finalize(); -} - -struct ggml_mpi_context * ggml_mpi_init(void) { - struct ggml_mpi_context * ctx = calloc(1, sizeof(struct ggml_mpi_context)); - - MPI_Comm_rank(MPI_COMM_WORLD, &ctx->rank); - MPI_Comm_size(MPI_COMM_WORLD, &ctx->size); - - return ctx; -} - -void ggml_mpi_free(struct ggml_mpi_context * ctx) { - free(ctx); -} - -int ggml_mpi_rank(struct ggml_mpi_context * ctx) { - return ctx->rank; -} - -void ggml_mpi_eval_init( - struct ggml_mpi_context * ctx_mpi, - int * n_tokens, - int * n_past, - int * n_threads) { - UNUSED(ctx_mpi); - - // synchronize the worker node parameters with the root node - MPI_Barrier(MPI_COMM_WORLD); - - MPI_Bcast(n_tokens, 1, MPI_INT, 0, MPI_COMM_WORLD); - MPI_Bcast(n_past, 1, MPI_INT, 0, MPI_COMM_WORLD); - MPI_Bcast(n_threads, 1, MPI_INT, 0, MPI_COMM_WORLD); -} - -static int ggml_graph_get_node_idx(struct ggml_cgraph * gf, const char * name) { - struct ggml_tensor * t = ggml_graph_get_tensor(gf, name); - if (t == NULL) { - fprintf(stderr, "%s: tensor %s not found\n", __func__, name); - return -1; - } - - for (int i = 0; i < gf->n_nodes; i++) { - if (gf->nodes[i] == t) { - return i; - } - } - - fprintf(stderr, "%s: tensor %s not found in graph (should not happen)\n", __func__, name); - return -1; -} - -static void ggml_mpi_tensor_send(struct ggml_tensor * t, int mpi_rank_dst) { - MPI_Datatype mpi_type; - - switch (t->type) { - case GGML_TYPE_I32: mpi_type = MPI_INT32_T; break; - case GGML_TYPE_F32: mpi_type = MPI_FLOAT; break; - default: GGML_ASSERT(false && "not implemented"); - } - - const int retval = MPI_Send(t->data, ggml_nelements(t), mpi_type, mpi_rank_dst, 0, MPI_COMM_WORLD); - GGML_ASSERT(retval == MPI_SUCCESS); -} - -static void ggml_mpi_tensor_recv(struct ggml_tensor * t, int mpi_rank_src) { - MPI_Datatype mpi_type; - - switch (t->type) { - case GGML_TYPE_I32: mpi_type = MPI_INT32_T; break; - case GGML_TYPE_F32: mpi_type = MPI_FLOAT; break; - default: GGML_ASSERT(false && "not implemented"); - } - - MPI_Status status; UNUSED(status); - - const int retval = MPI_Recv(t->data, ggml_nelements(t), mpi_type, mpi_rank_src, MPI_ANY_TAG, MPI_COMM_WORLD, &status); - GGML_ASSERT(retval == MPI_SUCCESS); -} - -// TODO: there are many improvements that can be done to this implementation -void ggml_mpi_graph_compute_pre( - struct ggml_mpi_context * ctx_mpi, - struct ggml_cgraph * gf, - int n_layers) { - const int mpi_rank = ctx_mpi->rank; - const int mpi_size = ctx_mpi->size; - - struct ggml_tensor * inp_tokens = ggml_graph_get_tensor(gf, "inp_tokens"); - if (inp_tokens == NULL) { - fprintf(stderr, "%s: tensor 'inp_tokens' not found\n", __func__); - return; - } - - struct ggml_tensor * inp0 = ggml_graph_get_tensor(gf, "layer_inp_0"); - if (inp0 == NULL) { - fprintf(stderr, "%s: tensor 'inp0' not found\n", __func__); - return; - } - - GGML_ASSERT(inp0 == gf->nodes[0]); - - // distribute the compute graph into slices across the MPI nodes - // - // the main node (0) processes the last layers + the remainder of the compute graph - // and is responsible to pass the input tokens to the first node (1) - // - // node 1: [( 0) * n_per_node, ( 1) * n_per_node) - // node 2: [( 1) * n_per_node, ( 2) * n_per_node) - // ... - // node n-1: [(n-2) * n_per_node, (n-1) * n_per_node) - // node 0: [(n-1) * n_per_node, n_nodes) - // - if (mpi_rank > 0) { - if (mpi_rank == 1) { - // the first node (1) receives the input tokens from the main node (0) - ggml_mpi_tensor_recv(inp_tokens, 0); - } else { - // recv input data for each node into the "inp0" tensor (i.e. the first node in the compute graph) - ggml_mpi_tensor_recv(inp0, mpi_rank - 1); - } - } else if (mpi_size > 1) { - // node 0 sends the input tokens to node 1 - ggml_mpi_tensor_send(inp_tokens, 1); - - // recv the output data from the last node - ggml_mpi_tensor_recv(inp0, mpi_size - 1); - } - - { - const int n_per_node = (n_layers + (mpi_size - 1)) / mpi_size; - - const int mpi_idx = mpi_rank > 0 ? mpi_rank - 1 : mpi_size - 1; - - const int il0 = (mpi_idx + 0) * n_per_node; - const int il1 = MIN(n_layers, (mpi_idx + 1) * n_per_node); - - char name_l0[GGML_MAX_NAME]; - char name_l1[GGML_MAX_NAME]; - - snprintf(name_l0, sizeof(name_l0), "layer_inp_%d", il0); - snprintf(name_l1, sizeof(name_l1), "layer_inp_%d", il1); - - const int idx_l0 = ggml_graph_get_node_idx(gf, name_l0); - const int idx_l1 = mpi_rank > 0 ? ggml_graph_get_node_idx(gf, name_l1) + 1 : gf->n_nodes; - - if (idx_l0 < 0 || idx_l1 < 0) { - fprintf(stderr, "%s: layer input nodes not found\n", __func__); - return; - } - - // attach the input data to all nodes that need it - // TODO: not great - should be able to do this without modifying the compute graph (see next TODO below) - for (int i = idx_l0; i < idx_l1; i++) { - if (gf->nodes[i]->src[0] == gf->nodes[idx_l0]) { - gf->nodes[i]->src[0] = inp0; - } - if (gf->nodes[i]->src[1] == gf->nodes[idx_l0]) { - gf->nodes[i]->src[1] = inp0; - } - } - - // TODO: instead of rearranging the nodes, we should be able to execute a subset of the compute graph - for (int i = 1; i < idx_l1 - idx_l0; i++) { - gf->nodes[i] = gf->nodes[idx_l0 + i]; - gf->grads[i] = gf->grads[idx_l0 + i]; - } - - // the first node performs the "get_rows" operation, the rest of the nodes get the data from the previous node - if (mpi_idx != 0) { - gf->nodes[0]->op = GGML_OP_NONE; - } - - gf->n_nodes = idx_l1 - idx_l0; - - //fprintf(stderr, "%s: node %d: processing %d nodes [%d, %d)\n", __func__, mpi_rank, gf->n_nodes, il0, il1); - } -} - -void ggml_mpi_graph_compute_post( - struct ggml_mpi_context * ctx_mpi, - struct ggml_cgraph * gf, - int n_layers) { - UNUSED(n_layers); - - const int mpi_rank = ctx_mpi->rank; - const int mpi_size = ctx_mpi->size; - - // send the output data to the next node - if (mpi_rank > 0) { - ggml_mpi_tensor_send(gf->nodes[gf->n_nodes - 1], (mpi_rank + 1) % mpi_size); - } -} diff --git a/ggml-mpi.h b/ggml-mpi.h deleted file mode 100644 index eda119d4498..00000000000 --- a/ggml-mpi.h +++ /dev/null @@ -1,39 +0,0 @@ -#pragma once - -struct ggml_context; -struct ggml_tensor; -struct ggml_cgraph; - -#ifdef __cplusplus -extern "C" { -#endif - -struct ggml_mpi_context; - -void ggml_mpi_backend_init(void); -void ggml_mpi_backend_free(void); - -struct ggml_mpi_context * ggml_mpi_init(void); -void ggml_mpi_free(struct ggml_mpi_context * ctx); - -int ggml_mpi_rank(struct ggml_mpi_context * ctx); - -void ggml_mpi_eval_init( - struct ggml_mpi_context * ctx_mpi, - int * n_tokens, - int * n_past, - int * n_threads); - -void ggml_mpi_graph_compute_pre( - struct ggml_mpi_context * ctx_mpi, - struct ggml_cgraph * gf, - int n_layers); - -void ggml_mpi_graph_compute_post( - struct ggml_mpi_context * ctx_mpi, - struct ggml_cgraph * gf, - int n_layers); - -#ifdef __cplusplus -} -#endif diff --git a/ggml-opencl.cpp b/ggml-opencl.cpp deleted file mode 100644 index 7386f4d4cd0..00000000000 --- a/ggml-opencl.cpp +++ /dev/null @@ -1,2301 +0,0 @@ -#include "ggml.h" -#include "ggml-opencl.h" -#include "ggml-backend-impl.h" - -#include -#include -#include -#include -#include -#include -#include -#include - -#define CL_TARGET_OPENCL_VERSION 120 -#include - -#if defined(_MSC_VER) -#pragma warning(disable: 4244 4267) // possible loss of data -#endif - -#define CL_DMMV_LOCAL_SIZE 32 - -#ifndef K_QUANTS_PER_ITERATION -#define K_QUANTS_PER_ITERATION 1 -#else -static_assert(K_QUANTS_PER_ITERATION == 1 || K_QUANTS_PER_ITERATION == 2, "K_QUANTS_PER_ITERATION must be 1 or 2"); -#endif - -#define MULTILINE_QUOTE(...) #__VA_ARGS__ -static std::string program_source = MULTILINE_QUOTE( - -typedef char int8_t; -typedef uchar uint8_t; -typedef short int16_t; -typedef ushort uint16_t; -typedef int int32_t; -typedef uint uint32_t; - -struct __attribute__ ((packed)) block_q4_0 -{ - half d; - uint8_t qs[QK4_0 / 2]; -}; - -struct __attribute__ ((packed)) block_q4_1 -{ - half d; - half m; - uint8_t qs[QK4_1 / 2]; -}; - -struct __attribute__ ((packed)) block_q5_0 -{ - half d; - uint32_t qh; - uint8_t qs[QK5_0 / 2]; -}; - -struct __attribute__ ((packed)) block_q5_1 -{ - half d; - half m; - uint32_t qh; - uint8_t qs[QK5_1 / 2]; -}; - -struct __attribute__ ((packed)) block_q8_0 -{ - half d; - int8_t qs[QK8_0]; -}; - -struct __attribute__((packed)) block_q2_K -{ - uint8_t scales[16]; - uint8_t qs[64]; - half d; - half dmin; -}; - -struct __attribute__((packed)) block_q3_K -{ - uint8_t hmask[32]; - uint8_t qs[64]; - uint8_t scales[12]; - half d; -}; - -struct __attribute__((packed)) block_q4_K -{ - half d; - half dmin; - uint8_t scales[12]; - uint8_t qs[128]; -}; - -struct __attribute__((packed)) block_q5_K -{ - half d; - half dmin; - uint8_t scales[12]; - uint8_t qh[32]; - uint8_t qs[128]; -}; - -struct __attribute__((packed)) block_q6_K -{ - uint8_t ql[128]; - uint8_t qh[64]; - int8_t scales[16]; - half d; -}; - -__kernel void convert_fp16_to_fp32(__global half* x, __global float* y) { - const uint i = get_global_id(0); - - y[i] = vload_half(0, &x[i]); -} - -void dequantize_q4_0(__global const struct block_q4_0* x, const int ib, const int iqs, float* v0, float* v1) { - const float d = vload_half(0, &x[ib].d); - - const uint8_t vui = x[ib].qs[iqs]; - - const int8_t vi0 = vui & 0xF; - const int8_t vi1 = vui >> 4; - - *v0 = (vi0 - 8)*d; - *v1 = (vi1 - 8)*d; -} -void dequantize_q4_1(__global const struct block_q4_1* x, const int ib, const int iqs, float* v0, float* v1) { - const float d = vload_half(0, &x[ib].d); - const float m = vload_half(0, &x[ib].m); - - const uint8_t vui = x[ib].qs[iqs]; - - const int8_t vi0 = vui & 0xF; - const int8_t vi1 = vui >> 4; - - *v0 = vi0*d + m; - *v1 = vi1*d + m; -} -void dequantize_q5_0(__global const struct block_q5_0* x, const int ib, const int iqs, float* v0, float* v1) { - const float d = vload_half(0, &x[ib].d); - - uint32_t qh = x[ib].qh; - - const uint8_t xh_0 = ((qh >> (iqs + 0)) << 4) & 0x10; - const uint8_t xh_1 = ((qh >> (iqs + 12)) ) & 0x10; - - const int32_t x0 = ((x[ib].qs[iqs] & 0xf) | xh_0) - 16; - const int32_t x1 = ((x[ib].qs[iqs] >> 4) | xh_1) - 16; - - *v0 = x0*d; - *v1 = x1*d; -} -void dequantize_q5_1(__global const struct block_q5_1* x, const int ib, const int iqs, float* v0, float* v1) { - const float d = vload_half(0, &x[ib].d); - const float m = vload_half(0, &x[ib].m); - - uint32_t qh = x[ib].qh; - - const uint8_t xh_0 = ((qh >> (iqs + 0)) << 4) & 0x10; - const uint8_t xh_1 = ((qh >> (iqs + 12)) ) & 0x10; - - const int32_t x0 = ((x[ib].qs[iqs] & 0xf) | xh_0); - const int32_t x1 = ((x[ib].qs[iqs] >> 4) | xh_1); - - *v0 = x0*d + m; - *v1 = x1*d + m; -} -void dequantize_q8_0(__global const struct block_q8_0* x, const int ib, const int iqs, float* v0, float* v1) { - const float d = vload_half(0, &x[ib].d); - - const int8_t vi0 = x[ib].qs[iqs + 0]; - const int8_t vi1 = x[ib].qs[iqs + 1]; - - *v0 = vi0*d; - *v1 = vi1*d; -} -void convert_f16(__global half* x, const int ib, const int iqs, float* v0, float* v1){ - *v0 = vload_half(0, &x[ib + 0]); - *v1 = vload_half(0, &x[ib + 1]); -} -); - -static std::string k_quants_source = MULTILINE_QUOTE( -inline void get_scale_min_k4(int j, const __global uint8_t *q, uint8_t *d, uint8_t *m) -{ - if (j < 4) - { - *d = q[j] & 63; - *m = q[j + 4] & 63; - } - else - { - *d = (q[j + 4] & 0xF) | ((q[j - 4] >> 6) << 4); - *m = (q[j + 4] >> 4) | ((q[j - 0] >> 6) << 4); - } -} - -__kernel void dequantize_block_q2_K(__global const struct block_q2_K *x, __global float *yy) -{ - const int i = get_group_id(0) + get_global_offset(0); - const int tid = get_local_id(0); - const int n = tid / 32; - const int l = tid - 32 * n; - const int is = 8 * n + l / 16; - - const uint8_t q = x[i].qs[32 * n + l]; - __global float *y = yy + get_group_id(0) * QK_K + 128 * n; - - const float dall = vload_half(0, &x[i].d); - const float dmin = vload_half(0, &x[i].dmin); - - y[l + 0] = dall * (x[i].scales[is + 0] & 0xF) * ((q >> 0) & 3) - dmin * (x[i].scales[is + 0] >> 4); - y[l + 32] = dall * (x[i].scales[is + 2] & 0xF) * ((q >> 2) & 3) - dmin * (x[i].scales[is + 2] >> 4); - y[l + 64] = dall * (x[i].scales[is + 4] & 0xF) * ((q >> 4) & 3) - dmin * (x[i].scales[is + 4] >> 4); - y[l + 96] = dall * (x[i].scales[is + 6] & 0xF) * ((q >> 6) & 3) - dmin * (x[i].scales[is + 6] >> 4); -} - -__kernel void dequantize_block_q3_K(__global const struct block_q3_K *x, __global float *yy) -{ - int r = get_local_id(0) / 4; - int i = get_group_id(0) + get_global_offset(0); - int tid = r / 2; - int is0 = r % 2; - int l0 = 16 * is0 + 4 * (get_local_id(0) % 4); - int n = tid / 4; - int j = tid - 4 * n; - - uint8_t m = 1 << (4 * n + j); - int is = 8 * n + 2 * j + is0; - int shift = 2 * j; - - int8_t us = is < 4 ? (x[i].scales[is - 0] & 0xF) | (((x[i].scales[is + 8] >> 0) & 3) << 4) - : is < 8 ? (x[i].scales[is - 0] & 0xF) | (((x[i].scales[is + 4] >> 2) & 3) << 4) - : is < 12 ? (x[i].scales[is - 8] >> 4) | (((x[i].scales[is + 0] >> 4) & 3) << 4) - : (x[i].scales[is - 8] >> 4) | (((x[i].scales[is - 4] >> 6) & 3) << 4); - float d_all = vload_half(0, &x[i].d); - float dl = d_all * (us - 32); - - __global float *y = yy + get_group_id(0) * QK_K + 128 * n + 32 * j; - const __global uint8_t *q = x[i].qs + 32 * n; - const __global uint8_t *hm = x[i].hmask; - - for (int l = l0; l < l0 + 4; ++l) - y[l] = dl * ((int8_t)((q[l] >> shift) & 3) - ((hm[l] & m) ? 0 : 4)); -} - -__kernel void dequantize_block_q4_K(__global const struct block_q4_K *x, __global float *yy) -{ - const int i = get_group_id(0) + get_global_offset(0); - const int tid = get_local_id(0); - const int il = tid / 8; - const int ir = tid % 8; - const int is = 2 * il; - const int n = 4; - - __global float *y = yy + get_group_id(0) * QK_K + 64 * il + n * ir; - - const float dall = vload_half(0, &x[i].d); - const float dmin = vload_half(0, &x[i].dmin); - - __global const uint8_t *q = x[i].qs + 32 * il + n * ir; - - uint8_t sc, m; - get_scale_min_k4(is + 0, x[i].scales, &sc, &m); - float d1 = dall * sc; - float m1 = dmin * m; - get_scale_min_k4(is + 1, x[i].scales, &sc, &m); - float d2 = dall * sc; - float m2 = dmin * m; - for (int l = 0; l < n; ++l) - { - y[l + 0] = d1 * (q[l] & 0xF) - m1; - y[l + 32] = d2 * (q[l] >> 4) - m2; - } -} - -__kernel void dequantize_block_q5_K(__global const struct block_q5_K *x, __global float *yy) -{ - const int i = get_group_id(0) + get_global_offset(0); - const int tid = get_local_id(0); - const int il = tid / 16; - const int ir = tid % 16; - const int is = 2 * il; - - __global float *y = yy + get_group_id(0) * QK_K + 64 * il + 2 * ir; - - const float dall = vload_half(0, &x[i].d); - const float dmin = vload_half(0, &x[i].dmin); - - __global const uint8_t *ql = x[i].qs + 32 * il + 2 * ir; - __global const uint8_t *qh = x[i].qh + 2 * ir; - - uint8_t sc, m; - get_scale_min_k4(is + 0, x[i].scales, &sc, &m); - const float d1 = dall * sc; - const float m1 = dmin * m; - get_scale_min_k4(is + 1, x[i].scales, &sc, &m); - const float d2 = dall * sc; - const float m2 = dmin * m; - - uint8_t hm = 1 << (2 * il); - y[0] = d1 * ((ql[0] & 0xF) + (qh[0] & hm ? 16 : 0)) - m1; - y[1] = d1 * ((ql[1] & 0xF) + (qh[1] & hm ? 16 : 0)) - m1; - hm <<= 1; - y[32] = d2 * ((ql[0] >> 4) + (qh[0] & hm ? 16 : 0)) - m2; - y[33] = d2 * ((ql[1] >> 4) + (qh[1] & hm ? 16 : 0)) - m2; -} - -__kernel void dequantize_block_q6_K(__global const struct block_q6_K *x, __global float *yy) -{ - const int i = get_group_id(0) + get_global_offset(0); - const int tid = get_local_id(0); - const int ip = tid / 32; - const int il = tid - 32 * ip; - const int is = 8 * ip + il / 16; - - __global float *y = yy + get_group_id(0) * QK_K + 128 * ip + il; - - const float d = vload_half(0, &x[i].d); - - __global const uint8_t *ql = x[i].ql + 64 * ip + il; - const uint8_t qh = x[i].qh[32 * ip + il]; - __global const int8_t *sc = x[i].scales + is; - - y[0] = d * sc[0] * ((int8_t)((ql[0] & 0xF) | (((qh >> 0) & 3) << 4)) - 32); - y[32] = d * sc[2] * ((int8_t)((ql[32] & 0xF) | (((qh >> 2) & 3) << 4)) - 32); - y[64] = d * sc[4] * ((int8_t)((ql[0] >> 4) | (((qh >> 4) & 3) << 4)) - 32); - y[96] = d * sc[6] * ((int8_t)((ql[32] >> 4) | (((qh >> 6) & 3) << 4)) - 32); -} - -__kernel void dequantize_mul_mat_vec_q2_K(__global const struct block_q2_K * xx, __local float* tmp, __global float* yy, __global float* dst, const int ncols) { - - const int row = get_group_id(0); - - const int num_blocks_per_row = ncols / QK_K; - const int ib0 = row*num_blocks_per_row + get_global_offset(0); - - __global const struct block_q2_K * x = xx + ib0; - - const int tid = get_local_id(0)/K_QUANTS_PER_ITERATION; // 0...31 or 0...15 - const int ix = get_local_id(0)%K_QUANTS_PER_ITERATION; // 0 or 0,1 - - const int step = 16/K_QUANTS_PER_ITERATION; - - const int im = tid/step; // 0 or 1. 0 computes 0..., 1 computes 128... - const int in = tid - step*im; // 0...15 or 0...7 - - const int l0 = K_QUANTS_PER_ITERATION*in; // 0...15 or 0...14 in steps of 2 - const int q_offset = 32*im + l0; - const int s_offset = 8*im; - const int y_offset = 128*im + l0; - - tmp[16 * ix + tid] = 0; - - uint32_t aux[4]; - const uint8_t * d = (const uint8_t *)aux; - const uint8_t * m = (const uint8_t *)(aux + 2); - - for (int i = ix; i < num_blocks_per_row; i += K_QUANTS_PER_ITERATION) { - - __global const float * y = yy + i * QK_K + y_offset; - __global const uint8_t * q = x[i].qs + q_offset; - - const float dall = vload_half(0, &x[i].d); - const float dmin = vload_half(0, &x[i].dmin); - - __global const uint32_t * a = (__global const uint32_t *)(x[i].scales + s_offset); - aux[0] = a[0] & 0x0f0f0f0f; - aux[1] = a[1] & 0x0f0f0f0f; - aux[2] = (a[0] >> 4) & 0x0f0f0f0f; - aux[3] = (a[1] >> 4) & 0x0f0f0f0f; - - float sum1 = 0, sum2 = 0; - for (int l = 0; l < K_QUANTS_PER_ITERATION; ++l) { - sum1 += y[l+ 0] * d[0] * ((q[l+ 0] >> 0) & 3) - + y[l+32] * d[2] * ((q[l+ 0] >> 2) & 3) - + y[l+64] * d[4] * ((q[l+ 0] >> 4) & 3) - + y[l+96] * d[6] * ((q[l+ 0] >> 6) & 3) - + y[l+16] * d[1] * ((q[l+16] >> 0) & 3) - + y[l+48] * d[3] * ((q[l+16] >> 2) & 3) - + y[l+80] * d[5] * ((q[l+16] >> 4) & 3) - +y[l+112] * d[7] * ((q[l+16] >> 6) & 3); - sum2 += y[l+ 0] * m[0] + y[l+32] * m[2] + y[l+64] * m[4] + y[ l+96] * m[6] - + y[l+16] * m[1] + y[l+48] * m[3] + y[l+80] * m[5] + y[l+112] * m[7]; - - } - tmp[16 * ix + tid] += dall * sum1 - dmin * sum2; - - } - - // sum up partial sums and write back result - barrier(CLK_LOCAL_MEM_FENCE); - for (int s=16; s>0; s>>=1) { - if (tid < s) { - tmp[tid] += tmp[tid + s]; - } - barrier(CLK_LOCAL_MEM_FENCE); - } - if (tid == 0) { - dst[row] = tmp[0]; - } -} - -__kernel void dequantize_mul_mat_vec_q3_K(__global const struct block_q3_K * xx, __local float* tmp, __global float* yy, __global float* dst, const int ncols) { - const uint16_t kmask1 = 0x0303; - const uint16_t kmask2 = 0x0f0f; - - const int row = get_group_id(0); - - const int num_blocks_per_row = ncols / QK_K; - const int ib0 = row*num_blocks_per_row + get_global_offset(0); - - __global const struct block_q3_K * x = xx + ib0; - - const int tid = get_local_id(0)/K_QUANTS_PER_ITERATION; // 0...31 or 0...16 - const int ix = get_local_id(0)%K_QUANTS_PER_ITERATION; // 0 or 0,1 - - const int n = K_QUANTS_PER_ITERATION; // iterations in the inner loop - const int step = 16/K_QUANTS_PER_ITERATION; - const int im = tid/step; // 0 or 1. 0 computes 0..., 1 computes 128... - const int in = tid - step*im; // 0....15 or 0...7 - - const uint8_t m = 1 << (4*im); - - const int l0 = n*in; // 0...15 or 0...14 in steps of 2 - const int q_offset = 32*im + l0; - const int y_offset = 128*im + l0; - - uint16_t utmp[4]; - const int8_t * s = (const int8_t *)utmp; - - const uint16_t s_shift = 4*im; - - tmp[16 * ix + tid] = 0; - - for (int i = ix; i < num_blocks_per_row; i += K_QUANTS_PER_ITERATION) { - - __global const float * y = yy + i * QK_K + y_offset; - __global const uint8_t * q = x[i].qs + q_offset; - __global const uint8_t * h = x[i].hmask + l0; - - __global const uint16_t * a = (__global const uint16_t *)x[i].scales; - utmp[0] = ((a[0] >> s_shift) & kmask2) | (((a[4] >> (s_shift + 0)) & kmask1) << 4); - utmp[1] = ((a[1] >> s_shift) & kmask2) | (((a[5] >> (s_shift + 0)) & kmask1) << 4); - utmp[2] = ((a[2] >> s_shift) & kmask2) | (((a[4] >> (s_shift + 2)) & kmask1) << 4); - utmp[3] = ((a[3] >> s_shift) & kmask2) | (((a[5] >> (s_shift + 2)) & kmask1) << 4); - - const float d = vload_half(0, &x[i].d); - - float sum = 0; - for (int l = 0; l < n; ++l) { - sum += y[l+ 0] * (s[0] - 32) * (((q[l] >> 0) & 3) - (h[l] & (m << 0) ? 0 : 4)) - + y[l+32] * (s[2] - 32) * (((q[l] >> 2) & 3) - (h[l] & (m << 1) ? 0 : 4)) - + y[l+64] * (s[4] - 32) * (((q[l] >> 4) & 3) - (h[l] & (m << 2) ? 0 : 4)) - + y[l+96] * (s[6] - 32) * (((q[l] >> 6) & 3) - (h[l] & (m << 3) ? 0 : 4)); - sum += y[l+16] * (s[1] - 32) * (((q[l+16] >> 0) & 3) - (h[l+16] & (m << 0) ? 0 : 4)) - + y[l+48] * (s[3] - 32) * (((q[l+16] >> 2) & 3) - (h[l+16] & (m << 1) ? 0 : 4)) - + y[l+80] * (s[5] - 32) * (((q[l+16] >> 4) & 3) - (h[l+16] & (m << 2) ? 0 : 4)) - + y[l+112] * (s[7] - 32) * (((q[l+16] >> 6) & 3) - (h[l+16] & (m << 3) ? 0 : 4)); - } - tmp[16 * ix + tid] += d * sum; - - } - - // sum up partial sums and write back result - barrier(CLK_LOCAL_MEM_FENCE); - for (int s=16; s>0; s>>=1) { - if (tid < s) { - tmp[tid] += tmp[tid + s]; - } - barrier(CLK_LOCAL_MEM_FENCE); - } - if (tid == 0) { - dst[row] = tmp[0]; - } -} - -__kernel void dequantize_mul_mat_vec_q4_K(__global const struct block_q4_K * xx, __local float* tmp, __global float* yy, __global float* dst, const int ncols) { - - //to rename it later, just to test now - const uint16_t kmask1 = 0x3f3f; - const uint16_t kmask2 = 0x0f0f; - const uint16_t kmask3 = 0xc0c0; - - const int row = get_group_id(0); - const int num_blocks_per_row = ncols / QK_K; - const int ib0 = row*num_blocks_per_row + get_global_offset(0); - - const int tid = get_local_id(0)/K_QUANTS_PER_ITERATION; // 0...15 - const int ix = get_local_id(0)%K_QUANTS_PER_ITERATION; - - const int step = 8/K_QUANTS_PER_ITERATION; - - const int il = tid/step; // 0...3 - const int ir = tid - step*il;// 0...3 - const int n = 2*K_QUANTS_PER_ITERATION; - - const int im = il/2; // 0 or 1. 0 computes 0,32 + 128,160, 1 computes 64,96 + 192,224 - const int in = il%2; - - const int l0 = n*(2*ir + in); - const int q_offset = 32*im + l0; - const int y_offset = 64*im + l0; - - uint16_t aux[4]; - const uint8_t * sc = (const uint8_t *)aux; - - __global const struct block_q4_K * x = xx + ib0; - - tmp[16 * ix + tid] = 0; - - for (int i = ix; i < num_blocks_per_row; i += K_QUANTS_PER_ITERATION) { - - __global const uint8_t * q1 = x[i].qs + q_offset; - __global const uint8_t * q2 = q1 + 64; - __global const float * y1 = yy + i*QK_K + y_offset; - __global const float * y2 = y1 + 128; - - const float dall = vload_half(0, &x[i].d); - const float dmin = vload_half(0, &x[i].dmin); - - __global const uint16_t * a = (__global const uint16_t *)x[i].scales; - aux[0] = a[im+0] & kmask1; - aux[1] = a[im+2] & kmask1; - aux[2] = ((a[im+4] >> 0) & kmask2) | ((a[im+0] & kmask3) >> 2); - aux[3] = ((a[im+4] >> 4) & kmask2) | ((a[im+2] & kmask3) >> 2); - - float4 s = (float4)(0.f); - float smin = 0; - for (int l = 0; l < n; ++l) { - s.x += y1[l] * (q1[l] & 0xF); s.y += y1[l+32] * (q1[l] >> 4); - s.z += y2[l] * (q2[l] & 0xF); s.w += y2[l+32] * (q2[l] >> 4); - smin += y1[l] * sc[2] + y1[l+32] * sc[3] + y2[l] * sc[6] + y2[l+32] * sc[7]; - } - tmp[16 * ix + tid] += dall * (s.x * sc[0] + s.y * sc[1] + s.z * sc[4] + s.w * sc[5]) - dmin * smin; - - } - - // sum up partial sums and write back result - barrier(CLK_LOCAL_MEM_FENCE); - for (int s=16; s>0; s>>=1) { - if (tid < s) { - tmp[tid] += tmp[tid + s]; - } - barrier(CLK_LOCAL_MEM_FENCE); - } - if (tid == 0) { - dst[row] = tmp[0]; - } -} - -__kernel void dequantize_mul_mat_vec_q5_K(__global const struct block_q5_K * xx, __local float* tmp, __global float* yy, __global float* dst, const int ncols) { - - const uint16_t kmask1 = 0x3f3f; - const uint16_t kmask2 = 0x0f0f; - const uint16_t kmask3 = 0xc0c0; - - const int row = get_group_id(0); - const int num_blocks_per_row = ncols / QK_K; - const int ib0 = row*num_blocks_per_row + get_global_offset(0); - - const int tid = get_local_id(0)/2; // 0...15 - const int ix = get_local_id(0)%2; - - const int il = tid/4; // 0...3 - const int ir = tid - 4*il;// 0...3 - const int n = 2; - - const int im = il/2; // 0 or 1. 0 computes 0,32 + 128,160, 1 computes 64,96 + 192,224 - const int in = il%2; - - const int l0 = n*(2*ir + in); - const int q_offset = 32*im + l0; - const int y_offset = 64*im + l0; - - const uint8_t hm1 = 1 << (2*im); - const uint8_t hm2 = hm1 << 4; - - uint16_t aux[4]; - const uint8_t * sc = (const uint8_t *)aux; - - __global const struct block_q5_K * x = xx + ib0; - - tmp[16 * ix + tid] = 0; - - for (int i = ix; i < num_blocks_per_row; i += 2) { - - __global const uint8_t * ql1 = x[i].qs + q_offset; - __global const uint8_t * ql2 = ql1 + 64; - __global const uint8_t * qh = x[i].qh + l0; - __global const float * y1 = yy + i*QK_K + y_offset; - __global const float * y2 = y1 + 128; - - const float dall = vload_half(0, &x[i].d); - const float dmin = vload_half(0, &x[i].dmin); - - __global const uint16_t * a = (__global const uint16_t *)x[i].scales; - aux[0] = a[im+0] & kmask1; - aux[1] = a[im+2] & kmask1; - aux[2] = ((a[im+4] >> 0) & kmask2) | ((a[im+0] & kmask3) >> 2); - aux[3] = ((a[im+4] >> 4) & kmask2) | ((a[im+2] & kmask3) >> 2); - - float4 sum = (float4)(0.f); - float smin = 0; - for (int l = 0; l < n; ++l) { - sum.x += y1[l+ 0] * ((ql1[l+ 0] & 0xF) + (qh[l+ 0] & (hm1 << 0) ? 16 : 0)) - + y1[l+16] * ((ql1[l+16] & 0xF) + (qh[l+16] & (hm1 << 0) ? 16 : 0)); - sum.y += y1[l+32] * ((ql1[l+ 0] >> 4) + (qh[l+ 0] & (hm1 << 1) ? 16 : 0)) - + y1[l+48] * ((ql1[l+16] >> 4) + (qh[l+16] & (hm1 << 1) ? 16 : 0)); - sum.z += y2[l+ 0] * ((ql2[l+ 0] & 0xF) + (qh[l+ 0] & (hm2 << 0) ? 16 : 0)) - + y2[l+16] * ((ql2[l+16] & 0xF) + (qh[l+16] & (hm2 << 0) ? 16 : 0)); - sum.w += y2[l+32] * ((ql2[l+ 0] >> 4) + (qh[l+ 0] & (hm2 << 1) ? 16 : 0)) - + y2[l+48] * ((ql2[l+16] >> 4) + (qh[l+16] & (hm2 << 1) ? 16 : 0)); - smin += (y1[l] + y1[l+16]) * sc[2] + (y1[l+32] + y1[l+48]) * sc[3] - + (y2[l] + y2[l+16]) * sc[6] + (y2[l+32] + y2[l+48]) * sc[7]; - } - tmp[16 * ix + tid] += dall * (sum.x * sc[0] + sum.y * sc[1] + sum.z * sc[4] + sum.w * sc[5]) - dmin * smin; - - } - - // sum up partial sums and write back result - barrier(CLK_LOCAL_MEM_FENCE); - for (int s=16; s>0; s>>=1) { - if (tid < s) { - tmp[tid] += tmp[tid + s]; - } - barrier(CLK_LOCAL_MEM_FENCE); - } - if (tid == 0) { - dst[row] = tmp[0]; - } -} - -__kernel void dequantize_mul_mat_vec_q6_K(__global const struct block_q6_K * xx, __local float* tmp, __global const float * yy, __global float * dst, const int ncols) { - - const int row = get_group_id(0); - - const int num_blocks_per_row = ncols / QK_K; - const int ib0 = row*num_blocks_per_row + get_global_offset(0); - - __global const struct block_q6_K * x = xx + ib0; - - const int tid = get_local_id(0)/K_QUANTS_PER_ITERATION; // 0...31 or 0...16 - const int ix = get_local_id(0)%K_QUANTS_PER_ITERATION; // 0 or 0, 1 - - const int step = 16/K_QUANTS_PER_ITERATION; // 16 or 8 - - const int im = tid/step; // 0 or 1. 0 computes 0..., 1 computes 128... - const int in = tid - step*im; // 0...15 or 0...7 - -\n#if K_QUANTS_PER_ITERATION == 1\n - const int l0 = K_QUANTS_PER_ITERATION*in; // 0...15 - const int is = 0; - -\n#else\n - - const int l0 = 4 * in; // 0, 4, 8, ..., 28 - const int is = in / 4; - -\n#endif\n - - const int ql_offset = 64*im + l0; - const int qh_offset = 32*im + l0; - const int s_offset = 8*im + is; - const int y_offset = 128*im + l0; - - tmp[16 * ix + tid] = 0; // partial sum for thread in warp - - for (int i = ix; i < num_blocks_per_row; i += K_QUANTS_PER_ITERATION) { - - __global const float * y = yy + i * QK_K + y_offset; - __global const uint8_t * ql = x[i].ql + ql_offset; - __global const uint8_t * qh = x[i].qh + qh_offset; - __global const int8_t * s = x[i].scales + s_offset; - - const float d = vload_half(0, &x[i].d); - -\n#if K_QUANTS_PER_ITERATION == 1\n - float sum = y[ 0] * s[0] * d * ((int8_t)((ql[ 0] & 0xF) | ((qh[ 0] & 0x03) << 4)) - 32) - + y[16] * s[1] * d * ((int8_t)((ql[16] & 0xF) | ((qh[16] & 0x03) << 4)) - 32) - + y[32] * s[2] * d * ((int8_t)((ql[32] & 0xF) | ((qh[ 0] & 0x0c) << 2)) - 32) - + y[48] * s[3] * d * ((int8_t)((ql[48] & 0xF) | ((qh[16] & 0x0c) << 2)) - 32) - + y[64] * s[4] * d * ((int8_t)((ql[ 0] >> 4) | ((qh[ 0] & 0x30) >> 0)) - 32) - + y[80] * s[5] * d * ((int8_t)((ql[16] >> 4) | ((qh[16] & 0x30) >> 0)) - 32) - + y[96] * s[6] * d * ((int8_t)((ql[32] >> 4) | ((qh[ 0] & 0xc0) >> 2)) - 32) - +y[112] * s[7] * d * ((int8_t)((ql[48] >> 4) | ((qh[16] & 0xc0) >> 2)) - 32); - tmp[16 * ix + tid] += sum; -\n#else\n - float sum = 0; - for (int l = 0; l < 4; ++l) { - sum += y[l+ 0] * s[0] * d * ((int8_t)((ql[l+ 0] & 0xF) | (((qh[l] >> 0) & 3) << 4)) - 32) - + y[l+32] * s[2] * d * ((int8_t)((ql[l+32] & 0xF) | (((qh[l] >> 2) & 3) << 4)) - 32) - + y[l+64] * s[4] * d * ((int8_t)((ql[l+ 0] >> 4) | (((qh[l] >> 4) & 3) << 4)) - 32) - + y[l+96] * s[6] * d * ((int8_t)((ql[l+32] >> 4) | (((qh[l] >> 6) & 3) << 4)) - 32); - } - tmp[16 * ix + tid] += sum; -\n#endif\n - - } - - // sum up partial sums and write back result - barrier(CLK_LOCAL_MEM_FENCE); - for (int s=16; s>0; s>>=1) { - if (tid < s) { - tmp[tid] += tmp[tid + s]; - } - barrier(CLK_LOCAL_MEM_FENCE); - } - if (tid == 0) { - dst[row] = tmp[0]; - } -} -); - - -std::string dequant_template = MULTILINE_QUOTE( -__kernel void KERNEL_NAME(__global X_TYPE* x, __global float* y) { - const int i = get_group_id(0)*get_local_size(0) + get_local_id(0)*2; - - if (i >= get_global_size(0)) { - return; - } - - const uint qk = QUANT_K; - const uint qr = QUANT_R; - - const int ib = i/qk + get_global_offset(0); // block index - const int iqs = (i%qk)/qr; // quant index - const int iybs = i - i%qk; // y block start index - const int y_offset = qr == 1 ? 1 : qk/2; - - // dequantize - float v0, v1; - DEQUANT_FUNC(x, ib, iqs, &v0, &v1); - y[iybs + iqs + 0] = v0; - y[iybs + iqs + y_offset] = v1; -} -); - -std::string dequant_mul_mat_vec_template = MULTILINE_QUOTE( -__kernel void KERNEL_NAME(__global X_TYPE* x, __local float* tmp, __global float* y, __global float* dst, const int ncols) { - const int local_size = get_local_size(0); - const int row = get_group_id(0); - const int tid = get_local_id(0); - - const uint qk = QUANT_K; - const uint qr = QUANT_R; - - const int col_step = local_size * 2; - const int y_offset = qr == 1 ? 1 : qk/2; - - x += get_global_offset(0); - - tmp[tid] = 0; - - for (int col = tid*2; col < ncols; col += col_step) { - const int ib = (row*ncols + col)/qk; // block index - const int iqs = (col%qk)/qr; // quant index - const int iybs = col - col%qk; // y block start index - - // dequantize - float v0, v1; - DEQUANT_FUNC(x, ib, iqs, &v0, &v1); - - // matrix multiplication - tmp[tid] += v0 * y[iybs + iqs + 0]; - tmp[tid] += v1 * y[iybs + iqs + y_offset]; - } - - // sum up partial sums and write back result - barrier(CLK_LOCAL_MEM_FENCE); - for (int s=local_size/2; s>0; s>>=1) { - if (tid < s) { - tmp[tid] += tmp[tid + s]; - } - barrier(CLK_LOCAL_MEM_FENCE); - } - if (tid == 0) { - dst[row] = tmp[0]; - } -} - -); - - -std::string mul_template = MULTILINE_QUOTE( -__kernel void KERNEL_NAME(__global TYPE* x, const int x_offset, __global TYPE* y, const int y_offset, __global TYPE* dst, const int dst_offset, const int ky) { - const int i = get_group_id(0)*get_local_size(0) + get_local_id(0); - - if (i >= get_global_size(0)) { - return; - } - - dst[dst_offset + i] = x[x_offset + i] * y[y_offset + i%ky]; -} -); - -std::string add_template = MULTILINE_QUOTE( -__kernel void add_f32(__global float * x, const int x_offset, __global float * y, const int y_offset, __global float * dst, const int dst_offset, const int ky) { - const int i = get_group_id(0)*get_local_size(0) + get_local_id(0); - - if (i >= get_global_size(0)) { - return; - } - - dst[dst_offset + i] = x[x_offset + i] + y[y_offset + i%ky]; -} -); - -#define CL_CHECK(err) \ - do { \ - cl_int err_ = (err); \ - if (err_ != CL_SUCCESS) { \ - fprintf(stderr, "ggml_opencl: %s error %d at %s:%d\n", \ - #err, err_, __FILE__, __LINE__); \ - exit(1); \ - } \ - } while (0) - -#define CLBLAST_CHECK(err) \ - do { \ - CLBlastStatusCode err_ = (err); \ - if (err_ != CLBlastSuccess) { \ - fprintf(stderr, "ggml_opencl: %s error %d at %s:%d\n", \ - #err, err_, __FILE__, __LINE__); \ - exit(1); \ - } \ - } while (0) - -std::array dequant_str_keys = { - "KERNEL_NAME", "X_TYPE", "QUANT_K", "QUANT_R", "DEQUANT_FUNC" -}; - -std::array dequant_str_values = { - "dequantize_row_q4_0", "struct block_q4_0", "QK4_0", "QR4_0", "dequantize_q4_0", - "dequantize_row_q4_1", "struct block_q4_1", "QK4_1", "QR4_1", "dequantize_q4_1", - "dequantize_row_q5_0", "struct block_q5_0", "QK5_0", "QR5_0", "dequantize_q5_0", - "dequantize_row_q5_1", "struct block_q5_1", "QK5_1", "QR5_1", "dequantize_q5_1", - "dequantize_row_q8_0", "struct block_q8_0", "QK8_0", "QR8_0", "dequantize_q8_0", - "convert_row_f16", "half", "1", "1", "convert_f16" -}; - -std::array dequant_mul_mat_vec_str_values = { - "dequantize_mul_mat_vec_q4_0", "struct block_q4_0", "QK4_0", "QR4_0", "dequantize_q4_0", - "dequantize_mul_mat_vec_q4_1", "struct block_q4_1", "QK4_1", "QR4_1", "dequantize_q4_1", - "dequantize_mul_mat_vec_q5_0", "struct block_q5_0", "QK5_0", "QR5_0", "dequantize_q5_0", - "dequantize_mul_mat_vec_q5_1", "struct block_q5_1", "QK5_1", "QR5_1", "dequantize_q5_1", - "dequantize_mul_mat_vec_q8_0", "struct block_q8_0", "QK8_0", "QR8_0", "dequantize_q8_0", - "convert_mul_mat_vec_f16", "half", "1", "1", "convert_f16" -}; - -std::array mul_str_keys = { - "KERNEL_NAME", "TYPE" -}; -std::array mul_str_values = { - "mul_f32", "float" -}; - -static std::string& replace(std::string& s, const std::string& from, const std::string& to) { - size_t pos = 0; - while ((pos = s.find(from, pos)) != std::string::npos) { - s.replace(pos, from.length(), to); - pos += to.length(); - } - return s; -} - -static std::string generate_kernels() { - std::stringstream src; - src << program_source << '\n'; - src << k_quants_source << '\n'; - for (size_t i = 0; i < dequant_str_values.size(); i += dequant_str_keys.size()) { - std::string dequant_kernel = dequant_template; - std::string dmmv_kernel = dequant_mul_mat_vec_template; - for (size_t j = 0; j < dequant_str_keys.size(); j++) { - replace(dequant_kernel, dequant_str_keys[j], dequant_str_values[i + j]); - replace(dmmv_kernel, dequant_str_keys[j], dequant_mul_mat_vec_str_values[i + j]); - } - src << dequant_kernel << '\n'; - src << dmmv_kernel << '\n'; - } - for (size_t i = 0; i < mul_str_values.size(); i += mul_str_keys.size()) { - std::string mul_kernel = mul_template; - for (size_t j = 0; j < mul_str_keys.size(); j++) { - replace(mul_kernel, mul_str_keys[j], mul_str_values[i + j]); - } - src << mul_kernel << '\n'; - } - src << add_template << '\n'; - - return src.str(); -} - -static cl_platform_id platform; -static cl_device_id device; -static cl_context context; -static cl_command_queue queue; -static cl_program program; -static cl_kernel convert_row_f16_cl; -static cl_kernel dequantize_row_q4_0_cl, dequantize_row_q4_1_cl, dequantize_row_q5_0_cl, dequantize_row_q5_1_cl, dequantize_row_q8_0_cl; -static cl_kernel dequantize_mul_mat_vec_q4_0_cl, dequantize_mul_mat_vec_q4_1_cl, dequantize_mul_mat_vec_q5_0_cl, dequantize_mul_mat_vec_q5_1_cl, dequantize_mul_mat_vec_q8_0_cl, convert_mul_mat_vec_f16_cl; -static cl_kernel dequantize_block_q2_k_cl, dequantize_block_q3_k_cl, dequantize_block_q4_k_cl, dequantize_block_q5_k_cl, dequantize_block_q6_k_cl; -static cl_kernel dequantize_mul_mat_vec_q2_K_cl, dequantize_mul_mat_vec_q3_K_cl, dequantize_mul_mat_vec_q4_K_cl, dequantize_mul_mat_vec_q5_K_cl, dequantize_mul_mat_vec_q6_K_cl; -static cl_kernel mul_f32_cl; -static cl_kernel add_f32_cl; -static bool fp16_support; - -static cl_program build_program_from_source(cl_context ctx, cl_device_id dev, const char* program_buffer) { - cl_program p; - char *program_log; - size_t program_size; - size_t log_size; - int err; - - program_size = strlen(program_buffer); - - p = clblast::clCreateProgramWithSource(ctx, 1, (const char**)&program_buffer, &program_size, &err); - if(err < 0) { - fprintf(stderr, "OpenCL error creating program"); - exit(1); - } - - std::string compile_opts = "-cl-mad-enable -cl-unsafe-math-optimizations -cl-finite-math-only -cl-fast-relaxed-math " - "-DQK4_0=32 -DQR4_0=2 -DQK4_1=32 -DQR4_1=2 -DQK5_0=32 -DQR5_0=2 -DQK5_1=32 -DQR5_1=2 -DQK8_0=32 -DQR8_0=1 " - "-DQK_K=256 -DK_QUANTS_PER_ITERATION=" + std::to_string(K_QUANTS_PER_ITERATION); - - err = clblast::clBuildProgram(p, 0, NULL, compile_opts.c_str(), NULL, NULL); - if(err < 0) { - - clblast::clGetProgramBuildInfo(p, dev, CL_PROGRAM_BUILD_LOG, 0, NULL, &log_size); - program_log = (char*) malloc(log_size + 1); - program_log[log_size] = '\0'; - clblast::clGetProgramBuildInfo(p, dev, CL_PROGRAM_BUILD_LOG, log_size + 1, program_log, NULL); - fprintf(stderr, "ggml_opencl: kernel compile error:\n\n%s\n", program_log); - free(program_log); - exit(1); - } - - return p; -} - -void ggml_cl_init(void) { - static bool initialized = false; - if (initialized) { - return; - } - initialized = true; - - cl_int err; - - struct cl_device; - struct cl_platform { - cl_platform_id id; - unsigned number; - char name[128]; - char vendor[128]; - struct cl_device * devices; - unsigned n_devices; - struct cl_device * default_device; - }; - - struct cl_device { - struct cl_platform * platform; - cl_device_id id; - unsigned number; - cl_device_type type; - char name[128]; - }; - - enum { NPLAT = 16, NDEV = 16 }; - - struct cl_platform platforms[NPLAT]; - unsigned n_platforms = 0; - struct cl_device devices[NDEV]; - unsigned n_devices = 0; - struct cl_device * default_device = NULL; - - platform = NULL; - device = NULL; - - cl_platform_id platform_ids[NPLAT]; - CL_CHECK(clblast::clGetPlatformIDs(NPLAT, platform_ids, &n_platforms)); - - for (unsigned i = 0; i < n_platforms; i++) { - struct cl_platform * p = &platforms[i]; - p->number = i; - p->id = platform_ids[i]; - CL_CHECK(clblast::clGetPlatformInfo(p->id, CL_PLATFORM_NAME, sizeof(p->name), &p->name, NULL)); - CL_CHECK(clblast::clGetPlatformInfo(p->id, CL_PLATFORM_VENDOR, sizeof(p->vendor), &p->vendor, NULL)); - - cl_device_id device_ids[NDEV]; - cl_int clGetDeviceIDsError = clblast::clGetDeviceIDs(p->id, CL_DEVICE_TYPE_ALL, NDEV, device_ids, &p->n_devices); - if (clGetDeviceIDsError == CL_DEVICE_NOT_FOUND) { - p->n_devices = 0; - } else { - CL_CHECK(clGetDeviceIDsError); - } - p->devices = p->n_devices > 0 ? &devices[n_devices] : NULL; - p->default_device = NULL; - - for (unsigned j = 0; j < p->n_devices; j++) { - struct cl_device * d = &devices[n_devices]; - d->number = n_devices++; - d->id = device_ids[j]; - d->platform = p; - CL_CHECK(clblast::clGetDeviceInfo(d->id, CL_DEVICE_NAME, sizeof(d->name), &d->name, NULL)); - CL_CHECK(clblast::clGetDeviceInfo(d->id, CL_DEVICE_TYPE, sizeof(d->type), &d->type, NULL)); - - if (p->default_device == NULL && d->type == CL_DEVICE_TYPE_GPU) { - p->default_device = d; - } - } - - if (default_device == NULL && p->default_device != NULL) { - default_device = p->default_device; - } - } - - if (n_devices == 0) { - fprintf(stderr, "ggml_opencl: could find any OpenCL devices.\n"); - exit(1); - } - - char * user_platform_string = getenv("GGML_OPENCL_PLATFORM"); - char * user_device_string = getenv("GGML_OPENCL_DEVICE"); - int user_platform_number = -1; - int user_device_number = -1; - - unsigned n; - if (user_platform_string != NULL && sscanf(user_platform_string, " %u", &n) == 1 && n < n_platforms) { - user_platform_number = (int)n; - } - if (user_device_string != NULL && sscanf(user_device_string, " %u", &n) == 1 && n < n_devices) { - user_device_number = (int)n; - } - if (user_platform_number != -1 && user_device_number != -1) { - cl_platform* platform = &platforms[user_platform_number]; - if ((unsigned)user_device_number >= platform->n_devices) { - fprintf(stderr, "ggml_opencl: invalid device number %d\n", user_device_number); - exit(1); - } - default_device = &platform->devices[user_device_number]; - } else { - - struct cl_device * selected_devices = devices; - unsigned n_selected_devices = n_devices; - - if (user_platform_number == -1 && user_platform_string != NULL && user_platform_string[0] != 0) { - for (unsigned i = 0; i < n_platforms; i++) { - struct cl_platform * p = &platforms[i]; - if (strstr(p->name, user_platform_string) != NULL || - strstr(p->vendor, user_platform_string) != NULL) { - user_platform_number = (int)i; - break; - } - } - if (user_platform_number == -1) { - fprintf(stderr, "ggml_opencl: no platform matching '%s' was found.\n", user_platform_string); - exit(1); - } - } - if (user_platform_number != -1) { - struct cl_platform * p = &platforms[user_platform_number]; - selected_devices = p->devices; - n_selected_devices = p->n_devices; - default_device = p->default_device; - if (n_selected_devices == 0) { - fprintf(stderr, "ggml_opencl: selected platform '%s' does not have any devices.\n", p->name); - exit(1); - } - } - - if (user_device_number == -1 && user_device_string != NULL && user_device_string[0] != 0) { - for (unsigned i = 0; i < n_selected_devices; i++) { - struct cl_device * d = &selected_devices[i]; - if (strstr(d->name, user_device_string) != NULL) { - user_device_number = d->number; - break; - } - } - if (user_device_number == -1) { - fprintf(stderr, "ggml_opencl: no device matching '%s' was found.\n", user_device_string); - exit(1); - } - } - if (user_device_number != -1) { - selected_devices = &devices[user_device_number]; - n_selected_devices = 1; - default_device = &selected_devices[0]; - } - - GGML_ASSERT(n_selected_devices > 0); - - if (default_device == NULL) { - default_device = &selected_devices[0]; - } - } - - fprintf(stderr, "ggml_opencl: selecting platform: '%s'\n", default_device->platform->name); - fprintf(stderr, "ggml_opencl: selecting device: '%s'\n", default_device->name); - if (default_device->type != CL_DEVICE_TYPE_GPU) { - fprintf(stderr, "ggml_opencl: warning, not a GPU: '%s'.\n", default_device->name); - } - - platform = default_device->platform->id; - device = default_device->id; - - size_t ext_str_size; - clblast::clGetDeviceInfo(device, CL_DEVICE_EXTENSIONS, 0, NULL, &ext_str_size); - char *ext_buffer = (char *)alloca(ext_str_size + 1); - clblast::clGetDeviceInfo(device, CL_DEVICE_EXTENSIONS, ext_str_size, ext_buffer, NULL); - ext_buffer[ext_str_size] = '\0'; // ensure it is null terminated - // Disabled due to faulty outputs - // Check if ext_buffer contains cl_khr_fp16 - fp16_support = false; // strstr(ext_buffer, "cl_khr_fp16") != NULL; - // fprintf(stderr, "ggml_opencl: device FP16 support: %s\n", fp16_support ? "true" : "false"); - - cl_context_properties properties[] = { - (intptr_t)CL_CONTEXT_PLATFORM, (intptr_t)platform, 0 - }; - - CL_CHECK((context = clblast::clCreateContext(properties, 1, &device, NULL, NULL, &err), err)); - - CL_CHECK((queue = clblast::clCreateCommandQueue(context, device, CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE, &err), - (err != CL_INVALID_QUEUE_PROPERTIES && err != CL_INVALID_VALUE ? err : - (queue = clblast::clCreateCommandQueue(context, device, 0, &err), err) - ))); - - const std::string kernel_src = generate_kernels(); - - program = build_program_from_source(context, device, kernel_src.c_str()); - - // FP16 to FP32 kernel - CL_CHECK((convert_row_f16_cl = clblast::clCreateKernel(program, "convert_row_f16", &err), err)); - - // Dequantize kernels - CL_CHECK((dequantize_row_q4_0_cl = clblast::clCreateKernel(program, "dequantize_row_q4_0", &err), err)); - CL_CHECK((dequantize_row_q4_1_cl = clblast::clCreateKernel(program, "dequantize_row_q4_1", &err), err)); - CL_CHECK((dequantize_row_q5_0_cl = clblast::clCreateKernel(program, "dequantize_row_q5_0", &err), err)); - CL_CHECK((dequantize_row_q5_1_cl = clblast::clCreateKernel(program, "dequantize_row_q5_1", &err), err)); - CL_CHECK((dequantize_row_q8_0_cl = clblast::clCreateKernel(program, "dequantize_row_q8_0", &err), err)); - CL_CHECK((dequantize_row_q8_0_cl = clblast::clCreateKernel(program, "dequantize_row_q8_0", &err), err)); - CL_CHECK((dequantize_block_q2_k_cl = clblast::clCreateKernel(program, "dequantize_block_q2_K", &err), err)); - CL_CHECK((dequantize_block_q3_k_cl = clblast::clCreateKernel(program, "dequantize_block_q3_K", &err), err)); - CL_CHECK((dequantize_block_q4_k_cl = clblast::clCreateKernel(program, "dequantize_block_q4_K", &err), err)); - CL_CHECK((dequantize_block_q5_k_cl = clblast::clCreateKernel(program, "dequantize_block_q5_K", &err), err)); - CL_CHECK((dequantize_block_q6_k_cl = clblast::clCreateKernel(program, "dequantize_block_q6_K", &err), err)); - - // dequant mul mat kernel - CL_CHECK((dequantize_mul_mat_vec_q4_0_cl = clblast::clCreateKernel(program, "dequantize_mul_mat_vec_q4_0", &err), err)); - CL_CHECK((dequantize_mul_mat_vec_q4_1_cl = clblast::clCreateKernel(program, "dequantize_mul_mat_vec_q4_1", &err), err)); - CL_CHECK((dequantize_mul_mat_vec_q5_0_cl = clblast::clCreateKernel(program, "dequantize_mul_mat_vec_q5_0", &err), err)); - CL_CHECK((dequantize_mul_mat_vec_q5_1_cl = clblast::clCreateKernel(program, "dequantize_mul_mat_vec_q5_1", &err), err)); - CL_CHECK((dequantize_mul_mat_vec_q8_0_cl = clblast::clCreateKernel(program, "dequantize_mul_mat_vec_q8_0", &err), err)); - CL_CHECK((convert_mul_mat_vec_f16_cl = clblast::clCreateKernel(program, "convert_mul_mat_vec_f16", &err), err)); - CL_CHECK((dequantize_mul_mat_vec_q2_K_cl = clblast::clCreateKernel(program, "dequantize_mul_mat_vec_q2_K", &err), err)); - CL_CHECK((dequantize_mul_mat_vec_q3_K_cl = clblast::clCreateKernel(program, "dequantize_mul_mat_vec_q3_K", &err), err)); - CL_CHECK((dequantize_mul_mat_vec_q4_K_cl = clblast::clCreateKernel(program, "dequantize_mul_mat_vec_q4_K", &err), err)); - CL_CHECK((dequantize_mul_mat_vec_q5_K_cl = clblast::clCreateKernel(program, "dequantize_mul_mat_vec_q5_K", &err), err)); - CL_CHECK((dequantize_mul_mat_vec_q6_K_cl = clblast::clCreateKernel(program, "dequantize_mul_mat_vec_q6_K", &err), err)); - - // mul kernel - CL_CHECK((mul_f32_cl = clblast::clCreateKernel(program, "mul_f32", &err), err)); - - CL_CHECK((add_f32_cl = clblast::clCreateKernel(program, "add_f32", &err), err)); -} - -static cl_kernel* ggml_get_to_fp32_cl(ggml_type type) { - switch (type) { - case GGML_TYPE_Q4_0: - return &dequantize_row_q4_0_cl; - case GGML_TYPE_Q4_1: - return &dequantize_row_q4_1_cl; - case GGML_TYPE_Q5_0: - return &dequantize_row_q5_0_cl; - case GGML_TYPE_Q5_1: - return &dequantize_row_q5_1_cl; - case GGML_TYPE_Q8_0: - return &dequantize_row_q8_0_cl; - case GGML_TYPE_Q2_K: - return &dequantize_block_q2_k_cl; - case GGML_TYPE_Q3_K: - return &dequantize_block_q3_k_cl; - case GGML_TYPE_Q4_K: - return &dequantize_block_q4_k_cl; - case GGML_TYPE_Q5_K: - return &dequantize_block_q5_k_cl; - case GGML_TYPE_Q6_K: - return &dequantize_block_q6_k_cl; - case GGML_TYPE_F16: - return &convert_row_f16_cl; - default: - return nullptr; - } -} - -static size_t ggml_cl_global_denom(ggml_type type) { - switch (type) { - case GGML_TYPE_Q4_0: - case GGML_TYPE_Q4_1: - case GGML_TYPE_Q5_0: - case GGML_TYPE_Q5_1: - case GGML_TYPE_Q8_0: - return 1; - case GGML_TYPE_Q2_K: - case GGML_TYPE_Q3_K: - return 4; - case GGML_TYPE_Q4_K: - return 8; - case GGML_TYPE_Q5_K: - case GGML_TYPE_Q6_K: - return 4; - case GGML_TYPE_F16: - default: - return 1; - } -} - -static size_t ggml_cl_local_size(ggml_type type) { - switch (type) { - case GGML_TYPE_Q4_0: - case GGML_TYPE_Q4_1: - case GGML_TYPE_Q5_0: - case GGML_TYPE_Q5_1: - case GGML_TYPE_Q8_0: - return 0; - case GGML_TYPE_Q2_K: - case GGML_TYPE_Q3_K: - return 64; - case GGML_TYPE_Q4_K: - return 32; - case GGML_TYPE_Q5_K: - case GGML_TYPE_Q6_K: - return 64; - case GGML_TYPE_F16: - default: - return 0; - } -} - -static cl_kernel* ggml_get_dequantize_mul_mat_vec_cl(ggml_type type) { - switch (type) { - case GGML_TYPE_Q4_0: - return &dequantize_mul_mat_vec_q4_0_cl; - case GGML_TYPE_Q4_1: - return &dequantize_mul_mat_vec_q4_1_cl; - case GGML_TYPE_Q5_0: - return &dequantize_mul_mat_vec_q5_0_cl; - case GGML_TYPE_Q5_1: - return &dequantize_mul_mat_vec_q5_1_cl; - case GGML_TYPE_Q8_0: - return &dequantize_mul_mat_vec_q8_0_cl; - case GGML_TYPE_F16: - return &convert_mul_mat_vec_f16_cl; - case GGML_TYPE_Q2_K: - return &dequantize_mul_mat_vec_q2_K_cl; - case GGML_TYPE_Q3_K: - return &dequantize_mul_mat_vec_q3_K_cl; - case GGML_TYPE_Q4_K: - return &dequantize_mul_mat_vec_q4_K_cl; - case GGML_TYPE_Q5_K: - return &dequantize_mul_mat_vec_q5_K_cl; - case GGML_TYPE_Q6_K: - return &dequantize_mul_mat_vec_q6_K_cl; - default: - return nullptr; - } -} - -// buffer pool for cl -#define MAX_CL_BUFFERS 256 - -struct scoped_spin_lock { - std::atomic_flag& lock; - scoped_spin_lock(std::atomic_flag& lock) : lock(lock) { - while (lock.test_and_set(std::memory_order_acquire)) { - ; // spin - } - } - ~scoped_spin_lock() { - lock.clear(std::memory_order_release); - } - scoped_spin_lock(const scoped_spin_lock&) = delete; - scoped_spin_lock& operator=(const scoped_spin_lock&) = delete; -}; - -struct cl_buffer { - cl_mem mem; - size_t size = 0; -}; - -static cl_buffer g_cl_buffer_pool[MAX_CL_BUFFERS]; -static std::atomic_flag g_cl_pool_lock = ATOMIC_FLAG_INIT; - -static cl_mem ggml_cl_pool_malloc(size_t size, size_t * actual_size) { - scoped_spin_lock lock(g_cl_pool_lock); - cl_int err; - - int best_i = -1; - size_t best_size = std::numeric_limits::max(); //smallest unused buffer that fits our needs - int worst_i = -1; - size_t worst_size = 0; //largest unused buffer seen so far - for (int i = 0; i < MAX_CL_BUFFERS; ++i) { - cl_buffer &b = g_cl_buffer_pool[i]; - if (b.size > 0 && b.size >= size && b.size < best_size) - { - best_i = i; - best_size = b.size; - } - if (b.size > 0 && b.size > worst_size) - { - worst_i = i; - worst_size = b.size; - } - } - if(best_i!=-1) //found the smallest buffer that fits our needs - { - cl_buffer& b = g_cl_buffer_pool[best_i]; - cl_mem mem = b.mem; - *actual_size = b.size; - b.size = 0; - return mem; - } - if(worst_i!=-1) //no buffer that fits our needs, resize largest one to save memory - { - cl_buffer& b = g_cl_buffer_pool[worst_i]; - cl_mem mem = b.mem; - b.size = 0; - clblast::clReleaseMemObject(mem); - } - cl_mem mem; - CL_CHECK((mem = clblast::clCreateBuffer(context, CL_MEM_READ_WRITE, size, NULL, &err), err)); - *actual_size = size; - return mem; -} - -static void ggml_cl_pool_free(cl_mem mem, size_t size) { - scoped_spin_lock lock(g_cl_pool_lock); - - for (int i = 0; i < MAX_CL_BUFFERS; ++i) { - cl_buffer& b = g_cl_buffer_pool[i]; - if (b.size == 0) { - b.mem = mem; - b.size = size; - return; - } - } - fprintf(stderr, "WARNING: cl buffer pool full, increase MAX_CL_BUFFERS\n"); - clblast::clReleaseMemObject(mem); -} - -void ggml_cl_free_data(const struct ggml_tensor* tensor) { - if (tensor->backend != GGML_BACKEND_TYPE_GPU) { - return; - } - - cl_mem mem = (cl_mem)tensor->extra; - clblast::clReleaseMemObject(mem); -} - -static cl_int ggml_cl_h2d_tensor_2d(cl_command_queue queue, cl_mem dst, size_t offset, const struct ggml_tensor * src, uint64_t i3, uint64_t i2, cl_event* ev) { - cl_int err; - const uint64_t ne0 = src->ne[0]; - const uint64_t ne1 = src->ne[1]; - const uint64_t nb0 = src->nb[0]; - const uint64_t nb1 = src->nb[1]; - const uint64_t nb2 = src->nb[2]; - const uint64_t nb3 = src->nb[3]; - const enum ggml_type type = src->type; - const size_t ts = ggml_type_size(type); - const size_t bs = ggml_blck_size(type); - const uint64_t row_size = ts*ne0/bs; - - const char * x = (const char *) src->data + i2*nb2 + i3*nb3; - if (nb0 == ts && nb1 == row_size) { - return clblast::clEnqueueWriteBuffer(queue, dst, CL_FALSE, offset, ne1*row_size, x, 0, NULL, ev); - } - if (nb0 == ts) { - const size_t buffer_origin[3] = { offset, 0, 0 }; - const size_t host_origin[3] = { 0, 0, 0 }; - const size_t region[3] = { row_size, ne1, 1 }; - return clblast::clEnqueueWriteBufferRect(queue, dst, CL_FALSE, buffer_origin, host_origin, region, row_size, 0, nb1, 0, x, 0, NULL, ev); - } - std::vector events; - if (ev && ne1>1) events.reserve(ne1-1); - for (uint64_t i1 = 0; i1 < ne1; i1++) { - // pretend the row is a matrix with cols=1 - const size_t buffer_origin[3] = { offset + i1*row_size, 0, 0 }; - const size_t host_origin[3] = { 0, 0, 0 }; - const size_t region[3] = { ts, ne0/bs, 1 }; - // if an event is requested, make the last write wait for all previous writes to complete - if (ev && i1) { - events.push_back(*ev); - } - cl_uint nevents = i1 == ne1-1 ? events.size() : 0U; - err = clblast::clEnqueueWriteBufferRect(queue, dst, CL_FALSE, buffer_origin, host_origin, region, ts, 0, nb0, 0, x + i1*nb1, nevents, nevents ? events.data() : nullptr, ev); - if (err != CL_SUCCESS) { - for (auto event : events) { - clblast::clReleaseEvent(event); - } - return err; - } - } - for (auto event : events) { - CL_CHECK(clblast::clReleaseEvent(event)); - } - return CL_SUCCESS; -} - -static void ggml_cl_mul_f32(const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) { - GGML_ASSERT(src1->backend == GGML_BACKEND_TYPE_GPU); - const int64_t ne00 = src0->ne[0]; - const int64_t ne01 = src0->ne[1]; - const int64_t ne02 = src0->ne[2]; - const int64_t ne03 = src0->ne[3]; - const int64_t ne10 = src1->ne[0]; - const int64_t ne11 = src1->ne[1]; - const int64_t ne12 = src1->ne[2]; - const int64_t ne13 = src1->ne[3]; - const int nb2 = dst->nb[2]; - const int nb3 = dst->nb[3]; - size_t x_size; - size_t d_size; - - cl_mem d_X = ggml_cl_pool_malloc(ne00 * ne01 * sizeof(float), &x_size); // src0 - cl_mem d_Y = (cl_mem) src1->extra; // src1 is already on device, broadcasted. - cl_mem d_D = ggml_cl_pool_malloc(ne00 * ne01 * sizeof(float), &d_size); // dst - - - for (int64_t i03 = 0; i03 < ne03; i03++) { - for (int64_t i02 = 0; i02 < ne02; i02++) { - cl_event ev; - - // copy src0 to device - CL_CHECK(ggml_cl_h2d_tensor_2d(queue, d_X, 0, src0, i03, i02, &ev)); - - const int64_t i13 = i03%ne13; - const int64_t i12 = i02%ne12; - const int i1 = i13*ne12*ne11 + i12*ne11; - - cl_int x_offset = 0; - cl_int y_offset = i1*ne10; - cl_int d_offset = 0; - - size_t global = ne00 * ne01; - cl_int ky = ne10 * ne11; - - CL_CHECK(clblast::clSetKernelArg(mul_f32_cl, 0, sizeof(cl_mem), &d_X)); - CL_CHECK(clblast::clSetKernelArg(mul_f32_cl, 1, sizeof(cl_int), &x_offset)); - CL_CHECK(clblast::clSetKernelArg(mul_f32_cl, 2, sizeof(cl_mem), &d_Y)); - CL_CHECK(clblast::clSetKernelArg(mul_f32_cl, 3, sizeof(cl_int), &y_offset)); - CL_CHECK(clblast::clSetKernelArg(mul_f32_cl, 4, sizeof(cl_mem), &d_D)); - CL_CHECK(clblast::clSetKernelArg(mul_f32_cl, 5, sizeof(cl_int), &d_offset)); - CL_CHECK(clblast::clSetKernelArg(mul_f32_cl, 6, sizeof(cl_int), &ky)); - CL_CHECK(clblast::clEnqueueNDRangeKernel(queue, mul_f32_cl, 1, NULL, &global, NULL, 1, &ev, NULL)); - - CL_CHECK(clblast::clReleaseEvent(ev)); - CL_CHECK(clblast::clFinish(queue)); - - // copy dst to host - float * d = (float *) ((char *) dst->data + i02*nb2 + i03*nb3); - CL_CHECK(clblast::clEnqueueReadBuffer(queue, d_D, true, 0, sizeof(float) * ne00*ne01, d, 0, NULL, NULL)); - } - } - ggml_cl_pool_free(d_X, x_size); - ggml_cl_pool_free(d_D, d_size); -} - -void ggml_cl_mul(const struct ggml_tensor * src0, const struct ggml_tensor * src1, struct ggml_tensor * dst) { - GGML_ASSERT(src0->type == GGML_TYPE_F32 && src1->type == GGML_TYPE_F32 && dst->type == GGML_TYPE_F32); - ggml_cl_mul_f32(src0, src1, dst); -} - -static void ggml_cl_add_f32(const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) { - GGML_ASSERT(src1->backend == GGML_BACKEND_TYPE_GPU); - const int64_t ne00 = src0->ne[0]; - const int64_t ne01 = src0->ne[1]; - const int64_t ne02 = src0->ne[2]; - const int64_t ne03 = src0->ne[3]; - const int64_t ne10 = src1->ne[0]; - const int64_t ne11 = src1->ne[1]; - const int64_t ne12 = src1->ne[2]; - const int64_t ne13 = src1->ne[3]; - const int nb2 = dst->nb[2]; - const int nb3 = dst->nb[3]; - size_t x_size; - size_t d_size; - - cl_mem d_X = ggml_cl_pool_malloc(ne00 * ne01 * sizeof(float), &x_size); // src0 - cl_mem d_Y = (cl_mem) src1->extra; // src1 is already on device, broadcasted. - cl_mem d_D = ggml_cl_pool_malloc(ne00 * ne01 * sizeof(float), &d_size); // dst - - - for (int64_t i03 = 0; i03 < ne03; i03++) { - for (int64_t i02 = 0; i02 < ne02; i02++) { - cl_event ev; - - // copy src0 to device - CL_CHECK(ggml_cl_h2d_tensor_2d(queue, d_X, 0, src0, i03, i02, &ev)); - - const int64_t i13 = i03%ne13; - const int64_t i12 = i02%ne12; - const int i1 = i13*ne12*ne11 + i12*ne11; - - cl_int x_offset = 0; - cl_int y_offset = i1*ne10; - cl_int d_offset = 0; - - size_t global = ne00 * ne01; - cl_int ky = ne10 * ne11; - - CL_CHECK(clblast::clSetKernelArg(add_f32_cl, 0, sizeof(cl_mem), &d_X)); - CL_CHECK(clblast::clSetKernelArg(add_f32_cl, 1, sizeof(cl_int), &x_offset)); - CL_CHECK(clblast::clSetKernelArg(add_f32_cl, 2, sizeof(cl_mem), &d_Y)); - CL_CHECK(clblast::clSetKernelArg(add_f32_cl, 3, sizeof(cl_int), &y_offset)); - CL_CHECK(clblast::clSetKernelArg(add_f32_cl, 4, sizeof(cl_mem), &d_D)); - CL_CHECK(clblast::clSetKernelArg(add_f32_cl, 5, sizeof(cl_int), &d_offset)); - CL_CHECK(clblast::clSetKernelArg(add_f32_cl, 6, sizeof(cl_int), &ky)); - CL_CHECK(clblast::clEnqueueNDRangeKernel(queue, add_f32_cl, 1, NULL, &global, NULL, 1, &ev, NULL)); - - CL_CHECK(clblast::clReleaseEvent(ev)); - CL_CHECK(clblast::clFinish(queue)); - - // copy dst to host - float * d = (float *) ((char *) dst->data + i02*nb2 + i03*nb3); - CL_CHECK(clblast::clEnqueueReadBuffer(queue, d_D, true, 0, sizeof(float) * ne00*ne01, d, 0, NULL, NULL)); - } - } - ggml_cl_pool_free(d_X, x_size); - ggml_cl_pool_free(d_D, d_size); -} - -void ggml_cl_add(const struct ggml_tensor * src0, const struct ggml_tensor * src1, struct ggml_tensor * dst) { - GGML_ASSERT(src0->type == GGML_TYPE_F32 && src1->type == GGML_TYPE_F32 && dst->type == GGML_TYPE_F32); - ggml_cl_add_f32(src0, src1, dst); -} - -static void ggml_cl_mul_mat_f32(const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) { - const int64_t ne00 = src0->ne[0]; - const int64_t ne01 = src0->ne[1]; - const int64_t ne02 = src0->ne[2]; - const int64_t ne03 = src0->ne[3]; - - const int64_t ne10 = src1->ne[0]; - const int64_t ne11 = src1->ne[1]; - const int64_t ne12 = src1->ne[2]; - const int64_t ne13 = src1->ne[3]; - - const int nb2 = dst->nb[2]; - const int nb3 = dst->nb[3]; - - const int64_t r2 = ne12 / ne02; - const int64_t r3 = ne13 / ne03; - - const float alpha = 1.0f; - const float beta = 0.0f; - const int x_ne = ne01 * ne00; - const int y_ne = ne11 * ne10; - const int d_ne = ne11 * ne01; - - size_t x_size; - size_t y_size; - size_t d_size; - cl_mem d_X; - if (src0->backend == GGML_BACKEND_TYPE_GPU) { // NOLINT - d_X = (cl_mem) src0->extra; - } else { - d_X = ggml_cl_pool_malloc(sizeof(float) * x_ne, &x_size); - } - cl_mem d_Y = src1->backend == GGML_BACKEND_TYPE_GPU ? (cl_mem) src1->extra : ggml_cl_pool_malloc(sizeof(float) * y_ne, &y_size); - cl_mem d_D = dst->backend == GGML_BACKEND_TYPE_GPU ? (cl_mem) dst->extra : ggml_cl_pool_malloc(sizeof(float) * d_ne, &d_size); - - size_t x_offset = 0; - - for (int64_t i03 = 0; i03 < ne03; i03++) { - // TODO: copy src0 here when r3>1 - for (int64_t i13 = i03 * r3, e13 = i13 + r3; i13 < e13; i13++) { - for (int64_t i02 = 0; i02 < ne02; i02++) { - if (src0->backend == GGML_BACKEND_TYPE_GPU) { - x_offset = (i03 * ne02 + i02) * x_ne; - } else { - // copy src0 to device - CL_CHECK(ggml_cl_h2d_tensor_2d(queue, d_X, 0, src0, i03, i02, NULL)); - } - - for (int64_t i12 = i02 * r2, e12 = i12 + r2; i12 < e12; i12++) { - // copy src1 to device - if (src1->backend == GGML_BACKEND_TYPE_CPU) { - CL_CHECK(ggml_cl_h2d_tensor_2d(queue, d_Y, 0, src1, i13, i12, NULL)); - } - - CL_CHECK(clblast::clFinish(queue)); - - // compute - cl_event ev_sgemm; - clblast::StatusCode status = clblast::Gemm(clblast::Layout::kColMajor, - clblast::Transpose::kYes, clblast::Transpose::kNo, - ne01, ne11, ne10, - alpha, - d_X, x_offset, ne00, - d_Y, 0, ne10, - beta, - d_D, 0, ne01, - &queue, &ev_sgemm); - - if (status != clblast::StatusCode::kSuccess) { - GGML_ASSERT(false); - } - - // copy dst to host - if (dst->backend == GGML_BACKEND_TYPE_CPU) { - float * d = (float *) ((char *) dst->data + i12*nb2 + i13*nb3); - CL_CHECK(clblast::clEnqueueReadBuffer(queue, d_D, true, 0, sizeof(float) * d_ne, d, 1, &ev_sgemm, NULL)); - } - } - } - } - } - - if (src0->backend != GGML_BACKEND_TYPE_GPU) { - ggml_cl_pool_free(d_X, x_size); - } - if (src1->backend != GGML_BACKEND_TYPE_GPU) { - ggml_cl_pool_free(d_Y, y_size); - } - if (dst->backend != GGML_BACKEND_TYPE_GPU) { - ggml_cl_pool_free(d_D, d_size); - } -} - -static void ggml_cl_mul_mat_f16(const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst, void * wdata, size_t wsize) { - GGML_ASSERT(fp16_support); - - const int64_t ne00 = src0->ne[0]; - const int64_t ne01 = src0->ne[1]; - const int64_t ne02 = src0->ne[2]; - const int64_t ne03 = src0->ne[3]; - - const int64_t ne10 = src1->ne[0]; - const int64_t ne11 = src1->ne[1]; - const int64_t ne12 = src1->ne[2]; - const int64_t ne13 = src1->ne[3]; - - const int nb10 = src1->nb[0]; - const int nb11 = src1->nb[1]; - const int nb12 = src1->nb[2]; - const int nb13 = src1->nb[3]; - - const int nb2 = dst->nb[2]; - const int nb3 = dst->nb[3]; - - const int64_t r2 = ne12 / ne02; - const int64_t r3 = ne13 / ne03; - - const ggml_fp16_t alpha = ggml_fp32_to_fp16(1.0f); - const ggml_fp16_t beta = ggml_fp32_to_fp16(0.0f); - const int x_ne = ne01 * ne00; - const int y_ne = ne11 * ne10; - const int d_ne = ne11 * ne01; - - GGML_ASSERT(wsize >= sizeof(ggml_fp16_t) * y_ne); - GGML_ASSERT(wsize >= sizeof(ggml_fp16_t) * d_ne); - ggml_fp16_t * const tmp = (ggml_fp16_t *) wdata; - - size_t x_size; - size_t y_size; - size_t d_size; - cl_mem d_X; - if (src0->backend == GGML_BACKEND_TYPE_GPU) { // NOLINT - d_X = (cl_mem) src0->extra; - } else { - d_X = ggml_cl_pool_malloc(sizeof(ggml_fp16_t) * x_ne, &x_size); - } - cl_mem d_Y = ggml_cl_pool_malloc(sizeof(ggml_fp16_t) * y_ne, &y_size); - cl_mem d_D = ggml_cl_pool_malloc(sizeof(ggml_fp16_t) * d_ne, &d_size); - - bool src1_cont_rows = nb10 == sizeof(float); - bool src1_cont_cols = (size_t)nb11 == ne11*sizeof(float); - - size_t x_offset = 0; - - for (int64_t i03 = 0; i03 < ne03; i03++) { - // TODO: copy src0 here when r3>1 - for (int64_t i13 = i03 * r3, e13 = i13 + r3; i13 < e13; i13++) { - for (int64_t i02 = 0; i02 < ne02; i02++) { - if (src0->backend == GGML_BACKEND_TYPE_GPU) { - x_offset = (i03 * ne02 + i02) * x_ne; - } else { - // copy src0 to device - CL_CHECK(ggml_cl_h2d_tensor_2d(queue, d_X, 0, src0, i03, i02, NULL)); - } - - // FIXME: convert on device - - for (int64_t i12 = i02 * r2, e12 = i12 + r2; i12 < e12; i12++) { - // convert src1 to fp16 - // TODO: use multiple threads - char * src1i = (char *) src1->data + i13*nb13 + i12*nb12; - if (src1_cont_rows) { - if (src1_cont_cols) { - ggml_fp32_to_fp16_row((float *) src1i, tmp, ne10*ne11); - } - else { - for (int64_t i11 = 0; i11 < ne11; i11++) { - ggml_fp32_to_fp16_row((float *) (src1i + i11*nb11), tmp + i11*ne10, ne10); - } - } - } - else { - for (int64_t i11 = 0; i11 < ne11; i11++) { - for (int64_t i10 = 0; i10 < ne10; i10++) { - // very slow due to no inlining - tmp[i11*ne10 + i10] = ggml_fp32_to_fp16(*(float *) (src1i + i11*nb11 + i10*nb10)); - } - } - } - - // copy src1 to device - CL_CHECK(clblast::clEnqueueWriteBuffer(queue, d_Y, false, 0, sizeof(ggml_fp16_t) * y_ne, tmp, 0, NULL, NULL)); - - CL_CHECK(clblast::clFinish(queue)); - - // compute - cl_event ev_sgemm; - clblast::StatusCode status = clblast::Gemm(clblast::Layout::kColMajor, - clblast::Transpose::kYes, clblast::Transpose::kNo, - ne01, ne11, ne10, - alpha, - d_X, x_offset, ne00, - d_Y, 0, ne10, - beta, - d_D, 0, ne01, - &queue, &ev_sgemm); - - if (status != clblast::StatusCode::kSuccess) { - GGML_ASSERT(false); - } - - // copy dst to host, then convert to float - if (dst->backend == GGML_BACKEND_TYPE_CPU) { - CL_CHECK(clblast::clEnqueueReadBuffer(queue, d_D, true, 0, sizeof(ggml_fp16_t) * d_ne, tmp, 1, &ev_sgemm, NULL)); - float * d = (float *) ((char *) dst->data + i12*nb2 + i13*nb3); - ggml_fp16_to_fp32_row(tmp, d, d_ne); - } else { - // FIXME: convert dst to fp32 on device - } - } - } - } - } - - if (src0->backend != GGML_BACKEND_TYPE_GPU) { - ggml_cl_pool_free(d_X, x_size); - } - ggml_cl_pool_free(d_Y, y_size); - ggml_cl_pool_free(d_D, d_size); -} - -static void ggml_cl_mul_mat_q_f32(const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) { - const int64_t ne00 = src0->ne[0]; - const int64_t ne01 = src0->ne[1]; - const int64_t ne02 = src0->ne[2]; - const int64_t ne03 = src0->ne[3]; - - const int64_t ne10 = src1->ne[0]; - const int64_t ne11 = src1->ne[1]; - const int64_t ne12 = src1->ne[2]; - const int64_t ne13 = src1->ne[3]; - - const int nb2 = dst->nb[2]; - const int nb3 = dst->nb[3]; - const ggml_type type = src0->type; - const bool mul_mat_vec = ne11 == 1 && ne00%2 == 0; - - const int64_t r2 = ne12 / ne02; - const int64_t r3 = ne13 / ne03; - - const float alpha = 1.0f; - const float beta = 0.0f; - const int x_ne = ne01 * ne00; - const int y_ne = ne11 * ne10; - const int d_ne = ne11 * ne01; - const int x_bps = x_ne / ggml_blck_size(type); // blocks per 2D slice - const size_t q_sz = ggml_type_size(type) * x_bps; - - size_t x_size; - size_t y_size; - size_t d_size; - size_t q_size; - cl_mem d_X; - if (!mul_mat_vec) { - d_X = ggml_cl_pool_malloc(sizeof(float) * x_ne, &x_size); - } - cl_mem d_Y = ggml_cl_pool_malloc(sizeof(float) * y_ne, &y_size); - cl_mem d_D = ggml_cl_pool_malloc(sizeof(float) * d_ne, &d_size); - cl_mem d_Q; - if (src0->backend == GGML_BACKEND_TYPE_CPU) { - d_Q = ggml_cl_pool_malloc(q_sz, &q_size); - } - - cl_kernel* to_fp32_cl = ggml_get_to_fp32_cl(type); - cl_kernel* dmmv = ggml_get_dequantize_mul_mat_vec_cl(type); - GGML_ASSERT(to_fp32_cl != nullptr); - - const size_t global_denom = ggml_cl_global_denom(type); - const size_t local = mul_mat_vec ? CL_DMMV_LOCAL_SIZE : ggml_cl_local_size(type); - - size_t ev_idx = 0; - std::vector events; - - for (int64_t i03 = 0; i03 < ne03; i03++) { - // TODO: copy and dequantize src0 here when r3>1 - for (int64_t i13 = i03 * r3, e13 = i13 + r3; i13 < e13; i13++) { - for (int64_t i02 = 0; i02 < ne02; i02++) { - // copy src0 to device if necessary - if (src0->backend == GGML_BACKEND_TYPE_CPU) { - events.emplace_back(); - CL_CHECK(ggml_cl_h2d_tensor_2d(queue, d_Q, 0, src0, i03, i02, events.data() + ev_idx++)); - } else if (src0->backend == GGML_BACKEND_TYPE_GPU) { - d_Q = (cl_mem) src0->extra; - } else { - GGML_ASSERT(false); - } - - if (!mul_mat_vec) { - // convert src0 to fp32 on device - const size_t global = x_ne / global_denom; - const size_t offset = src0->backend == GGML_BACKEND_TYPE_GPU ? (i03 * ne02 + i02) * x_bps : 0; - CL_CHECK(clblast::clSetKernelArg(*to_fp32_cl, 0, sizeof(cl_mem), &d_Q)); - CL_CHECK(clblast::clSetKernelArg(*to_fp32_cl, 1, sizeof(cl_mem), &d_X)); - CL_CHECK(clblast::clEnqueueNDRangeKernel(queue, *to_fp32_cl, 1, &offset, &global, local > 0 ? &local : NULL, events.size(), !events.empty() ? events.data() : NULL, NULL)); - } - - for (int64_t i12 = i02 * r2, e12 = i12 + r2; i12 < e12; i12++) { - if (mul_mat_vec) { // specialized dequantize_mul_mat_vec kernel - // copy src1 to device - events.emplace_back(); - CL_CHECK(ggml_cl_h2d_tensor_2d(queue, d_Y, 0, src1, i13, i12, events.data() + ev_idx++)); - - // compute - const size_t global = ne01 * local; - const size_t offset = src0->backend == GGML_BACKEND_TYPE_GPU ? (i03 * ne02 + i02) * x_bps : 0; - const cl_int ncols = ne00; - events.emplace_back(); - CL_CHECK(clblast::clSetKernelArg(*dmmv, 0, sizeof(cl_mem), &d_Q)); - CL_CHECK(clblast::clSetKernelArg(*dmmv, 1, sizeof(float) * local, NULL)); - CL_CHECK(clblast::clSetKernelArg(*dmmv, 2, sizeof(cl_mem), &d_Y)); - CL_CHECK(clblast::clSetKernelArg(*dmmv, 3, sizeof(cl_mem), &d_D)); - CL_CHECK(clblast::clSetKernelArg(*dmmv, 4, sizeof(cl_int), &ncols)); - CL_CHECK(clblast::clEnqueueNDRangeKernel(queue, *dmmv, 1, &offset, &global, &local, events.size() - 1, events.data(), events.data() + ev_idx++)); - } else { // CLBlast matrix matrix multiplication - // copy src1 to device - CL_CHECK(ggml_cl_h2d_tensor_2d(queue, d_Y, 0, src1, i13, i12, NULL)); - - // wait for conversion - CL_CHECK(clblast::clFinish(queue)); - - // compute - events.emplace_back(); - clblast::StatusCode status = clblast::Gemm(clblast::Layout::kColMajor, - clblast::Transpose::kYes, clblast::Transpose::kNo, - ne01, ne11, ne10, - alpha, - d_X, 0, ne00, - d_Y, 0, ne10, - beta, - d_D, 0, ne01, - &queue, events.data() + ev_idx++); - - if (status != clblast::StatusCode::kSuccess) { - GGML_ASSERT(false); - } - } - - // copy dst to host - float * d = (float *) ((char *) dst->data + i12*nb2 + i13*nb3); - CL_CHECK(clblast::clEnqueueReadBuffer(queue, d_D, true, 0, sizeof(float) * d_ne, d, 1, &events[events.size() - 1], NULL)); - for (auto *event : events) { - clblast::clReleaseEvent(event); - } - - ev_idx = 0; - events.clear(); - } - } - } - } - - if (!mul_mat_vec) { - ggml_cl_pool_free(d_X, x_size); - } - ggml_cl_pool_free(d_Y, y_size); - ggml_cl_pool_free(d_D, d_size); - if (src0->backend == GGML_BACKEND_TYPE_CPU) { - ggml_cl_pool_free(d_Q, q_size); - } -} - - -bool ggml_cl_can_mul_mat(const struct ggml_tensor * src0, const struct ggml_tensor * src1, const struct ggml_tensor * dst) { - const int64_t ne10 = src1->ne[0]; - - const int64_t ne0 = dst->ne[0]; - const int64_t ne1 = dst->ne[1]; - - // TODO: find the optimal values for these - if ((src0->type == GGML_TYPE_F32 || src0->type == GGML_TYPE_F16 || ggml_is_quantized(src0->type)) && - src1->type == GGML_TYPE_F32 && - dst->type == GGML_TYPE_F32 && - ((ne0 >= 32 && ne1 >= 32 && ne10 >= 32) || src0->backend == GGML_BACKEND_TYPE_GPU)) { - return true; - } - - return false; -} - -static bool ggml_cl_mul_mat_use_f16(const struct ggml_tensor * src0, const struct ggml_tensor * src1, struct ggml_tensor * /* dst */) { - // If device doesn't support FP16 - if (!fp16_support) { - return false; - } - - size_t src0_sz = ggml_nbytes(src0); - size_t src1_sz = ggml_nbytes(src1); - - // mul_mat_q: src0 is converted to fp32 on device - size_t mul_mat_q_transfer = src0_sz + src1_sz; - - // mul_mat_f16: src1 is converted to fp16 on cpu - size_t mul_mat_f16_transfer = src0_sz + sizeof(ggml_fp16_t) * ggml_nelements(src1); - - // choose the smaller one to transfer to the device - // TODO: this is not always the best choice due to the overhead of converting to fp16 - return mul_mat_f16_transfer < mul_mat_q_transfer; -} - -void ggml_cl_mul_mat(const struct ggml_tensor * src0, const struct ggml_tensor * src1, struct ggml_tensor * dst, void * wdata, size_t wsize) { - GGML_ASSERT(ggml_cl_can_mul_mat(src0, src1, dst)); - - if (src0->type == GGML_TYPE_F32) { - ggml_cl_mul_mat_f32(src0, src1, dst); - } - else if (src0->type == GGML_TYPE_F16) { - if (ggml_cl_mul_mat_use_f16(src0, src1, dst)) { - ggml_cl_mul_mat_f16(src0, src1, dst, wdata, wsize); - } - else { - ggml_cl_mul_mat_q_f32(src0, src1, dst); - } - } - else if (ggml_is_quantized(src0->type)) { - ggml_cl_mul_mat_q_f32(src0, src1, dst); - } - else { - GGML_ASSERT(false); - } -} - -size_t ggml_cl_mul_mat_get_wsize(const struct ggml_tensor * src0, const struct ggml_tensor * src1, struct ggml_tensor * dst) { - if (src0->type == GGML_TYPE_F16 && ggml_cl_mul_mat_use_f16(src0, src1, dst)) { - return sizeof(ggml_fp16_t) * std::max(src1->ne[0] * src1->ne[1], dst->ne[0] * dst->ne[1]); - } - return 0; -} - -void ggml_cl_transform_tensor(void * data, ggml_tensor * tensor) { - const int64_t ne0 = tensor->ne[0]; - const int64_t ne1 = tensor->ne[1]; - const int64_t ne2 = tensor->ne[2]; - const int64_t ne3 = tensor->ne[3]; - - const ggml_type type = tensor->type; - const size_t s_sz = ggml_type_size(type) * (size_t) (ne0 * ne1 / ggml_blck_size(type)); - const size_t q_sz = s_sz * (size_t) (ne2 * ne3); - - size_t q_size; - cl_mem dst = ggml_cl_pool_malloc(q_sz, &q_size); - - tensor->data = data; - // copy tensor to device - size_t offset = 0; - for (int64_t i3 = 0; i3 < ne3; i3++) { - for (int64_t i2 = 0; i2 < ne2; i2++) { - CL_CHECK(ggml_cl_h2d_tensor_2d(queue, dst, offset, tensor, i3, i2, NULL)); - offset += s_sz; - } - } - - CL_CHECK(clblast::clFinish(queue)); - - tensor->extra = dst; - GGML_ASSERT(tensor->backend == GGML_BACKEND_TYPE_GPU); -} - -// ggml-backend - -// buffer - -struct ggml_backend_opencl_buffer_context { - ~ggml_backend_opencl_buffer_context() { - if (buffer) { - clblast::clReleaseMemObject(buffer); - } - for (auto * sub_buffer : sub_buffers) { - clblast::clReleaseMemObject(sub_buffer); - } - } - - cl_mem buffer; - std::vector sub_buffers; -}; - -static void * const cl_ptr_base = (void *)(uintptr_t) 0x1000; - -static const char * ggml_backend_opencl_buffer_get_name(ggml_backend_buffer_t buffer) { - return "OpenCL"; - - GGML_UNUSED(buffer); -} - -static void ggml_backend_opencl_buffer_free_buffer(ggml_backend_buffer_t buffer) { - ggml_backend_opencl_buffer_context * ctx = (ggml_backend_opencl_buffer_context *) buffer->context; - delete ctx; -} - -static void * ggml_backend_opencl_buffer_get_base(ggml_backend_buffer_t buffer) { - return cl_ptr_base; - - GGML_UNUSED(buffer); -} - -static void ggml_backend_opencl_buffer_init_tensor(ggml_backend_buffer_t buffer, ggml_tensor * tensor) { - if (tensor->view_src != NULL && tensor->view_offs == 0) { - tensor->extra = tensor->view_src->extra; - } else { - ggml_backend_opencl_buffer_context * ctx = (ggml_backend_opencl_buffer_context *) buffer->context; - cl_buffer_region region = {(size_t)((char *)tensor->data - (char *)cl_ptr_base), ggml_nbytes(tensor)}; - cl_int err; - cl_mem sub_buffer = clblast::clCreateSubBuffer(ctx->buffer, CL_MEM_READ_WRITE, CL_BUFFER_CREATE_TYPE_REGION, ®ion, &err); - CL_CHECK(err); - ctx->sub_buffers.push_back(sub_buffer); - tensor->extra = sub_buffer; - } - tensor->backend = GGML_BACKEND_TYPE_GPU; -} - -static void ggml_backend_opencl_buffer_set_tensor(ggml_backend_buffer_t buffer, ggml_tensor * tensor, const void * data, size_t offset, size_t size) { - cl_mem tensor_buffer = (cl_mem) tensor->extra; - CL_CHECK(clblast::clEnqueueWriteBuffer(queue, tensor_buffer, true, offset, size, data, 0, NULL, NULL)); - CL_CHECK(clblast::clFinish(queue)); - - GGML_UNUSED(buffer); -} - -static void ggml_backend_opencl_buffer_get_tensor(ggml_backend_buffer_t buffer, const ggml_tensor * tensor, void * data, size_t offset, size_t size) { - cl_mem tensor_buffer = (cl_mem) tensor->extra; - CL_CHECK(clblast::clEnqueueReadBuffer(queue, tensor_buffer, true, offset, size, data, 0, NULL, NULL)); - CL_CHECK(clblast::clFinish(queue)); - - GGML_UNUSED(buffer); -} - -static void ggml_backend_opencl_buffer_clear(ggml_backend_buffer_t buffer, uint8_t value) { - ggml_backend_opencl_buffer_context * ctx = (ggml_backend_opencl_buffer_context *) buffer->context; - CL_CHECK(clblast::clEnqueueFillBuffer(queue, ctx->buffer, &value, sizeof(value), 0, buffer->size, 0, NULL, NULL)); - CL_CHECK(clblast::clFinish(queue)); -} - -static void ggml_backend_opencl_buffer_reset(ggml_backend_buffer_t buffer) { - ggml_backend_opencl_buffer_context * ctx = (ggml_backend_opencl_buffer_context *) buffer->context; - for (auto * sub_buffer : ctx->sub_buffers) { - clblast::clReleaseMemObject(sub_buffer); - } - ctx->sub_buffers.clear(); -} - -static ggml_backend_buffer_i ggml_backend_opencl_buffer_interface = { - /* .get_name = */ ggml_backend_opencl_buffer_get_name, - /* .free_buffer = */ ggml_backend_opencl_buffer_free_buffer, - /* .get_base = */ ggml_backend_opencl_buffer_get_base, - /* .init_tensor = */ ggml_backend_opencl_buffer_init_tensor, - /* .set_tensor = */ ggml_backend_opencl_buffer_set_tensor, - /* .get_tensor = */ ggml_backend_opencl_buffer_get_tensor, - /* .cpy_tensor = */ NULL, - /* .clear = */ ggml_backend_opencl_buffer_clear, - /* .reset = */ ggml_backend_opencl_buffer_reset, -}; - -// buffer type - -static const char * ggml_backend_opencl_buffer_type_name(ggml_backend_buffer_type_t buffer_type) { - return "OpenCL"; - - GGML_UNUSED(buffer_type); -} - -static ggml_backend_buffer_t ggml_backend_opencl_buffer_type_alloc_buffer(ggml_backend_buffer_type_t buffer_type, size_t size) { - ggml_cl_init(); - - cl_int err; - cl_mem mem = clblast::clCreateBuffer(context, CL_MEM_READ_WRITE, size, NULL, &err); - if (err != CL_SUCCESS) { - fprintf(stderr, "%s: failed to allocate %.2f MiB\n", __func__, size / 1024.0 / 1024.0); - return nullptr; - } - - ggml_backend_opencl_buffer_context * ctx = new ggml_backend_opencl_buffer_context{mem, {}}; - - return ggml_backend_buffer_init(buffer_type, ggml_backend_opencl_buffer_interface, ctx, size); -} - -static size_t ggml_backend_opencl_buffer_type_get_alignment(ggml_backend_buffer_type_t buffer_type) { - // FIXME: not thread safe, device may not be initialized yet - static cl_uint alignment = -1; - if (alignment == (cl_uint)-1) { - ggml_cl_init(); - clblast::clGetDeviceInfo(device, CL_DEVICE_MEM_BASE_ADDR_ALIGN, sizeof(cl_uint), &alignment, NULL); - } - return alignment; - - GGML_UNUSED(buffer_type); -} - -static size_t ggml_backend_opencl_buffer_type_get_max_size(ggml_backend_buffer_type_t buffer_type) { - static size_t max_size = -1; - if (max_size == (size_t)-1) { - ggml_cl_init(); - clblast::clGetDeviceInfo(device, CL_DEVICE_MAX_MEM_ALLOC_SIZE, sizeof(size_t), &max_size, NULL); - } - return max_size; -} - -static bool ggml_backend_opencl_buffer_type_supports_backend(ggml_backend_buffer_type_t buffer_type, ggml_backend_t backend) { - //return ggml_backend_is_opencl(backend); // opencl must be used through the cpu backend - return ggml_backend_is_cpu(backend); - - GGML_UNUSED(buffer_type); -} - -static ggml_backend_buffer_type_i ggml_backend_opencl_buffer_type_interface = { - /* .get_name = */ ggml_backend_opencl_buffer_type_name, - /* .alloc_buffer = */ ggml_backend_opencl_buffer_type_alloc_buffer, - /* .get_alignment = */ ggml_backend_opencl_buffer_type_get_alignment, - /* .get_max_size = */ ggml_backend_opencl_buffer_type_get_max_size, - /* .get_alloc_size = */ NULL, - /* .supports_backend = */ ggml_backend_opencl_buffer_type_supports_backend, - /* .is_host = */ NULL, -}; - - -ggml_backend_buffer_type_t ggml_backend_opencl_buffer_type() { - static ggml_backend_buffer_type buffer_type = { - /* .iface = */ ggml_backend_opencl_buffer_type_interface, - /* .context = */ nullptr, - }; - - return &buffer_type; -} - -#if 0 -// host buffer type - -static const char * ggml_backend_opencl_host_buffer_type_name(ggml_backend_buffer_type_t buft) { - return "CL_Host"; - - GGML_UNUSED(buft); -} - -static const char * ggml_backend_opencl_host_buffer_name(ggml_backend_buffer_t buffer) { - return "CL_Host"; - - GGML_UNUSED(buffer); -} - -static void ggml_backend_opencl_host_buffer_free_buffer(ggml_backend_buffer_t buffer) { - ggml_cl_host_free(buffer->context); -} - -static ggml_backend_buffer_t ggml_backend_opencl_host_buffer_type_alloc_buffer(ggml_backend_buffer_type_t buft, size_t size) { - void * ptr = ggml_cl_host_malloc(size); - - if (ptr == nullptr) { - // fallback to cpu buffer - return ggml_backend_buft_alloc_buffer(ggml_backend_cpu_buffer_type(), size); - } - - ggml_backend_buffer_t buffer = ggml_backend_cpu_buffer_from_ptr(ptr, size); - buffer->buft = buft; - buffer->iface.get_name = ggml_backend_opencl_host_buffer_name; - buffer->iface.free_buffer = ggml_backend_opencl_host_buffer_free_buffer; - - return buffer; -} - -ggml_backend_buffer_type_t ggml_backend_opencl_host_buffer_type() { - static struct ggml_backend_buffer_type ggml_backend_opencl_buffer_type_host = { - /* .iface = */ { - /* .get_name = */ ggml_backend_opencl_host_buffer_type_name, - /* .alloc_buffer = */ ggml_backend_opencl_host_buffer_type_alloc_buffer, - /* .get_alignment = */ ggml_backend_cpu_buffer_type()->iface.get_alignment, - /* .get_max_size = */ NULL, // defaults to SIZE_MAX - /* .get_alloc_size = */ ggml_backend_cpu_buffer_type()->iface.get_alloc_size, - /* .supports_backend = */ ggml_backend_cpu_buffer_type()->iface.supports_backend, - /* .is_host = */ ggml_backend_cpu_buffer_type()->iface.is_host, - }, - /* .context = */ nullptr, - }; - - return &ggml_backend_opencl_buffer_type_host; -} - -// backend - -static const char * ggml_backend_opencl_name(ggml_backend_t backend) { - return "OpenCL"; - - GGML_UNUSED(backend); -} - -static void ggml_backend_opencl_free(ggml_backend_t backend) { - GGML_UNUSED(backend); -} - -static ggml_backend_buffer_type_t ggml_backend_opencl_get_default_buffer_type(ggml_backend_t backend) { - return ggml_backend_opencl_buffer_type(); - - GGML_UNUSED(backend); -} - -static ggml_status ggml_backend_opencl_graph_compute(ggml_backend_t backend, ggml_cgraph * graph) { - for (int i = 0; i < graph->n_nodes; ++i) { - ggml_tensor * node = graph->nodes[i]; - - if (ggml_is_empty(node)) { - continue; - } - - switch (node->op) { - case GGML_OP_MUL_MAT: - ggml_cl_mul_mat(node->src[0], node->src[1], node, nullptr, 0); - break; - case GGML_OP_MUL: - ggml_cl_mul(node->src[0], node->src[1], node); - break; - default: - GGML_ASSERT(false); - } - } - - return GGML_STATUS_SUCCESS; - - GGML_UNUSED(backend); -} - -static bool ggml_backend_opencl_supports_op(ggml_backend_t backend, const ggml_tensor * op) { - switch (op->op) { - case GGML_OP_MUL_MAT: - return ggml_cl_can_mul_mat(op->src[0], op->src[1], op); - case GGML_OP_MUL: - // return ggml_can_repeat_rows(op->src[1], op->src[0]); - return true; - default: - return false; - } - - GGML_UNUSED(backend); -} - -static ggml_backend_i opencl_backend_i = { - /* .get_name = */ ggml_backend_opencl_name, - /* .free = */ ggml_backend_opencl_free, - /* .get_default_buffer_type = */ ggml_backend_opencl_get_default_buffer_type, - /* .set_tensor_async = */ NULL, - /* .get_tensor_async = */ NULL, - /* .cpy_tensor_from_async = */ NULL, - /* .cpy_tensor_to_async = */ NULL, - /* .synchronize = */ NULL, - /* .graph_plan_create = */ NULL, - /* .graph_plan_free = */ NULL, - /* .graph_plan_compute = */ NULL, - /* .graph_compute = */ ggml_backend_opencl_graph_compute, - /* .supports_op = */ ggml_backend_opencl_supports_op, -}; - -ggml_backend_t ggml_backend_opencl_init() { - ggml_backend_t backend = new ggml_backend { - /* .interface = */ opencl_backend_i, - /* .context = */ nullptr - }; - - return backend; -} - -bool ggml_backend_is_opencl(ggml_backend_t backend) { - return backend && backend->iface.get_name == ggml_backend_opencl_name; -} -#endif diff --git a/ggml-opencl.h b/ggml-opencl.h deleted file mode 100644 index 257a6be6af5..00000000000 --- a/ggml-opencl.h +++ /dev/null @@ -1,36 +0,0 @@ -#pragma once - -#include "ggml.h" -#include "ggml-backend.h" - -#ifdef __cplusplus -extern "C" { -#endif - -GGML_API void ggml_cl_init(void); - -GGML_API void ggml_cl_mul(const struct ggml_tensor * src0, const struct ggml_tensor * src1, struct ggml_tensor * dst); -GGML_API void ggml_cl_add(const struct ggml_tensor * src0, const struct ggml_tensor * src1, struct ggml_tensor * dst); -GGML_API bool ggml_cl_can_mul_mat(const struct ggml_tensor * src0, const struct ggml_tensor * src1, const struct ggml_tensor * dst); -GGML_API size_t ggml_cl_mul_mat_get_wsize(const struct ggml_tensor * src0, const struct ggml_tensor * src1, struct ggml_tensor * dst); -GGML_API void ggml_cl_mul_mat(const struct ggml_tensor * src0, const struct ggml_tensor * src1, struct ggml_tensor * dst, void * wdata, size_t wsize); - -// GGML_API void * ggml_cl_host_malloc(size_t size); -// GGML_API void ggml_cl_host_free(void * ptr); - -GGML_API void ggml_cl_free_data(const struct ggml_tensor* tensor); - -GGML_API void ggml_cl_transform_tensor(void * data, struct ggml_tensor * tensor); - -// backend API - -// GGML_API ggml_backend_t ggml_backend_opencl_init(void); - -// GGML_API bool ggml_backend_is_opencl(ggml_backend_t backend); - -GGML_API ggml_backend_buffer_type_t ggml_backend_opencl_buffer_type(void); -// GGML_API ggml_backend_buffer_type_t ggml_backend_opencl_host_buffer_type(void); - -#ifdef __cplusplus -} -#endif diff --git a/ggml-quants.c b/ggml-quants.c deleted file mode 100644 index 444d1e55ebd..00000000000 --- a/ggml-quants.c +++ /dev/null @@ -1,12669 +0,0 @@ -#define GGML_COMMON_IMPL_C -#include "ggml-common.h" - -#include "ggml-quants.h" -#include "ggml-impl.h" - -#define GGML_COMMON_IMPL_C -#include "ggml-common.h" - -#include -#include -#include -#include -#include // for qsort -#include // for GGML_ASSERT - -#define UNUSED GGML_UNUSED - -// some compilers don't provide _mm256_set_m128i, e.g. gcc 7 -#define MM256_SET_M128I(a, b) _mm256_insertf128_si256(_mm256_castsi128_si256(b), (a), 1) - -#if defined(__AVX__) || defined(__AVX2__) || defined(__AVX512F__) || defined(__SSSE3__) -// multiply int8_t, add results pairwise twice -static inline __m128i mul_sum_i8_pairs(const __m128i x, const __m128i y) { - // Get absolute values of x vectors - const __m128i ax = _mm_sign_epi8(x, x); - // Sign the values of the y vectors - const __m128i sy = _mm_sign_epi8(y, x); - // Perform multiplication and create 16-bit values - const __m128i dot = _mm_maddubs_epi16(ax, sy); - const __m128i ones = _mm_set1_epi16(1); - return _mm_madd_epi16(ones, dot); -} - -#if __AVX__ || __AVX2__ || __AVX512F__ -// horizontally add 8 floats -static inline float hsum_float_8(const __m256 x) { - __m128 res = _mm256_extractf128_ps(x, 1); - res = _mm_add_ps(res, _mm256_castps256_ps128(x)); - res = _mm_add_ps(res, _mm_movehl_ps(res, res)); - res = _mm_add_ss(res, _mm_movehdup_ps(res)); - return _mm_cvtss_f32(res); -} - -// horizontally add 8 int32_t -static inline int hsum_i32_8(const __m256i a) { - const __m128i sum128 = _mm_add_epi32(_mm256_castsi256_si128(a), _mm256_extractf128_si256(a, 1)); - const __m128i hi64 = _mm_unpackhi_epi64(sum128, sum128); - const __m128i sum64 = _mm_add_epi32(hi64, sum128); - const __m128i hi32 = _mm_shuffle_epi32(sum64, _MM_SHUFFLE(2, 3, 0, 1)); - return _mm_cvtsi128_si32(_mm_add_epi32(sum64, hi32)); -} - -// horizontally add 4 int32_t -static inline int hsum_i32_4(const __m128i a) { - const __m128i hi64 = _mm_unpackhi_epi64(a, a); - const __m128i sum64 = _mm_add_epi32(hi64, a); - const __m128i hi32 = _mm_shuffle_epi32(sum64, _MM_SHUFFLE(2, 3, 0, 1)); - return _mm_cvtsi128_si32(_mm_add_epi32(sum64, hi32)); -} - -#if defined(__AVX2__) || defined(__AVX512F__) -// spread 32 bits to 32 bytes { 0x00, 0xFF } -static inline __m256i bytes_from_bits_32(const uint8_t * x) { - uint32_t x32; - memcpy(&x32, x, sizeof(uint32_t)); - const __m256i shuf_mask = _mm256_set_epi64x( - 0x0303030303030303, 0x0202020202020202, - 0x0101010101010101, 0x0000000000000000); - __m256i bytes = _mm256_shuffle_epi8(_mm256_set1_epi32(x32), shuf_mask); - const __m256i bit_mask = _mm256_set1_epi64x(0x7fbfdfeff7fbfdfe); - bytes = _mm256_or_si256(bytes, bit_mask); - return _mm256_cmpeq_epi8(bytes, _mm256_set1_epi64x(-1)); -} - -// Unpack 32 4-bit fields into 32 bytes -// The output vector contains 32 bytes, each one in [ 0 .. 15 ] interval -static inline __m256i bytes_from_nibbles_32(const uint8_t * rsi) -{ - const __m128i tmp = _mm_loadu_si128((const __m128i *)rsi); - const __m256i bytes = MM256_SET_M128I(_mm_srli_epi16(tmp, 4), tmp); - const __m256i lowMask = _mm256_set1_epi8( 0xF ); - return _mm256_and_si256(lowMask, bytes); -} - -// add int16_t pairwise and return as float vector -static inline __m256 sum_i16_pairs_float(const __m256i x) { - const __m256i ones = _mm256_set1_epi16(1); - const __m256i summed_pairs = _mm256_madd_epi16(ones, x); - return _mm256_cvtepi32_ps(summed_pairs); -} - -static inline __m256 mul_sum_us8_pairs_float(const __m256i ax, const __m256i sy) { -#if defined(__AVXVNNI__) || (defined(__AVX512VNNI__) && defined(__AVX512VL__)) - const __m256i zero = _mm256_setzero_si256(); - const __m256i summed_pairs = _mm256_dpbusd_epi32(zero, ax, sy); - return _mm256_cvtepi32_ps(summed_pairs); -#else - // Perform multiplication and create 16-bit values - const __m256i dot = _mm256_maddubs_epi16(ax, sy); - return sum_i16_pairs_float(dot); -#endif -} - -// multiply int8_t, add results pairwise twice and return as float vector -static inline __m256 mul_sum_i8_pairs_float(const __m256i x, const __m256i y) { -#if __AVXVNNIINT8__ - const __m256i zero = _mm256_setzero_si256(); - const __m256i summed_pairs = _mm256_dpbssd_epi32(zero, x, y); - return _mm256_cvtepi32_ps(summed_pairs); -#else - // Get absolute values of x vectors - const __m256i ax = _mm256_sign_epi8(x, x); - // Sign the values of the y vectors - const __m256i sy = _mm256_sign_epi8(y, x); - return mul_sum_us8_pairs_float(ax, sy); -#endif -} - -static inline __m128i packNibbles( __m256i bytes ) -{ - // Move bits within 16-bit lanes from 0000_abcd_0000_efgh into 0000_0000_abcd_efgh -#if __AVX512F__ - const __m256i bytes_srli_4 = _mm256_srli_epi16(bytes, 4); // 0000_0000_abcd_0000 - bytes = _mm256_or_si256(bytes, bytes_srli_4); // 0000_abcd_abcd_efgh - return _mm256_cvtepi16_epi8(bytes); // abcd_efgh -#else - const __m256i lowByte = _mm256_set1_epi16( 0xFF ); - __m256i high = _mm256_andnot_si256( lowByte, bytes ); - __m256i low = _mm256_and_si256( lowByte, bytes ); - high = _mm256_srli_epi16( high, 4 ); - bytes = _mm256_or_si256( low, high ); - - // Compress uint16_t lanes into bytes - __m128i r0 = _mm256_castsi256_si128( bytes ); - __m128i r1 = _mm256_extracti128_si256( bytes, 1 ); - return _mm_packus_epi16( r0, r1 ); -#endif -} -#elif defined(__AVX__) -// spread 32 bits to 32 bytes { 0x00, 0xFF } -static inline __m256i bytes_from_bits_32(const uint8_t * x) { - uint32_t x32; - memcpy(&x32, x, sizeof(uint32_t)); - const __m128i shuf_maskl = _mm_set_epi64x(0x0101010101010101, 0x0000000000000000); - const __m128i shuf_maskh = _mm_set_epi64x(0x0303030303030303, 0x0202020202020202); - __m128i bytesl = _mm_shuffle_epi8(_mm_set1_epi32(x32), shuf_maskl); - __m128i bytesh = _mm_shuffle_epi8(_mm_set1_epi32(x32), shuf_maskh); - const __m128i bit_mask = _mm_set1_epi64x(0x7fbfdfeff7fbfdfe); - bytesl = _mm_or_si128(bytesl, bit_mask); - bytesh = _mm_or_si128(bytesh, bit_mask); - bytesl = _mm_cmpeq_epi8(bytesl, _mm_set1_epi64x(-1)); - bytesh = _mm_cmpeq_epi8(bytesh, _mm_set1_epi64x(-1)); - return MM256_SET_M128I(bytesh, bytesl); -} - -// Unpack 32 4-bit fields into 32 bytes -// The output vector contains 32 bytes, each one in [ 0 .. 15 ] interval -static inline __m256i bytes_from_nibbles_32(const uint8_t * rsi) -{ - // Load 16 bytes from memory - __m128i tmpl = _mm_loadu_si128((const __m128i *)rsi); - __m128i tmph = _mm_srli_epi16(tmpl, 4); - const __m128i lowMask = _mm_set1_epi8(0xF); - tmpl = _mm_and_si128(lowMask, tmpl); - tmph = _mm_and_si128(lowMask, tmph); - return MM256_SET_M128I(tmph, tmpl); -} - -// add int16_t pairwise and return as float vector -static inline __m256 sum_i16_pairs_float(const __m128i xh, const __m128i xl) { - const __m128i ones = _mm_set1_epi16(1); - const __m128i summed_pairsl = _mm_madd_epi16(ones, xl); - const __m128i summed_pairsh = _mm_madd_epi16(ones, xh); - const __m256i summed_pairs = MM256_SET_M128I(summed_pairsh, summed_pairsl); - return _mm256_cvtepi32_ps(summed_pairs); -} - -static inline __m256 mul_sum_us8_pairs_float(const __m256i ax, const __m256i sy) { - const __m128i axl = _mm256_castsi256_si128(ax); - const __m128i axh = _mm256_extractf128_si256(ax, 1); - const __m128i syl = _mm256_castsi256_si128(sy); - const __m128i syh = _mm256_extractf128_si256(sy, 1); - // Perform multiplication and create 16-bit values - const __m128i dotl = _mm_maddubs_epi16(axl, syl); - const __m128i doth = _mm_maddubs_epi16(axh, syh); - return sum_i16_pairs_float(doth, dotl); -} - -// multiply int8_t, add results pairwise twice and return as float vector -static inline __m256 mul_sum_i8_pairs_float(const __m256i x, const __m256i y) { - const __m128i xl = _mm256_castsi256_si128(x); - const __m128i xh = _mm256_extractf128_si256(x, 1); - const __m128i yl = _mm256_castsi256_si128(y); - const __m128i yh = _mm256_extractf128_si256(y, 1); - // Get absolute values of x vectors - const __m128i axl = _mm_sign_epi8(xl, xl); - const __m128i axh = _mm_sign_epi8(xh, xh); - // Sign the values of the y vectors - const __m128i syl = _mm_sign_epi8(yl, xl); - const __m128i syh = _mm_sign_epi8(yh, xh); - // Perform multiplication and create 16-bit values - const __m128i dotl = _mm_maddubs_epi16(axl, syl); - const __m128i doth = _mm_maddubs_epi16(axh, syh); - return sum_i16_pairs_float(doth, dotl); -} - -static inline __m128i packNibbles( __m128i bytes1, __m128i bytes2 ) -{ - // Move bits within 16-bit lanes from 0000_abcd_0000_efgh into 0000_0000_abcd_efgh - const __m128i lowByte = _mm_set1_epi16( 0xFF ); - __m128i high = _mm_andnot_si128( lowByte, bytes1 ); - __m128i low = _mm_and_si128( lowByte, bytes1 ); - high = _mm_srli_epi16( high, 4 ); - bytes1 = _mm_or_si128( low, high ); - high = _mm_andnot_si128( lowByte, bytes2 ); - low = _mm_and_si128( lowByte, bytes2 ); - high = _mm_srli_epi16( high, 4 ); - bytes2 = _mm_or_si128( low, high ); - - return _mm_packus_epi16( bytes1, bytes2); -} -#endif -#elif defined(__SSSE3__) -// horizontally add 4x4 floats -static inline float hsum_float_4x4(const __m128 a, const __m128 b, const __m128 c, const __m128 d) { - __m128 res_0 =_mm_hadd_ps(a, b); - __m128 res_1 =_mm_hadd_ps(c, d); - __m128 res =_mm_hadd_ps(res_0, res_1); - res =_mm_hadd_ps(res, res); - res =_mm_hadd_ps(res, res); - - return _mm_cvtss_f32(res); -} -#endif // __AVX__ || __AVX2__ || __AVX512F__ -#endif // defined(__AVX__) || defined(__AVX2__) || defined(__AVX512F__) || defined(__SSSE3__) - -#if defined(__ARM_NEON) || defined(__wasm_simd128__) -#define B1(c,s,n) 0x ## n ## c , 0x ## n ## s -#define B2(c,s,n) B1(c,s,n ## c), B1(c,s,n ## s) -#define B3(c,s,n) B2(c,s,n ## c), B2(c,s,n ## s) -#define B4(c,s,n) B3(c,s,n ## c), B3(c,s,n ## s) -#define B5(c,s,n) B4(c,s,n ## c), B4(c,s,n ## s) -#define B6(c,s,n) B5(c,s,n ## c), B5(c,s,n ## s) -#define B7(c,s,n) B6(c,s,n ## c), B6(c,s,n ## s) -#define B8(c,s ) B7(c,s, c), B7(c,s, s) - -// precomputed tables for expanding 8bits to 8 bytes: -static const uint64_t table_b2b_0[1 << 8] = { B8(00, 10) }; // ( b) << 4 -static const uint64_t table_b2b_1[1 << 8] = { B8(10, 00) }; // (!b) << 4 -#endif - -// reference implementation for deterministic creation of model files -void quantize_row_q4_0_reference(const float * restrict x, block_q4_0 * restrict y, int64_t k) { - static const int qk = QK4_0; - - assert(k % qk == 0); - - const int nb = k / qk; - - for (int i = 0; i < nb; i++) { - float amax = 0.0f; // absolute max - float max = 0.0f; - - for (int j = 0; j < qk; j++) { - const float v = x[i*qk + j]; - if (amax < fabsf(v)) { - amax = fabsf(v); - max = v; - } - } - - const float d = max / -8; - const float id = d ? 1.0f/d : 0.0f; - - y[i].d = GGML_FP32_TO_FP16(d); - - for (int j = 0; j < qk/2; ++j) { - const float x0 = x[i*qk + 0 + j]*id; - const float x1 = x[i*qk + qk/2 + j]*id; - - const uint8_t xi0 = MIN(15, (int8_t)(x0 + 8.5f)); - const uint8_t xi1 = MIN(15, (int8_t)(x1 + 8.5f)); - - y[i].qs[j] = xi0; - y[i].qs[j] |= xi1 << 4; - } - } -} - -void quantize_row_q4_0(const float * restrict x, void * restrict y, int64_t k) { - quantize_row_q4_0_reference(x, y, k); -} - - -void quantize_row_q4_1_reference(const float * restrict x, block_q4_1 * restrict y, int64_t k) { - const int qk = QK4_1; - - assert(k % qk == 0); - - const int nb = k / qk; - - for (int i = 0; i < nb; i++) { - float min = FLT_MAX; - float max = -FLT_MAX; - - for (int j = 0; j < qk; j++) { - const float v = x[i*qk + j]; - - if (v < min) min = v; - if (v > max) max = v; - } - - const float d = (max - min) / ((1 << 4) - 1); - const float id = d ? 1.0f/d : 0.0f; - - y[i].d = GGML_FP32_TO_FP16(d); - y[i].m = GGML_FP32_TO_FP16(min); - - for (int j = 0; j < qk/2; ++j) { - const float x0 = (x[i*qk + 0 + j] - min)*id; - const float x1 = (x[i*qk + qk/2 + j] - min)*id; - - const uint8_t xi0 = MIN(15, (int8_t)(x0 + 0.5f)); - const uint8_t xi1 = MIN(15, (int8_t)(x1 + 0.5f)); - - y[i].qs[j] = xi0; - y[i].qs[j] |= xi1 << 4; - } - } -} - -void quantize_row_q4_1(const float * restrict x, void * restrict y, int64_t k) { - quantize_row_q4_1_reference(x, y, k); -} - -void quantize_row_q5_0_reference(const float * restrict x, block_q5_0 * restrict y, int64_t k) { - static const int qk = QK5_0; - - assert(k % qk == 0); - - const int nb = k / qk; - - for (int i = 0; i < nb; i++) { - float amax = 0.0f; // absolute max - float max = 0.0f; - - for (int j = 0; j < qk; j++) { - const float v = x[i*qk + j]; - if (amax < fabsf(v)) { - amax = fabsf(v); - max = v; - } - } - - const float d = max / -16; - const float id = d ? 1.0f/d : 0.0f; - - y[i].d = GGML_FP32_TO_FP16(d); - - uint32_t qh = 0; - - for (int j = 0; j < qk/2; ++j) { - const float x0 = x[i*qk + 0 + j]*id; - const float x1 = x[i*qk + qk/2 + j]*id; - - const uint8_t xi0 = MIN(31, (int8_t)(x0 + 16.5f)); - const uint8_t xi1 = MIN(31, (int8_t)(x1 + 16.5f)); - - y[i].qs[j] = (xi0 & 0x0F) | ((xi1 & 0x0F) << 4); - - // get the 5-th bit and store it in qh at the right position - qh |= ((xi0 & 0x10u) >> 4) << (j + 0); - qh |= ((xi1 & 0x10u) >> 4) << (j + qk/2); - } - - memcpy(&y[i].qh, &qh, sizeof(qh)); - } -} - -void quantize_row_q5_0(const float * restrict x, void * restrict y, int64_t k) { - quantize_row_q5_0_reference(x, y, k); -} - -void quantize_row_q5_1_reference(const float * restrict x, block_q5_1 * restrict y, int64_t k) { - const int qk = QK5_1; - - assert(k % qk == 0); - - const int nb = k / qk; - - for (int i = 0; i < nb; i++) { - float min = FLT_MAX; - float max = -FLT_MAX; - - for (int j = 0; j < qk; j++) { - const float v = x[i*qk + j]; - - if (v < min) min = v; - if (v > max) max = v; - } - - const float d = (max - min) / ((1 << 5) - 1); - const float id = d ? 1.0f/d : 0.0f; - - y[i].d = GGML_FP32_TO_FP16(d); - y[i].m = GGML_FP32_TO_FP16(min); - - uint32_t qh = 0; - - for (int j = 0; j < qk/2; ++j) { - const float x0 = (x[i*qk + 0 + j] - min)*id; - const float x1 = (x[i*qk + qk/2 + j] - min)*id; - - const uint8_t xi0 = (uint8_t)(x0 + 0.5f); - const uint8_t xi1 = (uint8_t)(x1 + 0.5f); - - y[i].qs[j] = (xi0 & 0x0F) | ((xi1 & 0x0F) << 4); - - // get the 5-th bit and store it in qh at the right position - qh |= ((xi0 & 0x10u) >> 4) << (j + 0); - qh |= ((xi1 & 0x10u) >> 4) << (j + qk/2); - } - - memcpy(&y[i].qh, &qh, sizeof(y[i].qh)); - } -} - -void quantize_row_q5_1(const float * restrict x, void * restrict y, int64_t k) { - quantize_row_q5_1_reference(x, y, k); -} - -// reference implementation for deterministic creation of model files -void quantize_row_q8_0_reference(const float * restrict x, block_q8_0 * restrict y, int64_t k) { - assert(k % QK8_0 == 0); - const int nb = k / QK8_0; - - for (int i = 0; i < nb; i++) { - float amax = 0.0f; // absolute max - - for (int j = 0; j < QK8_0; j++) { - const float v = x[i*QK8_0 + j]; - amax = MAX(amax, fabsf(v)); - } - - const float d = amax / ((1 << 7) - 1); - const float id = d ? 1.0f/d : 0.0f; - - y[i].d = GGML_FP32_TO_FP16(d); - - for (int j = 0; j < QK8_0; ++j) { - const float x0 = x[i*QK8_0 + j]*id; - - y[i].qs[j] = roundf(x0); - } - } -} - -void quantize_row_q8_0(const float * restrict x, void * restrict vy, int64_t k) { - assert(QK8_0 == 32); - assert(k % QK8_0 == 0); - const int nb = k / QK8_0; - - block_q8_0 * restrict y = vy; - -#if defined(__ARM_NEON) - for (int i = 0; i < nb; i++) { - float32x4_t srcv [8]; - float32x4_t asrcv[8]; - float32x4_t amaxv[8]; - - for (int j = 0; j < 8; j++) srcv[j] = vld1q_f32(x + i*32 + 4*j); - for (int j = 0; j < 8; j++) asrcv[j] = vabsq_f32(srcv[j]); - - for (int j = 0; j < 4; j++) amaxv[2*j] = vmaxq_f32(asrcv[2*j], asrcv[2*j+1]); - for (int j = 0; j < 2; j++) amaxv[4*j] = vmaxq_f32(amaxv[4*j], amaxv[4*j+2]); - for (int j = 0; j < 1; j++) amaxv[8*j] = vmaxq_f32(amaxv[8*j], amaxv[8*j+4]); - - const float amax = vmaxvq_f32(amaxv[0]); - - const float d = amax / ((1 << 7) - 1); - const float id = d ? 1.0f/d : 0.0f; - - y[i].d = GGML_FP32_TO_FP16(d); - - for (int j = 0; j < 8; j++) { - const float32x4_t v = vmulq_n_f32(srcv[j], id); - const int32x4_t vi = vcvtnq_s32_f32(v); - - y[i].qs[4*j + 0] = vgetq_lane_s32(vi, 0); - y[i].qs[4*j + 1] = vgetq_lane_s32(vi, 1); - y[i].qs[4*j + 2] = vgetq_lane_s32(vi, 2); - y[i].qs[4*j + 3] = vgetq_lane_s32(vi, 3); - } - } -#elif defined(__wasm_simd128__) - for (int i = 0; i < nb; i++) { - v128_t srcv [8]; - v128_t asrcv[8]; - v128_t amaxv[8]; - - for (int j = 0; j < 8; j++) srcv[j] = wasm_v128_load(x + i*32 + 4*j); - for (int j = 0; j < 8; j++) asrcv[j] = wasm_f32x4_abs(srcv[j]); - - for (int j = 0; j < 4; j++) amaxv[2*j] = wasm_f32x4_max(asrcv[2*j], asrcv[2*j+1]); - for (int j = 0; j < 2; j++) amaxv[4*j] = wasm_f32x4_max(amaxv[4*j], amaxv[4*j+2]); - for (int j = 0; j < 1; j++) amaxv[8*j] = wasm_f32x4_max(amaxv[8*j], amaxv[8*j+4]); - - const float amax = MAX(MAX(wasm_f32x4_extract_lane(amaxv[0], 0), - wasm_f32x4_extract_lane(amaxv[0], 1)), - MAX(wasm_f32x4_extract_lane(amaxv[0], 2), - wasm_f32x4_extract_lane(amaxv[0], 3))); - - const float d = amax / ((1 << 7) - 1); - const float id = d ? 1.0f/d : 0.0f; - - y[i].d = GGML_FP32_TO_FP16(d); - - for (int j = 0; j < 8; j++) { - const v128_t v = wasm_f32x4_mul(srcv[j], wasm_f32x4_splat(id)); - const v128_t vi = wasm_i32x4_trunc_sat_f32x4(v); - - y[i].qs[4*j + 0] = wasm_i32x4_extract_lane(vi, 0); - y[i].qs[4*j + 1] = wasm_i32x4_extract_lane(vi, 1); - y[i].qs[4*j + 2] = wasm_i32x4_extract_lane(vi, 2); - y[i].qs[4*j + 3] = wasm_i32x4_extract_lane(vi, 3); - } - } -#elif defined(__AVX2__) || defined(__AVX__) - for (int i = 0; i < nb; i++) { - // Load elements into 4 AVX vectors - __m256 v0 = _mm256_loadu_ps( x ); - __m256 v1 = _mm256_loadu_ps( x + 8 ); - __m256 v2 = _mm256_loadu_ps( x + 16 ); - __m256 v3 = _mm256_loadu_ps( x + 24 ); - x += 32; - - // Compute max(abs(e)) for the block - const __m256 signBit = _mm256_set1_ps( -0.0f ); - __m256 maxAbs = _mm256_andnot_ps( signBit, v0 ); - maxAbs = _mm256_max_ps( maxAbs, _mm256_andnot_ps( signBit, v1 ) ); - maxAbs = _mm256_max_ps( maxAbs, _mm256_andnot_ps( signBit, v2 ) ); - maxAbs = _mm256_max_ps( maxAbs, _mm256_andnot_ps( signBit, v3 ) ); - - __m128 max4 = _mm_max_ps( _mm256_extractf128_ps( maxAbs, 1 ), _mm256_castps256_ps128( maxAbs ) ); - max4 = _mm_max_ps( max4, _mm_movehl_ps( max4, max4 ) ); - max4 = _mm_max_ss( max4, _mm_movehdup_ps( max4 ) ); - const float maxScalar = _mm_cvtss_f32( max4 ); - - // Quantize these floats - const float d = maxScalar / 127.f; - y[i].d = GGML_FP32_TO_FP16(d); - const float id = ( maxScalar != 0.0f ) ? 127.f / maxScalar : 0.0f; - const __m256 mul = _mm256_set1_ps( id ); - - // Apply the multiplier - v0 = _mm256_mul_ps( v0, mul ); - v1 = _mm256_mul_ps( v1, mul ); - v2 = _mm256_mul_ps( v2, mul ); - v3 = _mm256_mul_ps( v3, mul ); - - // Round to nearest integer - v0 = _mm256_round_ps( v0, _MM_ROUND_NEAREST ); - v1 = _mm256_round_ps( v1, _MM_ROUND_NEAREST ); - v2 = _mm256_round_ps( v2, _MM_ROUND_NEAREST ); - v3 = _mm256_round_ps( v3, _MM_ROUND_NEAREST ); - - // Convert floats to integers - __m256i i0 = _mm256_cvtps_epi32( v0 ); - __m256i i1 = _mm256_cvtps_epi32( v1 ); - __m256i i2 = _mm256_cvtps_epi32( v2 ); - __m256i i3 = _mm256_cvtps_epi32( v3 ); - -#if defined(__AVX2__) - // Convert int32 to int16 - i0 = _mm256_packs_epi32( i0, i1 ); // 0, 1, 2, 3, 8, 9, 10, 11, 4, 5, 6, 7, 12, 13, 14, 15 - i2 = _mm256_packs_epi32( i2, i3 ); // 16, 17, 18, 19, 24, 25, 26, 27, 20, 21, 22, 23, 28, 29, 30, 31 - // Convert int16 to int8 - i0 = _mm256_packs_epi16( i0, i2 ); // 0, 1, 2, 3, 8, 9, 10, 11, 16, 17, 18, 19, 24, 25, 26, 27, 4, 5, 6, 7, 12, 13, 14, 15, 20, 21, 22, 23, 28, 29, 30, 31 - - // We got our precious signed bytes, but the order is now wrong - // These AVX2 pack instructions process 16-byte pieces independently - // The following instruction is fixing the order - const __m256i perm = _mm256_setr_epi32( 0, 4, 1, 5, 2, 6, 3, 7 ); - i0 = _mm256_permutevar8x32_epi32( i0, perm ); - - _mm256_storeu_si256((__m256i *)y[i].qs, i0); -#else - // Since we don't have in AVX some necessary functions, - // we split the registers in half and call AVX2 analogs from SSE - __m128i ni0 = _mm256_castsi256_si128( i0 ); - __m128i ni1 = _mm256_extractf128_si256( i0, 1); - __m128i ni2 = _mm256_castsi256_si128( i1 ); - __m128i ni3 = _mm256_extractf128_si256( i1, 1); - __m128i ni4 = _mm256_castsi256_si128( i2 ); - __m128i ni5 = _mm256_extractf128_si256( i2, 1); - __m128i ni6 = _mm256_castsi256_si128( i3 ); - __m128i ni7 = _mm256_extractf128_si256( i3, 1); - - // Convert int32 to int16 - ni0 = _mm_packs_epi32( ni0, ni1 ); - ni2 = _mm_packs_epi32( ni2, ni3 ); - ni4 = _mm_packs_epi32( ni4, ni5 ); - ni6 = _mm_packs_epi32( ni6, ni7 ); - // Convert int16 to int8 - ni0 = _mm_packs_epi16( ni0, ni2 ); - ni4 = _mm_packs_epi16( ni4, ni6 ); - - _mm_storeu_si128((__m128i *)(y[i].qs + 0), ni0); - _mm_storeu_si128((__m128i *)(y[i].qs + 16), ni4); -#endif - } -#elif defined(__riscv_v_intrinsic) - - size_t vl = __riscv_vsetvl_e32m4(QK8_0); - - for (int i = 0; i < nb; i++) { - // load elements - vfloat32m4_t v_x = __riscv_vle32_v_f32m4(x+i*QK8_0, vl); - - vfloat32m4_t vfabs = __riscv_vfabs_v_f32m4(v_x, vl); - vfloat32m1_t tmp = __riscv_vfmv_v_f_f32m1(0.0f, vl); - vfloat32m1_t vmax = __riscv_vfredmax_vs_f32m4_f32m1(vfabs, tmp, vl); - float amax = __riscv_vfmv_f_s_f32m1_f32(vmax); - - const float d = amax / ((1 << 7) - 1); - const float id = d ? 1.0f/d : 0.0f; - - y[i].d = GGML_FP32_TO_FP16(d); - - vfloat32m4_t x0 = __riscv_vfmul_vf_f32m4(v_x, id, vl); - - // convert to integer - vint16m2_t vi = __riscv_vfncvt_x_f_w_i16m2(x0, vl); - vint8m1_t vs = __riscv_vncvt_x_x_w_i8m1(vi, vl); - - // store result - __riscv_vse8_v_i8m1(y[i].qs , vs, vl); - } -#else - GGML_UNUSED(nb); - // scalar - quantize_row_q8_0_reference(x, y, k); -#endif -} - -// reference implementation for deterministic creation of model files -void quantize_row_q8_1_reference(const float * restrict x, block_q8_1 * restrict y, int64_t k) { - assert(QK8_1 == 32); - assert(k % QK8_1 == 0); - const int nb = k / QK8_1; - - for (int i = 0; i < nb; i++) { - float amax = 0.0f; // absolute max - - for (int j = 0; j < QK8_1; j++) { - const float v = x[i*QK8_1 + j]; - amax = MAX(amax, fabsf(v)); - } - - const float d = amax / ((1 << 7) - 1); - const float id = d ? 1.0f/d : 0.0f; - - y[i].d = GGML_FP32_TO_FP16(d); - - int sum = 0; - - for (int j = 0; j < QK8_1/2; ++j) { - const float v0 = x[i*QK8_1 + j]*id; - const float v1 = x[i*QK8_1 + QK8_1/2 + j]*id; - - y[i].qs[ j] = roundf(v0); - y[i].qs[QK8_1/2 + j] = roundf(v1); - - sum += y[i].qs[ j]; - sum += y[i].qs[QK8_1/2 + j]; - } - - y[i].s = GGML_FP32_TO_FP16(sum*d); - } -} - -void quantize_row_q8_1(const float * restrict x, void * restrict vy, int64_t k) { - assert(k % QK8_1 == 0); - const int nb = k / QK8_1; - - block_q8_1 * restrict y = vy; - -#if defined(__ARM_NEON) - for (int i = 0; i < nb; i++) { - float32x4_t srcv [8]; - float32x4_t asrcv[8]; - float32x4_t amaxv[8]; - - for (int j = 0; j < 8; j++) srcv[j] = vld1q_f32(x + i*32 + 4*j); - for (int j = 0; j < 8; j++) asrcv[j] = vabsq_f32(srcv[j]); - - for (int j = 0; j < 4; j++) amaxv[2*j] = vmaxq_f32(asrcv[2*j], asrcv[2*j+1]); - for (int j = 0; j < 2; j++) amaxv[4*j] = vmaxq_f32(amaxv[4*j], amaxv[4*j+2]); - for (int j = 0; j < 1; j++) amaxv[8*j] = vmaxq_f32(amaxv[8*j], amaxv[8*j+4]); - - const float amax = vmaxvq_f32(amaxv[0]); - - const float d = amax / ((1 << 7) - 1); - const float id = d ? 1.0f/d : 0.0f; - - y[i].d = GGML_FP32_TO_FP16(d); - - int32x4_t accv = vdupq_n_s32(0); - - for (int j = 0; j < 8; j++) { - const float32x4_t v = vmulq_n_f32(srcv[j], id); - const int32x4_t vi = vcvtnq_s32_f32(v); - - y[i].qs[4*j + 0] = vgetq_lane_s32(vi, 0); - y[i].qs[4*j + 1] = vgetq_lane_s32(vi, 1); - y[i].qs[4*j + 2] = vgetq_lane_s32(vi, 2); - y[i].qs[4*j + 3] = vgetq_lane_s32(vi, 3); - - accv = vaddq_s32(accv, vi); - } - - y[i].s = GGML_FP32_TO_FP16(d * vaddvq_s32(accv)); - } -#elif defined(__wasm_simd128__) - for (int i = 0; i < nb; i++) { - v128_t srcv [8]; - v128_t asrcv[8]; - v128_t amaxv[8]; - - for (int j = 0; j < 8; j++) srcv[j] = wasm_v128_load(x + i*32 + 4*j); - for (int j = 0; j < 8; j++) asrcv[j] = wasm_f32x4_abs(srcv[j]); - - for (int j = 0; j < 4; j++) amaxv[2*j] = wasm_f32x4_max(asrcv[2*j], asrcv[2*j+1]); - for (int j = 0; j < 2; j++) amaxv[4*j] = wasm_f32x4_max(amaxv[4*j], amaxv[4*j+2]); - for (int j = 0; j < 1; j++) amaxv[8*j] = wasm_f32x4_max(amaxv[8*j], amaxv[8*j+4]); - - const float amax = MAX(MAX(wasm_f32x4_extract_lane(amaxv[0], 0), - wasm_f32x4_extract_lane(amaxv[0], 1)), - MAX(wasm_f32x4_extract_lane(amaxv[0], 2), - wasm_f32x4_extract_lane(amaxv[0], 3))); - - const float d = amax / ((1 << 7) - 1); - const float id = d ? 1.0f/d : 0.0f; - - y[i].d = GGML_FP32_TO_FP16(d); - - v128_t accv = wasm_i32x4_splat(0); - - for (int j = 0; j < 8; j++) { - const v128_t v = wasm_f32x4_mul(srcv[j], wasm_f32x4_splat(id)); - const v128_t vi = wasm_i32x4_trunc_sat_f32x4(v); - - y[i].qs[4*j + 0] = wasm_i32x4_extract_lane(vi, 0); - y[i].qs[4*j + 1] = wasm_i32x4_extract_lane(vi, 1); - y[i].qs[4*j + 2] = wasm_i32x4_extract_lane(vi, 2); - y[i].qs[4*j + 3] = wasm_i32x4_extract_lane(vi, 3); - - accv = wasm_i32x4_add(accv, vi); - } - - y[i].s = GGML_FP32_TO_FP16( - d * (wasm_i32x4_extract_lane(accv, 0) + - wasm_i32x4_extract_lane(accv, 1) + - wasm_i32x4_extract_lane(accv, 2) + - wasm_i32x4_extract_lane(accv, 3))); - } -#elif defined(__AVX2__) || defined(__AVX__) - for (int i = 0; i < nb; i++) { - // Load elements into 4 AVX vectors - __m256 v0 = _mm256_loadu_ps( x ); - __m256 v1 = _mm256_loadu_ps( x + 8 ); - __m256 v2 = _mm256_loadu_ps( x + 16 ); - __m256 v3 = _mm256_loadu_ps( x + 24 ); - x += 32; - - // Compute max(abs(e)) for the block - const __m256 signBit = _mm256_set1_ps( -0.0f ); - __m256 maxAbs = _mm256_andnot_ps( signBit, v0 ); - maxAbs = _mm256_max_ps( maxAbs, _mm256_andnot_ps( signBit, v1 ) ); - maxAbs = _mm256_max_ps( maxAbs, _mm256_andnot_ps( signBit, v2 ) ); - maxAbs = _mm256_max_ps( maxAbs, _mm256_andnot_ps( signBit, v3 ) ); - - __m128 max4 = _mm_max_ps( _mm256_extractf128_ps( maxAbs, 1 ), _mm256_castps256_ps128( maxAbs ) ); - max4 = _mm_max_ps( max4, _mm_movehl_ps( max4, max4 ) ); - max4 = _mm_max_ss( max4, _mm_movehdup_ps( max4 ) ); - const float maxScalar = _mm_cvtss_f32( max4 ); - - // Quantize these floats - const float d = maxScalar / 127.f; - y[i].d = GGML_FP32_TO_FP16(d); - const float id = ( maxScalar != 0.0f ) ? 127.f / maxScalar : 0.0f; - const __m256 mul = _mm256_set1_ps( id ); - - // Apply the multiplier - v0 = _mm256_mul_ps( v0, mul ); - v1 = _mm256_mul_ps( v1, mul ); - v2 = _mm256_mul_ps( v2, mul ); - v3 = _mm256_mul_ps( v3, mul ); - - // Round to nearest integer - v0 = _mm256_round_ps( v0, _MM_ROUND_NEAREST ); - v1 = _mm256_round_ps( v1, _MM_ROUND_NEAREST ); - v2 = _mm256_round_ps( v2, _MM_ROUND_NEAREST ); - v3 = _mm256_round_ps( v3, _MM_ROUND_NEAREST ); - - // Convert floats to integers - __m256i i0 = _mm256_cvtps_epi32( v0 ); - __m256i i1 = _mm256_cvtps_epi32( v1 ); - __m256i i2 = _mm256_cvtps_epi32( v2 ); - __m256i i3 = _mm256_cvtps_epi32( v3 ); - -#if defined(__AVX2__) - // Compute the sum of the quants and set y[i].s - y[i].s = GGML_FP32_TO_FP16(d * hsum_i32_8(_mm256_add_epi32(_mm256_add_epi32(i0, i1), _mm256_add_epi32(i2, i3)))); - - // Convert int32 to int16 - i0 = _mm256_packs_epi32( i0, i1 ); // 0, 1, 2, 3, 8, 9, 10, 11, 4, 5, 6, 7, 12, 13, 14, 15 - i2 = _mm256_packs_epi32( i2, i3 ); // 16, 17, 18, 19, 24, 25, 26, 27, 20, 21, 22, 23, 28, 29, 30, 31 - // Convert int16 to int8 - i0 = _mm256_packs_epi16( i0, i2 ); // 0, 1, 2, 3, 8, 9, 10, 11, 16, 17, 18, 19, 24, 25, 26, 27, 4, 5, 6, 7, 12, 13, 14, 15, 20, 21, 22, 23, 28, 29, 30, 31 - - // We got our precious signed bytes, but the order is now wrong - // These AVX2 pack instructions process 16-byte pieces independently - // The following instruction is fixing the order - const __m256i perm = _mm256_setr_epi32( 0, 4, 1, 5, 2, 6, 3, 7 ); - i0 = _mm256_permutevar8x32_epi32( i0, perm ); - - _mm256_storeu_si256((__m256i *)y[i].qs, i0); -#else - // Since we don't have in AVX some necessary functions, - // we split the registers in half and call AVX2 analogs from SSE - __m128i ni0 = _mm256_castsi256_si128( i0 ); - __m128i ni1 = _mm256_extractf128_si256( i0, 1); - __m128i ni2 = _mm256_castsi256_si128( i1 ); - __m128i ni3 = _mm256_extractf128_si256( i1, 1); - __m128i ni4 = _mm256_castsi256_si128( i2 ); - __m128i ni5 = _mm256_extractf128_si256( i2, 1); - __m128i ni6 = _mm256_castsi256_si128( i3 ); - __m128i ni7 = _mm256_extractf128_si256( i3, 1); - - // Compute the sum of the quants and set y[i].s - const __m128i s0 = _mm_add_epi32(_mm_add_epi32(ni0, ni1), _mm_add_epi32(ni2, ni3)); - const __m128i s1 = _mm_add_epi32(_mm_add_epi32(ni4, ni5), _mm_add_epi32(ni6, ni7)); - y[i].s = GGML_FP32_TO_FP16(d * hsum_i32_4(_mm_add_epi32(s0, s1))); - - // Convert int32 to int16 - ni0 = _mm_packs_epi32( ni0, ni1 ); - ni2 = _mm_packs_epi32( ni2, ni3 ); - ni4 = _mm_packs_epi32( ni4, ni5 ); - ni6 = _mm_packs_epi32( ni6, ni7 ); - // Convert int16 to int8 - ni0 = _mm_packs_epi16( ni0, ni2 ); - ni4 = _mm_packs_epi16( ni4, ni6 ); - - _mm_storeu_si128((__m128i *)(y[i].qs + 0), ni0); - _mm_storeu_si128((__m128i *)(y[i].qs + 16), ni4); -#endif - } -#elif defined(__riscv_v_intrinsic) - - size_t vl = __riscv_vsetvl_e32m4(QK8_1); - - for (int i = 0; i < nb; i++) { - // load elements - vfloat32m4_t v_x = __riscv_vle32_v_f32m4(x+i*QK8_1, vl); - - vfloat32m4_t vfabs = __riscv_vfabs_v_f32m4(v_x, vl); - vfloat32m1_t tmp = __riscv_vfmv_v_f_f32m1(0.0, vl); - vfloat32m1_t vmax = __riscv_vfredmax_vs_f32m4_f32m1(vfabs, tmp, vl); - float amax = __riscv_vfmv_f_s_f32m1_f32(vmax); - - const float d = amax / ((1 << 7) - 1); - const float id = d ? 1.0f/d : 0.0f; - - y[i].d = GGML_FP32_TO_FP16(d); - - vfloat32m4_t x0 = __riscv_vfmul_vf_f32m4(v_x, id, vl); - - // convert to integer - vint16m2_t vi = __riscv_vfncvt_x_f_w_i16m2(x0, vl); - vint8m1_t vs = __riscv_vncvt_x_x_w_i8m1(vi, vl); - - // store result - __riscv_vse8_v_i8m1(y[i].qs , vs, vl); - - // compute sum for y[i].s - vint16m1_t tmp2 = __riscv_vmv_v_x_i16m1(0, vl); - vint16m1_t vwrs = __riscv_vwredsum_vs_i8m1_i16m1(vs, tmp2, vl); - - // set y[i].s - int sum = __riscv_vmv_x_s_i16m1_i16(vwrs); - y[i].s = GGML_FP32_TO_FP16(sum*d); - } -#else - GGML_UNUSED(nb); - // scalar - quantize_row_q8_1_reference(x, y, k); -#endif -} - -void dequantize_row_q4_0(const block_q4_0 * restrict x, float * restrict y, int64_t k) { - static const int qk = QK4_0; - - assert(k % qk == 0); - - const int nb = k / qk; - - for (int i = 0; i < nb; i++) { - const float d = GGML_FP16_TO_FP32(x[i].d); - - for (int j = 0; j < qk/2; ++j) { - const int x0 = (x[i].qs[j] & 0x0F) - 8; - const int x1 = (x[i].qs[j] >> 4) - 8; - - y[i*qk + j + 0 ] = x0*d; - y[i*qk + j + qk/2] = x1*d; - } - } -} - -void dequantize_row_q4_1(const block_q4_1 * restrict x, float * restrict y, int64_t k) { - static const int qk = QK4_1; - - assert(k % qk == 0); - - const int nb = k / qk; - - for (int i = 0; i < nb; i++) { - const float d = GGML_FP16_TO_FP32(x[i].d); - const float m = GGML_FP16_TO_FP32(x[i].m); - - for (int j = 0; j < qk/2; ++j) { - const int x0 = (x[i].qs[j] & 0x0F); - const int x1 = (x[i].qs[j] >> 4); - - y[i*qk + j + 0 ] = x0*d + m; - y[i*qk + j + qk/2] = x1*d + m; - } - } -} - -void dequantize_row_q5_0(const block_q5_0 * restrict x, float * restrict y, int64_t k) { - static const int qk = QK5_0; - - assert(k % qk == 0); - - const int nb = k / qk; - - for (int i = 0; i < nb; i++) { - const float d = GGML_FP16_TO_FP32(x[i].d); - - uint32_t qh; - memcpy(&qh, x[i].qh, sizeof(qh)); - - for (int j = 0; j < qk/2; ++j) { - const uint8_t xh_0 = ((qh >> (j + 0)) << 4) & 0x10; - const uint8_t xh_1 = ((qh >> (j + 12)) ) & 0x10; - - const int32_t x0 = ((x[i].qs[j] & 0x0F) | xh_0) - 16; - const int32_t x1 = ((x[i].qs[j] >> 4) | xh_1) - 16; - - y[i*qk + j + 0 ] = x0*d; - y[i*qk + j + qk/2] = x1*d; - } - } -} - -void dequantize_row_q5_1(const block_q5_1 * restrict x, float * restrict y, int64_t k) { - static const int qk = QK5_1; - - assert(k % qk == 0); - - const int nb = k / qk; - - for (int i = 0; i < nb; i++) { - const float d = GGML_FP16_TO_FP32(x[i].d); - const float m = GGML_FP16_TO_FP32(x[i].m); - - uint32_t qh; - memcpy(&qh, x[i].qh, sizeof(qh)); - - for (int j = 0; j < qk/2; ++j) { - const uint8_t xh_0 = ((qh >> (j + 0)) << 4) & 0x10; - const uint8_t xh_1 = ((qh >> (j + 12)) ) & 0x10; - - const int x0 = (x[i].qs[j] & 0x0F) | xh_0; - const int x1 = (x[i].qs[j] >> 4) | xh_1; - - y[i*qk + j + 0 ] = x0*d + m; - y[i*qk + j + qk/2] = x1*d + m; - } - } -} - -void dequantize_row_q8_0(const block_q8_0 * restrict x, float * restrict y, int64_t k) { - static const int qk = QK8_0; - - assert(k % qk == 0); - - const int nb = k / qk; - - for (int i = 0; i < nb; i++) { - const float d = GGML_FP16_TO_FP32(x[i].d); - - for (int j = 0; j < qk; ++j) { - y[i*qk + j] = x[i].qs[j]*d; - } - } -} - -// -// 2-6 bit quantization in super-blocks -// - -// -// ===================== Helper functions -// -static inline int nearest_int(float fval) { - assert(fval <= 4194303.f); - float val = fval + 12582912.f; - int i; memcpy(&i, &val, sizeof(int)); - return (i & 0x007fffff) - 0x00400000; -} - -static float make_qx_quants(int n, int nmax, const float * restrict x, int8_t * restrict L, int rmse_type, - const float * restrict qw) { - float max = 0; - float amax = 0; - for (int i = 0; i < n; ++i) { - float ax = fabsf(x[i]); - if (ax > amax) { amax = ax; max = x[i]; } - } - if (amax < 1e-30f) { // all zero - for (int i = 0; i < n; ++i) { - L[i] = 0; - } - return 0.f; - } - float iscale = -nmax / max; - if (rmse_type == 0) { - for (int i = 0; i < n; ++i) { - int l = nearest_int(iscale * x[i]); - L[i] = nmax + MAX(-nmax, MIN(nmax-1, l)); - } - return 1/iscale; - } - bool return_early = false; - if (rmse_type < 0) { - rmse_type = -rmse_type; - return_early = true; - } - float sumlx = 0; - float suml2 = 0; -#ifdef HAVE_BUGGY_APPLE_LINKER - // use 'volatile' to prevent unroll and work around a bug in Apple ld64 1015.7 - for (volatile int i = 0; i < n; ++i) { -#else - for (int i = 0; i < n; ++i) { -#endif - int l = nearest_int(iscale * x[i]); - l = MAX(-nmax, MIN(nmax-1, l)); - L[i] = l + nmax; - float w = qw ? qw[i] : rmse_type == 1 ? x[i] * x[i] : rmse_type == 2 ? 1 : rmse_type == 3 ? fabsf(x[i]) : sqrtf(fabsf(x[i])); - sumlx += w*x[i]*l; - suml2 += w*l*l; - } - float scale = sumlx/suml2; - if (return_early) return suml2 > 0 ? 0.5f*(scale + 1/iscale) : 1/iscale; - float best = scale * sumlx; - for (int is = -9; is <= 9; ++is) { - if (is == 0) { - continue; - } - iscale = -(nmax + 0.1f*is) / max; - sumlx = suml2 = 0; - for (int i = 0; i < n; ++i) { - int l = nearest_int(iscale * x[i]); - l = MAX(-nmax, MIN(nmax-1, l)); - float w = qw ? qw[i] : rmse_type == 1 ? x[i] * x[i] : rmse_type == 2 ? 1 : rmse_type == 3 ? fabsf(x[i]) : sqrtf(fabsf(x[i])); - sumlx += w*x[i]*l; - suml2 += w*l*l; - } - if (suml2 > 0 && sumlx*sumlx > best*suml2) { - for (int i = 0; i < n; ++i) { - int l = nearest_int(iscale * x[i]); - L[i] = nmax + MAX(-nmax, MIN(nmax-1, l)); - } - scale = sumlx/suml2; best = scale*sumlx; - } - } - return scale; -} - -static float make_q3_quants(int n, int nmax, const float * restrict x, int8_t * restrict L, bool do_rmse) { - float max = 0; - float amax = 0; - for (int i = 0; i < n; ++i) { - float ax = fabsf(x[i]); - if (ax > amax) { amax = ax; max = x[i]; } - } - if (!amax) { // all zero - for (int i = 0; i < n; ++i) { L[i] = 0; } - return 0.f; - } - float iscale = -nmax / max; - if (do_rmse) { - float sumlx = 0; - float suml2 = 0; - for (int i = 0; i < n; ++i) { - int l = nearest_int(iscale * x[i]); - l = MAX(-nmax, MIN(nmax-1, l)); - L[i] = l; - float w = x[i]*x[i]; - sumlx += w*x[i]*l; - suml2 += w*l*l; - } - for (int itry = 0; itry < 5; ++itry) { - int n_changed = 0; - for (int i = 0; i < n; ++i) { - float w = x[i]*x[i]; - float slx = sumlx - w*x[i]*L[i]; - if (slx > 0) { - float sl2 = suml2 - w*L[i]*L[i]; - int new_l = nearest_int(x[i] * sl2 / slx); - new_l = MAX(-nmax, MIN(nmax-1, new_l)); - if (new_l != L[i]) { - slx += w*x[i]*new_l; - sl2 += w*new_l*new_l; - if (sl2 > 0 && slx*slx*suml2 > sumlx*sumlx*sl2) { - L[i] = new_l; sumlx = slx; suml2 = sl2; - ++n_changed; - } - } - } - } - if (!n_changed) { - break; - } - } - for (int i = 0; i < n; ++i) { - L[i] += nmax; - } - return sumlx / suml2; - } - for (int i = 0; i < n; ++i) { - int l = nearest_int(iscale * x[i]); - l = MAX(-nmax, MIN(nmax-1, l)); - L[i] = l + nmax; - } - return 1/iscale; -} - -static float make_qkx1_quants(int n, int nmax, const float * restrict x, uint8_t * restrict L, float * restrict the_min, - int ntry, float alpha) { - float min = x[0]; - float max = x[0]; - for (int i = 1; i < n; ++i) { - if (x[i] < min) min = x[i]; - if (x[i] > max) max = x[i]; - } - if (max == min) { - for (int i = 0; i < n; ++i) L[i] = 0; - *the_min = 0; - return 0.f; - } - if (min > 0) min = 0; - float iscale = nmax/(max - min); - float scale = 1/iscale; - for (int itry = 0; itry < ntry; ++itry) { - float sumlx = 0; int suml2 = 0; - bool did_change = false; - for (int i = 0; i < n; ++i) { - int l = nearest_int(iscale*(x[i] - min)); - l = MAX(0, MIN(nmax, l)); - if (l != L[i]) { - L[i] = l; - did_change = true; - } - sumlx += (x[i] - min)*l; - suml2 += l*l; - } - scale = sumlx/suml2; - float sum = 0; - for (int i = 0; i < n; ++i) { - sum += x[i] - scale*L[i]; - } - min = alpha*min + (1 - alpha)*sum/n; - if (min > 0) min = 0; - iscale = 1/scale; - if (!did_change) break; - } - *the_min = -min; - return scale; -} - -static float make_qkx2_quants(int n, int nmax, const float * restrict x, const float * restrict weights, - uint8_t * restrict L, float * restrict the_min, uint8_t * restrict Laux, - float rmin, float rdelta, int nstep, bool use_mad) { - float min = x[0]; - float max = x[0]; - float sum_w = weights[0]; - float sum_x = sum_w * x[0]; -#ifdef HAVE_BUGGY_APPLE_LINKER - // use 'volatile' to prevent unroll and work around a bug in Apple ld64 1015.7 - for (volatile int i = 1; i < n; ++i) { -#else - for (int i = 1; i < n; ++i) { -#endif - if (x[i] < min) min = x[i]; - if (x[i] > max) max = x[i]; - float w = weights[i]; - sum_w += w; - sum_x += w * x[i]; - } - if (min > 0) min = 0; - if (max == min) { - for (int i = 0; i < n; ++i) L[i] = 0; - *the_min = -min; - return 0.f; - } - float iscale = nmax/(max - min); - float scale = 1/iscale; - float best_mad = 0; - for (int i = 0; i < n; ++i) { - int l = nearest_int(iscale*(x[i] - min)); - L[i] = MAX(0, MIN(nmax, l)); - float diff = scale * L[i] + min - x[i]; - diff = use_mad ? fabsf(diff) : diff * diff; - float w = weights[i]; - best_mad += w * diff; - } - if (nstep < 1) { - *the_min = -min; - return scale; - } - for (int is = 0; is <= nstep; ++is) { - iscale = (rmin + rdelta*is + nmax)/(max - min); - float sum_l = 0, sum_l2 = 0, sum_xl = 0; - for (int i = 0; i < n; ++i) { - int l = nearest_int(iscale*(x[i] - min)); - l = MAX(0, MIN(nmax, l)); - Laux[i] = l; - float w = weights[i]; - sum_l += w*l; - sum_l2 += w*l*l; - sum_xl += w*l*x[i]; - } - float D = sum_w * sum_l2 - sum_l * sum_l; - if (D > 0) { - float this_scale = (sum_w * sum_xl - sum_x * sum_l)/D; - float this_min = (sum_l2 * sum_x - sum_l * sum_xl)/D; - if (this_min > 0) { - this_min = 0; - this_scale = sum_xl / sum_l2; - } - float mad = 0; - for (int i = 0; i < n; ++i) { - float diff = this_scale * Laux[i] + this_min - x[i]; - diff = use_mad ? fabsf(diff) : diff * diff; - float w = weights[i]; - mad += w * diff; - } - if (mad < best_mad) { - for (int i = 0; i < n; ++i) { - L[i] = Laux[i]; - } - best_mad = mad; - scale = this_scale; - min = this_min; - } - } - } - *the_min = -min; - return scale; -} - -#if QK_K == 256 -static inline void get_scale_min_k4(int j, const uint8_t * restrict q, uint8_t * restrict d, uint8_t * restrict m) { - if (j < 4) { - *d = q[j] & 63; *m = q[j + 4] & 63; - } else { - *d = (q[j+4] & 0xF) | ((q[j-4] >> 6) << 4); - *m = (q[j+4] >> 4) | ((q[j-0] >> 6) << 4); - } -} -#endif - -//========================- 2-bit (de)-quantization - -void quantize_row_q2_K_reference(const float * restrict x, block_q2_K * restrict y, int64_t k) { - assert(k % QK_K == 0); - const int nb = k / QK_K; - - uint8_t L[QK_K]; - uint8_t Laux[16]; - float weights[16]; - float mins[QK_K/16]; - float scales[QK_K/16]; - - const float q4scale = 15.f; - - for (int i = 0; i < nb; i++) { - float max_scale = 0; // as we are deducting the min, scales are always positive - float max_min = 0; - for (int j = 0; j < QK_K/16; ++j) { - for (int l = 0; l < 16; ++l) weights[l] = fabsf(x[16*j + l]); - scales[j] = make_qkx2_quants(16, 3, x + 16*j, weights, L + 16*j, &mins[j], Laux, -0.5f, 0.1f, 15, true); - float scale = scales[j]; - if (scale > max_scale) { - max_scale = scale; - } - float min = mins[j]; - if (min > max_min) { - max_min = min; - } - } - - if (max_scale > 0) { - float iscale = q4scale/max_scale; - for (int j = 0; j < QK_K/16; ++j) { - int l = nearest_int(iscale*scales[j]); - y[i].scales[j] = l; - } - y[i].d = GGML_FP32_TO_FP16(max_scale/q4scale); - } else { - for (int j = 0; j < QK_K/16; ++j) y[i].scales[j] = 0; - y[i].d = GGML_FP32_TO_FP16(0.f); - } - if (max_min > 0) { - float iscale = q4scale/max_min; - for (int j = 0; j < QK_K/16; ++j) { - int l = nearest_int(iscale*mins[j]); - y[i].scales[j] |= (l << 4); - } - y[i].dmin = GGML_FP32_TO_FP16(max_min/q4scale); - } else { - y[i].dmin = GGML_FP32_TO_FP16(0.f); - } - for (int j = 0; j < QK_K/16; ++j) { - const float d = GGML_FP16_TO_FP32(y[i].d) * (y[i].scales[j] & 0xF); - if (!d) continue; - const float dm = GGML_FP16_TO_FP32(y[i].dmin) * (y[i].scales[j] >> 4); - for (int ii = 0; ii < 16; ++ii) { - int l = nearest_int((x[16*j + ii] + dm)/d); - l = MAX(0, MIN(3, l)); - L[16*j + ii] = l; - } - } - -#if QK_K == 256 - for (int j = 0; j < QK_K; j += 128) { - for (int l = 0; l < 32; ++l) { - y[i].qs[j/4 + l] = L[j + l] | (L[j + l + 32] << 2) | (L[j + l + 64] << 4) | (L[j + l + 96] << 6); - } - } -#else - for (int l = 0; l < 16; ++l) { - y[i].qs[l] = L[l] | (L[l + 16] << 2) | (L[l + 32] << 4) | (L[l + 48] << 6); - } -#endif - - x += QK_K; - - } -} - -void dequantize_row_q2_K(const block_q2_K * restrict x, float * restrict y, int64_t k) { - assert(k % QK_K == 0); - const int nb = k / QK_K; - - for (int i = 0; i < nb; i++) { - - const float d = GGML_FP16_TO_FP32(x[i].d); - const float min = GGML_FP16_TO_FP32(x[i].dmin); - - const uint8_t * q = x[i].qs; - -#if QK_K == 256 - int is = 0; - float dl, ml; - for (int n = 0; n < QK_K; n += 128) { - int shift = 0; - for (int j = 0; j < 4; ++j) { - - uint8_t sc = x[i].scales[is++]; - dl = d * (sc & 0xF); ml = min * (sc >> 4); - for (int l = 0; l < 16; ++l) *y++ = dl * ((int8_t)((q[l] >> shift) & 3)) - ml; - - sc = x[i].scales[is++]; - dl = d * (sc & 0xF); ml = min * (sc >> 4); - for (int l = 0; l < 16; ++l) *y++ = dl * ((int8_t)((q[l+16] >> shift) & 3)) - ml; - - shift += 2; - } - q += 32; - } -#else - float dl1 = d * (x[i].scales[0] & 0xF), ml1 = min * (x[i].scales[0] >> 4); - float dl2 = d * (x[i].scales[1] & 0xF), ml2 = min * (x[i].scales[1] >> 4); - float dl3 = d * (x[i].scales[2] & 0xF), ml3 = min * (x[i].scales[2] >> 4); - float dl4 = d * (x[i].scales[3] & 0xF), ml4 = min * (x[i].scales[3] >> 4); - for (int l = 0; l < 16; ++l) { - y[l+ 0] = dl1 * ((int8_t)((q[l] >> 0) & 3)) - ml1; - y[l+16] = dl2 * ((int8_t)((q[l] >> 2) & 3)) - ml2; - y[l+32] = dl3 * ((int8_t)((q[l] >> 4) & 3)) - ml3; - y[l+48] = dl4 * ((int8_t)((q[l] >> 6) & 3)) - ml4; - } - y += QK_K; -#endif - } -} - -void quantize_row_q2_K(const float * restrict x, void * restrict vy, int64_t k) { - quantize_row_q2_K_reference(x, vy, k); -} - -static float make_qkx3_quants(int n, int nmax, const float * restrict x, const float * restrict weights, - uint8_t * restrict L, float * restrict the_min, uint8_t * restrict Laux, - float rmin, float rdelta, int nstep, bool use_mad) { - float min = x[0]; - float max = x[0]; - float sum_w = weights ? weights[0] : x[0]*x[0]; - float sum_x = sum_w * x[0]; -#ifdef HAVE_BUGGY_APPLE_LINKER - // use 'volatile' to prevent unroll and work around a bug in Apple ld64 1015.7 - for (volatile int i = 1; i < n; ++i) { -#else - for (int i = 1; i < n; ++i) { -#endif - if (x[i] < min) min = x[i]; - if (x[i] > max) max = x[i]; - float w = weights ? weights[i] : x[i]*x[i]; - sum_w += w; - sum_x += w * x[i]; - } - if (min > 0) { - min = 0; - } - if (max <= min) { - memset(L, 0, n); - *the_min = -min; - return 0.f; - } - float iscale = nmax/(max - min); - float scale = 1/iscale; - float best_mad = 0; - for (int i = 0; i < n; ++i) { - int l = nearest_int(iscale*(x[i] - min)); - L[i] = MAX(0, MIN(nmax, l)); - float diff = scale * L[i] + min - x[i]; - diff = use_mad ? fabsf(diff) : diff*diff; - float w = weights ? weights[i] : x[i]*x[i]; - best_mad += w * diff; - } - if (nstep < 1) { - *the_min = -min; - return scale; - } - for (int is = 0; is <= nstep; ++is) { - iscale = (rmin + rdelta*is + nmax)/(max - min); - float sum_l = 0, sum_l2 = 0, sum_xl = 0; - for (int i = 0; i < n; ++i) { - int l = nearest_int(iscale*(x[i] - min)); - l = MAX(0, MIN(nmax, l)); - Laux[i] = l; - float w = weights ? weights[i] : x[i]*x[i]; - sum_l += w*l; - sum_l2 += w*l*l; - sum_xl += w*l*x[i]; - } - float D = sum_w * sum_l2 - sum_l * sum_l; - if (D > 0) { - float this_scale = (sum_w * sum_xl - sum_x * sum_l)/D; - float this_min = (sum_l2 * sum_x - sum_l * sum_xl)/D; - if (this_min > 0) { - this_min = 0; - this_scale = sum_xl / sum_l2; - } - float mad = 0; - for (int i = 0; i < n; ++i) { - float diff = this_scale * Laux[i] + this_min - x[i]; - diff = use_mad ? fabsf(diff) : diff*diff; - float w = weights ? weights[i] : x[i]*x[i]; - mad += w * diff; - } - if (mad < best_mad) { - for (int i = 0; i < n; ++i) { - L[i] = Laux[i]; - } - best_mad = mad; - scale = this_scale; - min = this_min; - } - } - } - *the_min = -min; - return scale; -} - -static float make_qp_quants(int n, int nmax, const float * restrict x, uint8_t * restrict L, const float * quant_weights) { - float max = 0; - for (int i = 0; i < n; ++i) { - max = MAX(max, x[i]); - } - if (!max) { // all zero - for (int i = 0; i < n; ++i) { L[i] = 0; } - return 0.f; - } - float iscale = nmax / max; - for (int i = 0; i < n; ++i) { - L[i] = nearest_int(iscale * x[i]); - } - float scale = 1/iscale; - float best_mse = 0; - for (int i = 0; i < n; ++i) { - float diff = x[i] - scale*L[i]; - float w = quant_weights[i]; - best_mse += w*diff*diff; - } - for (int is = -4; is <= 4; ++is) { - if (is == 0) continue; - float iscale_is = (0.1f*is + nmax)/max; - float scale_is = 1/iscale_is; - float mse = 0; - for (int i = 0; i < n; ++i) { - int l = nearest_int(iscale_is*x[i]); - l = MIN(nmax, l); - float diff = x[i] - scale_is*l; - float w = quant_weights[i]; - mse += w*diff*diff; - } - if (mse < best_mse) { - best_mse = mse; - iscale = iscale_is; - } - } - float sumlx = 0; - float suml2 = 0; - for (int i = 0; i < n; ++i) { - int l = nearest_int(iscale * x[i]); - l = MIN(nmax, l); - L[i] = l; - float w = quant_weights[i]; - sumlx += w*x[i]*l; - suml2 += w*l*l; - } - for (int itry = 0; itry < 5; ++itry) { - int n_changed = 0; - for (int i = 0; i < n; ++i) { - float w = quant_weights[i]; - float slx = sumlx - w*x[i]*L[i]; - float sl2 = suml2 - w*L[i]*L[i]; - if (slx > 0 && sl2 > 0) { - int new_l = nearest_int(x[i] * sl2 / slx); - new_l = MIN(nmax, new_l); - if (new_l != L[i]) { - slx += w*x[i]*new_l; - sl2 += w*new_l*new_l; - if (slx*slx*suml2 > sumlx*sumlx*sl2) { - L[i] = new_l; sumlx = slx; suml2 = sl2; - ++n_changed; - } - } - } - } - if (!n_changed) { - break; - } - } - return sumlx / suml2; -} - -static void quantize_row_q2_K_impl(const float * restrict x, block_q2_K * restrict y, int k, const float * restrict quant_weights) { - GGML_ASSERT(quant_weights); - assert(k % QK_K == 0); - const int nb = k / QK_K; - const bool requantize = true; - - uint8_t L[QK_K]; - uint8_t Laux[16]; - float mins[QK_K/16]; - float scales[QK_K/16]; - float sw[QK_K/16]; - float weight[16]; - uint8_t Ls[QK_K/16], Lm[QK_K/16]; - - for (int i = 0; i < nb; i++) { - memset(sw, 0, QK_K/16*sizeof(float)); - float sumx2 = 0; - for (int j = 0; j < QK_K; ++j) sumx2 += x[j]*x[j]; - float sigma2 = sumx2/QK_K; - for (int j = 0; j < QK_K/16; ++j) { - const float * restrict qw = quant_weights + QK_K * i + 16*j; - for (int l = 0; l < 16; ++l) weight[l] = qw[l] * sqrtf(sigma2 + x[16*j + l]*x[16*j + l]); - for (int l = 0; l < QK_K/16; ++l) sw[j] += weight[l]; - scales[j] = make_qkx3_quants(16, 3, x + 16*j, weight, L + 16*j, &mins[j], Laux, -0.9f, 0.05f, 36, false); - } - - float dm, mm; -#if QK_K == 64 - float max_scale = 0, max_min = 0; - for (int j = 0; j < QK_K/16; ++j) { - max_scale = MAX(max_scale, scales[j]); - max_min = MAX(max_min, mins[j]); - } - dm = max_scale/15; - mm = max_min/15; - if (max_scale) { - float id = 1/dm; - for (int j = 0; j < QK_K/16; ++j) { - int l = nearest_int(id*scales[j]); - Ls[j] = MAX(0, MIN(15, l)); - } - } else { - memset(Ls, 0, QK_K/16); - } - if (max_min) { - float id = 1/mm; - for (int j = 0; j < QK_K/16; ++j) { - int l = nearest_int(id*mins[j]); - Lm[j] = MAX(0, MIN(15, l)); - } - } else { - memset(Lm, 0, QK_K/16); - } -#else - dm = make_qp_quants(QK_K/16, 15, scales, Ls, sw); - mm = make_qp_quants(QK_K/16, 15, mins, Lm, sw); -#endif - y[i].d = GGML_FP32_TO_FP16(dm); - y[i].dmin = GGML_FP32_TO_FP16(mm); - dm = GGML_FP16_TO_FP32(y[i].d); - mm = GGML_FP16_TO_FP32(y[i].dmin); - - for (int j = 0; j < QK_K/16; ++j) { - y[i].scales[j] = Ls[j] | (Lm[j] << 4); - } - - if (requantize) { - for (int j = 0; j < QK_K/16; ++j) { - const float d = dm * (y[i].scales[j] & 0xF); - if (!d) continue; - const float m = mm * (y[i].scales[j] >> 4); - for (int ii = 0; ii < 16; ++ii) { - int l = nearest_int((x[16*j + ii] + m)/d); - l = MAX(0, MIN(3, l)); - L[16*j + ii] = l; - } - } - } - -#if QK_K == 256 - for (int j = 0; j < QK_K; j += 128) { - for (int l = 0; l < 32; ++l) { - y[i].qs[j/4 + l] = L[j + l] | (L[j + l + 32] << 2) | (L[j + l + 64] << 4) | (L[j + l + 96] << 6); - } - } -#else - for (int l = 0; l < 16; ++l) { - y[i].qs[l] = L[l] | (L[l + 16] << 2) | (L[l + 32] << 4) | (L[l + 48] << 6); - } -#endif - - x += QK_K; - - } -} - -size_t quantize_q2_K(const float * restrict src, void * restrict dst, int64_t nrow, int64_t n_per_row, const float * quant_weights) { - size_t row_size = ggml_row_size(GGML_TYPE_Q2_K, n_per_row); - if (!quant_weights) { - quantize_row_q2_K_reference(src, dst, (int64_t)nrow*n_per_row); - } - else { - char * qrow = (char *)dst; - for (int64_t row = 0; row < nrow; ++row) { - quantize_row_q2_K_impl(src, (block_q2_K*)qrow, n_per_row, quant_weights); - src += n_per_row; - qrow += row_size; - } - } - return nrow * row_size; -} - -//========================= 3-bit (de)-quantization - -void quantize_row_q3_K_reference(const float * restrict x, block_q3_K * restrict y, int64_t k) { - assert(k % QK_K == 0); - const int nb = k / QK_K; - - int8_t L[QK_K]; - float scales[QK_K / 16]; - - for (int i = 0; i < nb; i++) { - - float max_scale = 0; - float amax = 0; - for (int j = 0; j < QK_K/16; ++j) { - scales[j] = make_q3_quants(16, 4, x + 16*j, L + 16*j, true); - float scale = fabsf(scales[j]); - if (scale > amax) { - amax = scale; max_scale = scales[j]; - } - } - -#if QK_K == 256 - memset(y[i].scales, 0, 12); - if (max_scale) { - float iscale = -32.f/max_scale; - for (int j = 0; j < QK_K/16; ++j) { - int8_t l = nearest_int(iscale*scales[j]); - l = MAX(-32, MIN(31, l)) + 32; - if (j < 8) { - y[i].scales[j] = l & 0xF; - } else { - y[i].scales[j-8] |= ((l & 0xF) << 4); - } - l >>= 4; - y[i].scales[j%4 + 8] |= (l << (2*(j/4))); - } - y[i].d = GGML_FP32_TO_FP16(1/iscale); - } else { - y[i].d = GGML_FP32_TO_FP16(0.f); - } - - int8_t sc; - for (int j = 0; j < QK_K/16; ++j) { - sc = j < 8 ? y[i].scales[j] & 0xF : y[i].scales[j-8] >> 4; - sc = (sc | (((y[i].scales[8 + j%4] >> (2*(j/4))) & 3) << 4)) - 32; - float d = GGML_FP16_TO_FP32(y[i].d) * sc; - if (!d) { - continue; - } - for (int ii = 0; ii < 16; ++ii) { - int l = nearest_int(x[16*j + ii]/d); - l = MAX(-4, MIN(3, l)); - L[16*j + ii] = l + 4; - } - } -#else - if (max_scale) { - float iscale = -8.f/max_scale; - for (int j = 0; j < QK_K/16; j+=2) { - int l1 = nearest_int(iscale*scales[j]); - l1 = 8 + MAX(-8, MIN(7, l1)); - int l2 = nearest_int(iscale*scales[j+1]); - l2 = 8 + MAX(-8, MIN(7, l2)); - y[i].scales[j/2] = l1 | (l2 << 4); - } - y[i].d = GGML_FP32_TO_FP16(1/iscale); - } else { - for (int j = 0; j < QK_K/16; j+=2) { - y[i].scales[j/2] = 0; - } - y[i].d = GGML_FP32_TO_FP16(0.f); - } - for (int j = 0; j < QK_K/16; ++j) { - int s = j%2 == 0 ? y[i].scales[j/2] & 0xF : y[i].scales[j/2] >> 4; - float d = GGML_FP16_TO_FP32(y[i].d) * (s - 8); - if (!d) { - continue; - } - for (int ii = 0; ii < 16; ++ii) { - int l = nearest_int(x[16*j + ii]/d); - l = MAX(-4, MIN(3, l)); - L[16*j + ii] = l + 4; - } - } -#endif - - memset(y[i].hmask, 0, QK_K/8); - // We put the high-bit for the 1st 8 quants into bit 0, the next 8 into bit 1, etc. - int m = 0; - uint8_t hm = 1; - for (int j = 0; j < QK_K; ++j) { - if (L[j] > 3) { - y[i].hmask[m] |= hm; - L[j] -= 4; - } - if (++m == QK_K/8) { - m = 0; hm <<= 1; - } - } -#if QK_K == 256 - for (int j = 0; j < QK_K; j += 128) { - for (int l = 0; l < 32; ++l) { - y[i].qs[j/4 + l] = L[j + l] | (L[j + l + 32] << 2) | (L[j + l + 64] << 4) | (L[j + l + 96] << 6); - } - } -#else - for (int l = 0; l < 16; ++l) { - y[i].qs[l] = L[l] | (L[l + 16] << 2) | (L[l + 32] << 4) | (L[l + 48] << 6); - } -#endif - - x += QK_K; - } -} - -#if QK_K == 256 -void dequantize_row_q3_K(const block_q3_K * restrict x, float * restrict y, int64_t k) { - assert(k % QK_K == 0); - const int nb = k / QK_K; - - const uint32_t kmask1 = 0x03030303; - const uint32_t kmask2 = 0x0f0f0f0f; - - uint32_t aux[4]; - const int8_t * scales = (const int8_t*)aux; - - for (int i = 0; i < nb; i++) { - - const float d_all = GGML_FP16_TO_FP32(x[i].d); - - const uint8_t * restrict q = x[i].qs; - const uint8_t * restrict hm = x[i].hmask; - uint8_t m = 1; - - memcpy(aux, x[i].scales, 12); - uint32_t tmp = aux[2]; - aux[2] = ((aux[0] >> 4) & kmask2) | (((tmp >> 4) & kmask1) << 4); - aux[3] = ((aux[1] >> 4) & kmask2) | (((tmp >> 6) & kmask1) << 4); - aux[0] = (aux[0] & kmask2) | (((tmp >> 0) & kmask1) << 4); - aux[1] = (aux[1] & kmask2) | (((tmp >> 2) & kmask1) << 4); - - int is = 0; - float dl; - for (int n = 0; n < QK_K; n += 128) { - int shift = 0; - for (int j = 0; j < 4; ++j) { - - dl = d_all * (scales[is++] - 32); - for (int l = 0; l < 16; ++l) { - *y++ = dl * ((int8_t)((q[l+ 0] >> shift) & 3) - ((hm[l+ 0] & m) ? 0 : 4)); - } - - dl = d_all * (scales[is++] - 32); - for (int l = 0; l < 16; ++l) { - *y++ = dl * ((int8_t)((q[l+16] >> shift) & 3) - ((hm[l+16] & m) ? 0 : 4)); - } - - shift += 2; - m <<= 1; - } - q += 32; - } - - } -} -#else -void dequantize_row_q3_K(const block_q3_K * restrict x, float * restrict y, int64_t k) { - assert(k % QK_K == 0); - assert(QK_K == 64); - const int nb = k / QK_K; - - for (int i = 0; i < nb; i++) { - - const float d_all = GGML_FP16_TO_FP32(x[i].d); - - const uint8_t * restrict q = x[i].qs; - const uint8_t * restrict hm = x[i].hmask; - - const float d1 = d_all * ((x[i].scales[0] & 0xF) - 8); - const float d2 = d_all * ((x[i].scales[0] >> 4) - 8); - const float d3 = d_all * ((x[i].scales[1] & 0xF) - 8); - const float d4 = d_all * ((x[i].scales[1] >> 4) - 8); - - for (int l=0; l<8; ++l) { - uint8_t h = hm[l]; - y[l+ 0] = d1 * ((int8_t)((q[l+0] >> 0) & 3) - ((h & 0x01) ? 0 : 4)); - y[l+ 8] = d1 * ((int8_t)((q[l+8] >> 0) & 3) - ((h & 0x02) ? 0 : 4)); - y[l+16] = d2 * ((int8_t)((q[l+0] >> 2) & 3) - ((h & 0x04) ? 0 : 4)); - y[l+24] = d2 * ((int8_t)((q[l+8] >> 2) & 3) - ((h & 0x08) ? 0 : 4)); - y[l+32] = d3 * ((int8_t)((q[l+0] >> 4) & 3) - ((h & 0x10) ? 0 : 4)); - y[l+40] = d3 * ((int8_t)((q[l+8] >> 4) & 3) - ((h & 0x20) ? 0 : 4)); - y[l+48] = d4 * ((int8_t)((q[l+0] >> 6) & 3) - ((h & 0x40) ? 0 : 4)); - y[l+56] = d4 * ((int8_t)((q[l+8] >> 6) & 3) - ((h & 0x80) ? 0 : 4)); - } - y += QK_K; - } -} -#endif - -void quantize_row_q3_K(const float * restrict x, void * restrict vy, int64_t k) { - quantize_row_q3_K_reference(x, vy, k); -} - -static void quantize_row_q3_K_impl(const float * restrict x, block_q3_K * restrict y, int64_t n_per_row, const float * restrict quant_weights) { -#if QK_K != 256 - (void)quant_weights; - quantize_row_q3_K_reference(x, y, n_per_row); -#else - assert(n_per_row % QK_K == 0); - const int nb = n_per_row / QK_K; - - int8_t L[QK_K]; - float scales[QK_K / 16]; - float weight[16]; - float sw[QK_K / 16]; - int8_t Ls[QK_K / 16]; - - for (int i = 0; i < nb; i++) { - - float sumx2 = 0; - for (int j = 0; j < QK_K; ++j) sumx2 += x[j]*x[j]; - float sigma2 = 2*sumx2/QK_K; - - for (int j = 0; j < QK_K/16; ++j) { - if (quant_weights) { - const float * qw = quant_weights ? quant_weights + QK_K * i + 16*j : NULL; - for (int l = 0; l < 16; ++l) weight[l] = qw[l] * sqrtf(sigma2 + x[16*j+l]*x[16*j+l]); - } else { - for (int l = 0; l < 16; ++l) weight[l] = x[16*j+l]*x[16*j+l]; - } - float sumw = 0; - for (int l = 0; l < 16; ++l) sumw += weight[l]; - sw[j] = sumw; - - scales[j] = make_qx_quants(16, 4, x + 16*j, L + 16*j, 1, weight); - - } - - memset(y[i].scales, 0, 12); - - float d_block = make_qx_quants(QK_K/16, 32, scales, Ls, 1, sw); - for (int j = 0; j < QK_K/16; ++j) { - int l = Ls[j]; - if (j < 8) { - y[i].scales[j] = l & 0xF; - } else { - y[i].scales[j-8] |= ((l & 0xF) << 4); - } - l >>= 4; - y[i].scales[j%4 + 8] |= (l << (2*(j/4))); - } - y[i].d = GGML_FP32_TO_FP16(d_block); - - int8_t sc; - for (int j = 0; j < QK_K/16; ++j) { - sc = j < 8 ? y[i].scales[j] & 0xF : y[i].scales[j-8] >> 4; - sc = (sc | (((y[i].scales[8 + j%4] >> (2*(j/4))) & 3) << 4)) - 32; - float d = GGML_FP16_TO_FP32(y[i].d) * sc; - if (!d) { - continue; - } - for (int ii = 0; ii < 16; ++ii) { - int l = nearest_int(x[16*j + ii]/d); - l = MAX(-4, MIN(3, l)); - L[16*j + ii] = l + 4; - } - } - - memset(y[i].hmask, 0, QK_K/8); - // We put the high-bit for the 1st 8 quants into bit 0, the next 8 into bit 1, etc. - int m = 0; - uint8_t hm = 1; - for (int j = 0; j < QK_K; ++j) { - if (L[j] > 3) { - y[i].hmask[m] |= hm; - L[j] -= 4; - } - if (++m == QK_K/8) { - m = 0; hm <<= 1; - } - } - for (int j = 0; j < QK_K; j += 128) { - for (int l = 0; l < 32; ++l) { - y[i].qs[j/4 + l] = L[j + l] | (L[j + l + 32] << 2) | (L[j + l + 64] << 4) | (L[j + l + 96] << 6); - } - } - - x += QK_K; - } -#endif -} - -size_t quantize_q3_K(const float * restrict src, void * restrict dst, int64_t nrow, int64_t n_per_row, const float * quant_weights) { - size_t row_size = ggml_row_size(GGML_TYPE_Q3_K, n_per_row); - if (!quant_weights) { - quantize_row_q3_K_reference(src, dst, (int64_t)nrow*n_per_row); - } - else { - char * qrow = (char *)dst; - for (int64_t row = 0; row < nrow; ++row) { - quantize_row_q3_K_impl(src, (block_q3_K*)qrow, n_per_row, quant_weights); - src += n_per_row; - qrow += row_size; - } - } - return nrow * row_size; -} - -// ====================== 4-bit (de)-quantization - -void quantize_row_q4_K_reference(const float * restrict x, block_q4_K * restrict y, int64_t k) { - assert(k % QK_K == 0); - const int nb = k / QK_K; - - uint8_t L[QK_K]; - uint8_t Laux[32]; - float weights[32]; - float mins[QK_K/32]; - float scales[QK_K/32]; - - for (int i = 0; i < nb; i++) { - - float max_scale = 0; // as we are deducting the min, scales are always positive - float max_min = 0; - for (int j = 0; j < QK_K/32; ++j) { - //scales[j] = make_qkx1_quants(32, 15, x + 32*j, L + 32*j, &mins[j], 9, 0.5f); - float sum_x2 = 0; - for (int l = 0; l < 32; ++l) sum_x2 += x[32*j + l] * x[32*j + l]; - float av_x = sqrtf(sum_x2/32); - for (int l = 0; l < 32; ++l) weights[l] = av_x + fabsf(x[32*j + l]); - scales[j] = make_qkx2_quants(32, 15, x + 32*j, weights, L + 32*j, &mins[j], Laux, -1.f, 0.1f, 20, false); - float scale = scales[j]; - if (scale > max_scale) { - max_scale = scale; - } - float min = mins[j]; - if (min > max_min) { - max_min = min; - } - } - -#if QK_K == 256 - float inv_scale = max_scale > 0 ? 63.f/max_scale : 0.f; - float inv_min = max_min > 0 ? 63.f/max_min : 0.f; - for (int j = 0; j < QK_K/32; ++j) { - uint8_t ls = nearest_int(inv_scale*scales[j]); - uint8_t lm = nearest_int(inv_min*mins[j]); - ls = MIN(63, ls); - lm = MIN(63, lm); - if (j < 4) { - y[i].scales[j] = ls; - y[i].scales[j+4] = lm; - } else { - y[i].scales[j+4] = (ls & 0xF) | ((lm & 0xF) << 4); - y[i].scales[j-4] |= ((ls >> 4) << 6); - y[i].scales[j-0] |= ((lm >> 4) << 6); - } - } - y[i].d = GGML_FP32_TO_FP16(max_scale/63.f); - y[i].dmin = GGML_FP32_TO_FP16(max_min/63.f); - - uint8_t sc, m; - for (int j = 0; j < QK_K/32; ++j) { - get_scale_min_k4(j, y[i].scales, &sc, &m); - const float d = GGML_FP16_TO_FP32(y[i].d) * sc; - if (!d) continue; - const float dm = GGML_FP16_TO_FP32(y[i].dmin) * m; - for (int ii = 0; ii < 32; ++ii) { - int l = nearest_int((x[32*j + ii] + dm)/d); - l = MAX(0, MIN(15, l)); - L[32*j + ii] = l; - } - } -#else - const float s_factor = 15.f; - float inv_scale = max_scale > 0 ? s_factor/max_scale : 0.f; - float inv_min = max_min > 0 ? s_factor/max_min : 0.f; - int d1 = nearest_int(inv_scale*scales[0]); - int m1 = nearest_int(inv_min*mins[0]); - int d2 = nearest_int(inv_scale*scales[1]); - int m2 = nearest_int(inv_min*mins[1]); - y[i].scales[0] = d1 | (m1 << 4); - y[i].scales[1] = d2 | (m2 << 4); - y[i].d[0] = GGML_FP32_TO_FP16(max_scale/s_factor); - y[i].d[1] = GGML_FP32_TO_FP16(max_min/s_factor); - - float sumlx = 0; - int suml2 = 0; - for (int j = 0; j < QK_K/32; ++j) { - const uint8_t sd = y[i].scales[j] & 0xF; - const uint8_t sm = y[i].scales[j] >> 4; - const float d = GGML_FP16_TO_FP32(y[i].d[0]) * sd; - if (!d) continue; - const float m = GGML_FP16_TO_FP32(y[i].d[1]) * sm; - for (int ii = 0; ii < 32; ++ii) { - int l = nearest_int((x[32*j + ii] + m)/d); - l = MAX(0, MIN(15, l)); - L[32*j + ii] = l; - sumlx += (x[32*j + ii] + m)*l*sd; - suml2 += l*l*sd*sd; - } - } - if (suml2) { - y[i].d[0] = GGML_FP32_TO_FP16(sumlx/suml2); - } -#endif - uint8_t * q = y[i].qs; - for (int j = 0; j < QK_K; j += 64) { - for (int l = 0; l < 32; ++l) q[l] = L[j + l] | (L[j + l + 32] << 4); - q += 32; - } - - x += QK_K; - - } -} - -void dequantize_row_q4_K(const block_q4_K * restrict x, float * restrict y, int64_t k) { - assert(k % QK_K == 0); - const int nb = k / QK_K; - - for (int i = 0; i < nb; i++) { - - const uint8_t * q = x[i].qs; - -#if QK_K == 256 - - const float d = GGML_FP16_TO_FP32(x[i].d); - const float min = GGML_FP16_TO_FP32(x[i].dmin); - - int is = 0; - uint8_t sc, m; - for (int j = 0; j < QK_K; j += 64) { - get_scale_min_k4(is + 0, x[i].scales, &sc, &m); - const float d1 = d * sc; const float m1 = min * m; - get_scale_min_k4(is + 1, x[i].scales, &sc, &m); - const float d2 = d * sc; const float m2 = min * m; - for (int l = 0; l < 32; ++l) *y++ = d1 * (q[l] & 0xF) - m1; - for (int l = 0; l < 32; ++l) *y++ = d2 * (q[l] >> 4) - m2; - q += 32; is += 2; - } -#else - const float dall = GGML_FP16_TO_FP32(x[i].d[0]); - const float mall = GGML_FP16_TO_FP32(x[i].d[1]); - const float d1 = dall * (x[i].scales[0] & 0xF), m1 = mall * (x[i].scales[0] >> 4); - const float d2 = dall * (x[i].scales[1] & 0xF), m2 = mall * (x[i].scales[1] >> 4); - for (int l = 0; l < 32; ++l) { - y[l+ 0] = d1 * (q[l] & 0xF) - m1; - y[l+32] = d2 * (q[l] >> 4) - m2; - } - y += QK_K; -#endif - - } -} - -void quantize_row_q4_K(const float * restrict x, void * restrict vy, int64_t k) { - assert(k % QK_K == 0); - block_q4_K * restrict y = vy; - quantize_row_q4_K_reference(x, y, k); -} - -static void quantize_row_q4_K_impl(const float * restrict x, block_q4_K * restrict y, int64_t n_per_row, const float * quant_weights) { -#if QK_K != 256 - (void)quant_weights; - quantize_row_q4_K_reference(x, y, n_per_row); -#else - assert(n_per_row % QK_K == 0); - const int64_t nb = n_per_row / QK_K; - - uint8_t L[QK_K]; - uint8_t Laux[32]; - uint8_t Ls[QK_K/32]; - uint8_t Lm[QK_K/32]; - float weights[32]; - float sw[QK_K/32]; - float mins[QK_K/32]; - float scales[QK_K/32]; - - for (int i = 0; i < nb; i++) { - - float sum_x2 = 0; - for (int l = 0; l < QK_K; ++l) sum_x2 += x[l] * x[l]; - float sigma2 = 2*sum_x2/QK_K; - float av_x = sqrtf(sigma2); - - for (int j = 0; j < QK_K/32; ++j) { - if (quant_weights) { - const float * qw = quant_weights + QK_K*i + 32*j; - for (int l = 0; l < 32; ++l) weights[l] = qw[l] * sqrtf(sigma2 + x[32*j + l]*x[32*j + l]); - } else { - for (int l = 0; l < 32; ++l) weights[l] = av_x + fabsf(x[32*j + l]); - } - float sumw = 0; - for (int l = 0; l < 32; ++l) sumw += weights[l]; - sw[j] = sumw; - scales[j] = make_qkx3_quants(32, 15, x + 32*j, weights, L + 32*j, &mins[j], Laux, -0.9f, 0.05f, 36, false); - } - - float d_block = make_qp_quants(QK_K/32, 63, scales, Ls, sw); - float m_block = make_qp_quants(QK_K/32, 63, mins, Lm, sw); - for (int j = 0; j < QK_K/32; ++j) { - uint8_t ls = Ls[j]; - uint8_t lm = Lm[j]; - if (j < 4) { - y[i].scales[j] = ls; - y[i].scales[j+4] = lm; - } else { - y[i].scales[j+4] = (ls & 0xF) | ((lm & 0xF) << 4); - y[i].scales[j-4] |= ((ls >> 4) << 6); - y[i].scales[j-0] |= ((lm >> 4) << 6); - } - } - y[i].d = GGML_FP32_TO_FP16(d_block); - y[i].dmin = GGML_FP32_TO_FP16(m_block); - - uint8_t sc, m; - for (int j = 0; j < QK_K/32; ++j) { - get_scale_min_k4(j, y[i].scales, &sc, &m); - const float d = GGML_FP16_TO_FP32(y[i].d) * sc; - if (!d) continue; - const float dm = GGML_FP16_TO_FP32(y[i].dmin) * m; - for (int ii = 0; ii < 32; ++ii) { - int l = nearest_int((x[32*j + ii] + dm)/d); - l = MAX(0, MIN(15, l)); - L[32*j + ii] = l; - } - } - uint8_t * q = y[i].qs; - for (int j = 0; j < QK_K; j += 64) { - for (int l = 0; l < 32; ++l) q[l] = L[j + l] | (L[j + l + 32] << 4); - q += 32; - } - - x += QK_K; - - } -#endif -} - -size_t quantize_q4_K(const float * restrict src, void * restrict dst, int64_t nrow, int64_t n_per_row, const float * quant_weights) { - size_t row_size = ggml_row_size(GGML_TYPE_Q4_K, n_per_row); - if (!quant_weights) { - quantize_row_q4_K_reference(src, dst, (int64_t)nrow*n_per_row); - } - else { - char * qrow = (char *)dst; - for (int64_t row = 0; row < nrow; ++row) { - quantize_row_q4_K_impl(src, (block_q4_K*)qrow, n_per_row, quant_weights); - src += n_per_row; - qrow += row_size; - } - } - return nrow * row_size; -} - -// ====================== 5-bit (de)-quantization - -void quantize_row_q5_K_reference(const float * restrict x, block_q5_K * restrict y, int64_t k) { - assert(k % QK_K == 0); - const int64_t nb = k / QK_K; - -#if QK_K == 256 - uint8_t L[QK_K]; - float mins[QK_K/32]; - float scales[QK_K/32]; - float weights[32]; - uint8_t Laux[32]; -#else - int8_t L[QK_K]; - float scales[QK_K/16]; -#endif - - for (int i = 0; i < nb; i++) { - -#if QK_K == 256 - - float max_scale = 0; // as we are deducting the min, scales are always positive - float max_min = 0; - for (int j = 0; j < QK_K/32; ++j) { - //scales[j] = make_qkx1_quants(32, 31, x + 32*j, L + 32*j, &mins[j], 9, 0.5f); - float sum_x2 = 0; - for (int l = 0; l < 32; ++l) sum_x2 += x[32*j + l] * x[32*j + l]; - float av_x = sqrtf(sum_x2/32); - for (int l = 0; l < 32; ++l) weights[l] = av_x + fabsf(x[32*j + l]); - scales[j] = make_qkx2_quants(32, 31, x + 32*j, weights, L + 32*j, &mins[j], Laux, -0.5f, 0.1f, 15, false); - float scale = scales[j]; - if (scale > max_scale) { - max_scale = scale; - } - float min = mins[j]; - if (min > max_min) { - max_min = min; - } - } - - float inv_scale = max_scale > 0 ? 63.f/max_scale : 0.f; - float inv_min = max_min > 0 ? 63.f/max_min : 0.f; - for (int j = 0; j < QK_K/32; ++j) { - uint8_t ls = nearest_int(inv_scale*scales[j]); - uint8_t lm = nearest_int(inv_min*mins[j]); - ls = MIN(63, ls); - lm = MIN(63, lm); - if (j < 4) { - y[i].scales[j] = ls; - y[i].scales[j+4] = lm; - } else { - y[i].scales[j+4] = (ls & 0xF) | ((lm & 0xF) << 4); - y[i].scales[j-4] |= ((ls >> 4) << 6); - y[i].scales[j-0] |= ((lm >> 4) << 6); - } - } - y[i].d = GGML_FP32_TO_FP16(max_scale/63.f); - y[i].dmin = GGML_FP32_TO_FP16(max_min/63.f); - - uint8_t sc, m; - for (int j = 0; j < QK_K/32; ++j) { - get_scale_min_k4(j, y[i].scales, &sc, &m); - const float d = GGML_FP16_TO_FP32(y[i].d) * sc; - if (!d) continue; - const float dm = GGML_FP16_TO_FP32(y[i].dmin) * m; - for (int ii = 0; ii < 32; ++ii) { - int l = nearest_int((x[32*j + ii] + dm)/d); - l = MAX(0, MIN(31, l)); - L[32*j + ii] = l; - } - } - - uint8_t * restrict qh = y[i].qh; - uint8_t * restrict ql = y[i].qs; - memset(qh, 0, QK_K/8); - - uint8_t m1 = 1, m2 = 2; - for (int n = 0; n < QK_K; n += 64) { - for (int j = 0; j < 32; ++j) { - int l1 = L[n + j]; - if (l1 > 15) { - l1 -= 16; qh[j] |= m1; - } - int l2 = L[n + j + 32]; - if (l2 > 15) { - l2 -= 16; qh[j] |= m2; - } - ql[j] = l1 | (l2 << 4); - } - m1 <<= 2; m2 <<= 2; - ql += 32; - } -#else - float max_scale = 0, amax = 0; - for (int j = 0; j < QK_K/16; ++j) { - scales[j] = make_qx_quants(16, 16, x + 16*j, L + 16*j, 1, NULL); - float abs_scale = fabsf(scales[j]); - if (abs_scale > amax) { - amax = abs_scale; - max_scale = scales[j]; - } - } - - float iscale = -128.f/max_scale; - for (int j = 0; j < QK_K/16; ++j) { - int l = nearest_int(iscale*scales[j]); - y[i].scales[j] = MAX(-128, MIN(127, l)); - } - y[i].d = GGML_FP32_TO_FP16(1/iscale); - - for (int j = 0; j < QK_K/16; ++j) { - const float d = GGML_FP16_TO_FP32(y[i].d) * y[i].scales[j]; - if (!d) continue; - for (int ii = 0; ii < 16; ++ii) { - int l = nearest_int(x[16*j + ii]/d); - l = MAX(-16, MIN(15, l)); - L[16*j + ii] = l + 16; - } - } - - uint8_t * restrict qh = y[i].qh; - uint8_t * restrict ql = y[i].qs; - memset(qh, 0, QK_K/8); - - for (int j = 0; j < 32; ++j) { - int jm = j%8; - int is = j/8; - int l1 = L[j]; - if (l1 > 15) { - l1 -= 16; qh[jm] |= (1 << is); - } - int l2 = L[j + 32]; - if (l2 > 15) { - l2 -= 16; qh[jm] |= (1 << (4 + is)); - } - ql[j] = l1 | (l2 << 4); - } -#endif - - x += QK_K; - - } -} - -void dequantize_row_q5_K(const block_q5_K * restrict x, float * restrict y, int64_t k) { - assert(k % QK_K == 0); - const int64_t nb = k / QK_K; - - for (int i = 0; i < nb; i++) { - - const uint8_t * ql = x[i].qs; - const uint8_t * qh = x[i].qh; - -#if QK_K == 256 - - const float d = GGML_FP16_TO_FP32(x[i].d); - const float min = GGML_FP16_TO_FP32(x[i].dmin); - - int is = 0; - uint8_t sc, m; - uint8_t u1 = 1, u2 = 2; - for (int j = 0; j < QK_K; j += 64) { - get_scale_min_k4(is + 0, x[i].scales, &sc, &m); - const float d1 = d * sc; const float m1 = min * m; - get_scale_min_k4(is + 1, x[i].scales, &sc, &m); - const float d2 = d * sc; const float m2 = min * m; - for (int l = 0; l < 32; ++l) *y++ = d1 * ((ql[l] & 0xF) + (qh[l] & u1 ? 16 : 0)) - m1; - for (int l = 0; l < 32; ++l) *y++ = d2 * ((ql[l] >> 4) + (qh[l] & u2 ? 16 : 0)) - m2; - ql += 32; is += 2; - u1 <<= 2; u2 <<= 2; - } -#else - float d = GGML_FP16_TO_FP32(x[i].d); - const int8_t * restrict s = x[i].scales; - for (int l = 0; l < 8; ++l) { - y[l+ 0] = d * s[0] * ((ql[l+ 0] & 0xF) - (qh[l] & 0x01 ? 0 : 16)); - y[l+ 8] = d * s[0] * ((ql[l+ 8] & 0xF) - (qh[l] & 0x02 ? 0 : 16)); - y[l+16] = d * s[1] * ((ql[l+16] & 0xF) - (qh[l] & 0x04 ? 0 : 16)); - y[l+24] = d * s[1] * ((ql[l+24] & 0xF) - (qh[l] & 0x08 ? 0 : 16)); - y[l+32] = d * s[2] * ((ql[l+ 0] >> 4) - (qh[l] & 0x10 ? 0 : 16)); - y[l+40] = d * s[2] * ((ql[l+ 8] >> 4) - (qh[l] & 0x20 ? 0 : 16)); - y[l+48] = d * s[3] * ((ql[l+16] >> 4) - (qh[l] & 0x40 ? 0 : 16)); - y[l+56] = d * s[3] * ((ql[l+24] >> 4) - (qh[l] & 0x80 ? 0 : 16)); - } - y += QK_K; -#endif - } -} - -void quantize_row_q5_K(const float * restrict x, void * restrict vy, int64_t k) { - assert(k % QK_K == 0); - block_q5_K * restrict y = vy; - quantize_row_q5_K_reference(x, y, k); -} - -static void quantize_row_q5_K_impl(const float * restrict x, block_q5_K * restrict y, int64_t n_per_row, const float * quant_weights) { -#if QK_K != 256 - (void)quant_weights; - quantize_row_q5_K_reference(x, y, n_per_row); -#else - assert(n_per_row % QK_K == 0); - const int64_t nb = n_per_row / QK_K; - - uint8_t L[QK_K]; - uint8_t Laux[32]; - uint8_t Ls[QK_K/32]; - uint8_t Lm[QK_K/32]; - float mins[QK_K/32]; - float scales[QK_K/32]; - float sw[QK_K/32]; - float weights[32]; - - for (int i = 0; i < nb; i++) { - - float sum_x2 = 0; - for (int l = 0; l < QK_K; ++l) sum_x2 += x[l] * x[l]; - float sigma2 = 2*sum_x2/QK_K; - float av_x = sqrtf(sigma2); - - for (int j = 0; j < QK_K/32; ++j) { - if (quant_weights) { - const float * qw = quant_weights + QK_K*i + 32*j; - for (int l = 0; l < 32; ++l) weights[l] = qw[l] * sqrtf(sigma2 + x[32*j + l]*x[32*j + l]); - } else { - for (int l = 0; l < 32; ++l) weights[l] = av_x + fabsf(x[32*j + l]); - } - float sumw = 0; - for (int l = 0; l < 32; ++l) sumw += weights[l]; - sw[j] = sumw; - - scales[j] = make_qkx3_quants(32, 31, x + 32*j, weights, L + 32*j, &mins[j], Laux, -0.9f, 0.05f, 36, false); - } - - float d_block = make_qp_quants(QK_K/32, 63, scales, Ls, sw); - float m_block = make_qp_quants(QK_K/32, 63, mins, Lm, sw); - - for (int j = 0; j < QK_K/32; ++j) { - uint8_t ls = Ls[j]; - uint8_t lm = Lm[j]; - ls = MIN(63, ls); - lm = MIN(63, lm); - if (j < 4) { - y[i].scales[j] = ls; - y[i].scales[j+4] = lm; - } else { - y[i].scales[j+4] = (ls & 0xF) | ((lm & 0xF) << 4); - y[i].scales[j-4] |= ((ls >> 4) << 6); - y[i].scales[j-0] |= ((lm >> 4) << 6); - } - } - y[i].d = GGML_FP32_TO_FP16(d_block); - y[i].dmin = GGML_FP32_TO_FP16(m_block); - - uint8_t sc, m; - for (int j = 0; j < QK_K/32; ++j) { - get_scale_min_k4(j, y[i].scales, &sc, &m); - const float d = GGML_FP16_TO_FP32(y[i].d) * sc; - if (!d) continue; - const float dm = GGML_FP16_TO_FP32(y[i].dmin) * m; - for (int ii = 0; ii < 32; ++ii) { - int l = nearest_int((x[32*j + ii] + dm)/d); - l = MAX(0, MIN(31, l)); - L[32*j + ii] = l; - } - } - - uint8_t * restrict qh = y[i].qh; - uint8_t * restrict ql = y[i].qs; - memset(qh, 0, QK_K/8); - - uint8_t m1 = 1, m2 = 2; - for (int n = 0; n < QK_K; n += 64) { - for (int j = 0; j < 32; ++j) { - int l1 = L[n + j]; - if (l1 > 15) { - l1 -= 16; qh[j] |= m1; - } - int l2 = L[n + j + 32]; - if (l2 > 15) { - l2 -= 16; qh[j] |= m2; - } - ql[j] = l1 | (l2 << 4); - } - m1 <<= 2; m2 <<= 2; - ql += 32; - } - - x += QK_K; - - } -#endif -} - -size_t quantize_q5_K(const float * restrict src, void * restrict dst, int64_t nrow, int64_t n_per_row, const float * quant_weights) { - size_t row_size = ggml_row_size(GGML_TYPE_Q5_K, n_per_row); - if (!quant_weights) { - quantize_row_q5_K_reference(src, dst, (int64_t)nrow*n_per_row); - } - else { - char * qrow = (char *)dst; - for (int64_t row = 0; row < nrow; ++row) { - quantize_row_q5_K_impl(src, (block_q5_K*)qrow, n_per_row, quant_weights); - src += n_per_row; - qrow += row_size; - } - } - return nrow * row_size; -} - -// ====================== 6-bit (de)-quantization - -void quantize_row_q6_K_reference(const float * restrict x, block_q6_K * restrict y, int64_t k) { - assert(k % QK_K == 0); - const int64_t nb = k / QK_K; - - int8_t L[QK_K]; - float scales[QK_K/16]; - - for (int i = 0; i < nb; i++) { - - float max_scale = 0; - float max_abs_scale = 0; - - for (int ib = 0; ib < QK_K/16; ++ib) { - - const float scale = make_qx_quants(16, 32, x + 16*ib, L + 16*ib, 1, NULL); - scales[ib] = scale; - - const float abs_scale = fabsf(scale); - if (abs_scale > max_abs_scale) { - max_abs_scale = abs_scale; - max_scale = scale; - } - - } - - if (!max_abs_scale) { - memset(&y[i], 0, sizeof(block_q6_K)); - y[i].d = GGML_FP32_TO_FP16(0.f); - x += QK_K; - continue; - } - - float iscale = -128.f/max_scale; - y[i].d = GGML_FP32_TO_FP16(1/iscale); - for (int ib = 0; ib < QK_K/16; ++ib) { - y[i].scales[ib] = MIN(127, nearest_int(iscale*scales[ib])); - } - - for (int j = 0; j < QK_K/16; ++j) { - float d = GGML_FP16_TO_FP32(y[i].d) * y[i].scales[j]; - if (!d) { - continue; - } - for (int ii = 0; ii < 16; ++ii) { - int l = nearest_int(x[16*j + ii]/d); - l = MAX(-32, MIN(31, l)); - L[16*j + ii] = l + 32; - } - } - - uint8_t * restrict ql = y[i].ql; - uint8_t * restrict qh = y[i].qh; -#if QK_K == 256 - for (int j = 0; j < QK_K; j += 128) { - for (int l = 0; l < 32; ++l) { - const uint8_t q1 = L[j + l + 0] & 0xF; - const uint8_t q2 = L[j + l + 32] & 0xF; - const uint8_t q3 = L[j + l + 64] & 0xF; - const uint8_t q4 = L[j + l + 96] & 0xF; - ql[l+ 0] = q1 | (q3 << 4); - ql[l+32] = q2 | (q4 << 4); - qh[l] = (L[j + l] >> 4) | ((L[j + l + 32] >> 4) << 2) | ((L[j + l + 64] >> 4) << 4) | ((L[j + l + 96] >> 4) << 6); - } - ql += 64; - qh += 32; - } -#else - for (int l = 0; l < 32; ++l) { - const uint8_t q1 = L[l + 0] & 0xF; - const uint8_t q2 = L[l + 32] & 0xF; - ql[l] = q1 | (q2 << 4); - } - for (int l = 0; l < 16; ++l) { - qh[l] = (L[l] >> 4) | ((L[l + 16] >> 4) << 2) | ((L[l + 32] >> 4) << 4) | ((L[l + 48] >> 4) << 6); - } -#endif - - x += QK_K; - - } -} - -void dequantize_row_q6_K(const block_q6_K * restrict x, float * restrict y, int64_t k) { - assert(k % QK_K == 0); - const int64_t nb = k / QK_K; - - for (int i = 0; i < nb; i++) { - - const float d = GGML_FP16_TO_FP32(x[i].d); - - const uint8_t * restrict ql = x[i].ql; - const uint8_t * restrict qh = x[i].qh; - const int8_t * restrict sc = x[i].scales; - -#if QK_K == 256 - for (int n = 0; n < QK_K; n += 128) { - for (int l = 0; l < 32; ++l) { - int is = l/16; - const int8_t q1 = (int8_t)((ql[l + 0] & 0xF) | (((qh[l] >> 0) & 3) << 4)) - 32; - const int8_t q2 = (int8_t)((ql[l + 32] & 0xF) | (((qh[l] >> 2) & 3) << 4)) - 32; - const int8_t q3 = (int8_t)((ql[l + 0] >> 4) | (((qh[l] >> 4) & 3) << 4)) - 32; - const int8_t q4 = (int8_t)((ql[l + 32] >> 4) | (((qh[l] >> 6) & 3) << 4)) - 32; - y[l + 0] = d * sc[is + 0] * q1; - y[l + 32] = d * sc[is + 2] * q2; - y[l + 64] = d * sc[is + 4] * q3; - y[l + 96] = d * sc[is + 6] * q4; - } - y += 128; - ql += 64; - qh += 32; - sc += 8; - } -#else - for (int l = 0; l < 16; ++l) { - const int8_t q1 = (int8_t)((ql[l+ 0] & 0xF) | (((qh[l] >> 0) & 3) << 4)) - 32; - const int8_t q2 = (int8_t)((ql[l+16] & 0xF) | (((qh[l] >> 2) & 3) << 4)) - 32; - const int8_t q3 = (int8_t)((ql[l+ 0] >> 4) | (((qh[l] >> 4) & 3) << 4)) - 32; - const int8_t q4 = (int8_t)((ql[l+16] >> 4) | (((qh[l] >> 6) & 3) << 4)) - 32; - y[l+ 0] = d * sc[0] * q1; - y[l+16] = d * sc[1] * q2; - y[l+32] = d * sc[2] * q3; - y[l+48] = d * sc[3] * q4; - } - y += 64; -#endif - - } -} - -void quantize_row_q6_K(const float * restrict x, void * restrict vy, int64_t k) { - assert(k % QK_K == 0); - block_q6_K * restrict y = vy; - quantize_row_q6_K_reference(x, y, k); -} - -static void quantize_row_q6_K_impl(const float * restrict x, block_q6_K * restrict y, int64_t n_per_row, const float * quant_weights) { -#if QK_K != 256 - (void)quant_weights; - quantize_row_q6_K_reference(x, y, n_per_row); -#else - assert(n_per_row % QK_K == 0); - const int64_t nb = n_per_row / QK_K; - - int8_t L[QK_K]; - float scales[QK_K/16]; - //float weights[16]; - - for (int i = 0; i < nb; i++) { - - //float sum_x2 = 0; - //for (int j = 0; j < QK_K; ++j) sum_x2 += x[j]*x[j]; - //float sigma2 = sum_x2/QK_K; - - float max_scale = 0; - float max_abs_scale = 0; - - for (int ib = 0; ib < QK_K/16; ++ib) { - - float scale; - if (quant_weights) { - const float * qw = quant_weights + QK_K*i + 16*ib; - //for (int j = 0; j < 16; ++j) weights[j] = qw[j] * sqrtf(sigma2 + x[16*ib + j]*x[16*ib + j]); - //scale = make_qx_quants(16, 32, x + 16*ib, L + 16*ib, 1, weights); - scale = make_qx_quants(16, 32, x + 16*ib, L + 16*ib, 1, qw); - } else { - scale = make_qx_quants(16, 32, x + 16*ib, L + 16*ib, 1, NULL); - } - scales[ib] = scale; - - const float abs_scale = fabsf(scale); - if (abs_scale > max_abs_scale) { - max_abs_scale = abs_scale; - max_scale = scale; - } - - } - - if (!max_abs_scale) { - memset(&y[i], 0, sizeof(block_q6_K)); - y[i].d = GGML_FP32_TO_FP16(0.f); - x += QK_K; - continue; - } - - float iscale = -128.f/max_scale; - y[i].d = GGML_FP32_TO_FP16(1/iscale); - for (int ib = 0; ib < QK_K/16; ++ib) { - y[i].scales[ib] = MIN(127, nearest_int(iscale*scales[ib])); - } - - for (int j = 0; j < QK_K/16; ++j) { - float d = GGML_FP16_TO_FP32(y[i].d) * y[i].scales[j]; - if (!d) { - continue; - } - for (int ii = 0; ii < 16; ++ii) { - int l = nearest_int(x[16*j + ii]/d); - l = MAX(-32, MIN(31, l)); - L[16*j + ii] = l + 32; - } - } - - uint8_t * restrict ql = y[i].ql; - uint8_t * restrict qh = y[i].qh; - for (int j = 0; j < QK_K; j += 128) { - for (int l = 0; l < 32; ++l) { - const uint8_t q1 = L[j + l + 0] & 0xF; - const uint8_t q2 = L[j + l + 32] & 0xF; - const uint8_t q3 = L[j + l + 64] & 0xF; - const uint8_t q4 = L[j + l + 96] & 0xF; - ql[l+ 0] = q1 | (q3 << 4); - ql[l+32] = q2 | (q4 << 4); - qh[l] = (L[j + l] >> 4) | ((L[j + l + 32] >> 4) << 2) | ((L[j + l + 64] >> 4) << 4) | ((L[j + l + 96] >> 4) << 6); - } - ql += 64; - qh += 32; - } - - x += QK_K; - - } -#endif -} - -size_t quantize_q6_K(const float * restrict src, void * restrict dst, int64_t nrow, int64_t n_per_row, const float * quant_weights) { - size_t row_size = ggml_row_size(GGML_TYPE_Q6_K, n_per_row); - if (!quant_weights) { - quantize_row_q6_K_reference(src, dst, (int64_t)nrow*n_per_row); - } - else { - char * qrow = (char *)dst; - for (int64_t row = 0; row < nrow; ++row) { - quantize_row_q6_K_impl(src, (block_q6_K*)qrow, n_per_row, quant_weights); - src += n_per_row; - qrow += row_size; - } - } - return nrow * row_size; -} - -static void quantize_row_q4_0_impl(const float * restrict x, block_q4_0 * restrict y, int64_t n_per_row, const float * quant_weights) { - static_assert(QK4_0 == 32, "QK4_0 must be 32"); - - if (!quant_weights) { - quantize_row_q4_0_reference(x, y, n_per_row); - return; - } - - float weight[QK4_0]; - int8_t L[QK4_0]; - - float sum_x2 = 0; - for (int j = 0; j < n_per_row; ++j) sum_x2 += x[j]*x[j]; - float sigma2 = sum_x2/n_per_row; - - const int64_t nb = n_per_row/QK4_0; - for (int ib = 0; ib < nb; ++ib) { - const float * xb = x + QK4_0 * ib; - const float * qw = quant_weights + QK4_0 * ib; - for (int j = 0; j < QK4_0; ++j) weight[j] = qw[j] * sqrtf(sigma2 + xb[j]*xb[j]); - float d = make_qx_quants(QK4_0, 8, xb, L, 1, weight); - y[ib].d = GGML_FP32_TO_FP16(d); - for (int j = 0; j < 16; ++j) { - y[ib].qs[j] = L[j] | (L[j+16] << 4); - } - } -} - -size_t quantize_q4_0(const float * restrict src, void * restrict dst, int64_t nrow, int64_t n_per_row, const float * quant_weights) { - if (!quant_weights) { - quantize_row_q4_0_reference(src, dst, (int64_t)nrow*n_per_row); - return nrow * ggml_row_size(GGML_TYPE_Q4_0, n_per_row); - } - size_t row_size = ggml_row_size(GGML_TYPE_Q4_0, n_per_row); - char * qrow = (char *)dst; - for (int64_t row = 0; row < nrow; ++row) { - quantize_row_q4_0_impl(src, (block_q4_0*)qrow, n_per_row, quant_weights); - src += n_per_row; - qrow += row_size; - } - return nrow * row_size; -} - -static void quantize_row_q4_1_impl(const float * restrict x, block_q4_1 * restrict y, int64_t n_per_row, const float * quant_weights) { - static_assert(QK4_1 == 32, "QK4_1 must be 32"); - - if (!quant_weights) { - quantize_row_q4_1_reference(x, y, n_per_row); - return; - } - - float weight[QK4_1]; - uint8_t L[QK4_1], Laux[QK4_1]; - - float sum_x2 = 0; - for (int j = 0; j < n_per_row; ++j) sum_x2 += x[j]*x[j]; - float sigma2 = sum_x2/n_per_row; - - const int64_t nb = n_per_row/QK4_1; - for (int ib = 0; ib < nb; ++ib) { - const float * xb = x + QK4_1 * ib; - const float * qw = quant_weights + QK4_1 * ib; - for (int j = 0; j < QK4_1; ++j) weight[j] = qw[j] * sqrtf(sigma2 + xb[j]*xb[j]); - float min; - float d = make_qkx3_quants(QK4_1, 15, xb, weight, L, &min, Laux, -0.9f, 0.05f, 36, false); - y[ib].d = GGML_FP32_TO_FP16(d); - y[ib].m = GGML_FP32_TO_FP16(-min); - for (int j = 0; j < 16; ++j) { - y[ib].qs[j] = L[j] | (L[j+16] << 4); - } - } -} - -size_t quantize_q4_1(const float * restrict src, void * restrict dst, int64_t nrow, int64_t n_per_row, const float * quant_weights) { - if (!quant_weights) { - quantize_row_q4_1_reference(src, dst, (int64_t)nrow*n_per_row); - return nrow * ggml_row_size(GGML_TYPE_Q4_1, n_per_row); - } - size_t row_size = ggml_row_size(GGML_TYPE_Q4_1, n_per_row); - char * qrow = (char *)dst; - for (int64_t row = 0; row < nrow; ++row) { - quantize_row_q4_1_impl(src, (block_q4_1*)qrow, n_per_row, quant_weights); - src += n_per_row; - qrow += row_size; - } - return nrow * row_size; -} - -static void quantize_row_q5_0_impl(const float * restrict x, block_q5_0 * restrict y, int64_t n_per_row, const float * quant_weights) { - static_assert(QK5_0 == 32, "QK5_0 must be 32"); - - if (!quant_weights) { - quantize_row_q5_0_reference(x, y, n_per_row); - return; - } - - float weight[QK5_0]; - int8_t L[QK5_0]; - - float sum_x2 = 0; - for (int j = 0; j < n_per_row; ++j) sum_x2 += x[j]*x[j]; - float sigma2 = sum_x2/n_per_row; - - const int64_t nb = n_per_row/QK5_0; - for (int ib = 0; ib < nb; ++ib) { - const float * xb = x + QK5_0 * ib; - const float * qw = quant_weights + QK5_0 * ib; - for (int j = 0; j < QK5_0; ++j) weight[j] = qw[j] * sqrtf(sigma2 + xb[j]*xb[j]); - float d = make_qx_quants(QK5_0, 16, xb, L, 1, weight); - y[ib].d = GGML_FP32_TO_FP16(d); - - uint32_t qh = 0; - - for (int j = 0; j < 16; ++j) { - const uint8_t xi0 = L[j]; - const uint8_t xi1 = L[j+16]; - y[ib].qs[j] = (xi0 & 0x0F) | ((xi1 & 0x0F) << 4); - - // get the 5-th bit and store it in qh at the right position - qh |= ((xi0 & 0x10u) >> 4) << (j + 0); - qh |= ((xi1 & 0x10u) >> 4) << (j + QK5_0/2); - } - - memcpy(&y[ib].qh, &qh, sizeof(qh)); - } -} - -size_t quantize_q5_0(const float * restrict src, void * restrict dst, int64_t nrow, int64_t n_per_row, const float * quant_weights) { - if (!quant_weights) { - quantize_row_q5_0_reference(src, dst, (int64_t)nrow*n_per_row); - return nrow * ggml_row_size(GGML_TYPE_Q5_0, n_per_row); - } - size_t row_size = ggml_row_size(GGML_TYPE_Q5_0, n_per_row); - char * qrow = (char *)dst; - for (int64_t row = 0; row < nrow; ++row) { - quantize_row_q5_0_impl(src, (block_q5_0*)qrow, n_per_row, quant_weights); - src += n_per_row; - qrow += row_size; - } - return nrow * row_size; -} - -static void quantize_row_q5_1_impl(const float * restrict x, block_q5_1 * restrict y, int64_t n_per_row, const float * quant_weights) { - static_assert(QK5_1 == 32, "QK5_1 must be 32"); - - if (!quant_weights) { - quantize_row_q5_1_reference(x, y, n_per_row); - return; - } - - float weight[QK5_1]; - uint8_t L[QK5_1], Laux[QK5_1]; - - float sum_x2 = 0; - for (int j = 0; j < n_per_row; ++j) sum_x2 += x[j]*x[j]; - float sigma2 = sum_x2/n_per_row; - - const int64_t nb = n_per_row/QK5_1; - for (int ib = 0; ib < nb; ++ib) { - const float * xb = x + QK5_1 * ib; - const float * qw = quant_weights + QK5_1 * ib; - for (int j = 0; j < QK5_1; ++j) weight[j] = qw[j] * sqrtf(sigma2 + xb[j]*xb[j]); - float min; - float d = make_qkx3_quants(QK5_1, 31, xb, weight, L, &min, Laux, -0.9f, 0.05f, 36, false); - y[ib].d = GGML_FP32_TO_FP16(d); - y[ib].m = GGML_FP32_TO_FP16(-min); - - uint32_t qh = 0; - for (int j = 0; j < 16; ++j) { - const uint8_t xi0 = L[j]; - const uint8_t xi1 = L[j+16]; - y[ib].qs[j] = (xi0 & 0x0F) | ((xi1 & 0x0F) << 4); - // get the 5-th bit and store it in qh at the right position - qh |= ((xi0 & 0x10u) >> 4) << (j + 0); - qh |= ((xi1 & 0x10u) >> 4) << (j + QK5_0/2); - } - memcpy(&y[ib].qh, &qh, sizeof(qh)); - } -} - -size_t quantize_q5_1(const float * restrict src, void * restrict dst, int64_t nrow, int64_t n_per_row, const float * quant_weights) { - if (!quant_weights) { - quantize_row_q5_1_reference(src, dst, (int64_t)nrow*n_per_row); - return nrow * ggml_row_size(GGML_TYPE_Q5_1, n_per_row); - } - size_t row_size = ggml_row_size(GGML_TYPE_Q5_1, n_per_row); - char * qrow = (char *)dst; - for (int64_t row = 0; row < nrow; ++row) { - quantize_row_q5_1_impl(src, (block_q5_1*)qrow, n_per_row, quant_weights); - src += n_per_row; - qrow += row_size; - } - return nrow * row_size; -} - -size_t quantize_q8_0(const float * restrict src, void * restrict dst, int64_t nrow, int64_t n_per_row, const float * quant_weights) { - (void)quant_weights; // not used - const size_t row_size = ggml_row_size(GGML_TYPE_Q8_0, n_per_row); - quantize_row_q8_0_reference(src, dst, (int64_t)nrow*n_per_row); - return nrow * row_size; -} - -// ====================== "True" 2-bit (de)-quantization - -void dequantize_row_iq2_xxs(const block_iq2_xxs * restrict x, float * restrict y, int64_t k) { - assert(k % QK_K == 0); - const int64_t nb = k / QK_K; - - uint32_t aux32[2]; - const uint8_t * aux8 = (const uint8_t *)aux32; - - for (int i = 0; i < nb; i++) { - - const float d = GGML_FP16_TO_FP32(x[i].d); - - for (int ib32 = 0; ib32 < QK_K/32; ++ib32) { - memcpy(aux32, x[i].qs + 4*ib32, 2*sizeof(uint32_t)); - const float db = d * (0.5f + (aux32[1] >> 28)) * 0.25f; - for (int l = 0; l < 4; ++l) { - const uint8_t * grid = (const uint8_t *)(iq2xxs_grid + aux8[l]); - const uint8_t signs = ksigns_iq2xs[(aux32[1] >> 7*l) & 127]; - for (int j = 0; j < 8; ++j) { - y[j] = db * grid[j] * (signs & kmask_iq2xs[j] ? -1.f : 1.f); - } - y += 8; - } - } - } -} - -// ====================== 2.3125 bpw (de)-quantization - -void dequantize_row_iq2_xs(const block_iq2_xs * restrict x, float * restrict y, int64_t k) { - assert(k % QK_K == 0); - const int64_t nb = k / QK_K; - - float db[2]; - - for (int i = 0; i < nb; i++) { - - const float d = GGML_FP16_TO_FP32(x[i].d); - - for (int ib32 = 0; ib32 < QK_K/32; ++ib32) { - db[0] = d * (0.5f + (x[i].scales[ib32] & 0xf)) * 0.25f; - db[1] = d * (0.5f + (x[i].scales[ib32] >> 4)) * 0.25f; - for (int l = 0; l < 4; ++l) { - const uint8_t * grid = (const uint8_t *)(iq2xs_grid + (x[i].qs[4*ib32 + l] & 511)); - const uint8_t signs = ksigns_iq2xs[x[i].qs[4*ib32 + l] >> 9]; - for (int j = 0; j < 8; ++j) { - y[j] = db[l/2] * grid[j] * (signs & kmask_iq2xs[j] ? -1.f : 1.f); - } - y += 8; - } - } - } -} - -// ====================== 2.5625 bpw (de)-quantization - -void dequantize_row_iq2_s(const block_iq2_s * restrict x, float * restrict y, int64_t k) { - assert(k % QK_K == 0); - const int64_t nb = k / QK_K; - - float db[2]; - - for (int i = 0; i < nb; i++) { - - const float d = GGML_FP16_TO_FP32(x[i].d); - const uint8_t * qs = x[i].qs; - const uint8_t * qh = x[i].qh; - const uint8_t * signs = qs + QK_K/8; - - for (int ib32 = 0; ib32 < QK_K/32; ++ib32) { - db[0] = d * (0.5f + (x[i].scales[ib32] & 0xf)) * 0.25f; - db[1] = d * (0.5f + (x[i].scales[ib32] >> 4)) * 0.25f; - for (int l = 0; l < 4; ++l) { - const float dl = db[l/2]; - const uint8_t * grid = (const uint8_t *)(iq2s_grid + (qs[l] | (qh[ib32] << (8-2*l) & 0x300))); - for (int j = 0; j < 8; ++j) { - y[j] = dl * grid[j] * (signs[l] & kmask_iq2xs[j] ? -1.f : 1.f); - } - y += 8; - } - qs += 4; - signs += 4; - } - } -} - -// ====================== 3.0625 bpw (de)-quantization - -void dequantize_row_iq3_xxs(const block_iq3_xxs * restrict x, float * restrict y, int64_t k) { - assert(k % QK_K == 0); - const int64_t nb = k / QK_K; - - uint32_t aux32; - - for (int i = 0; i < nb; i++) { - - const float d = GGML_FP16_TO_FP32(x[i].d); - const uint8_t * qs = x[i].qs; - const uint8_t * scales_and_signs = qs + QK_K/4; - - for (int ib32 = 0; ib32 < QK_K/32; ++ib32) { - memcpy(&aux32, scales_and_signs + 4*ib32, sizeof(uint32_t)); - const float db = d * (0.5f + (aux32 >> 28)) * 0.5f; - for (int l = 0; l < 4; ++l) { - const uint8_t signs = ksigns_iq2xs[(aux32 >> 7*l) & 127]; - const uint8_t * grid1 = (const uint8_t *)(iq3xxs_grid + qs[2*l+0]); - const uint8_t * grid2 = (const uint8_t *)(iq3xxs_grid + qs[2*l+1]); - for (int j = 0; j < 4; ++j) { - y[j+0] = db * grid1[j] * (signs & kmask_iq2xs[j+0] ? -1.f : 1.f); - y[j+4] = db * grid2[j] * (signs & kmask_iq2xs[j+4] ? -1.f : 1.f); - } - y += 8; - } - qs += 8; - } - } -} - -// ====================== 3.3125 bpw (de)-quantization - -void dequantize_row_iq3_s(const block_iq3_s * restrict x, float * restrict y, int64_t k) { - assert(k % QK_K == 0); - const int64_t nb = k / QK_K; - - for (int i = 0; i < nb; i++) { - - const float d = GGML_FP16_TO_FP32(x[i].d); - const uint8_t * qs = x[i].qs; - const uint8_t * qh = x[i].qh; - const uint8_t * signs = x[i].signs; - - for (int ib32 = 0; ib32 < QK_K/32; ib32 += 2) { - const float db1 = d * (1 + 2*(x[i].scales[ib32/2] & 0xf)); - const float db2 = d * (1 + 2*(x[i].scales[ib32/2] >> 4)); - for (int l = 0; l < 4; ++l) { - const uint8_t * grid1 = (const uint8_t *)(iq3s_grid + (qs[2*l+0] | ((qh[0] << (8-2*l)) & 256))); - const uint8_t * grid2 = (const uint8_t *)(iq3s_grid + (qs[2*l+1] | ((qh[0] << (7-2*l)) & 256))); - for (int j = 0; j < 4; ++j) { - y[j+0] = db1 * grid1[j] * (signs[l] & kmask_iq2xs[j+0] ? -1.f : 1.f); - y[j+4] = db1 * grid2[j] * (signs[l] & kmask_iq2xs[j+4] ? -1.f : 1.f); - } - y += 8; - } - qs += 8; - signs += 4; - for (int l = 0; l < 4; ++l) { - const uint8_t * grid1 = (const uint8_t *)(iq3s_grid + (qs[2*l+0] | ((qh[1] << (8-2*l)) & 256))); - const uint8_t * grid2 = (const uint8_t *)(iq3s_grid + (qs[2*l+1] | ((qh[1] << (7-2*l)) & 256))); - for (int j = 0; j < 4; ++j) { - y[j+0] = db2 * grid1[j] * (signs[l] & kmask_iq2xs[j+0] ? -1.f : 1.f); - y[j+4] = db2 * grid2[j] * (signs[l] & kmask_iq2xs[j+4] ? -1.f : 1.f); - } - y += 8; - } - qh += 2; - qs += 8; - signs += 4; - } - } -} - -// ====================== 1.5625 bpw (de)-quantization - -void dequantize_row_iq1_s(const block_iq1_s * restrict x, float * restrict y, int64_t k) { - assert(k % QK_K == 0); - const int64_t nb = k / QK_K; - - for (int i = 0; i < nb; i++) { - - const float d = GGML_FP16_TO_FP32(x[i].d); - const uint8_t * qs = x[i].qs; - const uint16_t * qh = x[i].qh; - - for (int ib = 0; ib < QK_K/32; ++ib) { - const float dl = d * (2*((qh[ib] >> 12) & 7) + 1); - const float delta = qh[ib] & 0x8000 ? -IQ1S_DELTA : IQ1S_DELTA; - for (int l = 0; l < 4; ++l) { - const int8_t * grid = (const int8_t *)(iq1s_grid + (qs[l] | (((qh[ib] >> 3*l) & 7) << 8))); - for (int j = 0; j < 8; ++j) { - y[j] = dl * (grid[j] + delta); - } - y += 8; - } - qs += 4; - } - } -} - -void dequantize_row_iq1_m(const block_iq1_m * restrict x, float * restrict y, int64_t k) { - assert(k % QK_K == 0); - const int64_t nb = k / QK_K; - - float delta[4]; - uint16_t idx[4]; - -#if QK_K != 64 - iq1m_scale_t scale; -#endif - - for (int i = 0; i < nb; i++) { - - const uint16_t * sc = (const uint16_t *)x[i].scales; -#if QK_K == 64 - const float d = GGML_FP16_TO_FP32(x[i].d); -#else - scale.u16 = (sc[0] >> 12) | ((sc[1] >> 8) & 0x00f0) | ((sc[2] >> 4) & 0x0f00) | (sc[3] & 0xf000); - const float d = GGML_FP16_TO_FP32(scale.f16); -#endif - const uint8_t * qs = x[i].qs; - const uint8_t * qh = x[i].qh; - - for (int ib = 0; ib < QK_K/32; ++ib) { -#if QK_K == 64 - const float dl1 = d * (2*((sc[ib/2] >> (8*(ib%2)+0)) & 0xf) + 1); - const float dl2 = d * (2*((sc[ib/2] >> (8*(ib%2)+4)) & 0xf) + 1); -#else - const float dl1 = d * (2*((sc[ib/2] >> (6*(ib%2)+0)) & 0x7) + 1); - const float dl2 = d * (2*((sc[ib/2] >> (6*(ib%2)+3)) & 0x7) + 1); -#endif - idx[0] = qs[0] | ((qh[0] << 8) & 0x700); - idx[1] = qs[1] | ((qh[0] << 4) & 0x700); - idx[2] = qs[2] | ((qh[1] << 8) & 0x700); - idx[3] = qs[3] | ((qh[1] << 4) & 0x700); - delta[0] = qh[0] & 0x08 ? -IQ1S_DELTA : IQ1S_DELTA; - delta[1] = qh[0] & 0x80 ? -IQ1S_DELTA : IQ1S_DELTA; - delta[2] = qh[1] & 0x08 ? -IQ1S_DELTA : IQ1S_DELTA; - delta[3] = qh[1] & 0x80 ? -IQ1S_DELTA : IQ1S_DELTA; - for (int l = 0; l < 2; ++l) { - const int8_t * grid = (const int8_t *)(iq1s_grid + idx[l]); - for (int j = 0; j < 8; ++j) { - y[j] = dl1 * (grid[j] + delta[l]); - } - y += 8; - } - for (int l = 2; l < 4; ++l) { - const int8_t * grid = (const int8_t *)(iq1s_grid + idx[l]); - for (int j = 0; j < 8; ++j) { - y[j] = dl2 * (grid[j] + delta[l]); - } - y += 8; - } - qs += 4; - qh += 2; - } - } -} - -static const int8_t kvalues_iq4nl[16] = {-127, -104, -83, -65, -49, -35, -22, -10, 1, 13, 25, 38, 53, 69, 89, 113}; - -void dequantize_row_iq4_nl(const block_iq4_nl * restrict x, float * restrict y, int64_t k) { - assert(k % QK4_NL == 0); - const int64_t nb = k / QK4_NL; - - for (int i = 0; i < nb; i++) { - - const uint8_t * qs = x[i].qs; - - const float d = GGML_FP16_TO_FP32(x[i].d); - for (int j = 0; j < QK4_NL/2; ++j) { - y[j+ 0] = d * kvalues_iq4nl[qs[j] & 0xf]; - y[j+QK4_NL/2] = d * kvalues_iq4nl[qs[j] >> 4]; - } - y += QK4_NL; - qs += QK4_NL/2; - } -} - -void dequantize_row_iq4_xs(const block_iq4_xs * restrict x, float * restrict y, int64_t k) { - assert(k % QK_K == 0); -#if QK_K == 64 - dequantize_row_iq4_nl((const block_iq4_nl *)x, y, k); -#else - const int64_t nb = k / QK_K; - - for (int i = 0; i < nb; i++) { - - const uint8_t * qs = x[i].qs; - - const float d = GGML_FP16_TO_FP32(x[i].d); - - for (int ib = 0; ib < QK_K/32; ++ib) { - const int ls = ((x[i].scales_l[ib/2] >> 4*(ib%2)) & 0xf) | (((x[i].scales_h >> 2*ib) & 3) << 4); - const float dl = d * (ls - 32); - for (int j = 0; j < 16; ++j) { - y[j+ 0] = dl * kvalues_iq4nl[qs[j] & 0xf]; - y[j+16] = dl * kvalues_iq4nl[qs[j] >> 4]; - } - y += 32; - qs += 16; - } - } -#endif -} - -//===================================== Q8_K ============================================== - -void quantize_row_q8_K_reference(const float * restrict x, block_q8_K * restrict y, int64_t k) { - assert(k % QK_K == 0); - const int64_t nb = k / QK_K; - - for (int i = 0; i < nb; i++) { - - float max = 0; - float amax = 0; - for (int j = 0; j < QK_K; ++j) { - float ax = fabsf(x[j]); - if (ax > amax) { - amax = ax; max = x[j]; - } - } - if (!amax) { - y[i].d = 0; - memset(y[i].qs, 0, QK_K); - x += QK_K; - continue; - } - //const float iscale = -128.f/max; - // We need this change for IQ2_XXS, else the AVX implementation becomes very awkward - const float iscale = -127.f/max; - for (int j = 0; j < QK_K; ++j) { - int v = nearest_int(iscale*x[j]); - y[i].qs[j] = MIN(127, v); - } - for (int j = 0; j < QK_K/16; ++j) { - int sum = 0; - for (int ii = 0; ii < 16; ++ii) { - sum += y[i].qs[j*16 + ii]; - } - y[i].bsums[j] = sum; - } - y[i].d = 1/iscale; - x += QK_K; - } -} - -void dequantize_row_q8_K(const block_q8_K * restrict x, float * restrict y, int64_t k) { - assert(k % QK_K == 0); - const int64_t nb = k / QK_K; - - for (int i = 0; i < nb; i++) { - for (int j = 0; j < QK_K; ++j) { - *y++ = x[i].d * x[i].qs[j]; - } - } -} - -void quantize_row_q8_K(const float * restrict x, void * restrict y, int64_t k) { - quantize_row_q8_K_reference(x, y, k); -} - -//===================================== Dot ptoducts ================================= - -// -// Helper functions -// -#if __AVX__ || __AVX2__ || __AVX512F__ - -// shuffles to pick the required scales in dot products -static inline __m256i get_scale_shuffle_q3k(int i) { - static const uint8_t k_shuffle[128] = { - 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, - 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, - 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11, - 12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13, 14,15,14,15,14,15,14,15,14,15,14,15,14,15,14,15, - }; - return _mm256_loadu_si256((const __m256i*)k_shuffle + i); -} -static inline __m256i get_scale_shuffle_k4(int i) { - static const uint8_t k_shuffle[256] = { - 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, - 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, - 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, - 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, - 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, - 10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11, - 12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13, - 14,15,14,15,14,15,14,15,14,15,14,15,14,15,14,15,14,15,14,15,14,15,14,15,14,15,14,15,14,15,14,15 - }; - return _mm256_loadu_si256((const __m256i*)k_shuffle + i); -} -static inline __m128i get_scale_shuffle(int i) { - static const uint8_t k_shuffle[128] = { - 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, - 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, - 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, - 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, - 8, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, - 10,10,10,10,10,10,10,10, 11,11,11,11,11,11,11,11, - 12,12,12,12,12,12,12,12, 13,13,13,13,13,13,13,13, - 14,14,14,14,14,14,14,14, 15,15,15,15,15,15,15,15 - }; - return _mm_loadu_si128((const __m128i*)k_shuffle + i); -} -#endif - -void ggml_vec_dot_q4_0_q8_0(int n, float * restrict s, size_t bs, const void * restrict vx, size_t bx, const void * restrict vy, size_t by, int nrc) { - const int qk = QK8_0; - const int nb = n / qk; - - assert(n % qk == 0); -#if defined(__ARM_FEATURE_MATMUL_INT8) - assert((nrc == 2) || (nrc == 1)); -#else - assert(nrc == 1); -#endif - UNUSED(nrc); - UNUSED(bx); - UNUSED(by); - UNUSED(bs); - - const block_q4_0 * restrict x = vx; - const block_q8_0 * restrict y = vy; - -#if defined(__ARM_FEATURE_MATMUL_INT8) - if (nrc == 2) { - const block_q4_0 * restrict vx0 = vx; - const block_q4_0 * restrict vx1 = vx + bx; - - const block_q8_0 * restrict vy0 = vy; - const block_q8_0 * restrict vy1 = vy + by; - - float32x4_t sumv0 = vdupq_n_f32(0.0f); - - for (int i = 0; i < nb; i++) { - const block_q4_0 * restrict b_x0 = &vx0[i]; - const block_q4_0 * restrict b_x1 = &vx1[i]; - const block_q8_0 * restrict b_y0 = &vy0[i]; - const block_q8_0 * restrict b_y1 = &vy1[i]; - - const uint8x16_t m4b = vdupq_n_u8(0x0F); - const int8x16_t s8b = vdupq_n_s8(0x8); - - const uint8x16_t v0_0 = vld1q_u8(b_x0->qs); - const uint8x16_t v0_1 = vld1q_u8(b_x1->qs); - - // 4-bit -> 8-bit - const int8x16_t v0_0l = vreinterpretq_s8_u8(vandq_u8 (v0_0, m4b)); - const int8x16_t v0_0h = vreinterpretq_s8_u8(vshrq_n_u8(v0_0, 4)); - const int8x16_t v0_1l = vreinterpretq_s8_u8(vandq_u8 (v0_1, m4b)); - const int8x16_t v0_1h = vreinterpretq_s8_u8(vshrq_n_u8(v0_1, 4)); - - // sub 8 - const int8x16_t x0_l = vsubq_s8(v0_0l, s8b); - const int8x16_t x0_h = vsubq_s8(v0_0h, s8b); - const int8x16_t x1_l = vsubq_s8(v0_1l, s8b); - const int8x16_t x1_h = vsubq_s8(v0_1h, s8b); - - // load y - const int8x16_t y0_l = vld1q_s8(b_y0->qs); - const int8x16_t y0_h = vld1q_s8(b_y0->qs + 16); - const int8x16_t y1_l = vld1q_s8(b_y1->qs); - const int8x16_t y1_h = vld1q_s8(b_y1->qs + 16); - - float32x4_t scale = {GGML_FP16_TO_FP32(b_x0->d)*GGML_FP16_TO_FP32(b_y0->d), - GGML_FP16_TO_FP32(b_x0->d)*GGML_FP16_TO_FP32(b_y1->d), - GGML_FP16_TO_FP32(b_x1->d)*GGML_FP16_TO_FP32(b_y0->d), - GGML_FP16_TO_FP32(b_x1->d)*GGML_FP16_TO_FP32(b_y1->d)}; - - int8x16_t l0 = vreinterpretq_s8_s64(vzip1q_s64(vreinterpretq_s64_s8(x0_l), vreinterpretq_s64_s8(x1_l))); - int8x16_t l1 = vreinterpretq_s8_s64(vzip2q_s64(vreinterpretq_s64_s8(x0_l), vreinterpretq_s64_s8(x1_l))); - - int8x16_t l2 = vreinterpretq_s8_s64(vzip1q_s64(vreinterpretq_s64_s8(x0_h), vreinterpretq_s64_s8(x1_h))); - int8x16_t l3 = vreinterpretq_s8_s64(vzip2q_s64(vreinterpretq_s64_s8(x0_h), vreinterpretq_s64_s8(x1_h))); - - int8x16_t r0 = vreinterpretq_s8_s64(vzip1q_s64(vreinterpretq_s64_s8(y0_l), vreinterpretq_s64_s8(y1_l))); - int8x16_t r1 = vreinterpretq_s8_s64(vzip2q_s64(vreinterpretq_s64_s8(y0_l), vreinterpretq_s64_s8(y1_l))); - - int8x16_t r2 = vreinterpretq_s8_s64(vzip1q_s64(vreinterpretq_s64_s8(y0_h), vreinterpretq_s64_s8(y1_h))); - int8x16_t r3 = vreinterpretq_s8_s64(vzip2q_s64(vreinterpretq_s64_s8(y0_h), vreinterpretq_s64_s8(y1_h))); - - sumv0 = vmlaq_f32(sumv0,(vcvtq_f32_s32(vmmlaq_s32((vmmlaq_s32((vmmlaq_s32((vmmlaq_s32(vdupq_n_s32(0), l0, r0)), - l1, r1)), l2, r2)), l3, r3))), scale); - } - float32x4_t sumv1 = vextq_f32(sumv0, sumv0, 2); - float32x4_t sumv2 = vzip1q_f32(sumv0, sumv1); - - vst1_f32(s, vget_low_f32(sumv2)); - vst1_f32(s + bs, vget_high_f32(sumv2)); - return; - } -#endif -#if defined(__ARM_NEON) - float32x4_t sumv0 = vdupq_n_f32(0.0f); - float32x4_t sumv1 = vdupq_n_f32(0.0f); - - assert(nb % 2 == 0); // TODO: handle odd nb - - for (int i = 0; i < nb; i += 2) { - const block_q4_0 * restrict x0 = &x[i + 0]; - const block_q4_0 * restrict x1 = &x[i + 1]; - const block_q8_0 * restrict y0 = &y[i + 0]; - const block_q8_0 * restrict y1 = &y[i + 1]; - - const uint8x16_t m4b = vdupq_n_u8(0x0F); - const int8x16_t s8b = vdupq_n_s8(0x8); - - const uint8x16_t v0_0 = vld1q_u8(x0->qs); - const uint8x16_t v0_1 = vld1q_u8(x1->qs); - - // 4-bit -> 8-bit - const int8x16_t v0_0l = vreinterpretq_s8_u8(vandq_u8 (v0_0, m4b)); - const int8x16_t v0_0h = vreinterpretq_s8_u8(vshrq_n_u8(v0_0, 4)); - const int8x16_t v0_1l = vreinterpretq_s8_u8(vandq_u8 (v0_1, m4b)); - const int8x16_t v0_1h = vreinterpretq_s8_u8(vshrq_n_u8(v0_1, 4)); - - // sub 8 - const int8x16_t v0_0ls = vsubq_s8(v0_0l, s8b); - const int8x16_t v0_0hs = vsubq_s8(v0_0h, s8b); - const int8x16_t v0_1ls = vsubq_s8(v0_1l, s8b); - const int8x16_t v0_1hs = vsubq_s8(v0_1h, s8b); - - // load y - const int8x16_t v1_0l = vld1q_s8(y0->qs); - const int8x16_t v1_0h = vld1q_s8(y0->qs + 16); - const int8x16_t v1_1l = vld1q_s8(y1->qs); - const int8x16_t v1_1h = vld1q_s8(y1->qs + 16); - - // dot product into int32x4_t - const int32x4_t p_0 = ggml_vdotq_s32(ggml_vdotq_s32(vdupq_n_s32(0), v0_0ls, v1_0l), v0_0hs, v1_0h); - const int32x4_t p_1 = ggml_vdotq_s32(ggml_vdotq_s32(vdupq_n_s32(0), v0_1ls, v1_1l), v0_1hs, v1_1h); - - sumv0 = vmlaq_n_f32(sumv0, vcvtq_f32_s32(p_0), GGML_FP16_TO_FP32(x0->d)*GGML_FP16_TO_FP32(y0->d)); - sumv1 = vmlaq_n_f32(sumv1, vcvtq_f32_s32(p_1), GGML_FP16_TO_FP32(x1->d)*GGML_FP16_TO_FP32(y1->d)); - } - - *s = vaddvq_f32(sumv0) + vaddvq_f32(sumv1); -#elif defined(__AVX2__) - // Initialize accumulator with zeros - __m256 acc = _mm256_setzero_ps(); - - // Main loop - for (int i = 0; i < nb; ++i) { - /* Compute combined scale for the block */ - const __m256 d = _mm256_set1_ps( GGML_FP16_TO_FP32(x[i].d) * GGML_FP16_TO_FP32(y[i].d) ); - - __m256i qx = bytes_from_nibbles_32(x[i].qs); - - // Now we have a vector with bytes in [ 0 .. 15 ] interval. Offset them into [ -8 .. +7 ] interval. - const __m256i off = _mm256_set1_epi8( 8 ); - qx = _mm256_sub_epi8( qx, off ); - - __m256i qy = _mm256_loadu_si256((const __m256i *)y[i].qs); - - const __m256 q = mul_sum_i8_pairs_float(qx, qy); - - /* Multiply q with scale and accumulate */ - acc = _mm256_fmadd_ps( d, q, acc ); - } - - *s = hsum_float_8(acc); -#elif defined(__AVX__) - // Initialize accumulator with zeros - __m256 acc = _mm256_setzero_ps(); - - // Main loop - for (int i = 0; i < nb; ++i) { - // Compute combined scale for the block - const __m256 d = _mm256_set1_ps( GGML_FP16_TO_FP32(x[i].d) * GGML_FP16_TO_FP32(y[i].d) ); - - const __m128i lowMask = _mm_set1_epi8(0xF); - const __m128i off = _mm_set1_epi8(8); - - const __m128i tmp = _mm_loadu_si128((const __m128i *)x[i].qs); - - __m128i bx_0 = _mm_and_si128(lowMask, tmp); - __m128i by_0 = _mm_loadu_si128((const __m128i *)y[i].qs); - bx_0 = _mm_sub_epi8(bx_0, off); - const __m128i i32_0 = mul_sum_i8_pairs(bx_0, by_0); - - bx_0 = _mm_and_si128(lowMask, _mm_srli_epi64(tmp, 4)); - by_0 = _mm_loadu_si128((const __m128i *)(y[i].qs + 16)); - bx_0 = _mm_sub_epi8(bx_0, off); - const __m128i i32_1 = mul_sum_i8_pairs(bx_0, by_0); - - // Convert int32_t to float - __m256 p = _mm256_cvtepi32_ps(MM256_SET_M128I(i32_0, i32_1)); - - // Apply the scale, and accumulate - acc = _mm256_add_ps(_mm256_mul_ps( d, p ), acc); - } - - *s = hsum_float_8(acc); -#elif defined(__SSSE3__) - // set constants - const __m128i lowMask = _mm_set1_epi8(0xF); - const __m128i off = _mm_set1_epi8(8); - - // Initialize accumulator with zeros - __m128 acc_0 = _mm_setzero_ps(); - __m128 acc_1 = _mm_setzero_ps(); - __m128 acc_2 = _mm_setzero_ps(); - __m128 acc_3 = _mm_setzero_ps(); - - // First round without accumulation - { - _mm_prefetch(&x[0] + sizeof(block_q4_0), _MM_HINT_T0); - _mm_prefetch(&y[0] + sizeof(block_q8_0), _MM_HINT_T0); - - // Compute combined scale for the block 0 and 1 - const __m128 d_0_1 = _mm_set1_ps( GGML_FP16_TO_FP32(x[0].d) * GGML_FP16_TO_FP32(y[0].d) ); - - const __m128i tmp_0_1 = _mm_loadu_si128((const __m128i *)x[0].qs); - - __m128i bx_0 = _mm_and_si128(lowMask, tmp_0_1); - __m128i by_0 = _mm_loadu_si128((const __m128i *)y[0].qs); - bx_0 = _mm_sub_epi8(bx_0, off); - const __m128i i32_0 = mul_sum_i8_pairs(bx_0, by_0); - - __m128i bx_1 = _mm_and_si128(lowMask, _mm_srli_epi64(tmp_0_1, 4)); - __m128i by_1 = _mm_loadu_si128((const __m128i *)(y[0].qs + 16)); - bx_1 = _mm_sub_epi8(bx_1, off); - const __m128i i32_1 = mul_sum_i8_pairs(bx_1, by_1); - - _mm_prefetch(&x[1] + sizeof(block_q4_0), _MM_HINT_T0); - _mm_prefetch(&y[1] + sizeof(block_q8_0), _MM_HINT_T0); - - // Compute combined scale for the block 2 and 3 - const __m128 d_2_3 = _mm_set1_ps( GGML_FP16_TO_FP32(x[1].d) * GGML_FP16_TO_FP32(y[1].d) ); - - const __m128i tmp_2_3 = _mm_loadu_si128((const __m128i *)x[1].qs); - - __m128i bx_2 = _mm_and_si128(lowMask, tmp_2_3); - __m128i by_2 = _mm_loadu_si128((const __m128i *)y[1].qs); - bx_2 = _mm_sub_epi8(bx_2, off); - const __m128i i32_2 = mul_sum_i8_pairs(bx_2, by_2); - - __m128i bx_3 = _mm_and_si128(lowMask, _mm_srli_epi64(tmp_2_3, 4)); - __m128i by_3 = _mm_loadu_si128((const __m128i *)(y[1].qs + 16)); - bx_3 = _mm_sub_epi8(bx_3, off); - const __m128i i32_3 = mul_sum_i8_pairs(bx_3, by_3); - - // Convert int32_t to float - __m128 p0 = _mm_cvtepi32_ps(i32_0); - __m128 p1 = _mm_cvtepi32_ps(i32_1); - __m128 p2 = _mm_cvtepi32_ps(i32_2); - __m128 p3 = _mm_cvtepi32_ps(i32_3); - - // Apply the scale - acc_0 = _mm_mul_ps( d_0_1, p0 ); - acc_1 = _mm_mul_ps( d_0_1, p1 ); - acc_2 = _mm_mul_ps( d_2_3, p2 ); - acc_3 = _mm_mul_ps( d_2_3, p3 ); - } - - assert(nb % 2 == 0); // TODO: handle odd nb - - // Main loop - for (int i = 2; i < nb; i+=2) { - _mm_prefetch(&x[i] + sizeof(block_q4_0), _MM_HINT_T0); - _mm_prefetch(&y[i] + sizeof(block_q8_0), _MM_HINT_T0); - - // Compute combined scale for the block 0 and 1 - const __m128 d_0_1 = _mm_set1_ps( GGML_FP16_TO_FP32(x[i].d) * GGML_FP16_TO_FP32(y[i].d) ); - - const __m128i tmp_0_1 = _mm_loadu_si128((const __m128i *)x[i].qs); - - __m128i bx_0 = _mm_and_si128(lowMask, tmp_0_1); - __m128i by_0 = _mm_loadu_si128((const __m128i *)y[i].qs); - bx_0 = _mm_sub_epi8(bx_0, off); - const __m128i i32_0 = mul_sum_i8_pairs(bx_0, by_0); - - __m128i bx_1 = _mm_and_si128(lowMask, _mm_srli_epi64(tmp_0_1, 4)); - __m128i by_1 = _mm_loadu_si128((const __m128i *)(y[i].qs + 16)); - bx_1 = _mm_sub_epi8(bx_1, off); - const __m128i i32_1 = mul_sum_i8_pairs(bx_1, by_1); - - _mm_prefetch(&x[i] + 2 * sizeof(block_q4_0), _MM_HINT_T0); - _mm_prefetch(&y[i] + 2 * sizeof(block_q8_0), _MM_HINT_T0); - - // Compute combined scale for the block 2 and 3 - const __m128 d_2_3 = _mm_set1_ps( GGML_FP16_TO_FP32(x[i + 1].d) * GGML_FP16_TO_FP32(y[i + 1].d) ); - - const __m128i tmp_2_3 = _mm_loadu_si128((const __m128i *)x[i + 1].qs); - - __m128i bx_2 = _mm_and_si128(lowMask, tmp_2_3); - __m128i by_2 = _mm_loadu_si128((const __m128i *)y[i + 1].qs); - bx_2 = _mm_sub_epi8(bx_2, off); - const __m128i i32_2 = mul_sum_i8_pairs(bx_2, by_2); - - __m128i bx_3 = _mm_and_si128(lowMask, _mm_srli_epi64(tmp_2_3, 4)); - __m128i by_3 = _mm_loadu_si128((const __m128i *)(y[i + 1].qs + 16)); - bx_3 = _mm_sub_epi8(bx_3, off); - const __m128i i32_3 = mul_sum_i8_pairs(bx_3, by_3); - - // Convert int32_t to float - __m128 p0 = _mm_cvtepi32_ps(i32_0); - __m128 p1 = _mm_cvtepi32_ps(i32_1); - __m128 p2 = _mm_cvtepi32_ps(i32_2); - __m128 p3 = _mm_cvtepi32_ps(i32_3); - - // Apply the scale - __m128 p0_d = _mm_mul_ps( d_0_1, p0 ); - __m128 p1_d = _mm_mul_ps( d_0_1, p1 ); - __m128 p2_d = _mm_mul_ps( d_2_3, p2 ); - __m128 p3_d = _mm_mul_ps( d_2_3, p3 ); - - // Acummulate - acc_0 = _mm_add_ps(p0_d, acc_0); - acc_1 = _mm_add_ps(p1_d, acc_1); - acc_2 = _mm_add_ps(p2_d, acc_2); - acc_3 = _mm_add_ps(p3_d, acc_3); - } - - *s = hsum_float_4x4(acc_0, acc_1, acc_2, acc_3); -#elif defined(__riscv_v_intrinsic) - float sumf = 0.0; - - size_t vl = __riscv_vsetvl_e8m1(qk/2); - - for (int i = 0; i < nb; i++) { - // load elements - vuint8mf2_t tx = __riscv_vle8_v_u8mf2(x[i].qs, vl); - - vint8mf2_t y0 = __riscv_vle8_v_i8mf2(y[i].qs, vl); - vint8mf2_t y1 = __riscv_vle8_v_i8mf2(y[i].qs+16, vl); - - // mask and store lower part of x, and then upper part - vuint8mf2_t x_a = __riscv_vand_vx_u8mf2(tx, 0x0F, vl); - vuint8mf2_t x_l = __riscv_vsrl_vx_u8mf2(tx, 0x04, vl); - - vint8mf2_t x_ai = __riscv_vreinterpret_v_u8mf2_i8mf2(x_a); - vint8mf2_t x_li = __riscv_vreinterpret_v_u8mf2_i8mf2(x_l); - - // subtract offset - vint8mf2_t v0 = __riscv_vsub_vx_i8mf2(x_ai, 8, vl); - vint8mf2_t v1 = __riscv_vsub_vx_i8mf2(x_li, 8, vl); - - vint16m1_t vec_mul1 = __riscv_vwmul_vv_i16m1(v0, y0, vl); - vint16m1_t vec_mul2 = __riscv_vwmul_vv_i16m1(v1, y1, vl); - - vint32m1_t vec_zero = __riscv_vmv_v_x_i32m1(0, vl); - - vint32m1_t vs1 = __riscv_vwredsum_vs_i16m1_i32m1(vec_mul1, vec_zero, vl); - vint32m1_t vs2 = __riscv_vwredsum_vs_i16m1_i32m1(vec_mul2, vs1, vl); - - int sumi = __riscv_vmv_x_s_i32m1_i32(vs2); - - sumf += sumi*GGML_FP16_TO_FP32(x[i].d)*GGML_FP16_TO_FP32(y[i].d); - } - - *s = sumf; -#else - // scalar - float sumf = 0.0; - - for (int i = 0; i < nb; i++) { - int sumi = 0; - - for (int j = 0; j < qk/2; ++j) { - const int v0 = (x[i].qs[j] & 0x0F) - 8; - const int v1 = (x[i].qs[j] >> 4) - 8; - - sumi += (v0 * y[i].qs[j]) + (v1 * y[i].qs[j + qk/2]); - } - - sumf += sumi*GGML_FP16_TO_FP32(x[i].d)*GGML_FP16_TO_FP32(y[i].d); - } - - *s = sumf; -#endif -} - -void ggml_vec_dot_q4_1_q8_1(int n, float * restrict s, size_t bs, const void * restrict vx, size_t bx, const void * restrict vy, size_t by, int nrc) { - const int qk = QK8_1; - const int nb = n / qk; - - assert(n % qk == 0); -#if defined(__ARM_FEATURE_MATMUL_INT8) - assert((nrc == 2) || (nrc == 1)); -#else - assert(nrc == 1); -#endif - UNUSED(nrc); - UNUSED(bx); - UNUSED(by); - UNUSED(bs); - - const block_q4_1 * restrict x = vx; - const block_q8_1 * restrict y = vy; - -#if defined(__ARM_FEATURE_MATMUL_INT8) - if (nrc == 2) { - const block_q4_1 * restrict vx0 = vx; - const block_q4_1 * restrict vx1 = vx + bx; - const block_q8_1 * restrict vy0 = vy; - const block_q8_1 * restrict vy1 = vy + by; - - float32x4_t sumv0 = vdupq_n_f32(0.0f); - float32x4_t summs0 = vdupq_n_f32(0.0f); - - for (int i = 0; i < nb; i++) { - const block_q4_1 * restrict b_x0 = &vx0[i]; - const block_q4_1 * restrict b_x1 = &vx1[i]; - const block_q8_1 * restrict b_y0 = &vy0[i]; - const block_q8_1 * restrict b_y1 = &vy1[i]; - - float32x4_t summs_t = {GGML_FP16_TO_FP32(b_x0->m) * GGML_FP16_TO_FP32(b_y0->s), - GGML_FP16_TO_FP32(b_x1->m) * GGML_FP16_TO_FP32(b_y0->s), - GGML_FP16_TO_FP32(b_x0->m) * GGML_FP16_TO_FP32(b_y1->s), - GGML_FP16_TO_FP32(b_x1->m) * GGML_FP16_TO_FP32(b_y1->s)}; - summs0 += summs_t; - - const uint8x16_t m4b = vdupq_n_u8(0x0F); - - const uint8x16_t v0_0 = vld1q_u8(b_x0->qs); - const uint8x16_t v0_1 = vld1q_u8(b_x1->qs); - - // 4-bit -> 8-bit - const int8x16_t x0_l = vreinterpretq_s8_u8(vandq_u8 (v0_0, m4b)); - const int8x16_t x0_h = vreinterpretq_s8_u8(vshrq_n_u8(v0_0, 4)); - const int8x16_t x1_l = vreinterpretq_s8_u8(vandq_u8 (v0_1, m4b)); - const int8x16_t x1_h = vreinterpretq_s8_u8(vshrq_n_u8(v0_1, 4)); - - // load y - const int8x16_t y0_l = vld1q_s8(b_y0->qs); - const int8x16_t y0_h = vld1q_s8(b_y0->qs + 16); - const int8x16_t y1_l = vld1q_s8(b_y1->qs); - const int8x16_t y1_h = vld1q_s8(b_y1->qs + 16); - - // mmla into int32x4_t - float32x4_t scale = {GGML_FP16_TO_FP32(b_x0->d)*b_y0->d, - GGML_FP16_TO_FP32(b_x0->d)*b_y1->d, - GGML_FP16_TO_FP32(b_x1->d)*b_y0->d, - GGML_FP16_TO_FP32(b_x1->d)*b_y1->d}; - - int8x16_t l0 = vreinterpretq_s8_s64(vzip1q_s64(vreinterpretq_s64_s8(x0_l), vreinterpretq_s64_s8(x1_l))); - int8x16_t l1 = vreinterpretq_s8_s64(vzip2q_s64(vreinterpretq_s64_s8(x0_l), vreinterpretq_s64_s8(x1_l))); - - int8x16_t l2 = vreinterpretq_s8_s64(vzip1q_s64(vreinterpretq_s64_s8(x0_h), vreinterpretq_s64_s8(x1_h))); - int8x16_t l3 = vreinterpretq_s8_s64(vzip2q_s64(vreinterpretq_s64_s8(x0_h), vreinterpretq_s64_s8(x1_h))); - - int8x16_t r0 = vreinterpretq_s8_s64(vzip1q_s64(vreinterpretq_s64_s8(y0_l), vreinterpretq_s64_s8(y1_l))); - int8x16_t r1 = vreinterpretq_s8_s64(vzip2q_s64(vreinterpretq_s64_s8(y0_l), vreinterpretq_s64_s8(y1_l))); - - int8x16_t r2 = vreinterpretq_s8_s64(vzip1q_s64(vreinterpretq_s64_s8(y0_h), vreinterpretq_s64_s8(y1_h))); - int8x16_t r3 = vreinterpretq_s8_s64(vzip2q_s64(vreinterpretq_s64_s8(y0_h), vreinterpretq_s64_s8(y1_h))); - sumv0 = vmlaq_f32(sumv0,(vcvtq_f32_s32(vmmlaq_s32((vmmlaq_s32((vmmlaq_s32((vmmlaq_s32(vdupq_n_s32(0), l0, r0)), - l1, r1)), l2, r2)), l3, r3))), scale); - } - - float32x4_t sumv1 = vextq_f32(sumv0, sumv0, 2); - float32x4_t sumv2 = vzip1q_f32(sumv0, sumv1); - sumv2 = sumv2 + summs0; - - vst1_f32(s, vget_low_f32(sumv2)); - vst1_f32(s + bs, vget_high_f32(sumv2)); - return; - } -#endif - // TODO: add WASM SIMD -#if defined(__ARM_NEON) - float32x4_t sumv0 = vdupq_n_f32(0.0f); - float32x4_t sumv1 = vdupq_n_f32(0.0f); - - float summs = 0; - - assert(nb % 2 == 0); // TODO: handle odd nb - - for (int i = 0; i < nb; i += 2) { - const block_q4_1 * restrict x0 = &x[i + 0]; - const block_q4_1 * restrict x1 = &x[i + 1]; - const block_q8_1 * restrict y0 = &y[i + 0]; - const block_q8_1 * restrict y1 = &y[i + 1]; - - summs += GGML_FP16_TO_FP32(x0->m) * GGML_FP16_TO_FP32(y0->s) + GGML_FP16_TO_FP32(x1->m) * GGML_FP16_TO_FP32(y1->s); - - const uint8x16_t m4b = vdupq_n_u8(0x0F); - - const uint8x16_t v0_0 = vld1q_u8(x0->qs); - const uint8x16_t v0_1 = vld1q_u8(x1->qs); - - // 4-bit -> 8-bit - const int8x16_t v0_0l = vreinterpretq_s8_u8(vandq_u8 (v0_0, m4b)); - const int8x16_t v0_0h = vreinterpretq_s8_u8(vshrq_n_u8(v0_0, 4)); - const int8x16_t v0_1l = vreinterpretq_s8_u8(vandq_u8 (v0_1, m4b)); - const int8x16_t v0_1h = vreinterpretq_s8_u8(vshrq_n_u8(v0_1, 4)); - - // load y - const int8x16_t v1_0l = vld1q_s8(y0->qs); - const int8x16_t v1_0h = vld1q_s8(y0->qs + 16); - const int8x16_t v1_1l = vld1q_s8(y1->qs); - const int8x16_t v1_1h = vld1q_s8(y1->qs + 16); - - // dot product into int32x4_t - const int32x4_t p_0 = ggml_vdotq_s32(ggml_vdotq_s32(vdupq_n_s32(0), v0_0l, v1_0l), v0_0h, v1_0h); - const int32x4_t p_1 = ggml_vdotq_s32(ggml_vdotq_s32(vdupq_n_s32(0), v0_1l, v1_1l), v0_1h, v1_1h); - - sumv0 = vmlaq_n_f32(sumv0, vcvtq_f32_s32(p_0), GGML_FP16_TO_FP32(x0->d)*GGML_FP16_TO_FP32(y0->d)); - sumv1 = vmlaq_n_f32(sumv1, vcvtq_f32_s32(p_1), GGML_FP16_TO_FP32(x1->d)*GGML_FP16_TO_FP32(y1->d)); - } - - *s = vaddvq_f32(sumv0) + vaddvq_f32(sumv1) + summs; -#elif defined(__AVX2__) || defined(__AVX__) - // Initialize accumulator with zeros - __m256 acc = _mm256_setzero_ps(); - - float summs = 0; - - // Main loop - for (int i = 0; i < nb; ++i) { - const float d0 = GGML_FP16_TO_FP32(x[i].d); - const float d1 = GGML_FP16_TO_FP32(y[i].d); - - summs += GGML_FP16_TO_FP32(x[i].m) * GGML_FP16_TO_FP32(y[i].s); - - const __m256 d0v = _mm256_set1_ps( d0 ); - const __m256 d1v = _mm256_set1_ps( d1 ); - - // Compute combined scales - const __m256 d0d1 = _mm256_mul_ps( d0v, d1v ); - - // Load 16 bytes, and unpack 4 bit fields into bytes, making 32 bytes - const __m256i qx = bytes_from_nibbles_32(x[i].qs); - const __m256i qy = _mm256_loadu_si256( (const __m256i *)y[i].qs ); - - const __m256 xy = mul_sum_us8_pairs_float(qx, qy); - - // Accumulate d0*d1*x*y -#if defined(__AVX2__) - acc = _mm256_fmadd_ps( d0d1, xy, acc ); -#else - acc = _mm256_add_ps( _mm256_mul_ps( d0d1, xy ), acc ); -#endif - } - - *s = hsum_float_8(acc) + summs; -#elif defined(__riscv_v_intrinsic) - float sumf = 0.0; - - size_t vl = __riscv_vsetvl_e8m1(qk/2); - - for (int i = 0; i < nb; i++) { - // load elements - vuint8mf2_t tx = __riscv_vle8_v_u8mf2(x[i].qs, vl); - - vint8mf2_t y0 = __riscv_vle8_v_i8mf2(y[i].qs, vl); - vint8mf2_t y1 = __riscv_vle8_v_i8mf2(y[i].qs+16, vl); - - // mask and store lower part of x, and then upper part - vuint8mf2_t x_a = __riscv_vand_vx_u8mf2(tx, 0x0F, vl); - vuint8mf2_t x_l = __riscv_vsrl_vx_u8mf2(tx, 0x04, vl); - - vint8mf2_t v0 = __riscv_vreinterpret_v_u8mf2_i8mf2(x_a); - vint8mf2_t v1 = __riscv_vreinterpret_v_u8mf2_i8mf2(x_l); - - vint16m1_t vec_mul1 = __riscv_vwmul_vv_i16m1(v0, y0, vl); - vint16m1_t vec_mul2 = __riscv_vwmul_vv_i16m1(v1, y1, vl); - - vint32m1_t vec_zero = __riscv_vmv_v_x_i32m1(0, vl); - - vint32m1_t vs1 = __riscv_vwredsum_vs_i16m1_i32m1(vec_mul1, vec_zero, vl); - vint32m1_t vs2 = __riscv_vwredsum_vs_i16m1_i32m1(vec_mul2, vs1, vl); - - int sumi = __riscv_vmv_x_s_i32m1_i32(vs2); - - sumf += (GGML_FP16_TO_FP32(x[i].d)*GGML_FP16_TO_FP32(y[i].d))*sumi + GGML_FP16_TO_FP32(x[i].m)*GGML_FP16_TO_FP32(y[i].s); - } - - *s = sumf; -#else - // scalar - float sumf = 0.0; - - for (int i = 0; i < nb; i++) { - int sumi = 0; - - for (int j = 0; j < qk/2; ++j) { - const int v0 = (x[i].qs[j] & 0x0F); - const int v1 = (x[i].qs[j] >> 4); - - sumi += (v0 * y[i].qs[j]) + (v1 * y[i].qs[j + qk/2]); - } - - sumf += (GGML_FP16_TO_FP32(x[i].d)*GGML_FP16_TO_FP32(y[i].d))*sumi + GGML_FP16_TO_FP32(x[i].m)*GGML_FP16_TO_FP32(y[i].s); - } - - *s = sumf; -#endif -} - -void ggml_vec_dot_q5_0_q8_0(int n, float * restrict s, size_t bs, const void * restrict vx, size_t bx, const void * restrict vy, size_t by, int nrc) { - const int qk = QK8_0; - const int nb = n / qk; - - assert(n % qk == 0); - assert(qk == QK5_0); - assert(nrc == 1); - UNUSED(nrc); - UNUSED(bx); - UNUSED(by); - UNUSED(bs); - - const block_q5_0 * restrict x = vx; - const block_q8_0 * restrict y = vy; - -#if defined(__ARM_NEON) - float32x4_t sumv0 = vdupq_n_f32(0.0f); - float32x4_t sumv1 = vdupq_n_f32(0.0f); - - uint32_t qh0; - uint32_t qh1; - - uint64_t tmp0[4]; - uint64_t tmp1[4]; - - assert(nb % 2 == 0); // TODO: handle odd nb - - for (int i = 0; i < nb; i += 2) { - const block_q5_0 * restrict x0 = &x[i]; - const block_q5_0 * restrict x1 = &x[i + 1]; - const block_q8_0 * restrict y0 = &y[i]; - const block_q8_0 * restrict y1 = &y[i + 1]; - - const uint8x16_t m4b = vdupq_n_u8(0x0F); - - // extract the 5th bit via lookup table ((!b) << 4) - memcpy(&qh0, x0->qh, sizeof(qh0)); - memcpy(&qh1, x1->qh, sizeof(qh1)); - - tmp0[0] = table_b2b_1[(qh0 >> 0) & 0xFF]; - tmp0[1] = table_b2b_1[(qh0 >> 8) & 0xFF]; - tmp0[2] = table_b2b_1[(qh0 >> 16) & 0xFF]; - tmp0[3] = table_b2b_1[(qh0 >> 24) ]; - - tmp1[0] = table_b2b_1[(qh1 >> 0) & 0xFF]; - tmp1[1] = table_b2b_1[(qh1 >> 8) & 0xFF]; - tmp1[2] = table_b2b_1[(qh1 >> 16) & 0xFF]; - tmp1[3] = table_b2b_1[(qh1 >> 24) ]; - - const int8x16_t qhl0 = vld1q_s8((const int8_t *)(tmp0 + 0)); - const int8x16_t qhh0 = vld1q_s8((const int8_t *)(tmp0 + 2)); - const int8x16_t qhl1 = vld1q_s8((const int8_t *)(tmp1 + 0)); - const int8x16_t qhh1 = vld1q_s8((const int8_t *)(tmp1 + 2)); - - const uint8x16_t v0_0 = vld1q_u8(x0->qs); - const uint8x16_t v0_1 = vld1q_u8(x1->qs); - - // 4-bit -> 8-bit - int8x16_t v0_0l = vreinterpretq_s8_u8(vandq_u8 (v0_0, m4b)); - int8x16_t v0_0h = vreinterpretq_s8_u8(vshrq_n_u8(v0_0, 4)); - int8x16_t v0_1l = vreinterpretq_s8_u8(vandq_u8 (v0_1, m4b)); - int8x16_t v0_1h = vreinterpretq_s8_u8(vshrq_n_u8(v0_1, 4)); - - // add high bit and sub 16 (equivalent to sub 0x10 when bit is zero) - const int8x16_t v0_0lf = vsubq_s8(v0_0l, qhl0); - const int8x16_t v0_0hf = vsubq_s8(v0_0h, qhh0); - const int8x16_t v0_1lf = vsubq_s8(v0_1l, qhl1); - const int8x16_t v0_1hf = vsubq_s8(v0_1h, qhh1); - - // load y - const int8x16_t v1_0l = vld1q_s8(y0->qs); - const int8x16_t v1_0h = vld1q_s8(y0->qs + 16); - const int8x16_t v1_1l = vld1q_s8(y1->qs); - const int8x16_t v1_1h = vld1q_s8(y1->qs + 16); - - sumv0 = vmlaq_n_f32(sumv0, vcvtq_f32_s32(vaddq_s32( - ggml_vdotq_s32(vdupq_n_s32(0), v0_0lf, v1_0l), - ggml_vdotq_s32(vdupq_n_s32(0), v0_0hf, v1_0h))), GGML_FP16_TO_FP32(x0->d)*GGML_FP16_TO_FP32(y0->d)); - sumv1 = vmlaq_n_f32(sumv1, vcvtq_f32_s32(vaddq_s32( - ggml_vdotq_s32(vdupq_n_s32(0), v0_1lf, v1_1l), - ggml_vdotq_s32(vdupq_n_s32(0), v0_1hf, v1_1h))), GGML_FP16_TO_FP32(x1->d)*GGML_FP16_TO_FP32(y1->d)); - } - - *s = vaddvq_f32(sumv0) + vaddvq_f32(sumv1); -#elif defined(__wasm_simd128__) - v128_t sumv = wasm_f32x4_splat(0.0f); - - uint32_t qh; - uint64_t tmp[4]; - - // TODO: check if unrolling this is better - for (int i = 0; i < nb; ++i) { - const block_q5_0 * restrict x0 = &x[i]; - const block_q8_0 * restrict y0 = &y[i]; - - const v128_t m4b = wasm_i8x16_splat(0x0F); - - // extract the 5th bit - memcpy(&qh, x0->qh, sizeof(qh)); - - tmp[0] = table_b2b_1[(qh >> 0) & 0xFF]; - tmp[1] = table_b2b_1[(qh >> 8) & 0xFF]; - tmp[2] = table_b2b_1[(qh >> 16) & 0xFF]; - tmp[3] = table_b2b_1[(qh >> 24) ]; - - const v128_t qhl = wasm_v128_load(tmp + 0); - const v128_t qhh = wasm_v128_load(tmp + 2); - - const v128_t v0 = wasm_v128_load(x0->qs); - - // 4-bit -> 8-bit - const v128_t v0l = wasm_v128_and (v0, m4b); - const v128_t v0h = wasm_u8x16_shr(v0, 4); - - // add high bit and sub 16 (equivalent to sub 0x10 when bit is zero) - const v128_t v0lf = wasm_i8x16_sub(v0l, qhl); - const v128_t v0hf = wasm_i8x16_sub(v0h, qhh); - - // load y - const v128_t v1l = wasm_v128_load(y0->qs); - const v128_t v1h = wasm_v128_load(y0->qs + 16); - - // int8x16 -> int16x8 - const v128_t v0lfl = wasm_i16x8_extend_low_i8x16 (v0lf); - const v128_t v0lfh = wasm_i16x8_extend_high_i8x16(v0lf); - const v128_t v0hfl = wasm_i16x8_extend_low_i8x16 (v0hf); - const v128_t v0hfh = wasm_i16x8_extend_high_i8x16(v0hf); - - const v128_t v1ll = wasm_i16x8_extend_low_i8x16 (v1l); - const v128_t v1lh = wasm_i16x8_extend_high_i8x16(v1l); - const v128_t v1hl = wasm_i16x8_extend_low_i8x16 (v1h); - const v128_t v1hh = wasm_i16x8_extend_high_i8x16(v1h); - - // dot product - sumv = wasm_f32x4_add(sumv, wasm_f32x4_mul(wasm_f32x4_convert_i32x4( - wasm_i32x4_add( - wasm_i32x4_add(wasm_i32x4_dot_i16x8(v0lfl, v1ll), - wasm_i32x4_dot_i16x8(v0lfh, v1lh)), - wasm_i32x4_add(wasm_i32x4_dot_i16x8(v0hfl, v1hl), - wasm_i32x4_dot_i16x8(v0hfh, v1hh)))), - wasm_f32x4_splat(GGML_FP16_TO_FP32(x0->d) * GGML_FP16_TO_FP32(y0->d)))); - } - - *s = wasm_f32x4_extract_lane(sumv, 0) + wasm_f32x4_extract_lane(sumv, 1) + - wasm_f32x4_extract_lane(sumv, 2) + wasm_f32x4_extract_lane(sumv, 3); -#elif defined(__AVX2__) - // Initialize accumulator with zeros - __m256 acc = _mm256_setzero_ps(); - - // Main loop - for (int i = 0; i < nb; i++) { - /* Compute combined scale for the block */ - const __m256 d = _mm256_set1_ps(GGML_FP16_TO_FP32(x[i].d) * GGML_FP16_TO_FP32(y[i].d)); - - __m256i qx = bytes_from_nibbles_32(x[i].qs); - __m256i bxhi = bytes_from_bits_32(x[i].qh); - bxhi = _mm256_andnot_si256(bxhi, _mm256_set1_epi8((char)0xF0)); - qx = _mm256_or_si256(qx, bxhi); - - __m256i qy = _mm256_loadu_si256((const __m256i *)y[i].qs); - - const __m256 q = mul_sum_i8_pairs_float(qx, qy); - - /* Multiply q with scale and accumulate */ - acc = _mm256_fmadd_ps(d, q, acc); - } - - *s = hsum_float_8(acc); -#elif defined(__AVX__) - // Initialize accumulator with zeros - __m256 acc = _mm256_setzero_ps(); - __m128i mask = _mm_set1_epi8((char)0xF0); - - // Main loop - for (int i = 0; i < nb; i++) { - /* Compute combined scale for the block */ - const __m256 d = _mm256_set1_ps(GGML_FP16_TO_FP32(x[i].d) * GGML_FP16_TO_FP32(y[i].d)); - - __m256i bx_0 = bytes_from_nibbles_32(x[i].qs); - const __m256i bxhi = bytes_from_bits_32(x[i].qh); - __m128i bxhil = _mm256_castsi256_si128(bxhi); - __m128i bxhih = _mm256_extractf128_si256(bxhi, 1); - bxhil = _mm_andnot_si128(bxhil, mask); - bxhih = _mm_andnot_si128(bxhih, mask); - __m128i bxl = _mm256_castsi256_si128(bx_0); - __m128i bxh = _mm256_extractf128_si256(bx_0, 1); - bxl = _mm_or_si128(bxl, bxhil); - bxh = _mm_or_si128(bxh, bxhih); - bx_0 = MM256_SET_M128I(bxh, bxl); - - const __m256i by_0 = _mm256_loadu_si256((const __m256i *)y[i].qs); - - const __m256 q = mul_sum_i8_pairs_float(bx_0, by_0); - - /* Multiply q with scale and accumulate */ - acc = _mm256_add_ps(_mm256_mul_ps(d, q), acc); - } - - *s = hsum_float_8(acc); -#elif defined(__riscv_v_intrinsic) - float sumf = 0.0; - - uint32_t qh; - - size_t vl = __riscv_vsetvl_e8m1(qk/2); - - // These temporary registers are for masking and shift operations - vuint32m2_t vt_1 = __riscv_vid_v_u32m2(vl); - vuint32m2_t vt_2 = __riscv_vsll_vv_u32m2(__riscv_vmv_v_x_u32m2(1, vl), vt_1, vl); - - vuint32m2_t vt_3 = __riscv_vsll_vx_u32m2(vt_2, 16, vl); - vuint32m2_t vt_4 = __riscv_vadd_vx_u32m2(vt_1, 12, vl); - - for (int i = 0; i < nb; i++) { - memcpy(&qh, x[i].qh, sizeof(uint32_t)); - - // ((qh & (1u << (j + 0 ))) >> (j + 0 )) << 4; - vuint32m2_t xha_0 = __riscv_vand_vx_u32m2(vt_2, qh, vl); - vuint32m2_t xhr_0 = __riscv_vsrl_vv_u32m2(xha_0, vt_1, vl); - vuint32m2_t xhl_0 = __riscv_vsll_vx_u32m2(xhr_0, 4, vl); - - // ((qh & (1u << (j + 16))) >> (j + 12)); - vuint32m2_t xha_1 = __riscv_vand_vx_u32m2(vt_3, qh, vl); - vuint32m2_t xhl_1 = __riscv_vsrl_vv_u32m2(xha_1, vt_4, vl); - - // narrowing - vuint16m1_t xhc_0 = __riscv_vncvt_x_x_w_u16m1(xhl_0, vl); - vuint8mf2_t xh_0 = __riscv_vncvt_x_x_w_u8mf2(xhc_0, vl); - - vuint16m1_t xhc_1 = __riscv_vncvt_x_x_w_u16m1(xhl_1, vl); - vuint8mf2_t xh_1 = __riscv_vncvt_x_x_w_u8mf2(xhc_1, vl); - - // load - vuint8mf2_t tx = __riscv_vle8_v_u8mf2(x[i].qs, vl); - - vint8mf2_t y0 = __riscv_vle8_v_i8mf2(y[i].qs, vl); - vint8mf2_t y1 = __riscv_vle8_v_i8mf2(y[i].qs+16, vl); - - vuint8mf2_t x_at = __riscv_vand_vx_u8mf2(tx, 0x0F, vl); - vuint8mf2_t x_lt = __riscv_vsrl_vx_u8mf2(tx, 0x04, vl); - - vuint8mf2_t x_a = __riscv_vor_vv_u8mf2(x_at, xh_0, vl); - vuint8mf2_t x_l = __riscv_vor_vv_u8mf2(x_lt, xh_1, vl); - - vint8mf2_t x_ai = __riscv_vreinterpret_v_u8mf2_i8mf2(x_a); - vint8mf2_t x_li = __riscv_vreinterpret_v_u8mf2_i8mf2(x_l); - - vint8mf2_t v0 = __riscv_vsub_vx_i8mf2(x_ai, 16, vl); - vint8mf2_t v1 = __riscv_vsub_vx_i8mf2(x_li, 16, vl); - - vint16m1_t vec_mul1 = __riscv_vwmul_vv_i16m1(v0, y0, vl); - vint16m1_t vec_mul2 = __riscv_vwmul_vv_i16m1(v1, y1, vl); - - vint32m1_t vec_zero = __riscv_vmv_v_x_i32m1(0, vl); - - vint32m1_t vs1 = __riscv_vwredsum_vs_i16m1_i32m1(vec_mul1, vec_zero, vl); - vint32m1_t vs2 = __riscv_vwredsum_vs_i16m1_i32m1(vec_mul2, vs1, vl); - - int sumi = __riscv_vmv_x_s_i32m1_i32(vs2); - - sumf += (GGML_FP16_TO_FP32(x[i].d)*GGML_FP16_TO_FP32(y[i].d)) * sumi; - } - - *s = sumf; -#else - // scalar - float sumf = 0.0; - - for (int i = 0; i < nb; i++) { - uint32_t qh; - memcpy(&qh, x[i].qh, sizeof(qh)); - - int sumi = 0; - - for (int j = 0; j < qk/2; ++j) { - const uint8_t xh_0 = ((qh & (1u << (j + 0 ))) >> (j + 0 )) << 4; - const uint8_t xh_1 = ((qh & (1u << (j + 16))) >> (j + 12)); - - const int32_t x0 = ((x[i].qs[j] & 0x0F) | xh_0) - 16; - const int32_t x1 = ((x[i].qs[j] >> 4) | xh_1) - 16; - - sumi += (x0 * y[i].qs[j]) + (x1 * y[i].qs[j + qk/2]); - } - - sumf += (GGML_FP16_TO_FP32(x[i].d)*GGML_FP16_TO_FP32(y[i].d)) * sumi; - } - - *s = sumf; -#endif -} - -void ggml_vec_dot_q5_1_q8_1(int n, float * restrict s, size_t bs, const void * restrict vx, size_t bx, const void * restrict vy, size_t by, int nrc) { - const int qk = QK8_1; - const int nb = n / qk; - - assert(n % qk == 0); - assert(qk == QK5_1); - assert(nrc == 1); - UNUSED(nrc); - UNUSED(bx); - UNUSED(by); - UNUSED(bs); - - const block_q5_1 * restrict x = vx; - const block_q8_1 * restrict y = vy; - -#if defined(__ARM_NEON) - float32x4_t sumv0 = vdupq_n_f32(0.0f); - float32x4_t sumv1 = vdupq_n_f32(0.0f); - - float summs0 = 0.0f; - float summs1 = 0.0f; - - uint32_t qh0; - uint32_t qh1; - - uint64_t tmp0[4]; - uint64_t tmp1[4]; - - assert(nb % 2 == 0); // TODO: handle odd nb - - for (int i = 0; i < nb; i += 2) { - const block_q5_1 * restrict x0 = &x[i]; - const block_q5_1 * restrict x1 = &x[i + 1]; - const block_q8_1 * restrict y0 = &y[i]; - const block_q8_1 * restrict y1 = &y[i + 1]; - - const uint8x16_t m4b = vdupq_n_u8(0x0F); - - summs0 += GGML_FP16_TO_FP32(x0->m) * GGML_FP16_TO_FP32(y0->s); - summs1 += GGML_FP16_TO_FP32(x1->m) * GGML_FP16_TO_FP32(y1->s); - - // extract the 5th bit via lookup table ((b) << 4) - memcpy(&qh0, x0->qh, sizeof(qh0)); - memcpy(&qh1, x1->qh, sizeof(qh1)); - - tmp0[0] = table_b2b_0[(qh0 >> 0) & 0xFF]; - tmp0[1] = table_b2b_0[(qh0 >> 8) & 0xFF]; - tmp0[2] = table_b2b_0[(qh0 >> 16) & 0xFF]; - tmp0[3] = table_b2b_0[(qh0 >> 24) ]; - - tmp1[0] = table_b2b_0[(qh1 >> 0) & 0xFF]; - tmp1[1] = table_b2b_0[(qh1 >> 8) & 0xFF]; - tmp1[2] = table_b2b_0[(qh1 >> 16) & 0xFF]; - tmp1[3] = table_b2b_0[(qh1 >> 24) ]; - - const int8x16_t qhl0 = vld1q_s8((const int8_t *)(tmp0 + 0)); - const int8x16_t qhh0 = vld1q_s8((const int8_t *)(tmp0 + 2)); - const int8x16_t qhl1 = vld1q_s8((const int8_t *)(tmp1 + 0)); - const int8x16_t qhh1 = vld1q_s8((const int8_t *)(tmp1 + 2)); - - const uint8x16_t v0_0 = vld1q_u8(x0->qs); - const uint8x16_t v0_1 = vld1q_u8(x1->qs); - - // 4-bit -> 8-bit - const int8x16_t v0_0l = vreinterpretq_s8_u8(vandq_u8 (v0_0, m4b)); - const int8x16_t v0_0h = vreinterpretq_s8_u8(vshrq_n_u8(v0_0, 4)); - const int8x16_t v0_1l = vreinterpretq_s8_u8(vandq_u8 (v0_1, m4b)); - const int8x16_t v0_1h = vreinterpretq_s8_u8(vshrq_n_u8(v0_1, 4)); - - // add high bit - const int8x16_t v0_0lf = vorrq_s8(v0_0l, qhl0); - const int8x16_t v0_0hf = vorrq_s8(v0_0h, qhh0); - const int8x16_t v0_1lf = vorrq_s8(v0_1l, qhl1); - const int8x16_t v0_1hf = vorrq_s8(v0_1h, qhh1); - - // load y - const int8x16_t v1_0l = vld1q_s8(y0->qs); - const int8x16_t v1_0h = vld1q_s8(y0->qs + 16); - const int8x16_t v1_1l = vld1q_s8(y1->qs); - const int8x16_t v1_1h = vld1q_s8(y1->qs + 16); - - sumv0 = vmlaq_n_f32(sumv0, vcvtq_f32_s32(vaddq_s32( - ggml_vdotq_s32(vdupq_n_s32(0), v0_0lf, v1_0l), - ggml_vdotq_s32(vdupq_n_s32(0), v0_0hf, v1_0h))), GGML_FP16_TO_FP32(x0->d)*GGML_FP16_TO_FP32(y0->d)); - sumv1 = vmlaq_n_f32(sumv1, vcvtq_f32_s32(vaddq_s32( - ggml_vdotq_s32(vdupq_n_s32(0), v0_1lf, v1_1l), - ggml_vdotq_s32(vdupq_n_s32(0), v0_1hf, v1_1h))), GGML_FP16_TO_FP32(x1->d)*GGML_FP16_TO_FP32(y1->d)); - } - - *s = vaddvq_f32(sumv0) + vaddvq_f32(sumv1) + summs0 + summs1; -#elif defined(__wasm_simd128__) - v128_t sumv = wasm_f32x4_splat(0.0f); - - float summs = 0.0f; - - uint32_t qh; - uint64_t tmp[4]; - - // TODO: check if unrolling this is better - for (int i = 0; i < nb; ++i) { - const block_q5_1 * restrict x0 = &x[i]; - const block_q8_1 * restrict y0 = &y[i]; - - summs += GGML_FP16_TO_FP32(x0->m) * GGML_FP16_TO_FP32(y0->s); - - const v128_t m4b = wasm_i8x16_splat(0x0F); - - // extract the 5th bit - memcpy(&qh, x0->qh, sizeof(qh)); - - tmp[0] = table_b2b_0[(qh >> 0) & 0xFF]; - tmp[1] = table_b2b_0[(qh >> 8) & 0xFF]; - tmp[2] = table_b2b_0[(qh >> 16) & 0xFF]; - tmp[3] = table_b2b_0[(qh >> 24) ]; - - const v128_t qhl = wasm_v128_load(tmp + 0); - const v128_t qhh = wasm_v128_load(tmp + 2); - - const v128_t v0 = wasm_v128_load(x0->qs); - - // 4-bit -> 8-bit - const v128_t v0l = wasm_v128_and (v0, m4b); - const v128_t v0h = wasm_u8x16_shr(v0, 4); - - // add high bit - const v128_t v0lf = wasm_v128_or(v0l, qhl); - const v128_t v0hf = wasm_v128_or(v0h, qhh); - - // load y - const v128_t v1l = wasm_v128_load(y0->qs); - const v128_t v1h = wasm_v128_load(y0->qs + 16); - - // int8x16 -> int16x8 - const v128_t v0lfl = wasm_i16x8_extend_low_i8x16 (v0lf); - const v128_t v0lfh = wasm_i16x8_extend_high_i8x16(v0lf); - const v128_t v0hfl = wasm_i16x8_extend_low_i8x16 (v0hf); - const v128_t v0hfh = wasm_i16x8_extend_high_i8x16(v0hf); - - const v128_t v1ll = wasm_i16x8_extend_low_i8x16 (v1l); - const v128_t v1lh = wasm_i16x8_extend_high_i8x16(v1l); - const v128_t v1hl = wasm_i16x8_extend_low_i8x16 (v1h); - const v128_t v1hh = wasm_i16x8_extend_high_i8x16(v1h); - - // dot product - sumv = wasm_f32x4_add(sumv, - wasm_f32x4_mul(wasm_f32x4_convert_i32x4(wasm_i32x4_add( - wasm_i32x4_add(wasm_i32x4_dot_i16x8(v0lfl, v1ll), - wasm_i32x4_dot_i16x8(v0lfh, v1lh)), - wasm_i32x4_add(wasm_i32x4_dot_i16x8(v0hfl, v1hl), - wasm_i32x4_dot_i16x8(v0hfh, v1hh)))), - wasm_f32x4_splat(GGML_FP16_TO_FP32(x0->d) * GGML_FP16_TO_FP32(y0->d)))); - } - - *s = wasm_f32x4_extract_lane(sumv, 0) + wasm_f32x4_extract_lane(sumv, 1) + - wasm_f32x4_extract_lane(sumv, 2) + wasm_f32x4_extract_lane(sumv, 3) + summs; -#elif defined(__AVX2__) - // Initialize accumulator with zeros - __m256 acc = _mm256_setzero_ps(); - - float summs = 0.0f; - - // Main loop - for (int i = 0; i < nb; i++) { - const __m256 dx = _mm256_set1_ps(GGML_FP16_TO_FP32(x[i].d)); - - summs += GGML_FP16_TO_FP32(x[i].m) * GGML_FP16_TO_FP32(y[i].s); - - __m256i qx = bytes_from_nibbles_32(x[i].qs); - __m256i bxhi = bytes_from_bits_32(x[i].qh); - bxhi = _mm256_and_si256(bxhi, _mm256_set1_epi8(0x10)); - qx = _mm256_or_si256(qx, bxhi); - - const __m256 dy = _mm256_set1_ps(GGML_FP16_TO_FP32(y[i].d)); - const __m256i qy = _mm256_loadu_si256((const __m256i *)y[i].qs); - - const __m256 q = mul_sum_us8_pairs_float(qx, qy); - - acc = _mm256_fmadd_ps(q, _mm256_mul_ps(dx, dy), acc); - } - - *s = hsum_float_8(acc) + summs; -#elif defined(__AVX__) - // Initialize accumulator with zeros - __m256 acc = _mm256_setzero_ps(); - __m128i mask = _mm_set1_epi8(0x10); - - float summs = 0.0f; - - // Main loop - for (int i = 0; i < nb; i++) { - const __m256 dx = _mm256_set1_ps(GGML_FP16_TO_FP32(x[i].d)); - - summs += GGML_FP16_TO_FP32(x[i].m) * GGML_FP16_TO_FP32(y[i].s); - - __m256i bx_0 = bytes_from_nibbles_32(x[i].qs); - const __m256i bxhi = bytes_from_bits_32(x[i].qh); - __m128i bxhil = _mm256_castsi256_si128(bxhi); - __m128i bxhih = _mm256_extractf128_si256(bxhi, 1); - bxhil = _mm_and_si128(bxhil, mask); - bxhih = _mm_and_si128(bxhih, mask); - __m128i bxl = _mm256_castsi256_si128(bx_0); - __m128i bxh = _mm256_extractf128_si256(bx_0, 1); - bxl = _mm_or_si128(bxl, bxhil); - bxh = _mm_or_si128(bxh, bxhih); - bx_0 = MM256_SET_M128I(bxh, bxl); - - const __m256 dy = _mm256_set1_ps(GGML_FP16_TO_FP32(y[i].d)); - const __m256i by_0 = _mm256_loadu_si256((const __m256i *)y[i].qs); - - const __m256 q = mul_sum_us8_pairs_float(bx_0, by_0); - - acc = _mm256_add_ps(_mm256_mul_ps(q, _mm256_mul_ps(dx, dy)), acc); - } - - *s = hsum_float_8(acc) + summs; -#elif defined(__riscv_v_intrinsic) - float sumf = 0.0; - - uint32_t qh; - - size_t vl = __riscv_vsetvl_e8m1(qk/2); - - // temporary registers for shift operations - vuint32m2_t vt_1 = __riscv_vid_v_u32m2(vl); - vuint32m2_t vt_2 = __riscv_vadd_vx_u32m2(vt_1, 12, vl); - - for (int i = 0; i < nb; i++) { - memcpy(&qh, x[i].qh, sizeof(uint32_t)); - - // load qh - vuint32m2_t vqh = __riscv_vmv_v_x_u32m2(qh, vl); - - // ((qh >> (j + 0)) << 4) & 0x10; - vuint32m2_t xhr_0 = __riscv_vsrl_vv_u32m2(vqh, vt_1, vl); - vuint32m2_t xhl_0 = __riscv_vsll_vx_u32m2(xhr_0, 4, vl); - vuint32m2_t xha_0 = __riscv_vand_vx_u32m2(xhl_0, 0x10, vl); - - // ((qh >> (j + 12)) ) & 0x10; - vuint32m2_t xhr_1 = __riscv_vsrl_vv_u32m2(vqh, vt_2, vl); - vuint32m2_t xha_1 = __riscv_vand_vx_u32m2(xhr_1, 0x10, vl); - - // narrowing - vuint16m1_t xhc_0 = __riscv_vncvt_x_x_w_u16m1(xha_0, vl); - vuint8mf2_t xh_0 = __riscv_vncvt_x_x_w_u8mf2(xhc_0, vl); - - vuint16m1_t xhc_1 = __riscv_vncvt_x_x_w_u16m1(xha_1, vl); - vuint8mf2_t xh_1 = __riscv_vncvt_x_x_w_u8mf2(xhc_1, vl); - - // load - vuint8mf2_t tx = __riscv_vle8_v_u8mf2(x[i].qs, vl); - - vint8mf2_t y0 = __riscv_vle8_v_i8mf2(y[i].qs, vl); - vint8mf2_t y1 = __riscv_vle8_v_i8mf2(y[i].qs+16, vl); - - vuint8mf2_t x_at = __riscv_vand_vx_u8mf2(tx, 0x0F, vl); - vuint8mf2_t x_lt = __riscv_vsrl_vx_u8mf2(tx, 0x04, vl); - - vuint8mf2_t x_a = __riscv_vor_vv_u8mf2(x_at, xh_0, vl); - vuint8mf2_t x_l = __riscv_vor_vv_u8mf2(x_lt, xh_1, vl); - - vint8mf2_t v0 = __riscv_vreinterpret_v_u8mf2_i8mf2(x_a); - vint8mf2_t v1 = __riscv_vreinterpret_v_u8mf2_i8mf2(x_l); - - vint16m1_t vec_mul1 = __riscv_vwmul_vv_i16m1(v0, y0, vl); - vint16m1_t vec_mul2 = __riscv_vwmul_vv_i16m1(v1, y1, vl); - - vint32m1_t vec_zero = __riscv_vmv_v_x_i32m1(0, vl); - - vint32m1_t vs1 = __riscv_vwredsum_vs_i16m1_i32m1(vec_mul1, vec_zero, vl); - vint32m1_t vs2 = __riscv_vwredsum_vs_i16m1_i32m1(vec_mul2, vs1, vl); - - int sumi = __riscv_vmv_x_s_i32m1_i32(vs2); - - sumf += (GGML_FP16_TO_FP32(x[i].d)*GGML_FP16_TO_FP32(y[i].d))*sumi + GGML_FP16_TO_FP32(x[i].m)*GGML_FP16_TO_FP32(y[i].s); - } - - *s = sumf; -#else - // scalar - float sumf = 0.0; - - for (int i = 0; i < nb; i++) { - uint32_t qh; - memcpy(&qh, x[i].qh, sizeof(qh)); - - int sumi = 0; - - for (int j = 0; j < qk/2; ++j) { - const uint8_t xh_0 = ((qh >> (j + 0)) << 4) & 0x10; - const uint8_t xh_1 = ((qh >> (j + 12)) ) & 0x10; - - const int32_t x0 = (x[i].qs[j] & 0xF) | xh_0; - const int32_t x1 = (x[i].qs[j] >> 4) | xh_1; - - sumi += (x0 * y[i].qs[j]) + (x1 * y[i].qs[j + qk/2]); - } - - sumf += (GGML_FP16_TO_FP32(x[i].d)*GGML_FP16_TO_FP32(y[i].d))*sumi + GGML_FP16_TO_FP32(x[i].m)*GGML_FP16_TO_FP32(y[i].s); - } - - *s = sumf; -#endif -} - -void ggml_vec_dot_q8_0_q8_0(int n, float * restrict s, size_t bs, const void * restrict vx, size_t bx, const void * restrict vy, size_t by, int nrc) { - const int qk = QK8_0; - const int nb = n / qk; - - assert(n % qk == 0); -#if defined(__ARM_FEATURE_MATMUL_INT8) - assert((nrc == 2) || (nrc == 1)); -#else - assert(nrc == 1); -#endif - UNUSED(nrc); - UNUSED(bx); - UNUSED(by); - UNUSED(bs); - - const block_q8_0 * restrict x = vx; - const block_q8_0 * restrict y = vy; - -#if defined(__ARM_FEATURE_MATMUL_INT8) - if (nrc == 2) { - const block_q8_0 * restrict vx0 = vx; - const block_q8_0 * restrict vx1 = vx + bx; - const block_q8_0 * restrict vy0 = vy; - const block_q8_0 * restrict vy1 = vy + by; - - float32x4_t sumv0 = vdupq_n_f32(0.0f); - - for (int i = 0; i < nb; i++) { - const block_q8_0 * restrict b_x0 = &vx0[i]; - const block_q8_0 * restrict b_y0 = &vy0[i]; - - const block_q8_0 * restrict b_x1 = &vx1[i]; - const block_q8_0 * restrict b_y1 = &vy1[i]; - - const int8x16_t x0_l = vld1q_s8(b_x0->qs); - const int8x16_t x0_h = vld1q_s8(b_x0->qs + 16); - const int8x16_t x1_l = vld1q_s8(b_x1->qs); - const int8x16_t x1_h = vld1q_s8(b_x1->qs + 16); - - // load y - const int8x16_t y0_l = vld1q_s8(b_y0->qs); - const int8x16_t y0_h = vld1q_s8(b_y0->qs + 16); - const int8x16_t y1_l = vld1q_s8(b_y1->qs); - const int8x16_t y1_h = vld1q_s8(b_y1->qs + 16); - - float32x4_t scale = {GGML_FP16_TO_FP32(b_x0->d)*GGML_FP16_TO_FP32(b_y0->d), - GGML_FP16_TO_FP32(b_x0->d)*GGML_FP16_TO_FP32(b_y1->d), - GGML_FP16_TO_FP32(b_x1->d)*GGML_FP16_TO_FP32(b_y0->d), - GGML_FP16_TO_FP32(b_x1->d)*GGML_FP16_TO_FP32(b_y1->d)}; - - int8x16_t l0 = vreinterpretq_s8_s64(vzip1q_s64(vreinterpretq_s64_s8(x0_l), vreinterpretq_s64_s8(x1_l))); - int8x16_t l1 = vreinterpretq_s8_s64(vzip2q_s64(vreinterpretq_s64_s8(x0_l), vreinterpretq_s64_s8(x1_l))); - - int8x16_t l2 = vreinterpretq_s8_s64(vzip1q_s64(vreinterpretq_s64_s8(x0_h), vreinterpretq_s64_s8(x1_h))); - int8x16_t l3 = vreinterpretq_s8_s64(vzip2q_s64(vreinterpretq_s64_s8(x0_h), vreinterpretq_s64_s8(x1_h))); - - int8x16_t r0 = vreinterpretq_s8_s64(vzip1q_s64(vreinterpretq_s64_s8(y0_l), vreinterpretq_s64_s8(y1_l))); - int8x16_t r1 = vreinterpretq_s8_s64(vzip2q_s64(vreinterpretq_s64_s8(y0_l), vreinterpretq_s64_s8(y1_l))); - - int8x16_t r2 = vreinterpretq_s8_s64(vzip1q_s64(vreinterpretq_s64_s8(y0_h), vreinterpretq_s64_s8(y1_h))); - int8x16_t r3 = vreinterpretq_s8_s64(vzip2q_s64(vreinterpretq_s64_s8(y0_h), vreinterpretq_s64_s8(y1_h))); - - sumv0 = vmlaq_f32(sumv0,(vcvtq_f32_s32(vmmlaq_s32((vmmlaq_s32((vmmlaq_s32((vmmlaq_s32(vdupq_n_s32(0), l0, r0)), - l1, r1)), l2, r2)), l3, r3))), scale); - } - float32x4_t sumv1 = vextq_f32(sumv0, sumv0, 2); - float32x4_t sumv2 = vzip1q_f32(sumv0, sumv1); - - vst1_f32(s, vget_low_f32(sumv2)); - vst1_f32(s + bs, vget_high_f32(sumv2)); - return; - } -#endif -#if defined(__ARM_NEON) - float32x4_t sumv0 = vdupq_n_f32(0.0f); - float32x4_t sumv1 = vdupq_n_f32(0.0f); - - assert(nb % 2 == 0); // TODO: handle odd nb - - for (int i = 0; i < nb; i += 2) { - const block_q8_0 * restrict x0 = &x[i + 0]; - const block_q8_0 * restrict x1 = &x[i + 1]; - const block_q8_0 * restrict y0 = &y[i + 0]; - const block_q8_0 * restrict y1 = &y[i + 1]; - - const int8x16_t x0_0 = vld1q_s8(x0->qs); - const int8x16_t x0_1 = vld1q_s8(x0->qs + 16); - const int8x16_t x1_0 = vld1q_s8(x1->qs); - const int8x16_t x1_1 = vld1q_s8(x1->qs + 16); - - // load y - const int8x16_t y0_0 = vld1q_s8(y0->qs); - const int8x16_t y0_1 = vld1q_s8(y0->qs + 16); - const int8x16_t y1_0 = vld1q_s8(y1->qs); - const int8x16_t y1_1 = vld1q_s8(y1->qs + 16); - - sumv0 = vmlaq_n_f32(sumv0, vcvtq_f32_s32(vaddq_s32( - ggml_vdotq_s32(vdupq_n_s32(0), x0_0, y0_0), - ggml_vdotq_s32(vdupq_n_s32(0), x0_1, y0_1))), GGML_FP16_TO_FP32(x0->d)*GGML_FP16_TO_FP32(y0->d)); - - sumv1 = vmlaq_n_f32(sumv1, vcvtq_f32_s32(vaddq_s32( - ggml_vdotq_s32(vdupq_n_s32(0), x1_0, y1_0), - ggml_vdotq_s32(vdupq_n_s32(0), x1_1, y1_1))), GGML_FP16_TO_FP32(x1->d)*GGML_FP16_TO_FP32(y1->d)); - } - - *s = vaddvq_f32(sumv0) + vaddvq_f32(sumv1); -#elif defined(__AVX2__) || defined(__AVX__) - // Initialize accumulator with zeros - __m256 acc = _mm256_setzero_ps(); - - // Main loop - for (int i = 0; i < nb; ++i) { - // Compute combined scale for the block - const __m256 d = _mm256_set1_ps(GGML_FP16_TO_FP32(x[i].d) * GGML_FP16_TO_FP32(y[i].d)); - __m256i qx = _mm256_loadu_si256((const __m256i *)x[i].qs); - __m256i qy = _mm256_loadu_si256((const __m256i *)y[i].qs); - - const __m256 q = mul_sum_i8_pairs_float(qx, qy); - - // Multiply q with scale and accumulate -#if defined(__AVX2__) - acc = _mm256_fmadd_ps( d, q, acc ); -#else - acc = _mm256_add_ps( _mm256_mul_ps( d, q ), acc ); -#endif - } - - *s = hsum_float_8(acc); -#elif defined(__riscv_v_intrinsic) - float sumf = 0.0; - size_t vl = __riscv_vsetvl_e8m1(qk); - - for (int i = 0; i < nb; i++) { - // load elements - vint8m1_t bx_0 = __riscv_vle8_v_i8m1(x[i].qs, vl); - vint8m1_t by_0 = __riscv_vle8_v_i8m1(y[i].qs, vl); - - vint16m2_t vw_mul = __riscv_vwmul_vv_i16m2(bx_0, by_0, vl); - - vint32m1_t v_zero = __riscv_vmv_v_x_i32m1(0, vl); - vint32m1_t v_sum = __riscv_vwredsum_vs_i16m2_i32m1(vw_mul, v_zero, vl); - - int sumi = __riscv_vmv_x_s_i32m1_i32(v_sum); - - sumf += sumi*(GGML_FP16_TO_FP32(x[i].d)*GGML_FP16_TO_FP32(y[i].d)); - } - - *s = sumf; -#else - // scalar - float sumf = 0.0; - - for (int i = 0; i < nb; i++) { - int sumi = 0; - - for (int j = 0; j < qk; j++) { - sumi += x[i].qs[j]*y[i].qs[j]; - } - - sumf += sumi*(GGML_FP16_TO_FP32(x[i].d)*GGML_FP16_TO_FP32(y[i].d)); - } - - *s = sumf; -#endif -} - -#if QK_K == 256 -void ggml_vec_dot_q2_K_q8_K(int n, float * restrict s, size_t bs, const void * restrict vx, size_t bx, const void * restrict vy, size_t by, int nrc) { - assert(nrc == 1); - UNUSED(nrc); - UNUSED(bx); - UNUSED(by); - UNUSED(bs); - - const block_q2_K * restrict x = vx; - const block_q8_K * restrict y = vy; - - const int nb = n / QK_K; - -#ifdef __ARM_NEON - const uint8x16_t m3 = vdupq_n_u8(0x3); - const uint8x16_t m4 = vdupq_n_u8(0xF); - - const int32x4_t vzero = vdupq_n_s32(0); - - ggml_int8x16x2_t q2bytes; - uint8_t aux[16]; - - float sum = 0; - - for (int i = 0; i < nb; ++i) { - const float d = y[i].d * GGML_FP16_TO_FP32(x[i].d); - const float dmin = -y[i].d * GGML_FP16_TO_FP32(x[i].dmin); - - const uint8_t * restrict q2 = x[i].qs; - const int8_t * restrict q8 = y[i].qs; - const uint8_t * restrict sc = x[i].scales; - - const uint8x16_t mins_and_scales = vld1q_u8(sc); - const uint8x16_t scales = vandq_u8(mins_and_scales, m4); - vst1q_u8(aux, scales); - - const uint8x16_t mins = vshrq_n_u8(mins_and_scales, 4); - const ggml_int16x8x2_t q8sums = ggml_vld1q_s16_x2(y[i].bsums); - const ggml_int16x8x2_t mins16 = {{vreinterpretq_s16_u16(vmovl_u8(vget_low_u8(mins))), vreinterpretq_s16_u16(vmovl_u8(vget_high_u8(mins)))}}; - const int32x4_t s0 = vaddq_s32(vmull_s16(vget_low_s16 (mins16.val[0]), vget_low_s16 (q8sums.val[0])), - vmull_s16(vget_high_s16(mins16.val[0]), vget_high_s16(q8sums.val[0]))); - const int32x4_t s1 = vaddq_s32(vmull_s16(vget_low_s16 (mins16.val[1]), vget_low_s16 (q8sums.val[1])), - vmull_s16(vget_high_s16(mins16.val[1]), vget_high_s16(q8sums.val[1]))); - sum += dmin * vaddvq_s32(vaddq_s32(s0, s1)); - - int isum = 0; - int is = 0; - -// We use this macro instead of a function call because for some reason -// the code runs 2-3% slower, even if the function is declared inline -#define MULTIPLY_ACCUM_WITH_SCALE(index)\ - isum += vaddvq_s32(ggml_vdotq_s32(vzero, q2bytes.val[0], q8bytes.val[0])) * aux[is+(index)];\ - isum += vaddvq_s32(ggml_vdotq_s32(vzero, q2bytes.val[1], q8bytes.val[1])) * aux[is+1+(index)]; - -#define SHIFT_MULTIPLY_ACCUM_WITH_SCALE(shift, index)\ - q8bytes = ggml_vld1q_s8_x2(q8); q8 += 32;\ - q2bytes.val[0] = vreinterpretq_s8_u8(vandq_u8(vshrq_n_u8(q2bits.val[0], (shift)), m3));\ - q2bytes.val[1] = vreinterpretq_s8_u8(vandq_u8(vshrq_n_u8(q2bits.val[1], (shift)), m3));\ - MULTIPLY_ACCUM_WITH_SCALE((index)); - - for (int j = 0; j < QK_K/128; ++j) { - const ggml_uint8x16x2_t q2bits = ggml_vld1q_u8_x2(q2); q2 += 32; - - ggml_int8x16x2_t q8bytes = ggml_vld1q_s8_x2(q8); q8 += 32; - q2bytes.val[0] = vreinterpretq_s8_u8(vandq_u8(q2bits.val[0], m3)); - q2bytes.val[1] = vreinterpretq_s8_u8(vandq_u8(q2bits.val[1], m3)); - - MULTIPLY_ACCUM_WITH_SCALE(0); - - SHIFT_MULTIPLY_ACCUM_WITH_SCALE(2, 2); - SHIFT_MULTIPLY_ACCUM_WITH_SCALE(4, 4); - SHIFT_MULTIPLY_ACCUM_WITH_SCALE(6, 6); - - is += 8; - } - - sum += d * isum; - } - - *s = sum; - -#elif defined __AVX2__ - - const __m256i m3 = _mm256_set1_epi8(3); - const __m128i m4 = _mm_set1_epi8(0xF); - - __m256 acc = _mm256_setzero_ps(); - - for (int i = 0; i < nb; ++i) { - - const float d = y[i].d * GGML_FP16_TO_FP32(x[i].d); - const float dmin = -y[i].d * GGML_FP16_TO_FP32(x[i].dmin); - - const uint8_t * restrict q2 = x[i].qs; - const int8_t * restrict q8 = y[i].qs; - - const __m128i mins_and_scales = _mm_loadu_si128((const __m128i*)x[i].scales); - const __m128i scales8 = _mm_and_si128(mins_and_scales, m4); - const __m128i mins8 = _mm_and_si128(_mm_srli_epi16(mins_and_scales, 4), m4); - const __m256i mins = _mm256_cvtepi8_epi16(mins8); - const __m256i prod = _mm256_madd_epi16(mins, _mm256_loadu_si256((const __m256i*)y[i].bsums)); - - acc = _mm256_fmadd_ps(_mm256_broadcast_ss(&dmin), _mm256_cvtepi32_ps(prod), acc); - - const __m256i all_scales = _mm256_cvtepi8_epi16(scales8); - const __m128i l_scales = _mm256_extracti128_si256(all_scales, 0); - const __m128i h_scales = _mm256_extracti128_si256(all_scales, 1); - const __m256i scales[2] = {MM256_SET_M128I(l_scales, l_scales), MM256_SET_M128I(h_scales, h_scales)}; - - __m256i sumi = _mm256_setzero_si256(); - - for (int j = 0; j < QK_K/128; ++j) { - - const __m256i q2bits = _mm256_loadu_si256((const __m256i*)q2); q2 += 32; - - const __m256i q8_0 = _mm256_loadu_si256((const __m256i*)q8); q8 += 32; - const __m256i q8_1 = _mm256_loadu_si256((const __m256i*)q8); q8 += 32; - const __m256i q8_2 = _mm256_loadu_si256((const __m256i*)q8); q8 += 32; - const __m256i q8_3 = _mm256_loadu_si256((const __m256i*)q8); q8 += 32; - - const __m256i q2_0 = _mm256_and_si256(q2bits, m3); - const __m256i q2_1 = _mm256_and_si256(_mm256_srli_epi16(q2bits, 2), m3); - const __m256i q2_2 = _mm256_and_si256(_mm256_srli_epi16(q2bits, 4), m3); - const __m256i q2_3 = _mm256_and_si256(_mm256_srli_epi16(q2bits, 6), m3); - - __m256i p0 = _mm256_maddubs_epi16(q2_0, q8_0); - __m256i p1 = _mm256_maddubs_epi16(q2_1, q8_1); - __m256i p2 = _mm256_maddubs_epi16(q2_2, q8_2); - __m256i p3 = _mm256_maddubs_epi16(q2_3, q8_3); - - p0 = _mm256_madd_epi16(_mm256_shuffle_epi8(scales[j], get_scale_shuffle_q3k(0)), p0); - p1 = _mm256_madd_epi16(_mm256_shuffle_epi8(scales[j], get_scale_shuffle_q3k(1)), p1); - p2 = _mm256_madd_epi16(_mm256_shuffle_epi8(scales[j], get_scale_shuffle_q3k(2)), p2); - p3 = _mm256_madd_epi16(_mm256_shuffle_epi8(scales[j], get_scale_shuffle_q3k(3)), p3); - - p0 = _mm256_add_epi32(p0, p1); - p2 = _mm256_add_epi32(p2, p3); - - sumi = _mm256_add_epi32(sumi, _mm256_add_epi32(p0, p2)); - } - - acc = _mm256_fmadd_ps(_mm256_broadcast_ss(&d), _mm256_cvtepi32_ps(sumi), acc); - - } - - *s = hsum_float_8(acc); - -#elif defined __AVX__ - - const __m128i m3 = _mm_set1_epi8(0x3); - const __m128i m4 = _mm_set1_epi8(0xF); - const __m128i m2 = _mm_set1_epi8(0x2); - - __m256 acc = _mm256_setzero_ps(); - - for (int i = 0; i < nb; ++i) { - - const float dall = y[i].d * GGML_FP16_TO_FP32(x[i].d); - const float dmin = -y[i].d * GGML_FP16_TO_FP32(x[i].dmin); - - const uint8_t * restrict q2 = x[i].qs; - const int8_t * restrict q8 = y[i].qs; - - // load mins and scales from block_q2_K.scales[QK_K/16] - const __m128i mins_and_scales = _mm_loadu_si128((const __m128i*)x[i].scales); - const __m128i scales16 = _mm_and_si128(mins_and_scales, m4); - const __m128i mins16 = _mm_and_si128(_mm_srli_epi16(mins_and_scales, 4), m4); - const __m128i mins_0 = _mm_cvtepi8_epi16(mins16); - const __m128i mins_1 = _mm_cvtepi8_epi16(_mm_unpackhi_epi64(mins16, mins16)); - - // summs = y[i].bsums * (x[i].scales >> 4) in 16bits*8*2 to 32bits*4*2 - const __m128i summs_0 = _mm_madd_epi16(mins_0, _mm_loadu_si128((const __m128i*)&y[i].bsums[0])); - const __m128i summs_1 = _mm_madd_epi16(mins_1, _mm_loadu_si128((const __m128i*)&y[i].bsums[8])); - - // sumf += -dmin * summs in 32bits*8 - acc = _mm256_add_ps(_mm256_mul_ps(_mm256_broadcast_ss(&dmin), _mm256_cvtepi32_ps(MM256_SET_M128I(summs_1, summs_0))), acc); - - const __m128i scales_0 = _mm_cvtepi8_epi16(scales16); - const __m128i scales_1 = _mm_cvtepi8_epi16(_mm_unpackhi_epi64(scales16, scales16)); - const __m128i scales[2] = { scales_0, scales_1 }; - - __m128i sumi_0 = _mm_setzero_si128(); - __m128i sumi_1 = _mm_setzero_si128(); - - for (int j = 0; j < QK_K/128; ++j) { - - // load Q8 quants int8*16*8 from block_q8_K.qs[QK_K] - const __m128i q8_0 = _mm_loadu_si128((const __m128i*)q8); q8 += 16; - const __m128i q8_1 = _mm_loadu_si128((const __m128i*)q8); q8 += 16; - const __m128i q8_2 = _mm_loadu_si128((const __m128i*)q8); q8 += 16; - const __m128i q8_3 = _mm_loadu_si128((const __m128i*)q8); q8 += 16; - const __m128i q8_4 = _mm_loadu_si128((const __m128i*)q8); q8 += 16; - const __m128i q8_5 = _mm_loadu_si128((const __m128i*)q8); q8 += 16; - const __m128i q8_6 = _mm_loadu_si128((const __m128i*)q8); q8 += 16; - const __m128i q8_7 = _mm_loadu_si128((const __m128i*)q8); q8 += 16; - - // load 2bits*16*8 from block_q2_K.qs[QK_K/4] - __m128i q2bits = _mm_loadu_si128((const __m128i*)q2); q2 += 16; - const __m128i q2_0 = _mm_and_si128(q2bits, m3); - const __m128i q2_2 = _mm_and_si128(_mm_srli_epi16(q2bits, 2), m3); - const __m128i q2_4 = _mm_and_si128(_mm_srli_epi16(q2bits, 4), m3); - const __m128i q2_6 = _mm_and_si128(_mm_srli_epi16(q2bits, 6), m3); - q2bits = _mm_loadu_si128((const __m128i*)q2); q2 += 16; - const __m128i q2_1 = _mm_and_si128(q2bits, m3); - const __m128i q2_3 = _mm_and_si128(_mm_srli_epi16(q2bits, 2), m3); - const __m128i q2_5 = _mm_and_si128(_mm_srli_epi16(q2bits, 4), m3); - const __m128i q2_7 = _mm_and_si128(_mm_srli_epi16(q2bits, 6), m3); - - // isuml = q8[l] * ((q2[l] >> shift) & 3) in 8bits*16*8 to 16bits*8*8 - __m128i p0 = _mm_maddubs_epi16(q2_0, q8_0); - __m128i p1 = _mm_maddubs_epi16(q2_1, q8_1); - __m128i p2 = _mm_maddubs_epi16(q2_2, q8_2); - __m128i p3 = _mm_maddubs_epi16(q2_3, q8_3); - __m128i p4 = _mm_maddubs_epi16(q2_4, q8_4); - __m128i p5 = _mm_maddubs_epi16(q2_5, q8_5); - __m128i p6 = _mm_maddubs_epi16(q2_6, q8_6); - __m128i p7 = _mm_maddubs_epi16(q2_7, q8_7); - - // isum += (x[i].scales[is++] & 0xF) * isuml in 16bits*8*8 to 32bits*4*8 - __m128i shuffle = _mm_set1_epi16(0x0100); - p0 = _mm_madd_epi16(_mm_shuffle_epi8(scales[j], shuffle), p0); - shuffle = _mm_add_epi16(shuffle, m2); - p1 = _mm_madd_epi16(_mm_shuffle_epi8(scales[j], shuffle), p1); - shuffle = _mm_add_epi16(shuffle, m2); - p2 = _mm_madd_epi16(_mm_shuffle_epi8(scales[j], shuffle), p2); - shuffle = _mm_add_epi16(shuffle, m2); - p3 = _mm_madd_epi16(_mm_shuffle_epi8(scales[j], shuffle), p3); - shuffle = _mm_add_epi16(shuffle, m2); - p4 = _mm_madd_epi16(_mm_shuffle_epi8(scales[j], shuffle), p4); - shuffle = _mm_add_epi16(shuffle, m2); - p5 = _mm_madd_epi16(_mm_shuffle_epi8(scales[j], shuffle), p5); - shuffle = _mm_add_epi16(shuffle, m2); - p6 = _mm_madd_epi16(_mm_shuffle_epi8(scales[j], shuffle), p6); - shuffle = _mm_add_epi16(shuffle, m2); - p7 = _mm_madd_epi16(_mm_shuffle_epi8(scales[j], shuffle), p7); - - p0 = _mm_add_epi32(p0, p1); - p2 = _mm_add_epi32(p2, p3); - p4 = _mm_add_epi32(p4, p5); - p6 = _mm_add_epi32(p6, p7); - - // isum in 32bits*4*2 - sumi_0 = _mm_add_epi32(sumi_0, _mm_add_epi32(p0, p2)); - sumi_1 = _mm_add_epi32(sumi_1, _mm_add_epi32(p4, p6)); - } - - // sumf += dall * isum - dmin * summs in 32bits - __m256i sumi = MM256_SET_M128I(sumi_1, sumi_0); - acc = _mm256_add_ps(_mm256_mul_ps(_mm256_broadcast_ss(&dall), _mm256_cvtepi32_ps(sumi)), acc); - } - - *s = hsum_float_8(acc); - -#elif defined __riscv_v_intrinsic - - float sumf = 0; - uint8_t temp_01[32] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}; - - for (int i = 0; i < nb; ++i) { - - const uint8_t * q2 = x[i].qs; - const int8_t * q8 = y[i].qs; - const uint8_t * sc = x[i].scales; - - const float dall = y[i].d * GGML_FP16_TO_FP32(x[i].d); - const float dmin = -y[i].d * GGML_FP16_TO_FP32(x[i].dmin); - - size_t vl = 16; - - vuint8m1_t scales = __riscv_vle8_v_u8m1(sc, vl); - vuint8m1_t aux = __riscv_vand_vx_u8m1(scales, 0x0F, vl); - - vint16m1_t q8sums = __riscv_vle16_v_i16m1(y[i].bsums, vl); - - vuint8mf2_t scales_2 = __riscv_vle8_v_u8mf2(sc, vl); - vuint8mf2_t mins8 = __riscv_vsrl_vx_u8mf2(scales_2, 0x4, vl); - vint16m1_t mins = __riscv_vreinterpret_v_u16m1_i16m1(__riscv_vzext_vf2_u16m1(mins8, vl)); - vint32m2_t prod = __riscv_vwmul_vv_i32m2(q8sums, mins, vl); - vint32m1_t vsums = __riscv_vredsum_vs_i32m2_i32m1(prod, __riscv_vmv_v_x_i32m1(0, 1), vl); - - sumf += dmin * __riscv_vmv_x_s_i32m1_i32(vsums); - - vl = 32; - - vint32m1_t vzero = __riscv_vmv_v_x_i32m1(0, 1); - vuint8m1_t v_b = __riscv_vle8_v_u8m1(temp_01, vl); - - uint8_t is=0; - int isum=0; - - for (int j = 0; j < QK_K/128; ++j) { - // load Q2 - vuint8m1_t q2_x = __riscv_vle8_v_u8m1(q2, vl); - - vuint8m1_t q2_0 = __riscv_vand_vx_u8m1(q2_x, 0x03, vl); - vuint8m1_t q2_1 = __riscv_vand_vx_u8m1(__riscv_vsrl_vx_u8m1(q2_x, 0x2, vl), 0x03 , vl); - vuint8m1_t q2_2 = __riscv_vand_vx_u8m1(__riscv_vsrl_vx_u8m1(q2_x, 0x4, vl), 0x03 , vl); - vuint8m1_t q2_3 = __riscv_vand_vx_u8m1(__riscv_vsrl_vx_u8m1(q2_x, 0x6, vl), 0x03 , vl); - - // duplicate scale elements for product - vuint8m1_t sc0 = __riscv_vrgather_vv_u8m1(aux, __riscv_vadd_vx_u8m1(v_b, 0+is, vl), vl); - vuint8m1_t sc1 = __riscv_vrgather_vv_u8m1(aux, __riscv_vadd_vx_u8m1(v_b, 2+is, vl), vl); - vuint8m1_t sc2 = __riscv_vrgather_vv_u8m1(aux, __riscv_vadd_vx_u8m1(v_b, 4+is, vl), vl); - vuint8m1_t sc3 = __riscv_vrgather_vv_u8m1(aux, __riscv_vadd_vx_u8m1(v_b, 6+is, vl), vl); - - vint16m2_t p0 = __riscv_vreinterpret_v_u16m2_i16m2(__riscv_vwmulu_vv_u16m2(q2_0, sc0, vl)); - vint16m2_t p1 = __riscv_vreinterpret_v_u16m2_i16m2(__riscv_vwmulu_vv_u16m2(q2_1, sc1, vl)); - vint16m2_t p2 = __riscv_vreinterpret_v_u16m2_i16m2(__riscv_vwmulu_vv_u16m2(q2_2, sc2, vl)); - vint16m2_t p3 = __riscv_vreinterpret_v_u16m2_i16m2(__riscv_vwmulu_vv_u16m2(q2_3, sc3, vl)); - - // load Q8 - vint8m1_t q8_0 = __riscv_vle8_v_i8m1(q8, vl); - vint8m1_t q8_1 = __riscv_vle8_v_i8m1(q8+32, vl); - vint8m1_t q8_2 = __riscv_vle8_v_i8m1(q8+64, vl); - vint8m1_t q8_3 = __riscv_vle8_v_i8m1(q8+96, vl); - - vint32m4_t s0 = __riscv_vwmul_vv_i32m4(p0, __riscv_vwcvt_x_x_v_i16m2(q8_0, vl), vl); - vint32m4_t s1 = __riscv_vwmul_vv_i32m4(p1, __riscv_vwcvt_x_x_v_i16m2(q8_1, vl), vl); - vint32m4_t s2 = __riscv_vwmul_vv_i32m4(p2, __riscv_vwcvt_x_x_v_i16m2(q8_2, vl), vl); - vint32m4_t s3 = __riscv_vwmul_vv_i32m4(p3, __riscv_vwcvt_x_x_v_i16m2(q8_3, vl), vl); - - vint32m1_t isum0 = __riscv_vredsum_vs_i32m4_i32m1(__riscv_vadd_vv_i32m4(s0, s1, vl), vzero, vl); - vint32m1_t isum1 = __riscv_vredsum_vs_i32m4_i32m1(__riscv_vadd_vv_i32m4(s2, s3, vl), isum0, vl); - - isum += __riscv_vmv_x_s_i32m1_i32(isum1); - - q2+=32; q8+=128; is=8; - - } - - sumf += dall * isum; - - } - - *s = sumf; - -#else - - float sumf = 0; - - for (int i = 0; i < nb; ++i) { - - const uint8_t * q2 = x[i].qs; - const int8_t * q8 = y[i].qs; - const uint8_t * sc = x[i].scales; - - int summs = 0; - for (int j = 0; j < 16; ++j) { - summs += y[i].bsums[j] * (sc[j] >> 4); - } - - const float dall = y[i].d * GGML_FP16_TO_FP32(x[i].d); - const float dmin = y[i].d * GGML_FP16_TO_FP32(x[i].dmin); - - int isum = 0; - int is = 0; - int d; - for (int k = 0; k < QK_K/128; ++k) { - int shift = 0; - for (int j = 0; j < 4; ++j) { - d = sc[is++] & 0xF; - int isuml = 0; - for (int l = 0; l < 16; ++l) isuml += q8[l] * ((q2[l] >> shift) & 3); - isum += d * isuml; - d = sc[is++] & 0xF; - isuml = 0; - for (int l = 16; l < 32; ++l) isuml += q8[l] * ((q2[l] >> shift) & 3); - isum += d * isuml; - shift += 2; - q8 += 32; - } - q2 += 32; - } - sumf += dall * isum - dmin * summs; - } - *s = sumf; -#endif -} - -#else - -void ggml_vec_dot_q2_K_q8_K(int n, float * restrict s, size_t bs, const void * restrict vx, size_t bx, const void * restrict vy, size_t by, int nrc) { - assert(nrc == 1); - UNUSED(nrc); - UNUSED(bx); - UNUSED(by); - UNUSED(bs); - - const block_q2_K * restrict x = vx; - const block_q8_K * restrict y = vy; - - const int nb = n / QK_K; - -#ifdef __ARM_NEON - const uint8x16_t m3 = vdupq_n_u8(0x3); - - const int32x4_t vzero = vdupq_n_s32(0); - - ggml_int8x16x4_t q2bytes; - - uint32_t aux32[2]; - const uint8_t * scales = (const uint8_t *)aux32; - - float sum = 0; - - for (int i = 0; i < nb; ++i) { - - const float d = y[i].d * GGML_FP16_TO_FP32(x[i].d); - const float dmin = -y[i].d * GGML_FP16_TO_FP32(x[i].dmin); - - const uint8_t * restrict q2 = x[i].qs; - const int8_t * restrict q8 = y[i].qs; - const uint32_t * restrict sc = (const uint32_t *)x[i].scales; - - aux32[0] = sc[0] & 0x0f0f0f0f; - aux32[1] = (sc[0] >> 4) & 0x0f0f0f0f; - - sum += dmin * (scales[4] * y[i].bsums[0] + scales[5] * y[i].bsums[1] + scales[6] * y[i].bsums[2] + scales[7] * y[i].bsums[3]); - - int isum1 = 0, isum2 = 0; - - const uint8x16_t q2bits = vld1q_u8(q2); - - const ggml_int8x16x4_t q8bytes = ggml_vld1q_s8_x4(q8); - - q2bytes.val[0] = vreinterpretq_s8_u8(vandq_u8(q2bits, m3)); - q2bytes.val[1] = vreinterpretq_s8_u8(vandq_u8(vshrq_n_u8(q2bits, 2), m3)); - q2bytes.val[2] = vreinterpretq_s8_u8(vandq_u8(vshrq_n_u8(q2bits, 4), m3)); - q2bytes.val[3] = vreinterpretq_s8_u8(vandq_u8(vshrq_n_u8(q2bits, 6), m3)); - - isum1 += vaddvq_s32(ggml_vdotq_s32(vzero, q2bytes.val[0], q8bytes.val[0])) * scales[0]; - isum2 += vaddvq_s32(ggml_vdotq_s32(vzero, q2bytes.val[1], q8bytes.val[1])) * scales[1]; - isum1 += vaddvq_s32(ggml_vdotq_s32(vzero, q2bytes.val[2], q8bytes.val[2])) * scales[2]; - isum2 += vaddvq_s32(ggml_vdotq_s32(vzero, q2bytes.val[3], q8bytes.val[3])) * scales[3]; - - sum += d * (isum1 + isum2); - } - - *s = sum; - -#elif defined __AVX2__ - - const __m256i m3 = _mm256_set1_epi8(3); - - __m256 acc = _mm256_setzero_ps(); - - uint32_t ud, um; - const uint8_t * restrict db = (const uint8_t *)&ud; - const uint8_t * restrict mb = (const uint8_t *)&um; - - float summs = 0; - - // TODO: optimize this - - for (int i = 0; i < nb; ++i) { - - const float d = y[i].d * GGML_FP16_TO_FP32(x[i].d); - const float dmin = -y[i].d * GGML_FP16_TO_FP32(x[i].dmin); - - const uint8_t * restrict q2 = x[i].qs; - const int8_t * restrict q8 = y[i].qs; - - const uint32_t * restrict sc = (const uint32_t *)x[i].scales; - ud = (sc[0] >> 0) & 0x0f0f0f0f; - um = (sc[0] >> 4) & 0x0f0f0f0f; - - int32_t smin = mb[0] * y[i].bsums[0] + mb[1] * y[i].bsums[1] + mb[2] * y[i].bsums[2] + mb[3] * y[i].bsums[3]; - summs += dmin * smin; - - const __m128i q2bits = _mm_loadu_si128((const __m128i*)q2); - const __m256i q2_0 = _mm256_and_si256(MM256_SET_M128I(_mm_srli_epi16(q2bits, 2), q2bits), m3); - const __m256i q2_1 = _mm256_and_si256(MM256_SET_M128I(_mm_srli_epi16(q2bits, 6), _mm_srli_epi16(q2bits, 4)), m3); - - const __m256i q8_0 = _mm256_loadu_si256((const __m256i*)(q8+ 0)); - const __m256i q8_1 = _mm256_loadu_si256((const __m256i*)(q8+32)); - - const __m256i p0 = _mm256_maddubs_epi16(q2_0, q8_0); - const __m256i p1 = _mm256_maddubs_epi16(q2_1, q8_1); - - const __m256i p_0 = _mm256_cvtepi16_epi32(_mm256_extracti128_si256(p0, 0)); - const __m256i p_1 = _mm256_cvtepi16_epi32(_mm256_extracti128_si256(p0, 1)); - const __m256i p_2 = _mm256_cvtepi16_epi32(_mm256_extracti128_si256(p1, 0)); - const __m256i p_3 = _mm256_cvtepi16_epi32(_mm256_extracti128_si256(p1, 1)); - - acc = _mm256_fmadd_ps(_mm256_set1_ps(d * db[0]), _mm256_cvtepi32_ps(p_0), acc); - acc = _mm256_fmadd_ps(_mm256_set1_ps(d * db[1]), _mm256_cvtepi32_ps(p_1), acc); - acc = _mm256_fmadd_ps(_mm256_set1_ps(d * db[2]), _mm256_cvtepi32_ps(p_2), acc); - acc = _mm256_fmadd_ps(_mm256_set1_ps(d * db[3]), _mm256_cvtepi32_ps(p_3), acc); - } - - *s = hsum_float_8(acc) + summs; - -#elif defined __AVX__ - - const __m128i m3 = _mm_set1_epi8(3); - - __m256 acc = _mm256_setzero_ps(); - - uint32_t ud, um; - const uint8_t * restrict db = (const uint8_t *)&ud; - const uint8_t * restrict mb = (const uint8_t *)&um; - - float summs = 0; - - // TODO: optimize this - - for (int i = 0; i < nb; ++i) { - - const float d = y[i].d * GGML_FP16_TO_FP32(x[i].d); - const float dmin = -y[i].d * GGML_FP16_TO_FP32(x[i].dmin); - - const uint8_t * restrict q2 = x[i].qs; - const int8_t * restrict q8 = y[i].qs; - - const uint32_t * restrict sc = (const uint32_t *)x[i].scales; - ud = (sc[0] >> 0) & 0x0f0f0f0f; - um = (sc[0] >> 4) & 0x0f0f0f0f; - - int32_t smin = mb[0] * y[i].bsums[0] + mb[1] * y[i].bsums[1] + mb[2] * y[i].bsums[2] + mb[3] * y[i].bsums[3]; - summs += dmin * smin; - - const __m128i q2bits = _mm_loadu_si128((const __m128i*)q2); - const __m128i q2_0 = _mm_and_si128(q2bits, m3); - const __m128i q2_1 = _mm_and_si128(_mm_srli_epi16(q2bits, 2), m3); - const __m128i q2_2 = _mm_and_si128(_mm_srli_epi16(q2bits, 4), m3); - const __m128i q2_3 = _mm_and_si128(_mm_srli_epi16(q2bits, 6), m3); - - const __m256i q8_0 = _mm256_loadu_si256((const __m256i*)(q8+ 0)); - const __m256i q8_1 = _mm256_loadu_si256((const __m256i*)(q8+32)); - - const __m128i p0 = _mm_maddubs_epi16(q2_0, _mm256_extractf128_si256(q8_0, 0)); - const __m128i p1 = _mm_maddubs_epi16(q2_1, _mm256_extractf128_si256(q8_0, 1)); - const __m128i p2 = _mm_maddubs_epi16(q2_2, _mm256_extractf128_si256(q8_1, 0)); - const __m128i p3 = _mm_maddubs_epi16(q2_3, _mm256_extractf128_si256(q8_1, 1)); - - const __m256i p_0 = MM256_SET_M128I(_mm_cvtepi16_epi32(_mm_unpackhi_epi64(p0, p0)), _mm_cvtepi16_epi32(p0)); - const __m256i p_1 = MM256_SET_M128I(_mm_cvtepi16_epi32(_mm_unpackhi_epi64(p1, p1)), _mm_cvtepi16_epi32(p1)); - const __m256i p_2 = MM256_SET_M128I(_mm_cvtepi16_epi32(_mm_unpackhi_epi64(p2, p2)), _mm_cvtepi16_epi32(p2)); - const __m256i p_3 = MM256_SET_M128I(_mm_cvtepi16_epi32(_mm_unpackhi_epi64(p3, p3)), _mm_cvtepi16_epi32(p3)); - - acc = _mm256_add_ps(_mm256_mul_ps(_mm256_set1_ps(d * db[0]), _mm256_cvtepi32_ps(p_0)), acc); - acc = _mm256_add_ps(_mm256_mul_ps(_mm256_set1_ps(d * db[1]), _mm256_cvtepi32_ps(p_1)), acc); - acc = _mm256_add_ps(_mm256_mul_ps(_mm256_set1_ps(d * db[2]), _mm256_cvtepi32_ps(p_2)), acc); - acc = _mm256_add_ps(_mm256_mul_ps(_mm256_set1_ps(d * db[3]), _mm256_cvtepi32_ps(p_3)), acc); - } - - *s = hsum_float_8(acc) + summs; - -#elif defined __riscv_v_intrinsic - - uint32_t aux32[2]; - const uint8_t * scales = (const uint8_t *)aux32; - - float sumf = 0; - - for (int i = 0; i < nb; ++i) { - - const float d = y[i].d * GGML_FP16_TO_FP32(x[i].d); - const float dmin = -y[i].d * GGML_FP16_TO_FP32(x[i].dmin); - - const uint8_t * restrict q2 = x[i].qs; - const int8_t * restrict q8 = y[i].qs; - const uint32_t * restrict sc = (const uint32_t *)x[i].scales; - - aux32[0] = sc[0] & 0x0f0f0f0f; - aux32[1] = (sc[0] >> 4) & 0x0f0f0f0f; - - sumf += dmin * (scales[4] * y[i].bsums[0] + scales[5] * y[i].bsums[1] + scales[6] * y[i].bsums[2] + scales[7] * y[i].bsums[3]); - - int isum1 = 0; - int isum2 = 0; - - size_t vl = 16; - - vint16m1_t vzero = __riscv_vmv_v_x_i16m1(0, 1); - - // load Q2 - vuint8mf2_t q2_x = __riscv_vle8_v_u8mf2(q2, vl); - - vint8mf2_t q2_0 = __riscv_vreinterpret_v_u8mf2_i8mf2(__riscv_vand_vx_u8mf2(q2_x, 0x03, vl)); - vint8mf2_t q2_1 = __riscv_vreinterpret_v_u8mf2_i8mf2(__riscv_vand_vx_u8mf2(__riscv_vsrl_vx_u8mf2(q2_x, 0x2, vl), 0x03 , vl)); - vint8mf2_t q2_2 = __riscv_vreinterpret_v_u8mf2_i8mf2(__riscv_vand_vx_u8mf2(__riscv_vsrl_vx_u8mf2(q2_x, 0x4, vl), 0x03 , vl)); - vint8mf2_t q2_3 = __riscv_vreinterpret_v_u8mf2_i8mf2(__riscv_vand_vx_u8mf2(__riscv_vsrl_vx_u8mf2(q2_x, 0x6, vl), 0x03 , vl)); - - // load Q8, and take product with Q2 - vint16m1_t p0 = __riscv_vwmul_vv_i16m1(q2_0, __riscv_vle8_v_i8mf2(q8, vl), vl); - vint16m1_t p1 = __riscv_vwmul_vv_i16m1(q2_1, __riscv_vle8_v_i8mf2(q8+16, vl), vl); - vint16m1_t p2 = __riscv_vwmul_vv_i16m1(q2_2, __riscv_vle8_v_i8mf2(q8+32, vl), vl); - vint16m1_t p3 = __riscv_vwmul_vv_i16m1(q2_3, __riscv_vle8_v_i8mf2(q8+48, vl), vl); - - vint16m1_t vs_0 = __riscv_vredsum_vs_i16m1_i16m1(p0, vzero, vl); - vint16m1_t vs_1 = __riscv_vredsum_vs_i16m1_i16m1(p1, vzero, vl); - vint16m1_t vs_2 = __riscv_vredsum_vs_i16m1_i16m1(p2, vzero, vl); - vint16m1_t vs_3 = __riscv_vredsum_vs_i16m1_i16m1(p3, vzero, vl); - - isum1 += __riscv_vmv_x_s_i16m1_i16(vs_0) * scales[0]; - isum2 += __riscv_vmv_x_s_i16m1_i16(vs_1) * scales[1]; - isum1 += __riscv_vmv_x_s_i16m1_i16(vs_2) * scales[2]; - isum2 += __riscv_vmv_x_s_i16m1_i16(vs_3) * scales[3]; - - sumf += d * (isum1 + isum2); - - } - - *s = sumf; - -#else - - float sumf = 0; - - int isum[QK_K/16]; - - for (int i = 0; i < nb; ++i) { - - const uint8_t * q2 = x[i].qs; - const int8_t * q8 = y[i].qs; - const uint8_t * sc = x[i].scales; - - int summs = 0; - for (int j = 0; j < QK_K/16; ++j) { - summs += y[i].bsums[j] * (sc[j] >> 4); - } - - const float dall = y[i].d * GGML_FP16_TO_FP32(x[i].d); - const float dmin = y[i].d * GGML_FP16_TO_FP32(x[i].dmin); - - memset(isum, 0, (QK_K/16)*sizeof(int)); - for (int l = 0; l < 16; ++l) { - isum[0] += q8[l+ 0] * ((q2[l] >> 0) & 3); - isum[1] += q8[l+16] * ((q2[l] >> 2) & 3); - isum[2] += q8[l+32] * ((q2[l] >> 4) & 3); - isum[3] += q8[l+48] * ((q2[l] >> 6) & 3); - } - for (int l = 0; l < QK_K/16; ++l) { - isum[l] *= (sc[l] & 0xF); - } - sumf += dall * (isum[0] + isum[1] + isum[2] + isum[3]) - dmin * summs; - } - *s = sumf; -#endif -} -#endif - -#if QK_K == 256 -void ggml_vec_dot_q3_K_q8_K(int n, float * restrict s, size_t bs, const void * restrict vx, size_t bx, const void * restrict vy, size_t by, int nrc) { - assert(n % QK_K == 0); - assert(nrc == 1); - UNUSED(nrc); - UNUSED(bx); - UNUSED(by); - UNUSED(bs); - - const uint32_t kmask1 = 0x03030303; - const uint32_t kmask2 = 0x0f0f0f0f; - - const block_q3_K * restrict x = vx; - const block_q8_K * restrict y = vy; - - const int nb = n / QK_K; - -#ifdef __ARM_NEON - - uint32_t aux[3]; - uint32_t utmp[4]; - - const uint8x16_t m3b = vdupq_n_u8(0x3); - const int32x4_t vzero = vdupq_n_s32(0); - - const uint8x16_t m0 = vdupq_n_u8(1); - const uint8x16_t m1 = vshlq_n_u8(m0, 1); - const uint8x16_t m2 = vshlq_n_u8(m0, 2); - const uint8x16_t m3 = vshlq_n_u8(m0, 3); - const int8_t m32 = 32; - - ggml_int8x16x4_t q3bytes; - - float sum = 0; - - for (int i = 0; i < nb; ++i) { - - const float d = y[i].d * GGML_FP16_TO_FP32(x[i].d); - - const uint8_t * restrict q3 = x[i].qs; - const uint8_t * restrict qh = x[i].hmask; - const int8_t * restrict q8 = y[i].qs; - - ggml_uint8x16x2_t qhbits = ggml_vld1q_u8_x2(qh); - - ggml_uint8x16x4_t q3h; - - int32_t isum = 0; - - // Set up scales - memcpy(aux, x[i].scales, 12); - utmp[3] = ((aux[1] >> 4) & kmask2) | (((aux[2] >> 6) & kmask1) << 4); - utmp[2] = ((aux[0] >> 4) & kmask2) | (((aux[2] >> 4) & kmask1) << 4); - utmp[1] = (aux[1] & kmask2) | (((aux[2] >> 2) & kmask1) << 4); - utmp[0] = (aux[0] & kmask2) | (((aux[2] >> 0) & kmask1) << 4); - - int8_t * scale = (int8_t *)utmp; - for (int j = 0; j < 16; ++j) scale[j] -= m32; - - for (int j = 0; j < QK_K/128; ++j) { - - const ggml_uint8x16x2_t q3bits = ggml_vld1q_u8_x2(q3); q3 += 32; - const ggml_int8x16x4_t q8bytes_1 = ggml_vld1q_s8_x4(q8); q8 += 64; - const ggml_int8x16x4_t q8bytes_2 = ggml_vld1q_s8_x4(q8); q8 += 64; - - q3h.val[0] = vshlq_n_u8(vbicq_u8(m0, qhbits.val[0]), 2); - q3h.val[1] = vshlq_n_u8(vbicq_u8(m0, qhbits.val[1]), 2); - q3h.val[2] = vshlq_n_u8(vbicq_u8(m1, qhbits.val[0]), 1); - q3h.val[3] = vshlq_n_u8(vbicq_u8(m1, qhbits.val[1]), 1); - - q3bytes.val[0] = vsubq_s8(vreinterpretq_s8_u8(vandq_u8(q3bits.val[0], m3b)), vreinterpretq_s8_u8(q3h.val[0])); - q3bytes.val[1] = vsubq_s8(vreinterpretq_s8_u8(vandq_u8(q3bits.val[1], m3b)), vreinterpretq_s8_u8(q3h.val[1])); - q3bytes.val[2] = vsubq_s8(vreinterpretq_s8_u8(vandq_u8(vshrq_n_u8(q3bits.val[0], 2), m3b)), vreinterpretq_s8_u8(q3h.val[2])); - q3bytes.val[3] = vsubq_s8(vreinterpretq_s8_u8(vandq_u8(vshrq_n_u8(q3bits.val[1], 2), m3b)), vreinterpretq_s8_u8(q3h.val[3])); - - isum += vaddvq_s32(ggml_vdotq_s32(vzero, q3bytes.val[0], q8bytes_1.val[0])) * scale[0]; - isum += vaddvq_s32(ggml_vdotq_s32(vzero, q3bytes.val[1], q8bytes_1.val[1])) * scale[1]; - isum += vaddvq_s32(ggml_vdotq_s32(vzero, q3bytes.val[2], q8bytes_1.val[2])) * scale[2]; - isum += vaddvq_s32(ggml_vdotq_s32(vzero, q3bytes.val[3], q8bytes_1.val[3])) * scale[3]; - - scale += 4; - - q3h.val[0] = vbicq_u8(m2, qhbits.val[0]); - q3h.val[1] = vbicq_u8(m2, qhbits.val[1]); - q3h.val[2] = vshrq_n_u8(vbicq_u8(m3, qhbits.val[0]), 1); - q3h.val[3] = vshrq_n_u8(vbicq_u8(m3, qhbits.val[1]), 1); - - q3bytes.val[0] = vsubq_s8(vreinterpretq_s8_u8(vandq_u8(vshrq_n_u8(q3bits.val[0], 4), m3b)), vreinterpretq_s8_u8(q3h.val[0])); - q3bytes.val[1] = vsubq_s8(vreinterpretq_s8_u8(vandq_u8(vshrq_n_u8(q3bits.val[1], 4), m3b)), vreinterpretq_s8_u8(q3h.val[1])); - q3bytes.val[2] = vsubq_s8(vreinterpretq_s8_u8(vandq_u8(vshrq_n_u8(q3bits.val[0], 6), m3b)), vreinterpretq_s8_u8(q3h.val[2])); - q3bytes.val[3] = vsubq_s8(vreinterpretq_s8_u8(vandq_u8(vshrq_n_u8(q3bits.val[1], 6), m3b)), vreinterpretq_s8_u8(q3h.val[3])); - - isum += vaddvq_s32(ggml_vdotq_s32(vzero, q3bytes.val[0], q8bytes_2.val[0])) * scale[0]; - isum += vaddvq_s32(ggml_vdotq_s32(vzero, q3bytes.val[1], q8bytes_2.val[1])) * scale[1]; - isum += vaddvq_s32(ggml_vdotq_s32(vzero, q3bytes.val[2], q8bytes_2.val[2])) * scale[2]; - isum += vaddvq_s32(ggml_vdotq_s32(vzero, q3bytes.val[3], q8bytes_2.val[3])) * scale[3]; - - scale += 4; - - if (j == 0) { - qhbits.val[0] = vshrq_n_u8(qhbits.val[0], 4); - qhbits.val[1] = vshrq_n_u8(qhbits.val[1], 4); - } - - } - sum += d * isum; - - } - - *s = sum; - -#elif defined __AVX2__ - - const __m256i m3 = _mm256_set1_epi8(3); - const __m256i mone = _mm256_set1_epi8(1); - const __m128i m32 = _mm_set1_epi8(32); - - __m256 acc = _mm256_setzero_ps(); - - uint32_t aux[3]; - - for (int i = 0; i < nb; ++i) { - - const float d = y[i].d * GGML_FP16_TO_FP32(x[i].d); - - const uint8_t * restrict q3 = x[i].qs; - const int8_t * restrict q8 = y[i].qs; - - // Set up scales - memcpy(aux, x[i].scales, 12); - __m128i scales128 = _mm_set_epi32( - ((aux[1] >> 4) & kmask2) | (((aux[2] >> 6) & kmask1) << 4), - ((aux[0] >> 4) & kmask2) | (((aux[2] >> 4) & kmask1) << 4), - (aux[1] & kmask2) | (((aux[2] >> 2) & kmask1) << 4), - (aux[0] & kmask2) | (((aux[2] >> 0) & kmask1) << 4)); - scales128 = _mm_sub_epi8(scales128, m32); - const __m256i all_scales = _mm256_cvtepi8_epi16(scales128); - const __m128i l_scales = _mm256_extracti128_si256(all_scales, 0); - const __m128i h_scales = _mm256_extracti128_si256(all_scales, 1); - const __m256i scales[2] = {MM256_SET_M128I(l_scales, l_scales), MM256_SET_M128I(h_scales, h_scales)}; - - // high bit - const __m256i hbits = _mm256_loadu_si256((const __m256i*)x[i].hmask); - - // integer accumulator - __m256i sumi = _mm256_setzero_si256(); - - int bit = 0; - int is = 0; - - for (int j = 0; j < QK_K/128; ++j) { - // load low 2 bits - const __m256i q3bits = _mm256_loadu_si256((const __m256i*)q3); q3 += 32; - - // prepare low and high bits - const __m256i q3l_0 = _mm256_and_si256(q3bits, m3); - const __m256i q3h_0 = _mm256_slli_epi16(_mm256_srli_epi16(_mm256_andnot_si256(hbits, _mm256_slli_epi16(mone, bit)), bit), 2); - ++bit; - - const __m256i q3l_1 = _mm256_and_si256(_mm256_srli_epi16(q3bits, 2), m3); - const __m256i q3h_1 = _mm256_slli_epi16(_mm256_srli_epi16(_mm256_andnot_si256(hbits, _mm256_slli_epi16(mone, bit)), bit), 2); - ++bit; - - const __m256i q3l_2 = _mm256_and_si256(_mm256_srli_epi16(q3bits, 4), m3); - const __m256i q3h_2 = _mm256_slli_epi16(_mm256_srli_epi16(_mm256_andnot_si256(hbits, _mm256_slli_epi16(mone, bit)), bit), 2); - ++bit; - - const __m256i q3l_3 = _mm256_and_si256(_mm256_srli_epi16(q3bits, 6), m3); - const __m256i q3h_3 = _mm256_slli_epi16(_mm256_srli_epi16(_mm256_andnot_si256(hbits, _mm256_slli_epi16(mone, bit)), bit), 2); - ++bit; - - // load Q8 quants - const __m256i q8_0 = _mm256_loadu_si256((const __m256i*)q8); q8 += 32; - const __m256i q8_1 = _mm256_loadu_si256((const __m256i*)q8); q8 += 32; - const __m256i q8_2 = _mm256_loadu_si256((const __m256i*)q8); q8 += 32; - const __m256i q8_3 = _mm256_loadu_si256((const __m256i*)q8); q8 += 32; - - // Dot product: we multiply the 2 low bits and 1 high bit part separately, so we can use _mm256_maddubs_epi16, - // and then subtract. The high bit part has the 2 already subtracted (and so, it is zero if the high bit was not set, - // and 2 if the high bit was set) - __m256i q8s_0 = _mm256_maddubs_epi16(q3h_0, q8_0); - __m256i q8s_1 = _mm256_maddubs_epi16(q3h_1, q8_1); - __m256i q8s_2 = _mm256_maddubs_epi16(q3h_2, q8_2); - __m256i q8s_3 = _mm256_maddubs_epi16(q3h_3, q8_3); - - __m256i p16_0 = _mm256_maddubs_epi16(q3l_0, q8_0); - __m256i p16_1 = _mm256_maddubs_epi16(q3l_1, q8_1); - __m256i p16_2 = _mm256_maddubs_epi16(q3l_2, q8_2); - __m256i p16_3 = _mm256_maddubs_epi16(q3l_3, q8_3); - - p16_0 = _mm256_sub_epi16(p16_0, q8s_0); - p16_1 = _mm256_sub_epi16(p16_1, q8s_1); - p16_2 = _mm256_sub_epi16(p16_2, q8s_2); - p16_3 = _mm256_sub_epi16(p16_3, q8s_3); - - // multiply with scales - p16_0 = _mm256_madd_epi16(_mm256_shuffle_epi8(scales[j], get_scale_shuffle_q3k(is + 0)), p16_0); - p16_1 = _mm256_madd_epi16(_mm256_shuffle_epi8(scales[j], get_scale_shuffle_q3k(is + 1)), p16_1); - p16_2 = _mm256_madd_epi16(_mm256_shuffle_epi8(scales[j], get_scale_shuffle_q3k(is + 2)), p16_2); - p16_3 = _mm256_madd_epi16(_mm256_shuffle_epi8(scales[j], get_scale_shuffle_q3k(is + 3)), p16_3); - - // accumulate - p16_0 = _mm256_add_epi32(p16_0, p16_1); - p16_2 = _mm256_add_epi32(p16_2, p16_3); - sumi = _mm256_add_epi32(sumi, _mm256_add_epi32(p16_0, p16_2)); - - } - - // multiply with block scale and accumulate - acc = _mm256_fmadd_ps(_mm256_broadcast_ss(&d), _mm256_cvtepi32_ps(sumi), acc); - - } - - *s = hsum_float_8(acc); - -#elif defined __AVX__ - - const __m128i m3 = _mm_set1_epi8(3); - const __m128i mone = _mm_set1_epi8(1); - const __m128i m32 = _mm_set1_epi8(32); - const __m128i m2 = _mm_set1_epi8(2); - - __m256 acc = _mm256_setzero_ps(); - - const uint32_t *aux; - - for (int i = 0; i < nb; ++i) { - - const float d = y[i].d * GGML_FP16_TO_FP32(x[i].d); - - const uint8_t * restrict q3 = x[i].qs; - const int8_t * restrict q8 = y[i].qs; - - // Set up scales - aux = (const uint32_t *)x[i].scales; - __m128i scales128 = _mm_set_epi32( - ((aux[1] >> 4) & kmask2) | (((aux[2] >> 6) & kmask1) << 4), - ((aux[0] >> 4) & kmask2) | (((aux[2] >> 4) & kmask1) << 4), - (aux[1] & kmask2) | (((aux[2] >> 2) & kmask1) << 4), - (aux[0] & kmask2) | (((aux[2] >> 0) & kmask1) << 4)); - scales128 = _mm_sub_epi8(scales128, m32); - const __m128i scales_0 = _mm_cvtepi8_epi16(scales128); - const __m128i scales_1 = _mm_cvtepi8_epi16(_mm_unpackhi_epi64(scales128, scales128)); - const __m128i scales[2] = { scales_0, scales_1 }; - - // high bit *128*2 from block_q3_K.hmask[QK_K/8] - const __m128i hbits_0 = _mm_loadu_si128((const __m128i*)&x[i].hmask[0]); - const __m128i hbits_1 = _mm_loadu_si128((const __m128i*)&x[i].hmask[16]); - - // integer accumulator - __m128i sumi_0 = _mm_setzero_si128(); - __m128i sumi_1 = _mm_setzero_si128(); - - for (int j = 0; j < QK_K/128; ++j) { - // load low 2 bits *64*2 from block_q3_K.qs[QK_K/4] - const __m128i q3bits_0 = _mm_loadu_si128((const __m128i*)q3); q3 += 16; - const __m128i q3bits_1 = _mm_loadu_si128((const __m128i*)q3); q3 += 16; - - // prepare low and high bits - const int bit = j << 2; - - const __m128i q3l_0 = _mm_and_si128(q3bits_0, m3); - const __m128i q3l_1 = _mm_and_si128(q3bits_1, m3); - const __m128i q3h_0 = _mm_slli_epi16(_mm_srli_epi16(_mm_andnot_si128(hbits_0, _mm_slli_epi16(mone, bit)), bit), 2); - const __m128i q3h_1 = _mm_slli_epi16(_mm_srli_epi16(_mm_andnot_si128(hbits_1, _mm_slli_epi16(mone, bit)), bit), 2); - - const __m128i q3l_2 = _mm_and_si128(_mm_srli_epi16(q3bits_0, 2), m3); - const __m128i q3l_3 = _mm_and_si128(_mm_srli_epi16(q3bits_1, 2), m3); - const __m128i q3h_2 = _mm_slli_epi16(_mm_srli_epi16(_mm_andnot_si128(hbits_0, _mm_slli_epi16(mone, bit+1)), bit+1), 2); - const __m128i q3h_3 = _mm_slli_epi16(_mm_srli_epi16(_mm_andnot_si128(hbits_1, _mm_slli_epi16(mone, bit+1)), bit+1), 2); - - const __m128i q3l_4 = _mm_and_si128(_mm_srli_epi16(q3bits_0, 4), m3); - const __m128i q3l_5 = _mm_and_si128(_mm_srli_epi16(q3bits_1, 4), m3); - const __m128i q3h_4 = _mm_slli_epi16(_mm_srli_epi16(_mm_andnot_si128(hbits_0, _mm_slli_epi16(mone, bit+2)), bit+2), 2); - const __m128i q3h_5 = _mm_slli_epi16(_mm_srli_epi16(_mm_andnot_si128(hbits_1, _mm_slli_epi16(mone, bit+2)), bit+2), 2); - - const __m128i q3l_6 = _mm_and_si128(_mm_srli_epi16(q3bits_0, 6), m3); - const __m128i q3l_7 = _mm_and_si128(_mm_srli_epi16(q3bits_1, 6), m3); - const __m128i q3h_6 = _mm_slli_epi16(_mm_srli_epi16(_mm_andnot_si128(hbits_0, _mm_slli_epi16(mone, bit+3)), bit+3), 2); - const __m128i q3h_7 = _mm_slli_epi16(_mm_srli_epi16(_mm_andnot_si128(hbits_1, _mm_slli_epi16(mone, bit+3)), bit+3), 2); - - // load Q8 quants from block_q8_K.qs[QK_K] - const __m128i q8_0 = _mm_loadu_si128((const __m128i*)q8); q8 += 16; - const __m128i q8_1 = _mm_loadu_si128((const __m128i*)q8); q8 += 16; - const __m128i q8_2 = _mm_loadu_si128((const __m128i*)q8); q8 += 16; - const __m128i q8_3 = _mm_loadu_si128((const __m128i*)q8); q8 += 16; - const __m128i q8_4 = _mm_loadu_si128((const __m128i*)q8); q8 += 16; - const __m128i q8_5 = _mm_loadu_si128((const __m128i*)q8); q8 += 16; - const __m128i q8_6 = _mm_loadu_si128((const __m128i*)q8); q8 += 16; - const __m128i q8_7 = _mm_loadu_si128((const __m128i*)q8); q8 += 16; - - // Dot product: we multiply the 2 low bits and 1 high bit part separately, so we can use _mm256_maddubs_epi16, - // and then subtract. The high bit part has the 2 already subtracted (and so, it is zero if the high bit was not set, - // and 2 if the high bit was set) - __m128i q8s_0 = _mm_maddubs_epi16(q3h_0, q8_0); - __m128i q8s_1 = _mm_maddubs_epi16(q3h_1, q8_1); - __m128i q8s_2 = _mm_maddubs_epi16(q3h_2, q8_2); - __m128i q8s_3 = _mm_maddubs_epi16(q3h_3, q8_3); - __m128i q8s_4 = _mm_maddubs_epi16(q3h_4, q8_4); - __m128i q8s_5 = _mm_maddubs_epi16(q3h_5, q8_5); - __m128i q8s_6 = _mm_maddubs_epi16(q3h_6, q8_6); - __m128i q8s_7 = _mm_maddubs_epi16(q3h_7, q8_7); - - __m128i p16_0 = _mm_maddubs_epi16(q3l_0, q8_0); - __m128i p16_1 = _mm_maddubs_epi16(q3l_1, q8_1); - __m128i p16_2 = _mm_maddubs_epi16(q3l_2, q8_2); - __m128i p16_3 = _mm_maddubs_epi16(q3l_3, q8_3); - __m128i p16_4 = _mm_maddubs_epi16(q3l_4, q8_4); - __m128i p16_5 = _mm_maddubs_epi16(q3l_5, q8_5); - __m128i p16_6 = _mm_maddubs_epi16(q3l_6, q8_6); - __m128i p16_7 = _mm_maddubs_epi16(q3l_7, q8_7); - - p16_0 = _mm_sub_epi16(p16_0, q8s_0); - p16_1 = _mm_sub_epi16(p16_1, q8s_1); - p16_2 = _mm_sub_epi16(p16_2, q8s_2); - p16_3 = _mm_sub_epi16(p16_3, q8s_3); - p16_4 = _mm_sub_epi16(p16_4, q8s_4); - p16_5 = _mm_sub_epi16(p16_5, q8s_5); - p16_6 = _mm_sub_epi16(p16_6, q8s_6); - p16_7 = _mm_sub_epi16(p16_7, q8s_7); - - // multiply with scales - __m128i shuffle = _mm_set1_epi16(0x0100); - p16_0 = _mm_madd_epi16(_mm_shuffle_epi8(scales[j], shuffle), p16_0); - shuffle = _mm_add_epi16(shuffle, m2); - p16_1 = _mm_madd_epi16(_mm_shuffle_epi8(scales[j], shuffle), p16_1); - shuffle = _mm_add_epi16(shuffle, m2); - p16_2 = _mm_madd_epi16(_mm_shuffle_epi8(scales[j], shuffle), p16_2); - shuffle = _mm_add_epi16(shuffle, m2); - p16_3 = _mm_madd_epi16(_mm_shuffle_epi8(scales[j], shuffle), p16_3); - shuffle = _mm_add_epi16(shuffle, m2); - p16_4 = _mm_madd_epi16(_mm_shuffle_epi8(scales[j], shuffle), p16_4); - shuffle = _mm_add_epi16(shuffle, m2); - p16_5 = _mm_madd_epi16(_mm_shuffle_epi8(scales[j], shuffle), p16_5); - shuffle = _mm_add_epi16(shuffle, m2); - p16_6 = _mm_madd_epi16(_mm_shuffle_epi8(scales[j], shuffle), p16_6); - shuffle = _mm_add_epi16(shuffle, m2); - p16_7 = _mm_madd_epi16(_mm_shuffle_epi8(scales[j], shuffle), p16_7); - - // accumulate - p16_0 = _mm_add_epi32(p16_0, p16_1); - p16_2 = _mm_add_epi32(p16_2, p16_3); - p16_4 = _mm_add_epi32(p16_4, p16_5); - p16_6 = _mm_add_epi32(p16_6, p16_7); - sumi_0 = _mm_add_epi32(sumi_0, _mm_add_epi32(p16_0, p16_2)); - sumi_1 = _mm_add_epi32(sumi_1, _mm_add_epi32(p16_4, p16_6)); - - } - - // multiply with block scale and accumulate - __m256i sumi = MM256_SET_M128I(sumi_1, sumi_0); - acc = _mm256_add_ps(_mm256_mul_ps(_mm256_broadcast_ss(&d), _mm256_cvtepi32_ps(sumi)), acc); - - } - - *s = hsum_float_8(acc); - -#elif defined __riscv_v_intrinsic - - uint32_t aux[3]; - uint32_t utmp[4]; - - float sumf = 0; - for (int i = 0; i < nb; ++i) { - - const uint8_t * restrict q3 = x[i].qs; - const uint8_t * restrict qh = x[i].hmask; - const int8_t * restrict q8 = y[i].qs; - - memcpy(aux, x[i].scales, 12); - utmp[3] = ((aux[1] >> 4) & kmask2) | (((aux[2] >> 6) & kmask1) << 4); - utmp[2] = ((aux[0] >> 4) & kmask2) | (((aux[2] >> 4) & kmask1) << 4); - utmp[1] = (aux[1] & kmask2) | (((aux[2] >> 2) & kmask1) << 4); - utmp[0] = (aux[0] & kmask2) | (((aux[2] >> 0) & kmask1) << 4); - - int8_t * scale = (int8_t *)utmp; - for (int j = 0; j < 16; ++j) scale[j] -= 32; - - - size_t vl = 32; - uint8_t m = 1; - - vint32m1_t vzero = __riscv_vmv_v_x_i32m1(0, 1); - vuint8m1_t vqh = __riscv_vle8_v_u8m1(qh, vl); - - int sum_t = 0; - - for (int j = 0; j < QK_K; j += 128) { - - vl = 32; - - // load Q3 - vuint8m1_t q3_x = __riscv_vle8_v_u8m1(q3, vl); - - vint8m1_t q3_0 = __riscv_vreinterpret_v_u8m1_i8m1(__riscv_vand_vx_u8m1(q3_x, 0x03, vl)); - vint8m1_t q3_1 = __riscv_vreinterpret_v_u8m1_i8m1(__riscv_vand_vx_u8m1(__riscv_vsrl_vx_u8m1(q3_x, 0x2, vl), 0x03 , vl)); - vint8m1_t q3_2 = __riscv_vreinterpret_v_u8m1_i8m1(__riscv_vand_vx_u8m1(__riscv_vsrl_vx_u8m1(q3_x, 0x4, vl), 0x03 , vl)); - vint8m1_t q3_3 = __riscv_vreinterpret_v_u8m1_i8m1(__riscv_vand_vx_u8m1(__riscv_vsrl_vx_u8m1(q3_x, 0x6, vl), 0x03 , vl)); - - // compute mask for subtraction - vuint8m1_t qh_m0 = __riscv_vand_vx_u8m1(vqh, m, vl); - vbool8_t vmask_0 = __riscv_vmseq_vx_u8m1_b8(qh_m0, 0, vl); - vint8m1_t q3_m0 = __riscv_vsub_vx_i8m1_m(vmask_0, q3_0, 0x4, vl); - m <<= 1; - - vuint8m1_t qh_m1 = __riscv_vand_vx_u8m1(vqh, m, vl); - vbool8_t vmask_1 = __riscv_vmseq_vx_u8m1_b8(qh_m1, 0, vl); - vint8m1_t q3_m1 = __riscv_vsub_vx_i8m1_m(vmask_1, q3_1, 0x4, vl); - m <<= 1; - - vuint8m1_t qh_m2 = __riscv_vand_vx_u8m1(vqh, m, vl); - vbool8_t vmask_2 = __riscv_vmseq_vx_u8m1_b8(qh_m2, 0, vl); - vint8m1_t q3_m2 = __riscv_vsub_vx_i8m1_m(vmask_2, q3_2, 0x4, vl); - m <<= 1; - - vuint8m1_t qh_m3 = __riscv_vand_vx_u8m1(vqh, m, vl); - vbool8_t vmask_3 = __riscv_vmseq_vx_u8m1_b8(qh_m3, 0, vl); - vint8m1_t q3_m3 = __riscv_vsub_vx_i8m1_m(vmask_3, q3_3, 0x4, vl); - m <<= 1; - - // load Q8 and take product with Q3 - vint16m2_t a0 = __riscv_vwmul_vv_i16m2(q3_m0, __riscv_vle8_v_i8m1(q8, vl), vl); - vint16m2_t a1 = __riscv_vwmul_vv_i16m2(q3_m1, __riscv_vle8_v_i8m1(q8+32, vl), vl); - vint16m2_t a2 = __riscv_vwmul_vv_i16m2(q3_m2, __riscv_vle8_v_i8m1(q8+64, vl), vl); - vint16m2_t a3 = __riscv_vwmul_vv_i16m2(q3_m3, __riscv_vle8_v_i8m1(q8+96, vl), vl); - - vl = 16; - - // retrieve lane to multiply with scale - vint32m2_t aux0_0 = __riscv_vwmul_vx_i32m2(__riscv_vget_v_i16m2_i16m1(a0, 0), (scale[0]), vl); - vint32m2_t aux0_1 = __riscv_vwmul_vx_i32m2(__riscv_vget_v_i16m2_i16m1(a0, 1), (scale[1]), vl); - vint32m2_t aux1_0 = __riscv_vwmul_vx_i32m2(__riscv_vget_v_i16m2_i16m1(a1, 0), (scale[2]), vl); - vint32m2_t aux1_1 = __riscv_vwmul_vx_i32m2(__riscv_vget_v_i16m2_i16m1(a1, 1), (scale[3]), vl); - vint32m2_t aux2_0 = __riscv_vwmul_vx_i32m2(__riscv_vget_v_i16m2_i16m1(a2, 0), (scale[4]), vl); - vint32m2_t aux2_1 = __riscv_vwmul_vx_i32m2(__riscv_vget_v_i16m2_i16m1(a2, 1), (scale[5]), vl); - vint32m2_t aux3_0 = __riscv_vwmul_vx_i32m2(__riscv_vget_v_i16m2_i16m1(a3, 0), (scale[6]), vl); - vint32m2_t aux3_1 = __riscv_vwmul_vx_i32m2(__riscv_vget_v_i16m2_i16m1(a3, 1), (scale[7]), vl); - - vint32m1_t isum0 = __riscv_vredsum_vs_i32m2_i32m1(__riscv_vadd_vv_i32m2(aux0_0, aux0_1, vl), vzero, vl); - vint32m1_t isum1 = __riscv_vredsum_vs_i32m2_i32m1(__riscv_vadd_vv_i32m2(aux1_0, aux1_1, vl), isum0, vl); - vint32m1_t isum2 = __riscv_vredsum_vs_i32m2_i32m1(__riscv_vadd_vv_i32m2(aux2_0, aux2_1, vl), isum1, vl); - vint32m1_t isum3 = __riscv_vredsum_vs_i32m2_i32m1(__riscv_vadd_vv_i32m2(aux3_0, aux3_1, vl), isum2, vl); - - sum_t += __riscv_vmv_x_s_i32m1_i32(isum3); - - q3 += 32; q8 += 128; scale += 8; - - } - - const float d = GGML_FP16_TO_FP32(x[i].d) * y[i].d; - - sumf += d*sum_t; - - } - - *s = sumf; - -#else - // scalar version - // This function is written like this so the compiler can manage to vectorize most of it - // Using -Ofast, GCC and clang manage to produce code that is within a factor of 2 or so from the - // manually vectorized version above. Every other version I tried would run at least 4 times slower. - // The ideal situation would be if we could just write the code once, and the compiler would - // automatically produce the best possible set of machine instructions, instead of us having to manually - // write vectorized versions for AVX, ARM_NEON, etc. - - int8_t aux8[QK_K]; - int16_t aux16[8]; - float sums [8]; - int32_t aux32[8]; - memset(sums, 0, 8*sizeof(float)); - - uint32_t auxs[4]; - const int8_t * scales = (const int8_t*)auxs; - - float sumf = 0; - for (int i = 0; i < nb; ++i) { - const uint8_t * restrict q3 = x[i].qs; - const uint8_t * restrict hm = x[i].hmask; - const int8_t * restrict q8 = y[i].qs; - memset(aux32, 0, 8*sizeof(int32_t)); - int8_t * restrict a = aux8; - uint8_t m = 1; - for (int j = 0; j < QK_K; j += 128) { - for (int l = 0; l < 32; ++l) a[l] = q3[l] & 3; - for (int l = 0; l < 32; ++l) a[l] -= (hm[l] & m ? 0 : 4); - a += 32; m <<= 1; - for (int l = 0; l < 32; ++l) a[l] = (q3[l] >> 2) & 3; - for (int l = 0; l < 32; ++l) a[l] -= (hm[l] & m ? 0 : 4); - a += 32; m <<= 1; - for (int l = 0; l < 32; ++l) a[l] = (q3[l] >> 4) & 3; - for (int l = 0; l < 32; ++l) a[l] -= (hm[l] & m ? 0 : 4); - a += 32; m <<= 1; - for (int l = 0; l < 32; ++l) a[l] = (q3[l] >> 6) & 3; - for (int l = 0; l < 32; ++l) a[l] -= (hm[l] & m ? 0 : 4); - a += 32; m <<= 1; - q3 += 32; - } - a = aux8; - - memcpy(auxs, x[i].scales, 12); - uint32_t tmp = auxs[2]; - auxs[2] = ((auxs[0] >> 4) & kmask2) | (((tmp >> 4) & kmask1) << 4); - auxs[3] = ((auxs[1] >> 4) & kmask2) | (((tmp >> 6) & kmask1) << 4); - auxs[0] = (auxs[0] & kmask2) | (((tmp >> 0) & kmask1) << 4); - auxs[1] = (auxs[1] & kmask2) | (((tmp >> 2) & kmask1) << 4); - for (int j = 0; j < QK_K/16; ++j) { - for (int l = 0; l < 8; ++l) aux16[l] = q8[l] * a[l]; - for (int l = 0; l < 8; ++l) aux32[l] += (scales[j] - 32) * aux16[l]; - q8 += 8; a += 8; - for (int l = 0; l < 8; ++l) aux16[l] = q8[l] * a[l]; - for (int l = 0; l < 8; ++l) aux32[l] += (scales[j] - 32) * aux16[l]; - q8 += 8; a += 8; - } - const float d = GGML_FP16_TO_FP32(x[i].d) * y[i].d; - for (int l = 0; l < 8; ++l) sums[l] += d * aux32[l]; - } - for (int l = 0; l < 8; ++l) sumf += sums[l]; - *s = sumf; - -#endif - -} - -#else - -void ggml_vec_dot_q3_K_q8_K(int n, float * restrict s, size_t bs, const void * restrict vx, size_t bx, const void * restrict vy, size_t by, int nrc) { - assert(n % QK_K == 0); - assert(nrc == 1); - UNUSED(nrc); - UNUSED(bx); - UNUSED(by); - UNUSED(bs); - - const block_q3_K * restrict x = vx; - const block_q8_K * restrict y = vy; - - const int nb = n / QK_K; - -#ifdef __ARM_NEON - const int32x4_t vzero = vdupq_n_s32(0); - - const uint8x16_t m3b = vdupq_n_u8(0x3); - const uint8x16_t mh = vdupq_n_u8(4); - - ggml_int8x16x4_t q3bytes; - - uint16_t aux16[2]; - int8_t * scales = (int8_t *)aux16; - - float sum = 0; - - for (int i = 0; i < nb; ++i) { - - ggml_uint8x16x4_t q3h; - - const uint8x8_t hbits = vld1_u8(x[i].hmask); - const uint8x16_t q3bits = vld1q_u8(x[i].qs); - const ggml_int8x16x4_t q8bytes = ggml_vld1q_s8_x4(y[i].qs); - - const uint16_t a = *(const uint16_t *)x[i].scales; - aux16[0] = a & 0x0f0f; - aux16[1] = (a >> 4) & 0x0f0f; - - for (int j = 0; j < 4; ++j) scales[j] -= 8; - - int32_t isum = -4*(scales[0] * y[i].bsums[0] + scales[2] * y[i].bsums[1] + scales[1] * y[i].bsums[2] + scales[3] * y[i].bsums[3]); - - const float d = y[i].d * GGML_FP16_TO_FP32(x[i].d); - - const uint8x16_t htmp = vcombine_u8(hbits, vshr_n_u8(hbits, 1)); - q3h.val[0] = vandq_u8(mh, vshlq_n_u8(htmp, 2)); - q3h.val[1] = vandq_u8(mh, htmp); - q3h.val[2] = vandq_u8(mh, vshrq_n_u8(htmp, 2)); - q3h.val[3] = vandq_u8(mh, vshrq_n_u8(htmp, 4)); - - q3bytes.val[0] = vreinterpretq_s8_u8(vorrq_u8(vandq_u8(q3bits, m3b), q3h.val[0])); - q3bytes.val[1] = vreinterpretq_s8_u8(vorrq_u8(vandq_u8(vshrq_n_u8(q3bits, 2), m3b), q3h.val[1])); - q3bytes.val[2] = vreinterpretq_s8_u8(vorrq_u8(vandq_u8(vshrq_n_u8(q3bits, 4), m3b), q3h.val[2])); - q3bytes.val[3] = vreinterpretq_s8_u8(vorrq_u8(vshrq_n_u8(q3bits, 6), q3h.val[3])); - - isum += vaddvq_s32(ggml_vdotq_s32(vzero, q3bytes.val[0], q8bytes.val[0])) * scales[0]; - isum += vaddvq_s32(ggml_vdotq_s32(vzero, q3bytes.val[1], q8bytes.val[1])) * scales[2]; - isum += vaddvq_s32(ggml_vdotq_s32(vzero, q3bytes.val[2], q8bytes.val[2])) * scales[1]; - isum += vaddvq_s32(ggml_vdotq_s32(vzero, q3bytes.val[3], q8bytes.val[3])) * scales[3]; - - sum += d * isum; - - } - - *s = sum; - -#elif defined __AVX2__ - - const __m256i m3 = _mm256_set1_epi8(3); - const __m256i m1 = _mm256_set1_epi8(1); - - __m256 acc = _mm256_setzero_ps(); - - uint64_t aux64; - - uint16_t aux16[2]; - const int8_t * aux8 = (const int8_t *)aux16; - - for (int i = 0; i < nb; ++i) { - - const float d = y[i].d * GGML_FP16_TO_FP32(x[i].d); - - const uint8_t * restrict q3 = x[i].qs; - const int8_t * restrict q8 = y[i].qs; - - const uint16_t a = *(const uint16_t *)x[i].scales; - aux16[0] = a & 0x0f0f; - aux16[1] = (a >> 4) & 0x0f0f; - - const __m256i scale_0 = MM256_SET_M128I(_mm_set1_epi16(aux8[2] - 8), _mm_set1_epi16(aux8[0] - 8)); - const __m256i scale_1 = MM256_SET_M128I(_mm_set1_epi16(aux8[3] - 8), _mm_set1_epi16(aux8[1] - 8)); - - memcpy(&aux64, x[i].hmask, 8); - - const __m128i haux = _mm_set_epi64x(aux64 >> 1, aux64 >> 0); - __m256i q3h_0 = MM256_SET_M128I(_mm_srli_epi16(haux, 2), haux); - __m256i q3h_1 = _mm256_srli_epi16(q3h_0, 4); - q3h_0 = _mm256_slli_epi16(_mm256_andnot_si256(q3h_0, m1), 2); - q3h_1 = _mm256_slli_epi16(_mm256_andnot_si256(q3h_1, m1), 2); - - // load low 2 bits - const __m128i q3bits = _mm_loadu_si128((const __m128i*)q3); - - // prepare low and high bits - const __m256i q3aux = MM256_SET_M128I(_mm_srli_epi16(q3bits, 2), q3bits); - const __m256i q3l_0 = _mm256_and_si256(q3aux, m3); - const __m256i q3l_1 = _mm256_and_si256(_mm256_srli_epi16(q3aux, 4), m3); - - // load Q8 quants - const __m256i q8_0 = _mm256_loadu_si256((const __m256i*)(q8+ 0)); - const __m256i q8_1 = _mm256_loadu_si256((const __m256i*)(q8+32)); - - // Dot product: we multiply the 2 low bits and 1 high bit part separately, so we can use _mm256_maddubs_epi16, - // and then subtract. The high bit part has the 2 already subtracted (and so, it is zero if the high bit was not set, - // and 2 if the high bit was set) - const __m256i q8s_0 = _mm256_maddubs_epi16(q3h_0, q8_0); - const __m256i q8s_1 = _mm256_maddubs_epi16(q3h_1, q8_1); - - __m256i p16_0 = _mm256_maddubs_epi16(q3l_0, q8_0); - __m256i p16_1 = _mm256_maddubs_epi16(q3l_1, q8_1); - - p16_0 = _mm256_sub_epi16(p16_0, q8s_0); - p16_1 = _mm256_sub_epi16(p16_1, q8s_1); - - // multiply with scales - p16_0 = _mm256_madd_epi16(scale_0, p16_0); - p16_1 = _mm256_madd_epi16(scale_1, p16_1); - - p16_0 = _mm256_add_epi32(p16_0, p16_1); - - // multiply with block scale and accumulate - acc = _mm256_fmadd_ps(_mm256_broadcast_ss(&d), _mm256_cvtepi32_ps(p16_0), acc); - - } - - *s = hsum_float_8(acc); - -#elif defined __AVX__ - - const __m128i m3 = _mm_set1_epi8(3); - const __m128i m1 = _mm_set1_epi8(1); - - __m256 acc = _mm256_setzero_ps(); - - uint64_t aux64; - - uint16_t aux16[2]; - const int8_t * aux8 = (const int8_t *)aux16; - - for (int i = 0; i < nb; ++i) { - - const float d = y[i].d * GGML_FP16_TO_FP32(x[i].d); - - const uint8_t * restrict q3 = x[i].qs; - const int8_t * restrict q8 = y[i].qs; - - const uint16_t a = *(const uint16_t *)x[i].scales; - aux16[0] = a & 0x0f0f; - aux16[1] = (a >> 4) & 0x0f0f; - - const __m128i scale_0 = _mm_set1_epi16(aux8[0] - 8); - const __m128i scale_1 = _mm_set1_epi16(aux8[2] - 8); - const __m128i scale_2 = _mm_set1_epi16(aux8[1] - 8); - const __m128i scale_3 = _mm_set1_epi16(aux8[3] - 8); - - memcpy(&aux64, x[i].hmask, 8); - - __m128i q3h_0 = _mm_set_epi64x(aux64 >> 1, aux64 >> 0); - __m128i q3h_1 = _mm_srli_epi16(q3h_0, 2); - __m128i q3h_2 = _mm_srli_epi16(q3h_0, 4); - __m128i q3h_3 = _mm_srli_epi16(q3h_0, 6); - q3h_0 = _mm_slli_epi16(_mm_andnot_si128(q3h_0, m1), 2); - q3h_1 = _mm_slli_epi16(_mm_andnot_si128(q3h_1, m1), 2); - q3h_2 = _mm_slli_epi16(_mm_andnot_si128(q3h_2, m1), 2); - q3h_3 = _mm_slli_epi16(_mm_andnot_si128(q3h_3, m1), 2); - - // load low 2 bits - const __m128i q3bits = _mm_loadu_si128((const __m128i*)q3); - - // prepare low and high bits - const __m128i q3l_0 = _mm_and_si128(q3bits, m3); - const __m128i q3l_1 = _mm_and_si128(_mm_srli_epi16(q3bits, 2), m3); - const __m128i q3l_2 = _mm_and_si128(_mm_srli_epi16(q3bits, 4), m3); - const __m128i q3l_3 = _mm_and_si128(_mm_srli_epi16(q3bits, 6), m3); - - // load Q8 quants - const __m256i q8_0 = _mm256_loadu_si256((const __m256i*)(q8+ 0)); - const __m256i q8_1 = _mm256_loadu_si256((const __m256i*)(q8+32)); - - // Dot product: we multiply the 2 low bits and 1 high bit part separately, so we can use _mm_maddubs_epi16, - // and then subtract. The high bit part has the 2 already subtracted (and so, it is zero if the high bit was not set, - // and 2 if the high bit was set) - const __m128i q8s_0 = _mm_maddubs_epi16(q3h_0, _mm256_extractf128_si256(q8_0, 0)); - const __m128i q8s_1 = _mm_maddubs_epi16(q3h_1, _mm256_extractf128_si256(q8_0, 1)); - const __m128i q8s_2 = _mm_maddubs_epi16(q3h_2, _mm256_extractf128_si256(q8_1, 0)); - const __m128i q8s_3 = _mm_maddubs_epi16(q3h_3, _mm256_extractf128_si256(q8_1, 1)); - - __m128i p16_0 = _mm_maddubs_epi16(q3l_0, _mm256_extractf128_si256(q8_0, 0)); - __m128i p16_1 = _mm_maddubs_epi16(q3l_1, _mm256_extractf128_si256(q8_0, 1)); - __m128i p16_2 = _mm_maddubs_epi16(q3l_2, _mm256_extractf128_si256(q8_1, 0)); - __m128i p16_3 = _mm_maddubs_epi16(q3l_3, _mm256_extractf128_si256(q8_1, 1)); - - p16_0 = _mm_sub_epi16(p16_0, q8s_0); - p16_1 = _mm_sub_epi16(p16_1, q8s_1); - p16_2 = _mm_sub_epi16(p16_2, q8s_2); - p16_3 = _mm_sub_epi16(p16_3, q8s_3); - - // multiply with scales - p16_0 = _mm_madd_epi16(scale_0, p16_0); - p16_1 = _mm_madd_epi16(scale_1, p16_1); - p16_2 = _mm_madd_epi16(scale_2, p16_2); - p16_3 = _mm_madd_epi16(scale_3, p16_3); - - p16_0 = _mm_add_epi32(p16_0, p16_2); - p16_1 = _mm_add_epi32(p16_1, p16_3); - __m256i p16 = MM256_SET_M128I(p16_1, p16_0); - - // multiply with block scale and accumulate - acc = _mm256_add_ps(_mm256_mul_ps(_mm256_broadcast_ss(&d), _mm256_cvtepi32_ps(p16)), acc); - - } - - *s = hsum_float_8(acc); - -#elif defined __riscv_v_intrinsic - - uint16_t aux16[2]; - int8_t * scales = (int8_t *)aux16; - - float sumf = 0; - - for (int i = 0; i < nb; ++i) { - - const uint8_t * restrict q3 = x[i].qs; - const int8_t * restrict q8 = y[i].qs; - - const uint16_t a = *(const uint16_t *)x[i].scales; - aux16[0] = a & 0x0f0f; - aux16[1] = (a >> 4) & 0x0f0f; - - for (int j = 0; j < 4; ++j) scales[j] -= 8; - - int32_t isum = -4*(scales[0] * y[i].bsums[0] + scales[2] * y[i].bsums[1] + scales[1] * y[i].bsums[2] + scales[3] * y[i].bsums[3]); - - const float d = y[i].d * GGML_FP16_TO_FP32(x[i].d); - - vint32m1_t vzero = __riscv_vmv_v_x_i32m1(0, 1); - - // load qh - vuint8mf4_t qh_x1 = __riscv_vle8_v_u8mf4(x[i].hmask, 8); - vuint8mf2_t qh_x2 = __riscv_vlmul_ext_v_u8mf4_u8mf2(__riscv_vsrl_vx_u8mf4(qh_x1, 1, 8)); - - size_t vl = 16; - - // extend and combine both qh_x1 and qh_x2 - vuint8mf2_t qh_x = __riscv_vslideup_vx_u8mf2(__riscv_vlmul_ext_v_u8mf4_u8mf2(qh_x1), qh_x2, vl/2, vl); - - vuint8mf2_t qh_0 = __riscv_vand_vx_u8mf2(__riscv_vsll_vx_u8mf2(qh_x, 0x2, vl), 0x4, vl); - vuint8mf2_t qh_1 = __riscv_vand_vx_u8mf2(qh_x, 0x4, vl); - vuint8mf2_t qh_2 = __riscv_vand_vx_u8mf2(__riscv_vsrl_vx_u8mf2(qh_x, 0x2, vl), 0x4, vl); - vuint8mf2_t qh_3 = __riscv_vand_vx_u8mf2(__riscv_vsrl_vx_u8mf2(qh_x, 0x4, vl), 0x4, vl); - - // load Q3 - vuint8mf2_t q3_x = __riscv_vle8_v_u8mf2(q3, vl); - - vuint8mf2_t q3h_0 = __riscv_vor_vv_u8mf2(__riscv_vand_vx_u8mf2(q3_x, 0x3, vl), qh_0, vl); - vuint8mf2_t q3h_1 = __riscv_vor_vv_u8mf2(__riscv_vand_vx_u8mf2(__riscv_vsrl_vx_u8mf2(q3_x, 2, vl), 0x3, vl), qh_1, vl); - vuint8mf2_t q3h_2 = __riscv_vor_vv_u8mf2(__riscv_vand_vx_u8mf2(__riscv_vsrl_vx_u8mf2(q3_x, 4, vl), 0x3, vl), qh_2, vl); - vuint8mf2_t q3h_3 = __riscv_vor_vv_u8mf2(__riscv_vsrl_vx_u8mf2(q3_x, 0x6, vl), qh_3, vl); - - vint8mf2_t q3_0 = __riscv_vreinterpret_v_u8mf2_i8mf2(q3h_0); - vint8mf2_t q3_1 = __riscv_vreinterpret_v_u8mf2_i8mf2(q3h_1); - vint8mf2_t q3_2 = __riscv_vreinterpret_v_u8mf2_i8mf2(q3h_2); - vint8mf2_t q3_3 = __riscv_vreinterpret_v_u8mf2_i8mf2(q3h_3); - - // load Q8 and take product with Q3 - vint16m1_t p0 = __riscv_vwmul_vv_i16m1(q3_0, __riscv_vle8_v_i8mf2(q8, vl), vl); - vint16m1_t p1 = __riscv_vwmul_vv_i16m1(q3_1, __riscv_vle8_v_i8mf2(q8+16, vl), vl); - vint16m1_t p2 = __riscv_vwmul_vv_i16m1(q3_2, __riscv_vle8_v_i8mf2(q8+32, vl), vl); - vint16m1_t p3 = __riscv_vwmul_vv_i16m1(q3_3, __riscv_vle8_v_i8mf2(q8+48, vl), vl); - - vint32m1_t vs_0 = __riscv_vwredsum_vs_i16m1_i32m1(p0, vzero, vl); - vint32m1_t vs_1 = __riscv_vwredsum_vs_i16m1_i32m1(p1, vzero, vl); - vint32m1_t vs_2 = __riscv_vwredsum_vs_i16m1_i32m1(p2, vzero, vl); - vint32m1_t vs_3 = __riscv_vwredsum_vs_i16m1_i32m1(p3, vzero, vl); - - isum += __riscv_vmv_x_s_i32m1_i32(vs_0) * scales[0]; - isum += __riscv_vmv_x_s_i32m1_i32(vs_1) * scales[2]; - isum += __riscv_vmv_x_s_i32m1_i32(vs_2) * scales[1]; - isum += __riscv_vmv_x_s_i32m1_i32(vs_3) * scales[3]; - - sumf += d * isum; - - } - - *s = sumf; - -#else - - int8_t aux8[QK_K]; - int16_t aux16[8]; - float sums [8]; - int32_t aux32[8]; - int32_t scales[4]; - memset(sums, 0, 8*sizeof(float)); - - float sumf = 0; - for (int i = 0; i < nb; ++i) { - const uint8_t * restrict q3 = x[i].qs; - const uint8_t * restrict hm = x[i].hmask; - const int8_t * restrict q8 = y[i].qs; - int8_t * restrict a = aux8; - for (int l = 0; l < 8; ++l) { - a[l+ 0] = (int8_t)((q3[l+0] >> 0) & 3) - (hm[l] & 0x01 ? 0 : 4); - a[l+ 8] = (int8_t)((q3[l+8] >> 0) & 3) - (hm[l] & 0x02 ? 0 : 4); - a[l+16] = (int8_t)((q3[l+0] >> 2) & 3) - (hm[l] & 0x04 ? 0 : 4); - a[l+24] = (int8_t)((q3[l+8] >> 2) & 3) - (hm[l] & 0x08 ? 0 : 4); - a[l+32] = (int8_t)((q3[l+0] >> 4) & 3) - (hm[l] & 0x10 ? 0 : 4); - a[l+40] = (int8_t)((q3[l+8] >> 4) & 3) - (hm[l] & 0x20 ? 0 : 4); - a[l+48] = (int8_t)((q3[l+0] >> 6) & 3) - (hm[l] & 0x40 ? 0 : 4); - a[l+56] = (int8_t)((q3[l+8] >> 6) & 3) - (hm[l] & 0x80 ? 0 : 4); - } - - scales[0] = (x[i].scales[0] & 0xF) - 8; - scales[1] = (x[i].scales[0] >> 4) - 8; - scales[2] = (x[i].scales[1] & 0xF) - 8; - scales[3] = (x[i].scales[1] >> 4) - 8; - - memset(aux32, 0, 8*sizeof(int32_t)); - for (int j = 0; j < QK_K/16; ++j) { - for (int l = 0; l < 8; ++l) aux16[l] = q8[l] * a[l]; - q8 += 8; a += 8; - for (int l = 0; l < 8; ++l) aux16[l] += q8[l] * a[l]; - q8 += 8; a += 8; - for (int l = 0; l < 8; ++l) aux32[l] += scales[j] * aux16[l]; - } - const float d = GGML_FP16_TO_FP32(x[i].d) * y[i].d; - for (int l = 0; l < 8; ++l) sums[l] += d * aux32[l]; - } - for (int l = 0; l < 8; ++l) sumf += sums[l]; - *s = sumf; - -#endif - -} -#endif - -#if QK_K == 256 -void ggml_vec_dot_q4_K_q8_K(int n, float * restrict s, size_t bs, const void * restrict vx, size_t bx, const void * restrict vy, size_t by, int nrc) { - assert(n % QK_K == 0); - assert(nrc == 1); - UNUSED(nrc); - UNUSED(bx); - UNUSED(by); - UNUSED(bs); - - const block_q4_K * restrict x = vx; - const block_q8_K * restrict y = vy; - - const int nb = n / QK_K; - - static const uint32_t kmask1 = 0x3f3f3f3f; - static const uint32_t kmask2 = 0x0f0f0f0f; - static const uint32_t kmask3 = 0x03030303; - - uint32_t utmp[4]; - -#ifdef __ARM_NEON - const uint8x16_t m4b = vdupq_n_u8(0xf); - const int32x4_t mzero = vdupq_n_s32(0); - - ggml_int8x16x2_t q4bytes; - ggml_int8x16x2_t q8bytes; - - float sumf = 0; - - for (int i = 0; i < nb; ++i) { - - const float d = y[i].d * GGML_FP16_TO_FP32(x[i].d); - const float dmin = y[i].d * GGML_FP16_TO_FP32(x[i].dmin); - - const int16x8_t q8sums = vpaddq_s16(vld1q_s16(y[i].bsums), vld1q_s16(y[i].bsums + 8)); - - memcpy(utmp, x[i].scales, 12); - - uint32x2_t mins8 = { 0 }; - mins8 = vset_lane_u32(utmp[1] & kmask1, mins8, 0); - mins8 = vset_lane_u32(((utmp[2] >> 4) & kmask2) | (((utmp[1] >> 6) & kmask3) << 4), mins8, 1); - - utmp[1] = (utmp[2] & kmask2) | (((utmp[0] >> 6) & kmask3) << 4); - utmp[0] &= kmask1; - - const int16x8_t mins = vreinterpretq_s16_u16(vmovl_u8(vreinterpret_u8_u32(mins8))); - const int32x4_t prod = vaddq_s32(vmull_s16(vget_low_s16 (q8sums), vget_low_s16 (mins)), - vmull_s16(vget_high_s16(q8sums), vget_high_s16(mins))); - sumf -= dmin * vaddvq_s32(prod); - - const uint8_t * scales = (const uint8_t *)utmp; - - const uint8_t * restrict q4 = x[i].qs; - const int8_t * restrict q8 = y[i].qs; - - int32_t sumi1 = 0; - int32_t sumi2 = 0; - - for (int j = 0; j < QK_K/64; ++j) { - const ggml_uint8x16x2_t q4bits = ggml_vld1q_u8_x2(q4); q4 += 32; - - q8bytes = ggml_vld1q_s8_x2(q8); q8 += 32; - q4bytes.val[0] = vreinterpretq_s8_u8(vandq_u8 (q4bits.val[0], m4b)); - q4bytes.val[1] = vreinterpretq_s8_u8(vandq_u8 (q4bits.val[1], m4b)); - - const int32x4_t p1 = ggml_vdotq_s32(ggml_vdotq_s32(mzero, q4bytes.val[0], q8bytes.val[0]), q4bytes.val[1], q8bytes.val[1]); - sumi1 += vaddvq_s32(p1) * scales[2*j+0]; - - q8bytes = ggml_vld1q_s8_x2(q8); q8 += 32; - q4bytes.val[0] = vreinterpretq_s8_u8(vshrq_n_u8(q4bits.val[0], 4)); - q4bytes.val[1] = vreinterpretq_s8_u8(vshrq_n_u8(q4bits.val[1], 4)); - - const int32x4_t p2 = ggml_vdotq_s32(ggml_vdotq_s32(mzero, q4bytes.val[0], q8bytes.val[0]), q4bytes.val[1], q8bytes.val[1]); - - sumi2 += vaddvq_s32(p2) * scales[2*j+1]; - } - - sumf += d * (sumi1 + sumi2); - - } - - *s = sumf; - -#elif defined __AVX2__ - - const __m256i m4 = _mm256_set1_epi8(0xF); - - __m256 acc = _mm256_setzero_ps(); - __m128 acc_m = _mm_setzero_ps(); - - for (int i = 0; i < nb; ++i) { - - const float d = y[i].d * GGML_FP16_TO_FP32(x[i].d); - const float dmin = -y[i].d * GGML_FP16_TO_FP32(x[i].dmin); - - memcpy(utmp, x[i].scales, 12); - utmp[3] = ((utmp[2] >> 4) & kmask2) | (((utmp[1] >> 6) & kmask3) << 4); - const uint32_t uaux = utmp[1] & kmask1; - utmp[1] = (utmp[2] & kmask2) | (((utmp[0] >> 6) & kmask3) << 4); - utmp[2] = uaux; - utmp[0] &= kmask1; - - const uint8_t * restrict q4 = x[i].qs; - const int8_t * restrict q8 = y[i].qs; - - const __m256i mins_and_scales = _mm256_cvtepu8_epi16(_mm_set_epi32(utmp[3], utmp[2], utmp[1], utmp[0])); - - const __m256i q8sums = _mm256_loadu_si256((const __m256i*)y[i].bsums); - const __m128i q8s = _mm_hadd_epi16(_mm256_extracti128_si256(q8sums, 0), _mm256_extracti128_si256(q8sums, 1)); - const __m128i prod = _mm_madd_epi16(_mm256_extracti128_si256(mins_and_scales, 1), q8s); - acc_m = _mm_fmadd_ps(_mm_set1_ps(dmin), _mm_cvtepi32_ps(prod), acc_m); - - const __m128i sc128 = _mm256_extracti128_si256(mins_and_scales, 0); - const __m256i scales = MM256_SET_M128I(sc128, sc128); - - __m256i sumi = _mm256_setzero_si256(); - - for (int j = 0; j < QK_K/64; ++j) { - - const __m256i scale_l = _mm256_shuffle_epi8(scales, get_scale_shuffle_k4(2*j+0)); - const __m256i scale_h = _mm256_shuffle_epi8(scales, get_scale_shuffle_k4(2*j+1)); - - const __m256i q4bits = _mm256_loadu_si256((const __m256i*)q4); q4 += 32; - const __m256i q4l = _mm256_and_si256(q4bits, m4); - const __m256i q4h = _mm256_and_si256(_mm256_srli_epi16(q4bits, 4), m4); - - const __m256i q8l = _mm256_loadu_si256((const __m256i*)q8); q8 += 32; - __m256i p16l = _mm256_maddubs_epi16(q4l, q8l); - p16l = _mm256_madd_epi16(scale_l, p16l); - - const __m256i q8h = _mm256_loadu_si256((const __m256i*)q8); q8 += 32; - __m256i p16h = _mm256_maddubs_epi16(q4h, q8h); - p16h = _mm256_madd_epi16(scale_h, p16h); - const __m256i sumj = _mm256_add_epi32(p16l, p16h); - - sumi = _mm256_add_epi32(sumi, sumj); - } - - __m256 vd = _mm256_set1_ps(d); - acc = _mm256_fmadd_ps(vd, _mm256_cvtepi32_ps(sumi), acc); - - } - - acc_m = _mm_add_ps(acc_m, _mm_movehl_ps(acc_m, acc_m)); - acc_m = _mm_add_ss(acc_m, _mm_movehdup_ps(acc_m)); - - *s = hsum_float_8(acc) + _mm_cvtss_f32(acc_m); - -#elif defined __AVX__ - - const __m128i m4 = _mm_set1_epi8(0xF); - const __m128i m2 = _mm_set1_epi8(0x2); - - __m256 acc = _mm256_setzero_ps(); - __m128 acc_m = _mm_setzero_ps(); - - for (int i = 0; i < nb; ++i) { - - const float d = y[i].d * GGML_FP16_TO_FP32(x[i].d); - const float dmin = -y[i].d * GGML_FP16_TO_FP32(x[i].dmin); - - const uint8_t * restrict q4 = x[i].qs; - const int8_t * restrict q8 = y[i].qs; - - memcpy(utmp, x[i].scales, 12); - utmp[3] = ((utmp[2] >> 4) & kmask2) | (((utmp[1] >> 6) & kmask3) << 4); - const uint32_t uaux = utmp[1] & kmask1; - utmp[1] = (utmp[2] & kmask2) | (((utmp[0] >> 6) & kmask3) << 4); - utmp[2] = uaux; - utmp[0] &= kmask1; - - const __m128i utmps = _mm_set_epi32(utmp[3], utmp[2], utmp[1], utmp[0]); - const __m128i scales = _mm_cvtepu8_epi16(utmps); - const __m128i mins = _mm_cvtepu8_epi16(_mm_unpackhi_epi64(utmps, utmps)); - - const __m128i q8sums_0 = _mm_loadu_si128((const __m128i*)&y[i].bsums[0]); - const __m128i q8sums_1 = _mm_loadu_si128((const __m128i*)&y[i].bsums[8]); - const __m128i q8s = _mm_hadd_epi16(q8sums_0, q8sums_1); - const __m128i prod = _mm_madd_epi16(mins, q8s); - acc_m = _mm_add_ps(_mm_mul_ps(_mm_set1_ps(dmin), _mm_cvtepi32_ps(prod)), acc_m); - - __m128i sumi_0 = _mm_setzero_si128(); - __m128i sumi_1 = _mm_setzero_si128(); - - __m128i shuffle = _mm_set1_epi16(0x0100); - for (int j = 0; j < QK_K/64; ++j) { - - const __m128i scale_l = _mm_shuffle_epi8(scales, shuffle); - shuffle = _mm_add_epi16(shuffle, m2); - const __m128i scale_h = _mm_shuffle_epi8(scales, shuffle); - shuffle = _mm_add_epi16(shuffle, m2); - - __m128i q4bits = _mm_loadu_si128((const __m128i*)q4); q4 += 16; - const __m128i q4l_0 = _mm_and_si128(q4bits, m4); - const __m128i q4h_0 = _mm_and_si128(_mm_srli_epi16(q4bits, 4), m4); - q4bits = _mm_loadu_si128((const __m128i*)q4); q4 += 16; - const __m128i q4l_1 = _mm_and_si128(q4bits, m4); - const __m128i q4h_1 = _mm_and_si128(_mm_srli_epi16(q4bits, 4), m4); - - const __m128i q8l_0 = _mm_loadu_si128((const __m128i*)q8); q8 += 16; - __m128i p16l = _mm_maddubs_epi16(q4l_0, q8l_0); - p16l = _mm_madd_epi16(scale_l, p16l); - sumi_0 = _mm_add_epi32(sumi_0, p16l); - const __m128i q8l_1 = _mm_loadu_si128((const __m128i*)q8); q8 += 16; - p16l = _mm_maddubs_epi16(q4l_1, q8l_1); - p16l = _mm_madd_epi16(scale_l, p16l); - sumi_1 = _mm_add_epi32(sumi_1, p16l); - - const __m128i q8h_0 = _mm_loadu_si128((const __m128i*)q8); q8 += 16; - __m128i p16h = _mm_maddubs_epi16(q4h_0, q8h_0); - p16h = _mm_madd_epi16(scale_h, p16h); - sumi_0 = _mm_add_epi32(sumi_0, p16h); - const __m128i q8h_1 = _mm_loadu_si128((const __m128i*)q8); q8 += 16; - p16h = _mm_maddubs_epi16(q4h_1, q8h_1); - p16h = _mm_madd_epi16(scale_h, p16h); - sumi_1 = _mm_add_epi32(sumi_1, p16h); - - } - - __m256 vd = _mm256_set1_ps(d); - __m256i sumi = MM256_SET_M128I(sumi_1, sumi_0); - acc = _mm256_add_ps(_mm256_mul_ps(vd, _mm256_cvtepi32_ps(sumi)), acc); - - } - - acc_m = _mm_add_ps(acc_m, _mm_movehl_ps(acc_m, acc_m)); - acc_m = _mm_add_ss(acc_m, _mm_movehdup_ps(acc_m)); - - *s = hsum_float_8(acc) + _mm_cvtss_f32(acc_m); - -#elif defined __riscv_v_intrinsic - - const uint8_t * scales = (const uint8_t*)&utmp[0]; - const uint8_t * mins = (const uint8_t*)&utmp[2]; - - float sumf = 0; - - for (int i = 0; i < nb; ++i) { - - size_t vl = 8; - - const float d = y[i].d * GGML_FP16_TO_FP32(x[i].d); - const float dmin = y[i].d * GGML_FP16_TO_FP32(x[i].dmin); - - vint16mf2_t q8sums_0 = __riscv_vlse16_v_i16mf2(y[i].bsums, 4, vl); - vint16mf2_t q8sums_1 = __riscv_vlse16_v_i16mf2(y[i].bsums+1, 4, vl); - vint16mf2_t q8sums = __riscv_vadd_vv_i16mf2(q8sums_0, q8sums_1, vl); - - memcpy(utmp, x[i].scales, 12); - utmp[3] = ((utmp[2] >> 4) & kmask2) | (((utmp[1] >> 6) & kmask3) << 4); - const uint32_t uaux = utmp[1] & kmask1; - utmp[1] = (utmp[2] & kmask2) | (((utmp[0] >> 6) & kmask3) << 4); - utmp[2] = uaux; - utmp[0] &= kmask1; - - vuint8mf4_t mins8 = __riscv_vle8_v_u8mf4(mins, vl); - vint16mf2_t v_mins = __riscv_vreinterpret_v_u16mf2_i16mf2(__riscv_vzext_vf2_u16mf2(mins8, vl)); - vint32m1_t prod = __riscv_vwmul_vv_i32m1(q8sums, v_mins, vl); - - vint32m1_t sumi = __riscv_vredsum_vs_i32m1_i32m1(prod, __riscv_vmv_v_x_i32m1(0, 1), vl); - sumf -= dmin * __riscv_vmv_x_s_i32m1_i32(sumi); - - const uint8_t * restrict q4 = x[i].qs; - const int8_t * restrict q8 = y[i].qs; - - vl = 32; - - int32_t sum_1 = 0; - int32_t sum_2 = 0; - - vint16m1_t vzero = __riscv_vmv_v_x_i16m1(0, 1); - - for (int j = 0; j < QK_K/64; ++j) { - // load Q4 - vuint8m1_t q4_x = __riscv_vle8_v_u8m1(q4, vl); - - // load Q8 and multiply it with lower Q4 nibble - vint8m1_t q8_0 = __riscv_vle8_v_i8m1(q8, vl); - vint8m1_t q4_0 = __riscv_vreinterpret_v_u8m1_i8m1(__riscv_vand_vx_u8m1(q4_x, 0x0F, vl)); - vint16m2_t qv_0 = __riscv_vwmul_vv_i16m2(q4_0, q8_0, vl); - vint16m1_t vs_0 = __riscv_vredsum_vs_i16m2_i16m1(qv_0, vzero, vl); - - sum_1 += __riscv_vmv_x_s_i16m1_i16(vs_0) * scales[2*j+0]; - - // load Q8 and multiply it with upper Q4 nibble - vint8m1_t q8_1 = __riscv_vle8_v_i8m1(q8+32, vl); - vint8m1_t q4_1 = __riscv_vreinterpret_v_u8m1_i8m1(__riscv_vsrl_vx_u8m1(q4_x, 0x04, vl)); - vint16m2_t qv_1 = __riscv_vwmul_vv_i16m2(q4_1, q8_1, vl); - vint16m1_t vs_1 = __riscv_vredsum_vs_i16m2_i16m1(qv_1, vzero, vl); - - sum_2 += __riscv_vmv_x_s_i16m1_i16(vs_1) * scales[2*j+1]; - - q4 += 32; q8 += 64; - - } - - sumf += d*(sum_1 + sum_2); - - } - - *s = sumf; - -#else - - - const uint8_t * scales = (const uint8_t*)&utmp[0]; - const uint8_t * mins = (const uint8_t*)&utmp[2]; - - int8_t aux8[QK_K]; - int16_t aux16[8]; - float sums [8]; - int32_t aux32[8]; - memset(sums, 0, 8*sizeof(float)); - - float sumf = 0; - for (int i = 0; i < nb; ++i) { - const uint8_t * restrict q4 = x[i].qs; - const int8_t * restrict q8 = y[i].qs; - memset(aux32, 0, 8*sizeof(int32_t)); - int8_t * restrict a = aux8; - for (int j = 0; j < QK_K/64; ++j) { - for (int l = 0; l < 32; ++l) a[l] = (int8_t)(q4[l] & 0xF); - a += 32; - for (int l = 0; l < 32; ++l) a[l] = (int8_t)(q4[l] >> 4); - a += 32; q4 += 32; - } - memcpy(utmp, x[i].scales, 12); - utmp[3] = ((utmp[2] >> 4) & kmask2) | (((utmp[1] >> 6) & kmask3) << 4); - const uint32_t uaux = utmp[1] & kmask1; - utmp[1] = (utmp[2] & kmask2) | (((utmp[0] >> 6) & kmask3) << 4); - utmp[2] = uaux; - utmp[0] &= kmask1; - - int sumi = 0; - for (int j = 0; j < QK_K/16; ++j) sumi += y[i].bsums[j] * mins[j/2]; - a = aux8; - int is = 0; - for (int j = 0; j < QK_K/32; ++j) { - int32_t scale = scales[is++]; - for (int l = 0; l < 8; ++l) aux16[l] = q8[l] * a[l]; - for (int l = 0; l < 8; ++l) aux32[l] += scale * aux16[l]; - q8 += 8; a += 8; - for (int l = 0; l < 8; ++l) aux16[l] = q8[l] * a[l]; - for (int l = 0; l < 8; ++l) aux32[l] += scale * aux16[l]; - q8 += 8; a += 8; - for (int l = 0; l < 8; ++l) aux16[l] = q8[l] * a[l]; - for (int l = 0; l < 8; ++l) aux32[l] += scale * aux16[l]; - q8 += 8; a += 8; - for (int l = 0; l < 8; ++l) aux16[l] = q8[l] * a[l]; - for (int l = 0; l < 8; ++l) aux32[l] += scale * aux16[l]; - q8 += 8; a += 8; - } - const float d = GGML_FP16_TO_FP32(x[i].d) * y[i].d; - for (int l = 0; l < 8; ++l) sums[l] += d * aux32[l]; - const float dmin = GGML_FP16_TO_FP32(x[i].dmin) * y[i].d; - sumf -= dmin * sumi; - } - for (int l = 0; l < 8; ++l) sumf += sums[l]; - *s = sumf; -#endif -} -#else -void ggml_vec_dot_q4_K_q8_K(int n, float * restrict s, size_t bs, const void * restrict vx, size_t bx, const void * restrict vy, size_t by, int nrc) { - assert(n % QK_K == 0); - assert(nrc == 1); - UNUSED(nrc); - UNUSED(bx); - UNUSED(by); - UNUSED(bs); - - const block_q4_K * restrict x = vx; - const block_q8_K * restrict y = vy; - - const int nb = n / QK_K; - -#ifdef __ARM_NEON - const uint8x16_t m4b = vdupq_n_u8(0xf); - - const int32x4_t mzero = vdupq_n_s32(0); - - float sumf = 0; - - ggml_int8x16x2_t q4bytes; - ggml_int8x16x4_t q8bytes; - - float sum_mins = 0.f; - - uint16_t aux16[2]; - const uint8_t * restrict scales = (const uint8_t *)aux16; - - for (int i = 0; i < nb; ++i) { - - const uint8_t * restrict q4 = x[i].qs; - const int8_t * restrict q8 = y[i].qs; - - const uint16_t * restrict a = (const uint16_t *)x[i].scales; - aux16[0] = a[0] & 0x0f0f; - aux16[1] = (a[0] >> 4) & 0x0f0f; - - const int32_t summi = scales[2] * (y[i].bsums[0] + y[i].bsums[1]) + scales[3] * (y[i].bsums[2] + y[i].bsums[3]); - sum_mins += y[i].d * GGML_FP16_TO_FP32(x[i].d[1]) * summi; - - const float d = y[i].d * GGML_FP16_TO_FP32(x[i].d[0]); - - const ggml_uint8x16x2_t q4bits = ggml_vld1q_u8_x2(q4); - - q8bytes = ggml_vld1q_s8_x4(q8); - q4bytes.val[0] = vreinterpretq_s8_u8(vandq_u8 (q4bits.val[0], m4b)); - q4bytes.val[1] = vreinterpretq_s8_u8(vandq_u8 (q4bits.val[1], m4b)); - - const int32x4_t p1 = ggml_vdotq_s32(ggml_vdotq_s32(mzero, q4bytes.val[0], q8bytes.val[0]), q4bytes.val[1], q8bytes.val[1]); - const int32_t sumi1 = vaddvq_s32(p1) * scales[0]; - - q4bytes.val[0] = vreinterpretq_s8_u8(vshrq_n_u8(q4bits.val[0], 4)); - q4bytes.val[1] = vreinterpretq_s8_u8(vshrq_n_u8(q4bits.val[1], 4)); - - const int32x4_t p2 = ggml_vdotq_s32(ggml_vdotq_s32(mzero, q4bytes.val[0], q8bytes.val[2]), q4bytes.val[1], q8bytes.val[3]); - const int32_t sumi2 = vaddvq_s32(p2) * scales[1]; - - sumf += d * (sumi1 + sumi2); - } - - *s = sumf - sum_mins; - -#elif defined __AVX2__ - - const __m256i m4 = _mm256_set1_epi8(0xF); - - __m256 acc = _mm256_setzero_ps(); - - float summs = 0; - - uint16_t aux16[2]; - const uint8_t * scales = (const uint8_t *)aux16; - - for (int i = 0; i < nb; ++i) { - - const float d = GGML_FP16_TO_FP32(x[i].d[0]) * y[i].d; - const float m = GGML_FP16_TO_FP32(x[i].d[1]) * y[i].d; - const __m256 vd = _mm256_set1_ps(d); - - const uint16_t * a = (const uint16_t *)x[i].scales; - aux16[0] = a[0] & 0x0f0f; - aux16[1] = (a[0] >> 4) & 0x0f0f; - - summs += m * (scales[2] * (y[i].bsums[0] + y[i].bsums[1]) + scales[3] * (y[i].bsums[2] + y[i].bsums[3])); - - const uint8_t * restrict q4 = x[i].qs; - const int8_t * restrict q8 = y[i].qs; - - const __m256i q4bits = _mm256_loadu_si256((const __m256i*)q4); - const __m256i q4l = _mm256_and_si256(q4bits, m4); - const __m256i q4h = _mm256_and_si256(_mm256_srli_epi16(q4bits, 4), m4); - - const __m256i q8l = _mm256_loadu_si256((const __m256i*)(q8+ 0)); - const __m256i q8h = _mm256_loadu_si256((const __m256i*)(q8+32)); - - const __m256i p16l = _mm256_maddubs_epi16(q4l, q8l); - const __m256i p16h = _mm256_maddubs_epi16(q4h, q8h); - - const __m256i p32l = _mm256_madd_epi16(_mm256_set1_epi16(scales[0]), p16l); - acc = _mm256_fmadd_ps(vd, _mm256_cvtepi32_ps(p32l), acc); - - const __m256i p32h = _mm256_madd_epi16(_mm256_set1_epi16(scales[1]), p16h); - acc = _mm256_fmadd_ps(vd, _mm256_cvtepi32_ps(p32h), acc); - - } - - *s = hsum_float_8(acc) - summs; - -#elif defined __AVX__ - - const __m128i m4 = _mm_set1_epi8(0xF); - - __m256 acc = _mm256_setzero_ps(); - - float summs = 0; - - uint16_t aux16[2]; - const uint8_t * scales = (const uint8_t *)aux16; - - for (int i = 0; i < nb; ++i) { - - const float d = GGML_FP16_TO_FP32(x[i].d[0]) * y[i].d; - const float m = GGML_FP16_TO_FP32(x[i].d[1]) * y[i].d; - const __m256 vd = _mm256_set1_ps(d); - - const uint16_t * a = (const uint16_t *)x[i].scales; - aux16[0] = a[0] & 0x0f0f; - aux16[1] = (a[0] >> 4) & 0x0f0f; - - summs += m * (scales[2] * (y[i].bsums[0] + y[i].bsums[1]) + scales[3] * (y[i].bsums[2] + y[i].bsums[3])); - - const uint8_t * restrict q4 = x[i].qs; - const int8_t * restrict q8 = y[i].qs; - - const __m256i q4bits = _mm256_loadu_si256((const __m256i*)q4); - const __m128i q4bits_0 = _mm256_extractf128_si256(q4bits, 0); - const __m128i q4bits_1 = _mm256_extractf128_si256(q4bits, 1); - const __m128i q4_0 = _mm_and_si128(q4bits_0, m4); - const __m128i q4_1 = _mm_and_si128(q4bits_1, m4); - const __m128i q4_2 = _mm_and_si128(_mm_srli_epi16(q4bits_0, 4), m4); - const __m128i q4_3 = _mm_and_si128(_mm_srli_epi16(q4bits_1, 4), m4); - - const __m256i q8_0 = _mm256_loadu_si256((const __m256i*)(q8+ 0)); - const __m256i q8_1 = _mm256_loadu_si256((const __m256i*)(q8+32)); - - const __m128i p16_0 = _mm_maddubs_epi16(q4_0, _mm256_extractf128_si256(q8_0, 0)); - const __m128i p16_1 = _mm_maddubs_epi16(q4_1, _mm256_extractf128_si256(q8_0, 1)); - const __m128i p16_2 = _mm_maddubs_epi16(q4_2, _mm256_extractf128_si256(q8_1, 0)); - const __m128i p16_3 = _mm_maddubs_epi16(q4_3, _mm256_extractf128_si256(q8_1, 1)); - - const __m128i p32_0 = _mm_madd_epi16(_mm_set1_epi16(scales[0]), p16_0); - const __m128i p32_1 = _mm_madd_epi16(_mm_set1_epi16(scales[0]), p16_1); - acc = _mm256_add_ps(_mm256_mul_ps(vd, _mm256_cvtepi32_ps(MM256_SET_M128I(p32_1, p32_0))), acc); - - const __m128i p32_2 = _mm_madd_epi16(_mm_set1_epi16(scales[1]), p16_2); - const __m128i p32_3 = _mm_madd_epi16(_mm_set1_epi16(scales[1]), p16_3); - acc = _mm256_add_ps(_mm256_mul_ps(vd, _mm256_cvtepi32_ps(MM256_SET_M128I(p32_3, p32_2))), acc); - - } - - *s = hsum_float_8(acc) - summs; - -#elif defined __riscv_v_intrinsic - - uint16_t s16[2]; - const uint8_t * restrict scales = (const uint8_t *)s16; - - float sumf = 0; - - for (int i = 0; i < nb; ++i) { - - const uint8_t * restrict q4 = x[i].qs; - const int8_t * restrict q8 = y[i].qs; - - const uint16_t * restrict b = (const uint16_t *)x[i].scales; - s16[0] = b[0] & 0x0f0f; - s16[1] = (b[0] >> 4) & 0x0f0f; - - sumf -= y[i].d * GGML_FP16_TO_FP32(x[i].d[1]) * (scales[2] * (y[i].bsums[0] + y[i].bsums[1]) + scales[3] * (y[i].bsums[2] + y[i].bsums[3])); - const float d = y[i].d * GGML_FP16_TO_FP32(x[i].d[0]); - - size_t vl = 32; - - vint16m1_t vzero = __riscv_vmv_v_x_i16m1(0, 1); - - // load Q4 - vuint8m1_t q4_x = __riscv_vle8_v_u8m1(q4, vl); - - // load Q8 and multiply it with lower Q4 nibble - vint8m1_t q4_a = __riscv_vreinterpret_v_u8m1_i8m1(__riscv_vand_vx_u8m1(q4_x, 0x0F, vl)); - vint16m2_t va_0 = __riscv_vwmul_vv_i16m2(q4_a, __riscv_vle8_v_i8m1(q8, vl), vl); - vint16m1_t aux1 = __riscv_vredsum_vs_i16m2_i16m1(va_0, vzero, vl); - - sumf += d*scales[0]*__riscv_vmv_x_s_i16m1_i16(aux1); - - // load Q8 and multiply it with upper Q4 nibble - vint8m1_t q4_s = __riscv_vreinterpret_v_u8m1_i8m1(__riscv_vsrl_vx_u8m1(q4_x, 0x04, vl)); - vint16m2_t va_1 = __riscv_vwmul_vv_i16m2(q4_s, __riscv_vle8_v_i8m1(q8+32, vl), vl); - vint16m1_t aux2 = __riscv_vredsum_vs_i16m2_i16m1(va_1, vzero, vl); - - sumf += d*scales[1]*__riscv_vmv_x_s_i16m1_i16(aux2); - - } - - *s = sumf; - -#else - - uint8_t aux8[QK_K]; - int16_t aux16[16]; - float sums [8]; - memset(sums, 0, 8*sizeof(float)); - - uint16_t s16[2]; - const uint8_t * restrict scales = (const uint8_t *)s16; - - float sumf = 0; - for (int i = 0; i < nb; ++i) { - const uint8_t * restrict q4 = x[i].qs; - const int8_t * restrict q8 = y[i].qs; - uint8_t * restrict a = aux8; - for (int l = 0; l < 32; ++l) a[l+ 0] = q4[l] & 0xF; - for (int l = 0; l < 32; ++l) a[l+32] = q4[l] >> 4; - - const uint16_t * restrict b = (const uint16_t *)x[i].scales; - s16[0] = b[0] & 0x0f0f; - s16[1] = (b[0] >> 4) & 0x0f0f; - - sumf -= y[i].d * GGML_FP16_TO_FP32(x[i].d[1]) * (scales[2] * (y[i].bsums[0] + y[i].bsums[1]) + scales[3] * (y[i].bsums[2] + y[i].bsums[3])); - - const float d = y[i].d * GGML_FP16_TO_FP32(x[i].d[0]); - - for (int j = 0; j < QK_K/32; ++j) { - for (int l = 0; l < 16; ++l) aux16[l] = q8[l] * a[l]; - q8 += 16; a += 16; - for (int l = 0; l < 16; ++l) aux16[l] += q8[l] * a[l]; - q8 += 16; a += 16; - const float dl = d * scales[j]; - for (int l = 0; l < 8; ++l) sums[l] += dl * (aux16[l] + aux16[l+8]); - } - } - for (int l = 0; l < 8; ++l) sumf += sums[l]; - *s = sumf; -#endif -} -#endif - -#if QK_K == 256 -void ggml_vec_dot_q5_K_q8_K(int n, float * restrict s, size_t bs, const void * restrict vx, size_t bx, const void * restrict vy, size_t by, int nrc) { - assert(n % QK_K == 0); - assert(nrc == 1); - UNUSED(nrc); - UNUSED(bx); - UNUSED(by); - UNUSED(bs); - - const block_q5_K * restrict x = vx; - const block_q8_K * restrict y = vy; - - const int nb = n / QK_K; - - static const uint32_t kmask1 = 0x3f3f3f3f; - static const uint32_t kmask2 = 0x0f0f0f0f; - static const uint32_t kmask3 = 0x03030303; - - uint32_t utmp[4]; - -#ifdef __ARM_NEON - const uint8x16_t m4b = vdupq_n_u8(0xf); - const uint8x16_t mone = vdupq_n_u8(1); - const uint8x16_t mtwo = vdupq_n_u8(2); - const int32x4_t mzero = vdupq_n_s32(0); - - ggml_int8x16x4_t q5bytes; - - float sumf = 0; - - for (int i = 0; i < nb; ++i) { - - const float d = y[i].d * GGML_FP16_TO_FP32(x[i].d); - const float dmin = y[i].d * GGML_FP16_TO_FP32(x[i].dmin); - - const int16x8_t q8sums = vpaddq_s16(vld1q_s16(y[i].bsums), vld1q_s16(y[i].bsums + 8)); - - memcpy(utmp, x[i].scales, 12); - utmp[3] = ((utmp[2] >> 4) & kmask2) | (((utmp[1] >> 6) & kmask3) << 4); - const uint32_t uaux = utmp[1] & kmask1; - utmp[1] = (utmp[2] & kmask2) | (((utmp[0] >> 6) & kmask3) << 4); - utmp[2] = uaux; - utmp[0] &= kmask1; - - const uint8x8_t mins8 = vld1_u8((const uint8_t*)utmp + 8); - const int16x8_t mins = vreinterpretq_s16_u16(vmovl_u8(mins8)); - const int32x4_t prod = vaddq_s32(vmull_s16(vget_low_s16 (q8sums), vget_low_s16 (mins)), - vmull_s16(vget_high_s16(q8sums), vget_high_s16(mins))); - int32_t sumi_mins = vaddvq_s32(prod); - - const uint8_t * scales = (const uint8_t *)utmp; - - const uint8_t * restrict q5 = x[i].qs; - const uint8_t * restrict qh = x[i].qh; - const int8_t * restrict q8 = y[i].qs; - - ggml_uint8x16x2_t qhbits = ggml_vld1q_u8_x2(qh); - - ggml_uint8x16x4_t q5h; - - int32_t sumi = 0; - - for (int j = 0; j < QK_K/64; ++j) { - - const ggml_uint8x16x2_t q5bits = ggml_vld1q_u8_x2(q5); q5 += 32; - const ggml_int8x16x4_t q8bytes = ggml_vld1q_s8_x4(q8); q8 += 64; - - q5h.val[0] = vshlq_n_u8(vandq_u8(mone, qhbits.val[0]), 4); - q5h.val[1] = vshlq_n_u8(vandq_u8(mone, qhbits.val[1]), 4); - q5h.val[2] = vshlq_n_u8(vandq_u8(mtwo, qhbits.val[0]), 3); - q5h.val[3] = vshlq_n_u8(vandq_u8(mtwo, qhbits.val[1]), 3); - qhbits.val[0] = vshrq_n_u8(qhbits.val[0], 2); - qhbits.val[1] = vshrq_n_u8(qhbits.val[1], 2); - - q5bytes.val[0] = vreinterpretq_s8_u8(vorrq_u8(vandq_u8(q5bits.val[0], m4b), q5h.val[0])); - q5bytes.val[1] = vreinterpretq_s8_u8(vorrq_u8(vandq_u8(q5bits.val[1], m4b), q5h.val[1])); - q5bytes.val[2] = vreinterpretq_s8_u8(vorrq_u8(vshrq_n_u8(q5bits.val[0], 4), q5h.val[2])); - q5bytes.val[3] = vreinterpretq_s8_u8(vorrq_u8(vshrq_n_u8(q5bits.val[1], 4), q5h.val[3])); - - sumi += vaddvq_s32(ggml_vdotq_s32(ggml_vdotq_s32(mzero, q5bytes.val[0], q8bytes.val[0]), q5bytes.val[1], q8bytes.val[1])) * *scales++; - sumi += vaddvq_s32(ggml_vdotq_s32(ggml_vdotq_s32(mzero, q5bytes.val[2], q8bytes.val[2]), q5bytes.val[3], q8bytes.val[3])) * *scales++; - } - - sumf += d * sumi - dmin * sumi_mins; - } - - *s = sumf; - -#elif defined __AVX2__ - - const __m256i m4 = _mm256_set1_epi8(0xF); - const __m128i mzero = _mm_setzero_si128(); - const __m256i mone = _mm256_set1_epi8(1); - - __m256 acc = _mm256_setzero_ps(); - - float summs = 0.f; - - for (int i = 0; i < nb; ++i) { - - const uint8_t * restrict q5 = x[i].qs; - const int8_t * restrict q8 = y[i].qs; - -#if QK_K == 256 - const float d = y[i].d * GGML_FP16_TO_FP32(x[i].d); - const float dmin = -y[i].d * GGML_FP16_TO_FP32(x[i].dmin); - - memcpy(utmp, x[i].scales, 12); - utmp[3] = ((utmp[2] >> 4) & kmask2) | (((utmp[1] >> 6) & kmask3) << 4); - const uint32_t uaux = utmp[1] & kmask1; - utmp[1] = (utmp[2] & kmask2) | (((utmp[0] >> 6) & kmask3) << 4); - utmp[2] = uaux; - utmp[0] &= kmask1; -#else - // TODO - const float d = 0, dmin = 0; -#endif - - const __m256i mins_and_scales = _mm256_cvtepu8_epi16(_mm_set_epi32(utmp[3], utmp[2], utmp[1], utmp[0])); - - const __m256i q8sums = _mm256_loadu_si256((const __m256i*)y[i].bsums); - const __m128i q8s = _mm_hadd_epi16(_mm256_extracti128_si256(q8sums, 0), _mm256_extracti128_si256(q8sums, 1)); - const __m128i prod = _mm_madd_epi16(_mm256_extracti128_si256(mins_and_scales, 1), q8s); - const __m128i hsum = _mm_hadd_epi32(_mm_hadd_epi32(prod, mzero), mzero); - summs += dmin * _mm_extract_epi32(hsum, 0); - - const __m128i sc128 = _mm256_extracti128_si256(mins_and_scales, 0); - const __m256i scales = MM256_SET_M128I(sc128, sc128); - - const __m256i hbits = _mm256_loadu_si256((const __m256i*)x[i].qh); - __m256i hmask = mone; - - __m256i sumi = _mm256_setzero_si256(); - - int bit = 0; - - for (int j = 0; j < QK_K/64; ++j) { - - const __m256i scale_0 = _mm256_shuffle_epi8(scales, get_scale_shuffle_k4(2*j+0)); - const __m256i scale_1 = _mm256_shuffle_epi8(scales, get_scale_shuffle_k4(2*j+1)); - - const __m256i q5bits = _mm256_loadu_si256((const __m256i*)q5); q5 += 32; - - const __m256i q5l_0 = _mm256_and_si256(q5bits, m4); - const __m256i q5h_0 = _mm256_slli_epi16(_mm256_srli_epi16(_mm256_and_si256(hbits, hmask), bit++), 4); - const __m256i q5_0 = _mm256_add_epi8(q5l_0, q5h_0); - hmask = _mm256_slli_epi16(hmask, 1); - - const __m256i q5l_1 = _mm256_and_si256(_mm256_srli_epi16(q5bits, 4), m4); - const __m256i q5h_1 = _mm256_slli_epi16(_mm256_srli_epi16(_mm256_and_si256(hbits, hmask), bit++), 4); - const __m256i q5_1 = _mm256_add_epi8(q5l_1, q5h_1); - hmask = _mm256_slli_epi16(hmask, 1); - - const __m256i q8_0 = _mm256_loadu_si256((const __m256i*)q8); q8 += 32; - const __m256i q8_1 = _mm256_loadu_si256((const __m256i*)q8); q8 += 32; - - __m256i p16_0 = _mm256_maddubs_epi16(q5_0, q8_0); - __m256i p16_1 = _mm256_maddubs_epi16(q5_1, q8_1); - - p16_0 = _mm256_madd_epi16(scale_0, p16_0); - p16_1 = _mm256_madd_epi16(scale_1, p16_1); - - sumi = _mm256_add_epi32(sumi, _mm256_add_epi32(p16_0, p16_1)); - - } - - __m256 vd = _mm256_set1_ps(d); - acc = _mm256_fmadd_ps(vd, _mm256_cvtepi32_ps(sumi), acc); - - } - - *s = hsum_float_8(acc) + summs; - -#elif defined __AVX__ - - const __m128i m4 = _mm_set1_epi8(0xF); - const __m128i mzero = _mm_setzero_si128(); - const __m128i mone = _mm_set1_epi8(1); - const __m128i m2 = _mm_set1_epi8(2); - - __m256 acc = _mm256_setzero_ps(); - - float summs = 0.f; - - for (int i = 0; i < nb; ++i) { - - const float d = y[i].d * GGML_FP16_TO_FP32(x[i].d); - const float dmin = -y[i].d * GGML_FP16_TO_FP32(x[i].dmin); - - const uint8_t * restrict q5 = x[i].qs; - const int8_t * restrict q8 = y[i].qs; - - memcpy(utmp, x[i].scales, 12); - utmp[3] = ((utmp[2] >> 4) & kmask2) | (((utmp[1] >> 6) & kmask3) << 4); - const uint32_t uaux = utmp[1] & kmask1; - utmp[1] = (utmp[2] & kmask2) | (((utmp[0] >> 6) & kmask3) << 4); - utmp[2] = uaux; - utmp[0] &= kmask1; - - const __m128i utmps = _mm_set_epi32(utmp[3], utmp[2], utmp[1], utmp[0]); - const __m128i scales = _mm_cvtepu8_epi16(utmps); - const __m128i mins = _mm_cvtepu8_epi16(_mm_unpackhi_epi64(utmps, utmps)); - - const __m128i q8sums_0 = _mm_loadu_si128((const __m128i*)&y[i].bsums[0]); - const __m128i q8sums_1 = _mm_loadu_si128((const __m128i*)&y[i].bsums[8]); - const __m128i q8s = _mm_hadd_epi16(q8sums_0, q8sums_1); - const __m128i prod = _mm_madd_epi16(mins, q8s); - const __m128i hsum = _mm_hadd_epi32(_mm_hadd_epi32(prod, mzero), mzero); - summs += dmin * _mm_extract_epi32(hsum, 0); - - const __m128i hbits_0 = _mm_loadu_si128((const __m128i*)&x[i].qh[0]); - const __m128i hbits_1 = _mm_loadu_si128((const __m128i*)&x[i].qh[16]); - __m128i hmask = mone; - - __m128i sumi_0 = _mm_setzero_si128(); - __m128i sumi_1 = _mm_setzero_si128(); - - int bit = 0; - - __m128i shuffle = _mm_set1_epi16(0x0100); - for (int j = 0; j < QK_K/64; ++j) { - - const __m128i scale_0 = _mm_shuffle_epi8(scales, shuffle); - shuffle = _mm_add_epi16(shuffle, m2); - const __m128i scale_1 = _mm_shuffle_epi8(scales, shuffle); - shuffle = _mm_add_epi16(shuffle, m2); - - const __m128i q5bits_0 = _mm_loadu_si128((const __m128i*)q5); q5 += 16; - const __m128i q5bits_1 = _mm_loadu_si128((const __m128i*)q5); q5 += 16; - - __m128i q5l_0 = _mm_and_si128(q5bits_0, m4); - __m128i q5l_1 = _mm_and_si128(q5bits_1, m4); - __m128i q5h_0 = _mm_slli_epi16(_mm_srli_epi16(_mm_and_si128(hbits_0, hmask), bit), 4); - __m128i q5h_1 = _mm_slli_epi16(_mm_srli_epi16(_mm_and_si128(hbits_1, hmask), bit++), 4); - __m128i q5_0 = _mm_add_epi8(q5l_0, q5h_0); - __m128i q5_1 = _mm_add_epi8(q5l_1, q5h_1); - hmask = _mm_slli_epi16(hmask, 1); - - __m128i q8_0 = _mm_loadu_si128((const __m128i*)q8); q8 += 16; - __m128i q8_1 = _mm_loadu_si128((const __m128i*)q8); q8 += 16; - __m128i p16_0 = _mm_maddubs_epi16(q5_0, q8_0); - __m128i p16_1 = _mm_maddubs_epi16(q5_1, q8_1); - p16_0 = _mm_madd_epi16(scale_0, p16_0); - p16_1 = _mm_madd_epi16(scale_0, p16_1); - - q5l_0 = _mm_and_si128(_mm_srli_epi16(q5bits_0, 4), m4); - q5l_1 = _mm_and_si128(_mm_srli_epi16(q5bits_1, 4), m4); - q5h_0 = _mm_slli_epi16(_mm_srli_epi16(_mm_and_si128(hbits_0, hmask), bit), 4); - q5h_1 = _mm_slli_epi16(_mm_srli_epi16(_mm_and_si128(hbits_1, hmask), bit++), 4); - q5_0 = _mm_add_epi8(q5l_0, q5h_0); - q5_1 = _mm_add_epi8(q5l_1, q5h_1); - hmask = _mm_slli_epi16(hmask, 1); - - q8_0 = _mm_loadu_si128((const __m128i*)q8); q8 += 16; - q8_1 = _mm_loadu_si128((const __m128i*)q8); q8 += 16; - __m128i p16_2 = _mm_maddubs_epi16(q5_0, q8_0); - __m128i p16_3 = _mm_maddubs_epi16(q5_1, q8_1); - p16_2 = _mm_madd_epi16(scale_1, p16_2); - p16_3 = _mm_madd_epi16(scale_1, p16_3); - - sumi_0 = _mm_add_epi32(sumi_0, _mm_add_epi32(p16_0, p16_2)); - sumi_1 = _mm_add_epi32(sumi_1, _mm_add_epi32(p16_1, p16_3)); - - } - - __m256 vd = _mm256_set1_ps(d); - __m256i sumi = MM256_SET_M128I(sumi_1, sumi_0); - acc = _mm256_add_ps(_mm256_mul_ps(vd, _mm256_cvtepi32_ps(sumi)), acc); - - } - - *s = hsum_float_8(acc) + summs; - -#elif defined __riscv_v_intrinsic - - const uint8_t * scales = (const uint8_t*)&utmp[0]; - const uint8_t * mins = (const uint8_t*)&utmp[2]; - - float sumf = 0; - float sums = 0.0; - - size_t vl; - - for (int i = 0; i < nb; ++i) { - - vl = 8; - - const uint8_t * restrict q5 = x[i].qs; - const uint8_t * restrict hm = x[i].qh; - const int8_t * restrict q8 = y[i].qs; - - const float d = GGML_FP16_TO_FP32(x[i].d) * y[i].d; - const float dmin = GGML_FP16_TO_FP32(x[i].dmin) * y[i].d; - - vint16mf2_t q8sums_0 = __riscv_vlse16_v_i16mf2(y[i].bsums, 4, vl); - vint16mf2_t q8sums_1 = __riscv_vlse16_v_i16mf2(y[i].bsums+1, 4, vl); - vint16mf2_t q8sums = __riscv_vadd_vv_i16mf2(q8sums_0, q8sums_1, vl); - - memcpy(utmp, x[i].scales, 12); - utmp[3] = ((utmp[2] >> 4) & kmask2) | (((utmp[1] >> 6) & kmask3) << 4); - const uint32_t uaux = utmp[1] & kmask1; - utmp[1] = (utmp[2] & kmask2) | (((utmp[0] >> 6) & kmask3) << 4); - utmp[2] = uaux; - utmp[0] &= kmask1; - - vuint8mf4_t mins8 = __riscv_vle8_v_u8mf4(mins, vl); - vint16mf2_t v_mins = __riscv_vreinterpret_v_u16mf2_i16mf2(__riscv_vzext_vf2_u16mf2(mins8, vl)); - vint32m1_t prod = __riscv_vwmul_vv_i32m1(q8sums, v_mins, vl); - - vint32m1_t sumi = __riscv_vredsum_vs_i32m1_i32m1(prod, __riscv_vmv_v_x_i32m1(0, 1), vl); - sumf -= dmin * __riscv_vmv_x_s_i32m1_i32(sumi); - - vl = 32; - int32_t aux32 = 0; - int is = 0; - - uint8_t m = 1; - vint32m1_t vzero = __riscv_vmv_v_x_i32m1(0, 1); - vuint8m1_t vqh = __riscv_vle8_v_u8m1(hm, vl); - - for (int j = 0; j < QK_K/64; ++j) { - // load Q5 and Q8 - vuint8m1_t q5_x = __riscv_vle8_v_u8m1(q5, vl); - vint8m1_t q8_y1 = __riscv_vle8_v_i8m1(q8, vl); - vint8m1_t q8_y2 = __riscv_vle8_v_i8m1(q8+32, vl); - - // compute mask for addition - vint8m1_t q5_a = __riscv_vreinterpret_v_u8m1_i8m1(__riscv_vand_vx_u8m1(q5_x, 0x0F, vl)); - vuint8m1_t qh_m1 = __riscv_vand_vx_u8m1(vqh, m, vl); - vbool8_t vmask_1 = __riscv_vmsne_vx_u8m1_b8(qh_m1, 0, vl); - vint8m1_t q5_m1 = __riscv_vadd_vx_i8m1_m(vmask_1, q5_a, 16, vl); - m <<= 1; - - vint8m1_t q5_l = __riscv_vreinterpret_v_u8m1_i8m1(__riscv_vsrl_vx_u8m1(q5_x, 0x04, vl)); - vuint8m1_t qh_m2 = __riscv_vand_vx_u8m1(vqh, m, vl); - vbool8_t vmask_2 = __riscv_vmsne_vx_u8m1_b8(qh_m2, 0, vl); - vint8m1_t q5_m2 = __riscv_vadd_vx_i8m1_m(vmask_2, q5_l, 16, vl); - m <<= 1; - - vint16m2_t v0 = __riscv_vwmul_vv_i16m2(q5_m1, q8_y1, vl); - vint16m2_t v1 = __riscv_vwmul_vv_i16m2(q5_m2, q8_y2, vl); - - vint32m4_t vs1 = __riscv_vwmul_vx_i32m4(v0, scales[is++], vl); - vint32m4_t vs2 = __riscv_vwmul_vx_i32m4(v1, scales[is++], vl); - - vint32m1_t vacc1 = __riscv_vredsum_vs_i32m4_i32m1(vs1, vzero, vl); - vint32m1_t vacc2 = __riscv_vredsum_vs_i32m4_i32m1(vs2, vzero, vl); - - aux32 += __riscv_vmv_x_s_i32m1_i32(vacc1) + __riscv_vmv_x_s_i32m1_i32(vacc2); - q5 += 32; q8 += 64; - - } - - vfloat32m1_t vaux = __riscv_vfmul_vf_f32m1(__riscv_vfmv_v_f_f32m1(aux32, 1), d, 1); - sums += __riscv_vfmv_f_s_f32m1_f32(vaux); - - } - - *s = sumf+sums; - -#else - - const uint8_t * scales = (const uint8_t*)&utmp[0]; - const uint8_t * mins = (const uint8_t*)&utmp[2]; - - int8_t aux8[QK_K]; - int16_t aux16[8]; - float sums [8]; - int32_t aux32[8]; - memset(sums, 0, 8*sizeof(float)); - - float sumf = 0; - for (int i = 0; i < nb; ++i) { - const uint8_t * restrict q4 = x[i].qs; - const uint8_t * restrict hm = x[i].qh; - const int8_t * restrict q8 = y[i].qs; - memset(aux32, 0, 8*sizeof(int32_t)); - int8_t * restrict a = aux8; - uint8_t m = 1; - for (int j = 0; j < QK_K/64; ++j) { - for (int l = 0; l < 32; ++l) a[l] = (int8_t)(q4[l] & 0xF); - for (int l = 0; l < 32; ++l) a[l] += (hm[l] & m ? 16 : 0); - a += 32; m <<= 1; - for (int l = 0; l < 32; ++l) a[l] = (int8_t)(q4[l] >> 4); - for (int l = 0; l < 32; ++l) a[l] += (hm[l] & m ? 16 : 0); - a += 32; m <<= 1; - q4 += 32; - } - memcpy(utmp, x[i].scales, 12); - utmp[3] = ((utmp[2] >> 4) & kmask2) | (((utmp[1] >> 6) & kmask3) << 4); - const uint32_t uaux = utmp[1] & kmask1; - utmp[1] = (utmp[2] & kmask2) | (((utmp[0] >> 6) & kmask3) << 4); - utmp[2] = uaux; - utmp[0] &= kmask1; - - int sumi = 0; - for (int j = 0; j < QK_K/16; ++j) sumi += y[i].bsums[j] * mins[j/2]; - a = aux8; - int is = 0; - for (int j = 0; j < QK_K/32; ++j) { - int32_t scale = scales[is++]; - for (int l = 0; l < 8; ++l) aux16[l] = q8[l] * a[l]; - for (int l = 0; l < 8; ++l) aux32[l] += scale * aux16[l]; - q8 += 8; a += 8; - for (int l = 0; l < 8; ++l) aux16[l] = q8[l] * a[l]; - for (int l = 0; l < 8; ++l) aux32[l] += scale * aux16[l]; - q8 += 8; a += 8; - for (int l = 0; l < 8; ++l) aux16[l] = q8[l] * a[l]; - for (int l = 0; l < 8; ++l) aux32[l] += scale * aux16[l]; - q8 += 8; a += 8; - for (int l = 0; l < 8; ++l) aux16[l] = q8[l] * a[l]; - for (int l = 0; l < 8; ++l) aux32[l] += scale * aux16[l]; - q8 += 8; a += 8; - } - const float d = GGML_FP16_TO_FP32(x[i].d) * y[i].d; - for (int l = 0; l < 8; ++l) sums[l] += d * aux32[l]; - const float dmin = GGML_FP16_TO_FP32(x[i].dmin) * y[i].d; - sumf -= dmin * sumi; - } - for (int l = 0; l < 8; ++l) sumf += sums[l]; - *s = sumf; -#endif -} - -#else - -void ggml_vec_dot_q5_K_q8_K(int n, float * restrict s, size_t bs, const void * restrict vx, size_t bx, const void * restrict vy, size_t by, int nrc) { - assert(n % QK_K == 0); - assert(nrc == 1); - UNUSED(nrc); - UNUSED(bx); - UNUSED(by); - UNUSED(bs); - - const block_q5_K * restrict x = vx; - const block_q8_K * restrict y = vy; - - const int nb = n / QK_K; - -#ifdef __ARM_NEON - const uint8x16_t m4b = vdupq_n_u8(0xf); - const uint8x16_t mh = vdupq_n_u8(16); - const int32x4_t mzero = vdupq_n_s32(0); - - ggml_int8x16x4_t q5bytes; - ggml_uint8x16x4_t q5h; - - float sumf = 0; - - for (int i = 0; i < nb; ++i) { - - const float d = y[i].d * GGML_FP16_TO_FP32(x[i].d); - const int8_t * sc = x[i].scales; - - const uint8_t * restrict q5 = x[i].qs; - const uint8_t * restrict qh = x[i].qh; - const int8_t * restrict q8 = y[i].qs; - - const uint8x8_t qhbits = vld1_u8(qh); - - const ggml_uint8x16x2_t q5bits = ggml_vld1q_u8_x2(q5); - const ggml_int8x16x4_t q8bytes = ggml_vld1q_s8_x4(q8); - - const uint8x16_t htmp = vcombine_u8(qhbits, vshr_n_u8(qhbits, 1)); - q5h.val[0] = vbicq_u8(mh, vshlq_n_u8(htmp, 4)); - q5h.val[1] = vbicq_u8(mh, vshlq_n_u8(htmp, 2)); - q5h.val[2] = vbicq_u8(mh, htmp); - q5h.val[3] = vbicq_u8(mh, vshrq_n_u8(htmp, 2)); - - q5bytes.val[0] = vsubq_s8(vreinterpretq_s8_u8(vandq_u8(q5bits.val[0], m4b)), vreinterpretq_s8_u8(q5h.val[0])); - q5bytes.val[1] = vsubq_s8(vreinterpretq_s8_u8(vandq_u8(q5bits.val[1], m4b)), vreinterpretq_s8_u8(q5h.val[1])); - q5bytes.val[2] = vsubq_s8(vreinterpretq_s8_u8(vshrq_n_u8(q5bits.val[0], 4)), vreinterpretq_s8_u8(q5h.val[2])); - q5bytes.val[3] = vsubq_s8(vreinterpretq_s8_u8(vshrq_n_u8(q5bits.val[1], 4)), vreinterpretq_s8_u8(q5h.val[3])); - - int32_t sumi1 = sc[0] * vaddvq_s32(ggml_vdotq_s32(mzero, q5bytes.val[0], q8bytes.val[0])); - int32_t sumi2 = sc[1] * vaddvq_s32(ggml_vdotq_s32(mzero, q5bytes.val[1], q8bytes.val[1])); - int32_t sumi3 = sc[2] * vaddvq_s32(ggml_vdotq_s32(mzero, q5bytes.val[2], q8bytes.val[2])); - int32_t sumi4 = sc[3] * vaddvq_s32(ggml_vdotq_s32(mzero, q5bytes.val[3], q8bytes.val[3])); - - sumf += d * (sumi1 + sumi2 + sumi3 + sumi4); - } - - *s = sumf; - -#elif defined __AVX2__ - - const __m256i m4 = _mm256_set1_epi8(0xF); - const __m256i mone = _mm256_set1_epi8(1); - - __m256 acc = _mm256_setzero_ps(); - - for (int i = 0; i < nb; ++i) { - - const uint8_t * restrict q5 = x[i].qs; - const int8_t * restrict q8 = y[i].qs; - - const float d = y[i].d * GGML_FP16_TO_FP32(x[i].d); - - const __m256i q5bits = _mm256_loadu_si256((const __m256i*)q5); - - const __m256i scale_l = MM256_SET_M128I(_mm_set1_epi16(x[i].scales[1]), _mm_set1_epi16(x[i].scales[0])); - const __m256i scale_h = MM256_SET_M128I(_mm_set1_epi16(x[i].scales[3]), _mm_set1_epi16(x[i].scales[2])); - - int64_t aux64; - memcpy(&aux64, x[i].qh, 8); - const __m128i haux128 = _mm_set_epi64x(aux64 >> 1, aux64); - const __m256i haux256 = MM256_SET_M128I(_mm_srli_epi16(haux128, 2), haux128); - - const __m256i q5h_0 = _mm256_slli_epi16(_mm256_andnot_si256(haux256, mone), 4); - const __m256i q5h_1 = _mm256_slli_epi16(_mm256_andnot_si256(_mm256_srli_epi16(haux256, 4), mone), 4); - - const __m256i q5l_0 = _mm256_and_si256(q5bits, m4); - const __m256i q5l_1 = _mm256_and_si256(_mm256_srli_epi16(q5bits, 4), m4); - - const __m256i q8_0 = _mm256_loadu_si256((const __m256i*)(q8+ 0)); - const __m256i q8_1 = _mm256_loadu_si256((const __m256i*)(q8+32)); - - const __m256i p16_0 = _mm256_madd_epi16(scale_l, _mm256_maddubs_epi16(q5l_0, q8_0)); - const __m256i p16_1 = _mm256_madd_epi16(scale_h, _mm256_maddubs_epi16(q5l_1, q8_1)); - const __m256i s16_0 = _mm256_madd_epi16(scale_l, _mm256_maddubs_epi16(q5h_0, q8_0)); - const __m256i s16_1 = _mm256_madd_epi16(scale_h, _mm256_maddubs_epi16(q5h_1, q8_1)); - - const __m256i dot = _mm256_sub_epi32(_mm256_add_epi32(p16_0, p16_1), _mm256_add_epi32(s16_0, s16_1)); - - acc = _mm256_fmadd_ps(_mm256_set1_ps(d), _mm256_cvtepi32_ps(dot), acc); - - } - - *s = hsum_float_8(acc); - -#elif defined __AVX__ - - const __m128i m4 = _mm_set1_epi8(0xF); - const __m128i mone = _mm_set1_epi8(1); - - __m256 acc = _mm256_setzero_ps(); - - for (int i = 0; i < nb; ++i) { - - const uint8_t * restrict q5 = x[i].qs; - const int8_t * restrict q8 = y[i].qs; - - const float d = y[i].d * GGML_FP16_TO_FP32(x[i].d); - - const __m256i q5bits = _mm256_loadu_si256((const __m256i*)q5); - - const __m128i scale_0 = _mm_set1_epi16(x[i].scales[0]); - const __m128i scale_1 = _mm_set1_epi16(x[i].scales[1]); - const __m128i scale_2 = _mm_set1_epi16(x[i].scales[2]); - const __m128i scale_3 = _mm_set1_epi16(x[i].scales[3]); - - int64_t aux64; - memcpy(&aux64, x[i].qh, 8); - const __m128i haux128_0 = _mm_set_epi64x(aux64 >> 1, aux64); - const __m128i haux128_1 = _mm_srli_epi16(haux128_0, 2); - - const __m128i q5h_0 = _mm_slli_epi16(_mm_andnot_si128(haux128_0, mone), 4); - const __m128i q5h_1 = _mm_slli_epi16(_mm_andnot_si128(haux128_1, mone), 4); - const __m128i q5h_2 = _mm_slli_epi16(_mm_andnot_si128(_mm_srli_epi16(haux128_0, 4), mone), 4); - const __m128i q5h_3 = _mm_slli_epi16(_mm_andnot_si128(_mm_srli_epi16(haux128_1, 4), mone), 4); - - const __m128i q5l_0 = _mm_and_si128(_mm256_extractf128_si256(q5bits, 0), m4); - const __m128i q5l_1 = _mm_and_si128(_mm256_extractf128_si256(q5bits, 1), m4); - const __m128i q5l_2 = _mm_and_si128(_mm_srli_epi16(_mm256_extractf128_si256(q5bits, 0), 4), m4); - const __m128i q5l_3 = _mm_and_si128(_mm_srli_epi16(_mm256_extractf128_si256(q5bits, 1), 4), m4); - - const __m256i q8_0 = _mm256_loadu_si256((const __m256i*)(q8+ 0)); - const __m256i q8_1 = _mm256_loadu_si256((const __m256i*)(q8+32)); - - const __m128i p16_0 = _mm_madd_epi16(scale_0, _mm_maddubs_epi16(q5l_0, _mm256_extractf128_si256(q8_0, 0))); - const __m128i p16_1 = _mm_madd_epi16(scale_1, _mm_maddubs_epi16(q5l_1, _mm256_extractf128_si256(q8_0, 1))); - const __m128i p16_2 = _mm_madd_epi16(scale_2, _mm_maddubs_epi16(q5l_2, _mm256_extractf128_si256(q8_1, 0))); - const __m128i p16_3 = _mm_madd_epi16(scale_3, _mm_maddubs_epi16(q5l_3, _mm256_extractf128_si256(q8_1, 1))); - const __m128i s16_0 = _mm_madd_epi16(scale_0, _mm_maddubs_epi16(q5h_0, _mm256_extractf128_si256(q8_0, 0))); - const __m128i s16_1 = _mm_madd_epi16(scale_1, _mm_maddubs_epi16(q5h_1, _mm256_extractf128_si256(q8_0, 1))); - const __m128i s16_2 = _mm_madd_epi16(scale_2, _mm_maddubs_epi16(q5h_2, _mm256_extractf128_si256(q8_1, 0))); - const __m128i s16_3 = _mm_madd_epi16(scale_3, _mm_maddubs_epi16(q5h_3, _mm256_extractf128_si256(q8_1, 1))); - - const __m128i dot_0 = _mm_sub_epi32(_mm_add_epi32(p16_0, p16_2), _mm_add_epi32(s16_0, s16_2)); - const __m128i dot_1 = _mm_sub_epi32(_mm_add_epi32(p16_1, p16_3), _mm_add_epi32(s16_1, s16_3)); - - acc = _mm256_add_ps(_mm256_mul_ps(_mm256_set1_ps(d), _mm256_cvtepi32_ps(MM256_SET_M128I(dot_1, dot_0))), acc); - - } - - *s = hsum_float_8(acc); - -#elif defined __riscv_v_intrinsic - - float sumf = 0; - - for (int i = 0; i < nb; ++i) { - - const float d = y[i].d * GGML_FP16_TO_FP32(x[i].d); - const int8_t * sc = x[i].scales; - - const uint8_t * restrict q5 = x[i].qs; - const uint8_t * restrict qh = x[i].qh; - const int8_t * restrict q8 = y[i].qs; - - vint32m1_t vzero = __riscv_vmv_v_x_i32m1(0, 1); - - // load qh - vuint8mf4_t qh_x1 = __riscv_vle8_v_u8mf4(qh, 8); - vuint8mf2_t qh_x2 = __riscv_vlmul_ext_v_u8mf4_u8mf2(__riscv_vsrl_vx_u8mf4(qh_x1, 1, 8)); - - size_t vl = 16; - - // combine both qh_1 and qh_2 - vuint8mf2_t qh_x = __riscv_vslideup_vx_u8mf2(__riscv_vlmul_ext_v_u8mf4_u8mf2(qh_x1), qh_x2, vl/2, vl); - - vuint8mf2_t qh_h0 = __riscv_vand_vx_u8mf2(__riscv_vnot_v_u8mf2(__riscv_vsll_vx_u8mf2(qh_x, 0x4, vl), vl), 16, vl); - vuint8mf2_t qh_h1 = __riscv_vand_vx_u8mf2(__riscv_vnot_v_u8mf2(__riscv_vsll_vx_u8mf2(qh_x, 0x2, vl), vl), 16, vl); - vuint8mf2_t qh_h2 = __riscv_vand_vx_u8mf2(__riscv_vnot_v_u8mf2(qh_x, vl), 16, vl); - vuint8mf2_t qh_h3 = __riscv_vand_vx_u8mf2(__riscv_vnot_v_u8mf2(__riscv_vsrl_vx_u8mf2(qh_x, 0x4, vl), vl), 16, vl); - - vint8mf2_t qh_0 = __riscv_vreinterpret_v_u8mf2_i8mf2(qh_h0); - vint8mf2_t qh_1 = __riscv_vreinterpret_v_u8mf2_i8mf2(qh_h1); - vint8mf2_t qh_2 = __riscv_vreinterpret_v_u8mf2_i8mf2(qh_h2); - vint8mf2_t qh_3 = __riscv_vreinterpret_v_u8mf2_i8mf2(qh_h3); - - // load q5 - vuint8mf2_t q5_x1 = __riscv_vle8_v_u8mf2(q5, vl); - vuint8mf2_t q5_x2 = __riscv_vle8_v_u8mf2(q5+16, vl); - - vint8mf2_t q5s_0 = __riscv_vreinterpret_v_u8mf2_i8mf2(__riscv_vand_vx_u8mf2(q5_x1, 0xF, vl)); - vint8mf2_t q5s_1 = __riscv_vreinterpret_v_u8mf2_i8mf2(__riscv_vand_vx_u8mf2(q5_x2, 0xF, vl)); - vint8mf2_t q5s_2 = __riscv_vreinterpret_v_u8mf2_i8mf2(__riscv_vsrl_vx_u8mf2(q5_x1, 0x4, vl)); - vint8mf2_t q5s_3 = __riscv_vreinterpret_v_u8mf2_i8mf2(__riscv_vsrl_vx_u8mf2(q5_x2, 0x4, vl)); - - vint8mf2_t q5_0 = __riscv_vsub_vv_i8mf2(q5s_0, qh_0, vl); - vint8mf2_t q5_1 = __riscv_vsub_vv_i8mf2(q5s_1, qh_1, vl); - vint8mf2_t q5_2 = __riscv_vsub_vv_i8mf2(q5s_2, qh_2, vl); - vint8mf2_t q5_3 = __riscv_vsub_vv_i8mf2(q5s_3, qh_3, vl); - - // load Q8 and multiply it with Q5 - vint16m1_t p0 = __riscv_vwmul_vv_i16m1(q5_0, __riscv_vle8_v_i8mf2(q8, vl), vl); - vint16m1_t p1 = __riscv_vwmul_vv_i16m1(q5_1, __riscv_vle8_v_i8mf2(q8+16, vl), vl); - vint16m1_t p2 = __riscv_vwmul_vv_i16m1(q5_2, __riscv_vle8_v_i8mf2(q8+32, vl), vl); - vint16m1_t p3 = __riscv_vwmul_vv_i16m1(q5_3, __riscv_vle8_v_i8mf2(q8+48, vl), vl); - - vint32m1_t vs_0 = __riscv_vwredsum_vs_i16m1_i32m1(p0, vzero, vl); - vint32m1_t vs_1 = __riscv_vwredsum_vs_i16m1_i32m1(p1, vzero, vl); - vint32m1_t vs_2 = __riscv_vwredsum_vs_i16m1_i32m1(p2, vzero, vl); - vint32m1_t vs_3 = __riscv_vwredsum_vs_i16m1_i32m1(p3, vzero, vl); - - int32_t sumi1 = sc[0] * __riscv_vmv_x_s_i32m1_i32(vs_0); - int32_t sumi2 = sc[1] * __riscv_vmv_x_s_i32m1_i32(vs_1); - int32_t sumi3 = sc[2] * __riscv_vmv_x_s_i32m1_i32(vs_2); - int32_t sumi4 = sc[3] * __riscv_vmv_x_s_i32m1_i32(vs_3); - - sumf += d * (sumi1 + sumi2 + sumi3 + sumi4); - - } - - *s = sumf; - -#else - - int8_t aux8[QK_K]; - int16_t aux16[16]; - float sums [8]; - memset(sums, 0, 8*sizeof(float)); - - float sumf = 0; - for (int i = 0; i < nb; ++i) { - const uint8_t * restrict q4 = x[i].qs; - const uint8_t * restrict hm = x[i].qh; - const int8_t * restrict q8 = y[i].qs; - int8_t * restrict a = aux8; - for (int l = 0; l < 32; ++l) { - a[l+ 0] = q4[l] & 0xF; - a[l+32] = q4[l] >> 4; - } - for (int is = 0; is < 8; ++is) { - uint8_t m = 1 << is; - for (int l = 0; l < 8; ++l) a[8*is + l] -= (hm[l] & m ? 0 : 16); - } - - const float d = y[i].d * GGML_FP16_TO_FP32(x[i].d); - const int8_t * restrict sc = x[i].scales; - - for (int j = 0; j < QK_K/16; ++j) { - const float dl = d * sc[j]; - for (int l = 0; l < 16; ++l) aux16[l] = q8[l] * a[l]; - for (int l = 0; l < 8; ++l) sums[l] += dl * (aux16[l] + aux16[8+l]); - q8 += 16; a += 16; - } - } - for (int l = 0; l < 8; ++l) sumf += sums[l]; - *s = sumf; -#endif -} -#endif - - -#if QK_K == 256 -void ggml_vec_dot_q6_K_q8_K(int n, float * restrict s, size_t bs, const void * restrict vx, size_t bx, const void * restrict vy, size_t by, int nrc) { - assert(n % QK_K == 0); - assert(nrc == 1); - UNUSED(nrc); - UNUSED(bx); - UNUSED(by); - UNUSED(bs); - - const block_q6_K * restrict x = vx; - const block_q8_K * restrict y = vy; - - const int nb = n / QK_K; - -#ifdef __ARM_NEON - float sum = 0; - - const uint8x16_t m4b = vdupq_n_u8(0xF); - const int32x4_t vzero = vdupq_n_s32(0); - //const int8x16_t m32s = vdupq_n_s8(32); - - const uint8x16_t mone = vdupq_n_u8(3); - - ggml_int8x16x4_t q6bytes; - ggml_uint8x16x4_t q6h; - - for (int i = 0; i < nb; ++i) { - - const float d_all = GGML_FP16_TO_FP32(x[i].d); - - const uint8_t * restrict q6 = x[i].ql; - const uint8_t * restrict qh = x[i].qh; - const int8_t * restrict q8 = y[i].qs; - - const int8_t * restrict scale = x[i].scales; - - const ggml_int16x8x2_t q8sums = ggml_vld1q_s16_x2(y[i].bsums); - const int8x16_t scales = vld1q_s8(scale); - const ggml_int16x8x2_t q6scales = {{vmovl_s8(vget_low_s8(scales)), vmovl_s8(vget_high_s8(scales))}}; - - const int32x4_t prod = vaddq_s32(vaddq_s32(vmull_s16(vget_low_s16 (q8sums.val[0]), vget_low_s16 (q6scales.val[0])), - vmull_s16(vget_high_s16(q8sums.val[0]), vget_high_s16(q6scales.val[0]))), - vaddq_s32(vmull_s16(vget_low_s16 (q8sums.val[1]), vget_low_s16 (q6scales.val[1])), - vmull_s16(vget_high_s16(q8sums.val[1]), vget_high_s16(q6scales.val[1])))); - int32_t isum_mins = vaddvq_s32(prod); - - int32_t isum = 0; - - for (int j = 0; j < QK_K/128; ++j) { - - ggml_uint8x16x2_t qhbits = ggml_vld1q_u8_x2(qh); qh += 32; - ggml_uint8x16x4_t q6bits = ggml_vld1q_u8_x4(q6); q6 += 64; - ggml_int8x16x4_t q8bytes = ggml_vld1q_s8_x4(q8); q8 += 64; - - q6h.val[0] = vshlq_n_u8(vandq_u8(mone, qhbits.val[0]), 4); - q6h.val[1] = vshlq_n_u8(vandq_u8(mone, qhbits.val[1]), 4); - uint8x16_t shifted = vshrq_n_u8(qhbits.val[0], 2); - q6h.val[2] = vshlq_n_u8(vandq_u8(mone, shifted), 4); - shifted = vshrq_n_u8(qhbits.val[1], 2); - q6h.val[3] = vshlq_n_u8(vandq_u8(mone, shifted), 4); - - //q6bytes.val[0] = vsubq_s8(vreinterpretq_s8_u8(vorrq_u8(vandq_u8(q6bits.val[0], m4b), q6h.val[0])), m32s); - //q6bytes.val[1] = vsubq_s8(vreinterpretq_s8_u8(vorrq_u8(vandq_u8(q6bits.val[1], m4b), q6h.val[1])), m32s); - //q6bytes.val[2] = vsubq_s8(vreinterpretq_s8_u8(vorrq_u8(vandq_u8(q6bits.val[2], m4b), q6h.val[2])), m32s); - //q6bytes.val[3] = vsubq_s8(vreinterpretq_s8_u8(vorrq_u8(vandq_u8(q6bits.val[3], m4b), q6h.val[3])), m32s); - q6bytes.val[0] = vreinterpretq_s8_u8(vorrq_u8(vandq_u8(q6bits.val[0], m4b), q6h.val[0])); - q6bytes.val[1] = vreinterpretq_s8_u8(vorrq_u8(vandq_u8(q6bits.val[1], m4b), q6h.val[1])); - q6bytes.val[2] = vreinterpretq_s8_u8(vorrq_u8(vandq_u8(q6bits.val[2], m4b), q6h.val[2])); - q6bytes.val[3] = vreinterpretq_s8_u8(vorrq_u8(vandq_u8(q6bits.val[3], m4b), q6h.val[3])); - - isum += vaddvq_s32(ggml_vdotq_s32(vzero, q6bytes.val[0], q8bytes.val[0])) * scale[0] + - vaddvq_s32(ggml_vdotq_s32(vzero, q6bytes.val[1], q8bytes.val[1])) * scale[1] + - vaddvq_s32(ggml_vdotq_s32(vzero, q6bytes.val[2], q8bytes.val[2])) * scale[2] + - vaddvq_s32(ggml_vdotq_s32(vzero, q6bytes.val[3], q8bytes.val[3])) * scale[3]; - - scale += 4; - - q8bytes = ggml_vld1q_s8_x4(q8); q8 += 64; - - shifted = vshrq_n_u8(qhbits.val[0], 4); - q6h.val[0] = vshlq_n_u8(vandq_u8(mone, shifted), 4); - shifted = vshrq_n_u8(qhbits.val[1], 4); - q6h.val[1] = vshlq_n_u8(vandq_u8(mone, shifted), 4); - shifted = vshrq_n_u8(qhbits.val[0], 6); - q6h.val[2] = vshlq_n_u8(vandq_u8(mone, shifted), 4); - shifted = vshrq_n_u8(qhbits.val[1], 6); - q6h.val[3] = vshlq_n_u8(vandq_u8(mone, shifted), 4); - - //q6bytes.val[0] = vsubq_s8(vreinterpretq_s8_u8(vorrq_u8(vshrq_n_u8(q6bits.val[0], 4), q6h.val[0])), m32s); - //q6bytes.val[1] = vsubq_s8(vreinterpretq_s8_u8(vorrq_u8(vshrq_n_u8(q6bits.val[1], 4), q6h.val[1])), m32s); - //q6bytes.val[2] = vsubq_s8(vreinterpretq_s8_u8(vorrq_u8(vshrq_n_u8(q6bits.val[2], 4), q6h.val[2])), m32s); - //q6bytes.val[3] = vsubq_s8(vreinterpretq_s8_u8(vorrq_u8(vshrq_n_u8(q6bits.val[3], 4), q6h.val[3])), m32s); - q6bytes.val[0] = vreinterpretq_s8_u8(vorrq_u8(vshrq_n_u8(q6bits.val[0], 4), q6h.val[0])); - q6bytes.val[1] = vreinterpretq_s8_u8(vorrq_u8(vshrq_n_u8(q6bits.val[1], 4), q6h.val[1])); - q6bytes.val[2] = vreinterpretq_s8_u8(vorrq_u8(vshrq_n_u8(q6bits.val[2], 4), q6h.val[2])); - q6bytes.val[3] = vreinterpretq_s8_u8(vorrq_u8(vshrq_n_u8(q6bits.val[3], 4), q6h.val[3])); - - isum += vaddvq_s32(ggml_vdotq_s32(vzero, q6bytes.val[0], q8bytes.val[0])) * scale[0] + - vaddvq_s32(ggml_vdotq_s32(vzero, q6bytes.val[1], q8bytes.val[1])) * scale[1] + - vaddvq_s32(ggml_vdotq_s32(vzero, q6bytes.val[2], q8bytes.val[2])) * scale[2] + - vaddvq_s32(ggml_vdotq_s32(vzero, q6bytes.val[3], q8bytes.val[3])) * scale[3]; - scale += 4; - } - //sum += isum * d_all * y[i].d; - sum += d_all * y[i].d * (isum - 32 * isum_mins); - - } - *s = sum; - -#elif defined __AVX2__ - - const __m256i m4 = _mm256_set1_epi8(0xF); - const __m256i m2 = _mm256_set1_epi8(3); - const __m256i m32s = _mm256_set1_epi8(32); - - __m256 acc = _mm256_setzero_ps(); - - for (int i = 0; i < nb; ++i) { - - const float d = y[i].d * GGML_FP16_TO_FP32(x[i].d); - - const uint8_t * restrict q4 = x[i].ql; - const uint8_t * restrict qh = x[i].qh; - const int8_t * restrict q8 = y[i].qs; - - const __m128i scales = _mm_loadu_si128((const __m128i*)x[i].scales); - - __m256i sumi = _mm256_setzero_si256(); - - int is = 0; - - for (int j = 0; j < QK_K/128; ++j) { - - const __m128i scale_0 = _mm_shuffle_epi8(scales, get_scale_shuffle(is + 0)); - const __m128i scale_1 = _mm_shuffle_epi8(scales, get_scale_shuffle(is + 1)); - const __m128i scale_2 = _mm_shuffle_epi8(scales, get_scale_shuffle(is + 2)); - const __m128i scale_3 = _mm_shuffle_epi8(scales, get_scale_shuffle(is + 3)); - is += 4; - - const __m256i q4bits1 = _mm256_loadu_si256((const __m256i*)q4); q4 += 32; - const __m256i q4bits2 = _mm256_loadu_si256((const __m256i*)q4); q4 += 32; - const __m256i q4bitsH = _mm256_loadu_si256((const __m256i*)qh); qh += 32; - - const __m256i q4h_0 = _mm256_slli_epi16(_mm256_and_si256(q4bitsH, m2), 4); - const __m256i q4h_1 = _mm256_slli_epi16(_mm256_and_si256(_mm256_srli_epi16(q4bitsH, 2), m2), 4); - const __m256i q4h_2 = _mm256_slli_epi16(_mm256_and_si256(_mm256_srli_epi16(q4bitsH, 4), m2), 4); - const __m256i q4h_3 = _mm256_slli_epi16(_mm256_and_si256(_mm256_srli_epi16(q4bitsH, 6), m2), 4); - - const __m256i q4_0 = _mm256_or_si256(_mm256_and_si256(q4bits1, m4), q4h_0); - const __m256i q4_1 = _mm256_or_si256(_mm256_and_si256(q4bits2, m4), q4h_1); - const __m256i q4_2 = _mm256_or_si256(_mm256_and_si256(_mm256_srli_epi16(q4bits1, 4), m4), q4h_2); - const __m256i q4_3 = _mm256_or_si256(_mm256_and_si256(_mm256_srli_epi16(q4bits2, 4), m4), q4h_3); - - const __m256i q8_0 = _mm256_loadu_si256((const __m256i*)q8); q8 += 32; - const __m256i q8_1 = _mm256_loadu_si256((const __m256i*)q8); q8 += 32; - const __m256i q8_2 = _mm256_loadu_si256((const __m256i*)q8); q8 += 32; - const __m256i q8_3 = _mm256_loadu_si256((const __m256i*)q8); q8 += 32; - - __m256i q8s_0 = _mm256_maddubs_epi16(m32s, q8_0); - __m256i q8s_1 = _mm256_maddubs_epi16(m32s, q8_1); - __m256i q8s_2 = _mm256_maddubs_epi16(m32s, q8_2); - __m256i q8s_3 = _mm256_maddubs_epi16(m32s, q8_3); - - __m256i p16_0 = _mm256_maddubs_epi16(q4_0, q8_0); - __m256i p16_1 = _mm256_maddubs_epi16(q4_1, q8_1); - __m256i p16_2 = _mm256_maddubs_epi16(q4_2, q8_2); - __m256i p16_3 = _mm256_maddubs_epi16(q4_3, q8_3); - - p16_0 = _mm256_sub_epi16(p16_0, q8s_0); - p16_1 = _mm256_sub_epi16(p16_1, q8s_1); - p16_2 = _mm256_sub_epi16(p16_2, q8s_2); - p16_3 = _mm256_sub_epi16(p16_3, q8s_3); - - p16_0 = _mm256_madd_epi16(_mm256_cvtepi8_epi16(scale_0), p16_0); - p16_1 = _mm256_madd_epi16(_mm256_cvtepi8_epi16(scale_1), p16_1); - p16_2 = _mm256_madd_epi16(_mm256_cvtepi8_epi16(scale_2), p16_2); - p16_3 = _mm256_madd_epi16(_mm256_cvtepi8_epi16(scale_3), p16_3); - - sumi = _mm256_add_epi32(sumi, _mm256_add_epi32(p16_0, p16_1)); - sumi = _mm256_add_epi32(sumi, _mm256_add_epi32(p16_2, p16_3)); - - } - - acc = _mm256_fmadd_ps(_mm256_broadcast_ss(&d), _mm256_cvtepi32_ps(sumi), acc); - } - - *s = hsum_float_8(acc); - -#elif defined __AVX__ - - const __m128i m4 = _mm_set1_epi8(0xF); - const __m128i m3 = _mm_set1_epi8(3); - const __m128i m32s = _mm_set1_epi8(32); - const __m128i m2 = _mm_set1_epi8(2); - - __m256 acc = _mm256_setzero_ps(); - - for (int i = 0; i < nb; ++i) { - - const float d = y[i].d * GGML_FP16_TO_FP32(x[i].d); - - const uint8_t * restrict q4 = x[i].ql; - const uint8_t * restrict qh = x[i].qh; - const int8_t * restrict q8 = y[i].qs; - - const __m128i scales = _mm_loadu_si128((const __m128i*)x[i].scales); - - __m128i sumi_0 = _mm_setzero_si128(); - __m128i sumi_1 = _mm_setzero_si128(); - - __m128i shuffle = _mm_set_epi64x(0x0101010101010101, 0x0000000000000000); - for (int j = 0; j < QK_K/128; ++j) { - - const __m128i q4bitsH_0 = _mm_loadu_si128((const __m128i*)qh); qh += 16; - const __m128i q4bitsH_1 = _mm_loadu_si128((const __m128i*)qh); qh += 16; - - const __m128i q4h_0 = _mm_slli_epi16(_mm_and_si128(q4bitsH_0, m3), 4); - const __m128i q4h_1 = _mm_slli_epi16(_mm_and_si128(q4bitsH_1, m3), 4); - const __m128i q4h_2 = _mm_slli_epi16(_mm_and_si128(_mm_srli_epi16(q4bitsH_0, 2), m3), 4); - const __m128i q4h_3 = _mm_slli_epi16(_mm_and_si128(_mm_srli_epi16(q4bitsH_1, 2), m3), 4); - const __m128i q4h_4 = _mm_slli_epi16(_mm_and_si128(_mm_srli_epi16(q4bitsH_0, 4), m3), 4); - const __m128i q4h_5 = _mm_slli_epi16(_mm_and_si128(_mm_srli_epi16(q4bitsH_1, 4), m3), 4); - const __m128i q4h_6 = _mm_slli_epi16(_mm_and_si128(_mm_srli_epi16(q4bitsH_0, 6), m3), 4); - const __m128i q4h_7 = _mm_slli_epi16(_mm_and_si128(_mm_srli_epi16(q4bitsH_1, 6), m3), 4); - - const __m128i q4bits1_0 = _mm_loadu_si128((const __m128i*)q4); q4 += 16; - const __m128i q4bits1_1 = _mm_loadu_si128((const __m128i*)q4); q4 += 16; - const __m128i q4bits2_0 = _mm_loadu_si128((const __m128i*)q4); q4 += 16; - const __m128i q4bits2_1 = _mm_loadu_si128((const __m128i*)q4); q4 += 16; - - const __m128i q4_0 = _mm_or_si128(_mm_and_si128(q4bits1_0, m4), q4h_0); - const __m128i q4_1 = _mm_or_si128(_mm_and_si128(q4bits1_1, m4), q4h_1); - const __m128i q4_2 = _mm_or_si128(_mm_and_si128(q4bits2_0, m4), q4h_2); - const __m128i q4_3 = _mm_or_si128(_mm_and_si128(q4bits2_1, m4), q4h_3); - const __m128i q4_4 = _mm_or_si128(_mm_and_si128(_mm_srli_epi16(q4bits1_0, 4), m4), q4h_4); - const __m128i q4_5 = _mm_or_si128(_mm_and_si128(_mm_srli_epi16(q4bits1_1, 4), m4), q4h_5); - const __m128i q4_6 = _mm_or_si128(_mm_and_si128(_mm_srli_epi16(q4bits2_0, 4), m4), q4h_6); - const __m128i q4_7 = _mm_or_si128(_mm_and_si128(_mm_srli_epi16(q4bits2_1, 4), m4), q4h_7); - - const __m128i q8_0 = _mm_loadu_si128((const __m128i*)q8); q8 += 16; - const __m128i q8_1 = _mm_loadu_si128((const __m128i*)q8); q8 += 16; - const __m128i q8_2 = _mm_loadu_si128((const __m128i*)q8); q8 += 16; - const __m128i q8_3 = _mm_loadu_si128((const __m128i*)q8); q8 += 16; - const __m128i q8_4 = _mm_loadu_si128((const __m128i*)q8); q8 += 16; - const __m128i q8_5 = _mm_loadu_si128((const __m128i*)q8); q8 += 16; - const __m128i q8_6 = _mm_loadu_si128((const __m128i*)q8); q8 += 16; - const __m128i q8_7 = _mm_loadu_si128((const __m128i*)q8); q8 += 16; - - __m128i q8s_0 = _mm_maddubs_epi16(m32s, q8_0); - __m128i q8s_1 = _mm_maddubs_epi16(m32s, q8_1); - __m128i q8s_2 = _mm_maddubs_epi16(m32s, q8_2); - __m128i q8s_3 = _mm_maddubs_epi16(m32s, q8_3); - __m128i q8s_4 = _mm_maddubs_epi16(m32s, q8_4); - __m128i q8s_5 = _mm_maddubs_epi16(m32s, q8_5); - __m128i q8s_6 = _mm_maddubs_epi16(m32s, q8_6); - __m128i q8s_7 = _mm_maddubs_epi16(m32s, q8_7); - - __m128i p16_0 = _mm_maddubs_epi16(q4_0, q8_0); - __m128i p16_1 = _mm_maddubs_epi16(q4_1, q8_1); - __m128i p16_2 = _mm_maddubs_epi16(q4_2, q8_2); - __m128i p16_3 = _mm_maddubs_epi16(q4_3, q8_3); - __m128i p16_4 = _mm_maddubs_epi16(q4_4, q8_4); - __m128i p16_5 = _mm_maddubs_epi16(q4_5, q8_5); - __m128i p16_6 = _mm_maddubs_epi16(q4_6, q8_6); - __m128i p16_7 = _mm_maddubs_epi16(q4_7, q8_7); - - p16_0 = _mm_sub_epi16(p16_0, q8s_0); - p16_1 = _mm_sub_epi16(p16_1, q8s_1); - p16_2 = _mm_sub_epi16(p16_2, q8s_2); - p16_3 = _mm_sub_epi16(p16_3, q8s_3); - p16_4 = _mm_sub_epi16(p16_4, q8s_4); - p16_5 = _mm_sub_epi16(p16_5, q8s_5); - p16_6 = _mm_sub_epi16(p16_6, q8s_6); - p16_7 = _mm_sub_epi16(p16_7, q8s_7); - - const __m128i scale_0 = _mm_shuffle_epi8(scales, shuffle); - shuffle = _mm_add_epi8(shuffle, m2); - const __m128i scale_1 = _mm_shuffle_epi8(scales, shuffle); - shuffle = _mm_add_epi8(shuffle, m2); - const __m128i scale_2 = _mm_shuffle_epi8(scales, shuffle); - shuffle = _mm_add_epi8(shuffle, m2); - const __m128i scale_3 = _mm_shuffle_epi8(scales, shuffle); - shuffle = _mm_add_epi8(shuffle, m2); - - p16_0 = _mm_madd_epi16(_mm_cvtepi8_epi16(scale_0), p16_0); - p16_1 = _mm_madd_epi16(_mm_cvtepi8_epi16(_mm_unpackhi_epi64(scale_0, scale_0)), p16_1); - p16_2 = _mm_madd_epi16(_mm_cvtepi8_epi16(scale_1), p16_2); - p16_3 = _mm_madd_epi16(_mm_cvtepi8_epi16(_mm_unpackhi_epi64(scale_1, scale_1)), p16_3); - p16_4 = _mm_madd_epi16(_mm_cvtepi8_epi16(scale_2), p16_4); - p16_5 = _mm_madd_epi16(_mm_cvtepi8_epi16(_mm_unpackhi_epi64(scale_2, scale_2)), p16_5); - p16_6 = _mm_madd_epi16(_mm_cvtepi8_epi16(scale_3), p16_6); - p16_7 = _mm_madd_epi16(_mm_cvtepi8_epi16(_mm_unpackhi_epi64(scale_3, scale_3)), p16_7); - - sumi_0 = _mm_add_epi32(sumi_0, _mm_add_epi32(p16_0, p16_2)); - sumi_1 = _mm_add_epi32(sumi_1, _mm_add_epi32(p16_1, p16_3)); - sumi_0 = _mm_add_epi32(sumi_0, _mm_add_epi32(p16_4, p16_6)); - sumi_1 = _mm_add_epi32(sumi_1, _mm_add_epi32(p16_5, p16_7)); - - } - - __m256i sumi = MM256_SET_M128I(sumi_1, sumi_0); - acc = _mm256_add_ps(_mm256_mul_ps(_mm256_broadcast_ss(&d), _mm256_cvtepi32_ps(sumi)), acc); - } - - *s = hsum_float_8(acc); - -#elif defined __riscv_v_intrinsic - - float sumf = 0; - for (int i = 0; i < nb; ++i) { - - const float d = GGML_FP16_TO_FP32(x[i].d) * y[i].d; - - const uint8_t * restrict q6 = x[i].ql; - const uint8_t * restrict qh = x[i].qh; - const int8_t * restrict q8 = y[i].qs; - - const int8_t * restrict scale = x[i].scales; - - size_t vl; - - vint32m1_t vzero = __riscv_vmv_v_x_i32m1(0, 1); - - int sum_t = 0; - int is = 0; - - for (int j = 0; j < QK_K/128; ++j) { - - vl = 32; - - // load qh - vuint8m1_t qh_x = __riscv_vle8_v_u8m1(qh, vl); - - // load Q6 - vuint8m1_t q6_0 = __riscv_vle8_v_u8m1(q6, vl); - vuint8m1_t q6_1 = __riscv_vle8_v_u8m1(q6+32, vl); - - vuint8m1_t q6a_0 = __riscv_vand_vx_u8m1(q6_0, 0x0F, vl); - vuint8m1_t q6a_1 = __riscv_vand_vx_u8m1(q6_1, 0x0F, vl); - vuint8m1_t q6s_0 = __riscv_vsrl_vx_u8m1(q6_0, 0x04, vl); - vuint8m1_t q6s_1 = __riscv_vsrl_vx_u8m1(q6_1, 0x04, vl); - - vuint8m1_t qh_0 = __riscv_vand_vx_u8m1(qh_x, 0x03, vl); - vuint8m1_t qh_1 = __riscv_vand_vx_u8m1(__riscv_vsrl_vx_u8m1(qh_x, 0x2, vl), 0x03 , vl); - vuint8m1_t qh_2 = __riscv_vand_vx_u8m1(__riscv_vsrl_vx_u8m1(qh_x, 0x4, vl), 0x03 , vl); - vuint8m1_t qh_3 = __riscv_vand_vx_u8m1(__riscv_vsrl_vx_u8m1(qh_x, 0x6, vl), 0x03 , vl); - - vuint8m1_t qhi_0 = __riscv_vor_vv_u8m1(q6a_0, __riscv_vsll_vx_u8m1(qh_0, 0x04, vl), vl); - vuint8m1_t qhi_1 = __riscv_vor_vv_u8m1(q6a_1, __riscv_vsll_vx_u8m1(qh_1, 0x04, vl), vl); - vuint8m1_t qhi_2 = __riscv_vor_vv_u8m1(q6s_0, __riscv_vsll_vx_u8m1(qh_2, 0x04, vl), vl); - vuint8m1_t qhi_3 = __riscv_vor_vv_u8m1(q6s_1, __riscv_vsll_vx_u8m1(qh_3, 0x04, vl), vl); - - vint8m1_t a_0 = __riscv_vsub_vx_i8m1(__riscv_vreinterpret_v_u8m1_i8m1(qhi_0), 32, vl); - vint8m1_t a_1 = __riscv_vsub_vx_i8m1(__riscv_vreinterpret_v_u8m1_i8m1(qhi_1), 32, vl); - vint8m1_t a_2 = __riscv_vsub_vx_i8m1(__riscv_vreinterpret_v_u8m1_i8m1(qhi_2), 32, vl); - vint8m1_t a_3 = __riscv_vsub_vx_i8m1(__riscv_vreinterpret_v_u8m1_i8m1(qhi_3), 32, vl); - - // load Q8 and take product - vint16m2_t va_q_0 = __riscv_vwmul_vv_i16m2(a_0, __riscv_vle8_v_i8m1(q8, vl), vl); - vint16m2_t va_q_1 = __riscv_vwmul_vv_i16m2(a_1, __riscv_vle8_v_i8m1(q8+32, vl), vl); - vint16m2_t va_q_2 = __riscv_vwmul_vv_i16m2(a_2, __riscv_vle8_v_i8m1(q8+64, vl), vl); - vint16m2_t va_q_3 = __riscv_vwmul_vv_i16m2(a_3, __riscv_vle8_v_i8m1(q8+96, vl), vl); - - vl = 16; - - vint32m2_t vaux_0 = __riscv_vwmul_vx_i32m2(__riscv_vget_v_i16m2_i16m1(va_q_0, 0), scale[is+0], vl); - vint32m2_t vaux_1 = __riscv_vwmul_vx_i32m2(__riscv_vget_v_i16m2_i16m1(va_q_0, 1), scale[is+1], vl); - vint32m2_t vaux_2 = __riscv_vwmul_vx_i32m2(__riscv_vget_v_i16m2_i16m1(va_q_1, 0), scale[is+2], vl); - vint32m2_t vaux_3 = __riscv_vwmul_vx_i32m2(__riscv_vget_v_i16m2_i16m1(va_q_1, 1), scale[is+3], vl); - vint32m2_t vaux_4 = __riscv_vwmul_vx_i32m2(__riscv_vget_v_i16m2_i16m1(va_q_2, 0), scale[is+4], vl); - vint32m2_t vaux_5 = __riscv_vwmul_vx_i32m2(__riscv_vget_v_i16m2_i16m1(va_q_2, 1), scale[is+5], vl); - vint32m2_t vaux_6 = __riscv_vwmul_vx_i32m2(__riscv_vget_v_i16m2_i16m1(va_q_3, 0), scale[is+6], vl); - vint32m2_t vaux_7 = __riscv_vwmul_vx_i32m2(__riscv_vget_v_i16m2_i16m1(va_q_3, 1), scale[is+7], vl); - - vint32m1_t isum0 = __riscv_vredsum_vs_i32m2_i32m1(__riscv_vadd_vv_i32m2(vaux_0, vaux_1, vl), vzero, vl); - vint32m1_t isum1 = __riscv_vredsum_vs_i32m2_i32m1(__riscv_vadd_vv_i32m2(vaux_2, vaux_3, vl), isum0, vl); - vint32m1_t isum2 = __riscv_vredsum_vs_i32m2_i32m1(__riscv_vadd_vv_i32m2(vaux_4, vaux_5, vl), isum1, vl); - vint32m1_t isum3 = __riscv_vredsum_vs_i32m2_i32m1(__riscv_vadd_vv_i32m2(vaux_6, vaux_7, vl), isum2, vl); - - sum_t += __riscv_vmv_x_s_i32m1_i32(isum3); - - q6 += 64; qh += 32; q8 += 128; is=8; - - } - - sumf += d * sum_t; - - } - - *s = sumf; - -#else - - int8_t aux8[QK_K]; - int16_t aux16[8]; - float sums [8]; - int32_t aux32[8]; - memset(sums, 0, 8*sizeof(float)); - - float sumf = 0; - for (int i = 0; i < nb; ++i) { - const uint8_t * restrict q4 = x[i].ql; - const uint8_t * restrict qh = x[i].qh; - const int8_t * restrict q8 = y[i].qs; - memset(aux32, 0, 8*sizeof(int32_t)); - int8_t * restrict a = aux8; - for (int j = 0; j < QK_K; j += 128) { - for (int l = 0; l < 32; ++l) { - a[l + 0] = (int8_t)((q4[l + 0] & 0xF) | (((qh[l] >> 0) & 3) << 4)) - 32; - a[l + 32] = (int8_t)((q4[l + 32] & 0xF) | (((qh[l] >> 2) & 3) << 4)) - 32; - a[l + 64] = (int8_t)((q4[l + 0] >> 4) | (((qh[l] >> 4) & 3) << 4)) - 32; - a[l + 96] = (int8_t)((q4[l + 32] >> 4) | (((qh[l] >> 6) & 3) << 4)) - 32; - } - a += 128; - q4 += 64; - qh += 32; - } - a = aux8; - int is = 0; - for (int j = 0; j < QK_K/16; ++j) { - int scale = x[i].scales[is++]; - for (int l = 0; l < 8; ++l) aux16[l] = q8[l] * a[l]; - for (int l = 0; l < 8; ++l) aux32[l] += scale * aux16[l]; - q8 += 8; a += 8; - for (int l = 0; l < 8; ++l) aux16[l] = q8[l] * a[l]; - for (int l = 0; l < 8; ++l) aux32[l] += scale * aux16[l]; - q8 += 8; a += 8; - } - const float d = GGML_FP16_TO_FP32(x[i].d) * y[i].d; - for (int l = 0; l < 8; ++l) sums[l] += d * aux32[l]; - } - for (int l = 0; l < 8; ++l) sumf += sums[l]; - *s = sumf; -#endif -} - -#else - -void ggml_vec_dot_q6_K_q8_K(int n, float * restrict s, size_t bs, const void * restrict vx, size_t bx, const void * restrict vy, size_t by, int nrc) { - assert(n % QK_K == 0); - assert(nrc == 1); - UNUSED(nrc); - UNUSED(bx); - UNUSED(by); - UNUSED(bs); - - const block_q6_K * restrict x = vx; - const block_q8_K * restrict y = vy; - - const int nb = n / QK_K; - -#ifdef __ARM_NEON - float sum = 0; - - const uint8x16_t m4b = vdupq_n_u8(0xF); - const int8x16_t m32s = vdupq_n_s8(32); - const int32x4_t vzero = vdupq_n_s32(0); - - const uint8x16_t mone = vdupq_n_u8(3); - - ggml_int8x16x4_t q6bytes; - ggml_uint8x16x4_t q6h; - - for (int i = 0; i < nb; ++i) { - - const float d_all = GGML_FP16_TO_FP32(x[i].d); - - const uint8_t * restrict q6 = x[i].ql; - const uint8_t * restrict qh = x[i].qh; - const int8_t * restrict q8 = y[i].qs; - - const int8_t * restrict scale = x[i].scales; - - int32_t isum = 0; - - uint8x16_t qhbits = vld1q_u8(qh); - ggml_uint8x16x2_t q6bits = ggml_vld1q_u8_x2(q6); - ggml_int8x16x4_t q8bytes = ggml_vld1q_s8_x4(q8); - - q6h.val[0] = vshlq_n_u8(vandq_u8(mone, qhbits), 4); - uint8x16_t shifted = vshrq_n_u8(qhbits, 2); - q6h.val[1] = vshlq_n_u8(vandq_u8(mone, shifted), 4); - shifted = vshrq_n_u8(qhbits, 4); - q6h.val[2] = vshlq_n_u8(vandq_u8(mone, shifted), 4); - shifted = vshrq_n_u8(qhbits, 6); - q6h.val[3] = vshlq_n_u8(vandq_u8(mone, shifted), 4); - - q6bytes.val[0] = vsubq_s8(vreinterpretq_s8_u8(vorrq_u8(vandq_u8(q6bits.val[0], m4b), q6h.val[0])), m32s); - q6bytes.val[1] = vsubq_s8(vreinterpretq_s8_u8(vorrq_u8(vandq_u8(q6bits.val[1], m4b), q6h.val[1])), m32s); - q6bytes.val[2] = vsubq_s8(vreinterpretq_s8_u8(vorrq_u8(vshrq_n_u8(q6bits.val[0], 4), q6h.val[2])), m32s); - q6bytes.val[3] = vsubq_s8(vreinterpretq_s8_u8(vorrq_u8(vshrq_n_u8(q6bits.val[1], 4), q6h.val[3])), m32s); - - isum += vaddvq_s32(ggml_vdotq_s32(vzero, q6bytes.val[0], q8bytes.val[0])) * scale[0] + - vaddvq_s32(ggml_vdotq_s32(vzero, q6bytes.val[1], q8bytes.val[1])) * scale[1] + - vaddvq_s32(ggml_vdotq_s32(vzero, q6bytes.val[2], q8bytes.val[2])) * scale[2] + - vaddvq_s32(ggml_vdotq_s32(vzero, q6bytes.val[3], q8bytes.val[3])) * scale[3]; - - sum += isum * d_all * y[i].d; - - } - *s = sum; - -#elif defined __AVX2__ - - const __m256i m4 = _mm256_set1_epi8(0xF); - const __m256i m2 = _mm256_set1_epi8(3); - const __m256i m32s = _mm256_set1_epi8(32); - - __m256 acc = _mm256_setzero_ps(); - - for (int i = 0; i < nb; ++i) { - - const float d = y[i].d * GGML_FP16_TO_FP32(x[i].d); - - const uint8_t * restrict q4 = x[i].ql; - const uint8_t * restrict qh = x[i].qh; - const int8_t * restrict q8 = y[i].qs; - - const __m64 scales_1 = _mm_set1_pi8(x[i].scales[0]); - const __m64 scales_2 = _mm_set1_pi8(x[i].scales[1]); - const __m64 scales_3 = _mm_set1_pi8(x[i].scales[2]); - const __m64 scales_4 = _mm_set1_pi8(x[i].scales[3]); - - __m256i sumi = _mm256_setzero_si256(); - - const __m128i scale_0 = _mm_set_epi64(scales_2, scales_1); - const __m128i scale_1 = _mm_set_epi64(scales_4, scales_3); - - const __m256i q4bits1 = _mm256_loadu_si256((const __m256i*)q4); - const __m128i q4bitsH = _mm_loadu_si128((const __m128i*)qh); - - const __m256i q4h_0 = _mm256_slli_epi16(_mm256_and_si256(MM256_SET_M128I(_mm_srli_epi16(q4bitsH, 2), q4bitsH), m2), 4); - const __m256i q4h_1 = _mm256_slli_epi16(_mm256_and_si256(MM256_SET_M128I(_mm_srli_epi16(q4bitsH, 6), _mm_srli_epi16(q4bitsH, 4)), m2), 4); - - const __m256i q4_0 = _mm256_or_si256(_mm256_and_si256(q4bits1, m4), q4h_0); - const __m256i q4_1 = _mm256_or_si256(_mm256_and_si256(_mm256_srli_epi16(q4bits1, 4), m4), q4h_1); - - const __m256i q8_0 = _mm256_loadu_si256((const __m256i*)(q8+ 0)); - const __m256i q8_1 = _mm256_loadu_si256((const __m256i*)(q8+32)); - - __m256i q8s_0 = _mm256_maddubs_epi16(m32s, q8_0); - __m256i q8s_1 = _mm256_maddubs_epi16(m32s, q8_1); - - __m256i p16_0 = _mm256_maddubs_epi16(q4_0, q8_0); - __m256i p16_1 = _mm256_maddubs_epi16(q4_1, q8_1); - - p16_0 = _mm256_sub_epi16(p16_0, q8s_0); - p16_1 = _mm256_sub_epi16(p16_1, q8s_1); - - p16_0 = _mm256_madd_epi16(_mm256_cvtepi8_epi16(scale_0), p16_0); - p16_1 = _mm256_madd_epi16(_mm256_cvtepi8_epi16(scale_1), p16_1); - - sumi = _mm256_add_epi32(sumi, _mm256_add_epi32(p16_0, p16_1)); - - acc = _mm256_fmadd_ps(_mm256_broadcast_ss(&d), _mm256_cvtepi32_ps(sumi), acc); - } - - *s = hsum_float_8(acc); - -#elif defined __AVX__ - - const __m128i m4 = _mm_set1_epi8(0xF); - const __m128i m2 = _mm_set1_epi8(3); - const __m128i m32s = _mm_set1_epi8(32); - - __m256 acc = _mm256_setzero_ps(); - - for (int i = 0; i < nb; ++i) { - - const float d = y[i].d * GGML_FP16_TO_FP32(x[i].d); - - const uint8_t * restrict q4 = x[i].ql; - const uint8_t * restrict qh = x[i].qh; - const int8_t * restrict q8 = y[i].qs; - - const __m64 scales_1 = _mm_set1_pi8(x[i].scales[0]); - const __m64 scales_2 = _mm_set1_pi8(x[i].scales[1]); - const __m64 scales_3 = _mm_set1_pi8(x[i].scales[2]); - const __m64 scales_4 = _mm_set1_pi8(x[i].scales[3]); - - __m128i sumi_0 = _mm_setzero_si128(); - __m128i sumi_1 = _mm_setzero_si128(); - - const __m128i scale_0 = _mm_set_epi64(scales_2, scales_1); - const __m128i scale_1 = _mm_set_epi64(scales_4, scales_3); - - const __m256i q4bits1 = _mm256_loadu_si256((const __m256i*)q4); - const __m128i q4bitsH = _mm_loadu_si128((const __m128i*)qh); - - const __m128i q4h_0 = _mm_slli_epi16(_mm_and_si128(q4bitsH, m2), 4); - const __m128i q4h_1 = _mm_slli_epi16(_mm_and_si128(_mm_srli_epi16(q4bitsH, 2), m2), 4); - const __m128i q4h_2 = _mm_slli_epi16(_mm_and_si128(_mm_srli_epi16(q4bitsH, 4), m2), 4); - const __m128i q4h_3 = _mm_slli_epi16(_mm_and_si128(_mm_srli_epi16(q4bitsH, 6), m2), 4); - - const __m128i q4_0 = _mm_or_si128(_mm_and_si128(_mm256_extractf128_si256(q4bits1, 0), m4), q4h_0); - const __m128i q4_1 = _mm_or_si128(_mm_and_si128(_mm256_extractf128_si256(q4bits1, 1), m4), q4h_1); - const __m128i q4_2 = _mm_or_si128(_mm_and_si128(_mm_srli_epi16(_mm256_extractf128_si256(q4bits1, 0), 4), m4), q4h_2); - const __m128i q4_3 = _mm_or_si128(_mm_and_si128(_mm_srli_epi16(_mm256_extractf128_si256(q4bits1, 1), 4), m4), q4h_3); - - const __m256i q8_0 = _mm256_loadu_si256((const __m256i*)(q8+ 0)); - const __m256i q8_1 = _mm256_loadu_si256((const __m256i*)(q8+32)); - - __m128i q8s_0 = _mm_maddubs_epi16(m32s, _mm256_extractf128_si256(q8_0, 0)); - __m128i q8s_1 = _mm_maddubs_epi16(m32s, _mm256_extractf128_si256(q8_0, 1)); - __m128i q8s_2 = _mm_maddubs_epi16(m32s, _mm256_extractf128_si256(q8_1, 0)); - __m128i q8s_3 = _mm_maddubs_epi16(m32s, _mm256_extractf128_si256(q8_1, 1)); - - __m128i p16_0 = _mm_maddubs_epi16(q4_0, _mm256_extractf128_si256(q8_0, 0)); - __m128i p16_1 = _mm_maddubs_epi16(q4_1, _mm256_extractf128_si256(q8_0, 1)); - __m128i p16_2 = _mm_maddubs_epi16(q4_2, _mm256_extractf128_si256(q8_1, 0)); - __m128i p16_3 = _mm_maddubs_epi16(q4_3, _mm256_extractf128_si256(q8_1, 1)); - - p16_0 = _mm_sub_epi16(p16_0, q8s_0); - p16_1 = _mm_sub_epi16(p16_1, q8s_1); - p16_2 = _mm_sub_epi16(p16_2, q8s_2); - p16_3 = _mm_sub_epi16(p16_3, q8s_3); - - p16_0 = _mm_madd_epi16(_mm_cvtepi8_epi16(scale_0), p16_0); - p16_1 = _mm_madd_epi16(_mm_cvtepi8_epi16(_mm_unpackhi_epi64(scale_0, scale_0)), p16_1); - p16_2 = _mm_madd_epi16(_mm_cvtepi8_epi16(scale_1), p16_2); - p16_3 = _mm_madd_epi16(_mm_cvtepi8_epi16(_mm_unpackhi_epi64(scale_1, scale_1)), p16_3); - - sumi_0 = _mm_add_epi32(sumi_0, _mm_add_epi32(p16_0, p16_2)); - sumi_1 = _mm_add_epi32(sumi_1, _mm_add_epi32(p16_1, p16_3)); - - acc = _mm256_add_ps(_mm256_mul_ps(_mm256_broadcast_ss(&d), _mm256_cvtepi32_ps(MM256_SET_M128I(sumi_1, sumi_0))), acc); - } - - *s = hsum_float_8(acc); - -#elif defined __riscv_v_intrinsic - - float sumf = 0; - - for (int i = 0; i < nb; ++i) { - - const float d_all = GGML_FP16_TO_FP32(x[i].d); - - const uint8_t * restrict q6 = x[i].ql; - const uint8_t * restrict qh = x[i].qh; - const int8_t * restrict q8 = y[i].qs; - - const int8_t * restrict scale = x[i].scales; - - int32_t isum = 0; - - size_t vl = 16; - - vint32m1_t vzero = __riscv_vmv_v_x_i32m1(0, 1); - - // load Q6 - vuint8mf2_t q6_0 = __riscv_vle8_v_u8mf2(q6, vl); - vuint8mf2_t q6_1 = __riscv_vle8_v_u8mf2(q6+16, vl); - - // load qh - vuint8mf2_t qh_x = __riscv_vle8_v_u8mf2(qh, vl); - - vuint8mf2_t qh0 = __riscv_vsll_vx_u8mf2(__riscv_vand_vx_u8mf2(qh_x, 0x3, vl), 0x4, vl); - qh_x = __riscv_vsrl_vx_u8mf2(qh_x, 0x2, vl); - vuint8mf2_t qh1 = __riscv_vsll_vx_u8mf2(__riscv_vand_vx_u8mf2(qh_x, 0x3, vl), 0x4, vl); - qh_x = __riscv_vsrl_vx_u8mf2(qh_x, 0x2, vl); - vuint8mf2_t qh2 = __riscv_vsll_vx_u8mf2(__riscv_vand_vx_u8mf2(qh_x, 0x3, vl), 0x4, vl); - qh_x = __riscv_vsrl_vx_u8mf2(qh_x, 0x2, vl); - vuint8mf2_t qh3 = __riscv_vsll_vx_u8mf2(__riscv_vand_vx_u8mf2(qh_x, 0x3, vl), 0x4, vl); - - vuint8mf2_t q6h_0 = __riscv_vor_vv_u8mf2(__riscv_vand_vx_u8mf2(q6_0, 0xF, vl), qh0, vl); - vuint8mf2_t q6h_1 = __riscv_vor_vv_u8mf2(__riscv_vand_vx_u8mf2(q6_1, 0xF, vl), qh1, vl); - vuint8mf2_t q6h_2 = __riscv_vor_vv_u8mf2(__riscv_vsrl_vx_u8mf2(q6_0, 0x4, vl), qh2, vl); - vuint8mf2_t q6h_3 = __riscv_vor_vv_u8mf2(__riscv_vsrl_vx_u8mf2(q6_1, 0x4, vl), qh3, vl); - - vint8mf2_t q6v_0 = __riscv_vsub_vx_i8mf2(__riscv_vreinterpret_v_u8mf2_i8mf2(q6h_0), 32, vl); - vint8mf2_t q6v_1 = __riscv_vsub_vx_i8mf2(__riscv_vreinterpret_v_u8mf2_i8mf2(q6h_1), 32, vl); - vint8mf2_t q6v_2 = __riscv_vsub_vx_i8mf2(__riscv_vreinterpret_v_u8mf2_i8mf2(q6h_2), 32, vl); - vint8mf2_t q6v_3 = __riscv_vsub_vx_i8mf2(__riscv_vreinterpret_v_u8mf2_i8mf2(q6h_3), 32, vl); - - // load Q8 and take product - vint16m1_t p0 = __riscv_vwmul_vv_i16m1(q6v_0, __riscv_vle8_v_i8mf2(q8, vl), vl); - vint16m1_t p1 = __riscv_vwmul_vv_i16m1(q6v_1, __riscv_vle8_v_i8mf2(q8+16, vl), vl); - vint16m1_t p2 = __riscv_vwmul_vv_i16m1(q6v_2, __riscv_vle8_v_i8mf2(q8+32, vl), vl); - vint16m1_t p3 = __riscv_vwmul_vv_i16m1(q6v_3, __riscv_vle8_v_i8mf2(q8+48, vl), vl); - - vint32m1_t vs_0 = __riscv_vwredsum_vs_i16m1_i32m1(p0, vzero, vl); - vint32m1_t vs_1 = __riscv_vwredsum_vs_i16m1_i32m1(p1, vzero, vl); - vint32m1_t vs_2 = __riscv_vwredsum_vs_i16m1_i32m1(p2, vzero, vl); - vint32m1_t vs_3 = __riscv_vwredsum_vs_i16m1_i32m1(p3, vzero, vl); - - isum += __riscv_vmv_x_s_i32m1_i32(vs_0) * scale[0]; - isum += __riscv_vmv_x_s_i32m1_i32(vs_1) * scale[1]; - isum += __riscv_vmv_x_s_i32m1_i32(vs_2) * scale[2]; - isum += __riscv_vmv_x_s_i32m1_i32(vs_3) * scale[3]; - - sumf += isum * d_all * y[i].d; - - } - - *s = sumf; - -#else - - int8_t aux8[QK_K]; - int16_t aux16[8]; - float sums [8]; - int32_t aux32[8]; - memset(sums, 0, 8*sizeof(float)); - - float sumf = 0; - for (int i = 0; i < nb; ++i) { - const uint8_t * restrict q4 = x[i].ql; - const uint8_t * restrict qh = x[i].qh; - const int8_t * restrict q8 = y[i].qs; - memset(aux32, 0, 8*sizeof(int32_t)); - int8_t * restrict a = aux8; - for (int l = 0; l < 16; ++l) { - a[l+ 0] = (int8_t)((q4[l+ 0] & 0xF) | (((qh[l] >> 0) & 3) << 4)) - 32; - a[l+16] = (int8_t)((q4[l+16] & 0xF) | (((qh[l] >> 2) & 3) << 4)) - 32; - a[l+32] = (int8_t)((q4[l+ 0] >> 4) | (((qh[l] >> 4) & 3) << 4)) - 32; - a[l+48] = (int8_t)((q4[l+16] >> 4) | (((qh[l] >> 6) & 3) << 4)) - 32; - } - int is = 0; - for (int j = 0; j < QK_K/16; ++j) { - int scale = x[i].scales[is++]; - for (int l = 0; l < 8; ++l) aux16[l] = q8[l] * a[l]; - for (int l = 0; l < 8; ++l) aux32[l] += scale * aux16[l]; - q8 += 8; a += 8; - for (int l = 0; l < 8; ++l) aux16[l] = q8[l] * a[l]; - for (int l = 0; l < 8; ++l) aux32[l] += scale * aux16[l]; - q8 += 8; a += 8; - } - const float d = GGML_FP16_TO_FP32(x[i].d) * y[i].d; - for (int l = 0; l < 8; ++l) sums[l] += d * aux32[l]; - } - for (int l = 0; l < 8; ++l) sumf += sums[l]; - *s = sumf; -#endif -} - -#endif - -#if defined (__AVX2__) || defined (__ARM_NEON) -static const int8_t keven_signs_q2xs[1024] = { - 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, -1, 1, -1, 1, 1, 1, 1, 1, -1, -1, -1, 1, 1, 1, 1, 1, 1, - 1, 1, -1, 1, 1, 1, 1, -1, -1, 1, -1, 1, 1, 1, 1, 1, 1, -1, -1, 1, 1, 1, 1, 1, -1, -1, -1, 1, 1, 1, 1, -1, - 1, 1, 1, -1, 1, 1, 1, -1, -1, 1, 1, -1, 1, 1, 1, 1, 1, -1, 1, -1, 1, 1, 1, 1, -1, -1, 1, -1, 1, 1, 1, -1, - 1, 1, -1, -1, 1, 1, 1, 1, -1, 1, -1, -1, 1, 1, 1, -1, 1, -1, -1, -1, 1, 1, 1, -1, -1, -1, -1, -1, 1, 1, 1, 1, - 1, 1, 1, 1, -1, 1, 1, -1, -1, 1, 1, 1, -1, 1, 1, 1, 1, -1, 1, 1, -1, 1, 1, 1, -1, -1, 1, 1, -1, 1, 1, -1, - 1, 1, -1, 1, -1, 1, 1, 1, -1, 1, -1, 1, -1, 1, 1, -1, 1, -1, -1, 1, -1, 1, 1, -1, -1, -1, -1, 1, -1, 1, 1, 1, - 1, 1, 1, -1, -1, 1, 1, 1, -1, 1, 1, -1, -1, 1, 1, -1, 1, -1, 1, -1, -1, 1, 1, -1, -1, -1, 1, -1, -1, 1, 1, 1, - 1, 1, -1, -1, -1, 1, 1, -1, -1, 1, -1, -1, -1, 1, 1, 1, 1, -1, -1, -1, -1, 1, 1, 1, -1, -1, -1, -1, -1, 1, 1, -1, - 1, 1, 1, 1, 1, -1, 1, -1, -1, 1, 1, 1, 1, -1, 1, 1, 1, -1, 1, 1, 1, -1, 1, 1, -1, -1, 1, 1, 1, -1, 1, -1, - 1, 1, -1, 1, 1, -1, 1, 1, -1, 1, -1, 1, 1, -1, 1, -1, 1, -1, -1, 1, 1, -1, 1, -1, -1, -1, -1, 1, 1, -1, 1, 1, - 1, 1, 1, -1, 1, -1, 1, 1, -1, 1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, -1, -1, 1, -1, 1, -1, 1, 1, - 1, 1, -1, -1, 1, -1, 1, -1, -1, 1, -1, -1, 1, -1, 1, 1, 1, -1, -1, -1, 1, -1, 1, 1, -1, -1, -1, -1, 1, -1, 1, -1, - 1, 1, 1, 1, -1, -1, 1, 1, -1, 1, 1, 1, -1, -1, 1, -1, 1, -1, 1, 1, -1, -1, 1, -1, -1, -1, 1, 1, -1, -1, 1, 1, - 1, 1, -1, 1, -1, -1, 1, -1, -1, 1, -1, 1, -1, -1, 1, 1, 1, -1, -1, 1, -1, -1, 1, 1, -1, -1, -1, 1, -1, -1, 1, -1, - 1, 1, 1, -1, -1, -1, 1, -1, -1, 1, 1, -1, -1, -1, 1, 1, 1, -1, 1, -1, -1, -1, 1, 1, -1, -1, 1, -1, -1, -1, 1, -1, - 1, 1, -1, -1, -1, -1, 1, 1, -1, 1, -1, -1, -1, -1, 1, -1, 1, -1, -1, -1, -1, -1, 1, -1, -1, -1, -1, -1, -1, -1, 1, 1, - 1, 1, 1, 1, 1, 1, -1, -1, -1, 1, 1, 1, 1, 1, -1, 1, 1, -1, 1, 1, 1, 1, -1, 1, -1, -1, 1, 1, 1, 1, -1, -1, - 1, 1, -1, 1, 1, 1, -1, 1, -1, 1, -1, 1, 1, 1, -1, -1, 1, -1, -1, 1, 1, 1, -1, -1, -1, -1, -1, 1, 1, 1, -1, 1, - 1, 1, 1, -1, 1, 1, -1, 1, -1, 1, 1, -1, 1, 1, -1, -1, 1, -1, 1, -1, 1, 1, -1, -1, -1, -1, 1, -1, 1, 1, -1, 1, - 1, 1, -1, -1, 1, 1, -1, -1, -1, 1, -1, -1, 1, 1, -1, 1, 1, -1, -1, -1, 1, 1, -1, 1, -1, -1, -1, -1, 1, 1, -1, -1, - 1, 1, 1, 1, -1, 1, -1, 1, -1, 1, 1, 1, -1, 1, -1, -1, 1, -1, 1, 1, -1, 1, -1, -1, -1, -1, 1, 1, -1, 1, -1, 1, - 1, 1, -1, 1, -1, 1, -1, -1, -1, 1, -1, 1, -1, 1, -1, 1, 1, -1, -1, 1, -1, 1, -1, 1, -1, -1, -1, 1, -1, 1, -1, -1, - 1, 1, 1, -1, -1, 1, -1, -1, -1, 1, 1, -1, -1, 1, -1, 1, 1, -1, 1, -1, -1, 1, -1, 1, -1, -1, 1, -1, -1, 1, -1, -1, - 1, 1, -1, -1, -1, 1, -1, 1, -1, 1, -1, -1, -1, 1, -1, -1, 1, -1, -1, -1, -1, 1, -1, -1, -1, -1, -1, -1, -1, 1, -1, 1, - 1, 1, 1, 1, 1, -1, -1, 1, -1, 1, 1, 1, 1, -1, -1, -1, 1, -1, 1, 1, 1, -1, -1, -1, -1, -1, 1, 1, 1, -1, -1, 1, - 1, 1, -1, 1, 1, -1, -1, -1, -1, 1, -1, 1, 1, -1, -1, 1, 1, -1, -1, 1, 1, -1, -1, 1, -1, -1, -1, 1, 1, -1, -1, -1, - 1, 1, 1, -1, 1, -1, -1, -1, -1, 1, 1, -1, 1, -1, -1, 1, 1, -1, 1, -1, 1, -1, -1, 1, -1, -1, 1, -1, 1, -1, -1, -1, - 1, 1, -1, -1, 1, -1, -1, 1, -1, 1, -1, -1, 1, -1, -1, -1, 1, -1, -1, -1, 1, -1, -1, -1, -1, -1, -1, -1, 1, -1, -1, 1, - 1, 1, 1, 1, -1, -1, -1, -1, -1, 1, 1, 1, -1, -1, -1, 1, 1, -1, 1, 1, -1, -1, -1, 1, -1, -1, 1, 1, -1, -1, -1, -1, - 1, 1, -1, 1, -1, -1, -1, 1, -1, 1, -1, 1, -1, -1, -1, -1, 1, -1, -1, 1, -1, -1, -1, -1, -1, -1, -1, 1, -1, -1, -1, 1, - 1, 1, 1, -1, -1, -1, -1, 1, -1, 1, 1, -1, -1, -1, -1, -1, 1, -1, 1, -1, -1, -1, -1, -1, -1, -1, 1, -1, -1, -1, -1, 1, - 1, 1, -1, -1, -1, -1, -1, -1, -1, 1, -1, -1, -1, -1, -1, 1, 1, -1, -1, -1, -1, -1, -1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -}; -#endif - -void ggml_vec_dot_iq2_xxs_q8_K(int n, float * restrict s, size_t bs, const void * restrict vx, size_t bx, const void * restrict vy, size_t by, int nrc) { - assert(n % QK_K == 0); - assert(nrc == 1); - UNUSED(nrc); - UNUSED(bx); - UNUSED(by); - UNUSED(bs); - - const block_iq2_xxs * restrict x = vx; - const block_q8_K * restrict y = vy; - - const int nb = n / QK_K; - -#if defined(__ARM_NEON) - - const uint64_t * signs64 = (const uint64_t *)keven_signs_q2xs; - - uint32_t aux32[4]; - const uint8_t * aux8 = (const uint8_t *)aux32; - - ggml_int8x16x4_t q2u; - ggml_int8x16x4_t q2s; - ggml_int8x16x4_t q8b; - - float sumf = 0; - for (int i = 0; i < nb; ++i) { - const float d = GGML_FP16_TO_FP32(x[i].d) * y[i].d; - const uint16_t * restrict q2 = x[i].qs; - const int8_t * restrict q8 = y[i].qs; - float sumf1 = 0, sumf2 = 0; - for (int ib32 = 0; ib32 < QK_K/32; ib32 += 2) { - q8b = ggml_vld1q_s8_x4(q8); q8 += 64; - memcpy(aux32, q2, 4*sizeof(uint32_t)); q2 += 8; - q2u.val[0] = vcombine_s8(vld1_s8((const void *)(iq2xxs_grid + aux8[ 0])), vld1_s8((const void *)(iq2xxs_grid + aux8[ 1]))); - q2u.val[1] = vcombine_s8(vld1_s8((const void *)(iq2xxs_grid + aux8[ 2])), vld1_s8((const void *)(iq2xxs_grid + aux8[ 3]))); - q2u.val[2] = vcombine_s8(vld1_s8((const void *)(iq2xxs_grid + aux8[ 8])), vld1_s8((const void *)(iq2xxs_grid + aux8[ 9]))); - q2u.val[3] = vcombine_s8(vld1_s8((const void *)(iq2xxs_grid + aux8[10])), vld1_s8((const void *)(iq2xxs_grid + aux8[11]))); - q2s.val[0] = vcombine_s8(vld1_s8((const void *)(signs64 + ((aux32[1] >> 0) & 127))), vld1_s8((const void *)(signs64 + ((aux32[1] >> 7) & 127)))); - q2s.val[1] = vcombine_s8(vld1_s8((const void *)(signs64 + ((aux32[1] >> 14) & 127))), vld1_s8((const void *)(signs64 + ((aux32[1] >> 21) & 127)))); - q2s.val[2] = vcombine_s8(vld1_s8((const void *)(signs64 + ((aux32[3] >> 0) & 127))), vld1_s8((const void *)(signs64 + ((aux32[3] >> 7) & 127)))); - q2s.val[3] = vcombine_s8(vld1_s8((const void *)(signs64 + ((aux32[3] >> 14) & 127))), vld1_s8((const void *)(signs64 + ((aux32[3] >> 21) & 127)))); - q2u.val[0] = vmulq_s8(q2u.val[0], q2s.val[0]); - q2u.val[1] = vmulq_s8(q2u.val[1], q2s.val[1]); - q2u.val[2] = vmulq_s8(q2u.val[2], q2s.val[2]); - q2u.val[3] = vmulq_s8(q2u.val[3], q2s.val[3]); - const int32x4_t p1 = ggml_vdotq_s32(ggml_vdotq_s32(vdupq_n_s32(0), q2u.val[0], q8b.val[0]), q2u.val[1], q8b.val[1]); - const int32x4_t p2 = ggml_vdotq_s32(ggml_vdotq_s32(vdupq_n_s32(0), q2u.val[2], q8b.val[2]), q2u.val[3], q8b.val[3]); - sumf1 += vaddvq_s32(p1) * (0.5f + (aux32[1] >> 28)); - sumf2 += vaddvq_s32(p2) * (0.5f + (aux32[3] >> 28)); - } - sumf += d*(sumf1 + sumf2); - } - *s = 0.25f * sumf; - -#elif defined(__AVX2__) - - const uint64_t * signs64 = (const uint64_t *)keven_signs_q2xs; - - uint32_t aux32[4]; - const uint8_t * aux8 = (const uint8_t *)aux32; - - __m256 accumf = _mm256_setzero_ps(); - for (int i = 0; i < nb; ++i) { - const float d = GGML_FP16_TO_FP32(x[i].d) * y[i].d; - const uint16_t * restrict q2 = x[i].qs; - const int8_t * restrict q8 = y[i].qs; - __m256i sumi1 = _mm256_setzero_si256(); - __m256i sumi2 = _mm256_setzero_si256(); - for (int ib32 = 0; ib32 < QK_K/32; ib32 += 2) { - const __m256i q8_1 = _mm256_loadu_si256((const __m256i *)q8); q8 += 32; - const __m256i q8_2 = _mm256_loadu_si256((const __m256i *)q8); q8 += 32; - memcpy(aux32, q2, 4*sizeof(uint32_t)); q2 += 8; - const __m256i q2_1 = _mm256_set_epi64x(iq2xxs_grid[aux8[ 3]], iq2xxs_grid[aux8[ 2]], iq2xxs_grid[aux8[1]], iq2xxs_grid[aux8[0]]); - const __m256i q2_2 = _mm256_set_epi64x(iq2xxs_grid[aux8[11]], iq2xxs_grid[aux8[10]], iq2xxs_grid[aux8[9]], iq2xxs_grid[aux8[8]]); - const __m256i s2_1 = _mm256_set_epi64x(signs64[(aux32[1] >> 21) & 127], signs64[(aux32[1] >> 14) & 127], - signs64[(aux32[1] >> 7) & 127], signs64[(aux32[1] >> 0) & 127]); - const __m256i s2_2 = _mm256_set_epi64x(signs64[(aux32[3] >> 21) & 127], signs64[(aux32[3] >> 14) & 127], - signs64[(aux32[3] >> 7) & 127], signs64[(aux32[3] >> 0) & 127]); - const __m256i q8s_1 = _mm256_sign_epi8(q8_1, s2_1); - const __m256i q8s_2 = _mm256_sign_epi8(q8_2, s2_2); - const __m256i dot1 = _mm256_maddubs_epi16(q2_1, q8s_1); - const __m256i dot2 = _mm256_maddubs_epi16(q2_2, q8s_2); - const uint16_t ls1 = aux32[1] >> 28; - const uint16_t ls2 = aux32[3] >> 28; - const __m256i p1 = _mm256_madd_epi16(dot1, _mm256_set1_epi16(2*ls1+1)); - const __m256i p2 = _mm256_madd_epi16(dot2, _mm256_set1_epi16(2*ls2+1)); - sumi1 = _mm256_add_epi32(sumi1, p1); - sumi2 = _mm256_add_epi32(sumi2, p2); - } - - accumf = _mm256_fmadd_ps(_mm256_set1_ps(d), _mm256_cvtepi32_ps(_mm256_add_epi32(sumi1, sumi2)), accumf); - - } - - *s = 0.125f * hsum_float_8(accumf); - -#else - - uint32_t aux32[2]; - const uint8_t * aux8 = (const uint8_t *)aux32; - - float sumf = 0.f; - for (int i = 0; i < nb; ++i) { - const float d = GGML_FP16_TO_FP32(x[i].d) * y[i].d; - const uint16_t * restrict q2 = x[i].qs; - const int8_t * restrict q8 = y[i].qs; - int32_t bsum = 0; - for (int ib32 = 0; ib32 < QK_K/32; ++ib32) { - memcpy(aux32, q2, 2*sizeof(uint32_t)); - q2 += 4; - const uint32_t ls = 2*(aux32[1] >> 28) + 1; - int32_t sumi = 0; - for (int l = 0; l < 4; ++l) { - const uint8_t * grid = (const uint8_t *)(iq2xxs_grid + aux8[l]); - const uint8_t signs = ksigns_iq2xs[(aux32[1] >> 7*l) & 127]; - for (int j = 0; j < 8; ++j) { - sumi += grid[j] * q8[j] * (signs & kmask_iq2xs[j] ? -1 : 1); - } - q8 += 8; - } - bsum += sumi * ls; - } - sumf += d * bsum; - } - *s = 0.125f * sumf; -#endif -} - -void ggml_vec_dot_iq2_xs_q8_K(int n, float * restrict s, size_t bs, const void * restrict vx, size_t bx, const void * restrict vy, size_t by, int nrc) { - assert(n % QK_K == 0); - assert(nrc == 1); - UNUSED(nrc); - UNUSED(bx); - UNUSED(by); - UNUSED(bs); - - const block_iq2_xs * restrict x = vx; - const block_q8_K * restrict y = vy; - - const int nb = n / QK_K; - -#if defined(__ARM_NEON) - - const uint64_t * signs64 = (const uint64_t *)keven_signs_q2xs; - - ggml_int8x16x4_t q2u; - ggml_int8x16x4_t q2s; - ggml_int8x16x4_t q8b; - - int32x4x4_t scales32; - - float sumf = 0; - for (int i = 0; i < nb; ++i) { - const float d = GGML_FP16_TO_FP32(x[i].d) * y[i].d; - const uint16_t * restrict q2 = x[i].qs; - const int8_t * restrict q8 = y[i].qs; - const uint8x8_t scales8 = vld1_u8(x[i].scales); - const uint8x8_t scales_l = vand_u8(scales8, vdup_n_u8(0xf)); - const uint8x8_t scales_h = vshr_n_u8(scales8, 4); - uint8x16_t scales = vcombine_u8(vzip1_u8(scales_l, scales_h), vzip2_u8(scales_l, scales_h)); - scales = vaddq_u8(vshlq_n_u8(scales, 1), vdupq_n_u8(1)); - const uint16x8_t scales1 = vmovl_u8(vget_low_u8(scales)); - const uint16x8_t scales2 = vmovl_u8(vget_high_u8(scales)); - scales32.val[0] = vreinterpretq_s32_u32(vmovl_u16(vget_low_u16(scales1))); - scales32.val[1] = vreinterpretq_s32_u32(vmovl_u16(vget_high_u16(scales1))); - scales32.val[2] = vreinterpretq_s32_u32(vmovl_u16(vget_low_u16(scales2))); - scales32.val[3] = vreinterpretq_s32_u32(vmovl_u16(vget_high_u16(scales2))); - int32x4_t sumi = vdupq_n_s32(0); - for (int ib64 = 0; ib64 < QK_K/64; ++ib64) { - q8b = ggml_vld1q_s8_x4(q8); q8 += 64; - q2u.val[0] = vcombine_s8(vld1_s8((const void *)(iq2xs_grid + (q2[0] & 511))), vld1_s8((const void *)(iq2xs_grid + (q2[1] & 511)))); - q2u.val[1] = vcombine_s8(vld1_s8((const void *)(iq2xs_grid + (q2[2] & 511))), vld1_s8((const void *)(iq2xs_grid + (q2[3] & 511)))); - q2u.val[2] = vcombine_s8(vld1_s8((const void *)(iq2xs_grid + (q2[4] & 511))), vld1_s8((const void *)(iq2xs_grid + (q2[5] & 511)))); - q2u.val[3] = vcombine_s8(vld1_s8((const void *)(iq2xs_grid + (q2[6] & 511))), vld1_s8((const void *)(iq2xs_grid + (q2[7] & 511)))); - q2s.val[0] = vcombine_s8(vld1_s8((const void *)(signs64 + (q2[0] >> 9))), vld1_s8((const void *)(signs64 + (q2[1] >> 9)))); - q2s.val[1] = vcombine_s8(vld1_s8((const void *)(signs64 + (q2[2] >> 9))), vld1_s8((const void *)(signs64 + (q2[3] >> 9)))); - q2s.val[2] = vcombine_s8(vld1_s8((const void *)(signs64 + (q2[4] >> 9))), vld1_s8((const void *)(signs64 + (q2[5] >> 9)))); - q2s.val[3] = vcombine_s8(vld1_s8((const void *)(signs64 + (q2[6] >> 9))), vld1_s8((const void *)(signs64 + (q2[7] >> 9)))); - q2u.val[0] = vmulq_s8(q2u.val[0], q2s.val[0]); - q2u.val[1] = vmulq_s8(q2u.val[1], q2s.val[1]); - q2u.val[2] = vmulq_s8(q2u.val[2], q2s.val[2]); - q2u.val[3] = vmulq_s8(q2u.val[3], q2s.val[3]); - const int32x4_t p1 = ggml_vdotq_s32(vdupq_n_s32(0), q2u.val[0], q8b.val[0]); - const int32x4_t p2 = ggml_vdotq_s32(vdupq_n_s32(0), q2u.val[1], q8b.val[1]); - const int32x4_t p3 = ggml_vdotq_s32(vdupq_n_s32(0), q2u.val[2], q8b.val[2]); - const int32x4_t p4 = ggml_vdotq_s32(vdupq_n_s32(0), q2u.val[3], q8b.val[3]); - const int32x4_t p = vpaddq_s32(vpaddq_s32(p1, p2), vpaddq_s32(p3, p4)); - sumi = vmlaq_s32(sumi, p, scales32.val[ib64]); - q2 += 8; - } - sumf += d*vaddvq_s32(sumi); - } - *s = 0.125f * sumf; - -#elif defined(__AVX2__) - - const __m256i mone = _mm256_set1_epi8(1); - static const char block_sign_shuffle_mask_1[32] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, - 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, - }; - static const char block_sign_shuffle_mask_2[32] = { - 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, - 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, - }; - static const uint8_t bit_selector_mask_bytes[32] = { - 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, - 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, - }; - - const __m256i bit_selector_mask = _mm256_loadu_si256((const __m256i*)bit_selector_mask_bytes); - const __m256i block_sign_shuffle_1 = _mm256_loadu_si256((const __m256i*)block_sign_shuffle_mask_1); - const __m256i block_sign_shuffle_2 = _mm256_loadu_si256((const __m256i*)block_sign_shuffle_mask_2); - -#if QK_K == 64 - static const uint8_t k_bit_helper[16] = { - 0x00, 0x80, 0x80, 0x00, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x80, 0x00, 0x80, 0x80, 0x00, - }; - const __m128i bit_helper = _mm_loadu_si128((const __m128i*)k_bit_helper); - const __m128i m511 = _mm_set1_epi16(511); - typedef union { - __m128i vec_index; - uint16_t index[8]; - } index_t; - - index_t idx; - __m256 accumf = _mm256_setzero_ps(); - for (int i = 0; i < nb; ++i) { - const float d = GGML_FP16_TO_FP32(x[i].d) * y[i].d; - const __m128i q2_data = _mm_loadu_si128((const __m128i*)x[i].qs); - idx.vec_index = _mm_and_si128(q2_data, m511); - - const __m128i partial_sign_bits = _mm_srli_epi16(q2_data, 9); - const __m128i partial_sign_bits_upper = _mm_srli_epi16(q2_data, 13); - const __m128i partial_sign_bits_for_counting = _mm_xor_si128(partial_sign_bits, partial_sign_bits_upper); - - const __m128i odd_bits = _mm_shuffle_epi8(bit_helper, partial_sign_bits_for_counting); - const __m128i full_sign_bits = _mm_or_si128(partial_sign_bits, odd_bits); - const __m256i full_signs = MM256_SET_M128I(full_sign_bits, full_sign_bits); - - const __m256i q8_1 = _mm256_loadu_si256((const __m256i *)y[i].qs); - const __m256i q8_2 = _mm256_loadu_si256((const __m256i *)(y[i].qs+32)); - - const __m256i q2_1 = _mm256_set_epi64x(iq2xs_grid[idx.index[3]], iq2xs_grid[idx.index[2]], - iq2xs_grid[idx.index[1]], iq2xs_grid[idx.index[0]]); - const __m256i q2_2 = _mm256_set_epi64x(iq2xs_grid[idx.index[7]], iq2xs_grid[idx.index[6]], - iq2xs_grid[idx.index[5]], iq2xs_grid[idx.index[4]]); - - __m256i signs; - signs = _mm256_shuffle_epi8(full_signs, block_sign_shuffle_1); - signs = _mm256_cmpeq_epi8(_mm256_and_si256(signs, bit_selector_mask), bit_selector_mask); - const __m256i q8s_1 = _mm256_sign_epi8(q8_1, _mm256_or_si256(signs, mone)); - - signs = _mm256_shuffle_epi8(full_signs, block_sign_shuffle_2); - signs = _mm256_cmpeq_epi8(_mm256_and_si256(signs, bit_selector_mask), bit_selector_mask); - const __m256i q8s_2 = _mm256_sign_epi8(q8_2, _mm256_or_si256(signs, mone)); - - const __m256i dot1 = _mm256_maddubs_epi16(q2_1, q8s_1); - const __m256i dot2 = _mm256_maddubs_epi16(q2_2, q8s_2); - - const __m256i sc1 = MM256_SET_M128I(_mm_set1_epi16(2*(x[i].scales[0] >> 4)+1), _mm_set1_epi16(2*(x[i].scales[0] & 0xf)+1)); - const __m256i sc2 = MM256_SET_M128I(_mm_set1_epi16(2*(x[i].scales[1] >> 4)+1), _mm_set1_epi16(2*(x[i].scales[1] & 0xf)+1)); - - const __m256i sum = _mm256_add_epi32(_mm256_madd_epi16(sc1, dot1), _mm256_madd_epi16(sc2, dot2)); - - accumf = _mm256_fmadd_ps(_mm256_set1_ps(d), _mm256_cvtepi32_ps(sum), accumf); - - } - - *s = 0.125f * hsum_float_8(accumf); -#else - - static const uint8_t k_bit_helper[32] = { - 0x00, 0x80, 0x80, 0x00, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x80, 0x00, 0x80, 0x80, 0x00, - 0x00, 0x80, 0x80, 0x00, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x80, 0x00, 0x80, 0x80, 0x00, - }; - const __m256i bit_helper = _mm256_loadu_si256((const __m256i*)k_bit_helper); - const __m256i m511 = _mm256_set1_epi16(511); - const __m128i m4 = _mm_set1_epi8(0xf); - const __m128i m1 = _mm_set1_epi8(1); - - uint64_t aux64; - - // somewhat hacky, but gives a significant boost in performance - __m256i aux_gindex; - const uint16_t * gindex = (const uint16_t *)&aux_gindex; - - __m256 accumf = _mm256_setzero_ps(); - for (int i = 0; i < nb; ++i) { - const float d = GGML_FP16_TO_FP32(x[i].d) * y[i].d; - const uint16_t * restrict q2 = x[i].qs; - const int8_t * restrict q8 = y[i].qs; - - memcpy(&aux64, x[i].scales, 8); - __m128i stmp = _mm_set1_epi64x(aux64); - stmp = _mm_unpacklo_epi8(_mm_and_si128(stmp, m4), _mm_and_si128(_mm_srli_epi16(stmp, 4), m4)); - const __m128i scales = _mm_add_epi8(_mm_slli_epi16(stmp, 1), m1); - - __m256i sumi1 = _mm256_setzero_si256(); - __m256i sumi2 = _mm256_setzero_si256(); - for (int ib32 = 0; ib32 < QK_K/32; ib32 += 4) { - - const __m256i q2_data = _mm256_loadu_si256((const __m256i*)q2); q2 += 16; - aux_gindex = _mm256_and_si256(q2_data, m511); - - const __m256i partial_sign_bits = _mm256_srli_epi16(q2_data, 9); - const __m256i partial_sign_bits_upper = _mm256_srli_epi16(q2_data, 13); - const __m256i partial_sign_bits_for_counting = _mm256_xor_si256(partial_sign_bits, partial_sign_bits_upper); - - const __m256i odd_bits = _mm256_shuffle_epi8(bit_helper, partial_sign_bits_for_counting); - const __m256i full_sign_bits = _mm256_or_si256(partial_sign_bits, odd_bits); - - const __m256i q8_1 = _mm256_loadu_si256((const __m256i *)q8); q8 += 32; - const __m256i q8_2 = _mm256_loadu_si256((const __m256i *)q8); q8 += 32; - const __m256i q8_3 = _mm256_loadu_si256((const __m256i *)q8); q8 += 32; - const __m256i q8_4 = _mm256_loadu_si256((const __m256i *)q8); q8 += 32; - - const __m256i q2_1 = _mm256_set_epi64x(iq2xs_grid[gindex[ 3]], iq2xs_grid[gindex[ 2]], - iq2xs_grid[gindex[ 1]], iq2xs_grid[gindex[ 0]]); - const __m256i q2_2 = _mm256_set_epi64x(iq2xs_grid[gindex[ 7]], iq2xs_grid[gindex[ 6]], - iq2xs_grid[gindex[ 5]], iq2xs_grid[gindex[ 4]]); - const __m256i q2_3 = _mm256_set_epi64x(iq2xs_grid[gindex[11]], iq2xs_grid[gindex[10]], - iq2xs_grid[gindex[ 9]], iq2xs_grid[gindex[ 8]]); - const __m256i q2_4 = _mm256_set_epi64x(iq2xs_grid[gindex[15]], iq2xs_grid[gindex[14]], - iq2xs_grid[gindex[13]], iq2xs_grid[gindex[12]]); - - const __m128i full_signs_l = _mm256_castsi256_si128(full_sign_bits); - const __m128i full_signs_h = _mm256_extractf128_si256(full_sign_bits, 1); - const __m256i full_signs_1 = MM256_SET_M128I(full_signs_l, full_signs_l); - const __m256i full_signs_2 = MM256_SET_M128I(full_signs_h, full_signs_h); - - __m256i signs; - signs = _mm256_shuffle_epi8(full_signs_1, block_sign_shuffle_1); - signs = _mm256_cmpeq_epi8(_mm256_and_si256(signs, bit_selector_mask), bit_selector_mask); - const __m256i q8s_1 = _mm256_sign_epi8(q8_1, _mm256_or_si256(signs, mone)); - - signs = _mm256_shuffle_epi8(full_signs_1, block_sign_shuffle_2); - signs = _mm256_cmpeq_epi8(_mm256_and_si256(signs, bit_selector_mask), bit_selector_mask); - const __m256i q8s_2 = _mm256_sign_epi8(q8_2, _mm256_or_si256(signs, mone)); - - signs = _mm256_shuffle_epi8(full_signs_2, block_sign_shuffle_1); - signs = _mm256_cmpeq_epi8(_mm256_and_si256(signs, bit_selector_mask), bit_selector_mask); - const __m256i q8s_3 = _mm256_sign_epi8(q8_3, _mm256_or_si256(signs, mone)); - - signs = _mm256_shuffle_epi8(full_signs_2, block_sign_shuffle_2); - signs = _mm256_cmpeq_epi8(_mm256_and_si256(signs, bit_selector_mask), bit_selector_mask); - const __m256i q8s_4 = _mm256_sign_epi8(q8_4, _mm256_or_si256(signs, mone)); - - const __m256i dot1 = _mm256_maddubs_epi16(q2_1, q8s_1); - const __m256i dot2 = _mm256_maddubs_epi16(q2_2, q8s_2); - const __m256i dot3 = _mm256_maddubs_epi16(q2_3, q8s_3); - const __m256i dot4 = _mm256_maddubs_epi16(q2_4, q8s_4); - - const __m256i sc1 = _mm256_cvtepi8_epi16(_mm_shuffle_epi8(scales, get_scale_shuffle(ib32+0))); - const __m256i sc2 = _mm256_cvtepi8_epi16(_mm_shuffle_epi8(scales, get_scale_shuffle(ib32+1))); - const __m256i sc3 = _mm256_cvtepi8_epi16(_mm_shuffle_epi8(scales, get_scale_shuffle(ib32+2))); - const __m256i sc4 = _mm256_cvtepi8_epi16(_mm_shuffle_epi8(scales, get_scale_shuffle(ib32+3))); - - sumi1 = _mm256_add_epi32(sumi1, _mm256_madd_epi16(dot1, sc1)); - sumi2 = _mm256_add_epi32(sumi2, _mm256_madd_epi16(dot2, sc2)); - sumi1 = _mm256_add_epi32(sumi1, _mm256_madd_epi16(dot3, sc3)); - sumi2 = _mm256_add_epi32(sumi2, _mm256_madd_epi16(dot4, sc4)); - } - - accumf = _mm256_fmadd_ps(_mm256_set1_ps(d), _mm256_cvtepi32_ps(_mm256_add_epi32(sumi1, sumi2)), accumf); - - } - - *s = 0.125f * hsum_float_8(accumf); -#endif - -#else - - float sumf = 0.f; - for (int i = 0; i < nb; ++i) { - const float d = GGML_FP16_TO_FP32(x[i].d) * y[i].d; - const uint16_t * restrict q2 = x[i].qs; - const uint8_t * restrict sc = x[i].scales; - const int8_t * restrict q8 = y[i].qs; - int32_t bsum = 0; - for (int ib32 = 0; ib32 < QK_K/32; ++ib32) { - const uint16_t ls1 = 2*(sc[ib32] & 0xf) + 1; - const uint16_t ls2 = 2*(sc[ib32] >> 4) + 1; - int32_t sumi = 0; - for (int l = 0; l < 2; ++l) { - const uint8_t * grid = (const uint8_t *)(iq2xs_grid + (q2[l] & 511)); - const uint8_t signs = ksigns_iq2xs[q2[l] >> 9]; - for (int j = 0; j < 8; ++j) { - sumi += grid[j] * q8[j] * (signs & kmask_iq2xs[j] ? -1 : 1); - } - q8 += 8; - } - bsum += sumi * ls1; - sumi = 0; - for (int l = 2; l < 4; ++l) { - const uint8_t * grid = (const uint8_t *)(iq2xs_grid + (q2[l] & 511)); - const uint8_t signs = ksigns_iq2xs[q2[l] >> 9]; - for (int j = 0; j < 8; ++j) { - sumi += grid[j] * q8[j] * (signs & kmask_iq2xs[j] ? -1 : 1); - } - q8 += 8; - } - bsum += sumi * ls2; - q2 += 4; - } - sumf += d * bsum; - } - *s = 0.125f * sumf; -#endif -} - -void ggml_vec_dot_iq2_s_q8_K(int n, float * restrict s, size_t bs, const void * restrict vx, size_t bx, const void * restrict vy, size_t by, int nrc) { - assert(n % QK_K == 0); - assert(nrc == 1); - UNUSED(nrc); - UNUSED(bx); - UNUSED(by); - UNUSED(bs); - - const block_iq2_s * restrict x = vx; - const block_q8_K * restrict y = vy; - - const int nb = n / QK_K; - -#if defined(__ARM_NEON) - - static const uint8_t k_mask1[32] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03 - }; - - static const uint8_t k_mask2[16] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80,}; - - const ggml_uint8x16x2_t mask1 = ggml_vld1q_u8_x2(k_mask1); - const uint8x16_t mask2 = vld1q_u8(k_mask2); - const uint8x16_t m1 = vdupq_n_u8(1); - const int32x4_t vzero = vdupq_n_s32(0); - - uint8x16x2_t vs; - ggml_int8x16x4_t q2s; - ggml_int8x16x4_t q8b; - - float sumf = 0; - for (int i = 0; i < nb; ++i) { - - const float d = GGML_FP16_TO_FP32(x[i].d) * y[i].d; - - const uint8_t * restrict qs = x[i].qs; - const uint8_t * restrict qh = x[i].qh; - const uint16_t * restrict signs = (const uint16_t *)(x[i].qs + QK_K/8); - const int8_t * restrict q8 = y[i].qs; - - int sumi1 = 0, sumi2 = 0; - for (int ib32 = 0; ib32 < QK_K/32; ib32 += 2) { - q8b = ggml_vld1q_s8_x4(q8); q8 += 64; - q2s.val[0] = vcombine_s8(vld1_s8((const int8_t *)(iq2s_grid + (qs[0] | ((qh[ib32+0] << 8) & 0x300)))), - vld1_s8((const int8_t *)(iq2s_grid + (qs[1] | ((qh[ib32+0] << 6) & 0x300))))); - q2s.val[1] = vcombine_s8(vld1_s8((const int8_t *)(iq2s_grid + (qs[2] | ((qh[ib32+0] << 4) & 0x300)))), - vld1_s8((const int8_t *)(iq2s_grid + (qs[3] | ((qh[ib32+0] << 2) & 0x300))))); - q2s.val[2] = vcombine_s8(vld1_s8((const int8_t *)(iq2s_grid + (qs[4] | ((qh[ib32+1] << 8) & 0x300)))), - vld1_s8((const int8_t *)(iq2s_grid + (qs[5] | ((qh[ib32+1] << 6) & 0x300))))); - q2s.val[3] = vcombine_s8(vld1_s8((const int8_t *)(iq2s_grid + (qs[6] | ((qh[ib32+1] << 4) & 0x300)))), - vld1_s8((const int8_t *)(iq2s_grid + (qs[7] | ((qh[ib32+1] << 2) & 0x300))))); - qs += 8; - - vs.val[0] = vreinterpretq_u8_u32(vdupq_n_u32(signs[0] | ((uint32_t) signs[1] << 16))); - vs.val[1] = vandq_u8(ggml_vqtbl1q_u8(vs.val[0], mask1.val[1]), mask2); - vs.val[0] = vandq_u8(ggml_vqtbl1q_u8(vs.val[0], mask1.val[0]), mask2); - vs.val[0] = vceqq_u8(vs.val[0], mask2); - vs.val[1] = vceqq_u8(vs.val[1], mask2); - - q2s.val[0] = vmulq_s8(vreinterpretq_s8_u8(vorrq_u8(vs.val[0], m1)), q2s.val[0]); - q2s.val[1] = vmulq_s8(vreinterpretq_s8_u8(vorrq_u8(vs.val[1], m1)), q2s.val[1]); - - vs.val[0] = vreinterpretq_u8_u32(vdupq_n_u32(signs[2] | ((uint32_t) signs[3] << 16))); - vs.val[1] = vandq_u8(ggml_vqtbl1q_u8(vs.val[0], mask1.val[1]), mask2); - vs.val[0] = vandq_u8(ggml_vqtbl1q_u8(vs.val[0], mask1.val[0]), mask2); - vs.val[0] = vceqq_u8(vs.val[0], mask2); - vs.val[1] = vceqq_u8(vs.val[1], mask2); - - signs += 4; - - q2s.val[2] = vmulq_s8(vreinterpretq_s8_u8(vorrq_u8(vs.val[0], m1)), q2s.val[2]); - q2s.val[3] = vmulq_s8(vreinterpretq_s8_u8(vorrq_u8(vs.val[1], m1)), q2s.val[3]); - - const int32x4_t p1 = ggml_vdotq_s32(vzero, q2s.val[0], q8b.val[0]); - const int32x4_t p2 = ggml_vdotq_s32(vzero, q2s.val[1], q8b.val[1]); - const int32x4_t p3 = ggml_vdotq_s32(vzero, q2s.val[2], q8b.val[2]); - const int32x4_t p4 = ggml_vdotq_s32(vzero, q2s.val[3], q8b.val[3]); - - sumi1 += vaddvq_s32(p1) * (1 + 2*(x[i].scales[ib32+0] & 0xf)); - sumi2 += vaddvq_s32(p2) * (1 + 2*(x[i].scales[ib32+0] >> 4)); - sumi1 += vaddvq_s32(p3) * (1 + 2*(x[i].scales[ib32+1] & 0xf)); - sumi2 += vaddvq_s32(p4) * (1 + 2*(x[i].scales[ib32+1] >> 4)); - } - sumf += d*(sumi1 + sumi2); - } - - *s = 0.125f * sumf; - -#elif defined(__AVX2__) - - static const uint8_t k_mask1[32] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03 - }; - - static const uint8_t k_mask2[32] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, - 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, - }; - - const __m128i m4 = _mm_set1_epi8(0xf); - const __m128i m1 = _mm_set1_epi8(1); - - const __m256i mask1 = _mm256_loadu_si256((const __m256i*)k_mask1); - const __m256i mask2 = _mm256_loadu_si256((const __m256i*)k_mask2); - - uint64_t aux64; - - __m256 accumf = _mm256_setzero_ps(); - for (int i = 0; i < nb; ++i) { - const float d = GGML_FP16_TO_FP32(x[i].d) * y[i].d; - const uint8_t * restrict qs = x[i].qs; - const uint8_t * restrict qh = x[i].qh; - const uint16_t * restrict signs = (const uint16_t *)(x[i].qs + QK_K/8); - const int8_t * restrict q8 = y[i].qs; - - memcpy(&aux64, x[i].scales, 8); - const __m128i scales8 = _mm_add_epi8(_mm_slli_epi16(_mm_and_si128(_mm_set_epi64x(aux64 >> 4, aux64), m4), 1), m1); - const __m256i scales16 = _mm256_cvtepi8_epi16(scales8); // 0 2 4 6 8 10 12 14 1 3 5 7 9 11 13 15 - - __m256i sumi1 = _mm256_setzero_si256(); - __m256i sumi2 = _mm256_setzero_si256(); - for (int ib32 = 0; ib32 < QK_K/32; ib32 += 2) { - const __m256i q8_1 = _mm256_loadu_si256((const __m256i *)q8); q8 += 32; - const __m256i q8_2 = _mm256_loadu_si256((const __m256i *)q8); q8 += 32; - const __m256i q2_1 = _mm256_set_epi64x(iq2s_grid[qs[3] | ((qh[ib32+0] << 2) & 0x300)], - iq2s_grid[qs[2] | ((qh[ib32+0] << 4) & 0x300)], - iq2s_grid[qs[1] | ((qh[ib32+0] << 6) & 0x300)], - iq2s_grid[qs[0] | ((qh[ib32+0] << 8) & 0x300)]); - const __m256i q2_2 = _mm256_set_epi64x(iq2s_grid[qs[7] | ((qh[ib32+1] << 2) & 0x300)], - iq2s_grid[qs[6] | ((qh[ib32+1] << 4) & 0x300)], - iq2s_grid[qs[5] | ((qh[ib32+1] << 6) & 0x300)], - iq2s_grid[qs[4] | ((qh[ib32+1] << 8) & 0x300)]); - qs += 8; - - __m256i aux256 = _mm256_set1_epi32(signs[0] | ((uint32_t) signs[1] << 16)); - aux256 = _mm256_and_si256(_mm256_shuffle_epi8(aux256,mask1), mask2); - const __m256i s2_1 = _mm256_cmpeq_epi8(aux256, mask2); - const __m256i q8s_1 = _mm256_sub_epi8(_mm256_xor_si256(s2_1, q8_1), s2_1); - - aux256 = _mm256_set1_epi32(signs[2] | ((uint32_t) signs[3] << 16)); - aux256 = _mm256_and_si256(_mm256_shuffle_epi8(aux256,mask1), mask2); - const __m256i s2_2 = _mm256_cmpeq_epi8(aux256, mask2); - const __m256i q8s_2 = _mm256_sub_epi8(_mm256_xor_si256(s2_2, q8_2), s2_2); - - signs += 4; - - const __m256i dot1 = _mm256_maddubs_epi16(q2_1, q8s_1); // blocks 2*ib32+0, 2*ib32+1 - const __m256i dot2 = _mm256_maddubs_epi16(q2_2, q8s_2); // blocks 2*ib32+2, 2*ib32+3 - - const __m256i p1 = _mm256_madd_epi16(dot1, _mm256_shuffle_epi8(scales16, get_scale_shuffle_k4(ib32+0))); - const __m256i p2 = _mm256_madd_epi16(dot2, _mm256_shuffle_epi8(scales16, get_scale_shuffle_k4(ib32+1))); - sumi1 = _mm256_add_epi32(sumi1, p1); - sumi2 = _mm256_add_epi32(sumi2, p2); - } - - accumf = _mm256_fmadd_ps(_mm256_set1_ps(d), _mm256_cvtepi32_ps(_mm256_add_epi32(sumi1, sumi2)), accumf); - - } - - *s = 0.125f * hsum_float_8(accumf); - -#else - - float sumf = 0; - for (int i = 0; i < nb; i++) { - - const float d = GGML_FP16_TO_FP32(x[i].d) * y[i].d; - const int8_t * q8 = y[i].qs; - const uint8_t * qs = x[i].qs; - const uint8_t * qh = x[i].qh; - const uint8_t * signs = qs + QK_K/8; - - int bsum = 0; - for (int ib32 = 0; ib32 < QK_K/32; ++ib32) { - int ls1 = 1 + 2*(x[i].scales[ib32] & 0xf); - int ls2 = 1 + 2*(x[i].scales[ib32] >> 4); - int sumi1 = 0, sumi2 = 0; - for (int l = 0; l < 2; ++l) { - const uint8_t * grid = (const uint8_t *)(iq2s_grid + (qs[l] | (qh[ib32] << (8-2*l) & 0x300))); - for (int j = 0; j < 8; ++j) { - sumi1 += q8[j] * grid[j] * (signs[l] & kmask_iq2xs[j] ? -1 : 1); - } - q8 += 8; - } - for (int l = 2; l < 4; ++l) { - const uint8_t * grid = (const uint8_t *)(iq2s_grid + (qs[l] | (qh[ib32] << (8-2*l) & 0x300))); - for (int j = 0; j < 8; ++j) { - sumi2 += q8[j] * grid[j] * (signs[l] & kmask_iq2xs[j] ? -1 : 1); - } - q8 += 8; - } - bsum += ls1 * sumi1 + ls2 * sumi2; - qs += 4; - signs += 4; - } - - sumf += d * bsum; - } - - *s = 0.125f * sumf; - -#endif - -} - -void ggml_vec_dot_iq3_xxs_q8_K(int n, float * restrict s, size_t bs, const void * restrict vx, size_t bx, const void * restrict vy, size_t by, int nrc) { - assert(n % QK_K == 0); - assert(nrc == 1); - UNUSED(nrc); - UNUSED(bx); - UNUSED(by); - UNUSED(bs); - - const block_iq3_xxs * restrict x = vx; - const block_q8_K * restrict y = vy; - - const int nb = n / QK_K; - -#if defined(__ARM_NEON) - - const uint64_t * signs64 = (const uint64_t *)keven_signs_q2xs; - - uint32_t aux32[2]; - - ggml_int8x16x4_t q3s; - ggml_int8x16x4_t q8b; - - float sumf = 0; - for (int i = 0; i < nb; ++i) { - const float d = GGML_FP16_TO_FP32(x[i].d) * y[i].d; - const uint8_t * restrict q3 = x[i].qs; - const uint8_t * restrict gas = x[i].qs + QK_K/4; - const int8_t * restrict q8 = y[i].qs; - float sumf1 = 0, sumf2 = 0; - for (int ib32 = 0; ib32 < QK_K/32; ib32 += 2) { - q8b = ggml_vld1q_s8_x4(q8); q8 += 64; - memcpy(aux32, gas, 2*sizeof(uint32_t)); gas += 2*sizeof(uint32_t); - const uint32x4_t aux32x4_0 = ggml_vld1q_u32(iq3xxs_grid[q3[ 0]], iq3xxs_grid[q3[ 1]], iq3xxs_grid[q3[ 2]], iq3xxs_grid[q3[ 3]]); - const uint32x4_t aux32x4_1 = ggml_vld1q_u32(iq3xxs_grid[q3[ 4]], iq3xxs_grid[q3[ 5]], iq3xxs_grid[q3[ 6]], iq3xxs_grid[q3[ 7]]); - const uint32x4_t aux32x4_2 = ggml_vld1q_u32(iq3xxs_grid[q3[ 8]], iq3xxs_grid[q3[ 9]], iq3xxs_grid[q3[10]], iq3xxs_grid[q3[11]]); - const uint32x4_t aux32x4_3 = ggml_vld1q_u32(iq3xxs_grid[q3[12]], iq3xxs_grid[q3[13]], iq3xxs_grid[q3[14]], iq3xxs_grid[q3[15]]); - q3 += 16; - q3s.val[0] = vcombine_s8(vld1_s8((const void *)(signs64 + ((aux32[0] >> 0) & 127))), vld1_s8((const void *)(signs64 + ((aux32[0] >> 7) & 127)))); - q3s.val[1] = vcombine_s8(vld1_s8((const void *)(signs64 + ((aux32[0] >> 14) & 127))), vld1_s8((const void *)(signs64 + ((aux32[0] >> 21) & 127)))); - q3s.val[2] = vcombine_s8(vld1_s8((const void *)(signs64 + ((aux32[1] >> 0) & 127))), vld1_s8((const void *)(signs64 + ((aux32[1] >> 7) & 127)))); - q3s.val[3] = vcombine_s8(vld1_s8((const void *)(signs64 + ((aux32[1] >> 14) & 127))), vld1_s8((const void *)(signs64 + ((aux32[1] >> 21) & 127)))); - q3s.val[0] = vmulq_s8(q3s.val[0], vreinterpretq_s8_u32(aux32x4_0)); - q3s.val[1] = vmulq_s8(q3s.val[1], vreinterpretq_s8_u32(aux32x4_1)); - q3s.val[2] = vmulq_s8(q3s.val[2], vreinterpretq_s8_u32(aux32x4_2)); - q3s.val[3] = vmulq_s8(q3s.val[3], vreinterpretq_s8_u32(aux32x4_3)); - const int32x4_t p1 = ggml_vdotq_s32(ggml_vdotq_s32(vdupq_n_s32(0), q3s.val[0], q8b.val[0]), q3s.val[1], q8b.val[1]); - const int32x4_t p2 = ggml_vdotq_s32(ggml_vdotq_s32(vdupq_n_s32(0), q3s.val[2], q8b.val[2]), q3s.val[3], q8b.val[3]); - sumf1 += vaddvq_s32(p1) * (0.5f + (aux32[0] >> 28)); - sumf2 += vaddvq_s32(p2) * (0.5f + (aux32[1] >> 28)); - } - sumf += d*(sumf1 + sumf2); - } - *s = 0.5f * sumf; - -#elif defined(__AVX2__) - - const uint64_t * signs64 = (const uint64_t *)keven_signs_q2xs; - - uint32_t aux32[2]; - - __m256 accumf = _mm256_setzero_ps(); - for (int i = 0; i < nb; ++i) { - const float d = GGML_FP16_TO_FP32(x[i].d) * y[i].d; - const uint8_t * restrict q3 = x[i].qs; - const uint8_t * restrict gas = x[i].qs + QK_K/4; - const int8_t * restrict q8 = y[i].qs; - __m256i sumi1 = _mm256_setzero_si256(); - __m256i sumi2 = _mm256_setzero_si256(); - for (int ib32 = 0; ib32 < QK_K/32; ib32 += 2) { - const __m256i q8_1 = _mm256_loadu_si256((const __m256i *)q8); q8 += 32; - const __m256i q8_2 = _mm256_loadu_si256((const __m256i *)q8); q8 += 32; - const __m256i q2_1 = _mm256_set_epi32(iq3xxs_grid[q3[7]], iq3xxs_grid[q3[6]], iq3xxs_grid[q3[5]], iq3xxs_grid[q3[4]], - iq3xxs_grid[q3[3]], iq3xxs_grid[q3[2]], iq3xxs_grid[q3[1]], iq3xxs_grid[q3[0]]); - q3 += 8; - const __m256i q2_2 = _mm256_set_epi32(iq3xxs_grid[q3[7]], iq3xxs_grid[q3[6]], iq3xxs_grid[q3[5]], iq3xxs_grid[q3[4]], - iq3xxs_grid[q3[3]], iq3xxs_grid[q3[2]], iq3xxs_grid[q3[1]], iq3xxs_grid[q3[0]]); - q3 += 8; - memcpy(aux32, gas, 8); gas += 8; - const __m256i s2_1 = _mm256_set_epi64x(signs64[(aux32[0] >> 21) & 127], signs64[(aux32[0] >> 14) & 127], - signs64[(aux32[0] >> 7) & 127], signs64[(aux32[0] >> 0) & 127]); - const __m256i s2_2 = _mm256_set_epi64x(signs64[(aux32[1] >> 21) & 127], signs64[(aux32[1] >> 14) & 127], - signs64[(aux32[1] >> 7) & 127], signs64[(aux32[1] >> 0) & 127]); - const __m256i q8s_1 = _mm256_sign_epi8(q8_1, s2_1); - const __m256i q8s_2 = _mm256_sign_epi8(q8_2, s2_2); - const __m256i dot1 = _mm256_maddubs_epi16(q2_1, q8s_1); - const __m256i dot2 = _mm256_maddubs_epi16(q2_2, q8s_2); - const uint16_t ls1 = aux32[0] >> 28; - const uint16_t ls2 = aux32[1] >> 28; - const __m256i p1 = _mm256_madd_epi16(dot1, _mm256_set1_epi16(2*ls1+1)); - const __m256i p2 = _mm256_madd_epi16(dot2, _mm256_set1_epi16(2*ls2+1)); - sumi1 = _mm256_add_epi32(sumi1, p1); - sumi2 = _mm256_add_epi32(sumi2, p2); - } - - accumf = _mm256_fmadd_ps(_mm256_set1_ps(d), _mm256_cvtepi32_ps(_mm256_add_epi32(sumi1, sumi2)), accumf); - - } - - *s = 0.25f * hsum_float_8(accumf); - -#else - - uint32_t aux32; - - float sumf = 0.f; - for (int i = 0; i < nb; ++i) { - const float d = GGML_FP16_TO_FP32(x[i].d) * y[i].d; - const uint8_t * restrict q3 = x[i].qs; - const uint8_t * restrict gas = x[i].qs + QK_K/4; - const int8_t * restrict q8 = y[i].qs; - int32_t bsum = 0; - for (int ib32 = 0; ib32 < QK_K/32; ++ib32) { - memcpy(&aux32, gas, sizeof(uint32_t)); gas += sizeof(uint32_t); - const uint32_t ls = 2*(aux32 >> 28) + 1; - int32_t sumi = 0; - for (int l = 0; l < 4; ++l) { - const uint8_t * grid1 = (const uint8_t *)(iq3xxs_grid + q3[2*l+0]); - const uint8_t * grid2 = (const uint8_t *)(iq3xxs_grid + q3[2*l+1]); - const uint8_t signs = ksigns_iq2xs[(aux32 >> 7*l) & 127]; - for (int j = 0; j < 4; ++j) { - sumi += grid1[j] * q8[j+0] * (signs & kmask_iq2xs[j+0] ? -1 : 1); - sumi += grid2[j] * q8[j+4] * (signs & kmask_iq2xs[j+4] ? -1 : 1); - } - q8 += 8; - } - q3 += 8; - bsum += sumi * ls; - } - sumf += d * bsum; - } - *s = 0.25f * sumf; -#endif -} - -void ggml_vec_dot_iq3_s_q8_K (int n, float * restrict s, size_t bs, const void * restrict vx, size_t bx, const void * restrict vy, size_t by, int nrc) { - assert(n % QK_K == 0); - assert(nrc == 1); - UNUSED(nrc); - UNUSED(bx); - UNUSED(by); - UNUSED(bs); - - const block_iq3_s * restrict x = vx; - const block_q8_K * restrict y = vy; - - const int nb = n / QK_K; - -#if defined(__ARM_NEON) - - typedef union { - uint16x8_t vec_index; - uint16_t index[8]; - } vec_index_t; - - static const uint8_t k_mask1[32] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03 - }; - - static const uint8_t k_mask2[16] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80,}; - - static const int16_t k_shift[8] = {8, 7, 6, 5, 4, 3, 2, 1}; - - const ggml_uint8x16x2_t mask1 = ggml_vld1q_u8_x2(k_mask1); - const uint8x16_t mask2 = vld1q_u8(k_mask2); - - const int16x8_t hshift = vld1q_s16(k_shift); - const uint16x8_t m256 = vdupq_n_u16(256); - const uint8x16_t m1 = vdupq_n_u8(1); - - uint8x16x2_t vs; - ggml_int8x16x4_t q3s; - ggml_int8x16x4_t q8b; - vec_index_t idx; - -#if QK_K == 256 - uint32_t scales32[2]; - const uint8_t * scales8 = (const uint8_t *)scales32; -#endif - - float sumf = 0; - for (int i = 0; i < nb; ++i) { - const float d = GGML_FP16_TO_FP32(x[i].d) * y[i].d; - const uint8_t * restrict qs = x[i].qs; - const uint8_t * restrict qh = x[i].qh; - const uint16_t * restrict signs = (const uint16_t *)x[i].signs; - const int8_t * restrict q8 = y[i].qs; - -#if QK_K == 256 - memcpy(scales32, x[i].scales, 4); - scales32[1] = (((scales32[0] >> 4) & 0x0f0f0f0f) << 1) | 0x01010101; - scales32[0] = ((scales32[0] & 0x0f0f0f0f) << 1) | 0x01010101; -#endif - - int sumi1 = 0, sumi2 = 0; - for (int ib32 = 0; ib32 < QK_K/32; ib32 += 2) { - q8b = ggml_vld1q_s8_x4(q8); q8 += 64; - - const uint8x16_t idx_l = vld1q_u8(qs); qs += 16; - idx.vec_index = vorrq_u16(vmovl_u8(vget_low_u8 (idx_l)), vandq_u16(vshlq_u16(vdupq_n_u16(qh[ib32+0]), hshift), m256)); - const uint32x4_t aux32x4_0 = ggml_vld1q_u32(iq3s_grid[idx.index[0]], iq3s_grid[idx.index[1]], - iq3s_grid[idx.index[2]], iq3s_grid[idx.index[3]]); - const uint32x4_t aux32x4_1 = ggml_vld1q_u32(iq3s_grid[idx.index[4]], iq3s_grid[idx.index[5]], - iq3s_grid[idx.index[6]], iq3s_grid[idx.index[7]]); - idx.vec_index = vorrq_u16(vmovl_u8(vget_high_u8(idx_l)), vandq_u16(vshlq_u16(vdupq_n_u16(qh[ib32+1]), hshift), m256)); - const uint32x4_t aux32x4_2 = ggml_vld1q_u32(iq3s_grid[idx.index[0]], iq3s_grid[idx.index[1]], - iq3s_grid[idx.index[2]], iq3s_grid[idx.index[3]]); - const uint32x4_t aux32x4_3 = ggml_vld1q_u32(iq3s_grid[idx.index[4]], iq3s_grid[idx.index[5]], - iq3s_grid[idx.index[6]], iq3s_grid[idx.index[7]]); - - - vs.val[0] = vreinterpretq_u8_u32(vdupq_n_u32(signs[0] | ((uint32_t) signs[1] << 16))); - vs.val[1] = vandq_u8(ggml_vqtbl1q_u8(vs.val[0], mask1.val[1]), mask2); - vs.val[0] = vandq_u8(ggml_vqtbl1q_u8(vs.val[0], mask1.val[0]), mask2); - vs.val[0] = vorrq_u8(vceqq_u8(vs.val[0], mask2), m1); - vs.val[1] = vorrq_u8(vceqq_u8(vs.val[1], mask2), m1); - - q3s.val[0] = vmulq_s8(vreinterpretq_s8_u8(vs.val[0]), vreinterpretq_s8_u32(aux32x4_0)); - q3s.val[1] = vmulq_s8(vreinterpretq_s8_u8(vs.val[1]), vreinterpretq_s8_u32(aux32x4_1)); - - vs.val[0] = vreinterpretq_u8_u32(vdupq_n_u32(signs[2] | ((uint32_t) signs[3] << 16))); - vs.val[1] = vandq_u8(ggml_vqtbl1q_u8(vs.val[0], mask1.val[1]), mask2); - vs.val[0] = vandq_u8(ggml_vqtbl1q_u8(vs.val[0], mask1.val[0]), mask2); - vs.val[0] = vorrq_u8(vceqq_u8(vs.val[0], mask2), m1); - vs.val[1] = vorrq_u8(vceqq_u8(vs.val[1], mask2), m1); - - signs += 4; - - q3s.val[2] = vmulq_s8(vreinterpretq_s8_u8(vs.val[0]), vreinterpretq_s8_u32(aux32x4_2)); - q3s.val[3] = vmulq_s8(vreinterpretq_s8_u8(vs.val[1]), vreinterpretq_s8_u32(aux32x4_3)); - - const int32x4_t p1 = ggml_vdotq_s32(ggml_vdotq_s32(vdupq_n_s32(0), q3s.val[0], q8b.val[0]), q3s.val[1], q8b.val[1]); - const int32x4_t p2 = ggml_vdotq_s32(ggml_vdotq_s32(vdupq_n_s32(0), q3s.val[2], q8b.val[2]), q3s.val[3], q8b.val[3]); -#if QK_K == 256 - sumi1 += vaddvq_s32(p1) * scales8[ib32/2+0]; - sumi2 += vaddvq_s32(p2) * scales8[ib32/2+4]; -#else - sumi1 += vaddvq_s32(p1) * (1 + 2*(x[i].scales[ib32/2] & 0xf)); - sumi2 += vaddvq_s32(p2) * (1 + 2*(x[i].scales[ib32/2] >> 4)); -#endif - } - sumf += d*(sumi1 + sumi2); - } - *s = sumf; - -#elif defined(__AVX2__) - - static const uint8_t k_mask1[32] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03 - }; - - static const uint8_t k_mask2[32] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, - 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, - }; - - const __m256i mask1 = _mm256_loadu_si256((const __m256i*)k_mask1); - const __m256i mask2 = _mm256_loadu_si256((const __m256i*)k_mask2); - - const __m256i idx_shift = _mm256_set_epi32(1, 2, 3, 4, 5, 6, 7, 8); - const __m256i idx_mask = _mm256_set1_epi32(256); - - typedef union { - __m256i vec[2]; - uint32_t index[16]; - } index_t; - - index_t idx; - - __m256 accumf = _mm256_setzero_ps(); - for (int i = 0; i < nb; ++i) { - const float d = GGML_FP16_TO_FP32(x[i].d) * y[i].d; - const uint8_t * restrict qs = x[i].qs; - const uint8_t * restrict qh = x[i].qh; - const uint16_t * restrict signs = (const uint16_t *)x[i].signs; - const int8_t * restrict q8 = y[i].qs; - __m256i sumi1 = _mm256_setzero_si256(); - __m256i sumi2 = _mm256_setzero_si256(); - for (int ib32 = 0; ib32 < QK_K/32; ib32 += 2) { - const __m256i q8_1 = _mm256_loadu_si256((const __m256i *)q8); q8 += 32; - const __m256i q8_2 = _mm256_loadu_si256((const __m256i *)q8); q8 += 32; - const __m256i idx_l = _mm256_cvtepu8_epi16(_mm_loadu_si128((const __m128i *)qs)); qs += 16; - idx.vec[0] = _mm256_set1_epi32(qh[ib32+0]); - idx.vec[1] = _mm256_set1_epi32(qh[ib32+1]); - idx.vec[0] = _mm256_and_si256(_mm256_sllv_epi32(idx.vec[0], idx_shift), idx_mask); - idx.vec[1] = _mm256_and_si256(_mm256_sllv_epi32(idx.vec[1], idx_shift), idx_mask); - idx.vec[0] = _mm256_or_si256(idx.vec[0], _mm256_cvtepi16_epi32(_mm256_castsi256_si128(idx_l))); - idx.vec[1] = _mm256_or_si256(idx.vec[1], _mm256_cvtepi16_epi32(_mm256_extractf128_si256(idx_l, 1))); - - // At leat on my CPU (Ryzen 7950X), using _mm256_i32gather_epi32 is slower than _mm256_set_epi32. Strange. - //const __m256i q2_1 = _mm256_i32gather_epi32((const int *)iq3s_grid, idx.vec[0], 4); - //const __m256i q2_2 = _mm256_i32gather_epi32((const int *)iq3s_grid, idx.vec[1], 4); - const __m256i q2_1 = _mm256_set_epi32( - iq3s_grid[idx.index[7]], iq3s_grid[idx.index[6]], iq3s_grid[idx.index[5]], iq3s_grid[idx.index[4]], - iq3s_grid[idx.index[3]], iq3s_grid[idx.index[2]], iq3s_grid[idx.index[1]], iq3s_grid[idx.index[0]] - ); - const __m256i q2_2 = _mm256_set_epi32( - iq3s_grid[idx.index[15]], iq3s_grid[idx.index[14]], iq3s_grid[idx.index[13]], iq3s_grid[idx.index[12]], - iq3s_grid[idx.index[11]], iq3s_grid[idx.index[10]], iq3s_grid[idx.index[ 9]], iq3s_grid[idx.index[ 8]] - ); - - __m256i aux256 = _mm256_set1_epi32(signs[0] | (signs[1] << 16)); - aux256 = _mm256_and_si256(_mm256_shuffle_epi8(aux256,mask1), mask2); - const __m256i s2_1 = _mm256_cmpeq_epi8(aux256, mask2); - const __m256i q8s_1 = _mm256_sub_epi8(_mm256_xor_si256(s2_1, q8_1), s2_1); - - aux256 = _mm256_set1_epi32(signs[2] | (signs[3] << 16)); - aux256 = _mm256_and_si256(_mm256_shuffle_epi8(aux256,mask1), mask2); - const __m256i s2_2 = _mm256_cmpeq_epi8(aux256, mask2); - const __m256i q8s_2 = _mm256_sub_epi8(_mm256_xor_si256(s2_2, q8_2), s2_2); - - signs += 4; - - const __m256i dot1 = _mm256_maddubs_epi16(q2_1, q8s_1); - const __m256i dot2 = _mm256_maddubs_epi16(q2_2, q8s_2); - const uint16_t ls1 = x[i].scales[ib32/2] & 0xf; - const uint16_t ls2 = x[i].scales[ib32/2] >> 4; - const __m256i p1 = _mm256_madd_epi16(dot1, _mm256_set1_epi16(2*ls1+1)); - const __m256i p2 = _mm256_madd_epi16(dot2, _mm256_set1_epi16(2*ls2+1)); - sumi1 = _mm256_add_epi32(sumi1, p1); - sumi2 = _mm256_add_epi32(sumi2, p2); - } - - accumf = _mm256_fmadd_ps(_mm256_set1_ps(d), _mm256_cvtepi32_ps(_mm256_add_epi32(sumi1, sumi2)), accumf); - - } - - *s = hsum_float_8(accumf); - -#else - - float sumf = 0.f; - for (int i = 0; i < nb; ++i) { - const float d = GGML_FP16_TO_FP32(x[i].d) * y[i].d; - const uint8_t * restrict qs = x[i].qs; - const uint8_t * restrict qh = x[i].qh; - const uint8_t * restrict signs = x[i].signs; - const int8_t * restrict q8 = y[i].qs; - int32_t bsum = 0; - for (int ib32 = 0; ib32 < QK_K/32; ib32 += 2) { - const uint32_t ls1 = 2*(x[i].scales[ib32/2] & 0xf) + 1; - const uint32_t ls2 = 2*(x[i].scales[ib32/2] >> 4) + 1; - int32_t sumi = 0; - for (int l = 0; l < 4; ++l) { - const uint8_t * grid1 = (const uint8_t *)(iq3s_grid + (qs[2*l+0] | ((qh[ib32+0] << (8-2*l)) & 256))); - const uint8_t * grid2 = (const uint8_t *)(iq3s_grid + (qs[2*l+1] | ((qh[ib32+0] << (7-2*l)) & 256))); - for (int j = 0; j < 4; ++j) { - sumi += grid1[j] * q8[j+0] * (signs[l] & kmask_iq2xs[j+0] ? -1 : 1); - sumi += grid2[j] * q8[j+4] * (signs[l] & kmask_iq2xs[j+4] ? -1 : 1); - } - q8 += 8; - } - qs += 8; - signs += 4; - bsum += sumi * ls1; - sumi = 0; - for (int l = 0; l < 4; ++l) { - const uint8_t * grid1 = (const uint8_t *)(iq3s_grid + (qs[2*l+0] | ((qh[ib32+1] << (8-2*l)) & 256))); - const uint8_t * grid2 = (const uint8_t *)(iq3s_grid + (qs[2*l+1] | ((qh[ib32+1] << (7-2*l)) & 256))); - for (int j = 0; j < 4; ++j) { - sumi += grid1[j] * q8[j+0] * (signs[l] & kmask_iq2xs[j+0] ? -1 : 1); - sumi += grid2[j] * q8[j+4] * (signs[l] & kmask_iq2xs[j+4] ? -1 : 1); - } - q8 += 8; - } - qs += 8; - signs += 4; - bsum += sumi * ls2; - } - sumf += d * bsum; - } - *s = sumf; -#endif -} - - -#ifdef __AVX2__ -static inline __m256i mul_add_epi8(const __m256i x, const __m256i y) { - const __m256i ax = _mm256_sign_epi8(x, x); - const __m256i sy = _mm256_sign_epi8(y, x); - return _mm256_maddubs_epi16(ax, sy); -} -#endif - -void ggml_vec_dot_iq1_s_q8_K (int n, float * restrict s, size_t bs, const void * restrict vx, size_t bx, const void * restrict vy, size_t by, int nrc) { - assert(n % QK_K == 0); - assert(nrc == 1); - UNUSED(nrc); - UNUSED(bx); - UNUSED(by); - UNUSED(bs); - - const block_iq1_s * restrict x = vx; - const block_q8_K * restrict y = vy; - - const int nb = n / QK_K; - -#if defined __ARM_NEON - - ggml_int8x16x4_t q1b; - ggml_int8x16x4_t q8b; - - float sumf = 0; - for (int i = 0; i < nb; ++i) { - - const int8_t * q8 = y[i].qs; - const uint8_t * qs = x[i].qs; - const uint16_t * qh = x[i].qh; - - int sumi1 = 0, sumi2 = 0, sumi3 = 0; - - for (int ib = 0; ib < QK_K/32; ib += 2) { - - q1b.val[0] = vcombine_s8(vld1_s8((const int8_t *)(iq1s_grid + (qs[0] | ((qh[ib+0] << 8) & 0x700)))), - vld1_s8((const int8_t *)(iq1s_grid + (qs[1] | ((qh[ib+0] << 5) & 0x700))))); - q1b.val[1] = vcombine_s8(vld1_s8((const int8_t *)(iq1s_grid + (qs[2] | ((qh[ib+0] << 2) & 0x700)))), - vld1_s8((const int8_t *)(iq1s_grid + (qs[3] | ((qh[ib+0] >> 1) & 0x700))))); - q1b.val[2] = vcombine_s8(vld1_s8((const int8_t *)(iq1s_grid + (qs[4] | ((qh[ib+1] << 8) & 0x700)))), - vld1_s8((const int8_t *)(iq1s_grid + (qs[5] | ((qh[ib+1] << 5) & 0x700))))); - q1b.val[3] = vcombine_s8(vld1_s8((const int8_t *)(iq1s_grid + (qs[6] | ((qh[ib+1] << 2) & 0x700)))), - vld1_s8((const int8_t *)(iq1s_grid + (qs[7] | ((qh[ib+1] >> 1) & 0x700))))); - qs += 8; - - q8b = ggml_vld1q_s8_x4(q8); q8 += 64; - - const int32x4_t p1 = ggml_vdotq_s32(ggml_vdotq_s32(vdupq_n_s32(0), q1b.val[0], q8b.val[0]), q1b.val[1], q8b.val[1]); - const int32x4_t p2 = ggml_vdotq_s32(ggml_vdotq_s32(vdupq_n_s32(0), q1b.val[2], q8b.val[2]), q1b.val[3], q8b.val[3]); - - const int ls1 = 2*((qh[ib+0] >> 12) & 7) + 1; - const int ls2 = 2*((qh[ib+1] >> 12) & 7) + 1; - sumi1 += vaddvq_s32(p1) * ls1; - sumi2 += vaddvq_s32(p2) * ls2; - sumi3 += (y[i].bsums[2*ib+0] + y[i].bsums[2*ib+1]) * ls1 * (qh[ib+0] & 0x8000 ? -1 : 1) - + (y[i].bsums[2*ib+2] + y[i].bsums[2*ib+3]) * ls2 * (qh[ib+1] & 0x8000 ? -1 : 1); - - } - - sumf += y[i].d * GGML_FP16_TO_FP32(x[i].d) * (sumi1 + sumi2 + IQ1S_DELTA * sumi3); - } - - *s = sumf; - -#elif defined __AVX2__ - - __m256 accum = _mm256_setzero_ps(); - float accum1 = 0; - for (int i = 0; i < nb; ++i) { - - const int8_t * q8 = y[i].qs; - const uint8_t * qs = x[i].qs; - const uint16_t * qh = x[i].qh; - - __m256i sumi = _mm256_setzero_si256(); - int sumi1 = 0; - for (int ib = 0; ib < QK_K/32; ib += 2) { - const __m256i q1b_1 = _mm256_set_epi64x(iq1s_grid[qs[3] | ((qh[ib+0] >> 1) & 0x700)], iq1s_grid[qs[2] | ((qh[ib+0] << 2) & 0x700)], - iq1s_grid[qs[1] | ((qh[ib+0] << 5) & 0x700)], iq1s_grid[qs[0] | ((qh[ib+0] << 8) & 0x700)]); - const __m256i q1b_2 = _mm256_set_epi64x(iq1s_grid[qs[7] | ((qh[ib+1] >> 1) & 0x700)], iq1s_grid[qs[6] | ((qh[ib+1] << 2) & 0x700)], - iq1s_grid[qs[5] | ((qh[ib+1] << 5) & 0x700)], iq1s_grid[qs[4] | ((qh[ib+1] << 8) & 0x700)]); - qs += 8; - const __m256i q8b_1 = _mm256_loadu_si256((const __m256i*)q8); q8 += 32; - const __m256i q8b_2 = _mm256_loadu_si256((const __m256i*)q8); q8 += 32; - - const __m256i dot1 = mul_add_epi8(q1b_1, q8b_1); - const __m256i dot2 = mul_add_epi8(q1b_2, q8b_2); - const int16_t ls1 = 2*((qh[ib+0] >> 12) & 7) + 1; - const int16_t ls2 = 2*((qh[ib+1] >> 12) & 7) + 1; - const __m256i p1 = _mm256_madd_epi16(dot1, _mm256_set1_epi16(ls1)); - const __m256i p2 = _mm256_madd_epi16(dot2, _mm256_set1_epi16(ls2)); - - sumi = _mm256_add_epi32(sumi, _mm256_add_epi32(p1, p2)); - sumi1 += (y[i].bsums[2*ib+0] + y[i].bsums[2*ib+1]) * (qh[ib+0] & 0x8000 ? -1 : 1) * ls1 - + (y[i].bsums[2*ib+2] + y[i].bsums[2*ib+3]) * (qh[ib+1] & 0x8000 ? -1 : 1) * ls2; - } - - const float d = y[i].d * GGML_FP16_TO_FP32(x[i].d); - accum = _mm256_fmadd_ps(_mm256_set1_ps(d), _mm256_cvtepi32_ps(sumi), accum); - accum1 += d * sumi1; - - } - - *s = hsum_float_8(accum) + IQ1S_DELTA * accum1; - -#else - - float sumf = 0; - for (int i = 0; i < nb; i++) { - - const int8_t * q8 = y[i].qs; - const uint8_t * qs = x[i].qs; - const uint16_t * qh = x[i].qh; - - int sumi = 0, sumi1 = 0; - for (int ib = 0; ib < QK_K/32; ++ib) { - const int ls = 2*((qh[ib] >> 12) & 7) + 1; - const int delta = qh[ib] & 0x8000 ? -1 : 1; - int lsum = 0; - for (int l = 0; l < 4; ++l) { - const int8_t * grid = (const int8_t *)(iq1s_grid + (qs[l] | (((qh[ib] >> 3*l) & 7) << 8))); - for (int j = 0; j < 8; ++j) { - lsum += q8[j] * grid[j]; - } - q8 += 8; - } - sumi += ls * lsum; - sumi1 += ls * delta * (y[i].bsums[2*ib+0] + y[i].bsums[2*ib+1]); - qs += 4; - } - - sumf += GGML_FP16_TO_FP32(x[i].d) * y[i].d * (sumi + IQ1S_DELTA * sumi1); - } - - *s = sumf; - -#endif -} - -void ggml_vec_dot_iq1_m_q8_K (int n, float * restrict s, size_t bs, const void * restrict vx, size_t bx, const void * restrict vy, size_t by, int nrc) { - assert(n % QK_K == 0); - assert(nrc == 1); - UNUSED(nrc); - UNUSED(bx); - UNUSED(by); - UNUSED(bs); - - const block_iq1_m * restrict x = vx; - const block_q8_K * restrict y = vy; - - const int nb = n / QK_K; - -#if QK_K != 64 - iq1m_scale_t scale; -#endif - -#if defined __ARM_NEON - -#if QK_K == 64 - const int32x4_t mask = vdupq_n_s32(0xf); -#else - const int32x4_t mask = vdupq_n_s32(0x7); -#endif - const int32x4_t mone = vdupq_n_s32(1); - const int32x4_t mzero = vdupq_n_s32(0); - - ggml_int8x16x4_t deltas; - deltas.val[0] = vcombine_s8(vdup_n_s8(+1), vdup_n_s8(+1)); - deltas.val[1] = vcombine_s8(vdup_n_s8(-1), vdup_n_s8(+1)); - deltas.val[2] = vcombine_s8(vdup_n_s8(+1), vdup_n_s8(-1)); - deltas.val[3] = vcombine_s8(vdup_n_s8(-1), vdup_n_s8(-1)); - - ggml_int8x16x4_t q1b; - ggml_int8x16x4_t q8b; - - uint32_t aux32; - const uint8_t * aux8 = (const uint8_t *)&aux32; - - float sumf = 0; - for (int i = 0; i < nb; ++i) { - - const int8_t * q8 = y[i].qs; - const uint8_t * qs = x[i].qs; - const uint8_t * qh = x[i].qh; - const uint16_t * sc = (const uint16_t *)x[i].scales; - -#if QK_K != 64 - scale.u16 = (sc[0] >> 12) | ((sc[1] >> 8) & 0x00f0) | ((sc[2] >> 4) & 0x0f00) | (sc[3] & 0xf000); -#endif - - int32x4_t sumi1 = mzero; - int32x4_t sumi2 = mzero; - - for (int ib = 0; ib < QK_K/32; ib += 2) { - - q1b.val[0] = vcombine_s8(vld1_s8((const int8_t *)(iq1s_grid + (qs[0] | ((qh[0] << 8) & 0x700)))), - vld1_s8((const int8_t *)(iq1s_grid + (qs[1] | ((qh[0] << 4) & 0x700))))); - q1b.val[1] = vcombine_s8(vld1_s8((const int8_t *)(iq1s_grid + (qs[2] | ((qh[1] << 8) & 0x700)))), - vld1_s8((const int8_t *)(iq1s_grid + (qs[3] | ((qh[1] << 4) & 0x700))))); - q1b.val[2] = vcombine_s8(vld1_s8((const int8_t *)(iq1s_grid + (qs[4] | ((qh[2] << 8) & 0x700)))), - vld1_s8((const int8_t *)(iq1s_grid + (qs[5] | ((qh[2] << 4) & 0x700))))); - q1b.val[3] = vcombine_s8(vld1_s8((const int8_t *)(iq1s_grid + (qs[6] | ((qh[3] << 8) & 0x700)))), - vld1_s8((const int8_t *)(iq1s_grid + (qs[7] | ((qh[3] << 4) & 0x700))))); - - q8b = ggml_vld1q_s8_x4(q8); q8 += 64; - - const int32x4_t p1 = vpaddq_s32(ggml_vdotq_s32(mzero, q1b.val[0], q8b.val[0]), ggml_vdotq_s32(mzero, q1b.val[1], q8b.val[1])); - const int32x4_t p2 = vpaddq_s32(ggml_vdotq_s32(mzero, q1b.val[2], q8b.val[2]), ggml_vdotq_s32(mzero, q1b.val[3], q8b.val[3])); - const int32x4_t p12 = vpaddq_s32(p1, p2); - - const uint32_t * qh32 = (const uint32_t *)qh; // we are 4-byte aligned, so we can do that - aux32 = ((qh32[0] >> 3) & 0x01010101) | ((qh32[0] >> 6) & 0x02020202); - - const int32x4_t p3 = vpaddq_s32(ggml_vdotq_s32(mzero, deltas.val[aux8[0]], q8b.val[0]), ggml_vdotq_s32(mzero, deltas.val[aux8[1]], q8b.val[1])); - const int32x4_t p4 = vpaddq_s32(ggml_vdotq_s32(mzero, deltas.val[aux8[2]], q8b.val[2]), ggml_vdotq_s32(mzero, deltas.val[aux8[3]], q8b.val[3])); - const int32x4_t p34 = vpaddq_s32(p3, p4); - -#if QK_K == 64 - int32x4_t scales_4 = ggml_vld1q_u32(sc[0] >> 0, sc[0] >> 4, sc[0] >> 8, sc[0] >> 12); -#else - int32x4_t scales_4 = ggml_vld1q_u32(sc[ib/2] >> 0, sc[ib/2] >> 3, sc[ib/2] >> 6, sc[ib/2] >> 9); -#endif - scales_4 = vaddq_s32(vshlq_n_s32(vandq_s32(scales_4, mask), 1), mone); - - sumi1 = vmlaq_s32(sumi1, scales_4, p12); - sumi2 = vmlaq_s32(sumi2, scales_4, p34); - - qs += 8; qh += 4; - - } - -#if QK_K == 64 - sumf += y[i].d * GGML_FP16_TO_FP32(x[i].d) * (vaddvq_s32(sumi1) + IQ1M_DELTA * vaddvq_s32(sumi2)); -#else - sumf += y[i].d * GGML_FP16_TO_FP32(scale.f16) * (vaddvq_s32(sumi1) + IQ1M_DELTA * vaddvq_s32(sumi2)); -#endif - } - - *s = sumf; - -#elif defined __AVX2__ - -#if QK_K == 64 - const __m256i mask = _mm256_set1_epi16(0xf); -#else - const __m256i mask = _mm256_set1_epi16(0x7); -#endif - const __m256i mone = _mm256_set1_epi16(1); - - __m256 accum1 = _mm256_setzero_ps(); - __m256 accum2 = _mm256_setzero_ps(); - for (int i = 0; i < nb; ++i) { - - const int8_t * q8 = y[i].qs; - const uint8_t * qs = x[i].qs; - const uint8_t * qh = x[i].qh; - const uint16_t * sc = (const uint16_t *)x[i].scales; - -#if QK_K != 64 - scale.u16 = (sc[0] >> 12) | ((sc[1] >> 8) & 0x00f0) | ((sc[2] >> 4) & 0x0f00) | (sc[3] & 0xf000); -#endif - - __m256i sumi1 = _mm256_setzero_si256(); - __m256i sumi2 = _mm256_setzero_si256(); - for (int ib = 0; ib < QK_K/32; ib += 2) { - const __m256i q1b_1 = _mm256_set_epi64x( - iq1s_grid[qs[3] | (((uint16_t)qh[1] << 4) & 0x700)], iq1s_grid[qs[2] | (((uint16_t)qh[1] << 8) & 0x700)], - iq1s_grid[qs[1] | (((uint16_t)qh[0] << 4) & 0x700)], iq1s_grid[qs[0] | (((uint16_t)qh[0] << 8) & 0x700)] - ); - const __m256i q1b_2 = _mm256_set_epi64x( - iq1s_grid[qs[7] | (((uint16_t)qh[3] << 4) & 0x700)], iq1s_grid[qs[6] | (((uint16_t)qh[3] << 8) & 0x700)], - iq1s_grid[qs[5] | (((uint16_t)qh[2] << 4) & 0x700)], iq1s_grid[qs[4] | (((uint16_t)qh[2] << 8) & 0x700)] - ); - const __m256i q8b_1 = _mm256_loadu_si256((const __m256i*)q8); q8 += 32; - const __m256i q8b_2 = _mm256_loadu_si256((const __m256i*)q8); q8 += 32; - - const __m256i dot1 = mul_add_epi8(q1b_1, q8b_1); - const __m256i dot2 = mul_add_epi8(q1b_2, q8b_2); - - const __m256i delta1 = _mm256_set_epi64x(qh[1] & 0x80 ? 0xffffffffffffffff : 0x0101010101010101, - qh[1] & 0x08 ? 0xffffffffffffffff : 0x0101010101010101, - qh[0] & 0x80 ? 0xffffffffffffffff : 0x0101010101010101, - qh[0] & 0x08 ? 0xffffffffffffffff : 0x0101010101010101); - const __m256i delta2 = _mm256_set_epi64x(qh[3] & 0x80 ? 0xffffffffffffffff : 0x0101010101010101, - qh[3] & 0x08 ? 0xffffffffffffffff : 0x0101010101010101, - qh[2] & 0x80 ? 0xffffffffffffffff : 0x0101010101010101, - qh[2] & 0x08 ? 0xffffffffffffffff : 0x0101010101010101); - - const __m256i dot3 = mul_add_epi8(delta1, q8b_1); - const __m256i dot4 = mul_add_epi8(delta2, q8b_2); -#if QK_K == 64 - __m256i scale1 = MM256_SET_M128I(_mm_set1_epi16(sc[0] >> 4), _mm_set1_epi16(sc[0] >> 0)); - __m256i scale2 = MM256_SET_M128I(_mm_set1_epi16(sc[0] >> 12), _mm_set1_epi16(sc[0] >> 8)); -#else - __m256i scale1 = MM256_SET_M128I(_mm_set1_epi16(sc[ib/2] >> 3), _mm_set1_epi16(sc[ib/2] >> 0)); - __m256i scale2 = MM256_SET_M128I(_mm_set1_epi16(sc[ib/2] >> 9), _mm_set1_epi16(sc[ib/2] >> 6)); -#endif - scale1 = _mm256_add_epi16(_mm256_slli_epi16(_mm256_and_si256(scale1, mask), 1), mone); - scale2 = _mm256_add_epi16(_mm256_slli_epi16(_mm256_and_si256(scale2, mask), 1), mone); - const __m256i p1 = _mm256_madd_epi16(dot1, scale1); - const __m256i p2 = _mm256_madd_epi16(dot2, scale2); - const __m256i p3 = _mm256_madd_epi16(dot3, scale1); - const __m256i p4 = _mm256_madd_epi16(dot4, scale2); - - sumi1 = _mm256_add_epi32(sumi1, _mm256_add_epi32(p1, p2)); - sumi2 = _mm256_add_epi32(sumi2, _mm256_add_epi32(p3, p4)); - - qs += 8; qh += 4; - } - -#if QK_K == 64 - const __m256 d = _mm256_set1_ps(y[i].d * GGML_FP16_TO_FP32(x[i].d)); -#else - const __m256 d = _mm256_set1_ps(y[i].d * GGML_FP16_TO_FP32(scale.f16)); -#endif - accum1 = _mm256_fmadd_ps(d, _mm256_cvtepi32_ps(sumi1), accum1); - accum2 = _mm256_fmadd_ps(d, _mm256_cvtepi32_ps(sumi2), accum2); - - } - - *s = hsum_float_8(accum1) + IQ1M_DELTA * hsum_float_8(accum2); - -#else - - int sum1[2], sum2[2], delta[4]; - - float sumf = 0; - for (int i = 0; i < nb; i++) { - - const int8_t * q8 = y[i].qs; - const uint8_t * qs = x[i].qs; - const uint8_t * qh = x[i].qh; - const uint16_t * sc = (const uint16_t *)x[i].scales; - -#if QK_K != 64 - scale.u16 = (sc[0] >> 12) | ((sc[1] >> 8) & 0x00f0) | ((sc[2] >> 4) & 0x0f00) | (sc[3] & 0xf000); -#endif - - int sumi1 = 0, sumi2 = 0; - for (int ib = 0; ib < QK_K/32; ++ib) { - delta[0] = qh[0] & 0x08 ? -1 : 1; - delta[1] = qh[0] & 0x80 ? -1 : 1; - delta[2] = qh[1] & 0x08 ? -1 : 1; - delta[3] = qh[1] & 0x80 ? -1 : 1; - sum1[0] = sum1[1] = sum2[0] = sum2[1] = 0; - for (int l = 0; l < 4; ++l) { - const int8_t * grid = (const int8_t *)(iq1s_grid + (qs[l] | (((uint16_t)qh[l/2] << (8 - 4*(l%2))) & 0x700))); - int lsum1 = 0, lsum2 = 0; - for (int j = 0; j < 8; ++j) { - lsum1 += q8[j] * grid[j]; - lsum2 += q8[j]; - } - q8 += 8; - sum1[l/2] += lsum1; - sum2[l/2] += lsum2*delta[l]; - } -#if QK_K == 64 - const int ls1 = 2*((sc[0] >> (8*(ib%2)+0)) & 0xf) + 1; - const int ls2 = 2*((sc[0] >> (8*(ib%2)+4)) & 0xf) + 1; -#else - const int ls1 = 2*((sc[ib/2] >> (6*(ib%2)+0)) & 0x7) + 1; - const int ls2 = 2*((sc[ib/2] >> (6*(ib%2)+3)) & 0x7) + 1; -#endif - sumi1 += sum1[0] * ls1 + sum1[1] * ls2; - sumi2 += sum2[0] * ls1 + sum2[1] * ls2; - qs += 4; - qh += 2; - } - -#if QK_K == 64 - sumf += GGML_FP16_TO_FP32(x[i].d) * y[i].d * (sumi1 + IQ1M_DELTA * sumi2); -#else - sumf += GGML_FP16_TO_FP32(scale.f16) * y[i].d * (sumi1 + IQ1M_DELTA * sumi2); -#endif - } - - *s = sumf; - -#endif -} - -void ggml_vec_dot_iq4_nl_q8_0(int n, float * restrict s, size_t bs, const void * restrict vx, size_t bx, const void * restrict vy, size_t by, int nrc) { - assert(nrc == 1); - UNUSED(nrc); - UNUSED(bx); - UNUSED(by); - UNUSED(bs); - assert(n % QK4_NL == 0); - static_assert(QK4_NL == QK8_0, "QK4_NL and QK8_0 must be the same"); - - const block_iq4_nl * restrict x = vx; - const block_q8_0 * restrict y = vy; - - const int nb = n / QK4_NL; - -#if defined __ARM_NEON - const int8x16_t values = vld1q_s8(kvalues_iq4nl); - const uint8x16_t m4b = vdupq_n_u8(0x0f); - uint8x16x2_t q4bits; - int8x16x4_t q4b; - int8x16x4_t q8b; - int32x4_t prod_1, prod_2; - - float sumf = 0; - - for (int ib = 0; ib < nb; ib += 2) { - - q4bits.val[0] = vld1q_u8(x[ib+0].qs); - q4bits.val[1] = vld1q_u8(x[ib+1].qs); - q8b.val[0] = vld1q_s8(y[ib+0].qs); - q8b.val[1] = vld1q_s8(y[ib+0].qs + 16); - q8b.val[2] = vld1q_s8(y[ib+1].qs); - q8b.val[3] = vld1q_s8(y[ib+1].qs + 16); - - q4b.val[0] = ggml_vqtbl1q_s8(values, vandq_u8 (q4bits.val[0], m4b)); - q4b.val[1] = ggml_vqtbl1q_s8(values, vshrq_n_u8(q4bits.val[0], 4)); - q4b.val[2] = ggml_vqtbl1q_s8(values, vandq_u8 (q4bits.val[1], m4b)); - q4b.val[3] = ggml_vqtbl1q_s8(values, vshrq_n_u8(q4bits.val[1], 4)); - - prod_1 = ggml_vdotq_s32(ggml_vdotq_s32(vdupq_n_s32(0), q4b.val[0], q8b.val[0]), q4b.val[1], q8b.val[1]); - prod_2 = ggml_vdotq_s32(ggml_vdotq_s32(vdupq_n_s32(0), q4b.val[2], q8b.val[2]), q4b.val[3], q8b.val[3]); - - sumf += - GGML_FP16_TO_FP32(x[ib+0].d) * GGML_FP16_TO_FP32(y[ib+0].d) * vaddvq_s32(prod_1) + - GGML_FP16_TO_FP32(x[ib+1].d) * GGML_FP16_TO_FP32(y[ib+1].d) * vaddvq_s32(prod_2); - } - - *s = sumf; - -#elif defined __AVX2__ - - const __m128i values128 = _mm_loadu_si128((const __m128i*)kvalues_iq4nl); - const __m128i m4b = _mm_set1_epi8(0x0f); - const __m256i mone = _mm256_set1_epi16(1); - - __m256 accum1 = _mm256_setzero_ps(); - __m256 accum2 = _mm256_setzero_ps(); - for (int ib = 0; ib < nb; ib += 2) { - const __m128i q4bits_1 = _mm_loadu_si128((const __m128i*)x[0].qs); - const __m128i q4bits_2 = _mm_loadu_si128((const __m128i*)x[1].qs); - const __m256i q8b_1 = _mm256_loadu_si256((const __m256i *)y[0].qs); - const __m256i q8b_2 = _mm256_loadu_si256((const __m256i *)y[1].qs); - const __m256i q4b_1 = MM256_SET_M128I(_mm_shuffle_epi8(values128, _mm_and_si128(_mm_srli_epi16(q4bits_1, 4), m4b)), - _mm_shuffle_epi8(values128, _mm_and_si128(q4bits_1, m4b))); - const __m256i q4b_2 = MM256_SET_M128I(_mm_shuffle_epi8(values128, _mm_and_si128(_mm_srli_epi16(q4bits_2, 4), m4b)), - _mm_shuffle_epi8(values128, _mm_and_si128(q4bits_2, m4b))); - const __m256i p16_1 = mul_add_epi8(q4b_1, q8b_1); - const __m256i p16_2 = mul_add_epi8(q4b_2, q8b_2); - const __m256i p_1 = _mm256_madd_epi16(p16_1, mone); - const __m256i p_2 = _mm256_madd_epi16(p16_2, mone); - accum1 = _mm256_fmadd_ps(_mm256_set1_ps(GGML_FP16_TO_FP32(y[0].d)*GGML_FP16_TO_FP32(x[0].d)), - _mm256_cvtepi32_ps(p_1), accum1); - accum2 = _mm256_fmadd_ps(_mm256_set1_ps(GGML_FP16_TO_FP32(y[1].d)*GGML_FP16_TO_FP32(x[1].d)), - _mm256_cvtepi32_ps(p_2), accum2); - - y += 2; - x += 2; - } - - *s = hsum_float_8(_mm256_add_ps(accum1, accum2)); - -#else - float sumf = 0; - for (int ib = 0; ib < nb; ++ib) { - const float d = GGML_FP16_TO_FP32(y[ib].d)*GGML_FP16_TO_FP32(x[ib].d); - int sumi1 = 0, sumi2 = 0; - for (int j = 0; j < QK4_NL/2; ++j) { - sumi1 += y[ib].qs[j+ 0] * kvalues_iq4nl[x[ib].qs[j] & 0xf]; - sumi2 += y[ib].qs[j+QK4_NL/2] * kvalues_iq4nl[x[ib].qs[j] >> 4]; - } - sumf += d * (sumi1 + sumi2); - } - *s = sumf; -#endif -} - -void ggml_vec_dot_iq4_xs_q8_K(int n, float * restrict s, size_t bs, const void * restrict vx, size_t bx, const void * restrict vy, size_t by, int nrc) { - assert(nrc == 1); - UNUSED(nrc); - UNUSED(bx); - UNUSED(by); - UNUSED(bs); - assert(n % QK_K == 0); -#if QK_K == 64 - ggml_vec_dot_iq4_nl_q8_0(n, s, bs, vx, bx, vy, by, nrc); -#else - - const block_iq4_xs * restrict x = vx; - const block_q8_K * restrict y = vy; - - const int nb = n / QK_K; - -#if defined __ARM_NEON - const int8x16_t values = vld1q_s8(kvalues_iq4nl); - const uint8x16_t m4b = vdupq_n_u8(0x0f); - ggml_uint8x16x2_t q4bits; - ggml_int8x16x4_t q4b; - ggml_int8x16x4_t q8b; - int32x4_t prod_1, prod_2; - - float sumf = 0; - - for (int ibl = 0; ibl < nb; ++ibl) { - - const int8_t * q8 = y[ibl].qs; - const uint8_t * q4 = x[ibl].qs; - uint16_t h = x[ibl].scales_h; - - int sumi1 = 0, sumi2 = 0; - for (int ib = 0; ib < QK_K/64; ++ib) { - - q4bits = ggml_vld1q_u8_x2(q4); q4 += 32; - q8b = ggml_vld1q_s8_x4(q8); q8 += 64; - - q4b.val[0] = ggml_vqtbl1q_s8(values, vandq_u8 (q4bits.val[0], m4b)); - q4b.val[1] = ggml_vqtbl1q_s8(values, vshrq_n_u8(q4bits.val[0], 4)); - q4b.val[2] = ggml_vqtbl1q_s8(values, vandq_u8 (q4bits.val[1], m4b)); - q4b.val[3] = ggml_vqtbl1q_s8(values, vshrq_n_u8(q4bits.val[1], 4)); - - prod_1 = ggml_vdotq_s32(ggml_vdotq_s32(vdupq_n_s32(0), q4b.val[0], q8b.val[0]), q4b.val[1], q8b.val[1]); - prod_2 = ggml_vdotq_s32(ggml_vdotq_s32(vdupq_n_s32(0), q4b.val[2], q8b.val[2]), q4b.val[3], q8b.val[3]); - - int ls1 = ((x[ibl].scales_l[ib] & 0xf) | ((h << 4) & 0x30)) - 32; - int ls2 = ((x[ibl].scales_l[ib] >> 4) | ((h << 2) & 0x30)) - 32; - h >>= 4; - sumi1 += vaddvq_s32(prod_1) * ls1; - sumi2 += vaddvq_s32(prod_2) * ls2; - - } - - sumf += GGML_FP16_TO_FP32(x[ibl].d) * y[ibl].d * (sumi1 + sumi2); - } - - *s = sumf; - -#elif defined __AVX2__ - - const __m128i values128 = _mm_loadu_si128((const __m128i*)kvalues_iq4nl); - const __m128i m4b = _mm_set1_epi8(0x0f); - - __m256 accum = _mm256_setzero_ps(); - for (int ibl = 0; ibl < nb; ++ibl) { - const uint8_t * qs = x[ibl].qs; - const int8_t * q8 = y[ibl].qs; - uint16_t sh = x[ibl].scales_h; - __m256i sumi1 = _mm256_setzero_si256(); - __m256i sumi2 = _mm256_setzero_si256(); - for (int ib = 0; ib < QK_K/32; ib += 2) { - const __m128i q4bits_1 = _mm_loadu_si128((const __m128i*)qs); qs += 16; - const __m128i q4bits_2 = _mm_loadu_si128((const __m128i*)qs); qs += 16; - const __m256i q8b_1 = _mm256_loadu_si256((const __m256i *)q8); q8 += 32; - const __m256i q8b_2 = _mm256_loadu_si256((const __m256i *)q8); q8 += 32; - const __m256i q4b_1 = MM256_SET_M128I(_mm_shuffle_epi8(values128, _mm_and_si128(_mm_srli_epi16(q4bits_1, 4), m4b)), - _mm_shuffle_epi8(values128, _mm_and_si128(q4bits_1, m4b))); - const __m256i q4b_2 = MM256_SET_M128I(_mm_shuffle_epi8(values128, _mm_and_si128(_mm_srli_epi16(q4bits_2, 4), m4b)), - _mm_shuffle_epi8(values128, _mm_and_si128(q4bits_2, m4b))); - const __m256i p16_1 = mul_add_epi8(q4b_1, q8b_1); - const __m256i p16_2 = mul_add_epi8(q4b_2, q8b_2); - const int16_t ls1 = ((x[ibl].scales_l[ib/2] & 0xf) | ((sh << 4) & 0x30)) - 32; - const int16_t ls2 = ((x[ibl].scales_l[ib/2] >> 4) | ((sh << 2) & 0x30)) - 32; - sh >>= 4; - const __m256i p_1 = _mm256_madd_epi16(p16_1, _mm256_set1_epi16(ls1)); - const __m256i p_2 = _mm256_madd_epi16(p16_2, _mm256_set1_epi16(ls2)); - sumi1 = _mm256_add_epi32(p_1, sumi1); - sumi2 = _mm256_add_epi32(p_2, sumi2); - } - accum = _mm256_fmadd_ps(_mm256_set1_ps(GGML_FP16_TO_FP32(x[ibl].d)*y[ibl].d), - _mm256_cvtepi32_ps(_mm256_add_epi32(sumi1, sumi2)), accum); - } - - *s = hsum_float_8(accum); - -#else - float sumf = 0; - for (int ibl = 0; ibl < nb; ++ibl) { - const float d4d8 = GGML_FP16_TO_FP32(x[ibl].d) * y[ibl].d; - uint16_t h = x[ibl].scales_h; - const uint8_t * qs = x[ibl].qs; - const int8_t * q8 = y[ibl].qs; - for (int ib = 0; ib < QK_K/32; ib += 2) { - const uint8_t ls1 = (x[ibl].scales_l[ib/2] & 0xf) | ((h << 4) & 0x30); - const uint8_t ls2 = (x[ibl].scales_l[ib/2] >> 4) | ((h << 2) & 0x30); - h >>= 4; - const float d1 = d4d8*(ls1 - 32); - const float d2 = d4d8*(ls2 - 32); - int sumi1 = 0, sumi2 = 0; - for (int j = 0; j < 16; ++j) { - sumi1 += q8[j+ 0] * kvalues_iq4nl[qs[j] & 0xf]; - sumi2 += q8[j+16] * kvalues_iq4nl[qs[j] >> 4]; - } - sumf += d1 * (sumi1 + sumi2); - qs += 16; - q8 += 32; - sumi1 = sumi2 = 0; - for (int j = 0; j < 16; ++j) { - sumi1 += q8[j+ 0] * kvalues_iq4nl[qs[j] & 0xf]; - sumi2 += q8[j+16] * kvalues_iq4nl[qs[j] >> 4]; - } - sumf += d2 * (sumi1 + sumi2); - qs += 16; - q8 += 32; - } - } - *s = sumf; -#endif -#endif -} - -// ================================ IQ2 quantization ============================================= - -typedef struct { - uint64_t * grid; - int * map; - uint16_t * neighbours; -} iq2_entry_t; - -static iq2_entry_t iq2_data[4] = { - {NULL, NULL, NULL}, - {NULL, NULL, NULL}, - {NULL, NULL, NULL}, - {NULL, NULL, NULL}, -}; - -static inline int iq2_data_index(enum ggml_type type) { - GGML_ASSERT(type == GGML_TYPE_IQ2_XXS || type == GGML_TYPE_IQ2_XS || type == GGML_TYPE_IQ1_S || type == GGML_TYPE_IQ1_M || type == GGML_TYPE_IQ2_S); - return type == GGML_TYPE_IQ2_XXS ? 0 : - type == GGML_TYPE_IQ2_XS ? 1 : - type == GGML_TYPE_IQ1_S || type == GGML_TYPE_IQ1_M ? 2 : 3; -} - -static inline int iq2_grid_size(enum ggml_type type) { - GGML_ASSERT(type == GGML_TYPE_IQ2_XXS || type == GGML_TYPE_IQ2_XS || type == GGML_TYPE_IQ1_S || type == GGML_TYPE_IQ1_M || type == GGML_TYPE_IQ2_S); - return type == GGML_TYPE_IQ2_XXS ? 256 : - type == GGML_TYPE_IQ2_XS ? 512 : - type == GGML_TYPE_IQ1_S || type == GGML_TYPE_IQ1_M ? NGRID_IQ1S : 1024; -} - -static int iq2_compare_func(const void * left, const void * right) { - const int * l = (const int *)left; - const int * r = (const int *)right; - return l[0] < r[0] ? -1 : l[0] > r[0] ? 1 : l[1] < r[1] ? -1 : l[1] > r[1] ? 1 : 0; -} - -void iq2xs_init_impl(enum ggml_type type) { - const int gindex = iq2_data_index(type); - const int grid_size = iq2_grid_size(type); - if (iq2_data[gindex].grid) { - return; - } - static const uint16_t kgrid_2bit_256[256] = { - 0, 2, 5, 8, 10, 17, 20, 32, 34, 40, 42, 65, 68, 80, 88, 97, - 100, 128, 130, 138, 162, 257, 260, 272, 277, 320, 388, 408, 512, 514, 546, 642, - 1025, 1028, 1040, 1057, 1060, 1088, 1090, 1096, 1120, 1153, 1156, 1168, 1188, 1280, 1282, 1288, - 1312, 1350, 1385, 1408, 1425, 1545, 1552, 1600, 1668, 1700, 2048, 2053, 2056, 2068, 2088, 2113, - 2116, 2128, 2130, 2184, 2308, 2368, 2562, 2580, 4097, 4100, 4112, 4129, 4160, 4192, 4228, 4240, - 4245, 4352, 4360, 4384, 4432, 4442, 4480, 4644, 4677, 5120, 5128, 5152, 5157, 5193, 5248, 5400, - 5474, 5632, 5654, 6145, 6148, 6160, 6208, 6273, 6400, 6405, 6560, 6737, 8192, 8194, 8202, 8260, - 8289, 8320, 8322, 8489, 8520, 8704, 8706, 9217, 9220, 9232, 9280, 9302, 9472, 9537, 9572, 9872, - 10248, 10272, 10388, 10820, 16385, 16388, 16400, 16408, 16417, 16420, 16448, 16456, 16470, 16480, 16513, 16516, - 16528, 16640, 16672, 16737, 16768, 16773, 16897, 16912, 16968, 16982, 17000, 17408, 17416, 17440, 17536, 17561, - 17682, 17700, 17920, 18433, 18436, 18448, 18496, 18501, 18688, 18776, 18785, 18818, 19013, 19088, 20480, 20488, - 20497, 20505, 20512, 20608, 20616, 20740, 20802, 20900, 21137, 21648, 21650, 21770, 22017, 22100, 22528, 22545, - 22553, 22628, 22848, 23048, 24580, 24592, 24640, 24680, 24832, 24917, 25112, 25184, 25600, 25605, 25872, 25874, - 25988, 26690, 32768, 32770, 32778, 32833, 32898, 33028, 33048, 33088, 33297, 33793, 33796, 33808, 33813, 33856, - 33888, 34048, 34118, 34196, 34313, 34368, 34400, 34818, 35076, 35345, 36868, 36880, 36900, 36928, 37025, 37142, - 37248, 37445, 37888, 37922, 37956, 38225, 39041, 39200, 40962, 41040, 41093, 41225, 41472, 42008, 43088, 43268, - }; - static const uint16_t kgrid_2bit_512[512] = { - 0, 2, 5, 8, 10, 17, 20, 22, 25, 32, 34, 37, 40, 65, 68, 70, - 73, 80, 82, 85, 88, 97, 100, 128, 130, 133, 136, 145, 148, 153, 160, 257, - 260, 262, 265, 272, 274, 277, 280, 282, 289, 292, 320, 322, 325, 328, 337, 340, - 352, 360, 385, 388, 400, 512, 514, 517, 520, 529, 532, 544, 577, 580, 592, 597, - 640, 650, 1025, 1028, 1030, 1033, 1040, 1042, 1045, 1048, 1057, 1060, 1088, 1090, 1093, 1096, - 1105, 1108, 1110, 1120, 1153, 1156, 1168, 1280, 1282, 1285, 1288, 1297, 1300, 1312, 1345, 1348, - 1360, 1377, 1408, 1537, 1540, 1552, 1574, 1600, 1602, 1668, 2048, 2050, 2053, 2056, 2058, 2065, - 2068, 2080, 2085, 2113, 2116, 2128, 2136, 2176, 2208, 2218, 2305, 2308, 2320, 2368, 2433, 2441, - 2560, 2592, 2600, 2710, 2720, 4097, 4100, 4102, 4105, 4112, 4114, 4117, 4120, 4129, 4132, 4160, - 4162, 4165, 4168, 4177, 4180, 4192, 4202, 4225, 4228, 4240, 4352, 4354, 4357, 4360, 4369, 4372, - 4384, 4417, 4420, 4432, 4480, 4500, 4502, 4609, 4612, 4614, 4624, 4672, 4704, 5120, 5122, 5125, - 5128, 5137, 5140, 5152, 5185, 5188, 5193, 5200, 5220, 5248, 5377, 5380, 5392, 5440, 5632, 5652, - 5705, 6145, 6148, 6160, 6162, 6208, 6228, 6278, 6400, 6405, 6502, 6737, 6825, 8192, 8194, 8197, - 8200, 8202, 8209, 8212, 8224, 8257, 8260, 8272, 8320, 8352, 8449, 8452, 8464, 8512, 8520, 8549, - 8704, 8738, 8832, 8872, 9217, 9220, 9232, 9257, 9280, 9472, 9537, 9554, 9625, 9729, 9754, 9894, - 10240, 10248, 10250, 10272, 10325, 10376, 10402, 10600, 10640, 10760, 10784, 10882, 10888, 10890, 16385, 16388, - 16390, 16393, 16400, 16402, 16405, 16408, 16417, 16420, 16448, 16450, 16453, 16456, 16458, 16465, 16468, 16480, - 16485, 16513, 16516, 16528, 16640, 16642, 16645, 16648, 16657, 16660, 16672, 16705, 16708, 16720, 16768, 16773, - 16802, 16897, 16900, 16912, 16914, 16937, 16960, 17408, 17410, 17413, 17416, 17425, 17428, 17433, 17440, 17473, - 17476, 17488, 17536, 17556, 17665, 17668, 17680, 17700, 17728, 17818, 17920, 17930, 17988, 18000, 18433, 18436, - 18448, 18496, 18501, 18516, 18530, 18688, 18705, 18756, 18768, 18793, 18948, 20480, 20482, 20485, 20488, 20497, - 20500, 20512, 20520, 20545, 20548, 20560, 20608, 20737, 20740, 20752, 20757, 20800, 20802, 20992, 21060, 21162, - 21505, 21508, 21520, 21537, 21568, 21600, 21633, 21665, 21760, 21768, 21888, 21896, 22049, 22120, 22177, 22528, - 22548, 22593, 22608, 22681, 22810, 22848, 22850, 23173, 24577, 24580, 24592, 24640, 24660, 24674, 24710, 24745, - 24832, 25124, 25162, 25234, 25600, 25622, 25872, 25920, 25925, 26020, 26625, 26730, 26917, 27142, 27220, 27234, - 32768, 32770, 32773, 32776, 32785, 32788, 32800, 32810, 32833, 32836, 32848, 32896, 32898, 32936, 32938, 33025, - 33028, 33030, 33040, 33088, 33105, 33113, 33280, 33312, 33408, 33410, 33440, 33448, 33793, 33796, 33808, 33810, - 33813, 33856, 33888, 33929, 34048, 34116, 34213, 34328, 34410, 34816, 34824, 34853, 34906, 34944, 34946, 34984, - 35078, 35362, 35456, 35464, 35478, 35496, 36865, 36868, 36880, 36928, 36950, 36996, 37120, 37154, 37220, 37462, - 37513, 37888, 37893, 37956, 37968, 37976, 38185, 38288, 38290, 38465, 38993, 39078, 39241, 39445, 39520, 40960, - 40962, 40968, 40970, 40992, 41002, 41120, 41297, 41305, 41382, 41472, 41474, 41480, 41514, 41600, 41632, 42048, - 42133, 42597, 42648, 43018, 43040, 43042, 43048, 43168, 43176, 43268, 43396, 43398, 43560, 43562, 43665, 43690, - }; - static const uint16_t kgrid_1bit_2048[NGRID_IQ1S] = { - 0, 2, 5, 8, 10, 17, 21, 32, 34, 40, 42, 69, 81, 84, 86, 101, - 128, 130, 136, 138, 149, 160, 162, 168, 170, 260, 261, 273, 276, 278, 281, 282, - 293, 321, 326, 329, 338, 341, 346, 353, 356, 358, 360, 389, 401, 404, 406, 421, - 512, 514, 520, 522, 533, 544, 546, 552, 554, 581, 593, 601, 612, 617, 640, 642, - 648, 650, 657, 661, 665, 672, 674, 680, 682, 1041, 1044, 1046, 1061, 1089, 1097, 1109, - 1114, 1124, 1125, 1169, 1177, 1189, 1281, 1284, 1285, 1286, 1301, 1304, 1306, 1321, 1344, 1349, - 1354, 1360, 1361, 1364, 1365, 1366, 1369, 1376, 1378, 1381, 1384, 1386, 1409, 1425, 1429, 1432, - 1434, 1441, 1444, 1445, 1446, 1449, 1556, 1561, 1601, 1604, 1616, 1618, 1621, 1624, 1632, 1633, - 1638, 1641, 1669, 1681, 1684, 1689, 2048, 2050, 2056, 2058, 2069, 2080, 2082, 2088, 2090, 2117, - 2129, 2134, 2149, 2176, 2178, 2184, 2186, 2197, 2208, 2210, 2216, 2218, 2309, 2321, 2324, 2329, - 2340, 2341, 2369, 2384, 2385, 2389, 2401, 2404, 2409, 2449, 2452, 2454, 2457, 2469, 2560, 2562, - 2568, 2570, 2581, 2592, 2594, 2600, 2602, 2629, 2641, 2649, 2657, 2661, 2688, 2690, 2693, 2696, - 2698, 2709, 2720, 2722, 2728, 2730, 4112, 4113, 4116, 4121, 4132, 4133, 4161, 4164, 4176, 4181, - 4184, 4193, 4196, 4197, 4201, 4241, 4244, 4246, 4257, 4261, 4353, 4356, 4358, 4361, 4368, 4370, - 4373, 4376, 4385, 4388, 4393, 4421, 4426, 4432, 4433, 4434, 4436, 4437, 4438, 4441, 4448, 4453, - 4484, 4498, 4501, 4513, 4516, 4625, 4628, 4630, 4645, 4672, 4678, 4681, 4690, 4693, 4696, 4698, - 4708, 4710, 4741, 4753, 4756, 4758, 4773, 5121, 5126, 5129, 5140, 5141, 5144, 5145, 5153, 5158, - 5185, 5189, 5190, 5192, 5194, 5201, 5204, 5205, 5206, 5209, 5218, 5221, 5224, 5252, 5257, 5264, - 5268, 5269, 5272, 5273, 5274, 5281, 5284, 5285, 5289, 5378, 5381, 5386, 5393, 5396, 5397, 5398, - 5401, 5408, 5410, 5413, 5416, 5418, 5441, 5444, 5445, 5446, 5457, 5458, 5460, 5461, 5462, 5465, - 5466, 5473, 5476, 5477, 5478, 5481, 5504, 5506, 5508, 5509, 5512, 5514, 5520, 5521, 5524, 5525, - 5526, 5529, 5530, 5536, 5538, 5541, 5633, 5636, 5637, 5638, 5653, 5654, 5656, 5658, 5665, 5670, - 5696, 5698, 5700, 5701, 5704, 5706, 5713, 5717, 5718, 5720, 5721, 5729, 5732, 5733, 5736, 5737, - 5738, 5766, 5770, 5778, 5781, 5796, 5801, 6161, 6166, 6181, 6209, 6212, 6214, 6217, 6224, 6229, - 6232, 6234, 6240, 6241, 6244, 6246, 6249, 6277, 6289, 6292, 6309, 6416, 6418, 6421, 6426, 6433, - 6437, 6466, 6468, 6469, 6472, 6481, 6484, 6485, 6486, 6489, 6490, 6496, 6501, 6506, 6537, 6545, - 6546, 6549, 6552, 6561, 6566, 6569, 6665, 6678, 6692, 6694, 6724, 6726, 6729, 6736, 6738, 6741, - 6744, 6753, 6758, 6761, 6789, 6801, 6806, 6810, 8192, 8194, 8200, 8202, 8213, 8224, 8226, 8229, - 8232, 8234, 8261, 8273, 8281, 8289, 8293, 8320, 8322, 8328, 8330, 8341, 8352, 8354, 8357, 8360, - 8362, 8453, 8465, 8468, 8473, 8485, 8514, 8516, 8521, 8533, 8536, 8538, 8545, 8548, 8549, 8550, - 8581, 8592, 8598, 8601, 8613, 8705, 8712, 8714, 8721, 8725, 8736, 8738, 8744, 8746, 8773, 8785, - 8790, 8793, 8805, 8833, 8840, 8842, 8849, 8853, 8864, 8866, 8872, 8874, 9221, 9236, 9238, 9241, - 9253, 9284, 9285, 9286, 9289, 9298, 9301, 9304, 9306, 9318, 9349, 9361, 9364, 9369, 9377, 9381, - 9481, 9493, 9505, 9513, 9536, 9541, 9544, 9553, 9556, 9557, 9561, 9570, 9573, 9576, 9609, 9616, - 9620, 9621, 9624, 9626, 9633, 9636, 9638, 9641, 9733, 9744, 9746, 9753, 9765, 9793, 9801, 9813, - 9824, 9825, 9833, 9860, 9862, 9872, 9882, 10240, 10242, 10248, 10250, 10261, 10272, 10274, 10280, 10282, - 10309, 10321, 10324, 10341, 10368, 10370, 10376, 10378, 10400, 10402, 10408, 10410, 10505, 10513, 10516, 10521, - 10533, 10566, 10569, 10578, 10581, 10593, 10596, 10598, 10601, 10629, 10640, 10646, 10649, 10660, 10661, 10752, - 10754, 10760, 10762, 10784, 10786, 10792, 10794, 10821, 10833, 10838, 10841, 10853, 10880, 10882, 10888, 10890, - 10901, 10912, 10914, 10920, 10922, 16389, 16401, 16406, 16421, 16457, 16466, 16469, 16472, 16474, 16481, 16484, - 16486, 16532, 16537, 16545, 16550, 16640, 16641, 16644, 16646, 16649, 16658, 16661, 16662, 16664, 16666, 16673, - 16678, 16681, 16709, 16712, 16714, 16721, 16724, 16725, 16726, 16729, 16730, 16741, 16744, 16746, 16769, 16772, - 16774, 16784, 16786, 16789, 16800, 16801, 16802, 16901, 16913, 16916, 16918, 16933, 16961, 16978, 16981, 16986, - 16996, 17001, 17033, 17044, 17061, 17409, 17429, 17433, 17449, 17477, 17480, 17482, 17489, 17492, 17493, 17494, - 17505, 17506, 17509, 17512, 17514, 17537, 17542, 17545, 17552, 17554, 17557, 17568, 17569, 17577, 17665, 17666, - 17669, 17674, 17681, 17684, 17685, 17686, 17689, 17696, 17701, 17706, 17729, 17732, 17733, 17734, 17737, 17744, - 17745, 17748, 17749, 17750, 17752, 17753, 17761, 17764, 17765, 17766, 17769, 17794, 17796, 17797, 17800, 17809, - 17812, 17813, 17814, 17817, 17818, 17829, 17832, 17834, 17921, 17925, 17929, 17940, 17941, 17944, 17946, 17953, - 17956, 17961, 17984, 17986, 17989, 17992, 18000, 18001, 18002, 18005, 18006, 18009, 18018, 18021, 18024, 18049, - 18053, 18058, 18068, 18069, 18081, 18084, 18086, 18437, 18449, 18453, 18458, 18469, 18498, 18505, 18512, 18517, - 18520, 18529, 18532, 18534, 18537, 18565, 18577, 18580, 18582, 18585, 18597, 18689, 18693, 18694, 18698, 18704, - 18708, 18709, 18712, 18721, 18724, 18726, 18752, 18757, 18762, 18769, 18770, 18772, 18773, 18774, 18777, 18784, - 18786, 18789, 18790, 18794, 18822, 18825, 18834, 18837, 18838, 18840, 18849, 18852, 18854, 18857, 18966, 19012, - 19014, 19017, 19029, 19032, 19034, 19044, 19049, 19092, 19109, 20481, 20484, 20485, 20486, 20489, 20498, 20501, - 20506, 20513, 20516, 20521, 20544, 20549, 20552, 20561, 20564, 20565, 20566, 20569, 20581, 20584, 20614, 20617, - 20629, 20632, 20640, 20641, 20646, 20649, 20741, 20744, 20745, 20746, 20753, 20756, 20757, 20758, 20760, 20761, - 20768, 20773, 20774, 20776, 20778, 20801, 20804, 20805, 20806, 20809, 20816, 20817, 20818, 20820, 20821, 20822, - 20824, 20825, 20826, 20833, 20836, 20837, 20838, 20841, 20866, 20869, 20881, 20884, 20885, 20886, 20889, 20896, - 20901, 20906, 20993, 20998, 21010, 21013, 21018, 21025, 21028, 21058, 21061, 21066, 21073, 21076, 21077, 21078, - 21081, 21090, 21093, 21125, 21136, 21138, 21141, 21145, 21146, 21156, 21508, 21509, 21521, 21524, 21525, 21526, - 21528, 21529, 21537, 21541, 21544, 21546, 21569, 21572, 21573, 21574, 21577, 21578, 21584, 21585, 21588, 21589, - 21590, 21592, 21593, 21594, 21601, 21602, 21604, 21605, 21606, 21609, 21632, 21640, 21642, 21649, 21652, 21653, - 21654, 21657, 21665, 21668, 21669, 21674, 21761, 21762, 21764, 21765, 21766, 21769, 21776, 21777, 21778, 21780, - 21781, 21782, 21785, 21786, 21793, 21796, 21797, 21798, 21801, 21824, 21825, 21826, 21828, 21829, 21830, 21832, - 21833, 21840, 21841, 21842, 21844, 21845, 21846, 21848, 21849, 21850, 21856, 21857, 21860, 21861, 21862, 21864, - 21865, 21866, 21889, 21892, 21893, 21897, 21898, 21904, 21905, 21908, 21909, 21910, 21912, 21913, 21921, 21924, - 21925, 21926, 21929, 22016, 22017, 22018, 22020, 22022, 22024, 22025, 22033, 22036, 22037, 22040, 22041, 22048, - 22049, 22050, 22052, 22053, 22054, 22056, 22057, 22081, 22085, 22086, 22088, 22089, 22090, 22096, 22097, 22098, - 22100, 22101, 22102, 22104, 22105, 22106, 22113, 22116, 22117, 22121, 22146, 22149, 22150, 22152, 22153, 22154, - 22161, 22165, 22170, 22178, 22181, 22182, 22184, 22185, 22532, 22533, 22534, 22537, 22544, 22549, 22552, 22561, - 22570, 22597, 22600, 22602, 22609, 22612, 22613, 22614, 22616, 22617, 22624, 22626, 22628, 22629, 22658, 22665, - 22672, 22674, 22677, 22680, 22689, 22697, 22785, 22786, 22789, 22794, 22801, 22804, 22805, 22806, 22809, 22821, - 22849, 22852, 22853, 22854, 22857, 22864, 22865, 22866, 22868, 22869, 22870, 22872, 22873, 22874, 22881, 22884, - 22885, 22886, 22889, 22913, 22917, 22921, 22929, 22932, 22933, 22934, 22936, 22937, 22949, 23044, 23048, 23061, - 23066, 23072, 23077, 23078, 23081, 23109, 23112, 23113, 23121, 23125, 23126, 23128, 23129, 23138, 23141, 23144, - 23146, 23169, 23178, 23186, 23189, 23190, 23192, 23194, 23201, 24581, 24596, 24598, 24601, 24613, 24644, 24656, - 24661, 24662, 24664, 24666, 24673, 24676, 24678, 24681, 24705, 24726, 24741, 24833, 24836, 24838, 24841, 24850, - 24853, 24865, 24866, 24870, 24873, 24901, 24905, 24913, 24917, 24918, 24921, 24933, 24934, 24938, 24964, 24970, - 24978, 24981, 24993, 24998, 25001, 25105, 25110, 25113, 25152, 25153, 25158, 25173, 25174, 25176, 25184, 25221, - 25233, 25238, 25253, 25617, 25618, 25621, 25622, 25626, 25633, 25638, 25641, 25664, 25666, 25669, 25672, 25674, - 25681, 25684, 25685, 25686, 25689, 25690, 25696, 25698, 25701, 25732, 25733, 25737, 25744, 25746, 25748, 25749, - 25750, 25752, 25754, 25761, 25764, 25769, 25861, 25864, 25866, 25873, 25877, 25878, 25881, 25924, 25925, 25926, - 25929, 25936, 25937, 25940, 25941, 25942, 25945, 25953, 25956, 25957, 25958, 25961, 25990, 25993, 25994, 26001, - 26005, 26006, 26009, 26010, 26018, 26021, 26022, 26024, 26114, 26121, 26133, 26144, 26150, 26152, 26153, 26176, - 26181, 26184, 26186, 26193, 26196, 26197, 26198, 26200, 26202, 26208, 26213, 26216, 26240, 26242, 26245, 26250, - 26260, 26262, 26264, 26265, 26272, 26276, 26278, 26282, 26646, 26649, 26661, 26689, 26706, 26709, 26714, 26721, - 26729, 26757, 26769, 26776, 26790, 26881, 26884, 26896, 26901, 26913, 26916, 26918, 26921, 26944, 26945, 26949, - 26950, 26952, 26961, 26964, 26965, 26966, 26969, 26976, 26981, 26986, 27010, 27012, 27018, 27029, 27041, 27044, - 27045, 27049, 27153, 27158, 27160, 27201, 27204, 27209, 27216, 27221, 27224, 27226, 27236, 27237, 27241, 27270, - 27284, 27288, 27290, 27302, 32768, 32770, 32776, 32778, 32800, 32802, 32808, 32810, 32837, 32848, 32849, 32852, - 32854, 32857, 32869, 32896, 32898, 32904, 32906, 32917, 32928, 32930, 32936, 32938, 33029, 33041, 33044, 33046, - 33049, 33061, 33089, 33092, 33097, 33104, 33106, 33109, 33110, 33112, 33113, 33124, 33126, 33129, 33157, 33161, - 33172, 33174, 33177, 33189, 33280, 33282, 33288, 33290, 33301, 33312, 33314, 33320, 33322, 33361, 33364, 33369, - 33381, 33408, 33410, 33416, 33418, 33429, 33440, 33442, 33448, 33450, 33812, 33817, 33857, 33860, 33873, 33877, - 33882, 33889, 33892, 33897, 33940, 33945, 34049, 34057, 34066, 34069, 34074, 34086, 34089, 34112, 34113, 34117, - 34120, 34129, 34132, 34133, 34134, 34137, 34138, 34149, 34150, 34152, 34154, 34177, 34180, 34182, 34185, 34192, - 34194, 34197, 34200, 34214, 34321, 34326, 34329, 34341, 34369, 34372, 34377, 34378, 34384, 34389, 34393, 34394, - 34401, 34406, 34410, 34437, 34449, 34458, 34468, 34816, 34818, 34824, 34826, 34837, 34848, 34850, 34856, 34858, - 34881, 34885, 34897, 34900, 34905, 34917, 34921, 34944, 34946, 34952, 34954, 34965, 34976, 34978, 34984, 34986, - 35077, 35078, 35089, 35092, 35094, 35109, 35137, 35140, 35142, 35145, 35152, 35154, 35157, 35162, 35169, 35172, - 35205, 35222, 35225, 35237, 35328, 35330, 35336, 35338, 35349, 35360, 35362, 35368, 35370, 35397, 35409, 35412, - 35414, 35456, 35458, 35464, 35466, 35477, 35488, 35490, 35496, 35498, 36869, 36881, 36886, 36888, 36889, 36901, - 36929, 36934, 36937, 36949, 36952, 36954, 36969, 36970, 36997, 37009, 37012, 37014, 37017, 37029, 37121, 37124, - 37126, 37129, 37136, 37141, 37144, 37146, 37153, 37156, 37158, 37161, 37184, 37189, 37200, 37201, 37204, 37205, - 37206, 37209, 37218, 37221, 37252, 37254, 37266, 37269, 37272, 37281, 37284, 37286, 37289, 37381, 37393, 37396, - 37401, 37413, 37444, 37446, 37449, 37456, 37458, 37461, 37464, 37478, 37481, 37509, 37524, 37526, 37545, 37889, - 37892, 37894, 37904, 37909, 37912, 37926, 37952, 37962, 37969, 37972, 37973, 37974, 37976, 37977, 37984, 37985, - 37986, 37989, 38020, 38022, 38034, 38036, 38037, 38040, 38049, 38057, 38144, 38149, 38152, 38154, 38160, 38161, - 38164, 38165, 38166, 38169, 38177, 38181, 38185, 38186, 38209, 38212, 38213, 38214, 38217, 38224, 38225, 38226, - 38228, 38229, 38230, 38232, 38233, 38234, 38241, 38244, 38245, 38246, 38249, 38273, 38277, 38280, 38289, 38290, - 38292, 38293, 38294, 38297, 38298, 38304, 38306, 38309, 38312, 38314, 38401, 38404, 38416, 38421, 38425, 38432, - 38438, 38441, 38469, 38472, 38473, 38481, 38482, 38485, 38486, 38489, 38501, 38504, 38530, 38532, 38537, 38538, - 38546, 38548, 38549, 38564, 38566, 38569, 38917, 38934, 38937, 38949, 38977, 38982, 38992, 38994, 38997, 38998, - 39002, 39012, 39013, 39045, 39057, 39062, 39065, 39077, 39172, 39174, 39177, 39184, 39186, 39189, 39192, 39194, - 39200, 39201, 39204, 39206, 39232, 39234, 39237, 39240, 39242, 39249, 39252, 39253, 39254, 39257, 39266, 39269, - 39270, 39274, 39297, 39300, 39312, 39314, 39317, 39322, 39329, 39334, 39429, 39445, 39461, 39492, 39494, 39497, - 39504, 39509, 39512, 39521, 39557, 39569, 39572, 39573, 39574, 40960, 40962, 40968, 40970, 40981, 40992, 40994, - 41000, 41002, 41029, 41041, 41044, 41046, 41049, 41088, 41090, 41096, 41098, 41109, 41120, 41122, 41128, 41130, - 41221, 41225, 41233, 41236, 41238, 41241, 41242, 41286, 41289, 41297, 41301, 41304, 41306, 41313, 41316, 41349, - 41360, 41362, 41366, 41369, 41474, 41480, 41482, 41488, 41497, 41506, 41512, 41514, 41541, 41553, 41558, 41561, - 41573, 41600, 41602, 41608, 41610, 41621, 41632, 41634, 41640, 41642, 42009, 42021, 42049, 42052, 42064, 42068, - 42069, 42072, 42074, 42081, 42085, 42086, 42088, 42089, 42117, 42246, 42249, 42256, 42258, 42261, 42264, 42278, - 42281, 42306, 42309, 42321, 42324, 42325, 42326, 42329, 42341, 42346, 42369, 42372, 42373, 42374, 42377, 42386, - 42389, 42392, 42501, 42513, 42518, 42522, 42529, 42533, 42564, 42566, 42570, 42578, 42581, 42582, 42584, 42592, - 42594, 42630, 42640, 42645, 42646, 42649, 42657, 42660, 42662, 43008, 43010, 43016, 43018, 43040, 43042, 43048, - 43050, 43089, 43092, 43094, 43097, 43136, 43138, 43144, 43146, 43157, 43168, 43170, 43176, 43178, 43269, 43284, - 43289, 43297, 43301, 43329, 43344, 43349, 43354, 43361, 43366, 43369, 43408, 43414, 43520, 43522, 43528, 43530, - 43552, 43554, 43560, 43562, 43601, 43604, 43606, 43648, 43650, 43656, 43658, 43669, 43680, 43682, 43688, 43690, - }; - static const uint16_t kgrid_2bit_1024[1024] = { - 0, 2, 5, 8, 10, 17, 20, 22, 25, 32, 34, 37, 40, 65, 68, 70, - 73, 80, 82, 85, 88, 97, 100, 102, 105, 128, 130, 133, 136, 145, 148, 160, - 165, 170, 257, 260, 262, 265, 272, 274, 277, 280, 289, 292, 320, 322, 325, 328, - 337, 340, 342, 345, 352, 357, 360, 385, 388, 400, 402, 405, 417, 420, 512, 514, - 517, 520, 529, 532, 544, 554, 577, 580, 582, 585, 592, 597, 640, 645, 650, 660, - 674, 1025, 1028, 1030, 1033, 1040, 1042, 1045, 1048, 1057, 1060, 1062, 1065, 1088, 1090, 1093, - 1096, 1098, 1105, 1108, 1110, 1113, 1120, 1122, 1125, 1153, 1156, 1158, 1161, 1168, 1173, 1176, - 1185, 1188, 1280, 1282, 1285, 1288, 1290, 1297, 1300, 1302, 1305, 1312, 1317, 1320, 1345, 1348, - 1350, 1353, 1360, 1362, 1365, 1368, 1377, 1380, 1408, 1410, 1413, 1416, 1425, 1428, 1440, 1537, - 1540, 1542, 1545, 1552, 1557, 1600, 1605, 1608, 1617, 1620, 1632, 1665, 1668, 1680, 2048, 2050, - 2053, 2056, 2065, 2068, 2070, 2073, 2080, 2085, 2090, 2113, 2116, 2118, 2121, 2128, 2130, 2133, - 2136, 2145, 2148, 2176, 2181, 2196, 2218, 2305, 2308, 2320, 2322, 2325, 2328, 2337, 2368, 2373, - 2376, 2385, 2388, 2400, 2433, 2448, 2560, 2577, 2580, 2594, 2600, 2602, 2640, 2713, 4097, 4100, - 4102, 4105, 4112, 4114, 4117, 4120, 4129, 4132, 4134, 4160, 4162, 4165, 4168, 4177, 4180, 4182, - 4185, 4192, 4194, 4197, 4200, 4225, 4228, 4230, 4240, 4245, 4248, 4257, 4260, 4352, 4354, 4357, - 4360, 4362, 4369, 4372, 4374, 4377, 4384, 4386, 4389, 4392, 4417, 4420, 4422, 4425, 4432, 4434, - 4437, 4440, 4449, 4452, 4480, 4482, 4485, 4488, 4497, 4500, 4609, 4612, 4617, 4624, 4629, 4641, - 4644, 4672, 4677, 4689, 4692, 4737, 4740, 4752, 5120, 5122, 5125, 5128, 5137, 5140, 5142, 5145, - 5152, 5157, 5160, 5185, 5188, 5190, 5193, 5200, 5202, 5205, 5208, 5217, 5220, 5248, 5250, 5253, - 5256, 5265, 5268, 5280, 5377, 5380, 5382, 5385, 5392, 5394, 5397, 5400, 5409, 5412, 5440, 5442, - 5445, 5448, 5457, 5460, 5472, 5505, 5508, 5520, 5632, 5637, 5640, 5649, 5652, 5664, 5697, 5700, - 5712, 5760, 5802, 6145, 6148, 6150, 6153, 6160, 6165, 6168, 6177, 6208, 6210, 6213, 6216, 6225, - 6228, 6240, 6273, 6276, 6400, 6402, 6405, 6408, 6417, 6420, 6432, 6465, 6468, 6480, 6505, 6562, - 6660, 6672, 6720, 6742, 8192, 8194, 8197, 8200, 8209, 8212, 8214, 8217, 8224, 8229, 8234, 8257, - 8260, 8272, 8274, 8277, 8292, 8320, 8330, 8340, 8362, 8449, 8452, 8464, 8466, 8469, 8481, 8512, - 8514, 8517, 8529, 8532, 8544, 8577, 8580, 8592, 8704, 8714, 8738, 8744, 8746, 8772, 8784, 8840, - 8842, 8872, 9217, 9220, 9222, 9225, 9232, 9237, 9240, 9249, 9252, 9280, 9282, 9285, 9288, 9297, - 9300, 9312, 9345, 9348, 9360, 9472, 9477, 9480, 9489, 9492, 9504, 9537, 9540, 9552, 9574, 9600, - 9729, 9732, 9744, 9792, 9817, 10240, 10245, 10257, 10260, 10305, 10308, 10320, 10378, 10410, 10497, 10500, - 10512, 10645, 10762, 10786, 10852, 10888, 10890, 16385, 16388, 16390, 16393, 16400, 16402, 16405, 16408, 16410, - 16417, 16420, 16422, 16448, 16450, 16453, 16456, 16458, 16465, 16468, 16470, 16473, 16480, 16482, 16485, 16513, - 16516, 16528, 16533, 16536, 16545, 16548, 16640, 16642, 16645, 16648, 16657, 16660, 16662, 16665, 16672, 16674, - 16677, 16705, 16708, 16710, 16713, 16720, 16722, 16725, 16728, 16737, 16740, 16768, 16770, 16773, 16776, 16785, - 16788, 16800, 16897, 16900, 16912, 16914, 16917, 16920, 16932, 16960, 16965, 16968, 16977, 16980, 16992, 17025, - 17028, 17408, 17410, 17413, 17416, 17418, 17425, 17428, 17430, 17433, 17440, 17442, 17445, 17448, 17473, 17476, - 17478, 17481, 17488, 17490, 17493, 17496, 17505, 17508, 17536, 17538, 17541, 17544, 17553, 17556, 17568, 17665, - 17668, 17670, 17673, 17680, 17682, 17685, 17688, 17697, 17700, 17728, 17730, 17733, 17736, 17745, 17748, 17760, - 17770, 17793, 17796, 17808, 17920, 17922, 17925, 17928, 17937, 17940, 17952, 17985, 17988, 18000, 18048, 18085, - 18433, 18436, 18441, 18448, 18450, 18453, 18456, 18465, 18468, 18496, 18498, 18501, 18504, 18513, 18516, 18528, - 18564, 18576, 18688, 18690, 18693, 18696, 18705, 18708, 18720, 18753, 18756, 18768, 18816, 18838, 18945, 18948, - 18960, 19008, 20480, 20482, 20485, 20488, 20497, 20500, 20502, 20505, 20512, 20514, 20517, 20520, 20545, 20548, - 20550, 20553, 20560, 20562, 20565, 20568, 20577, 20580, 20608, 20610, 20613, 20616, 20625, 20628, 20737, 20740, - 20742, 20745, 20752, 20754, 20757, 20760, 20769, 20772, 20800, 20802, 20805, 20808, 20817, 20820, 20832, 20865, - 20868, 20880, 20992, 20997, 21000, 21009, 21012, 21024, 21057, 21060, 21072, 21097, 21120, 21505, 21508, 21510, - 21513, 21520, 21522, 21525, 21528, 21537, 21540, 21568, 21570, 21573, 21576, 21585, 21588, 21600, 21633, 21636, - 21648, 21760, 21762, 21765, 21768, 21777, 21780, 21792, 21825, 21828, 21840, 21888, 22017, 22020, 22032, 22054, - 22080, 22528, 22530, 22533, 22536, 22545, 22548, 22560, 22593, 22596, 22608, 22618, 22656, 22785, 22788, 22800, - 22848, 23040, 23065, 23173, 23208, 24577, 24580, 24582, 24592, 24594, 24597, 24600, 24609, 24612, 24640, 24645, - 24648, 24657, 24660, 24672, 24708, 24720, 24832, 24834, 24837, 24840, 24849, 24852, 24864, 24897, 24900, 24912, - 24960, 24985, 25092, 25104, 25152, 25174, 25249, 25600, 25605, 25608, 25617, 25620, 25632, 25665, 25668, 25680, - 25728, 25857, 25860, 25872, 25920, 25930, 25960, 26002, 26112, 26260, 26625, 26628, 26640, 26725, 26776, 26880, - 26922, 27202, 27297, 32768, 32770, 32773, 32776, 32785, 32788, 32793, 32800, 32805, 32833, 32836, 32848, 32850, - 32853, 32856, 32865, 32896, 32901, 32913, 32916, 33025, 33028, 33033, 33040, 33042, 33045, 33048, 33057, 33060, - 33088, 33090, 33093, 33096, 33105, 33108, 33153, 33156, 33168, 33193, 33280, 33285, 33290, 33297, 33300, 33345, - 33348, 33360, 33793, 33796, 33798, 33801, 33808, 33810, 33813, 33816, 33825, 33856, 33858, 33861, 33864, 33873, - 33876, 33888, 33921, 33924, 33936, 34048, 34050, 34053, 34056, 34065, 34068, 34080, 34113, 34116, 34128, 34176, - 34186, 34305, 34308, 34320, 34345, 34368, 34816, 34821, 34833, 34836, 34881, 34884, 34896, 34978, 35073, 35076, - 35136, 35173, 35362, 35416, 35418, 35458, 35490, 36865, 36868, 36873, 36880, 36882, 36885, 36888, 36900, 36928, - 36930, 36933, 36936, 36945, 36948, 36960, 36993, 36996, 37008, 37120, 37125, 37137, 37140, 37185, 37188, 37200, - 37210, 37377, 37380, 37392, 37440, 37542, 37888, 37890, 37893, 37896, 37905, 37908, 37920, 37953, 37956, 37968, - 38016, 38038, 38145, 38148, 38160, 38208, 38296, 38305, 38400, 38470, 38500, 38913, 38916, 38928, 38950, 38976, - 39081, 39168, 39241, 39250, 39568, 40960, 40965, 40970, 40980, 40994, 41002, 41025, 41028, 41040, 41122, 41130, - 41280, 41317, 41474, 41482, 41506, 41512, 41514, 41602, 41608, 41610, 41640, 41985, 41988, 42000, 42048, 42121, - 42148, 42240, 42265, 42577, 43018, 43048, 43170, 43348, 43398, 43528, 43530, 43552, 43554, 43560, 43656, 43690, - }; - - const int kmap_size = 43692; - //const int nwant = type == GGML_TYPE_IQ1_S ? 3 : 2; - const int nwant = type == GGML_TYPE_IQ1_S || type == GGML_TYPE_IQ1_M ? 3 : type == GGML_TYPE_IQ2_S ? 1 : 2; - const uint16_t * kgrid = type == GGML_TYPE_IQ2_XXS ? kgrid_2bit_256 : - type == GGML_TYPE_IQ2_XS ? kgrid_2bit_512 : - type == GGML_TYPE_IQ1_S || type == GGML_TYPE_IQ1_M ? kgrid_1bit_2048 : kgrid_2bit_1024; - uint64_t * kgrid_q2xs; - int * kmap_q2xs; - uint16_t * kneighbors_q2xs; - - //printf("================================================================= %s(grid_size = %d)\n", __func__, grid_size); - uint64_t * the_grid = (uint64_t *)malloc(grid_size*sizeof(uint64_t)); - for (int k = 0; k < grid_size; ++k) { - int8_t * pos = (int8_t *)(the_grid + k); - for (int i = 0; i < 8; ++i) { - int l = (kgrid[k] >> 2*i) & 0x3; - pos[i] = 2*l + 1; - } - } - kgrid_q2xs = the_grid; - iq2_data[gindex].grid = the_grid; - kmap_q2xs = (int *)malloc(kmap_size*sizeof(int)); - iq2_data[gindex].map = kmap_q2xs; - for (int i = 0; i < kmap_size; ++i) kmap_q2xs[i] = -1; - uint64_t aux64; - uint8_t * aux8 = (uint8_t *)&aux64; - for (int i = 0; i < grid_size; ++i) { - aux64 = kgrid_q2xs[i]; - uint16_t index = 0; - for (int k=0; k<8; ++k) { - uint16_t q = (aux8[k] - 1)/2; - index |= (q << 2*k); - } - kmap_q2xs[index] = i; - } - int8_t pos[8]; - int * dist2 = (int *)malloc(2*grid_size*sizeof(int)); - int num_neighbors = 0, num_not_in_map = 0; - for (int i = 0; i < kmap_size; ++i) { - if (kmap_q2xs[i] >= 0) continue; - ++num_not_in_map; - for (int k = 0; k < 8; ++k) { - int l = (i >> 2*k) & 0x3; - pos[k] = 2*l + 1; - } - for (int j = 0; j < grid_size; ++j) { - const int8_t * pg = (const int8_t *)(kgrid_q2xs + j); - int d2 = 0; - for (int k = 0; k < 8; ++k) d2 += (pg[k] - pos[k])*(pg[k] - pos[k]); - dist2[2*j+0] = d2; - dist2[2*j+1] = j; - } - qsort(dist2, grid_size, 2*sizeof(int), iq2_compare_func); - int n = 0; int d2 = dist2[0]; - int nhave = 1; - for (int j = 0; j < grid_size; ++j) { - if (dist2[2*j] > d2) { - if (nhave == nwant) break; - d2 = dist2[2*j]; - ++nhave; - } - ++n; - } - num_neighbors += n; - } - //printf("%s: %d neighbours in total\n", __func__, num_neighbors); - kneighbors_q2xs = (uint16_t *)malloc((num_neighbors + num_not_in_map)*sizeof(uint16_t)); - iq2_data[gindex].neighbours = kneighbors_q2xs; - int counter = 0; - for (int i = 0; i < kmap_size; ++i) { - if (kmap_q2xs[i] >= 0) continue; - for (int k = 0; k < 8; ++k) { - int l = (i >> 2*k) & 0x3; - pos[k] = 2*l + 1; - } - for (int j = 0; j < grid_size; ++j) { - const int8_t * pg = (const int8_t *)(kgrid_q2xs + j); - int d2 = 0; - for (int k = 0; k < 8; ++k) d2 += (pg[k] - pos[k])*(pg[k] - pos[k]); - dist2[2*j+0] = d2; - dist2[2*j+1] = j; - } - qsort(dist2, grid_size, 2*sizeof(int), iq2_compare_func); - kmap_q2xs[i] = -(counter + 1); - int d2 = dist2[0]; - uint16_t * start = &kneighbors_q2xs[counter++]; - int n = 0, nhave = 1; - for (int j = 0; j < grid_size; ++j) { - if (dist2[2*j] > d2) { - if (nhave == nwant) break; - d2 = dist2[2*j]; - ++nhave; - } - kneighbors_q2xs[counter++] = dist2[2*j+1]; - ++n; - } - *start = n; - } - free(dist2); -} - -void iq2xs_free_impl(enum ggml_type type) { - GGML_ASSERT(type == GGML_TYPE_IQ2_XXS || type == GGML_TYPE_IQ2_XS || type == GGML_TYPE_IQ1_S || type == GGML_TYPE_IQ1_M || type == GGML_TYPE_IQ2_S); - const int gindex = iq2_data_index(type); - if (iq2_data[gindex].grid) { - free(iq2_data[gindex].grid); iq2_data[gindex].grid = NULL; - free(iq2_data[gindex].map); iq2_data[gindex].map = NULL; - free(iq2_data[gindex].neighbours); iq2_data[gindex].neighbours = NULL; - } -} - -static int iq2_find_best_neighbour(const uint16_t * restrict neighbours, const uint64_t * restrict grid, - const float * restrict xval, const float * restrict weight, float scale, int8_t * restrict L) { - int num_neighbors = neighbours[0]; - GGML_ASSERT(num_neighbors > 0); - float best_d2 = FLT_MAX; - int grid_index = -1; - for (int j = 1; j <= num_neighbors; ++j) { - const int8_t * pg = (const int8_t *)(grid + neighbours[j]); - float d2 = 0; - for (int i = 0; i < 8; ++i) { - float q = pg[i]; - float diff = scale*q - xval[i]; - d2 += weight[i]*diff*diff; - } - if (d2 < best_d2) { - best_d2 = d2; grid_index = neighbours[j]; - } - } - GGML_ASSERT(grid_index >= 0); - const int8_t * pg = (const int8_t *)(grid + grid_index); - for (int i = 0; i < 8; ++i) L[i] = (pg[i] - 1)/2; - return grid_index; -} - -static void quantize_row_iq2_xxs_impl(const float * restrict x, void * restrict vy, int64_t n, const float * restrict quant_weights) { - - const int gindex = iq2_data_index(GGML_TYPE_IQ2_XXS); - - const uint64_t * kgrid_q2xs = iq2_data[gindex].grid; - const int * kmap_q2xs = iq2_data[gindex].map; - const uint16_t * kneighbors_q2xs = iq2_data[gindex].neighbours; - - GGML_ASSERT(quant_weights && "missing quantization weights"); - GGML_ASSERT(kgrid_q2xs && "forgot to call ggml_quantize_init()?"); - GGML_ASSERT(kmap_q2xs && "forgot to call ggml_quantize_init()?"); - GGML_ASSERT(kneighbors_q2xs && "forgot to call ggml_quantize_init()?"); - GGML_ASSERT(n%QK_K == 0); - - const int kMaxQ = 3; - - const int64_t nbl = n/QK_K; - - block_iq2_xxs * y = vy; - - float scales[QK_K/32]; - float weight[32]; - float xval[32]; - int8_t L[32]; - int8_t Laux[32]; - float waux[32]; - uint8_t block_signs[4]; - uint32_t q2[2*(QK_K/32)]; - - for (int ibl = 0; ibl < nbl; ++ibl) { - - y[ibl].d = GGML_FP32_TO_FP16(0.f); - memset(q2, 0, QK_K/4); - - float max_scale = 0; - - const float * xbl = x + QK_K*ibl; - float sumx2 = 0; - for (int i = 0; i < QK_K; ++i) sumx2 += xbl[i]*xbl[i]; - float sigma2 = sumx2/QK_K; - - for (int ib = 0; ib < QK_K/32; ++ib) { - const float * xb = xbl + 32*ib; - const float * qw = quant_weights + QK_K*ibl + 32*ib; - for (int i = 0; i < 32; ++i) weight[i] = qw[i] * sqrtf(sigma2 + xb[i]*xb[i]); - for (int i = 0; i < 32; ++i) waux[i] = sqrtf(weight[i]); - for (int k = 0; k < 4; ++k) { - int nflip = 0; - uint8_t s = 0; - for (int i = 0; i < 8; ++i) { - if (xb[8*k + i] >= 0) xval[8*k + i] = xb[8*k + i]; - else { - xval[8*k + i] = -xb[8*k + i]; ++nflip; s |= (1 << i); - } - } - if (nflip%2) { - int imin = 0; float min = weight[8*k+imin]*xb[8*k+imin]*xb[8*k+imin]; - for (int i = 1; i < 8; ++i) { - float ax = weight[8*k+i]*xb[8*k+i]*xb[8*k+i]; - if (ax < min) { - min = ax; imin = i; - } - } - xval[8*k+imin] = -xval[8*k+imin]; - s ^= (1 << imin); - } - block_signs[k] = s & 127; - } - float max = xval[0]; - for (int i = 1; i < 32; ++i) max = MAX(max, xval[i]); - if (!max) { - scales[ib] = 0; - memset(L, 0, 32); - continue; - } - float scale = make_qp_quants(32, kMaxQ+1, xval, (uint8_t*)L, weight); - float eff_max = scale*kMaxQ; - float best = 0; - for (int is = -6; is <= 6; ++is) { - float id = (2*kMaxQ-1+is*0.1f)/eff_max; - float this_scale = 1/id; - for (int k = 0; k < 4; ++k) { - for (int i = 0; i < 8; ++i) { - int l = nearest_int(0.5f*(id*xval[8*k+i]-1)); - Laux[8*k+i] = MAX(0, MIN(kMaxQ-1, l)); - } - uint16_t u = 0; - for (int i = 0; i < 8; ++i) u |= (Laux[8*k+i] << 2*i); - int grid_index = kmap_q2xs[u]; - if (grid_index < 0) { - const uint16_t * neighbours = kneighbors_q2xs - kmap_q2xs[u] - 1; - grid_index = iq2_find_best_neighbour(neighbours, kgrid_q2xs, xval + 8*k, waux + 8*k, this_scale, Laux + 8*k); - } - } - float sumqx = 0, sumq2 = 0; - for (int i = 0; i < 32; ++i) { - float w = weight[i]; - float q = 2*Laux[i] + 1; - sumqx += w*xval[i]*q; - sumq2 += w*q*q; - } - if (sumq2 > 0 && sumqx*sumqx > best*sumq2) { - scale = sumqx/sumq2; best = scale*sumqx; - memcpy(L, Laux, 32); - } - } - if (scale > 0) { - float id = 1/scale; - for (int k = 0; k < 4; ++k) { - uint16_t u = 0; - for (int i = 0; i < 8; ++i) { - int l = nearest_int(0.5f*(id*xval[8*k+i]-1)); - l = MAX(0, MIN(kMaxQ-1, l)); - u |= (l << 2*i); - } - int grid_index = kmap_q2xs[u]; - if (grid_index < 0) { - const uint16_t * neighbours = kneighbors_q2xs - kmap_q2xs[u] - 1; - grid_index = iq2_find_best_neighbour(neighbours, kgrid_q2xs, xval + 8*k, waux + 8*k, scale, L + 8*k); - } - const int8_t * pg = (const int8_t *)(kgrid_q2xs + grid_index); - for (int i = 0; i < 8; ++i) L[8*k+i] = (pg[i] - 1)/2; - } - float sumqx = 0, sumq2 = 0; - for (int i = 0; i < 32; ++i) { - float w = weight[i]; - float q = 2*L[i] + 1; - sumqx += w*xval[i]*q; - sumq2 += w*q*q; - } - if (sumq2 > 0) scale = sumqx/sumq2; - } - if (scale < 0) { - // This should never happen, but just in case, flip scale so that it is positive (we use uint's to encode the scale) - // and correspondingly flip quant signs. - scale = -scale; - for (int k = 0; k < 4; ++k) block_signs[k] = (~block_signs[k]) & 127; - } - for (int k = 0; k < 4; ++k) { - uint16_t u = 0; - for (int i = 0; i < 8; ++i) u |= (L[8*k+i] << 2*i); - int grid_index = kmap_q2xs[u]; - if (grid_index < 0) { - printf("Oops: found point %u not on grid:", u); - for (int i = 0; i < 8; ++i) printf(" %d", L[8*k+i]); - printf("\n"); - GGML_ASSERT(false); - } - q2[2*ib+0] |= (grid_index << 8*k); - q2[2*ib+1] |= (block_signs[k] << 7*k); - } - GGML_ASSERT(scale >= 0); - scales[ib] = scale; - max_scale = MAX(max_scale, scale); - } - - if (!max_scale) { - memset(y[ibl].qs, 0, QK_K/4); - continue; - } - - float d = max_scale/31; - y[ibl].d = GGML_FP32_TO_FP16(d); - float id = 1/d; - for (int ib = 0; ib < QK_K/32; ++ib) { - int l = nearest_int(0.5f*(id*scales[ib]-1)); - l = MAX(0, MIN(15, l)); - q2[2*ib+1] |= ((uint32_t)l << 28); - } - memcpy(y[ibl].qs, q2, QK_K/4); - } -} - -static void quantize_row_iq2_xs_impl(const float * restrict x, void * restrict vy, int64_t n, const float * restrict quant_weights) { - - const int gindex = iq2_data_index(GGML_TYPE_IQ2_XS); - - const uint64_t * kgrid_q2xs = iq2_data[gindex].grid; - const int * kmap_q2xs = iq2_data[gindex].map; - const uint16_t * kneighbors_q2xs = iq2_data[gindex].neighbours; - - GGML_ASSERT(quant_weights && "missing quantization weights"); - GGML_ASSERT(kmap_q2xs && "forgot to call ggml_quantize_init()?"); - GGML_ASSERT(kgrid_q2xs && "forgot to call ggml_quantize_init()?"); - GGML_ASSERT(kneighbors_q2xs && "forgot to call ggml_quantize_init()?"); - GGML_ASSERT(n%QK_K == 0); - - const int kMaxQ = 3; - - const int64_t nbl = n/QK_K; - - block_iq2_xs * y = vy; - - float scales[QK_K/16]; - float weight[16]; - float xval[16]; - int8_t L[16]; - int8_t Laux[16]; - float waux[16]; - bool is_on_grid[2]; - bool is_on_grid_aux[2]; - uint8_t block_signs[2]; - uint16_t q2[2*(QK_K/16)]; - - for (int ibl = 0; ibl < nbl; ++ibl) { - - y[ibl].d = GGML_FP32_TO_FP16(0.f); - memset(q2, 0, QK_K/4); - memset(y[ibl].scales, 0, QK_K/32); - - float max_scale = 0; - - const float * xbl = x + QK_K*ibl; - float sumx2 = 0; - for (int i = 0; i < QK_K; ++i) sumx2 += xbl[i]*xbl[i]; - float sigma2 = sumx2/QK_K; - - for (int ib = 0; ib < QK_K/16; ++ib) { - const float * xb = xbl + 16*ib; - const float * qw = quant_weights + QK_K*ibl + 16*ib; - for (int i = 0; i < 16; ++i) weight[i] = qw[i] * sqrtf(sigma2 + xb[i]*xb[i]); - for (int i = 0; i < 16; ++i) waux[i] = sqrtf(weight[i]); - for (int k = 0; k < 2; ++k) { - int nflip = 0; - uint8_t s = 0; - for (int i = 0; i < 8; ++i) { - if (xb[8*k + i] >= 0) xval[8*k + i] = xb[8*k + i]; - else { - xval[8*k + i] = -xb[8*k + i]; ++nflip; s |= (1 << i); - } - } - if (nflip%2) { - int imin = 0; float min = weight[8*k+imin]*xb[8*k+imin]*xb[8*k+imin]; - for (int i = 1; i < 8; ++i) { - float ax = weight[8*k+i]*xb[8*k+i]*xb[8*k+i]; - if (ax < min) { - min = ax; imin = i; - } - } - xval[8*k+imin] = -xval[8*k+imin]; - s ^= (1 << imin); - } - block_signs[k] = s & 127; - } - float max = xval[0]; - for (int i = 1; i < 16; ++i) max = MAX(max, xval[i]); - if (!max) { - scales[ib] = 0; - memset(L, 0, 16); - continue; - } - float best = 0; - float scale = max/(2*kMaxQ-1); - is_on_grid[0] = is_on_grid[1] = true; - for (int is = -9; is <= 9; ++is) { - float id = (2*kMaxQ-1+is*0.1f)/max; - float this_scale = 1/id; - for (int k = 0; k < 2; ++k) { - for (int i = 0; i < 8; ++i) { - int l = nearest_int(0.5f*(id*xval[8*k+i]-1)); - Laux[8*k+i] = MAX(0, MIN(kMaxQ-1, l)); - } - uint16_t u = 0; - for (int i = 0; i < 8; ++i) u |= (Laux[8*k+i] << 2*i); - int grid_index = kmap_q2xs[u]; - is_on_grid_aux[k] = true; - if (grid_index < 0) { - is_on_grid_aux[k] = false; - const uint16_t * neighbours = kneighbors_q2xs - kmap_q2xs[u] - 1; - grid_index = iq2_find_best_neighbour(neighbours, kgrid_q2xs, xval + 8*k, waux + 8*k, this_scale, Laux + 8*k); - } - } - float sumqx = 0, sumq2 = 0; - for (int i = 0; i < 16; ++i) { - float w = weight[i]; - float q = 2*Laux[i] + 1; - sumqx += w*xval[i]*q; - sumq2 += w*q*q; - } - if (sumq2 > 0 && sumqx*sumqx > best*sumq2) { - scale = sumqx/sumq2; best = scale*sumqx; - for (int i = 0; i < 16; ++i) L[i] = Laux[i]; - for (int k = 0; k < 2; ++k) is_on_grid[k] = is_on_grid_aux[k]; - } - } - int n_not_ongrid = 0; - for (int k = 0; k < 2; ++k) if (!is_on_grid[k]) ++n_not_ongrid; - if (n_not_ongrid > 0 && scale > 0) { - float id = 1/scale; - for (int k = 0; k < 2; ++k) { - if (is_on_grid[k]) continue; - uint16_t u = 0; - for (int i = 0; i < 8; ++i) { - int l = nearest_int(0.5f*(id*xval[8*k+i]-1)); - l = MAX(0, MIN(kMaxQ-1, l)); - u |= (l << 2*i); - L[8*k + i] = l; - } - int grid_index = kmap_q2xs[u]; - if (grid_index < 0) { - const uint16_t * neighbours = kneighbors_q2xs - kmap_q2xs[u] - 1; - grid_index = iq2_find_best_neighbour(neighbours, kgrid_q2xs, xval + 8*k, waux + 8*k, scale, L + 8*k); - } - } - float sumqx = 0, sumq2 = 0; - for (int i = 0; i < 16; ++i) { - float w = weight[i]; - float q = 2*L[i] + 1; - sumqx += w*xval[i]*q; - sumq2 += w*q*q; - } - if (sumq2 > 0) scale = sumqx/sumq2; - } - if (scale < 0) { - scale = -scale; - for (int k = 0; k < 2; ++k) block_signs[k] = (~block_signs[k]) & 127; - } - for (int k = 0; k < 2; ++k) { - uint16_t u = 0; - for (int i = 0; i < 8; ++i) u |= (L[8*k+i] << 2*i); - int grid_index = kmap_q2xs[u]; - if (grid_index < 0) { - printf("Oops: found point %u not on grid:", u); - for (int i = 0; i < 8; ++i) printf(" %d", L[8*k+i]); - printf("\n"); - GGML_ASSERT(false); - } - q2[2*ib+k] = grid_index | (block_signs[k] << 9); - } - GGML_ASSERT(scale >= 0); - scales[ib] = scale; - max_scale = MAX(max_scale, scale); - } - - if (!max_scale) { - memset(y[ibl].qs, 0, QK_K/4); - continue; - } - - float d = max_scale/31; - y[ibl].d = GGML_FP32_TO_FP16(d); - float id = 1/d; - for (int ib = 0; ib < QK_K/16; ++ib) { - int l = nearest_int(0.5f*(id*scales[ib]-1)); - l = MAX(0, MIN(15, l)); - if (ib%2 == 0) y[ibl].scales[ib/2] = l; - else y[ibl].scales[ib/2] |= (l << 4); - } - memcpy(y[ibl].qs, q2, QK_K/4); - - } -} - -size_t quantize_iq2_xxs(const float * restrict src, void * restrict dst, int64_t nrow, int64_t n_per_row, const float * quant_weights) { - GGML_ASSERT(n_per_row%QK_K == 0); - int64_t nblock = n_per_row/QK_K; - char * qrow = (char *)dst; - for (int64_t row = 0; row < nrow; ++row) { - quantize_row_iq2_xxs_impl(src, qrow, n_per_row, quant_weights); - src += n_per_row; - qrow += nblock*sizeof(block_iq2_xxs); - } - return nrow * nblock * sizeof(block_iq2_xxs); -} - -size_t quantize_iq2_xs(const float * restrict src, void * restrict dst, int64_t nrow, int64_t n_per_row, const float * quant_weights) { - GGML_ASSERT(n_per_row%QK_K == 0); - int64_t nblock = n_per_row/QK_K; - char * qrow = (char *)dst; - for (int64_t row = 0; row < nrow; ++row) { - quantize_row_iq2_xs_impl(src, qrow, n_per_row, quant_weights); - src += n_per_row; - qrow += nblock*sizeof(block_iq2_xs); - } - return nrow * nblock * sizeof(block_iq2_xs); -} - -// -// ============================================= 3-bit using D4 lattice -// - -typedef struct { - uint32_t * grid; - int * map; - uint16_t * neighbours; -} iq3_entry_t; - -static iq3_entry_t iq3_data[2] = { - {NULL, NULL, NULL}, - {NULL, NULL, NULL}, -}; - -static inline int iq3_data_index(int grid_size) { - (void)grid_size; - GGML_ASSERT(grid_size == 256 || grid_size == 512); - return grid_size == 256 ? 0 : 1; -} - -static int iq3_compare_func(const void * left, const void * right) { - const int * l = (const int *)left; - const int * r = (const int *)right; - return l[0] < r[0] ? -1 : l[0] > r[0] ? 1 : l[1] < r[1] ? -1 : l[1] > r[1] ? 1 : 0; -} - -void iq3xs_init_impl(int grid_size) { - const int gindex = iq3_data_index(grid_size); - if (iq3_data[gindex].grid) { - return; - } - static const uint16_t kgrid_256[256] = { - 0, 2, 4, 9, 11, 15, 16, 18, 25, 34, 59, 61, 65, 67, 72, 74, - 81, 85, 88, 90, 97, 108, 120, 128, 130, 132, 137, 144, 146, 153, 155, 159, - 169, 175, 189, 193, 199, 200, 202, 213, 248, 267, 287, 292, 303, 315, 317, 321, - 327, 346, 362, 413, 436, 456, 460, 462, 483, 497, 513, 515, 520, 522, 529, 531, - 536, 538, 540, 551, 552, 576, 578, 585, 592, 594, 641, 643, 648, 650, 657, 664, - 698, 704, 706, 720, 729, 742, 758, 769, 773, 808, 848, 852, 870, 889, 901, 978, - 992, 1024, 1026, 1033, 1035, 1040, 1042, 1046, 1049, 1058, 1089, 1091, 1093, 1096, 1098, 1105, - 1112, 1139, 1143, 1144, 1152, 1154, 1161, 1167, 1168, 1170, 1183, 1184, 1197, 1217, 1224, 1228, - 1272, 1276, 1309, 1323, 1347, 1367, 1377, 1404, 1473, 1475, 1486, 1509, 1537, 1544, 1546, 1553, - 1555, 1576, 1589, 1594, 1600, 1602, 1616, 1625, 1636, 1638, 1665, 1667, 1672, 1685, 1706, 1722, - 1737, 1755, 1816, 1831, 1850, 1856, 1862, 1874, 1901, 1932, 1950, 1971, 2011, 2032, 2052, 2063, - 2077, 2079, 2091, 2095, 2172, 2192, 2207, 2208, 2224, 2230, 2247, 2277, 2308, 2345, 2356, 2389, - 2403, 2424, 2501, 2504, 2506, 2520, 2570, 2593, 2616, 2624, 2630, 2646, 2669, 2700, 2714, 2746, - 2754, 2795, 2824, 2835, 2839, 2874, 2882, 2905, 2984, 3028, 3042, 3092, 3108, 3110, 3124, 3153, - 3185, 3215, 3252, 3288, 3294, 3364, 3397, 3434, 3483, 3523, 3537, 3587, 3589, 3591, 3592, 3610, - 3626, 3670, 3680, 3722, 3749, 3754, 3776, 3789, 3803, 3824, 3857, 3873, 3904, 3906, 3924, 3992, - }; - static const uint16_t kgrid_512[512] = { - 0, 1, 2, 5, 7, 8, 9, 10, 12, 14, 16, 17, 21, 27, 32, 34, - 37, 39, 41, 43, 48, 50, 57, 60, 63, 64, 65, 66, 68, 72, 73, 77, - 80, 83, 87, 89, 93, 100, 113, 117, 122, 128, 129, 133, 135, 136, 139, 142, - 145, 149, 152, 156, 162, 165, 167, 169, 171, 184, 187, 195, 201, 205, 208, 210, - 217, 219, 222, 228, 232, 234, 247, 249, 253, 256, 267, 271, 273, 276, 282, 288, - 291, 297, 312, 322, 324, 336, 338, 342, 347, 353, 357, 359, 374, 379, 390, 393, - 395, 409, 426, 441, 448, 450, 452, 464, 466, 470, 475, 488, 492, 512, 513, 514, - 516, 520, 521, 523, 525, 527, 528, 530, 537, 540, 542, 556, 558, 561, 570, 576, - 577, 579, 582, 584, 588, 593, 600, 603, 609, 616, 618, 632, 638, 640, 650, 653, - 655, 656, 660, 666, 672, 675, 685, 688, 698, 705, 708, 711, 712, 715, 721, 727, - 728, 732, 737, 754, 760, 771, 773, 778, 780, 793, 795, 802, 806, 808, 812, 833, - 840, 843, 849, 856, 858, 873, 912, 916, 919, 932, 934, 961, 963, 968, 970, 977, - 989, 993, 1010, 1016, 1024, 1025, 1027, 1029, 1031, 1032, 1034, 1036, 1038, 1041, 1043, 1047, - 1048, 1050, 1057, 1059, 1061, 1064, 1066, 1079, 1080, 1083, 1085, 1088, 1090, 1096, 1099, 1103, - 1106, 1109, 1113, 1116, 1122, 1129, 1153, 1156, 1159, 1169, 1171, 1176, 1183, 1185, 1195, 1199, - 1209, 1212, 1216, 1218, 1221, 1225, 1234, 1236, 1241, 1243, 1250, 1256, 1270, 1281, 1287, 1296, - 1299, 1306, 1309, 1313, 1338, 1341, 1348, 1353, 1362, 1375, 1376, 1387, 1400, 1408, 1410, 1415, - 1425, 1453, 1457, 1477, 1481, 1494, 1496, 1507, 1512, 1538, 1545, 1547, 1549, 1551, 1554, 1561, - 1563, 1565, 1570, 1572, 1575, 1577, 1587, 1593, 1601, 1603, 1605, 1612, 1617, 1619, 1632, 1648, - 1658, 1662, 1664, 1674, 1680, 1690, 1692, 1704, 1729, 1736, 1740, 1745, 1747, 1751, 1752, 1761, - 1763, 1767, 1773, 1787, 1795, 1801, 1806, 1810, 1817, 1834, 1840, 1844, 1857, 1864, 1866, 1877, - 1882, 1892, 1902, 1915, 1934, 1953, 1985, 1987, 2000, 2002, 2013, 2048, 2052, 2058, 2064, 2068, - 2071, 2074, 2081, 2088, 2104, 2114, 2119, 2121, 2123, 2130, 2136, 2141, 2147, 2153, 2157, 2177, - 2179, 2184, 2189, 2193, 2203, 2208, 2223, 2226, 2232, 2244, 2249, 2251, 2256, 2258, 2265, 2269, - 2304, 2306, 2324, 2335, 2336, 2361, 2373, 2375, 2385, 2418, 2443, 2460, 2480, 2504, 2509, 2520, - 2531, 2537, 2562, 2568, 2572, 2578, 2592, 2596, 2599, 2602, 2614, 2620, 2625, 2627, 2629, 2634, - 2641, 2650, 2682, 2688, 2697, 2707, 2712, 2718, 2731, 2754, 2759, 2760, 2775, 2788, 2793, 2805, - 2811, 2817, 2820, 2832, 2842, 2854, 2890, 2902, 2921, 2923, 2978, 3010, 3012, 3026, 3081, 3083, - 3085, 3097, 3099, 3120, 3136, 3152, 3159, 3188, 3210, 3228, 3234, 3245, 3250, 3256, 3264, 3276, - 3281, 3296, 3349, 3363, 3378, 3392, 3395, 3420, 3440, 3461, 3488, 3529, 3531, 3584, 3588, 3591, - 3600, 3602, 3614, 3616, 3628, 3634, 3650, 3657, 3668, 3683, 3685, 3713, 3716, 3720, 3726, 3729, - 3736, 3753, 3778, 3802, 3805, 3819, 3841, 3845, 3851, 3856, 3880, 3922, 3938, 3970, 3993, 4032, - }; - - const int kmap_size = 4096; - const int nwant = grid_size == 256 ? 2 : 3; - const uint16_t * kgrid = grid_size == 256 ? kgrid_256 : kgrid_512; - uint32_t * kgrid_q3xs; - int * kmap_q3xs; - uint16_t * kneighbors_q3xs; - - //printf("================================================================= %s(grid_size = %d)\n", __func__, grid_size); - uint32_t * the_grid = (uint32_t *)malloc(grid_size*sizeof(uint32_t)); - for (int k = 0; k < grid_size; ++k) { - int8_t * pos = (int8_t *)(the_grid + k); - for (int i = 0; i < 4; ++i) { - int l = (kgrid[k] >> 3*i) & 0x7; - pos[i] = 2*l + 1; - } - } - kgrid_q3xs = the_grid; - iq3_data[gindex].grid = the_grid; - kmap_q3xs = (int *)malloc(kmap_size*sizeof(int)); - iq3_data[gindex].map = kmap_q3xs; - for (int i = 0; i < kmap_size; ++i) kmap_q3xs[i] = -1; - uint32_t aux32; - uint8_t * aux8 = (uint8_t *)&aux32; - for (int i = 0; i < grid_size; ++i) { - aux32 = kgrid_q3xs[i]; - uint16_t index = 0; - for (int k=0; k<4; ++k) { - uint16_t q = (aux8[k] - 1)/2; - index |= (q << 3*k); - } - kmap_q3xs[index] = i; - } - int8_t pos[4]; - int * dist2 = (int *)malloc(2*grid_size*sizeof(int)); - int num_neighbors = 0, num_not_in_map = 0; - for (int i = 0; i < kmap_size; ++i) { - if (kmap_q3xs[i] >= 0) continue; - ++num_not_in_map; - for (int k = 0; k < 4; ++k) { - int l = (i >> 3*k) & 0x7; - pos[k] = 2*l + 1; - } - for (int j = 0; j < grid_size; ++j) { - const int8_t * pg = (const int8_t *)(kgrid_q3xs + j); - int d2 = 0; - for (int k = 0; k < 4; ++k) d2 += (pg[k] - pos[k])*(pg[k] - pos[k]); - dist2[2*j+0] = d2; - dist2[2*j+1] = j; - } - qsort(dist2, grid_size, 2*sizeof(int), iq3_compare_func); - int n = 0; int d2 = dist2[0]; - int nhave = 1; - for (int j = 0; j < grid_size; ++j) { - if (dist2[2*j] > d2) { - if (nhave == nwant) break; - d2 = dist2[2*j]; - ++nhave; - } - ++n; - } - num_neighbors += n; - } - //printf("%s: %d neighbours in total\n", __func__, num_neighbors); - kneighbors_q3xs = (uint16_t *)malloc((num_neighbors + num_not_in_map)*sizeof(uint16_t)); - iq3_data[gindex].neighbours = kneighbors_q3xs; - int counter = 0; - for (int i = 0; i < kmap_size; ++i) { - if (kmap_q3xs[i] >= 0) continue; - for (int k = 0; k < 4; ++k) { - int l = (i >> 3*k) & 0x7; - pos[k] = 2*l + 1; - } - for (int j = 0; j < grid_size; ++j) { - const int8_t * pg = (const int8_t *)(kgrid_q3xs + j); - int d2 = 0; - for (int k = 0; k < 4; ++k) d2 += (pg[k] - pos[k])*(pg[k] - pos[k]); - dist2[2*j+0] = d2; - dist2[2*j+1] = j; - } - qsort(dist2, grid_size, 2*sizeof(int), iq3_compare_func); - kmap_q3xs[i] = -(counter + 1); - int d2 = dist2[0]; - uint16_t * start = &kneighbors_q3xs[counter++]; - int n = 0, nhave = 1; - for (int j = 0; j < grid_size; ++j) { - if (dist2[2*j] > d2) { - if (nhave == nwant) break; - d2 = dist2[2*j]; - ++nhave; - } - kneighbors_q3xs[counter++] = dist2[2*j+1]; - ++n; - } - *start = n; - } - free(dist2); -} - -void iq3xs_free_impl(int grid_size) { - GGML_ASSERT(grid_size == 256 || grid_size == 512); - const int gindex = iq3_data_index(grid_size); - if (iq3_data[gindex].grid) { - free(iq3_data[gindex].grid); iq3_data[gindex].grid = NULL; - free(iq3_data[gindex].map); iq3_data[gindex].map = NULL; - free(iq3_data[gindex].neighbours); iq3_data[gindex].neighbours = NULL; - } -} - -static int iq3_find_best_neighbour(const uint16_t * restrict neighbours, const uint32_t * restrict grid, - const float * restrict xval, const float * restrict weight, float scale, int8_t * restrict L) { - int num_neighbors = neighbours[0]; - GGML_ASSERT(num_neighbors > 0); - float best_d2 = FLT_MAX; - int grid_index = -1; - for (int j = 1; j <= num_neighbors; ++j) { - const int8_t * pg = (const int8_t *)(grid + neighbours[j]); - float d2 = 0; - for (int i = 0; i < 4; ++i) { - float q = pg[i]; - float diff = scale*q - xval[i]; - d2 += weight[i]*diff*diff; - } - if (d2 < best_d2) { - best_d2 = d2; grid_index = neighbours[j]; - } - } - GGML_ASSERT(grid_index >= 0); - const int8_t * pg = (const int8_t *)(grid + grid_index); - for (int i = 0; i < 4; ++i) L[i] = (pg[i] - 1)/2; - return grid_index; -} - -static void quantize_row_iq3_xxs_impl(int grid_size, const float * restrict x, void * restrict vy, int64_t n, - const float * restrict quant_weights) { - - const int gindex = iq3_data_index(grid_size); - - const uint32_t * kgrid_q3xs = iq3_data[gindex].grid; - const int * kmap_q3xs = iq3_data[gindex].map; - const uint16_t * kneighbors_q3xs = iq3_data[gindex].neighbours; - - //GGML_ASSERT(quant_weights && "missing quantization weights"); - GGML_ASSERT(kgrid_q3xs && "forgot to call ggml_quantize_init()?"); - GGML_ASSERT(kmap_q3xs && "forgot to call ggml_quantize_init()?"); - GGML_ASSERT(kneighbors_q3xs && "forgot to call ggml_quantize_init()?"); - GGML_ASSERT(n%QK_K == 0); - - const int kMaxQ = 8; - - const int64_t nbl = n/QK_K; - - ggml_fp16_t * dh; - uint8_t * qs; - int block_size; - if (grid_size == 256) { - block_iq3_xxs * y = vy; - dh = &y->d; - qs = y->qs; - block_size = sizeof(block_iq3_xxs); - } else { - block_iq3_s * y = vy; - dh = &y->d; - qs = y->qs; - block_size = sizeof(block_iq3_s); - } - int quant_size = block_size - sizeof(ggml_fp16_t); - - float scales[QK_K/32]; - float weight[32]; - float xval[32]; - int8_t L[32]; - int8_t Laux[32]; - float waux[32]; - bool is_on_grid[8]; - bool is_on_grid_aux[8]; - uint8_t block_signs[8]; - uint8_t q3[3*(QK_K/8)+QK_K/32]; - uint32_t * scales_and_signs = (uint32_t *)(q3 + QK_K/4); - uint8_t * qh = q3 + 3*(QK_K/8); - - for (int ibl = 0; ibl < nbl; ++ibl) { - - dh[0] = GGML_FP32_TO_FP16(0.f); - memset(q3, 0, 3*QK_K/8+QK_K/32); - - float max_scale = 0; - - const float * xbl = x + QK_K*ibl; - float sumx2 = 0; - for (int i = 0; i < QK_K; ++i) sumx2 += xbl[i]*xbl[i]; - float sigma2 = 2*sumx2/QK_K; - - for (int ib = 0; ib < QK_K/32; ++ib) { - const float * xb = xbl + 32*ib; - if (quant_weights) { - const float * qw = quant_weights + QK_K*ibl + 32*ib; - for (int i = 0; i < 32; ++i) weight[i] = qw[i] * sqrtf(sigma2 + xb[i]*xb[i]); - } else { - for (int i = 0; i < 32; ++i) weight[i] = xb[i]*xb[i]; - } - for (int i = 0; i < 32; ++i) waux[i] = sqrtf(weight[i]); - for (int k = 0; k < 4; ++k) { - int nflip = 0; - uint8_t s = 0; - for (int i = 0; i < 8; ++i) { - if (xb[8*k + i] >= 0) xval[8*k + i] = xb[8*k + i]; - else { - xval[8*k + i] = -xb[8*k + i]; ++nflip; s |= (1 << i); - } - } - if (nflip%2) { - int imin = 0; float min = weight[8*k+imin]*xb[8*k+imin]*xb[8*k+imin]; - for (int i = 1; i < 8; ++i) { - float ax = weight[8*k+i]*xb[8*k+i]*xb[8*k+i]; - if (ax < min) { - min = ax; imin = i; - } - } - xval[8*k+imin] = -xval[8*k+imin]; - s ^= (1 << imin); - } - block_signs[k] = s & 127; - } - float max = xval[0]; - for (int i = 1; i < 32; ++i) max = MAX(max, xval[i]); - if (!max) { - scales[ib] = 0; - memset(L, 0, 32); - continue; - } - float best = 0; - float scale = max/(2*kMaxQ-1); - for (int is = -15; is <= 15; ++is) { - float id = (2*kMaxQ-1+is*0.2f)/max; - float this_scale = 1/id; - for (int k = 0; k < 8; ++k) { - for (int i = 0; i < 4; ++i) { - int l = nearest_int(0.5f*(id*xval[4*k+i]-1)); - Laux[4*k+i] = MAX(0, MIN(kMaxQ-1, l)); - } - uint16_t u = 0; - for (int i = 0; i < 4; ++i) u |= (Laux[4*k+i] << 3*i); - int grid_index = kmap_q3xs[u]; - is_on_grid_aux[k] = true; - if (grid_index < 0) { - is_on_grid_aux[k] = false; - const uint16_t * neighbours = kneighbors_q3xs - kmap_q3xs[u] - 1; - grid_index = iq3_find_best_neighbour(neighbours, kgrid_q3xs, xval + 4*k, waux + 4*k, this_scale, Laux + 4*k); - } - } - float sumqx = 0, sumq2 = 0; - for (int i = 0; i < 32; ++i) { - float w = weight[i]; - float q = 2*Laux[i] + 1; - sumqx += w*xval[i]*q; - sumq2 += w*q*q; - } - if (sumq2 > 0 && sumqx*sumqx > best*sumq2) { - scale = sumqx/sumq2; best = scale*sumqx; - for (int i = 0; i < 32; ++i) L[i] = Laux[i]; - for (int k = 0; k < 8; ++k) is_on_grid[k] = is_on_grid_aux[k]; - } - } - int n_not_ongrid = 0; - for (int k = 0; k < 8; ++k) if (!is_on_grid[k]) ++n_not_ongrid; - if (n_not_ongrid > 0 && scale > 0) { - float id = 1/scale; - for (int k = 0; k < 8; ++k) { - if (is_on_grid[k]) continue; - uint16_t u = 0; - for (int i = 0; i < 4; ++i) { - int l = nearest_int(0.5f*(id*xval[4*k+i]-1)); - l = MAX(0, MIN(kMaxQ-1, l)); - u |= (l << 3*i); - } - int grid_index = kmap_q3xs[u]; - if (grid_index < 0) { - const uint16_t * neighbours = kneighbors_q3xs - kmap_q3xs[u] - 1; - grid_index = iq3_find_best_neighbour(neighbours, kgrid_q3xs, xval + 4*k, waux + 4*k, scale, L + 4*k); - } - const int8_t * pg = (const int8_t *)(kgrid_q3xs + grid_index); - for (int i = 0; i < 4; ++i) L[4*k+i] = (pg[i] - 1)/2; - } - float sumqx = 0, sumq2 = 0; - for (int i = 0; i < 32; ++i) { - float w = weight[i]; - float q = 2*L[i] + 1; - sumqx += w*xval[i]*q; - sumq2 += w*q*q; - } - if (sumq2 > 0) scale = sumqx/sumq2; - } - if (scale < 0) { - // This should never happen, but just in case, flip scale so that it is positive (we use uint's to encode the scale) - // and correspondingly flip quant signs. - scale = -scale; - for (int k = 0; k < 4; ++k) block_signs[k] = (~block_signs[k]) & 127; - } - for (int k = 0; k < 8; ++k) { - uint16_t u = 0; - for (int i = 0; i < 4; ++i) u |= (L[4*k+i] << 3*i); - int grid_index = kmap_q3xs[u]; - if (grid_index < 0) { - printf("Oops: found point %u not on grid:", u); - for (int i = 0; i < 4; ++i) printf(" %d", L[4*k+i]); - printf("\n"); - GGML_ASSERT(false); - } - if (grid_size == 256) { - q3[8*ib+k] = grid_index; - } else { - q3[8*ib+k] = grid_index & 255; - qh[ib] |= ((grid_index >> 8) << k); - } - - } - scales_and_signs[ib] = block_signs[0] | (block_signs[1] << 7) | (block_signs[2] << 14) | (block_signs[3] << 21); - GGML_ASSERT(scale >= 0); - scales[ib] = scale; - max_scale = MAX(max_scale, scale); - } - - if (!max_scale) { - memset(qs, 0, quant_size); - dh += block_size/sizeof(ggml_fp16_t); - qs += block_size; - continue; - } - - float d = max_scale/31; - dh[0] = GGML_FP32_TO_FP16(d * 1.0125f); // small improvement via this fudge factor - float id = 1/d; - for (int ib = 0; ib < QK_K/32; ++ib) { - int l = nearest_int(0.5f*(id*scales[ib]-1)); - l = MAX(0, MIN(15, l)); - scales_and_signs[ib] |= ((uint32_t)l << 28); - } - memcpy(qs, q3, quant_size); - - dh += block_size/sizeof(ggml_fp16_t); - qs += block_size; - - } -} - -size_t quantize_iq3_xxs(const float * restrict src, void * restrict dst, int64_t nrow, int64_t n_per_row, const float * quant_weights) { - GGML_ASSERT(n_per_row%QK_K == 0); - int64_t nblock = n_per_row/QK_K; - char * qrow = (char *)dst; - for (int64_t row = 0; row < nrow; ++row) { - quantize_row_iq3_xxs_impl(256, src, qrow, n_per_row, quant_weights); - src += n_per_row; - qrow += nblock*sizeof(block_iq3_xxs); - } - return nrow * nblock * sizeof(block_iq3_xxs); -} - -void quantize_row_iq3_xxs(const float * restrict x, void * restrict vy, int64_t k) { - assert(k % QK_K == 0); - block_iq3_xxs * restrict y = vy; - quantize_row_iq3_xxs_reference(x, y, k); -} - -void quantize_row_iq3_xxs_reference(const float * restrict x, block_iq3_xxs * restrict y, int64_t k) { - assert(k % QK_K == 0); - quantize_row_iq3_xxs_impl(256, x, y, k, NULL); -} - -static void quantize_row_iq3_s_impl(int block_size, const float * restrict x, void * restrict vy, int n, - const float * restrict quant_weights, - float * scales, - float * weight, - float * xval, - int8_t * L, - int8_t * Laux, - float * waux, - bool * is_on_grid, - bool * is_on_grid_aux, - uint8_t * block_signs) { - - const int gindex = iq3_data_index(512); - - const uint32_t * kgrid_q3xs = iq3_data[gindex].grid; - const int * kmap_q3xs = iq3_data[gindex].map; - const uint16_t * kneighbors_q3xs = iq3_data[gindex].neighbours; - - //GGML_ASSERT(quant_weights && "missing quantization weights"); - GGML_ASSERT(kgrid_q3xs && "forgot to call ggml_quantize_init()?"); - GGML_ASSERT(kmap_q3xs && "forgot to call ggml_quantize_init()?"); - GGML_ASSERT(kneighbors_q3xs && "forgot to call ggml_quantize_init()?"); - GGML_ASSERT(n%QK_K == 0); - - const int kMaxQ = 8; - - const int64_t nbl = n/QK_K; - - block_iq3_s * y = vy; - - const int bs4 = block_size/4; - const int bs8 = block_size/8; - - for (int ibl = 0; ibl < nbl; ++ibl) { - - memset(&y[ibl], 0, sizeof(block_iq3_s)); - y[ibl].d = GGML_FP32_TO_FP16(0.f); - - uint8_t * qs = y[ibl].qs; - uint8_t * qh = y[ibl].qh; - uint8_t * signs = y[ibl].signs; - - float max_scale = 0; - - const float * xbl = x + QK_K*ibl; - float sumx2 = 0; - for (int i = 0; i < QK_K; ++i) sumx2 += xbl[i]*xbl[i]; - float sigma2 = 2*sumx2/QK_K; - - for (int ib = 0; ib < QK_K/block_size; ++ib) { - const float * xb = xbl + block_size*ib; - if (quant_weights) { - const float * qw = quant_weights + QK_K*ibl + block_size*ib; - for (int i = 0; i < block_size; ++i) weight[i] = qw[i] * sqrtf(sigma2 + xb[i]*xb[i]); - } else { - for (int i = 0; i < block_size; ++i) weight[i] = xb[i]*xb[i]; - } - for (int i = 0; i < block_size; ++i) waux[i] = sqrtf(weight[i]); - for (int k = 0; k < bs8; ++k) { - uint8_t s = 0; - for (int i = 0; i < 8; ++i) { - if (xb[8*k + i] >= 0) xval[8*k + i] = xb[8*k + i]; - else { - xval[8*k + i] = -xb[8*k + i]; s |= (1 << i); - } - } - block_signs[k] = s; - } - float max = xval[0]; - for (int i = 1; i < block_size; ++i) max = MAX(max, xval[i]); - if (!max) { - scales[ib] = 0; - continue; - } - float best = 0; - float scale = max/(2*kMaxQ-1); - for (int k = 0; k < bs4; ++k) is_on_grid[k] = false; - for (int is = -9; is <= 9; ++is) { - float id = (2*kMaxQ-1+is*0.2f)/max; - float this_scale = 1/id; - for (int k = 0; k < bs4; ++k) { - for (int i = 0; i < 4; ++i) { - int l = nearest_int(0.5f*(id*xval[4*k+i]-1)); - Laux[4*k+i] = MAX(0, MIN(kMaxQ-1, l)); - } - uint16_t u = 0; - for (int i = 0; i < 4; ++i) u |= (Laux[4*k+i] << 3*i); - int grid_index = kmap_q3xs[u]; - is_on_grid_aux[k] = true; - if (grid_index < 0) { - is_on_grid_aux[k] = false; - const uint16_t * neighbours = kneighbors_q3xs - kmap_q3xs[u] - 1; - grid_index = iq3_find_best_neighbour(neighbours, kgrid_q3xs, xval + 4*k, waux + 4*k, this_scale, Laux + 4*k); - } - } - float sumqx = 0, sumq2 = 0; - for (int i = 0; i < block_size; ++i) { - float w = weight[i]; - float q = 2*Laux[i] + 1; - sumqx += w*xval[i]*q; - sumq2 += w*q*q; - } - if (sumq2 > 0 && sumqx*sumqx > best*sumq2) { - scale = sumqx/sumq2; best = scale*sumqx; - for (int i = 0; i < block_size; ++i) L[i] = Laux[i]; - for (int k = 0; k < bs4; ++k) is_on_grid[k] = is_on_grid_aux[k]; - } - } - int n_not_ongrid = 0; - for (int k = 0; k < bs4; ++k) if (!is_on_grid[k]) ++n_not_ongrid; - if (n_not_ongrid > 0 && scale > 0) { - float id = 1/scale; - for (int k = 0; k < bs4; ++k) { - //if (is_on_grid[k]) continue; - uint16_t u = 0; - for (int i = 0; i < 4; ++i) { - int l = nearest_int(0.5f*(id*xval[4*k+i]-1)); - l = MAX(0, MIN(kMaxQ-1, l)); - u |= (l << 3*i); - } - int grid_index = kmap_q3xs[u]; - if (grid_index < 0) { - const uint16_t * neighbours = kneighbors_q3xs - kmap_q3xs[u] - 1; - grid_index = iq3_find_best_neighbour(neighbours, kgrid_q3xs, xval + 4*k, waux + 4*k, scale, L + 4*k); - } - const int8_t * pg = (const int8_t *)(kgrid_q3xs + grid_index); - for (int i = 0; i < 4; ++i) L[4*k+i] = (pg[i] - 1)/2; - } - float sumqx = 0, sumq2 = 0; - for (int i = 0; i < block_size; ++i) { - float w = weight[i]; - float q = 2*L[i] + 1; - sumqx += w*xval[i]*q; - sumq2 += w*q*q; - } - if (sumq2 > 0) scale = sumqx/sumq2; - } - if (scale < 0) { - // This should never happen, but just in case, flip scale so that it is positive (we use uint's to encode the scale) - // and correspondingly flip quant signs. - scale = -scale; - for (int k = 0; k < bs8; ++k) block_signs[k] = ~block_signs[k]; - } - for (int k = 0; k < bs4; ++k) { - uint16_t u = 0; - for (int i = 0; i < 4; ++i) u |= (L[4*k+i] << 3*i); - int grid_index = kmap_q3xs[u]; - if (grid_index < 0) { - printf("Oops: found point %u not on grid:", u); - for (int i = 0; i < 4; ++i) printf(" %d", L[4*k+i]); - printf("\n"); - GGML_ASSERT(false); - } - qs[k] = grid_index & 255; - qh[(ib*bs4+k)/8] |= ((grid_index >> 8) << ((ib*bs4+k)%8)); - } - qs += bs4; - for (int k = 0; k < bs8; ++k) signs[k] = block_signs[k]; - signs += bs8; - GGML_ASSERT(scale >= 0); - scales[ib] = scale; - max_scale = MAX(max_scale, scale); - } - - if (!max_scale) { - continue; - } - - float d = max_scale/31; - y[ibl].d = GGML_FP32_TO_FP16(d * 1.033f); - float id = 1/d; - for (int ib = 0; ib < QK_K/block_size; ib += 2) { - int l1 = nearest_int(0.5f*(id*scales[ib+0]-1)); - l1 = MAX(0, MIN(15, l1)); - int l2 = nearest_int(0.5f*(id*scales[ib+1]-1)); - l2 = MAX(0, MIN(15, l2)); - y[ibl].scales[ib/2] = l1 | (l2 << 4); - } - - } -} - -#define IQ3S_BLOCK_SIZE 32 -size_t quantize_iq3_s(const float * restrict src, void * restrict dst, int64_t nrow, int64_t n_per_row, const float * quant_weights) { - GGML_ASSERT(n_per_row%QK_K == 0); - int64_t nblock = n_per_row/QK_K; - float scales[QK_K/IQ3S_BLOCK_SIZE]; - float weight[IQ3S_BLOCK_SIZE]; - float xval[IQ3S_BLOCK_SIZE]; - int8_t L[IQ3S_BLOCK_SIZE]; - int8_t Laux[IQ3S_BLOCK_SIZE]; - float waux[IQ3S_BLOCK_SIZE]; - bool is_on_grid[IQ3S_BLOCK_SIZE/4]; - bool is_on_grid_aux[IQ3S_BLOCK_SIZE/4]; - uint8_t block_signs[IQ3S_BLOCK_SIZE/8]; - char * qrow = (char *)dst; - for (int64_t row = 0; row < nrow; ++row) { - quantize_row_iq3_s_impl(IQ3S_BLOCK_SIZE, src, qrow, n_per_row, quant_weights, - scales, weight, xval, L, Laux, waux, is_on_grid, is_on_grid_aux, block_signs); - src += n_per_row; - qrow += nblock*sizeof(block_iq3_s); - } - return nrow * nblock * sizeof(block_iq3_s); -} - -void quantize_row_iq3_s(const float * restrict x, void * restrict vy, int64_t k) { - assert(k % QK_K == 0); - block_iq3_s * restrict y = vy; - quantize_row_iq3_s_reference(x, y, k); -} - -void quantize_row_iq3_s_reference(const float * restrict x, block_iq3_s * restrict y, int64_t k) { - assert(k % QK_K == 0); - quantize_iq3_s(x, y, 1, k, NULL); -} - - -// =================================== 1.5 bpw =================================================== - -static int iq1_find_best_neighbour(const uint16_t * restrict neighbours, const uint64_t * restrict grid, - const float * restrict xval, const float * restrict weight, float * scale, int8_t * restrict L, int ngrid) { - int num_neighbors = neighbours[0]; - GGML_ASSERT(num_neighbors > 0); - float best_score = 0; - int grid_index = -1; - for (int j = 1; j <= num_neighbors; ++j) { - const int8_t * pg = (const int8_t *)(grid + neighbours[j]); - float sumqx = 0, sumq2 = 0; - for (int i = 0; i < 8; ++i) { - float q = (pg[i] - 3)/2; - float w = weight[i]; - sumqx += w*q*xval[i]; - sumq2 += w*q*q; - } - if (sumqx > 0 && sumq2 > 0 && sumqx*sumqx > best_score*sumq2) { - *scale = sumqx/sumq2; best_score = *scale * sumqx; - grid_index = neighbours[j]; - } - } - if (grid_index < 0) { - for (int i = 0; i < ngrid; ++i) { - const int8_t * grid_i = (const int8_t *)(grid + i); - float sumqx = 0, sumq2 = 0; - for (int j = 0; j < 8; ++j) { - float w = weight[j]; - float q = (grid_i[j] - 3)/2; - sumqx += w*q*xval[j]; - sumq2 += w*q*q; - } - if (sumqx > 0 && sumq2 > 0 && sumqx*sumqx > best_score*sumq2) { - *scale = sumqx/sumq2; best_score = *scale*sumqx; - grid_index = i; - } - } - } - if (grid_index < 0) { - printf("Oops, did not find grid point\n"); - printf("Have %d neighbours\n", num_neighbors); - for (int j = 1; j <= num_neighbors; ++j) { - const int8_t * pg = (const int8_t *)(grid + neighbours[j]); - float sumqx = 0, sumq2 = 0; - for (int i = 0; i < 8; ++i) { - float q = (pg[i] - 3)/2; - float w = weight[i]; - sumqx += w*q*xval[i]; - sumq2 += w*q*q; - } - printf(" neighbour %d: sumqx = %g sumq2 = %g\n", j, (double)sumqx, (double)sumq2); - } - } - GGML_ASSERT(grid_index >= 0); - //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - *scale *= 1.05f; // This is a fudge factor. Don't ask me why it improves the result. - //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - const int8_t * pg = (const int8_t *)(grid + grid_index); - for (int i = 0; i < 8; ++i) L[i] = (pg[i] - 1)/2; - return grid_index; -} - -static int iq1_find_best_neighbour2(const uint16_t * restrict neighbours, const uint64_t * restrict grid, - const float * restrict xval, const float * restrict weight, float scale, const float * restrict xg, int8_t * restrict L, int ngrid) { - int num_neighbors = neighbours[0]; - GGML_ASSERT(num_neighbors > 0); - float best_score = FLT_MAX; - int grid_index = -1; - for (int j = 1; j <= num_neighbors; ++j) { - const int8_t * pg = (const int8_t *)(grid + neighbours[j]); - float d2 = 0; - for (int i = 0; i < 8; ++i) { - float q = xg[(pg[i] - 1)/2]; - float w = weight[i]; - float diff = scale*q - xval[i]; - d2 += w*diff*diff; - } - if (d2 < best_score) { - best_score = d2; - grid_index = neighbours[j]; - } - } - if (grid_index < 0) { - for (int i = 0; i < ngrid; ++i) { - const int8_t * grid_i = (const int8_t *)(grid + i); - float d2 = 0; - for (int j = 0; j < 8; ++j) { - float w = weight[j]; - float q = xg[(grid_i[j] - 1)/2]; - float diff = scale*q - xval[i]; - d2 += w*diff*diff; - } - if (d2 < best_score) { - best_score = d2; - grid_index = i; - } - } - } - if (grid_index < 0) { - printf("Oops, did not find grid point\n"); - printf("Have %d neighbours\n", num_neighbors); - for (int j = 1; j <= num_neighbors; ++j) { - const int8_t * pg = (const int8_t *)(grid + neighbours[j]); - float sumqx = 0, sumq2 = 0; - for (int i = 0; i < 8; ++i) { - float q = xg[(pg[i] - 1)/2]; - float w = weight[i]; - sumqx += w*q*xval[i]; - sumq2 += w*q*q; - } - printf(" neighbour %d: sumqx = %g sumq2 = %g\n", j, (double)sumqx, (double)sumq2); - } - } - GGML_ASSERT(grid_index >= 0); - const int8_t * pg = (const int8_t *)(grid + grid_index); - for (int i = 0; i < 8; ++i) L[i] = (pg[i] - 1)/2; - return grid_index; -} - -static int iq1_sort_helper(const void * left, const void * right) { - const float * l = left; - const float * r = right; - return *l < *r ? -1 : *l > *r ? 1 : 0; -} - -#define IQ1S_BLOCK_SIZE 32 -#define IQ1M_BLOCK_SIZE 16 -static void quantize_row_iq1_s_impl(const float * restrict x, void * restrict vy, int64_t n, const float * restrict quant_weights, - float * scales, - float * weight, - float * sumx, - float * sumw, - float * pairs, - int8_t * L, - uint16_t * index, - int8_t * shifts) { - - const int gindex = iq2_data_index(GGML_TYPE_IQ1_S); - - const uint64_t * kgrid_q2xs = iq2_data[gindex].grid; - const int * kmap_q2xs = iq2_data[gindex].map; - const uint16_t * kneighbors_q2xs = iq2_data[gindex].neighbours; - - GGML_ASSERT(quant_weights && "missing quantization weights"); - GGML_ASSERT(kgrid_q2xs && "forgot to call ggml_quantize_init()?"); - GGML_ASSERT(kmap_q2xs && "forgot to call ggml_quantize_init()?"); - GGML_ASSERT(kneighbors_q2xs && "forgot to call ggml_quantize_init()?"); - GGML_ASSERT(n%QK_K == 0); - - block_iq1_s * y = vy; - - const int64_t nbl = n/QK_K; - - const int block_size = IQ1S_BLOCK_SIZE; - - const float x_p[3] = {-1 + IQ1S_DELTA, IQ1S_DELTA, 1 + IQ1S_DELTA}; - const float x_m[3] = {-1 - IQ1S_DELTA, -IQ1S_DELTA, 1 - IQ1S_DELTA}; - - - int * idx = (int *)(pairs + 1); - - for (int ibl = 0; ibl < nbl; ++ibl) { - - y[ibl].d = GGML_FP32_TO_FP16(0.f); - memset(y[ibl].qs, 0, QK_K/8); - memset(y[ibl].qh, 0, QK_K/16); - - float max_scale = 0; - - const float * xbl = x + QK_K*ibl; - float sumx2 = 0; - for (int i = 0; i < QK_K; ++i) sumx2 += xbl[i]*xbl[i]; - float sigma2 = 2*sumx2/QK_K; - - for (int ib = 0; ib < QK_K/block_size; ++ib) { - const float * xb = xbl + block_size*ib; - const float * qw = quant_weights + QK_K*ibl + block_size*ib; - for (int i = 0; i < block_size; ++i) weight[i] = qw[i] * sqrtf(sigma2 + xb[i]*xb[i]); - float max = fabsf(xb[0]); - for (int i = 1; i < block_size; ++i) max = MAX(max, fabsf(xb[i])); - if (!max) { - scales[ib] = 0; - memset(L, 1, block_size); - continue; - } - // Here we solve exactly the sum of squared difference (SSD) weighted minimization problem. - // With just 3 allowed quant values (-1, 0, 1), we can search exhaustively for the two - // boundaries that split the weights xb[i] into 3 groups. To do so, we sort the weights - // in ascending order, compute Si = sum[weight[j] xb[j], j = 0...i] and - // Wi = sum[weight[j], j = 0...i], and use these to quckly get get the optimum scale - // for each possible and score for each split. - for (int j = 0; j < block_size; ++j) { - pairs[2*j] = xb[j]; - idx[2*j] = j; - } - qsort(pairs, block_size, 2*sizeof(float), iq1_sort_helper); - { - sumx[0] = sumw[0] = 0; - for (int j = 0; j < block_size; ++j) { - int i = idx[2*j]; - sumx[j+1] = sumx[j] + weight[i]*xb[i]; - sumw[j+1] = sumw[j] + weight[i]; - } - } - float best_score = 0, scale = max; - int besti1 = -1, besti2 = -1, best_shift = 0; - for (int i1 = 0; i1 <= block_size; ++i1) { - for (int i2 = i1; i2 <= block_size; ++i2) { - float sumqx = (sumx[i1] - sumx[0])*x_p[0] + (sumx[i2] - sumx[i1])*x_p[1] + (sumx[block_size] - sumx[i2])*x_p[2]; - float sumq2 = (sumw[i1] - sumw[0])*x_p[0]*x_p[0] + (sumw[i2] - sumw[i1])*x_p[1]*x_p[1] + (sumw[block_size] - sumw[i2])*x_p[2]*x_p[2]; - if (sumq2 > 0 && sumqx*sumqx > best_score*sumq2) { - scale = sumqx/sumq2; best_score = scale*sumqx; - besti1 = i1; besti2 = i2; best_shift = 1; - } - sumqx = (sumx[i1] - sumx[0])*x_m[0] + (sumx[i2] - sumx[i1])*x_m[1] + (sumx[block_size] - sumx[i2])*x_m[2]; - sumq2 = (sumw[i1] - sumw[0])*x_m[0]*x_m[0] + (sumw[i2] - sumw[i1])*x_m[1]*x_m[1] + (sumw[block_size] - sumw[i2])*x_m[2]*x_m[2]; - if (sumq2 > 0 && sumqx*sumqx > best_score*sumq2) { - scale = sumqx/sumq2; best_score = scale*sumqx; - besti1 = i1; besti2 = i2; best_shift = -1; - } - } - } - GGML_ASSERT(besti1 >= 0 && besti2 >= 0 && best_shift != 0); - for (int j = 0; j < besti1; ++j) L[idx[2*j]] = 0; - for (int j = besti1; j < besti2; ++j) L[idx[2*j]] = 1; - for (int j = besti2; j < block_size; ++j) L[idx[2*j]] = 2; - if (scale < 0) { - for (int j = 0; j < block_size; ++j) L[j] = 2 - L[j]; - scale = -scale; best_shift = -best_shift; - } - bool all_on_grid = true; - const float * xx = best_shift == 1 ? x_p : x_m; - for (int k = 0; k < block_size/8; ++k) { - uint16_t u = 0; - for (int j = 0; j < 8; ++j) u |= (L[8*k+j] << 2*j); - int grid_index = kmap_q2xs[u]; - if (grid_index < 0) { - all_on_grid = false; - const uint16_t * neighbours = kneighbors_q2xs - kmap_q2xs[u] - 1; - grid_index = iq1_find_best_neighbour2(neighbours, kgrid_q2xs, xb + 8*k, weight + 8*k, scale, xx, L + 8*k, NGRID_IQ1S); - GGML_ASSERT(grid_index >= 0); - } - index[k] = grid_index; - } - if (!all_on_grid) { - float sumqx = 0, sumq2 = 0; - for (int k = 0; k < block_size/8; ++k) { - const int8_t * pg = (const int8_t *)(kgrid_q2xs + index[k]); - for (int j = 0; j < 8; ++j) { - float w = weight[8*k + j]; - float q = xx[(pg[j] - 1)/2]; - sumqx += w*q*xb[8*k+j]; - sumq2 += w*q*q; - } - } - if (sumqx > 0 && sumq2 > 0) scale = sumqx/sumq2; - } - uint16_t h = 0; - for (int k = 0; k < block_size/8; ++k) { - y[ibl].qs[(block_size/8)*ib + k] = index[k] & 255; - h |= (index[k] >> 8) << 3*k; - } - y[ibl].qh[ib] = h; - GGML_ASSERT(scale >= 0); - scales[ib] = scale; - shifts[ib] = best_shift; - max_scale = MAX(max_scale, scale); - } - - if (!max_scale) { - continue; - } - - float d = max_scale/15; - y[ibl].d = GGML_FP32_TO_FP16(d*1.125f); // 1.125f is another fudge factor. Don't ask me why it is needed. - float id = 1/d; - for (int ib = 0; ib < QK_K/block_size; ++ib) { - int l = nearest_int(0.5f*(id*scales[ib]-1)); - l = MAX(0, MIN(7, l)); - if (shifts[ib] == -1) l |= 8; - y[ibl].qh[ib] |= (l << 12); - } - } -} - -size_t quantize_iq1_s(const float * restrict src, void * restrict dst, int64_t nrow, int64_t n_per_row, const float * quant_weights) { - GGML_ASSERT(n_per_row%QK_K == 0); - float scales[QK_K/IQ1S_BLOCK_SIZE]; - float weight[IQ1S_BLOCK_SIZE]; - int8_t L[IQ1S_BLOCK_SIZE]; - float sumx[IQ1S_BLOCK_SIZE+1]; - float sumw[IQ1S_BLOCK_SIZE+1]; - float pairs[2*IQ1S_BLOCK_SIZE]; - uint16_t index[IQ1S_BLOCK_SIZE/8]; - int8_t shifts[QK_K/IQ1S_BLOCK_SIZE]; - int64_t nblock = n_per_row/QK_K; - char * qrow = (char *)dst; - for (int64_t row = 0; row < nrow; ++row) { - quantize_row_iq1_s_impl(src, qrow, n_per_row, quant_weights, scales, weight, sumx, sumw, pairs, L, index, shifts); - src += n_per_row; - qrow += nblock*sizeof(block_iq1_s); - } - return nrow * nblock * sizeof(block_iq1_s); -} - -static void quantize_row_iq1_m_impl(const float * restrict x, void * restrict vy, int64_t n, const float * restrict quant_weights, - float * scales, - float * weight, - float * pairs, - int8_t * L, - uint16_t * index, - int8_t * shifts) { - - const int gindex = iq2_data_index(GGML_TYPE_IQ1_M); - - const uint64_t * kgrid_q2xs = iq2_data[gindex].grid; - const int * kmap_q2xs = iq2_data[gindex].map; - const uint16_t * kneighbors_q2xs = iq2_data[gindex].neighbours; - - //GGML_ASSERT(quant_weights && "missing quantization weights"); - GGML_ASSERT(kgrid_q2xs && "forgot to call ggml_quantize_init()?"); - GGML_ASSERT(kmap_q2xs && "forgot to call ggml_quantize_init()?"); - GGML_ASSERT(kneighbors_q2xs && "forgot to call ggml_quantize_init()?"); - GGML_ASSERT(n%QK_K == 0); - - block_iq1_m * y = vy; - - const int64_t nbl = n/QK_K; - - const int block_size = IQ1M_BLOCK_SIZE; - - const float x_p[3] = {-1 + IQ1M_DELTA, IQ1M_DELTA, 1 + IQ1M_DELTA}; - const float x_m[3] = {-1 - IQ1M_DELTA, -IQ1M_DELTA, 1 - IQ1M_DELTA}; - const uint8_t masks[4] = {0x00, 0x80, 0x08, 0x88}; - - int * idx = (int *)(pairs + 1); - - float sumqx[4], sumq2[4]; - - iq1m_scale_t s; - const float * xx; - - for (int ibl = 0; ibl < nbl; ++ibl) { - -#if QK_K == 64 - y[ibl].d = GGML_FP32_TO_FP16(0.f); -#endif - memset(y[ibl].qs, 0, QK_K/8); - memset(y[ibl].qh, 0, QK_K/16); - memset(y[ibl].scales, 0, QK_K/32); - - float max_scale = 0; - - const float * xbl = x + QK_K*ibl; - float sumx2 = 0; - for (int i = 0; i < QK_K; ++i) sumx2 += xbl[i]*xbl[i]; - float sigma2 = 2*sumx2/QK_K; - - for (int ib = 0; ib < QK_K/block_size; ++ib) { - const float * xb = xbl + block_size*ib; - if (quant_weights) { - const float * qw = quant_weights + QK_K*ibl + block_size*ib; - for (int i = 0; i < block_size; ++i) weight[i] = qw[i] * sqrtf(sigma2 + xb[i]*xb[i]); - } else { - for (int i = 0; i < block_size; ++i) weight[i] = xb[i]*xb[i]; - } - float max = fabsf(xb[0]); - for (int i = 1; i < block_size; ++i) max = MAX(max, fabsf(xb[i])); - if (!max) { - scales[ib] = 0; - memset(L, 1, block_size); - continue; - } - // Here we solve exactly the sum of squared difference (SSD) weighted minimization problem. - // With just 3 allowed quant values (-1, 0, 1), we can search exhaustively for the two - // boundaries that split the weights xb[i] into 3 groups. To do so, we sort the weights - // in ascending order, compute Si = sum[weight[j] xb[j], j = 0...i] and - // Wi = sum[weight[j], j = 0...i], and use these to quckly get get the optimum scale - // for each possible and score for each split. - for (int j = 0; j < block_size; ++j) { - pairs[2*j] = xb[j]; - idx[2*j] = j; - } - qsort(pairs, block_size, 2*sizeof(float), iq1_sort_helper); - float best_score = 0, scale = max; - int besti1 = -1, besti2 = -1, best_k = -1; - // 0: +, + - // 1: +, - - // 2: -, + - // 3: -, - - for (int i1 = 0; i1 <= block_size; ++i1) { - for (int i2 = i1; i2 <= block_size; ++i2) { - memset(sumqx, 0, 4*sizeof(float)); - memset(sumq2, 0, 4*sizeof(float)); - for (int j = 0; j < i1; ++j) { - int i = idx[2*j]; - if (i < block_size/2) { - sumqx[0] += weight[i]*x_p[0]*xb[i]; - sumqx[1] += weight[i]*x_p[0]*xb[i]; - sumqx[2] += weight[i]*x_m[0]*xb[i]; - sumqx[3] += weight[i]*x_m[0]*xb[i]; - sumq2[0] += weight[i]*x_p[0]*x_p[0]; - sumq2[1] += weight[i]*x_p[0]*x_p[0]; - sumq2[2] += weight[i]*x_m[0]*x_m[0]; - sumq2[3] += weight[i]*x_m[0]*x_m[0]; - } else { - sumqx[0] += weight[i]*x_p[0]*xb[i]; - sumqx[2] += weight[i]*x_p[0]*xb[i]; - sumqx[1] += weight[i]*x_m[0]*xb[i]; - sumqx[3] += weight[i]*x_m[0]*xb[i]; - sumq2[0] += weight[i]*x_p[0]*x_p[0]; - sumq2[2] += weight[i]*x_p[0]*x_p[0]; - sumq2[1] += weight[i]*x_m[0]*x_m[0]; - sumq2[3] += weight[i]*x_m[0]*x_m[0]; - } - } - for (int j = i1; j < i2; ++j) { - int i = idx[2*j]; - if (i < block_size/2) { - sumqx[0] += weight[i]*x_p[1]*xb[i]; - sumqx[1] += weight[i]*x_p[1]*xb[i]; - sumqx[2] += weight[i]*x_m[1]*xb[i]; - sumqx[3] += weight[i]*x_m[1]*xb[i]; - sumq2[0] += weight[i]*x_p[1]*x_p[1]; - sumq2[1] += weight[i]*x_p[1]*x_p[1]; - sumq2[2] += weight[i]*x_m[1]*x_m[1]; - sumq2[3] += weight[i]*x_m[1]*x_m[1]; - } else { - sumqx[0] += weight[i]*x_p[1]*xb[i]; - sumqx[2] += weight[i]*x_p[1]*xb[i]; - sumqx[1] += weight[i]*x_m[1]*xb[i]; - sumqx[3] += weight[i]*x_m[1]*xb[i]; - sumq2[0] += weight[i]*x_p[1]*x_p[1]; - sumq2[2] += weight[i]*x_p[1]*x_p[1]; - sumq2[1] += weight[i]*x_m[1]*x_m[1]; - sumq2[3] += weight[i]*x_m[1]*x_m[1]; - } - } - for (int j = i2; j < block_size; ++j) { - int i = idx[2*j]; - if (i < block_size/2) { - sumqx[0] += weight[i]*x_p[2]*xb[i]; - sumqx[1] += weight[i]*x_p[2]*xb[i]; - sumqx[2] += weight[i]*x_m[2]*xb[i]; - sumqx[3] += weight[i]*x_m[2]*xb[i]; - sumq2[0] += weight[i]*x_p[2]*x_p[2]; - sumq2[1] += weight[i]*x_p[2]*x_p[2]; - sumq2[2] += weight[i]*x_m[2]*x_m[2]; - sumq2[3] += weight[i]*x_m[2]*x_m[2]; - } else { - sumqx[0] += weight[i]*x_p[2]*xb[i]; - sumqx[2] += weight[i]*x_p[2]*xb[i]; - sumqx[1] += weight[i]*x_m[2]*xb[i]; - sumqx[3] += weight[i]*x_m[2]*xb[i]; - sumq2[0] += weight[i]*x_p[2]*x_p[2]; - sumq2[2] += weight[i]*x_p[2]*x_p[2]; - sumq2[1] += weight[i]*x_m[2]*x_m[2]; - sumq2[3] += weight[i]*x_m[2]*x_m[2]; - } - } - for (int k = 0; k < 4; ++k) { - if (sumq2[k] > 0 && sumqx[k]*sumqx[k] > best_score*sumq2[k]) { - scale = sumqx[k]/sumq2[k]; best_score = scale*sumqx[k]; - besti1 = i1; besti2 = i2; best_k = k; - } - } - } - } - GGML_ASSERT(besti1 >= 0 && besti2 >= 0 && best_k >= 0); - for (int j = 0; j < besti1; ++j) L[idx[2*j]] = 0; - for (int j = besti1; j < besti2; ++j) L[idx[2*j]] = 1; - for (int j = besti2; j < block_size; ++j) L[idx[2*j]] = 2; - if (scale < 0) { - for (int j = 0; j < block_size; ++j) L[j] = 2 - L[j]; - scale = -scale; - best_k = best_k == 0 ? 3 : best_k == 1 ? 2 : best_k == 2 ? 1 : 0; - } - bool all_on_grid = true; - for (int k = 0; k < block_size/8; ++k) { - if (k == 0) xx = best_k < 2 ? x_p : x_m; - else xx = best_k%2 == 0 ? x_p : x_m; - uint16_t u = 0; - for (int j = 0; j < 8; ++j) u |= (L[8*k+j] << 2*j); - int grid_index = kmap_q2xs[u]; - if (grid_index < 0) { - all_on_grid = false; - const uint16_t * neighbours = kneighbors_q2xs - kmap_q2xs[u] - 1; - grid_index = iq1_find_best_neighbour2(neighbours, kgrid_q2xs, xb + 8*k, weight + 8*k, scale, xx, L + 8*k, NGRID_IQ1S); - GGML_ASSERT(grid_index >= 0); - } - index[k] = grid_index; - } - if (!all_on_grid) { - float sumqx_f = 0, sumq2_f = 0; - for (int k = 0; k < block_size/8; ++k) { - if (k == 0) xx = best_k < 2 ? x_p : x_m; - else xx = best_k%2 == 0 ? x_p : x_m; - const int8_t * pg = (const int8_t *)(kgrid_q2xs + index[k]); - for (int j = 0; j < 8; ++j) { - float w = weight[8*k + j]; - float q = xx[(pg[j] - 1)/2]; - sumqx_f += w*q*xb[8*k+j]; - sumq2_f += w*q*q; - } - } - if (sumqx_f > 0 && sumq2_f > 0) scale = sumqx_f/sumq2_f; - } - y[ibl].qs[2*ib + 0] = index[0] & 255; - y[ibl].qs[2*ib + 1] = index[1] & 255; - y[ibl].qh[ib] = (index[0] >> 8) | ((index[1] >> 8) << 4); - GGML_ASSERT(scale >= 0); - scales[ib] = scale; - shifts[ib] = best_k; - max_scale = MAX(max_scale, scale); - } - - if (!max_scale) { - continue; - } - - uint16_t * sc = (uint16_t *)y[ibl].scales; -#if QK_K == 64 - float d = max_scale/31; -#else - float d = max_scale/15; -#endif - float id = 1/d; - float sumqx_f = 0, sumq2_f = 0; - for (int ib = 0; ib < QK_K/block_size; ++ib) { - int l = nearest_int(0.5f*(id*scales[ib+0]-1)); -#if QK_K == 64 - l = MAX(0, MIN(15, l)); - sc[ib/4] |= (l << 4*(ib%4)); -#else - l = MAX(0, MIN(7, l)); - sc[ib/4] |= (l << 3*(ib%4)); -#endif - y[ibl].qh[ib] |= masks[shifts[ib]]; - const float * xb = xbl + block_size*ib; - if (quant_weights) { - const float * qw = quant_weights + QK_K*ibl + block_size*ib; - for (int i = 0; i < block_size; ++i) weight[i] = qw[i] * sqrtf(sigma2 + xb[i]*xb[i]); - } else { - for (int i = 0; i < block_size; ++i) weight[i] = xb[i]*xb[i]; - } - for (int k = 0; k < block_size/8; ++k) { - if (k == 0) xx = shifts[ib] < 2 ? x_p : x_m; - else xx = shifts[ib]%2 == 0 ? x_p : x_m; - const int8_t * pg = (const int8_t *)(kgrid_q2xs + y[ibl].qs[2*ib+k] + ((y[ibl].qh[ib] << (8 - 4*k)) & 0x700)); - for (int j = 0; j < 8; ++j) { - float w = weight[8*k + j]; - float q = xx[(pg[j] - 1)/2]*(2*l+1); - sumqx_f += w*q*xb[8*k+j]; - sumq2_f += w*q*q; - } - } - } - if (sumq2_f > 0) d = sumqx_f/sumq2_f; - s.f16 = GGML_FP32_TO_FP16(d*1.1125f); // 1.1125f is another fudge factor. Don't ask me why it is needed. -#if QK_K == 64 - y[ibl].d = s.f16; -#else - sc[0] |= ((s.u16 & 0x000f) << 12); - sc[1] |= ((s.u16 & 0x00f0) << 8); - sc[2] |= ((s.u16 & 0x0f00) << 4); - sc[3] |= ((s.u16 & 0xf000) << 0); -#endif - } -} - -size_t quantize_iq1_m(const float * restrict src, void * restrict dst, int64_t nrow, int64_t n_per_row, const float * quant_weights) { - GGML_ASSERT(n_per_row%QK_K == 0); - float scales[QK_K/IQ1M_BLOCK_SIZE]; - float weight[IQ1M_BLOCK_SIZE]; - int8_t L[IQ1M_BLOCK_SIZE]; - float pairs[2*IQ1M_BLOCK_SIZE]; - uint16_t index[IQ1M_BLOCK_SIZE/8]; - int8_t shifts[QK_K/IQ1M_BLOCK_SIZE]; - int64_t nblock = n_per_row/QK_K; - char * qrow = (char *)dst; - for (int64_t row = 0; row < nrow; ++row) { - quantize_row_iq1_m_impl(src, qrow, n_per_row, quant_weights, scales, weight, pairs, L, index, shifts); - src += n_per_row; - qrow += nblock*sizeof(block_iq1_m); - } - return nrow * nblock * sizeof(block_iq1_m); -} - -// ============================ 4-bit non-linear quants - -static inline int best_index_int8(int n, const int8_t * val, float x) { - if (x <= val[0]) return 0; - if (x >= val[n-1]) return n-1; - int ml = 0, mu = n-1; - while (mu-ml > 1) { - int mav = (ml+mu)/2; - if (x < val[mav]) mu = mav; else ml = mav; - } - return x - val[mu-1] < val[mu] - x ? mu-1 : mu; -} - -static void quantize_row_iq4_nl_impl(const int super_block_size, const int block_size, const float * restrict x, - ggml_fp16_t * dh, uint8_t * q4, uint16_t * scales_h, uint8_t * scales_l, - float * scales, float * weight, uint8_t * L, - const int8_t * values, - const float * quant_weights, - const int ntry) { - - float sigma2 = 0; - for (int j = 0; j < super_block_size; ++j) sigma2 += x[j]*x[j]; - sigma2 *= 2.f/super_block_size; - - memset(q4, 0, super_block_size/2); - dh[0] = GGML_FP32_TO_FP16(0.f); - - float max_scale = 0, amax_scale = 0; - for (int ib = 0; ib < super_block_size/block_size; ++ib) { - const float * xb = x + ib*block_size; - uint8_t * Lb = L + ib*block_size; - if (quant_weights) { - const float * qw = quant_weights + ib*block_size; - for (int j = 0; j < block_size; ++j) weight[j] = qw[j] * sqrtf(sigma2 + xb[j]*xb[j]); - } else { - for (int j = 0; j < block_size; ++j) weight[j] = xb[j]*xb[j]; - } - float amax = 0, max = 0; - for (int j = 0; j < block_size; ++j) { - float ax = fabsf(xb[j]); - if (ax > amax) { - amax = ax; max = xb[j]; - } - } - if (!amax) { - scales[ib] = 0; - continue; - } - float d = ntry > 0 ? -max/values[0] : max/values[0]; - float id = 1/d; - float sumqx = 0, sumq2 = 0; - for (int j = 0; j < block_size; ++j) { - float al = id*xb[j]; - int l = best_index_int8(16, values, al); - Lb[j] = l; - float q = values[l]; - float w = weight[j]; - sumqx += w*q*xb[j]; - sumq2 += w*q*q; - } - d = sumqx/sumq2; - float best = d*sumqx; - for (int itry = -ntry; itry <= ntry; ++itry) { - id = (itry + values[0])/max; - sumqx = sumq2 = 0; - for (int j = 0; j < block_size; ++j) { - float al = id*xb[j]; - int l = best_index_int8(16, values, al); - float q = values[l]; - float w = weight[j]; - sumqx += w*q*xb[j]; - sumq2 += w*q*q; - } - if (sumq2 > 0 && sumqx*sumqx > best*sumq2) { - d = sumqx/sumq2; best = d * sumqx; - } - } - scales[ib] = d; - float abs_d = fabsf(d); - if (abs_d > amax_scale) { - amax_scale = abs_d; max_scale = d; - } - } - - if (super_block_size/block_size > 1) { - int nb = super_block_size/block_size; - memset(scales_h, 0, ((nb+7)/8)*sizeof(uint16_t)); - float d = -max_scale/32; - dh[0] = GGML_FP32_TO_FP16(d); - float id = d ? 1/d : 0.f; - for (int ib = 0; ib < super_block_size/block_size; ++ib) { - int l = nearest_int(id*scales[ib]); - l = MAX(-32, MIN(31, l)); - float dl = d * l; - float idl = dl ? 1/dl : 0.f; - uint8_t * Lb = L + ib*block_size; - const float * xb = x + ib*block_size; - for (int j = 0; j < block_size; ++j) { - Lb[j] = best_index_int8(16, values, idl*xb[j]); - } - l += 32; - uint8_t l_l = l & 0xf; - uint8_t l_h = l >> 4; - if (ib%2 == 0) scales_l[ib/2] = l_l; - else scales_l[ib/2] |= (l_l << 4); - scales_h[ib/8] |= (l_h << 2*(ib%8)); - } - } else { - dh[0] = GGML_FP32_TO_FP16(scales[0]); - if (ntry > 0) { - float id = scales[0] ? 1/scales[0] : 0; - for (int j = 0; j < super_block_size; ++j) { - L[j] = best_index_int8(16, values, id*x[j]); - } - } - } - - for (int i = 0; i < super_block_size/32; ++i) { - for (int j = 0; j < 16; ++j) { - q4[16*i + j] = L[32*i + j] | (L[32*i + 16 + j] << 4); - } - } -} - -size_t quantize_iq4_nl(const float * restrict src, void * restrict dst, int64_t nrow, int64_t n_per_row, const float * quant_weights) { - GGML_ASSERT(n_per_row%QK4_NL == 0); - int64_t nblock = n_per_row/QK4_NL; - char * qrow = (char *)dst; - uint8_t L[QK4_NL]; - float weight[QK4_NL]; - uint16_t unused_h; - uint8_t * unused_l = NULL; - float scale; - for (int64_t row = 0; row < nrow; ++row) { - block_iq4_nl * iq4 = (block_iq4_nl *)qrow; - for (int ibl = 0; ibl < nblock; ++ibl) { - const float * qw = quant_weights ? quant_weights + QK4_NL*ibl : NULL; - quantize_row_iq4_nl_impl(QK4_NL, 32, src + QK4_NL*ibl, &iq4[ibl].d, iq4[ibl].qs, &unused_h, unused_l, - &scale, weight, L, kvalues_iq4nl, qw, 7); - } - src += n_per_row; - qrow += nblock*sizeof(block_iq4_nl); - } - return nrow * nblock * sizeof(block_iq4_nl); -} - -void quantize_row_iq4_nl(const float * restrict x, void * restrict vy, int64_t k) { - GGML_ASSERT(k%QK4_NL == 0); - int64_t nblock = k/QK4_NL; - uint8_t L[QK4_NL]; - float weight[QK4_NL]; - uint16_t unused_h; - uint8_t * unused_l = NULL; - float scale; - block_iq4_nl * iq4 = (block_iq4_nl *)vy; - for (int ibl = 0; ibl < nblock; ++ibl) { - quantize_row_iq4_nl_impl(QK4_NL, 32, x + QK4_NL*ibl, &iq4[ibl].d, iq4[ibl].qs, &unused_h, unused_l, - &scale, weight, L, kvalues_iq4nl, NULL, -1); - } -} - -void quantize_row_iq4_nl_reference(const float * restrict x, block_iq4_nl * restrict y, int64_t k) { - assert(k % QK4_NL == 0); - quantize_row_iq4_nl(x, y, k); -} - -size_t quantize_iq4_xs(const float * restrict src, void * restrict dst, int64_t nrow, int64_t n_per_row, const float * quant_weights) { -#if QK_K == 64 - return quantize_iq4_nl(src, dst, nrow, n_per_row, quant_weights); -#else - GGML_ASSERT(n_per_row%QK_K == 0); - int64_t nblock = n_per_row/QK_K; - char * qrow = (char *)dst; - uint8_t L[QK_K]; - float weight[32]; - float scales[QK_K/32]; - for (int64_t row = 0; row < nrow; ++row) { - block_iq4_xs * iq4 = (block_iq4_xs *)qrow; - for (int ibl = 0; ibl < nblock; ++ibl) { - const float * qw = quant_weights ? quant_weights + QK_K*ibl : NULL; - quantize_row_iq4_nl_impl(QK_K, 32, src + QK_K*ibl, &iq4[ibl].d, iq4[ibl].qs, &iq4[ibl].scales_h, iq4[ibl].scales_l, - scales, weight, L, kvalues_iq4nl, qw, 7); - } - src += n_per_row; - qrow += nblock*sizeof(block_iq4_xs); - } - return nrow * nblock * sizeof(block_iq4_xs); -#endif -} - -void quantize_row_iq4_xs(const float * restrict x, void * restrict vy, int64_t k) { - assert(k % QK_K == 0); - block_iq4_xs * restrict y = vy; - quantize_row_iq4_xs_reference(x, y, k); -} - -void quantize_row_iq4_xs_reference(const float * restrict x, block_iq4_xs * restrict y, int64_t k) { - assert(k % QK_K == 0); - quantize_iq4_xs(x, y, 1, k, NULL); -} - -// =============================== 2.5625 bpw - -static void quantize_row_iq2_s_impl(const float * restrict x, void * restrict vy, int64_t n, const float * restrict quant_weights) { - - const int gindex = iq2_data_index(GGML_TYPE_IQ2_S); - - const uint64_t * kgrid_q2xs = iq2_data[gindex].grid; - const int * kmap_q2xs = iq2_data[gindex].map; - const uint16_t * kneighbors_q2xs = iq2_data[gindex].neighbours; - - GGML_ASSERT(kmap_q2xs && "forgot to call ggml_quantize_init()?"); - GGML_ASSERT(kgrid_q2xs && "forgot to call ggml_quantize_init()?"); - GGML_ASSERT(kneighbors_q2xs && "forgot to call ggml_quantize_init()?"); - GGML_ASSERT(n%QK_K == 0); - - const int kMaxQ = 3; - - const int64_t nbl = n/QK_K; - - block_iq2_s * y = vy; - - float scales[QK_K/16]; - float weight[16]; - float xval[16]; - int8_t L[16]; - int8_t Laux[16]; - float waux[16]; - bool is_on_grid[2]; - bool is_on_grid_aux[2]; - uint8_t block_signs[2]; - - for (int ibl = 0; ibl < nbl; ++ibl) { - - memset(&y[ibl], 0, sizeof(block_iq2_s)); - y[ibl].d = GGML_FP32_TO_FP16(0.f); - - float max_scale = 0; - - const float * xbl = x + QK_K*ibl; - float sumx2 = 0; - for (int i = 0; i < QK_K; ++i) sumx2 += xbl[i]*xbl[i]; - float sigma2 = 2*sumx2/QK_K; - - for (int ib = 0; ib < QK_K/16; ++ib) { - const float * xb = xbl + 16*ib; - if (quant_weights) { - const float * qw = quant_weights + QK_K*ibl + 16*ib; - for (int i = 0; i < 16; ++i) weight[i] = qw[i] * sqrtf(sigma2 + xb[i]*xb[i]); - } else { - for (int i = 0; i < 16; ++i) weight[i] = 0.25f*sigma2 + xb[i]*xb[i]; - } - for (int i = 0; i < 16; ++i) waux[i] = sqrtf(weight[i]); - for (int k = 0; k < 2; ++k) { - uint8_t s = 0; - for (int i = 0; i < 8; ++i) { - if (xb[8*k + i] >= 0) xval[8*k + i] = xb[8*k + i]; - else { - xval[8*k + i] = -xb[8*k + i]; s |= (1 << i); - } - } - block_signs[k] = s; - } - float max = xval[0]; - for (int i = 1; i < 16; ++i) max = MAX(max, xval[i]); - if (!max) { - scales[ib] = 0; - continue; - } - float best = 0; - float scale = max/(2*kMaxQ-1); - is_on_grid[0] = is_on_grid[1] = true; - for (int is = -9; is <= 9; ++is) { - float id = (2*kMaxQ-1+is*0.1f)/max; - float this_scale = 1/id; - for (int k = 0; k < 2; ++k) { - for (int i = 0; i < 8; ++i) { - int l = nearest_int(0.5f*(id*xval[8*k+i]-1)); - Laux[8*k+i] = MAX(0, MIN(kMaxQ-1, l)); - } - uint16_t u = 0; - for (int i = 0; i < 8; ++i) u |= (Laux[8*k+i] << 2*i); - int grid_index = kmap_q2xs[u]; - is_on_grid_aux[k] = true; - if (grid_index < 0) { - is_on_grid_aux[k] = false; - const uint16_t * neighbours = kneighbors_q2xs - kmap_q2xs[u] - 1; - grid_index = iq2_find_best_neighbour(neighbours, kgrid_q2xs, xval + 8*k, waux + 8*k, this_scale, Laux + 8*k); - } - } - float sumqx = 0, sumq2 = 0; - for (int i = 0; i < 16; ++i) { - float w = weight[i]; - float q = 2*Laux[i] + 1; - sumqx += w*xval[i]*q; - sumq2 += w*q*q; - } - if (sumq2 > 0 && sumqx*sumqx > best*sumq2) { - scale = sumqx/sumq2; best = scale*sumqx; - for (int i = 0; i < 16; ++i) L[i] = Laux[i]; - for (int k = 0; k < 2; ++k) is_on_grid[k] = is_on_grid_aux[k]; - } - } - int n_not_ongrid = 0; - for (int k = 0; k < 2; ++k) if (!is_on_grid[k]) ++n_not_ongrid; - if (n_not_ongrid > 0 && scale > 0) { - float id = 1/scale; - for (int k = 0; k < 2; ++k) { - if (is_on_grid[k]) continue; - uint16_t u = 0; - for (int i = 0; i < 8; ++i) { - int l = nearest_int(0.5f*(id*xval[8*k+i]-1)); - l = MAX(0, MIN(kMaxQ-1, l)); - u |= (l << 2*i); - L[8*k + i] = l; - } - int grid_index = kmap_q2xs[u]; - if (grid_index < 0) { - const uint16_t * neighbours = kneighbors_q2xs - kmap_q2xs[u] - 1; - grid_index = iq2_find_best_neighbour(neighbours, kgrid_q2xs, xval + 8*k, waux + 8*k, scale, L + 8*k); - } - } - float sumqx = 0, sumq2 = 0; - for (int i = 0; i < 16; ++i) { - float w = weight[i]; - float q = 2*L[i] + 1; - sumqx += w*xval[i]*q; - sumq2 += w*q*q; - } - if (sumq2 > 0) scale = sumqx/sumq2; - } - if (scale < 0) { - scale = -scale; - for (int k = 0; k < 2; ++k) block_signs[k] = ~block_signs[k]; - } - for (int k = 0; k < 2; ++k) { - uint16_t u = 0; - for (int i = 0; i < 8; ++i) u |= (L[8*k+i] << 2*i); - int grid_index = kmap_q2xs[u]; - if (grid_index < 0) { - printf("Oops: found point %u not on grid:", u); - for (int i = 0; i < 8; ++i) printf(" %d", L[8*k+i]); - printf("\n"); - GGML_ASSERT(false); - } - const int i8 = 2*ib + k; - y[ibl].qs[i8] = grid_index & 255; - y[ibl].qh[i8/4] |= ((grid_index >> 8) << 2*(i8%4)); - y[ibl].qs[QK_K/8 + i8] = block_signs[k]; - } - GGML_ASSERT(scale >= 0); - scales[ib] = scale; - max_scale = MAX(max_scale, scale); - } - - if (!max_scale) { - continue; - } - - float d = max_scale/31; - y[ibl].d = GGML_FP32_TO_FP16(d * 0.9875f); - float id = 1/d; - for (int ib = 0; ib < QK_K/16; ++ib) { - int l = nearest_int(0.5f*(id*scales[ib]-1)); - l = MAX(0, MIN(15, l)); - if (ib%2 == 0) y[ibl].scales[ib/2] = l; - else y[ibl].scales[ib/2] |= (l << 4); - } - } -} - -size_t quantize_iq2_s(const float * restrict src, void * restrict dst, int64_t nrow, int64_t n_per_row, const float * quant_weights) { - GGML_ASSERT(n_per_row%QK_K == 0); - int64_t nblock = n_per_row/QK_K; - char * qrow = (char *)dst; - for (int64_t row = 0; row < nrow; ++row) { - quantize_row_iq2_s_impl(src, qrow, n_per_row, quant_weights); - src += n_per_row; - qrow += nblock*sizeof(block_iq2_s); - } - return nrow * nblock * sizeof(block_iq2_s); -} - -void quantize_row_iq2_s_reference(const float * restrict x, block_iq2_s * restrict y, int64_t k) { - assert(k % QK_K == 0); - quantize_iq2_s(x, y, 1, k, NULL); -} - -void quantize_row_iq2_s(const float * restrict x, void * restrict vy, int64_t k) { - assert(k % QK_K == 0); - block_iq2_s * restrict y = vy; - quantize_row_iq2_s_reference(x, y, k); -} - -static bool validate_float(float f, size_t i) { - if (isinf(f)) { - fprintf(stderr, "ggml_validate_row_data: found inf value at block %zu\n", i); - return false; - } - - if (isnan(f)) { - fprintf(stderr, "ggml_validate_row_data: found nan value at block %zu\n", i); - return false; - } - - return true; -} - -static bool isinf_fp16(ggml_fp16_t f) { - return (f & 0x7c00) == 0x7c00 && (f & 0x03ff) == 0; -} - -static bool isnan_fp16(ggml_fp16_t f) { - return (f & 0x7c00) == 0x7c00 && (f & 0x03ff) != 0; -} - -static bool validate_fp16(ggml_fp16_t f, size_t i) { - if (isinf_fp16(f)) { - fprintf(stderr, "ggml_validate_row_data: found inf value at block %zu\n", i); - return false; - } - - if (isnan_fp16(f)) { - fprintf(stderr, "ggml_validate_row_data: found nan value at block %zu\n", i); - return false; - } - - return true; -} - -#define VALIDATE_ROW_DATA_D_F16_IMPL(type, data, nb) \ - const type * q = (const type *) (data); \ - for (size_t i = 0; i < (nb); ++i) { \ - if (!validate_fp16(q[i].d, i)) { \ - return false; \ - } \ - } - -#define VALIDATE_ROW_DATA_DM_F16_IMPL(type, data, nb, d, m) \ - const type * q = (const type *) (data); \ - for (size_t i = 0; i < (nb); ++i) { \ - if (!validate_fp16(q[i].d, i) || !validate_fp16(q[i].m, i)) { \ - return false; \ - } \ - } - -bool ggml_validate_row_data(enum ggml_type type, const void * data, size_t nbytes) { - if (type < 0 || type >= GGML_TYPE_COUNT) { - fprintf(stderr, "%s: invalid type %d\n", __func__, type); - return false; - } - - if (nbytes % ggml_type_size(type) != 0) { - fprintf(stderr, "%s: invalid size %zu for type %d\n", __func__, nbytes, type); - return false; - } - - const size_t nb = nbytes/ggml_type_size(type); - - switch (type) { - case GGML_TYPE_F16: - { - const ggml_fp16_t * f = (const ggml_fp16_t *) data; - size_t i = 0; -#if defined(__AVX2__) - for (; i + 15 < nb; i += 16) { - __m256i v = _mm256_loadu_si256((const __m256i *)(f + i)); - __m256i vexp = _mm256_and_si256(v, _mm256_set1_epi16(0x7c00)); - __m256i cmp = _mm256_cmpeq_epi16(vexp, _mm256_set1_epi16(0x7c00)); - int mask = _mm256_movemask_epi8(cmp); - if (mask) { - for (size_t j = 0; j < 16; ++j) { - if (!validate_fp16(f[i + j], i + j)) { - return false; - } - } - GGML_UNREACHABLE(); - } - } -#elif defined(__ARM_NEON) - for (; i + 7 < nb; i += 8) { - uint16x8_t v = vld1q_u16(f + i); - uint16x8_t vexp = vandq_u16(v, vdupq_n_u16(0x7c00)); - uint16x8_t cmp = vceqq_u16(vexp, vdupq_n_u16(0x7c00)); - uint64_t mask = vget_lane_u64(vreinterpret_u64_u8(vshrn_n_u16(cmp, 4)), 0); - if (mask) { - for (size_t j = 0; j < 8; ++j) { - if (!validate_fp16(f[i + j], i + j)) { - return false; - } - } - GGML_UNREACHABLE(); - } - } -#endif - for (; i < nb; ++i) { - if (!validate_fp16(f[i], i)) { - return false; - } - } - } break; - case GGML_TYPE_F32: - { - const float * f = (const float *) data; - size_t i = 0; -#if defined(__AVX2__) - for (; i + 7 < nb; i += 8) { - __m256i v = _mm256_loadu_si256((const __m256i *)(f + i)); - __m256i vexp = _mm256_and_si256(v, _mm256_set1_epi32(0x7f800000)); - __m256i cmp = _mm256_cmpeq_epi32(vexp, _mm256_set1_epi32(0x7f800000)); - int mask = _mm256_movemask_epi8(cmp); - if (mask) { - for (size_t j = 0; j < 8; ++j) { - if (!validate_float(f[i + j], i + j)) { - return false; - } - } - GGML_UNREACHABLE(); - } - } -#elif defined(__ARM_NEON) - for (; i + 3 < nb; i += 4) { - uint32x4_t v = vld1q_u32((const uint32_t *)f + i); - uint32x4_t vexp = vandq_u32(v, vdupq_n_u32(0x7f800000)); - uint32x4_t cmp = vceqq_u32(vexp, vdupq_n_u32(0x7f800000)); - uint64_t mask = vget_lane_u64(vreinterpret_u64_u16(vshrn_n_u32(cmp, 8)), 0); - if (mask) { - for (size_t j = 0; j < 4; ++j) { - if (!validate_float(f[i + j], i + j)) { - return false; - } - } - GGML_UNREACHABLE(); - } - } -#endif - for (; i < nb; ++i) { - if (!validate_float(f[i], i)) { - return false; - } - } - } break; - case GGML_TYPE_F64: - { - const double * f = (const double *) data; - for (size_t i = 0; i < nb; ++i) { - if (!validate_float(f[i], i)) { - return false; - } - } - } break; - case GGML_TYPE_Q4_0: - { - VALIDATE_ROW_DATA_D_F16_IMPL(block_q4_0, data, nb); - } break; - case GGML_TYPE_Q4_1: - { - VALIDATE_ROW_DATA_DM_F16_IMPL(block_q4_1, data, nb, d, m); - } break; - case GGML_TYPE_Q5_0: - { - VALIDATE_ROW_DATA_D_F16_IMPL(block_q5_0, data, nb); - } break; - case GGML_TYPE_Q5_1: - { - VALIDATE_ROW_DATA_DM_F16_IMPL(block_q5_1, data, nb, d, m); - } break; - case GGML_TYPE_Q8_0: - { - VALIDATE_ROW_DATA_D_F16_IMPL(block_q8_0, data, nb); - } break; - case GGML_TYPE_Q2_K: - { - VALIDATE_ROW_DATA_DM_F16_IMPL(block_q2_K, data, nb, d, dmin); - } break; - case GGML_TYPE_Q3_K: - { - VALIDATE_ROW_DATA_D_F16_IMPL(block_q3_K, data, nb); - } break; - case GGML_TYPE_Q4_K: - { - #ifdef GGML_QKK_64 - VALIDATE_ROW_DATA_DM_F16_IMPL(block_q4_K, data, nb, d[0], d[1]); - #else - VALIDATE_ROW_DATA_DM_F16_IMPL(block_q4_K, data, nb, d, dmin); - #endif - } break; - case GGML_TYPE_Q5_K: - { - #ifdef GGML_QKK_64 - VALIDATE_ROW_DATA_D_F16_IMPL(block_q5_K, data, nb); - #else - VALIDATE_ROW_DATA_DM_F16_IMPL(block_q5_K, data, nb, d, dmin); - #endif - } break; - case GGML_TYPE_Q6_K: - { - VALIDATE_ROW_DATA_D_F16_IMPL(block_q6_K, data, nb); - } break; - case GGML_TYPE_Q8_K: - { - const block_q8_K * q = (const block_q8_K *) data; - for (size_t i = 0; i < nb; ++i) { - if (!validate_float(q[i].d, i)) { - return false; - } - } - } break; - case GGML_TYPE_IQ1_S: - { - VALIDATE_ROW_DATA_D_F16_IMPL(block_iq1_s, data, nb); - } break; - case GGML_TYPE_IQ1_M: - { - const block_iq1_m * q = (const block_iq1_m *) data; - for (size_t i = 0; i < nb; ++i) { - #if QK_K == 64 - if (!validate_fp16(q[i].d, i)) { - return false; - } - #else - iq1m_scale_t scale; - const uint16_t * sc = (const uint16_t *)q[i].scales; - scale.u16 = (sc[0] >> 12) | ((sc[1] >> 8) & 0x00f0) | ((sc[2] >> 4) & 0x0f00) | (sc[3] & 0xf000); - if (!validate_fp16(scale.f16, i)) { - return false; - } - #endif - } - } break; - case GGML_TYPE_IQ2_XXS: - { - VALIDATE_ROW_DATA_D_F16_IMPL(block_iq2_xxs, data, nb); - } break; - case GGML_TYPE_IQ2_XS: - { - VALIDATE_ROW_DATA_D_F16_IMPL(block_iq2_xs, data, nb); - } break; - case GGML_TYPE_IQ2_S: - { - VALIDATE_ROW_DATA_D_F16_IMPL(block_iq2_s, data, nb); - } break; - case GGML_TYPE_IQ3_XXS: - { - VALIDATE_ROW_DATA_D_F16_IMPL(block_iq3_xxs, data, nb); - } break; - - case GGML_TYPE_IQ3_S: - { - VALIDATE_ROW_DATA_D_F16_IMPL(block_iq3_s, data, nb); - } break; - case GGML_TYPE_IQ4_XS: - #if QK_K != 64 - { - VALIDATE_ROW_DATA_D_F16_IMPL(block_iq4_xs, data, nb); - } break; - #endif - // with QK_K == 64, iq4_xs is iq4_nl - case GGML_TYPE_IQ4_NL: - { - VALIDATE_ROW_DATA_D_F16_IMPL(block_iq4_nl, data, nb); - } break; - case GGML_TYPE_I8: - case GGML_TYPE_I16: - case GGML_TYPE_I32: - case GGML_TYPE_I64: - // nothing to validate - break; - default: - { - fprintf(stderr, "%s: invalid type %d\n", __func__, type); - return false; - } - } - - return true; -} diff --git a/ggml-quants.h b/ggml-quants.h deleted file mode 100644 index 4d436a8f06b..00000000000 --- a/ggml-quants.h +++ /dev/null @@ -1,133 +0,0 @@ -#pragma once - -#define GGML_COMMON_DECL_C -#include "ggml-common.h" - -#include "ggml.h" - -// GGML internal header - -#ifdef __cplusplus -extern "C" { -#endif - -// Quantization -void quantize_row_q4_0_reference(const float * GGML_RESTRICT x, block_q4_0 * GGML_RESTRICT y, int64_t k); -void quantize_row_q4_1_reference(const float * GGML_RESTRICT x, block_q4_1 * GGML_RESTRICT y, int64_t k); -void quantize_row_q5_0_reference(const float * GGML_RESTRICT x, block_q5_0 * GGML_RESTRICT y, int64_t k); -void quantize_row_q5_1_reference(const float * GGML_RESTRICT x, block_q5_1 * GGML_RESTRICT y, int64_t k); -void quantize_row_q8_0_reference(const float * GGML_RESTRICT x, block_q8_0 * GGML_RESTRICT y, int64_t k); -void quantize_row_q8_1_reference(const float * GGML_RESTRICT x, block_q8_1 * GGML_RESTRICT y, int64_t k); - -void quantize_row_q2_K_reference(const float * GGML_RESTRICT x, block_q2_K * GGML_RESTRICT y, int64_t k); -void quantize_row_q3_K_reference(const float * GGML_RESTRICT x, block_q3_K * GGML_RESTRICT y, int64_t k); -void quantize_row_q4_K_reference(const float * GGML_RESTRICT x, block_q4_K * GGML_RESTRICT y, int64_t k); -void quantize_row_q5_K_reference(const float * GGML_RESTRICT x, block_q5_K * GGML_RESTRICT y, int64_t k); -void quantize_row_q6_K_reference(const float * GGML_RESTRICT x, block_q6_K * GGML_RESTRICT y, int64_t k); -void quantize_row_q8_K_reference(const float * GGML_RESTRICT x, block_q8_K * GGML_RESTRICT y, int64_t k); - -void quantize_row_iq3_xxs_reference(const float * GGML_RESTRICT x, block_iq3_xxs * GGML_RESTRICT y, int64_t k); -void quantize_row_iq4_nl_reference (const float * GGML_RESTRICT x, block_iq4_nl * GGML_RESTRICT y, int64_t k); -void quantize_row_iq4_xs_reference (const float * GGML_RESTRICT x, block_iq4_xs * GGML_RESTRICT y, int64_t k); -void quantize_row_iq3_s_reference (const float * GGML_RESTRICT x, block_iq3_s * GGML_RESTRICT y, int64_t k); -void quantize_row_iq2_s_reference (const float * GGML_RESTRICT x, block_iq2_s * GGML_RESTRICT y, int64_t k); - -void quantize_row_q4_0(const float * GGML_RESTRICT x, void * GGML_RESTRICT y, int64_t k); -void quantize_row_q4_1(const float * GGML_RESTRICT x, void * GGML_RESTRICT y, int64_t k); -void quantize_row_q5_0(const float * GGML_RESTRICT x, void * GGML_RESTRICT y, int64_t k); -void quantize_row_q5_1(const float * GGML_RESTRICT x, void * GGML_RESTRICT y, int64_t k); -void quantize_row_q8_0(const float * GGML_RESTRICT x, void * GGML_RESTRICT y, int64_t k); -void quantize_row_q8_1(const float * GGML_RESTRICT x, void * GGML_RESTRICT y, int64_t k); - -void quantize_row_q2_K(const float * GGML_RESTRICT x, void * GGML_RESTRICT y, int64_t k); -void quantize_row_q3_K(const float * GGML_RESTRICT x, void * GGML_RESTRICT y, int64_t k); -void quantize_row_q4_K(const float * GGML_RESTRICT x, void * GGML_RESTRICT y, int64_t k); -void quantize_row_q5_K(const float * GGML_RESTRICT x, void * GGML_RESTRICT y, int64_t k); -void quantize_row_q6_K(const float * GGML_RESTRICT x, void * GGML_RESTRICT y, int64_t k); -void quantize_row_q8_K(const float * GGML_RESTRICT x, void * GGML_RESTRICT y, int64_t k); - -void quantize_row_iq3_xxs(const float * GGML_RESTRICT x, void * GGML_RESTRICT y, int64_t k); -void quantize_row_iq4_nl (const float * GGML_RESTRICT x, void * GGML_RESTRICT y, int64_t k); -void quantize_row_iq4_xs (const float * GGML_RESTRICT x, void * GGML_RESTRICT y, int64_t k); -void quantize_row_iq3_s (const float * GGML_RESTRICT x, void * GGML_RESTRICT y, int64_t k); -void quantize_row_iq2_s (const float * GGML_RESTRICT x, void * GGML_RESTRICT y, int64_t k); - -// Dequantization -void dequantize_row_q4_0(const block_q4_0 * GGML_RESTRICT x, float * GGML_RESTRICT y, int64_t k); -void dequantize_row_q4_1(const block_q4_1 * GGML_RESTRICT x, float * GGML_RESTRICT y, int64_t k); -void dequantize_row_q5_0(const block_q5_0 * GGML_RESTRICT x, float * GGML_RESTRICT y, int64_t k); -void dequantize_row_q5_1(const block_q5_1 * GGML_RESTRICT x, float * GGML_RESTRICT y, int64_t k); -void dequantize_row_q8_0(const block_q8_0 * GGML_RESTRICT x, float * GGML_RESTRICT y, int64_t k); -//void dequantize_row_q8_1(const block_q8_1 * GGML_RESTRICT x, float * GGML_RESTRICT y, int64_t k); - -void dequantize_row_q2_K(const block_q2_K * GGML_RESTRICT x, float * GGML_RESTRICT y, int64_t k); -void dequantize_row_q3_K(const block_q3_K * GGML_RESTRICT x, float * GGML_RESTRICT y, int64_t k); -void dequantize_row_q4_K(const block_q4_K * GGML_RESTRICT x, float * GGML_RESTRICT y, int64_t k); -void dequantize_row_q5_K(const block_q5_K * GGML_RESTRICT x, float * GGML_RESTRICT y, int64_t k); -void dequantize_row_q6_K(const block_q6_K * GGML_RESTRICT x, float * GGML_RESTRICT y, int64_t k); -void dequantize_row_q8_K(const block_q8_K * GGML_RESTRICT x, float * GGML_RESTRICT y, int64_t k); - -void dequantize_row_iq2_xxs(const block_iq2_xxs * GGML_RESTRICT x, float * GGML_RESTRICT y, int64_t k); -void dequantize_row_iq2_xs (const block_iq2_xs * GGML_RESTRICT x, float * GGML_RESTRICT y, int64_t k); -void dequantize_row_iq2_s (const block_iq2_s * GGML_RESTRICT x, float * GGML_RESTRICT y, int64_t k); -void dequantize_row_iq3_xxs(const block_iq3_xxs * GGML_RESTRICT x, float * GGML_RESTRICT y, int64_t k); -void dequantize_row_iq1_s (const block_iq1_s * GGML_RESTRICT x, float * GGML_RESTRICT y, int64_t k); -void dequantize_row_iq1_m (const block_iq1_m * GGML_RESTRICT x, float * GGML_RESTRICT y, int64_t k); -void dequantize_row_iq4_nl (const block_iq4_nl * GGML_RESTRICT x, float * GGML_RESTRICT y, int64_t k); -void dequantize_row_iq4_xs (const block_iq4_xs * GGML_RESTRICT x, float * GGML_RESTRICT y, int64_t k); -void dequantize_row_iq3_s (const block_iq3_s * GGML_RESTRICT x, float * GGML_RESTRICT y, int64_t k); - -// Dot product -void ggml_vec_dot_q4_0_q8_0(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc); -void ggml_vec_dot_q4_1_q8_1(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc); -void ggml_vec_dot_q5_0_q8_0(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc); -void ggml_vec_dot_q5_1_q8_1(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc); -void ggml_vec_dot_q8_0_q8_0(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc); - -void ggml_vec_dot_q2_K_q8_K(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc); -void ggml_vec_dot_q3_K_q8_K(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc); -void ggml_vec_dot_q4_K_q8_K(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc); -void ggml_vec_dot_q5_K_q8_K(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc); -void ggml_vec_dot_q6_K_q8_K(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc); - -void ggml_vec_dot_iq2_xxs_q8_K(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc); -void ggml_vec_dot_iq2_xs_q8_K (int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc); -void ggml_vec_dot_iq2_s_q8_K (int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc); -void ggml_vec_dot_iq3_xxs_q8_K(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc); -void ggml_vec_dot_iq1_s_q8_K (int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc); -void ggml_vec_dot_iq1_m_q8_K (int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc); -void ggml_vec_dot_iq4_nl_q8_0 (int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc); -void ggml_vec_dot_iq4_xs_q8_K (int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc); -void ggml_vec_dot_iq3_s_q8_K (int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc); - -// Quantization utilizing an importance matrix (a.k.a. "Activation aWare Quantization") -size_t quantize_iq2_xxs(const float * GGML_RESTRICT src, void * GGML_RESTRICT dst, int64_t nrows, int64_t n_per_row, const float * imatrix); -size_t quantize_iq2_xs (const float * GGML_RESTRICT src, void * GGML_RESTRICT dst, int64_t nrows, int64_t n_per_row, const float * imatrix); -size_t quantize_iq2_s (const float * GGML_RESTRICT src, void * GGML_RESTRICT dst, int64_t nrows, int64_t n_per_row, const float * imatrix); -size_t quantize_iq3_xxs(const float * GGML_RESTRICT src, void * GGML_RESTRICT dst, int64_t nrows, int64_t n_per_row, const float * imatrix); -size_t quantize_iq1_s (const float * GGML_RESTRICT src, void * GGML_RESTRICT dst, int64_t nrows, int64_t n_per_row, const float * imatrix); -size_t quantize_iq1_m (const float * GGML_RESTRICT src, void * GGML_RESTRICT dst, int64_t nrows, int64_t n_per_row, const float * imatrix); -size_t quantize_iq4_nl (const float * GGML_RESTRICT src, void * GGML_RESTRICT dst, int64_t nrows, int64_t n_per_row, const float * imatrix); -size_t quantize_iq4_xs (const float * GGML_RESTRICT src, void * GGML_RESTRICT dst, int64_t nrows, int64_t n_per_row, const float * imatrix); -size_t quantize_iq3_s (const float * GGML_RESTRICT src, void * GGML_RESTRICT dst, int64_t nrows, int64_t n_per_row, const float * imatrix); - -size_t quantize_q2_K(const float * GGML_RESTRICT src, void * GGML_RESTRICT dst, int64_t nrows, int64_t n_per_row, const float * imatrix); -size_t quantize_q3_K(const float * GGML_RESTRICT src, void * GGML_RESTRICT dst, int64_t nrows, int64_t n_per_row, const float * imatrix); -size_t quantize_q4_K(const float * GGML_RESTRICT src, void * GGML_RESTRICT dst, int64_t nrows, int64_t n_per_row, const float * imatrix); -size_t quantize_q5_K(const float * GGML_RESTRICT src, void * GGML_RESTRICT dst, int64_t nrows, int64_t n_per_row, const float * imatrix); -size_t quantize_q6_K(const float * GGML_RESTRICT src, void * GGML_RESTRICT dst, int64_t nrows, int64_t n_per_row, const float * imatrix); -size_t quantize_q4_0(const float * GGML_RESTRICT src, void * GGML_RESTRICT dst, int64_t nrows, int64_t n_per_row, const float * imatrix); -size_t quantize_q4_1(const float * GGML_RESTRICT src, void * GGML_RESTRICT dst, int64_t nrows, int64_t n_per_row, const float * imatrix); -size_t quantize_q5_0(const float * GGML_RESTRICT src, void * GGML_RESTRICT dst, int64_t nrows, int64_t n_per_row, const float * imatrix); -size_t quantize_q5_1(const float * GGML_RESTRICT src, void * GGML_RESTRICT dst, int64_t nrows, int64_t n_per_row, const float * imatrix); -size_t quantize_q8_0(const float * GGML_RESTRICT src, void * GGML_RESTRICT dst, int64_t nrows, int64_t n_per_row, const float * imatrix); - -void iq2xs_init_impl(enum ggml_type type); -void iq2xs_free_impl(enum ggml_type type); -void iq3xs_init_impl(int grid_size); -void iq3xs_free_impl(int grid_size); - -#ifdef __cplusplus -} -#endif - diff --git a/ggml-sycl.cpp b/ggml-sycl.cpp deleted file mode 100644 index 2b76b3ebd64..00000000000 --- a/ggml-sycl.cpp +++ /dev/null @@ -1,17888 +0,0 @@ -// -// MIT license -// Copyright (C) 2024 Intel Corporation -// SPDX-License-Identifier: MIT -// - -// -// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. -// See https://llvm.org/LICENSE.txt for license information. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -// - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -#include "ggml-sycl.h" -#include "ggml.h" -#include "ggml-backend-impl.h" - -/* -Following definition copied from DPCT head files, which are used by ggml-sycl.cpp -*/ -// COPY from DPCT head files -#include -#include -#include - -#if defined(__linux__) -#include -#elif defined(_WIN64) -#ifndef NOMINMAX -#define NOMINMAX -#endif -#include -#else -#error "Only support Windows and Linux." -#endif - -#if defined(__linux__) -#include -#include -#endif -#if defined(_WIN64) -#ifndef NOMINMAX -#define NOMINMAX -#endif -#include -#endif - -#define DPCT_COMPATIBILITY_TEMP (900) - -#if defined(_MSC_VER) -#define __dpct_align__(n) __declspec(align(n)) -#define __dpct_inline__ __forceinline -#else -#define __dpct_align__(n) __attribute__((aligned(n))) -#define __dpct_inline__ __inline__ __attribute__((always_inline)) -#endif - -#if defined(_MSC_VER) -#define __dpct_noinline__ __declspec(noinline) -#else -#define __dpct_noinline__ __attribute__((noinline)) -#endif - - -std::string get_device_type_name(const sycl::device &Device) { - auto DeviceType = Device.get_info(); - switch (DeviceType) { - case sycl::info::device_type::cpu: - return "cpu"; - case sycl::info::device_type::gpu: - return "gpu"; - case sycl::info::device_type::host: - return "host"; - case sycl::info::device_type::accelerator: - return "acc"; - default: - return "unknown"; - } -} - -std::string get_device_backend_and_type(const sycl::device &device) { - std::stringstream device_type; - sycl::backend backend = device.get_backend(); - device_type << backend << ":" << get_device_type_name(device); - return device_type.str(); -} - -namespace dpct -{ - typedef sycl::queue *queue_ptr; - typedef sycl::event *event_ptr; - typedef char *device_ptr; - typedef uint8_t byte_t; - typedef sycl::buffer buffer_t; - - /// SYCL default exception handler - inline auto exception_handler = [](sycl::exception_list exceptions) - { - for (std::exception_ptr const &e : exceptions) - { - try - { - std::rethrow_exception(e); - } - catch (sycl::exception const &e) - { - std::cerr << "Caught asynchronous SYCL exception:" << std::endl - << e.what() << std::endl - << "Exception caught at file:" << __FILE__ - << ", line:" << __LINE__ << std::endl; - } - } - }; - - enum error_code - { - success = 0, - default_error = 999 - }; - - enum memcpy_direction - { - host_to_host, - host_to_device, - device_to_host, - device_to_device, - automatic - }; - - enum memory_region - { - global = 0, // device global memory - constant, // device constant memory - local, // device local memory - shared, // memory which can be accessed by host and device - }; - - enum class library_data_t : unsigned char - { - real_float = 0, - complex_float, - real_double, - complex_double, - real_half, - complex_half, - real_bfloat16, - complex_bfloat16, - real_int4, - complex_int4, - real_uint4, - complex_uint4, - real_int8, - complex_int8, - real_uint8, - complex_uint8, - real_int16, - complex_int16, - real_uint16, - complex_uint16, - real_int32, - complex_int32, - real_uint32, - complex_uint32, - real_int64, - complex_int64, - real_uint64, - complex_uint64, - real_int8_4, - real_int8_32, - real_uint8_4, - library_data_t_size - }; - - template - struct DataType - { - using T2 = T; - }; - template - struct DataType> - { - using T2 = std::complex; - }; - - static void destroy_event(event_ptr event) - { - delete event; - } - - static inline unsigned int get_tid() - { -#if defined(__linux__) - return syscall(SYS_gettid); -#elif defined(_WIN64) - return GetCurrentThreadId(); -#else -#error "Only support Windows and Linux." -#endif - } - - namespace detail - { - static void get_version(const sycl::device &dev, int &major, int &minor) - { - // Version string has the following format: - // a. OpenCL - // b. - // c. e.g gfx1030 - std::string ver; - ver = dev.get_info(); - std::string::size_type i = 0; - while (i < ver.size()) { - if (isdigit(ver[i])) - break; - i++; - } - major = std::stoi(&(ver[i])); - while (i < ver.size()) { - if (ver[i] == '.') - break; - i++; - } - if (i < ver.size()) { - // a. and b. - i++; - minor = std::stoi(&(ver[i])); - } else { - // c. - minor = 0; - } - } - - template - class generic_error_type - { - public: - generic_error_type() = default; - generic_error_type(T value) : value{value} {} - operator T() const { return value; } - - private: - T value; - }; - - } // namespace detail - - /// Pitched 2D/3D memory data. - class pitched_data - { - public: - pitched_data() : pitched_data(nullptr, 0, 0, 0) {} - pitched_data(void *data, size_t pitch, size_t x, size_t y) - : _data(data), _pitch(pitch), _x(x), _y(y) {} - - void *get_data_ptr() { return _data; } - void set_data_ptr(void *data) { _data = data; } - - size_t get_pitch() { return _pitch; } - void set_pitch(size_t pitch) { _pitch = pitch; } - - size_t get_x() { return _x; } - void set_x(size_t x) { _x = x; }; - - size_t get_y() { return _y; } - void set_y(size_t y) { _y = y; } - - private: - void *_data; - size_t _pitch, _x, _y; - }; - - class device_info - { - public: - // get interface - const char *get_name() const { return _name; } - char *get_name() { return _name; } - template , - std::enable_if_t> || - std::is_same_v, - int> = 0> - auto get_max_work_item_sizes() const - { - if constexpr (std::is_same_v>) - return sycl::range<3>(_max_work_item_sizes_i[0], - _max_work_item_sizes_i[1], - _max_work_item_sizes_i[2]); - else - { - return _max_work_item_sizes_i; - } - } - template , - std::enable_if_t> || - std::is_same_v, - int> = 0> - auto get_max_work_item_sizes() - { - if constexpr (std::is_same_v>) - return sycl::range<3>(_max_work_item_sizes_i[0], - _max_work_item_sizes_i[1], - _max_work_item_sizes_i[2]); - else - { - return _max_work_item_sizes_i; - } - } - bool get_host_unified_memory() const { return _host_unified_memory; } - int get_major_version() const { return _major; } - int get_minor_version() const { return _minor; } - int get_integrated() const { return _integrated; } - int get_max_clock_frequency() const { return _frequency; } - int get_max_compute_units() const { return _max_compute_units; } - int get_max_work_group_size() const { return _max_work_group_size; } - int get_max_sub_group_size() const { return _max_sub_group_size; } - int get_max_work_items_per_compute_unit() const - { - return _max_work_items_per_compute_unit; - } - int get_max_register_size_per_work_group() const - { - return _max_register_size_per_work_group; - } - template || - std::is_same_v, - int> = 0> - auto get_max_nd_range_size() const - { - if constexpr (std::is_same_v) - return _max_nd_range_size; - else - return _max_nd_range_size_i; - } - template || - std::is_same_v, - int> = 0> - auto get_max_nd_range_size() - { - if constexpr (std::is_same_v) - return _max_nd_range_size; - else - return _max_nd_range_size_i; - } - size_t get_global_mem_size() const { return _global_mem_size; } - size_t get_local_mem_size() const { return _local_mem_size; } - size_t get_max_mem_alloc_size() const { return _max_mem_alloc_size; } - /// Returns the maximum clock rate of device's global memory in kHz. If - /// compiler does not support this API then returns default value 3200000 kHz. - unsigned int get_memory_clock_rate() const { return _memory_clock_rate; } - /// Returns the maximum bus width between device and memory in bits. If - /// compiler does not support this API then returns default value 64 bits. - unsigned int get_memory_bus_width() const { return _memory_bus_width; } - uint32_t get_device_id() const { return _device_id; } - std::array get_uuid() const { return _uuid; } - /// Returns global memory cache size in bytes. - unsigned int get_global_mem_cache_size() const - { - return _global_mem_cache_size; - } - - // set interface - void set_name(const char *name) - { - size_t length = strlen(name); - if (length < 256) - { - std::memcpy(_name, name, length + 1); - } - else - { - std::memcpy(_name, name, 255); - _name[255] = '\0'; - } - } - void set_max_work_item_sizes(const sycl::range<3> max_work_item_sizes) - { - for (int i = 0; i < 3; ++i) - _max_work_item_sizes_i[i] = max_work_item_sizes[i]; - } - [[deprecated]] void - set_max_work_item_sizes(const sycl::id<3> max_work_item_sizes) - { - for (int i = 0; i < 3; ++i) - { - _max_work_item_sizes_i[i] = max_work_item_sizes[i]; - } - } - void set_host_unified_memory(bool host_unified_memory) - { - _host_unified_memory = host_unified_memory; - } - void set_major_version(int major) { _major = major; } - void set_minor_version(int minor) { _minor = minor; } - void set_integrated(int integrated) { _integrated = integrated; } - void set_max_clock_frequency(int frequency) { _frequency = frequency; } - void set_max_compute_units(int max_compute_units) - { - _max_compute_units = max_compute_units; - } - void set_global_mem_size(size_t global_mem_size) - { - _global_mem_size = global_mem_size; - } - void set_local_mem_size(size_t local_mem_size) - { - _local_mem_size = local_mem_size; - } - void set_max_mem_alloc_size(size_t max_mem_alloc_size) - { - _max_mem_alloc_size = max_mem_alloc_size; - } - void set_max_work_group_size(int max_work_group_size) - { - _max_work_group_size = max_work_group_size; - } - void set_max_sub_group_size(int max_sub_group_size) - { - _max_sub_group_size = max_sub_group_size; - } - void - set_max_work_items_per_compute_unit(int max_work_items_per_compute_unit) - { - _max_work_items_per_compute_unit = max_work_items_per_compute_unit; - } - void set_max_nd_range_size(int max_nd_range_size[]) - { - for (int i = 0; i < 3; i++) - { - _max_nd_range_size[i] = max_nd_range_size[i]; - _max_nd_range_size_i[i] = max_nd_range_size[i]; - } - } - void set_memory_clock_rate(unsigned int memory_clock_rate) - { - _memory_clock_rate = memory_clock_rate; - } - void set_memory_bus_width(unsigned int memory_bus_width) - { - _memory_bus_width = memory_bus_width; - } - void - set_max_register_size_per_work_group(int max_register_size_per_work_group) - { - _max_register_size_per_work_group = max_register_size_per_work_group; - } - void set_device_id(uint32_t device_id) - { - _device_id = device_id; - } - void set_uuid(std::array uuid) - { - _uuid = std::move(uuid); - } - void set_global_mem_cache_size(unsigned int global_mem_cache_size) - { - _global_mem_cache_size = global_mem_cache_size; - } - - private: - char _name[256]; - int _max_work_item_sizes_i[3]; - bool _host_unified_memory = false; - int _major; - int _minor; - int _integrated = 0; - int _frequency; - // Set estimated value 3200000 kHz as default value. - unsigned int _memory_clock_rate = 3200000; - // Set estimated value 64 bits as default value. - unsigned int _memory_bus_width = 64; - unsigned int _global_mem_cache_size; - int _max_compute_units; - int _max_work_group_size; - int _max_sub_group_size; - int _max_work_items_per_compute_unit; - int _max_register_size_per_work_group; - size_t _global_mem_size; - size_t _local_mem_size; - size_t _max_mem_alloc_size; - size_t _max_nd_range_size[3]; - int _max_nd_range_size_i[3]; - uint32_t _device_id; - std::array _uuid; - }; - - static int get_major_version(const sycl::device &dev) - { - int major, minor; - detail::get_version(dev, major, minor); - return major; - } - - static int get_minor_version(const sycl::device &dev) - { - int major, minor; - detail::get_version(dev, major, minor); - return minor; - } - - static void get_device_info(device_info &out, const sycl::device &dev) - { - device_info prop; - prop.set_name(dev.get_info().c_str()); - - int major, minor; - detail::get_version(dev, major, minor); - prop.set_major_version(major); - prop.set_minor_version(minor); - - prop.set_max_work_item_sizes( -#if (__SYCL_COMPILER_VERSION && __SYCL_COMPILER_VERSION < 20220902) - // oneAPI DPC++ compiler older than 2022/09/02, where max_work_item_sizes - // is an enum class element - dev.get_info()); -#else - // SYCL 2020-conformant code, max_work_item_sizes is a struct templated by - // an int - dev.get_info>()); -#endif - prop.set_host_unified_memory(dev.has(sycl::aspect::usm_host_allocations)); - - prop.set_max_clock_frequency( - dev.get_info() * 1000); - - prop.set_max_compute_units( - dev.get_info()); - prop.set_max_work_group_size( - dev.get_info()); - prop.set_global_mem_size(dev.get_info()); - prop.set_local_mem_size(dev.get_info()); - prop.set_max_mem_alloc_size(dev.get_info()); - -#if (defined(SYCL_EXT_INTEL_DEVICE_INFO) && SYCL_EXT_INTEL_DEVICE_INFO >= 6) - if (dev.has(sycl::aspect::ext_intel_memory_clock_rate)) - { - unsigned int tmp = - dev.get_info(); - if (tmp != 0) - prop.set_memory_clock_rate(1000 * tmp); - } - if (dev.has(sycl::aspect::ext_intel_memory_bus_width)) - { - prop.set_memory_bus_width( - dev.get_info()); - } - if (dev.has(sycl::aspect::ext_intel_device_id)) - { - prop.set_device_id( - dev.get_info()); - } - if (dev.has(sycl::aspect::ext_intel_device_info_uuid)) - { - prop.set_uuid(dev.get_info()); - } -#elif defined(_MSC_VER) && !defined(__clang__) -#pragma message("get_device_info: querying memory_clock_rate and \ - memory_bus_width are not supported by the compiler used. \ - Use 3200000 kHz as memory_clock_rate default value. \ - Use 64 bits as memory_bus_width default value.") -#else -#warning "get_device_info: querying memory_clock_rate and \ - memory_bus_width are not supported by the compiler used. \ - Use 3200000 kHz as memory_clock_rate default value. \ - Use 64 bits as memory_bus_width default value." -#endif - - size_t max_sub_group_size = 1; - std::vector sub_group_sizes = - dev.get_info(); - - for (const auto &sub_group_size : sub_group_sizes) - { - if (max_sub_group_size < sub_group_size) - max_sub_group_size = sub_group_size; - } - - prop.set_max_sub_group_size(max_sub_group_size); - - prop.set_max_work_items_per_compute_unit( - dev.get_info()); - int max_nd_range_size[] = {0x7FFFFFFF, 0x7FFFFFFF, 0x7FFFFFFF}; - prop.set_max_nd_range_size(max_nd_range_size); - - // Estimates max register size per work group, feel free to update the value - // according to device properties. - prop.set_max_register_size_per_work_group(65536); - - prop.set_global_mem_cache_size( - dev.get_info()); - out = prop; - } - - /// dpct device extension - class device_ext : public sycl::device - { - typedef std::mutex mutex_type; - - public: - device_ext() : sycl::device(), _ctx(*this) {} - ~device_ext() - { - std::lock_guard lock(m_mutex); - clear_queues(); - } - device_ext(const sycl::device &base) : sycl::device(base), _ctx(*this) - { - std::lock_guard lock(m_mutex); - init_queues(); - } - - int is_native_atomic_supported() { return 0; } - int get_major_version() const - { - return dpct::get_major_version(*this); - } - - int get_minor_version() const - { - return dpct::get_minor_version(*this); - } - - int get_max_compute_units() const - { - return get_device_info().get_max_compute_units(); - } - - /// Return the maximum clock frequency of this device in KHz. - int get_max_clock_frequency() const - { - return get_device_info().get_max_clock_frequency(); - } - - int get_integrated() const { return get_device_info().get_integrated(); } - - int get_max_sub_group_size() const - { - return get_device_info().get_max_sub_group_size(); - } - - int get_max_register_size_per_work_group() const - { - return get_device_info().get_max_register_size_per_work_group(); - } - - int get_max_work_group_size() const - { - return get_device_info().get_max_work_group_size(); - } - - int get_mem_base_addr_align() const - { - return get_info(); - } - - size_t get_global_mem_size() const - { - return get_device_info().get_global_mem_size(); - } - - size_t get_max_mem_alloc_size() const - { - return get_device_info().get_max_mem_alloc_size(); - } - - /// Get the number of bytes of free and total memory on the SYCL device. - /// \param [out] free_memory The number of bytes of free memory on the SYCL device. - /// \param [out] total_memory The number of bytes of total memory on the SYCL device. - void get_memory_info(size_t &free_memory, size_t &total_memory) - { - total_memory = get_device_info().get_global_mem_size(); - const char *warning_info = "get_memory_info: [warning] ext_intel_free_memory is not " - "supported (export/set ZES_ENABLE_SYSMAN=1 to support), " - "use total memory as free memory"; -#if (defined(__SYCL_COMPILER_VERSION) && __SYCL_COMPILER_VERSION >= 20221105) - if (!has(sycl::aspect::ext_intel_free_memory)) - { - std::cerr << warning_info << std::endl; - free_memory = total_memory; - } - else - { - free_memory = get_info(); - } -#else - std::cerr << warning_info << std::endl; - free_memory = total_memory; -#if defined(_MSC_VER) && !defined(__clang__) -#pragma message("Querying the number of bytes of free memory is not supported") -#else -#warning "Querying the number of bytes of free memory is not supported" -#endif -#endif - } - - void get_device_info(device_info &out) const - { - dpct::get_device_info(out, *this); - } - - device_info get_device_info() const - { - device_info prop; - dpct::get_device_info(prop, *this); - return prop; - } - - void reset() - { - std::lock_guard lock(m_mutex); - clear_queues(); - init_queues(); - } - - sycl::queue &in_order_queue() { return *_q_in_order; } - - sycl::queue &out_of_order_queue() { return *_q_out_of_order; } - - sycl::queue &default_queue() - { - return in_order_queue(); - } - - void queues_wait_and_throw() - { - std::unique_lock lock(m_mutex); - std::vector> current_queues( - _queues); - lock.unlock(); - for (const auto &q : current_queues) - { - q->wait_and_throw(); - } - // Guard the destruct of current_queues to make sure the ref count is safe. - lock.lock(); - } - - sycl::queue *create_queue(bool enable_exception_handler = false) - { - return create_in_order_queue(enable_exception_handler); - } - - sycl::queue *create_queue(sycl::context context, sycl::device device, - bool enable_exception_handler = false) { - return create_in_order_queue(context, device, enable_exception_handler); - } - - sycl::queue *create_in_order_queue(bool enable_exception_handler = false) { - std::lock_guard lock(m_mutex); - return create_queue_impl(enable_exception_handler, - sycl::property::queue::in_order()); - } - - sycl::queue *create_in_order_queue(sycl::context context, sycl::device device, - bool enable_exception_handler = false) { - std::lock_guard lock(m_mutex); - return create_queue_impl(context, device, enable_exception_handler, - sycl::property::queue::in_order()); - } - - sycl::queue *create_out_of_order_queue(bool enable_exception_handler = false) { - std::lock_guard lock(m_mutex); - return create_queue_impl(enable_exception_handler); - } - - void destroy_queue(sycl::queue *&queue) - { - std::lock_guard lock(m_mutex); - _queues.erase(std::remove_if(_queues.begin(), _queues.end(), - [=](const std::shared_ptr &q) -> bool - { - return q.get() == queue; - }), - _queues.end()); - queue = nullptr; - } - void set_saved_queue(sycl::queue *q) - { - std::lock_guard lock(m_mutex); - _saved_queue = q; - } - sycl::queue *get_saved_queue() const - { - std::lock_guard lock(m_mutex); - return _saved_queue; - } - sycl::context get_context() const { return _ctx; } - - private: - void clear_queues() - { - _queues.clear(); - _q_in_order = _q_out_of_order = _saved_queue = nullptr; - } - - void init_queues() - { - _q_in_order = create_queue_impl(true, sycl::property::queue::in_order()); - _q_out_of_order = create_queue_impl(true); - _saved_queue = &default_queue(); - } - - /// Caller should acquire resource \p m_mutex before calling this function. - template - sycl::queue *create_queue_impl(bool enable_exception_handler, - Properties... properties) - { - sycl::async_handler eh = {}; - if (enable_exception_handler) - { - eh = exception_handler; - } - _queues.push_back(std::make_shared( - _ctx, *this, eh, - sycl::property_list( -#ifdef DPCT_PROFILING_ENABLED - sycl::property::queue::enable_profiling(), -#endif - properties...))); - - return _queues.back().get(); - } - - template - sycl::queue *create_queue_impl(sycl::context context, sycl::device device, - bool enable_exception_handler, - Properties... properties) { - sycl::async_handler eh = {}; - if (enable_exception_handler) { - eh = exception_handler; - } - _queues.push_back(std::make_shared( - context, device, eh, - sycl::property_list( - #ifdef DPCT_PROFILING_ENABLED - sycl::property::queue::enable_profiling(), - #endif - properties...))); - - return _queues.back().get(); - } - - void get_version(int &major, int &minor) const - { - detail::get_version(*this, major, minor); - } - sycl::queue *_q_in_order, *_q_out_of_order; - sycl::queue *_saved_queue; - sycl::context _ctx; - std::vector> _queues; - mutable mutex_type m_mutex; - }; - - /// device manager - class dev_mgr - { - public: - device_ext ¤t_device() - { - unsigned int dev_id = current_device_id(); - check_id(dev_id); - return *_devs[dev_id]; - } - device_ext &cpu_device() const - { - std::lock_guard lock(m_mutex); - if (_cpu_device == -1) - { - throw std::runtime_error("no valid cpu device"); - } - else - { - return *_devs[_cpu_device]; - } - } - device_ext &get_device(unsigned int id) const - { - std::lock_guard lock(m_mutex); - check_id(id); - return *_devs[id]; - } - unsigned int current_device_id() const - { - std::lock_guard lock(m_mutex); - auto it = _thread2dev_map.find(get_tid()); - if (it != _thread2dev_map.end()) - return it->second; - return DEFAULT_DEVICE_ID; - } - - /// Select device with a device ID. - /// \param [in] id The id of the device which can - /// be obtained through get_device_id(const sycl::device). - void select_device(unsigned int id) - { - std::lock_guard lock(m_mutex); - check_id(id); - _thread2dev_map[get_tid()] = id; - } - unsigned int device_count() { return _devs.size(); } - - unsigned int get_device_id(const sycl::device &dev) - { - unsigned int id = 0; - for (auto dev_item : _devs) - { - if (*dev_item == dev) - { - break; - } - id++; - } - return id; - } - - template - std::enable_if_t< - std::is_invocable_r_v> - select_device(const DeviceSelector &selector = sycl::gpu_selector_v) - { - sycl::device selected_device = sycl::device(selector); - unsigned int selected_device_id = get_device_id(selected_device); - select_device(selected_device_id); - } - - /// Returns the instance of device manager singleton. - static dev_mgr &instance() - { - static dev_mgr d_m; - return d_m; - } - dev_mgr(const dev_mgr &) = delete; - dev_mgr &operator=(const dev_mgr &) = delete; - dev_mgr(dev_mgr &&) = delete; - dev_mgr &operator=(dev_mgr &&) = delete; - - private: - mutable std::recursive_mutex m_mutex; - static bool compare_dev(sycl::device &device1, sycl::device &device2) - { - dpct::device_info prop1; - dpct::get_device_info(prop1, device1); - dpct::device_info prop2; - dpct::get_device_info(prop2, device2); - return prop1.get_max_compute_units() > prop2.get_max_compute_units(); - } - static int convert_backend_index(std::string & backend) { - if (backend == "ext_oneapi_level_zero:gpu") return 0; - if (backend == "opencl:gpu") return 1; - if (backend == "ext_oneapi_cuda:gpu") return 2; - if (backend == "ext_oneapi_hip:gpu") return 3; - if (backend == "opencl:cpu") return 4; - if (backend == "opencl:acc") return 5; - printf("convert_backend_index: can't handle backend=%s\n", backend.c_str()); - GGML_ASSERT(false); - } - static bool compare_backend(std::string &backend1, std::string &backend2) { - return convert_backend_index(backend1) < convert_backend_index(backend2); - } - dev_mgr() - { - sycl::device default_device = - sycl::device(sycl::default_selector_v); - _devs.push_back(std::make_shared(default_device)); - - std::vector sycl_all_devs; - // Collect other devices except for the default device. - if (default_device.is_cpu()) - _cpu_device = 0; - - auto Platforms = sycl::platform::get_platforms(); - // Keep track of the number of devices per backend - std::map DeviceNums; - std::map> backend_devices; - - while (!Platforms.empty()) { - auto Platform = Platforms.back(); - Platforms.pop_back(); - auto devices = Platform.get_devices(); - std::string backend_type = get_device_backend_and_type(devices[0]); - for (const auto &device : devices) { - backend_devices[backend_type].push_back(device); - } - } - - std::vector keys; - for(auto it = backend_devices.begin(); it != backend_devices.end(); ++it) { - keys.push_back(it->first); - } - std::sort(keys.begin(), keys.end(), compare_backend); - - for (auto &key : keys) { - std::vector devs = backend_devices[key]; - std::sort(devs.begin(), devs.end(), compare_dev); - for (const auto &dev : devs) { - sycl_all_devs.push_back(dev); - } - } - - for (auto &dev : sycl_all_devs) - { - if (dev == default_device) - { - continue; - } - _devs.push_back(std::make_shared(dev)); - if (_cpu_device == -1 && dev.is_cpu()) - { - _cpu_device = _devs.size() - 1; - } - } - } - void check_id(unsigned int id) const - { - if (id >= _devs.size()) - { - throw std::runtime_error("invalid device id"); - } - } - std::vector> _devs; - /// DEFAULT_DEVICE_ID is used, if current_device_id() can not find current - /// thread id in _thread2dev_map, which means default device should be used - /// for the current thread. - const unsigned int DEFAULT_DEVICE_ID = 0; - /// thread-id to device-id map. - std::map _thread2dev_map; - int _cpu_device = -1; - }; - - static inline sycl::queue &get_default_queue() - { - return dev_mgr::instance().current_device().default_queue(); - } - - namespace detail - { - enum class pointer_access_attribute - { - host_only = 0, - device_only, - host_device, - end - }; - - static pointer_access_attribute get_pointer_attribute(sycl::queue &q, - const void *ptr) - { - switch (sycl::get_pointer_type(ptr, q.get_context())) - { - case sycl::usm::alloc::unknown: - return pointer_access_attribute::host_only; - case sycl::usm::alloc::device: - return pointer_access_attribute::device_only; - case sycl::usm::alloc::shared: - case sycl::usm::alloc::host: - return pointer_access_attribute::host_device; - } - } - - template - inline constexpr std::uint64_t get_type_combination_id(ArgT Val) - { - static_assert((unsigned char)library_data_t::library_data_t_size <= - std::numeric_limits::max() && - "library_data_t size exceeds limit."); - static_assert(std::is_same_v, "Unsupported ArgT"); - return (std::uint64_t)Val; - } - - template - inline constexpr std::uint64_t get_type_combination_id(FirstT FirstVal, - RestT... RestVal) - { - static_assert((std::uint8_t)library_data_t::library_data_t_size <= - std::numeric_limits::max() && - "library_data_t size exceeds limit."); - static_assert(sizeof...(RestT) <= 8 && "Too many parameters"); - static_assert(std::is_same_v, "Unsupported FirstT"); - return get_type_combination_id(RestVal...) << 8 | ((std::uint64_t)FirstVal); - } - - class mem_mgr - { - mem_mgr() - { - // Reserved address space, no real memory allocation happens here. -#if defined(__linux__) - mapped_address_space = - (byte_t *)mmap(nullptr, mapped_region_size, PROT_NONE, - MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); -#elif defined(_WIN64) - mapped_address_space = (byte_t *)VirtualAlloc( - NULL, // NULL specified as the base address parameter - mapped_region_size, // Size of allocation - MEM_RESERVE, // Allocate reserved pages - PAGE_NOACCESS); // Protection = no access -#else -#error "Only support Windows and Linux." -#endif - next_free = mapped_address_space; - }; - - public: - using buffer_id_t = int; - - struct allocation - { - buffer_t buffer; - byte_t *alloc_ptr; - size_t size; - }; - - ~mem_mgr() - { -#if defined(__linux__) - munmap(mapped_address_space, mapped_region_size); -#elif defined(_WIN64) - VirtualFree(mapped_address_space, 0, MEM_RELEASE); -#else -#error "Only support Windows and Linux." -#endif - }; - - mem_mgr(const mem_mgr &) = delete; - mem_mgr &operator=(const mem_mgr &) = delete; - mem_mgr(mem_mgr &&) = delete; - mem_mgr &operator=(mem_mgr &&) = delete; - - /// Allocate - void *mem_alloc(size_t size) - { - if (!size) - return nullptr; - std::lock_guard lock(m_mutex); - if (next_free + size > mapped_address_space + mapped_region_size) - { - throw std::runtime_error("dpct_malloc: out of memory for virtual memory pool"); - } - // Allocation - sycl::range<1> r(size); - buffer_t buf(r); - allocation A{buf, next_free, size}; - // Map allocation to device pointer - void *result = next_free; - m_map.emplace(next_free + size, A); - // Update pointer to the next free space. - next_free += (size + extra_padding + alignment - 1) & ~(alignment - 1); - - return result; - } - - /// Deallocate - void mem_free(const void *ptr) - { - if (!ptr) - return; - std::lock_guard lock(m_mutex); - auto it = get_map_iterator(ptr); - m_map.erase(it); - } - - /// map: device pointer -> allocation(buffer, alloc_ptr, size) - allocation translate_ptr(const void *ptr) - { - std::lock_guard lock(m_mutex); - auto it = get_map_iterator(ptr); - return it->second; - } - - /// Check if the pointer represents device pointer or not. - bool is_device_ptr(const void *ptr) const - { - std::lock_guard lock(m_mutex); - return (mapped_address_space <= ptr) && - (ptr < mapped_address_space + mapped_region_size); - } - - /// Returns the instance of memory manager singleton. - static mem_mgr &instance() - { - static mem_mgr m; - return m; - } - - private: - std::map m_map; - mutable std::mutex m_mutex; - byte_t *mapped_address_space; - byte_t *next_free; - const size_t mapped_region_size = 128ull * 1024 * 1024 * 1024; - const size_t alignment = 256; - /// This padding may be defined to some positive value to debug - /// out of bound accesses. - const size_t extra_padding = 0; - - std::map::iterator get_map_iterator(const void *ptr) - { - auto it = m_map.upper_bound((byte_t *)ptr); - if (it == m_map.end()) - { - // Not a virtual pointer. - throw std::runtime_error("can not get buffer from non-virtual pointer"); - } - const allocation &alloc = it->second; - if (ptr < alloc.alloc_ptr) - { - // Out of bound. - // This may happen if there's a gap between allocations due to alignment - // or extra padding and pointer points to this gap. - throw std::runtime_error("invalid virtual pointer"); - } - return it; - } - }; - - template - class accessor; - template - class memory_traits - { - public: - static constexpr sycl::access::target target = - sycl::access::target::device; - static constexpr sycl::access_mode mode = - (Memory == constant) ? sycl::access_mode::read - : sycl::access_mode::read_write; - static constexpr size_t type_size = sizeof(T); - using element_t = - typename std::conditional::type; - using value_t = typename std::remove_cv::type; - template - using accessor_t = typename std::conditional< - Memory == local, sycl::local_accessor, - sycl::accessor>::type; - using pointer_t = T *; - }; - - static inline void *dpct_malloc(size_t size, sycl::queue &q) - { - return sycl::malloc_device(size, q.get_device(), q.get_context()); - } - -#define PITCH_DEFAULT_ALIGN(x) (((x) + 31) & ~(0x1F)) - static inline void *dpct_malloc(size_t &pitch, size_t x, size_t y, size_t z, - sycl::queue &q) - { - pitch = PITCH_DEFAULT_ALIGN(x); - return dpct_malloc(pitch * y * z, q); - } - - /** - * @brief Sets \p value to the first \p size elements starting from \p dev_ptr in \p q. - * @tparam valueT The type of the element to be set. - * @param [in] q The queue in which the operation is done. - * @param [in] dev_ptr Pointer to the virtual device memory address. - * @param [in] value The value to be set. - * @param [in] size Number of elements to be set to the value. - * @return An event representing the memset operation. - */ - template - static inline sycl::event dpct_memset(sycl::queue &q, void *dev_ptr, - valueT value, size_t size) - { - return q.fill(dev_ptr, value, size); - } - - /** - * @brief Sets \p value to the 3D memory region pointed by \p data in \p q. - * @tparam valueT The type of the element to be set. - * @param [in] q The queue in which the operation is done. - * @param [in] data Pointer to the pitched device memory region. - * @param [in] value The value to be set. - * @param [in] size 3D memory region by number of elements. - * @return An event list representing the memset operations. - */ - template - static inline std::vector - dpct_memset(sycl::queue &q, pitched_data data, valueT value, - sycl::range<3> size) - { - std::vector event_list; - size_t slice = data.get_pitch() * data.get_y(); - unsigned char *data_surface = (unsigned char *)data.get_data_ptr(); - for (size_t z = 0; z < size.get(2); ++z) - { - unsigned char *data_ptr = data_surface; - for (size_t y = 0; y < size.get(1); ++y) - { - event_list.push_back(dpct_memset(q, data_ptr, value, size.get(0))); - data_ptr += data.get_pitch(); - } - data_surface += slice; - } - return event_list; - } - - /** - * @brief Sets \p val to the pitched 2D memory region pointed by \p ptr in \p q. - * @tparam valueT The type of the element to be set. - * @param [in] q The queue in which the operation is done. - * @param [in] ptr Pointer to the virtual device memory. - * @param [in] pitch The pitch size by number of elements, including padding. - * @param [in] val The value to be set. - * @param [in] x The width of memory region by number of elements. - * @param [in] y The height of memory region by number of elements. - * @return An event list representing the memset operations. - */ - template - static inline std::vector - dpct_memset(sycl::queue &q, void *ptr, size_t pitch, valueT val, size_t x, - size_t y) - { - return dpct_memset(q, pitched_data(ptr, pitch, x, 1), val, - sycl::range<3>(x, y, 1)); - } - - static memcpy_direction deduce_memcpy_direction(sycl::queue &q, void *to_ptr, - const void *from_ptr, - memcpy_direction dir) - { - switch (dir) - { - case memcpy_direction::host_to_host: - case memcpy_direction::host_to_device: - case memcpy_direction::device_to_host: - case memcpy_direction::device_to_device: - return dir; - case memcpy_direction::automatic: - { - // table[to_attribute][from_attribute] - static const memcpy_direction - direction_table[static_cast(pointer_access_attribute::end)] - [static_cast(pointer_access_attribute::end)] = - {{memcpy_direction::host_to_host, - memcpy_direction::device_to_host, - memcpy_direction::host_to_host}, - {memcpy_direction::host_to_device, - memcpy_direction::device_to_device, - memcpy_direction::device_to_device}, - {memcpy_direction::host_to_host, - memcpy_direction::device_to_device, - memcpy_direction::device_to_device}}; - return direction_table[static_cast(get_pointer_attribute( - q, to_ptr))][static_cast(get_pointer_attribute(q, from_ptr))]; - } - default: - throw std::runtime_error("dpct_memcpy: invalid direction value"); - } - } - - static sycl::event - dpct_memcpy(sycl::queue &q, void *to_ptr, const void *from_ptr, size_t size, - memcpy_direction direction, - const std::vector &dep_events = {}) - { - if (!size) - return sycl::event{}; - return q.memcpy(to_ptr, from_ptr, size, dep_events); - GGML_UNUSED(direction); - } - - // Get actual copy range and make sure it will not exceed range. - static inline size_t get_copy_range(sycl::range<3> size, size_t slice, - size_t pitch) - { - return slice * (size.get(2) - 1) + pitch * (size.get(1) - 1) + size.get(0); - } - - static inline size_t get_offset(sycl::id<3> id, size_t slice, - size_t pitch) - { - return slice * id.get(2) + pitch * id.get(1) + id.get(0); - } - - /// copy 3D matrix specified by \p size from 3D matrix specified by \p from_ptr - /// and \p from_range to another specified by \p to_ptr and \p to_range. - static inline std::vector - dpct_memcpy(sycl::queue &q, void *to_ptr, const void *from_ptr, - sycl::range<3> to_range, sycl::range<3> from_range, - sycl::id<3> to_id, sycl::id<3> from_id, - sycl::range<3> size, memcpy_direction direction, - const std::vector &dep_events = {}) - { - // RAII for host pointer - class host_buffer - { - void *_buf; - size_t _size; - sycl::queue &_q; - const std::vector &_deps; // free operation depends - - public: - host_buffer(size_t size, sycl::queue &q, - const std::vector &deps) - : _buf(std::malloc(size)), _size(size), _q(q), _deps(deps) {} - void *get_ptr() const { return _buf; } - size_t get_size() const { return _size; } - ~host_buffer() - { - if (_buf) - { - _q.submit([&](sycl::handler &cgh) - { - cgh.depends_on(_deps); - cgh.host_task([buf = _buf] { std::free(buf); }); }); - } - } - }; - std::vector event_list; - - size_t to_slice = to_range.get(1) * to_range.get(0), - from_slice = from_range.get(1) * from_range.get(0); - unsigned char *to_surface = - (unsigned char *)to_ptr + get_offset(to_id, to_slice, to_range.get(0)); - const unsigned char *from_surface = - (const unsigned char *)from_ptr + - get_offset(from_id, from_slice, from_range.get(0)); - - if (to_slice == from_slice && to_slice == size.get(1) * size.get(0)) - { - return {dpct_memcpy(q, to_surface, from_surface, to_slice * size.get(2), - direction, dep_events)}; - } - direction = deduce_memcpy_direction(q, to_ptr, from_ptr, direction); - size_t size_slice = size.get(1) * size.get(0); - switch (direction) - { - case host_to_host: - for (size_t z = 0; z < size.get(2); ++z) - { - unsigned char *to_ptr = to_surface; - const unsigned char *from_ptr = from_surface; - if (to_range.get(0) == from_range.get(0) && - to_range.get(0) == size.get(0)) - { - event_list.push_back(dpct_memcpy(q, to_ptr, from_ptr, size_slice, - direction, dep_events)); - } - else - { - for (size_t y = 0; y < size.get(1); ++y) - { - event_list.push_back(dpct_memcpy(q, to_ptr, from_ptr, size.get(0), - direction, dep_events)); - to_ptr += to_range.get(0); - from_ptr += from_range.get(0); - } - } - to_surface += to_slice; - from_surface += from_slice; - } - break; - case host_to_device: - { - host_buffer buf(get_copy_range(size, to_slice, to_range.get(0)), q, - event_list); - std::vector host_events; - if (to_slice == size_slice) - { - // Copy host data to a temp host buffer with the shape of target. - host_events = - dpct_memcpy(q, buf.get_ptr(), from_surface, to_range, from_range, - sycl::id<3>(0, 0, 0), sycl::id<3>(0, 0, 0), size, - host_to_host, dep_events); - } - else - { - // Copy host data to a temp host buffer with the shape of target. - host_events = dpct_memcpy( - q, buf.get_ptr(), from_surface, to_range, from_range, - sycl::id<3>(0, 0, 0), sycl::id<3>(0, 0, 0), size, host_to_host, - // If has padding data, not sure whether it is useless. So fill temp - // buffer with it. - std::vector{ - dpct_memcpy(q, buf.get_ptr(), to_surface, buf.get_size(), - device_to_host, dep_events)}); - } - // Copy from temp host buffer to device with only one submit. - event_list.push_back(dpct_memcpy(q, to_surface, buf.get_ptr(), - buf.get_size(), host_to_device, - host_events)); - break; - } - case device_to_host: - { - host_buffer buf(get_copy_range(size, from_slice, from_range.get(0)), q, - event_list); - // Copy from host temp buffer to host target with reshaping. - event_list = dpct_memcpy( - q, to_surface, buf.get_ptr(), to_range, from_range, sycl::id<3>(0, 0, 0), - sycl::id<3>(0, 0, 0), size, host_to_host, - // Copy from device to temp host buffer with only one submit. - std::vector{dpct_memcpy(q, buf.get_ptr(), from_surface, - buf.get_size(), - device_to_host, dep_events)}); - break; - } - case device_to_device: - event_list.push_back(q.submit([&](sycl::handler &cgh){ - cgh.depends_on(dep_events); - cgh.parallel_for( - size, - [=](sycl::id<3> id) { - to_surface[get_offset(id, to_slice, to_range.get(0))] = - from_surface[get_offset(id, from_slice, from_range.get(0))]; - }); })); - break; - default: - throw std::runtime_error("dpct_memcpy: invalid direction value"); - } - return event_list; - } - - /// memcpy 2D/3D matrix specified by pitched_data. - static inline std::vector - dpct_memcpy(sycl::queue &q, pitched_data to, sycl::id<3> to_id, - pitched_data from, sycl::id<3> from_id, sycl::range<3> size, - memcpy_direction direction = automatic) - { - return dpct_memcpy(q, to.get_data_ptr(), from.get_data_ptr(), - sycl::range<3>(to.get_pitch(), to.get_y(), 1), - sycl::range<3>(from.get_pitch(), from.get_y(), 1), to_id, from_id, - size, direction); - } - - /// memcpy 2D matrix with pitch. - static inline std::vector - dpct_memcpy(sycl::queue &q, void *to_ptr, const void *from_ptr, - size_t to_pitch, size_t from_pitch, size_t x, size_t y, - memcpy_direction direction = automatic) - { - return dpct_memcpy(q, to_ptr, from_ptr, sycl::range<3>(to_pitch, y, 1), - sycl::range<3>(from_pitch, y, 1), - sycl::id<3>(0, 0, 0), sycl::id<3>(0, 0, 0), - sycl::range<3>(x, y, 1), direction); - } - - namespace deprecated - { - - template - class usm_allocator - { - private: - using Alloc = sycl::usm_allocator; - Alloc _impl; - - public: - using value_type = typename std::allocator_traits::value_type; - using pointer = typename std::allocator_traits::pointer; - using const_pointer = typename std::allocator_traits::const_pointer; - using void_pointer = typename std::allocator_traits::void_pointer; - using const_void_pointer = - typename std::allocator_traits::const_void_pointer; - using reference = typename std::allocator_traits::value_type &; - using const_reference = - const typename std::allocator_traits::value_type &; - using difference_type = - typename std::allocator_traits::difference_type; - using size_type = typename std::allocator_traits::size_type; - using propagate_on_container_copy_assignment = typename std::allocator_traits< - Alloc>::propagate_on_container_copy_assignment; - using propagate_on_container_move_assignment = typename std::allocator_traits< - Alloc>::propagate_on_container_move_assignment; - using propagate_on_container_swap = - typename std::allocator_traits::propagate_on_container_swap; - using is_always_equal = - typename std::allocator_traits::is_always_equal; - - template - struct rebind - { - typedef usm_allocator other; - }; - - usm_allocator() : _impl(dpct::get_default_queue()) {} - ~usm_allocator() {} - usm_allocator(const usm_allocator &other) : _impl(other._impl) {} - usm_allocator(usm_allocator &&other) : _impl(std::move(other._impl)) {} - pointer address(reference r) { return &r; } - const_pointer address(const_reference r) { return &r; } - pointer allocate(size_type cnt, const_void_pointer hint = nullptr) - { - return std::allocator_traits::allocate(_impl, cnt, hint); - } - void deallocate(pointer p, size_type cnt) - { - std::allocator_traits::deallocate(_impl, p, cnt); - } - size_type max_size() const - { - return std::allocator_traits::max_size(_impl); - } - bool operator==(const usm_allocator &other) const { return _impl == other._impl; } - bool operator!=(const usm_allocator &other) const { return _impl != other._impl; } - }; - - } // namespace deprecated - - inline void dpct_free(void *ptr, - const sycl::queue &q) - { - if (ptr) - { - sycl::free(ptr, q.get_context()); - } - } - - template - inline auto get_memory(const void *x) - { - T *new_x = reinterpret_cast(const_cast(x)); - return new_x; - } - - template - inline typename DataType::T2 get_value(const T *s, sycl::queue &q) - { - using Ty = typename DataType::T2; - Ty s_h; - if (get_pointer_attribute(q, s) == pointer_access_attribute::device_only) - detail::dpct_memcpy(q, (void *)&s_h, (const void *)s, sizeof(T), device_to_host) - .wait(); - else - s_h = *reinterpret_cast(s); - return s_h; - } - - } // namespace detail - - template - inline auto get_value(const T *s, sycl::queue &q) - { - return detail::get_value(s, q); - } - - namespace detail - { - template - inline void gemm_impl(sycl::queue &q, oneapi::mkl::transpose a_trans, - oneapi::mkl::transpose b_trans, int m, int n, int k, - const void *alpha, const void *a, int lda, const void *b, - int ldb, const void *beta, void *c, int ldc) - { - Ts alpha_value = dpct::get_value(reinterpret_cast(alpha), q); - Ts beta_value = dpct::get_value(reinterpret_cast(beta), q); - auto data_a = get_memory(a); - auto data_b = get_memory(b); - auto data_c = get_memory(c); - oneapi::mkl::blas::column_major::gemm( - q, a_trans, b_trans, m, n, k, alpha_value, data_a, lda, - data_b, ldb, beta_value, data_c, ldc); - } - - template - class vectorized_binary - { - public: - inline VecT operator()(VecT a, VecT b, const BinaryOperation binary_op) - { - VecT v4; - for (size_t i = 0; i < v4.size(); ++i) - { - v4[i] = binary_op(a[i], b[i]); - } - return v4; - } - }; - - template - class vectorized_binary< - VecT, BinaryOperation, - std::void_t>> - { - public: - inline VecT operator()(VecT a, VecT b, const BinaryOperation binary_op) - { - return binary_op(a, b).template as(); - } - }; - - template - inline void gemm_batch_impl(sycl::queue &q, oneapi::mkl::transpose a_trans, - oneapi::mkl::transpose b_trans, int m, int n, int k, - const void *alpha, const void **a, int lda, - const void **b, int ldb, const void *beta, void **c, - int ldc, int batch_size) - { - struct matrix_info_t - { - oneapi::mkl::transpose transpose_info[2]; - Ts value_info[2]; - std::int64_t size_info[3]; - std::int64_t ld_info[3]; - std::int64_t groupsize_info; - }; - - Ts alpha_value = dpct::get_value(reinterpret_cast(alpha), q); - Ts beta_value = dpct::get_value(reinterpret_cast(beta), q); - - matrix_info_t *matrix_info = - (matrix_info_t *)std::malloc(sizeof(matrix_info_t)); - matrix_info->transpose_info[0] = a_trans; - matrix_info->transpose_info[1] = b_trans; - matrix_info->value_info[0] = alpha_value; - matrix_info->value_info[1] = beta_value; - matrix_info->size_info[0] = m; - matrix_info->size_info[1] = n; - matrix_info->size_info[2] = k; - matrix_info->ld_info[0] = lda; - matrix_info->ld_info[1] = ldb; - matrix_info->ld_info[2] = ldc; - matrix_info->groupsize_info = batch_size; - - sycl::event e = oneapi::mkl::blas::column_major::gemm_batch( - q, matrix_info->transpose_info, matrix_info->transpose_info + 1, - matrix_info->size_info, matrix_info->size_info + 1, - matrix_info->size_info + 2, matrix_info->value_info, - reinterpret_cast(a), matrix_info->ld_info, - reinterpret_cast(b), matrix_info->ld_info + 1, - matrix_info->value_info + 1, reinterpret_cast(c), - matrix_info->ld_info + 2, 1, &(matrix_info->groupsize_info)); - - q.submit([&](sycl::handler &cgh) - { - cgh.depends_on(e); - cgh.host_task([=] { std::free(matrix_info); }); }); - } - - template - inline void - gemm_batch_impl(sycl::queue &q, oneapi::mkl::transpose a_trans, - oneapi::mkl::transpose b_trans, int m, int n, - int k, const void *alpha, const void *a, int lda, - long long int stride_a, const void *b, int ldb, - long long int stride_b, const void *beta, void *c, - int ldc, long long int stride_c, int batch_size) - { - Ts alpha_value = dpct::get_value(reinterpret_cast(alpha), q); - Ts beta_value = dpct::get_value(reinterpret_cast(beta), q); - auto data_a = get_memory(a); - auto data_b = get_memory(b); - auto data_c = get_memory(c); - oneapi::mkl::blas::column_major::gemm_batch( - q, a_trans, b_trans, m, n, k, alpha_value, data_a, lda, - stride_a, data_b, ldb, stride_b, beta_value, - data_c, ldc, stride_c, batch_size); - } - - } // namespace detail - - template - inline unsigned vectorized_binary(unsigned a, unsigned b, - const BinaryOperation binary_op) - { - sycl::vec v0{a}, v1{b}; - auto v2 = v0.as(); - auto v3 = v1.as(); - auto v4 = - detail::vectorized_binary()(v2, v3, binary_op); - v0 = v4.template as>(); - return v0; - } - - static void async_dpct_memcpy(void *to_ptr, const void *from_ptr, size_t size, - memcpy_direction direction = automatic, - sycl::queue &q = dpct::get_default_queue()) - { - detail::dpct_memcpy(q, to_ptr, from_ptr, size, direction); - } - - static inline unsigned int select_device(unsigned int id) - { - dev_mgr::instance().select_device(id); - return id; - } - - template - T permute_sub_group_by_xor(sycl::sub_group g, T x, unsigned int mask, - unsigned int logical_sub_group_size = 32) - { - unsigned int id = g.get_local_linear_id(); - unsigned int start_index = - id / logical_sub_group_size * logical_sub_group_size; - unsigned int target_offset = (id % logical_sub_group_size) ^ mask; - return sycl::select_from_group(g, x, - target_offset < logical_sub_group_size - ? start_index + target_offset - : id); - } - - template - sycl::vec extract_and_sign_or_zero_extend4(T val) - { - return sycl::vec(val) - .template as, int8_t, uint8_t>, 4>>() - .template convert(); - } - - template - using dot_product_acc_t = - std::conditional_t && std::is_unsigned_v, - uint32_t, int32_t>; - - template - inline auto dp4a(T1 a, T2 b, T3 c) - { - dot_product_acc_t res = c; - auto va = extract_and_sign_or_zero_extend4(a); - auto vb = extract_and_sign_or_zero_extend4(b); - res += va[0] * vb[0]; - res += va[1] * vb[1]; - res += va[2] * vb[2]; - res += va[3] * vb[3]; - return res; - } - - struct sub_sat - { - template - auto operator()(const T x, const T y) const - { - return sycl::sub_sat(x, y); - } - }; - - template - inline T vectorized_min(T a, T b) - { - sycl::vec v0{a}, v1{b}; - auto v2 = v0.template as(); - auto v3 = v1.template as(); - auto v4 = sycl::min(v2, v3); - v0 = v4.template as>(); - return v0; - } - - inline float pow(const float a, const int b) { return sycl::pown(a, b); } - inline double pow(const double a, const int b) { return sycl::pown(a, b); } - inline float pow(const float a, const float b) { return sycl::pow(a, b); } - inline double pow(const double a, const double b) { return sycl::pow(a, b); } - template - inline typename std::enable_if_t, T> - pow(const T a, const U b) - { - return sycl::pow(a, static_cast(b)); - } - template - inline typename std::enable_if_t, double> - pow(const T a, const U b) - { - return sycl::pow(static_cast(a), static_cast(b)); - } - - inline double min(const double a, const float b) - { - return sycl::fmin(a, static_cast(b)); - } - inline double min(const float a, const double b) - { - return sycl::fmin(static_cast(a), b); - } - inline float min(const float a, const float b) { return sycl::fmin(a, b); } - inline double min(const double a, const double b) { return sycl::fmin(a, b); } - inline std::uint32_t min(const std::uint32_t a, const std::int32_t b) - { - return sycl::min(a, static_cast(b)); - } - inline std::uint32_t min(const std::int32_t a, const std::uint32_t b) - { - return sycl::min(static_cast(a), b); - } - inline std::int32_t min(const std::int32_t a, const std::int32_t b) - { - return sycl::min(a, b); - } - inline std::uint32_t min(const std::uint32_t a, const std::uint32_t b) - { - return sycl::min(a, b); - } - inline std::uint64_t min(const std::uint64_t a, const std::int64_t b) - { - return sycl::min(a, static_cast(b)); - } - inline std::uint64_t min(const std::int64_t a, const std::uint64_t b) - { - return sycl::min(static_cast(a), b); - } - inline std::int64_t min(const std::int64_t a, const std::int64_t b) - { - return sycl::min(a, b); - } - inline std::uint64_t min(const std::uint64_t a, const std::uint64_t b) - { - return sycl::min(a, b); - } - inline std::uint64_t min(const std::uint64_t a, const std::int32_t b) - { - return sycl::min(a, static_cast(b)); - } - inline std::uint64_t min(const std::int32_t a, const std::uint64_t b) - { - return sycl::min(static_cast(a), b); - } - inline std::uint64_t min(const std::uint64_t a, const std::uint32_t b) - { - return sycl::min(a, static_cast(b)); - } - inline std::uint64_t min(const std::uint32_t a, const std::uint64_t b) - { - return sycl::min(static_cast(a), b); - } - // max function overloads. - // For floating-point types, `float` or `double` arguments are acceptable. - // For integer types, `std::uint32_t`, `std::int32_t`, `std::uint64_t` or - // `std::int64_t` type arguments are acceptable. - inline double max(const double a, const float b) - { - return sycl::fmax(a, static_cast(b)); - } - inline double max(const float a, const double b) - { - return sycl::fmax(static_cast(a), b); - } - inline float max(const float a, const float b) { return sycl::fmax(a, b); } - inline double max(const double a, const double b) { return sycl::fmax(a, b); } - inline std::uint32_t max(const std::uint32_t a, const std::int32_t b) - { - return sycl::max(a, static_cast(b)); - } - inline std::uint32_t max(const std::int32_t a, const std::uint32_t b) - { - return sycl::max(static_cast(a), b); - } - inline std::int32_t max(const std::int32_t a, const std::int32_t b) - { - return sycl::max(a, b); - } - inline std::uint32_t max(const std::uint32_t a, const std::uint32_t b) - { - return sycl::max(a, b); - } - inline std::uint64_t max(const std::uint64_t a, const std::int64_t b) - { - return sycl::max(a, static_cast(b)); - } - inline std::uint64_t max(const std::int64_t a, const std::uint64_t b) - { - return sycl::max(static_cast(a), b); - } - inline std::int64_t max(const std::int64_t a, const std::int64_t b) - { - return sycl::max(a, b); - } - inline std::uint64_t max(const std::uint64_t a, const std::uint64_t b) - { - return sycl::max(a, b); - } - inline std::uint64_t max(const std::uint64_t a, const std::int32_t b) - { - return sycl::max(a, static_cast(b)); - } - inline std::uint64_t max(const std::int32_t a, const std::uint64_t b) - { - return sycl::max(static_cast(a), b); - } - inline std::uint64_t max(const std::uint64_t a, const std::uint32_t b) - { - return sycl::max(a, static_cast(b)); - } - inline std::uint64_t max(const std::uint32_t a, const std::uint64_t b) - { - return sycl::max(static_cast(a), b); - } - - inline void - has_capability_or_fail(const sycl::device &dev, - const std::initializer_list &props) - { - for (const auto &it : props) - { - if (dev.has(it)) - continue; - switch (it) - { - case sycl::aspect::fp64: - throw std::runtime_error("'double' is not supported in '" + - dev.get_info() + - "' device"); - break; - case sycl::aspect::fp16: - throw std::runtime_error("'half' is not supported in '" + - dev.get_info() + - "' device"); - break; - default: -#define __SYCL_ASPECT(ASPECT, ID) \ - case sycl::aspect::ASPECT: \ - return #ASPECT; -#define __SYCL_ASPECT_DEPRECATED(ASPECT, ID, MESSAGE) __SYCL_ASPECT(ASPECT, ID) -#define __SYCL_ASPECT_DEPRECATED_ALIAS(ASPECT, ID, MESSAGE) - auto getAspectNameStr = [](sycl::aspect AspectNum) -> std::string - { - switch (AspectNum) - { -#include -#include - default: - return "unknown aspect"; - } - }; -#undef __SYCL_ASPECT_DEPRECATED_ALIAS -#undef __SYCL_ASPECT_DEPRECATED -#undef __SYCL_ASPECT - throw std::runtime_error( - "'" + getAspectNameStr(it) + "' is not supported in '" + - dev.get_info() + "' device"); - } - break; - } - } - - static inline unsigned int get_current_device_id() - { - return dev_mgr::instance().current_device_id(); - } - - static inline device_ext &get_current_device() - { - return dev_mgr::instance().current_device(); - } - - static inline sycl::queue &get_in_order_queue() - { - return dev_mgr::instance().current_device().in_order_queue(); - } - - static sycl::event - dpct_memcpy(sycl::queue &q, void *to_ptr, const void *from_ptr, size_t size, - memcpy_direction direction, - const std::vector &dep_events = {}) - { - if (!size) - return sycl::event{}; - return q.memcpy(to_ptr, from_ptr, size, dep_events); - GGML_UNUSED(direction); - } - - // Get actual copy range and make sure it will not exceed range. - static inline size_t get_copy_range(sycl::range<3> size, size_t slice, - size_t pitch) - { - return slice * (size.get(2) - 1) + pitch * (size.get(1) - 1) + size.get(0); - } - - static inline size_t get_offset(sycl::id<3> id, size_t slice, - size_t pitch) - { - return slice * id.get(2) + pitch * id.get(1) + id.get(0); - } - - /// copy 3D matrix specified by \p size from 3D matrix specified by \p from_ptr - /// and \p from_range to another specified by \p to_ptr and \p to_range. - static inline std::vector - dpct_memcpy(sycl::queue &q, void *to_ptr, const void *from_ptr, - sycl::range<3> to_range, sycl::range<3> from_range, - sycl::id<3> to_id, sycl::id<3> from_id, - sycl::range<3> size, memcpy_direction direction, - const std::vector &dep_events = {}) - { - // RAII for host pointer - class host_buffer - { - void *_buf; - size_t _size; - sycl::queue &_q; - const std::vector &_deps; // free operation depends - - public: - host_buffer(size_t size, sycl::queue &q, - const std::vector &deps) - : _buf(std::malloc(size)), _size(size), _q(q), _deps(deps) {} - void *get_ptr() const { return _buf; } - size_t get_size() const { return _size; } - ~host_buffer() - { - if (_buf) - { - _q.submit([&](sycl::handler &cgh) - { - cgh.depends_on(_deps); - cgh.host_task([buf = _buf] { std::free(buf); }); }); - } - } - }; - std::vector event_list; - - size_t to_slice = to_range.get(1) * to_range.get(0), - from_slice = from_range.get(1) * from_range.get(0); - unsigned char *to_surface = - (unsigned char *)to_ptr + get_offset(to_id, to_slice, to_range.get(0)); - const unsigned char *from_surface = - (const unsigned char *)from_ptr + - get_offset(from_id, from_slice, from_range.get(0)); - - if (to_slice == from_slice && to_slice == size.get(1) * size.get(0)) - { - return {dpct_memcpy(q, to_surface, from_surface, to_slice * size.get(2), - direction, dep_events)}; - } - direction = detail::deduce_memcpy_direction(q, to_ptr, from_ptr, direction); - size_t size_slice = size.get(1) * size.get(0); - switch (direction) - { - case host_to_host: - for (size_t z = 0; z < size.get(2); ++z) - { - unsigned char *to_ptr = to_surface; - const unsigned char *from_ptr = from_surface; - if (to_range.get(0) == from_range.get(0) && - to_range.get(0) == size.get(0)) - { - event_list.push_back(dpct_memcpy(q, to_ptr, from_ptr, size_slice, - direction, dep_events)); - } - else - { - for (size_t y = 0; y < size.get(1); ++y) - { - event_list.push_back(dpct_memcpy(q, to_ptr, from_ptr, size.get(0), - direction, dep_events)); - to_ptr += to_range.get(0); - from_ptr += from_range.get(0); - } - } - to_surface += to_slice; - from_surface += from_slice; - } - break; - case host_to_device: - { - host_buffer buf(get_copy_range(size, to_slice, to_range.get(0)), q, - event_list); - std::vector host_events; - if (to_slice == size_slice) - { - // Copy host data to a temp host buffer with the shape of target. - host_events = - dpct_memcpy(q, buf.get_ptr(), from_surface, to_range, from_range, - sycl::id<3>(0, 0, 0), sycl::id<3>(0, 0, 0), size, - host_to_host, dep_events); - } - else - { - // Copy host data to a temp host buffer with the shape of target. - host_events = dpct_memcpy( - q, buf.get_ptr(), from_surface, to_range, from_range, - sycl::id<3>(0, 0, 0), sycl::id<3>(0, 0, 0), size, host_to_host, - // If has padding data, not sure whether it is useless. So fill temp - // buffer with it. - std::vector{ - dpct_memcpy(q, buf.get_ptr(), to_surface, buf.get_size(), - device_to_host, dep_events)}); - } - // Copy from temp host buffer to device with only one submit. - event_list.push_back(dpct_memcpy(q, to_surface, buf.get_ptr(), - buf.get_size(), host_to_device, - host_events)); - break; - } - case device_to_host: - { - host_buffer buf(get_copy_range(size, from_slice, from_range.get(0)), q, - event_list); - // Copy from host temp buffer to host target with reshaping. - event_list = dpct_memcpy( - q, to_surface, buf.get_ptr(), to_range, from_range, sycl::id<3>(0, 0, 0), - sycl::id<3>(0, 0, 0), size, host_to_host, - // Copy from device to temp host buffer with only one submit. - std::vector{dpct_memcpy(q, buf.get_ptr(), from_surface, - buf.get_size(), - device_to_host, dep_events)}); - break; - } - case device_to_device: - event_list.push_back(q.submit([&](sycl::handler &cgh) - { - cgh.depends_on(dep_events); - cgh.parallel_for( - size, - [=](sycl::id<3> id) { - to_surface[get_offset(id, to_slice, to_range.get(0))] = - from_surface[get_offset(id, from_slice, from_range.get(0))]; - }); })); - break; - default: - throw std::runtime_error("dpct_memcpy: invalid direction value"); - } - return event_list; - } - - /// memcpy 2D/3D matrix specified by pitched_data. - static inline std::vector - dpct_memcpy(sycl::queue &q, pitched_data to, sycl::id<3> to_id, - pitched_data from, sycl::id<3> from_id, sycl::range<3> size, - memcpy_direction direction = automatic) - { - return dpct_memcpy(q, to.get_data_ptr(), from.get_data_ptr(), - sycl::range<3>(to.get_pitch(), to.get_y(), 1), - sycl::range<3>(from.get_pitch(), from.get_y(), 1), to_id, from_id, - size, direction); - } - - /// memcpy 2D matrix with pitch. - static inline std::vector - dpct_memcpy(sycl::queue &q, void *to_ptr, const void *from_ptr, - size_t to_pitch, size_t from_pitch, size_t x, size_t y, - memcpy_direction direction = automatic) - { - return dpct_memcpy(q, to_ptr, from_ptr, sycl::range<3>(to_pitch, y, 1), - sycl::range<3>(from_pitch, y, 1), - sycl::id<3>(0, 0, 0), sycl::id<3>(0, 0, 0), - sycl::range<3>(x, y, 1), direction); - } - - inline void gemm(sycl::queue &q, oneapi::mkl::transpose a_trans, - oneapi::mkl::transpose b_trans, int m, int n, int k, - const void *alpha, const void *a, library_data_t a_type, - int lda, const void *b, library_data_t b_type, int ldb, - const void *beta, void *c, library_data_t c_type, int ldc, - library_data_t scaling_type) - { - if (scaling_type == library_data_t::real_float && - c_type == library_data_t::complex_float) - { - scaling_type = library_data_t::complex_float; - } - else if (scaling_type == library_data_t::real_double && - c_type == library_data_t::complex_double) - { - scaling_type = library_data_t::complex_double; - } - - std::uint64_t key = - detail::get_type_combination_id(a_type, b_type, c_type, scaling_type); - switch (key) - { - case detail::get_type_combination_id( - library_data_t::real_float, library_data_t::real_float, - library_data_t::real_float, library_data_t::real_float): - { - detail::gemm_impl( - q, a_trans, b_trans, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc); - break; - } - case detail::get_type_combination_id( - library_data_t::real_double, library_data_t::real_double, - library_data_t::real_double, library_data_t::real_double): - { - detail::gemm_impl( - q, a_trans, b_trans, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc); - break; - } - case detail::get_type_combination_id( - library_data_t::complex_float, library_data_t::complex_float, - library_data_t::complex_float, library_data_t::complex_float): - { - detail::gemm_impl, std::complex, - std::complex, std::complex>( - q, a_trans, b_trans, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc); - break; - } - case detail::get_type_combination_id( - library_data_t::complex_double, library_data_t::complex_double, - library_data_t::complex_double, library_data_t::complex_double): - { - detail::gemm_impl, std::complex, - std::complex, std::complex>( - q, a_trans, b_trans, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc); - break; - } - case detail::get_type_combination_id( - library_data_t::real_half, library_data_t::real_half, - library_data_t::real_half, library_data_t::real_half): - { - detail::gemm_impl(q, a_trans, b_trans, m, n, k, alpha, a, - lda, b, ldb, beta, c, ldc); - break; - } -#ifdef __INTEL_MKL__ - case detail::get_type_combination_id( - library_data_t::real_bfloat16, library_data_t::real_bfloat16, - library_data_t::real_float, library_data_t::real_float): - { - detail::gemm_impl(q, a_trans, b_trans, m, n, k, alpha, a, lda, b, - ldb, beta, c, ldc); - break; - } - case detail::get_type_combination_id( - library_data_t::real_half, library_data_t::real_half, - library_data_t::real_float, library_data_t::real_float): - { - detail::gemm_impl( - q, a_trans, b_trans, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc); - break; - } - case detail::get_type_combination_id( - library_data_t::real_half, library_data_t::real_half, - library_data_t::real_half, library_data_t::real_float): - { - float alpha_value = - dpct::get_value(reinterpret_cast(alpha), q); - float beta_value = - dpct::get_value(reinterpret_cast(beta), q); - sycl::half alpha_half(alpha_value); - sycl::half beta_half(beta_value); - detail::gemm_impl(q, a_trans, b_trans, m, n, k, &alpha_half, - a, lda, b, ldb, &beta_half, c, ldc); - break; - } - case detail::get_type_combination_id( - library_data_t::real_int8, library_data_t::real_int8, - library_data_t::real_float, library_data_t::real_float): - { - detail::gemm_impl( - q, a_trans, b_trans, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc); - break; - } - case detail::get_type_combination_id( - library_data_t::real_bfloat16, library_data_t::real_bfloat16, - library_data_t::real_bfloat16, library_data_t::real_float): - { - detail::gemm_impl( - q, a_trans, b_trans, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc); - break; - } - case detail::get_type_combination_id( - library_data_t::real_int8, library_data_t::real_int8, - library_data_t::real_int32, library_data_t::real_int32): - { - float alpha_float = - dpct::get_value(reinterpret_cast(alpha), q); - float beta_float = - dpct::get_value(reinterpret_cast(beta), q); - detail::gemm_impl( - q, a_trans, b_trans, m, n, k, &alpha_float, a, lda, b, ldb, &beta_float, c, ldc); - break; - } -#endif // __INTEL_MKL__ - default: - throw std::runtime_error("the combination of data type is unsupported"); - } - } // gemm() - - /// Computes a batch of matrix-matrix product with general matrices. - /// \param [in] q The queue where the routine should be executed. - /// \param [in] a_trans Specifies the operation applied to A. - /// \param [in] b_trans Specifies the operation applied to B. - /// \param [in] m Specifies the number of rows of the matrix op(A) and of the matrix C. - /// \param [in] n Specifies the number of columns of the matrix op(B) and of the matrix C. - /// \param [in] k Specifies the number of columns of the matrix op(A) and the number of rows of the matrix op(B). - /// \param [in] alpha Scaling factor for the matrix-matrix product. - /// \param [in] a Input matrix A. - /// \param [in] a_type Data type of the matrix A. - /// \param [in] lda Leading dimension of A. - /// \param [in] b Input matrix B. - /// \param [in] b_type Data type of the matrix B. - /// \param [in] ldb Leading dimension of B. - /// \param [in] beta Scaling factor for matrix C. - /// \param [in, out] c Input/Output matrix C. - /// \param [in] c_type Data type of the matrix C. - /// \param [in] ldc Leading dimension of C. - /// \param [in] batch_size Specifies the number of matrix multiply operations to perform. - /// \param [in] scaling_type Data type of the scaling factors. - inline void gemm_batch(sycl::queue &q, oneapi::mkl::transpose a_trans, - oneapi::mkl::transpose b_trans, int m, int n, int k, - const void *alpha, const void *a[], - library_data_t a_type, int lda, const void *b[], - library_data_t b_type, int ldb, const void *beta, - void *c[], library_data_t c_type, int ldc, - int batch_size, library_data_t scaling_type) - { - if (scaling_type == library_data_t::real_float && - c_type == library_data_t::complex_float) - { - scaling_type = library_data_t::complex_float; - } - else if (scaling_type == library_data_t::real_double && - c_type == library_data_t::complex_double) - { - scaling_type = library_data_t::complex_double; - } - - std::uint64_t key = - detail::get_type_combination_id(a_type, b_type, c_type, scaling_type); - switch (key) - { - case detail::get_type_combination_id( - library_data_t::real_float, library_data_t::real_float, - library_data_t::real_float, library_data_t::real_float): - { - detail::gemm_batch_impl( - q, a_trans, b_trans, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc, - batch_size); - break; - } - case detail::get_type_combination_id( - library_data_t::real_double, library_data_t::real_double, - library_data_t::real_double, library_data_t::real_double): - { - detail::gemm_batch_impl( - q, a_trans, b_trans, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc, - batch_size); - break; - } - case detail::get_type_combination_id( - library_data_t::complex_float, library_data_t::complex_float, - library_data_t::complex_float, library_data_t::complex_float): - { - detail::gemm_batch_impl, std::complex, - std::complex, std::complex>( - q, a_trans, b_trans, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc, - batch_size); - break; - } - case detail::get_type_combination_id( - library_data_t::complex_double, library_data_t::complex_double, - library_data_t::complex_double, library_data_t::complex_double): - { - detail::gemm_batch_impl, std::complex, - std::complex, std::complex>( - q, a_trans, b_trans, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc, - batch_size); - break; - } - case detail::get_type_combination_id( - library_data_t::real_half, library_data_t::real_half, - library_data_t::real_half, library_data_t::real_half): - { - detail::gemm_batch_impl(q, a_trans, b_trans, m, n, k, alpha, - a, lda, b, ldb, beta, c, ldc, - batch_size); - break; - } -#ifdef __INTEL_MKL__ - case detail::get_type_combination_id( - library_data_t::real_bfloat16, library_data_t::real_bfloat16, - library_data_t::real_bfloat16, library_data_t::real_float): - { - detail::gemm_batch_impl( - q, a_trans, b_trans, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc, - batch_size); - break; - } - case detail::get_type_combination_id( - library_data_t::real_bfloat16, library_data_t::real_bfloat16, - library_data_t::real_float, library_data_t::real_float): - { - detail::gemm_batch_impl(q, a_trans, b_trans, m, n, k, alpha, a, lda, - b, ldb, beta, c, ldc, batch_size); - break; - } - case detail::get_type_combination_id( - library_data_t::real_int8, library_data_t::real_int8, - library_data_t::real_int32, library_data_t::real_int32): - { - float alpha_float = - dpct::get_value(reinterpret_cast(alpha), q); - float beta_float = - dpct::get_value(reinterpret_cast(beta), q); - detail::gemm_batch_impl(q, a_trans, b_trans, m, n, k, &alpha_float, - a, lda, b, ldb, &beta_float, c, ldc, - batch_size); - break; - } - case detail::get_type_combination_id( - library_data_t::real_int8, library_data_t::real_int8, - library_data_t::real_float, library_data_t::real_float): - { - detail::gemm_batch_impl( - q, a_trans, b_trans, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc, - batch_size); - break; - } - case detail::get_type_combination_id( - library_data_t::real_half, library_data_t::real_half, - library_data_t::real_float, library_data_t::real_float): - { - detail::gemm_batch_impl( - q, a_trans, b_trans, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc, - batch_size); - break; - } -#endif - case detail::get_type_combination_id( - library_data_t::real_half, library_data_t::real_half, - library_data_t::real_half, library_data_t::real_float): - { - float alpha_value = - dpct::get_value(reinterpret_cast(alpha), q); - float beta_value = - dpct::get_value(reinterpret_cast(beta), q); - sycl::half alpha_half(alpha_value); - sycl::half beta_half(beta_value); - detail::gemm_batch_impl( - q, a_trans, b_trans, m, n, k, &alpha_half, a, lda, b, ldb, &beta_half, c, ldc, - batch_size); - break; - } - default: - throw std::runtime_error("the combination of data type is unsupported"); - } - } - - /// Computes a batch of matrix-matrix product with general matrices. - /// \param [in] q The queue where the routine should be executed. - /// \param [in] a_trans Specifies the operation applied to A. - /// \param [in] b_trans Specifies the operation applied to B. - /// \param [in] m Specifies the number of rows of the matrix op(A) and of the matrix C. - /// \param [in] n Specifies the number of columns of the matrix op(B) and of the matrix C. - /// \param [in] k Specifies the number of columns of the matrix op(A) and the number of rows of the matrix op(B). - /// \param [in] alpha Scaling factor for the matrix-matrix product. - /// \param [in] a Input matrix A. - /// \param [in] a_type Data type of the matrix A. - /// \param [in] lda Leading dimension of A. - /// \param [in] stride_a Stride between the different A matrices. - /// \param [in] b Input matrix B. - /// \param [in] b_type Data type of the matrix B. - /// \param [in] ldb Leading dimension of B. - /// \param [in] stride_b Stride between the different B matrices. - /// \param [in] beta Scaling factor for matrix C. - /// \param [in, out] c Input/Output matrix C. - /// \param [in] c_type Data type of the matrix C. - /// \param [in] ldc Leading dimension of C. - /// \param [in] stride_c Stride between the different C matrices. - /// \param [in] batch_size Specifies the number of matrix multiply operations to perform. - /// \param [in] scaling_type Data type of the scaling factors. - inline void gemm_batch(sycl::queue &q, oneapi::mkl::transpose a_trans, - oneapi::mkl::transpose b_trans, int m, int n, int k, - const void *alpha, const void *a, library_data_t a_type, - int lda, long long int stride_a, const void *b, - library_data_t b_type, int ldb, long long int stride_b, - const void *beta, void *c, library_data_t c_type, - int ldc, long long int stride_c, int batch_size, - library_data_t scaling_type) - { - if (scaling_type == library_data_t::real_float && - c_type == library_data_t::complex_float) - { - scaling_type = library_data_t::complex_float; - } - else if (scaling_type == library_data_t::real_double && - c_type == library_data_t::complex_double) - { - scaling_type = library_data_t::complex_double; - } - - std::uint64_t key = - detail::get_type_combination_id(a_type, b_type, c_type, scaling_type); - switch (key) - { - case detail::get_type_combination_id( - library_data_t::real_float, library_data_t::real_float, - library_data_t::real_float, library_data_t::real_float): - { - detail::gemm_batch_impl( - q, a_trans, b_trans, m, n, k, alpha, a, lda, stride_a, b, ldb, stride_b, - beta, c, ldc, stride_c, batch_size); - break; - } - case detail::get_type_combination_id( - library_data_t::real_double, library_data_t::real_double, - library_data_t::real_double, library_data_t::real_double): - { - detail::gemm_batch_impl( - q, a_trans, b_trans, m, n, k, alpha, a, lda, stride_a, b, ldb, stride_b, - beta, c, ldc, stride_c, batch_size); - break; - } - case detail::get_type_combination_id( - library_data_t::complex_float, library_data_t::complex_float, - library_data_t::complex_float, library_data_t::complex_float): - { - detail::gemm_batch_impl, std::complex, - std::complex, std::complex>( - q, a_trans, b_trans, m, n, k, alpha, a, lda, stride_a, b, ldb, stride_b, - beta, c, ldc, stride_c, batch_size); - break; - } - case detail::get_type_combination_id( - library_data_t::complex_double, library_data_t::complex_double, - library_data_t::complex_double, library_data_t::complex_double): - { - detail::gemm_batch_impl, std::complex, - std::complex, std::complex>( - q, a_trans, b_trans, m, n, k, alpha, a, lda, stride_a, b, ldb, stride_b, - beta, c, ldc, stride_c, batch_size); - break; - } - case detail::get_type_combination_id( - library_data_t::real_half, library_data_t::real_half, - library_data_t::real_half, library_data_t::real_half): - { - detail::gemm_batch_impl(q, a_trans, b_trans, m, n, k, alpha, - a, lda, stride_a, b, ldb, stride_b, - beta, c, ldc, stride_c, batch_size); - break; - } -#ifdef __INTEL_MKL__ - case detail::get_type_combination_id( - library_data_t::real_bfloat16, library_data_t::real_bfloat16, - library_data_t::real_bfloat16, library_data_t::real_float): - { - detail::gemm_batch_impl( - q, a_trans, b_trans, m, n, k, alpha, a, lda, stride_a, b, ldb, stride_b, - beta, c, ldc, stride_c, batch_size); - break; - } - case detail::get_type_combination_id( - library_data_t::real_bfloat16, library_data_t::real_bfloat16, - library_data_t::real_float, library_data_t::real_float): - { - detail::gemm_batch_impl(q, a_trans, b_trans, m, n, k, alpha, a, lda, - stride_a, b, ldb, stride_b, beta, c, ldc, - stride_c, batch_size); - break; - } - case detail::get_type_combination_id( - library_data_t::real_int8, library_data_t::real_int8, - library_data_t::real_int32, library_data_t::real_int32): - { - detail::gemm_batch_impl(q, a_trans, b_trans, m, n, k, alpha, - a, lda, stride_a, b, ldb, stride_b, - beta, c, ldc, stride_c, batch_size); - break; - } - case detail::get_type_combination_id( - library_data_t::real_int8, library_data_t::real_int8, - library_data_t::real_float, library_data_t::real_float): - { - detail::gemm_batch_impl( - q, a_trans, b_trans, m, n, k, alpha, a, lda, stride_a, b, ldb, stride_b, - beta, c, ldc, stride_c, batch_size); - break; - } - case detail::get_type_combination_id( - library_data_t::real_half, library_data_t::real_half, - library_data_t::real_float, library_data_t::real_float): - { - detail::gemm_batch_impl( - q, a_trans, b_trans, m, n, k, alpha, a, lda, stride_a, b, ldb, stride_b, - beta, c, ldc, stride_c, batch_size); - break; - } -#endif - case detail::get_type_combination_id( - library_data_t::real_half, library_data_t::real_half, - library_data_t::real_half, library_data_t::real_float): - { - float alpha_value = - dpct::get_value(reinterpret_cast(alpha), q); - float beta_value = - dpct::get_value(reinterpret_cast(beta), q); - sycl::half alpha_half(alpha_value); - sycl::half beta_half(beta_value); - detail::gemm_batch_impl( - q, a_trans, b_trans, m, n, k, &alpha_half, a, lda, stride_a, b, ldb, stride_b, - &beta_half, c, ldc, stride_c, batch_size); - break; - } - default: - throw std::runtime_error("the combination of data type is unsupported"); - } - } - - static inline void - async_dpct_memcpy(void *to_ptr, size_t to_pitch, const void *from_ptr, - size_t from_pitch, size_t x, size_t y, - memcpy_direction direction = automatic, - sycl::queue &q = get_default_queue()) - { - detail::dpct_memcpy(q, to_ptr, from_ptr, to_pitch, from_pitch, x, y, - direction); - } - - using err0 = detail::generic_error_type; - using err1 = detail::generic_error_type; - - static inline void dpct_free(void *ptr, sycl::queue &q = get_default_queue()) { - detail::dpct_free(ptr, q); - } - - /// dpct accessor used as device function parameter. - template class accessor; - template class accessor { - public: - using memory_t = detail::memory_traits; - using element_t = typename memory_t::element_t; - using pointer_t = typename memory_t::pointer_t; - using accessor_t = typename memory_t::template accessor_t<3>; - accessor(pointer_t data, const sycl::range<3> &in_range) - : _data(data), _range(in_range) {} - template - accessor(typename std::enable_if::type &acc) - : accessor(acc, acc.get_range()) {} - accessor(const accessor_t &acc, const sycl::range<3> &in_range) - : accessor(acc.get_pointer(), in_range) {} - accessor operator[](size_t index) const { - sycl::range<2> sub(_range.get(1), _range.get(2)); - return accessor(_data + index * sub.size(), sub); - } - - pointer_t get_ptr() const { return _data; } - - private: - pointer_t _data; - sycl::range<3> _range; - }; - template class accessor { - public: - using memory_t = detail::memory_traits; - using element_t = typename memory_t::element_t; - using pointer_t = typename memory_t::pointer_t; - using accessor_t = typename memory_t::template accessor_t<2>; - accessor(pointer_t data, const sycl::range<2> &in_range) - : _data(data), _range(in_range) {} - template - accessor(typename std::enable_if::type &acc) - : accessor(acc, acc.get_range()) {} - accessor(const accessor_t &acc, const sycl::range<2> &in_range) - : accessor(acc.get_pointer(), in_range) {} - - pointer_t operator[](size_t index) const { - return _data + _range.get(1) * index; - } - - pointer_t get_ptr() const { return _data; } - - private: - pointer_t _data; - sycl::range<2> _range; - }; - - namespace detail { - /// Device variable with address space of shared, global or constant. - template class device_memory { - public: - using accessor_t = - typename detail::memory_traits::template accessor_t; - using value_t = typename detail::memory_traits::value_t; - using dpct_accessor_t = dpct::accessor; - - device_memory() : device_memory(sycl::range(1)) {} - - /// Constructor of 1-D array with initializer list - device_memory(const sycl::range &in_range, - std::initializer_list &&init_list) - : device_memory(in_range) { - assert(init_list.size() <= in_range.size()); - _host_ptr = (value_t *)std::malloc(_size); - std::memset(_host_ptr, 0, _size); - std::memcpy(_host_ptr, init_list.begin(), init_list.size() * sizeof(T)); - } - - /// Constructor of 2-D array with initializer list - template - device_memory( - const typename std::enable_if>::type &in_range, - std::initializer_list> &&init_list) - : device_memory(in_range) { - assert(init_list.size() <= in_range[0]); - _host_ptr = (value_t *)std::malloc(_size); - std::memset(_host_ptr, 0, _size); - auto tmp_data = _host_ptr; - for (auto sub_list : init_list) { - assert(sub_list.size() <= in_range[1]); - std::memcpy(tmp_data, sub_list.begin(), - sub_list.size() * sizeof(T)); - tmp_data += in_range[1]; - } - } - - /// Constructor with range - device_memory(const sycl::range &range_in) - : _size(range_in.size() * sizeof(T)), _range(range_in), - _reference(false), _host_ptr(nullptr), _device_ptr(nullptr) { - static_assert( - (Memory == global) || (Memory == constant) || (Memory == shared), - "device memory region should be global, constant or shared"); - // Make sure that singleton class mem_mgr and dev_mgr will destruct - // later than this. - detail::mem_mgr::instance(); - dev_mgr::instance(); - } - - /// Constructor with range - template - device_memory(Args... Arguments) - : device_memory(sycl::range(Arguments...)) {} - - ~device_memory() { - if (_device_ptr && !_reference) - dpct::dpct_free(_device_ptr); - if (_host_ptr) - std::free(_host_ptr); - } - - /// Allocate memory with default queue, and init memory if has initial - /// value. - void init() { init(dpct::get_default_queue()); } - /// Allocate memory with specified queue, and init memory if has initial - /// value. - void init(sycl::queue &q) { - if (_device_ptr) - return; - if (!_size) - return; - allocate_device(q); - if (_host_ptr) - detail::dpct_memcpy(q, _device_ptr, _host_ptr, _size, - host_to_device); - } - - /// The variable is assigned to a device pointer. - void assign(value_t *src, size_t size) { - this->~device_memory(); - new (this) device_memory(src, size); - } - - /// Get memory pointer of the memory object, which is virtual pointer when - /// usm is not used, and device pointer when usm is used. - value_t *get_ptr() { return get_ptr(get_default_queue()); } - /// Get memory pointer of the memory object, which is virtual pointer when - /// usm is not used, and device pointer when usm is used. - value_t *get_ptr(sycl::queue &q) { - init(q); - return _device_ptr; - } - - /// Get the device memory object size in bytes. - size_t get_size() { return _size; } - - template - typename std::enable_if::type &operator[](size_t index) { - init(); - return _device_ptr[index]; - } - - /// Get dpct::accessor with dimension info for the device memory object - /// when usm is used and dimension is greater than 1. - template - typename std::enable_if::type - get_access(sycl::handler &cgh) { - return dpct_accessor_t((T *)_device_ptr, _range); - } - - private: - device_memory(value_t *memory_ptr, size_t size) - : _size(size), _range(size / sizeof(T)), _reference(true), - _device_ptr(memory_ptr) {} - - void allocate_device(sycl::queue &q) { - #ifndef DPCT_USM_LEVEL_NONE - if (Memory == shared) { - _device_ptr = (value_t *)sycl::malloc_shared(_size, q.get_device(), - q.get_context()); - return; - } - #ifdef SYCL_EXT_ONEAPI_USM_DEVICE_READ_ONLY - if (Memory == constant) { - _device_ptr = (value_t *)sycl::malloc_device( - _size, q.get_device(), q.get_context(), - sycl::ext::oneapi::property::usm::device_read_only()); - return; - } - #endif - #endif - _device_ptr = (value_t *)detail::dpct_malloc(_size, q); - } - - size_t _size; - sycl::range _range; - bool _reference; - value_t *_host_ptr; - value_t *_device_ptr; - }; - template - class device_memory : public device_memory { - public: - using base = device_memory; - using value_t = typename base::value_t; - using accessor_t = - typename detail::memory_traits::template accessor_t<0>; - - /// Constructor with initial value. - device_memory(const value_t &val) : base(sycl::range<1>(1), {val}) {} - - /// Default constructor - device_memory() : base(1) {} - }; - } // namespace detail - - template - using global_memory = detail::device_memory; - template - using constant_memory = detail::device_memory; - template - using shared_memory = detail::device_memory; - - -} // COPY from DPCT head files - -#define GGML_COMMON_DECL_SYCL -#define GGML_COMMON_IMPL_SYCL -#include "ggml-common.h" - -static int g_ggml_sycl_debug=0; -#define GGML_SYCL_DEBUG(...) do{if(g_ggml_sycl_debug) fprintf(stderr, __VA_ARGS__);}while(0) - -#define CHECK_TRY_ERROR(expr) \ - [&]() { \ - try { \ - expr; \ - return dpct::success; \ - } catch (std::exception const &e) { \ - std::cerr << e.what()<< "\nException caught at file:" << __FILE__ \ - << ", line:" << __LINE__ <<", func:"<<__func__<< std::endl; \ - return dpct::default_error; \ - } \ - }() - -// #define DEBUG_SYCL_MALLOC - -static int g_work_group_size = 0; -// typedef sycl::half ggml_fp16_t; - -#define __SYCL_ARCH__ DPCT_COMPATIBILITY_TEMP -#define VER_4VEC 610 //todo for hardward optimize. -#define VER_GEN9 700 //todo for hardward optimize. -#define VER_GEN12 1000000 //todo for hardward optimize. -#define VER_GEN13 (VER_GEN12 + 1030) //todo for hardward optimize. - -#define GGML_SYCL_MAX_NODES 8192 //TODO: adapt to hardwares - - -//define for XMX in Intel GPU -//TODO: currently, it's not used for XMX really. -#define SYCL_USE_XMX - -// max batch size to use MMQ kernels when tensor cores are available -#define XMX_MAX_BATCH_SIZE 32 - - -#if defined(_MSC_VER) -#pragma warning(disable: 4244 4267) // possible loss of data -#endif - -// dmmv = dequantize_mul_mat_vec -#ifndef GGML_SYCL_DMMV_X -#define GGML_SYCL_DMMV_X 32 -#endif -#ifndef GGML_SYCL_MMV_Y -#define GGML_SYCL_MMV_Y 1 -#endif - -enum ggml_sycl_backend_gpu_mode { - SYCL_UNSET_GPU_MODE = -1, - SYCL_SINGLE_GPU_MODE = 0, - SYCL_MUL_GPU_MODE -}; - -static_assert(sizeof(sycl::half) == sizeof(ggml_fp16_t), "wrong fp16 size"); - -static void crash(){ - int *ptr = NULL; - *ptr = 0; -} - -static void ggml_sycl_error(const char * stmt, const char * func, const char * file, const int line, const char * msg) { - fprintf(stderr, "SYCL error: %s: %s\n", stmt, msg); - fprintf(stderr, " in function %s at %s:%d\n", func, file, line); - GGML_ASSERT(!"SYCL error"); -} - -#define SYCL_CHECK(err) do { \ - auto err_ = (err); if (err_ != 0) ggml_sycl_error( \ - #err, __func__, __FILE__, __LINE__, \ - "Meet error in this line code!"); \ -} while (0) - -#if DPCT_COMPAT_RT_VERSION >= 11100 -#define GGML_SYCL_ASSUME(x) __builtin_assume(x) -#else -#define GGML_SYCL_ASSUME(x) -#endif // DPCT_COMPAT_RT_VERSION >= 11100 - -#ifdef GGML_SYCL_F16 -typedef sycl::half dfloat; // dequantize float -typedef sycl::half2 dfloat2; -#else -typedef float dfloat; // dequantize float -typedef sycl::float2 dfloat2; -#endif //GGML_SYCL_F16 - -#define MMVQ_MAX_BATCH_SIZE 8 - -static const int8_t kvalues_iq4nl[16]={-127, -104, -83, -65, -49, -35, -22, -10, 1, 13, 25, 38, 53, 69, 89, 113}; - -bool ggml_sycl_loaded(void); -void * ggml_sycl_host_malloc(size_t size); -void ggml_sycl_host_free(void * ptr); -bool ggml_sycl_can_mul_mat(const struct ggml_tensor * src0, const struct ggml_tensor * src1, struct ggml_tensor * dst); -void ggml_sycl_free_data(struct ggml_tensor * tensor); -void ggml_sycl_assign_buffers(struct ggml_tensor * tensor); -void ggml_sycl_assign_buffers_no_scratch(struct ggml_tensor * tensor); -void ggml_sycl_assign_buffers_force_inplace(struct ggml_tensor * tensor); -void ggml_sycl_assign_buffers_no_alloc(struct ggml_tensor * tensor); -void ggml_sycl_copy_to_device(struct ggml_tensor * tensor); -void ggml_sycl_set_main_device(int main_device); -void ggml_sycl_set_mul_mat_q(bool mul_mat_q); -void ggml_sycl_set_scratch_size(size_t scratch_size); -void ggml_sycl_free_scratch(void); -void ggml_sycl_get_device_description(int device, char * description, size_t description_size); -bool ggml_backend_is_sycl(ggml_backend_t backend); -int ggml_backend_sycl_get_device(ggml_backend_t backend); -int get_main_device(); -void print_ggml_tensor(const char*name, struct ggml_tensor *src); -void log_tensor_with_cnt(const char* name, struct ggml_tensor * src, int stop_cnt); - -void dev2dev_memcpy(sycl::queue &q_dst, sycl::queue &q_src, void *ptr_dst, - const void *ptr_src, size_t size) { - char *host_buf = (char *)malloc(size); - q_src.memcpy(host_buf, (const char *)ptr_src, size).wait(); - q_dst.memcpy((char *)ptr_dst, host_buf, size).wait(); - free(host_buf); -} - -static __dpct_inline__ int get_int_from_int8(const int8_t *x8, const int &i32) { - const uint16_t * x16 = (const uint16_t *) (x8 + sizeof(int) * i32); // assume at least 2 byte alignment - - int x32 = 0; - x32 |= x16[0] << 0; - x32 |= x16[1] << 16; - - return x32; -} - -static __dpct_inline__ int get_int_from_uint8(const uint8_t *x8, - const int &i32) { - const uint16_t * x16 = (const uint16_t *) (x8 + sizeof(int) * i32); // assume at least 2 byte alignment - - int x32 = 0; - x32 |= x16[0] << 0; - x32 |= x16[1] << 16; - - return x32; -} - -static __dpct_inline__ int get_int_from_int8_aligned(const int8_t *x8, - const int &i32) { - return *((const int *) (x8 + sizeof(int) * i32)); // assume at least 4 byte alignment -} - -static __dpct_inline__ int get_int_from_uint8_aligned(const uint8_t *x8, - const int &i32) { - return *((const int *) (x8 + sizeof(int) * i32)); // assume at least 4 byte alignment -} - -template -using to_t_sycl_t = void (*)(const void *__restrict__ x, T *__restrict__ y, - int k, dpct::queue_ptr stream); -typedef to_t_sycl_t to_fp32_sycl_t; -typedef to_t_sycl_t to_fp16_sycl_t; - -typedef void (*dequantize_kernel_t)(const void * vx, const int ib, const int iqs, dfloat2 & v); -typedef void (*dot_kernel_k_t)(const void * __restrict__ vx, const int ib, const int iqs, const float * __restrict__ y, float & v); -typedef void (*cpy_kernel_t)(const char * cx, char * cdst); -typedef void (*ggml_sycl_func_t)(const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst); -typedef void (*ggml_sycl_op_mul_mat_t)( - const ggml_tensor *src0, const ggml_tensor *src1, ggml_tensor *dst, - const char *src0_dd_i, const float *src1_ddf_i, const char *src1_ddq_i, - float *dst_dd_i, const int64_t row_low, const int64_t row_high, - const int64_t src1_ncols, const int64_t src1_padded_row_size, - const dpct::queue_ptr &stream); -typedef void (*ggml_sycl_op_flatten_t)(const ggml_tensor *src0, - const ggml_tensor *src1, - ggml_tensor *dst, const float *src0_dd, - const float *src1_dd, float *dst_dd, - const dpct::queue_ptr &main_stream); - -typedef float (*vec_dot_q_sycl_t)(const void * __restrict__ vbq, const block_q8_1 * __restrict__ bq8_1, const int & iqs); -typedef void (*allocate_tiles_sycl_t)(int **x_ql, sycl::half2 **x_dm, - int **x_qh, int **x_sc); -typedef void (*load_tiles_sycl_t)(const void *__restrict__ vx, - int *__restrict__ x_ql, - sycl::half2 *__restrict__ x_dm, - int *__restrict__ x_qh, - int *__restrict__ x_sc, const int &i_offset, - const int &i_max, const int &k, - const int &blocks_per_row); -typedef float (*vec_dot_q_mul_mat_sycl_t)( - const int *__restrict__ x_ql, const sycl::half2 *__restrict__ x_dm, - const int *__restrict__ x_qh, const int *__restrict__ x_sc, - const int *__restrict__ y_qs, const sycl::half2 *__restrict__ y_ms, - const int &i, const int &j, const int &k); - -#define WARP_SIZE 32 -#define MATRIX_ROW_PADDING 512 // last row of quant. matrices is a multiple of this to avoid out-of-bounds memory accesses - -#define SYCL_GELU_BLOCK_SIZE 256 -#define SYCL_SILU_BLOCK_SIZE 256 -#define SYCL_TANH_BLOCK_SIZE 256 -#define SYCL_RELU_BLOCK_SIZE 256 -#define SYCL_HARDSIGMOID_BLOCK_SIZE 256 -#define SYCL_HARDSWISH_BLOCK_SIZE 256 -#define SYCL_SQR_BLOCK_SIZE 256 -#define SYCL_CPY_BLOCK_SIZE 32 -#define SYCL_SCALE_BLOCK_SIZE 256 -#define SYCL_CLAMP_BLOCK_SIZE 256 -#define SYCL_ROPE_BLOCK_SIZE 256 -#define SYCL_ALIBI_BLOCK_SIZE 32 -#define SYCL_DIAG_MASK_INF_BLOCK_SIZE 32 -#define SYCL_QUANTIZE_BLOCK_SIZE 256 -#define SYCL_DEQUANTIZE_BLOCK_SIZE 256 -#define SYCL_GET_ROWS_BLOCK_SIZE 256 -#define SYCL_UPSCALE_BLOCK_SIZE 256 -#define SYCL_CONCAT_BLOCK_SIZE 256 -#define SYCL_PAD_BLOCK_SIZE 256 -#define SYCL_ACC_BLOCK_SIZE 256 -#define SYCL_IM2COL_BLOCK_SIZE 256 -#define SYCL_POOL2D_BLOCK_SIZE 256 - -// dmmv = dequantize_mul_mat_vec -#ifndef GGML_SYCL_DMMV_X -#define GGML_SYCL_DMMV_X 32 -#endif -#ifndef GGML_SYCL_MMV_Y -#define GGML_SYCL_MMV_Y 1 -#endif - -#ifndef K_QUANTS_PER_ITERATION -#define K_QUANTS_PER_ITERATION 2 -#else -static_assert(K_QUANTS_PER_ITERATION == 1 || K_QUANTS_PER_ITERATION == 2, "K_QUANTS_PER_ITERATION must be 1 or 2"); -#endif - -#ifndef GGML_SYCL_PEER_MAX_BATCH_SIZE -#define GGML_SYCL_PEER_MAX_BATCH_SIZE 128 -#endif // GGML_SYCL_PEER_MAX_BATCH_SIZE - -#define MUL_MAT_SRC1_COL_STRIDE 128 - -#define MAX_STREAMS 8 -static dpct::queue_ptr g_syclStreams[GGML_SYCL_MAX_DEVICES][MAX_STREAMS] = {{0}}; - -struct ggml_tensor_extra_gpu { - void * data_device[GGML_SYCL_MAX_DEVICES]; // 1 pointer for each device for split tensors - dpct::event_ptr - events[GGML_SYCL_MAX_DEVICES] - [MAX_STREAMS]; // events for synchronizing multiple GPUs -}; - -class sycl_gpu_mgr { - public: - std::vector gpus; - std::vector devices; - sycl::queue *first_queue; - sycl::context co_ctx; - int max_compute_units = 0; - int work_group_size = 0; - std::string gpus_list = ""; - - /* - Use all GPUs with same top max compute units - */ - sycl_gpu_mgr() { - detect_sycl_gpu_list_with_max_cu(); - get_allow_gpus(); - create_context_with_gpus(); - } - - /* - Only use the assigned GPU - */ - sycl_gpu_mgr(int main_gpu_id) { - sycl::device device = dpct::dev_mgr::instance().get_device(main_gpu_id); - dpct::device_info prop; - dpct::get_device_info(prop, device); - gpus.push_back(main_gpu_id); - devices.push_back(device); - work_group_size = prop.get_max_work_group_size(); - max_compute_units = prop.get_max_compute_units(); - - get_allow_gpus(); - create_context_with_gpus(); - } - - void create_context_with_gpus() { - sycl::context ctx = sycl::context(devices); - assert(gpus.size() > 0); - first_queue = dpct::get_current_device().create_queue(ctx, devices[0]); - co_ctx = first_queue->get_context(); - } - - sycl::context &get_co_ctx() { return co_ctx; } - - void get_allow_gpus() { - gpus_list = ""; - for (size_t i = 0; i < gpus.size(); ++i) { - gpus_list += std::to_string(gpus[i]); - gpus_list += ","; - } - if (gpus_list.length() > 1) { - gpus_list.pop_back(); - } - } - - bool is_allowed_gpu(int device_id) { - return std::find(gpus.begin(), gpus.end(), device_id) != gpus.end(); - } - - void detect_sycl_gpu_list_with_max_cu() try { - int device_count = dpct::dev_mgr::instance().device_count(); - - for (int id = 0; id < device_count; id++) { - sycl::device device = dpct::dev_mgr::instance().get_device(id); - if (!device.is_gpu()) - continue; - dpct::device_info prop; - dpct::get_device_info(prop, device); - if (max_compute_units < prop.get_max_compute_units()) - max_compute_units = prop.get_max_compute_units(); - } - - for (int id = 0; id < device_count; id++) { - sycl::device device = dpct::dev_mgr::instance().get_device(id); - if (!device.is_gpu()) - continue; - dpct::device_info prop; - dpct::get_device_info(prop, device); - if (max_compute_units == prop.get_max_compute_units() && - is_ext_oneapi_device(device)) { - gpus.push_back(id); - devices.push_back(device); - work_group_size = prop.get_max_work_group_size(); - } - } - return; - } catch (sycl::exception const &exc) { - std::cerr << exc.what() << "Exception caught at file:" << __FILE__ - << ", line:" << __LINE__ << std::endl; - std::exit(1); - } - - int get_gpu_count() { return (int)gpus.size(); } - - int get_index(int id) { - for (int i = 0; i < (int)gpus.size(); i++) { - if (gpus[i] == id) - return i; - } - printf("miss to get device index by id=%d\n", id); - GGML_ASSERT(false); - } - - int get_next_index(int id) { - int cur_index = get_index(id); - for (int i = cur_index + 1; i < (int)gpus.size(); i++) { - if (gpus[i] == id) - return i; - } - GGML_ASSERT(false); - } - - bool is_ext_oneapi_device(const sycl::device &dev) { - sycl::backend dev_backend = dev.get_backend(); - if (dev_backend == sycl::backend::ext_oneapi_level_zero || - dev_backend == sycl::backend::ext_oneapi_cuda || - dev_backend == sycl::backend::ext_oneapi_hip) - return true; - return false; - } -}; - -static sycl_gpu_mgr *g_sycl_gpu_mgr = NULL; -static int g_device_count = -1; -static int g_all_sycl_device_count = -1; -static int g_main_device = -1; -static int g_main_device_id = -1; -static bool g_ggml_backend_sycl_buffer_type_initialized = false; - -static std::array g_default_tensor_split = {}; - -static float g_tensor_split[GGML_SYCL_MAX_DEVICES] = {0}; - -static ggml_sycl_backend_gpu_mode g_ggml_sycl_backend_gpu_mode = SYCL_UNSET_GPU_MODE; - -struct sycl_device_capabilities { - int cc; // compute capability - bool vmm; // virtual memory support - size_t vmm_granularity; // granularity of virtual memory - int device_id; -}; - -static sycl_device_capabilities g_device_caps[GGML_SYCL_MAX_DEVICES] = { {0, false, 0, -1} }; - -struct sycl_device_id2index { - int index; -}; - -static void * g_scratch_buffer = nullptr; -static size_t g_scratch_size = 0; // disabled by default -static size_t g_scratch_offset = 0; - -static dpct::queue_ptr g_sycl_handles[GGML_SYCL_MAX_DEVICES] = {nullptr}; - -int get_main_device(){ - return g_main_device; -} - -[[noreturn]] -static void bad_arch(const sycl::stream &stream_ct1) { - stream_ct1 << "ERROR: ggml-sycl was compiled without support for the " - "current GPU architecture.\n"; - // __trap(); - std::exit(1); - - (void) bad_arch; // suppress unused function warning -} - -/* -device_index: device index from 0 to n (continue numbers). - It is used for device select/set in SYCL backend internal data structure. -*/ -void check_allow_gpu_index(const int device_index) { - if (device_index >= g_device_count) { - char error_buf[256]; - snprintf(error_buf, sizeof(error_buf), - "%s error: device_index:%d is out of range: [0-%d]", __func__, - device_index, g_device_count - 1); - fprintf(stderr, "%s\n", error_buf); - assert(false); - } -} - -/* -device_id: device ID is shown by ggml_backend_sycl_print_sycl_devices(). - It is only used to set current working device. -*/ -void check_allow_gpu_id(const int device_id) { - if (!g_sycl_gpu_mgr->is_allowed_gpu(device_id)) { - char error_buf[256]; - snprintf(error_buf, sizeof(error_buf), - "error: cannot set device=%d, which is not allowed. Please " - "set GPU ID in: [%s]", - device_id, g_sycl_gpu_mgr->gpus_list.c_str()); - fprintf(stderr, "%s\n", error_buf); - throw std::invalid_argument(error_buf); - } -} - -int get_current_device_id() { - return dpct::dev_mgr::instance().current_device_id(); -} - -inline dpct::err0 ggml_sycl_set_device(const int device) try { - - int device_id = g_sycl_gpu_mgr->gpus[device]; - check_allow_gpu_id(device_id); - - int current_device_id; - SYCL_CHECK(CHECK_TRY_ERROR(current_device_id = get_current_device_id())); - - // GGML_SYCL_DEBUG("ggml_sycl_set_device device_id=%d, - // current_device_id=%d\n", device, current_device); - if (device_id == current_device_id) { - return 0; - } - - return CHECK_TRY_ERROR(dpct::select_device(device_id)); -} catch (sycl::exception const &exc) { - std::cerr << exc.what() << "Exception caught at file:" << __FILE__ - << ", line:" << __LINE__ << std::endl; - crash(); - std::exit(1); -} - -void log_ggml_var_device(const char*name, float *src, size_t total_elements, bool src_on_device){ - if(!g_ggml_sycl_debug) return; - if(!src){ - printf("GGML Tensor:%s skip to save for NULL pointer\n", name); - return; - } - char filename[1024]; - sprintf(filename, "%s.txt", name); - printf("GGML Tensor:%s save to %s\n", name, filename); - - size_t total_size = total_elements*sizeof(float); - float *local_buf = NULL; - if(src_on_device) { - local_buf = (float *) ggml_sycl_host_malloc(total_size); - ggml_sycl_set_device(g_main_device); - dpct::queue_ptr main_stream = g_syclStreams[g_main_device][0]; - main_stream->memcpy(local_buf, src, total_size).wait(); - } - else { - local_buf = (float *)src; - } - - std::ofstream logfile; - logfile.open(filename); - for(size_t i=0; imemcpy(local_buf, src, total_size).wait(); - } - else { - local_buf = (sycl::half *)src; - } - - std::ofstream logfile; - logfile.open(filename); - for(size_t i=0; ibackend == GGML_BACKEND_TYPE_GPU || src->backend == GGML_BACKEND_TYPE_GPU_SPLIT; - float *src_data =NULL; - if(src_on_device) { - ggml_tensor_extra_gpu * src_extra = (ggml_tensor_extra_gpu *) src->extra; - src_data = (float*)src_extra->data_device[g_main_device]; - } - else { - src_data = (float *)src->data; - } - - log_ggml_var_device(name, src_data, total_elements, src_on_device); -} - -static int log_file_name_idx=0; -void log_tensor_with_cnt(const char* name, struct ggml_tensor * src, int stop_cnt) { - stop_cnt = 4; - if(log_file_name_idx>=stop_cnt) return; - char filename[1280]; - sprintf(filename, "%s_%07d", name, log_file_name_idx); - log_file_name_idx++; - print_ggml_tensor(filename, src); -} - -static __dpct_inline__ float warp_reduce_sum(float x, - const sycl::nd_item<3> &item_ct1) { -#pragma unroll - for (int mask = 16; mask > 0; mask >>= 1) { - /* - DPCT1096:98: The right-most dimension of the work-group used in the SYCL - kernel that calls this function may be less than "32". The function - "dpct::permute_sub_group_by_xor" may return an unexpected result on the - CPU device. Modify the size of the work-group to ensure that the value - of the right-most dimension is a multiple of "32". - */ - x += dpct::permute_sub_group_by_xor(item_ct1.get_sub_group(), x, mask); - } - return x; -} - -static __dpct_inline__ sycl::float2 -warp_reduce_sum(sycl::float2 a, const sycl::nd_item<3> &item_ct1) { -#pragma unroll - for (int mask = 16; mask > 0; mask >>= 1) { - a.x() += dpct::permute_sub_group_by_xor(item_ct1.get_sub_group(), a.x(), - mask); - a.y() += dpct::permute_sub_group_by_xor(item_ct1.get_sub_group(), a.y(), - mask); - } - return a; -} - -static __dpct_inline__ float warp_reduce_max(float x, - const sycl::nd_item<3> &item_ct1) { -#pragma unroll - for (int mask = 16; mask > 0; mask >>= 1) { - /* - DPCT1096:97: The right-most dimension of the work-group used in the SYCL - kernel that calls this function may be less than "32". The function - "dpct::permute_sub_group_by_xor" may return an unexpected result on the - CPU device. Modify the size of the work-group to ensure that the value - of the right-most dimension is a multiple of "32". - */ - x = sycl::fmax(x, dpct::permute_sub_group_by_xor( - item_ct1.get_sub_group(), x, mask)); - } - return x; -} - -static __dpct_inline__ float op_repeat(const float a, const float b) { - return b; - GGML_UNUSED(a); -} - -static __dpct_inline__ float op_add(const float a, const float b) { - return a + b; -} - -static __dpct_inline__ float op_mul(const float a, const float b) { - return a * b; -} - -static __dpct_inline__ float op_div(const float a, const float b) { - return a / b; -} - -template -static void k_bin_bcast(const src0_t * src0, const src1_t * src1, dst_t * dst, - int ne0, int ne1, int ne2, int ne3, - int ne10, int ne11, int ne12, int ne13, - /*int s0, */ int s1, int s2, int s3, - /*int s10,*/ int s11, int s12, int s13, - const sycl::nd_item<3> &item_ct1) { - const int i0s = item_ct1.get_local_range(2) * item_ct1.get_group(2) + - item_ct1.get_local_id(2); - const int i1 = (item_ct1.get_local_range(1) * item_ct1.get_group(1) + - item_ct1.get_local_id(1)); - const int i2 = (item_ct1.get_local_range(0) * item_ct1.get_group(0) + - item_ct1.get_local_id(0)) / - ne3; - const int i3 = (item_ct1.get_local_range(0) * item_ct1.get_group(0) + - item_ct1.get_local_id(0)) % - ne3; - - if (i0s >= ne0 || i1 >= ne1 || i2 >= ne2 || i3 >= ne3) { - return; - } - - const int i11 = i1 % ne11; - const int i12 = i2 % ne12; - const int i13 = i3 % ne13; - - const size_t i_src0 = i3*s3 + i2*s2 + i1*s1; - const size_t i_src1 = i13*s13 + i12*s12 + i11*s11; - const size_t i_dst = i_src0; - - const src0_t * src0_row = src0 + i_src0; - const src1_t * src1_row = src1 + i_src1; - dst_t * dst_row = dst + i_dst; - - for (int i0 = i0s; i0 < ne0; - i0 += item_ct1.get_local_range(2) * item_ct1.get_group_range(2)) { - const int i10 = i0 % ne10; - dst_row[i0] = (dst_t)bin_op(src0 ? (float)src0_row[i0] : 0.0f, (float)src1_row[i10]); - } -} - -template -static void k_bin_bcast_unravel(const src0_t * src0, const src1_t * src1, dst_t * dst, - int ne0, int ne1, int ne2, int ne3, - int ne10, int ne11, int ne12, int ne13, - /*int s0, */ int s1, int s2, int s3, - /*int s10,*/ int s11, int s12, int s13, - const sycl::nd_item<3> &item_ct1) { - - const int i = item_ct1.get_local_range(2) * item_ct1.get_group(2) + - item_ct1.get_local_id(2); - - const int i3 = i/(ne2*ne1*ne0); - const int i2 = (i/(ne1*ne0)) % ne2; - const int i1 = (i/ne0) % ne1; - const int i0 = i % ne0; - - if (i0 >= ne0 || i1 >= ne1 || i2 >= ne2 || i3 >= ne3) { - return; - } - - const int i11 = i1 % ne11; - const int i12 = i2 % ne12; - const int i13 = i3 % ne13; - - const size_t i_src0 = i3*s3 + i2*s2 + i1*s1; - const size_t i_src1 = i13*s13 + i12*s12 + i11*s11; - const size_t i_dst = i_src0; - - const src0_t * src0_row = src0 + i_src0; - const src1_t * src1_row = src1 + i_src1; - dst_t * dst_row = dst + i_dst; - - const int i10 = i0 % ne10; - dst_row[i0] = (dst_t)bin_op(src0 ? (float)src0_row[i0] : 0.0f, (float)src1_row[i10]); -} - -static void acc_f32(const float * x, const float * y, float * dst, const int ne, - const int ne10, const int ne11, const int ne12, - const int nb1, const int nb2, int offset, const sycl::nd_item<3> &item_ct1) { - const int i = item_ct1.get_local_range(2) * item_ct1.get_group(2) + - item_ct1.get_local_id(2); - if (i >= ne) { - return; - } - int src1_idx = i - offset; - int oz = src1_idx / nb2; - int oy = (src1_idx - (oz * nb2)) / nb1; - int ox = src1_idx % nb1; - if (src1_idx >= 0 && ox < ne10 && oy < ne11 && oz < ne12) { - dst[i] = x[i] + y[ox + oy * ne10 + oz * ne10 * ne11]; - } else { - dst[i] = x[i]; - } -} - -static void gelu_f32(const float * x, float * dst, const int k, - const sycl::nd_item<3> &item_ct1) { - const float GELU_COEF_A = 0.044715f; - const float SQRT_2_OVER_PI = 0.79788456080286535587989211986876f; - const int i = item_ct1.get_local_range(2) * item_ct1.get_group(2) + - item_ct1.get_local_id(2); - - if (i >= k) { - return; - } - - float xi = x[i]; - dst[i] = 0.5f * xi * - (1.0f + - sycl::tanh(SQRT_2_OVER_PI * xi * (1.0f + GELU_COEF_A * xi * xi))); -} - -static void silu_f32(const float * x, float * dst, const int k, - const sycl::nd_item<3> &item_ct1) { - const int i = item_ct1.get_local_range(2) * item_ct1.get_group(2) + - item_ct1.get_local_id(2); - - if (i >= k) { - return; - } - dst[i] = x[i] / (1.0f + sycl::native::exp(-x[i])); -} - -static void gelu_quick_f32(const float *x, float *dst, int k, - const sycl::nd_item<3> &item_ct1) { - const float GELU_QUICK_COEF = -1.702f; - const int i = item_ct1.get_local_range(2) * item_ct1.get_group(2) + - item_ct1.get_local_id(2); - if (i >= k) { - return; - } - dst[i] = x[i] * (1.0f / (1.0f + sycl::native::exp(GELU_QUICK_COEF * x[i]))); -} - -static void tanh_f32(const float *x, float *dst, int k, - const sycl::nd_item<3> &item_ct1) { - const int i = item_ct1.get_local_range(2) * item_ct1.get_group(2) + - item_ct1.get_local_id(2); - if (i >= k) { - return; - } - dst[i] = sycl::tanh((float)(x[i])); -} - -static void relu_f32(const float * x, float * dst, const int k, - const sycl::nd_item<3> &item_ct1) { - const int i = item_ct1.get_local_range(2) * item_ct1.get_group(2) + - item_ct1.get_local_id(2); - - if (i >= k) { - return; - } - dst[i] = sycl::fmax((float)(x[i]), (float)0); -} - -static void hardsigmoid_f32(const float * x, float * dst, const int k, - const sycl::nd_item<3> &item_ct1) { - const int i = item_ct1.get_local_range(2) * item_ct1.get_group(2) + - item_ct1.get_local_id(2); - - if (i >= k) { - return; - } - dst[i] = sycl::fmin(1.0f, sycl::fmax(0.0f, (x[i] + 3.0f) / 6.0f)); -} - -static void hardswish_f32(const float * x, float * dst, const int k, - const sycl::nd_item<3> &item_ct1) { - const int i = item_ct1.get_local_range(2) * item_ct1.get_group(2) + - item_ct1.get_local_id(2); - - if (i >= k) { - return; - } - dst[i] = x[i] * sycl::fmin(1.0f, sycl::fmax(0.0f, (x[i] + 3.0f) / 6.0f)); -} - -static void leaky_relu_f32(const float *x, float *dst, const int k, const float negative_slope, - const sycl::nd_item<3> &item_ct1) { - const int i = item_ct1.get_local_range(2) * item_ct1.get_group(2) + - item_ct1.get_local_id(2); - if (i >= k) { - return; - } - dst[i] = sycl::fmax((float)(x[i]), (float)0) + - sycl::fmin((float)(x[i]), 0.0f) * negative_slope; -} - -static void sqr_f32(const float * x, float * dst, const int k, - const sycl::nd_item<3> &item_ct1) { - const int i = item_ct1.get_local_range(2) * item_ct1.get_group(2) + - item_ct1.get_local_id(2); - - if (i >= k) { - return; - } - dst[i] = x[i] * x[i]; -} - -static void norm_f32(const float * x, float * dst, const int ncols, const float eps, - const sycl::nd_item<3> &item_ct1, sycl::float2 *s_sum, int block_size) { - const int row = item_ct1.get_group(2) * item_ct1.get_local_range(1) + - item_ct1.get_local_id(1); - const int tid = item_ct1.get_local_id(2); - - sycl::float2 mean_var = sycl::float2(0.f, 0.f); - - for (int col = tid; col < ncols; col += block_size) { - const float xi = x[row*ncols + col]; - mean_var.x() += xi; - mean_var.y() += xi * xi; - } - - // sum up partial sums - mean_var = warp_reduce_sum(mean_var, item_ct1); - if (block_size > WARP_SIZE) { - - int warp_id = item_ct1.get_local_id(2) / WARP_SIZE; - int lane_id = item_ct1.get_local_id(2) % WARP_SIZE; - if (lane_id == 0) { - s_sum[warp_id] = mean_var; - } - /* - DPCT1118:0: SYCL group functions and algorithms must be encountered in - converged control flow. You may need to adjust the code. - */ - item_ct1.barrier(sycl::access::fence_space::local_space); - mean_var = s_sum[lane_id]; - mean_var = warp_reduce_sum(mean_var, item_ct1); - } - - const float mean = mean_var.x() / ncols; - const float var = mean_var.y() / ncols - mean * mean; - const float inv_std = sycl::rsqrt(var + eps); - - for (int col = tid; col < ncols; col += block_size) { - dst[row*ncols + col] = (x[row*ncols + col] - mean) * inv_std; - } -} - -static void concat_f32(const float *x,const float *y, float *dst, const int ne0, const int ne02, - const sycl::nd_item<3> &item_ct1) { - int nidx = item_ct1.get_local_id(2) + - item_ct1.get_group(2) * item_ct1.get_local_range(2); - if (nidx >= ne0) { - return; - } - // operation - int offset_dst = nidx + item_ct1.get_group(1) * ne0 + - item_ct1.get_group(0) * ne0 * item_ct1.get_group_range(1); - if (item_ct1.get_group(0) < ne02) { // src0 - int offset_src = - nidx + item_ct1.get_group(1) * ne0 + - item_ct1.get_group(0) * ne0 * item_ct1.get_group_range(1); - dst[offset_dst] = x[offset_src]; - } else { - int offset_src = - nidx + item_ct1.get_group(1) * ne0 + - (item_ct1.get_group(0) - ne02) * ne0 * item_ct1.get_group_range(1); - dst[offset_dst] = y[offset_src]; - } -} - -static void upscale_f32(const float *x, float *dst, const int ne00, const int nb02, const int scale_factor, - const sycl::nd_item<3> &item_ct1) { - int ne0 = ne00 * scale_factor; - int nidx = item_ct1.get_local_id(2) + - item_ct1.get_group(2) * item_ct1.get_local_range(2); - if (nidx >= ne0) { - return; - } - // operation - int i00 = nidx / scale_factor; - int i01 = item_ct1.get_group(1) / scale_factor; - int offset_src = i00 + i01 * ne00 + item_ct1.get_group(0) * nb02; - int offset_dst = nidx + item_ct1.get_group(1) * ne0 + - item_ct1.get_group(0) * ne0 * item_ct1.get_group_range(1); - dst[offset_dst] = x[offset_src]; -} - -static void pad_f32(const float *x, float *dst, const int ne0, const int ne00, const int ne01, const int ne02, - const sycl::nd_item<3> &item_ct1) { - int nidx = item_ct1.get_local_id(2) + - item_ct1.get_group(2) * item_ct1.get_local_range(2); - if (nidx >= ne0) { - return; - } - - // operation - int offset_dst = nidx + item_ct1.get_group(1) * ne0 + - item_ct1.get_group(0) * ne0 * item_ct1.get_group_range(1); - if (nidx < ne00 && item_ct1.get_group(1) < ne01 && - item_ct1.get_group(0) < ne02) { - int offset_src = nidx + item_ct1.get_group(1) * ne00 + - item_ct1.get_group(0) * ne00 * ne01; - dst[offset_dst] = x[offset_src]; - } else { - dst[offset_dst] = 0.0f; - } -} - -static void group_norm_f32(const float * x, float * dst, const int group_size, const int ne_elements, const float eps, - const sycl::nd_item<3> &item_ct1, float *s_sum, int block_size) { - int start = item_ct1.get_group(2) * group_size; - int end = start + group_size; - - start += item_ct1.get_local_id(2); - - if (end >= ne_elements) { - end = ne_elements; - } - - float tmp = 0.0f; // partial sum for thread in warp - - for (int j = start; j < end; j += block_size) { - tmp += x[j]; - } - - tmp = warp_reduce_sum(tmp, item_ct1); - if (block_size > WARP_SIZE) { - - int warp_id = item_ct1.get_local_id(2) / WARP_SIZE; - int lane_id = item_ct1.get_local_id(2) % WARP_SIZE; - if (lane_id == 0) { - s_sum[warp_id] = tmp; - } - /* - DPCT1118:1: SYCL group functions and algorithms must be encountered in - converged control flow. You may need to adjust the code. - */ - /* - DPCT1065:54: Consider replacing sycl::nd_item::barrier() with - sycl::nd_item::barrier(sycl::access::fence_space::local_space) for - better performance if there is no access to global memory. - */ - item_ct1.barrier(); - tmp = s_sum[lane_id]; - tmp = warp_reduce_sum(tmp, item_ct1); - } - - float mean = tmp / group_size; - tmp = 0.0f; - - for (int j = start; j < end; j += block_size) { - float xi = x[j] - mean; - dst[j] = xi; - tmp += xi * xi; - } - - tmp = warp_reduce_sum(tmp, item_ct1); - if (block_size > WARP_SIZE) { - - int warp_id = item_ct1.get_local_id(2) / WARP_SIZE; - int lane_id = item_ct1.get_local_id(2) % WARP_SIZE; - if (lane_id == 0) { - s_sum[warp_id] = tmp; - } - /* - DPCT1118:2: SYCL group functions and algorithms must be encountered in - converged control flow. You may need to adjust the code. - */ - /* - DPCT1065:55: Consider replacing sycl::nd_item::barrier() with - sycl::nd_item::barrier(sycl::access::fence_space::local_space) for - better performance if there is no access to global memory. - */ - item_ct1.barrier(); - tmp = s_sum[lane_id]; - tmp = warp_reduce_sum(tmp, item_ct1); - } - - float variance = tmp / group_size; - float scale = sycl::rsqrt(variance + eps); - for (int j = start; j < end; j += block_size) { - dst[j] *= scale; - } -} - -static void rms_norm_f32(const float * x, float * dst, const int ncols, const float eps, - const sycl::nd_item<3> &item_ct1, float *s_sum, int block_size) { - const int row = item_ct1.get_group(2) * item_ct1.get_local_range(1) + - item_ct1.get_local_id(1); - const int tid = item_ct1.get_local_id(2); - - float tmp = 0.0f; // partial sum for thread in warp - - for (int col = tid; col < ncols; col += block_size) { - const float xi = x[row*ncols + col]; - tmp += xi * xi; - } - - // sum up partial sums - tmp = warp_reduce_sum(tmp, item_ct1); - if (block_size > WARP_SIZE) { - - int warp_id = item_ct1.get_local_id(2) / WARP_SIZE; - int lane_id = item_ct1.get_local_id(2) % WARP_SIZE; - if (lane_id == 0) { - s_sum[warp_id] = tmp; - } - /* - DPCT1118:3: SYCL group functions and algorithms must be encountered in - converged control flow. You may need to adjust the code. - */ - item_ct1.barrier(sycl::access::fence_space::local_space); - tmp = s_sum[lane_id]; - tmp = warp_reduce_sum(tmp, item_ct1); - } - - const float mean = tmp / ncols; - const float scale = sycl::rsqrt(mean + eps); - - for (int col = tid; col < ncols; col += block_size) { - dst[row*ncols + col] = scale * x[row*ncols + col]; - } -} - -static __dpct_inline__ void dequantize_q4_0(const void *vx, const int ib, - const int iqs, dfloat2 &v) { - const block_q4_0 * x = (const block_q4_0 *) vx; - - const dfloat d = x[ib].d; - - const int vui = x[ib].qs[iqs]; - - v.x() = vui & 0xF; - v.y() = vui >> 4; - -#ifdef GGML_SYCL_F16 - // v = v - {8.0f, 8.0f}; - // v = v * {d, d}; - v.s0() = (v.s0() - 8.0f) * d; - v.s1() = (v.s1() - 8.0f) * d; - -#else - v.x() = (v.x() - 8.0f) * d; - v.y() = (v.y() - 8.0f) * d; -#endif // GGML_SYCL_F16 -} - -static __dpct_inline__ void dequantize_q4_1(const void *vx, const int ib, - const int iqs, dfloat2 &v) { - const block_q4_1 * x = (const block_q4_1 *) vx; - - const dfloat d = x[ib].dm[0]; - const dfloat m = x[ib].dm[1]; - - const int vui = x[ib].qs[iqs]; - - v.x() = vui & 0xF; - v.y() = vui >> 4; - -#ifdef GGML_SYCL_F16 - // v = v * {d, d}; - // v = v + {m, m}; - v.s0() = (v.s0() * d) + m; - v.s1() = (v.s1() * d) + m; - -#else - v.x() = (v.x() * d) + m; - v.y() = (v.y() * d) + m; -#endif // GGML_SYCL_F16 -} - -static __dpct_inline__ void dequantize_q5_0(const void *vx, const int ib, - const int iqs, dfloat2 &v) { - const block_q5_0 * x = (const block_q5_0 *) vx; - - const dfloat d = x[ib].d; - - uint32_t qh; - memcpy(&qh, x[ib].qh, sizeof(qh)); - - const int xh_0 = ((qh >> (iqs + 0)) << 4) & 0x10; - const int xh_1 = ((qh >> (iqs + 12)) ) & 0x10; - - v.x() = ((x[ib].qs[iqs] & 0xf) | xh_0); - v.y() = ((x[ib].qs[iqs] >> 4) | xh_1); - -#ifdef GGML_SYCL_F16 - // v = v - {16.0f, 16.0f}; - // v = v * {d, d}; - v.s0() = (v.s0() - 16.0f) * d; - v.s1() = (v.s1() - 16.0f) * d; - -#else - v.x() = (v.x() - 16.0f) * d; - v.y() = (v.y() - 16.0f) * d; -#endif // GGML_SYCL_F16 -} - -static __dpct_inline__ void dequantize_q5_1(const void *vx, const int ib, - const int iqs, dfloat2 &v) { - const block_q5_1 * x = (const block_q5_1 *) vx; - - const dfloat d = x[ib].dm[0]; - const dfloat m = x[ib].dm[1]; - - uint32_t qh; - memcpy(&qh, x[ib].qh, sizeof(qh)); - - const int xh_0 = ((qh >> (iqs + 0)) << 4) & 0x10; - const int xh_1 = ((qh >> (iqs + 12)) ) & 0x10; - - v.x() = ((x[ib].qs[iqs] & 0xf) | xh_0); - v.y() = ((x[ib].qs[iqs] >> 4) | xh_1); - -#ifdef GGML_SYCL_F16 - // v = v * {d, d}; - // v = v + {m, m}; - v.s0() = (v.s0() * d) + m; - v.s1() = (v.s1() * d) + m; -#else - v.x() = (v.x() * d) + m; - v.y() = (v.y() * d) + m; -#endif // GGML_SYCL_F16 -} - -static __dpct_inline__ void dequantize_q8_0(const void *vx, const int ib, - const int iqs, dfloat2 &v) { - const block_q8_0 * x = (const block_q8_0 *) vx; - - const dfloat d = x[ib].d; - - v.x() = x[ib].qs[iqs + 0]; - v.y() = x[ib].qs[iqs + 1]; - -#ifdef GGML_SYCL_F16 - // v = v * {d, d}; - v.s0() *= d; - v.s1() *= d; -#else - v.x() *= d; - v.y() *= d; -#endif // GGML_SYCL_F16 -} - -template -static void dequantize_block_q4_0(const void * __restrict__ vx, dst_t * __restrict__ yy, int nb32, - const sycl::nd_item<3> &item_ct1) { - - const int i = item_ct1.get_group(2); - - // assume 32 threads - const int tid = item_ct1.get_local_id(2); - const int il = tid/8; - const int ir = tid%8; - const int ib = 8*i + ir; - if (ib >= nb32) { - return; - } - - dst_t * y = yy + 256*i + 32*ir + 4*il; - - const block_q4_0 * x = (const block_q4_0 *)vx + ib; - const float d = sycl::vec(x->d) - .convert()[0]; - const float dm = -8*d; - - const uint8_t * q = x->qs + 4*il; - - for (int l = 0; l < 4; ++l) { - y[l+ 0] = d * (q[l] & 0xF) + dm; - y[l+16] = d * (q[l] >> 4) + dm; - } -} - -template -static void dequantize_block_q4_1(const void * __restrict__ vx, dst_t * __restrict__ yy, int nb32, - const sycl::nd_item<3> &item_ct1) { - - const int i = item_ct1.get_group(2); - - // assume 32 threads - const int tid = item_ct1.get_local_id(2); - const int il = tid/8; - const int ir = tid%8; - const int ib = 8*i + ir; - if (ib >= nb32) { - return; - } - - dst_t * y = yy + 256*i + 32*ir + 4*il; - - const block_q4_1 * x = (const block_q4_1 *)vx + ib; - const sycl::float2 d = - x->dm.convert(); - - const uint8_t * q = x->qs + 4*il; - - for (int l = 0; l < 4; ++l) { - y[l + 0] = d.x() * (q[l] & 0xF) + d.y(); - y[l + 16] = d.x() * (q[l] >> 4) + d.y(); - } -} - - -//================================== k-quants - -template -static void dequantize_block_q2_K(const void * __restrict__ vx, dst_t * __restrict__ yy, - const sycl::nd_item<3> &item_ct1) { - - const int i = item_ct1.get_group(2); - const block_q2_K * x = (const block_q2_K *) vx; - - const int tid = item_ct1.get_local_id(2); -#if QK_K == 256 - const int n = tid/32; - const int l = tid - 32*n; - const int is = 8*n + l/16; - - const uint8_t q = x[i].qs[32*n + l]; - dst_t * y = yy + i*QK_K + 128*n; - - float dall = x[i].dm[0]; - float dmin = x[i].dm[1]; - y[l+ 0] = dall * (x[i].scales[is+0] & 0xF) * ((q >> 0) & 3) - dmin * (x[i].scales[is+0] >> 4); - y[l+32] = dall * (x[i].scales[is+2] & 0xF) * ((q >> 2) & 3) - dmin * (x[i].scales[is+2] >> 4); - y[l+64] = dall * (x[i].scales[is+4] & 0xF) * ((q >> 4) & 3) - dmin * (x[i].scales[is+4] >> 4); - y[l+96] = dall * (x[i].scales[is+6] & 0xF) * ((q >> 6) & 3) - dmin * (x[i].scales[is+6] >> 4); -#else - const int is = tid/16; // 0 or 1 - const int il = tid%16; // 0...15 - const uint8_t q = x[i].qs[il] >> (2*is); - dst_t * y = yy + i*QK_K + 16*is + il; - - float dall = x[i].dm[0]; - float dmin = x[i].dm[1]; - y[ 0] = dall * (x[i].scales[is+0] & 0xF) * ((q >> 0) & 3) - dmin * (x[i].scales[is+0] >> 4); - y[32] = dall * (x[i].scales[is+2] & 0xF) * ((q >> 4) & 3) - dmin * (x[i].scales[is+2] >> 4); -#endif - -} - -template -static void dequantize_block_q3_K(const void * __restrict__ vx, dst_t * __restrict__ yy, - const sycl::nd_item<3> &item_ct1) { - - const int i = item_ct1.get_group(2); - const block_q3_K * x = (const block_q3_K *) vx; - -#if QK_K == 256 - const int r = item_ct1.get_local_id(2) / 4; - const int tid = r/2; - const int is0 = r%2; - const int l0 = 16 * is0 + 4 * (item_ct1.get_local_id(2) % 4); - const int n = tid / 4; - const int j = tid - 4*n; - - uint8_t m = 1 << (4*n + j); - int is = 8*n + 2*j + is0; - int shift = 2*j; - - int8_t us = is < 4 ? (x[i].scales[is-0] & 0xF) | (((x[i].scales[is+8] >> 0) & 3) << 4) : - is < 8 ? (x[i].scales[is-0] & 0xF) | (((x[i].scales[is+4] >> 2) & 3) << 4) : - is < 12 ? (x[i].scales[is-8] >> 4) | (((x[i].scales[is+0] >> 4) & 3) << 4) : - (x[i].scales[is-8] >> 4) | (((x[i].scales[is-4] >> 6) & 3) << 4); - float d_all = x[i].d; - float dl = d_all * (us - 32); - - dst_t * y = yy + i*QK_K + 128*n + 32*j; - const uint8_t * q = x[i].qs + 32*n; - const uint8_t * hm = x[i].hmask; - - for (int l = l0; l < l0+4; ++l) y[l] = dl * ((int8_t)((q[l] >> shift) & 3) - ((hm[l] & m) ? 0 : 4)); -#else - const int tid = item_ct1.get_local_id(2); - const int is = tid/16; // 0 or 1 - const int il = tid%16; // 0...15 - const int im = il/8; // 0...1 - const int in = il%8; // 0...7 - - dst_t * y = yy + i*QK_K + 16*is + il; - - const uint8_t q = x[i].qs[il] >> (2*is); - const uint8_t h = x[i].hmask[in] >> (2*is + im); - const float d = (float)x[i].d; - - if (is == 0) { - y[ 0] = d * ((x[i].scales[0] & 0xF) - 8) * ((int8_t)((q >> 0) & 3) - ((h >> 0) & 1 ? 0 : 4)); - y[32] = d * ((x[i].scales[1] & 0xF) - 8) * ((int8_t)((q >> 4) & 3) - ((h >> 4) & 1 ? 0 : 4)); - } else { - y[ 0] = d * ((x[i].scales[0] >> 4) - 8) * ((int8_t)((q >> 0) & 3) - ((h >> 0) & 1 ? 0 : 4)); - y[32] = d * ((x[i].scales[1] >> 4) - 8) * ((int8_t)((q >> 4) & 3) - ((h >> 4) & 1 ? 0 : 4)); - } -#endif - -} - -#if QK_K == 256 -static inline void get_scale_min_k4(int j, const uint8_t * q, uint8_t & d, uint8_t & m) { - if (j < 4) { - d = q[j] & 63; m = q[j + 4] & 63; - } else { - d = (q[j+4] & 0xF) | ((q[j-4] >> 6) << 4); - m = (q[j+4] >> 4) | ((q[j-0] >> 6) << 4); - } -} -#endif - -template -static void dequantize_block_q4_K(const void * __restrict__ vx, dst_t * __restrict__ yy, - const sycl::nd_item<3> &item_ct1) { - const block_q4_K * x = (const block_q4_K *) vx; - - const int i = item_ct1.get_group(2); - -#if QK_K == 256 - // assume 32 threads - const int tid = item_ct1.get_local_id(2); - const int il = tid/8; - const int ir = tid%8; - const int is = 2*il; - const int n = 4; - - dst_t * y = yy + i*QK_K + 64*il + n*ir; - - const float dall = x[i].dm[0]; - const float dmin = x[i].dm[1]; - - const uint8_t * q = x[i].qs + 32*il + n*ir; - - uint8_t sc, m; - get_scale_min_k4(is + 0, x[i].scales, sc, m); - const float d1 = dall * sc; const float m1 = dmin * m; - get_scale_min_k4(is + 1, x[i].scales, sc, m); - const float d2 = dall * sc; const float m2 = dmin * m; - for (int l = 0; l < n; ++l) { - y[l + 0] = d1 * (q[l] & 0xF) - m1; - y[l +32] = d2 * (q[l] >> 4) - m2; - } -#else - const int tid = item_ct1.get_local_id(2); - const uint8_t * q = x[i].qs; - dst_t * y = yy + i*QK_K; - const float d = (float)x[i].dm[0]; - const float m = (float)x[i].dm[1]; - y[tid+ 0] = d * (x[i].scales[0] & 0xF) * (q[tid] & 0xF) - m * (x[i].scales[0] >> 4); - y[tid+32] = d * (x[i].scales[1] & 0xF) * (q[tid] >> 4) - m * (x[i].scales[1] >> 4); -#endif -} - -template -static void dequantize_block_q5_K(const void * __restrict__ vx, dst_t * __restrict__ yy, - const sycl::nd_item<3> &item_ct1) { - const block_q5_K * x = (const block_q5_K *) vx; - - const int i = item_ct1.get_group(2); - -#if QK_K == 256 - // assume 64 threads - this is very slightly better than the one below - const int tid = item_ct1.get_local_id(2); - const int il = tid/16; // il is in 0...3 - const int ir = tid%16; // ir is in 0...15 - const int is = 2*il; // is is in 0...6 - - dst_t * y = yy + i*QK_K + 64*il + 2*ir; - - const float dall = x[i].dm[0]; - const float dmin = x[i].dm[1]; - - const uint8_t * ql = x[i].qs + 32*il + 2*ir; - const uint8_t * qh = x[i].qh + 2*ir; - - uint8_t sc, m; - get_scale_min_k4(is + 0, x[i].scales, sc, m); - const float d1 = dall * sc; const float m1 = dmin * m; - get_scale_min_k4(is + 1, x[i].scales, sc, m); - const float d2 = dall * sc; const float m2 = dmin * m; - - uint8_t hm = 1 << (2*il); - y[ 0] = d1 * ((ql[ 0] & 0xF) + (qh[ 0] & hm ? 16 : 0)) - m1; - y[ 1] = d1 * ((ql[ 1] & 0xF) + (qh[ 1] & hm ? 16 : 0)) - m1; - hm <<= 1; - y[32] = d2 * ((ql[ 0] >> 4) + (qh[ 0] & hm ? 16 : 0)) - m2; - y[33] = d2 * ((ql[ 1] >> 4) + (qh[ 1] & hm ? 16 : 0)) - m2; -#else - const int tid = item_ct1.get_local_id(2); - const uint8_t q = x[i].qs[tid]; - const int im = tid/8; // 0...3 - const int in = tid%8; // 0...7 - const int is = tid/16; // 0 or 1 - const uint8_t h = x[i].qh[in] >> im; - const float d = x[i].d; - dst_t * y = yy + i*QK_K + tid; - y[ 0] = d * x[i].scales[is+0] * ((q & 0xF) - ((h >> 0) & 1 ? 0 : 16)); - y[32] = d * x[i].scales[is+2] * ((q >> 4) - ((h >> 4) & 1 ? 0 : 16)); -#endif -} - -template -static void dequantize_block_q6_K(const void * __restrict__ vx, dst_t * __restrict__ yy, - const sycl::nd_item<3> &item_ct1) { - const block_q6_K * x = (const block_q6_K *) vx; - - const int i = item_ct1.get_group(2); -#if QK_K == 256 - - // assume 64 threads - this is very slightly better than the one below - const int tid = item_ct1.get_local_id(2); - const int ip = tid/32; // ip is 0 or 1 - const int il = tid - 32*ip; // 0...32 - const int is = 8*ip + il/16; - - dst_t * y = yy + i*QK_K + 128*ip + il; - - const float d = x[i].d; - - const uint8_t * ql = x[i].ql + 64*ip + il; - const uint8_t qh = x[i].qh[32*ip + il]; - const int8_t * sc = x[i].scales + is; - - y[ 0] = d * sc[0] * ((int8_t)((ql[ 0] & 0xF) | (((qh >> 0) & 3) << 4)) - 32); - y[32] = d * sc[2] * ((int8_t)((ql[32] & 0xF) | (((qh >> 2) & 3) << 4)) - 32); - y[64] = d * sc[4] * ((int8_t)((ql[ 0] >> 4) | (((qh >> 4) & 3) << 4)) - 32); - y[96] = d * sc[6] * ((int8_t)((ql[32] >> 4) | (((qh >> 6) & 3) << 4)) - 32); -#else - - // assume 32 threads - const int tid = item_ct1.get_local_id(2); - const int ip = tid/16; // 0 or 1 - const int il = tid - 16*ip; // 0...15 - - dst_t * y = yy + i*QK_K + 16*ip + il; - - const float d = x[i].d; - - const uint8_t ql = x[i].ql[16*ip + il]; - const uint8_t qh = x[i].qh[il] >> (2*ip); - const int8_t * sc = x[i].scales; - - y[ 0] = d * sc[ip+0] * ((int8_t)((ql & 0xF) | (((qh >> 0) & 3) << 4)) - 32); - y[32] = d * sc[ip+2] * ((int8_t)((ql >> 4) | (((qh >> 4) & 3) << 4)) - 32); -#endif -} - -template -static void dequantize_block_iq2_xxs(const void * __restrict__ vx, dst_t * __restrict__ yy, - const sycl::nd_item<3> &item_ct1, - const uint64_t *iq2xxs_grid_ptr, - const uint8_t *ksigns_iq2xs_ptr, - const uint8_t *kmask_iq2xs_ptr) { - - const int i = item_ct1.get_group(2); - const block_iq2_xxs * x = (const block_iq2_xxs *) vx; - - const int tid = item_ct1.get_local_id(2); -#if QK_K == 256 - const int il = tid/8; // 0...3 - const int ib = tid%8; // 0...7 - dst_t * y = yy + i*QK_K + 32*ib + 8*il; - const uint16_t * q2 = x[i].qs + 4*ib; - const uint8_t * aux8 = (const uint8_t *)q2; - const uint8_t * grid = (const uint8_t *)(iq2xxs_grid_ptr + aux8[il]); - const uint32_t aux32 = q2[2] | (q2[3] << 16); - const float d = (float)x[i].d * (0.5f + (aux32 >> 28)) * 0.25f; - const uint8_t signs = ksigns_iq2xs_ptr[(aux32 >> 7*il) & 127]; - for (int j = 0; j < 8; ++j) y[j] = d * grid[j] * (signs & kmask_iq2xs_ptr[j] ? -1.f : 1.f); -#else - assert(false); -#endif - -} - -template -static void dequantize_block_iq2_xs(const void * __restrict__ vx, dst_t * __restrict__ yy, - const sycl::nd_item<3> &item_ct1, - const uint64_t *iq2xs_grid, - const uint8_t *ksigns_iq2xs, - const uint8_t *kmask_iq2xs) { - - const int i = item_ct1.get_group(2); - const block_iq2_xs * x = (const block_iq2_xs *) vx; - - const int tid = item_ct1.get_local_id(2); -#if QK_K == 256 - const int il = tid/8; // 0...3 - const int ib = tid%8; // 0...7 - dst_t * y = yy + i*QK_K + 32*ib + 8*il; - const uint16_t * q2 = x[i].qs + 4*ib; - const uint8_t * grid = (const uint8_t *)(iq2xs_grid + (q2[il] & 511)); - const float d = (float)x[i].d * (0.5f + ((x[i].scales[ib] >> 4*(il/2)) & 0xf)) * 0.25f; - const uint8_t signs = ksigns_iq2xs[q2[il] >> 9]; - for (int j = 0; j < 8; ++j) y[j] = d * grid[j] * (signs & kmask_iq2xs[j] ? -1.f : 1.f); -#else - assert(false); -#endif - -} - -template -__dpct_inline__ static void -dequantize_block_iq2_s(const void *__restrict__ vx, dst_t *__restrict__ yy, - const sycl::nd_item<3> &item_ct1) { - - const int i = item_ct1.get_group(2); - const block_iq2_s * x = (const block_iq2_s *) vx; - - const int tid = item_ct1.get_local_id(2); -#if QK_K == 256 - const int il = tid/8; // 0...3 - const int ib = tid%8; // 0...7 - dst_t * y = yy + i*QK_K + 32*ib + 8*il; - const uint8_t * grid = (const uint8_t *)(iq2s_grid + (x[i].qs[4*ib+il] | ((x[i].qh[ib] << (8-2*il)) & 0x300))); - const float d = (float)x[i].d * (0.5f + ((x[i].scales[ib] >> 4*(il/2)) & 0xf)) * 0.25f; - const uint8_t signs = x[i].qs[QK_K/8+4*ib+il]; -#pragma unroll - for (int j = 0; j < 8; ++j) - y[j] = d * grid[j] * (signs & kmask_iq2xs[j] ? -1.f : 1.f); -#else - assert(false); - -#endif - -} - -template -static void dequantize_block_iq3_xxs(const void * __restrict__ vx, dst_t * __restrict__ yy, - const sycl::nd_item<3> &item_ct1, - const uint32_t *iq3xxs_grid, - const uint8_t *ksigns_iq2xs, - const uint8_t *kmask_iq2xs) { - - const int i = item_ct1.get_group(2); - const block_iq3_xxs * x = (const block_iq3_xxs *) vx; - - const int tid = item_ct1.get_local_id(2); -#if QK_K == 256 - const int il = tid/8; // 0...3 - const int ib = tid%8; // 0...7 - dst_t * y = yy + i*QK_K + 32*ib + 8*il; - const uint8_t * q3 = x[i].qs + 8*ib; - const uint16_t * gas = (const uint16_t *)(x[i].qs + QK_K/4) + 2*ib; - const uint8_t * grid1 = (const uint8_t *)(iq3xxs_grid + q3[2*il+0]); - const uint8_t * grid2 = (const uint8_t *)(iq3xxs_grid + q3[2*il+1]); - const uint32_t aux32 = gas[0] | (gas[1] << 16); - const float d = (float)x[i].d * (0.5f + (aux32 >> 28)) * 0.5f; - const uint8_t signs = ksigns_iq2xs[(aux32 >> 7*il) & 127]; - for (int j = 0; j < 4; ++j) { - y[j+0] = d * grid1[j] * (signs & kmask_iq2xs[j+0] ? -1.f : 1.f); - y[j+4] = d * grid2[j] * (signs & kmask_iq2xs[j+4] ? -1.f : 1.f); - } -#else - assert(false); -#endif - -} - -template -__dpct_inline__ static void -dequantize_block_iq3_s(const void *__restrict__ vx, dst_t *__restrict__ yy, - const sycl::nd_item<3> &item_ct1, - const uint8_t *kmask_iq2xs, const uint32_t *iq3s_grid) { - - const int i = item_ct1.get_group(2); - const block_iq3_s * x = (const block_iq3_s *) vx; - - const int tid = item_ct1.get_local_id(2); -#if QK_K == 256 - const int il = tid/8; // 0...3 - const int ib = tid%8; // 0...7 - dst_t * y = yy + i*QK_K + 32*ib + 8*il; - const uint8_t * qs = x[i].qs + 8*ib; - const uint8_t * grid1 = (const uint8_t *)(iq3s_grid + (qs[2*il+0] | ((x[i].qh[ib] << (8-2*il)) & 256))); - const uint8_t * grid2 = (const uint8_t *)(iq3s_grid + (qs[2*il+1] | ((x[i].qh[ib] << (7-2*il)) & 256))); - const float d = (float)x[i].d * (1 + 2*((x[i].scales[ib/2] >> 4*(ib%2)) & 0xf)); - const uint8_t signs = x[i].signs[4*ib + il]; -#pragma unroll - for (int j = 0; j < 4; ++j) { - y[j+0] = d * grid1[j] * (signs & kmask_iq2xs[j+0] ? -1.f : 1.f); - y[j+4] = d * grid2[j] * (signs & kmask_iq2xs[j+4] ? -1.f : 1.f); - } -#else - assert(false); -#endif - -} - -template -__dpct_inline__ static void -dequantize_block_iq1_s(const void *__restrict__ vx, dst_t *__restrict__ yy, - const sycl::nd_item<3> &item_ct1, - const uint32_t *iq1s_grid_gpu) { - - const int i = item_ct1.get_group(2); - const block_iq1_s * x = (const block_iq1_s *) vx; - - const int tid = item_ct1.get_local_id(2); -#if QK_K == 256 - const int il = tid/8; // 0...3 - const int ib = tid%8; // 0...7 - dst_t * y = yy + i*QK_K + 32*ib + 8*il; - const float delta = x[i].qh[ib] & 0x8000 ? -1 - IQ1S_DELTA : -1 + IQ1S_DELTA; - const float d = (float)x[i].d * (2*((x[i].qh[ib] >> 12) & 7) + 1); - uint32_t grid32[2]; const int8_t * q = (const int8_t *)grid32; - grid32[0] = iq1s_grid_gpu[x[i].qs[4*ib+il] | (((x[i].qh[ib] >> 3*il) & 7) << 8)]; - grid32[1] = (grid32[0] >> 4) & 0x0f0f0f0f; - grid32[0] &= 0x0f0f0f0f; -#pragma unroll - for (int j = 0; j < 8; ++j) { - y[j] = d * (q[j] + delta); - } -#else - assert(false); -#endif - -} - -template -__dpct_inline__ static void -dequantize_block_iq1_m(const void *__restrict__ vx, dst_t *__restrict__ yy, - const sycl::nd_item<3> &item_ct1, - const uint32_t *iq1s_grid_gpu) { - - const int i = item_ct1.get_group(2); - const block_iq1_m * x = (const block_iq1_m *) vx; - - const int tid = item_ct1.get_local_id(2); -#if QK_K == 256 - const int il = tid/8; // 0...3 - const int ib = tid%8; // 0...7 - dst_t * y = yy + i*QK_K + 32*ib + 8*il; - const uint16_t * sc = (const uint16_t *)x[i].scales; - iq1m_scale_t scale; - scale.u16 = (sc[0] >> 12) | ((sc[1] >> 8) & 0x00f0) | ((sc[2] >> 4) & 0x0f00) | (sc[3] & 0xf000); - const int ib16 = 2*ib + il/2; // sc[ib16/4] >> 3*(ib16%4) -> sc[ib/2] >> 3*((2*ib+il/2)%4); - const float d = (float)scale.f16 * (2*((sc[ib16/4] >> 3*(ib16%4)) & 0x7) + 1); - const float delta = x[i].qh[2*ib+il/2] & (0x08 << 4*(il%2)) ? -1 - IQ1M_DELTA : -1 + IQ1M_DELTA; - uint32_t grid32[2]; const int8_t * q = (const int8_t *)grid32; - grid32[0] = iq1s_grid_gpu[x[i].qs[4*ib+il] | (((x[i].qh[2*ib+il/2] >> 4*(il%2)) & 7) << 8)]; - grid32[1] = (grid32[0] >> 4) & 0x0f0f0f0f; - grid32[0] &= 0x0f0f0f0f; -#pragma unroll - for (int j = 0; j < 8; ++j) { - y[j] = d * (q[j] + delta); - } -#else - assert(false); -#endif - -} - -template -__dpct_inline__ static void -dequantize_block_iq4_nl(const void *__restrict__ vx, dst_t *__restrict__ yy, - const sycl::nd_item<3> &item_ct1) { - - const int i = item_ct1.get_group(2); - const block_iq4_nl * x = (const block_iq4_nl *) vx + i*(QK_K/QK4_NL); - - const int tid = item_ct1.get_local_id(2); - const int il = tid/8; // 0...3 - const int ib = tid%8; // 0...7 - dst_t * y = yy + i*QK_K + 32*ib + 4*il; - const uint8_t * q4 = x[ib].qs + 4*il; - const float d = (float)x[ib].d; -#pragma unroll - for (int j = 0; j < 4; ++j) { - y[j+ 0] = d * kvalues_iq4nl[q4[j] & 0xf]; - y[j+16] = d * kvalues_iq4nl[q4[j] >> 4]; - } - -} - - -template -__dpct_inline__ static void -dequantize_block_iq4_xs(const void *__restrict__ vx, dst_t *__restrict__ yy, - const sycl::nd_item<3> &item_ct1) { - const int i = item_ct1.get_group(2); - const block_iq4_xs * x = (const block_iq4_xs *)vx; - - const int tid = item_ct1.get_local_id(2); - const int il = tid/8; // 0...3 - const int ib = tid%8; // 0...7 - dst_t * y = yy + i*QK_K + 32*ib + 4*il; - const uint8_t * q4 = x[i].qs + 16*ib + 4*il; - const float d = (float)x[i].d * ((((x[i].scales_l[ib/2] >> 4*(ib%2)) & 0xf) | (((x[i].scales_h >> 2*ib) & 3) << 4)) - 32); -#pragma unroll - for (int j = 0; j < 4; ++j) { - y[j+ 0] = d * kvalues_iq4nl[q4[j] & 0xf]; - y[j+16] = d * kvalues_iq4nl[q4[j] >> 4]; - } -} - - - -/* -DPCT1110:4: The total declared local variable size in device function -dequantize_mul_mat_vec_q2_k exceeds 128 bytes and may cause high register -pressure. Consult with your hardware vendor to find the total register size -available and adjust the code, or use smaller sub-group size to avoid high -register pressure. -*/ -static void dequantize_mul_mat_vec_q2_k(const void *__restrict__ vx, - const float *__restrict__ yy, - float *__restrict__ dst, - const int ncols, int nrows, - const sycl::nd_item<3> &item_ct1) { - - static_assert(16%K_QUANTS_PER_ITERATION == 0, "16 must be divisible by K_QUANTS_PER_ITERATION"); - - const int row = item_ct1.get_group(2) * item_ct1.get_local_range(1) + - item_ct1.get_local_id(1); - if (row > nrows) return; - - const int num_blocks_per_row = ncols / QK_K; - const int ib0 = row*num_blocks_per_row; - - const block_q2_K * x = (const block_q2_K *)vx + ib0; - - float tmp = 0; // partial sum for thread in warp - -#if QK_K == 256 - const int tid = - item_ct1.get_local_id(2) / K_QUANTS_PER_ITERATION; // 0...31 or 0...15 - const int ix = - item_ct1.get_local_id(2) % K_QUANTS_PER_ITERATION; // 0 or 0,1 - - const int step = 16/K_QUANTS_PER_ITERATION; - - const int im = tid/step; // 0 or 1. 0 computes 0..., 1 computes 128... - const int in = tid - step*im; // 0...15 or 0...7 - - const int l0 = K_QUANTS_PER_ITERATION*in; // 0...15 or 0...14 in steps of 2 - const int q_offset = 32*im + l0; - const int s_offset = 8*im; - const int y_offset = 128*im + l0; - - uint32_t aux[4]; - const uint8_t * d = (const uint8_t *)aux; - const uint8_t * m = (const uint8_t *)(aux + 2); - - for (int i = ix; i < num_blocks_per_row; i += K_QUANTS_PER_ITERATION) { - - const float * y = yy + i * QK_K + y_offset; - const uint8_t * q = x[i].qs + q_offset; - - const float dall = x[i].dm[0]; - const float dmin = x[i].dm[1]; - - const uint32_t * a = (const uint32_t *)(x[i].scales + s_offset); - aux[0] = a[0] & 0x0f0f0f0f; - aux[1] = a[1] & 0x0f0f0f0f; - aux[2] = (a[0] >> 4) & 0x0f0f0f0f; - aux[3] = (a[1] >> 4) & 0x0f0f0f0f; - - float sum1 = 0, sum2 = 0; - for (int l = 0; l < K_QUANTS_PER_ITERATION; ++l) { - sum1 += y[l+ 0] * d[0] * ((q[l+ 0] >> 0) & 3) - + y[l+32] * d[2] * ((q[l+ 0] >> 2) & 3) - + y[l+64] * d[4] * ((q[l+ 0] >> 4) & 3) - + y[l+96] * d[6] * ((q[l+ 0] >> 6) & 3) - + y[l+16] * d[1] * ((q[l+16] >> 0) & 3) - + y[l+48] * d[3] * ((q[l+16] >> 2) & 3) - + y[l+80] * d[5] * ((q[l+16] >> 4) & 3) - +y[l+112] * d[7] * ((q[l+16] >> 6) & 3); - sum2 += y[l+ 0] * m[0] + y[l+32] * m[2] + y[l+64] * m[4] + y[ l+96] * m[6] - + y[l+16] * m[1] + y[l+48] * m[3] + y[l+80] * m[5] + y[l+112] * m[7]; - - } - tmp += dall * sum1 - dmin * sum2; - - } -#else - const int tid = item_ct1.get_local_id(2) / - (2 * K_QUANTS_PER_ITERATION); // 0...15 or 0...7 - const int ix = item_ct1.get_local_id(2) % - (2 * K_QUANTS_PER_ITERATION); // 0....1 or 0...3 - const int offset = tid * K_QUANTS_PER_ITERATION; - - uint32_t uaux[2]; - const uint8_t * d = (const uint8_t *)uaux; - - - for (int i = ix; i < num_blocks_per_row; i += 2*K_QUANTS_PER_ITERATION) { - - const float * y = yy + i * QK_K + offset; - const uint8_t * q = x[i].qs + offset; - const uint32_t * s = (const uint32_t *)x[i].scales; - - uaux[0] = s[0] & 0x0f0f0f0f; - uaux[1] = (s[0] >> 4) & 0x0f0f0f0f; - - const sycl::float2 dall = - x[i].dm.convert(); - - float sum1 = 0, sum2 = 0; - for (int l = 0; l < K_QUANTS_PER_ITERATION; ++l) { - const uint8_t ql = q[l]; - sum1 += y[l+ 0] * d[0] * ((ql >> 0) & 3) - + y[l+16] * d[1] * ((ql >> 2) & 3) - + y[l+32] * d[2] * ((ql >> 4) & 3) - + y[l+48] * d[3] * ((ql >> 6) & 3); - sum2 += y[l+0] * d[4] + y[l+16] * d[5] + y[l+32] * d[6] + y[l+48] * d[7]; - } - tmp += dall.x() * sum1 - dall.y() * sum2; - } - -#endif - - // sum up partial sums and write back result -#pragma unroll - for (int mask = 16; mask > 0; mask >>= 1) { - tmp += - dpct::permute_sub_group_by_xor(item_ct1.get_sub_group(), tmp, mask); - } - - if (item_ct1.get_local_id(2) == 0) { - dst[row] = tmp; - } -} - -/* -DPCT1110:5: The total declared local variable size in device function -dequantize_mul_mat_vec_q3_k exceeds 128 bytes and may cause high register -pressure. Consult with your hardware vendor to find the total register size -available and adjust the code, or use smaller sub-group size to avoid high -register pressure. -*/ -static void dequantize_mul_mat_vec_q3_k(const void *__restrict__ vx, - const float *__restrict__ yy, - float *__restrict__ dst, - const int ncols, int nrows, - const sycl::nd_item<3> &item_ct1) { - - const int row = item_ct1.get_group(2) * item_ct1.get_local_range(1) + - item_ct1.get_local_id(1); - if (row > nrows) return; - - const int num_blocks_per_row = ncols / QK_K; - const int ib0 = row*num_blocks_per_row; - - const block_q3_K * x = (const block_q3_K *)vx + ib0; - - float tmp = 0; // partial sum for thread in warp - -#if QK_K == 256 - - const uint16_t kmask1 = 0x0303; - const uint16_t kmask2 = 0x0f0f; - - const int tid = - item_ct1.get_local_id(2) / K_QUANTS_PER_ITERATION; // 0...31 or 0...16 - const int ix = - item_ct1.get_local_id(2) % K_QUANTS_PER_ITERATION; // 0 or 0,1 - - const int n = K_QUANTS_PER_ITERATION; // iterations in the inner loop - const int step = 16/K_QUANTS_PER_ITERATION; - const int im = tid/step; // 0 or 1. 0 computes 0..., 1 computes 128... - const int in = tid - step*im; // 0....15 or 0...7 - - const uint8_t m = 1 << (4*im); - - const int l0 = n*in; // 0...15 or 0...14 in steps of 2 - const int q_offset = 32*im + l0; - const int y_offset = 128*im + l0; - - uint16_t utmp[4]; - const int8_t * s = (const int8_t *)utmp; - - const uint16_t s_shift = 4*im; - - for (int i = ix; i < num_blocks_per_row; i += K_QUANTS_PER_ITERATION) { - - const float * y = yy + i * QK_K + y_offset; - const uint8_t * q = x[i].qs + q_offset; - const uint8_t * h = x[i].hmask + l0; - - const uint16_t * a = (const uint16_t *)x[i].scales; - utmp[0] = ((a[0] >> s_shift) & kmask2) | (((a[4] >> (s_shift + 0)) & kmask1) << 4); - utmp[1] = ((a[1] >> s_shift) & kmask2) | (((a[5] >> (s_shift + 0)) & kmask1) << 4); - utmp[2] = ((a[2] >> s_shift) & kmask2) | (((a[4] >> (s_shift + 2)) & kmask1) << 4); - utmp[3] = ((a[3] >> s_shift) & kmask2) | (((a[5] >> (s_shift + 2)) & kmask1) << 4); - - const float d = x[i].d; - - float sum = 0; - for (int l = 0; l < n; ++l) { - sum += y[l+ 0] * (s[0] - 32) * (((q[l] >> 0) & 3) - (h[l] & (m << 0) ? 0 : 4)) - + y[l+32] * (s[2] - 32) * (((q[l] >> 2) & 3) - (h[l] & (m << 1) ? 0 : 4)) - + y[l+64] * (s[4] - 32) * (((q[l] >> 4) & 3) - (h[l] & (m << 2) ? 0 : 4)) - + y[l+96] * (s[6] - 32) * (((q[l] >> 6) & 3) - (h[l] & (m << 3) ? 0 : 4)); - sum += y[l+16] * (s[1] - 32) * (((q[l+16] >> 0) & 3) - (h[l+16] & (m << 0) ? 0 : 4)) - + y[l+48] * (s[3] - 32) * (((q[l+16] >> 2) & 3) - (h[l+16] & (m << 1) ? 0 : 4)) - + y[l+80] * (s[5] - 32) * (((q[l+16] >> 4) & 3) - (h[l+16] & (m << 2) ? 0 : 4)) - + y[l+112] * (s[7] - 32) * (((q[l+16] >> 6) & 3) - (h[l+16] & (m << 3) ? 0 : 4)); - } - tmp += d * sum; - - } -#else - - const int tid = item_ct1.get_local_id(2)/(2*K_QUANTS_PER_ITERATION); // 0...15 or 0...7 - const int ix = item_ct1.get_local_id(2)%(2*K_QUANTS_PER_ITERATION); // 0....1 or 0...3 - const int offset = tid * K_QUANTS_PER_ITERATION; // 0...15 or 0...14 - const int in = offset/8; // 0 or 1 - const int im = offset%8; // 0...7 - - for (int i = ix; i < num_blocks_per_row; i += 2*K_QUANTS_PER_ITERATION) { - - const float * y = yy + i * QK_K + offset; - const uint8_t * q = x[i].qs + offset; - const uint8_t * s = x[i].scales; - - const float dall = (float)x[i].d; - - float sum = 0; - for (int l = 0; l < K_QUANTS_PER_ITERATION; ++l) { - const uint8_t hl = x[i].hmask[im+l] >> in; - const uint8_t ql = q[l]; - sum += y[l+ 0] * dall * ((s[0] & 0xF) - 8) * ((int8_t)((ql >> 0) & 3) - ((hl >> 0) & 1 ? 0 : 4)) - + y[l+16] * dall * ((s[0] >> 4) - 8) * ((int8_t)((ql >> 2) & 3) - ((hl >> 2) & 1 ? 0 : 4)) - + y[l+32] * dall * ((s[1] & 0xF) - 8) * ((int8_t)((ql >> 4) & 3) - ((hl >> 4) & 1 ? 0 : 4)) - + y[l+48] * dall * ((s[1] >> 4) - 8) * ((int8_t)((ql >> 6) & 3) - ((hl >> 6) & 1 ? 0 : 4)); - } - tmp += sum; - } -#endif - - // sum up partial sums and write back result -#pragma unroll - for (int mask = 16; mask > 0; mask >>= 1) { - tmp += - dpct::permute_sub_group_by_xor(item_ct1.get_sub_group(), tmp, mask); - } - - if (item_ct1.get_local_id(2) == 0) { - dst[row] = tmp; - } -} - -/* -DPCT1110:6: The total declared local variable size in device function -dequantize_mul_mat_vec_q4_k exceeds 128 bytes and may cause high register -pressure. Consult with your hardware vendor to find the total register size -available and adjust the code, or use smaller sub-group size to avoid high -register pressure. -*/ -static void dequantize_mul_mat_vec_q4_k(const void *__restrict__ vx, - const float *__restrict__ yy, - float *__restrict__ dst, - const int ncols, int nrows, - const sycl::nd_item<3> &item_ct1) { - - const int row = item_ct1.get_group(2) * item_ct1.get_local_range(1) + - item_ct1.get_local_id(1); - if (row > nrows) return; - const int num_blocks_per_row = ncols / QK_K; - const int ib0 = row*num_blocks_per_row; - - const block_q4_K * x = (const block_q4_K *)vx + ib0; - -#if QK_K == 256 - const uint16_t kmask1 = 0x3f3f; - const uint16_t kmask2 = 0x0f0f; - const uint16_t kmask3 = 0xc0c0; - - const int tid = - item_ct1.get_local_id(2) / K_QUANTS_PER_ITERATION; // 0...31 or 0...16 - const int ix = - item_ct1.get_local_id(2) % K_QUANTS_PER_ITERATION; // 0 or 0,1 - - const int step = 8/K_QUANTS_PER_ITERATION; // 8 or 4 - - const int il = tid/step; // 0...3 - const int ir = tid - step*il; // 0...7 or 0...3 - const int n = 2 * K_QUANTS_PER_ITERATION; // 2 or 4 - - const int im = il/2; // 0 or 1. 0 computes 0,32 + 128,160, 1 computes 64,96 + 192,224 - const int in = il%2; - - const int l0 = n*(2*ir + in); - const int q_offset = 32*im + l0; - const int y_offset = 64*im + l0; - - uint16_t aux[4]; - const uint8_t * sc = (const uint8_t *)aux; - -#if K_QUANTS_PER_ITERATION == 2 - uint32_t q32[4]; - const uint8_t * q4 = (const uint8_t *)q32; -#else - uint16_t q16[4]; - const uint8_t * q4 = (const uint8_t *)q16; -#endif - - float tmp = 0; // partial sum for thread in warp - - for (int i = ix; i < num_blocks_per_row; i += K_QUANTS_PER_ITERATION) { - - const float * y1 = yy + i*QK_K + y_offset; - const float * y2 = y1 + 128; - - const float dall = x[i].dm[0]; - const float dmin = x[i].dm[1]; - - const uint16_t * a = (const uint16_t *)x[i].scales; - aux[0] = a[im+0] & kmask1; - aux[1] = a[im+2] & kmask1; - aux[2] = ((a[im+4] >> 0) & kmask2) | ((a[im+0] & kmask3) >> 2); - aux[3] = ((a[im+4] >> 4) & kmask2) | ((a[im+2] & kmask3) >> 2); - -#if K_QUANTS_PER_ITERATION == 2 - const uint32_t * q1 = (const uint32_t *)(x[i].qs + q_offset); - const uint32_t * q2 = q1 + 16; - - q32[0] = q1[0] & 0x0f0f0f0f; - q32[1] = q1[0] & 0xf0f0f0f0; - q32[2] = q2[0] & 0x0f0f0f0f; - q32[3] = q2[0] & 0xf0f0f0f0; - - sycl::float4 s = {0.f, 0.f, 0.f, 0.f}; - float smin = 0; - for (int l = 0; l < 4; ++l) { - s.x() += y1[l] * q4[l + 0]; s.y() += y1[l + 32] * q4[l + 4]; - s.z() += y2[l] * q4[l + 8]; s.w() += y2[l + 32] * q4[l + 12]; - smin += y1[l] * sc[2] + y1[l+32] * sc[3] + y2[l] * sc[6] + y2[l+32] * sc[7]; - } - tmp += dall * (s.x() * sc[0] + s.y() * sc[1] * 1.f / 16.f + - s.z() * sc[4] + s.w() * sc[5] * 1.f / 16.f) - - dmin * smin; -#else - const uint16_t * q1 = (const uint16_t *)(x[i].qs + q_offset); - const uint16_t * q2 = q1 + 32; - - q16[0] = q1[0] & 0x0f0f; - q16[1] = q1[0] & 0xf0f0; - q16[2] = q2[0] & 0x0f0f; - q16[3] = q2[0] & 0xf0f0; - - float4 s = {0.f, 0.f, 0.f, 0.f}; - float smin = 0; - for (int l = 0; l < 2; ++l) { - s.x += y1[l] * q4[l+0]; s.y += y1[l+32] * q4[l+2]; - s.z += y2[l] * q4[l+4]; s.w += y2[l+32] * q4[l+6]; - smin += y1[l] * sc[2] + y1[l+32] * sc[3] + y2[l] * sc[6] + y2[l+32] * sc[7]; - } - tmp += dall * (s.x * sc[0] + s.y * sc[1] * 1.f/16.f + s.z * sc[4] + s.w * sc[5] * 1.f/16.f) - dmin * smin; -#endif - - } -#else - const int tid = item_ct1.get_local_id(2)/(2*K_QUANTS_PER_ITERATION); // 0...15 - const int ix = item_ct1.get_local_id(2)%(2*K_QUANTS_PER_ITERATION); - - const int step = tid * K_QUANTS_PER_ITERATION; - - uint16_t aux16[2]; - const uint8_t * s = (const uint8_t *)aux16; - - float tmp = 0; - - for (int i = ix; i < num_blocks_per_row; i += 2*K_QUANTS_PER_ITERATION) { - const uint8_t * q = x[i].qs + step; - const float * y = yy + i*QK_K + step; - const uint16_t * a = (const uint16_t *)x[i].scales; - aux16[0] = a[0] & 0x0f0f; - aux16[1] = (a[0] >> 4) & 0x0f0f; - const float d = (float)x[i].dm[0]; - const float m = (float)x[i].dm[1]; - float sum = 0.f; - for (int j = 0; j < K_QUANTS_PER_ITERATION; ++j) { - sum += y[j+ 0] * (d * s[0] * (q[j+ 0] & 0xF) - m * s[2]) - + y[j+16] * (d * s[0] * (q[j+16] & 0xF) - m * s[2]) - + y[j+32] * (d * s[1] * (q[j+ 0] >> 4) - m * s[3]) - + y[j+48] * (d * s[1] * (q[j+16] >> 4) - m * s[3]); - } - tmp += sum; - } - -#endif - - // sum up partial sums and write back result -#pragma unroll - for (int mask = 16; mask > 0; mask >>= 1) { - tmp += - dpct::permute_sub_group_by_xor(item_ct1.get_sub_group(), tmp, mask); - } - - if (tid == 0) { - dst[row] = tmp; - } -} - -/* -DPCT1110:7: The total declared local variable size in device function -dequantize_mul_mat_vec_q5_k exceeds 128 bytes and may cause high register -pressure. Consult with your hardware vendor to find the total register size -available and adjust the code, or use smaller sub-group size to avoid high -register pressure. -*/ -static void dequantize_mul_mat_vec_q5_k(const void *__restrict__ vx, - const float *__restrict__ yy, - float *__restrict__ dst, - const int ncols, - const sycl::nd_item<3> &item_ct1) { - - const int row = item_ct1.get_group(2); - const int num_blocks_per_row = ncols / QK_K; - const int ib0 = row*num_blocks_per_row; - - const block_q5_K * x = (const block_q5_K *)vx + ib0; - - float tmp = 0; // partial sum for thread in warp - -#if QK_K == 256 - const uint16_t kmask1 = 0x3f3f; - const uint16_t kmask2 = 0x0f0f; - const uint16_t kmask3 = 0xc0c0; - - const int tid = item_ct1.get_local_id(2) / 2; // 0...15 - const int ix = item_ct1.get_local_id(2) % 2; - - const int il = tid/4; // 0...3 - const int ir = tid - 4*il;// 0...3 - const int n = 2; - - const int im = il/2; // 0 or 1. 0 computes 0,32 + 128,160, 1 computes 64,96 + 192,224 - const int in = il%2; - - const int l0 = n*(2*ir + in); - const int q_offset = 32*im + l0; - const int y_offset = 64*im + l0; - - const uint8_t hm1 = 1 << (2*im); - const uint8_t hm2 = hm1 << 4; - - uint16_t aux[4]; - const uint8_t * sc = (const uint8_t *)aux; - - uint16_t q16[8]; - const uint8_t * q4 = (const uint8_t *)q16; - - for (int i = ix; i < num_blocks_per_row; i += 2) { - - const uint8_t * ql1 = x[i].qs + q_offset; - const uint8_t * qh = x[i].qh + l0; - const float * y1 = yy + i*QK_K + y_offset; - const float * y2 = y1 + 128; - - const float dall = x[i].dm[0]; - const float dmin = x[i].dm[1]; - - const uint16_t * a = (const uint16_t *)x[i].scales; - aux[0] = a[im+0] & kmask1; - aux[1] = a[im+2] & kmask1; - aux[2] = ((a[im+4] >> 0) & kmask2) | ((a[im+0] & kmask3) >> 2); - aux[3] = ((a[im+4] >> 4) & kmask2) | ((a[im+2] & kmask3) >> 2); - - sycl::float4 sum = {0.f, 0.f, 0.f, 0.f}; - float smin = 0; - const uint16_t * q1 = (const uint16_t *)ql1; - const uint16_t * q2 = q1 + 32; - q16[0] = q1[0] & 0x0f0f; - q16[1] = q1[8] & 0x0f0f; - q16[2] = (q1[0] >> 4) & 0x0f0f; - q16[3] = (q1[8] >> 4) & 0x0f0f; - q16[4] = q2[0] & 0x0f0f; - q16[5] = q2[8] & 0x0f0f; - q16[6] = (q2[0] >> 4) & 0x0f0f; - q16[7] = (q2[8] >> 4) & 0x0f0f; - for (int l = 0; l < n; ++l) { - sum.x() += - y1[l + 0] * (q4[l + 0] + (qh[l + 0] & (hm1 << 0) ? 16 : 0)) + - y1[l + 16] * (q4[l + 2] + (qh[l + 16] & (hm1 << 0) ? 16 : 0)); - sum.y() += - y1[l + 32] * (q4[l + 4] + (qh[l + 0] & (hm1 << 1) ? 16 : 0)) + - y1[l + 48] * (q4[l + 6] + (qh[l + 16] & (hm1 << 1) ? 16 : 0)); - sum.z() += - y2[l + 0] * (q4[l + 8] + (qh[l + 0] & (hm2 << 0) ? 16 : 0)) + - y2[l + 16] * (q4[l + 10] + (qh[l + 16] & (hm2 << 0) ? 16 : 0)); - sum.w() += - y2[l + 32] * (q4[l + 12] + (qh[l + 0] & (hm2 << 1) ? 16 : 0)) + - y2[l + 48] * (q4[l + 14] + (qh[l + 16] & (hm2 << 1) ? 16 : 0)); - smin += (y1[l] + y1[l+16]) * sc[2] + (y1[l+32] + y1[l+48]) * sc[3] - + (y2[l] + y2[l+16]) * sc[6] + (y2[l+32] + y2[l+48]) * sc[7]; - } - tmp += dall * (sum.x() * sc[0] + sum.y() * sc[1] + sum.z() * sc[4] + - sum.w() * sc[5]) - - dmin * smin; - } - -#else - const int tid = item_ct1.get_local_id(2)/(2*K_QUANTS_PER_ITERATION); // 0...15 - const int ix = item_ct1.get_local_id(2)%(2*K_QUANTS_PER_ITERATION); - const int step = tid * K_QUANTS_PER_ITERATION; - const int im = step/8; - const int in = step%8; - - for (int i = ix; i < num_blocks_per_row; i += 2*K_QUANTS_PER_ITERATION) { - const uint8_t * q = x[i].qs + step; - const int8_t * s = x[i].scales; - const float * y = yy + i*QK_K + step; - const float d = x[i].d; - float sum = 0.f; - for (int j = 0; j < K_QUANTS_PER_ITERATION; ++j) { - const uint8_t h = x[i].qh[in+j] >> im; - sum += y[j+ 0] * d * s[0] * ((q[j+ 0] & 0xF) - ((h >> 0) & 1 ? 0 : 16)) - + y[j+16] * d * s[1] * ((q[j+16] & 0xF) - ((h >> 2) & 1 ? 0 : 16)) - + y[j+32] * d * s[2] * ((q[j+ 0] >> 4) - ((h >> 4) & 1 ? 0 : 16)) - + y[j+48] * d * s[3] * ((q[j+16] >> 4) - ((h >> 6) & 1 ? 0 : 16)); - } - tmp += sum; - } -#endif - - // sum up partial sums and write back result -#pragma unroll - for (int mask = 16; mask > 0; mask >>= 1) { - tmp += - dpct::permute_sub_group_by_xor(item_ct1.get_sub_group(), tmp, mask); - } - - if (item_ct1.get_local_id(2) == 0) { - dst[row] = tmp; - } -} - -static void dequantize_mul_mat_vec_q6_k(const void * __restrict__ vx, const float * __restrict__ yy, float * __restrict__ dst, const int ncols, int nrows, - const sycl::nd_item<3> &item_ct1) { - - static_assert(16%K_QUANTS_PER_ITERATION == 0, "16 must be divisible by K_QUANTS_PER_ITERATION"); - - const int row = item_ct1.get_group(2) * item_ct1.get_local_range(1) + - item_ct1.get_local_id(1); - if (row > nrows) return; - - const int num_blocks_per_row = ncols / QK_K; - const int ib0 = row*num_blocks_per_row; - - const block_q6_K * x = (const block_q6_K *)vx + ib0; - -#if QK_K == 256 - - const int tid = - item_ct1.get_local_id(2) / K_QUANTS_PER_ITERATION; // 0...31 or 0...16 - const int ix = - item_ct1.get_local_id(2) % K_QUANTS_PER_ITERATION; // 0 or 0, 1 - - const int step = 16/K_QUANTS_PER_ITERATION; // 16 or 8 - - const int im = tid/step; // 0 or 1. 0 computes 0..., 1 computes 128... - const int in = tid - step*im; // 0...15 or 0...7 - -#if K_QUANTS_PER_ITERATION == 1 - const int l0 = K_QUANTS_PER_ITERATION*in; // 0...15 - const int is = 0; -#else - const int l0 = 4 * in; // 0, 4, 8, ..., 28 - const int is = in / 4; -#endif - const int ql_offset = 64*im + l0; - const int qh_offset = 32*im + l0; - const int s_offset = 8*im + is; - const int y_offset = 128*im + l0; - - float tmp = 0; // partial sum for thread in warp - - for (int i = ix; i < num_blocks_per_row; i += K_QUANTS_PER_ITERATION) { - - const float * y = yy + i * QK_K + y_offset; - const uint8_t * ql = x[i].ql + ql_offset; - const uint8_t * qh = x[i].qh + qh_offset; - const int8_t * s = x[i].scales + s_offset; - - const float d = x[i].d; - -#if K_QUANTS_PER_ITERATION == 1 - float sum = y[ 0] * s[0] * d * ((int8_t)((ql[ 0] & 0xF) | ((qh[ 0] & 0x03) << 4)) - 32) - + y[16] * s[1] * d * ((int8_t)((ql[16] & 0xF) | ((qh[16] & 0x03) << 4)) - 32) - + y[32] * s[2] * d * ((int8_t)((ql[32] & 0xF) | ((qh[ 0] & 0x0c) << 2)) - 32) - + y[48] * s[3] * d * ((int8_t)((ql[48] & 0xF) | ((qh[16] & 0x0c) << 2)) - 32) - + y[64] * s[4] * d * ((int8_t)((ql[ 0] >> 4) | ((qh[ 0] & 0x30) >> 0)) - 32) - + y[80] * s[5] * d * ((int8_t)((ql[16] >> 4) | ((qh[16] & 0x30) >> 0)) - 32) - + y[96] * s[6] * d * ((int8_t)((ql[32] >> 4) | ((qh[ 0] & 0xc0) >> 2)) - 32) - +y[112] * s[7] * d * ((int8_t)((ql[48] >> 4) | ((qh[16] & 0xc0) >> 2)) - 32); - tmp += sum; -#else - float sum = 0; - for (int l = 0; l < 4; ++l) { - sum += y[l+ 0] * s[0] * d * ((int8_t)((ql[l+ 0] & 0xF) | (((qh[l] >> 0) & 3) << 4)) - 32) - + y[l+32] * s[2] * d * ((int8_t)((ql[l+32] & 0xF) | (((qh[l] >> 2) & 3) << 4)) - 32) - + y[l+64] * s[4] * d * ((int8_t)((ql[l+ 0] >> 4) | (((qh[l] >> 4) & 3) << 4)) - 32) - + y[l+96] * s[6] * d * ((int8_t)((ql[l+32] >> 4) | (((qh[l] >> 6) & 3) << 4)) - 32); - } - tmp += sum; -#endif - - } - -#else - - const int tid = item_ct1.get_local_id(2)/(2*K_QUANTS_PER_ITERATION); // 0...7 - const int ix = item_ct1.get_local_id(2)%(2*K_QUANTS_PER_ITERATION); // 0...3 - - const int step = tid * K_QUANTS_PER_ITERATION; - - float tmp = 0; // partial sum for thread in warp - - for (int i = ix; i < num_blocks_per_row; i += 2*K_QUANTS_PER_ITERATION) { - - const float * y = yy + i * QK_K + step; - const uint8_t * ql = x[i].ql + step; - const uint8_t * qh = x[i].qh + step; - const int8_t * s = x[i].scales; - - const float d = x[i+0].d; - - float sum = 0; - for (int j = 0; j < K_QUANTS_PER_ITERATION; ++j) { - sum += y[j+ 0] * s[0] * d * ((int8_t)((ql[j+ 0] & 0xF) | ((qh[j] & 0x03) << 4)) - 32) - + y[j+16] * s[1] * d * ((int8_t)((ql[j+16] & 0xF) | ((qh[j] & 0x0c) << 2)) - 32) - + y[j+32] * s[2] * d * ((int8_t)((ql[j+ 0] >> 4) | ((qh[j] & 0x30) >> 0)) - 32) - + y[j+48] * s[3] * d * ((int8_t)((ql[j+16] >> 4) | ((qh[j] & 0xc0) >> 2)) - 32); - } - tmp += sum; - - } - -#endif - - // sum up partial sums and write back result -#pragma unroll - for (int mask = 16; mask > 0; mask >>= 1) { - tmp += - dpct::permute_sub_group_by_xor(item_ct1.get_sub_group(), tmp, mask); - } - - if (tid == 0) { - dst[row] = tmp; - } -} - -static void convert_f16(const void * vx, const int ib, const int iqs, dfloat2 & v){ - const sycl::half *x = (const sycl::half *)vx; - - // automatic half -> float type cast if dfloat == float - v.x() = x[ib + iqs + 0]; - v.y() = x[ib + iqs + 1]; -} - -static void convert_f32(const void * vx, const int ib, const int iqs, dfloat2 & v){ - const float * x = (const float *) vx; - - // automatic half -> float type cast if dfloat == float - v.x() = x[ib + iqs + 0]; - v.y() = x[ib + iqs + 1]; -} - -static void quantize_q8_1(const float * __restrict__ x, void * __restrict__ vy, const int kx, const int kx_padded, - const sycl::nd_item<3> &item_ct1) { - const int ix = item_ct1.get_local_range(2) * item_ct1.get_group(2) + - item_ct1.get_local_id(2); - - if (ix >= kx_padded) { - return; - } - - const int iy = item_ct1.get_local_range(1) * item_ct1.get_group(1) + - item_ct1.get_local_id(1); - - const int i_padded = iy*kx_padded + ix; - - block_q8_1 * y = (block_q8_1 *) vy; - - const int ib = i_padded / QK8_1; // block index - const int iqs = i_padded % QK8_1; // quant index - - const float xi = ix < kx ? x[iy*kx + ix] : 0.0f; - float amax = sycl::fabs((float)xi); - float sum = xi; - -#pragma unroll - for (int mask = 16; mask > 0; mask >>= 1) { - amax = sycl::fmax(amax, dpct::permute_sub_group_by_xor( - item_ct1.get_sub_group(), amax, mask)); - sum += - dpct::permute_sub_group_by_xor(item_ct1.get_sub_group(), sum, mask); - } - - const float d = amax / 127; - const int8_t q = amax == 0.0f ? 0 : sycl::round(xi / d); - - y[ib].qs[iqs] = q; - - if (iqs > 0) { - return; - } - - reinterpret_cast(y[ib].ds.x()) = d; - reinterpret_cast(y[ib].ds.y()) = sum; -} - -template -static void k_get_rows( - const void * src0, const int32_t * src1, dst_t * dst, - int64_t ne00, /*int64_t ne01, int64_t ne02, int64_t ne03,*/ - /*int64_t ne10, int64_t ne11,*/ int64_t ne12, /*int64_t ne13,*/ - /*size_t s0,*/ size_t s1, size_t s2, size_t s3, - /*size_t nb00,*/ size_t nb01, size_t nb02, size_t nb03, - size_t s10, size_t s11, size_t s12, - const sycl::nd_item<3> &item_ct1/*, size_t s13*/) { - - const int i00 = (item_ct1.get_group(2) * item_ct1.get_local_range(2) + - item_ct1.get_local_id(2)) * - 2; - const int i10 = item_ct1.get_local_range(1) * item_ct1.get_group(1) + - item_ct1.get_local_id(1); - const int i11 = (item_ct1.get_group(0) * item_ct1.get_local_range(0) + - item_ct1.get_local_id(0)) / - ne12; - const int i12 = (item_ct1.get_group(0) * item_ct1.get_local_range(0) + - item_ct1.get_local_id(0)) % - ne12; - - if (i00 >= ne00) { - return; - } - - const int i01 = src1[i10*s10 + i11*s11 + i12*s12]; - - dst_t * dst_row = dst + i10*s1 + i11*s2 + i12*s3; - const void * src0_row = (const char *)src0 + i01*nb01 + i11*nb02 + i12*nb03; - - const int ib = i00/qk; // block index - const int iqs = (i00%qk)/qr; // quant index - const int iybs = i00 - i00%qk; // dst block start index - const int y_offset = qr == 1 ? 1 : qk/2; - - // dequantize - dfloat2 v; - dequantize_kernel(src0_row, ib, iqs, v); - - dst_row[iybs + iqs + 0] = v.x(); - dst_row[iybs + iqs + y_offset] = v.y(); -} - -template -static void k_get_rows_float( - const src0_t * src0, const int32_t * src1, dst_t * dst, - int64_t ne00, /*int64_t ne01, int64_t ne02, int64_t ne03,*/ - /*int64_t ne10, int64_t ne11,*/ int64_t ne12, /*int64_t ne13,*/ - /*size_t s0,*/ size_t s1, size_t s2, size_t s3, - /*size_t nb00,*/ size_t nb01, size_t nb02, size_t nb03, - size_t s10, size_t s11, size_t s12, - const sycl::nd_item<3> &item_ct1/*, size_t s13*/) { - - const int i00 = item_ct1.get_group(2) * item_ct1.get_local_range(2) + - item_ct1.get_local_id(2); - const int i10 = item_ct1.get_local_range(1) * item_ct1.get_group(1) + - item_ct1.get_local_id(1); - const int i11 = (item_ct1.get_group(0) * item_ct1.get_local_range(0) + - item_ct1.get_local_id(0)) / - ne12; - const int i12 = (item_ct1.get_group(0) * item_ct1.get_local_range(0) + - item_ct1.get_local_id(0)) % - ne12; - - if (i00 >= ne00) { - return; - } - - const int i01 = src1[i10*s10 + i11*s11 + i12*s12]; - - dst_t * dst_row = dst + i10*s1 + i11*s2 + i12*s3; - const src0_t * src0_row = (const src0_t *)((const char *)src0 + i01*nb01 + i11*nb02 + i12*nb03); - - dst_row[i00] = src0_row[i00]; -} - -template -static void dequantize_block(const void * __restrict__ vx, dst_t * __restrict__ y, const int k, - const sycl::nd_item<3> &item_ct1) { - const int i = 2 * (item_ct1.get_local_range(2) * item_ct1.get_group(2) + - item_ct1.get_local_id(2)); - - if (i >= k) { - return; - } - - const int ib = i/qk; // block index - const int iqs = (i%qk)/qr; // quant index - const int iybs = i - i%qk; // y block start index - const int y_offset = qr == 1 ? 1 : qk/2; - - // dequantize - dfloat2 v; - dequantize_kernel(vx, ib, iqs, v); - - y[iybs + iqs + 0] = v.x(); - y[iybs + iqs + y_offset] = v.y(); -} - -template -static void convert_unary(const void * __restrict__ vx, dst_t * __restrict__ y, const int k, - const sycl::nd_item<3> &item_ct1) { - const int i = item_ct1.get_local_range(2) * item_ct1.get_group(2) + - item_ct1.get_local_id(2); - - if (i >= k) { - return; - } - - const src_t * x = (src_t *) vx; - - y[i] = x[i]; -} - -// VDR = vec dot ratio, how many contiguous integers each thread processes when the vec dot kernel is called -// MMVQ = mul_mat_vec_q, MMQ = mul_mat_q - -#define VDR_Q4_0_Q8_1_MMVQ 2 -#define VDR_Q4_0_Q8_1_MMQ 4 - -template -static __dpct_inline__ float vec_dot_q4_0_q8_1_impl(const int *v, const int *u, - const float &d4, - const sycl::half2 &ds8) { - int sumi = 0; -#pragma unroll - for (int i = 0; i < vdr; ++i) { - const int vi0 = (v[i] >> 0) & 0x0F0F0F0F; - const int vi1 = (v[i] >> 4) & 0x0F0F0F0F; - - // SIMD dot product of quantized values - sumi = dpct::dp4a(vi0, u[2 * i + 0], sumi); - sumi = dpct::dp4a(vi1, u[2 * i + 1], sumi); - } - - const sycl::float2 ds8f = - ds8.convert(); - - // second part effectively subtracts 8 from each quant value - return d4 * (sumi * ds8f.x() - (8 * vdr / QI4_0) * ds8f.y()); -} - -#define VDR_Q4_1_Q8_1_MMVQ 2 -#define VDR_Q4_1_Q8_1_MMQ 4 - -template -static __dpct_inline__ float vec_dot_q4_1_q8_1_impl(const int *v, const int *u, - const sycl::half2 &dm4, - const sycl::half2 &ds8) { - - int sumi = 0; - -#pragma unroll - for (int i = 0; i < vdr; ++i) { - const int vi0 = (v[i] >> 0) & 0x0F0F0F0F; - const int vi1 = (v[i] >> 4) & 0x0F0F0F0F; - - // SIMD dot product of quantized values - sumi = dpct::dp4a(vi0, u[2 * i + 0], sumi); - sumi = dpct::dp4a(vi1, u[2 * i + 1], sumi); - } - -#ifdef GGML_SYCL_F16 - const sycl::float2 tmp = - (dm4 * ds8).convert(); - const float d4d8 = tmp.x(); - const float m4s8 = tmp.y(); -#else - const sycl::float2 dm4f = - dm4.convert(); - const sycl::float2 ds8f = - ds8.convert(); - const float d4d8 = dm4f.x() * ds8f.x(); - const float m4s8 = dm4f.y() * ds8f.y(); -#endif // GGML_SYCL_F16 - - // scale second part of sum by QI8_1/(vdr * QR4_1) to compensate for multiple threads adding it - return sumi * d4d8 + m4s8 / (QI8_1 / (vdr * QR4_1)); -} - -#define VDR_Q5_0_Q8_1_MMVQ 2 -#define VDR_Q5_0_Q8_1_MMQ 4 - -template -static __dpct_inline__ float -vec_dot_q5_0_q8_1_impl(const int *vl, const int *vh, const int *u, - const float &d5, const sycl::half2 &ds8) { - int sumi = 0; - -#pragma unroll - for (int i = 0; i < vdr; ++i) { - int vi0 = (vl[i] >> 0) & 0x0F0F0F0F; // lower 4 qs bits, still need qh as 5th bits - vi0 |= (vh[i] << 4) & 0x00000010; // 0 -> 4 - vi0 |= (vh[i] << 11) & 0x00001000; // 1 -> 12 - vi0 |= (vh[i] << 18) & 0x00100000; // 2 -> 20 - vi0 |= (vh[i] << 25) & 0x10000000; // 3 -> 28 - sumi = dpct::dp4a(vi0, u[2 * i + 0], - sumi); // SIMD dot product of quantized values - - int vi1 = (vl[i] >> 4) & 0x0F0F0F0F; // upper 4 qs bits, still need qh as 5th bits - vi1 |= (vh[i] >> 12) & 0x00000010; // 16 -> 4 - vi1 |= (vh[i] >> 5) & 0x00001000; // 17 -> 12 - vi1 |= (vh[i] << 2) & 0x00100000; // 18 -> 20 - vi1 |= (vh[i] << 9) & 0x10000000; // 19 -> 28 - sumi = dpct::dp4a(vi1, u[2 * i + 1], - sumi); // SIMD dot product of quantized values - } - - const sycl::float2 ds8f = - ds8.convert(); - - // second part effectively subtracts 16 from each quant value - return d5 * (sumi * ds8f.x() - (16 * vdr / QI5_0) * ds8f.y()); -} - -#define VDR_Q5_1_Q8_1_MMVQ 2 -#define VDR_Q5_1_Q8_1_MMQ 4 - -template -static __dpct_inline__ float -vec_dot_q5_1_q8_1_impl(const int *vl, const int *vh, const int *u, - const sycl::half2 &dm5, const sycl::half2 &ds8) { - - int sumi = 0; - -#pragma unroll - for (int i = 0; i < vdr; ++i) { - int vi0 = (vl[i] >> 0) & 0x0F0F0F0F; // lower 4 qs bits, still need qh as 5th bits - vi0 |= (vh[i] << 4) & 0x00000010; // 0 -> 4 - vi0 |= (vh[i] << 11) & 0x00001000; // 1 -> 12 - vi0 |= (vh[i] << 18) & 0x00100000; // 2 -> 20 - vi0 |= (vh[i] << 25) & 0x10000000; // 3 -> 28 - sumi = dpct::dp4a(vi0, u[2 * i + 0], - sumi); // SIMD dot product of quantized values - - int vi1 = (vl[i] >> 4) & 0x0F0F0F0F; // upper 4 qs bits, still need qh as 5th bits - vi1 |= (vh[i] >> 12) & 0x00000010; // 16 -> 4 - vi1 |= (vh[i] >> 5) & 0x00001000; // 17 -> 12 - vi1 |= (vh[i] << 2) & 0x00100000; // 18 -> 20 - vi1 |= (vh[i] << 9) & 0x10000000; // 19 -> 28 - sumi = dpct::dp4a(vi1, u[2 * i + 1], - sumi); // SIMD dot product of quantized values - } - -#ifdef GGML_SYCL_F16 - const sycl::float2 tmp = - (dm5 * ds8).convert(); - const float d5d8 = tmp.x(); - const float m5s8 = tmp.y(); - - -#else - const sycl::float2 dm5f = - dm5.convert(); - const sycl::float2 ds8f = - ds8.convert(); - const float d5d8 = dm5f.x() * ds8f.x(); - const float m5s8 = dm5f.y() * ds8f.y(); -#endif // GGML_SYCL_F16 - - // scale second part of sum by QI5_1 / vdr to compensate for multiple threads adding it - return sumi*d5d8 + m5s8 / (QI5_1 / vdr); -} - -#define VDR_Q8_0_Q8_1_MMVQ 2 -#define VDR_Q8_0_Q8_1_MMQ 8 - -template -static __dpct_inline__ float vec_dot_q8_0_q8_1_impl(const int *v, const int *u, - const float &d8_0, - const float &d8_1) { - - int sumi = 0; - -#pragma unroll - for (int i = 0; i < vdr; ++i) { - // SIMD dot product of quantized values - sumi = dpct::dp4a(v[i], u[i], sumi); - } - - return d8_0*d8_1 * sumi; -} - -template -static __dpct_inline__ float vec_dot_q8_1_q8_1_impl(const int *v, const int *u, - const sycl::half2 &dm8, - const sycl::half2 &ds8) { - - int sumi = 0; - -#pragma unroll - for (int i = 0; i < vdr; ++i) { - // SIMD dot product of quantized values - sumi = dpct::dp4a(v[i], u[i], sumi); - } - -#ifdef GGML_SYCL_F16 - const sycl::float2 tmp = - (dm8 * ds8).convert(); - const float d8d8 = tmp.x(); - const float m8s8 = tmp.y(); -#else - const sycl::float2 dm8f = - dm8.convert(); - const sycl::float2 ds8f = - ds8.convert(); - const float d8d8 = dm8f.x() * ds8f.x(); - const float m8s8 = dm8f.y() * ds8f.y(); -#endif // GGML_SYCL_F16 - - // scale second part of sum by QI8_1/ vdr to compensate for multiple threads adding it - return sumi*d8d8 + m8s8 / (QI8_1 / vdr); -} - -#define VDR_Q2_K_Q8_1_MMVQ 1 -#define VDR_Q2_K_Q8_1_MMQ 2 - -// contiguous v/x values -static __dpct_inline__ float vec_dot_q2_K_q8_1_impl_mmvq( - const int &v, const int *__restrict__ u, const uint8_t *__restrict__ scales, - const sycl::half2 &dm2, const float *__restrict__ d8) { - - float sumf_d = 0.0f; - float sumf_m = 0.0f; - -#pragma unroll - for (int i = 0; i < QR2_K; ++i) { - const int sc = scales[2*i]; - - const int vi = (v >> (2*i)) & 0x03030303; - - sumf_d += - d8[i] * (dpct::dp4a(vi, u[i], 0) * (sc & 0xF)); // SIMD dot product - - // fill int with 4x m - int m = sc >> 4; - m |= m << 8; - m |= m << 16; - sumf_m += d8[i] * - dpct::dp4a( - m, u[i], - 0); // multiply constant q2_K part with sum of q8_1 values - } - - const sycl::float2 dm2f = - dm2.convert(); - - return dm2f.x() * sumf_d - dm2f.y() * sumf_m; -} - -// contiguous u/y values -static __dpct_inline__ float -vec_dot_q2_K_q8_1_impl_mmq(const int *__restrict__ v, const int *__restrict__ u, - const uint8_t *__restrict__ scales, - const sycl::half2 &dm2, const float &d8) { - - int sumi_d = 0; - int sumi_m = 0; - -#pragma unroll - for (int i0 = 0; i0 < QI8_1; i0 += QI8_1/2) { - int sumi_d_sc = 0; - - const int sc = scales[i0 / (QI8_1/2)]; - - // fill int with 4x m - int m = sc >> 4; - m |= m << 8; - m |= m << 16; - -#pragma unroll - for (int i = i0; i < i0 + QI8_1/2; ++i) { - sumi_d_sc = dpct::dp4a(v[i], u[i], sumi_d_sc); // SIMD dot product - sumi_m = dpct::dp4a(m, u[i], - sumi_m); // multiply sum of q8_1 values with m - } - - sumi_d += sumi_d_sc * (sc & 0xF); - } - - const sycl::float2 dm2f = - dm2.convert(); - - return d8 * (dm2f.x() * sumi_d - dm2f.y() * sumi_m); -} - -#define VDR_Q3_K_Q8_1_MMVQ 1 -#define VDR_Q3_K_Q8_1_MMQ 2 - -// contiguous v/x values -static __dpct_inline__ float vec_dot_q3_K_q8_1_impl_mmvq( - const int &vl, const int &vh, const int *__restrict__ u, - const uint8_t *__restrict__ scales, const int &scale_offset, - const float &d3, const float *__restrict__ d8) { - - float sumf = 0.0f; - -#pragma unroll - for (int i = 0; i < QR3_K; ++i) { - const int isc = scale_offset + 2*i; - - const int isc_low = isc % (QK_K/32); - const int sc_shift_low = 4 * (isc / (QK_K/32)); - const int sc_low = (scales[isc_low] >> sc_shift_low) & 0xF; - - const int isc_high = isc % (QK_K/64); - const int sc_shift_high = 2 * (isc / (QK_K/64)); - const int sc_high = ((scales[(QK_K/32) + isc_high] >> sc_shift_high) & 3) << 4; - - const int sc = (sc_low | sc_high) - 32; - - const int vil = (vl >> (2*i)) & 0x03030303; - - const int vih = ((vh >> i) << 2) & 0x04040404; - - const int vi = - dpct::vectorized_binary(vil, vih, dpct::sub_sat()); - - sumf += d8[i] * (dpct::dp4a(vi, u[i], 0) * sc); // SIMD dot product - } - - return d3 * sumf; -} - -// contiguous u/y values -static __dpct_inline__ float -vec_dot_q3_K_q8_1_impl_mmq(const int *__restrict__ v, const int *__restrict__ u, - const int8_t *__restrict__ scales, const float &d3, - const float &d8) { - - int sumi = 0; - -#pragma unroll - for (int i0 = 0; i0 < QR3_K*VDR_Q3_K_Q8_1_MMQ; i0 += QI8_1/2) { - int sumi_sc = 0; - - for (int i = i0; i < i0 + QI8_1/2; ++i) { - sumi_sc = dpct::dp4a(v[i], u[i], sumi_sc); // SIMD dot product - } - - sumi += sumi_sc * scales[i0 / (QI8_1/2)]; - } - - return d3*d8 * sumi; -} - -#define VDR_Q4_K_Q8_1_MMVQ 2 -#define VDR_Q4_K_Q8_1_MMQ 8 - -// contiguous v/x values -static __dpct_inline__ float vec_dot_q4_K_q8_1_impl_vmmq( - const int *__restrict__ v, const int *__restrict__ u, - const uint8_t *__restrict__ sc, const uint8_t *__restrict__ m, - const sycl::half2 &dm4, const float *__restrict__ d8) { - - float sumf_d = 0.0f; - float sumf_m = 0.0f; - -#pragma unroll - for (int i = 0; i < QR4_K; ++i) { - const int v0i = (v[0] >> (4*i)) & 0x0F0F0F0F; - const int v1i = (v[1] >> (4*i)) & 0x0F0F0F0F; - - const int dot1 = - dpct::dp4a(v1i, u[2 * i + 1], - dpct::dp4a(v0i, u[2 * i + 0], 0)); // SIMD dot product - const int dot2 = - dpct::dp4a(0x01010101, u[2 * i + 1], - dpct::dp4a(0x01010101, u[2 * i + 0], 0)); // sum of u - - sumf_d += d8[i] * (dot1 * sc[i]); - sumf_m += d8[i] * (dot2 * m[i]); // multiply constant part of q4_K with sum of q8_1 values - } - - const sycl::float2 dm4f = - dm4.convert(); - - return dm4f.x() * sumf_d - dm4f.y() * sumf_m; -} - -// contiguous u/y values -static __dpct_inline__ float vec_dot_q4_K_q8_1_impl_mmq( - const int *__restrict__ v, const int *__restrict__ u, - const uint8_t *__restrict__ sc, const uint8_t *__restrict__ m, - const sycl::half2 &dm4, const sycl::half2 *__restrict__ ds8) { - - float sumf_d = 0.0f; - float sumf_m = 0.0f; - -#pragma unroll - for (int i = 0; i < QR4_K*VDR_Q4_K_Q8_1_MMQ/QI8_1; ++i) { - int sumi_d = 0; - -#pragma unroll - for (int j = 0; j < QI8_1; ++j) { - sumi_d = dpct::dp4a((v[j] >> (4 * i)) & 0x0F0F0F0F, - u[i * QI8_1 + j], sumi_d); // SIMD dot product - } - - const sycl::float2 ds8f = - ds8[i].convert(); - - sumf_d += ds8f.x() * (sc[i] * sumi_d); - sumf_m += ds8f.y() * m[i]; // sum of q8_1 block * q4_K min val - } - - const sycl::float2 dm4f = - dm4.convert(); - - return dm4f.x() * sumf_d - dm4f.y() * sumf_m; -} - -#define VDR_Q5_K_Q8_1_MMVQ 2 -#define VDR_Q5_K_Q8_1_MMQ 8 - -// contiguous v/x values -static __dpct_inline__ float vec_dot_q5_K_q8_1_impl_vmmq( - const int *__restrict__ vl, const int *__restrict__ vh, - const int *__restrict__ u, const uint8_t *__restrict__ sc, - const uint8_t *__restrict__ m, const sycl::half2 &dm5, - const float *__restrict__ d8) { - - float sumf_d = 0.0f; - float sumf_m = 0.0f; - -#pragma unroll - for (int i = 0; i < QR5_K; ++i) { - const int vl0i = (vl[0] >> (4*i)) & 0x0F0F0F0F; - const int vl1i = (vl[1] >> (4*i)) & 0x0F0F0F0F; - - const int vh0i = ((vh[0] >> i) << 4) & 0x10101010; - const int vh1i = ((vh[1] >> i) << 4) & 0x10101010; - - const int v0i = vl0i | vh0i; - const int v1i = vl1i | vh1i; - - const int dot1 = - dpct::dp4a(v0i, u[2 * i + 0], - dpct::dp4a(v1i, u[2 * i + 1], 0)); // SIMD dot product - const int dot2 = - dpct::dp4a(0x01010101, u[2 * i + 0], - dpct::dp4a(0x01010101, u[2 * i + 1], 0)); // sum of u - - sumf_d += d8[i] * (dot1 * sc[i]); - sumf_m += d8[i] * (dot2 * m[i]); - - } - - const sycl::float2 dm5f = - dm5.convert(); - - return dm5f.x() * sumf_d - dm5f.y() * sumf_m; -} - -// contiguous u/y values -static __dpct_inline__ float vec_dot_q5_K_q8_1_impl_mmq( - const int *__restrict__ v, const int *__restrict__ u, - const uint8_t *__restrict__ sc, const uint8_t *__restrict__ m, - const sycl::half2 &dm4, const sycl::half2 *__restrict__ ds8) { - - float sumf_d = 0.0f; - float sumf_m = 0.0f; - -#pragma unroll - for (int i = 0; i < QR5_K*VDR_Q5_K_Q8_1_MMQ/QI8_1; ++i) { - int sumi_d = 0; - -#pragma unroll - for (int j = 0; j < QI8_1; ++j) { - sumi_d = dpct::dp4a(v[i * QI8_1 + j], u[i * QI8_1 + j], - sumi_d); // SIMD dot product - } - - const sycl::float2 ds8f = - ds8[i].convert(); - - sumf_d += ds8f.x() * (sc[i] * sumi_d); - sumf_m += ds8f.y() * m[i]; // sum of q8_1 block * q4_K min val - } - - const sycl::float2 dm4f = - dm4.convert(); - - return dm4f.x() * sumf_d - dm4f.y() * sumf_m; -} - -#define VDR_Q6_K_Q8_1_MMVQ 1 -#define VDR_Q6_K_Q8_1_MMQ 8 - -// contiguous v/x values -static __dpct_inline__ float -vec_dot_q6_K_q8_1_impl_mmvq(const int &vl, const int &vh, - const int *__restrict__ u, - const int8_t *__restrict__ scales, const float &d, - const float *__restrict__ d8) { - - float sumf = 0.0f; - -#pragma unroll - for (int i = 0; i < QR6_K; ++i) { - const int sc = scales[4*i]; - - const int vil = (vl >> (4*i)) & 0x0F0F0F0F; - - const int vih = ((vh >> (4*i)) << 4) & 0x30303030; - - const int vi = dpct::vectorized_binary( - (vil | vih), 0x20202020, dpct::sub_sat()); // vi = (vil | vih) - 32 - - sumf += d8[i] * (dpct::dp4a(vi, u[i], 0) * sc); // SIMD dot product - } - - return d*sumf; -} - -// contiguous u/y values -static __dpct_inline__ float -vec_dot_q6_K_q8_1_impl_mmq(const int *__restrict__ v, const int *__restrict__ u, - const int8_t *__restrict__ sc, const float &d6, - const float *__restrict__ d8) { - - float sumf_d = 0.0f; - -#pragma unroll - for (int i0 = 0; i0 < VDR_Q6_K_Q8_1_MMQ; i0 += 4) { - sycl::int2 sumi_d = {0, 0}; // 2 q6_K scales per q8_1 scale - -#pragma unroll - for (int i = i0; i < i0 + 2; ++i) { - sumi_d.x() = dpct::dp4a(v[2 * i + 0], u[2 * i + 0], - sumi_d.x()); // SIMD dot product - sumi_d.x() = dpct::dp4a(v[2 * i + 1], u[2 * i + 1], - sumi_d.x()); // SIMD dot product - - sumi_d.y() = dpct::dp4a(v[2 * i + 4], u[2 * i + 4], - sumi_d.y()); // SIMD dot product - sumi_d.y() = dpct::dp4a(v[2 * i + 5], u[2 * i + 5], - sumi_d.y()); // SIMD dot product - } - - sumf_d += d8[i0 / 4] * - (sc[i0 / 2 + 0] * sumi_d.x() + sc[i0 / 2 + 1] * sumi_d.y()); - } - - return d6 * sumf_d; -} - -static __dpct_inline__ float -vec_dot_q4_0_q8_1(const void *__restrict__ vbq, - const block_q8_1 *__restrict__ bq8_1, const int &iqs) { - - const block_q4_0 * bq4_0 = (const block_q4_0 *) vbq; - - int v[VDR_Q4_0_Q8_1_MMVQ]; - int u[2*VDR_Q4_0_Q8_1_MMVQ]; - -#pragma unroll - for (int i = 0; i < VDR_Q4_0_Q8_1_MMVQ; ++i) { - v[i] = get_int_from_uint8(bq4_0->qs, iqs + i); - u[2*i+0] = get_int_from_int8_aligned(bq8_1->qs, iqs + i); - u[2*i+1] = get_int_from_int8_aligned(bq8_1->qs, iqs + i + QI4_0); - } - - return vec_dot_q4_0_q8_1_impl(v, u, bq4_0->d, bq8_1->ds); -} - -template -static __dpct_inline__ void -allocate_tiles_q4_0(int **x_ql, sycl::half2 **x_dm, int **x_qh, int **x_sc, - int *tile_x_qs_q4_0, float *tile_x_d_q4_0) { - (void)x_qh; (void)x_sc; - - *x_ql = tile_x_qs_q4_0; - *x_dm = (sycl::half2 *)tile_x_d_q4_0; -} - -template -static __dpct_inline__ void -load_tiles_q4_0(const void *__restrict__ vx, int *__restrict__ x_ql, - sycl::half2 *__restrict__ x_dm, int *__restrict__ x_qh, - int *__restrict__ x_sc, const int &i_offset, const int &i_max, - const int &k, const int &blocks_per_row) { - (void)x_qh; (void)x_sc; - GGML_SYCL_ASSUME(i_offset >= 0); - GGML_SYCL_ASSUME(i_offset < nwarps); - GGML_SYCL_ASSUME(k >= 0); - GGML_SYCL_ASSUME(k < WARP_SIZE); - - const int kbx = k / QI4_0; - const int kqsx = k % QI4_0; - - const block_q4_0 * bx0 = (const block_q4_0 *) vx; - - float * x_dmf = (float *) x_dm; - -#pragma unroll - for (int i0 = 0; i0 < mmq_y; i0 += nwarps) { - int i = i0 + i_offset; - - if (need_check) { - i = sycl::min(i, i_max); - } - - const block_q4_0 * bxi = bx0 + i*blocks_per_row + kbx; - - x_ql[i * (WARP_SIZE + 1) + k] = get_int_from_uint8(bxi->qs, kqsx); - // x_dmf[i * (WARP_SIZE/QI4_0) + i / QI4_0 + kbx] = bxi->d; - } - - const int blocks_per_tile_x_row = WARP_SIZE / QI4_0; - const int kbxd = k % blocks_per_tile_x_row; - -#pragma unroll - for (int i0 = 0; i0 < mmq_y; i0 += nwarps * QI4_0) { - int i = i0 + i_offset * QI4_0 + k / blocks_per_tile_x_row; - - if (need_check) { - i = sycl::min(i, i_max); - } - - const block_q4_0 * bxi = bx0 + i*blocks_per_row + kbxd; - - x_dmf[i * (WARP_SIZE/QI4_0) + i / QI4_0 + kbxd] = bxi->d; - } -} - -static __dpct_inline__ float vec_dot_q4_0_q8_1_mul_mat( - const int *__restrict__ x_ql, const sycl::half2 *__restrict__ x_dm, - const int *__restrict__ x_qh, const int *__restrict__ x_sc, - const int *__restrict__ y_qs, const sycl::half2 *__restrict__ y_ds, - const int &i, const int &j, const int &k) { - (void)x_qh; (void)x_sc; - - const int kyqs = k % (QI8_1/2) + QI8_1 * (k / (QI8_1/2)); - const float * x_dmf = (const float *) x_dm; - - int u[2*VDR_Q4_0_Q8_1_MMQ]; - -#pragma unroll - for (int l = 0; l < VDR_Q4_0_Q8_1_MMQ; ++l) { - u[2*l+0] = y_qs[j * WARP_SIZE + (kyqs + l) % WARP_SIZE]; - u[2*l+1] = y_qs[j * WARP_SIZE + (kyqs + l + QI4_0) % WARP_SIZE]; - } - - return vec_dot_q4_0_q8_1_impl - (&x_ql[i * (WARP_SIZE + 1) + k], u, x_dmf[i * (WARP_SIZE/QI4_0) + i/QI4_0 + k/QI4_0], - y_ds[j * (WARP_SIZE/QI8_1) + (2*k/QI8_1) % (WARP_SIZE/QI8_1)]); -} - -static __dpct_inline__ float -vec_dot_q4_1_q8_1(const void *__restrict__ vbq, - const block_q8_1 *__restrict__ bq8_1, const int &iqs) { - - const block_q4_1 * bq4_1 = (const block_q4_1 *) vbq; - - int v[VDR_Q4_1_Q8_1_MMVQ]; - int u[2*VDR_Q4_1_Q8_1_MMVQ]; - -#pragma unroll - for (int i = 0; i < VDR_Q4_1_Q8_1_MMVQ; ++i) { - v[i] = get_int_from_uint8_aligned(bq4_1->qs, iqs + i); - u[2*i+0] = get_int_from_int8_aligned(bq8_1->qs, iqs + i); - u[2*i+1] = get_int_from_int8_aligned(bq8_1->qs, iqs + i + QI4_1); - } - - return vec_dot_q4_1_q8_1_impl(v, u, bq4_1->dm, bq8_1->ds); -} - -template -static __dpct_inline__ void -allocate_tiles_q4_1(int **x_ql, sycl::half2 **x_dm, int **x_qh, int **x_sc, - int *tile_x_qs_q4_1, sycl::half2 *tile_x_dm_q4_1) { - (void)x_qh; (void)x_sc; - - *x_ql = tile_x_qs_q4_1; - *x_dm = tile_x_dm_q4_1; -} - -template -static __dpct_inline__ void -load_tiles_q4_1(const void *__restrict__ vx, int *__restrict__ x_ql, - sycl::half2 *__restrict__ x_dm, int *__restrict__ x_qh, - int *__restrict__ x_sc, const int &i_offset, const int &i_max, - const int &k, const int &blocks_per_row) { - (void)x_qh; (void)x_sc; - - GGML_SYCL_ASSUME(i_offset >= 0); - GGML_SYCL_ASSUME(i_offset < nwarps); - GGML_SYCL_ASSUME(k >= 0); - GGML_SYCL_ASSUME(k < WARP_SIZE); - - const int kbx = k / QI4_1; - const int kqsx = k % QI4_1; - - const block_q4_1 * bx0 = (const block_q4_1 *) vx; - -#pragma unroll - for (int i0 = 0; i0 < mmq_y; i0 += nwarps) { - int i = i0 + i_offset; - - if (need_check) { - i = sycl::min(i, i_max); - } - - const block_q4_1 * bxi = bx0 + i*blocks_per_row + kbx; - - x_ql[i * (WARP_SIZE + 1) + k] = get_int_from_uint8_aligned(bxi->qs, kqsx); - } - - const int blocks_per_tile_x_row = WARP_SIZE / QI4_1; - const int kbxd = k % blocks_per_tile_x_row; - -#pragma unroll - for (int i0 = 0; i0 < mmq_y; i0 += nwarps * QI4_1) { - int i = i0 + i_offset * QI4_1 + k / blocks_per_tile_x_row; - - if (need_check) { - i = sycl::min(i, i_max); - } - - const block_q4_1 * bxi = bx0 + i*blocks_per_row + kbxd; - - x_dm[i * (WARP_SIZE/QI4_1) + i / QI4_1 + kbxd] = bxi->dm; - } -} - -static __dpct_inline__ float vec_dot_q4_1_q8_1_mul_mat( - const int *__restrict__ x_ql, const sycl::half2 *__restrict__ x_dm, - const int *__restrict__ x_qh, const int *__restrict__ x_sc, - const int *__restrict__ y_qs, const sycl::half2 *__restrict__ y_ds, - const int &i, const int &j, const int &k) { - (void)x_qh; (void)x_sc; - - const int kyqs = k % (QI8_1/2) + QI8_1 * (k / (QI8_1/2)); - - int u[2*VDR_Q4_1_Q8_1_MMQ]; - -#pragma unroll - for (int l = 0; l < VDR_Q4_1_Q8_1_MMQ; ++l) { - u[2*l+0] = y_qs[j * WARP_SIZE + (kyqs + l) % WARP_SIZE]; - u[2*l+1] = y_qs[j * WARP_SIZE + (kyqs + l + QI4_1) % WARP_SIZE]; - } - - return vec_dot_q4_1_q8_1_impl - (&x_ql[i * (WARP_SIZE + 1) + k], u, x_dm[i * (WARP_SIZE/QI4_1) + i/QI4_1 + k/QI4_1], - y_ds[j * (WARP_SIZE/QI8_1) + (2*k/QI8_1) % (WARP_SIZE/QI8_1)]); -} - -static __dpct_inline__ float -vec_dot_q5_0_q8_1(const void *__restrict__ vbq, - const block_q8_1 *__restrict__ bq8_1, const int &iqs) { - - const block_q5_0 * bq5_0 = (const block_q5_0 *) vbq; - - int vl[VDR_Q5_0_Q8_1_MMVQ]; - int vh[VDR_Q5_0_Q8_1_MMVQ]; - int u[2*VDR_Q5_0_Q8_1_MMVQ]; - -#pragma unroll - for (int i = 0; i < VDR_Q5_0_Q8_1_MMVQ; ++i) { - vl[i] = get_int_from_uint8(bq5_0->qs, iqs + i); - vh[i] = get_int_from_uint8(bq5_0->qh, 0) >> (4 * (iqs + i)); - u[2*i+0] = get_int_from_int8_aligned(bq8_1->qs, iqs + i); - u[2*i+1] = get_int_from_int8_aligned(bq8_1->qs, iqs + i + QI5_0); - } - - return vec_dot_q5_0_q8_1_impl(vl, vh, u, bq5_0->d, bq8_1->ds); -} - -template -static __dpct_inline__ void -allocate_tiles_q5_0(int **x_ql, sycl::half2 **x_dm, int **x_qh, int **x_sc, - int *tile_x_ql_q5_0, float *tile_x_d_q5_0) { - (void)x_qh; (void)x_sc; - - *x_ql = tile_x_ql_q5_0; - *x_dm = (sycl::half2 *)tile_x_d_q5_0; -} - -template -static __dpct_inline__ void -load_tiles_q5_0(const void *__restrict__ vx, int *__restrict__ x_ql, - sycl::half2 *__restrict__ x_dm, int *__restrict__ x_qh, - int *__restrict__ x_sc, const int &i_offset, const int &i_max, - const int &k, const int &blocks_per_row) { - (void)x_qh; (void)x_sc; - - GGML_SYCL_ASSUME(i_offset >= 0); - GGML_SYCL_ASSUME(i_offset < nwarps); - GGML_SYCL_ASSUME(k >= 0); - GGML_SYCL_ASSUME(k < WARP_SIZE); - - const int kbx = k / QI5_0; - const int kqsx = k % QI5_0; - - const block_q5_0 * bx0 = (const block_q5_0 *) vx; - -#pragma unroll - for (int i0 = 0; i0 < mmq_y; i0 += nwarps) { - int i = i0 + i_offset; - - if (need_check) { - i = sycl::min(i, i_max); - } - - const block_q5_0 * bxi = bx0 + i*blocks_per_row + kbx; - - const int ql = get_int_from_uint8(bxi->qs, kqsx); - const int qh = get_int_from_uint8(bxi->qh, 0) >> (4 * (k % QI5_0)); - - int qs0 = (ql >> 0) & 0x0F0F0F0F; - qs0 |= (qh << 4) & 0x00000010; // 0 -> 4 - qs0 |= (qh << 11) & 0x00001000; // 1 -> 12 - qs0 |= (qh << 18) & 0x00100000; // 2 -> 20 - qs0 |= (qh << 25) & 0x10000000; // 3 -> 28 - qs0 = dpct::vectorized_binary( - qs0, 0x10101010, dpct::sub_sat()); // subtract 16 - - x_ql[i * (2*WARP_SIZE + 1) + 2*k+0] = qs0; - - int qs1 = (ql >> 4) & 0x0F0F0F0F; - qs1 |= (qh >> 12) & 0x00000010; // 16 -> 4 - qs1 |= (qh >> 5) & 0x00001000; // 17 -> 12 - qs1 |= (qh << 2) & 0x00100000; // 18 -> 20 - qs1 |= (qh << 9) & 0x10000000; // 19 -> 28 - qs1 = dpct::vectorized_binary( - qs1, 0x10101010, dpct::sub_sat()); // subtract 16 - - x_ql[i * (2*WARP_SIZE + 1) + 2*k+1] = qs1; - } - - const int blocks_per_tile_x_row = WARP_SIZE / QI5_0; - const int kbxd = k % blocks_per_tile_x_row; - float * x_dmf = (float *) x_dm; - -#pragma unroll - for (int i0 = 0; i0 < mmq_y; i0 += nwarps * QI5_0) { - int i = i0 + i_offset * QI5_0 + k / blocks_per_tile_x_row; - - if (need_check) { - i = sycl::min(i, i_max); - } - - const block_q5_0 * bxi = bx0 + i*blocks_per_row + kbxd; - - x_dmf[i * (WARP_SIZE/QI5_0) + i / QI5_0 + kbxd] = bxi->d; - } -} - -static __dpct_inline__ float vec_dot_q5_0_q8_1_mul_mat( - const int *__restrict__ x_ql, const sycl::half2 *__restrict__ x_dm, - const int *__restrict__ x_qh, const int *__restrict__ x_sc, - const int *__restrict__ y_qs, const sycl::half2 *__restrict__ y_ds, - const int &i, const int &j, const int &k) { - (void)x_qh; (void)x_sc; - - const int kyqs = k % (QI8_1/2) + QI8_1 * (k / (QI8_1/2)); - const int index_bx = i * (WARP_SIZE/QI5_0) + i/QI5_0 + k/QI5_0; - const float * x_dmf = (const float *) x_dm; - const float * y_df = (const float *) y_ds; - - int u[2*VDR_Q5_0_Q8_1_MMQ]; - -#pragma unroll - for (int l = 0; l < VDR_Q5_0_Q8_1_MMQ; ++l) { - u[2*l+0] = y_qs[j * WARP_SIZE + (kyqs + l) % WARP_SIZE]; - u[2*l+1] = y_qs[j * WARP_SIZE + (kyqs + l + QI5_0) % WARP_SIZE]; - } - - return vec_dot_q8_0_q8_1_impl - (&x_ql[i * (2*WARP_SIZE + 1) + 2 * k], u, x_dmf[index_bx], y_df[j * (WARP_SIZE/QI8_1) + (2*k/QI8_1) % (WARP_SIZE/QI8_1)]); -} - -static __dpct_inline__ float -vec_dot_q5_1_q8_1(const void *__restrict__ vbq, - const block_q8_1 *__restrict__ bq8_1, const int &iqs) { - - const block_q5_1 * bq5_1 = (const block_q5_1 *) vbq; - - int vl[VDR_Q5_1_Q8_1_MMVQ]; - int vh[VDR_Q5_1_Q8_1_MMVQ]; - int u[2*VDR_Q5_1_Q8_1_MMVQ]; - -#pragma unroll - for (int i = 0; i < VDR_Q5_1_Q8_1_MMVQ; ++i) { - vl[i] = get_int_from_uint8_aligned(bq5_1->qs, iqs + i); - vh[i] = get_int_from_uint8_aligned(bq5_1->qh, 0) >> (4 * (iqs + i)); - u[2*i+0] = get_int_from_int8_aligned(bq8_1->qs, iqs + i); - u[2*i+1] = get_int_from_int8_aligned(bq8_1->qs, iqs + i + QI5_1); - } - - return vec_dot_q5_1_q8_1_impl(vl, vh, u, bq5_1->dm, bq8_1->ds); -} - -template -static __dpct_inline__ void -allocate_tiles_q5_1(int **x_ql, sycl::half2 **x_dm, int **x_qh, int **x_sc, - int *tile_x_ql_q5_1, sycl::half2 *tile_x_dm_q5_1) { - (void)x_qh; (void)x_sc; - - *x_ql = tile_x_ql_q5_1; - *x_dm = tile_x_dm_q5_1; -} - -template -static __dpct_inline__ void -load_tiles_q5_1(const void *__restrict__ vx, int *__restrict__ x_ql, - sycl::half2 *__restrict__ x_dm, int *__restrict__ x_qh, - int *__restrict__ x_sc, const int &i_offset, const int &i_max, - const int &k, const int &blocks_per_row) { - (void)x_qh; (void)x_sc; - - GGML_SYCL_ASSUME(i_offset >= 0); - GGML_SYCL_ASSUME(i_offset < nwarps); - GGML_SYCL_ASSUME(k >= 0); - GGML_SYCL_ASSUME(k < WARP_SIZE); - - const int kbx = k / QI5_1; - const int kqsx = k % QI5_1; - - const block_q5_1 * bx0 = (const block_q5_1 *) vx; - -#pragma unroll - for (int i0 = 0; i0 < mmq_y; i0 += nwarps) { - int i = i0 + i_offset; - - if (need_check) { - i = sycl::min(i, i_max); - } - - const block_q5_1 * bxi = bx0 + i*blocks_per_row + kbx; - - const int ql = get_int_from_uint8_aligned(bxi->qs, kqsx); - const int qh = get_int_from_uint8_aligned(bxi->qh, 0) >> (4 * (k % QI5_1)); - - int qs0 = (ql >> 0) & 0x0F0F0F0F; - qs0 |= (qh << 4) & 0x00000010; // 0 -> 4 - qs0 |= (qh << 11) & 0x00001000; // 1 -> 12 - qs0 |= (qh << 18) & 0x00100000; // 2 -> 20 - qs0 |= (qh << 25) & 0x10000000; // 3 -> 28 - - x_ql[i * (2*WARP_SIZE + 1) + 2*k+0] = qs0; - - int qs1 = (ql >> 4) & 0x0F0F0F0F; - qs1 |= (qh >> 12) & 0x00000010; // 16 -> 4 - qs1 |= (qh >> 5) & 0x00001000; // 17 -> 12 - qs1 |= (qh << 2) & 0x00100000; // 18 -> 20 - qs1 |= (qh << 9) & 0x10000000; // 19 -> 28 - - x_ql[i * (2*WARP_SIZE + 1) + 2*k+1] = qs1; - } - - const int blocks_per_tile_x_row = WARP_SIZE / QI5_1; - const int kbxd = k % blocks_per_tile_x_row; - -#pragma unroll - for (int i0 = 0; i0 < mmq_y; i0 += nwarps * QI5_1) { - int i = i0 + i_offset * QI5_1 + k / blocks_per_tile_x_row; - - if (need_check) { - i = sycl::min(i, i_max); - } - - const block_q5_1 * bxi = bx0 + i*blocks_per_row + kbxd; - - x_dm[i * (WARP_SIZE/QI5_1) + i / QI5_1 + kbxd] = bxi->dm; - } -} - -static __dpct_inline__ float vec_dot_q5_1_q8_1_mul_mat( - const int *__restrict__ x_ql, const sycl::half2 *__restrict__ x_dm, - const int *__restrict__ x_qh, const int *__restrict__ x_sc, - const int *__restrict__ y_qs, const sycl::half2 *__restrict__ y_ds, - const int &i, const int &j, const int &k) { - (void)x_qh; (void)x_sc; - - const int kyqs = k % (QI8_1/2) + QI8_1 * (k / (QI8_1/2)); - const int index_bx = i * (WARP_SIZE/QI5_1) + + i/QI5_1 + k/QI5_1; - - int u[2*VDR_Q5_1_Q8_1_MMQ]; - -#pragma unroll - for (int l = 0; l < VDR_Q5_1_Q8_1_MMQ; ++l) { - u[2*l+0] = y_qs[j * WARP_SIZE + (kyqs + l) % WARP_SIZE]; - u[2*l+1] = y_qs[j * WARP_SIZE + (kyqs + l + QI5_1) % WARP_SIZE]; - } - - return vec_dot_q8_1_q8_1_impl - (&x_ql[i * (2*WARP_SIZE + 1) + 2 * k], u, x_dm[index_bx], y_ds[j * (WARP_SIZE/QI8_1) + (2*k/QI8_1) % (WARP_SIZE/QI8_1)]); -} - -static __dpct_inline__ float -vec_dot_q8_0_q8_1(const void *__restrict__ vbq, - const block_q8_1 *__restrict__ bq8_1, const int &iqs) { - - const block_q8_0 * bq8_0 = (const block_q8_0 *) vbq; - - int v[VDR_Q8_0_Q8_1_MMVQ]; - int u[VDR_Q8_0_Q8_1_MMVQ]; - -#pragma unroll - for (int i = 0; i < VDR_Q8_0_Q8_1_MMVQ; ++i) { - v[i] = get_int_from_int8(bq8_0->qs, iqs + i); - u[i] = get_int_from_int8_aligned(bq8_1->qs, iqs + i); - } - - return vec_dot_q8_0_q8_1_impl(v, u, bq8_0->d, - bq8_1->ds[0]); -} - -template -static __dpct_inline__ void -allocate_tiles_q8_0(int **x_ql, sycl::half2 **x_dm, int **x_qh, int **x_sc, - int *tile_x_qs_q8_0, float *tile_x_d_q8_0) { - (void)x_qh; (void)x_sc; - - *x_ql = tile_x_qs_q8_0; - *x_dm = (sycl::half2 *)tile_x_d_q8_0; -} - -template -static __dpct_inline__ void -load_tiles_q8_0(const void *__restrict__ vx, int *__restrict__ x_ql, - sycl::half2 *__restrict__ x_dm, int *__restrict__ x_qh, - int *__restrict__ x_sc, const int &i_offset, const int &i_max, - const int &k, const int &blocks_per_row) { - (void)x_qh; (void)x_sc; - - GGML_SYCL_ASSUME(i_offset >= 0); - GGML_SYCL_ASSUME(i_offset < nwarps); - GGML_SYCL_ASSUME(k >= 0); - GGML_SYCL_ASSUME(k < WARP_SIZE); - - const int kbx = k / QI8_0; - const int kqsx = k % QI8_0; - float * x_dmf = (float *) x_dm; - - const block_q8_0 * bx0 = (const block_q8_0 *) vx; - -#pragma unroll - for (int i0 = 0; i0 < mmq_y; i0 += nwarps) { - int i = i0 + i_offset; - - if (need_check) { - i = sycl::min(i, i_max); - } - - const block_q8_0 * bxi = bx0 + i*blocks_per_row + kbx; - - x_ql[i * (WARP_SIZE + 1) + k] = get_int_from_int8(bxi->qs, kqsx); - } - - const int blocks_per_tile_x_row = WARP_SIZE / QI8_0; - const int kbxd = k % blocks_per_tile_x_row; - -#pragma unroll - for (int i0 = 0; i0 < mmq_y; i0 += nwarps * QI8_0) { - int i = i0 + i_offset * QI8_0 + k / blocks_per_tile_x_row; - - if (need_check) { - i = sycl::min(i, i_max); - } - - const block_q8_0 * bxi = bx0 + i*blocks_per_row + kbxd; - - x_dmf[i * (WARP_SIZE/QI8_0) + i / QI8_0 + kbxd] = bxi->d; - } -} - -static __dpct_inline__ float vec_dot_q8_0_q8_1_mul_mat( - const int *__restrict__ x_ql, const sycl::half2 *__restrict__ x_dm, - const int *__restrict__ x_qh, const int *__restrict__ x_sc, - const int *__restrict__ y_qs, const sycl::half2 *__restrict__ y_ds, - const int &i, const int &j, const int &k) { - (void)x_qh; (void)x_sc; - - const float * x_dmf = (const float *) x_dm; - const float * y_df = (const float *) y_ds; - - return vec_dot_q8_0_q8_1_impl - (&x_ql[i * (WARP_SIZE + 1) + k], &y_qs[j * WARP_SIZE + k], x_dmf[i * (WARP_SIZE/QI8_0) + i/QI8_0 + k/QI8_0], - y_df[j * (WARP_SIZE/QI8_1) + k/QI8_1]); -} - -static __dpct_inline__ float -vec_dot_q2_K_q8_1(const void *__restrict__ vbq, - const block_q8_1 *__restrict__ bq8_1, const int &iqs) { - - const block_q2_K * bq2_K = (const block_q2_K *) vbq; - - const int bq8_offset = QR2_K * (iqs / QI8_1); - const int scale_offset = iqs - iqs % QI8_1 + (iqs % QI8_1) / (QI8_1/2); - - const uint8_t * scales = bq2_K->scales + scale_offset; - - const int v = get_int_from_uint8_aligned(bq2_K->qs, iqs); - int u[QR2_K]; - float d8[QR2_K]; - -#pragma unroll - for (int i = 0; i < QR2_K; ++ i) { - u[i] = get_int_from_int8_aligned(bq8_1[bq8_offset + i].qs, iqs % QI8_1); - d8[i] = bq8_1[bq8_offset + i].ds[0]; - } - - return vec_dot_q2_K_q8_1_impl_mmvq(v, u, scales, bq2_K->dm, d8); -} - -template -static __dpct_inline__ void -allocate_tiles_q2_K(int **x_ql, sycl::half2 **x_dm, int **x_qh, int **x_sc, - int *tile_x_ql_q2_K, sycl::half2 *tile_x_dm_q2_K, - int *tile_x_sc_q2_K) { - (void)x_qh; - - *x_ql = tile_x_ql_q2_K; - *x_dm = tile_x_dm_q2_K; - *x_sc = tile_x_sc_q2_K; -} - -template -static __dpct_inline__ void -load_tiles_q2_K(const void *__restrict__ vx, int *__restrict__ x_ql, - sycl::half2 *__restrict__ x_dm, int *__restrict__ x_qh, - int *__restrict__ x_sc, const int &i_offset, const int &i_max, - const int &k, const int &blocks_per_row) { - (void)x_qh; - - GGML_SYCL_ASSUME(i_offset >= 0); - GGML_SYCL_ASSUME(i_offset < nwarps); - GGML_SYCL_ASSUME(k >= 0); - GGML_SYCL_ASSUME(k < WARP_SIZE); - - const int kbx = k / QI2_K; - const int kqsx = k % QI2_K; - - const block_q2_K * bx0 = (const block_q2_K *) vx; - -#pragma unroll - for (int i0 = 0; i0 < mmq_y; i0 += nwarps) { - int i = i0 + i_offset; - - if (need_check) { - i = sycl::min(i, i_max); - } - - const block_q2_K * bxi = bx0 + i*blocks_per_row + kbx; - - x_ql[i * (WARP_SIZE + 1) + k] = get_int_from_uint8_aligned(bxi->qs, kqsx); - } - - const int blocks_per_tile_x_row = WARP_SIZE / QI2_K; - const int kbxd = k % blocks_per_tile_x_row; - -#pragma unroll - for (int i0 = 0; i0 < mmq_y; i0 += nwarps * QI2_K) { - int i = (i0 + i_offset * QI2_K + k / blocks_per_tile_x_row) % mmq_y; - - if (need_check) { - i = sycl::min(i, i_max); - } - - const block_q2_K * bxi = bx0 + i*blocks_per_row + kbxd; - - x_dm[i * (WARP_SIZE/QI2_K) + i / QI2_K + kbxd] = bxi->dm; - } - -#pragma unroll - for (int i0 = 0; i0 < mmq_y; i0 += nwarps * 4) { - int i = i0 + i_offset * 4 + k / (WARP_SIZE/4); - - if (need_check) { - i = sycl::min(i, i_max); - } - - const block_q2_K * bxi = bx0 + i*blocks_per_row + (k % (WARP_SIZE/4)) / (QI2_K/4); - - x_sc[i * (WARP_SIZE/4) + i / 4 + k % (WARP_SIZE/4)] = get_int_from_uint8_aligned(bxi->scales, k % (QI2_K/4)); - } -} - -static __dpct_inline__ float vec_dot_q2_K_q8_1_mul_mat( - const int *__restrict__ x_ql, const sycl::half2 *__restrict__ x_dm, - const int *__restrict__ x_qh, const int *__restrict__ x_sc, - const int *__restrict__ y_qs, const sycl::half2 *__restrict__ y_ds, - const int &i, const int &j, const int &k) { - (void)x_qh; - - const int kbx = k / QI2_K; - const int ky = (k % QI2_K) * QR2_K; - const float * y_df = (const float *) y_ds; - - int v[QR2_K*VDR_Q2_K_Q8_1_MMQ]; - - const int kqsx = i * (WARP_SIZE + 1) + kbx*QI2_K + (QI2_K/2) * (ky/(2*QI2_K)) + ky % (QI2_K/2); - const int shift = 2 * ((ky % (2*QI2_K)) / (QI2_K/2)); - -#pragma unroll - for (int l = 0; l < QR2_K*VDR_Q2_K_Q8_1_MMQ; ++l) { - v[l] = (x_ql[kqsx + l] >> shift) & 0x03030303; - } - - const uint8_t * scales = ((const uint8_t *) &x_sc[i * (WARP_SIZE/4) + i/4 + kbx*4]) + ky/4; - - const int index_y = j * WARP_SIZE + (QR2_K*k) % WARP_SIZE; - return vec_dot_q2_K_q8_1_impl_mmq(v, &y_qs[index_y], scales, x_dm[i * (WARP_SIZE/QI2_K) + i/QI2_K + kbx], y_df[index_y/QI8_1]); -} - -static __dpct_inline__ float -vec_dot_q3_K_q8_1(const void *__restrict__ vbq, - const block_q8_1 *__restrict__ bq8_1, const int &iqs) { - - const block_q3_K * bq3_K = (const block_q3_K *) vbq; - - const int bq8_offset = QR3_K * (iqs / (QI3_K/2)); - const int scale_offset = iqs - iqs % QI8_1 + (iqs % QI8_1) / (QI8_1/2); - - const float d = bq3_K->d; - - const int vl = get_int_from_uint8(bq3_K->qs, iqs); - - // invert the mask with ~ so that a 0/1 results in 4/0 being subtracted - const int vh = ~get_int_from_uint8(bq3_K->hmask, iqs % (QI3_K/2)) >> bq8_offset; - - int u[QR3_K]; - float d8[QR3_K]; - -#pragma unroll - for (int i = 0; i < QR3_K; ++i) { - u[i] = get_int_from_int8_aligned(bq8_1[bq8_offset + i].qs, iqs % QI8_1); - d8[i] = bq8_1[bq8_offset + i].ds[0]; - } - - return vec_dot_q3_K_q8_1_impl_mmvq(vl, vh, u, bq3_K->scales, scale_offset, d, d8); -} - -template -static __dpct_inline__ void -allocate_tiles_q3_K(int **x_ql, sycl::half2 **x_dm, int **x_qh, int **x_sc, - int *tile_x_ql_q3_K, sycl::half2 *tile_x_dm_q3_K, - int *tile_x_qh_q3_K, int *tile_x_sc_q3_K) { - - *x_ql = tile_x_ql_q3_K; - *x_dm = tile_x_dm_q3_K; - *x_qh = tile_x_qh_q3_K; - *x_sc = tile_x_sc_q3_K; -} - -template -static __dpct_inline__ void -load_tiles_q3_K(const void *__restrict__ vx, int *__restrict__ x_ql, - sycl::half2 *__restrict__ x_dm, int *__restrict__ x_qh, - int *__restrict__ x_sc, const int &i_offset, const int &i_max, - const int &k, const int &blocks_per_row) { - - GGML_SYCL_ASSUME(i_offset >= 0); - GGML_SYCL_ASSUME(i_offset < nwarps); - GGML_SYCL_ASSUME(k >= 0); - GGML_SYCL_ASSUME(k < WARP_SIZE); - - const int kbx = k / QI3_K; - const int kqsx = k % QI3_K; - - const block_q3_K * bx0 = (const block_q3_K *) vx; - -#pragma unroll - for (int i0 = 0; i0 < mmq_y; i0 += nwarps) { - int i = i0 + i_offset; - - if (need_check) { - i = sycl::min(i, i_max); - } - - const block_q3_K * bxi = bx0 + i*blocks_per_row + kbx; - - x_ql[i * (WARP_SIZE + 1) + k] = get_int_from_uint8(bxi->qs, kqsx); - } - - const int blocks_per_tile_x_row = WARP_SIZE / QI3_K; - const int kbxd = k % blocks_per_tile_x_row; - float * x_dmf = (float *) x_dm; - -#pragma unroll - for (int i0 = 0; i0 < mmq_y; i0 += nwarps * QI3_K) { - int i = (i0 + i_offset * QI3_K + k / blocks_per_tile_x_row) % mmq_y; - - if (need_check) { - i = sycl::min(i, i_max); - } - - const block_q3_K * bxi = bx0 + i*blocks_per_row + kbxd; - - x_dmf[i * (WARP_SIZE/QI3_K) + i / QI3_K + kbxd] = bxi->d; - } - -#pragma unroll - for (int i0 = 0; i0 < mmq_y; i0 += nwarps * 2) { - int i = i0 + i_offset * 2 + k / (WARP_SIZE/2); - - if (need_check) { - i = sycl::min(i, i_max); - } - - const block_q3_K * bxi = bx0 + i*blocks_per_row + (k % (WARP_SIZE/2)) / (QI3_K/2); - - // invert the mask with ~ so that a 0/1 results in 4/0 being subtracted - x_qh[i * (WARP_SIZE/2) + i / 2 + k % (WARP_SIZE/2)] = ~get_int_from_uint8(bxi->hmask, k % (QI3_K/2)); - } - -#pragma unroll - for (int i0 = 0; i0 < mmq_y; i0 += nwarps * 4) { - int i = i0 + i_offset * 4 + k / (WARP_SIZE/4); - - if (need_check) { - i = sycl::min(i, i_max); - } - - const block_q3_K * bxi = bx0 + i*blocks_per_row + (k % (WARP_SIZE/4)) / (QI3_K/4); - - const int ksc = k % (QI3_K/4); - - const int ksc_low = ksc % (QI3_K/8); - const int shift_low = 4 * (ksc / (QI3_K/8)); - const int sc_low = (get_int_from_uint8(bxi->scales, ksc_low) >> shift_low) & 0x0F0F0F0F; - - const int ksc_high = QI3_K/8; - const int shift_high = 2 * ksc; - const int sc_high = ((get_int_from_uint8(bxi->scales, ksc_high) >> shift_high) << 4) & 0x30303030; - - const int sc = dpct::vectorized_binary( - sc_low | sc_high, 0x20202020, dpct::sub_sat()); - - x_sc[i * (WARP_SIZE/4) + i / 4 + k % (WARP_SIZE/4)] = sc; - } -} - -static __dpct_inline__ float vec_dot_q3_K_q8_1_mul_mat( - const int *__restrict__ x_ql, const sycl::half2 *__restrict__ x_dm, - const int *__restrict__ x_qh, const int *__restrict__ x_sc, - const int *__restrict__ y_qs, const sycl::half2 *__restrict__ y_ds, - const int &i, const int &j, const int &k) { - - const int kbx = k / QI3_K; - const int ky = (k % QI3_K) * QR3_K; - const float * x_dmf = (const float *) x_dm; - const float * y_df = (const float *) y_ds; - - const int8_t * scales = ((const int8_t *) (x_sc + i * (WARP_SIZE/4) + i/4 + kbx*4)) + ky/4; - - int v[QR3_K*VDR_Q3_K_Q8_1_MMQ]; - -#pragma unroll - for (int l = 0; l < QR3_K*VDR_Q3_K_Q8_1_MMQ; ++l) { - const int kqsx = i * (WARP_SIZE + 1) + kbx*QI3_K + (QI3_K/2) * (ky/(2*QI3_K)) + ky % (QI3_K/2); - const int shift = 2 * ((ky % 32) / 8); - const int vll = (x_ql[kqsx + l] >> shift) & 0x03030303; - - const int vh = x_qh[i * (WARP_SIZE/2) + i/2 + kbx * (QI3_K/2) + (ky+l)%8] >> ((ky+l) / 8); - const int vlh = (vh << 2) & 0x04040404; - - v[l] = dpct::vectorized_binary(vll, vlh, dpct::sub_sat()); - } - - const int index_y = j * WARP_SIZE + (k*QR3_K) % WARP_SIZE; - return vec_dot_q3_K_q8_1_impl_mmq(v, &y_qs[index_y], scales, x_dmf[i * (WARP_SIZE/QI3_K) + i/QI3_K + kbx], y_df[index_y/QI8_1]); -} - -static __dpct_inline__ float -vec_dot_q4_K_q8_1(const void *__restrict__ vbq, - const block_q8_1 *__restrict__ bq8_1, const int &iqs) { - -#ifndef GGML_QKK_64 - const block_q4_K * bq4_K = (const block_q4_K *) vbq; - - int v[2]; - int u[2*QR4_K]; - float d8[QR4_K]; - - // iqs is in 0,2..30. bq8_offset = iqs/4 -> bq8_offset = 0, 2, 4, 6 - const int bq8_offset = QR4_K * ((iqs/2) / (QI8_1/2)); - - // iqs = 0....3 -> bq8_offset = 0, want q4_offset = 0, 4, 8, 12 - // iqs = 4....7 -> bq8_offset = 2, want q4_offset = 32, 36, 40, 44 - // iqs = 8...11 -> bq8_offset = 4, want q4_offset = 64, 68, 72, 76 - // iqs = 12..15 -> bq8_offset = 6, want q4_offset = 96, 100, 104, 108 - - const int * q4 = (const int *)(bq4_K->qs + 16 * bq8_offset + 4 * ((iqs/2)%4)); - v[0] = q4[0]; - v[1] = q4[4]; - - const uint16_t * scales = (const uint16_t *)bq4_K->scales; - uint16_t aux[2]; - const int j = bq8_offset/2; - if (j < 2) { - aux[0] = scales[j+0] & 0x3f3f; - aux[1] = scales[j+2] & 0x3f3f; - } else { - aux[0] = ((scales[j+2] >> 0) & 0x0f0f) | ((scales[j-2] & 0xc0c0) >> 2); - aux[1] = ((scales[j+2] >> 4) & 0x0f0f) | ((scales[j-0] & 0xc0c0) >> 2); - } - const uint8_t * sc = (const uint8_t *)aux; - const uint8_t * m = sc + 2; - - for (int i = 0; i < QR4_K; ++i) { - const block_q8_1 * bq8i = bq8_1 + bq8_offset + i; - d8[i] = bq8i->ds[0]; - - const int * q8 = (const int *)bq8i->qs + ((iqs/2)%4); - u[2*i+0] = q8[0]; - u[2*i+1] = q8[4]; - } - - return vec_dot_q4_K_q8_1_impl_vmmq(v, u, sc, m, bq4_K->dm, d8); - -#else - -#if __SYCL_ARCH__ >= VER_4VEC // lowest compute capability for integer intrinsics - const block_q4_K * bq4_K = (const block_q4_K *) vbq; - - float sumf_d = 0.0f; - float sumf_m = 0.0f; - - uint16_t aux16[2]; - const uint8_t * s = (const uint8_t *)aux16; - - const uint16_t * a = (const uint16_t *)bq4_K->scales; - aux16[0] = a[0] & 0x0f0f; - aux16[1] = (a[0] >> 4) & 0x0f0f; - - const float dall = bq4_K->dm[0]; - const float dmin = bq4_K->dm[1]; - - const float d8_1 = bq8_1[0].ds[0]; - const float d8_2 = bq8_1[1].ds[1]; - - const int ui1 = *((const int *)bq8_1[0].qs + (iqs/2)); - const int ui2 = *((const int *)bq8_1[0].qs + (iqs/2) + 4); - const int ui3 = *((const int *)bq8_1[1].qs + (iqs/2)); - const int ui4 = *((const int *)bq8_1[1].qs + (iqs/2) + 4); - - const int * q4 = (const int *)bq4_K->qs + (iqs/2); - const int v1 = q4[0]; - const int v2 = q4[4]; - - const int dot1 = dpct::dp4a(ui2, v2 & 0x0f0f0f0f, dpct::dp4a(ui1, v1 & 0x0f0f0f0f, 0)); - const int dot2 = dpct::dp4a(ui4, (v2 >> 4) & 0x0f0f0f0f, dpct::dp4a(ui3, (v1 >> 4) & 0x0f0f0f0f, 0)); - const int dot3 = dpct::dp4a(0x01010101, ui2, dpct::dp4a(0x01010101, ui1, 0)); - const int dot4 = dpct::dp4a(0x01010101, ui4, dpct::dp4a(0x01010101, ui3, 0)); - - sumf_d += d8_1 * (dot1 * s[0]) + d8_2 * (dot2 * s[1]); - sumf_m += d8_1 * (dot3 * s[2]) + d8_2 * (dot4 * s[3]); - - return dall * sumf_d - dmin * sumf_m; - -#else - bad_arch(); -#endif // __SYCL_ARCH__ >= VER_4VEC - -#endif -} - -template -static __dpct_inline__ void -allocate_tiles_q4_K(int **x_ql, sycl::half2 **x_dm, int **x_qh, int **x_sc, - int *tile_x_ql_q4_K, sycl::half2 *tile_x_dm_q4_K, - int *tile_x_sc_q4_K) { - (void)x_qh; - - *x_ql = tile_x_ql_q4_K; - *x_dm = tile_x_dm_q4_K; - *x_sc = tile_x_sc_q4_K; -} - -template -static __dpct_inline__ void -load_tiles_q4_K(const void *__restrict__ vx, int *__restrict__ x_ql, - sycl::half2 *__restrict__ x_dm, int *__restrict__ x_qh, - int *__restrict__ x_sc, const int &i_offset, const int &i_max, - const int &k, const int &blocks_per_row) { - (void)x_qh; - - GGML_SYCL_ASSUME(i_offset >= 0); - GGML_SYCL_ASSUME(i_offset < nwarps); - GGML_SYCL_ASSUME(k >= 0); - GGML_SYCL_ASSUME(k < WARP_SIZE); - - const int kbx = k / QI4_K; // == 0 if QK_K == 256 - const int kqsx = k % QI4_K; // == k if QK_K == 256 - - const block_q4_K * bx0 = (const block_q4_K *) vx; - -#pragma unroll - for (int i0 = 0; i0 < mmq_y; i0 += nwarps) { - int i = i0 + i_offset; - - if (need_check) { - i = sycl::min(i, i_max); - } - - const block_q4_K * bxi = bx0 + i*blocks_per_row + kbx; - - x_ql[i * (WARP_SIZE + 1) + k] = get_int_from_uint8_aligned(bxi->qs, kqsx); - } - - const int blocks_per_tile_x_row = WARP_SIZE / QI4_K; // == 1 if QK_K == 256 - const int kbxd = k % blocks_per_tile_x_row; // == 0 if QK_K == 256 - -#pragma unroll - for (int i0 = 0; i0 < mmq_y; i0 += nwarps * QI4_K) { - int i = (i0 + i_offset * QI4_K + k / blocks_per_tile_x_row) % mmq_y; - - if (need_check) { - i = sycl::min(i, i_max); - } - - const block_q4_K * bxi = bx0 + i*blocks_per_row + kbxd; - -#if QK_K == 256 - x_dm[i * (WARP_SIZE/QI4_K) + i / QI4_K + kbxd] = bxi->dm; -#else - x_dm[i * (WARP_SIZE/QI4_K) + i / QI4_K + kbxd] = {bxi->dm[0], bxi->dm[1]}; -#endif - } - -#pragma unroll - for (int i0 = 0; i0 < mmq_y; i0 += nwarps * 8) { - int i = (i0 + i_offset * 8 + k / (WARP_SIZE/8)) % mmq_y; - - if (need_check) { - i = sycl::min(i, i_max); - } - - const block_q4_K * bxi = bx0 + i*blocks_per_row + (k % (WARP_SIZE/8)) / (QI4_K/8); - - const int * scales = (const int *) bxi->scales; - - const int ksc = k % (WARP_SIZE/8); - - // scale arrangement after the following two lines: sc0,...,sc3, sc4,...,sc7, m0,...,m3, m4,...,m8 - int scales8 = (scales[(ksc%2) + (ksc!=0)] >> (4 * (ksc & (ksc/2)))) & 0x0F0F0F0F; // lower 4 bits - scales8 |= (scales[ksc/2] >> (2 * (ksc % 2))) & 0x30303030; // upper 2 bits - - x_sc[i * (WARP_SIZE/8) + i / 8 + ksc] = scales8; - } -} - -static __dpct_inline__ float vec_dot_q4_K_q8_1_mul_mat( - const int *__restrict__ x_ql, const sycl::half2 *__restrict__ x_dm, - const int *__restrict__ x_qh, const int *__restrict__ x_sc, - const int *__restrict__ y_qs, const sycl::half2 *__restrict__ y_ds, - const int &i, const int &j, const int &k) { - (void)x_qh; - - const uint8_t * sc = ((const uint8_t *) &x_sc[i * (WARP_SIZE/8) + i/8 + k/16]) + 2*((k % 16) / 8); - - const int index_y = j * WARP_SIZE + (QR4_K*k) % WARP_SIZE; - return vec_dot_q4_K_q8_1_impl_mmq(&x_ql[i * (WARP_SIZE + 1) + k], &y_qs[index_y], sc, sc+8, - x_dm[i * (WARP_SIZE/QI4_K) + i/QI4_K], &y_ds[index_y/QI8_1]); -} - -static __dpct_inline__ float -vec_dot_q5_K_q8_1(const void *__restrict__ vbq, - const block_q8_1 *__restrict__ bq8_1, const int &iqs) { - -#ifndef GGML_QKK_64 - const block_q5_K * bq5_K = (const block_q5_K *) vbq; - - int vl[2]; - int vh[2]; - int u[2*QR5_K]; - float d8[QR5_K]; - - const int bq8_offset = QR5_K * ((iqs/2) / (QI8_1/2)); - const int * ql = (const int *)(bq5_K->qs + 16 * bq8_offset + 4 * ((iqs/2)%4)); - const int * qh = (const int *)(bq5_K->qh + 4 * ((iqs/2)%4)); - - vl[0] = ql[0]; - vl[1] = ql[4]; - - vh[0] = qh[0] >> bq8_offset; - vh[1] = qh[4] >> bq8_offset; - - const uint16_t * scales = (const uint16_t *)bq5_K->scales; - uint16_t aux[2]; - const int j = bq8_offset/2; - if (j < 2) { - aux[0] = scales[j+0] & 0x3f3f; - aux[1] = scales[j+2] & 0x3f3f; - } else { - aux[0] = ((scales[j+2] >> 0) & 0x0f0f) | ((scales[j-2] & 0xc0c0) >> 2); - aux[1] = ((scales[j+2] >> 4) & 0x0f0f) | ((scales[j-0] & 0xc0c0) >> 2); - } - const uint8_t * sc = (const uint8_t *)aux; - const uint8_t * m = sc + 2; - -#pragma unroll - for (int i = 0; i < QR5_K; ++i) { - const block_q8_1 * bq8i = bq8_1 + bq8_offset + i; - d8[i] = bq8i->ds[0]; - - const int * q8 = (const int *)bq8i->qs + ((iqs/2)%4); - u[2*i+0] = q8[0]; - u[2*i+1] = q8[4]; - } - - return vec_dot_q5_K_q8_1_impl_vmmq(vl, vh, u, sc, m, bq5_K->dm, d8); - -#else - -#if __SYCL_ARCH__ >= VER_4VEC // lowest compute capability for integer intrinsics - const block_q5_K * bq5_K = (const block_q5_K *) vbq; - - const int8_t * s = bq5_K->scales; - - const float d = bq5_K->d; - - const float d8_1 = bq8_1[0].ds[0]; - const float d8_2 = bq8_1[1].ds[1]; - - const int ui1 = *((const int *)bq8_1[0].qs + (iqs/2)); - const int ui2 = *((const int *)bq8_1[0].qs + (iqs/2) + 4); - const int ui3 = *((const int *)bq8_1[1].qs + (iqs/2)); - const int ui4 = *((const int *)bq8_1[1].qs + (iqs/2) + 4); - - const int * ql = (const int *)bq5_K->qs + (iqs/2); - const int vl1 = ql[0]; - const int vl2 = ql[4]; - - const int step = 4 * (iqs/2); // 0, 4, 8, 12 - const int im = step/8; // = 0 for iqs = 0, 2, = 1 for iqs = 4, 6 - const int in = step%8; // 0, 4, 0, 4 - const int vh = (*((const int *)(bq5_K->qh + in))) >> im; - - const int v1 = (((vh << 4) & 0x10101010) ^ 0x10101010) | ((vl1 >> 0) & 0x0f0f0f0f); - const int v2 = (((vh << 2) & 0x10101010) ^ 0x10101010) | ((vl2 >> 0) & 0x0f0f0f0f); - const int v3 = (((vh >> 0) & 0x10101010) ^ 0x10101010) | ((vl1 >> 4) & 0x0f0f0f0f); - const int v4 = (((vh >> 2) & 0x10101010) ^ 0x10101010) | ((vl2 >> 4) & 0x0f0f0f0f); - - const float sumf_d = d8_1 * (dpct::dp4a(ui1, v1, 0) * s[0] + dpct::dp4a(ui2, v2, 0) * s[1]) - + d8_2 * (dpct::dp4a(ui3, v3, 0) * s[2] + dpct::dp4a(ui4, v4, 0) * s[3]); - - return d * sumf_d; - -#else - bad_arch(); -#endif // __SYCL_ARCH__ >= VER_4VEC - -#endif -} - -template -static __dpct_inline__ void -allocate_tiles_q5_K(int **x_ql, sycl::half2 **x_dm, int **x_qh, int **x_sc, - int *tile_x_ql_q5_K, sycl::half2 *tile_x_dm_q5_K, - int *tile_x_sc_q5_K) { - (void)x_qh; - - *x_ql = tile_x_ql_q5_K; - *x_dm = tile_x_dm_q5_K; - *x_sc = tile_x_sc_q5_K; -} - -template -static __dpct_inline__ void -load_tiles_q5_K(const void *__restrict__ vx, int *__restrict__ x_ql, - sycl::half2 *__restrict__ x_dm, int *__restrict__ x_qh, - int *__restrict__ x_sc, const int &i_offset, const int &i_max, - const int &k, const int &blocks_per_row) { - (void)x_qh; - - GGML_SYCL_ASSUME(i_offset >= 0); - GGML_SYCL_ASSUME(i_offset < nwarps); - GGML_SYCL_ASSUME(k >= 0); - GGML_SYCL_ASSUME(k < WARP_SIZE); - - const int kbx = k / QI5_K; // == 0 if QK_K == 256 - const int kqsx = k % QI5_K; // == k if QK_K == 256 - - const block_q5_K * bx0 = (const block_q5_K *) vx; - -#pragma unroll - for (int i0 = 0; i0 < mmq_y; i0 += nwarps) { - int i = i0 + i_offset; - - if (need_check) { - i = sycl::min(i, i_max); - } - - const block_q5_K * bxi = bx0 + i*blocks_per_row + kbx; - const int ky = QR5_K*kqsx; - - const int ql = get_int_from_uint8_aligned(bxi->qs, kqsx); - const int ql0 = (ql >> 0) & 0x0F0F0F0F; - const int ql1 = (ql >> 4) & 0x0F0F0F0F; - - const int qh = get_int_from_uint8_aligned(bxi->qh, kqsx % (QI5_K/4)); - const int qh0 = ((qh >> (2 * (kqsx / (QI5_K/4)) + 0)) << 4) & 0x10101010; - const int qh1 = ((qh >> (2 * (kqsx / (QI5_K/4)) + 1)) << 4) & 0x10101010; - - const int kq0 = ky - ky % (QI5_K/2) + k % (QI5_K/4) + 0; - const int kq1 = ky - ky % (QI5_K/2) + k % (QI5_K/4) + (QI5_K/4); - - x_ql[i * (2*WARP_SIZE + 1) + kq0] = ql0 | qh0; - x_ql[i * (2*WARP_SIZE + 1) + kq1] = ql1 | qh1; - } - - const int blocks_per_tile_x_row = WARP_SIZE / QI5_K; // == 1 if QK_K == 256 - const int kbxd = k % blocks_per_tile_x_row; // == 0 if QK_K == 256 - -#pragma unroll - for (int i0 = 0; i0 < mmq_y; i0 += nwarps * QI5_K) { - int i = (i0 + i_offset * QI5_K + k / blocks_per_tile_x_row) % mmq_y; - - if (need_check) { - i = sycl::min(i, i_max); - } - - const block_q5_K * bxi = bx0 + i*blocks_per_row + kbxd; - -#if QK_K == 256 - x_dm[i * (WARP_SIZE/QI5_K) + i / QI5_K + kbxd] = bxi->dm; -#endif - } - -#pragma unroll - for (int i0 = 0; i0 < mmq_y; i0 += nwarps * 8) { - int i = (i0 + i_offset * 8 + k / (WARP_SIZE/8)) % mmq_y; - - if (need_check) { - i = sycl::min(i, i_max); - } - - const block_q5_K * bxi = bx0 + i*blocks_per_row + (k % (WARP_SIZE/8)) / (QI5_K/8); - - const int * scales = (const int *) bxi->scales; - - const int ksc = k % (WARP_SIZE/8); - - // scale arrangement after the following two lines: sc0,...,sc3, sc4,...,sc7, m0,...,m3, m4,...,m8 - int scales8 = (scales[(ksc%2) + (ksc!=0)] >> (4 * (ksc & (ksc/2)))) & 0x0F0F0F0F; // lower 4 bits - scales8 |= (scales[ksc/2] >> (2 * (ksc % 2))) & 0x30303030; // upper 2 bits - - x_sc[i * (WARP_SIZE/8) + i / 8 + ksc] = scales8; - } -} - -static __dpct_inline__ float vec_dot_q5_K_q8_1_mul_mat( - const int *__restrict__ x_ql, const sycl::half2 *__restrict__ x_dm, - const int *__restrict__ x_qh, const int *__restrict__ x_sc, - const int *__restrict__ y_qs, const sycl::half2 *__restrict__ y_ds, - const int &i, const int &j, const int &k) { - (void)x_qh; - - const uint8_t * sc = ((const uint8_t *) &x_sc[i * (WARP_SIZE/8) + i/8 + k/16]) + 2 * ((k % 16) / 8); - - const int index_x = i * (QR5_K*WARP_SIZE + 1) + QR5_K*k; - const int index_y = j * WARP_SIZE + (QR5_K*k) % WARP_SIZE; - return vec_dot_q5_K_q8_1_impl_mmq(&x_ql[index_x], &y_qs[index_y], sc, sc+8, - x_dm[i * (WARP_SIZE/QI5_K) + i/QI5_K], &y_ds[index_y/QI8_1]); -} - -static __dpct_inline__ float -vec_dot_q6_K_q8_1(const void *__restrict__ vbq, - const block_q8_1 *__restrict__ bq8_1, const int &iqs) { - - const block_q6_K * bq6_K = (const block_q6_K *) vbq; - - const int bq8_offset = 2 * QR6_K * (iqs / (QI6_K/2)) + (iqs % (QI6_K/2)) / (QI6_K/4); - const int scale_offset = (QI6_K/4) * (iqs / (QI6_K/2)) + (iqs % (QI6_K/2)) / (QI6_K/8); - const int vh_shift = 2 * ((iqs % (QI6_K/2)) / (QI6_K/4)); - - const int vl = get_int_from_uint8(bq6_K->ql, iqs); - const int vh = get_int_from_uint8(bq6_K->qh, (QI6_K/4) * (iqs / (QI6_K/2)) + iqs % (QI6_K/4)) >> vh_shift; - - const int8_t * scales = bq6_K->scales + scale_offset; - - int u[QR6_K]; - float d8[QR6_K]; - -#pragma unroll - for (int i = 0; i < QR6_K; ++i) { - u[i] = get_int_from_int8_aligned(bq8_1[bq8_offset + 2*i].qs, iqs % QI8_1); - d8[i] = bq8_1[bq8_offset + 2 * i].ds[0]; - } - - return vec_dot_q6_K_q8_1_impl_mmvq(vl, vh, u, scales, bq6_K->d, d8); -} - -template -static __dpct_inline__ void -allocate_tiles_q6_K(int **x_ql, sycl::half2 **x_dm, int **x_qh, int **x_sc, - int *tile_x_ql, sycl::half2 *tile_x_dm, int *tile_x_sc) { - (void)x_qh; - - *x_ql = tile_x_ql; - *x_dm = tile_x_dm; - *x_sc = tile_x_sc; -} - -template -static __dpct_inline__ void -load_tiles_q6_K(const void *__restrict__ vx, int *__restrict__ x_ql, - sycl::half2 *__restrict__ x_dm, int *__restrict__ x_qh, - int *__restrict__ x_sc, const int &i_offset, const int &i_max, - const int &k, const int &blocks_per_row) { - (void)x_qh; - - GGML_SYCL_ASSUME(i_offset >= 0); - GGML_SYCL_ASSUME(i_offset < nwarps); - GGML_SYCL_ASSUME(k >= 0); - GGML_SYCL_ASSUME(k < WARP_SIZE); - - const int kbx = k / QI6_K; // == 0 if QK_K == 256 - const int kqsx = k % QI6_K; // == k if QK_K == 256 - - const block_q6_K * bx0 = (const block_q6_K *) vx; - -#pragma unroll - for (int i0 = 0; i0 < mmq_y; i0 += nwarps) { - int i = i0 + i_offset; - - if (need_check) { - i = sycl::min(i, i_max); - } - - const block_q6_K * bxi = bx0 + i*blocks_per_row + kbx; - const int ky = QR6_K*kqsx; - - const int ql = get_int_from_uint8(bxi->ql, kqsx); - const int ql0 = (ql >> 0) & 0x0F0F0F0F; - const int ql1 = (ql >> 4) & 0x0F0F0F0F; - - const int qh = get_int_from_uint8(bxi->qh, (QI6_K/4) * (kqsx / (QI6_K/2)) + kqsx % (QI6_K/4)); - const int qh0 = ((qh >> (2 * ((kqsx % (QI6_K/2)) / (QI6_K/4)))) << 4) & 0x30303030; - const int qh1 = (qh >> (2 * ((kqsx % (QI6_K/2)) / (QI6_K/4)))) & 0x30303030; - - const int kq0 = ky - ky % QI6_K + k % (QI6_K/2) + 0; - const int kq1 = ky - ky % QI6_K + k % (QI6_K/2) + (QI6_K/2); - - x_ql[i * (2 * WARP_SIZE + 1) + kq0] = - dpct::vectorized_binary(ql0 | qh0, 0x20202020, - dpct::sub_sat()); - x_ql[i * (2 * WARP_SIZE + 1) + kq1] = - dpct::vectorized_binary(ql1 | qh1, 0x20202020, - dpct::sub_sat()); - } - - const int blocks_per_tile_x_row = WARP_SIZE / QI6_K; // == 1 if QK_K == 256 - const int kbxd = k % blocks_per_tile_x_row; // == 0 if QK_K == 256 - float * x_dmf = (float *) x_dm; - -#pragma unroll - for (int i0 = 0; i0 < mmq_y; i0 += nwarps * QI6_K) { - int i = (i0 + i_offset * QI6_K + k / blocks_per_tile_x_row) % mmq_y; - - if (need_check) { - i = sycl::min(i, i_max); - } - - const block_q6_K * bxi = bx0 + i*blocks_per_row + kbxd; - - x_dmf[i * (WARP_SIZE/QI6_K) + i / QI6_K + kbxd] = bxi->d; - } - -#pragma unroll - for (int i0 = 0; i0 < mmq_y; i0 += nwarps * 8) { - int i = (i0 + i_offset * 8 + k / (WARP_SIZE/8)) % mmq_y; - - if (need_check) { - i = sycl::min(i, i_max); - } - - const block_q6_K * bxi = bx0 + i*blocks_per_row + (k % (WARP_SIZE/8)) / 4; - - x_sc[i * (WARP_SIZE/8) + i / 8 + k % (WARP_SIZE/8)] = get_int_from_int8(bxi->scales, k % (QI6_K/8)); - } -} - -static __dpct_inline__ float vec_dot_q6_K_q8_1_mul_mat( - const int *__restrict__ x_ql, const sycl::half2 *__restrict__ x_dm, - const int *__restrict__ x_qh, const int *__restrict__ x_sc, - const int *__restrict__ y_qs, const sycl::half2 *__restrict__ y_ds, - const int &i, const int &j, const int &k) { - (void)x_qh; - - const float * x_dmf = (const float *) x_dm; - const float * y_df = (const float *) y_ds; - - const int8_t * sc = ((const int8_t *) &x_sc[i * (WARP_SIZE/8) + i/8 + k/8]); - - const int index_x = i * (QR6_K*WARP_SIZE + 1) + QR6_K*k; - const int index_y = j * WARP_SIZE + (QR6_K*k) % WARP_SIZE; - return vec_dot_q6_K_q8_1_impl_mmq(&x_ql[index_x], &y_qs[index_y], sc, x_dmf[i * (WARP_SIZE/QI6_K) + i/QI6_K], &y_df[index_y/QI8_1]); -} - - -static __dpct_inline__ float -vec_dot_iq2_xxs_q8_1(const void *__restrict__ vbq, - const block_q8_1 *__restrict__ bq8_1, const int &iqs, - const uint64_t *iq2xxs_grid, const uint8_t *ksigns_iq2xs, - const uint8_t *kmask_iq2xs) { -#if QK_K == 256 - const block_iq2_xxs * bq2 = (const block_iq2_xxs *) vbq; - -#if QR2_XXS == 8 - const int ib32 = iqs; - const uint16_t * q2 = bq2->qs + 4*ib32; - const uint8_t * aux8 = (const uint8_t *)q2; - const int8_t * q8 = bq8_1[ib32].qs; - uint32_t aux32 = q2[2] | (q2[3] << 16); - int sumi = 0; - for (int l = 0; l < 4; ++l) { - const uint8_t * grid = (const uint8_t *)(iq2xxs_grid + aux8[l]); - const uint8_t signs = ksigns_iq2xs[aux32 & 127]; - for (int j = 0; j < 8; ++j) { - sumi += q8[j] * grid[j] * (signs & kmask_iq2xs[j] ? -1 : 1); - } - q8 += 8; - aux32 >>= 7; - } - const float d = (float)bq2->d * (0.5f + aux32) * bq8_1[ib32].ds[0] * 0.25f; - return d * sumi; -#else - // iqs is 0...15 - const int ib32 = iqs/2; - const int il = iqs%2; - const uint16_t * q2 = bq2->qs + 4*ib32; - const uint8_t * aux8 = (const uint8_t *)q2; - const uint8_t * grid1 = (const uint8_t *)(iq2xxs_grid + aux8[2*il+0]); - const uint8_t * grid2 = (const uint8_t *)(iq2xxs_grid + aux8[2*il+1]); - const uint32_t aux32 = q2[2] | (q2[3] << 16); - const float d = (float)bq2->d * (0.5f + (aux32 >> 28)) * bq8_1[ib32].ds[0] * 0.25f; - const uint8_t signs1 = ksigns_iq2xs[(aux32 >> 14*il) & 127]; - const uint8_t signs2 = ksigns_iq2xs[(aux32 >> (14*il + 7)) & 127]; - const int8_t * q8 = bq8_1[ib32].qs + 16*il; - int sumi1 = 0, sumi2 = 0; - for (int j = 0; j < 8; ++j) { - sumi1 += q8[j+0] * grid1[j] * (signs1 & kmask_iq2xs[j] ? -1 : 1); - sumi2 += q8[j+8] * grid2[j] * (signs2 & kmask_iq2xs[j] ? -1 : 1); - } - return d * (sumi1 + sumi2); -#endif -#else - assert(false); - return 0.f; -#endif -} - -static __dpct_inline__ float -vec_dot_iq2_xs_q8_1(const void *__restrict__ vbq, - const block_q8_1 *__restrict__ bq8_1, const int &iqs, - const uint64_t *iq2xs_grid, const uint64_t *ksigns64) { -#if DPCT_COMPATIBILITY_TEMP >= \ - MIN_CC_DP4A // lowest compute capability for integer intrinsics -#if QK_K == 256 - const block_iq2_xs * bq2 = (const block_iq2_xs *) vbq; - - const int ib32 = iqs; - const uint16_t * q2 = bq2->qs + 4*ib32; - const int8_t * q8 = bq8_1[ib32].qs; - const uint8_t ls1 = bq2->scales[ib32] & 0xf; - const uint8_t ls2 = bq2->scales[ib32] >> 4; - int sumi1 = 0; - for (int l = 0; l < 2; ++l) { - const uint32_t * grid = (const uint32_t *)(iq2xs_grid + (q2[l] & 511)); - const uint32_t * signs = (const uint32_t *)(ksigns64 + (q2[l] >> 9)); - const int grid_l = dpct::vectorized_binary( - grid[0] ^ signs[0], signs[0], std::minus<>()); - const int grid_h = dpct::vectorized_binary( - grid[1] ^ signs[1], signs[1], std::minus<>()); - sumi1 = dpct::dp4a(grid_l, *((const int *)q8 + 0), sumi1); - sumi1 = dpct::dp4a(grid_h, *((const int *)q8 + 1), sumi1); - q8 += 8; - } - int sumi2 = 0; - for (int l = 2; l < 4; ++l) { - const uint32_t * grid = (const uint32_t *)(iq2xs_grid + (q2[l] & 511)); - const uint32_t * signs = (const uint32_t *)(ksigns64 + (q2[l] >> 9)); - const int grid_l = dpct::vectorized_binary( - grid[0] ^ signs[0], signs[0], std::minus<>()); - const int grid_h = dpct::vectorized_binary( - grid[1] ^ signs[1], signs[1], std::minus<>()); - sumi2 = dpct::dp4a(grid_l, *((const int *)q8 + 0), sumi2); - sumi2 = dpct::dp4a(grid_h, *((const int *)q8 + 1), sumi2); - q8 += 8; - } - const float d = (float)bq2->d * bq8_1[ib32].ds[0] * 0.25f; - return d * ((0.5f + ls1) * sumi1 + (0.5f + ls2) * sumi2); -#else - assert(false); - return 0.f; -#endif -#else - assert(false); - return 0.f; -#endif -} - -static __dpct_inline__ float -vec_dot_iq2_s_q8_1(const void *__restrict__ vbq, - const block_q8_1 *__restrict__ bq8_1, const int &iqs) { -#if QK_K == 256 - const block_iq2_s * bq2 = (const block_iq2_s *) vbq; - - const int ib32 = iqs; - const int8_t * q8 = bq8_1[ib32].qs; - const uint8_t * signs = bq2->qs + QK_K/8 + 4*ib32; - const uint8_t ls1 = bq2->scales[ib32] & 0xf; - const uint8_t ls2 = bq2->scales[ib32] >> 4; - int sumi1 = 0; - for (int l = 0; l < 2; ++l) { - const uint32_t * grid = (const uint32_t *)(iq2s_grid + (bq2->qs[4*ib32+l] | ((bq2->qh[ib32] << (8-2*l)) & 0x300))); - const uint32_t signs0 = dpct::vectorized_binary( - ((signs[l] & 0xf) * 0x01010101) & 0x08040201, 0x08040201, - std::equal_to<>()); - const uint32_t signs1 = dpct::vectorized_binary( - ((signs[l] >> 4) * 0x01010101) & 0x08040201, 0x08040201, - std::equal_to<>()); - const int grid_l = dpct::vectorized_binary( - grid[0] ^ signs0, signs0, std::minus<>()); - const int grid_h = dpct::vectorized_binary( - grid[1] ^ signs1, signs1, std::minus<>()); - sumi1 = dpct::dp4a(grid_l, *((const int *)q8 + 0), sumi1); - sumi1 = dpct::dp4a(grid_h, *((const int *)q8 + 1), sumi1); - q8 += 8; - } - int sumi2 = 0; - for (int l = 2; l < 4; ++l) { - const uint32_t * grid = (const uint32_t *)(iq2s_grid + (bq2->qs[4*ib32+l] | ((bq2->qh[ib32] << (8-2*l)) & 0x300))); - const uint32_t signs0 = dpct::vectorized_binary( - ((signs[l] & 0xf) * 0x01010101) & 0x08040201, 0x08040201, - std::equal_to<>()); - const uint32_t signs1 = dpct::vectorized_binary( - ((signs[l] >> 4) * 0x01010101) & 0x08040201, 0x08040201, - std::equal_to<>()); - const int grid_l = dpct::vectorized_binary( - grid[0] ^ signs0, signs0, std::minus<>()); - const int grid_h = dpct::vectorized_binary( - grid[1] ^ signs1, signs1, std::minus<>()); - sumi2 = dpct::dp4a(grid_l, *((const int *)q8 + 0), sumi2); - sumi2 = dpct::dp4a(grid_h, *((const int *)q8 + 1), sumi2); - q8 += 8; - } - const float d = (float)bq2->d * bq8_1[ib32].ds[0] * 0.25f; - return d * ((0.5f + ls1) * sumi1 + (0.5f + ls2) * sumi2); -#else - assert(false); -#endif -} - -static __dpct_inline__ float -vec_dot_iq3_xxs_q8_1(const void *__restrict__ vbq, - const block_q8_1 *__restrict__ bq8_1, const int &iqs, - const uint32_t *iq3xxs_grid, const uint64_t *ksigns64) { -#if DPCT_COMPATIBILITY_TEMP >= \ - MIN_CC_DP4A // lowest compute capability for integer intrinsics -#if QK_K == 256 - const block_iq3_xxs * bq2 = (const block_iq3_xxs *) vbq; - - const int ib32 = iqs; - const uint8_t * q3 = bq2->qs + 8*ib32; - const uint16_t * gas = (const uint16_t *)(bq2->qs + QK_K/4) + 2*ib32; - const int8_t * q8 = bq8_1[ib32].qs; - uint32_t aux32 = gas[0] | (gas[1] << 16); - int sumi = 0; - for (int l = 0; l < 4; ++l) { - const uint32_t * grid1 = iq3xxs_grid + q3[2*l+0]; - const uint32_t * grid2 = iq3xxs_grid + q3[2*l+1]; - const uint32_t * signs = (const uint32_t *)(ksigns64 + (aux32 & 127)); - const int grid_l = dpct::vectorized_binary( - grid1[0] ^ signs[0], signs[0], std::minus<>()); - const int grid_h = dpct::vectorized_binary( - grid2[0] ^ signs[1], signs[1], std::minus<>()); - sumi = dpct::dp4a(grid_l, *((int *)q8 + 0), sumi); - sumi = dpct::dp4a(grid_h, *((int *)q8 + 1), sumi); - q8 += 8; - aux32 >>= 7; - } - const float d = (float)bq2->d * (0.5f + aux32) * bq8_1[ib32].ds[0] * 0.5f; - return d * sumi; -#else - assert(false); - return 0.f; -#endif -#else - assert(false); - return 0.f; -#endif -} - -static __dpct_inline__ float -vec_dot_iq3_s_q8_1(const void *__restrict__ vbq, - const block_q8_1 *__restrict__ bq8_1, const int &iqs, - const uint32_t *iq3s_grid) { -#if QK_K == 256 - const block_iq3_s * bq2 = (const block_iq3_s *) vbq; - - const int ib32 = iqs; - const uint8_t * qs = bq2->qs + 8*ib32; - const int8_t * q8 = bq8_1[ib32].qs; - int sumi = 0; - for (int l = 0; l < 4; ++l) { - const uint32_t * grid1 = iq3s_grid + (qs[2*l+0] | ((bq2->qh[ib32] << (8 - 2*l)) & 256)); - const uint32_t * grid2 = iq3s_grid + (qs[2*l+1] | ((bq2->qh[ib32] << (7 - 2*l)) & 256)); - uint32_t signs0 = dpct::vectorized_binary( - ((bq2->signs[4 * ib32 + l] & 0xf) * 0x01010101) & 0x08040201, - 0x08040201, std::equal_to<>()); - uint32_t signs1 = dpct::vectorized_binary( - ((bq2->signs[4 * ib32 + l] >> 4) * 0x01010101) & 0x08040201, - 0x08040201, std::equal_to<>()); - const int grid_l = dpct::vectorized_binary( - grid1[0] ^ signs0, signs0, std::minus<>()); - const int grid_h = dpct::vectorized_binary( - grid2[0] ^ signs1, signs1, std::minus<>()); - sumi = dpct::dp4a(grid_l, *((int *)q8 + 0), sumi); - sumi = dpct::dp4a(grid_h, *((int *)q8 + 1), sumi); - q8 += 8; - } - const float d = - (float)bq2->d * - (1 + 2 * ((bq2->scales[ib32 / 2] >> 4 * (ib32 % 2)) & 0xf)) * - bq8_1[ib32].ds[0]; - return d * sumi; -#else - assert(false); -#endif -} - -static __dpct_inline__ float -vec_dot_iq1_s_q8_1(const void *__restrict__ vbq, - const block_q8_1 *__restrict__ bq8_1, const int &iqs, - const uint32_t *iq1s_grid_gpu) { -#if QK_K == 256 - const block_iq1_s * bq1 = (const block_iq1_s *) vbq; - - const int ib32 = iqs; - int sumi = 0; - const int * q8 = (const int *)bq8_1[ib32].qs; - for (int l = 0; l < 4; ++l) { - const int * grid = (const int *)(iq1s_grid_gpu + (bq1->qs[4*ib32+l] | (((bq1->qh[ib32] >> 3*l) & 7) << 8))); - int grid0 = grid[0] & 0x0f0f0f0f; - int grid1 = (grid[0] >> 4) & 0x0f0f0f0f; - sumi = dpct::dp4a(q8[2 * l + 1], grid1, - dpct::dp4a(q8[2 * l + 0], grid0, sumi)); - } - - const float delta = bq1->qh[ib32] & 0x8000 ? -1-IQ1S_DELTA : -1+IQ1S_DELTA; - const float d1q = (float)bq1->d * (2*((bq1->qh[ib32] >> 12) & 7) + 1); - const float d = d1q * bq8_1[ib32].ds[0]; - const float m = d1q * bq8_1[ib32].ds[1]; - return d * sumi + m * delta; -#else - assert(false); -#endif -} - -static __dpct_inline__ float -vec_dot_iq1_m_q8_1(const void *__restrict__ vbq, - const block_q8_1 *__restrict__ bq8_1, const int &iqs) { -#if QK_K == 256 - const block_iq1_m * bq1 = (const block_iq1_m *) vbq; - - const int ib32 = iqs; - int sumi[2] = {0, 0}; - float sumf[2] = {0.f, 0.f}; - - const int * q8 = (const int *)bq8_1[ib32].qs; - for (int l = 0; l < 4; ++l) { - const int * grid = (const int *)(iq1s_grid_gpu + (bq1->qs[4*ib32+l] | (((bq1->qh[2*ib32+l/2] >> 4*(l%2)) & 7) << 8))); - int grid0 = grid[0] & 0x0f0f0f0f; - int grid1 = (grid[0] >> 4) & 0x0f0f0f0f; - sumi[l / 2] = dpct::dp4a(q8[2 * l + 1], grid1, - dpct::dp4a(q8[2 * l + 0], grid0, sumi[l / 2])); - const float delta = (bq1->qh[2*ib32+l/2] >> 4*(l%2)) & 0x08 ? -1-IQ1M_DELTA : -1+IQ1M_DELTA; - const int sumy = dpct::dp4a(q8[2 * l + 1], 0x01010101, - dpct::dp4a(q8[2 * l + 0], 0x01010101, 0)); - sumf[l/2] += delta*sumy; - } - - iq1m_scale_t scale; - const uint16_t * sc = (const uint16_t *)bq1->scales; - scale.u16 = (sc[0] >> 12) | ((sc[1] >> 8) & 0x00f0) | ((sc[2] >> 4) & 0x0f00) | (sc[3] & 0xf000); - const float d = (float)scale.f16 * bq8_1[ib32].ds[0]; - return d * ((sumi[0] + sumf[0]) * (2*((sc[ib32/2] >> 6*(ib32%2)) & 0x7) + 1) + (sumi[1] + sumf[1]) * (2*((sc[ib32/2] >> (6*(ib32%2)+3)) & 0x7) + 1)); -#else - assert(false); -#endif -} - -static __dpct_inline__ void get_int_from_table_16(const uint32_t &q4, - const uint8_t *values, - int &val1, int &val2) { - - uint32_t aux32; const uint8_t * q8 = (const uint8_t *)&aux32; - aux32 = q4 & 0x0f0f0f0f; - uint16_t v1 = values[q8[0]] | (values[q8[1]] << 8); - uint16_t v2 = values[q8[2]] | (values[q8[3]] << 8); - val1 = v1 | (v2 << 16); - aux32 = (q4 >> 4) & 0x0f0f0f0f; - v1 = values[q8[0]] | (values[q8[1]] << 8); - v2 = values[q8[2]] | (values[q8[3]] << 8); - val2 = v1 | (v2 << 16); -} - - -static __dpct_inline__ float -vec_dot_iq4_nl_q8_1(const void *__restrict__ vbq, - const block_q8_1 *__restrict__ bq8_1, const int &iqs) { - - const block_iq4_nl * bq = (const block_iq4_nl *) vbq; - - const uint16_t * q4 = (const uint16_t *)bq->qs + 2*iqs; - const int32_t * q8 = (const int32_t *)bq8_1->qs + iqs; - - const uint8_t * values = (const uint8_t *)kvalues_iq4nl; - - int v1, v2; - int sumi1 = 0, sumi2 = 0; - for (int l = 0; l < VDR_Q4_0_Q8_1_MMVQ; ++l) { - const uint32_t aux = q4[2*l] | (q4[2*l+1] << 16); - get_int_from_table_16(aux, values, v1, v2); - sumi1 = dpct::dp4a(v1, q8[l + 0], sumi1); - sumi2 = dpct::dp4a(v2, q8[l + 4], sumi2); - } - - const float d = (float)bq->d * bq8_1->ds[0]; - return d * (sumi1 + sumi2); -} - - -static __dpct_inline__ float -vec_dot_iq4_xs_q8_1(const void *__restrict__ vbq, - const block_q8_1 *__restrict__ bq8_1, const int &iqs) { - -#if QK_K == 256 - const block_iq4_xs * bq4 = (const block_iq4_xs *) vbq; - const uint8_t * values = (const uint8_t *)kvalues_iq4nl; - - // iqs is 0...7 - const int ib32 = iqs; - const int32_t * q8 = (const int *)bq8_1[ib32].qs; - const uint32_t * q4 = (const uint32_t *)bq4->qs + 4*ib32; - const int8_t ls = ((bq4->scales_l[ib32/2] >> 4*(ib32%2)) & 0xf) | (((bq4->scales_h >> 2*ib32) & 3) << 4); - const float d = (float)bq4->d * (ls - 32) * bq8_1[ib32].ds[0]; - int v1, v2; - int sumi1 = 0, sumi2 = 0; - for (int j = 0; j < 4; ++j) { - get_int_from_table_16(q4[j], values, v1, v2); - sumi1 = dpct::dp4a(v1, q8[j + 0], sumi1); - sumi2 = dpct::dp4a(v2, q8[j + 4], sumi2); - } - return d * (sumi1 + sumi2); -#else - assert(false); -#endif -} - -template -/* -DPCT1110:8: The total declared local variable size in device function mul_mat_q -exceeds 128 bytes and may cause high register pressure. Consult with your -hardware vendor to find the total register size available and adjust the code, -or use smaller sub-group size to avoid high register pressure. -*/ -static __dpct_inline__ void -mul_mat_q(const void *__restrict__ vx, const void *__restrict__ vy, - float *__restrict__ dst, const int ncols_x, const int nrows_x, - const int ncols_y, const int nrows_y, const int nrows_dst, - int *tile_x_ql, sycl::half2 *tile_x_dm, int *tile_x_qh, - int *tile_x_sc, const sycl::nd_item<3> &item_ct1, int *tile_y_qs, - sycl::half2 *tile_y_ds) { - - const block_q_t * x = (const block_q_t *) vx; - const block_q8_1 * y = (const block_q8_1 *) vy; - - const int blocks_per_row_x = ncols_x / qk; - const int blocks_per_col_y = nrows_y / QK8_1; - const int blocks_per_warp = WARP_SIZE / qi; - - const int & ncols_dst = ncols_y; - - const int row_dst_0 = item_ct1.get_group(2) * mmq_y; - const int & row_x_0 = row_dst_0; - - const int col_dst_0 = item_ct1.get_group(1) * mmq_x; - const int & col_y_0 = col_dst_0; - - float sum[mmq_y/WARP_SIZE][mmq_x/nwarps] = {{0.0f}}; - - for (int ib0 = 0; ib0 < blocks_per_row_x; ib0 += blocks_per_warp) { - - load_tiles(x + row_x_0 * blocks_per_row_x + ib0, tile_x_ql, tile_x_dm, - tile_x_qh, tile_x_sc, item_ct1.get_local_id(1), - nrows_x - row_x_0 - 1, item_ct1.get_local_id(2), - blocks_per_row_x); - -#pragma unroll - for (int ir = 0; ir < qr; ++ir) { - const int kqs = ir * WARP_SIZE + item_ct1.get_local_id(2); - const int kbxd = kqs / QI8_1; - -#pragma unroll - for (int i = 0; i < mmq_x; i += nwarps) { - const int col_y_eff = dpct::min( - (unsigned int)(col_y_0 + item_ct1.get_local_id(1) + i), - ncols_y - 1); // to prevent out-of-bounds memory accesses - - const block_q8_1 * by0 = &y[col_y_eff*blocks_per_col_y + ib0 * (qk/QK8_1) + kbxd]; - - const int index_y = (item_ct1.get_local_id(1) + i) * WARP_SIZE + - kqs % WARP_SIZE; - tile_y_qs[index_y] = get_int_from_int8_aligned( - by0->qs, item_ct1.get_local_id(2) % QI8_1); - } - -#pragma unroll - for (int ids0 = 0; ids0 < mmq_x; ids0 += nwarps * QI8_1) { - const int ids = - (ids0 + item_ct1.get_local_id(1) * QI8_1 + - item_ct1.get_local_id(2) / (WARP_SIZE / QI8_1)) % - mmq_x; - const int kby = item_ct1.get_local_id(2) % (WARP_SIZE / QI8_1); - const int col_y_eff = sycl::min(col_y_0 + ids, ncols_y - 1); - - // if the sum is not needed it's faster to transform the scale to f32 ahead of time - const sycl::half2 *dsi_src = - &y[col_y_eff * blocks_per_col_y + ib0 * (qk / QK8_1) + - ir * (WARP_SIZE / QI8_1) + kby] - .ds; - sycl::half2 *dsi_dst = - &tile_y_ds[ids * (WARP_SIZE / QI8_1) + kby]; - if (need_sum) { - *dsi_dst = *dsi_src; - } else { - float * dfi_dst = (float *) dsi_dst; - *dfi_dst = (*dsi_src)[0]; - } - } - - /* - DPCT1118:9: SYCL group functions and algorithms must be encountered - in converged control flow. You may need to adjust the code. - */ - /* - DPCT1065:56: Consider replacing sycl::nd_item::barrier() with - sycl::nd_item::barrier(sycl::access::fence_space::local_space) for - better performance if there is no access to global memory. - */ - item_ct1.barrier(); - -// #pragma unroll // unrolling this loop causes too much register pressure - for (int k = ir*WARP_SIZE/qr; k < (ir+1)*WARP_SIZE/qr; k += vdr) { -#pragma unroll - for (int j = 0; j < mmq_x; j += nwarps) { -#pragma unroll - for (int i = 0; i < mmq_y; i += WARP_SIZE) { - sum[i / WARP_SIZE][j / nwarps] += vec_dot( - tile_x_ql, tile_x_dm, tile_x_qh, tile_x_sc, - tile_y_qs, tile_y_ds, item_ct1.get_local_id(2) + i, - item_ct1.get_local_id(1) + j, k); - } - } - } - - /* - DPCT1118:10: SYCL group functions and algorithms must be encountered - in converged control flow. You may need to adjust the code. - */ - /* - DPCT1065:57: Consider replacing sycl::nd_item::barrier() with - sycl::nd_item::barrier(sycl::access::fence_space::local_space) for - better performance if there is no access to global memory. - */ - item_ct1.barrier(); - } - } - -#pragma unroll - for (int j = 0; j < mmq_x; j += nwarps) { - const int col_dst = col_dst_0 + j + item_ct1.get_local_id(1); - - if (col_dst >= ncols_dst) { - return; - } - -#pragma unroll - for (int i = 0; i < mmq_y; i += WARP_SIZE) { - const int row_dst = row_dst_0 + item_ct1.get_local_id(2) + i; - - if (row_dst >= nrows_dst) { - continue; - } - - dst[col_dst*nrows_dst + row_dst] = sum[i/WARP_SIZE][j/nwarps]; - } - } -} - -#define MMQ_X_Q4_0_RDNA2 64 -#define MMQ_Y_Q4_0_RDNA2 128 -#define NWARPS_Q4_0_RDNA2 8 -#define MMQ_X_Q4_0_RDNA1 64 -#define MMQ_Y_Q4_0_RDNA1 64 -#define NWARPS_Q4_0_RDNA1 8 -#if defined(SYCL_USE_XMX) -#define MMQ_X_Q4_0_AMPERE 4 -#define MMQ_Y_Q4_0_AMPERE 32 -#define NWARPS_Q4_0_AMPERE 4 -#else -#define MMQ_X_Q4_0_AMPERE 64 -#define MMQ_Y_Q4_0_AMPERE 128 -#define NWARPS_Q4_0_AMPERE 4 -#endif -#define MMQ_X_Q4_0_PASCAL 64 -#define MMQ_Y_Q4_0_PASCAL 64 -#define NWARPS_Q4_0_PASCAL 8 - -template static void - mul_mat_q4_0( - const void * __restrict__ vx, const void * __restrict__ vy, float * __restrict__ dst, - const int ncols_x, const int nrows_x, const int ncols_y, const int nrows_y, const int nrows_dst, - const sycl::nd_item<3> &item_ct1, int *tile_x_qs_q4_0, float *tile_x_d_q4_0, - int *tile_y_qs, sycl::half2 *tile_y_ds) { - int * tile_x_ql = nullptr; - sycl::half2 *tile_x_dm = nullptr; - int * tile_x_qh = nullptr; - int * tile_x_sc = nullptr; - -//sycl_todo: change according to hardware - - const int mmq_x = MMQ_X_Q4_0_AMPERE; - const int mmq_y = MMQ_Y_Q4_0_AMPERE; - const int nwarps = NWARPS_Q4_0_AMPERE; - allocate_tiles_q4_0(&tile_x_ql, &tile_x_dm, &tile_x_qh, &tile_x_sc, - tile_x_qs_q4_0, tile_x_d_q4_0); - mul_mat_q, VDR_Q4_0_Q8_1_MMQ, - vec_dot_q4_0_q8_1_mul_mat>( - vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst, tile_x_ql, - tile_x_dm, tile_x_qh, tile_x_sc, item_ct1, tile_y_qs, tile_y_ds); -} - -#define MMQ_X_Q4_1_RDNA2 64 -#define MMQ_Y_Q4_1_RDNA2 128 -#define NWARPS_Q4_1_RDNA2 8 -#define MMQ_X_Q4_1_RDNA1 64 -#define MMQ_Y_Q4_1_RDNA1 64 -#define NWARPS_Q4_1_RDNA1 8 -#if defined(SYCL_USE_XMX) -#define MMQ_X_Q4_1_AMPERE 4 -#define MMQ_Y_Q4_1_AMPERE 32 -#define NWARPS_Q4_1_AMPERE 4 -#else -#define MMQ_X_Q4_1_AMPERE 64 -#define MMQ_Y_Q4_1_AMPERE 128 -#define NWARPS_Q4_1_AMPERE 4 -#endif -#define MMQ_X_Q4_1_PASCAL 64 -#define MMQ_Y_Q4_1_PASCAL 64 -#define NWARPS_Q4_1_PASCAL 8 - -template static void - mul_mat_q4_1( - const void * __restrict__ vx, const void * __restrict__ vy, float * __restrict__ dst, - const int ncols_x, const int nrows_x, const int ncols_y, const int nrows_y, const int nrows_dst, - const sycl::nd_item<3> &item_ct1, int *tile_x_qs_q4_1, - sycl::half2 *tile_x_dm_q4_1, int *tile_y_qs, sycl::half2 *tile_y_ds) { - int * tile_x_ql = nullptr; - sycl::half2 *tile_x_dm = nullptr; - int * tile_x_qh = nullptr; - int * tile_x_sc = nullptr; - -//sycl_todo: change according to hardware - const int mmq_x = MMQ_X_Q4_1_AMPERE; - const int mmq_y = MMQ_Y_Q4_1_AMPERE; - const int nwarps = NWARPS_Q4_1_AMPERE; - allocate_tiles_q4_1(&tile_x_ql, &tile_x_dm, &tile_x_qh, &tile_x_sc, - tile_x_qs_q4_1, tile_x_dm_q4_1); - mul_mat_q, VDR_Q4_1_Q8_1_MMQ, - vec_dot_q4_1_q8_1_mul_mat>( - vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst, tile_x_ql, - tile_x_dm, tile_x_qh, tile_x_sc, item_ct1, tile_y_qs, tile_y_ds); -} - -#define MMQ_X_Q5_0_RDNA2 64 -#define MMQ_Y_Q5_0_RDNA2 128 -#define NWARPS_Q5_0_RDNA2 8 -#define MMQ_X_Q5_0_RDNA1 64 -#define MMQ_Y_Q5_0_RDNA1 64 -#define NWARPS_Q5_0_RDNA1 8 -#if defined(SYCL_USE_XMX) -#define MMQ_X_Q5_0_AMPERE 4 -#define MMQ_Y_Q5_0_AMPERE 32 -#define NWARPS_Q5_0_AMPERE 4 -#else -#define MMQ_X_Q5_0_AMPERE 128 -#define MMQ_Y_Q5_0_AMPERE 64 -#define NWARPS_Q5_0_AMPERE 4 -#endif -#define MMQ_X_Q5_0_PASCAL 64 -#define MMQ_Y_Q5_0_PASCAL 64 -#define NWARPS_Q5_0_PASCAL 8 - -template static void - mul_mat_q5_0( - const void * __restrict__ vx, const void * __restrict__ vy, float * __restrict__ dst, - const int ncols_x, const int nrows_x, const int ncols_y, const int nrows_y, const int nrows_dst, - const sycl::nd_item<3> &item_ct1, int *tile_x_ql_q5_0, float *tile_x_d_q5_0, - int *tile_y_qs, sycl::half2 *tile_y_ds) { - int * tile_x_ql = nullptr; - sycl::half2 *tile_x_dm = nullptr; - int * tile_x_qh = nullptr; - int * tile_x_sc = nullptr; - -//sycl_todo: change according to hardware - const int mmq_x = MMQ_X_Q5_0_AMPERE; - const int mmq_y = MMQ_Y_Q5_0_AMPERE; - const int nwarps = NWARPS_Q5_0_AMPERE; - allocate_tiles_q5_0(&tile_x_ql, &tile_x_dm, &tile_x_qh, &tile_x_sc, - tile_x_ql_q5_0, tile_x_d_q5_0); - mul_mat_q, VDR_Q5_0_Q8_1_MMQ, - vec_dot_q5_0_q8_1_mul_mat>( - vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst, tile_x_ql, - tile_x_dm, tile_x_qh, tile_x_sc, item_ct1, tile_y_qs, tile_y_ds); -} - -#define MMQ_X_Q5_1_RDNA2 64 -#define MMQ_Y_Q5_1_RDNA2 128 -#define NWARPS_Q5_1_RDNA2 8 -#define MMQ_X_Q5_1_RDNA1 64 -#define MMQ_Y_Q5_1_RDNA1 64 -#define NWARPS_Q5_1_RDNA1 8 -#if defined(SYCL_USE_XMX) -#define MMQ_X_Q5_1_AMPERE 4 -#define MMQ_Y_Q5_1_AMPERE 32 -#define NWARPS_Q5_1_AMPERE 4 -#else -#define MMQ_X_Q5_1_AMPERE 128 -#define MMQ_Y_Q5_1_AMPERE 64 -#define NWARPS_Q5_1_AMPERE 4 -#endif -#define MMQ_X_Q5_1_PASCAL 64 -#define MMQ_Y_Q5_1_PASCAL 64 -#define NWARPS_Q5_1_PASCAL 8 - -template static void -mul_mat_q5_1( - const void * __restrict__ vx, const void * __restrict__ vy, float * __restrict__ dst, - const int ncols_x, const int nrows_x, const int ncols_y, const int nrows_y, const int nrows_dst, - const sycl::nd_item<3> &item_ct1, int *tile_x_ql_q5_1, - sycl::half2 *tile_x_dm_q5_1, int *tile_y_qs, sycl::half2 *tile_y_ds) { - int * tile_x_ql = nullptr; - sycl::half2 *tile_x_dm = nullptr; - int * tile_x_qh = nullptr; - int * tile_x_sc = nullptr; - -//sycl_todo: change according to hardware - const int mmq_x = MMQ_X_Q5_1_AMPERE; - const int mmq_y = MMQ_Y_Q5_1_AMPERE; - const int nwarps = NWARPS_Q5_1_AMPERE; - allocate_tiles_q5_1(&tile_x_ql, &tile_x_dm, &tile_x_qh, &tile_x_sc, - tile_x_ql_q5_1, tile_x_dm_q5_1); - mul_mat_q, VDR_Q5_1_Q8_1_MMQ, - vec_dot_q5_1_q8_1_mul_mat>( - vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst, tile_x_ql, - tile_x_dm, tile_x_qh, tile_x_sc, item_ct1, tile_y_qs, tile_y_ds); -} - -#define MMQ_X_Q8_0_RDNA2 64 -#define MMQ_Y_Q8_0_RDNA2 128 -#define NWARPS_Q8_0_RDNA2 8 -#define MMQ_X_Q8_0_RDNA1 64 -#define MMQ_Y_Q8_0_RDNA1 64 -#define NWARPS_Q8_0_RDNA1 8 -#if defined(SYCL_USE_XMX) -#define MMQ_X_Q8_0_AMPERE 4 -#define MMQ_Y_Q8_0_AMPERE 32 -#define NWARPS_Q8_0_AMPERE 4 -#else -#define MMQ_X_Q8_0_AMPERE 128 -#define MMQ_Y_Q8_0_AMPERE 64 -#define NWARPS_Q8_0_AMPERE 4 -#endif -#define MMQ_X_Q8_0_PASCAL 64 -#define MMQ_Y_Q8_0_PASCAL 64 -#define NWARPS_Q8_0_PASCAL 8 - -template static void - mul_mat_q8_0( - const void * __restrict__ vx, const void * __restrict__ vy, float * __restrict__ dst, - const int ncols_x, const int nrows_x, const int ncols_y, const int nrows_y, const int nrows_dst, - const sycl::nd_item<3> &item_ct1, int *tile_x_qs_q8_0, float *tile_x_d_q8_0, - int *tile_y_qs, sycl::half2 *tile_y_ds) { - int * tile_x_ql = nullptr; - sycl::half2 *tile_x_dm = nullptr; - int * tile_x_qh = nullptr; - int * tile_x_sc = nullptr; - -//sycl_todo: change according to hardware - const int mmq_x = MMQ_X_Q8_0_AMPERE; - const int mmq_y = MMQ_Y_Q8_0_AMPERE; - const int nwarps = NWARPS_Q8_0_AMPERE; - allocate_tiles_q8_0(&tile_x_ql, &tile_x_dm, &tile_x_qh, &tile_x_sc, - tile_x_qs_q8_0, tile_x_d_q8_0); - mul_mat_q, VDR_Q8_0_Q8_1_MMQ, - vec_dot_q8_0_q8_1_mul_mat>( - vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst, tile_x_ql, - tile_x_dm, tile_x_qh, tile_x_sc, item_ct1, tile_y_qs, tile_y_ds); -} - -#define MMQ_X_Q2_K_RDNA2 64 -#define MMQ_Y_Q2_K_RDNA2 128 -#define NWARPS_Q2_K_RDNA2 8 -#define MMQ_X_Q2_K_RDNA1 128 -#define MMQ_Y_Q2_K_RDNA1 32 -#define NWARPS_Q2_K_RDNA1 8 -#if defined(SYCL_USE_XMX) -#define MMQ_X_Q2_K_AMPERE 4 -#define MMQ_Y_Q2_K_AMPERE 32 -#define NWARPS_Q2_K_AMPERE 4 -#else -#define MMQ_X_Q2_K_AMPERE 64 -#define MMQ_Y_Q2_K_AMPERE 128 -#define NWARPS_Q2_K_AMPERE 4 -#endif -#define MMQ_X_Q2_K_PASCAL 64 -#define MMQ_Y_Q2_K_PASCAL 64 -#define NWARPS_Q2_K_PASCAL 8 - -template static void -mul_mat_q2_K( - const void * __restrict__ vx, const void * __restrict__ vy, float * __restrict__ dst, - const int ncols_x, const int nrows_x, const int ncols_y, const int nrows_y, const int nrows_dst, - const sycl::nd_item<3> &item_ct1, int *tile_x_ql_q2_K, - sycl::half2 *tile_x_dm_q2_K, int *tile_x_sc_q2_K, int *tile_y_qs, - sycl::half2 *tile_y_ds) { - int * tile_x_ql = nullptr; - sycl::half2 *tile_x_dm = nullptr; - int * tile_x_qh = nullptr; - int * tile_x_sc = nullptr; - -//sycl_todo: change according to hardware - const int mmq_x = MMQ_X_Q2_K_AMPERE; - const int mmq_y = MMQ_Y_Q2_K_AMPERE; - const int nwarps = NWARPS_Q2_K_AMPERE; - allocate_tiles_q2_K(&tile_x_ql, &tile_x_dm, &tile_x_qh, &tile_x_sc, - tile_x_ql_q2_K, tile_x_dm_q2_K, tile_x_sc_q2_K); - mul_mat_q, VDR_Q2_K_Q8_1_MMQ, - vec_dot_q2_K_q8_1_mul_mat>( - vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst, tile_x_ql, - tile_x_dm, tile_x_qh, tile_x_sc, item_ct1, tile_y_qs, tile_y_ds); -} - -#define MMQ_X_Q3_K_RDNA2 128 -#define MMQ_Y_Q3_K_RDNA2 64 -#define NWARPS_Q3_K_RDNA2 8 -#define MMQ_X_Q3_K_RDNA1 32 -#define MMQ_Y_Q3_K_RDNA1 128 -#define NWARPS_Q3_K_RDNA1 8 -#if defined(SYCL_USE_XMX) -#define MMQ_X_Q3_K_AMPERE 4 -#define MMQ_Y_Q3_K_AMPERE 32 -#define NWARPS_Q3_K_AMPERE 4 -#else -#define MMQ_X_Q3_K_AMPERE 128 -#define MMQ_Y_Q3_K_AMPERE 128 -#define NWARPS_Q3_K_AMPERE 4 -#endif -#define MMQ_X_Q3_K_PASCAL 64 -#define MMQ_Y_Q3_K_PASCAL 64 -#define NWARPS_Q3_K_PASCAL 8 - -template static void -mul_mat_q3_K( - const void * __restrict__ vx, const void * __restrict__ vy, float * __restrict__ dst, - const int ncols_x, const int nrows_x, const int ncols_y, const int nrows_y, const int nrows_dst, - const sycl::nd_item<3> &item_ct1, int *tile_x_ql_q3_K, - sycl::half2 *tile_x_dm_q3_K, int *tile_x_qh_q3_K, int *tile_x_sc_q3_K, - int *tile_y_qs, sycl::half2 *tile_y_ds) { - int * tile_x_ql = nullptr; - sycl::half2 *tile_x_dm = nullptr; - int * tile_x_qh = nullptr; - int * tile_x_sc = nullptr; - -//sycl_todo: change according to hardware - const int mmq_x = MMQ_X_Q3_K_AMPERE; - const int mmq_y = MMQ_Y_Q3_K_AMPERE; - const int nwarps = NWARPS_Q3_K_AMPERE; - allocate_tiles_q3_K(&tile_x_ql, &tile_x_dm, &tile_x_qh, &tile_x_sc, - tile_x_ql_q3_K, tile_x_dm_q3_K, tile_x_qh_q3_K, - tile_x_sc_q3_K); - mul_mat_q, VDR_Q3_K_Q8_1_MMQ, - vec_dot_q3_K_q8_1_mul_mat>( - vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst, tile_x_ql, - tile_x_dm, tile_x_qh, tile_x_sc, item_ct1, tile_y_qs, tile_y_ds); -} - -#define MMQ_X_Q4_K_RDNA2 64 -#define MMQ_Y_Q4_K_RDNA2 128 -#define NWARPS_Q4_K_RDNA2 8 -#define MMQ_X_Q4_K_RDNA1 32 -#define MMQ_Y_Q4_K_RDNA1 64 -#define NWARPS_Q4_K_RDNA1 8 -#if defined(SYCL_USE_XMX) -#define MMQ_X_Q4_K_AMPERE 4 -#define MMQ_Y_Q4_K_AMPERE 32 -#define NWARPS_Q4_K_AMPERE 4 -#else -#define MMQ_X_Q4_K_AMPERE 64 -#define MMQ_Y_Q4_K_AMPERE 128 -#define NWARPS_Q4_K_AMPERE 4 -#endif -#define MMQ_X_Q4_K_PASCAL 64 -#define MMQ_Y_Q4_K_PASCAL 64 -#define NWARPS_Q4_K_PASCAL 8 - -template static void - mul_mat_q4_K( - const void * __restrict__ vx, const void * __restrict__ vy, float * __restrict__ dst, - const int ncols_x, const int nrows_x, const int ncols_y, const int nrows_y, const int nrows_dst, - const sycl::nd_item<3> &item_ct1, int *tile_x_ql_q4_K, - sycl::half2 *tile_x_dm_q4_K, int *tile_x_sc_q4_K, int *tile_y_qs, - sycl::half2 *tile_y_ds) { - int * tile_x_ql = nullptr; - sycl::half2 *tile_x_dm = nullptr; - int * tile_x_qh = nullptr; - int * tile_x_sc = nullptr; - -//sycl_todo: change according to hardware - const int mmq_x = MMQ_X_Q4_K_AMPERE; - const int mmq_y = MMQ_Y_Q4_K_AMPERE; - const int nwarps = NWARPS_Q4_K_AMPERE; - allocate_tiles_q4_K(&tile_x_ql, &tile_x_dm, &tile_x_qh, &tile_x_sc, - tile_x_ql_q4_K, tile_x_dm_q4_K, tile_x_sc_q4_K); - mul_mat_q, VDR_Q4_K_Q8_1_MMQ, - vec_dot_q4_K_q8_1_mul_mat>( - vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst, tile_x_ql, - tile_x_dm, tile_x_qh, tile_x_sc, item_ct1, tile_y_qs, tile_y_ds); -} - -#define MMQ_X_Q5_K_RDNA2 64 -#define MMQ_Y_Q5_K_RDNA2 128 -#define NWARPS_Q5_K_RDNA2 8 -#define MMQ_X_Q5_K_RDNA1 32 -#define MMQ_Y_Q5_K_RDNA1 64 -#define NWARPS_Q5_K_RDNA1 8 -#if defined(SYCL_USE_XMX) -#define MMQ_X_Q5_K_AMPERE 4 -#define MMQ_Y_Q5_K_AMPERE 32 -#define NWARPS_Q5_K_AMPERE 4 -#else -#define MMQ_X_Q5_K_AMPERE 64 -#define MMQ_Y_Q5_K_AMPERE 128 -#define NWARPS_Q5_K_AMPERE 4 -#endif -#define MMQ_X_Q5_K_PASCAL 64 -#define MMQ_Y_Q5_K_PASCAL 64 -#define NWARPS_Q5_K_PASCAL 8 - -template static void -mul_mat_q5_K( - const void * __restrict__ vx, const void * __restrict__ vy, float * __restrict__ dst, - const int ncols_x, const int nrows_x, const int ncols_y, const int nrows_y, const int nrows_dst, - const sycl::nd_item<3> &item_ct1, int *tile_x_ql_q5_K, - sycl::half2 *tile_x_dm_q5_K, int *tile_x_sc_q5_K, int *tile_y_qs, - sycl::half2 *tile_y_ds) { - int * tile_x_ql = nullptr; - sycl::half2 *tile_x_dm = nullptr; - int * tile_x_qh = nullptr; - int * tile_x_sc = nullptr; - -//sycl_todo: change according to hardware - const int mmq_x = MMQ_X_Q5_K_AMPERE; - const int mmq_y = MMQ_Y_Q5_K_AMPERE; - const int nwarps = NWARPS_Q5_K_AMPERE; - allocate_tiles_q5_K(&tile_x_ql, &tile_x_dm, &tile_x_qh, &tile_x_sc, - tile_x_ql_q5_K, tile_x_dm_q5_K, tile_x_sc_q5_K); - mul_mat_q, VDR_Q5_K_Q8_1_MMQ, - vec_dot_q5_K_q8_1_mul_mat>( - vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst, tile_x_ql, - tile_x_dm, tile_x_qh, tile_x_sc, item_ct1, tile_y_qs, tile_y_ds); -} - -#define MMQ_X_Q6_K_RDNA2 64 -#define MMQ_Y_Q6_K_RDNA2 128 -#define NWARPS_Q6_K_RDNA2 8 -#define MMQ_X_Q6_K_RDNA1 32 -#define MMQ_Y_Q6_K_RDNA1 64 -#define NWARPS_Q6_K_RDNA1 8 -#if defined(SYCL_USE_XMX) -#define MMQ_X_Q6_K_AMPERE 4 -#define MMQ_Y_Q6_K_AMPERE 32 -#define NWARPS_Q6_K_AMPERE 4 -#else -#define MMQ_X_Q6_K_AMPERE 64 -#define MMQ_Y_Q6_K_AMPERE 64 -#define NWARPS_Q6_K_AMPERE 4 -#endif -#define MMQ_X_Q6_K_PASCAL 64 -#define MMQ_Y_Q6_K_PASCAL 64 -#define NWARPS_Q6_K_PASCAL 8 - -template static void - mul_mat_q6_K( - const void * __restrict__ vx, const void * __restrict__ vy, float * __restrict__ dst, - const int ncols_x, const int nrows_x, const int ncols_y, const int nrows_y, const int nrows_dst, - const sycl::nd_item<3> &item_ct1, int *tile_x_ql, sycl::half2 *tile_x_dm, - int *tile_x_sc, int *tile_y_qs, sycl::half2 *tile_y_ds) { - // int * tile_x_ql = nullptr; - // sycl::half2 *tile_x_dm = nullptr; - int * tile_x_qh = nullptr; - // int * tile_x_sc = nullptr; - -//sycl_todo: change according to hardware - const int mmq_x = MMQ_X_Q6_K_AMPERE; - const int mmq_y = MMQ_Y_Q6_K_AMPERE; - const int nwarps = NWARPS_Q6_K_AMPERE; - allocate_tiles_q6_K(&tile_x_ql, &tile_x_dm, &tile_x_qh, &tile_x_sc, - tile_x_ql, tile_x_dm, tile_x_sc); - mul_mat_q, VDR_Q6_K_Q8_1_MMQ, - vec_dot_q6_K_q8_1_mul_mat>( - vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst, tile_x_ql, - tile_x_dm, tile_x_qh, tile_x_sc, item_ct1, tile_y_qs, tile_y_ds); -} - -template -static void mul_mat_vec_q(const void * __restrict__ vx, const void * __restrict__ vy, float * __restrict__ dst, const int ncols, const int nrows, - const sycl::nd_item<3> &item_ct1) { - const int row = item_ct1.get_group(2) * item_ct1.get_local_range(1) + - item_ct1.get_local_id(1); - - if (row >= nrows) { - return; - } - - const int blocks_per_row = ncols / qk; - const int blocks_per_warp = vdr * WARP_SIZE / qi; - -// partial sum for each thread - float tmp = 0.0f; - - const block_q_t * x = (const block_q_t *) vx; - const block_q8_1 * y = (const block_q8_1 *) vy; - - for (int i = item_ct1.get_local_id(2) / (qi / vdr); i < blocks_per_row; - i += blocks_per_warp) { - const int ibx = row*blocks_per_row + i; // x block index - - const int iby = i * (qk/QK8_1); // y block index that aligns with ibx - - const int iqs = - vdr * - (item_ct1.get_local_id(2) % - (qi / vdr)); // x block quant index when casting the quants to int - - tmp += vec_dot_q_sycl(&x[ibx], &y[iby], iqs); - } - - // sum up partial sums and write back result -#pragma unroll - for (int mask = 16; mask > 0; mask >>= 1) { - tmp += - dpct::permute_sub_group_by_xor(item_ct1.get_sub_group(), tmp, mask); - } - - if (item_ct1.get_local_id(2) == 0) { - dst[row] = tmp; - } -} - -template -static void mul_mat_vec_q_iq2_xxs_q8_1(const void *__restrict__ vx, - const void *__restrict__ vy, - float *__restrict__ dst, const int ncols, - const int nrows, - const sycl::nd_item<3> &item_ct1) { - const int row = item_ct1.get_group(2) * item_ct1.get_local_range(1) + - item_ct1.get_local_id(1); - - if (row >= nrows) { - return; - } - - const int blocks_per_row = ncols / qk; - const int blocks_per_warp = vdr * WARP_SIZE / qi; - -// partial sum for each thread - float tmp = 0.0f; - - const block_q_t * x = (const block_q_t *) vx; - const block_q8_1 * y = (const block_q8_1 *) vy; - - for (int i = item_ct1.get_local_id(2) / (qi / vdr); i < blocks_per_row; - i += blocks_per_warp) { - const int ibx = row*blocks_per_row + i; // x block index - - const int iby = i * (qk/QK8_1); // y block index that aligns with ibx - - const int iqs = - vdr * - (item_ct1.get_local_id(2) % - (qi / vdr)); // x block quant index when casting the quants to int - - tmp += vec_dot_iq2_xxs_q8_1(&x[ibx], &y[iby], iqs, iq2xxs_grid, ksigns_iq2xs, kmask_iq2xs); - } - - // sum up partial sums and write back result -#pragma unroll - for (int mask = 16; mask > 0; mask >>= 1) { - tmp += - dpct::permute_sub_group_by_xor(item_ct1.get_sub_group(), tmp, mask); - } - - if (item_ct1.get_local_id(2) == 0) { - dst[row] = tmp; - } -} - -template -static void mul_mat_vec_q_iq2_xs_q8_1(const void *__restrict__ vx, - const void *__restrict__ vy, - float *__restrict__ dst, const int ncols, - const int nrows, - const sycl::nd_item<3> &item_ct1) { - const int row = item_ct1.get_group(2) * item_ct1.get_local_range(1) + - item_ct1.get_local_id(1); - - if (row >= nrows) { - return; - } - - const int blocks_per_row = ncols / qk; - const int blocks_per_warp = vdr * WARP_SIZE / qi; - -// partial sum for each thread - float tmp = 0.0f; - - const block_q_t * x = (const block_q_t *) vx; - const block_q8_1 * y = (const block_q8_1 *) vy; - - for (int i = item_ct1.get_local_id(2) / (qi / vdr); i < blocks_per_row; - i += blocks_per_warp) { - const int ibx = row*blocks_per_row + i; // x block index - - const int iby = i * (qk/QK8_1); // y block index that aligns with ibx - - const int iqs = - vdr * - (item_ct1.get_local_id(2) % - (qi / vdr)); // x block quant index when casting the quants to int - - tmp += vec_dot_iq2_xs_q8_1(&x[ibx], &y[iby], iqs, iq2xs_grid, ksigns64); - } - - // sum up partial sums and write back result -#pragma unroll - for (int mask = 16; mask > 0; mask >>= 1) { - tmp += - dpct::permute_sub_group_by_xor(item_ct1.get_sub_group(), tmp, mask); - } - - if (item_ct1.get_local_id(2) == 0) { - dst[row] = tmp; - } -} - -template -static void mul_mat_vec_q_iq2_s_q8_1(const void *__restrict__ vx, - const void *__restrict__ vy, - float *__restrict__ dst, const int ncols, - const int nrows, - const sycl::nd_item<3> &item_ct1) { - const int row = item_ct1.get_group(2) * item_ct1.get_local_range(1) + - item_ct1.get_local_id(1); - - if (row >= nrows) { - return; - } - - const int blocks_per_row = ncols / qk; - const int blocks_per_warp = vdr * WARP_SIZE / qi; - -// partial sum for each thread - float tmp = 0.0f; - - const block_q_t * x = (const block_q_t *) vx; - const block_q8_1 * y = (const block_q8_1 *) vy; - - for (int i = item_ct1.get_local_id(2) / (qi / vdr); i < blocks_per_row; - i += blocks_per_warp) { - const int ibx = row*blocks_per_row + i; // x block index - - const int iby = i * (qk/QK8_1); // y block index that aligns with ibx - - const int iqs = - vdr * - (item_ct1.get_local_id(2) % - (qi / vdr)); // x block quant index when casting the quants to int - - tmp += vec_dot_iq2_s_q8_1(&x[ibx], &y[iby], iqs); - } - - // sum up partial sums and write back result -#pragma unroll - for (int mask = 16; mask > 0; mask >>= 1) { - tmp += - dpct::permute_sub_group_by_xor(item_ct1.get_sub_group(), tmp, mask); - } - - if (item_ct1.get_local_id(2) == 0) { - dst[row] = tmp; - } -} - -template -static void mul_mat_vec_q_iq3_xxs_q8_1(const void *__restrict__ vx, - const void *__restrict__ vy, - float *__restrict__ dst, const int ncols, - const int nrows, - const sycl::nd_item<3> &item_ct1) { - const int row = item_ct1.get_group(2) * item_ct1.get_local_range(1) + - item_ct1.get_local_id(1); - - if (row >= nrows) { - return; - } - - const int blocks_per_row = ncols / qk; - const int blocks_per_warp = vdr * WARP_SIZE / qi; - -// partial sum for each thread - float tmp = 0.0f; - - const block_q_t * x = (const block_q_t *) vx; - const block_q8_1 * y = (const block_q8_1 *) vy; - - for (int i = item_ct1.get_local_id(2) / (qi / vdr); i < blocks_per_row; - i += blocks_per_warp) { - const int ibx = row*blocks_per_row + i; // x block index - - const int iby = i * (qk/QK8_1); // y block index that aligns with ibx - - const int iqs = - vdr * - (item_ct1.get_local_id(2) % - (qi / vdr)); // x block quant index when casting the quants to int - - tmp += vec_dot_iq3_xxs_q8_1(&x[ibx], &y[iby], iqs, iq3xxs_grid, ksigns64); - } - - // sum up partial sums and write back result -#pragma unroll - for (int mask = 16; mask > 0; mask >>= 1) { - tmp += - dpct::permute_sub_group_by_xor(item_ct1.get_sub_group(), tmp, mask); - } - - if (item_ct1.get_local_id(2) == 0) { - dst[row] = tmp; - } -} - -template -static void mul_mat_vec_q_iq3_s_q8_1(const void *__restrict__ vx, - const void *__restrict__ vy, - float *__restrict__ dst, const int ncols, - const int nrows, - const sycl::nd_item<3> &item_ct1) { - const int row = item_ct1.get_group(2) * item_ct1.get_local_range(1) + - item_ct1.get_local_id(1); - - if (row >= nrows) { - return; - } - - const int blocks_per_row = ncols / qk; - const int blocks_per_warp = vdr * WARP_SIZE / qi; - -// partial sum for each thread - float tmp = 0.0f; - - const block_q_t * x = (const block_q_t *) vx; - const block_q8_1 * y = (const block_q8_1 *) vy; - - for (int i = item_ct1.get_local_id(2) / (qi / vdr); i < blocks_per_row; - i += blocks_per_warp) { - const int ibx = row*blocks_per_row + i; // x block index - - const int iby = i * (qk/QK8_1); // y block index that aligns with ibx - - const int iqs = - vdr * - (item_ct1.get_local_id(2) % - (qi / vdr)); // x block quant index when casting the quants to int - - tmp += vec_dot_iq3_s_q8_1(&x[ibx], &y[iby], iqs, iq3s_grid); - } - - // sum up partial sums and write back result -#pragma unroll - for (int mask = 16; mask > 0; mask >>= 1) { - tmp += - dpct::permute_sub_group_by_xor(item_ct1.get_sub_group(), tmp, mask); - } - - if (item_ct1.get_local_id(2) == 0) { - dst[row] = tmp; - } -} - -template -static void mul_mat_vec_q_iq1_s_q8_1(const void *__restrict__ vx, - const void *__restrict__ vy, - float *__restrict__ dst, const int ncols, - const int nrows, - const sycl::nd_item<3> &item_ct1) { - const int row = item_ct1.get_group(2) * item_ct1.get_local_range(1) + - item_ct1.get_local_id(1); - - if (row >= nrows) { - return; - } - - const int blocks_per_row = ncols / qk; - const int blocks_per_warp = vdr * WARP_SIZE / qi; - -// partial sum for each thread - float tmp = 0.0f; - - const block_q_t * x = (const block_q_t *) vx; - const block_q8_1 * y = (const block_q8_1 *) vy; - - for (int i = item_ct1.get_local_id(2) / (qi / vdr); i < blocks_per_row; - i += blocks_per_warp) { - const int ibx = row*blocks_per_row + i; // x block index - - const int iby = i * (qk/QK8_1); // y block index that aligns with ibx - - const int iqs = - vdr * - (item_ct1.get_local_id(2) % - (qi / vdr)); // x block quant index when casting the quants to int - - tmp += vec_dot_iq1_s_q8_1(&x[ibx], &y[iby], iqs, iq1s_grid_gpu); - } - - // sum up partial sums and write back result -#pragma unroll - for (int mask = 16; mask > 0; mask >>= 1) { - tmp += - dpct::permute_sub_group_by_xor(item_ct1.get_sub_group(), tmp, mask); - } - - if (item_ct1.get_local_id(2) == 0) { - dst[row] = tmp; - } -} - -template -static void mul_mat_vec_q_iq1_m_q8_1(const void *__restrict__ vx, - const void *__restrict__ vy, - float *__restrict__ dst, const int ncols, - const int nrows, - const sycl::nd_item<3> &item_ct1) { - const int row = item_ct1.get_group(2) * item_ct1.get_local_range(1) + - item_ct1.get_local_id(1); - - if (row >= nrows) { - return; - } - - const int blocks_per_row = ncols / qk; - const int blocks_per_warp = vdr * WARP_SIZE / qi; - -// partial sum for each thread - float tmp = 0.0f; - - const block_q_t * x = (const block_q_t *) vx; - const block_q8_1 * y = (const block_q8_1 *) vy; - - for (int i = item_ct1.get_local_id(2) / (qi / vdr); i < blocks_per_row; - i += blocks_per_warp) { - const int ibx = row*blocks_per_row + i; // x block index - - const int iby = i * (qk/QK8_1); // y block index that aligns with ibx - - const int iqs = - vdr * - (item_ct1.get_local_id(2) % - (qi / vdr)); // x block quant index when casting the quants to int - - tmp += vec_dot_iq1_m_q8_1(&x[ibx], &y[iby], iqs); - } - - // sum up partial sums and write back result -#pragma unroll - for (int mask = 16; mask > 0; mask >>= 1) { - tmp += - dpct::permute_sub_group_by_xor(item_ct1.get_sub_group(), tmp, mask); - } - - if (item_ct1.get_local_id(2) == 0) { - dst[row] = tmp; - } -} - -template -static void mul_mat_vec_q_iq4_nl_q8_1(const void *__restrict__ vx, - const void *__restrict__ vy, - float *__restrict__ dst, const int ncols, - const int nrows, - const sycl::nd_item<3> &item_ct1) { - const int row = item_ct1.get_group(2) * item_ct1.get_local_range(1) + - item_ct1.get_local_id(1); - - if (row >= nrows) { - return; - } - - const int blocks_per_row = ncols / qk; - const int blocks_per_warp = vdr * WARP_SIZE / qi; - -// partial sum for each thread - float tmp = 0.0f; - - const block_q_t * x = (const block_q_t *) vx; - const block_q8_1 * y = (const block_q8_1 *) vy; - - for (int i = item_ct1.get_local_id(2) / (qi / vdr); i < blocks_per_row; - i += blocks_per_warp) { - const int ibx = row*blocks_per_row + i; // x block index - - const int iby = i * (qk/QK8_1); // y block index that aligns with ibx - - const int iqs = - vdr * - (item_ct1.get_local_id(2) % - (qi / vdr)); // x block quant index when casting the quants to int - - tmp += vec_dot_iq4_nl_q8_1(&x[ibx], &y[iby], iqs); - } - - // sum up partial sums and write back result -#pragma unroll - for (int mask = 16; mask > 0; mask >>= 1) { - tmp += - dpct::permute_sub_group_by_xor(item_ct1.get_sub_group(), tmp, mask); - } - - if (item_ct1.get_local_id(2) == 0) { - dst[row] = tmp; - } -} - - -template -static void mul_mat_vec_q_iq4_xs_q8_1(const void *__restrict__ vx, - const void *__restrict__ vy, - float *__restrict__ dst, const int ncols, - const int nrows, - const sycl::nd_item<3> &item_ct1) { - const int row = item_ct1.get_group(2) * item_ct1.get_local_range(1) + - item_ct1.get_local_id(1); - - if (row >= nrows) { - return; - } - - const int blocks_per_row = ncols / qk; - const int blocks_per_warp = vdr * WARP_SIZE / qi; - -// partial sum for each thread - float tmp = 0.0f; - - const block_q_t * x = (const block_q_t *) vx; - const block_q8_1 * y = (const block_q8_1 *) vy; - - for (int i = item_ct1.get_local_id(2) / (qi / vdr); i < blocks_per_row; - i += blocks_per_warp) { - const int ibx = row*blocks_per_row + i; // x block index - - const int iby = i * (qk/QK8_1); // y block index that aligns with ibx - - const int iqs = - vdr * - (item_ct1.get_local_id(2) % - (qi / vdr)); // x block quant index when casting the quants to int - - tmp += vec_dot_iq4_xs_q8_1(&x[ibx], &y[iby], iqs); - } - - // sum up partial sums and write back result -#pragma unroll - for (int mask = 16; mask > 0; mask >>= 1) { - tmp += - dpct::permute_sub_group_by_xor(item_ct1.get_sub_group(), tmp, mask); - } - - if (item_ct1.get_local_id(2) == 0) { - dst[row] = tmp; - } -} - - -template -static void dequantize_mul_mat_vec(const void * __restrict__ vx, const dfloat * __restrict__ y, float * __restrict__ dst, const int ncols, const int nrows, - const sycl::nd_item<3> &item_ct1) { - // qk = quantized weights per x block - // qr = number of quantized weights per data value in x block - const int row = item_ct1.get_group(2) * item_ct1.get_local_range(1) + - item_ct1.get_local_id(1); - - if (row >= nrows) { - return; - } - - const int tid = item_ct1.get_local_id(2); - - const int iter_stride = 2*GGML_SYCL_DMMV_X; - const int vals_per_iter = iter_stride / WARP_SIZE; // num quantized vals per thread and i iter - const int y_offset = qr == 1 ? 1 : qk/2; - -// partial sum for each thread -#ifdef GGML_SYCL_F16 - sycl::half2 tmp = {0.0f, 0.0f}; // two sums for f16 to take advantage of half2 intrinsics -#else - float tmp = 0.0f; -#endif // GGML_SYCL_F16 - - for (int i = 0; i < ncols; i += iter_stride) { - const int col = i + vals_per_iter*tid; - const int ib = (row*ncols + col)/qk; // x block index - const int iqs = (col%qk)/qr; // x quant index - const int iybs = col - col%qk; // y block start index - -// processing >2 values per i iter is faster for fast GPUs -#pragma unroll - for (int j = 0; j < vals_per_iter; j += 2) { - // process 2 vals per j iter - - // dequantize - // for qr = 2 the iqs needs to increase by 1 per j iter because 2 weights per data val - dfloat2 v; - dequantize_kernel(vx, ib, iqs + j/qr, v); - - // matrix multiplication - // for qr = 2 the y index needs to increase by 1 per j iter because of y_offset = qk/2 -#ifdef GGML_SYCL_F16 - dfloat2 t1{y[iybs + iqs + j / qr + 0], - y[iybs + iqs + j / qr + y_offset]}; - - tmp += v * t1; -#else - tmp += v.x() * y[iybs + iqs + j / qr + 0]; - tmp += v.y() * y[iybs + iqs + j / qr + y_offset]; -#endif // GGML_SYCL_F16 - } - } - - // sum up partial sums and write back result -#pragma unroll - for (int mask = 16; mask > 0; mask >>= 1) { - tmp += - dpct::permute_sub_group_by_xor(item_ct1.get_sub_group(), tmp, mask); - } - - if (tid == 0) { -#ifdef GGML_SYCL_F16 - dst[row] = tmp.x() + tmp.y(); -#else - dst[row] = tmp; -#endif // GGML_SYCL_F16 - } -} - -static void mul_mat_p021_f16_f32( - const void * __restrict__ vx, const float * __restrict__ y, float * __restrict__ dst, - const int ncols_x, const int nrows_x, const int nchannels_x, const int nchannels_y, - const sycl::nd_item<3> &item_ct1) { - - const sycl::half *x = (const sycl::half *)vx; - - const int row_x = item_ct1.get_local_range(1) * item_ct1.get_group(1) + - item_ct1.get_local_id(1); - const int channel = item_ct1.get_local_range(0) * item_ct1.get_group(0) + - item_ct1.get_local_id(0); - const int channel_x = channel / (nchannels_y / nchannels_x); - - const int nrows_y = ncols_x; - const int nrows_dst = nrows_x; - const int row_dst = row_x; - - float tmp = 0.0f; - - for (int col_x0 = 0; col_x0 < ncols_x; - col_x0 += item_ct1.get_local_range(2)) { - const int col_x = col_x0 + item_ct1.get_local_id(2); - - if (col_x >= ncols_x) { - break; - } - - // x is transposed and permuted - const int ix = row_x*nchannels_x*ncols_x + channel_x*ncols_x + col_x; - const float xi = - sycl::vec(x[ix]) - .convert()[0]; - - const int row_y = col_x; - - - // y is not transposed but permuted - const int iy = channel*nrows_y + row_y; - - tmp += xi * y[iy]; - } - - // dst is not transposed and not permuted - const int idst = channel*nrows_dst + row_dst; - - // sum up partial sums and write back result -#pragma unroll - for (int mask = 16; mask > 0; mask >>= 1) { - tmp += - dpct::permute_sub_group_by_xor(item_ct1.get_sub_group(), tmp, mask); - } - - if (item_ct1.get_local_id(2) == 0) { - dst[idst] = tmp; - } -} - -static void mul_mat_vec_nc_f16_f32( // nc == non-contiguous - const void * __restrict__ vx, const float * __restrict__ y, float * __restrict__ dst, const int ncols_x, const int nrows_x, - const int row_stride_x, const int channel_stride_x, const int channel_x_divisor, - const sycl::nd_item<3> &item_ct1) { - - const sycl::half *x = (const sycl::half *)vx; - - const int row_x = item_ct1.get_local_range(1) * item_ct1.get_group(1) + - item_ct1.get_local_id(1); - const int channel = item_ct1.get_local_range(0) * item_ct1.get_group(0) + - item_ct1.get_local_id(0); - const int channel_x = channel / channel_x_divisor; - - const int nrows_y = ncols_x; - const int nrows_dst = nrows_x; - const int row_dst = row_x; - - const int idst = channel*nrows_dst + row_dst; - - float tmp = 0.0f; - - for (int col_x0 = 0; col_x0 < ncols_x; - col_x0 += item_ct1.get_local_range(2)) { - const int col_x = col_x0 + item_ct1.get_local_id(2); - - if (col_x >= ncols_x) { - break; - } - - const int row_y = col_x; - - const int ix = channel_x*channel_stride_x + row_x*row_stride_x + col_x; - const int iy = channel*nrows_y + row_y; - - const float xi = - sycl::vec(x[ix]) - .convert()[0]; - - tmp += xi * y[iy]; - } - - // sum up partial sums and write back result -#pragma unroll - for (int mask = 16; mask > 0; mask >>= 1) { - tmp += - dpct::permute_sub_group_by_xor(item_ct1.get_sub_group(), tmp, mask); - } - - if (item_ct1.get_local_id(2) == 0) { - dst[idst] = tmp; - } -} - -static void cpy_1_f32_f32(const char * cxi, char * cdsti) { - const float * xi = (const float *) cxi; - float * dsti = (float *) cdsti; - - *dsti = *xi; -} - -static void cpy_1_f32_f16(const char * cxi, char * cdsti) { - const float * xi = (const float *) cxi; - sycl::half *dsti = (sycl::half *)cdsti; - - *dsti = sycl::vec(*xi) - .convert()[0]; -} - -static void cpy_1_f16_f16(const char * cxi, char * cdsti) { - const sycl::half *xi = (const sycl::half *)cxi; - sycl::half *dsti = (sycl::half *)cdsti; - - *dsti = *xi; -} - -static void cpy_1_f16_f32(const char * cxi, char * cdsti) { - const sycl::half *xi = (const sycl::half *)cxi; - float * dsti = (float *) cdsti; - - *dsti = *xi; -} - -static void cpy_1_i16_i16(const char * cxi, char * cdsti) { - const int16_t *xi = (const int16_t *)cxi; - int16_t *dsti = (int16_t *)cdsti; - - *dsti = *xi; -} - -static void cpy_1_i32_i32(const char * cxi, char * cdsti) { - const int32_t *xi = (const int32_t *)cxi; - int32_t *dsti = (int32_t *)cdsti; - - *dsti = *xi; -} - -template -static void cpy_f32_f16(const char * cx, char * cdst, const int ne, - const int ne00, const int ne01, const int ne02, const int nb00, const int nb01, const int nb02, - const int nb03, const int ne10, const int ne11, const int ne12, const int nb10, const int nb11, - const int nb12, const int nb13, const sycl::nd_item<3> &item_ct1) { - const int i = item_ct1.get_local_range(2) * item_ct1.get_group(2) + - item_ct1.get_local_id(2); - - if (i >= ne) { - return; - } - - // determine indices i02/i12, i01/i11, i00/i10 as a function of index i of flattened tensor - // then combine those indices with the corresponding byte offsets to get the total offsets - const int i03 = i/(ne00 * ne01 * ne02); - const int i02 = (i - i03*ne00*ne01*ne02 )/ (ne00*ne01); - const int i01 = (i - i03*ne00*ne01*ne02 - i02*ne01*ne00) / ne00; - const int i00 = i - i03*ne00*ne01*ne02 - i02*ne01*ne00 - i01*ne00; - const int x_offset = i00*nb00 + i01*nb01 + i02*nb02 + i03 * nb03; - - const int i13 = i/(ne10 * ne11 * ne12); - const int i12 = (i - i13*ne10*ne11*ne12) / (ne10*ne11); - const int i11 = (i - i13*ne10*ne11*ne12 - i12*ne10*ne11) / ne10; - const int i10 = i - i13*ne10*ne11*ne12 - i12*ne10*ne11 - i11*ne10; - const int dst_offset = i10*nb10 + i11*nb11 + i12*nb12 + i13 * nb13; - - cpy_1(cx + x_offset, cdst + dst_offset); -} - -static void cpy_blck_f32_q8_0(const char * cxi, char * cdsti) { - const float * xi = (const float *) cxi; - block_q8_0 * dsti = (block_q8_0 *) cdsti; - - float amax = 0.0f; // absolute max - - for (int j = 0; j < QK8_0; j++) { - const float v = xi[j]; - amax = sycl::fmax(amax, sycl::fabs((float)v)); - } - - const float d = amax / ((1 << 7) - 1); - const float id = d ? 1.0f/d : 0.0f; - - dsti->d = d; - - for (int j = 0; j < QK8_0; ++j) { - const float x0 = xi[j]*id; - - dsti->qs[j] = sycl::round((float)x0); - } -} - -static void cpy_blck_f32_q4_0(const char * cxi, char * cdsti) { - const float * xi = (const float *) cxi; - block_q4_0 * dsti = (block_q4_0 *) cdsti; - - float amax = 0.0f; - float vmax = 0.0f; - - for (int j = 0; j < QK4_0; ++j) { - const float v = xi[j]; - if (amax < sycl::fabs((float)v)) { - amax = sycl::fabs((float)v); - vmax = v; - } - } - - const float d = vmax / -8; - const float id = d ? 1.0f/d : 0.0f; - - dsti->d = d; - - for (int j = 0; j < QK4_0/2; ++j) { - const float x0 = xi[0 + j]*id; - const float x1 = xi[QK4_0/2 + j]*id; - - const uint8_t xi0 = dpct::min(15, (int8_t)(x0 + 8.5f)); - const uint8_t xi1 = dpct::min(15, (int8_t)(x1 + 8.5f)); - - dsti->qs[j] = xi0; - dsti->qs[j] |= xi1 << 4; - } -} - -static void cpy_blck_f32_q4_1(const char * cxi, char * cdsti) { - const float * xi = (const float *) cxi; - block_q4_1 * dsti = (block_q4_1 *) cdsti; - - float vmin = FLT_MAX; - float vmax = -FLT_MAX; - - for (int j = 0; j < QK4_1; ++j) { - const float v = xi[j]; - - if (v < vmin) vmin = v; - if (v > vmax) vmax = v; - } - - const float d = (vmax - vmin) / ((1 << 4) - 1); - const float id = d ? 1.0f/d : 0.0f; - - dsti->dm.x() = d; - dsti->dm.y() = vmin; - - for (int j = 0; j < QK4_1/2; ++j) { - const float x0 = (xi[0 + j] - vmin)*id; - const float x1 = (xi[QK4_1/2 + j] - vmin)*id; - - const uint8_t xi0 = dpct::min(15, (int8_t)(x0 + 0.5f)); - const uint8_t xi1 = dpct::min(15, (int8_t)(x1 + 0.5f)); - - dsti->qs[j] = xi0; - dsti->qs[j] |= xi1 << 4; - } -} - -template -static void cpy_f32_q(const char * cx, char * cdst, const int ne, - const int ne00, const int ne01, const int ne02, const int nb00, const int nb01, const int nb02, - const int nb03, const int ne10, const int ne11, const int ne12, const int nb10, const int nb11, - const int nb12, const int nb13, const sycl::nd_item<3> &item_ct1) { - const int i = (item_ct1.get_local_range(2) * item_ct1.get_group(2) + - item_ct1.get_local_id(2)) * - qk; - - if (i >= ne) { - return; - } - - const int i03 = i/(ne00 * ne01 * ne02); - const int i02 = (i - i03*ne00*ne01*ne02 )/ (ne00*ne01); - const int i01 = (i - i03*ne00*ne01*ne02 - i02*ne01*ne00) / ne00; - const int i00 = i - i03*ne00*ne01*ne02 - i02*ne01*ne00 - i01*ne00; - const int x_offset = i00*nb00 + i01*nb01 + i02*nb02 + i03 * nb03; - - const int i13 = i/(ne10 * ne11 * ne12); - const int i12 = (i - i13*ne10*ne11*ne12) / (ne10*ne11); - const int i11 = (i - i13*ne10*ne11*ne12 - i12*ne10*ne11) / ne10; - const int i10 = i - i13*ne10*ne11*ne12 - i12*ne10*ne11 - i11*ne10; - const int dst_offset = (i10/qk)*nb10 + i11*nb11 + i12*nb12 + i13*nb13; - - cpy_blck(cx + x_offset, cdst + dst_offset); -} - -static float rope_yarn_ramp(const float low, const float high, const int i0) { - const float y = (i0 / 2 - low) / sycl::max(0.001f, high - low); - return 1.0f - sycl::min(1.0f, sycl::max(0.0f, y)); -} - -struct rope_corr_dims { - float v[4]; -}; - -// YaRN algorithm based on LlamaYaRNScaledRotaryEmbedding.py from https://github.com/jquesnelle/yarn -// MIT licensed. Copyright (c) 2023 Jeffrey Quesnelle and Bowen Peng. -static void rope_yarn( - float theta_extrap, float freq_scale, rope_corr_dims corr_dims, int64_t i0, float ext_factor, float mscale, - float * cos_theta, float * sin_theta -) { - // Get n-d rotational scaling corrected for extrapolation - float theta_interp = freq_scale * theta_extrap; - float theta = theta_interp; - if (ext_factor != 0.0f) { - float ramp_mix = rope_yarn_ramp(corr_dims.v[0], corr_dims.v[1], i0) * ext_factor; - theta = theta_interp * (1 - ramp_mix) + theta_extrap * ramp_mix; - - // Get n-d magnitude scaling corrected for interpolation - mscale *= 1.0f + 0.1f * sycl::log(1.0f / freq_scale); - } - *cos_theta = sycl::cos(theta) * mscale; - *sin_theta = sycl::sin(theta) * mscale; -} - -// rope == RoPE == rotary positional embedding -template -static void rope( - const T * x, T * dst, int ncols, const int32_t * pos, float freq_scale, int p_delta_rows, float freq_base, - float ext_factor, float attn_factor, rope_corr_dims corr_dims -, - const sycl::nd_item<3> &item_ct1) { - const int col = 2 * (item_ct1.get_local_range(1) * item_ct1.get_group(1) + - item_ct1.get_local_id(1)); - - if (col >= ncols) { - return; - } - - const int row = item_ct1.get_local_range(2) * item_ct1.get_group(2) + - item_ct1.get_local_id(2); - const int i = row*ncols + col; - const int i2 = row/p_delta_rows; - - const int p = has_pos ? pos[i2] : 0; - const float theta_base = p * dpct::pow(freq_base, -float(col) / ncols); - - float cos_theta, sin_theta; - rope_yarn(theta_base, freq_scale, corr_dims, col, ext_factor, attn_factor, &cos_theta, &sin_theta); - - const float x0 = x[i + 0]; - const float x1 = x[i + 1]; - - dst[i + 0] = x0*cos_theta - x1*sin_theta; - dst[i + 1] = x0*sin_theta + x1*cos_theta; -} - -template -static void rope_neox( - const T * x, T * dst, int ncols, int n_dims, const int32_t * pos, float freq_scale, int p_delta_rows, - float ext_factor, float attn_factor, rope_corr_dims corr_dims, float theta_scale, float inv_ndims -, - const sycl::nd_item<3> &item_ct1) { - const int col = 2 * (item_ct1.get_local_range(1) * item_ct1.get_group(1) + - item_ct1.get_local_id(1)); - - if (col >= ncols) { - return; - } - - const int row = item_ct1.get_local_range(2) * item_ct1.get_group(2) + - item_ct1.get_local_id(2); - const int ib = col / n_dims; - const int ic = col % n_dims; - - if (ib > 0) { - const int i = row*ncols + ib*n_dims + ic; - - dst[i + 0] = x[i + 0]; - dst[i + 1] = x[i + 1]; - - return; - } - - const int i = row*ncols + ib*n_dims + ic/2; - const int i2 = row/p_delta_rows; - - float cur_rot = inv_ndims * ic - ib; - - const int p = has_pos ? pos[i2] : 0; - const float theta_base = - p * freq_scale * dpct::pow(theta_scale, col / 2.0f); - - float cos_theta, sin_theta; - rope_yarn(theta_base, freq_scale, corr_dims, cur_rot, ext_factor, attn_factor, &cos_theta, &sin_theta); - - const float x0 = x[i + 0]; - const float x1 = x[i + n_dims/2]; - - dst[i + 0] = x0*cos_theta - x1*sin_theta; - dst[i + n_dims/2] = x0*sin_theta + x1*cos_theta; -} - -static void rope_glm_f32( - const float * x, float * dst, int ncols, const int32_t * pos, float freq_scale, int p_delta_rows, float freq_base, - int n_ctx -, const sycl::nd_item<3> &item_ct1) { - const int col = item_ct1.get_local_range(2) * item_ct1.get_group(2) + - item_ct1.get_local_id(2); - const int half_n_dims = ncols/4; - - if (col >= half_n_dims) { - return; - } - - const int row = item_ct1.get_local_range(1) * item_ct1.get_group(1) + - item_ct1.get_local_id(1); - const int i = row*ncols + col; - const int i2 = row/p_delta_rows; - - const float col_theta_scale = dpct::pow(freq_base, -2.0f * col / ncols); - // FIXME: this is likely wrong - const int p = pos != nullptr ? pos[i2] : 0; - - const float theta = sycl::min(p, n_ctx - 2) * freq_scale * col_theta_scale; - const float sin_theta = sycl::sin((float)theta); - const float cos_theta = sycl::cos((float)theta); - - const float x0 = x[i + 0]; - const float x1 = x[i + half_n_dims]; - - dst[i + 0] = x0*cos_theta - x1*sin_theta; - dst[i + half_n_dims] = x0*sin_theta + x1*cos_theta; - - const float block_theta = - ((float)sycl::max(p - n_ctx - 2, 0)) * col_theta_scale; - const float sin_block_theta = sycl::sin((float)block_theta); - const float cos_block_theta = sycl::cos((float)block_theta); - - const float x2 = x[i + half_n_dims * 2]; - const float x3 = x[i + half_n_dims * 3]; - - dst[i + half_n_dims * 2] = x2*cos_block_theta - x3*sin_block_theta; - dst[i + half_n_dims * 3] = x2*sin_block_theta + x3*cos_block_theta; -} - -static void alibi_f32(const float * x, float * dst, const int ncols, const int k_rows, - const int n_heads_log2_floor, const float m0, const float m1, - const sycl::nd_item<3> &item_ct1) { - const int col = item_ct1.get_local_range(2) * item_ct1.get_group(2) + - item_ct1.get_local_id(2); - - if (col >= ncols) { - return; - } - - const int row = item_ct1.get_local_range(1) * item_ct1.get_group(1) + - item_ct1.get_local_id(1); - const int i = row*ncols + col; - - const int k = row/k_rows; - - float m_k; - if (k < n_heads_log2_floor) { - m_k = dpct::pow(m0, k + 1); - } else { - m_k = dpct::pow(m1, 2 * (k - n_heads_log2_floor) + 1); - } - - dst[i] = col * m_k + x[i]; -} - -static void k_sum_rows_f32(const float * x, float * dst, const int ncols, - const sycl::nd_item<3> &item_ct1) { - const int row = item_ct1.get_group(1); - const int col = item_ct1.get_local_id(2); - - float sum = 0.0f; - for (int i = col; i < ncols; i += item_ct1.get_local_range(2)) { - sum += x[row * ncols + i]; - } - - sum = warp_reduce_sum(sum, item_ct1); - - if (col == 0) { - dst[row] = sum; - } -} - - -template -static inline void ggml_sycl_swap(T & a, T & b) { - T tmp = a; - a = b; - b = tmp; -} - -template -__dpct_inline__ static void -k_argsort_f32_i32(const float *x, int *dst, const int ncols, int ncols_pad, - const sycl::nd_item<3> &item_ct1, uint8_t *dpct_local) { - // bitonic sort - int col = item_ct1.get_local_id(2); - int row = item_ct1.get_group(1); - - if (col >= ncols_pad) { - return; - } - - const float * x_row = x + row * ncols; - auto dst_row = (int *)dpct_local; - - // initialize indices - dst_row[col] = col; - - item_ct1.barrier(sycl::access::fence_space::local_space); - - for (int k = 2; k <= ncols_pad; k *= 2) { - for (int j = k / 2; j > 0; j /= 2) { - int ixj = col ^ j; - if (ixj > col) { - if ((col & k) == 0) { - if (dst_row[col] >= ncols || - (dst_row[ixj] < ncols && (order == GGML_SORT_ORDER_ASC ? - x_row[dst_row[col]] > x_row[dst_row[ixj]] : - x_row[dst_row[col]] < x_row[dst_row[ixj]])) - ) { - ggml_sycl_swap(dst_row[col], dst_row[ixj]); - } - } else { - if (dst_row[ixj] >= ncols || - (dst_row[col] < ncols && (order == GGML_SORT_ORDER_ASC ? - x_row[dst_row[col]] < x_row[dst_row[ixj]] : - x_row[dst_row[col]] > x_row[dst_row[ixj]])) - ) { - ggml_sycl_swap(dst_row[col], dst_row[ixj]); - } - } - } - /* - DPCT1118:1: SYCL group functions and algorithms must be encountered - in converged control flow. You may need to adjust the code. - */ - item_ct1.barrier(sycl::access::fence_space::local_space); - } - } - - // copy the result to dst without the padding - if (col < ncols) { - dst[row * ncols + col] = dst_row[col]; - } -} - - -static void diag_mask_inf_f32(const float * x, float * dst, const int ncols, const int rows_per_channel, const int n_past, - const sycl::nd_item<3> &item_ct1) { - const int col = item_ct1.get_local_range(1) * item_ct1.get_group(1) + - item_ct1.get_local_id(1); - const int row = item_ct1.get_local_range(2) * item_ct1.get_group(2) + - item_ct1.get_local_id(2); - - if (col >= ncols) { - return; - } - - const int i = row*ncols + col; - //dst[i] = col > (n_past + row % rows_per_channel) ? -INFINITY : x[i]; - //dst[i] = x[i] - (col > n_past + row % rows_per_channel) * INT_MAX; // equivalent within rounding error but slightly faster on GPU - dst[i] = x[i] - (col > n_past + row % rows_per_channel) * FLT_MAX; -} - - -template -static void soft_max_f32(const float * x, const float * mask, const float *pos, float * dst, const int ncols_par, - const int nrows_y, const float scale, const float max_bias, const float m0, - const float m1, uint32_t n_head_log2, const sycl::nd_item<3> &item_ct1, float *buf) { - const int ncols = ncols_template == 0 ? ncols_par : ncols_template; - - const int tid = item_ct1.get_local_id(2); - const int rowx = item_ct1.get_group(2); - const int rowy = rowx % nrows_y; // broadcast the mask (y) in the row dimension - - const int block_size = block_size_template == 0 ? item_ct1.get_local_range(2) : block_size_template; - - const int warp_id = item_ct1.get_local_id(2) / WARP_SIZE; - const int lane_id = item_ct1.get_local_id(2) % WARP_SIZE; - - float slope = 0.0f; - - // ALiBi - if (max_bias > 0.0f) { - const uint32_t h = rowx/nrows_y; // head index - - const float base = h < n_head_log2 ? m0 : m1; - const int exp = h < n_head_log2 ? h + 1 : 2*(h - n_head_log2) + 1; - - slope = sycl::pow(base, float(exp)); - } - - float * vals = vals_smem ? buf + WARP_SIZE : dst + rowx*ncols; - float max_val = -INFINITY; - - for (int col0 = 0; col0 < ncols; col0 += block_size) { - const int col = col0 + tid; - - if (ncols_template == 0 && col >= ncols) { - break; - } - - const int ix = rowx*ncols + col; - const int iy = rowy*ncols + col; - - const float val = x[ix]*scale + (mask ? mask[iy] : 0.0f) + (pos ? slope*pos[col] : 0.0f); - - vals[col] = val; - max_val = sycl::max(max_val, val); - } - - // find the max value in the block - max_val = warp_reduce_max(max_val, item_ct1); - if (block_size > WARP_SIZE) { - if (warp_id == 0) { - buf[lane_id] = -INFINITY; - } - item_ct1.barrier(sycl::access::fence_space::local_space); - - if (lane_id == 0) { - buf[warp_id] = max_val; - } - item_ct1.barrier(sycl::access::fence_space::local_space); - - max_val = buf[lane_id]; - max_val = warp_reduce_max(max_val, item_ct1); - } - - float tmp = 0.f; - -#pragma unroll - for (int col0 = 0; col0 < ncols; col0 += block_size) { - const int col = col0 + tid; - if (ncols_template == 0 && col >= ncols) { - break; - } - - const float val = sycl::native::exp(vals[col] - max_val); - tmp += val; - vals[col] = val; - } - - // find the sum of exps in the block - tmp = warp_reduce_sum(tmp, item_ct1); - if (block_size > WARP_SIZE) { - if (warp_id == 0) { - buf[lane_id] = 0.f; - } - item_ct1.barrier(sycl::access::fence_space::local_space); - - if (lane_id == 0) { - buf[warp_id] = tmp; - } - item_ct1.barrier(sycl::access::fence_space::local_space); - - tmp = buf[lane_id]; - tmp = warp_reduce_sum(tmp, item_ct1); - } - - const float inv_sum = 1.f / tmp; - -#pragma unroll - for (int col0 = 0; col0 < ncols; col0 += block_size) { - const int col = col0 + tid; - - if (ncols_template == 0 && col >= ncols) { - return; - } - - const int idst = rowx*ncols + col; - dst[idst] = vals[col] * inv_sum; - } -} - -static void scale_f32(const float * x, float * dst, const float scale, const int k, - const sycl::nd_item<3> &item_ct1) { - const int i = item_ct1.get_local_range(2) * item_ct1.get_group(2) + - item_ct1.get_local_id(2); - - if (i >= k) { - return; - } - - dst[i] = scale * x[i]; -} - -static void clamp_f32(const float * x, float * dst, const float min, const float max, const int k, - const sycl::nd_item<3> &item_ct1) { - const int i = item_ct1.get_local_range(2) * item_ct1.get_group(2) + - item_ct1.get_local_id(2); - - if (i >= k) { - return; - } - - dst[i] = x[i] < min ? min : (x[i] > max ? max : x[i]); -} - -template -static void im2col_kernel(const float *x, T *dst, int offset_delta, - int IW, int IH, int OW, int KW, int KH, - int pelements, int CHW, int s0, int s1, int p0, - int p1, int d0, int d1, - const sycl::nd_item<3> &item_ct1) { - const int i = item_ct1.get_local_id(2) + - item_ct1.get_group(2) * item_ct1.get_local_range(2); - if (i >= pelements) { - return; - } - - const int ksize = OW * (KH > 1 ? KW : 1); - const int kx = i / ksize; - const int kd = kx * ksize; - const int ky = (i - kd) / OW; - const int ix = i % OW; - - const int64_t iiw = ix * s0 + kx * d0 - p0; - const int64_t iih = item_ct1.get_group(1) * s1 + ky * d1 - p1; - - const int64_t offset_dst = - (item_ct1.get_group(1) * OW + ix) * CHW + - (item_ct1.get_group(0) * (KW * KH) + ky * KW + kx); - - if (iih < 0 || iih >= IH || iiw < 0 || iiw >= IW) { - dst[offset_dst] = - sycl::vec(0.0f) - .convert()[0]; - } else { - const int64_t offset_src = item_ct1.get_group(0) * offset_delta; - dst[offset_dst] = - sycl::vec(x[offset_src + iih * IW + iiw]) - .convert()[0]; - } -} - -template -static void pool2d_nchw_kernel( - const int ih, const int iw, const int oh, const int ow, - const int kh, const int kw, const int sh, const int sw, - const int ph, const int pw, const int parallel_elements, - const Ti* src, To* dst, const enum ggml_op_pool op, - const sycl::nd_item<3> &item_ct1) { - int idx = item_ct1.get_local_id(2) + - item_ct1.get_group(2) * item_ct1.get_local_range(2); - if (idx >= parallel_elements) { - return; - } - - const int I_HW = ih * iw; - const int O_HW = oh * ow; - const int nc = idx / O_HW; - const int cur_oh = idx % O_HW / ow; - const int cur_ow = idx % O_HW % ow; - const Ti* i_ptr = src + nc * I_HW; - To* o_ptr = dst + nc * O_HW; - const int start_h = cur_oh * sh - ph; - const int bh = sycl::max(0, start_h); - const int eh = sycl::min(ih, start_h + kh); - const int start_w = cur_ow * sw - pw; - const int bw = sycl::max(0, start_w); - const int ew = sycl::min(iw, start_w + kw); - - To res = 0; - - switch (op) { - case GGML_OP_POOL_AVG: res = 0; break; - case GGML_OP_POOL_MAX: res = -FLT_MAX; break; - } - - for (int i = bh; i < eh; i += 1) { - for (int j = bw; j < ew; j += 1) { -#if DPCT_COMPATIBILITY_TEMP >= 350 - /* - DPCT1098:106: The '*' expression is used instead of the __ldg - call. These two expressions do not provide the exact same - functionality. Check the generated code for potential precision - and/or performance issues. - */ - Ti cur = *(i_ptr + i * iw + j); -#else - Ti cur = i_ptr[i * iw + j]; -#endif - switch (op) { - case GGML_OP_POOL_AVG: res += (cur / (kh * kw)); break; - case GGML_OP_POOL_MAX: res = sycl::max(res, (To)cur); break; - } - } - } - o_ptr[cur_oh * ow + cur_ow] = res; -} - -template -static void get_rows_sycl(const ggml_tensor *src0, const ggml_tensor *src1, - ggml_tensor *dst, const void *src0_dd, - const int32_t *src1_dd, float *dst_dd, - dpct::queue_ptr stream) { - - GGML_TENSOR_BINARY_OP_LOCALS - - const sycl::range<3> block_dims(1, 1, SYCL_GET_ROWS_BLOCK_SIZE); - const int block_num_x = (ne00 + 2*SYCL_GET_ROWS_BLOCK_SIZE - 1) / (2*SYCL_GET_ROWS_BLOCK_SIZE); - const sycl::range<3> block_nums(ne11 * ne12, ne10, block_num_x); - - // strides in elements - //const size_t s0 = nb0 / ggml_element_size(dst); - const size_t s1 = nb1 / ggml_element_size(dst); - const size_t s2 = nb2 / ggml_element_size(dst); - const size_t s3 = nb3 / ggml_element_size(dst); - - const size_t s10 = nb10 / ggml_element_size(src1); - const size_t s11 = nb11 / ggml_element_size(src1); - const size_t s12 = nb12 / ggml_element_size(src1); - //const size_t s13 = nb13 / ggml_element_size(src1); - - GGML_ASSERT(ne00 % 2 == 0); - - stream->parallel_for(sycl::nd_range<3>(block_nums * block_dims, block_dims), - [=](sycl::nd_item<3> item_ct1) { - k_get_rows( - src0_dd, src1_dd, dst_dd, ne00, ne12, s1, s2, - s3, nb01, nb02, nb03, s10, s11, s12, item_ct1); - }); - - (void) dst; -} - -template -static void get_rows_sycl_float(const ggml_tensor *src0, - const ggml_tensor *src1, ggml_tensor *dst, - const src0_t *src0_dd, const int32_t *src1_dd, - float *dst_dd, dpct::queue_ptr stream) { - - GGML_TENSOR_BINARY_OP_LOCALS - - const sycl::range<3> block_dims(1, 1, SYCL_GET_ROWS_BLOCK_SIZE); - const int block_num_x = (ne00 + SYCL_GET_ROWS_BLOCK_SIZE - 1) / SYCL_GET_ROWS_BLOCK_SIZE; - const sycl::range<3> block_nums(ne11 * ne12, ne10, block_num_x); - - // strides in elements - //const size_t s0 = nb0 / ggml_element_size(dst); - const size_t s1 = nb1 / ggml_element_size(dst); - const size_t s2 = nb2 / ggml_element_size(dst); - const size_t s3 = nb3 / ggml_element_size(dst); - - const size_t s10 = nb10 / ggml_element_size(src1); - const size_t s11 = nb11 / ggml_element_size(src1); - const size_t s12 = nb12 / ggml_element_size(src1); - //const size_t s13 = nb13 / ggml_element_size(src1); - - { - dpct::has_capability_or_fail(stream->get_device(), - {sycl::aspect::fp16}); - - stream->parallel_for( - sycl::nd_range<3>(block_nums * block_dims, block_dims), - [=](sycl::nd_item<3> item_ct1) { - k_get_rows_float(src0_dd, src1_dd, dst_dd, ne00, ne12, s1, s2, - s3, nb01, nb02, nb03, s10, s11, s12, item_ct1); - }); - } - - (void) dst; -} - -template -struct bin_bcast_sycl { - template - void operator()(const struct ggml_tensor *src0, - const struct ggml_tensor *src1, struct ggml_tensor *dst, - const src0_t *src0_dd, const src1_t *src1_dd, dst_t *dst_dd, - dpct::queue_ptr stream) { - - GGML_TENSOR_BINARY_OP_LOCALS - - int nr0 = ne10/ne0; - int nr1 = ne11/ne1; - int nr2 = ne12/ne2; - int nr3 = ne13/ne3; - - int nr[4] = { nr0, nr1, nr2, nr3 }; - - // collapse dimensions until first broadcast dimension - int64_t cne0[] = {ne0, ne1, ne2, ne3}; - int64_t cne1[] = {ne10, ne11, ne12, ne13}; - size_t cnb0[] = {nb0, nb1, nb2, nb3}; - size_t cnb1[] = {nb10, nb11, nb12, nb13}; - auto collapse = [](int64_t cne[]) { - cne[0] *= cne[1]; - cne[1] = cne[2]; - cne[2] = cne[3]; - cne[3] = 1; - }; - - auto collapse_nb = [](size_t cnb[], int64_t cne[]) { - cnb[1] *= cne[1]; - cnb[2] *= cne[2]; - cnb[3] *= cne[3]; - }; - - for (int i = 0; i < 4; i++) { - if (nr[i] != 1) { - break; - } - if (i > 0) { - collapse_nb(cnb0, cne0); - collapse_nb(cnb1, cne1); - collapse(cne0); - collapse(cne1); - } - } - { - int64_t ne0 = cne0[0]; - int64_t ne1 = cne0[1]; - int64_t ne2 = cne0[2]; - int64_t ne3 = cne0[3]; - - int64_t ne10 = cne1[0]; - int64_t ne11 = cne1[1]; - int64_t ne12 = cne1[2]; - int64_t ne13 = cne1[3]; - - size_t nb0 = cnb0[0]; - size_t nb1 = cnb0[1]; - size_t nb2 = cnb0[2]; - size_t nb3 = cnb0[3]; - - size_t nb10 = cnb1[0]; - size_t nb11 = cnb1[1]; - size_t nb12 = cnb1[2]; - size_t nb13 = cnb1[3]; - - size_t s0 = nb0 / sizeof(dst_t); - size_t s1 = nb1 / sizeof(dst_t); - size_t s2 = nb2 / sizeof(dst_t); - size_t s3 = nb3 / sizeof(dst_t); - - size_t s10 = nb10 / sizeof(src1_t); - size_t s11 = nb11 / sizeof(src1_t); - size_t s12 = nb12 / sizeof(src1_t); - size_t s13 = nb13 / sizeof(src1_t); - - GGML_ASSERT(s0 == 1); - GGML_ASSERT(s10 == 1); - - const int block_size = 128; - - int64_t hne0 = std::max(ne0/2LL, 1LL); - - sycl::range<3> block_dims(1, 1, 1); - block_dims[2] = std::min(hne0, block_size); - block_dims[1] = std::min( - ne1, block_size / (unsigned int)block_dims[2]); - block_dims[0] = std::min( - std::min( - ne2 * ne3, block_size / (unsigned int)block_dims[2] / - (unsigned int)block_dims[1]), - 64U); - - sycl::range<3> block_nums( - (ne2 * ne3 + block_dims[0] - 1) / block_dims[0], - (ne1 + block_dims[1] - 1) / block_dims[1], - (hne0 + block_dims[2] - 1) / block_dims[2]); - - if (block_nums[0] > 65535) { - // this is the maximum number of blocks in z direction, fallback to 1D grid kernel - int block_num = (ne0*ne1*ne2*ne3 + block_size - 1) / block_size; - { - dpct::has_capability_or_fail(stream->get_device(), - {sycl::aspect::fp16}); - - stream->parallel_for( - sycl::nd_range<3>(sycl::range<3>(1, 1, block_num) * - sycl::range<3>(1, 1, block_size), - sycl::range<3>(1, 1, block_size)), - [=](sycl::nd_item<3> item_ct1) { - k_bin_bcast_unravel( - src0_dd, src1_dd, dst_dd, ne0, ne1, ne2, ne3, - ne10, ne11, ne12, ne13, s1, s2, s3, s11, s12, - s13, item_ct1); - }); - } - } else { - /* - DPCT1049:16: The work-group size passed to the SYCL kernel may - exceed the limit. To get the device limit, query - info::device::max_work_group_size. Adjust the work-group size if - needed. - */ - dpct::has_capability_or_fail(stream->get_device(), - {sycl::aspect::fp16}); - - stream->parallel_for( - sycl::nd_range<3>(block_nums * block_dims, block_dims), - [=](sycl::nd_item<3> item_ct1) { - k_bin_bcast(src0_dd, src1_dd, dst_dd, ne0, ne1, - ne2, ne3, ne10, ne11, ne12, ne13, - s1, s2, s3, s11, s12, s13, - item_ct1); - }); - } - } - } -}; - -static void acc_f32_sycl(const float *x, const float *y, float *dst, - const int n_elements, const int ne10, const int ne11, - const int ne12, const int nb1, const int nb2, - const int offset, dpct::queue_ptr stream) { - int num_blocks = (n_elements + SYCL_ACC_BLOCK_SIZE - 1) / SYCL_ACC_BLOCK_SIZE; - stream->parallel_for( - sycl::nd_range<3>(sycl::range<3>(1, 1, num_blocks) * - sycl::range<3>(1, 1, SYCL_ACC_BLOCK_SIZE), - sycl::range<3>(1, 1, SYCL_ACC_BLOCK_SIZE)), - [=](sycl::nd_item<3> item_ct1) { - acc_f32(x, y, dst, n_elements, ne10, ne11, ne12, nb1, nb2, offset, - item_ct1); - }); -} - -static void gelu_f32_sycl(const float *x, float *dst, const int k, - dpct::queue_ptr stream) { - const int num_blocks = (k + SYCL_GELU_BLOCK_SIZE - 1) / SYCL_GELU_BLOCK_SIZE; - stream->parallel_for( - sycl::nd_range<3>(sycl::range<3>(1, 1, num_blocks) * - sycl::range<3>(1, 1, SYCL_GELU_BLOCK_SIZE), - sycl::range<3>(1, 1, SYCL_GELU_BLOCK_SIZE)), - [=](sycl::nd_item<3> item_ct1) { - gelu_f32(x, dst, k, item_ct1); - }); -} - -static void silu_f32_sycl(const float *x, float *dst, const int k, - dpct::queue_ptr stream) { - const int num_blocks = (k + SYCL_SILU_BLOCK_SIZE - 1) / SYCL_SILU_BLOCK_SIZE; - stream->parallel_for( - sycl::nd_range<3>(sycl::range<3>(1, 1, num_blocks) * - sycl::range<3>(1, 1, SYCL_SILU_BLOCK_SIZE), - sycl::range<3>(1, 1, SYCL_SILU_BLOCK_SIZE)), - [=](sycl::nd_item<3> item_ct1) { - silu_f32(x, dst, k, item_ct1); - }); -} - -static void gelu_quick_f32_sycl(const float *x, float *dst, const int k, - dpct::queue_ptr stream) { - const int num_blocks = (k + SYCL_GELU_BLOCK_SIZE - 1) / SYCL_GELU_BLOCK_SIZE; - stream->parallel_for( - sycl::nd_range<3>(sycl::range<3>(1, 1, num_blocks) * - sycl::range<3>(1, 1, SYCL_GELU_BLOCK_SIZE), - sycl::range<3>(1, 1, SYCL_GELU_BLOCK_SIZE)), - [=](sycl::nd_item<3> item_ct1) { - gelu_quick_f32(x, dst, k, item_ct1); - }); -} - -static void tanh_f32_sycl(const float *x, float *dst, const int k, - dpct::queue_ptr stream) { - const int num_blocks = (k + SYCL_TANH_BLOCK_SIZE - 1) / SYCL_TANH_BLOCK_SIZE; - stream->parallel_for( - sycl::nd_range<3>(sycl::range<3>(1, 1, num_blocks) * - sycl::range<3>(1, 1, SYCL_TANH_BLOCK_SIZE), - sycl::range<3>(1, 1, SYCL_TANH_BLOCK_SIZE)), - [=](sycl::nd_item<3> item_ct1) { - tanh_f32(x, dst, k, item_ct1); - }); -} - -static void relu_f32_sycl(const float *x, float *dst, const int k, - dpct::queue_ptr stream) { - const int num_blocks = (k + SYCL_RELU_BLOCK_SIZE - 1) / SYCL_RELU_BLOCK_SIZE; - stream->parallel_for( - sycl::nd_range<3>(sycl::range<3>(1, 1, num_blocks) * - sycl::range<3>(1, 1, SYCL_RELU_BLOCK_SIZE), - sycl::range<3>(1, 1, SYCL_RELU_BLOCK_SIZE)), - [=](sycl::nd_item<3> item_ct1) { - relu_f32(x, dst, k, item_ct1); - }); -} - -static void hardsigmoid_f32_sycl(const float *x, float *dst, const int k, - dpct::queue_ptr stream) { - const int num_blocks = (k + SYCL_HARDSIGMOID_BLOCK_SIZE - 1) / SYCL_HARDSIGMOID_BLOCK_SIZE; - stream->parallel_for( - sycl::nd_range<3>(sycl::range<3>(1, 1, num_blocks) * - sycl::range<3>(1, 1, SYCL_HARDSIGMOID_BLOCK_SIZE), - sycl::range<3>(1, 1, SYCL_HARDSIGMOID_BLOCK_SIZE)), - [=](sycl::nd_item<3> item_ct1) { - hardsigmoid_f32(x, dst, k, item_ct1); - }); -} - -static void hardswish_f32_sycl(const float *x, float *dst, const int k, - dpct::queue_ptr stream) { - const int num_blocks = (k + SYCL_HARDSWISH_BLOCK_SIZE - 1) / SYCL_HARDSWISH_BLOCK_SIZE; - stream->parallel_for( - sycl::nd_range<3>(sycl::range<3>(1, 1, num_blocks) * - sycl::range<3>(1, 1, SYCL_HARDSWISH_BLOCK_SIZE), - sycl::range<3>(1, 1, SYCL_HARDSWISH_BLOCK_SIZE)), - [=](sycl::nd_item<3> item_ct1) { - hardswish_f32(x, dst, k, item_ct1); - }); -} - -static void leaky_relu_f32_sycl(const float *x, float *dst, const int k, - const float negative_slope, - dpct::queue_ptr stream) { - const int num_blocks = (k + SYCL_RELU_BLOCK_SIZE - 1) / SYCL_RELU_BLOCK_SIZE; - stream->parallel_for( - sycl::nd_range<3>(sycl::range<3>(1, 1, num_blocks) * - sycl::range<3>(1, 1, SYCL_RELU_BLOCK_SIZE), - sycl::range<3>(1, 1, SYCL_RELU_BLOCK_SIZE)), - [=](sycl::nd_item<3> item_ct1) { - leaky_relu_f32(x, dst, k, negative_slope, item_ct1); - }); -} - -static void sqr_f32_sycl(const float *x, float *dst, const int k, - dpct::queue_ptr stream) { - const int num_blocks = (k + SYCL_SQR_BLOCK_SIZE - 1) / SYCL_SQR_BLOCK_SIZE; - stream->parallel_for( - sycl::nd_range<3>(sycl::range<3>(1, 1, num_blocks) * - sycl::range<3>(1, 1, SYCL_SQR_BLOCK_SIZE), - sycl::range<3>(1, 1, SYCL_SQR_BLOCK_SIZE)), - [=](sycl::nd_item<3> item_ct1) { - sqr_f32(x, dst, k, item_ct1); - }); -} - -static void norm_f32_sycl(const float *x, float *dst, const int ncols, - const int nrows, const float eps, - dpct::queue_ptr stream) { - GGML_ASSERT(ncols % WARP_SIZE == 0); - if (ncols < 1024) { - const sycl::range<3> block_dims(1, 1, WARP_SIZE); - stream->submit([&](sycl::handler &cgh) { - sycl::local_accessor s_sum_acc_ct1( - sycl::range<1>(32), cgh); - - cgh.parallel_for( - sycl::nd_range<3>(sycl::range<3>(1, 1, nrows) * block_dims, - block_dims), - [=](sycl::nd_item<3> item_ct1) - [[intel::reqd_sub_group_size(32)]] { - norm_f32(x, dst, ncols, eps, item_ct1, - s_sum_acc_ct1.get_pointer(), WARP_SIZE); - }); - }); - } else { - const int work_group_size = g_work_group_size; - const sycl::range<3> block_dims(1, 1, work_group_size); - /* - DPCT1049:17: The work-group size passed to the SYCL kernel may exceed - the limit. To get the device limit, query - info::device::max_work_group_size. Adjust the work-group size if needed. - */ - stream->submit([&](sycl::handler &cgh) { - sycl::local_accessor s_sum_acc_ct1( - sycl::range<1>(32), cgh); - - cgh.parallel_for( - sycl::nd_range<3>(sycl::range<3>(1, 1, nrows) * block_dims, - block_dims), - [=](sycl::nd_item<3> item_ct1) - [[intel::reqd_sub_group_size(32)]] { - norm_f32(x, dst, ncols, eps, item_ct1, - s_sum_acc_ct1.get_pointer(), work_group_size); - }); - }); - } -} - -static void group_norm_f32_sycl(const float *x, float *dst, - const int num_groups, const int group_size, - const int ne_elements, dpct::queue_ptr stream) { - static const float eps = 1e-6f; - if (group_size < 1024) { - const sycl::range<3> block_dims(1, 1, WARP_SIZE); - stream->submit([&](sycl::handler &cgh) { - sycl::local_accessor s_sum_acc_ct1(sycl::range<1>(32), - cgh); - - const float eps_ct4 = eps; - - cgh.parallel_for( - sycl::nd_range<3>(sycl::range<3>(1, 1, num_groups) * block_dims, - block_dims), - [=](sycl::nd_item<3> item_ct1) - [[intel::reqd_sub_group_size(32)]] { - group_norm_f32( - x, dst, group_size, ne_elements, eps_ct4, item_ct1, - s_sum_acc_ct1.get_pointer(), WARP_SIZE); - }); - }); - } else { - const int work_group_size = g_work_group_size; - const sycl::range<3> block_dims(1, 1, work_group_size); - /* - DPCT1049:18: The work-group size passed to the SYCL kernel may exceed - the limit. To get the device limit, query - info::device::max_work_group_size. Adjust the work-group size if needed. - */ - - stream->submit([&](sycl::handler &cgh) { - sycl::local_accessor s_sum_acc_ct1(sycl::range<1>(32), - cgh); - - const float eps_ct4 = eps; - - cgh.parallel_for( - sycl::nd_range<3>(sycl::range<3>(1, 1, num_groups) * block_dims, - block_dims), - [=](sycl::nd_item<3> item_ct1) - [[intel::reqd_sub_group_size(32)]] { - group_norm_f32(x, dst, group_size, ne_elements, - eps_ct4, item_ct1, - s_sum_acc_ct1.get_pointer(), work_group_size); - }); - }); - } -} - -static void concat_f32_sycl(const float *x, const float *y, float *dst, - const int ne0, int ne1, int ne2, int ne02, - dpct::queue_ptr stream) { - int num_blocks = (ne0 + SYCL_CONCAT_BLOCK_SIZE - 1) / SYCL_CONCAT_BLOCK_SIZE; - sycl::range<3> gridDim(ne2, ne1, num_blocks); - stream->parallel_for( - sycl::nd_range<3>(gridDim * - sycl::range<3>(1, 1, SYCL_CONCAT_BLOCK_SIZE), - sycl::range<3>(1, 1, SYCL_CONCAT_BLOCK_SIZE)), - [=](sycl::nd_item<3> item_ct1) { - concat_f32(x, y, dst, ne0, ne02, item_ct1); - }); -} - -static void upscale_f32_sycl(const float *x, float *dst, const int ne00, - const int ne01, const int ne02, - const int scale_factor, dpct::queue_ptr stream) { - int ne0 = (ne00 * scale_factor); - int num_blocks = (ne0 + SYCL_UPSCALE_BLOCK_SIZE - 1) / SYCL_UPSCALE_BLOCK_SIZE; - sycl::range<3> gridDim(ne02, (ne01 * scale_factor), num_blocks); - stream->parallel_for( - sycl::nd_range<3>(gridDim * - sycl::range<3>(1, 1, SYCL_UPSCALE_BLOCK_SIZE), - sycl::range<3>(1, 1, SYCL_UPSCALE_BLOCK_SIZE)), - [=](sycl::nd_item<3> item_ct1) { - upscale_f32(x, dst, ne00, ne00 * ne01, scale_factor, item_ct1); - }); -} - -static void pad_f32_sycl(const float *x, float *dst, const int ne00, - const int ne01, const int ne02, const int ne0, - const int ne1, const int ne2, dpct::queue_ptr stream) { - int num_blocks = (ne0 + SYCL_PAD_BLOCK_SIZE - 1) / SYCL_PAD_BLOCK_SIZE; - sycl::range<3> gridDim(ne2, ne1, num_blocks); - stream->parallel_for( - sycl::nd_range<3>(gridDim * sycl::range<3>(1, 1, SYCL_PAD_BLOCK_SIZE), - sycl::range<3>(1, 1, SYCL_PAD_BLOCK_SIZE)), - [=](sycl::nd_item<3> item_ct1) { - pad_f32(x, dst, ne0, ne00, ne01, ne02, item_ct1); - }); -} - -static void rms_norm_f32_sycl(const float *x, float *dst, const int ncols, - const int nrows, const float eps, - dpct::queue_ptr stream) { - GGML_ASSERT(ncols % WARP_SIZE == 0); - // printf("%s ncols=%d, nrows=%d, WARP_SIZE=%d\n", __func__, ncols, nrows, WARP_SIZE); - if (ncols < 1024) { - const sycl::range<3> block_dims(1, 1, WARP_SIZE); - stream->submit([&](sycl::handler &cgh) { - sycl::local_accessor s_sum_acc_ct1(sycl::range<1>(32), - cgh); - - cgh.parallel_for( - sycl::nd_range<3>(sycl::range<3>(1, 1, nrows) * block_dims, - block_dims), - [=](sycl::nd_item<3> item_ct1) - [[intel::reqd_sub_group_size(32)]] { - rms_norm_f32(x, dst, ncols, eps, item_ct1, - s_sum_acc_ct1.get_pointer(), WARP_SIZE); - }); - }); - } else { - const int work_group_size = g_work_group_size; - const sycl::range<3> block_dims(1, 1, work_group_size); - /* - DPCT1049:19: The work-group size passed to the SYCL kernel may exceed - the limit. To get the device limit, query - info::device::max_work_group_size. Adjust the work-group size if needed. - */ - stream->submit([&](sycl::handler &cgh) { - sycl::local_accessor s_sum_acc_ct1(sycl::range<1>(32), - cgh); - - cgh.parallel_for( - sycl::nd_range<3>(sycl::range<3>(1, 1, nrows) * block_dims, - block_dims), - [=](sycl::nd_item<3> item_ct1) - [[intel::reqd_sub_group_size(32)]] { - rms_norm_f32(x, dst, ncols, eps, item_ct1, - s_sum_acc_ct1.get_pointer(), work_group_size); - }); - }); - } -} - -static void quantize_row_q8_1_sycl(const float *x, void *vy, const int kx, - const int ky, const int kx_padded, - dpct::queue_ptr stream) { - const int block_num_x = (kx_padded + SYCL_QUANTIZE_BLOCK_SIZE - 1) / SYCL_QUANTIZE_BLOCK_SIZE; - const sycl::range<3> num_blocks(1, ky, block_num_x); - const sycl::range<3> block_size(1, 1, SYCL_DEQUANTIZE_BLOCK_SIZE); - { - dpct::has_capability_or_fail(stream->get_device(), - {sycl::aspect::fp16}); - - stream->parallel_for( - sycl::nd_range<3>(num_blocks * block_size, block_size), - [=](sycl::nd_item<3> item_ct1) [[intel::reqd_sub_group_size(32)]] { - quantize_q8_1(x, vy, kx, kx_padded, item_ct1); - }); - } -} - -template -static void dequantize_block_sycl(const void *__restrict__ vx, - dst_t *__restrict__ y, const int k, - dpct::queue_ptr stream) { - const int num_blocks = (k + 2*SYCL_DEQUANTIZE_BLOCK_SIZE - 1) / (2*SYCL_DEQUANTIZE_BLOCK_SIZE); - { - dpct::has_capability_or_fail(stream->get_device(), - {sycl::aspect::fp16}); - stream->parallel_for( - sycl::nd_range<3>( - sycl::range<3>(1, 1, num_blocks) * - sycl::range<3>(1, 1, SYCL_DEQUANTIZE_BLOCK_SIZE), - sycl::range<3>(1, 1, SYCL_DEQUANTIZE_BLOCK_SIZE)), - [=](sycl::nd_item<3> item_ct1) { - dequantize_block(vx, y, k, item_ct1); - }); - } -} - -template -static void dequantize_row_q2_K_sycl(const void *vx, dst_t *y, const int k, - dpct::queue_ptr stream) { - const int nb = k / QK_K; -#if QK_K == 256 - { - dpct::has_capability_or_fail(stream->get_device(), - {sycl::aspect::fp16}); - - stream->parallel_for(sycl::nd_range<3>(sycl::range<3>(1, 1, nb) * - sycl::range<3>(1, 1, 64), - sycl::range<3>(1, 1, 64)), - [=](sycl::nd_item<3> item_ct1) { - dequantize_block_q2_K(vx, y, item_ct1); - }); - } -#else - { - dpct::has_capability_or_fail(stream->get_device(), - {sycl::aspect::fp16}); - - stream->parallel_for(sycl::nd_range<3>(sycl::range<3>(1, 1, nb) * - sycl::range<3>(1, 1, 32), - sycl::range<3>(1, 1, 32)), - [=](sycl::nd_item<3> item_ct1) { - dequantize_block_q2_K(vx, y, item_ct1); - }); - } - -#endif -} - -template -static void dequantize_row_q3_K_sycl(const void *vx, dst_t *y, const int k, - dpct::queue_ptr stream) { - const int nb = k / QK_K; -#if QK_K == 256 - { - dpct::has_capability_or_fail(stream->get_device(), - {sycl::aspect::fp16}); - - stream->parallel_for(sycl::nd_range<3>(sycl::range<3>(1, 1, nb) * - sycl::range<3>(1, 1, 64), - sycl::range<3>(1, 1, 64)), - [=](sycl::nd_item<3> item_ct1) { - dequantize_block_q3_K(vx, y, item_ct1); - }); - } -#else - { - dpct::has_capability_or_fail(stream->get_device(), - {sycl::aspect::fp16}); - - stream->parallel_for(sycl::nd_range<3>(sycl::range<3>(1, 1, nb) * - sycl::range<3>(1, 1, 32), - sycl::range<3>(1, 1, 32)), - [=](sycl::nd_item<3> item_ct1) { - dequantize_block_q3_K(vx, y, item_ct1); - }); - } -#endif -} - -template -static void dequantize_row_q4_0_sycl(const void *vx, dst_t *y, const int k, - dpct::queue_ptr stream) { - const int nb32 = k / 32; - const int nb = (k + 255) / 256; - { - dpct::has_capability_or_fail(stream->get_device(), - {sycl::aspect::fp16}); - - stream->parallel_for(sycl::nd_range<3>(sycl::range<3>(1, 1, nb) * - sycl::range<3>(1, 1, 32), - sycl::range<3>(1, 1, 32)), - [=](sycl::nd_item<3> item_ct1) { - dequantize_block_q4_0(vx, y, nb32, item_ct1); - }); - } -} - -template -static void dequantize_row_q4_1_sycl(const void *vx, dst_t *y, const int k, - dpct::queue_ptr stream) { - const int nb32 = k / 32; - const int nb = (k + 255) / 256; - { - dpct::has_capability_or_fail(stream->get_device(), - {sycl::aspect::fp16}); - - stream->parallel_for(sycl::nd_range<3>(sycl::range<3>(1, 1, nb) * - sycl::range<3>(1, 1, 32), - sycl::range<3>(1, 1, 32)), - [=](sycl::nd_item<3> item_ct1) { - dequantize_block_q4_1(vx, y, nb32, item_ct1); - }); - } -} - - -template -static void dequantize_row_q4_K_sycl(const void *vx, dst_t *y, const int k, - dpct::queue_ptr stream) { - const int nb = k / QK_K; - { - dpct::has_capability_or_fail(stream->get_device(), - {sycl::aspect::fp16}); - - stream->parallel_for(sycl::nd_range<3>(sycl::range<3>(1, 1, nb) * - sycl::range<3>(1, 1, 32), - sycl::range<3>(1, 1, 32)), - [=](sycl::nd_item<3> item_ct1) { - dequantize_block_q4_K(vx, y, item_ct1); - }); - } -} - -template -static void dequantize_row_q5_K_sycl(const void *vx, dst_t *y, const int k, - dpct::queue_ptr stream) { - const int nb = k / QK_K; -#if QK_K == 256 - { - dpct::has_capability_or_fail(stream->get_device(), - {sycl::aspect::fp16}); - - stream->parallel_for(sycl::nd_range<3>(sycl::range<3>(1, 1, nb) * - sycl::range<3>(1, 1, 64), - sycl::range<3>(1, 1, 64)), - [=](sycl::nd_item<3> item_ct1) { - dequantize_block_q5_K(vx, y, item_ct1); - }); - } -#else - { - dpct::has_capability_or_fail(stream->get_device(), - {sycl::aspect::fp16}); - - stream->parallel_for(sycl::nd_range<3>(sycl::range<3>(1, 1, nb) * - sycl::range<3>(1, 1, 32), - sycl::range<3>(1, 1, 32)), - [=](sycl::nd_item<3> item_ct1) { - dequantize_block_q5_K(vx, y, item_ct1); - }); - } - -#endif -} - -template -static void dequantize_row_q6_K_sycl(const void *vx, dst_t *y, const int k, - dpct::queue_ptr stream) { - const int nb = k / QK_K; -#if QK_K == 256 - { - dpct::has_capability_or_fail(stream->get_device(), - {sycl::aspect::fp16}); - - stream->parallel_for(sycl::nd_range<3>(sycl::range<3>(1, 1, nb) * - sycl::range<3>(1, 1, 64), - sycl::range<3>(1, 1, 64)), - [=](sycl::nd_item<3> item_ct1) { - dequantize_block_q6_K(vx, y, item_ct1); - }); - } -#else - { - dpct::has_capability_or_fail(stream->get_device(), - {sycl::aspect::fp16}); - - stream->parallel_for(sycl::nd_range<3>(sycl::range<3>(1, 1, nb) * - sycl::range<3>(1, 1, 32), - sycl::range<3>(1, 1, 32)), - [=](sycl::nd_item<3> item_ct1) { - dequantize_block_q6_K(vx, y, item_ct1); - }); - } - -#endif -} - -template -static void dequantize_row_iq1_s_sycl(const void *vx, dst_t *y, const int k, - dpct::queue_ptr stream) { - const int nb = k / QK_K; - { - dpct::has_capability_or_fail(stream->get_device(), - {sycl::aspect::fp16}); - - stream->submit([&](sycl::handler &cgh) { - cgh.parallel_for(sycl::nd_range<3>(sycl::range<3>(1, 1, nb) * - sycl::range<3>(1, 1, 32), - sycl::range<3>(1, 1, 32)), - [=](sycl::nd_item<3> item_ct1) { - dequantize_block_iq1_s( - vx, y, item_ct1, iq1s_grid_gpu - ); - }); - }); - } -} - -template -static void dequantize_row_iq1_m_sycl(const void *vx, dst_t *y, const int k, - dpct::queue_ptr stream) { - const int nb = k / QK_K; - { - dpct::has_capability_or_fail(stream->get_device(), - {sycl::aspect::fp16}); - - stream->submit([&](sycl::handler &cgh) { - cgh.parallel_for(sycl::nd_range<3>(sycl::range<3>(1, 1, nb) * - sycl::range<3>(1, 1, 32), - sycl::range<3>(1, 1, 32)), - [=](sycl::nd_item<3> item_ct1) { - dequantize_block_iq1_m( - vx, y, item_ct1, iq1s_grid_gpu - ); - }); - }); - } -} - -template -static void dequantize_row_iq2_xxs_sycl(const void *vx, dst_t *y, const int k, - dpct::queue_ptr stream) { - const int nb = k / QK_K; - { - dpct::has_capability_or_fail(stream->get_device(), - {sycl::aspect::fp16}); - - stream->submit([&](sycl::handler &cgh) { - cgh.parallel_for(sycl::nd_range<3>(sycl::range<3>(1, 1, nb) * - sycl::range<3>(1, 1, 32), - sycl::range<3>(1, 1, 32)), - [=](sycl::nd_item<3> item_ct1) { - dequantize_block_iq2_xxs( - vx, y, item_ct1, iq2xxs_grid, - ksigns_iq2xs, kmask_iq2xs); - }); - }); - } -} - -template -static void dequantize_row_iq2_xs_sycl(const void *vx, dst_t *y, const int k, - dpct::queue_ptr stream) { - const int nb = k / QK_K; - { - dpct::has_capability_or_fail(stream->get_device(), - {sycl::aspect::fp16}); - - stream->submit([&](sycl::handler &cgh) { - cgh.parallel_for(sycl::nd_range<3>(sycl::range<3>(1, 1, nb) * - sycl::range<3>(1, 1, 32), - sycl::range<3>(1, 1, 32)), - [=](sycl::nd_item<3> item_ct1) { - dequantize_block_iq2_xs( - vx, y, item_ct1, iq2xs_grid, - ksigns_iq2xs, kmask_iq2xs); - }); - }); - } -} - -template -static void dequantize_row_iq2_s_sycl(const void *vx, dst_t *y, const int k, - dpct::queue_ptr stream) { - const int nb = k / QK_K; - { - dpct::has_capability_or_fail(stream->get_device(), - {sycl::aspect::fp16}); - - stream->submit([&](sycl::handler &cgh) { - cgh.parallel_for(sycl::nd_range<3>(sycl::range<3>(1, 1, nb) * - sycl::range<3>(1, 1, 32), - sycl::range<3>(1, 1, 32)), - [=](sycl::nd_item<3> item_ct1) { - dequantize_block_iq2_s(vx, y, item_ct1); - }); - }); - } -} - - -template -static void dequantize_row_iq3_xxs_sycl(const void *vx, dst_t *y, const int k, - dpct::queue_ptr stream) { - const int nb = k / QK_K; - { - dpct::has_capability_or_fail(stream->get_device(), - {sycl::aspect::fp16}); - - stream->submit([&](sycl::handler &cgh) { - cgh.parallel_for(sycl::nd_range<3>(sycl::range<3>(1, 1, nb) * - sycl::range<3>(1, 1, 32), - sycl::range<3>(1, 1, 32)), - [=](sycl::nd_item<3> item_ct1) { - dequantize_block_iq3_xxs( - vx, y, item_ct1, iq3xxs_grid, - ksigns_iq2xs, kmask_iq2xs); - }); - }); - } -} - -template -static void dequantize_row_iq3_s_sycl(const void *vx, dst_t *y, const int k, - dpct::queue_ptr stream) { - const int nb = k / QK_K; - { - dpct::has_capability_or_fail(stream->get_device(), - {sycl::aspect::fp16}); - - stream->submit([&](sycl::handler &cgh) { - cgh.parallel_for(sycl::nd_range<3>(sycl::range<3>(1, 1, nb) * - sycl::range<3>(1, 1, 32), - sycl::range<3>(1, 1, 32)), - [=](sycl::nd_item<3> item_ct1) { - dequantize_block_iq3_s( - vx, y, item_ct1, kmask_iq2xs, iq3s_grid); - }); - }); - } -} - -template -static void dequantize_row_iq4_xs_sycl(const void *vx, dst_t *y, const int k, - dpct::queue_ptr stream) { - const int nb = (k + QK_K - 1) / QK_K; -#if QK_K == 64 - dequantize_row_iq4_nl_sycl(vx, y, k, stream); -#else - { - dpct::has_capability_or_fail(stream->get_device(), - {sycl::aspect::fp16}); - - stream->submit([&](sycl::handler &cgh) { - cgh.parallel_for( - sycl::nd_range<3>(sycl::range<3>(1, 1, nb) * - sycl::range<3>(1, 1, 32), - sycl::range<3>(1, 1, 32)), - [=](sycl::nd_item<3> item_ct1) { - dequantize_block_iq4_xs(vx, y, item_ct1); - }); - }); - } -#endif -} - - -template -static void dequantize_row_iq4_nl_sycl(const void *vx, dst_t *y, const int k, - dpct::queue_ptr stream) { - const int nb = (k + QK_K - 1) / QK_K; - { - dpct::has_capability_or_fail(stream->get_device(), - {sycl::aspect::fp16}); - - stream->submit([&](sycl::handler &cgh) { - cgh.parallel_for( - sycl::nd_range<3>(sycl::range<3>(1, 1, nb) * - sycl::range<3>(1, 1, 32), - sycl::range<3>(1, 1, 32)), - [=](sycl::nd_item<3> item_ct1) { - dequantize_block_iq4_nl(vx, y, item_ct1); - }); - }); - } -} - - - -template -static void convert_unary_sycl(const void *__restrict__ vx, - dst_t *__restrict__ y, const int k, - dpct::queue_ptr stream) { - const int num_blocks = (k + SYCL_DEQUANTIZE_BLOCK_SIZE - 1) / SYCL_DEQUANTIZE_BLOCK_SIZE; - { - dpct::has_capability_or_fail(stream->get_device(), - {sycl::aspect::fp16}); - - stream->parallel_for( - sycl::nd_range<3>( - sycl::range<3>(1, 1, num_blocks) * - sycl::range<3>(1, 1, SYCL_DEQUANTIZE_BLOCK_SIZE), - sycl::range<3>(1, 1, SYCL_DEQUANTIZE_BLOCK_SIZE)), - [=](sycl::nd_item<3> item_ct1) { - convert_unary(vx, y, k, item_ct1); - }); - } -} - - -static to_fp16_sycl_t ggml_get_to_fp16_sycl(ggml_type type) try { - int id; - switch (type) { - case GGML_TYPE_Q4_0: - return dequantize_block_sycl; - case GGML_TYPE_Q4_1: - return dequantize_block_sycl; - case GGML_TYPE_Q5_0: - return dequantize_block_sycl; - case GGML_TYPE_Q5_1: - return dequantize_block_sycl; - case GGML_TYPE_Q8_0: - return dequantize_block_sycl; - case GGML_TYPE_Q2_K: - return dequantize_row_q2_K_sycl; - case GGML_TYPE_Q3_K: - return dequantize_row_q3_K_sycl; - case GGML_TYPE_Q4_K: - return dequantize_row_q4_K_sycl; - case GGML_TYPE_Q5_K: - return dequantize_row_q5_K_sycl; - case GGML_TYPE_Q6_K: - return dequantize_row_q6_K_sycl; - case GGML_TYPE_IQ1_S: - return dequantize_row_iq1_s_sycl; - case GGML_TYPE_IQ1_M: - return dequantize_row_iq1_m_sycl; - case GGML_TYPE_IQ2_XXS: - return dequantize_row_iq2_xxs_sycl; - case GGML_TYPE_IQ2_XS: - return dequantize_row_iq2_xs_sycl; - case GGML_TYPE_IQ2_S: - return dequantize_row_iq2_s_sycl; - case GGML_TYPE_IQ3_XXS: - return dequantize_row_iq3_xxs_sycl; - case GGML_TYPE_IQ3_S: - return dequantize_row_iq3_s_sycl; - case GGML_TYPE_IQ4_XS: - return dequantize_row_iq4_xs_sycl; - case GGML_TYPE_IQ4_NL: - return dequantize_row_iq4_nl_sycl; - case GGML_TYPE_F32: - return convert_unary_sycl; - default: - return nullptr; - } -} -catch (sycl::exception const &exc) { - std::cerr << exc.what() << "Exception caught at file:" << __FILE__ - << ", line:" << __LINE__ << std::endl; - std::exit(1); -} - -static to_fp32_sycl_t ggml_get_to_fp32_sycl(ggml_type type) { - switch (type) { - case GGML_TYPE_Q4_0: - return dequantize_row_q4_0_sycl; - case GGML_TYPE_Q4_1: - return dequantize_row_q4_1_sycl; - case GGML_TYPE_Q5_0: - return dequantize_block_sycl; - case GGML_TYPE_Q5_1: - return dequantize_block_sycl; - case GGML_TYPE_Q8_0: - return dequantize_block_sycl; - case GGML_TYPE_Q2_K: - return dequantize_row_q2_K_sycl; - case GGML_TYPE_Q3_K: - return dequantize_row_q3_K_sycl; - case GGML_TYPE_Q4_K: - return dequantize_row_q4_K_sycl; - case GGML_TYPE_Q5_K: - return dequantize_row_q5_K_sycl; - case GGML_TYPE_Q6_K: - return dequantize_row_q6_K_sycl; - case GGML_TYPE_IQ1_S: - return dequantize_row_iq1_s_sycl; - case GGML_TYPE_IQ1_M: - return dequantize_row_iq1_m_sycl; - case GGML_TYPE_IQ2_XXS: - return dequantize_row_iq2_xxs_sycl; - case GGML_TYPE_IQ2_XS: - return dequantize_row_iq2_xs_sycl; - case GGML_TYPE_IQ2_S: - return dequantize_row_iq2_s_sycl; - case GGML_TYPE_IQ3_XXS: - return dequantize_row_iq3_xxs_sycl; - case GGML_TYPE_IQ3_S: - return dequantize_row_iq3_s_sycl; - case GGML_TYPE_IQ4_XS: - return dequantize_row_iq4_xs_sycl; - case GGML_TYPE_IQ4_NL: - return dequantize_row_iq4_nl_sycl; - case GGML_TYPE_F16: - return convert_unary_sycl; - default: - return nullptr; - } -} - -static void dequantize_mul_mat_vec_q4_0_sycl(const void *vx, const dfloat *y, - float *dst, const int ncols, - const int nrows, - dpct::queue_ptr stream) { - GGML_ASSERT(ncols % GGML_SYCL_DMMV_X == 0); - const int block_num_y = (nrows + GGML_SYCL_MMV_Y - 1) / GGML_SYCL_MMV_Y; - // the number of rows may exceed maximum grid size in the y or z dimensions, use the x dimension instead - const sycl::range<3> block_nums(1, 1, block_num_y); - const sycl::range<3> block_dims(1, GGML_SYCL_MMV_Y, WARP_SIZE); - { - dpct::has_capability_or_fail(stream->get_device(), - {sycl::aspect::fp16}); - - stream->parallel_for( - sycl::nd_range<3>(block_nums * block_dims, block_dims), - [=](sycl::nd_item<3> item_ct1) [[intel::reqd_sub_group_size(32)]] { - dequantize_mul_mat_vec( - vx, y, dst, ncols, nrows, item_ct1); - }); - } -} - -static void dequantize_mul_mat_vec_q4_1_sycl(const void *vx, const dfloat *y, - float *dst, const int ncols, - const int nrows, - dpct::queue_ptr stream) { - GGML_ASSERT(ncols % GGML_SYCL_DMMV_X == 0); - const int block_num_y = (nrows + GGML_SYCL_MMV_Y - 1) / GGML_SYCL_MMV_Y; - const sycl::range<3> block_nums(1, 1, block_num_y); - const sycl::range<3> block_dims(1, GGML_SYCL_MMV_Y, WARP_SIZE); - { - dpct::has_capability_or_fail(stream->get_device(), - {sycl::aspect::fp16}); - - stream->parallel_for( - sycl::nd_range<3>(block_nums * block_dims, block_dims), - [=](sycl::nd_item<3> item_ct1) [[intel::reqd_sub_group_size(32)]] { - dequantize_mul_mat_vec( - vx, y, dst, ncols, nrows, item_ct1); - }); - } -} - -static void dequantize_mul_mat_vec_q5_0_sycl(const void *vx, const dfloat *y, - float *dst, const int ncols, - const int nrows, - dpct::queue_ptr stream) { - GGML_ASSERT(ncols % GGML_SYCL_DMMV_X == 0); - const int block_num_y = (nrows + GGML_SYCL_MMV_Y - 1) / GGML_SYCL_MMV_Y; - const sycl::range<3> block_nums(1, 1, block_num_y); - const sycl::range<3> block_dims(1, GGML_SYCL_MMV_Y, WARP_SIZE); - { - dpct::has_capability_or_fail(stream->get_device(), - {sycl::aspect::fp16}); - - stream->parallel_for( - sycl::nd_range<3>(block_nums * block_dims, block_dims), - [=](sycl::nd_item<3> item_ct1) [[intel::reqd_sub_group_size(32)]] { - dequantize_mul_mat_vec( - vx, y, dst, ncols, nrows, item_ct1); - }); - } -} - -static void dequantize_mul_mat_vec_q5_1_sycl(const void *vx, const dfloat *y, - float *dst, const int ncols, - const int nrows, - dpct::queue_ptr stream) { - GGML_ASSERT(ncols % GGML_SYCL_DMMV_X == 0); - const int block_num_y = (nrows + GGML_SYCL_MMV_Y - 1) / GGML_SYCL_MMV_Y; - const sycl::range<3> block_nums(1, 1, block_num_y); - const sycl::range<3> block_dims(1, GGML_SYCL_MMV_Y, WARP_SIZE); - { - dpct::has_capability_or_fail(stream->get_device(), - {sycl::aspect::fp16}); - - stream->parallel_for( - sycl::nd_range<3>(block_nums * block_dims, block_dims), - [=](sycl::nd_item<3> item_ct1) [[intel::reqd_sub_group_size(32)]] { - dequantize_mul_mat_vec( - vx, y, dst, ncols, nrows, item_ct1); - }); - } -} - -static void dequantize_mul_mat_vec_q8_0_sycl(const void *vx, const dfloat *y, - float *dst, const int ncols, - const int nrows, - dpct::queue_ptr stream) { - GGML_ASSERT(ncols % GGML_SYCL_DMMV_X == 0); - const int block_num_y = (nrows + GGML_SYCL_MMV_Y - 1) / GGML_SYCL_MMV_Y; - const sycl::range<3> block_nums(1, 1, block_num_y); - const sycl::range<3> block_dims(1, GGML_SYCL_MMV_Y, WARP_SIZE); - { - dpct::has_capability_or_fail(stream->get_device(), - {sycl::aspect::fp16}); - - stream->parallel_for( - sycl::nd_range<3>(block_nums * block_dims, block_dims), - [=](sycl::nd_item<3> item_ct1) [[intel::reqd_sub_group_size(32)]] { - dequantize_mul_mat_vec( - vx, y, dst, ncols, nrows, item_ct1); - }); - } -} - -static void dequantize_mul_mat_vec_q2_K_sycl(const void *vx, const float *y, - float *dst, const int ncols, - const int nrows, - dpct::queue_ptr stream) { - GGML_ASSERT(ncols % QK_K == 0); - const int ny = 2; // very slightly faster than 1 even when K_QUANTS_PER_ITERATION = 2 - const int block_num_y = (nrows + ny - 1) / ny; - const sycl::range<3> block_nums(1, 1, block_num_y); - const sycl::range<3> block_dims(1, ny, 32); - stream->parallel_for( - sycl::nd_range<3>(block_nums * block_dims, block_dims), - [=](sycl::nd_item<3> item_ct1) [[intel::reqd_sub_group_size(32)]] { - dequantize_mul_mat_vec_q2_k(vx, y, dst, ncols, nrows, item_ct1); - }); -} - -static void dequantize_mul_mat_vec_q3_K_sycl(const void *vx, const float *y, - float *dst, const int ncols, - const int nrows, - dpct::queue_ptr stream) { - GGML_ASSERT(ncols % QK_K == 0); - const int ny = 2 / K_QUANTS_PER_ITERATION; - const int block_num_y = (nrows + ny - 1) / ny; - const sycl::range<3> block_nums(1, 1, block_num_y); - const sycl::range<3> block_dims(1, ny, 32); - stream->parallel_for( - sycl::nd_range<3>(block_nums * block_dims, block_dims), - [=](sycl::nd_item<3> item_ct1) [[intel::reqd_sub_group_size(32)]] { - dequantize_mul_mat_vec_q3_k(vx, y, dst, ncols, nrows, item_ct1); - }); -} - -static void dequantize_mul_mat_vec_q4_K_sycl(const void *vx, const float *y, - float *dst, const int ncols, - const int nrows, - dpct::queue_ptr stream) { - GGML_ASSERT(ncols % QK_K == 0); - const int ny = 2 / K_QUANTS_PER_ITERATION; - const int block_num_y = (nrows + ny - 1) / ny; - const sycl::range<3> block_nums(1, 1, block_num_y); - const sycl::range<3> block_dims(1, ny, 32); - stream->parallel_for( - sycl::nd_range<3>(block_nums * block_dims, block_dims), - [=](sycl::nd_item<3> item_ct1) [[intel::reqd_sub_group_size(32)]] { - dequantize_mul_mat_vec_q4_k(vx, y, dst, ncols, nrows, item_ct1); - }); -} - -static void dequantize_mul_mat_vec_q5_K_sycl(const void *vx, const float *y, - float *dst, const int ncols, - const int nrows, - dpct::queue_ptr stream) { - GGML_ASSERT(ncols % QK_K == 0); - const sycl::range<3> block_dims(1, 1, 32); - stream->parallel_for( - sycl::nd_range<3>(sycl::range<3>(1, 1, nrows) * block_dims, block_dims), - [=](sycl::nd_item<3> item_ct1) [[intel::reqd_sub_group_size(32)]] { - dequantize_mul_mat_vec_q5_k(vx, y, dst, ncols, item_ct1); - }); -} - -static void dequantize_mul_mat_vec_q6_K_sycl(const void *vx, const float *y, - float *dst, const int ncols, - const int nrows, - dpct::queue_ptr stream) { - GGML_ASSERT(ncols % QK_K == 0); - const int ny = 2 / K_QUANTS_PER_ITERATION; - const int block_num_y = (nrows + ny - 1) / ny; - const sycl::range<3> block_nums(1, 1, block_num_y); - const sycl::range<3> block_dims(1, ny, 32); - stream->parallel_for( - sycl::nd_range<3>(block_nums * block_dims, block_dims), - [=](sycl::nd_item<3> item_ct1) [[intel::reqd_sub_group_size(32)]] { - dequantize_mul_mat_vec_q6_k(vx, y, dst, ncols, nrows, item_ct1); - }); -} - -static void convert_mul_mat_vec_f16_sycl(const void *vx, const dfloat *y, - float *dst, const int ncols, - const int nrows, - dpct::queue_ptr stream) { - GGML_ASSERT(ncols % GGML_SYCL_DMMV_X == 0); - const int block_num_y = (nrows + GGML_SYCL_MMV_Y - 1) / GGML_SYCL_MMV_Y; - const sycl::range<3> block_nums(1, 1, block_num_y); - const sycl::range<3> block_dims(1, GGML_SYCL_MMV_Y, WARP_SIZE); - { - dpct::has_capability_or_fail(stream->get_device(), - {sycl::aspect::fp16}); - - stream->parallel_for( - sycl::nd_range<3>(block_nums * block_dims, block_dims), - [=](sycl::nd_item<3> item_ct1) [[intel::reqd_sub_group_size(32)]] { - dequantize_mul_mat_vec<1, 1, convert_f16>(vx, y, dst, ncols, - nrows, item_ct1); - }); - } -} - - -static void mul_mat_vec_q4_0_q8_1_sycl(const void *vx, const void *vy, - float *dst, const int ncols, - const int nrows, - dpct::queue_ptr stream) { - GGML_ASSERT(ncols % QK4_0 == 0); - const int block_num_y = (nrows + GGML_SYCL_MMV_Y - 1) / GGML_SYCL_MMV_Y; - const sycl::range<3> block_nums(1, 1, block_num_y); - const sycl::range<3> block_dims(1, GGML_SYCL_MMV_Y, WARP_SIZE); - { - - stream->submit([&](sycl::handler &cgh) { - - cgh.parallel_for( - sycl::nd_range<3>(block_nums * block_dims, block_dims), - [=](sycl::nd_item<3> item_ct1) - [[intel::reqd_sub_group_size(32)]] { - mul_mat_vec_q( - vx, vy, dst, ncols, nrows, item_ct1); - }); - }); - } -} - -static void mul_mat_vec_q4_1_q8_1_sycl(const void *vx, const void *vy, - float *dst, const int ncols, - const int nrows, - dpct::queue_ptr stream) { - GGML_ASSERT(ncols % QK4_1 == 0); - const int block_num_y = (nrows + GGML_SYCL_MMV_Y - 1) / GGML_SYCL_MMV_Y; - const sycl::range<3> block_nums(1, 1, block_num_y); - const sycl::range<3> block_dims(1, GGML_SYCL_MMV_Y, WARP_SIZE); - { - - stream->submit([&](sycl::handler &cgh) { - - cgh.parallel_for( - sycl::nd_range<3>(block_nums * block_dims, block_dims), - [=](sycl::nd_item<3> item_ct1) - [[intel::reqd_sub_group_size(32)]] { - mul_mat_vec_q( - vx, vy, dst, ncols, nrows, item_ct1); - }); - }); - } -} - -static void mul_mat_vec_q5_0_q8_1_sycl(const void *vx, const void *vy, - float *dst, const int ncols, - const int nrows, - dpct::queue_ptr stream) { - GGML_ASSERT(ncols % QK5_0 == 0); - const int block_num_y = (nrows + GGML_SYCL_MMV_Y - 1) / GGML_SYCL_MMV_Y; - const sycl::range<3> block_nums(1, 1, block_num_y); - const sycl::range<3> block_dims(1, GGML_SYCL_MMV_Y, WARP_SIZE); - { - - stream->submit([&](sycl::handler &cgh) { - - cgh.parallel_for( - sycl::nd_range<3>(block_nums * block_dims, block_dims), - [=](sycl::nd_item<3> item_ct1) - [[intel::reqd_sub_group_size(32)]] { - mul_mat_vec_q( - vx, vy, dst, ncols, nrows, item_ct1); - }); - }); - } -} - -static void mul_mat_vec_q5_1_q8_1_sycl(const void *vx, const void *vy, - float *dst, const int ncols, - const int nrows, - dpct::queue_ptr stream) { - GGML_ASSERT(ncols % QK5_1 == 0); - const int block_num_y = (nrows + GGML_SYCL_MMV_Y - 1) / GGML_SYCL_MMV_Y; - const sycl::range<3> block_nums(1, 1, block_num_y); - const sycl::range<3> block_dims(1, GGML_SYCL_MMV_Y, WARP_SIZE); - { - - stream->submit([&](sycl::handler &cgh) { - - cgh.parallel_for( - sycl::nd_range<3>(block_nums * block_dims, block_dims), - [=](sycl::nd_item<3> item_ct1) - [[intel::reqd_sub_group_size(32)]] { - mul_mat_vec_q( - vx, vy, dst, ncols, nrows, item_ct1); - }); - }); - } -} - -static void mul_mat_vec_q8_0_q8_1_sycl(const void *vx, const void *vy, - float *dst, const int ncols, - const int nrows, - dpct::queue_ptr stream) { - GGML_ASSERT(ncols % QK8_0 == 0); - const int block_num_y = (nrows + GGML_SYCL_MMV_Y - 1) / GGML_SYCL_MMV_Y; - const sycl::range<3> block_nums(1, 1, block_num_y); - const sycl::range<3> block_dims(1, GGML_SYCL_MMV_Y, WARP_SIZE); - { - - stream->submit([&](sycl::handler &cgh) { - - cgh.parallel_for( - sycl::nd_range<3>(block_nums * block_dims, block_dims), - [=](sycl::nd_item<3> item_ct1) - [[intel::reqd_sub_group_size(32)]] { - mul_mat_vec_q( - vx, vy, dst, ncols, nrows, item_ct1); - }); - }); - } -} - -static void mul_mat_vec_q2_K_q8_1_sycl(const void *vx, const void *vy, - float *dst, const int ncols, - const int nrows, - dpct::queue_ptr stream) { - GGML_ASSERT(ncols % QK_K == 0); - const int block_num_y = (nrows + GGML_SYCL_MMV_Y - 1) / GGML_SYCL_MMV_Y; - const sycl::range<3> block_nums(1, 1, block_num_y); - const sycl::range<3> block_dims(1, GGML_SYCL_MMV_Y, WARP_SIZE); - { - - stream->submit([&](sycl::handler &cgh) { - - cgh.parallel_for( - sycl::nd_range<3>(block_nums * block_dims, block_dims), - [=](sycl::nd_item<3> item_ct1) - [[intel::reqd_sub_group_size(32)]] { - mul_mat_vec_q( - vx, vy, dst, ncols, nrows, item_ct1); - }); - }); - } -} - -static void mul_mat_vec_q3_K_q8_1_sycl(const void *vx, const void *vy, - float *dst, const int ncols, - const int nrows, - dpct::queue_ptr stream) { - GGML_ASSERT(ncols % QK_K == 0); - const int block_num_y = (nrows + GGML_SYCL_MMV_Y - 1) / GGML_SYCL_MMV_Y; - const sycl::range<3> block_nums(1, 1, block_num_y); - const sycl::range<3> block_dims(1, GGML_SYCL_MMV_Y, WARP_SIZE); - { - - stream->submit([&](sycl::handler &cgh) { - - cgh.parallel_for( - sycl::nd_range<3>(block_nums * block_dims, block_dims), - [=](sycl::nd_item<3> item_ct1) - [[intel::reqd_sub_group_size(32)]] { - mul_mat_vec_q( - vx, vy, dst, ncols, nrows, item_ct1); - }); - }); - } -} - -static void mul_mat_vec_q4_K_q8_1_sycl(const void *vx, const void *vy, - float *dst, const int ncols, - const int nrows, - dpct::queue_ptr stream) { - GGML_ASSERT(ncols % QK_K == 0); - const int block_num_y = (nrows + GGML_SYCL_MMV_Y - 1) / GGML_SYCL_MMV_Y; - const sycl::range<3> block_nums(1, 1, block_num_y); - const sycl::range<3> block_dims(1, GGML_SYCL_MMV_Y, WARP_SIZE); - { - - stream->submit([&](sycl::handler &cgh) { - - cgh.parallel_for( - sycl::nd_range<3>(block_nums * block_dims, block_dims), - [=](sycl::nd_item<3> item_ct1) - [[intel::reqd_sub_group_size(32)]] { - mul_mat_vec_q( - vx, vy, dst, ncols, nrows, item_ct1); - }); - }); - } -} - -static void mul_mat_vec_q5_K_q8_1_sycl(const void *vx, const void *vy, - float *dst, const int ncols, - const int nrows, - dpct::queue_ptr stream) { - GGML_ASSERT(ncols % QK_K == 0); - const int block_num_y = (nrows + GGML_SYCL_MMV_Y - 1) / GGML_SYCL_MMV_Y; - const sycl::range<3> block_nums(1, 1, block_num_y); - const sycl::range<3> block_dims(1, GGML_SYCL_MMV_Y, WARP_SIZE); - { - - stream->submit([&](sycl::handler &cgh) { - - cgh.parallel_for( - sycl::nd_range<3>(block_nums * block_dims, block_dims), - [=](sycl::nd_item<3> item_ct1) - [[intel::reqd_sub_group_size(32)]] { - mul_mat_vec_q( - vx, vy, dst, ncols, nrows, item_ct1); - }); - }); - } -} - -static void mul_mat_vec_q6_K_q8_1_sycl(const void *vx, const void *vy, - float *dst, const int ncols, - const int nrows, - dpct::queue_ptr stream) { - GGML_ASSERT(ncols % QK_K == 0); - const int block_num_y = (nrows + GGML_SYCL_MMV_Y - 1) / GGML_SYCL_MMV_Y; - const sycl::range<3> block_nums(1, 1, block_num_y); - const sycl::range<3> block_dims(1, GGML_SYCL_MMV_Y, WARP_SIZE); - { - - stream->submit([&](sycl::handler &cgh) { - - cgh.parallel_for( - sycl::nd_range<3>(block_nums * block_dims, block_dims), - [=](sycl::nd_item<3> item_ct1) - [[intel::reqd_sub_group_size(32)]] { - mul_mat_vec_q( - vx, vy, dst, ncols, nrows, item_ct1); - }); - }); - } -} - - -static void mul_mat_vec_iq2_xxs_q8_1_sycl(const void *vx, const void *vy, - float *dst, const int ncols, - const int nrows, - dpct::queue_ptr stream) { - GGML_ASSERT(ncols % QK_K == 0); - const int block_num_y = (nrows + GGML_SYCL_MMV_Y - 1) / GGML_SYCL_MMV_Y; - const sycl::range<3> block_nums(1, 1, block_num_y); - const sycl::range<3> block_dims(1, GGML_SYCL_MMV_Y, WARP_SIZE); - { - stream->submit([&](sycl::handler &cgh) { - cgh.parallel_for( - sycl::nd_range<3>(block_nums * block_dims, block_dims), - [=](sycl::nd_item<3> item_ct1) - [[intel::reqd_sub_group_size(32)]] { - mul_mat_vec_q_iq2_xxs_q8_1( - vx, vy, dst, ncols, nrows, item_ct1); - }); - }); - } -} - -static void mul_mat_vec_iq2_xs_q8_1_sycl(const void *vx, const void *vy, - float *dst, const int ncols, - const int nrows, - dpct::queue_ptr stream) { - GGML_ASSERT(ncols % QK_K == 0); - const int block_num_y = (nrows + GGML_SYCL_MMV_Y - 1) / GGML_SYCL_MMV_Y; - const sycl::range<3> block_nums(1, 1, block_num_y); - const sycl::range<3> block_dims(1, GGML_SYCL_MMV_Y, WARP_SIZE); - { - - stream->submit([&](sycl::handler &cgh) { - auto iq2xs_grid_ptr_ct1 = &iq2xs_grid[0]; - auto ksigns64_ptr_ct1 = &ksigns64[0]; - - cgh.parallel_for( - sycl::nd_range<3>(block_nums * block_dims, block_dims), - [=](sycl::nd_item<3> item_ct1) - [[intel::reqd_sub_group_size(32)]] { - mul_mat_vec_q_iq2_xs_q8_1( - vx, vy, dst, ncols, nrows, item_ct1); - }); - }); - } -} - -static void mul_mat_vec_iq2_s_q8_1_sycl(const void *vx, const void *vy, - float *dst, const int ncols, - const int nrows, - dpct::queue_ptr stream) { - GGML_ASSERT(ncols % QK_K == 0); - const int block_num_y = (nrows + GGML_SYCL_MMV_Y - 1) / GGML_SYCL_MMV_Y; - const sycl::range<3> block_nums(1, 1, block_num_y); - const sycl::range<3> block_dims(1, GGML_SYCL_MMV_Y, WARP_SIZE); - { - - stream->submit([&](sycl::handler &cgh) { - auto iq2xs_grid_ptr_ct1 = &iq2xs_grid[0]; - auto ksigns64_ptr_ct1 = &ksigns64[0]; - - cgh.parallel_for( - sycl::nd_range<3>(block_nums * block_dims, block_dims), - [=](sycl::nd_item<3> item_ct1) - [[intel::reqd_sub_group_size(32)]] { - mul_mat_vec_q_iq2_s_q8_1( - vx, vy, dst, ncols, nrows, item_ct1); - }); - }); - } -} - -static void mul_mat_vec_iq3_xxs_q8_1_sycl(const void *vx, const void *vy, - float *dst, const int ncols, - const int nrows, - dpct::queue_ptr stream) { - GGML_ASSERT(ncols % QK_K == 0); - const int block_num_y = (nrows + GGML_SYCL_MMV_Y - 1) / GGML_SYCL_MMV_Y; - const sycl::range<3> block_nums(1, 1, block_num_y); - const sycl::range<3> block_dims(1, GGML_SYCL_MMV_Y, WARP_SIZE); - { - - stream->submit([&](sycl::handler &cgh) { - auto iq3xxs_grid_ptr_ct1 = &iq3xxs_grid[0]; - auto ksigns64_ptr_ct1 = &ksigns64[0]; - - cgh.parallel_for( - sycl::nd_range<3>(block_nums * block_dims, block_dims), - [=](sycl::nd_item<3> item_ct1) - [[intel::reqd_sub_group_size(32)]] { - mul_mat_vec_q_iq3_xxs_q8_1( - vx, vy, dst, ncols, nrows, item_ct1); - }); - }); - } -} - -static void mul_mat_vec_iq3_s_q8_1_sycl(const void *vx, const void *vy, - float *dst, const int ncols, - const int nrows, - dpct::queue_ptr stream) { - GGML_ASSERT(ncols % QK_K == 0); - const int block_num_y = (nrows + GGML_SYCL_MMV_Y - 1) / GGML_SYCL_MMV_Y; - const sycl::range<3> block_nums(1, 1, block_num_y); - const sycl::range<3> block_dims(1, GGML_SYCL_MMV_Y, WARP_SIZE); - { - - stream->submit([&](sycl::handler &cgh) { - auto iq3s_grid_ptr_ct1 = &iq3s_grid[0]; - - cgh.parallel_for( - sycl::nd_range<3>(block_nums * block_dims, block_dims), - [=](sycl::nd_item<3> item_ct1) - [[intel::reqd_sub_group_size(32)]] { - mul_mat_vec_q_iq3_s_q8_1( - vx, vy, dst, ncols, nrows, item_ct1); - }); - }); - } -} - -static void mul_mat_vec_iq1_s_q8_1_sycl(const void *vx, const void *vy, - float *dst, const int ncols, - const int nrows, - dpct::queue_ptr stream) { - GGML_ASSERT(ncols % QK_K == 0); - const int block_num_y = (nrows + GGML_SYCL_MMV_Y - 1) / GGML_SYCL_MMV_Y; - const sycl::range<3> block_nums(1, 1, block_num_y); - const sycl::range<3> block_dims(1, GGML_SYCL_MMV_Y, WARP_SIZE); - { - - stream->submit([&](sycl::handler &cgh) { - auto iq1s_grid_ptr_ct1 = &iq1s_grid_gpu[0]; - auto ksigns64_ptr_ct1 = &ksigns64[0]; - - cgh.parallel_for( - sycl::nd_range<3>(block_nums * block_dims, block_dims), - [=](sycl::nd_item<3> item_ct1) - [[intel::reqd_sub_group_size(32)]] { - mul_mat_vec_q_iq1_s_q8_1( - vx, vy, dst, ncols, nrows, item_ct1); - }); - }); - } -} - -static void mul_mat_vec_iq1_m_q8_1_sycl(const void *vx, const void *vy, - float *dst, const int ncols, - const int nrows, - dpct::queue_ptr stream) { - GGML_ASSERT(ncols % QK_K == 0); - const int block_num_y = (nrows + GGML_SYCL_MMV_Y - 1) / GGML_SYCL_MMV_Y; - const sycl::range<3> block_nums(1, 1, block_num_y); - const sycl::range<3> block_dims(1, GGML_SYCL_MMV_Y, WARP_SIZE); - { - stream->submit([&](sycl::handler &cgh) { - cgh.parallel_for( - sycl::nd_range<3>(block_nums * block_dims, block_dims), - [=](sycl::nd_item<3> item_ct1) - [[intel::reqd_sub_group_size(32)]] { - mul_mat_vec_q_iq1_m_q8_1( - vx, vy, dst, ncols, nrows, item_ct1); - }); - }); - } -} - -static void mul_mat_vec_iq4_nl_q8_1_sycl(const void *vx, const void *vy, - float *dst, const int ncols, - const int nrows, - dpct::queue_ptr stream) { - GGML_ASSERT(ncols % QK4_NL == 0); - const int block_num_y = (nrows + GGML_SYCL_MMV_Y - 1) / GGML_SYCL_MMV_Y; - const sycl::range<3> block_nums(1, 1, block_num_y); - const sycl::range<3> block_dims(1, GGML_SYCL_MMV_Y, WARP_SIZE); - { - - stream->submit([&](sycl::handler &cgh) { - cgh.parallel_for( - sycl::nd_range<3>(block_nums * block_dims, block_dims), - [=](sycl::nd_item<3> item_ct1) - [[intel::reqd_sub_group_size(32)]] { - mul_mat_vec_q_iq4_nl_q8_1( - vx, vy, dst, ncols, nrows, item_ct1); - }); - }); - } -} - -static void mul_mat_vec_iq4_xs_q8_1_sycl(const void *vx, const void *vy, - float *dst, const int ncols, - const int nrows, - dpct::queue_ptr stream) { - GGML_ASSERT(ncols % QK_K == 0); - const int block_num_y = (nrows + GGML_SYCL_MMV_Y - 1) / GGML_SYCL_MMV_Y; - const sycl::range<3> block_nums(1, 1, block_num_y); - const sycl::range<3> block_dims(1, GGML_SYCL_MMV_Y, WARP_SIZE); - { - - stream->submit([&](sycl::handler &cgh) { - cgh.parallel_for( - sycl::nd_range<3>(block_nums * block_dims, block_dims), - [=](sycl::nd_item<3> item_ct1) - [[intel::reqd_sub_group_size(32)]] { - mul_mat_vec_q_iq4_xs_q8_1( - vx, vy, dst, ncols, nrows, item_ct1); - }); - }); - } -} - -static void ggml_mul_mat_q4_0_q8_1_sycl(const void *vx, const void *vy, - float *dst, const int ncols_x, - const int nrows_x, const int ncols_y, - const int nrows_y, const int nrows_dst, - dpct::queue_ptr stream) try { - - int id; - SYCL_CHECK( - CHECK_TRY_ERROR(id = get_current_device_id())); - const int compute_capability = g_device_caps[id].cc; - - int mmq_x, mmq_y, nwarps; - if (compute_capability >= VER_GEN13) { - mmq_x = MMQ_X_Q4_0_RDNA2; - mmq_y = MMQ_Y_Q4_0_RDNA2; - nwarps = NWARPS_Q4_0_RDNA2; - } else if (compute_capability >= VER_GEN12) { - mmq_x = MMQ_X_Q4_0_RDNA1; - mmq_y = MMQ_Y_Q4_0_RDNA1; - nwarps = NWARPS_Q4_0_RDNA1; - } else if (compute_capability >= VER_GEN9) { - mmq_x = MMQ_X_Q4_0_AMPERE; - mmq_y = MMQ_Y_Q4_0_AMPERE; - nwarps = NWARPS_Q4_0_AMPERE; - } else if (compute_capability >= VER_4VEC) { - mmq_x = MMQ_X_Q4_0_PASCAL; - mmq_y = MMQ_Y_Q4_0_PASCAL; - nwarps = NWARPS_Q4_0_PASCAL; - } else { - GGML_ASSERT(false); - } - - const int block_num_x = (nrows_x + mmq_y - 1) / mmq_y; - const int block_num_y = (ncols_y + mmq_x - 1) / mmq_x; - const sycl::range<3> block_nums(1, block_num_y, block_num_x); - const sycl::range<3> block_dims(1, nwarps, WARP_SIZE); - - if (nrows_x % mmq_y == 0) { - const bool need_check = false; - /* - DPCT1049:20: The work-group size passed to the SYCL kernel may exceed - the limit. To get the device limit, query - info::device::max_work_group_size. Adjust the work-group size if needed. - */ - { - dpct::has_capability_or_fail(stream->get_device(), - {sycl::aspect::fp16}); - - stream->submit([&](sycl::handler &cgh) { - sycl::local_accessor tile_x_qs_q4_0_acc_ct1( - sycl::range<1>(mmq_y * (WARP_SIZE) + mmq_y), cgh); - sycl::local_accessor tile_x_d_q4_0_acc_ct1( - sycl::range<1>(mmq_y * (WARP_SIZE / QI4_0) + mmq_y / QI4_0), - cgh); - sycl::local_accessor tile_y_qs_acc_ct1( - sycl::range<1>(mmq_x * WARP_SIZE), cgh); - sycl::local_accessor tile_y_ds_acc_ct1( - sycl::range<1>(mmq_x * WARP_SIZE / QI8_1), cgh); - - cgh.parallel_for( - sycl::nd_range<3>(block_nums * block_dims, block_dims), - [=](sycl::nd_item<3> item_ct1) { - mul_mat_q4_0( - vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, - nrows_dst, item_ct1, - tile_x_qs_q4_0_acc_ct1.get_pointer(), - tile_x_d_q4_0_acc_ct1.get_pointer(), - tile_y_qs_acc_ct1.get_pointer(), - tile_y_ds_acc_ct1.get_pointer()); - }); - }); - } - } else { - const bool need_check = true; - /* - DPCT1049:21: The work-group size passed to the SYCL kernel may exceed - the limit. To get the device limit, query - info::device::max_work_group_size. Adjust the work-group size if needed. - */ - { - dpct::has_capability_or_fail(stream->get_device(), - {sycl::aspect::fp16}); - - stream->submit([&](sycl::handler &cgh) { - sycl::local_accessor tile_x_qs_q4_0_acc_ct1( - sycl::range<1>(mmq_y * (WARP_SIZE) + mmq_y), cgh); - sycl::local_accessor tile_x_d_q4_0_acc_ct1( - sycl::range<1>(mmq_y * (WARP_SIZE / QI4_0) + mmq_y / QI4_0), - cgh); - sycl::local_accessor tile_y_qs_acc_ct1( - sycl::range<1>(mmq_x * WARP_SIZE), cgh); - sycl::local_accessor tile_y_ds_acc_ct1( - sycl::range<1>(mmq_x * WARP_SIZE / QI8_1), cgh); - - cgh.parallel_for( - sycl::nd_range<3>(block_nums * block_dims, block_dims), - [=](sycl::nd_item<3> item_ct1) { - mul_mat_q4_0( - vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, - nrows_dst, item_ct1, - tile_x_qs_q4_0_acc_ct1.get_pointer(), - tile_x_d_q4_0_acc_ct1.get_pointer(), - tile_y_qs_acc_ct1.get_pointer(), - tile_y_ds_acc_ct1.get_pointer()); - }); - }); - } - } -} -catch (sycl::exception const &exc) { - std::cerr << exc.what() << "Exception caught at file:" << __FILE__ - << ", line:" << __LINE__ << std::endl; - std::exit(1); -} - -static void ggml_mul_mat_q4_1_q8_1_sycl(const void *vx, const void *vy, - float *dst, const int ncols_x, - const int nrows_x, const int ncols_y, - const int nrows_y, const int nrows_dst, - dpct::queue_ptr stream) try { - - int id; - SYCL_CHECK( - CHECK_TRY_ERROR(id = get_current_device_id())); - const int compute_capability = g_device_caps[id].cc; - - int mmq_x, mmq_y, nwarps; - if (compute_capability >= VER_GEN13) { - mmq_x = MMQ_X_Q4_1_RDNA2; - mmq_y = MMQ_Y_Q4_1_RDNA2; - nwarps = NWARPS_Q4_1_RDNA2; - } else if (compute_capability >= VER_GEN12) { - mmq_x = MMQ_X_Q4_1_RDNA1; - mmq_y = MMQ_Y_Q4_1_RDNA1; - nwarps = NWARPS_Q4_1_RDNA1; - } else if (compute_capability >= VER_GEN9) { - mmq_x = MMQ_X_Q4_1_AMPERE; - mmq_y = MMQ_Y_Q4_1_AMPERE; - nwarps = NWARPS_Q4_1_AMPERE; - } else if (compute_capability >= VER_4VEC) { - mmq_x = MMQ_X_Q4_1_PASCAL; - mmq_y = MMQ_Y_Q4_1_PASCAL; - nwarps = NWARPS_Q4_1_PASCAL; - } else { - GGML_ASSERT(false); - } - - const int block_num_x = (nrows_x + mmq_y - 1) / mmq_y; - const int block_num_y = (ncols_y + mmq_x - 1) / mmq_x; - const sycl::range<3> block_nums(1, block_num_y, block_num_x); - const sycl::range<3> block_dims(1, nwarps, WARP_SIZE); - - if (nrows_x % mmq_y == 0) { - const bool need_check = false; - /* - DPCT1049:22: The work-group size passed to the SYCL kernel may exceed - the limit. To get the device limit, query - info::device::max_work_group_size. Adjust the work-group size if needed. - */ - { - dpct::has_capability_or_fail(stream->get_device(), - {sycl::aspect::fp16}); - - stream->submit([&](sycl::handler &cgh) { - sycl::local_accessor tile_x_qs_q4_1_acc_ct1( - sycl::range<1>(mmq_y * (WARP_SIZE) + +mmq_y), cgh); - sycl::local_accessor tile_x_dm_q4_1_acc_ct1( - sycl::range<1>(mmq_y * (WARP_SIZE / QI4_1) + mmq_y / QI4_1), - cgh); - sycl::local_accessor tile_y_qs_acc_ct1( - sycl::range<1>(mmq_x * WARP_SIZE), cgh); - sycl::local_accessor tile_y_ds_acc_ct1( - sycl::range<1>(mmq_x * WARP_SIZE / QI8_1), cgh); - - cgh.parallel_for( - sycl::nd_range<3>(block_nums * block_dims, block_dims), - [=](sycl::nd_item<3> item_ct1) { - mul_mat_q4_1( - vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, - nrows_dst, item_ct1, - tile_x_qs_q4_1_acc_ct1.get_pointer(), - tile_x_dm_q4_1_acc_ct1.get_pointer(), - tile_y_qs_acc_ct1.get_pointer(), - tile_y_ds_acc_ct1.get_pointer()); - }); - }); - } - } else { - const bool need_check = true; - /* - DPCT1049:23: The work-group size passed to the SYCL kernel may exceed - the limit. To get the device limit, query - info::device::max_work_group_size. Adjust the work-group size if needed. - */ - { - dpct::has_capability_or_fail(stream->get_device(), - {sycl::aspect::fp16}); - - stream->submit([&](sycl::handler &cgh) { - sycl::local_accessor tile_x_qs_q4_1_acc_ct1( - sycl::range<1>(mmq_y * (WARP_SIZE) + +mmq_y), cgh); - sycl::local_accessor tile_x_dm_q4_1_acc_ct1( - sycl::range<1>(mmq_y * (WARP_SIZE / QI4_1) + mmq_y / QI4_1), - cgh); - sycl::local_accessor tile_y_qs_acc_ct1( - sycl::range<1>(mmq_x * WARP_SIZE), cgh); - sycl::local_accessor tile_y_ds_acc_ct1( - sycl::range<1>(mmq_x * WARP_SIZE / QI8_1), cgh); - - cgh.parallel_for( - sycl::nd_range<3>(block_nums * block_dims, block_dims), - [=](sycl::nd_item<3> item_ct1) { - mul_mat_q4_1( - vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, - nrows_dst, item_ct1, - tile_x_qs_q4_1_acc_ct1.get_pointer(), - tile_x_dm_q4_1_acc_ct1.get_pointer(), - tile_y_qs_acc_ct1.get_pointer(), - tile_y_ds_acc_ct1.get_pointer()); - }); - }); - } - } -} -catch (sycl::exception const &exc) { - std::cerr << exc.what() << "Exception caught at file:" << __FILE__ - << ", line:" << __LINE__ << std::endl; - std::exit(1); -} - -static void ggml_mul_mat_q5_0_q8_1_sycl(const void *vx, const void *vy, - float *dst, const int ncols_x, - const int nrows_x, const int ncols_y, - const int nrows_y, const int nrows_dst, - dpct::queue_ptr stream) try { - - int id; - SYCL_CHECK( - CHECK_TRY_ERROR(id = get_current_device_id())); - const int compute_capability = g_device_caps[id].cc; - - int mmq_x, mmq_y, nwarps; - if (compute_capability >= VER_GEN13) { - mmq_x = MMQ_X_Q5_0_RDNA2; - mmq_y = MMQ_Y_Q5_0_RDNA2; - nwarps = NWARPS_Q5_0_RDNA2; - } else if (compute_capability >= VER_GEN12) { - mmq_x = MMQ_X_Q5_0_RDNA1; - mmq_y = MMQ_Y_Q5_0_RDNA1; - nwarps = NWARPS_Q5_0_RDNA1; - } else if (compute_capability >= VER_GEN9) { - mmq_x = MMQ_X_Q5_0_AMPERE; - mmq_y = MMQ_Y_Q5_0_AMPERE; - nwarps = NWARPS_Q5_0_AMPERE; - } else if (compute_capability >= VER_4VEC) { - mmq_x = MMQ_X_Q5_0_PASCAL; - mmq_y = MMQ_Y_Q5_0_PASCAL; - nwarps = NWARPS_Q5_0_PASCAL; - } else { - GGML_ASSERT(false); - } - - const int block_num_x = (nrows_x + mmq_y - 1) / mmq_y; - const int block_num_y = (ncols_y + mmq_x - 1) / mmq_x; - const sycl::range<3> block_nums(1, block_num_y, block_num_x); - const sycl::range<3> block_dims(1, nwarps, WARP_SIZE); - - if (nrows_x % mmq_y == 0) { - const bool need_check = false; - /* - DPCT1049:24: The work-group size passed to the SYCL kernel may exceed - the limit. To get the device limit, query - info::device::max_work_group_size. Adjust the work-group size if needed. - */ - { - dpct::has_capability_or_fail(stream->get_device(), - {sycl::aspect::fp16}); - - stream->submit([&](sycl::handler &cgh) { - sycl::local_accessor tile_x_ql_q5_0_acc_ct1( - sycl::range<1>(mmq_y * (2 * WARP_SIZE) + mmq_y), cgh); - sycl::local_accessor tile_x_d_q5_0_acc_ct1( - sycl::range<1>(mmq_y * (WARP_SIZE / QI5_0) + mmq_y / QI5_0), - cgh); - sycl::local_accessor tile_y_qs_acc_ct1( - sycl::range<1>(mmq_x * WARP_SIZE), cgh); - sycl::local_accessor tile_y_ds_acc_ct1( - sycl::range<1>(mmq_x * WARP_SIZE / QI8_1), cgh); - - cgh.parallel_for( - sycl::nd_range<3>(block_nums * block_dims, block_dims), - [=](sycl::nd_item<3> item_ct1) { - mul_mat_q5_0( - vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, - nrows_dst, item_ct1, - tile_x_ql_q5_0_acc_ct1.get_pointer(), - tile_x_d_q5_0_acc_ct1.get_pointer(), - tile_y_qs_acc_ct1.get_pointer(), - tile_y_ds_acc_ct1.get_pointer()); - }); - }); - } - } else { - const bool need_check = true; - /* - DPCT1049:25: The work-group size passed to the SYCL kernel may exceed - the limit. To get the device limit, query - info::device::max_work_group_size. Adjust the work-group size if needed. - */ - { - dpct::has_capability_or_fail(stream->get_device(), - {sycl::aspect::fp16}); - - stream->submit([&](sycl::handler &cgh) { - sycl::local_accessor tile_x_ql_q5_0_acc_ct1( - sycl::range<1>(mmq_y * (2 * WARP_SIZE) + mmq_y), cgh); - sycl::local_accessor tile_x_d_q5_0_acc_ct1( - sycl::range<1>(mmq_y * (WARP_SIZE / QI5_0) + mmq_y / QI5_0), - cgh); - sycl::local_accessor tile_y_qs_acc_ct1( - sycl::range<1>(mmq_x * WARP_SIZE), cgh); - sycl::local_accessor tile_y_ds_acc_ct1( - sycl::range<1>(mmq_x * WARP_SIZE / QI8_1), cgh); - - cgh.parallel_for( - sycl::nd_range<3>(block_nums * block_dims, block_dims), - [=](sycl::nd_item<3> item_ct1) { - mul_mat_q5_0( - vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, - nrows_dst, item_ct1, - tile_x_ql_q5_0_acc_ct1.get_pointer(), - tile_x_d_q5_0_acc_ct1.get_pointer(), - tile_y_qs_acc_ct1.get_pointer(), - tile_y_ds_acc_ct1.get_pointer()); - }); - }); - } - } -} -catch (sycl::exception const &exc) { - std::cerr << exc.what() << "Exception caught at file:" << __FILE__ - << ", line:" << __LINE__ << std::endl; - std::exit(1); -} - -static void ggml_mul_mat_q5_1_q8_1_sycl(const void *vx, const void *vy, - float *dst, const int ncols_x, - const int nrows_x, const int ncols_y, - const int nrows_y, const int nrows_dst, - dpct::queue_ptr stream) try { - - int id; - SYCL_CHECK( - CHECK_TRY_ERROR(id = get_current_device_id())); - const int compute_capability = g_device_caps[id].cc; - - int mmq_x, mmq_y, nwarps; - if (compute_capability >= VER_GEN13) { - mmq_x = MMQ_X_Q5_1_RDNA2; - mmq_y = MMQ_Y_Q5_1_RDNA2; - nwarps = NWARPS_Q5_1_RDNA2; - } else if (compute_capability >= VER_GEN12) { - mmq_x = MMQ_X_Q5_1_RDNA1; - mmq_y = MMQ_Y_Q5_1_RDNA1; - nwarps = NWARPS_Q5_1_RDNA1; - } else if (compute_capability >= VER_GEN9) { - mmq_x = MMQ_X_Q5_1_AMPERE; - mmq_y = MMQ_Y_Q5_1_AMPERE; - nwarps = NWARPS_Q5_1_AMPERE; - } else if (compute_capability >= VER_4VEC) { - mmq_x = MMQ_X_Q5_1_PASCAL; - mmq_y = MMQ_Y_Q5_1_PASCAL; - nwarps = NWARPS_Q5_1_PASCAL; - } else { - GGML_ASSERT(false); - } - - const int block_num_x = (nrows_x + mmq_y - 1) / mmq_y; - const int block_num_y = (ncols_y + mmq_x - 1) / mmq_x; - const sycl::range<3> block_nums(1, block_num_y, block_num_x); - const sycl::range<3> block_dims(1, nwarps, WARP_SIZE); - - if (nrows_x % mmq_y == 0) { - const bool need_check = false; - /* - DPCT1049:26: The work-group size passed to the SYCL kernel may exceed - the limit. To get the device limit, query - info::device::max_work_group_size. Adjust the work-group size if needed. - */ - { - dpct::has_capability_or_fail(stream->get_device(), - {sycl::aspect::fp16}); - - stream->submit([&](sycl::handler &cgh) { - sycl::local_accessor tile_x_ql_q5_1_acc_ct1( - sycl::range<1>(mmq_y * (2 * WARP_SIZE) + mmq_y), cgh); - sycl::local_accessor tile_x_dm_q5_1_acc_ct1( - sycl::range<1>(mmq_y * (WARP_SIZE / QI5_1) + mmq_y / QI5_1), - cgh); - sycl::local_accessor tile_y_qs_acc_ct1( - sycl::range<1>(mmq_x * WARP_SIZE), cgh); - sycl::local_accessor tile_y_ds_acc_ct1( - sycl::range<1>(mmq_x * WARP_SIZE / QI8_1), cgh); - - cgh.parallel_for( - sycl::nd_range<3>(block_nums * block_dims, block_dims), - [=](sycl::nd_item<3> item_ct1) { - mul_mat_q5_1( - vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, - nrows_dst, item_ct1, - tile_x_ql_q5_1_acc_ct1.get_pointer(), - tile_x_dm_q5_1_acc_ct1.get_pointer(), - tile_y_qs_acc_ct1.get_pointer(), - tile_y_ds_acc_ct1.get_pointer()); - }); - }); - } - } else { - const bool need_check = true; - /* - DPCT1049:27: The work-group size passed to the SYCL kernel may exceed - the limit. To get the device limit, query - info::device::max_work_group_size. Adjust the work-group size if needed. - */ - { - dpct::has_capability_or_fail(stream->get_device(), - {sycl::aspect::fp16}); - - stream->submit([&](sycl::handler &cgh) { - sycl::local_accessor tile_x_ql_q5_1_acc_ct1( - sycl::range<1>(mmq_y * (2 * WARP_SIZE) + mmq_y), cgh); - sycl::local_accessor tile_x_dm_q5_1_acc_ct1( - sycl::range<1>(mmq_y * (WARP_SIZE / QI5_1) + mmq_y / QI5_1), - cgh); - sycl::local_accessor tile_y_qs_acc_ct1( - sycl::range<1>(mmq_x * WARP_SIZE), cgh); - sycl::local_accessor tile_y_ds_acc_ct1( - sycl::range<1>(mmq_x * WARP_SIZE / QI8_1), cgh); - - cgh.parallel_for( - sycl::nd_range<3>(block_nums * block_dims, block_dims), - [=](sycl::nd_item<3> item_ct1) { - mul_mat_q5_1( - vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, - nrows_dst, item_ct1, - tile_x_ql_q5_1_acc_ct1.get_pointer(), - tile_x_dm_q5_1_acc_ct1.get_pointer(), - tile_y_qs_acc_ct1.get_pointer(), - tile_y_ds_acc_ct1.get_pointer()); - }); - }); - } - } -} -catch (sycl::exception const &exc) { - std::cerr << exc.what() << "Exception caught at file:" << __FILE__ - << ", line:" << __LINE__ << std::endl; - std::exit(1); -} - -static void ggml_mul_mat_q8_0_q8_1_sycl(const void *vx, const void *vy, - float *dst, const int ncols_x, - const int nrows_x, const int ncols_y, - const int nrows_y, const int nrows_dst, - dpct::queue_ptr stream) try { - - int id; - SYCL_CHECK( - CHECK_TRY_ERROR(id = get_current_device_id())); - const int compute_capability = g_device_caps[id].cc; - - int mmq_x, mmq_y, nwarps; - if (compute_capability >= VER_GEN13) { - mmq_x = MMQ_X_Q8_0_RDNA2; - mmq_y = MMQ_Y_Q8_0_RDNA2; - nwarps = NWARPS_Q8_0_RDNA2; - } else if (compute_capability >= VER_GEN12) { - mmq_x = MMQ_X_Q8_0_RDNA1; - mmq_y = MMQ_Y_Q8_0_RDNA1; - nwarps = NWARPS_Q8_0_RDNA1; - } else if (compute_capability >= VER_GEN9) { - mmq_x = MMQ_X_Q8_0_AMPERE; - mmq_y = MMQ_Y_Q8_0_AMPERE; - nwarps = NWARPS_Q8_0_AMPERE; - } else if (compute_capability >= VER_4VEC) { - mmq_x = MMQ_X_Q8_0_PASCAL; - mmq_y = MMQ_Y_Q8_0_PASCAL; - nwarps = NWARPS_Q8_0_PASCAL; - } else { - GGML_ASSERT(false); - } - - const int block_num_x = (nrows_x + mmq_y - 1) / mmq_y; - const int block_num_y = (ncols_y + mmq_x - 1) / mmq_x; - const sycl::range<3> block_nums(1, block_num_y, block_num_x); - const sycl::range<3> block_dims(1, nwarps, WARP_SIZE); - - if (nrows_x % mmq_y == 0) { - const bool need_check = false; - /* - DPCT1049:28: The work-group size passed to the SYCL kernel may exceed - the limit. To get the device limit, query - info::device::max_work_group_size. Adjust the work-group size if needed. - */ - { - dpct::has_capability_or_fail(stream->get_device(), - {sycl::aspect::fp16}); - - stream->submit([&](sycl::handler &cgh) { - sycl::local_accessor tile_x_qs_q8_0_acc_ct1( - sycl::range<1>(mmq_y * (WARP_SIZE) + mmq_y), cgh); - sycl::local_accessor tile_x_d_q8_0_acc_ct1( - sycl::range<1>(mmq_y * (WARP_SIZE / QI8_0) + mmq_y / QI8_0), - cgh); - sycl::local_accessor tile_y_qs_acc_ct1( - sycl::range<1>(mmq_x * WARP_SIZE), cgh); - sycl::local_accessor tile_y_ds_acc_ct1( - sycl::range<1>(mmq_x * WARP_SIZE / QI8_1), cgh); - - cgh.parallel_for( - sycl::nd_range<3>(block_nums * block_dims, block_dims), - [=](sycl::nd_item<3> item_ct1) { - mul_mat_q8_0( - vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, - nrows_dst, item_ct1, - tile_x_qs_q8_0_acc_ct1.get_pointer(), - tile_x_d_q8_0_acc_ct1.get_pointer(), - tile_y_qs_acc_ct1.get_pointer(), - tile_y_ds_acc_ct1.get_pointer()); - }); - }); - } - } else { - const bool need_check = true; - /* - DPCT1049:29: The work-group size passed to the SYCL kernel may exceed - the limit. To get the device limit, query - info::device::max_work_group_size. Adjust the work-group size if needed. - */ - { - dpct::has_capability_or_fail(stream->get_device(), - {sycl::aspect::fp16}); - - stream->submit([&](sycl::handler &cgh) { - sycl::local_accessor tile_x_qs_q8_0_acc_ct1( - sycl::range<1>(mmq_y * (WARP_SIZE) + mmq_y), cgh); - sycl::local_accessor tile_x_d_q8_0_acc_ct1( - sycl::range<1>(mmq_y * (WARP_SIZE / QI8_0) + mmq_y / QI8_0), - cgh); - sycl::local_accessor tile_y_qs_acc_ct1( - sycl::range<1>(mmq_x * WARP_SIZE), cgh); - sycl::local_accessor tile_y_ds_acc_ct1( - sycl::range<1>(mmq_x * WARP_SIZE / QI8_1), cgh); - - cgh.parallel_for( - sycl::nd_range<3>(block_nums * block_dims, block_dims), - [=](sycl::nd_item<3> item_ct1) { - mul_mat_q8_0( - vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, - nrows_dst, item_ct1, - tile_x_qs_q8_0_acc_ct1.get_pointer(), - tile_x_d_q8_0_acc_ct1.get_pointer(), - tile_y_qs_acc_ct1.get_pointer(), - tile_y_ds_acc_ct1.get_pointer()); - }); - }); - } - } -} -catch (sycl::exception const &exc) { - std::cerr << exc.what() << "Exception caught at file:" << __FILE__ - << ", line:" << __LINE__ << std::endl; - std::exit(1); -} - -static void ggml_mul_mat_q2_K_q8_1_sycl(const void *vx, const void *vy, - float *dst, const int ncols_x, - const int nrows_x, const int ncols_y, - const int nrows_y, const int nrows_dst, - dpct::queue_ptr stream) try { - - int id; - SYCL_CHECK( - CHECK_TRY_ERROR(id = get_current_device_id())); - const int compute_capability = g_device_caps[id].cc; - - int mmq_x, mmq_y, nwarps; - if (compute_capability >= VER_GEN13) { - mmq_x = MMQ_X_Q2_K_RDNA2; - mmq_y = MMQ_Y_Q2_K_RDNA2; - nwarps = NWARPS_Q2_K_RDNA2; - } else if (compute_capability >= VER_GEN12) { - mmq_x = MMQ_X_Q2_K_RDNA1; - mmq_y = MMQ_Y_Q2_K_RDNA1; - nwarps = NWARPS_Q2_K_RDNA1; - } else if (compute_capability >= VER_GEN9) { - mmq_x = MMQ_X_Q2_K_AMPERE; - mmq_y = MMQ_Y_Q2_K_AMPERE; - nwarps = NWARPS_Q2_K_AMPERE; - } else if (compute_capability >= VER_4VEC) { - mmq_x = MMQ_X_Q2_K_PASCAL; - mmq_y = MMQ_Y_Q2_K_PASCAL; - nwarps = NWARPS_Q2_K_PASCAL; - } else { - GGML_ASSERT(false); - } - - const int block_num_x = (nrows_x + mmq_y - 1) / mmq_y; - const int block_num_y = (ncols_y + mmq_x - 1) / mmq_x; - const sycl::range<3> block_nums(1, block_num_y, block_num_x); - const sycl::range<3> block_dims(1, nwarps, WARP_SIZE); - - if (nrows_x % mmq_y == 0) { - const bool need_check = false; - /* - DPCT1049:30: The work-group size passed to the SYCL kernel may exceed - the limit. To get the device limit, query - info::device::max_work_group_size. Adjust the work-group size if needed. - */ - { - dpct::has_capability_or_fail(stream->get_device(), - {sycl::aspect::fp16}); - - stream->submit([&](sycl::handler &cgh) { - sycl::local_accessor tile_x_ql_q2_K_acc_ct1( - sycl::range<1>(mmq_y * (WARP_SIZE) + mmq_y), cgh); - sycl::local_accessor tile_x_dm_q2_K_acc_ct1( - sycl::range<1>(mmq_y * (WARP_SIZE / QI2_K) + mmq_y / QI2_K), - cgh); - sycl::local_accessor tile_x_sc_q2_K_acc_ct1( - sycl::range<1>(mmq_y * (WARP_SIZE / 4) + mmq_y / 4), cgh); - sycl::local_accessor tile_y_qs_acc_ct1( - sycl::range<1>(mmq_x * WARP_SIZE), cgh); - sycl::local_accessor tile_y_ds_acc_ct1( - sycl::range<1>(mmq_x * WARP_SIZE / QI8_1), cgh); - - cgh.parallel_for( - sycl::nd_range<3>(block_nums * block_dims, block_dims), - [=](sycl::nd_item<3> item_ct1) { - mul_mat_q2_K( - vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, - nrows_dst, item_ct1, - tile_x_ql_q2_K_acc_ct1.get_pointer(), - tile_x_dm_q2_K_acc_ct1.get_pointer(), - tile_x_sc_q2_K_acc_ct1.get_pointer(), - tile_y_qs_acc_ct1.get_pointer(), - tile_y_ds_acc_ct1.get_pointer()); - }); - }); - } - } else { - const bool need_check = true; - /* - DPCT1049:31: The work-group size passed to the SYCL kernel may exceed - the limit. To get the device limit, query - info::device::max_work_group_size. Adjust the work-group size if needed. - */ - { - dpct::has_capability_or_fail(stream->get_device(), - {sycl::aspect::fp16}); - - stream->submit([&](sycl::handler &cgh) { - sycl::local_accessor tile_x_ql_q2_K_acc_ct1( - sycl::range<1>(mmq_y * (WARP_SIZE) + mmq_y), cgh); - sycl::local_accessor tile_x_dm_q2_K_acc_ct1( - sycl::range<1>(mmq_y * (WARP_SIZE / QI2_K) + mmq_y / QI2_K), - cgh); - sycl::local_accessor tile_x_sc_q2_K_acc_ct1( - sycl::range<1>(mmq_y * (WARP_SIZE / 4) + mmq_y / 4), cgh); - sycl::local_accessor tile_y_qs_acc_ct1( - sycl::range<1>(mmq_x * WARP_SIZE), cgh); - sycl::local_accessor tile_y_ds_acc_ct1( - sycl::range<1>(mmq_x * WARP_SIZE / QI8_1), cgh); - - cgh.parallel_for( - sycl::nd_range<3>(block_nums * block_dims, block_dims), - [=](sycl::nd_item<3> item_ct1) { - mul_mat_q2_K( - vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, - nrows_dst, item_ct1, - tile_x_ql_q2_K_acc_ct1.get_pointer(), - tile_x_dm_q2_K_acc_ct1.get_pointer(), - tile_x_sc_q2_K_acc_ct1.get_pointer(), - tile_y_qs_acc_ct1.get_pointer(), - tile_y_ds_acc_ct1.get_pointer()); - }); - }); - } - } -} -catch (sycl::exception const &exc) { - std::cerr << exc.what() << "Exception caught at file:" << __FILE__ - << ", line:" << __LINE__ << std::endl; - std::exit(1); -} - -static void ggml_mul_mat_q3_K_q8_1_sycl(const void *vx, const void *vy, - float *dst, const int ncols_x, - const int nrows_x, const int ncols_y, - const int nrows_y, const int nrows_dst, - dpct::queue_ptr stream) try { - -#if QK_K == 256 - - int id; - SYCL_CHECK( - CHECK_TRY_ERROR(id = get_current_device_id())); - const int compute_capability = g_device_caps[id].cc; - - int mmq_x, mmq_y, nwarps; - if (compute_capability >= VER_GEN13) { - mmq_x = MMQ_X_Q3_K_RDNA2; - mmq_y = MMQ_Y_Q3_K_RDNA2; - nwarps = NWARPS_Q3_K_RDNA2; - } else if (compute_capability >= VER_GEN12) { - mmq_x = MMQ_X_Q3_K_RDNA1; - mmq_y = MMQ_Y_Q3_K_RDNA1; - nwarps = NWARPS_Q3_K_RDNA1; - } else if (compute_capability >= VER_GEN9) { - mmq_x = MMQ_X_Q3_K_AMPERE; - mmq_y = MMQ_Y_Q3_K_AMPERE; - nwarps = NWARPS_Q3_K_AMPERE; - } else if (compute_capability >= VER_4VEC) { - mmq_x = MMQ_X_Q3_K_PASCAL; - mmq_y = MMQ_Y_Q3_K_PASCAL; - nwarps = NWARPS_Q3_K_PASCAL; - } else { - GGML_ASSERT(false); - } - - const int block_num_x = (nrows_x + mmq_y - 1) / mmq_y; - const int block_num_y = (ncols_y + mmq_x - 1) / mmq_x; - const sycl::range<3> block_nums(1, block_num_y, block_num_x); - const sycl::range<3> block_dims(1, nwarps, WARP_SIZE); - - if (nrows_x % mmq_y == 0) { - const bool need_check = false; - /* - DPCT1049:32: The work-group size passed to the SYCL kernel may exceed - the limit. To get the device limit, query - info::device::max_work_group_size. Adjust the work-group size if needed. - */ - { - dpct::has_capability_or_fail(stream->get_device(), - {sycl::aspect::fp16}); - - stream->submit([&](sycl::handler &cgh) { - sycl::local_accessor tile_x_ql_q3_K_acc_ct1( - sycl::range<1>(mmq_y * (WARP_SIZE) + mmq_y), cgh); - sycl::local_accessor tile_x_dm_q3_K_acc_ct1( - sycl::range<1>(mmq_y * (WARP_SIZE / QI3_K) + mmq_y / QI3_K), - cgh); - sycl::local_accessor tile_x_qh_q3_K_acc_ct1( - sycl::range<1>(mmq_y * (WARP_SIZE / 2) + mmq_y / 2), cgh); - sycl::local_accessor tile_x_sc_q3_K_acc_ct1( - sycl::range<1>(mmq_y * (WARP_SIZE / 4) + mmq_y / 4), cgh); - sycl::local_accessor tile_y_qs_acc_ct1( - sycl::range<1>(mmq_x * WARP_SIZE), cgh); - sycl::local_accessor tile_y_ds_acc_ct1( - sycl::range<1>(mmq_x * WARP_SIZE / QI8_1), cgh); - - cgh.parallel_for( - sycl::nd_range<3>(block_nums * block_dims, block_dims), - [=](sycl::nd_item<3> item_ct1) { - mul_mat_q3_K( - vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, - nrows_dst, item_ct1, - tile_x_ql_q3_K_acc_ct1.get_pointer(), - tile_x_dm_q3_K_acc_ct1.get_pointer(), - tile_x_qh_q3_K_acc_ct1.get_pointer(), - tile_x_sc_q3_K_acc_ct1.get_pointer(), - tile_y_qs_acc_ct1.get_pointer(), - tile_y_ds_acc_ct1.get_pointer()); - }); - }); - } - } else { - const bool need_check = true; - /* - DPCT1049:33: The work-group size passed to the SYCL kernel may exceed - the limit. To get the device limit, query - info::device::max_work_group_size. Adjust the work-group size if needed. - */ - { - dpct::has_capability_or_fail(stream->get_device(), - {sycl::aspect::fp16}); - - stream->submit([&](sycl::handler &cgh) { - sycl::local_accessor tile_x_ql_q3_K_acc_ct1( - sycl::range<1>(mmq_y * (WARP_SIZE) + mmq_y), cgh); - sycl::local_accessor tile_x_dm_q3_K_acc_ct1( - sycl::range<1>(mmq_y * (WARP_SIZE / QI3_K) + mmq_y / QI3_K), - cgh); - sycl::local_accessor tile_x_qh_q3_K_acc_ct1( - sycl::range<1>(mmq_y * (WARP_SIZE / 2) + mmq_y / 2), cgh); - sycl::local_accessor tile_x_sc_q3_K_acc_ct1( - sycl::range<1>(mmq_y * (WARP_SIZE / 4) + mmq_y / 4), cgh); - sycl::local_accessor tile_y_qs_acc_ct1( - sycl::range<1>(mmq_x * WARP_SIZE), cgh); - sycl::local_accessor tile_y_ds_acc_ct1( - sycl::range<1>(mmq_x * WARP_SIZE / QI8_1), cgh); - - cgh.parallel_for( - sycl::nd_range<3>(block_nums * block_dims, block_dims), - [=](sycl::nd_item<3> item_ct1) { - mul_mat_q3_K( - vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, - nrows_dst, item_ct1, - tile_x_ql_q3_K_acc_ct1.get_pointer(), - tile_x_dm_q3_K_acc_ct1.get_pointer(), - tile_x_qh_q3_K_acc_ct1.get_pointer(), - tile_x_sc_q3_K_acc_ct1.get_pointer(), - tile_y_qs_acc_ct1.get_pointer(), - tile_y_ds_acc_ct1.get_pointer()); - }); - }); - } - } -#endif -} -catch (sycl::exception const &exc) { - std::cerr << exc.what() << "Exception caught at file:" << __FILE__ - << ", line:" << __LINE__ << std::endl; - std::exit(1); -} - -static void ggml_mul_mat_q4_K_q8_1_sycl(const void *vx, const void *vy, - float *dst, const int ncols_x, - const int nrows_x, const int ncols_y, - const int nrows_y, const int nrows_dst, - dpct::queue_ptr stream) try { - - int id; - SYCL_CHECK( - CHECK_TRY_ERROR(id = get_current_device_id())); - const int compute_capability = g_device_caps[id].cc; - - int mmq_x, mmq_y, nwarps; - if (compute_capability >= VER_GEN13) { - mmq_x = MMQ_X_Q4_K_RDNA2; - mmq_y = MMQ_Y_Q4_K_RDNA2; - nwarps = NWARPS_Q4_K_RDNA2; - } else if (compute_capability >= VER_GEN12) { - mmq_x = MMQ_X_Q4_K_RDNA1; - mmq_y = MMQ_Y_Q4_K_RDNA1; - nwarps = NWARPS_Q4_K_RDNA1; - } else if (compute_capability >= VER_GEN9) { - mmq_x = MMQ_X_Q4_K_AMPERE; - mmq_y = MMQ_Y_Q4_K_AMPERE; - nwarps = NWARPS_Q4_K_AMPERE; - } else if (compute_capability >= VER_4VEC) { - mmq_x = MMQ_X_Q4_K_PASCAL; - mmq_y = MMQ_Y_Q4_K_PASCAL; - nwarps = NWARPS_Q4_K_PASCAL; - } else { - GGML_ASSERT(false); - } - - const int block_num_x = (nrows_x + mmq_y - 1) / mmq_y; - const int block_num_y = (ncols_y + mmq_x - 1) / mmq_x; - const sycl::range<3> block_nums(1, block_num_y, block_num_x); - const sycl::range<3> block_dims(1, nwarps, WARP_SIZE); - - if (nrows_x % mmq_y == 0) { - const bool need_check = false; - /* - DPCT1049:34: The work-group size passed to the SYCL kernel may exceed - the limit. To get the device limit, query - info::device::max_work_group_size. Adjust the work-group size if needed. - */ - { - dpct::has_capability_or_fail(stream->get_device(), - {sycl::aspect::fp16}); - - stream->submit([&](sycl::handler &cgh) { - sycl::local_accessor tile_x_ql_q4_K_acc_ct1( - sycl::range<1>(mmq_y * (WARP_SIZE) + mmq_y), cgh); - sycl::local_accessor tile_x_dm_q4_K_acc_ct1( - sycl::range<1>(mmq_y * (WARP_SIZE / QI4_K) + mmq_y / QI4_K), - cgh); - sycl::local_accessor tile_x_sc_q4_K_acc_ct1( - sycl::range<1>(mmq_y * (WARP_SIZE / 8) + mmq_y / 8), cgh); - sycl::local_accessor tile_y_qs_acc_ct1( - sycl::range<1>(mmq_x * WARP_SIZE), cgh); - sycl::local_accessor tile_y_ds_acc_ct1( - sycl::range<1>(mmq_x * WARP_SIZE / QI8_1), cgh); - - cgh.parallel_for( - sycl::nd_range<3>(block_nums * block_dims, block_dims), - [=](sycl::nd_item<3> item_ct1) { - mul_mat_q4_K( - vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, - nrows_dst, item_ct1, - tile_x_ql_q4_K_acc_ct1.get_pointer(), - tile_x_dm_q4_K_acc_ct1.get_pointer(), - tile_x_sc_q4_K_acc_ct1.get_pointer(), - tile_y_qs_acc_ct1.get_pointer(), - tile_y_ds_acc_ct1.get_pointer()); - }); - }); - } - } else { - const bool need_check = true; - /* - DPCT1049:35: The work-group size passed to the SYCL kernel may exceed - the limit. To get the device limit, query - info::device::max_work_group_size. Adjust the work-group size if needed. - */ - { - dpct::has_capability_or_fail(stream->get_device(), - {sycl::aspect::fp16}); - - stream->submit([&](sycl::handler &cgh) { - sycl::local_accessor tile_x_ql_q4_K_acc_ct1( - sycl::range<1>(mmq_y * (WARP_SIZE) + mmq_y), cgh); - sycl::local_accessor tile_x_dm_q4_K_acc_ct1( - sycl::range<1>(mmq_y * (WARP_SIZE / QI4_K) + mmq_y / QI4_K), - cgh); - sycl::local_accessor tile_x_sc_q4_K_acc_ct1( - sycl::range<1>(mmq_y * (WARP_SIZE / 8) + mmq_y / 8), cgh); - sycl::local_accessor tile_y_qs_acc_ct1( - sycl::range<1>(mmq_x * WARP_SIZE), cgh); - sycl::local_accessor tile_y_ds_acc_ct1( - sycl::range<1>(mmq_x * WARP_SIZE / QI8_1), cgh); - - cgh.parallel_for( - sycl::nd_range<3>(block_nums * block_dims, block_dims), - [=](sycl::nd_item<3> item_ct1) { - mul_mat_q4_K( - vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, - nrows_dst, item_ct1, - tile_x_ql_q4_K_acc_ct1.get_pointer(), - tile_x_dm_q4_K_acc_ct1.get_pointer(), - tile_x_sc_q4_K_acc_ct1.get_pointer(), - tile_y_qs_acc_ct1.get_pointer(), - tile_y_ds_acc_ct1.get_pointer()); - }); - }); - } - } -} -catch (sycl::exception const &exc) { - std::cerr << exc.what() << "Exception caught at file:" << __FILE__ - << ", line:" << __LINE__ << std::endl; - std::exit(1); -} - -static void ggml_mul_mat_q5_K_q8_1_sycl(const void *vx, const void *vy, - float *dst, const int ncols_x, - const int nrows_x, const int ncols_y, - const int nrows_y, const int nrows_dst, - dpct::queue_ptr stream) try { - - int id; - SYCL_CHECK( - CHECK_TRY_ERROR(id = get_current_device_id())); - const int compute_capability = g_device_caps[id].cc; - - int mmq_x, mmq_y, nwarps; - if (compute_capability >= VER_GEN13) { - mmq_x = MMQ_X_Q5_K_RDNA2; - mmq_y = MMQ_Y_Q5_K_RDNA2; - nwarps = NWARPS_Q5_K_RDNA2; - } else if (compute_capability >= VER_GEN12) { - mmq_x = MMQ_X_Q5_K_RDNA1; - mmq_y = MMQ_Y_Q5_K_RDNA1; - nwarps = NWARPS_Q5_K_RDNA1; - } else if (compute_capability >= VER_GEN9) { - mmq_x = MMQ_X_Q5_K_AMPERE; - mmq_y = MMQ_Y_Q5_K_AMPERE; - nwarps = NWARPS_Q5_K_AMPERE; - } else if (compute_capability >= VER_4VEC) { - mmq_x = MMQ_X_Q5_K_PASCAL; - mmq_y = MMQ_Y_Q5_K_PASCAL; - nwarps = NWARPS_Q5_K_PASCAL; - } else { - GGML_ASSERT(false); - } - - const int block_num_x = (nrows_x + mmq_y - 1) / mmq_y; - const int block_num_y = (ncols_y + mmq_x - 1) / mmq_x; - const sycl::range<3> block_nums(1, block_num_y, block_num_x); - const sycl::range<3> block_dims(1, nwarps, WARP_SIZE); - - if (nrows_x % mmq_y == 0) { - const bool need_check = false; - /* - DPCT1049:36: The work-group size passed to the SYCL kernel may exceed - the limit. To get the device limit, query - info::device::max_work_group_size. Adjust the work-group size if needed. - */ - { - dpct::has_capability_or_fail(stream->get_device(), - {sycl::aspect::fp16}); - - stream->submit([&](sycl::handler &cgh) { - sycl::local_accessor tile_x_ql_q5_K_acc_ct1( - sycl::range<1>(mmq_y * (2 * WARP_SIZE) + mmq_y), cgh); - sycl::local_accessor tile_x_dm_q5_K_acc_ct1( - sycl::range<1>(mmq_y * (WARP_SIZE / QI5_K) + mmq_y / QI5_K), - cgh); - sycl::local_accessor tile_x_sc_q5_K_acc_ct1( - sycl::range<1>(mmq_y * (WARP_SIZE / 8) + mmq_y / 8), cgh); - sycl::local_accessor tile_y_qs_acc_ct1( - sycl::range<1>(mmq_x * WARP_SIZE), cgh); - sycl::local_accessor tile_y_ds_acc_ct1( - sycl::range<1>(mmq_x * WARP_SIZE / QI8_1), cgh); - - cgh.parallel_for( - sycl::nd_range<3>(block_nums * block_dims, block_dims), - [=](sycl::nd_item<3> item_ct1) { - mul_mat_q5_K( - vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, - nrows_dst, item_ct1, - tile_x_ql_q5_K_acc_ct1.get_pointer(), - tile_x_dm_q5_K_acc_ct1.get_pointer(), - tile_x_sc_q5_K_acc_ct1.get_pointer(), - tile_y_qs_acc_ct1.get_pointer(), - tile_y_ds_acc_ct1.get_pointer()); - }); - }); - } - } else { - const bool need_check = true; - /* - DPCT1049:37: The work-group size passed to the SYCL kernel may exceed - the limit. To get the device limit, query - info::device::max_work_group_size. Adjust the work-group size if needed. - */ - { - dpct::has_capability_or_fail(stream->get_device(), - {sycl::aspect::fp16}); - - stream->submit([&](sycl::handler &cgh) { - sycl::local_accessor tile_x_ql_q5_K_acc_ct1( - sycl::range<1>(mmq_y * (2 * WARP_SIZE) + mmq_y), cgh); - sycl::local_accessor tile_x_dm_q5_K_acc_ct1( - sycl::range<1>(mmq_y * (WARP_SIZE / QI5_K) + mmq_y / QI5_K), - cgh); - sycl::local_accessor tile_x_sc_q5_K_acc_ct1( - sycl::range<1>(mmq_y * (WARP_SIZE / 8) + mmq_y / 8), cgh); - sycl::local_accessor tile_y_qs_acc_ct1( - sycl::range<1>(mmq_x * WARP_SIZE), cgh); - sycl::local_accessor tile_y_ds_acc_ct1( - sycl::range<1>(mmq_x * WARP_SIZE / QI8_1), cgh); - - cgh.parallel_for( - sycl::nd_range<3>(block_nums * block_dims, block_dims), - [=](sycl::nd_item<3> item_ct1) { - mul_mat_q5_K( - vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, - nrows_dst, item_ct1, - tile_x_ql_q5_K_acc_ct1.get_pointer(), - tile_x_dm_q5_K_acc_ct1.get_pointer(), - tile_x_sc_q5_K_acc_ct1.get_pointer(), - tile_y_qs_acc_ct1.get_pointer(), - tile_y_ds_acc_ct1.get_pointer()); - }); - }); - } - } -} -catch (sycl::exception const &exc) { - std::cerr << exc.what() << "Exception caught at file:" << __FILE__ - << ", line:" << __LINE__ << std::endl; - std::exit(1); -} - -static void ggml_mul_mat_q6_K_q8_1_sycl(const void *vx, const void *vy, - float *dst, const int ncols_x, - const int nrows_x, const int ncols_y, - const int nrows_y, const int nrows_dst, - dpct::queue_ptr stream) try { - - int id; - SYCL_CHECK( - CHECK_TRY_ERROR(id = get_current_device_id())); - const int compute_capability = g_device_caps[id].cc; - - int mmq_x, mmq_y, nwarps; - if (compute_capability >= VER_GEN13) { - mmq_x = MMQ_X_Q6_K_RDNA2; - mmq_y = MMQ_Y_Q6_K_RDNA2; - nwarps = NWARPS_Q6_K_RDNA2; - } else if (compute_capability >= VER_GEN12) { - mmq_x = MMQ_X_Q6_K_RDNA1; - mmq_y = MMQ_Y_Q6_K_RDNA1; - nwarps = NWARPS_Q6_K_RDNA1; - } else if (compute_capability >= VER_GEN9) { - mmq_x = MMQ_X_Q6_K_AMPERE; - mmq_y = MMQ_Y_Q6_K_AMPERE; - nwarps = NWARPS_Q6_K_AMPERE; - } else if (compute_capability >= VER_4VEC) { - mmq_x = MMQ_X_Q6_K_PASCAL; - mmq_y = MMQ_Y_Q6_K_PASCAL; - nwarps = NWARPS_Q6_K_PASCAL; - } else { - GGML_ASSERT(false); - } - - const int block_num_x = (nrows_x + mmq_y - 1) / mmq_y; - const int block_num_y = (ncols_y + mmq_x - 1) / mmq_x; - const sycl::range<3> block_nums(1, block_num_y, block_num_x); - const sycl::range<3> block_dims(1, nwarps, WARP_SIZE); - - if (nrows_x % mmq_y == 0) { - const bool need_check = false; - /* - DPCT1049:38: The work-group size passed to the SYCL kernel may exceed - the limit. To get the device limit, query - info::device::max_work_group_size. Adjust the work-group size if needed. - */ - { - dpct::has_capability_or_fail(stream->get_device(), - {sycl::aspect::fp16}); - - stream->submit([&](sycl::handler &cgh) { - sycl::local_accessor tile_x_ql_acc_ct1( - sycl::range<1>(mmq_y * (2 * WARP_SIZE) + mmq_y), cgh); - sycl::local_accessor tile_x_dm_acc_ct1( - sycl::range<1>(mmq_y * (WARP_SIZE / QI6_K) + mmq_y / QI6_K), - cgh); - sycl::local_accessor tile_x_sc_acc_ct1( - sycl::range<1>(mmq_y * (WARP_SIZE / 8) + mmq_y / 8), cgh); - sycl::local_accessor tile_y_qs_acc_ct1( - sycl::range<1>(mmq_x * WARP_SIZE), cgh); - sycl::local_accessor tile_y_ds_acc_ct1( - sycl::range<1>(mmq_x * WARP_SIZE / QI8_1), cgh); - - cgh.parallel_for( - sycl::nd_range<3>(block_nums * block_dims, block_dims), - [=](sycl::nd_item<3> item_ct1) { - mul_mat_q6_K( - vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, - nrows_dst, item_ct1, - tile_x_ql_acc_ct1.get_pointer(), - tile_x_dm_acc_ct1.get_pointer(), - tile_x_sc_acc_ct1.get_pointer(), - tile_y_qs_acc_ct1.get_pointer(), - tile_y_ds_acc_ct1.get_pointer()); - }); - }); - } - } else { - const bool need_check = true; - /* - DPCT1049:39: The work-group size passed to the SYCL kernel may exceed - the limit. To get the device limit, query - info::device::max_work_group_size. Adjust the work-group size if needed. - */ - { - dpct::has_capability_or_fail(stream->get_device(), - {sycl::aspect::fp16}); - - stream->submit([&](sycl::handler &cgh) { - sycl::local_accessor tile_x_ql_acc_ct1( - sycl::range<1>(mmq_y * (2 * WARP_SIZE) + mmq_y), cgh); - sycl::local_accessor tile_x_dm_acc_ct1( - sycl::range<1>(mmq_y * (WARP_SIZE / QI6_K) + mmq_y / QI6_K), - cgh); - sycl::local_accessor tile_x_sc_acc_ct1( - sycl::range<1>(mmq_y * (WARP_SIZE / 8) + mmq_y / 8), cgh); - sycl::local_accessor tile_y_qs_acc_ct1( - sycl::range<1>(mmq_x * WARP_SIZE), cgh); - sycl::local_accessor tile_y_ds_acc_ct1( - sycl::range<1>(mmq_x * WARP_SIZE / QI8_1), cgh); - - cgh.parallel_for( - sycl::nd_range<3>(block_nums * block_dims, block_dims), - [=](sycl::nd_item<3> item_ct1) { - mul_mat_q6_K( - vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, - nrows_dst, item_ct1, - tile_x_ql_acc_ct1.get_pointer(), - tile_x_dm_acc_ct1.get_pointer(), - tile_x_sc_acc_ct1.get_pointer(), - tile_y_qs_acc_ct1.get_pointer(), - tile_y_ds_acc_ct1.get_pointer()); - }); - }); - } - } -} -catch (sycl::exception const &exc) { - std::cerr << exc.what() << "Exception caught at file:" << __FILE__ - << ", line:" << __LINE__ << std::endl; - std::exit(1); -} - -static void ggml_mul_mat_p021_f16_f32_sycl(const void *vx, const float *y, - float *dst, const int ncols_x, - const int nrows_x, - const int nchannels_x, - const int nchannels_y, - dpct::queue_ptr stream) { - - const sycl::range<3> block_nums(nchannels_y, nrows_x, 1); - const sycl::range<3> block_dims(1, 1, WARP_SIZE); - { - dpct::has_capability_or_fail(stream->get_device(), - {sycl::aspect::fp16}); - - stream->parallel_for( - sycl::nd_range<3>(block_nums * block_dims, block_dims), - [=](sycl::nd_item<3> item_ct1) [[intel::reqd_sub_group_size(32)]] { - mul_mat_p021_f16_f32(vx, y, dst, ncols_x, nrows_x, nchannels_x, - nchannels_y, item_ct1); - }); - } -} - -static void ggml_mul_mat_vec_nc_f16_f32_sycl( - const void *vx, const float *y, float *dst, const int ncols_x, - const int nrows_x, const int row_stride_x, const int nchannels_x, - const int nchannels_y, const int channel_stride_x, dpct::queue_ptr stream) { - - const sycl::range<3> block_nums(nchannels_y, nrows_x, 1); - const sycl::range<3> block_dims(1, 1, WARP_SIZE); - { - dpct::has_capability_or_fail(stream->get_device(), - {sycl::aspect::fp16}); - - stream->parallel_for( - sycl::nd_range<3>(block_nums * block_dims, block_dims), - [=](sycl::nd_item<3> item_ct1) [[intel::reqd_sub_group_size(32)]] { - mul_mat_vec_nc_f16_f32(vx, y, dst, ncols_x, nrows_x, - row_stride_x, channel_stride_x, - nchannels_y / nchannels_x, item_ct1); - }); - } -} - -static void -ggml_cpy_f16_f32_sycl(const char *cx, char *cdst, const int ne, const int ne00, - const int ne01, const int ne02, const int nb00, - const int nb01, const int nb02, const int nb03, - const int ne10, const int ne11, const int ne12, - const int nb10, const int nb11, const int nb12, - const int nb13, dpct::queue_ptr stream) { - - const int num_blocks = (ne + SYCL_CPY_BLOCK_SIZE - 1) / SYCL_CPY_BLOCK_SIZE; - { - dpct::has_capability_or_fail(stream->get_device(), - {sycl::aspect::fp16}); - - stream->parallel_for( - sycl::nd_range<3>(sycl::range<3>(1, 1, num_blocks) * - sycl::range<3>(1, 1, SYCL_CPY_BLOCK_SIZE), - sycl::range<3>(1, 1, SYCL_CPY_BLOCK_SIZE)), - [=](sycl::nd_item<3> item_ct1) { - cpy_f32_f16(cx, cdst, ne, ne00, ne01, ne02, nb00, - nb01, nb02, nb03, ne10, ne11, ne12, - nb10, nb11, nb12, nb13, item_ct1); - }); - } -} - -static void ggml_cpy_f32_f32_sycl(const char *cx, char *cdst, const int ne, - const int ne00, const int ne01, - const int ne02, const int nb00, - const int nb01, const int nb02, - const int nb03, const int ne10, - const int ne11, const int ne12, - const int nb10, const int nb11, - const int nb12, const int nb13, - dpct::queue_ptr stream) { - - const int num_blocks = (ne + SYCL_CPY_BLOCK_SIZE - 1) / SYCL_CPY_BLOCK_SIZE; - { - dpct::has_capability_or_fail(stream->get_device(), - {sycl::aspect::fp16}); - - stream->parallel_for( - sycl::nd_range<3>(sycl::range<3>(1, 1, num_blocks) * - sycl::range<3>(1, 1, SYCL_CPY_BLOCK_SIZE), - sycl::range<3>(1, 1, SYCL_CPY_BLOCK_SIZE)), - [=](sycl::nd_item<3> item_ct1) { - cpy_f32_f16(cx, cdst, ne, ne00, ne01, ne02, nb00, nb01, nb02, - nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13, - item_ct1); - }); - } -} - -static void ggml_cpy_f32_f16_sycl(const char *cx, char *cdst, const int ne, - const int ne00, const int ne01, - const int ne02, const int nb00, - const int nb01, const int nb02, - const int nb03, const int ne10, - const int ne11, const int ne12, - const int nb10, const int nb11, - const int nb12, const int nb13, - dpct::queue_ptr stream) { - - const int num_blocks = (ne + SYCL_CPY_BLOCK_SIZE - 1) / SYCL_CPY_BLOCK_SIZE; - { - dpct::has_capability_or_fail(stream->get_device(), - {sycl::aspect::fp16}); - - stream->parallel_for( - sycl::nd_range<3>(sycl::range<3>(1, 1, num_blocks) * - sycl::range<3>(1, 1, SYCL_CPY_BLOCK_SIZE), - sycl::range<3>(1, 1, SYCL_CPY_BLOCK_SIZE)), - [=](sycl::nd_item<3> item_ct1) { - cpy_f32_f16(cx, cdst, ne, ne00, ne01, ne02, nb00, nb01, nb02, - nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13, - item_ct1); - }); - } -} - -static void ggml_cpy_f32_q8_0_sycl(const char *cx, char *cdst, const int ne, - const int ne00, const int ne01, - const int ne02, const int nb00, - const int nb01, const int nb02, - const int nb03, const int ne10, - const int ne11, const int ne12, - const int nb10, const int nb11, - const int nb12, const int nb13, - dpct::queue_ptr stream) { - - GGML_ASSERT(ne % QK8_0 == 0); - const int num_blocks = ne / QK8_0; - stream->parallel_for(sycl::nd_range<3>(sycl::range<3>(1, 1, num_blocks), - sycl::range<3>(1, 1, 1)), - [=](sycl::nd_item<3> item_ct1) { - cpy_f32_q( - cx, cdst, ne, ne00, ne01, ne02, nb00, nb01, nb02, - nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13, - item_ct1); - }); -} - -static void ggml_cpy_f32_q4_0_sycl(const char *cx, char *cdst, const int ne, - const int ne00, const int ne01, - const int ne02, const int nb00, - const int nb01, const int nb02, - const int nb03, const int ne10, - const int ne11, const int ne12, - const int nb10, const int nb11, - const int nb12, const int nb13, - dpct::queue_ptr stream) { - - GGML_ASSERT(ne % QK4_0 == 0); - const int num_blocks = ne / QK4_0; - stream->parallel_for(sycl::nd_range<3>(sycl::range<3>(1, 1, num_blocks), - sycl::range<3>(1, 1, 1)), - [=](sycl::nd_item<3> item_ct1) { - cpy_f32_q( - cx, cdst, ne, ne00, ne01, ne02, nb00, nb01, nb02, - nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13, - item_ct1); - }); -} - -static void ggml_cpy_f32_q4_1_sycl(const char *cx, char *cdst, const int ne, - const int ne00, const int ne01, - const int ne02, const int nb00, - const int nb01, const int nb02, - const int nb03, const int ne10, - const int ne11, const int ne12, - const int nb10, const int nb11, - const int nb12, const int nb13, - dpct::queue_ptr stream) { - - GGML_ASSERT(ne % QK4_1 == 0); - const int num_blocks = ne / QK4_1; - stream->parallel_for(sycl::nd_range<3>(sycl::range<3>(1, 1, num_blocks), - sycl::range<3>(1, 1, 1)), - [=](sycl::nd_item<3> item_ct1) { - cpy_f32_q( - cx, cdst, ne, ne00, ne01, ne02, nb00, nb01, nb02, - nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13, - item_ct1); - }); -} - -static void ggml_cpy_f16_f16_sycl(const char *cx, char *cdst, const int ne, - const int ne00, const int ne01, - const int ne02, const int nb00, - const int nb01, const int nb02, - const int nb03, const int ne10, - const int ne11, const int ne12, - const int nb10, const int nb11, - const int nb12, const int nb13, - dpct::queue_ptr stream) { - - const int num_blocks = (ne + SYCL_CPY_BLOCK_SIZE - 1) / SYCL_CPY_BLOCK_SIZE; - { - dpct::has_capability_or_fail(stream->get_device(), - {sycl::aspect::fp16}); - - stream->parallel_for( - sycl::nd_range<3>(sycl::range<3>(1, 1, num_blocks) * - sycl::range<3>(1, 1, SYCL_CPY_BLOCK_SIZE), - sycl::range<3>(1, 1, SYCL_CPY_BLOCK_SIZE)), - [=](sycl::nd_item<3> item_ct1) { - cpy_f32_f16(cx, cdst, ne, ne00, ne01, ne02, nb00, nb01, nb02, - nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13, - item_ct1); - }); - } -} - -static void ggml_cpy_i16_i16_sycl(const char *cx, char *cdst, const int ne, - const int ne00, const int ne01, - const int ne02, const int nb00, - const int nb01, const int nb02, - const int nb03, const int ne10, - const int ne11, const int ne12, - const int nb10, const int nb11, - const int nb12, const int nb13, - dpct::queue_ptr stream) { - - const int num_blocks = (ne + SYCL_CPY_BLOCK_SIZE - 1) / SYCL_CPY_BLOCK_SIZE; - { - // dpct::has_capability_or_fail(stream->get_device(), - // {sycl::aspect::fp16}); - - stream->parallel_for( - sycl::nd_range<3>(sycl::range<3>(1, 1, num_blocks) * - sycl::range<3>(1, 1, SYCL_CPY_BLOCK_SIZE), - sycl::range<3>(1, 1, SYCL_CPY_BLOCK_SIZE)), - [=](sycl::nd_item<3> item_ct1) { - cpy_f32_f16(cx, cdst, ne, ne00, ne01, ne02, nb00, nb01, nb02, - nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13, - item_ct1); - }); - } -} - -static void ggml_cpy_i32_i32_sycl(const char *cx, char *cdst, const int ne, - const int ne00, const int ne01, - const int ne02, const int nb00, - const int nb01, const int nb02, - const int nb03, const int ne10, - const int ne11, const int ne12, - const int nb10, const int nb11, - const int nb12, const int nb13, - dpct::queue_ptr stream) { - - const int num_blocks = (ne + SYCL_CPY_BLOCK_SIZE - 1) / SYCL_CPY_BLOCK_SIZE; - { - // dpct::has_capability_or_fail(stream->get_device(), - // {sycl::aspect::fp16}); - - stream->parallel_for( - sycl::nd_range<3>(sycl::range<3>(1, 1, num_blocks) * - sycl::range<3>(1, 1, SYCL_CPY_BLOCK_SIZE), - sycl::range<3>(1, 1, SYCL_CPY_BLOCK_SIZE)), - [=](sycl::nd_item<3> item_ct1) { - cpy_f32_f16(cx, cdst, ne, ne00, ne01, ne02, nb00, nb01, nb02, - nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13, - item_ct1); - }); - } -} - -static void scale_f32_sycl(const float *x, float *dst, const float scale, - const int k, dpct::queue_ptr stream) { - const int num_blocks = (k + SYCL_SCALE_BLOCK_SIZE - 1) / SYCL_SCALE_BLOCK_SIZE; - stream->parallel_for( - sycl::nd_range<3>(sycl::range<3>(1, 1, num_blocks) * - sycl::range<3>(1, 1, SYCL_SCALE_BLOCK_SIZE), - sycl::range<3>(1, 1, SYCL_SCALE_BLOCK_SIZE)), - [=](sycl::nd_item<3> item_ct1) { - scale_f32(x, dst, scale, k, item_ct1); - }); -} - -static void clamp_f32_sycl(const float *x, float *dst, const float min, - const float max, const int k, - dpct::queue_ptr stream) { - const int num_blocks = (k + SYCL_CLAMP_BLOCK_SIZE - 1) / SYCL_CLAMP_BLOCK_SIZE; - stream->parallel_for( - sycl::nd_range<3>(sycl::range<3>(1, 1, num_blocks) * - sycl::range<3>(1, 1, SYCL_CLAMP_BLOCK_SIZE), - sycl::range<3>(1, 1, SYCL_CLAMP_BLOCK_SIZE)), - [=](sycl::nd_item<3> item_ct1) { - clamp_f32(x, dst, min, max, k, item_ct1); - }); -} - -template -static void rope_sycl(const T *x, T *dst, int ncols, int nrows, - const int32_t *pos, float freq_scale, int p_delta_rows, - float freq_base, float ext_factor, float attn_factor, - rope_corr_dims corr_dims, dpct::queue_ptr stream) { - GGML_ASSERT(ncols % 2 == 0); - const sycl::range<3> block_dims(1, SYCL_ROPE_BLOCK_SIZE, 1); - const int num_blocks_x = (ncols + 2*SYCL_ROPE_BLOCK_SIZE - 1) / (2*SYCL_ROPE_BLOCK_SIZE); - const sycl::range<3> block_nums(1, num_blocks_x, nrows); - if (pos == nullptr) { - /* - DPCT1049:40: The work-group size passed to the SYCL kernel may exceed - the limit. To get the device limit, query - info::device::max_work_group_size. Adjust the work-group size if needed. - */ - dpct::has_capability_or_fail(stream->get_device(), - {sycl::aspect::fp16}); - - stream->parallel_for( - sycl::nd_range<3>(block_nums * block_dims, block_dims), - [=](sycl::nd_item<3> item_ct1) { - rope(x, dst, ncols, pos, freq_scale, p_delta_rows, - freq_base, ext_factor, attn_factor, corr_dims, - item_ct1); - }); - } else { - /* - DPCT1049:41: The work-group size passed to the SYCL kernel may exceed - the limit. To get the device limit, query - info::device::max_work_group_size. Adjust the work-group size if needed. - */ - dpct::has_capability_or_fail(stream->get_device(), - {sycl::aspect::fp16}); - - stream->parallel_for( - sycl::nd_range<3>(block_nums * block_dims, block_dims), - [=](sycl::nd_item<3> item_ct1) { - rope(x, dst, ncols, pos, freq_scale, p_delta_rows, - freq_base, ext_factor, attn_factor, corr_dims, - item_ct1); - }); - } -} - -template -static void rope_neox_sycl(const T *x, T *dst, int ncols, int n_dims, int nrows, - const int32_t *pos, float freq_scale, - int p_delta_rows, float freq_base, float ext_factor, - float attn_factor, rope_corr_dims corr_dims, - dpct::queue_ptr stream) { - GGML_ASSERT(ncols % 2 == 0); - const sycl::range<3> block_dims(1, SYCL_ROPE_BLOCK_SIZE, 1); - const int num_blocks_x = (ncols + 2*SYCL_ROPE_BLOCK_SIZE - 1) / (2*SYCL_ROPE_BLOCK_SIZE); - const sycl::range<3> block_nums(1, num_blocks_x, nrows); - - const float theta_scale = powf(freq_base, -2.0f/n_dims); - const float inv_ndims = -1.0f / n_dims; - - if (pos == nullptr) { - /* - DPCT1049:42: The work-group size passed to the SYCL kernel may exceed - the limit. To get the device limit, query - info::device::max_work_group_size. Adjust the work-group size if needed. - */ - dpct::has_capability_or_fail(stream->get_device(), - {sycl::aspect::fp16}); - - stream->parallel_for( - sycl::nd_range<3>(block_nums * block_dims, block_dims), - [=](sycl::nd_item<3> item_ct1) { - rope_neox(x, dst, ncols, n_dims, pos, freq_scale, - p_delta_rows, ext_factor, attn_factor, - corr_dims, theta_scale, inv_ndims, - item_ct1); - }); - } else { - /* - DPCT1049:43: The work-group size passed to the SYCL kernel may exceed - the limit. To get the device limit, query - info::device::max_work_group_size. Adjust the work-group size if needed. - */ - dpct::has_capability_or_fail(stream->get_device(), - {sycl::aspect::fp16}); - - stream->parallel_for( - sycl::nd_range<3>(block_nums * block_dims, block_dims), - [=](sycl::nd_item<3> item_ct1) { - rope_neox(x, dst, ncols, n_dims, pos, freq_scale, - p_delta_rows, ext_factor, attn_factor, - corr_dims, theta_scale, inv_ndims, item_ct1); - }); - } -} - -static void rope_glm_f32_sycl(const float *x, float *dst, int ncols, int nrows, - const int32_t *pos, float freq_scale, - int p_delta_rows, float freq_base, int n_ctx, - dpct::queue_ptr stream) { - GGML_ASSERT(ncols % 4 == 0); - const sycl::range<3> block_dims(1, 1, SYCL_ROPE_BLOCK_SIZE / 4); - const int num_blocks_x = (ncols + SYCL_ROPE_BLOCK_SIZE - 1) / SYCL_ROPE_BLOCK_SIZE; - const sycl::range<3> block_nums(1, nrows, num_blocks_x); - stream->parallel_for(sycl::nd_range<3>(block_nums * block_dims, block_dims), - [=](sycl::nd_item<3> item_ct1) { - rope_glm_f32(x, dst, ncols, pos, freq_scale, - p_delta_rows, freq_base, n_ctx, - item_ct1); - }); -} - -static void alibi_f32_sycl(const float *x, float *dst, const int ncols, - const int nrows, const int k_rows, - const int n_heads_log2_floor, const float m0, - const float m1, dpct::queue_ptr stream) { - const sycl::range<3> block_dims(1, 1, SYCL_ALIBI_BLOCK_SIZE); - const int num_blocks_x = (ncols + SYCL_ALIBI_BLOCK_SIZE - 1) / (SYCL_ALIBI_BLOCK_SIZE); - const sycl::range<3> block_nums(1, nrows, num_blocks_x); - stream->parallel_for(sycl::nd_range<3>(block_nums * block_dims, block_dims), - [=](sycl::nd_item<3> item_ct1) { - alibi_f32(x, dst, ncols, k_rows, - n_heads_log2_floor, m0, m1, item_ct1); - }); -} - -static void sum_rows_f32_sycl(const float *x, float *dst, const int ncols, - const int nrows, dpct::queue_ptr stream) { - const sycl::range<3> block_dims(1, 1, WARP_SIZE); - const sycl::range<3> block_nums(1, nrows, 1); - stream->parallel_for(sycl::nd_range<3>(block_nums * block_dims, block_dims), - [=](sycl::nd_item<3> item_ct1) - [[intel::reqd_sub_group_size(32)]] { - k_sum_rows_f32(x, dst, ncols, item_ct1); - }); -} - -static int next_power_of_2(int x) { - int n = 1; - while (n < x) { - n *= 2; - } - return n; -} - -static void argsort_f32_i32_sycl(const float *x, int *dst, const int ncols, - const int nrows, ggml_sort_order order, - dpct::queue_ptr stream) { - // bitonic sort requires ncols to be power of 2 - const int ncols_pad = next_power_of_2(ncols); - - const sycl::range<3> block_dims(1, 1, ncols_pad); - const sycl::range<3> block_nums(1, nrows, 1); - const size_t shared_mem = ncols_pad * sizeof(int); - - // GGML_ASSERT(shared_mem <= ggml_cuda_info().devices[ggml_cuda_get_device()].smpb); - - if (order == GGML_SORT_ORDER_ASC) { - stream->submit([&](sycl::handler &cgh) { - sycl::local_accessor dpct_local_acc_ct1( - sycl::range<1>(shared_mem), cgh); - - cgh.parallel_for( - sycl::nd_range<3>(block_nums * block_dims, block_dims), - [=](sycl::nd_item<3> item_ct1) { - k_argsort_f32_i32( - x, dst, ncols, ncols_pad, item_ct1, - dpct_local_acc_ct1.get_multi_ptr() - .get()); - }); - }); - } else if (order == GGML_SORT_ORDER_DESC) { - stream->submit([&](sycl::handler &cgh) { - sycl::local_accessor dpct_local_acc_ct1( - sycl::range<1>(shared_mem), cgh); - - cgh.parallel_for( - sycl::nd_range<3>(block_nums * block_dims, block_dims), - [=](sycl::nd_item<3> item_ct1) { - k_argsort_f32_i32( - x, dst, ncols, ncols_pad, item_ct1, - dpct_local_acc_ct1.get_multi_ptr() - .get()); - }); - }); - } else { - GGML_ASSERT(false); - } -} - -static void diag_mask_inf_f32_sycl(const float *x, float *dst, - const int ncols_x, const int nrows_x, - const int rows_per_channel, const int n_past, - dpct::queue_ptr stream) { - const sycl::range<3> block_dims(1, SYCL_DIAG_MASK_INF_BLOCK_SIZE, 1); - const int block_num_x = (ncols_x + SYCL_DIAG_MASK_INF_BLOCK_SIZE - 1) / SYCL_DIAG_MASK_INF_BLOCK_SIZE; - const sycl::range<3> block_nums(1, block_num_x, nrows_x); - stream->parallel_for(sycl::nd_range<3>(block_nums * block_dims, block_dims), - [=](sycl::nd_item<3> item_ct1) { - diag_mask_inf_f32(x, dst, ncols_x, - rows_per_channel, n_past, - item_ct1); - }); -} - -template -static void soft_max_f32_submitter(const float * x, const float * mask, const float *pos, float * dst, const int ncols_par, - const int nrows_y, const float scale, const float max_bias, const float m0, - const float m1, uint32_t n_head_log2, sycl::range<3> block_nums, sycl::range<3> block_dims, - const size_t n_local_scratch, dpct::queue_ptr stream) { - stream->submit([&](sycl::handler &cgh) { - sycl::local_accessor local_buf_acc(n_local_scratch, cgh); - - cgh.parallel_for( - sycl::nd_range<3>(block_nums * block_dims, block_dims), - [=](sycl::nd_item<3> item_ct1) [[intel::reqd_sub_group_size(32)]] { - soft_max_f32(x, mask, pos, dst, ncols_par, - nrows_y, scale, max_bias, m0, - m1, n_head_log2, item_ct1, - local_buf_acc.get_pointer()); - }); - }); -} - -static void soft_max_f32_sycl(const float * x, const float * mask, const float * pos, - float * dst, const int ncols_x, const int nrows_x, - const int nrows_y, const float scale, const float max_bias, - dpct::queue_ptr stream) { - int nth = WARP_SIZE; - int max_block_size = g_work_group_size; - while (nth < ncols_x && nth < max_block_size) nth *= 2; - if (nth>max_block_size) nth = max_block_size; - - const sycl::range<3> block_dims(1, 1, nth); - const sycl::range<3> block_nums(1, 1, nrows_x); - const size_t n_local_scratch = (GGML_PAD(ncols_x, WARP_SIZE) + WARP_SIZE); - - const uint32_t n_head_kv = nrows_x/nrows_y; - const uint32_t n_head_log2 = 1u << (uint32_t) floorf(log2f((float) n_head_kv)); - - const float m0 = powf(2.0f, -(max_bias ) / n_head_log2); - const float m1 = powf(2.0f, -(max_bias / 2.0f) / n_head_log2); - - const size_t local_mem_size = stream->get_device().get_info(); - if (n_local_scratch*sizeof(float) < local_mem_size) { - if (ncols_x > max_block_size) { - soft_max_f32_submitter(x, mask, pos, dst, ncols_x, nrows_y, scale, - max_bias, m0, m1, n_head_log2, block_nums, - block_dims, n_local_scratch, stream); - return; - } - switch (ncols_x) { - case 32: - soft_max_f32_submitter(x, mask, pos, dst, ncols_x, nrows_y, scale, - max_bias, m0, m1, n_head_log2, block_nums, - block_dims, n_local_scratch, stream); - break; - case 64: - soft_max_f32_submitter(x, mask, pos, dst, ncols_x, nrows_y, scale, - max_bias, m0, m1, n_head_log2, block_nums, - block_dims, n_local_scratch, stream); - break; - case 128: - soft_max_f32_submitter(x, mask, pos, dst, ncols_x, nrows_y, scale, - max_bias, m0, m1, n_head_log2, block_nums, - block_dims, n_local_scratch, stream); - break; - case 256: - soft_max_f32_submitter(x, mask, pos, dst, ncols_x, nrows_y, scale, - max_bias, m0, m1, n_head_log2, block_nums, - block_dims, n_local_scratch, stream); - break; - case 512: - soft_max_f32_submitter(x, mask, pos, dst, ncols_x, nrows_y, scale, - max_bias, m0, m1, n_head_log2, block_nums, - block_dims, n_local_scratch, stream); - break; - case 1024: - soft_max_f32_submitter(x, mask, pos, dst, ncols_x, nrows_y, scale, - max_bias, m0, m1, n_head_log2, block_nums, - block_dims, n_local_scratch, stream); - break; - case 2048: - soft_max_f32_submitter(x, mask, pos, dst, ncols_x, nrows_y, scale, - max_bias, m0, m1, n_head_log2, block_nums, - block_dims, n_local_scratch, stream); - break; - case 4096: - soft_max_f32_submitter(x, mask, pos, dst, ncols_x, nrows_y, scale, - max_bias, m0, m1, n_head_log2, block_nums, - block_dims, n_local_scratch, stream); - break; - default: - soft_max_f32_submitter(x, mask, pos, dst, ncols_x, nrows_y, scale, - max_bias, m0, m1, n_head_log2, block_nums, - block_dims, n_local_scratch, stream); - break; - } - } else { - soft_max_f32_submitter(x, mask, pos, dst, ncols_x, nrows_y, scale, - max_bias, m0, m1, n_head_log2, block_nums, - block_dims, WARP_SIZE, stream); - } -} - -template -static void im2col_sycl(const float *x, T *dst, int IW, int IH, - int OW, int OH, int KW, int KH, int IC, - int offset_delta, int s0, int s1, int p0, - int p1, int d0, int d1, - dpct::queue_ptr stream) { - const int parallel_elements = OW * KW * KH; - const int num_blocks = (parallel_elements + SYCL_IM2COL_BLOCK_SIZE - 1) / SYCL_IM2COL_BLOCK_SIZE; - sycl::range<3> block_nums(IC, OH, num_blocks); - { - dpct::has_capability_or_fail(stream->get_device(), - {sycl::aspect::fp16}); - - stream->parallel_for( - sycl::nd_range<3>(block_nums * - sycl::range<3>(1, 1, SYCL_IM2COL_BLOCK_SIZE), - sycl::range<3>(1, 1, SYCL_IM2COL_BLOCK_SIZE)), - [=](sycl::nd_item<3> item_ct1) { - im2col_kernel(x, dst, offset_delta, IW, IH, OW, KW, KH, - parallel_elements, (IC * KH * KW), s0, s1, p0, - p1, d0, d1, item_ct1); - }); - } -} - -// buffer pool for sycl -#define MAX_SYCL_BUFFERS 256 - -struct scoped_spin_lock { - std::atomic_flag& lock; - scoped_spin_lock(std::atomic_flag& lock) : lock(lock) { - while (lock.test_and_set(std::memory_order_acquire)) { - ; // spin - } - } - ~scoped_spin_lock() { - lock.clear(std::memory_order_release); - } - scoped_spin_lock(const scoped_spin_lock&) = delete; - scoped_spin_lock& operator=(const scoped_spin_lock&) = delete; -}; - -static std::atomic_flag g_sycl_pool_lock = ATOMIC_FLAG_INIT; - -// #define DEBUG_SYCL_MALLOC -struct sycl_buffer { - void * ptr = nullptr; - size_t size = 0; -}; - -static sycl_buffer g_sycl_buffer_pool[GGML_SYCL_MAX_DEVICES][MAX_SYCL_BUFFERS]; -static size_t g_sycl_pool_size[GGML_SYCL_MAX_DEVICES] = {0}; - -static void *ggml_sycl_pool_malloc_leg(int device_index, size_t size, size_t *actual_size) try { - scoped_spin_lock lock(g_sycl_pool_lock); - // GGML_SYCL_DEBUG("ggml_sycl_pool_malloc_leg device_index %d size=%lu\n", device_index, size); -#ifdef DEBUG_SYCL_MALLOC - int nnz = 0; - size_t max_size = 0; -#endif - size_t best_diff = 1ull << 36; - int ibest = -1; - for (int i = 0; i < MAX_SYCL_BUFFERS; ++i) { - sycl_buffer& b = g_sycl_buffer_pool[device_index][i]; - if (b.ptr != nullptr) { -#ifdef DEBUG_SYCL_MALLOC - ++nnz; - if (b.size > max_size) max_size = b.size; -#endif - if (b.size >= size) { - size_t diff = b.size - size; - if (diff < best_diff) { - best_diff = diff; - ibest = i; - if (!best_diff) { - void * ptr = b.ptr; - *actual_size = b.size; - b.ptr = nullptr; - b.size = 0; - // GGML_SYCL_DEBUG("ggml_sycl_pool_malloc_leg return 1 %p and rm in pool\n", ptr); - return ptr; - } - } - } - } - } - if (ibest >= 0) { - sycl_buffer& b = g_sycl_buffer_pool[device_index][ibest]; - void * ptr = b.ptr; - *actual_size = b.size; - b.ptr = nullptr; - b.size = 0; - // GGML_SYCL_DEBUG("ggml_sycl_pool_malloc_leg return 2 %p and rm in pool\n", ptr); - return ptr; - } - void * ptr; - size_t look_ahead_size = (size_t) (1.05 * size); - look_ahead_size = 256 * ((look_ahead_size + 255)/256); - - const dpct::queue_ptr stream = g_syclStreams[device_index][0]; - SYCL_CHECK( - CHECK_TRY_ERROR(ptr = (void *)sycl::malloc_device( - look_ahead_size, *stream))); - *actual_size = look_ahead_size; - g_sycl_pool_size[device_index] += look_ahead_size; - -#ifdef DEBUG_SYCL_MALLOC - fprintf(stderr, "%s[%d]: %d buffers, max_size = %u MB, pool_size = %u MB, requested %u MB\n", __func__, id, nnz, - (uint32_t)(max_size/1024/1024), (uint32_t)(g_sycl_pool_size[id]/1024/1024), (uint32_t)(size/1024/1024)); -#endif - // GGML_SYCL_DEBUG("ggml_sycl_pool_malloc_leg look_ahead_size=%lu, return %p\n", look_ahead_size, ptr); - return ptr; -} -catch (sycl::exception const &exc) { - std::cerr << exc.what() << "Exception caught at file:" << __FILE__ - << ", line:" << __LINE__ << std::endl; - std::exit(1); -} - -static void ggml_sycl_pool_free_leg(int device_index, void *ptr, size_t size) try { - scoped_spin_lock lock(g_sycl_pool_lock); - const dpct::queue_ptr stream = g_syclStreams[device_index][0]; - for (int i = 0; i < MAX_SYCL_BUFFERS; ++i) { - sycl_buffer& b = g_sycl_buffer_pool[device_index][i]; - if (b.ptr == nullptr) { - b.ptr = ptr; - b.size = size; - return; - } - } - fprintf(stderr, "WARNING: sycl buffer pool full, increase MAX_SYCL_BUFFERS\n"); - SYCL_CHECK(CHECK_TRY_ERROR(sycl::free(ptr, *stream))); - g_sycl_pool_size[device_index] -= size; -} -catch (sycl::exception const &exc) { - std::cerr << exc.what() << "Exception caught at file:" << __FILE__ - << ", line:" << __LINE__ << std::endl; - std::exit(1); -} - -// pool with virtual memory -/* -DPCT1082:64: Migration of CUmemGenericAllocationHandle type is not supported. -*/ -// static std::vector -// g_sycl_pool_handles[GGML_SYCL_MAX_DEVICES]; -static dpct::device_ptr g_sycl_pool_addr[GGML_SYCL_MAX_DEVICES] = {0}; -static size_t g_sycl_pool_used[GGML_SYCL_MAX_DEVICES] = {0}; - -static void *ggml_sycl_pool_malloc_vmm(int device_index, size_t size, size_t *actual_size) try { - GGML_UNUSED(device_index); - GGML_UNUSED(size); - GGML_UNUSED(actual_size); - return NULL; -} -catch (sycl::exception const &exc) { - std::cerr << exc.what() << "Exception caught at file:" << __FILE__ - << ", line:" << __LINE__ << std::endl; - std::exit(1); -} - -static void ggml_sycl_pool_free_vmm(int device_index, void *ptr, size_t size) try { - scoped_spin_lock lock(g_sycl_pool_lock); -#ifdef DEBUG_SYCL_MALLOC - printf("sycl pool[%d]: freed %llu bytes at %llx\n", device_index, (unsigned long long) size, ptr); -#endif - - g_sycl_pool_used[device_index] -= size; - - // all deallocations must be in reverse order of the allocations - GGML_ASSERT(ptr == (void *) (g_sycl_pool_addr[device_index] + g_sycl_pool_used[device_index])); -} -catch (sycl::exception const &exc) { - std::cerr << exc.what() << "Exception caught at file:" << __FILE__ - << ", line:" << __LINE__ << std::endl; - std::exit(1); -} - -static void *ggml_sycl_pool_malloc(int device_index, size_t size, size_t *actual_size) try { - if (g_device_caps[device_index].vmm) { - return ggml_sycl_pool_malloc_vmm(device_index, size, actual_size); - } else { - return ggml_sycl_pool_malloc_leg(device_index, size, actual_size); - } -} -catch (sycl::exception const &exc) { - std::cerr << exc.what() << "Exception caught at file:" << __FILE__ - << ", line:" << __LINE__ << std::endl; - std::exit(1); -} - -static void ggml_sycl_pool_free(int device_index, void *ptr, size_t size) try { - if (g_device_caps[device_index].vmm) { - ggml_sycl_pool_free_vmm(device_index, ptr, size); - } else { - ggml_sycl_pool_free_leg(device_index, ptr, size); - } -} -catch (sycl::exception const &exc) { - std::cerr << exc.what() << "Exception caught at file:" << __FILE__ - << ", line:" << __LINE__ << std::endl; - std::exit(1); -} - - -template -struct sycl_pool_alloc { - int device_index = -1; - int device_id = -1; - T * ptr = nullptr; - size_t actual_size = 0; - - // size is in number of elements - T * alloc(size_t size) { - GGML_ASSERT(ptr == nullptr); - device_id = get_current_device_id(); - device_index = g_sycl_gpu_mgr->get_index(device_id); - ptr = (T *) ggml_sycl_pool_malloc(device_index, size * sizeof(T), &this->actual_size); - // GGML_SYCL_DEBUG("sycl_pool_alloc %lu return %p actual size=%lu\n", size * sizeof(T), ptr, this->actual_size); - return ptr; - } - - sycl_pool_alloc(size_t size) { - alloc(size); - } - - ~sycl_pool_alloc() { - if (ptr != nullptr) { - ggml_sycl_pool_free(device_index, ptr, actual_size); - } - } - - T * get() { - return ptr; - } - - sycl_pool_alloc() = default; - sycl_pool_alloc(const sycl_pool_alloc &) = delete; - sycl_pool_alloc(sycl_pool_alloc &&) = delete; - sycl_pool_alloc& operator=(const sycl_pool_alloc &) = delete; - sycl_pool_alloc& operator=(sycl_pool_alloc &&) = delete; -}; - -static bool g_sycl_loaded = false; - -bool ggml_sycl_loaded(void) { - return g_sycl_loaded; -} - -void print_device_detail(int id, sycl::device &device, std::string device_type) { - - dpct::device_info prop; - SYCL_CHECK(CHECK_TRY_ERROR( - dpct::get_device_info(prop, device))); - - std::string version; - version += std::to_string(prop.get_major_version()); - version += "."; - version += std::to_string(prop.get_minor_version()); - - device_type = std::regex_replace(device_type, std::regex("ext_oneapi_"), ""); - std::string name = std::string(prop.get_name()); - name = std::regex_replace(name, std::regex("\\(R\\)"), ""); - name = std::regex_replace(name, std::regex("\\(TM\\)"), ""); - - auto global_mem_size = prop.get_global_mem_size()/1000000; - - fprintf(stderr, "|%2d|%19s|%39s|%7s|%7d|%8d|%5d|%6luM|%21s|\n", id, device_type.c_str(), - name.c_str(), version.c_str(), prop.get_max_compute_units(), - prop.get_max_work_group_size(), prop.get_max_sub_group_size(), - global_mem_size, device.get_info().c_str()); -} - -void ggml_backend_sycl_print_sycl_devices() { - GGML_SYCL_DEBUG("[SYCL] call ggml_backend_sycl_print_sycl_devices\n"); - int device_count = dpct::dev_mgr::instance().device_count(); - std::map DeviceNums; - fprintf(stderr, "found %d SYCL devices:\n", device_count); - fprintf(stderr, "| | | | |Max | |Max |Global | |\n"); - fprintf(stderr, "| | | | |compute|Max work|sub |mem | |\n"); - fprintf(stderr, "|ID| Device Type| Name|Version|units |group |group|size | Driver version|\n"); - fprintf(stderr, "|--|-------------------|---------------------------------------|-------|-------|--------|-----|-------|---------------------|\n"); - for (int id = 0; id < device_count; ++id) { - sycl::device device = dpct::dev_mgr::instance().get_device(id); - sycl::backend backend = device.get_backend(); - std::string backend_type = get_device_backend_and_type(device); - int type_id=DeviceNums[backend_type]++; - std::stringstream device_type; - device_type << "[" << backend_type << ":" << std::to_string(type_id) << "]"; - print_device_detail(id, device, device_type.str()); - } -} - -void print_gpu_device_list() { - GGML_ASSERT(g_sycl_gpu_mgr); - - char* hint=NULL; - if (g_ggml_sycl_backend_gpu_mode == SYCL_SINGLE_GPU_MODE) { - hint = "use %d SYCL GPUs: [%s] with Max compute units:%d\n"; - } else { - hint = "detect %d SYCL GPUs: [%s] with top Max compute units:%d\n"; - } - fprintf(stderr, hint, - g_sycl_gpu_mgr->get_gpu_count(), - g_sycl_gpu_mgr->gpus_list.c_str(), - g_sycl_gpu_mgr->max_compute_units); -} - -int get_sycl_env(const char *env_name, int default_val) { - char *user_device_string = getenv(env_name); - int user_number = default_val; - - unsigned n; - if (user_device_string != NULL && - sscanf(user_device_string, " %u", &n) == 1) { - user_number = (int)n; - } else { - user_number = default_val; - } - return user_number; -} - -int get_work_group_size(int user_device_id) { - dpct::device_info prop; - dpct::get_device_info(prop, - dpct::dev_mgr::instance().get_device(user_device_id)); - return prop.get_max_work_group_size(); -} - -static void ggml_init_sycl() try { - static bool initialized = false; - - if (!initialized) { - fprintf(stderr, "[SYCL] call ggml_init_sycl\n"); - g_ggml_sycl_debug = get_sycl_env("GGML_SYCL_DEBUG", 0); - - fprintf(stderr, "%s: GGML_SYCL_DEBUG: %d\n", __func__, g_ggml_sycl_debug); - -#if defined(GGML_SYCL_F16) - fprintf(stderr, "%s: GGML_SYCL_F16: yes\n", __func__); -#else - fprintf(stderr, "%s: GGML_SYCL_F16: no\n", __func__); -#endif - -/* NOT REMOVE, keep it for next optimize for XMX. -#if defined(SYCL_USE_XMX) - fprintf(stderr, "%s: SYCL_USE_XMX: yes\n", __func__); -#else - fprintf(stderr, "%s: SYCL_USE_XMX: no\n", __func__); -#endif -*/ - - if (CHECK_TRY_ERROR(g_all_sycl_device_count = - dpct::dev_mgr::instance().device_count()) != 0) { - initialized = true; - g_sycl_loaded = false; - return; - } - GGML_ASSERT(g_all_sycl_device_count <= GGML_SYCL_MAX_DEVICES); - ggml_backend_sycl_print_sycl_devices(); - initialized = true; - g_sycl_loaded = true; - } -} -catch (sycl::exception const &exc) { - std::cerr << exc.what() << "Exception caught at file:" << __FILE__ - << ", line:" << __LINE__ << std::endl; - std::exit(1); -} - -void ggml_init_by_gpus(int device_count) try { - g_device_count = device_count; - g_work_group_size = g_sycl_gpu_mgr->work_group_size; - - int64_t total_vram = 0; - - print_gpu_device_list(); - - for (int id = 0; id < GGML_SYCL_MAX_DEVICES; ++id) { - g_device_caps[id].vmm = 0; - g_device_caps[id].device_id = -1; - g_device_caps[id].cc = 0; - g_tensor_split[id] = 0; - g_default_tensor_split[id] = 0; - } - - for (int i = 0; i < g_device_count; ++i) { - int device_id = g_sycl_gpu_mgr->gpus[i]; - g_device_caps[i].vmm = 0; - - dpct::device_info prop; - SYCL_CHECK(CHECK_TRY_ERROR(dpct::get_device_info( - prop, dpct::dev_mgr::instance().get_device(device_id)))); - - g_default_tensor_split[i] = total_vram; - total_vram += prop.get_global_mem_size(); - - g_device_caps[i].cc = - 100 * prop.get_major_version() + 10 * prop.get_minor_version(); - } - - for (int i = 0; i < g_device_count; ++i) { - g_default_tensor_split[i] /= total_vram; - } - - for (int i = 0; i < g_device_count; ++i) { - SYCL_CHECK(ggml_sycl_set_device(i)); - - // create sycl streams - for (int is = 0; is < MAX_STREAMS; ++is) { - SYCL_CHECK(CHECK_TRY_ERROR( - g_syclStreams[i][is] = - dpct::get_current_device().create_queue( - g_sycl_gpu_mgr->get_co_ctx(), dpct::get_current_device()))); - } - - const dpct::queue_ptr stream = g_syclStreams[i][0]; - // create sycl handle - SYCL_CHECK(CHECK_TRY_ERROR(g_sycl_handles[i] = stream)); - } -} -catch (sycl::exception const &exc) { - std::cerr << exc.what() << "Exception caught at file:" << __FILE__ - << ", line:" << __LINE__ << std::endl; - std::exit(1); -} - -void *ggml_sycl_host_malloc(size_t size) try { - if (getenv("GGML_SYCL_NO_PINNED") != nullptr) { - return nullptr; - } - - void * ptr = nullptr; - //allow to use dpct::get_in_order_queue() for host malloc - dpct::err0 err = CHECK_TRY_ERROR( - ptr = (void *)sycl::malloc_host(size, dpct::get_in_order_queue())); - - if (err != 0) { - // clear the error - fprintf( - stderr, - "WARNING: failed to allocate %.2f MB of pinned memory: %s\n", - size / 1024.0 / 1024.0, - "syclGetErrorString is not supported"); - return nullptr; - } - - return ptr; -} -catch (sycl::exception const &exc) { - std::cerr << exc.what() << "Exception caught at file:" << __FILE__ - << ", line:" << __LINE__ << std::endl; - std::exit(1); -} - -void ggml_sycl_host_free(void *ptr) try { - //allow to use dpct::get_in_order_queue() for host malloc - SYCL_CHECK(CHECK_TRY_ERROR(sycl::free(ptr, dpct::get_in_order_queue()))); -} -catch (sycl::exception const &exc) { - std::cerr << exc.what() << "Exception caught at file:" << __FILE__ - << ", line:" << __LINE__ << std::endl; - std::exit(1); -} - -static dpct::err0 ggml_sycl_cpy_tensor_2d(void *dst, - const struct ggml_tensor *src, - int64_t i3, int64_t i2, - int64_t i1_low, int64_t i1_high, - dpct::queue_ptr stream) try { - - dpct::memcpy_direction kind; - char * src_ptr; - if (src->backend == GGML_BACKEND_TYPE_CPU) { - kind = dpct::host_to_device; - src_ptr = (char *) src->data; - // GGML_SYCL_DEBUG("ggml_sycl_cpy_tensor_2d GGML_BACKEND_TYPE_CPU src_ptr %p\n", src_ptr); - } else if (src->backend == GGML_BACKEND_TYPE_GPU || src->backend == GGML_BACKEND_TYPE_GPU_SPLIT) { - GGML_ASSERT(src->backend != GGML_BACKEND_TYPE_GPU_SPLIT || (i1_low == 0 && i1_high == src->ne[1])); - kind = dpct::device_to_device; - ggml_tensor_extra_gpu * extra = (ggml_tensor_extra_gpu *) src->extra; - int id; - SYCL_CHECK(CHECK_TRY_ERROR( - id = get_current_device_id())); - // GGML_SYCL_DEBUG("current device index %d\n", id); - src_ptr = (char *) extra->data_device[id]; - } else { - // GGML_SYCL_DEBUG("GGML_ASSERT(false)\n"); - GGML_ASSERT(false); - } - char * dst_ptr = (char *) dst; - - GGML_TENSOR_LOCALS_1(int64_t, ne, src, ne); - GGML_TENSOR_LOCALS(int64_t, nb, src, nb); - const enum ggml_type type = src->type; - const int64_t ts = ggml_type_size(type); - const int64_t bs = ggml_blck_size(type); - int64_t i1_diff = i1_high - i1_low; - - const char * x = src_ptr + i1_low*nb1 + i2*nb2 + i3*nb3; - if (nb0 == ts && nb1 == ts*ne0/bs) { - // GGML_SYCL_DEBUG("stream->memcpy: dst_ptr=%p, x=%p, size=%lu\n", dst_ptr, x, i1_diff * nb1); - // return CHECK_TRY_ERROR(stream->memcpy(dst_ptr, x, i1_diff * nb1)); - return CHECK_TRY_ERROR(dpct::async_dpct_memcpy(dst_ptr, x, i1_diff * nb1, - kind, *stream)); - - } else if (nb0 == ts) { - return CHECK_TRY_ERROR( - dpct::async_dpct_memcpy(dst_ptr, ts * ne0 / bs, x, nb1, - ts * ne0 / bs, i1_diff, kind, *stream)); - } else { - for (int64_t i1 = 0; i1 < i1_diff; i1++) { - const void * rx = (const void *) ((const char *) x + i1*nb1); - void * rd = (void *) (dst_ptr + i1*ts*ne0/bs); - // pretend the row is a matrix with cols=1 - dpct::err0 r = CHECK_TRY_ERROR(dpct::async_dpct_memcpy( - rd, ts / bs, rx, nb0, ts / bs, ne0, kind, *stream)); - /* - DPCT1001:85: The statement could not be removed. - */ - /* - DPCT1000:86: Error handling if-stmt was detected but could not be - rewritten. - */ - if (r != 0) return r; - } - return 0; - } -} -catch (sycl::exception const &exc) { - std::cerr << exc.what() << "Exception caught at file:" << __FILE__ - << ", line:" << __LINE__ << std::endl; - std::exit(1); -} - -static void ggml_sycl_op_get_rows(const ggml_tensor *src0, - const ggml_tensor *src1, ggml_tensor *dst, - const float *src0_d, const float *src1_d, - float *dst_d, const dpct::queue_ptr &stream) { - - GGML_ASSERT(src1->type == GGML_TYPE_I32); - GGML_ASSERT(dst->type == GGML_TYPE_F32); - - GGML_ASSERT(src0->nb[0] == ggml_type_size(src0->type)); - GGML_ASSERT(src1->nb[0] == ggml_type_size(src1->type)); - GGML_ASSERT(dst->nb[0] == ggml_type_size(dst->type)); - - const int32_t * src1_i32 = (const int32_t *) src1_d; - - switch (src0->type) { - case GGML_TYPE_F16: - get_rows_sycl_float(src0, src1, dst, (const sycl::half *)src0_d, - src1_i32, dst_d, stream); - break; - case GGML_TYPE_F32: - get_rows_sycl_float(src0, src1, dst, src0_d, src1_i32, dst_d, stream); - break; - case GGML_TYPE_Q4_0: - get_rows_sycl(src0, src1, dst, src0_d, src1_i32, dst_d, stream); - break; - case GGML_TYPE_Q4_1: - get_rows_sycl(src0, src1, dst, src0_d, src1_i32, dst_d, stream); - break; - case GGML_TYPE_Q5_0: - get_rows_sycl(src0, src1, dst, src0_d, src1_i32, dst_d, stream); - break; - case GGML_TYPE_Q5_1: - get_rows_sycl(src0, src1, dst, src0_d, src1_i32, dst_d, stream); - break; - case GGML_TYPE_Q8_0: - get_rows_sycl(src0, src1, dst, src0_d, src1_i32, dst_d, stream); - break; - default: - // TODO: k-quants - fprintf(stderr, "%s: unsupported type: %s\n", __func__, ggml_type_name(src0->type)); - GGML_ASSERT(false); - break; - } -} - -template -inline void ggml_sycl_op_bin_bcast(const ggml_tensor *src0, - const ggml_tensor *src1, ggml_tensor *dst, - const float *src0_dd, const float *src1_dd, - float *dst_dd, - const dpct::queue_ptr &main_stream) { - - if (src0->type == GGML_TYPE_F32 && dst->type == GGML_TYPE_F32) { - op()(src0, src1, dst, src0_dd, src1_dd, dst_dd, main_stream); - } else if (src0->type == GGML_TYPE_F16 && dst->type == GGML_TYPE_F16) { - op()(src0, src1, dst, (const sycl::half *)src0_dd, src1_dd, - (sycl::half *)dst_dd, main_stream); - } else if (src0->type == GGML_TYPE_F16 && dst->type == GGML_TYPE_F32) { - op()(src0, src1, dst, (const sycl::half *)src0_dd, src1_dd, dst_dd, - main_stream); - } else if (src0->type == GGML_TYPE_I32 && dst->type == GGML_TYPE_I32) { - op()(src0, src1, dst, (const int32_t *)src0_dd, (const int32_t *)src1_dd, (int32_t *)dst_dd, - main_stream); - } else if (src0->type == GGML_TYPE_I16 && dst->type == GGML_TYPE_I16) { - op()(src0, src1, dst, (const int16_t *)src0_dd, (const int16_t *)src1_dd, (int16_t *)dst_dd, - main_stream); - } else { - fprintf(stderr, "%s: unsupported types: dst: %s, src0: %s, src1: %s\n", __func__, - ggml_type_name(dst->type), ggml_type_name(src0->type), ggml_type_name(src1->type)); - GGML_ASSERT(false); - } -} - -static void ggml_sycl_op_repeat(const ggml_tensor *src0, - const ggml_tensor *src1, ggml_tensor *dst, - const float *src0_d, const float *src1_d, - float *dst_d, - const dpct::queue_ptr &main_stream) { - - ggml_sycl_op_bin_bcast>(dst, src0, dst, nullptr, src0_d, dst_d, main_stream); - - (void) src1; - (void) src1_d; -} - -inline void ggml_sycl_op_add(const ggml_tensor *src0, const ggml_tensor *src1, - ggml_tensor *dst, const float *src0_dd, - const float *src1_dd, float *dst_dd, - const dpct::queue_ptr &main_stream) { - - ggml_sycl_op_bin_bcast>(src0, src1, dst, src0_dd, src1_dd, dst_dd, main_stream); -} - -inline void ggml_sycl_op_acc(const ggml_tensor *src0, const ggml_tensor *src1, - ggml_tensor *dst, const float *src0_dd, - const float *src1_dd, float *dst_dd, - const dpct::queue_ptr &main_stream) { - - GGML_ASSERT(src0->type == GGML_TYPE_F32); - GGML_ASSERT(src1->type == GGML_TYPE_F32); - GGML_ASSERT( dst->type == GGML_TYPE_F32); - GGML_ASSERT(dst->ne[3] == 1); // just 3D tensors supported - - int nb1 = dst->op_params[0] / 4; // 4 bytes of float32 - int nb2 = dst->op_params[1] / 4; // 4 bytes of float32 - // int nb3 = dst->op_params[2] / 4; // 4 bytes of float32 - unused - int offset = dst->op_params[3] / 4; // offset in bytes - - acc_f32_sycl(src0_dd, src1_dd, dst_dd, ggml_nelements(dst), src1->ne[0], src1->ne[1], src1->ne[2], nb1, nb2, offset, main_stream); - - (void) dst; -} - -inline void ggml_sycl_op_mul(const ggml_tensor *src0, const ggml_tensor *src1, - ggml_tensor *dst, const float *src0_dd, - const float *src1_dd, float *dst_dd, - const dpct::queue_ptr &main_stream) { - - ggml_sycl_op_bin_bcast>(src0, src1, dst, src0_dd, src1_dd, dst_dd, main_stream); -} - -inline void ggml_sycl_op_div(const ggml_tensor *src0, const ggml_tensor *src1, - ggml_tensor *dst, const float *src0_dd, - const float *src1_dd, float *dst_dd, - const dpct::queue_ptr &main_stream) { - - ggml_sycl_op_bin_bcast>(src0, src1, dst, src0_dd, src1_dd, dst_dd, main_stream); -} - -inline void ggml_sycl_op_gelu(const ggml_tensor *src0, const ggml_tensor *src1, - ggml_tensor *dst, const float *src0_dd, - const float *src1_dd, float *dst_dd, - const dpct::queue_ptr &main_stream) { - - GGML_ASSERT(src0->type == GGML_TYPE_F32); - GGML_ASSERT( dst->type == GGML_TYPE_F32); - - gelu_f32_sycl(src0_dd, dst_dd, ggml_nelements(src0), main_stream); - - (void) src1; - (void) dst; - (void) src1_dd; -} - -inline void ggml_sycl_op_silu(const ggml_tensor *src0, const ggml_tensor *src1, - ggml_tensor *dst, const float *src0_dd, - const float *src1_dd, float *dst_dd, - const dpct::queue_ptr &main_stream) { - - GGML_ASSERT(src0->type == GGML_TYPE_F32); - GGML_ASSERT( dst->type == GGML_TYPE_F32); - - silu_f32_sycl(src0_dd, dst_dd, ggml_nelements(src0), main_stream); - - (void) src1; - (void) dst; - (void) src1_dd; -} - -inline void ggml_sycl_op_gelu_quick(const ggml_tensor *src0, - const ggml_tensor *src1, ggml_tensor *dst, - const float *src0_dd, const float *src1_dd, - float *dst_dd, - const dpct::queue_ptr &main_stream) { - - GGML_ASSERT(src0->type == GGML_TYPE_F32); - GGML_ASSERT( dst->type == GGML_TYPE_F32); - - gelu_quick_f32_sycl(src0_dd, dst_dd, ggml_nelements(src0), main_stream); - - (void) src1; - (void) dst; - (void) src1_dd; -} - -inline void ggml_sycl_op_tanh(const ggml_tensor *src0, const ggml_tensor *src1, - ggml_tensor *dst, const float *src0_dd, - const float *src1_dd, float *dst_dd, - const dpct::queue_ptr &main_stream) { - - GGML_ASSERT(src0->type == GGML_TYPE_F32); - GGML_ASSERT( dst->type == GGML_TYPE_F32); - tanh_f32_sycl(src0_dd, dst_dd, ggml_nelements(src0), main_stream); - - (void) src1; - (void) dst; - (void) src1_dd; -} - -inline void ggml_sycl_op_relu(const ggml_tensor *src0, const ggml_tensor *src1, - ggml_tensor *dst, const float *src0_dd, - const float *src1_dd, float *dst_dd, - const dpct::queue_ptr &main_stream) { - - GGML_ASSERT(src0->type == GGML_TYPE_F32); - GGML_ASSERT( dst->type == GGML_TYPE_F32); - - relu_f32_sycl(src0_dd, dst_dd, ggml_nelements(src0), main_stream); - - (void) src1; - (void) dst; - (void) src1_dd; -} - -static void ggml_sycl_op_hardsigmoid(const ggml_tensor *src0, - const ggml_tensor *src1, ggml_tensor *dst, - const float *src0_dd, const float *src1_dd, - float *dst_dd, - const dpct::queue_ptr &main_stream) { - - GGML_ASSERT(src0->type == GGML_TYPE_F32); - GGML_ASSERT( dst->type == GGML_TYPE_F32); - - hardsigmoid_f32_sycl(src0_dd, dst_dd, ggml_nelements(src0), main_stream); - - (void) src1; - (void) dst; - (void) src1_dd; -} - -static void ggml_sycl_op_hardswish(const ggml_tensor *src0, - const ggml_tensor *src1, ggml_tensor *dst, - const float *src0_dd, const float *src1_dd, - float *dst_dd, const dpct::queue_ptr &main_stream) { - - GGML_ASSERT(src0->type == GGML_TYPE_F32); - GGML_ASSERT( dst->type == GGML_TYPE_F32); - - hardswish_f32_sycl(src0_dd, dst_dd, ggml_nelements(src0), main_stream); - - (void) src1; - (void) dst; - (void) src1_dd; -} - -inline void ggml_sycl_op_leaky_relu(const ggml_tensor *src0, - const ggml_tensor *src1, ggml_tensor *dst, - const float *src0_dd, const float *src1_dd, - float *dst_dd, - const dpct::queue_ptr &main_stream) { - - GGML_ASSERT(src0->type == GGML_TYPE_F32); - GGML_ASSERT( dst->type == GGML_TYPE_F32); - - float negative_slope; - memcpy(&negative_slope, dst->op_params, sizeof(float)); - - leaky_relu_f32_sycl(src0_dd, dst_dd, ggml_nelements(src0), negative_slope, main_stream); - - (void) src1; - (void) dst; - (void) src1_dd; -} - -inline void ggml_sycl_op_sqr(const ggml_tensor *src0, const ggml_tensor *src1, - ggml_tensor *dst, const float *src0_dd, - const float *src1_dd, float *dst_dd, - const dpct::queue_ptr &main_stream) { - - GGML_ASSERT(src0->type == GGML_TYPE_F32); - GGML_ASSERT( dst->type == GGML_TYPE_F32); - - sqr_f32_sycl(src0_dd, dst_dd, ggml_nelements(src0), main_stream); - - (void) src1; - (void) dst; - (void) src1_dd; -} - -inline void ggml_sycl_op_norm(const ggml_tensor *src0, const ggml_tensor *src1, - ggml_tensor *dst, const float *src0_dd, - const float *src1_dd, float *dst_dd, - const dpct::queue_ptr &main_stream) { - - GGML_ASSERT(src0->type == GGML_TYPE_F32); - GGML_ASSERT( dst->type == GGML_TYPE_F32); - - const int64_t ne00 = src0->ne[0]; - const int64_t nrows = ggml_nrows(src0); - - float eps; - memcpy(&eps, dst->op_params, sizeof(float)); - - norm_f32_sycl(src0_dd, dst_dd, ne00, nrows, eps, main_stream); - - (void) src1; - (void) dst; - (void) src1_dd; -} - -inline void ggml_sycl_op_group_norm(const ggml_tensor *src0, - const ggml_tensor *src1, ggml_tensor *dst, - const float *src0_dd, const float *src1_dd, - float *dst_dd, - const dpct::queue_ptr &main_stream) { - - GGML_ASSERT(src0->type == GGML_TYPE_F32); - GGML_ASSERT( dst->type == GGML_TYPE_F32); - - int num_groups = dst->op_params[0]; - int group_size = src0->ne[0] * src0->ne[1] * ((src0->ne[2] + num_groups - 1) / num_groups); - group_norm_f32_sycl(src0_dd, dst_dd, num_groups, group_size, src0->ne[0] * src0->ne[1] * src0->ne[2], main_stream); - - (void) src1; - (void) dst; - (void) src1_dd; -} - -inline void ggml_sycl_op_concat(const ggml_tensor *src0, - const ggml_tensor *src1, ggml_tensor *dst, - const float *src0_dd, const float *src1_dd, - float *dst_dd, - const dpct::queue_ptr &main_stream) { - - GGML_ASSERT(src0->type == GGML_TYPE_F32); - GGML_ASSERT(src1->type == GGML_TYPE_F32); - GGML_ASSERT(dst->type == GGML_TYPE_F32); - - for (int i3 = 0; i3 < dst->ne[3]; i3++) { - concat_f32_sycl(src0_dd + i3 * (src0->nb[3] / 4), src1_dd + i3 * (src1->nb[3] / 4), dst_dd + i3 * (dst->nb[3] / 4), dst->ne[0], dst->ne[1], dst->ne[2], src0->ne[2], main_stream); - } - - (void) src1; - (void) dst; -} - -inline void ggml_sycl_op_upscale(const ggml_tensor *src0, - const ggml_tensor *src1, ggml_tensor *dst, - const float *src0_dd, const float *src1_dd, - float *dst_dd, - const dpct::queue_ptr &main_stream) { - - GGML_ASSERT(src0->type == GGML_TYPE_F32); - GGML_ASSERT(dst->type == GGML_TYPE_F32); - GGML_ASSERT(src0->ne[3] == 1 && dst->ne[3] == 1); // just 3D tensors - - const int scale_factor = dst->op_params[0]; - - upscale_f32_sycl(src0_dd, dst_dd, src0->ne[0], src0->ne[1], src0->ne[2], scale_factor, main_stream); - - (void) src1; - (void) dst; - (void) src1_dd; -} - -inline void ggml_sycl_op_pad(const ggml_tensor *src0, const ggml_tensor *src1, - ggml_tensor *dst, const float *src0_dd, - const float *src1_dd, float *dst_dd, - const dpct::queue_ptr &main_stream) { - - GGML_ASSERT(src0->type == GGML_TYPE_F32); - GGML_ASSERT(dst->type == GGML_TYPE_F32); - GGML_ASSERT(src0->ne[3] == 1 && dst->ne[3] == 1); // just 3D tensors - - pad_f32_sycl(src0_dd, dst_dd, - src0->ne[0], src0->ne[1], src0->ne[2], - dst->ne[0], dst->ne[1], dst->ne[2], main_stream); - - (void) src1; - (void) dst; - (void) src1_dd; -} - -inline void ggml_sycl_op_rms_norm(const ggml_tensor *src0, - const ggml_tensor *src1, ggml_tensor *dst, - const float *src0_dd, const float *src1_dd, - float *dst_dd, - const dpct::queue_ptr &main_stream) { - - GGML_ASSERT(src0->type == GGML_TYPE_F32); - GGML_ASSERT( dst->type == GGML_TYPE_F32); - - const int64_t ne00 = src0->ne[0]; - const int64_t nrows = ggml_nrows(src0); - - float eps; - memcpy(&eps, dst->op_params, sizeof(float)); - - rms_norm_f32_sycl(src0_dd, dst_dd, ne00, nrows, eps, main_stream); - - (void) src1; - (void) dst; - (void) src1_dd; -} - -inline void ggml_sycl_op_mul_mat_q( - const ggml_tensor *src0, const ggml_tensor *src1, ggml_tensor *dst, - const char *src0_dd_i, const float *src1_ddf_i, const char *src1_ddq_i, - float *dst_dd_i, const int64_t row_low, const int64_t row_high, - const int64_t src1_ncols, const int64_t src1_padded_row_size, - const dpct::queue_ptr &stream) try { - - const int64_t ne00 = src0->ne[0]; - - const int64_t ne10 = src1->ne[0]; - GGML_ASSERT(ne10 % QK8_1 == 0); - - const int64_t ne0 = dst->ne[0]; - - const int64_t row_diff = row_high - row_low; - - int device_id; - SYCL_CHECK( - CHECK_TRY_ERROR(device_id = get_current_device_id())); - - // the main device has a larger memory buffer to hold the results from all GPUs - // nrows_dst == nrows of the matrix that the dequantize_mul_mat kernel writes into - const int64_t nrows_dst = dst->backend == GGML_BACKEND_TYPE_GPU && device_id == g_main_device ? ne0 : row_diff; - - switch (src0->type) { - case GGML_TYPE_Q4_0: - ggml_mul_mat_q4_0_q8_1_sycl(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, src1_ncols, src1_padded_row_size, nrows_dst, stream); - break; - case GGML_TYPE_Q4_1: - ggml_mul_mat_q4_1_q8_1_sycl(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, src1_ncols, src1_padded_row_size, nrows_dst, stream); - break; - case GGML_TYPE_Q5_0: - ggml_mul_mat_q5_0_q8_1_sycl(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, src1_ncols, src1_padded_row_size, nrows_dst, stream); - break; - case GGML_TYPE_Q5_1: - ggml_mul_mat_q5_1_q8_1_sycl(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, src1_ncols, src1_padded_row_size, nrows_dst, stream); - break; - case GGML_TYPE_Q8_0: - ggml_mul_mat_q8_0_q8_1_sycl(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, src1_ncols, src1_padded_row_size, nrows_dst, stream); - break; - case GGML_TYPE_Q2_K: - ggml_mul_mat_q2_K_q8_1_sycl(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, src1_ncols, src1_padded_row_size, nrows_dst, stream); - break; - case GGML_TYPE_Q3_K: - ggml_mul_mat_q3_K_q8_1_sycl(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, src1_ncols, src1_padded_row_size, nrows_dst, stream); - break; - case GGML_TYPE_Q4_K: - ggml_mul_mat_q4_K_q8_1_sycl(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, src1_ncols, src1_padded_row_size, nrows_dst, stream); - break; - case GGML_TYPE_Q5_K: - ggml_mul_mat_q5_K_q8_1_sycl(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, src1_ncols, src1_padded_row_size, nrows_dst, stream); - break; - case GGML_TYPE_Q6_K: - ggml_mul_mat_q6_K_q8_1_sycl(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, src1_ncols, src1_padded_row_size, nrows_dst, stream); - break; - default: - GGML_ASSERT(false); - break; - } - - (void) src1; - (void) dst; - (void) src1_ddf_i; -} -catch (sycl::exception const &exc) { - std::cerr << exc.what() << "Exception caught at file:" << __FILE__ - << ", line:" << __LINE__ << std::endl; - std::exit(1); -} - -static int64_t get_row_rounding(ggml_type type, const std::array & tensor_split) { - int64_t min_compute_capability = INT_MAX; - int64_t max_compute_capability = INT_MIN; - for (int i = 0; i < g_device_count; ++i) { - if (tensor_split[i] < (i + 1 < g_device_count ? tensor_split[i + 1] : 1.0f)) { - if (min_compute_capability > g_device_caps[i].cc) { - min_compute_capability = g_device_caps[i].cc; - } - if (max_compute_capability < g_device_caps[i].cc) { - max_compute_capability = g_device_caps[i].cc; - } - } - } - - switch(type) { - case GGML_TYPE_Q4_0: - case GGML_TYPE_Q4_1: - return max_compute_capability >= VER_GEN9 ? 128 : 64; - case GGML_TYPE_Q5_0: - case GGML_TYPE_Q5_1: - case GGML_TYPE_Q8_0: - return 64; - case GGML_TYPE_F16: - case GGML_TYPE_F32: - return 1; - case GGML_TYPE_Q2_K: - case GGML_TYPE_Q3_K: - case GGML_TYPE_Q4_K: - case GGML_TYPE_Q5_K: - case GGML_TYPE_IQ2_XXS: - case GGML_TYPE_IQ2_XS: - case GGML_TYPE_IQ2_S: - case GGML_TYPE_IQ1_S: - case GGML_TYPE_IQ1_M: - case GGML_TYPE_IQ3_XXS: - case GGML_TYPE_IQ4_XS: - case GGML_TYPE_IQ4_NL: - return max_compute_capability >= VER_GEN9 ? 128 : 64; - case GGML_TYPE_IQ3_S: - return max_compute_capability >= VER_GEN9 ? 128 : 64; - case GGML_TYPE_Q6_K: - return 64; - default: - GGML_ASSERT(false); - } - -} - -inline void ggml_sycl_op_mul_mat_vec_q( - const ggml_tensor *src0, const ggml_tensor *src1, ggml_tensor *dst, - const char *src0_dd_i, const float *src1_ddf_i, const char *src1_ddq_i, - float *dst_dd_i, const int64_t row_low, const int64_t row_high, - const int64_t src1_ncols, const int64_t src1_padded_row_size, - const dpct::queue_ptr &stream) { - - const int64_t ne10 = src1->ne[0]; - GGML_ASSERT(ne10 % QK8_1 == 0); - - const int64_t ne00 = src0->ne[0]; - const int64_t row_diff = row_high - row_low; - - int id; - SYCL_CHECK( - CHECK_TRY_ERROR(id = get_current_device_id())); - - // the main device has a larger memory buffer to hold the results from all GPUs - // nrows_dst == nrows of the matrix that the kernel writes into - const int64_t nrows_dst = dst->backend == GGML_BACKEND_TYPE_GPU && id == g_main_device ? ne00 : row_diff; - - switch (src0->type) { - case GGML_TYPE_Q4_0: - mul_mat_vec_q4_0_q8_1_sycl(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, stream); - break; - case GGML_TYPE_Q4_1: - mul_mat_vec_q4_1_q8_1_sycl(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, stream); - break; - case GGML_TYPE_Q5_0: - mul_mat_vec_q5_0_q8_1_sycl(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, stream); - break; - case GGML_TYPE_Q5_1: - mul_mat_vec_q5_1_q8_1_sycl(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, stream); - break; - case GGML_TYPE_Q8_0: - mul_mat_vec_q8_0_q8_1_sycl(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, stream); - break; - case GGML_TYPE_Q2_K: - mul_mat_vec_q2_K_q8_1_sycl(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, stream); - break; - case GGML_TYPE_Q3_K: - mul_mat_vec_q3_K_q8_1_sycl(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, stream); - break; - case GGML_TYPE_Q4_K: - mul_mat_vec_q4_K_q8_1_sycl(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, stream); - break; - case GGML_TYPE_Q5_K: - mul_mat_vec_q5_K_q8_1_sycl(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, stream); - break; - case GGML_TYPE_Q6_K: - mul_mat_vec_q6_K_q8_1_sycl(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, stream); - break; - case GGML_TYPE_IQ1_S: - mul_mat_vec_iq1_s_q8_1_sycl(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, stream); - break; - case GGML_TYPE_IQ1_M: - mul_mat_vec_iq1_m_q8_1_sycl(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, stream); - break; - case GGML_TYPE_IQ2_XXS: - mul_mat_vec_iq2_xxs_q8_1_sycl(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, stream); - break; - case GGML_TYPE_IQ2_XS: - mul_mat_vec_iq2_xs_q8_1_sycl(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, stream); - break; - case GGML_TYPE_IQ2_S: - mul_mat_vec_iq2_s_q8_1_sycl(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, stream); - break; - case GGML_TYPE_IQ3_XXS: - mul_mat_vec_iq3_xxs_q8_1_sycl(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, stream); - break; - case GGML_TYPE_IQ3_S: - mul_mat_vec_iq3_s_q8_1_sycl(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, stream); - break; - case GGML_TYPE_IQ4_NL: - mul_mat_vec_iq4_nl_q8_1_sycl(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, stream); - break; - case GGML_TYPE_IQ4_XS: - mul_mat_vec_iq4_xs_q8_1_sycl(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, stream); - break; - default: - GGML_ASSERT(false); - break; - } - - (void) src1; - (void) dst; - (void) src1_ddf_i; - (void) src1_ncols; - (void) src1_padded_row_size; -} - - -inline void ggml_sycl_op_dequantize_mul_mat_vec( - const ggml_tensor *src0, const ggml_tensor *src1, ggml_tensor *dst, - const char *src0_dd_i, const float *src1_ddf_i, const char *src1_ddq_i, - float *dst_dd_i, const int64_t row_low, const int64_t row_high, - const int64_t src1_ncols, const int64_t src1_padded_row_size, - const dpct::queue_ptr &stream) { - - const int64_t ne00 = src0->ne[0]; - const int64_t row_diff = row_high - row_low; - - GGML_ASSERT(src1->type == GGML_TYPE_F32); - - // on some GPUs it is faster to convert src1 to half and to use half precision intrinsics -#ifdef GGML_SYCL_F16 - sycl_pool_alloc src1_dfloat_a; - sycl::half *src1_dfloat = nullptr; // dfloat == half - - bool src1_convert_f16 = - src0->type == GGML_TYPE_Q4_0 || src0->type == GGML_TYPE_Q4_1 || - src0->type == GGML_TYPE_Q5_0 || src0->type == GGML_TYPE_Q5_1 || - src0->type == GGML_TYPE_Q8_0 || src0->type == GGML_TYPE_F16; - - if (src1_convert_f16) { - src1_dfloat = src1_dfloat_a.alloc(ne00); - const to_fp16_sycl_t to_fp16_sycl = ggml_get_to_fp16_sycl(src1->type); - GGML_ASSERT(to_fp16_sycl != nullptr); - to_fp16_sycl(src1_ddf_i, src1_dfloat, ne00, stream); - } -#else - const dfloat * src1_dfloat = (const dfloat *) src1_ddf_i; // dfloat == float, no conversion -#endif // GGML_SYCL_F16 - - switch (src0->type) { - case GGML_TYPE_Q4_0: - dequantize_mul_mat_vec_q4_0_sycl(src0_dd_i, src1_dfloat, dst_dd_i, ne00, row_diff, stream); - break; - case GGML_TYPE_Q4_1: - dequantize_mul_mat_vec_q4_1_sycl(src0_dd_i, src1_dfloat, dst_dd_i, ne00, row_diff, stream); - break; - case GGML_TYPE_Q5_0: - dequantize_mul_mat_vec_q5_0_sycl(src0_dd_i, src1_dfloat, dst_dd_i, ne00, row_diff, stream); - break; - case GGML_TYPE_Q5_1: - dequantize_mul_mat_vec_q5_1_sycl(src0_dd_i, src1_dfloat, dst_dd_i, ne00, row_diff, stream); - break; - case GGML_TYPE_Q8_0: - dequantize_mul_mat_vec_q8_0_sycl(src0_dd_i, src1_dfloat, dst_dd_i, ne00, row_diff, stream); - break; - case GGML_TYPE_Q2_K: - dequantize_mul_mat_vec_q2_K_sycl(src0_dd_i, src1_ddf_i, dst_dd_i, ne00, row_diff, stream); - break; - case GGML_TYPE_Q3_K: - dequantize_mul_mat_vec_q3_K_sycl(src0_dd_i, src1_ddf_i, dst_dd_i, ne00, row_diff, stream); - break; - case GGML_TYPE_Q4_K: - dequantize_mul_mat_vec_q4_K_sycl(src0_dd_i, src1_ddf_i, dst_dd_i, ne00, row_diff, stream); - break; - case GGML_TYPE_Q5_K: - dequantize_mul_mat_vec_q5_K_sycl(src0_dd_i, src1_ddf_i, dst_dd_i, ne00, row_diff, stream); - break; - case GGML_TYPE_Q6_K: - dequantize_mul_mat_vec_q6_K_sycl(src0_dd_i, src1_ddf_i, dst_dd_i, ne00, row_diff, stream); - break; - case GGML_TYPE_F16: - convert_mul_mat_vec_f16_sycl(src0_dd_i, src1_dfloat, dst_dd_i, ne00, row_diff, stream); - break; - default: - printf("ggml_sycl_op_dequantize_mul_mat_vec unsupported GGML_TYPE %d\n", src0->type); - GGML_ASSERT(false); - break; - } - - (void) src1; - (void) dst; - (void) src1_ddq_i; - (void) src1_ncols; - (void) src1_padded_row_size; -} - -inline void ggml_sycl_op_mul_mat_sycl( - const ggml_tensor *src0, const ggml_tensor *src1, ggml_tensor *dst, - const char *src0_dd_i, const float *src1_ddf_i, const char *src1_ddq_i, - float *dst_dd_i, const int64_t row_low, const int64_t row_high, - const int64_t src1_ncols, const int64_t src1_padded_row_size, - const dpct::queue_ptr &stream) try { - - GGML_ASSERT(src0_dd_i != nullptr); - GGML_ASSERT(src1_ddf_i != nullptr); - GGML_ASSERT(dst_dd_i != nullptr); - - const int64_t ne00 = src0->ne[0]; - const int64_t ne10 = src1->ne[0]; - - const int64_t ne0 = dst->ne[0]; - - const int64_t row_diff = row_high - row_low; - - int id; - SYCL_CHECK( - CHECK_TRY_ERROR(id = get_current_device_id())); - - // the main device has a larger memory buffer to hold the results from all GPUs - // ldc == nrows of the matrix that cuBLAS writes into - int ldc = dst->backend == GGML_BACKEND_TYPE_GPU && id == g_main_device ? ne0 : row_diff; - -#ifdef GGML_SYCL_F16 - bool use_fp16 = true; // TODO(Yu) SYCL capability check -#else - bool use_fp16 = false; -#endif - if ((src0->type == GGML_TYPE_F16 || ggml_is_quantized(src0->type)) && - use_fp16 && ggml_is_contiguous(src0) && row_diff == src0->ne[1] && - dst->op_params[0] == GGML_PREC_DEFAULT) { - - // GGML_SYCL_DEBUG("ggml_sycl_op_mul_mat_sycl - fp16 path\n"); - sycl_pool_alloc src0_as_f16; - if (src0->type != GGML_TYPE_F16) { - const to_fp16_sycl_t to_fp16_sycl = ggml_get_to_fp16_sycl(src0->type); - GGML_ASSERT(to_fp16_sycl != nullptr); - size_t ne = row_diff*ne00; - src0_as_f16.alloc(ne); - to_fp16_sycl(src0_dd_i, src0_as_f16.get(), ne, stream); - } - const sycl::half *src0_ptr = src0->type == GGML_TYPE_F16 - ? (const sycl::half *)src0_dd_i - : src0_as_f16.get(); - - sycl_pool_alloc src1_as_f16; - if (src1->type != GGML_TYPE_F16) { - const to_fp16_sycl_t to_fp16_sycl = ggml_get_to_fp16_sycl(src1->type); - GGML_ASSERT(to_fp16_sycl != nullptr); - size_t ne = src1_ncols*ne10; - src1_as_f16.alloc(ne); - to_fp16_sycl(src1_ddf_i, src1_as_f16.get(), ne, stream); - } - const sycl::half *src1_ptr = src1->type == GGML_TYPE_F16 - ? (const sycl::half *)src1->data + src1_padded_row_size - : src1_as_f16.get(); - sycl_pool_alloc dst_f16(row_diff * src1_ncols); - - const sycl::half alpha_f16 = 1.0f; - const sycl::half beta_f16 = 0.0f; - SYCL_CHECK(CHECK_TRY_ERROR(g_sycl_handles[id] = stream)); - SYCL_CHECK(CHECK_TRY_ERROR(dpct::gemm( - *g_sycl_handles[id], oneapi::mkl::transpose::trans, - oneapi::mkl::transpose::nontrans, row_diff, src1_ncols, ne10, - &alpha_f16, src0_ptr, dpct::library_data_t::real_half, ne00, - src1_ptr, dpct::library_data_t::real_half, ne10, &beta_f16, - dst_f16.get(), dpct::library_data_t::real_half, ldc, - dpct::library_data_t::real_half))); - g_sycl_handles[id]->wait(); - const to_fp32_sycl_t to_fp32_sycl = ggml_get_to_fp32_sycl(GGML_TYPE_F16); - to_fp32_sycl(dst_f16.get(), dst_dd_i, row_diff*src1_ncols, stream); - } - else { - // GGML_SYCL_DEBUG("ggml_sycl_op_mul_mat_sycl - fp32 path\n"); - sycl_pool_alloc src0_ddq_as_f32; - sycl_pool_alloc src1_ddq_as_f32; - if (src0->type != GGML_TYPE_F32) { - const to_fp32_sycl_t to_fp32_sycl = ggml_get_to_fp32_sycl(src0->type); - GGML_ASSERT(to_fp32_sycl != nullptr); - src0_ddq_as_f32.alloc(row_diff*ne00); - to_fp32_sycl(src0_dd_i, src0_ddq_as_f32.get(), row_diff*ne00, stream); - } - if (src1->type != GGML_TYPE_F32) { - const to_fp32_sycl_t to_fp32_sycl = ggml_get_to_fp32_sycl(src1->type); - GGML_ASSERT(to_fp32_sycl != nullptr); - src1_ddq_as_f32.alloc(src1_ncols*ne10); - to_fp32_sycl(src1_ddf_i, src1_ddq_as_f32.get(), src1_ncols*ne10, stream); - } - const float * src0_ddf_i = src0->type == GGML_TYPE_F32 ? (const float *) src0_dd_i : src0_ddq_as_f32.get(); - const float * src1_ddf1_i = src1->type == GGML_TYPE_F32 ? (const float *) src1_ddf_i : src1_ddq_as_f32.get(); - - const float alpha = 1.0f; - const float beta = 0.0f; - - SYCL_CHECK(CHECK_TRY_ERROR(g_sycl_handles[id] = stream)); - SYCL_CHECK(CHECK_TRY_ERROR(oneapi::mkl::blas::column_major::gemm( - *g_sycl_handles[id], oneapi::mkl::transpose::trans, - oneapi::mkl::transpose::nontrans, row_diff, src1_ncols, ne10, - dpct::get_value(&alpha, *g_sycl_handles[id]), src0_ddf_i, ne00, - src1_ddf1_i, ne10, dpct::get_value(&beta, *g_sycl_handles[id]), - dst_dd_i, ldc))); - g_sycl_handles[id]->wait(); - } - (void) dst; - (void) src1_ddq_i; - (void) src1_padded_row_size; -} -catch (sycl::exception const &exc) { - std::cerr << exc.what() << "Exception caught at file:" << __FILE__ - << ", line:" << __LINE__ << std::endl; - std::exit(1); -} - -inline void ggml_sycl_op_rope(const ggml_tensor *src0, const ggml_tensor *src1, - ggml_tensor *dst, const float *src0_dd, - const float *src1_dd, float *dst_dd, - const dpct::queue_ptr &main_stream) { - - GGML_ASSERT(src0->type == GGML_TYPE_F32 || src0->type == GGML_TYPE_F16); - GGML_ASSERT( dst->type == GGML_TYPE_F32 || dst->type == GGML_TYPE_F16); - GGML_ASSERT(src0->type == dst->type); - - const int64_t ne00 = src0->ne[0]; - const int64_t ne01 = src0->ne[1]; - const int64_t ne2 = dst->ne[2]; - const int64_t nrows = ggml_nrows(src0); - - //const int n_past = ((int32_t *) dst->op_params)[0]; - const int n_dims = ((int32_t *) dst->op_params)[1]; - const int mode = ((int32_t *) dst->op_params)[2]; - const int n_ctx = ((int32_t *) dst->op_params)[3]; - const int n_orig_ctx = ((int32_t *) dst->op_params)[4]; - - // RoPE alteration for extended context - float freq_base, freq_scale, ext_factor, attn_factor, beta_fast, beta_slow; - memcpy(&freq_base, (int32_t *) dst->op_params + 5, sizeof(float)); - memcpy(&freq_scale, (int32_t *) dst->op_params + 6, sizeof(float)); - memcpy(&ext_factor, (int32_t *) dst->op_params + 7, sizeof(float)); - memcpy(&attn_factor, (int32_t *) dst->op_params + 8, sizeof(float)); - memcpy(&beta_fast, (int32_t *) dst->op_params + 9, sizeof(float)); - memcpy(&beta_slow, (int32_t *) dst->op_params + 10, sizeof(float)); - - const int32_t * pos = nullptr; - if ((mode & 1) == 0) { - GGML_ASSERT(src1->type == GGML_TYPE_I32); - GGML_ASSERT(src1->ne[0] == ne2); - pos = (const int32_t *) src1_dd; - } - - const bool is_neox = mode & 2; - const bool is_glm = mode & 4; - - rope_corr_dims corr_dims; - ggml_rope_yarn_corr_dims(n_dims, n_orig_ctx, freq_base, beta_fast, beta_slow, corr_dims.v); - - // compute - if (is_glm) { - GGML_ASSERT(false); - rope_glm_f32_sycl(src0_dd, dst_dd, ne00, nrows, pos, freq_scale, ne01, freq_base, n_ctx, main_stream); - } else if (is_neox) { - if (src0->type == GGML_TYPE_F32) { - rope_neox_sycl( - (const float *)src0_dd, (float *)dst_dd, ne00, n_dims, nrows, pos, freq_scale, ne01, freq_base, ext_factor, - attn_factor, corr_dims, main_stream - ); - } else if (src0->type == GGML_TYPE_F16) { - rope_neox_sycl((const sycl::half *)src0_dd, (sycl::half *)dst_dd, - ne00, n_dims, nrows, pos, freq_scale, ne01, - freq_base, ext_factor, attn_factor, corr_dims, - main_stream); - } else { - GGML_ASSERT(false); - } - } else { - if (src0->type == GGML_TYPE_F32) { - rope_sycl( - (const float *)src0_dd, (float *)dst_dd, ne00, nrows, pos, freq_scale, ne01, freq_base, ext_factor, - attn_factor, corr_dims, main_stream - ); - } else if (src0->type == GGML_TYPE_F16) { - rope_sycl((const sycl::half *)src0_dd, (sycl::half *)dst_dd, ne00, - nrows, pos, freq_scale, ne01, freq_base, ext_factor, - attn_factor, corr_dims, main_stream); - } else { - GGML_ASSERT(false); - } - } - - (void) src1; - (void) dst; - (void) src1_dd; -} - -inline void ggml_sycl_op_alibi(const ggml_tensor *src0, const ggml_tensor *src1, - ggml_tensor *dst, const float *src0_dd, - const float *src1_dd, float *dst_dd, - const dpct::queue_ptr &main_stream) { - - GGML_ASSERT(src0->type == GGML_TYPE_F32); - GGML_ASSERT( dst->type == GGML_TYPE_F32); - - GGML_TENSOR_LOCALS_3(int64_t, ne0, src0, ne); - const int64_t nrows = ggml_nrows(src0); - - //const int n_past = ((int32_t *) dst->op_params)[0]; - const int n_head = ((int32_t *) dst->op_params)[1]; - float max_bias; - memcpy(&max_bias, (int32_t *) dst->op_params + 2, sizeof(float)); - - //GGML_ASSERT(ne01 + n_past == ne00); - GGML_ASSERT(n_head == ne02); - - const int n_heads_log2_floor = 1 << (int) floor(log2(n_head)); - - const float m0 = powf(2.0f, -(max_bias) / n_heads_log2_floor); - const float m1 = powf(2.0f, -(max_bias / 2.0f) / n_heads_log2_floor); - - alibi_f32_sycl(src0_dd, dst_dd, ne00, nrows, ne01, n_heads_log2_floor, m0, m1, main_stream); - - (void) src1; - (void) src1_dd; -} - -static void ggml_sycl_op_pool2d(const ggml_tensor *src0, - const ggml_tensor *src1, ggml_tensor *dst, - const float *src0_dd, const float *src1_dd, - float *dst_dd, const dpct::queue_ptr &main_stream) { - - GGML_ASSERT(src0->type == GGML_TYPE_F32); - GGML_ASSERT( dst->type == GGML_TYPE_F32); - - const int32_t * opts = (const int32_t *)dst->op_params; - enum ggml_op_pool op = static_cast(opts[0]); - const int k0 = opts[1]; - const int k1 = opts[2]; - const int s0 = opts[3]; - const int s1 = opts[4]; - const int p0 = opts[5]; - const int p1 = opts[6]; - - const int64_t IH = src0->ne[1]; - const int64_t IW = src0->ne[0]; - - const int64_t N = dst->ne[3]; - const int64_t OC = dst->ne[2]; - const int64_t OH = dst->ne[1]; - const int64_t OW = dst->ne[0]; - - const int parallel_elements = N * OC * OH * OW; - const int num_blocks = (parallel_elements + SYCL_POOL2D_BLOCK_SIZE - 1) / SYCL_POOL2D_BLOCK_SIZE; - sycl::range<3> block_nums(1, 1, num_blocks); - main_stream->parallel_for( - sycl::nd_range<3>(block_nums * - sycl::range<3>(1, 1, SYCL_IM2COL_BLOCK_SIZE), - sycl::range<3>(1, 1, SYCL_IM2COL_BLOCK_SIZE)), - [=](sycl::nd_item<3> item_ct1) { - pool2d_nchw_kernel(IH, IW, OH, OW, k1, k0, s1, s0, p1, p0, - parallel_elements, src0_dd, dst_dd, op, - item_ct1); - }); - - (void) src1; - (void) src1_dd; -} - -inline void ggml_sycl_op_im2col(const ggml_tensor *src0, - const ggml_tensor *src1, ggml_tensor *dst, - const float *src0_dd, const float *src1_dd, - float *dst_dd, - const dpct::queue_ptr &main_stream) { - - GGML_ASSERT(src0->type == GGML_TYPE_F16); - GGML_ASSERT(src1->type == GGML_TYPE_F32); - GGML_ASSERT( dst->type == GGML_TYPE_F16 || dst->type == GGML_TYPE_F32); - - const int32_t s0 = ((const int32_t*)(dst->op_params))[0]; - const int32_t s1 = ((const int32_t*)(dst->op_params))[1]; - const int32_t p0 = ((const int32_t*)(dst->op_params))[2]; - const int32_t p1 = ((const int32_t*)(dst->op_params))[3]; - const int32_t d0 = ((const int32_t*)(dst->op_params))[4]; - const int32_t d1 = ((const int32_t*)(dst->op_params))[5]; - - const bool is_2D = ((const int32_t*)(dst->op_params))[6] == 1; - - const int64_t IC = src1->ne[is_2D ? 2 : 1]; - const int64_t IH = is_2D ? src1->ne[1] : 1; - const int64_t IW = src1->ne[0]; - - const int64_t KH = is_2D ? src0->ne[1] : 1; - const int64_t KW = src0->ne[0]; - - const int64_t OH = is_2D ? dst->ne[2] : 1; - const int64_t OW = dst->ne[1]; - - const size_t delta_offset = src1->nb[is_2D ? 2 : 1] / 4; // nb is byte offset, src is type float32 - - if (dst->type == GGML_TYPE_F16) { - im2col_sycl(src1_dd, (sycl::half *)dst_dd, IW, IH, OW, OH, KW, KH, IC, delta_offset, s0, s1, p0, p1, d0, d1, main_stream); - } else { - im2col_sycl(src1_dd, (float *)dst_dd, IW, IH, OW, OH, KW, KH, IC, delta_offset, s0, s1, p0, p1, d0, d1, main_stream); - } - - (void) src0; - (void) src0_dd; -} - -inline void ggml_sycl_op_sum_rows(const ggml_tensor *src0, - const ggml_tensor *src1, ggml_tensor *dst, - const float *src0_dd, const float *src1_dd, - float *dst_dd, - const dpct::queue_ptr &main_stream) { - - GGML_ASSERT(src0->type == GGML_TYPE_F32); - GGML_ASSERT( dst->type == GGML_TYPE_F32); - - const int64_t ncols = src0->ne[0]; - const int64_t nrows = ggml_nrows(src0); - - sum_rows_f32_sycl(src0_dd, dst_dd, ncols, nrows, main_stream); - - (void) src1; - (void) dst; - (void) src1_dd; -} - -inline void ggml_sycl_op_argsort(const ggml_tensor *src0, - const ggml_tensor *src1, ggml_tensor *dst, - const float *src0_dd, const float *src1_dd, - float *dst_dd, - const dpct::queue_ptr &main_stream) { - - GGML_ASSERT(src0->type == GGML_TYPE_F32); - GGML_ASSERT( dst->type == GGML_TYPE_I32); - - const int64_t ncols = src0->ne[0]; - const int64_t nrows = ggml_nrows(src0); - - enum ggml_sort_order order = (enum ggml_sort_order) dst->op_params[0]; - - argsort_f32_i32_sycl(src0_dd, (int *)dst_dd, ncols, nrows, order, main_stream); - - (void) src1; - (void) dst; - (void) src1_dd; -} - -inline void ggml_sycl_op_diag_mask_inf(const ggml_tensor *src0, - const ggml_tensor *src1, - ggml_tensor *dst, const float *src0_dd, - const float *src1_dd, float *dst_dd, - const dpct::queue_ptr &main_stream) { - - GGML_ASSERT(src0->type == GGML_TYPE_F32); - GGML_ASSERT( dst->type == GGML_TYPE_F32); - - const int64_t ne00 = src0->ne[0]; - const int64_t ne01 = src0->ne[1]; - const int nrows0 = ggml_nrows(src0); - - const int n_past = ((int32_t *) dst->op_params)[0]; - - diag_mask_inf_f32_sycl(src0_dd, dst_dd, ne00, nrows0, ne01, n_past, main_stream); - - (void) src1; - (void) dst; - (void) src1_dd; -} - -inline void ggml_sycl_op_soft_max(const ggml_tensor *src0, - const ggml_tensor *src1, ggml_tensor *dst, - const float *src0_dd, const float *src1_dd, - float *dst_dd, - const dpct::queue_ptr &main_stream) { - - GGML_ASSERT(src0->type == GGML_TYPE_F32); - GGML_ASSERT( dst->type == GGML_TYPE_F32); - - GGML_ASSERT(!src1 || src1->type == GGML_TYPE_F32); // src1 contains mask and it is optional - - const int64_t ne00 = src0->ne[0]; - const int64_t nrows_x = ggml_nrows(src0); - const int64_t nrows_y = src0->ne[1]; - - float scale = 1.0f; - float max_bias = 0.0f; - - memcpy(&scale, dst->op_params + 0, sizeof(float)); - memcpy(&max_bias, dst->op_params + 1, sizeof(float)); - - // positions tensor - float * src2_dd = nullptr; - sycl_pool_alloc src2_f; - - ggml_tensor * src2 = dst->src[2]; - const bool use_src2 = src2 != nullptr; - - if (use_src2) { - const bool src2_on_device = src2->backend == GGML_BACKEND_TYPE_GPU; - - if (src2_on_device) { - ggml_tensor_extra_gpu * src2_extra = (ggml_tensor_extra_gpu *) src2->extra; - src2_dd = (float *) src2_extra->data_device[g_main_device]; - } else { - src2_dd = src2_f.alloc(ggml_nelements(src2)); - SYCL_CHECK(ggml_sycl_cpy_tensor_2d(src2_dd, src2, 0, 0, 0, 1, main_stream)); - } - } - - soft_max_f32_sycl(src0_dd, src1 ? src1_dd : nullptr, src2_dd, dst_dd, ne00, - nrows_x, nrows_y, scale, max_bias, main_stream); -} - -inline void ggml_sycl_op_scale(const ggml_tensor *src0, const ggml_tensor *src1, - ggml_tensor *dst, const float *src0_dd, - const float *src1_dd, float *dst_dd, - const dpct::queue_ptr &main_stream) { - - GGML_ASSERT(src0->type == GGML_TYPE_F32); - GGML_ASSERT( dst->type == GGML_TYPE_F32); - - float scale; - memcpy(&scale, dst->op_params, sizeof(float)); - - scale_f32_sycl(src0_dd, dst_dd, scale, ggml_nelements(src0), main_stream); - /* - DPCT1010:87: SYCL uses exceptions to report errors and does not use the - error codes. The call was replaced with 0. You need to rewrite this code. - */ - SYCL_CHECK(0); - - (void) src1; - (void) dst; - (void) src1_dd; -} - -inline void ggml_sycl_op_clamp(const ggml_tensor *src0, const ggml_tensor *src1, - ggml_tensor *dst, const float *src0_dd, - const float *src1_dd, float *dst_dd, - const dpct::queue_ptr &main_stream) { - - GGML_ASSERT(src0->type == GGML_TYPE_F32); - GGML_ASSERT( dst->type == GGML_TYPE_F32); - - float min; - float max; - memcpy(&min, dst->op_params, sizeof(float)); - memcpy(&max, (float *) dst->op_params + 1, sizeof(float)); - - clamp_f32_sycl(src0_dd, dst_dd, min, max, ggml_nelements(src0), main_stream); - /* - DPCT1010:88: SYCL uses exceptions to report errors and does not use the - error codes. The call was replaced with 0. You need to rewrite this code. - */ - SYCL_CHECK(0); - - (void) src1; - (void) dst; - (void) src1_dd; -} - -static void ggml_sycl_op_flatten(const ggml_tensor *src0, - const ggml_tensor *src1, ggml_tensor *dst, - const ggml_sycl_op_flatten_t op) try { - const int64_t nrows0 = ggml_nrows(src0); - - const bool use_src1 = src1 != nullptr; - const int64_t nrows1 = use_src1 ? ggml_nrows(src1) : 1; - - GGML_ASSERT(!use_src1 || src1->backend != GGML_BACKEND_TYPE_GPU_SPLIT); - GGML_ASSERT( dst->backend != GGML_BACKEND_TYPE_GPU_SPLIT); - - ggml_tensor_extra_gpu * src0_extra = (ggml_tensor_extra_gpu *) src0->extra; - ggml_tensor_extra_gpu * src1_extra = use_src1 ? (ggml_tensor_extra_gpu *) src1->extra : nullptr; - ggml_tensor_extra_gpu * dst_extra = (ggml_tensor_extra_gpu *) dst->extra; - - const bool src0_on_device = src0->backend == GGML_BACKEND_TYPE_GPU || src0->backend == GGML_BACKEND_TYPE_GPU_SPLIT; - const bool src1_on_device = use_src1 && src1->backend == GGML_BACKEND_TYPE_GPU; - const bool dst_on_device = dst->backend == GGML_BACKEND_TYPE_GPU; - - // dd = data device - float * src0_ddf = nullptr; - float * src1_ddf = nullptr; - float * dst_ddf = nullptr; - - sycl_pool_alloc src0_f; - sycl_pool_alloc src1_f; - sycl_pool_alloc dst_f; - - ggml_sycl_set_device(g_main_device); - dpct::queue_ptr main_stream = g_syclStreams[g_main_device][0]; - // GGML_SYCL_DEBUG("g_main_device=%d, main_stream=%p src0_on_device=%d, src1_on_device=%d, dst_on_device=%d\n", - // g_main_device, main_stream, src0_on_device, src1_on_device, dst_on_device); - - if (src0_on_device) { - src0_ddf = (float *) src0_extra->data_device[g_main_device]; - } else { - src0_ddf = src0_f.alloc(ggml_nelements(src0)); - // GGML_SYCL_DEBUG("before ggml_sycl_cpy_tensor_2d src0_ddf=%p, src0=%p\n", src0_ddf, src0); - SYCL_CHECK(ggml_sycl_cpy_tensor_2d(src0_ddf, src0, 0, 0, 0, nrows0, main_stream)); - } - - if (use_src1) { - if (src1_on_device) { - src1_ddf = (float *) src1_extra->data_device[g_main_device]; - } else { - src1_ddf = src1_f.alloc(ggml_nelements(src1)); - SYCL_CHECK(ggml_sycl_cpy_tensor_2d(src1_ddf, src1, 0, 0, 0, nrows1, main_stream)); - } - } - if (dst_on_device) { - dst_ddf = (float *) dst_extra->data_device[g_main_device]; - } else { - dst_ddf = dst_f.alloc(ggml_nelements(dst)); - } - - // GGML_SYCL_DEBUG("op src0=%p, src1=%p, dst=%p, src0_ddf=%p, src1_ddf=%p, dst_ddf=%p, main_stream=%p\n", - // src0, src1, dst, src0_ddf, src1_ddf, dst_ddf, main_stream); - // do the computation - op(src0, src1, dst, src0_ddf, src1_ddf, dst_ddf, main_stream); - /* - DPCT1010:89: SYCL uses exceptions to report errors and does not use the - error codes. The call was replaced with 0. You need to rewrite this code. - */ - SYCL_CHECK(0); - - // copy dst to host if necessary - if (!dst_on_device) { - SYCL_CHECK(CHECK_TRY_ERROR( - main_stream->memcpy(dst->data, dst_ddf, ggml_nbytes(dst)).wait())); - } - - if (dst->backend == GGML_BACKEND_TYPE_CPU) { - SYCL_CHECK(CHECK_TRY_ERROR( - dpct::get_current_device().queues_wait_and_throw())); - } - // print_ggml_tensor("tensor", dst); -} -catch (sycl::exception const &exc) { - - std::cerr << exc.what() << "Exception caught at file:" << __FILE__ - << ", line:" << __LINE__ << std::endl; - std::exit(1); -} - -static void ggml_sycl_set_peer_access(const int n_tokens) { - static bool peer_access_enabled = false; - - const bool enable_peer_access = n_tokens <= GGML_SYCL_PEER_MAX_BATCH_SIZE; - - if (peer_access_enabled == enable_peer_access) { - return; - } - -#ifdef NDEBUG - for (int i = 0; i < g_device_count; ++i) { - SYCL_CHECK(ggml_sycl_set_device(i)); - // SYCL_CHECK(syclDeviceSynchronize()); - } - - for (int i = 0; i < g_device_count; ++i) { - SYCL_CHECK(ggml_sycl_set_device(i)); - - for (int id_other = 0; id_other < g_device_count; ++id_other) { - if (i == id_other) { - continue; - } - if (i != g_main_device && id_other != g_main_device) { - continue; - } - - // int can_access_peer; - // SYCL_CHECK(syclDeviceCanAccessPeer(&can_access_peer, id, id_other)); - // if (can_access_peer) { - // if (enable_peer_access) { - // SYCL_CHECK(syclDeviceEnablePeerAccess(id_other, 0)); - // } else { - // SYCL_CHECK(syclDeviceDisablePeerAccess(id_other)); - // } - // } - } - } -#endif // NDEBUG - - peer_access_enabled = enable_peer_access; -} - -struct ggml_backend_sycl_split_buffer_type_context { - std::array tensor_split; -}; - -static void ggml_sycl_op_mul_mat(const ggml_tensor *src0, - const ggml_tensor *src1, ggml_tensor *dst, - ggml_sycl_op_mul_mat_t op, - const bool convert_src1_to_q8_1) try { - - GGML_TENSOR_LOCALS(int64_t, ne0, src0, ne); - - GGML_TENSOR_LOCALS(int64_t, ne1, src1, ne); - const int64_t nrows1 = ggml_nrows(src1); - - GGML_ASSERT(ne03 == ne13); - - const int64_t ne0 = dst->ne[0]; - const int64_t ne1 = dst->ne[1]; - - const int nb2 = dst->nb[2]; - const int nb3 = dst->nb[3]; - - GGML_ASSERT(dst->backend != GGML_BACKEND_TYPE_GPU_SPLIT); - GGML_ASSERT(src1->backend != GGML_BACKEND_TYPE_GPU_SPLIT); - GGML_ASSERT(src1->type == GGML_TYPE_F32 || (src1->ne[2] == 1 && src1->ne[3] == 1)); - - GGML_ASSERT(ne12 >= ne02 && ne12 % ne02 == 0); - - const int64_t i02_divisor = ne12 / ne02; - - const size_t src0_ts = ggml_type_size(src0->type); - const size_t src0_bs = ggml_blck_size(src0->type); - const size_t q8_1_ts = sizeof(block_q8_1); - const size_t q8_1_bs = QK8_1; - - ggml_tensor_extra_gpu * src0_extra = (ggml_tensor_extra_gpu *) src0->extra; - ggml_tensor_extra_gpu * src1_extra = (ggml_tensor_extra_gpu *) src1->extra; - ggml_tensor_extra_gpu * dst_extra = (ggml_tensor_extra_gpu *) dst->extra; - - const bool src0_on_device = src0->backend == GGML_BACKEND_TYPE_GPU || src0->backend == GGML_BACKEND_TYPE_GPU_SPLIT; - const bool src0_is_contiguous = ggml_is_contiguous(src0); - const bool src1_is_contiguous = ggml_is_contiguous(src1); - - int64_t src1_padded_col_size = GGML_PAD(ne10, MATRIX_ROW_PADDING); - - const bool split = src0->backend == GGML_BACKEND_TYPE_GPU_SPLIT; - GGML_ASSERT(!(split && ne02 > 1)); - GGML_ASSERT(!(split && ne03 > 1)); - GGML_ASSERT(!(split && ne02 < ne12)); - - std::array tensor_split; - if (split) { - // TODO: check that src0->buffer->buft is a split buffer type, replace GGML_BACKEND_TYPE_GPU_SPLIT check - // GGML_ASSERT(src0->buffer != nullptr && src0->buffer->buft == ...); - ggml_backend_sycl_split_buffer_type_context * buft_ctx = (ggml_backend_sycl_split_buffer_type_context *) src0->buffer->buft->context; - tensor_split = buft_ctx->tensor_split; - } - - struct dev_data { - sycl_pool_alloc src0_dd_alloc; - sycl_pool_alloc src1_ddf_alloc; - sycl_pool_alloc src1_ddq_alloc; - sycl_pool_alloc dst_dd_alloc; - - char *src0_dd = nullptr; - float *src1_ddf = nullptr; // float - char *src1_ddq = nullptr; // q8_1 - float *dst_dd = nullptr; - - int64_t row_low; - int64_t row_high; - }; - - dev_data dev[GGML_SYCL_MAX_DEVICES]; - - int used_devices = 0; - dpct::queue_ptr main_stream = g_syclStreams[g_main_device][0]; - - for (int i = 0; i < g_device_count; ++i) { - // by default, use all rows - dev[i].row_low = 0; - dev[i].row_high = ne01; - - // for multi GPU, get the row boundaries from tensor split - // and round to mul_mat_q tile sizes - if (split) { - const int64_t rounding = get_row_rounding(src0->type, tensor_split); - - if (i != 0) { - dev[i].row_low = ne01*tensor_split[i]; - if (dev[i].row_low < ne01) { - dev[i].row_low -= dev[i].row_low % rounding; - } - } - - if (i != g_device_count - 1) { - dev[i].row_high = ne01*tensor_split[i + 1]; - if (dev[i].row_high < ne01) { - dev[i].row_high -= dev[i].row_high % rounding; - } - } - } - } - - for (int i = 0; i < g_device_count; ++i) { - if ((!split && i != g_main_device) || dev[i].row_low == dev[i].row_high) { - continue; - } - - used_devices++; - - const bool src1_on_device = src1->backend == GGML_BACKEND_TYPE_GPU && i == g_main_device; - const bool dst_on_device = dst->backend == GGML_BACKEND_TYPE_GPU && i == g_main_device; - - ggml_sycl_set_device(i); - dpct::queue_ptr stream = g_syclStreams[i][0]; - - if (src0_on_device && src0_is_contiguous) { - dev[i].src0_dd = (char *) src0_extra->data_device[i]; - } else { - dev[i].src0_dd = dev[i].src0_dd_alloc.alloc(ggml_nbytes(src0)); - } - - if (src1_on_device && src1_is_contiguous) { - dev[i].src1_ddf = (float *) src1_extra->data_device[i]; - } else { - dev[i].src1_ddf = dev[i].src1_ddf_alloc.alloc(ggml_nelements(src1)); - } - - if (convert_src1_to_q8_1) { - dev[i].src1_ddq = dev[i].src1_ddq_alloc.alloc(nrows1*src1_padded_col_size*q8_1_ts/q8_1_bs); - - if (src1_on_device && src1_is_contiguous) { - quantize_row_q8_1_sycl(dev[i].src1_ddf, dev[i].src1_ddq, ne10, nrows1, src1_padded_col_size, stream); - /* - DPCT1010:90: SYCL uses exceptions to report errors and does not - use the error codes. The call was replaced with 0. You need to - rewrite this code. - */ - SYCL_CHECK(0); - } - } - - if (dst_on_device) { - dev[i].dst_dd = (float *) dst_extra->data_device[i]; - } else { - const size_t size_dst_ddf = split ? (dev[i].row_high - dev[i].row_low)*ne1 : ggml_nelements(dst); - dev[i].dst_dd = dev[i].dst_dd_alloc.alloc(size_dst_ddf); - } - } - - // if multiple devices are used they need to wait for the main device - // here an event is recorded that signals that the main device has finished calculating the input data - if (split && used_devices > 1) { - ggml_sycl_set_device(g_main_device); - /* - DPCT1024:91: The original code returned the error code that was further - consumed by the program logic. This original code was replaced with 0. - You may need to rewrite the program logic consuming the error code. - */ - SYCL_CHECK(CHECK_TRY_ERROR( - *src0_extra->events[g_main_device][0] = - g_syclStreams[g_main_device][0]->ext_oneapi_submit_barrier())); - } - - const int64_t src1_col_stride = split && used_devices > 1 ? MUL_MAT_SRC1_COL_STRIDE : ne11; - for (int64_t src1_col_0 = 0; src1_col_0 < ne11; src1_col_0 += src1_col_stride) { - const int64_t is = split ? (src1_col_0/src1_col_stride) % MAX_STREAMS : 0; - const int64_t src1_ncols = src1_col_0 + src1_col_stride > ne11 ? ne11 - src1_col_0 : src1_col_stride; - - for (int i = 0; i < g_device_count; ++i) { - if ((!split && i != g_main_device) || dev[i].row_low == dev[i].row_high) { - continue; - } - - const bool src1_on_device = src1->backend == GGML_BACKEND_TYPE_GPU && i == g_main_device; - const bool dst_on_device = dst->backend == GGML_BACKEND_TYPE_GPU && i == g_main_device; - const int64_t row_diff = dev[i].row_high - dev[i].row_low; - - ggml_sycl_set_device(i); - dpct::queue_ptr stream = g_syclStreams[i][is]; - - // wait for main GPU data if necessary - if (split && (i != g_main_device || is != 0)) { - /* - DPCT1009:163: SYCL uses exceptions to report errors and does not - use the error codes. The original code was commented out and a - warning string was inserted. You need to rewrite this code. - */ - SYCL_CHECK(CHECK_TRY_ERROR(stream->ext_oneapi_submit_barrier( - {*src0_extra->events[g_main_device][0]}))); - } - - for (int64_t i0 = 0; i0 < ne13*ne12; ++i0) { - const int64_t i03 = i0 / ne12; - const int64_t i02 = i0 % ne12; - - const size_t src1_ddq_i_offset = (i0*ne11 + src1_col_0) * src1_padded_col_size*q8_1_ts/q8_1_bs; - - // for split tensors the data begins at i0 == i0_offset_low - char * src0_dd_i = dev[i].src0_dd + (i0/i02_divisor) * (ne01*ne00*src0_ts)/src0_bs; - float * src1_ddf_i = dev[i].src1_ddf + (i0*ne11 + src1_col_0) * ne10; - char * src1_ddq_i = dev[i].src1_ddq + src1_ddq_i_offset; - float * dst_dd_i = dev[i].dst_dd + (i0*ne1 + src1_col_0) * (dst_on_device ? ne0 : row_diff); - - // the main device memory buffer can be on VRAM scratch, with space for all partial results - // in that case an offset on dst_ddf_i is needed - if (dst->backend == GGML_BACKEND_TYPE_GPU && i == g_main_device) { - dst_dd_i += dev[i].row_low; // offset is 0 if no tensor split - } - - // copy src0, src1 to device if necessary - if (src1->backend == GGML_BACKEND_TYPE_GPU && src1_is_contiguous) { - if (i != g_main_device) { - if (convert_src1_to_q8_1) { - char * src1_ddq_i_source = dev[g_main_device].src1_ddq + src1_ddq_i_offset; - SYCL_CHECK(CHECK_TRY_ERROR(stream->memcpy( - src1_ddq_i, src1_ddq_i_source, - src1_ncols * src1_padded_col_size * q8_1_ts / - q8_1_bs).wait())); - } else { - - float * src1_ddf_i_source = (float *) src1_extra->data_device[g_main_device]; - src1_ddf_i_source += (i0*ne11 + src1_col_0) * ne10; - - SYCL_CHECK(CHECK_TRY_ERROR(dev2dev_memcpy(*stream, *main_stream, - src1_ddf_i, src1_ddf_i_source, - src1_ncols * ne10 * sizeof(float)))); - } - } - } else if (src1->backend == GGML_BACKEND_TYPE_CPU || (src1_on_device && !src1_is_contiguous)) { - SYCL_CHECK(ggml_sycl_cpy_tensor_2d( - src1_ddf_i, src1, i03, i02, src1_col_0, src1_col_0+src1_ncols, stream)); - } else { - GGML_ASSERT(false); - } - - if (convert_src1_to_q8_1 && (src1->backend == GGML_BACKEND_TYPE_CPU || !src1_is_contiguous)) { - quantize_row_q8_1_sycl(src1_ddf_i, src1_ddq_i, ne10, src1_ncols, src1_padded_col_size, stream); - /* - DPCT1010:92: SYCL uses exceptions to report errors and does - not use the error codes. The call was replaced with 0. You - need to rewrite this code. - */ - SYCL_CHECK(0); - } - - if (src1_col_0 == 0 && (!src0_on_device || !src0_is_contiguous) && i02 % i02_divisor == 0) { - SYCL_CHECK(ggml_sycl_cpy_tensor_2d(src0_dd_i, src0, i03, i02/i02_divisor, dev[i].row_low, dev[i].row_high, stream)); - } - if (src1->type == GGML_TYPE_F16) { - src1_padded_col_size = (i0 * ne11 + src1_col_0) * ne10; - } - // do the computation - SYCL_CHECK(CHECK_TRY_ERROR(op(src0, src1, dst, src0_dd_i, src1_ddf_i, src1_ddq_i, dst_dd_i, - dev[i].row_low, dev[i].row_high, src1_ncols, src1_padded_col_size, stream))); - /* - DPCT1010:93: SYCL uses exceptions to report errors and does not - use the error codes. The call was replaced with 0. You need to - rewrite this code. - */ - SYCL_CHECK(0); - - // copy dst to host or other device if necessary - if (!dst_on_device) { - void * dst_off_device; - dpct::memcpy_direction kind; - if (dst->backend == GGML_BACKEND_TYPE_CPU) { - dst_off_device = dst->data; - kind = dpct::device_to_host; - } else if (dst->backend == GGML_BACKEND_TYPE_GPU) { - dst_off_device = dst_extra->data_device[g_main_device]; - kind = dpct::device_to_device; - } else { - GGML_ASSERT(false); - } - if (split) { - // src0 = weight matrix is saved as a transposed matrix for better memory layout. - // dst is NOT transposed. - // The outputs of matrix matrix multiplications can therefore NOT simply be concatenated for >1 GPU. - // Instead they need to be copied to the correct slice in ne0 = dst row index. - // If dst is a vector with ne0 == 1 then you don't have to do this but it still produces correct results. - float * dhf_dst_i = (float *) ((char *) dst_off_device + i02*nb2 + i03*nb3); - GGML_ASSERT(dst->nb[1] == ne0*sizeof(float)); - dhf_dst_i += src1_col_0*ne0 + dev[i].row_low; - - //todo, dirty solution. Need be updated when device2device memcpy() is supported. - if (kind == dpct::device_to_device) { - size_t dst_size = ggml_nbytes_pad(dst); - float *host_buf = (float *)malloc(dst_size); - SYCL_CHECK(CHECK_TRY_ERROR(dpct::async_dpct_memcpy( - host_buf, ne0 * sizeof(float), dst_dd_i, - row_diff * sizeof(float), row_diff * sizeof(float), - src1_ncols, dpct::device_to_host, *stream))); - dpct::dev_mgr::instance().get_device(g_sycl_gpu_mgr->gpus[i]).queues_wait_and_throw(); - SYCL_CHECK(CHECK_TRY_ERROR(dpct::async_dpct_memcpy( - dhf_dst_i, ne0 * sizeof(float), host_buf, - row_diff * sizeof(float), row_diff * sizeof(float), - src1_ncols, dpct::host_to_device, *main_stream))); - dpct::dev_mgr::instance().get_device(g_sycl_gpu_mgr->gpus[g_main_device]).queues_wait_and_throw(); - free(host_buf); - } else { - SYCL_CHECK(CHECK_TRY_ERROR(dpct::async_dpct_memcpy( - dhf_dst_i, ne0 * sizeof(float), dst_dd_i, - row_diff * sizeof(float), row_diff * sizeof(float), - src1_ncols, kind, *stream))); - } - } else { - float * dhf_dst_i = (float *) ((char *) dst_off_device + i02*nb2 + i03*nb3); - GGML_ASSERT(dst->nb[1] == ne0*sizeof(float)); - dhf_dst_i += src1_col_0*ne0; - SYCL_CHECK(CHECK_TRY_ERROR( - stream->memcpy(dhf_dst_i, dst_dd_i, - src1_ncols * ne0 * sizeof(float)).wait())); - } - } - - // add event for the main device to wait on until other device is done - if (split && (i != g_main_device || is != 0)) { - /* - DPCT1024:94: The original code returned the error code that - was further consumed by the program logic. This original - code was replaced with 0. You may need to rewrite the - program logic consuming the error code. - */ - SYCL_CHECK(CHECK_TRY_ERROR( - *src0_extra->events[i][is] = - stream->ext_oneapi_submit_barrier())); - } - } - } - } - - // main device waits for all other devices to be finished - if (split && g_device_count > 1) { - int64_t is_max = (ne11 + MUL_MAT_SRC1_COL_STRIDE - 1) / MUL_MAT_SRC1_COL_STRIDE; - is_max = is_max <= MAX_STREAMS ? is_max : MAX_STREAMS; - - ggml_sycl_set_device(g_main_device); - for (int i = 0; i < g_device_count; ++i) { - if (dev[i].row_low == dev[i].row_high) { - continue; - } - for (int64_t is = 0; is < is_max; ++is) { - SYCL_CHECK(CHECK_TRY_ERROR( - g_syclStreams[g_main_device][0]->ext_oneapi_submit_barrier( - {*src0_extra->events[i][is]}))); - } - } - } - - if (dst->backend == GGML_BACKEND_TYPE_CPU) { - SYCL_CHECK(ggml_sycl_set_device(g_main_device)); - SYCL_CHECK(CHECK_TRY_ERROR( - dpct::get_current_device().queues_wait_and_throw())); - } -} -catch (sycl::exception const &exc) { - std::cerr << exc.what() << "Exception caught at file:" << __FILE__ - << ", line:" << __LINE__ << std::endl; - std::exit(1); -} - - -static void ggml_sycl_repeat(const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) { - GGML_SYCL_DEBUG("call %s\n", __func__); - ggml_sycl_op_flatten(src0, src1, dst, ggml_sycl_op_repeat); - GGML_SYCL_DEBUG("call %s done\n", __func__); -} - -static void ggml_sycl_get_rows(const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) { - GGML_SYCL_DEBUG("call %s\n", __func__); - ggml_sycl_op_flatten(src0, src1, dst, ggml_sycl_op_get_rows); - GGML_SYCL_DEBUG("call %s done\n", __func__); -} - -static void ggml_sycl_add(const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) { - GGML_SYCL_DEBUG("call %s\n", __func__); - ggml_sycl_op_flatten(src0, src1, dst, ggml_sycl_op_add); - GGML_SYCL_DEBUG("call %s done\n", __func__); -} - -static void ggml_sycl_acc(const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) { - GGML_SYCL_DEBUG("call %s\n", __func__); - ggml_sycl_op_flatten(src0, src1, dst, ggml_sycl_op_acc); - GGML_SYCL_DEBUG("call %s done\n", __func__); -} - -static void ggml_sycl_mul(const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) { - GGML_SYCL_DEBUG("call %s\n", __func__); - ggml_sycl_op_flatten(src0, src1, dst, ggml_sycl_op_mul); - GGML_SYCL_DEBUG("call %s done\n", __func__); -} - -static void ggml_sycl_div(const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) { - GGML_SYCL_DEBUG("call %s\n", __func__); - ggml_sycl_op_flatten(src0, src1, dst, ggml_sycl_op_div); - GGML_SYCL_DEBUG("call %s done\n", __func__); -} - -static void ggml_sycl_gelu(const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) { - GGML_SYCL_DEBUG("call %s\n", __func__); - ggml_sycl_op_flatten(src0, src1, dst, ggml_sycl_op_gelu); - GGML_SYCL_DEBUG("call %s done\n", __func__); -} - -static void ggml_sycl_silu(const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) { - GGML_SYCL_DEBUG("call %s\n", __func__); - ggml_sycl_op_flatten(src0, src1, dst, ggml_sycl_op_silu); - GGML_SYCL_DEBUG("call %s done\n", __func__); -} - -static void ggml_sycl_gelu_quick(const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) { - GGML_SYCL_DEBUG("call %s\n", __func__); - ggml_sycl_op_flatten(src0, src1, dst, ggml_sycl_op_gelu_quick); - GGML_SYCL_DEBUG("call %s done\n", __func__); -} - -static void ggml_sycl_tanh(const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) { - GGML_SYCL_DEBUG("call %s\n", __func__); - ggml_sycl_op_flatten(src0, src1, dst, ggml_sycl_op_tanh); - GGML_SYCL_DEBUG("call %s done\n", __func__); -} - -static void ggml_sycl_relu(const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) { - GGML_SYCL_DEBUG("call %s\n", __func__); - ggml_sycl_op_flatten(src0, src1, dst, ggml_sycl_op_relu); - GGML_SYCL_DEBUG("call %s done\n", __func__); -} - -static void ggml_sycl_hardsigmoid(const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) { - GGML_SYCL_DEBUG("call %s\n", __func__); - ggml_sycl_op_flatten(src0, src1, dst, ggml_sycl_op_hardsigmoid); - GGML_SYCL_DEBUG("call %s done\n", __func__); -} - -static void ggml_sycl_hardswish(const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) { - GGML_SYCL_DEBUG("call %s\n", __func__); - ggml_sycl_op_flatten(src0, src1, dst, ggml_sycl_op_hardswish); - GGML_SYCL_DEBUG("call %s done\n", __func__); -} - -static void ggml_sycl_leaky_relu(const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) { - GGML_SYCL_DEBUG("call %s\n", __func__); - ggml_sycl_op_flatten(src0, src1, dst, ggml_sycl_op_leaky_relu); - GGML_SYCL_DEBUG("call %s done\n", __func__); -} - -static void ggml_sycl_sqr(const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) { - GGML_SYCL_DEBUG("call %s\n", __func__); - ggml_sycl_op_flatten(src0, src1, dst, ggml_sycl_op_sqr); - GGML_SYCL_DEBUG("call %s done\n", __func__); -} - -static void ggml_sycl_norm(const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) { - GGML_SYCL_DEBUG("call %s\n", __func__); - ggml_sycl_op_flatten(src0, src1, dst, ggml_sycl_op_norm); - GGML_SYCL_DEBUG("call %s done\n", __func__); -} - -static void ggml_sycl_group_norm(const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) { - GGML_SYCL_DEBUG("call %s\n", __func__); - ggml_sycl_op_flatten(src0, src1, dst, ggml_sycl_op_group_norm); - GGML_SYCL_DEBUG("call %s done\n", __func__); -} - -static void ggml_sycl_concat(const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) { - GGML_SYCL_DEBUG("call %s\n", __func__); - ggml_sycl_op_flatten(src0, src1, dst, ggml_sycl_op_concat); - GGML_SYCL_DEBUG("call %s done\n", __func__); -} - -static void ggml_sycl_upscale(const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) { - GGML_SYCL_DEBUG("call %s\n", __func__); - ggml_sycl_op_flatten(src0, src1, dst, ggml_sycl_op_upscale); - GGML_SYCL_DEBUG("call %s done\n", __func__); -} - -static void ggml_sycl_pad(const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) { - GGML_SYCL_DEBUG("call %s\n", __func__); - ggml_sycl_op_flatten(src0, src1, dst, ggml_sycl_op_pad); - GGML_SYCL_DEBUG("call %s done\n", __func__); -} - - -static void ggml_sycl_rms_norm(const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) { - GGML_SYCL_DEBUG("call %s\n", __func__); - ggml_sycl_op_flatten(src0, src1, dst, ggml_sycl_op_rms_norm); - GGML_SYCL_DEBUG("call %s done\n", __func__); -} - -bool ggml_sycl_can_mul_mat(const struct ggml_tensor * src0, const struct ggml_tensor * src1, struct ggml_tensor * dst) { - if (!g_sycl_loaded) return false; - - const int64_t ne10 = src1->ne[0]; - - const int64_t ne0 = dst->ne[0]; - const int64_t ne1 = dst->ne[1]; - - // TODO: find the optimal values for these - return (src0->type == GGML_TYPE_F32 || src0->type == GGML_TYPE_F16 || ggml_is_quantized(src0->type)) && - src1->type == GGML_TYPE_F32 && - dst->type == GGML_TYPE_F32 && - (ne0 >= 32 && ne1 >= 32 && ne10 >= 32); -} - -static void ggml_sycl_mul_mat_vec_p021(const ggml_tensor *src0, - const ggml_tensor *src1, - ggml_tensor *dst) try { - GGML_ASSERT(ggml_is_permuted(src0) && ggml_is_permuted(src1)); - GGML_ASSERT(src0->backend != GGML_BACKEND_TYPE_GPU_SPLIT); - GGML_ASSERT(src0->nb[0] <= src0->nb[1] && src0->nb[2] <= src0->nb[3]); // 0213 permutation - GGML_ASSERT(src1->nb[0] <= src1->nb[1] && src1->nb[2] <= src1->nb[3]); // 0213 permutation - GGML_ASSERT(src0->type == GGML_TYPE_F16); - GGML_ASSERT(src1->type == GGML_TYPE_F32); - - const int64_t ne00 = src0->ne[0]; - const int64_t ne01 = src0->ne[1]; - const int64_t ne02 = src0->ne[2]; - - const int64_t ne12 = src1->ne[2]; - - SYCL_CHECK(ggml_sycl_set_device(g_main_device)); - dpct::queue_ptr main_stream = g_syclStreams[g_main_device][0]; - - ggml_tensor_extra_gpu * src0_extra = (ggml_tensor_extra_gpu *) src0->extra; - void * src0_ddq = src0_extra->data_device[g_main_device]; - - ggml_tensor_extra_gpu * src1_extra = (ggml_tensor_extra_gpu *) src1->extra; - float * src1_ddf = (float *) src1_extra->data_device[g_main_device]; - - ggml_tensor_extra_gpu * dst_extra = (ggml_tensor_extra_gpu *) dst->extra; - float * dst_ddf = (float *) dst_extra->data_device[g_main_device]; - - ggml_mul_mat_p021_f16_f32_sycl(src0_ddq, src1_ddf, dst_ddf, ne00, ne01, ne02, ne12, main_stream); -} -catch (sycl::exception const &exc) { - std::cerr << exc.what() << "Exception caught at file:" << __FILE__ - << ", line:" << __LINE__ << std::endl; - std::exit(1); -} - -static void ggml_sycl_mul_mat_vec_nc(const ggml_tensor *src0, - const ggml_tensor *src1, - ggml_tensor *dst) try { - GGML_ASSERT(!ggml_is_transposed(src0)); - GGML_ASSERT(!ggml_is_transposed(src1)); - GGML_ASSERT(!ggml_is_permuted(src0)); - GGML_ASSERT(src0->backend != GGML_BACKEND_TYPE_GPU_SPLIT); - GGML_ASSERT(src0->type == GGML_TYPE_F16); - GGML_ASSERT(src1->type == GGML_TYPE_F32); - - const int64_t ne00 = src0->ne[0]; - const int64_t ne01 = src0->ne[1]; - const int64_t ne02 = src0->ne[2]; - - const int64_t nb01 = src0->nb[1]; - const int64_t nb02 = src0->nb[2]; - - const int64_t ne12 = src1->ne[2]; - - SYCL_CHECK(ggml_sycl_set_device(g_main_device)); - dpct::queue_ptr main_stream = g_syclStreams[g_main_device][0]; - - ggml_tensor_extra_gpu * src0_extra = (ggml_tensor_extra_gpu *) src0->extra; - void * src0_ddq = src0_extra->data_device[g_main_device]; - - ggml_tensor_extra_gpu * src1_extra = (ggml_tensor_extra_gpu *) src1->extra; - float * src1_ddf = (float *) src1_extra->data_device[g_main_device]; - - ggml_tensor_extra_gpu * dst_extra = (ggml_tensor_extra_gpu *) dst->extra; - float * dst_ddf = (float *) dst_extra->data_device[g_main_device]; - - const int64_t row_stride_x = nb01 / sizeof(sycl::half); - const int64_t channel_stride_x = nb02 / sizeof(sycl::half); - - ggml_mul_mat_vec_nc_f16_f32_sycl(src0_ddq, src1_ddf, dst_ddf, ne00, ne01, row_stride_x, ne02, ne12, channel_stride_x, main_stream); -} -catch (sycl::exception const &exc) { - std::cerr << exc.what() << "Exception caught at file:" << __FILE__ - << ", line:" << __LINE__ << std::endl; - std::exit(1); -} - -static void k_compute_batched_ptrs(const sycl::half *src0_as_f16, - const sycl::half *src1_as_f16, char *dst, - const void **ptrs_src, void **ptrs_dst, - int64_t ne12, int64_t ne13, int64_t ne23, - size_t nb02, size_t nb03, size_t nb12, - size_t nb13, size_t nbd2, size_t nbd3, - int64_t r2, int64_t r3, - const sycl::nd_item<3> &item_ct1) { - int64_t i13 = item_ct1.get_group(2) * item_ct1.get_local_range(2) + - item_ct1.get_local_id(2); - int64_t i12 = item_ct1.get_group(1) * item_ct1.get_local_range(1) + - item_ct1.get_local_id(1); - - if (i13 >= ne13 || i12 >= ne12) { - return; - } - - int64_t i03 = i13 / r3; - int64_t i02 = i12 / r2; - - ptrs_src[0*ne23 + i12 + i13*ne12] = (const char *) src0_as_f16 + i02*nb02 + i03*nb03; - ptrs_src[1*ne23 + i12 + i13*ne12] = (const char *) src1_as_f16 + i12*nb12 + i13*nb13; - ptrs_dst[0*ne23 + i12 + i13*ne12] = ( char *) dst + i12*nbd2 + i13*nbd3; -} - -static void ggml_sycl_mul_mat_batched_sycl(const ggml_tensor *src0, - const ggml_tensor *src1, - ggml_tensor *dst) try { - GGML_ASSERT(!ggml_is_transposed(src0)); - GGML_ASSERT(!ggml_is_transposed(src1)); - GGML_ASSERT(src0->backend != GGML_BACKEND_TYPE_GPU_SPLIT); - GGML_ASSERT(src0->type == GGML_TYPE_F16); - - GGML_TENSOR_BINARY_OP_LOCALS - - const int64_t ne_dst = ggml_nelements(dst); - - SYCL_CHECK(ggml_sycl_set_device(g_main_device)); - dpct::queue_ptr main_stream = g_syclStreams[g_main_device][0]; - - bool no_mixed_dtypes = main_stream->get_backend() == sycl::backend::ext_oneapi_cuda || - main_stream->get_backend() == sycl::backend::ext_oneapi_hip; - - SYCL_CHECK( - CHECK_TRY_ERROR(g_sycl_handles[g_main_device] = main_stream)); - - ggml_tensor_extra_gpu * src0_extra = (ggml_tensor_extra_gpu *) src0->extra; - void * src0_ddq = src0_extra->data_device[g_main_device]; - sycl::half *src0_as_f16 = (sycl::half *)src0_ddq; - - ggml_tensor_extra_gpu * src1_extra = (ggml_tensor_extra_gpu *) src1->extra; - float * src1_ddf = (float *) src1_extra->data_device[g_main_device]; - - ggml_tensor_extra_gpu * dst_extra = (ggml_tensor_extra_gpu *) dst->extra; - float * dst_ddf = (float *) dst_extra->data_device[g_main_device]; - - // convert src1 to fp16 - sycl_pool_alloc src1_f16_alloc; - if (src1->type != GGML_TYPE_F16) { - const to_fp16_sycl_t to_fp16_sycl = ggml_get_to_fp16_sycl(src1->type); - const int64_t ne_src1 = ggml_nelements(src1); - src1_f16_alloc.alloc(ne_src1); - GGML_ASSERT(to_fp16_sycl != nullptr); - to_fp16_sycl(src1_ddf, src1_f16_alloc.get(), ne_src1, main_stream); - } - sycl::half *src1_f16 = src1->type == GGML_TYPE_F16 ? (sycl::half *)src1_ddf - : src1_f16_alloc.get(); - - sycl_pool_alloc dst_f16; - char * dst_t; - - dpct::library_data_t cu_compute_type = dpct::library_data_t::real_float; - dpct::library_data_t cu_data_type = dpct::library_data_t::real_float; - if (no_mixed_dtypes) { - cu_compute_type = dpct::library_data_t::real_half; - cu_data_type = dpct::library_data_t::real_half; - } - - // dst strides - size_t nbd2 = dst->nb[2]; - size_t nbd3 = dst->nb[3]; - - const float alpha_f32 = 1.0f; - const float beta_f32 = 0.0f; - - const sycl::half alpha_f16 = 1.0f; - const sycl::half beta_f16 = 0.0f; - - const void * alpha = &alpha_f32; - const void * beta = &beta_f32; - if (no_mixed_dtypes) { - alpha = &alpha_f16; - beta = &beta_f16; - } - - // TODO: Renable (dst->op_params[0] =! GGML_PREC_DEFAULT) pathway - // when oneMKL open source supports half, half, float, float: datatypes - - dst_t = (char *) dst_ddf; - if (no_mixed_dtypes) { - dst_t = (char *) dst_f16.alloc(ne_dst); - - nbd2 /= sizeof(float) / sizeof(sycl::half); - nbd3 /= sizeof(float) / sizeof(sycl::half); - } - - GGML_ASSERT(ne12 % ne02 == 0); - GGML_ASSERT(ne13 % ne03 == 0); - - // broadcast factors - const int64_t r2 = ne12/ne02; - const int64_t r3 = ne13/ne03; - -#if 0 - // use syclGemmEx - { - for (int i13 = 0; i13 < ne13; ++i13) { - for (int i12 = 0; i12 < ne12; ++i12) { - int i03 = i13 / r3; - int i02 = i12 / r2; - - SYCL_CHECK( - syclGemmEx(g_sycl_handles[g_main_device], CUBLAS_OP_T, CUBLAS_OP_N, - ne01, ne11, ne10, - alpha, (const char *) src0_as_f16 + i02*src0->nb[2] + i03*src0->nb[3] , SYCL_R_16F, nb01/sizeof(half), - (const char *) src1_as_f16 + i12*src1->nb[2]/2 + i13*src1->nb[3]/2, SYCL_R_16F, nb11/sizeof(float), - beta, ( char *) dst_t + i12*nbd2 + i13*nbd3, cu_data_type, ne01, - cu_compute_type, - CUBLAS_GEMM_DEFAULT_TENSOR_OP)); - } - } - } -#else - if (r2 == 1 && r3 == 1 && src0->nb[2]*src0->ne[2] == src0->nb[3] && src1->nb[2]*src1->ne[2] == src1->nb[3]) { - // there is no broadcast and src0, src1 are contiguous across dims 2, 3 - SYCL_CHECK(CHECK_TRY_ERROR(dpct::gemm_batch( - *g_sycl_handles[g_main_device], oneapi::mkl::transpose::trans, - oneapi::mkl::transpose::nontrans, ne01, ne11, ne10, alpha, - (const char *)src0_as_f16, dpct::library_data_t::real_half, - nb01 / nb00, nb02 / nb00, - (const char *)src1_f16, dpct::library_data_t::real_half, - nb11 / nb10, nb12 / nb10, beta, - (char *)dst_t, cu_data_type, ne01, nb2 / nb0, - ne12 * ne13, cu_compute_type))); - g_sycl_handles[g_main_device]->wait(); - } else { - const int ne23 = ne12*ne13; - - sycl_pool_alloc ptrs_src(2*ne23); - sycl_pool_alloc< void *> ptrs_dst(1*ne23); - - sycl::range<3> block_dims(1, ne12, ne13); - /* - DPCT1049:47: The work-group size passed to the SYCL kernel may exceed - the limit. To get the device limit, query - info::device::max_work_group_size. Adjust the work-group size if needed. - */ - { - dpct::has_capability_or_fail(main_stream->get_device(), - {sycl::aspect::fp16}); - - main_stream->submit([&](sycl::handler &cgh) { - const void **ptrs_src_get = ptrs_src.get(); - void **ptrs_dst_get = ptrs_dst.get(); - size_t nb12_scaled = src1->type == GGML_TYPE_F16 ? nb12 : nb12 / 2; - size_t nb13_scaled = src1->type == GGML_TYPE_F16 ? nb13 : nb13 / 2; - cgh.parallel_for(sycl::nd_range<3>(block_dims, block_dims), - [=](sycl::nd_item<3> item_ct1) { - k_compute_batched_ptrs( - src0_as_f16, src1_f16, - dst_t, ptrs_src_get, - ptrs_dst_get, ne12, ne13, ne23, - nb02, nb03, nb12_scaled, nb13_scaled, - nbd2, nbd3, r2, r3, item_ct1); - }); - }).wait(); - } - SYCL_CHECK(CHECK_TRY_ERROR(dpct::gemm_batch( - *g_sycl_handles[g_main_device], oneapi::mkl::transpose::trans, - oneapi::mkl::transpose::nontrans, ne01, ne11, ne10, alpha, - (const void **)(ptrs_src.get() + 0 * ne23), - dpct::library_data_t::real_half, nb01 / nb00, - (const void **)(ptrs_src.get() + 1 * ne23), - dpct::library_data_t::real_half, nb11 / nb10, beta, - (void **)(ptrs_dst.get() + 0 * ne23), cu_data_type, ne01, ne23, - cu_compute_type))); - g_sycl_handles[g_main_device]->wait(); - } -#endif - - if (no_mixed_dtypes) { - const to_fp32_sycl_t to_fp32_sycl = ggml_get_to_fp32_sycl(GGML_TYPE_F16); - to_fp32_sycl(dst_f16.get(), dst_ddf, ne_dst, main_stream); - } -} -catch (sycl::exception const &exc) { - std::cerr << exc.what() << "Exception caught at file:" << __FILE__ - << ", line:" << __LINE__ << std::endl; - std::exit(1); -} - - -static void ggml_sycl_mul_mat(const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) { - const bool all_on_device = - (src0->backend == GGML_BACKEND_TYPE_GPU || src0->backend == GGML_BACKEND_TYPE_GPU_SPLIT) && - (src1->backend == GGML_BACKEND_TYPE_GPU) && - ( dst->backend == GGML_BACKEND_TYPE_GPU); - - const bool split = src0->backend == GGML_BACKEND_TYPE_GPU_SPLIT; - - int64_t min_compute_capability = INT_MAX; - for (int i = 0; i < g_device_count; ++i) { - if (min_compute_capability > g_device_caps[i].cc && g_tensor_split[i] < (i + 1 < g_device_count ? g_tensor_split[i + 1] : 1.0f)) { - min_compute_capability = g_device_caps[i].cc; - } - } - -#ifdef SYCL_USE_XMX - const bool use_xmx = true; -#else - const bool use_xmx = false; -#endif - - // debug helpers - //printf("src0: %8d %8d %8d %8d\n", src0->ne[0], src0->ne[1], src0->ne[2], src0->ne[3]); - //printf(" %8d %8d %8d %8d\n", src0->nb[0], src0->nb[1], src0->nb[2], src0->nb[3]); - //printf("src1: %8d %8d %8d %8d\n", src1->ne[0], src1->ne[1], src1->ne[2], src1->ne[3]); - //printf(" %8d %8d %8d %8d\n", src1->nb[0], src1->nb[1], src1->nb[2], src1->nb[3]); - //printf("src0 is contiguous %d, transposed %d, type = %s, name = %s\n", ggml_is_contiguous(src0), ggml_is_transposed(src0), ggml_type_name(src0->type), src0->name); - //printf("src1 is contiguous %d, transposed %d, type = %s, name = %s\n", ggml_is_contiguous(src1), ggml_is_transposed(src1), ggml_type_name(src1->type), src1->name); - - if (!split && all_on_device && !use_xmx && src0->type == GGML_TYPE_F16 && ggml_is_permuted(src0) && ggml_is_permuted(src1) && src1->ne[1] == 1) { - // KQ single-batch - // GGML_SYCL_DEBUG("ggml_sycl_mul_mat_vec_p021\n"); - ggml_sycl_mul_mat_vec_p021(src0, src1, dst); - } else if (!split && all_on_device && !use_xmx && src0->type == GGML_TYPE_F16 && !ggml_is_contiguous(src0) && !ggml_is_transposed(src1) && src1->ne[1] == 1) { - // KQV single-batch - // GGML_SYCL_DEBUG("ggml_sycl_mul_mat_vec_nc\n"); - ggml_sycl_mul_mat_vec_nc(src0, src1, dst); - } else if (!split && all_on_device && use_xmx && src0->type == GGML_TYPE_F16 && !ggml_is_transposed(src0) && !ggml_is_transposed(src1)) { - // KQ + KQV multi-batch - // GGML_SYCL_DEBUG("ggml_sycl_mul_mat_batched_sycl\n"); - ggml_sycl_mul_mat_batched_sycl(src0, src1, dst); - } else if (src0->type == GGML_TYPE_F32) { - // GGML_SYCL_DEBUG("ggml_sycl_op_mul_mat\n"); - ggml_sycl_op_mul_mat(src0, src1, dst, ggml_sycl_op_mul_mat_sycl, false); - } else if (ggml_is_quantized(src0->type) || src0->type == GGML_TYPE_F16) { - // GGML_SYCL_DEBUG("ggml_is_quantized or GGML_TYPE_F16\n"); - if (src1->ne[1] == 1 && src0->ne[0] % GGML_SYCL_DMMV_X == 0) { -#ifdef GGML_SYCL_FORCE_DMMV - const bool use_mul_mat_vec_q = false; -#else - bool use_mul_mat_vec_q = min_compute_capability >= VER_4VEC && ggml_is_quantized(src0->type); - use_mul_mat_vec_q = use_mul_mat_vec_q || - (src0->type == GGML_TYPE_IQ2_XXS) || (src0->type == GGML_TYPE_IQ2_XS) || (src0->type == GGML_TYPE_IQ2_S) || - (src0->type == GGML_TYPE_IQ3_XXS) || (src0->type == GGML_TYPE_IQ3_S) || - (src0->type == GGML_TYPE_IQ4_NL) || (src0->type == GGML_TYPE_IQ4_XS) || - (src0->type == GGML_TYPE_IQ1_S) || (src0->type == GGML_TYPE_IQ1_M); - - -#endif // GGML_SYCL_FORCE_DMMV - - if (use_mul_mat_vec_q) { - // GGML_SYCL_DEBUG("ggml_sycl_mul_mat ggml_sycl_op_mul_mat_vec_q path\n"); - ggml_sycl_op_mul_mat(src0, src1, dst, ggml_sycl_op_mul_mat_vec_q, true); - } else { - // GGML_SYCL_DEBUG("ggml_sycl_mul_mat ggml_sycl_op_dequantize_mul_mat_vec path\n"); - ggml_sycl_op_mul_mat(src0, src1, dst, ggml_sycl_op_dequantize_mul_mat_vec, false); - } - } else { - bool use_mul_mat_q = min_compute_capability >= VER_4VEC && ggml_is_quantized(src0->type); - - if (use_xmx && min_compute_capability >= VER_GEN9 && src1->ne[1] > XMX_MAX_BATCH_SIZE) { - use_mul_mat_q = false; - } - - if (use_mul_mat_q) { - // GGML_SYCL_DEBUG("ggml_sycl_mul_mat ggml_sycl_op_mul_mat_q path\n"); - ggml_sycl_op_mul_mat(src0, src1, dst, ggml_sycl_op_mul_mat_q, true); - } else { - // GGML_SYCL_DEBUG("ggml_sycl_mul_mat ggml_sycl_op_mul_mat_sycl path\n"); - ggml_sycl_op_mul_mat(src0, src1, dst, ggml_sycl_op_mul_mat_sycl, false); - } - } - } else { - GGML_ASSERT(false); - } -} - -#if 0 -template -static __global__ void k_compute_batched_ptrs_id( - const void ** ptrs_src, void ** ptrs_dst, - int ne12, int ne13, - int ne23, - int nb02, int nb03, - int nb12, int nb13, - int nb2, int nb3, - int r2, int r3, - ggml_type src0_type, half * src0_as_f16, int64_t src0_ne, - const half * src1_f16, half * dst_f16, - const int32_t * ids, const int id, - Srcs... src0s) { - - int i = ids[id]; - - half * src0_f16; - const void * srcs_ar[] = { (const half *) src0s... }; - if (src0_type == GGML_TYPE_F16) { - src0_f16 = (half *) srcs_ar[i]; - } else { - src0_f16 = src0_as_f16; - if (item_ct1.get_local_id(2) == 0 && threadIdx.y == 0) { - const to_fp16_sycl_t to_fp16 = ggml_get_to_fp16_sycl(src0_type); - to_fp16(srcs_ar[i], src0_f16, src0_ne, syclStreamFireAndForget); - } - } - - int i13 = blockIdx.x * blockDim.x + item_ct1.get_local_id(2); - int i12 = blockIdx.y * blockDim.y + threadIdx.y; - - if (i13 >= ne13 || i12 >= ne12) { - return; - } - - int i03 = i13 / r3; - int i02 = i12 / r2; - - ptrs_src[0*ne23 + i12 + i13*ne12] = (const char *) src0_f16 + i02*nb02 + i03*nb03; - ptrs_src[1*ne23 + i12 + i13*ne12] = (const char *) src1_f16 + i12*nb12/2 + i13*nb13/2; - ptrs_dst[0*ne23 + i12 + i13*ne12] = ( char *) dst_f16 + i12* nb2/2 + i13* nb3/2; -} - -static void ggml_sycl_mul_mat_id_sycl(ggml_tensor * dst) { - const struct ggml_tensor * ids = dst->src[0]; - const struct ggml_tensor * src1 = dst->src[1]; - const struct ggml_tensor * src00 = dst->src[2]; - - const int id = dst->op_params[0]; - - GGML_ASSERT(!ggml_is_transposed(src00)); - GGML_ASSERT(!ggml_is_transposed(src1)); - - GGML_ASSERT(src00->backend != GGML_BACKEND_TYPE_GPU_SPLIT); - GGML_ASSERT(src1->type == GGML_TYPE_F32); - - GGML_TENSOR_LOCALS(int64_t, ne0, src00, ne); - - //const int64_t nb01 = src00->nb[1]; - GGML_TENSOR_LOCALS(int64_t, nb0, src00, nb); - - GGML_TENSOR_LOCALS(int64_t, ne1, src1, ne); - - GGML_TENSOR_LOCALS(int64_t, nb1, src1, nb); - //const int64_t nb11 = src1->nb[1]; - - const int64_t ne1 = ggml_nelements(src1); - const int64_t ne = ggml_nelements(dst); - - SYCL_CHECK(ggml_sycl_set_device(g_main_device)); - syclStream_t main_stream = g_syclStreams[g_main_device][0]; - - SYCL_CHECK(syclSetStream(g_sycl_handles[g_main_device], main_stream)); - - //ggml_tensor_extra_gpu * src0_extra = (ggml_tensor_extra_gpu *) src0->extra; - //void * src0_ddq = src0_extra->data_device[g_main_device]; - //half * src0_as_f16 = (half *) src0_ddq; - - ggml_tensor_extra_gpu * src1_extra = (ggml_tensor_extra_gpu *) src1->extra; - float * src1_ddf = (float *) src1_extra->data_device[g_main_device]; - - ggml_tensor_extra_gpu * dst_extra = (ggml_tensor_extra_gpu *) dst->extra; - float * dst_ddf = (float *) dst_extra->data_device[g_main_device]; - - // convert src1 to fp16 - const to_fp16_sycl_t to_fp16_sycl = ggml_get_to_fp16_sycl(src1->type); - GGML_ASSERT(to_fp16_sycl != nullptr); - - size_t src1_as = 0; - half * src1_as_f16 = (half *) ggml_sycl_pool_malloc(g_main_device, ne1 * sizeof(half), &src1_as); - to_fp16_sycl(src1_ddf, src1_as_f16, ne1, main_stream); - - size_t dst_as = 0; - half * dst_f16 = (half *) ggml_sycl_pool_malloc(g_main_device, ne * sizeof(half), &dst_as); - - GGML_ASSERT(ne12 % ne02 == 0); - GGML_ASSERT(ne13 % ne03 == 0); - - // broadcast factors - const int64_t r2 = ne12/ne02; - const int64_t r3 = ne13/ne03; - - const half alpha_f16 = 1.0f; - const half beta_f16 = 0.0f; - - // use syclGemmBatchedEx - const int ne23 = ne12*ne13; - - const void ** ptrs_src = nullptr; - void ** ptrs_dst = nullptr; - - size_t ptrs_src_s = 0; - size_t ptrs_dst_s = 0; - - ptrs_src = (const void **) ggml_sycl_pool_malloc(g_main_device, 2*ne23*sizeof(void *), &ptrs_src_s); - ptrs_dst = ( void **) ggml_sycl_pool_malloc(g_main_device, 1*ne23*sizeof(void *), &ptrs_dst_s); - - int64_t src0_ne = ggml_nelements(src00); - half * src0_as_f16 = nullptr; - size_t src0_as = 0; - if (src00->type != GGML_TYPE_F16) { - src0_as_f16 = (half *) ggml_sycl_pool_malloc(g_main_device, src0_ne * sizeof(half), &src0_as); - } - - static_assert(GGML_MAX_SRC == 6, "GGML_MAX_SRC == 6"); - dim3 block_dims(ne13, ne12); - k_compute_batched_ptrs_id<<<1, block_dims, 0, main_stream>>>( - ptrs_src, ptrs_dst, - ne12, ne13, - ne23, - ne00*ne01*sizeof(half), ne00*ne01*ne02*sizeof(half), - nb12, nb13, - dst->nb[2], dst->nb[3], - r2, r3, - src00->type, src0_as_f16, src0_ne, - src1_as_f16, dst_f16, - (const int *)((ggml_tensor_extra_gpu *)ids->extra)->data_device[g_main_device], id, - dst->src[2] ? (const half *)((ggml_tensor_extra_gpu *)dst->src[2]->extra)->data_device[g_main_device] : nullptr, - dst->src[3] ? (const half *)((ggml_tensor_extra_gpu *)dst->src[3]->extra)->data_device[g_main_device] : nullptr, - dst->src[4] ? (const half *)((ggml_tensor_extra_gpu *)dst->src[4]->extra)->data_device[g_main_device] : nullptr, - dst->src[5] ? (const half *)((ggml_tensor_extra_gpu *)dst->src[5]->extra)->data_device[g_main_device] : nullptr - ); - SYCL_CHECK(syclGetLastError()); - - SYCL_CHECK( - syclGemmBatchedEx(g_sycl_handles[g_main_device], CUBLAS_OP_T, CUBLAS_OP_N, - ne01, ne11, ne10, - &alpha_f16, (const void **) (ptrs_src + 0*ne23), SYCL_R_16F, ne00, - (const void **) (ptrs_src + 1*ne23), SYCL_R_16F, ne10, - &beta_f16, ( void **) (ptrs_dst + 0*ne23), SYCL_R_16F, ne01, - ne23, - CUBLAS_COMPUTE_16F, - CUBLAS_GEMM_DEFAULT_TENSOR_OP)); - - if (src0_as != 0) { - ggml_sycl_pool_free(g_main_device, src0_as_f16, src0_as); - } - if (ptrs_src_s != 0) { - ggml_sycl_pool_free(g_main_device, ptrs_src, ptrs_src_s); - } - if (ptrs_dst_s != 0) { - ggml_sycl_pool_free(g_main_device, ptrs_dst, ptrs_dst_s); - } - - const to_fp32_sycl_t to_fp32_sycl = ggml_get_to_fp32_sycl(GGML_TYPE_F16); - to_fp32_sycl(dst_f16, dst_ddf, ne, main_stream); - - ggml_sycl_pool_free(g_main_device, src1_as_f16, src1_as); - ggml_sycl_pool_free(g_main_device, dst_f16, dst_as); -} -#endif - -static void ggml_sycl_mul_mat_id(const ggml_tensor *src0, - const ggml_tensor *src1, - ggml_tensor *dst) try { - GGML_ASSERT(src0->backend != GGML_BACKEND_TYPE_GPU_SPLIT && - "mul_mat_id does not support split buffers"); - const ggml_tensor *ids = dst->src[2]; - const dpct::queue_ptr stream = g_syclStreams[g_main_device][0]; - - const size_t nb11 = src1->nb[1]; - const size_t nb1 = dst->nb[1]; - - const int32_t id = ((int32_t *)dst->op_params)[0]; - const int32_t n_as = src0->ne[2]; - - std::vector ids_host(ggml_nbytes(ids)); - const char *ids_dev = (const char *)ids->data; - - SYCL_CHECK(CHECK_TRY_ERROR( - stream->memcpy(ids_host.data(), ids_dev, ggml_nbytes(ids)))); - SYCL_CHECK(CHECK_TRY_ERROR(stream->wait())); - - const ggml_tensor_extra_gpu *src0_extra = - (const ggml_tensor_extra_gpu *)src0->extra; - const ggml_tensor_extra_gpu *src1_extra = - (const ggml_tensor_extra_gpu *)src1->extra; - const ggml_tensor_extra_gpu *dst_extra = - (const ggml_tensor_extra_gpu *)dst->extra; - - ggml_tensor_extra_gpu src0_row_extra; - ggml_tensor_extra_gpu src1_row_extra; - ggml_tensor_extra_gpu dst_row_extra; - - ggml_tensor src0_row = *src0; - ggml_tensor src1_row = *src1; - ggml_tensor dst_row = *dst; - - src1_row.backend = GGML_BACKEND_TYPE_GPU; - dst_row.backend = GGML_BACKEND_TYPE_GPU; - - src0_row.extra = &src0_row_extra; - src1_row.extra = &src1_row_extra; - dst_row.extra = &dst_row_extra; - - char *src0_original = src1->backend == GGML_BACKEND_TYPE_CPU - ? (char *)src0->data - : (char *)src0_extra->data_device[g_main_device]; - char *src1_original = src1->backend == GGML_BACKEND_TYPE_CPU - ? (char *)src1->data - : (char *)src1_extra->data_device[g_main_device]; - char *dst_original = dst->backend == GGML_BACKEND_TYPE_CPU - ? (char *)dst->data - : (char *)dst_extra->data_device[g_main_device]; - - src0_row.ne[2] = 1; - src0_row.ne[3] = 1; - src0_row.nb[3] = src0->nb[2]; - - if (src1->ne[1] == 1) { - for (int64_t i01 = 0; i01 < ids->ne[1]; i01++) { - const int32_t row_id = - *(const int32_t *)(ids_host.data() + i01 * ids->nb[1] + - id * ids->nb[0]); - - GGML_ASSERT(row_id >= 0 && row_id < n_as); - - src0_row_extra.data_device[g_main_device] = - src0_original + row_id * src0->nb[2]; - src1_row_extra.data_device[g_main_device] = - src1_original + i01 * src1->nb[1]; - dst_row_extra.data_device[g_main_device] = - dst_original + i01 * dst->nb[1]; - - ggml_sycl_mul_mat(&src0_row, &src1_row, &dst_row); - } - } else { - sycl_pool_alloc src1_contiguous(sizeof(float)*ggml_nelements(src1)); - sycl_pool_alloc dst_contiguous(sizeof(float)*ggml_nelements(dst)); - - src1_row_extra.data_device[g_main_device] = src1_contiguous.get(); - dst_row_extra.data_device[g_main_device] = dst_contiguous.get(); - - for (int32_t row_id = 0; row_id < n_as; ++row_id) { - int64_t num_src1_rows = 0; - for (int64_t i01 = 0; i01 < ids->ne[1]; i01++) { - const int32_t row_id_i = *(const int32_t *) (ids_host.data() + i01*ids->nb[1] + id*ids->nb[0]); - - if (row_id_i != row_id) { - continue; - } - - GGML_ASSERT(row_id >= 0 && row_id < n_as); - - SYCL_CHECK(CHECK_TRY_ERROR( - stream->memcpy(src1_contiguous.get() + num_src1_rows * nb11, - src1_original + i01 * nb11, nb11))); - num_src1_rows++; - } - - if (num_src1_rows == 0) { - continue; - } - - src0_row_extra.data_device[g_main_device] = - src0_original + row_id * src0->nb[2]; - - src1_row.ne[1] = num_src1_rows; - dst_row.ne[1] = num_src1_rows; - - src1_row.nb[1] = nb11; - src1_row.nb[2] = num_src1_rows*nb11; - src1_row.nb[3] = num_src1_rows*nb11; - - dst_row.nb[1] = nb1; - dst_row.nb[2] = num_src1_rows*nb1; - dst_row.nb[3] = num_src1_rows*nb1; - - ggml_sycl_mul_mat(&src0_row, &src1_row, &dst_row); - - num_src1_rows = 0; - for (int64_t i01 = 0; i01 < ids->ne[1]; i01++) { - const int32_t row_id_i = *(const int32_t *) (ids_host.data() + i01*ids->nb[1] + id*ids->nb[0]); - - if (row_id_i != row_id) { - continue; - } - - GGML_ASSERT(row_id >= 0 && row_id < n_as); - - SYCL_CHECK(CHECK_TRY_ERROR(stream->memcpy( - dst_original + i01 * nb1, - dst_contiguous.get() + num_src1_rows * nb1, nb1))); - num_src1_rows++; - } - } - } - - if (dst->backend == GGML_BACKEND_TYPE_CPU) { - SYCL_CHECK(CHECK_TRY_ERROR(stream->wait())); - } -} -catch (sycl::exception const &exc) { - std::cerr << exc.what() << "Exception caught at file:" << __FILE__ - << ", line:" << __LINE__ << std::endl; - std::exit(1); -} - -static void ggml_sycl_scale(const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) { - ggml_sycl_op_flatten(src0, src1, dst, ggml_sycl_op_scale); -} - -static void ggml_sycl_clamp(const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) { - ggml_sycl_op_flatten(src0, src1, dst, ggml_sycl_op_clamp); -} - -static void ggml_sycl_cpy(const ggml_tensor *src0, const ggml_tensor *src1, - ggml_tensor *dst) try { - const int64_t ne = ggml_nelements(src0); - GGML_ASSERT(ne == ggml_nelements(src1)); - - GGML_ASSERT(src0->backend == GGML_BACKEND_TYPE_GPU); - GGML_ASSERT(src1->backend == GGML_BACKEND_TYPE_GPU); - - GGML_ASSERT(ggml_nbytes(src0) <= INT_MAX); - GGML_ASSERT(ggml_nbytes(src1) <= INT_MAX); - - GGML_TENSOR_BINARY_OP_LOCALS; - - SYCL_CHECK(ggml_sycl_set_device(g_main_device)); - dpct::queue_ptr main_stream = g_syclStreams[g_main_device][0]; - - const ggml_tensor_extra_gpu * src0_extra = (ggml_tensor_extra_gpu *) src0->extra; - const ggml_tensor_extra_gpu * src1_extra = (ggml_tensor_extra_gpu *) src1->extra; - - char * src0_ddc = (char *) src0_extra->data_device[g_main_device]; - char * src1_ddc = (char *) src1_extra->data_device[g_main_device]; - - if (src0->type == GGML_TYPE_F32 && src1->type == GGML_TYPE_F32) { - ggml_cpy_f32_f32_sycl (src0_ddc, src1_ddc, ne, ne00, ne01, ne02, nb00, nb01, nb02, nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13, main_stream); - } else if (src0->type == GGML_TYPE_F32 && src1->type == GGML_TYPE_F16) { - ggml_cpy_f32_f16_sycl (src0_ddc, src1_ddc, ne, ne00, ne01, ne02, nb00, nb01, nb02, nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13, main_stream); - } else if (src0->type == GGML_TYPE_F32 && src1->type == GGML_TYPE_Q8_0) { - ggml_cpy_f32_q8_0_sycl(src0_ddc, src1_ddc, ne, ne00, ne01, ne02, nb00, nb01, nb02, nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13, main_stream); - } else if (src0->type == GGML_TYPE_F32 && src1->type == GGML_TYPE_Q4_0) { - ggml_cpy_f32_q4_0_sycl(src0_ddc, src1_ddc, ne, ne00, ne01, ne02, nb00, nb01, nb02, nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13, main_stream); - } else if (src0->type == GGML_TYPE_F32 && src1->type == GGML_TYPE_Q4_1) { - ggml_cpy_f32_q4_1_sycl(src0_ddc, src1_ddc, ne, ne00, ne01, ne02, nb00, nb01, nb02, nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13, main_stream); - } else if (src0->type == GGML_TYPE_F16 && src1->type == GGML_TYPE_F32) { - ggml_cpy_f16_f32_sycl (src0_ddc, src1_ddc, ne, ne00, ne01, ne02, nb00, nb01, nb02, nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13, main_stream); - } else if (src0->type == GGML_TYPE_F16 && src1->type == GGML_TYPE_F16) { - ggml_cpy_f16_f16_sycl (src0_ddc, src1_ddc, ne, ne00, ne01, ne02, nb00, nb01, nb02, nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13, main_stream); - } else if (src0->type == GGML_TYPE_I16 && src1->type == GGML_TYPE_I16) { - ggml_cpy_i16_i16_sycl (src0_ddc, src1_ddc, ne, ne00, ne01, ne02, nb00, nb01, nb02, nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13, main_stream); - } else if (src0->type == GGML_TYPE_I32 && src1->type == GGML_TYPE_I32) { - ggml_cpy_i32_i32_sycl (src0_ddc, src1_ddc, ne, ne00, ne01, ne02, nb00, nb01, nb02, nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13, main_stream); - } else { - fprintf(stderr, "%s: unsupported type combination (%s to %s)\n", __func__, - ggml_type_name(src0->type), ggml_type_name(src1->type)); - GGML_ASSERT(false); - } - - (void) dst; -} -catch (sycl::exception const &exc) { - std::cerr << exc.what() << "Exception caught at file:" << __FILE__ - << ", line:" << __LINE__ << std::endl; - std::exit(1); -} - -static void ggml_sycl_dup(const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) { - // TODO: why do we pass dst as src1 here? - ggml_sycl_cpy(src0, dst, nullptr); - (void) src1; -} - -static void ggml_sycl_diag_mask_inf(const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) { - ggml_sycl_op_flatten(src0, src1, dst, ggml_sycl_op_diag_mask_inf); -} - -static void ggml_sycl_soft_max(const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) { - ggml_sycl_op_flatten(src0, src1, dst, ggml_sycl_op_soft_max); -} - -static void ggml_sycl_rope(const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) { - GGML_ASSERT(ggml_is_contiguous(src0)); // TODO: this restriction is temporary until non-cont support is implemented - ggml_sycl_op_flatten(src0, src1, dst, ggml_sycl_op_rope); -} - -static void ggml_sycl_alibi(const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) { - ggml_sycl_op_flatten(src0, src1, dst, ggml_sycl_op_alibi); -} - -static void ggml_sycl_pool2d(const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) { - ggml_sycl_op_flatten(src0, src1, dst, ggml_sycl_op_pool2d); -} - -static void ggml_sycl_im2col(const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) { - ggml_sycl_op_flatten(src0, src1, dst, ggml_sycl_op_im2col); -} - -static void ggml_sycl_sum_rows(const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) { - GGML_ASSERT(ggml_is_contiguous(src0)); - ggml_sycl_op_flatten(src0, src1, dst, ggml_sycl_op_sum_rows); -} - -static void ggml_sycl_argsort(const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) { - GGML_ASSERT(ggml_is_contiguous(src0)); - ggml_sycl_op_flatten(src0, src1, dst, ggml_sycl_op_argsort); -} - -static void ggml_sycl_nop(const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) { - (void) src0; - (void) src1; - (void) dst; -} - -static size_t ggml_nbytes_split(const struct ggml_tensor * tensor, int nrows_split) { - static_assert(GGML_MAX_DIMS == 4, "GGML_MAX_DIMS is not 4 - update this function"); - - return nrows_split*ggml_row_size(tensor->type, tensor->ne[0]); -} - -void ggml_sycl_free_data(struct ggml_tensor *tensor) try { - if (!tensor || !tensor->extra || (tensor->backend != GGML_BACKEND_TYPE_GPU && tensor->backend != GGML_BACKEND_TYPE_GPU_SPLIT) ) { - return; - } - - ggml_tensor_extra_gpu * extra = (ggml_tensor_extra_gpu *) tensor->extra; - - for (int i = 0; i < g_device_count; ++i) { - const dpct::queue_ptr stream = g_syclStreams[i][0]; - if (extra->data_device[i] != nullptr) { - SYCL_CHECK(ggml_sycl_set_device(i)); - SYCL_CHECK(CHECK_TRY_ERROR(sycl::free(extra->data_device[i], *stream))); - } - - for (int64_t is = 0; is < MAX_STREAMS; ++is) { - if (extra->events[i][is] != nullptr) { - SYCL_CHECK(ggml_sycl_set_device(i)); - SYCL_CHECK(CHECK_TRY_ERROR( - dpct::destroy_event(extra->events[i][is]))); - } - } - } - - delete extra; -} -catch (sycl::exception const &exc) { - std::cerr << exc.what() << "Exception caught at file:" << __FILE__ - << ", line:" << __LINE__ << std::endl; - std::exit(1); -} - -static ggml_tensor_extra_gpu * g_temp_tensor_extras = nullptr; -static size_t g_temp_tensor_extra_index = 0; - -static ggml_tensor_extra_gpu * ggml_sycl_alloc_temp_tensor_extra() { - if (g_temp_tensor_extras == nullptr) { - g_temp_tensor_extras = new ggml_tensor_extra_gpu[GGML_SYCL_MAX_NODES]; - } - - size_t alloc_index = g_temp_tensor_extra_index; - g_temp_tensor_extra_index = (g_temp_tensor_extra_index + 1) % GGML_SYCL_MAX_NODES; - ggml_tensor_extra_gpu * extra = &g_temp_tensor_extras[alloc_index]; - memset(extra, 0, sizeof(*extra)); - - return extra; -} - -static void ggml_sycl_assign_buffers_impl(struct ggml_tensor *tensor, - bool scratch, bool force_inplace, - bool no_alloc) try { - if (scratch && g_scratch_size == 0) { - return; - } - - tensor->backend = GGML_BACKEND_TYPE_GPU; - - if (tensor->src[0] != nullptr && tensor->src[0]->backend == GGML_BACKEND_TYPE_CPU) { - const ggml_op src0_op = tensor->src[0]->op; - if (src0_op == GGML_OP_RESHAPE || src0_op == GGML_OP_TRANSPOSE || src0_op == GGML_OP_VIEW || src0_op == GGML_OP_PERMUTE) { - ggml_sycl_assign_buffers_impl(tensor->src[0], scratch, force_inplace, no_alloc); - } - } - if (tensor->op == GGML_OP_CPY && tensor->src[1]->backend == GGML_BACKEND_TYPE_CPU) { - ggml_sycl_assign_buffers_impl(tensor->src[1], scratch, force_inplace, no_alloc); - } - - if (scratch && no_alloc) { - return; - } - - ggml_tensor_extra_gpu * extra; - - const bool inplace = (tensor->src[0] != nullptr && tensor->src[0]->data == tensor->data) || - tensor->op == GGML_OP_VIEW || - force_inplace; - const size_t size = ggml_nbytes(tensor); - - SYCL_CHECK(ggml_sycl_set_device(g_main_device)); - const dpct::queue_ptr stream = g_syclStreams[g_main_device][0]; - - if (inplace && (tensor->src[0]->backend == GGML_BACKEND_TYPE_GPU || tensor->src[0]->backend == GGML_BACKEND_TYPE_GPU_SPLIT)) { - ggml_tensor_extra_gpu * src0_extra = (ggml_tensor_extra_gpu * ) tensor->src[0]->extra; - char * src0_ddc = (char *) src0_extra->data_device[g_main_device]; - size_t offset = 0; - if (tensor->op == GGML_OP_VIEW) { - memcpy(&offset, tensor->op_params, sizeof(size_t)); - } - extra = ggml_sycl_alloc_temp_tensor_extra(); - extra->data_device[g_main_device] = src0_ddc + offset; - } else if (tensor->op == GGML_OP_CPY) { - ggml_tensor_extra_gpu * src1_extra = (ggml_tensor_extra_gpu * ) tensor->src[1]->extra; - void * src1_ddv = src1_extra->data_device[g_main_device]; - extra = ggml_sycl_alloc_temp_tensor_extra(); - extra->data_device[g_main_device] = src1_ddv; - } else if (scratch) { - GGML_ASSERT(size <= g_scratch_size); - if (g_scratch_offset + size > g_scratch_size) { - g_scratch_offset = 0; - } - - char * data = (char *) g_scratch_buffer; - if (data == nullptr) { - SYCL_CHECK(CHECK_TRY_ERROR( - data = (char *)sycl::malloc_device( - g_scratch_size, *stream))); - g_scratch_buffer = data; - } - extra = ggml_sycl_alloc_temp_tensor_extra(); - extra->data_device[g_main_device] = data + g_scratch_offset; - - g_scratch_offset += size; - - GGML_ASSERT(g_scratch_offset <= g_scratch_size); - } else { // allocate new buffers outside of scratch - void * data; - SYCL_CHECK(CHECK_TRY_ERROR(data = (void *)sycl::malloc_device( - size, *stream))); - SYCL_CHECK(CHECK_TRY_ERROR( - (*stream).memset(data, 0, size).wait())); - extra = new ggml_tensor_extra_gpu; - memset(extra, 0, sizeof(*extra)); - extra->data_device[g_main_device] = data; - } - - tensor->extra = extra; -} -catch (sycl::exception const &exc) { - std::cerr << exc.what() << "Exception caught at file:" << __FILE__ - << ", line:" << __LINE__ << std::endl; - std::exit(1); -} - -void ggml_sycl_copy_to_device(struct ggml_tensor *tensor) try { - GGML_ASSERT(tensor->backend == GGML_BACKEND_TYPE_GPU); - GGML_ASSERT(ggml_is_contiguous(tensor)); - - ggml_tensor_extra_gpu * extra = (ggml_tensor_extra_gpu *) tensor->extra; - SYCL_CHECK(ggml_sycl_set_device(g_main_device)); - const dpct::queue_ptr stream = g_syclStreams[g_main_device][0]; - SYCL_CHECK(CHECK_TRY_ERROR((*stream) - .memcpy(extra->data_device[g_main_device], - tensor->data, ggml_nbytes(tensor)) - .wait())); -} -catch (sycl::exception const &exc) { - std::cerr << exc.what() << "Exception caught at file:" << __FILE__ - << ", line:" << __LINE__ << std::endl; - std::exit(1); -} - -void ggml_sycl_assign_buffers(struct ggml_tensor * tensor) { - ggml_sycl_assign_buffers_impl(tensor, true, false, false); -} - -void ggml_sycl_assign_buffers_no_alloc(struct ggml_tensor * tensor) { - ggml_sycl_assign_buffers_impl(tensor, true, false, true); -} - -void ggml_sycl_assign_buffers_no_scratch(struct ggml_tensor * tensor) { - ggml_sycl_assign_buffers_impl(tensor, false, false, false); -} - -void ggml_sycl_assign_buffers_force_inplace(struct ggml_tensor * tensor) { - ggml_sycl_assign_buffers_impl(tensor, false, true, false); -} - -void ggml_sycl_set_main_device(const int main_device) try { - if (g_main_device == main_device) return; - check_allow_gpu_index(main_device); - g_main_device = main_device; - g_main_device_id = g_sycl_gpu_mgr->gpus[main_device]; - - if (g_ggml_sycl_debug) { - dpct::device_info prop; - SYCL_CHECK(CHECK_TRY_ERROR(dpct::get_device_info( - prop, dpct::dev_mgr::instance().get_device(g_main_device_id)))); - fprintf(stderr, "Using device %d (%s) as main device\n", - g_main_device_id, prop.get_name()); - } -} -catch (sycl::exception const &exc) { - std::cerr << exc.what() << "Exception caught at file:" << __FILE__ - << ", line:" << __LINE__ << std::endl; - std::exit(1); -} - -void ggml_sycl_set_scratch_size(const size_t scratch_size) { - // this is a hack to not completely break llama.cpp when using multiple models or contexts simultaneously - // it still won't always work as expected, but it's better than nothing - if (scratch_size > g_scratch_size) { - ggml_sycl_free_scratch(); - } - g_scratch_size = std::max(g_scratch_size, scratch_size); -} - -void ggml_sycl_free_scratch() try { - if (g_scratch_buffer == nullptr) { - return; - } - ggml_sycl_set_device(g_main_device); - const dpct::queue_ptr stream = g_syclStreams[g_main_device][0]; - - SYCL_CHECK(CHECK_TRY_ERROR( - sycl::free(g_scratch_buffer, *stream))); - g_scratch_buffer = nullptr; -} -catch (sycl::exception const &exc) { - std::cerr << exc.what() << "Exception caught at file:" << __FILE__ - << ", line:" << __LINE__ << std::endl; - std::exit(1); -} - -bool ggml_sycl_compute_forward(struct ggml_compute_params * params, struct ggml_tensor * tensor) { - if (!g_sycl_loaded) return false; - - ggml_sycl_func_t func; - const bool any_on_device = tensor->backend == GGML_BACKEND_TYPE_GPU - || (tensor->src[0] != nullptr && (tensor->src[0]->backend == GGML_BACKEND_TYPE_GPU || tensor->src[0]->backend == GGML_BACKEND_TYPE_GPU_SPLIT)) - || (tensor->src[1] != nullptr && tensor->src[1]->backend == GGML_BACKEND_TYPE_GPU); - - if (!any_on_device && tensor->op != GGML_OP_MUL_MAT && tensor->op != GGML_OP_MUL_MAT_ID) { - return false; - } - - if (tensor->op == GGML_OP_MUL_MAT) { - if (tensor->src[0]->ne[3] != tensor->src[1]->ne[3]) { -#ifndef NDEBUG - fprintf(stderr, "%s: cannot compute %s: src0->ne[3] = %" PRId64 ", src1->ne[3] = %" PRId64 " - fallback to CPU\n", __func__, tensor->name, tensor->src[0]->ne[3], tensor->src[1]->ne[3]); -#endif - return false; - } - } - - switch (tensor->op) { - case GGML_OP_REPEAT: - func = ggml_sycl_repeat; - break; - case GGML_OP_GET_ROWS: - func = ggml_sycl_get_rows; - break; - case GGML_OP_DUP: - func = ggml_sycl_dup; - break; - case GGML_OP_ADD: - func = ggml_sycl_add; - break; - case GGML_OP_ACC: - func = ggml_sycl_acc; - break; - case GGML_OP_MUL: - func = ggml_sycl_mul; - break; - case GGML_OP_DIV: - func = ggml_sycl_div; - break; - case GGML_OP_UNARY: - switch (ggml_get_unary_op(tensor)) { - case GGML_UNARY_OP_GELU: - func = ggml_sycl_gelu; - break; - case GGML_UNARY_OP_SILU: - func = ggml_sycl_silu; - break; - case GGML_UNARY_OP_GELU_QUICK: - func = ggml_sycl_gelu_quick; - break; - case GGML_UNARY_OP_TANH: - func = ggml_sycl_tanh; - break; - case GGML_UNARY_OP_RELU: - func = ggml_sycl_relu; - break; - case GGML_UNARY_OP_HARDSIGMOID: - func = ggml_sycl_hardsigmoid; - break; - case GGML_UNARY_OP_HARDSWISH: - func = ggml_sycl_hardswish; - break; - default: - return false; - } - break; - case GGML_OP_NORM: - func = ggml_sycl_norm; - break; - case GGML_OP_GROUP_NORM: - func = ggml_sycl_group_norm; - break; - case GGML_OP_CONCAT: - func = ggml_sycl_concat; - break; - case GGML_OP_UPSCALE: - func = ggml_sycl_upscale; - break; - case GGML_OP_PAD: - func = ggml_sycl_pad; - break; - case GGML_OP_LEAKY_RELU: - func = ggml_sycl_leaky_relu; - break; - case GGML_OP_RMS_NORM: - func = ggml_sycl_rms_norm; - break; - case GGML_OP_MUL_MAT: - if (!any_on_device && !ggml_sycl_can_mul_mat(tensor->src[0], tensor->src[1], tensor)) { - return false; - } - func = ggml_sycl_mul_mat; - break; - case GGML_OP_MUL_MAT_ID: - if (!any_on_device && !ggml_sycl_can_mul_mat(tensor->src[2], tensor->src[1], tensor)) { - return false; - } - func = ggml_sycl_mul_mat_id; - break; - case GGML_OP_SCALE: - func = ggml_sycl_scale; - break; - case GGML_OP_SQR: - func = ggml_sycl_sqr; - break; - case GGML_OP_CLAMP: - func = ggml_sycl_clamp; - break; - case GGML_OP_CPY: - func = ggml_sycl_cpy; - break; - case GGML_OP_CONT: - func = ggml_sycl_dup; - break; - case GGML_OP_NONE: - case GGML_OP_RESHAPE: - case GGML_OP_VIEW: - case GGML_OP_PERMUTE: - case GGML_OP_TRANSPOSE: - func = ggml_sycl_nop; - break; - case GGML_OP_DIAG_MASK_INF: - func = ggml_sycl_diag_mask_inf; - break; - case GGML_OP_SOFT_MAX: - func = ggml_sycl_soft_max; - break; - case GGML_OP_ROPE: - func = ggml_sycl_rope; - break; - case GGML_OP_ALIBI: - func = ggml_sycl_alibi; - break; - case GGML_OP_IM2COL: - func = ggml_sycl_im2col; - break; - case GGML_OP_POOL_2D: - func = ggml_sycl_pool2d; - break; - case GGML_OP_SUM_ROWS: - func = ggml_sycl_sum_rows; - break; - case GGML_OP_ARGSORT: - func = ggml_sycl_argsort; - break; - default: - return false; - } - - if (tensor->src[0] != nullptr && tensor->src[0]->backend == GGML_BACKEND_TYPE_GPU_SPLIT) { - ggml_sycl_set_peer_access(tensor->src[1]->ne[1]); - } - - if (params->ith != 0) { - return true; - } - if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) { - return true; - } - func(tensor->src[0], tensor->src[1], tensor); - return true; -} - -GGML_API GGML_CALL void ggml_sycl_get_gpu_list(int *id_list, int max_len) try { - GGML_SYCL_DEBUG("[SYCL] call ggml_sycl_get_gpu_list\n"); - for(int i=0;igpus.size();i++){ - if (i>=max_len) break; - id_list[i] = g_sycl_gpu_mgr->gpus[i]; - } - return; -} -catch (sycl::exception const &exc) { - std::cerr << exc.what() << "Exception caught at file:" << __FILE__ - << ", line:" << __LINE__ << std::endl; - std::exit(1); -} - -int ggml_sycl_get_device_count() try { - int device_count; - if (CHECK_TRY_ERROR(device_count = - dpct::dev_mgr::instance().device_count()) != 0) { - return 0; - } - return device_count; -} -catch (sycl::exception const &exc) { - std::cerr << exc.what() << "Exception caught at file:" << __FILE__ - << ", line:" << __LINE__ << std::endl; - std::exit(1); -} - -GGML_API GGML_CALL void ggml_sycl_get_device_description(int device, char *description, - size_t description_size) try { - GGML_SYCL_DEBUG("[SYCL] call ggml_sycl_get_device_description\n"); - dpct::device_info prop; - int device_id = g_sycl_gpu_mgr->gpus[device]; - SYCL_CHECK(CHECK_TRY_ERROR(dpct::get_device_info( - prop, dpct::dev_mgr::instance().get_device(device_id)))); - snprintf(description, description_size, "%s", prop.get_name()); -} -catch (sycl::exception const &exc) { - std::cerr << exc.what() << "Exception caught at file:" << __FILE__ - << ", line:" << __LINE__ << std::endl; - std::exit(1); -} - -GGML_CALL void ggml_backend_sycl_get_device_memory(int device, size_t *free, - size_t *total) try { - GGML_SYCL_DEBUG("[SYCL] call ggml_backend_sycl_get_device_memory\n"); - ggml_sycl_set_device(device); - - /* - DPCT1009:218: SYCL uses exceptions to report errors and does not use the - error codes. The original code was commented out and a warning string was - inserted. You need to rewrite this code. - */ - /* - DPCT1106:217: 'cudaMemGetInfo' was migrated with the Intel extensions for - device information which may not be supported by all compilers or runtimes. - You may need to adjust the code. - */ - int device_id = g_sycl_gpu_mgr->gpus[device]; - SYCL_CHECK(CHECK_TRY_ERROR( - dpct::dev_mgr::instance().get_device(device_id).get_memory_info(*free, *total))); -} -catch (sycl::exception const &exc) { - std::cerr << exc.what() << "Exception caught at file:" << __FILE__ - << ", line:" << __LINE__ << std::endl; - std::exit(1); -} - -//////////////////////////////////////////////////////////////////////////////// - -// backend interface - -#define UNUSED GGML_UNUSED - -// sycl buffer - -struct ggml_backend_sycl_buffer_context { - int device; - void * dev_ptr = nullptr; - ggml_tensor_extra_gpu * temp_tensor_extras = nullptr; - size_t temp_tensor_extra_index = 0; - std::string name; - - ggml_backend_sycl_buffer_context(int device, void * dev_ptr) : - device(device), dev_ptr(dev_ptr) { - check_allow_gpu_index(device); - int id = g_sycl_gpu_mgr->gpus[device]; - name = (GGML_SYCL_NAME + std::to_string(id)); - } - - ~ ggml_backend_sycl_buffer_context() { - delete[] temp_tensor_extras; - } - - ggml_tensor_extra_gpu * ggml_sycl_alloc_temp_tensor_extra() { - if (temp_tensor_extras == nullptr) { - temp_tensor_extras = new ggml_tensor_extra_gpu[GGML_SYCL_MAX_NODES]; - } - - size_t alloc_index = temp_tensor_extra_index; - temp_tensor_extra_index = (temp_tensor_extra_index + 1) % GGML_SYCL_MAX_NODES; - ggml_tensor_extra_gpu * extra = &temp_tensor_extras[alloc_index]; - memset(extra, 0, sizeof(*extra)); - - return extra; - } -}; - -GGML_CALL static const char * ggml_backend_sycl_buffer_get_name(ggml_backend_buffer_t buffer) { - ggml_backend_sycl_buffer_context * ctx = (ggml_backend_sycl_buffer_context *)buffer->context; - return ctx->name.c_str(); -} - -GGML_CALL static bool ggml_backend_buffer_is_sycl(ggml_backend_buffer_t buffer) { - return buffer->iface.get_name == ggml_backend_sycl_buffer_get_name; -} - -static void -ggml_backend_sycl_buffer_free_buffer(ggml_backend_buffer_t buffer) try { - ggml_backend_sycl_buffer_context * ctx = ( ggml_backend_sycl_buffer_context *)buffer->context; - ggml_sycl_set_device(ctx->device); - const dpct::queue_ptr stream = g_syclStreams[ctx->device][0]; - - SYCL_CHECK( - CHECK_TRY_ERROR(sycl::free(ctx->dev_ptr, *stream))); - delete ctx; -} -catch (sycl::exception const &exc) { - std::cerr << exc.what() << "Exception caught at file:" << __FILE__ - << ", line:" << __LINE__ << std::endl; - std::exit(1); -} - -static void * ggml_backend_sycl_buffer_get_base(ggml_backend_buffer_t buffer) { - ggml_backend_sycl_buffer_context * ctx = ( ggml_backend_sycl_buffer_context *)buffer->context; - return ctx->dev_ptr; -} - -GGML_CALL static void -ggml_backend_sycl_buffer_init_tensor(ggml_backend_buffer_t buffer, - ggml_tensor *tensor) try { - ggml_backend_sycl_buffer_context * ctx = (ggml_backend_sycl_buffer_context *)buffer->context; - - if (tensor->view_src != NULL && tensor->view_offs == 0) { - assert(tensor->view_src->buffer->buft == buffer->buft); - tensor->backend = tensor->view_src->backend; - tensor->extra = tensor->view_src->extra; - return; - } - - ggml_tensor_extra_gpu * extra = ctx->ggml_sycl_alloc_temp_tensor_extra(); - - extra->data_device[ctx->device] = tensor->data; - tensor->backend = GGML_BACKEND_TYPE_GPU; - tensor->extra = extra; - - if (ggml_is_quantized(tensor->type)) { - // initialize padding to 0 to avoid possible NaN values - size_t original_size = ggml_nbytes(tensor); - size_t padded_size = ggml_backend_buft_get_alloc_size(buffer->buft, tensor); - - if (padded_size > original_size && tensor->view_src == nullptr) { - SYCL_CHECK(CHECK_TRY_ERROR(g_syclStreams[ctx->device][0]->memset( - (char *)tensor->data + original_size, 0, - padded_size - original_size).wait())); - } - } -} -catch (sycl::exception const &exc) { - std::cerr << exc.what() << "Exception caught at file:" << __FILE__ - << ", line:" << __LINE__ << std::endl; - std::exit(1); -} - -static void ggml_backend_sycl_buffer_set_tensor(ggml_backend_buffer_t buffer, - ggml_tensor *tensor, - const void *data, size_t offset, - size_t size) try { - GGML_ASSERT(tensor->backend == GGML_BACKEND_TYPE_GPU); - - ggml_backend_sycl_buffer_context * ctx = ( ggml_backend_sycl_buffer_context *)buffer->context; - - ggml_sycl_set_device(ctx->device); - const dpct::queue_ptr stream = g_syclStreams[ctx->device][0]; - SYCL_CHECK( - CHECK_TRY_ERROR(dpct::dev_mgr::instance().get_device(ctx->device).queues_wait_and_throw())); - char* host_buf = (char*)malloc(size); - memcpy(host_buf, data, size); - SYCL_CHECK( - CHECK_TRY_ERROR((*stream) - .memcpy((char *)tensor->data + offset, host_buf, size) - .wait())); - free(host_buf); -} -catch (sycl::exception const &exc) { - std::cerr << exc.what() << "Exception caught at file:" << __FILE__ - << ", line:" << __LINE__ << std::endl; - std::exit(1); -} - -static void ggml_backend_sycl_buffer_get_tensor(ggml_backend_buffer_t buffer, - const ggml_tensor *tensor, - void *data, size_t offset, - size_t size) try { - GGML_ASSERT(tensor->backend == GGML_BACKEND_TYPE_GPU); - - ggml_backend_sycl_buffer_context * ctx = ( ggml_backend_sycl_buffer_context *)buffer->context; - - ggml_sycl_set_device(ctx->device); - const dpct::queue_ptr stream = g_syclStreams[ctx->device][0]; - - SYCL_CHECK( - CHECK_TRY_ERROR(dpct::dev_mgr::instance().get_device(ctx->device).queues_wait_and_throw())); - - SYCL_CHECK(CHECK_TRY_ERROR( - (*stream) - .memcpy(data, (const char *)tensor->data + offset, size) - .wait())); -} -catch (sycl::exception const &exc) { - std::cerr << exc.what() << "Exception caught at file:" << __FILE__ - << ", line:" << __LINE__ << std::endl; - std::exit(1); -} - -GGML_CALL static bool -ggml_backend_sycl_buffer_cpy_tensor(ggml_backend_buffer_t buffer, - const ggml_tensor *src, - ggml_tensor *dst) try { - if (ggml_backend_buffer_is_sycl(src->buffer)) { - ggml_backend_sycl_buffer_context * src_ctx = (ggml_backend_sycl_buffer_context *)src->buffer->context; - ggml_backend_sycl_buffer_context * dst_ctx = (ggml_backend_sycl_buffer_context *)buffer->context; - - ggml_sycl_set_device(src_ctx->device); - /* - DPCT1009:198: SYCL uses exceptions to report errors and does not use the - error codes. The original code was commented out and a warning string - was inserted. You need to rewrite this code. - */ - SYCL_CHECK(CHECK_TRY_ERROR( - dpct::dev_mgr::instance().get_device(src_ctx->device).queues_wait_and_throw())); - ggml_sycl_set_device(dst_ctx->device); - /* - DPCT1009:199: SYCL uses exceptions to report errors and does not use the - error codes. The original code was commented out and a warning string - was inserted. You need to rewrite this code. - */ - SYCL_CHECK(CHECK_TRY_ERROR( - dpct::dev_mgr::instance().get_device(dst_ctx->device).queues_wait_and_throw())); - /* - DPCT1009:200: SYCL uses exceptions to report errors and does not use the - error codes. The original code was commented out and a warning string - was inserted. You need to rewrite this code. - */ - - dpct::queue_ptr stream_dst = g_syclStreams[dst_ctx->device][0]; - dpct::queue_ptr stream_src = g_syclStreams[src_ctx->device][0]; - size_t size = ggml_nbytes(src); - - //todo. it's dirty solutino to walkaroud known issue:device2device cross GPUs. - dev2dev_memcpy(*stream_dst, *stream_src, dst->data, src->data, size); - -//todo, it's known issue:error in device2device cross GPUs. reused when the issue is fixed. DON"T remove -#if 0 - SYCL_CHECK(CHECK_TRY_ERROR((*stream).memcpy( - (char *)dst->data, (const char *)src->data, size).wait())); - - /* - DPCT1009:201: SYCL uses exceptions to report errors and does not use the - error codes. The original code was commented out and a warning string - was inserted. You need to rewrite this code. - */ - SYCL_CHECK(CHECK_TRY_ERROR( - dpct::dev_mgr::instance().get_device(dst_ctx->device).queues_wait_and_throw())); -#endif - return true; - } - return false; -} -catch (sycl::exception const &exc) { - std::cerr << exc.what() << "Exception caught at file:" << __FILE__ - << ", line:" << __LINE__ << std::endl; - std::exit(1); -} - - -static void ggml_backend_sycl_buffer_clear(ggml_backend_buffer_t buffer, - uint8_t value) try { - ggml_backend_sycl_buffer_context * ctx = ( ggml_backend_sycl_buffer_context *)buffer->context; - - ggml_sycl_set_device(ctx->device); - const dpct::queue_ptr stream = g_syclStreams[ctx->device][0]; - SYCL_CHECK( - CHECK_TRY_ERROR(dpct::get_current_device().queues_wait_and_throw())); - - SYCL_CHECK(CHECK_TRY_ERROR((*stream) - .memset(ctx->dev_ptr, value, buffer->size) - .wait())); -} -catch (sycl::exception const &exc) { - std::cerr << exc.what() << "Exception caught at file:" << __FILE__ - << ", line:" << __LINE__ << std::endl; - std::exit(1); -} - -static struct ggml_backend_buffer_i ggml_backend_sycl_buffer_interface = { - /* .get_name = */ ggml_backend_sycl_buffer_get_name, - /* .free_buffer = */ ggml_backend_sycl_buffer_free_buffer, - /* .get_base = */ ggml_backend_sycl_buffer_get_base, - /* .init_tensor = */ ggml_backend_sycl_buffer_init_tensor, - /* .set_tensor = */ ggml_backend_sycl_buffer_set_tensor, - /* .get_tensor = */ ggml_backend_sycl_buffer_get_tensor, - /* .cpy_tensor = */ ggml_backend_sycl_buffer_cpy_tensor, - /* .clear = */ ggml_backend_sycl_buffer_clear, - /* .reset = */ NULL, -}; - -// sycl buffer type -struct ggml_backend_sycl_buffer_type_context { - int device; - std::string name; -}; - -struct ggml_backend_sycl_context { - int device; - std::string name; -}; - -GGML_CALL static const char * ggml_backend_sycl_buffer_type_name(ggml_backend_buffer_type_t buft) { - ggml_backend_sycl_buffer_type_context * ctx = (ggml_backend_sycl_buffer_type_context *)buft->context; - - return ctx->name.c_str(); -} -GGML_CALL static ggml_backend_buffer_t -ggml_backend_sycl_buffer_type_alloc_buffer(ggml_backend_buffer_type_t buft, - size_t size) try { - ggml_backend_sycl_buffer_type_context * buft_ctx = (ggml_backend_sycl_buffer_type_context *)buft->context; - ggml_sycl_set_device(buft_ctx->device); - const dpct::queue_ptr stream = g_syclStreams[buft_ctx->device][0]; - size = std::max(size, (size_t)1); // syclMalloc returns null for size 0 - - void * dev_ptr; - SYCL_CHECK(CHECK_TRY_ERROR(dev_ptr = (void *)sycl::malloc_device( - size, *stream))); - ggml_backend_sycl_buffer_context * ctx = new ggml_backend_sycl_buffer_context(buft_ctx->device, dev_ptr); - return ggml_backend_buffer_init(buft, ggml_backend_sycl_buffer_interface, ctx, size); -} -catch (sycl::exception const &exc) { - std::cerr << exc.what() << "Exception caught at file:" << __FILE__ - << ", line:" << __LINE__ << std::endl; - std::exit(1); -} - -GGML_CALL static size_t ggml_backend_sycl_buffer_type_get_alignment(ggml_backend_buffer_type_t buft) { - return 128; - UNUSED(buft); -} - -static size_t ggml_backend_sycl_buffer_type_get_max_size(ggml_backend_buffer_type_t buft) { - return dpct::get_current_device().get_max_mem_alloc_size(); - - UNUSED(buft); -} - -GGML_CALL static size_t ggml_backend_sycl_buffer_type_get_alloc_size(ggml_backend_buffer_type_t buft, const ggml_tensor * tensor) { - size_t size = ggml_nbytes(tensor); - int64_t ne0 = tensor->ne[0]; - - if (ggml_is_quantized(tensor->type)) { - if (ne0 % MATRIX_ROW_PADDING != 0) { - size += ggml_row_size(tensor->type, MATRIX_ROW_PADDING - ne0 % MATRIX_ROW_PADDING); - } - } - - return size; - - UNUSED(buft); -} - -GGML_CALL static bool ggml_backend_sycl_buffer_type_supports_backend(ggml_backend_buffer_type_t buft, ggml_backend_t backend) { - if (!ggml_backend_is_sycl(backend)) { - return false; - } - ggml_backend_sycl_buffer_type_context * buft_ctx = (ggml_backend_sycl_buffer_type_context *)buft->context; - ggml_backend_sycl_context * sycl_ctx = (ggml_backend_sycl_context *)backend->context; - return buft_ctx->device == sycl_ctx->device; -} - -static ggml_backend_buffer_type_i ggml_backend_sycl_buffer_type_interface = { - /* .get_name = */ ggml_backend_sycl_buffer_type_name, - /* .alloc_buffer = */ ggml_backend_sycl_buffer_type_alloc_buffer, - /* .get_alignment = */ ggml_backend_sycl_buffer_type_get_alignment, - /* .get_max_size = */ ggml_backend_sycl_buffer_type_get_max_size, - /* .get_alloc_size = */ ggml_backend_sycl_buffer_type_get_alloc_size, - /* .supports_backend = */ ggml_backend_sycl_buffer_type_supports_backend, - /* .is_host = */ nullptr, -}; - -ggml_backend_buffer_type_t ggml_backend_sycl_buffer_type(int device_index) { - GGML_SYCL_DEBUG("[SYCL] call ggml_backend_sycl_buffer_type\n"); - - if (device_index>=g_device_count or device_index<0) { - printf("ggml_backend_sycl_buffer_type error: device_index:%d is out of range [0, %d], miss to call ggml_backend_sycl_set_single_device()\n", - device_index, g_device_count-1); - GGML_ASSERT(device_indexgpus[i])}, - }; - } - g_ggml_backend_sycl_buffer_type_initialized = true; - } - return &ggml_backend_sycl_buffer_types[device_index]; -} - -// sycl split buffer type -static void get_row_split(int64_t * row_low, int64_t * row_high, const ggml_tensor * tensor, const std::array & tensor_split, int id) { - const int64_t nrows = ggml_nrows(tensor); - const int64_t rounding = get_row_rounding(tensor->type, tensor_split); - - *row_low = id == 0 ? 0 : nrows*tensor_split[id]; - *row_low -= *row_low % rounding; - if (id == g_device_count - 1) { - *row_high = nrows; - } else { - *row_high = nrows*tensor_split[id + 1]; - *row_high -= *row_high % rounding; - } -} - -struct ggml_backend_sycl_split_buffer_context { - ~ggml_backend_sycl_split_buffer_context() try { - for (ggml_tensor_extra_gpu * extra : tensor_extras) { - for (int i = 0; i < g_device_count; ++i) { - // int id = g_sycl_gpu_mgr->gpus[i]; - for (int64_t is = 0; is < MAX_STREAMS; ++is) { - if (extra->events[i][is] != nullptr) { - /* - DPCT1009:206: SYCL uses exceptions to report errors and - does not use the error codes. The original code was - commented out and a warning string was inserted. You - need to rewrite this code. - */ - SYCL_CHECK(CHECK_TRY_ERROR( - dpct::destroy_event(extra->events[i][is]))); - } - } - if (extra->data_device[i] != nullptr) { - /* - DPCT1009:207: SYCL uses exceptions to report errors and does - not use the error codes. The original code was commented out - and a warning string was inserted. You need to rewrite this - code. - */ - ggml_sycl_set_device(i); - SYCL_CHECK(CHECK_TRY_ERROR(sycl::free( - extra->data_device[i], *g_syclStreams[i][0]))); - } - } - delete extra; - } - } - catch (sycl::exception const &exc) { - std::cerr << exc.what() << "Exception caught at file:" << __FILE__ - << ", line:" << __LINE__ << std::endl; - std::exit(1); - } - - std::vector tensor_extras; -}; - -GGML_CALL static const char * ggml_backend_sycl_split_buffer_get_name(ggml_backend_buffer_t buffer) { - return GGML_SYCL_NAME "_Split"; - - UNUSED(buffer); -} - -// unused at the moment -//static bool ggml_backend_buffer_is_sycl_split(ggml_backend_buffer_t buffer) { -// return buffer->iface.get_name == ggml_backend_sycl_split_buffer_get_name; -//} - -GGML_CALL static void ggml_backend_sycl_split_buffer_free_buffer(ggml_backend_buffer_t buffer) { - ggml_backend_sycl_split_buffer_context * ctx = (ggml_backend_sycl_split_buffer_context *)buffer->context; - delete ctx; -} - -GGML_CALL static void * ggml_backend_sycl_split_buffer_get_base(ggml_backend_buffer_t buffer) { - // the pointers are stored in the tensor extras, this is just a dummy address and never dereferenced - return (void *)0x1000; - - UNUSED(buffer); -} - -GGML_CALL static void -ggml_backend_sycl_split_buffer_init_tensor(ggml_backend_buffer_t buffer, - ggml_tensor *tensor) try { - GGML_ASSERT(tensor->view_src == nullptr); // views of split tensors are not supported - - ggml_backend_sycl_split_buffer_context * ctx = (ggml_backend_sycl_split_buffer_context *)buffer->context; - ggml_backend_sycl_split_buffer_type_context * buft_ctx = (ggml_backend_sycl_split_buffer_type_context *)buffer->buft->context; - - const int64_t ne0 = tensor->ne[0]; - - ggml_tensor_extra_gpu * extra = new ggml_tensor_extra_gpu{}; - - ctx->tensor_extras.push_back(extra); - - for (int i = 0; i < g_device_count; ++i) { - // int id = g_sycl_gpu_mgr->gpus[i]; - int64_t row_low, row_high; - get_row_split(&row_low, &row_high, tensor, buft_ctx->tensor_split, i); - - int64_t nrows_split = row_high - row_low; - if (nrows_split == 0) { - continue; - } - - size_t size = ggml_nbytes_split(tensor, nrows_split); - const size_t original_size = size; - - // pad last row to a multiple of 512 elements to avoid out-of-bounds memory accesses - if (ne0 % MATRIX_ROW_PADDING != 0) { - size += ggml_row_size(tensor->type, MATRIX_ROW_PADDING - ne0 % MATRIX_ROW_PADDING); - } - - // FIXME: do not crash if cudaMalloc fails - // currently, init_tensor cannot fail, it needs to be fixed in ggml-backend first - ggml_sycl_set_device(i); - char * buf; - /* - DPCT1009:208: SYCL uses exceptions to report errors and does not use the - error codes. The original code was commented out and a warning string - was inserted. You need to rewrite this code. - */ - SYCL_CHECK(CHECK_TRY_ERROR(buf = (char *)sycl::malloc_device( - size, *g_syclStreams[i][0]))); - - // set padding to 0 to avoid possible NaN values - if (size > original_size) { - /* - DPCT1009:209: SYCL uses exceptions to report errors and does not use - the error codes. The original code was commented out and a warning - string was inserted. You need to rewrite this code. - */ - SYCL_CHECK(CHECK_TRY_ERROR( - (*g_syclStreams[i][0]) - .memset(buf + original_size, 0, size - original_size) - .wait())); - } - - extra->data_device[i] = buf; - - for (int64_t is = 0; is < MAX_STREAMS; ++is) { - /* - DPCT1009:210: SYCL uses exceptions to report errors and does not use - the error codes. The original code was commented out and a warning - string was inserted. You need to rewrite this code. - */ - SYCL_CHECK( - CHECK_TRY_ERROR(extra->events[i][is] = new sycl::event())); - } - } - tensor->backend = GGML_BACKEND_TYPE_GPU_SPLIT; - tensor->extra = extra; -} -catch (sycl::exception const &exc) { - std::cerr << exc.what() << "Exception caught at file:" << __FILE__ - << ", line:" << __LINE__ << std::endl; - std::exit(1); -} - -GGML_CALL static void -ggml_backend_sycl_split_buffer_set_tensor(ggml_backend_buffer_t buffer, - ggml_tensor *tensor, const void *data, - size_t offset, size_t size) try { - // split tensors must always be set in their entirety at once - GGML_ASSERT(offset == 0); - GGML_ASSERT(size == ggml_nbytes(tensor)); - - ggml_backend_sycl_split_buffer_type_context * buft_ctx = (ggml_backend_sycl_split_buffer_type_context *)buffer->buft->context; - - const int64_t ne0 = tensor->ne[0]; - const size_t nb1 = tensor->nb[1]; - ggml_tensor_extra_gpu * extra = (ggml_tensor_extra_gpu *)tensor->extra; - - for (int i = 0; i < g_device_count; ++i) { - // int id = g_sycl_gpu_mgr->gpus[i]; - int64_t row_low, row_high; - get_row_split(&row_low, &row_high, tensor, buft_ctx->tensor_split, i); - - int64_t nrows_split = row_high - row_low; - if (nrows_split == 0) { - continue; - } - - const size_t offset_split = row_low*nb1; - size_t size = ggml_nbytes_split(tensor, nrows_split); - const size_t original_size = size; - - // pad last row to a multiple of 512 elements to avoid out-of-bounds memory accesses - if (ne0 % MATRIX_ROW_PADDING != 0) { - size += ggml_row_size(tensor->type, MATRIX_ROW_PADDING - ne0 % MATRIX_ROW_PADDING); - } - - const char * buf_host = (const char *)data + offset_split; - /* - DPCT1009:211: SYCL uses exceptions to report errors and does not use the - error codes. The original code was commented out and a warning string - was inserted. You need to rewrite this code. - */ - ggml_sycl_set_device(i); - SYCL_CHECK(CHECK_TRY_ERROR( - (*g_syclStreams[i][0]) - .memcpy(extra->data_device[i], buf_host, original_size) - .wait())); - } -} -catch (sycl::exception const &exc) { - std::cerr << exc.what() << "Exception caught at file:" << __FILE__ - << ", line:" << __LINE__ << std::endl; - std::exit(1); -} - -GGML_CALL static void -ggml_backend_sycl_split_buffer_get_tensor(ggml_backend_buffer_t buffer, - const ggml_tensor *tensor, void *data, - size_t offset, size_t size) try { - // split tensors must always be set in their entirety at once - GGML_ASSERT(offset == 0); - GGML_ASSERT(size == ggml_nbytes(tensor)); - - ggml_backend_sycl_split_buffer_type_context * buft_ctx = (ggml_backend_sycl_split_buffer_type_context *)buffer->buft->context; - - const int64_t ne0 = tensor->ne[0]; - const size_t nb1 = tensor->nb[1]; - ggml_tensor_extra_gpu * extra = (ggml_tensor_extra_gpu *)tensor->extra; - - for (int i = 0; i < g_device_count; ++i) { - // int id = g_sycl_gpu_mgr->gpus[i]; - int64_t row_low, row_high; - get_row_split(&row_low, &row_high, tensor, buft_ctx->tensor_split, i); - - int64_t nrows_split = row_high - row_low; - if (nrows_split == 0) { - continue; - } - - const size_t offset_split = row_low*nb1; - size_t size = ggml_nbytes_split(tensor, nrows_split); - const size_t original_size = size; - - // pad last row to a multiple of 512 elements to avoid out-of-bounds memory accesses - if (ne0 % MATRIX_ROW_PADDING != 0) { - size += ggml_row_size(tensor->type, MATRIX_ROW_PADDING - ne0 % MATRIX_ROW_PADDING); - } - - char * buf_host = (char *)data + offset_split; - /* - DPCT1009:212: SYCL uses exceptions to report errors and does not use the - error codes. The original code was commented out and a warning string - was inserted. You need to rewrite this code. - */ - ggml_sycl_set_device(i); - SYCL_CHECK(CHECK_TRY_ERROR( - (*g_syclStreams[i][0]) - .memcpy(buf_host, extra->data_device[i], original_size) - .wait())); - } -} -catch (sycl::exception const &exc) { - std::cerr << exc.what() << "Exception caught at file:" << __FILE__ - << ", line:" << __LINE__ << std::endl; - std::exit(1); -} - -GGML_CALL static void ggml_backend_sycl_split_buffer_clear(ggml_backend_buffer_t buffer, uint8_t value) { - UNUSED(buffer); - UNUSED(value); -} - -static struct ggml_backend_buffer_i ggml_backend_sycl_split_buffer_interface = { - /* .get_name = */ ggml_backend_sycl_split_buffer_get_name, - /* .free_buffer = */ ggml_backend_sycl_split_buffer_free_buffer, - /* .get_base = */ ggml_backend_sycl_split_buffer_get_base, - /* .init_tensor = */ ggml_backend_sycl_split_buffer_init_tensor, - /* .set_tensor = */ ggml_backend_sycl_split_buffer_set_tensor, - /* .get_tensor = */ ggml_backend_sycl_split_buffer_get_tensor, - /* .cpy_tensor = */ NULL, - /* .clear = */ ggml_backend_sycl_split_buffer_clear, - /* .reset = */ NULL, -}; - -GGML_CALL static const char * ggml_backend_sycl_split_buffer_type_name(ggml_backend_buffer_type_t buft) { - return GGML_SYCL_NAME "_Split"; - - UNUSED(buft); -} - -GGML_CALL static ggml_backend_buffer_t ggml_backend_sycl_split_buffer_type_alloc_buffer(ggml_backend_buffer_type_t buft, size_t size) { - // since we don't know the exact split after rounding, we cannot allocate the device buffers at this point - // instead, we allocate them for each tensor separately in init_tensor - // however, the size still represents the maximum cumulative size of all the device buffers after the tensors are allocated, - // as returned by get_alloc_size. this limit is enforced during tensor allocation by ggml-alloc, so it must be correct. - ggml_backend_sycl_split_buffer_context * ctx = new ggml_backend_sycl_split_buffer_context(); - - return ggml_backend_buffer_init(buft, ggml_backend_sycl_split_buffer_interface, ctx, size); -} - -GGML_CALL static size_t ggml_backend_sycl_split_buffer_type_get_alignment(ggml_backend_buffer_type_t buft) { - return 128; - UNUSED(buft); -} - -GGML_CALL static size_t ggml_backend_sycl_split_buffer_type_get_alloc_size(ggml_backend_buffer_type_t buft, const ggml_tensor * tensor) { - ggml_backend_sycl_split_buffer_type_context * ctx = (ggml_backend_sycl_split_buffer_type_context *)buft->context; - - size_t total_size = 0; - - const int64_t ne0 = tensor->ne[0]; - - for (int i = 0; i < g_device_count; ++i) { - // int id = g_sycl_gpu_mgr->gpus[i]; - int64_t row_low, row_high; - get_row_split(&row_low, &row_high, tensor, ctx->tensor_split, i); - - int64_t nrows_split = row_high - row_low; - if (nrows_split == 0) { - continue; - } - - total_size += ggml_nbytes_split(tensor, nrows_split); - - // pad last row to a multiple of 512 elements to avoid out-of-bounds memory accesses - if (ne0 % MATRIX_ROW_PADDING != 0) { - total_size += ggml_row_size(tensor->type, MATRIX_ROW_PADDING - ne0 % MATRIX_ROW_PADDING); - } - } - - return total_size; -} - -GGML_CALL static bool ggml_backend_sycl_split_buffer_type_supports_backend(ggml_backend_buffer_type_t buft, ggml_backend_t backend) { - return ggml_backend_is_sycl(backend); - - UNUSED(buft); -} - -GGML_CALL static bool ggml_backend_sycl_split_buffer_type_is_host(ggml_backend_buffer_type_t buft) { - return false; - - UNUSED(buft); -} - -static ggml_backend_buffer_type_i ggml_backend_sycl_split_buffer_type_interface = { - /* .get_name = */ ggml_backend_sycl_split_buffer_type_name, - /* .alloc_buffer = */ ggml_backend_sycl_split_buffer_type_alloc_buffer, - /* .get_alignment = */ ggml_backend_sycl_split_buffer_type_get_alignment, - /* .get_max_size = */ NULL, // defaults to SIZE_MAX - /* .get_alloc_size = */ ggml_backend_sycl_split_buffer_type_get_alloc_size, - /* .supports_backend = */ ggml_backend_sycl_split_buffer_type_supports_backend, - /* .is_host = */ ggml_backend_sycl_split_buffer_type_is_host, -}; - -GGML_CALL ggml_backend_buffer_type_t ggml_backend_sycl_split_buffer_type(const float * tensor_split) { - GGML_SYCL_DEBUG("[SYCL] call ggml_backend_sycl_split_buffer_type\n"); - ggml_init_sycl(); - // FIXME: this is not thread safe - static std::map, struct ggml_backend_buffer_type> buft_map; - - std::array tensor_split_arr = {}; - - bool all_zero = tensor_split == nullptr || std::all_of(tensor_split, tensor_split + GGML_SYCL_MAX_DEVICES, [](float x) { return x == 0.0f; }); - if (all_zero) { - tensor_split_arr = g_default_tensor_split; - } else { - float split_sum = 0.0f; - for (int i = 0; i < g_device_count; ++i) { - // int id = g_sycl_gpu_mgr->gpus[i]; - tensor_split_arr[i] = split_sum; - split_sum += tensor_split[i]; - } - for (int i = 0; i < g_device_count; ++i) { - // int id = g_sycl_gpu_mgr->gpus[i]; - tensor_split_arr[i] /= split_sum; - } - } - - auto it = buft_map.find(tensor_split_arr); - if (it != buft_map.end()) { - return &it->second; - } - - struct ggml_backend_buffer_type buft { - /* .iface = */ ggml_backend_sycl_split_buffer_type_interface, - /* .context = */ new ggml_backend_sycl_split_buffer_type_context{tensor_split_arr}, - }; - - auto result = buft_map.emplace(tensor_split_arr, buft); - return &result.first->second; -} - -// host buffer type - -GGML_CALL static const char * ggml_backend_sycl_host_buffer_type_name(ggml_backend_buffer_type_t buft) { - return GGML_SYCL_NAME "_Host"; - - UNUSED(buft); -} - -GGML_CALL static const char * ggml_backend_sycl_host_buffer_name(ggml_backend_buffer_t buffer) { - return GGML_SYCL_NAME "_Host"; - - UNUSED(buffer); -} - -static void ggml_backend_sycl_host_buffer_free_buffer(ggml_backend_buffer_t buffer) { - ggml_sycl_host_free(buffer->context); -} - -static ggml_backend_buffer_t ggml_backend_sycl_host_buffer_type_alloc_buffer(ggml_backend_buffer_type_t buft, size_t size) { - void * ptr = ggml_sycl_host_malloc(size); - - if (ptr == nullptr) { - // fallback to cpu buffer - return ggml_backend_buft_alloc_buffer(ggml_backend_cpu_buffer_type(), size); - } - - // FIXME: this is a hack to avoid having to implement a new buffer type - ggml_backend_buffer_t buffer = ggml_backend_cpu_buffer_from_ptr(ptr, size); - buffer->buft = buft; - buffer->iface.get_name = ggml_backend_sycl_host_buffer_name; - buffer->iface.free_buffer = ggml_backend_sycl_host_buffer_free_buffer; - - return buffer; -} - -ggml_backend_buffer_type_t ggml_backend_sycl_host_buffer_type() { - GGML_SYCL_DEBUG("[SYCL] call ggml_backend_sycl_host_buffer_type\n"); - static struct ggml_backend_buffer_type ggml_backend_sycl_buffer_type_host = { - /* .iface = */ { - /* .get_name = */ ggml_backend_sycl_host_buffer_type_name, - /* .alloc_buffer = */ ggml_backend_sycl_host_buffer_type_alloc_buffer, - /* .get_alignment = */ ggml_backend_cpu_buffer_type()->iface.get_alignment, - /* .get_max_size = */ NULL, // TODO: return device.maxBufferLength - /* .get_alloc_size = */ ggml_backend_cpu_buffer_type()->iface.get_alloc_size, - /* .supports_backend = */ ggml_backend_cpu_buffer_type()->iface.supports_backend, - /* .is_host = */ ggml_backend_cpu_buffer_type()->iface.is_host, - }, - /* .context = */ nullptr, - }; - - return &ggml_backend_sycl_buffer_type_host; -} - -// backend - -GGML_CALL static const char * ggml_backend_sycl_name(ggml_backend_t backend) { - - ggml_backend_sycl_context * sycl_ctx = (ggml_backend_sycl_context *)backend->context; - - return sycl_ctx->name.c_str(); -} - -GGML_CALL static void ggml_backend_sycl_free(ggml_backend_t backend) { - ggml_backend_sycl_context * sycl_ctx = (ggml_backend_sycl_context *)backend->context; - - delete sycl_ctx; - delete backend; -} - - -GGML_CALL static ggml_backend_buffer_type_t ggml_backend_sycl_get_default_buffer_type(ggml_backend_t backend) { - ggml_backend_sycl_context * sycl_ctx = (ggml_backend_sycl_context *)backend->context; - return ggml_backend_sycl_buffer_type(sycl_ctx->device); -} - -GGML_CALL static void ggml_backend_sycl_set_tensor_async(ggml_backend_t backend, - ggml_tensor *tensor, - const void *data, size_t offset, - size_t size) try { - ggml_backend_sycl_context * sycl_ctx = (ggml_backend_sycl_context *)backend->context; - GGML_ASSERT(tensor->buffer->buft == ggml_backend_sycl_buffer_type(sycl_ctx->device) && "unsupported buffer type"); - GGML_ASSERT(tensor->backend == GGML_BACKEND_TYPE_GPU); - SYCL_CHECK(CHECK_TRY_ERROR(g_syclStreams[sycl_ctx->device][0]->memcpy( - (char *)tensor->data + offset, data, size).wait())); -} -catch (sycl::exception const &exc) { - std::cerr << exc.what() << "Exception caught at file:" << __FILE__ - << ", line:" << __LINE__ << std::endl; - std::exit(1); -} - -GGML_CALL static void ggml_backend_sycl_get_tensor_async(ggml_backend_t backend, - const ggml_tensor *tensor, - void *data, size_t offset, - size_t size) try { - ggml_backend_sycl_context * sycl_ctx = (ggml_backend_sycl_context *)backend->context; - GGML_ASSERT(tensor->buffer->buft == ggml_backend_sycl_buffer_type(sycl_ctx->device) && "unsupported buffer type"); - GGML_ASSERT(tensor->backend == GGML_BACKEND_TYPE_GPU); - SYCL_CHECK(CHECK_TRY_ERROR(g_syclStreams[sycl_ctx->device][0]->memcpy( - data, (const char *)tensor->data + offset, size).wait())); -} -catch (sycl::exception const &exc) { - std::cerr << exc.what() << "Exception caught at file:" << __FILE__ - << ", line:" << __LINE__ << std::endl; - std::exit(1); -} - -GGML_CALL static bool ggml_backend_sycl_cpy_tensor_async(ggml_backend_t backend, - const ggml_tensor *src, - ggml_tensor *dst) try { - ggml_backend_sycl_context * sycl_ctx = (ggml_backend_sycl_context *)backend->context; - if (dst->buffer->buft == ggml_backend_sycl_buffer_type(sycl_ctx->device) && ggml_backend_buffer_is_sycl(src->buffer)) { - /* - DPCT1009:215: SYCL uses exceptions to report errors and does not use the - error codes. The original code was commented out and a warning string - was inserted. You need to rewrite this code. - */ - SYCL_CHECK(CHECK_TRY_ERROR(g_syclStreams[sycl_ctx->device][0]->memcpy( - dst->data, src->data, ggml_nbytes(dst)).wait())); - return true; - } - - return false; -} -catch (sycl::exception const &exc) { - std::cerr << exc.what() << "Exception caught at file:" << __FILE__ - << ", line:" << __LINE__ << std::endl; - std::exit(1); -} - -static void ggml_backend_sycl_synchronize(ggml_backend_t backend) try { - ggml_backend_sycl_context * sycl_ctx = (ggml_backend_sycl_context *)backend->context; - SYCL_CHECK(CHECK_TRY_ERROR(g_syclStreams[sycl_ctx->device][0]->wait())); - - UNUSED(backend); -} -catch (sycl::exception const &exc) { - std::cerr << exc.what() << "Exception caught at file:" << __FILE__ - << ", line:" << __LINE__ << std::endl; - std::exit(1); -} - -GGML_CALL static ggml_status ggml_backend_sycl_graph_compute(ggml_backend_t backend, ggml_cgraph * cgraph) { - ggml_backend_sycl_context * sycl_ctx = (ggml_backend_sycl_context *)backend->context; - ggml_sycl_set_main_device(sycl_ctx->device); - - ggml_compute_params params = {}; - params.type = GGML_TASK_TYPE_COMPUTE; - params.ith = 0; - for (int i = 0; i < cgraph->n_nodes; i++) { - ggml_tensor * node = cgraph->nodes[i]; - if (ggml_is_empty(node) || node->op == GGML_OP_RESHAPE || node->op == GGML_OP_TRANSPOSE || node->op == GGML_OP_VIEW || node->op == GGML_OP_PERMUTE || node->op == GGML_OP_NONE) { - continue; - } -#ifndef NDEBUG - assert(node->backend == GGML_BACKEND_TYPE_GPU || node->backend == GGML_BACKEND_TYPE_GPU_SPLIT); - assert(node->buffer->buft == ggml_backend_sycl_buffer_type(sycl_ctx->device)); - assert(node->extra != nullptr); - - for (int j = 0; j < GGML_MAX_SRC; j++) { - if (node->src[j] != nullptr) { - assert(node->src[j]->backend == GGML_BACKEND_TYPE_GPU || node->src[j]->backend == GGML_BACKEND_TYPE_GPU_SPLIT); - assert(node->src[j]->buffer->buft == ggml_backend_sycl_buffer_type(sycl_ctx->device)); - assert(node->src[j]->extra != nullptr); - } - } -#endif - bool ok = ggml_sycl_compute_forward(¶ms, node); - if (!ok) { - fprintf(stderr, "%s: error: op not supported %s (%s)\n", __func__, node->name, ggml_op_name(node->op)); - } - GGML_ASSERT(ok); - } - - return GGML_STATUS_SUCCESS; -} - -GGML_CALL static bool ggml_backend_sycl_supports_op(ggml_backend_t backend, const ggml_tensor * op) { - switch (op->op) { - case GGML_OP_UNARY: - switch (ggml_get_unary_op(op)) { - case GGML_UNARY_OP_GELU: - case GGML_UNARY_OP_SILU: - case GGML_UNARY_OP_RELU: - case GGML_UNARY_OP_HARDSIGMOID: - case GGML_UNARY_OP_HARDSWISH: - case GGML_UNARY_OP_GELU_QUICK: - case GGML_UNARY_OP_TANH: - return true; - default: - return false; - } - break; - case GGML_OP_MUL_MAT: - case GGML_OP_MUL_MAT_ID: - { - struct ggml_tensor * a; - struct ggml_tensor * b; - if (op->op == GGML_OP_MUL_MAT) { - a = op->src[0]; - b = op->src[1]; - } else { - a = op->src[2]; - b = op->src[1]; - } - if (a->ne[3] != b->ne[3]) { - return false; - } - ggml_type a_type = a->type; - if (a_type == GGML_TYPE_IQ4_NL || a_type == GGML_TYPE_IQ4_XS || - a_type == GGML_TYPE_IQ3_XXS || a_type == GGML_TYPE_IQ3_S || - a_type == GGML_TYPE_IQ2_XXS || a_type == GGML_TYPE_IQ2_XS || a_type == GGML_TYPE_IQ2_S || - a_type == GGML_TYPE_IQ1_S || a_type == GGML_TYPE_IQ1_M - ) { - if (b->ne[1] == 1 && ggml_nrows(b) > 1) { - return false; - } - } - return true; - } break; - case GGML_OP_GET_ROWS: - { - switch (op->src[0]->type) { - case GGML_TYPE_F16: - case GGML_TYPE_F32: - case GGML_TYPE_Q4_0: - case GGML_TYPE_Q4_1: - case GGML_TYPE_Q5_0: - case GGML_TYPE_Q5_1: - case GGML_TYPE_Q8_0: - return true; - default: - return false; - } - } break; - case GGML_OP_CPY: - { - ggml_type src0_type = op->src[0]->type; - ggml_type src1_type = op->src[1]->type; - if (src0_type == GGML_TYPE_F32 && src1_type == GGML_TYPE_F32) { - return true; - } - if (src0_type == GGML_TYPE_F32 && src1_type == GGML_TYPE_F16) { - return true; - } - if (src0_type == GGML_TYPE_F32 && src1_type == GGML_TYPE_Q8_0) { - return true; - } - if (src0_type == GGML_TYPE_F32 && src1_type == GGML_TYPE_Q4_0) { - return true; - } - if (src0_type == GGML_TYPE_F32 && src1_type == GGML_TYPE_Q4_1) { - return true; - } - if (src0_type == GGML_TYPE_F16 && src1_type == GGML_TYPE_F16) { - return true; - } - if (src0_type == GGML_TYPE_F16 && src1_type == GGML_TYPE_F32) { - return true; - } - return false; - } break; - case GGML_OP_CONCAT: - { - ggml_type src0_type = op->src[0]->type; - return src0_type != GGML_TYPE_I32 && src0_type != GGML_TYPE_I16; - } break; - case GGML_OP_DUP: - case GGML_OP_NONE: - case GGML_OP_RESHAPE: - case GGML_OP_REPEAT: - case GGML_OP_VIEW: - case GGML_OP_PERMUTE: - case GGML_OP_TRANSPOSE: - case GGML_OP_NORM: - case GGML_OP_ADD: - case GGML_OP_MUL: - case GGML_OP_DIV: - case GGML_OP_RMS_NORM: - case GGML_OP_SCALE: - case GGML_OP_SQR: - case GGML_OP_CLAMP: - case GGML_OP_CONT: - case GGML_OP_DIAG_MASK_INF: - case GGML_OP_SOFT_MAX: - case GGML_OP_ROPE: - case GGML_OP_ALIBI: - case GGML_OP_IM2COL: - case GGML_OP_POOL_2D: - case GGML_OP_SUM_ROWS: - case GGML_OP_ARGSORT: - case GGML_OP_ACC: - case GGML_OP_GROUP_NORM: - case GGML_OP_UPSCALE: - case GGML_OP_PAD: - case GGML_OP_LEAKY_RELU: - return true; - default: - return false; - } - - UNUSED(backend); -} - -GGML_CALL static bool ggml_backend_sycl_offload_op(ggml_backend_t backend, const ggml_tensor * op) { - const int min_batch_size = 32; - return op->ne[1] >= min_batch_size && op->op != GGML_OP_GET_ROWS && op->op != GGML_OP_MUL_MAT_ID; - GGML_UNUSED(backend); -} - - -static ggml_backend_i ggml_backend_sycl_interface = { - /* .get_name = */ ggml_backend_sycl_name, - /* .free = */ ggml_backend_sycl_free, - /* .get_default_buffer_type = */ ggml_backend_sycl_get_default_buffer_type, - /* .set_tensor_async = */ ggml_backend_sycl_set_tensor_async, - /* .get_tensor_async = */ ggml_backend_sycl_get_tensor_async, - /* .cpy_tensor_async = */ NULL, //ggml_backend_sycl_cpy_tensor_async, // TODO: update for the new interface - /* .synchronize = */ ggml_backend_sycl_synchronize, - /* .graph_plan_create = */ NULL, - /* .graph_plan_free = */ NULL, - /* .graph_plan_compute = */ NULL, - /* .graph_compute = */ ggml_backend_sycl_graph_compute, - /* .supports_op = */ ggml_backend_sycl_supports_op, - /* .offload_op = */ ggml_backend_sycl_offload_op, - /* .event_new = */ NULL, - /* .event_free = */ NULL, - /* .event_record = */ NULL, - /* .event_wait = */ NULL, - /* .event_synchronize = */ NULL, -}; - -static ggml_guid_t ggml_backend_sycl_guid() { - static ggml_guid guid = { 0x58, 0x05, 0x13, 0x8f, 0xcd, 0x3a, 0x61, 0x9d, 0xe7, 0xcd, 0x98, 0xa9, 0x03, 0xfd, 0x7c, 0x53 }; - return &guid; -} - -GGML_CALL ggml_backend_t ggml_backend_sycl_init(int device) { - GGML_SYCL_DEBUG("[SYCL] call ggml_backend_sycl_init\n"); - ggml_init_sycl(); - - check_allow_gpu_index(device); - - // not strictly necessary, but it may reduce the overhead of the first graph_compute - ggml_sycl_set_main_device(device); - int id = g_sycl_gpu_mgr->gpus[device]; - ggml_backend_sycl_context * ctx = new ggml_backend_sycl_context { - /* .device = */ device, - /* .name = */ GGML_SYCL_NAME + std::to_string(id), - }; - - ggml_backend_t sycl_backend = new ggml_backend { - /* .guid = */ ggml_backend_sycl_guid(), - /* .interface = */ ggml_backend_sycl_interface, - /* .context = */ ctx - }; - - return sycl_backend; -} - -bool ggml_backend_is_sycl(ggml_backend_t backend) { - return backend != NULL && ggml_guid_matches(backend->guid, ggml_backend_sycl_guid()); -} - -GGML_CALL int ggml_backend_sycl_get_device_count() { - GGML_SYCL_DEBUG("[SYCL] call ggml_backend_sycl_get_device_count\n"); - if (!g_sycl_gpu_mgr) g_sycl_gpu_mgr = new sycl_gpu_mgr(); - return g_sycl_gpu_mgr->get_gpu_count(); -} - -GGML_CALL static ggml_backend_t ggml_backend_reg_sycl_init(const char * params, void * user_data) { - ggml_backend_t sycl_backend = ggml_backend_sycl_init((int) (intptr_t) user_data); - return sycl_backend; - - UNUSED(params); -} - -GGML_API GGML_CALL int ggml_backend_sycl_get_device_index(int device_id) { - GGML_SYCL_DEBUG("[SYCL] call ggml_backend_sycl_get_device_index\n"); - return g_sycl_gpu_mgr->get_index(device_id); -} - -GGML_API GGML_CALL int ggml_backend_sycl_get_device_id(int device_index) { - GGML_SYCL_DEBUG("[SYCL] call ggml_backend_sycl_get_device_id\n"); - return g_sycl_gpu_mgr->gpus[device_index]; -} - -GGML_API GGML_CALL void ggml_backend_sycl_set_single_device_mode(int main_gpu_id) { - ggml_init_sycl(); - GGML_SYCL_DEBUG("[SYCL] call ggml_backend_sycl_set_single_device_mode\n"); - fprintf(stderr, "ggml_backend_sycl_set_single_device: use single device: [%d]\n", main_gpu_id); - GGML_ASSERT(main_gpu_idget_gpu_count()); - g_ggml_backend_sycl_buffer_type_initialized = false; -} - -GGML_API GGML_CALL void ggml_backend_sycl_set_mul_device_mode() { - ggml_init_sycl(); - GGML_SYCL_DEBUG("[SYCL] call ggml_backend_sycl_set_mul_device_mode\n"); - - if (g_ggml_sycl_backend_gpu_mode == SYCL_MUL_GPU_MODE) { - return; - } - - fprintf(stderr, "ggml_backend_sycl_set_mul_device_mode: true\n"); - - if (g_sycl_gpu_mgr) { - delete g_sycl_gpu_mgr; - } - g_sycl_gpu_mgr = new sycl_gpu_mgr(); - g_ggml_sycl_backend_gpu_mode = SYCL_MUL_GPU_MODE; - ggml_init_by_gpus(g_sycl_gpu_mgr->get_gpu_count()); - g_ggml_backend_sycl_buffer_type_initialized = false; -} - -extern "C" int ggml_backend_sycl_reg_devices(); - -int ggml_backend_sycl_reg_devices() { - ggml_backend_sycl_set_mul_device_mode(); - assert(g_device_count>0); - for (int i = 0; i < g_device_count; i++) { - int id = g_sycl_gpu_mgr->gpus[i]; - char name[128]; - snprintf(name, sizeof(name), "%s%d", GGML_SYCL_NAME, id); - ggml_backend_register(name, ggml_backend_reg_sycl_init, ggml_backend_sycl_buffer_type(i), (void *) (intptr_t) i); - } - return g_device_count; -} diff --git a/ggml-sycl.h b/ggml-sycl.h deleted file mode 100644 index a9f776fc1dd..00000000000 --- a/ggml-sycl.h +++ /dev/null @@ -1,49 +0,0 @@ -// -// MIT license -// Copyright (C) 2024 Intel Corporation -// SPDX-License-Identifier: MIT -// - -#pragma once - -#include "ggml.h" -#include "ggml-backend.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#define GGML_SYCL_MAX_DEVICES 48 -#define GGML_SYCL_NAME "SYCL" - -// backend API -GGML_API ggml_backend_t ggml_backend_sycl_init(int device); - -// devide buffer -GGML_API ggml_backend_buffer_type_t ggml_backend_sycl_buffer_type(int device); - -// split tensor buffer that splits matrices by rows across multiple devices -GGML_API GGML_CALL ggml_backend_buffer_type_t ggml_backend_sycl_split_buffer_type(const float * tensor_split); - -// pinned host buffer for use with the CPU backend for faster copies between CPU and GPU -GGML_API ggml_backend_buffer_type_t ggml_backend_sycl_host_buffer_type(void); - -GGML_API void ggml_backend_sycl_print_sycl_devices(void); -GGML_API GGML_CALL void ggml_sycl_get_gpu_list(int *id_list, int max_len); -GGML_API GGML_CALL void ggml_sycl_get_device_description(int device, char *description, size_t description_size); -GGML_API GGML_CALL int ggml_backend_sycl_get_device_count(); -GGML_API GGML_CALL void ggml_backend_sycl_get_device_memory(int device, size_t *free, size_t *total); -GGML_API GGML_CALL int ggml_backend_sycl_get_device_index(int device_id); - -// TODO: these are temporary -// ref: https://github.com/ggerganov/llama.cpp/pull/6022#issuecomment-1992615670 -GGML_API GGML_CALL int ggml_backend_sycl_get_device_id(int device_index); -GGML_API GGML_CALL void ggml_backend_sycl_set_single_device_mode(int main_gpu_id); -GGML_API GGML_CALL void ggml_backend_sycl_set_mul_device_mode(); - -// SYCL doesn't support registering host memory, keep here for reference -// GGML_API GGML_CALL bool ggml_backend_sycl_register_host_buffer(void * buffer, size_t size); -// GGML_API GGML_CALL void ggml_backend_sycl_unregister_host_buffer(void * buffer); -#ifdef __cplusplus -} -#endif diff --git a/ggml-vulkan-shaders.hpp b/ggml-vulkan-shaders.hpp deleted file mode 100644 index fcb6f384bc2..00000000000 --- a/ggml-vulkan-shaders.hpp +++ /dev/null @@ -1,69849 +0,0 @@ -#include - -unsigned char add_f32_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0x67,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00, -0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30, -0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x0f,0x00,0x0a,0x00,0x05,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00, -0x17,0x00,0x00,0x00,0x2f,0x01,0x00,0x00,0x3f,0x01,0x00,0x00, -0x4b,0x01,0x00,0x00,0x56,0x01,0x00,0x00,0x10,0x00,0x06,0x00, -0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x00,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x05,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x30,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x0d,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x0e,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x3c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x11,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x48,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x13,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x4c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x54,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x16,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x58,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x17,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x5c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x19,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x64,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x1a,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x15,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x2f,0x01,0x00,0x00, -0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x3c,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x04,0x00,0x3d,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x3d,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0x3d,0x01,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x3f,0x01,0x00,0x00,0x22,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x3f,0x01,0x00,0x00, -0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x48,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x04,0x00,0x49,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x49,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0x49,0x01,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x4b,0x01,0x00,0x00,0x22,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x4b,0x01,0x00,0x00, -0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x53,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x04,0x00,0x54,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x54,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0x54,0x01,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x56,0x01,0x00,0x00,0x22,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x56,0x01,0x00,0x00, -0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x61,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00, -0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x16,0x00,0x03,0x00,0x14,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x1e,0x00,0x1e,0x00,0x15,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x16,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x16,0x00,0x00,0x00, -0x17,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00, -0x18,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x18,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x1a,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x18,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x18,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x18,0x00,0x00,0x00, -0x58,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x18,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x18,0x00,0x00,0x00,0x63,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x18,0x00,0x00,0x00, -0x69,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x18,0x00,0x00,0x00,0xad,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x18,0x00,0x00,0x00,0xb1,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x18,0x00,0x00,0x00, -0xb6,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x18,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x18,0x00,0x00,0x00,0xc0,0x00,0x00,0x00, -0x0a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x18,0x00,0x00,0x00, -0xc4,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x18,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x18,0x00,0x00,0x00,0xce,0x00,0x00,0x00, -0x0d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x18,0x00,0x00,0x00, -0xd7,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x18,0x00,0x00,0x00,0xda,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x18,0x00,0x00,0x00,0xde,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x18,0x00,0x00,0x00, -0x15,0x01,0x00,0x00,0x18,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x18,0x00,0x00,0x00,0x1a,0x01,0x00,0x00,0x17,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x18,0x00,0x00,0x00,0x20,0x01,0x00,0x00, -0x16,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x18,0x00,0x00,0x00, -0x26,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x17,0x00,0x04,0x00, -0x2d,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x2e,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0x2d,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x2e,0x01,0x00,0x00, -0x2f,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x30,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x31,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x18,0x00,0x00,0x00, -0x34,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x14,0x00,0x02,0x00, -0x37,0x01,0x00,0x00,0x1d,0x00,0x03,0x00,0x3c,0x01,0x00,0x00, -0x14,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x3d,0x01,0x00,0x00, -0x3c,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x3e,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x3d,0x01,0x00,0x00,0x3b,0x00,0x04,0x00, -0x3e,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x18,0x00,0x00,0x00,0x40,0x01,0x00,0x00, -0x19,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x48,0x01,0x00,0x00, -0x14,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x49,0x01,0x00,0x00, -0x48,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x4a,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x49,0x01,0x00,0x00,0x3b,0x00,0x04,0x00, -0x4a,0x01,0x00,0x00,0x4b,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x50,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x53,0x01,0x00,0x00, -0x14,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x54,0x01,0x00,0x00, -0x53,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x55,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x54,0x01,0x00,0x00,0x3b,0x00,0x04,0x00, -0x55,0x01,0x00,0x00,0x56,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x5f,0x01,0x00,0x00, -0x00,0x02,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x60,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x2c,0x00,0x06,0x00, -0x2d,0x01,0x00,0x00,0x61,0x01,0x00,0x00,0x5f,0x01,0x00,0x00, -0x60,0x01,0x00,0x00,0x60,0x01,0x00,0x00,0x36,0x00,0x05,0x00, -0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00, -0xf7,0x00,0x03,0x00,0x62,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0xfb,0x00,0x03,0x00,0x30,0x01,0x00,0x00,0x63,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x63,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x31,0x01,0x00,0x00,0x32,0x01,0x00,0x00,0x2f,0x01,0x00,0x00, -0x30,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x33,0x01,0x00,0x00,0x32,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0x35,0x01,0x00,0x00,0x17,0x00,0x00,0x00, -0x34,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x36,0x01,0x00,0x00,0x35,0x01,0x00,0x00,0xae,0x00,0x05,0x00, -0x37,0x01,0x00,0x00,0x38,0x01,0x00,0x00,0x33,0x01,0x00,0x00, -0x36,0x01,0x00,0x00,0xf7,0x00,0x03,0x00,0x3a,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x38,0x01,0x00,0x00, -0x39,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x39,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x62,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x3a,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0x41,0x01,0x00,0x00,0x17,0x00,0x00,0x00, -0x40,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x42,0x01,0x00,0x00,0x41,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0x71,0x01,0x00,0x00,0x17,0x00,0x00,0x00, -0xd7,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x72,0x01,0x00,0x00,0x71,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0x73,0x01,0x00,0x00,0x17,0x00,0x00,0x00, -0xda,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x74,0x01,0x00,0x00,0x73,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x75,0x01,0x00,0x00,0x72,0x01,0x00,0x00, -0x74,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x76,0x01,0x00,0x00,0x17,0x00,0x00,0x00,0xde,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x77,0x01,0x00,0x00, -0x76,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x78,0x01,0x00,0x00,0x75,0x01,0x00,0x00,0x77,0x01,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x79,0x01,0x00,0x00, -0x33,0x01,0x00,0x00,0x78,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x7d,0x01,0x00,0x00,0x79,0x01,0x00,0x00, -0x72,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x80,0x01,0x00,0x00,0x7d,0x01,0x00,0x00,0x74,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x83,0x01,0x00,0x00, -0x80,0x01,0x00,0x00,0x77,0x01,0x00,0x00,0x82,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x86,0x01,0x00,0x00,0x33,0x01,0x00,0x00, -0x83,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x8b,0x01,0x00,0x00,0x74,0x01,0x00,0x00,0x77,0x01,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8c,0x01,0x00,0x00, -0x86,0x01,0x00,0x00,0x8b,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x90,0x01,0x00,0x00,0x8c,0x01,0x00,0x00, -0x74,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x93,0x01,0x00,0x00,0x90,0x01,0x00,0x00,0x77,0x01,0x00,0x00, -0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x98,0x01,0x00,0x00, -0x86,0x01,0x00,0x00,0x93,0x01,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9b,0x01,0x00,0x00,0x98,0x01,0x00,0x00, -0x77,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa4,0x01,0x00,0x00,0x9b,0x01,0x00,0x00,0x77,0x01,0x00,0x00, -0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa5,0x01,0x00,0x00, -0x98,0x01,0x00,0x00,0xa4,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0xa7,0x01,0x00,0x00,0x17,0x00,0x00,0x00, -0x15,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xa8,0x01,0x00,0x00,0xa7,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa9,0x01,0x00,0x00,0x79,0x01,0x00,0x00, -0xa8,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0xab,0x01,0x00,0x00,0x17,0x00,0x00,0x00,0x1a,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xac,0x01,0x00,0x00, -0xab,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xad,0x01,0x00,0x00,0x8c,0x01,0x00,0x00,0xac,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xae,0x01,0x00,0x00, -0xa9,0x01,0x00,0x00,0xad,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0xb0,0x01,0x00,0x00,0x17,0x00,0x00,0x00, -0x20,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xb1,0x01,0x00,0x00,0xb0,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xb2,0x01,0x00,0x00,0x9b,0x01,0x00,0x00, -0xb1,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xb3,0x01,0x00,0x00,0xae,0x01,0x00,0x00,0xb2,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0xb5,0x01,0x00,0x00, -0x17,0x00,0x00,0x00,0x26,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xb6,0x01,0x00,0x00,0xb5,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb7,0x01,0x00,0x00, -0xa5,0x01,0x00,0x00,0xb6,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xb8,0x01,0x00,0x00,0xb3,0x01,0x00,0x00, -0xb7,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x47,0x01,0x00,0x00,0x42,0x01,0x00,0x00,0xb8,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0xc2,0x01,0x00,0x00, -0x17,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xc3,0x01,0x00,0x00,0xc2,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0xc4,0x01,0x00,0x00, -0x17,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xc5,0x01,0x00,0x00,0xc4,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc6,0x01,0x00,0x00, -0xc3,0x01,0x00,0x00,0xc5,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0xc7,0x01,0x00,0x00,0x17,0x00,0x00,0x00, -0x21,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xc8,0x01,0x00,0x00,0xc7,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xc9,0x01,0x00,0x00,0xc6,0x01,0x00,0x00, -0xc8,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xca,0x01,0x00,0x00,0x33,0x01,0x00,0x00,0xc9,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xce,0x01,0x00,0x00, -0xca,0x01,0x00,0x00,0xc3,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xd1,0x01,0x00,0x00,0xce,0x01,0x00,0x00, -0xc5,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd4,0x01,0x00,0x00,0xd1,0x01,0x00,0x00,0xc8,0x01,0x00,0x00, -0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd7,0x01,0x00,0x00, -0x33,0x01,0x00,0x00,0xd4,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xdc,0x01,0x00,0x00,0xc5,0x01,0x00,0x00, -0xc8,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xdd,0x01,0x00,0x00,0xd7,0x01,0x00,0x00,0xdc,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe1,0x01,0x00,0x00, -0xdd,0x01,0x00,0x00,0xc5,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xe4,0x01,0x00,0x00,0xe1,0x01,0x00,0x00, -0xc8,0x01,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xe9,0x01,0x00,0x00,0xd7,0x01,0x00,0x00,0xe4,0x01,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xec,0x01,0x00,0x00, -0xe9,0x01,0x00,0x00,0xc8,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xf5,0x01,0x00,0x00,0xec,0x01,0x00,0x00, -0xc8,0x01,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xf6,0x01,0x00,0x00,0xe9,0x01,0x00,0x00,0xf5,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0xf8,0x01,0x00,0x00, -0x17,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xf9,0x01,0x00,0x00,0xf8,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfa,0x01,0x00,0x00, -0xca,0x01,0x00,0x00,0xf9,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0xfc,0x01,0x00,0x00,0x17,0x00,0x00,0x00, -0x5d,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xfd,0x01,0x00,0x00,0xfc,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xfe,0x01,0x00,0x00,0xdd,0x01,0x00,0x00, -0xfd,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xff,0x01,0x00,0x00,0xfa,0x01,0x00,0x00,0xfe,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x01,0x02,0x00,0x00, -0x17,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x02,0x02,0x00,0x00,0x01,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x03,0x02,0x00,0x00, -0xec,0x01,0x00,0x00,0x02,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x04,0x02,0x00,0x00,0xff,0x01,0x00,0x00, -0x03,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x06,0x02,0x00,0x00,0x17,0x00,0x00,0x00,0x69,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x07,0x02,0x00,0x00, -0x06,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x08,0x02,0x00,0x00,0xf6,0x01,0x00,0x00,0x07,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x09,0x02,0x00,0x00, -0x04,0x02,0x00,0x00,0x08,0x02,0x00,0x00,0x41,0x00,0x06,0x00, -0x50,0x01,0x00,0x00,0x51,0x01,0x00,0x00,0x4b,0x01,0x00,0x00, -0x34,0x01,0x00,0x00,0x09,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0x52,0x01,0x00,0x00,0x51,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x49,0x02,0x00,0x00, -0x17,0x00,0x00,0x00,0xad,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x4a,0x02,0x00,0x00,0x49,0x02,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4b,0x02,0x00,0x00, -0xca,0x01,0x00,0x00,0x4a,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0x4c,0x02,0x00,0x00,0x17,0x00,0x00,0x00, -0xb1,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x4d,0x02,0x00,0x00,0x4c,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x4e,0x02,0x00,0x00,0x4b,0x02,0x00,0x00, -0x4d,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x50,0x02,0x00,0x00,0x17,0x00,0x00,0x00,0xb6,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x51,0x02,0x00,0x00, -0x50,0x02,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x52,0x02,0x00,0x00,0xdd,0x01,0x00,0x00,0x51,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x53,0x02,0x00,0x00, -0x17,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x54,0x02,0x00,0x00,0x53,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x55,0x02,0x00,0x00, -0x52,0x02,0x00,0x00,0x54,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x56,0x02,0x00,0x00,0x4e,0x02,0x00,0x00, -0x55,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x58,0x02,0x00,0x00,0x17,0x00,0x00,0x00,0xc0,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x59,0x02,0x00,0x00, -0x58,0x02,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x5a,0x02,0x00,0x00,0xec,0x01,0x00,0x00,0x59,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x5b,0x02,0x00,0x00, -0x17,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x5c,0x02,0x00,0x00,0x5b,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5d,0x02,0x00,0x00, -0x5a,0x02,0x00,0x00,0x5c,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x5e,0x02,0x00,0x00,0x56,0x02,0x00,0x00, -0x5d,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x60,0x02,0x00,0x00,0x17,0x00,0x00,0x00,0xca,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x61,0x02,0x00,0x00, -0x60,0x02,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x62,0x02,0x00,0x00,0xf6,0x01,0x00,0x00,0x61,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x63,0x02,0x00,0x00, -0x17,0x00,0x00,0x00,0xce,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x64,0x02,0x00,0x00,0x63,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x65,0x02,0x00,0x00, -0x62,0x02,0x00,0x00,0x64,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x66,0x02,0x00,0x00,0x5e,0x02,0x00,0x00, -0x65,0x02,0x00,0x00,0x41,0x00,0x06,0x00,0x50,0x01,0x00,0x00, -0x5b,0x01,0x00,0x00,0x56,0x01,0x00,0x00,0x34,0x01,0x00,0x00, -0x66,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x14,0x00,0x00,0x00, -0x5c,0x01,0x00,0x00,0x5b,0x01,0x00,0x00,0x81,0x00,0x05,0x00, -0x14,0x00,0x00,0x00,0x5d,0x01,0x00,0x00,0x52,0x01,0x00,0x00, -0x5c,0x01,0x00,0x00,0x41,0x00,0x06,0x00,0x50,0x01,0x00,0x00, -0x5e,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,0x34,0x01,0x00,0x00, -0x47,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x5e,0x01,0x00,0x00, -0x5d,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x62,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x62,0x01,0x00,0x00,0xfd,0x00,0x01,0x00, -0x38,0x00,0x01,0x00, -}; -const uint64_t add_f32_len = 4276; - -unsigned char argsort_f32_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0x2b,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00, -0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30, -0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x0f,0x00,0x0a,0x00,0x05,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00, -0x13,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x2b,0x00,0x00,0x00, -0x33,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x10,0x00,0x06,0x00, -0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x00,0x04,0x00,0x00, -0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x10,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x11,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x24,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x2b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x31,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x31,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x31,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x81,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0x82,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x82,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x82,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x84,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x84,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x06,0x01,0x00,0x00, -0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x13,0x00,0x02,0x00, -0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x15,0x00,0x04,0x00, -0x0d,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x1d,0x00,0x03,0x00,0x10,0x00,0x00,0x00,0x0d,0x00,0x00,0x00, -0x1e,0x00,0x03,0x00,0x11,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x12,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x12,0x00,0x00,0x00, -0x13,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x0d,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x16,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x0d,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x22,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x23,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x25,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x26,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x23,0x00,0x00,0x00,0x2b,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x2c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x1e,0x00,0x04,0x00, -0x31,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x32,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x31,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x32,0x00,0x00,0x00, -0x33,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x34,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x14,0x00,0x02,0x00,0x37,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x51,0x00,0x00,0x00, -0x08,0x01,0x00,0x00,0x2b,0x00,0x04,0x00,0x0d,0x00,0x00,0x00, -0x78,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x16,0x00,0x03,0x00, -0x80,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x1d,0x00,0x03,0x00, -0x81,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x1e,0x00,0x03,0x00, -0x82,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x83,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x82,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x83,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x8e,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x05,0x01,0x00,0x00,0x00,0x04,0x00,0x00, -0x2c,0x00,0x06,0x00,0x22,0x00,0x00,0x00,0x06,0x01,0x00,0x00, -0x05,0x01,0x00,0x00,0x2c,0x00,0x00,0x00,0x2c,0x00,0x00,0x00, -0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x05,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x07,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0xfb,0x00,0x03,0x00,0x25,0x00,0x00,0x00, -0x08,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x08,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x26,0x00,0x00,0x00,0x27,0x00,0x00,0x00, -0x24,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x27,0x00,0x00,0x00, -0x7c,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,0x29,0x00,0x00,0x00, -0x28,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x26,0x00,0x00,0x00, -0x2d,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x2c,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x2e,0x00,0x00,0x00, -0x2d,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x30,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x34,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x33,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x36,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0xae,0x00,0x05,0x00, -0x37,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x30,0x00,0x00,0x00, -0x36,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x3a,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x38,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x39,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x07,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x3a,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2e,0x00,0x00,0x00, -0x36,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x37,0x00,0x00,0x00, -0x4a,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x36,0x00,0x00,0x00, -0xf7,0x00,0x03,0x00,0x4c,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x4a,0x00,0x00,0x00,0x4b,0x00,0x00,0x00, -0x4c,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x4b,0x00,0x00,0x00, -0x41,0x00,0x06,0x00,0x16,0x00,0x00,0x00,0x4f,0x00,0x00,0x00, -0x13,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x29,0x00,0x00,0x00, -0x3e,0x00,0x03,0x00,0x4f,0x00,0x00,0x00,0x29,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x4c,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x4c,0x00,0x00,0x00,0xe0,0x00,0x04,0x00,0x50,0x00,0x00,0x00, -0x50,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x53,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x53,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x26,0x01,0x00,0x00, -0x50,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x04,0x01,0x00,0x00, -0x56,0x00,0x00,0x00,0xb2,0x00,0x05,0x00,0x37,0x00,0x00,0x00, -0x5b,0x00,0x00,0x00,0x26,0x01,0x00,0x00,0x36,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x55,0x00,0x00,0x00,0x56,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x5b,0x00,0x00,0x00, -0x54,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x54,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x5e,0x00,0x00,0x00,0x26,0x01,0x00,0x00,0x50,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x5f,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x5f,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x27,0x01,0x00,0x00,0x5e,0x00,0x00,0x00,0x54,0x00,0x00,0x00, -0x02,0x01,0x00,0x00,0x62,0x00,0x00,0x00,0xac,0x00,0x05,0x00, -0x37,0x00,0x00,0x00,0x65,0x00,0x00,0x00,0x27,0x01,0x00,0x00, -0x25,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x61,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x65,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x61,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x60,0x00,0x00,0x00,0xc6,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x6a,0x00,0x00,0x00,0x30,0x00,0x00,0x00, -0x27,0x01,0x00,0x00,0xac,0x00,0x05,0x00,0x37,0x00,0x00,0x00, -0x6e,0x00,0x00,0x00,0x6a,0x00,0x00,0x00,0x30,0x00,0x00,0x00, -0xf7,0x00,0x03,0x00,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x6e,0x00,0x00,0x00,0x6f,0x00,0x00,0x00, -0x70,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x6f,0x00,0x00,0x00, -0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x74,0x00,0x00,0x00, -0x30,0x00,0x00,0x00,0x26,0x01,0x00,0x00,0xaa,0x00,0x05,0x00, -0x37,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0x74,0x00,0x00,0x00, -0x25,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x77,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x75,0x00,0x00,0x00, -0x76,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x76,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x34,0x00,0x00,0x00, -0x79,0x00,0x00,0x00,0x33,0x00,0x00,0x00,0x78,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x7a,0x00,0x00,0x00, -0x79,0x00,0x00,0x00,0xab,0x00,0x05,0x00,0x37,0x00,0x00,0x00, -0x7b,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,0x25,0x00,0x00,0x00, -0xf7,0x00,0x03,0x00,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x7b,0x00,0x00,0x00,0x7e,0x00,0x00,0x00, -0x9c,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x7e,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x89,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x41,0x00,0x06,0x00, -0x16,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0x13,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x0d,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,0x8a,0x00,0x00,0x00, -0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x8c,0x00,0x00,0x00, -0x8b,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x8d,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x8c,0x00,0x00,0x00, -0x41,0x00,0x06,0x00,0x8e,0x00,0x00,0x00,0x8f,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x8d,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x80,0x00,0x00,0x00,0x90,0x00,0x00,0x00, -0x8f,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x94,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x6a,0x00,0x00,0x00, -0x41,0x00,0x06,0x00,0x16,0x00,0x00,0x00,0x95,0x00,0x00,0x00, -0x13,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x94,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,0x96,0x00,0x00,0x00, -0x95,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x97,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x97,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x8e,0x00,0x00,0x00, -0x99,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0x98,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x80,0x00,0x00,0x00, -0x9a,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0xba,0x00,0x05,0x00, -0x37,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x90,0x00,0x00,0x00, -0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x7f,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x9c,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x30,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x16,0x00,0x00,0x00, -0xa2,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0xa1,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x0d,0x00,0x00,0x00, -0xa3,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x7c,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0xa3,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa5,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0x41,0x00,0x06,0x00, -0x8e,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x80,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0xa6,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xab,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x6a,0x00,0x00,0x00,0x41,0x00,0x06,0x00, -0x16,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0x13,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x0d,0x00,0x00,0x00,0xad,0x00,0x00,0x00,0xac,0x00,0x00,0x00, -0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xae,0x00,0x00,0x00, -0xad,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xaf,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0xae,0x00,0x00,0x00, -0x41,0x00,0x06,0x00,0x8e,0x00,0x00,0x00,0xb0,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0xaf,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x80,0x00,0x00,0x00,0xb1,0x00,0x00,0x00, -0xb0,0x00,0x00,0x00,0xb8,0x00,0x05,0x00,0x37,0x00,0x00,0x00, -0xb2,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0xb1,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x7f,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x7f,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x37,0x00,0x00,0x00, -0x2a,0x01,0x00,0x00,0x9b,0x00,0x00,0x00,0x7e,0x00,0x00,0x00, -0xb2,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0xf7,0x00,0x03,0x00, -0xb5,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x2a,0x01,0x00,0x00,0xb4,0x00,0x00,0x00,0xb5,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xb4,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x30,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xbc,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x6a,0x00,0x00,0x00, -0x41,0x00,0x06,0x00,0x16,0x00,0x00,0x00,0x0f,0x01,0x00,0x00, -0x13,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0xb9,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,0x10,0x01,0x00,0x00, -0x0f,0x01,0x00,0x00,0x41,0x00,0x06,0x00,0x16,0x00,0x00,0x00, -0x13,0x01,0x00,0x00,0x13,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0xbc,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x0d,0x00,0x00,0x00, -0x14,0x01,0x00,0x00,0x13,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0x0f,0x01,0x00,0x00,0x14,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0x13,0x01,0x00,0x00,0x10,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xb5,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb5,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x77,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xc0,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x34,0x00,0x00,0x00, -0xc1,0x00,0x00,0x00,0x33,0x00,0x00,0x00,0x78,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xc2,0x00,0x00,0x00, -0xc1,0x00,0x00,0x00,0xab,0x00,0x05,0x00,0x37,0x00,0x00,0x00, -0xc3,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,0x25,0x00,0x00,0x00, -0xf7,0x00,0x03,0x00,0xc6,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0xc5,0x00,0x00,0x00, -0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xc5,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xcb,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x41,0x00,0x06,0x00, -0x16,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x13,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x0d,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,0xcc,0x00,0x00,0x00, -0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xce,0x00,0x00,0x00, -0xcd,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xcf,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0xce,0x00,0x00,0x00, -0x41,0x00,0x06,0x00,0x8e,0x00,0x00,0x00,0xd0,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0xcf,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x80,0x00,0x00,0x00,0xd1,0x00,0x00,0x00, -0xd0,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd5,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x6a,0x00,0x00,0x00, -0x41,0x00,0x06,0x00,0x16,0x00,0x00,0x00,0xd6,0x00,0x00,0x00, -0x13,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0xd5,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,0xd7,0x00,0x00,0x00, -0xd6,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xd8,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xd9,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0xd8,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x8e,0x00,0x00,0x00, -0xda,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0xd9,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x80,0x00,0x00,0x00, -0xdb,0x00,0x00,0x00,0xda,0x00,0x00,0x00,0xb8,0x00,0x05,0x00, -0x37,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,0xd1,0x00,0x00,0x00, -0xdb,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xc6,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xe2,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x30,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x16,0x00,0x00,0x00, -0xe3,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0xe2,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x0d,0x00,0x00,0x00, -0xe4,0x00,0x00,0x00,0xe3,0x00,0x00,0x00,0x7c,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xe5,0x00,0x00,0x00,0xe4,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe6,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0xe5,0x00,0x00,0x00,0x41,0x00,0x06,0x00, -0x8e,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0xe6,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x80,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0xe7,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xec,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x6a,0x00,0x00,0x00,0x41,0x00,0x06,0x00, -0x16,0x00,0x00,0x00,0xed,0x00,0x00,0x00,0x13,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0xec,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x0d,0x00,0x00,0x00,0xee,0x00,0x00,0x00,0xed,0x00,0x00,0x00, -0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xef,0x00,0x00,0x00, -0xee,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xf0,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0xef,0x00,0x00,0x00, -0x41,0x00,0x06,0x00,0x8e,0x00,0x00,0x00,0xf1,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0xf0,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x80,0x00,0x00,0x00,0xf2,0x00,0x00,0x00, -0xf1,0x00,0x00,0x00,0xba,0x00,0x05,0x00,0x37,0x00,0x00,0x00, -0xf3,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0xf2,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xc6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xc6,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x37,0x00,0x00,0x00, -0x29,0x01,0x00,0x00,0xdc,0x00,0x00,0x00,0xc5,0x00,0x00,0x00, -0xf3,0x00,0x00,0x00,0xdd,0x00,0x00,0x00,0xf7,0x00,0x03,0x00, -0xf6,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x29,0x01,0x00,0x00,0xf5,0x00,0x00,0x00,0xf6,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xf5,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x30,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xfd,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x6a,0x00,0x00,0x00, -0x41,0x00,0x06,0x00,0x16,0x00,0x00,0x00,0x1c,0x01,0x00,0x00, -0x13,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0xfa,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,0x1d,0x01,0x00,0x00, -0x1c,0x01,0x00,0x00,0x41,0x00,0x06,0x00,0x16,0x00,0x00,0x00, -0x20,0x01,0x00,0x00,0x13,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0xfd,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x0d,0x00,0x00,0x00, -0x21,0x01,0x00,0x00,0x20,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0x1c,0x01,0x00,0x00,0x21,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0x20,0x01,0x00,0x00,0x1d,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xf6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xf6,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x77,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x77,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x70,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x70,0x00,0x00,0x00,0xe0,0x00,0x04,0x00, -0x50,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x51,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x62,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x62,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x02,0x01,0x00,0x00,0x27,0x01,0x00,0x00,0x50,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x5f,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x61,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x56,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x56,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x04,0x01,0x00,0x00,0x26,0x01,0x00,0x00, -0x50,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x53,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x55,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x07,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x07,0x01,0x00,0x00, -0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00, -}; -const uint64_t argsort_f32_len = 3752; - -unsigned char clamp_f32_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0xb6,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00, -0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30, -0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x0f,0x00,0x09,0x00,0x05,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0xd9,0x00,0x00,0x00, -0xe4,0x00,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x12,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x12,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x12,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x0a,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x12,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x0d,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x12,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x38,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x3c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x12,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x44,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x48,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x13,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x12,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xc7,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xd6,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0xd7,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0xd7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0xd7,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xd9,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xd9,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xe1,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0xe2,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0xe2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0xe2,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xe4,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xe4,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x0a,0x01,0x00,0x00,0x0b,0x00,0x00,0x00, -0x19,0x00,0x00,0x00,0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00, -0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0x11,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x1e,0x00,0x16,0x00,0x12,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x15,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x15,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00, -0x1a,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x15,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x55,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00, -0x5a,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x15,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x66,0x00,0x00,0x00, -0x05,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00, -0x6f,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x15,0x00,0x00,0x00,0x72,0x00,0x00,0x00,0x0a,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x76,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00, -0xad,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x15,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xb8,0x00,0x00,0x00, -0x0e,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00, -0xbe,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x17,0x00,0x04,0x00, -0xc5,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0xc6,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0xc5,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xc6,0x00,0x00,0x00, -0xc7,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0xc9,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00, -0xcc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x14,0x00,0x02,0x00, -0xcf,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0xd6,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0xd7,0x00,0x00,0x00, -0xd6,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xd8,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0xd8,0x00,0x00,0x00,0xd9,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0xde,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0xe1,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0xe2,0x00,0x00,0x00, -0xe1,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xe3,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0xe2,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0xe3,0x00,0x00,0x00,0xe4,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xe5,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00, -0xee,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0xef,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x11,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xfa,0x00,0x00,0x00, -0x13,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x08,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x09,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0x2c,0x00,0x06,0x00,0xc5,0x00,0x00,0x00,0x0a,0x01,0x00,0x00, -0x08,0x01,0x00,0x00,0x09,0x01,0x00,0x00,0x09,0x01,0x00,0x00, -0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x05,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x0b,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0xfb,0x00,0x03,0x00,0xc8,0x00,0x00,0x00, -0x0c,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x0c,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0xc9,0x00,0x00,0x00,0xca,0x00,0x00,0x00, -0xc7,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0xca,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xcd,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xce,0x00,0x00,0x00,0xcd,0x00,0x00,0x00, -0xae,0x00,0x05,0x00,0xcf,0x00,0x00,0x00,0xd0,0x00,0x00,0x00, -0xcb,0x00,0x00,0x00,0xce,0x00,0x00,0x00,0xf7,0x00,0x03,0x00, -0xd2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xd0,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0xd2,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xd1,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x0b,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xd2,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x1a,0x01,0x00,0x00, -0x14,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x1b,0x01,0x00,0x00,0x1a,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x1c,0x01,0x00,0x00, -0x14,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x1d,0x01,0x00,0x00,0x1c,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1e,0x01,0x00,0x00, -0x1b,0x01,0x00,0x00,0x1d,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x17,0x00,0x00,0x00,0x1f,0x01,0x00,0x00,0x14,0x00,0x00,0x00, -0x1e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x20,0x01,0x00,0x00,0x1f,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x21,0x01,0x00,0x00,0x1e,0x01,0x00,0x00, -0x20,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x22,0x01,0x00,0x00,0xcb,0x00,0x00,0x00,0x21,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x26,0x01,0x00,0x00, -0x22,0x01,0x00,0x00,0x1b,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x29,0x01,0x00,0x00,0x26,0x01,0x00,0x00, -0x1d,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x2c,0x01,0x00,0x00,0x29,0x01,0x00,0x00,0x20,0x01,0x00,0x00, -0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2f,0x01,0x00,0x00, -0xcb,0x00,0x00,0x00,0x2c,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x34,0x01,0x00,0x00,0x1d,0x01,0x00,0x00, -0x20,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x35,0x01,0x00,0x00,0x2f,0x01,0x00,0x00,0x34,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x39,0x01,0x00,0x00, -0x35,0x01,0x00,0x00,0x1d,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3c,0x01,0x00,0x00,0x39,0x01,0x00,0x00, -0x20,0x01,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x41,0x01,0x00,0x00,0x2f,0x01,0x00,0x00,0x3c,0x01,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x44,0x01,0x00,0x00, -0x41,0x01,0x00,0x00,0x20,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x4d,0x01,0x00,0x00,0x44,0x01,0x00,0x00, -0x20,0x01,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x4e,0x01,0x00,0x00,0x41,0x01,0x00,0x00,0x4d,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x50,0x01,0x00,0x00, -0x14,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x51,0x01,0x00,0x00,0x50,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x52,0x01,0x00,0x00, -0x22,0x01,0x00,0x00,0x51,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x17,0x00,0x00,0x00,0x54,0x01,0x00,0x00,0x14,0x00,0x00,0x00, -0x5a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x55,0x01,0x00,0x00,0x54,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x56,0x01,0x00,0x00,0x35,0x01,0x00,0x00, -0x55,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x57,0x01,0x00,0x00,0x52,0x01,0x00,0x00,0x56,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x59,0x01,0x00,0x00, -0x14,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x5a,0x01,0x00,0x00,0x59,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5b,0x01,0x00,0x00, -0x44,0x01,0x00,0x00,0x5a,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x5c,0x01,0x00,0x00,0x57,0x01,0x00,0x00, -0x5b,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00, -0x5e,0x01,0x00,0x00,0x14,0x00,0x00,0x00,0x66,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x5f,0x01,0x00,0x00, -0x5e,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x60,0x01,0x00,0x00,0x4e,0x01,0x00,0x00,0x5f,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x61,0x01,0x00,0x00, -0x5c,0x01,0x00,0x00,0x60,0x01,0x00,0x00,0x41,0x00,0x06,0x00, -0xde,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0xd9,0x00,0x00,0x00, -0xcc,0x00,0x00,0x00,0x61,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0x11,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,0xdf,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xe6,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0xe5,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,0xe6,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x6b,0x01,0x00,0x00, -0x14,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x6c,0x01,0x00,0x00,0x6b,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x6d,0x01,0x00,0x00, -0x14,0x00,0x00,0x00,0x72,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x6e,0x01,0x00,0x00,0x6d,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6f,0x01,0x00,0x00, -0x6c,0x01,0x00,0x00,0x6e,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x17,0x00,0x00,0x00,0x70,0x01,0x00,0x00,0x14,0x00,0x00,0x00, -0x76,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x71,0x01,0x00,0x00,0x70,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x72,0x01,0x00,0x00,0x6f,0x01,0x00,0x00, -0x71,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x73,0x01,0x00,0x00,0xcb,0x00,0x00,0x00,0x72,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x77,0x01,0x00,0x00, -0x73,0x01,0x00,0x00,0x6c,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x7a,0x01,0x00,0x00,0x77,0x01,0x00,0x00, -0x6e,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x7d,0x01,0x00,0x00,0x7a,0x01,0x00,0x00,0x71,0x01,0x00,0x00, -0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x80,0x01,0x00,0x00, -0xcb,0x00,0x00,0x00,0x7d,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x85,0x01,0x00,0x00,0x6e,0x01,0x00,0x00, -0x71,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x86,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0x85,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8a,0x01,0x00,0x00, -0x86,0x01,0x00,0x00,0x6e,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x8d,0x01,0x00,0x00,0x8a,0x01,0x00,0x00, -0x71,0x01,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x92,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0x8d,0x01,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x95,0x01,0x00,0x00, -0x92,0x01,0x00,0x00,0x71,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9e,0x01,0x00,0x00,0x95,0x01,0x00,0x00, -0x71,0x01,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9f,0x01,0x00,0x00,0x92,0x01,0x00,0x00,0x9e,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xa1,0x01,0x00,0x00, -0x14,0x00,0x00,0x00,0xad,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xa2,0x01,0x00,0x00,0xa1,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa3,0x01,0x00,0x00, -0x73,0x01,0x00,0x00,0xa2,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x17,0x00,0x00,0x00,0xa5,0x01,0x00,0x00,0x14,0x00,0x00,0x00, -0xb2,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xa6,0x01,0x00,0x00,0xa5,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa7,0x01,0x00,0x00,0x86,0x01,0x00,0x00, -0xa6,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa8,0x01,0x00,0x00,0xa3,0x01,0x00,0x00,0xa7,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xaa,0x01,0x00,0x00, -0x14,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xab,0x01,0x00,0x00,0xaa,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xac,0x01,0x00,0x00, -0x95,0x01,0x00,0x00,0xab,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xad,0x01,0x00,0x00,0xa8,0x01,0x00,0x00, -0xac,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00, -0xaf,0x01,0x00,0x00,0x14,0x00,0x00,0x00,0xbe,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb0,0x01,0x00,0x00, -0xaf,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xb1,0x01,0x00,0x00,0x9f,0x01,0x00,0x00,0xb0,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb2,0x01,0x00,0x00, -0xad,0x01,0x00,0x00,0xb1,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xec,0x00,0x00,0x00,0xe7,0x00,0x00,0x00, -0xb2,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0xef,0x00,0x00,0x00, -0xf0,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0xee,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x11,0x00,0x00,0x00,0xf1,0x00,0x00,0x00, -0xf0,0x00,0x00,0x00,0xb8,0x00,0x05,0x00,0xcf,0x00,0x00,0x00, -0xf2,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,0xf1,0x00,0x00,0x00, -0xf7,0x00,0x03,0x00,0xf5,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xf2,0x00,0x00,0x00,0xf4,0x00,0x00,0x00, -0xf8,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xf4,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xf5,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xf8,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0xef,0x00,0x00,0x00, -0xfb,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0xfa,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x11,0x00,0x00,0x00,0xfc,0x00,0x00,0x00, -0xfb,0x00,0x00,0x00,0xba,0x00,0x05,0x00,0xcf,0x00,0x00,0x00, -0xfd,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,0xfc,0x00,0x00,0x00, -0xa9,0x00,0x06,0x00,0x11,0x00,0x00,0x00,0xb5,0x01,0x00,0x00, -0xfd,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0xe0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xf5,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xf5,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x11,0x00,0x00,0x00, -0xb4,0x01,0x00,0x00,0xf1,0x00,0x00,0x00,0xf4,0x00,0x00,0x00, -0xb5,0x01,0x00,0x00,0xf8,0x00,0x00,0x00,0x41,0x00,0x06,0x00, -0xde,0x00,0x00,0x00,0x07,0x01,0x00,0x00,0xe4,0x00,0x00,0x00, -0xcc,0x00,0x00,0x00,0xec,0x00,0x00,0x00,0x3e,0x00,0x03,0x00, -0x07,0x01,0x00,0x00,0xb4,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0x0b,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x0b,0x01,0x00,0x00, -0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00, -}; -const uint64_t clamp_f32_len = 3512; - -unsigned char cpy_f16_f16_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0x98,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00, -0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c, -0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00, -0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x0f,0x00,0x09,0x00,0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0xc7,0x00,0x00,0x00,0xd8,0x00,0x00,0x00,0xe4,0x00,0x00,0x00, -0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00, -0x00,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x12,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x12,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00, -0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x12,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x12,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x12,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x34,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00, -0x0e,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x38,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x12,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x44,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x12,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x4c,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x12,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xc7,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xd5,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x48,0x00,0x04,0x00,0xd6,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0xd6,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0xd6,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xd8,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xd8,0x00,0x00,0x00, -0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xe1,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x48,0x00,0x04,0x00,0xe2,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0xe2,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0xe2,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xe4,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xe4,0x00,0x00,0x00, -0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xef,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00, -0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x16,0x00,0x03,0x00,0x11,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x1e,0x00,0x16,0x00,0x12,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x11,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00, -0x16,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x17,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x1a,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00, -0x1e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x15,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x5a,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x15,0x00,0x00,0x00,0x66,0x00,0x00,0x00,0x05,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x6f,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00, -0x72,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x15,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xad,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00, -0xb2,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x15,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x0e,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xbe,0x00,0x00,0x00, -0x0d,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0xc5,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0xc6,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xc5,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0xc6,0x00,0x00,0x00,0xc7,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xc8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0xc9,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xcc,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x14,0x00,0x02,0x00,0xcf,0x00,0x00,0x00, -0x16,0x00,0x03,0x00,0xd4,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x1d,0x00,0x03,0x00,0xd5,0x00,0x00,0x00,0xd4,0x00,0x00,0x00, -0x1e,0x00,0x03,0x00,0xd6,0x00,0x00,0x00,0xd5,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0xd7,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0xd6,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xd7,0x00,0x00,0x00, -0xd8,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x15,0x00,0x00,0x00,0xd9,0x00,0x00,0x00,0x11,0x00,0x00,0x00, -0x1d,0x00,0x03,0x00,0xe1,0x00,0x00,0x00,0xd4,0x00,0x00,0x00, -0x1e,0x00,0x03,0x00,0xe2,0x00,0x00,0x00,0xe1,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0xe3,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0xe2,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xe3,0x00,0x00,0x00, -0xe4,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0xe9,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xd4,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xed,0x00,0x00,0x00, -0x00,0x02,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xee,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2c,0x00,0x06,0x00, -0xc5,0x00,0x00,0x00,0xef,0x00,0x00,0x00,0xed,0x00,0x00,0x00, -0xee,0x00,0x00,0x00,0xee,0x00,0x00,0x00,0x36,0x00,0x05,0x00, -0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00, -0xf7,0x00,0x03,0x00,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0xfb,0x00,0x03,0x00,0xc8,0x00,0x00,0x00,0xf1,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xf1,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0xc9,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0xc7,0x00,0x00,0x00, -0xc8,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xcb,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x17,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0xcc,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xce,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,0xae,0x00,0x05,0x00, -0xcf,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0xcb,0x00,0x00,0x00, -0xce,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0xd2,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xd0,0x00,0x00,0x00, -0xd1,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xd1,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xf0,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xd2,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x17,0x00,0x00,0x00,0xda,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0xd9,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xdb,0x00,0x00,0x00,0xda,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x17,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0x6f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x00,0x01,0x00,0x00,0xff,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x17,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x14,0x00,0x00,0x00, -0x72,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x02,0x01,0x00,0x00,0x01,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x03,0x01,0x00,0x00,0x00,0x01,0x00,0x00, -0x02,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00, -0x04,0x01,0x00,0x00,0x14,0x00,0x00,0x00,0x76,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x05,0x01,0x00,0x00, -0x04,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x06,0x01,0x00,0x00,0x03,0x01,0x00,0x00,0x05,0x01,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x07,0x01,0x00,0x00, -0xcb,0x00,0x00,0x00,0x06,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x0b,0x01,0x00,0x00,0x07,0x01,0x00,0x00, -0x00,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x0e,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,0x02,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x11,0x01,0x00,0x00, -0x0e,0x01,0x00,0x00,0x05,0x01,0x00,0x00,0x82,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x14,0x01,0x00,0x00,0xcb,0x00,0x00,0x00, -0x11,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x19,0x01,0x00,0x00,0x02,0x01,0x00,0x00,0x05,0x01,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1a,0x01,0x00,0x00, -0x14,0x01,0x00,0x00,0x19,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x1e,0x01,0x00,0x00,0x1a,0x01,0x00,0x00, -0x02,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x21,0x01,0x00,0x00,0x1e,0x01,0x00,0x00,0x05,0x01,0x00,0x00, -0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x26,0x01,0x00,0x00, -0x14,0x01,0x00,0x00,0x21,0x01,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x29,0x01,0x00,0x00,0x26,0x01,0x00,0x00, -0x05,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x32,0x01,0x00,0x00,0x29,0x01,0x00,0x00,0x05,0x01,0x00,0x00, -0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x33,0x01,0x00,0x00, -0x26,0x01,0x00,0x00,0x32,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x17,0x00,0x00,0x00,0x35,0x01,0x00,0x00,0x14,0x00,0x00,0x00, -0xad,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x36,0x01,0x00,0x00,0x35,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x37,0x01,0x00,0x00,0x07,0x01,0x00,0x00, -0x36,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00, -0x39,0x01,0x00,0x00,0x14,0x00,0x00,0x00,0xb2,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x3a,0x01,0x00,0x00, -0x39,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x3b,0x01,0x00,0x00,0x1a,0x01,0x00,0x00,0x3a,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3c,0x01,0x00,0x00, -0x37,0x01,0x00,0x00,0x3b,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x17,0x00,0x00,0x00,0x3e,0x01,0x00,0x00,0x14,0x00,0x00,0x00, -0xb8,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x3f,0x01,0x00,0x00,0x3e,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x40,0x01,0x00,0x00,0x29,0x01,0x00,0x00, -0x3f,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x41,0x01,0x00,0x00,0x3c,0x01,0x00,0x00,0x40,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x43,0x01,0x00,0x00, -0x14,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x44,0x01,0x00,0x00,0x43,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x45,0x01,0x00,0x00, -0x33,0x01,0x00,0x00,0x44,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x46,0x01,0x00,0x00,0x41,0x01,0x00,0x00, -0x45,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xe0,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,0x46,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x50,0x01,0x00,0x00, -0x14,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x51,0x01,0x00,0x00,0x50,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x52,0x01,0x00,0x00, -0x14,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x53,0x01,0x00,0x00,0x52,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x54,0x01,0x00,0x00, -0x51,0x01,0x00,0x00,0x53,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x17,0x00,0x00,0x00,0x55,0x01,0x00,0x00,0x14,0x00,0x00,0x00, -0x1e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x56,0x01,0x00,0x00,0x55,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x57,0x01,0x00,0x00,0x54,0x01,0x00,0x00, -0x56,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x58,0x01,0x00,0x00,0xcb,0x00,0x00,0x00,0x57,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5c,0x01,0x00,0x00, -0x58,0x01,0x00,0x00,0x51,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x5f,0x01,0x00,0x00,0x5c,0x01,0x00,0x00, -0x53,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x62,0x01,0x00,0x00,0x5f,0x01,0x00,0x00,0x56,0x01,0x00,0x00, -0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x65,0x01,0x00,0x00, -0xcb,0x00,0x00,0x00,0x62,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x6a,0x01,0x00,0x00,0x53,0x01,0x00,0x00, -0x56,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x6b,0x01,0x00,0x00,0x65,0x01,0x00,0x00,0x6a,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6f,0x01,0x00,0x00, -0x6b,0x01,0x00,0x00,0x53,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x72,0x01,0x00,0x00,0x6f,0x01,0x00,0x00, -0x56,0x01,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x77,0x01,0x00,0x00,0x65,0x01,0x00,0x00,0x72,0x01,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7a,0x01,0x00,0x00, -0x77,0x01,0x00,0x00,0x56,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x83,0x01,0x00,0x00,0x7a,0x01,0x00,0x00, -0x56,0x01,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x84,0x01,0x00,0x00,0x77,0x01,0x00,0x00,0x83,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x86,0x01,0x00,0x00, -0x14,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x87,0x01,0x00,0x00,0x86,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x88,0x01,0x00,0x00, -0x58,0x01,0x00,0x00,0x87,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x17,0x00,0x00,0x00,0x8a,0x01,0x00,0x00,0x14,0x00,0x00,0x00, -0x5a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x8b,0x01,0x00,0x00,0x8a,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x8c,0x01,0x00,0x00,0x6b,0x01,0x00,0x00, -0x8b,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x8d,0x01,0x00,0x00,0x88,0x01,0x00,0x00,0x8c,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x8f,0x01,0x00,0x00, -0x14,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x90,0x01,0x00,0x00,0x8f,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x91,0x01,0x00,0x00, -0x7a,0x01,0x00,0x00,0x90,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x92,0x01,0x00,0x00,0x8d,0x01,0x00,0x00, -0x91,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00, -0x94,0x01,0x00,0x00,0x14,0x00,0x00,0x00,0x66,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x95,0x01,0x00,0x00, -0x94,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x96,0x01,0x00,0x00,0x84,0x01,0x00,0x00,0x95,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x97,0x01,0x00,0x00, -0x92,0x01,0x00,0x00,0x96,0x01,0x00,0x00,0x41,0x00,0x06,0x00, -0xe9,0x00,0x00,0x00,0xea,0x00,0x00,0x00,0xe4,0x00,0x00,0x00, -0xcc,0x00,0x00,0x00,0x97,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0xd4,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,0xea,0x00,0x00,0x00, -0x41,0x00,0x06,0x00,0xe9,0x00,0x00,0x00,0xec,0x00,0x00,0x00, -0xd8,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0xe0,0x00,0x00,0x00, -0x3e,0x00,0x03,0x00,0xec,0x00,0x00,0x00,0xeb,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xf0,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xf0,0x00,0x00,0x00,0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00, - -}; -const uint64_t cpy_f16_f16_len = 3252; - -unsigned char cpy_f32_f16_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0x9a,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00, -0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c, -0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00, -0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x0f,0x00,0x09,0x00,0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0xc7,0x00,0x00,0x00,0xd8,0x00,0x00,0x00,0xe4,0x00,0x00,0x00, -0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00, -0x00,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x12,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x12,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00, -0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x12,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x12,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x12,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x34,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00, -0x0e,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x38,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x12,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x44,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x12,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x4c,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x12,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xc7,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xd5,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x48,0x00,0x04,0x00,0xd6,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0xd6,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0xd6,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xd8,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xd8,0x00,0x00,0x00, -0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xe1,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x04,0x00,0xe2,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0xe2,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0xe2,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xe4,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xe4,0x00,0x00,0x00, -0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xf1,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00, -0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x16,0x00,0x03,0x00,0x11,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x1e,0x00,0x16,0x00,0x12,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x11,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00, -0x16,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x17,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x1a,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00, -0x1e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x15,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x5a,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x15,0x00,0x00,0x00,0x66,0x00,0x00,0x00,0x05,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x6f,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00, -0x72,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x15,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xad,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00, -0xb2,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x15,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x0e,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xbe,0x00,0x00,0x00, -0x0d,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0xc5,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0xc6,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xc5,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0xc6,0x00,0x00,0x00,0xc7,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xc8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0xc9,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xcc,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x14,0x00,0x02,0x00,0xcf,0x00,0x00,0x00, -0x16,0x00,0x03,0x00,0xd4,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x1d,0x00,0x03,0x00,0xd5,0x00,0x00,0x00,0xd4,0x00,0x00,0x00, -0x1e,0x00,0x03,0x00,0xd6,0x00,0x00,0x00,0xd5,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0xd7,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0xd6,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xd7,0x00,0x00,0x00, -0xd8,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x15,0x00,0x00,0x00,0xd9,0x00,0x00,0x00,0x11,0x00,0x00,0x00, -0x1d,0x00,0x03,0x00,0xe1,0x00,0x00,0x00,0x11,0x00,0x00,0x00, -0x1e,0x00,0x03,0x00,0xe2,0x00,0x00,0x00,0xe1,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0xe3,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0xe2,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xe3,0x00,0x00,0x00, -0xe4,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0xe9,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x11,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0xed,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0xd4,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xef,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2c,0x00,0x06,0x00,0xc5,0x00,0x00,0x00,0xf1,0x00,0x00,0x00, -0xef,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0xf0,0x00,0x00,0x00, -0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x05,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0xf2,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0xfb,0x00,0x03,0x00,0xc8,0x00,0x00,0x00, -0xf3,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xf3,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0xc9,0x00,0x00,0x00,0xca,0x00,0x00,0x00, -0xc7,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0xca,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xcd,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xce,0x00,0x00,0x00,0xcd,0x00,0x00,0x00, -0xae,0x00,0x05,0x00,0xcf,0x00,0x00,0x00,0xd0,0x00,0x00,0x00, -0xcb,0x00,0x00,0x00,0xce,0x00,0x00,0x00,0xf7,0x00,0x03,0x00, -0xd2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xd0,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0xd2,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xd1,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xf2,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd2,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xda,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0xd9,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,0xda,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x01,0x01,0x00,0x00, -0x14,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x02,0x01,0x00,0x00,0x01,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x03,0x01,0x00,0x00, -0x14,0x00,0x00,0x00,0x72,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x04,0x01,0x00,0x00,0x03,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x05,0x01,0x00,0x00, -0x02,0x01,0x00,0x00,0x04,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x17,0x00,0x00,0x00,0x06,0x01,0x00,0x00,0x14,0x00,0x00,0x00, -0x76,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x07,0x01,0x00,0x00,0x06,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x08,0x01,0x00,0x00,0x05,0x01,0x00,0x00, -0x07,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x09,0x01,0x00,0x00,0xcb,0x00,0x00,0x00,0x08,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0d,0x01,0x00,0x00, -0x09,0x01,0x00,0x00,0x02,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x10,0x01,0x00,0x00,0x0d,0x01,0x00,0x00, -0x04,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x13,0x01,0x00,0x00,0x10,0x01,0x00,0x00,0x07,0x01,0x00,0x00, -0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x16,0x01,0x00,0x00, -0xcb,0x00,0x00,0x00,0x13,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x1b,0x01,0x00,0x00,0x04,0x01,0x00,0x00, -0x07,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x1c,0x01,0x00,0x00,0x16,0x01,0x00,0x00,0x1b,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x20,0x01,0x00,0x00, -0x1c,0x01,0x00,0x00,0x04,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x23,0x01,0x00,0x00,0x20,0x01,0x00,0x00, -0x07,0x01,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x28,0x01,0x00,0x00,0x16,0x01,0x00,0x00,0x23,0x01,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2b,0x01,0x00,0x00, -0x28,0x01,0x00,0x00,0x07,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x34,0x01,0x00,0x00,0x2b,0x01,0x00,0x00, -0x07,0x01,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x35,0x01,0x00,0x00,0x28,0x01,0x00,0x00,0x34,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x37,0x01,0x00,0x00, -0x14,0x00,0x00,0x00,0xad,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x38,0x01,0x00,0x00,0x37,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x39,0x01,0x00,0x00, -0x09,0x01,0x00,0x00,0x38,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x17,0x00,0x00,0x00,0x3b,0x01,0x00,0x00,0x14,0x00,0x00,0x00, -0xb2,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x3c,0x01,0x00,0x00,0x3b,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3d,0x01,0x00,0x00,0x1c,0x01,0x00,0x00, -0x3c,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x3e,0x01,0x00,0x00,0x39,0x01,0x00,0x00,0x3d,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x40,0x01,0x00,0x00, -0x14,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x41,0x01,0x00,0x00,0x40,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x42,0x01,0x00,0x00, -0x2b,0x01,0x00,0x00,0x41,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x43,0x01,0x00,0x00,0x3e,0x01,0x00,0x00, -0x42,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00, -0x45,0x01,0x00,0x00,0x14,0x00,0x00,0x00,0xbe,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x46,0x01,0x00,0x00, -0x45,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x47,0x01,0x00,0x00,0x35,0x01,0x00,0x00,0x46,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x48,0x01,0x00,0x00, -0x43,0x01,0x00,0x00,0x47,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,0xdb,0x00,0x00,0x00, -0x48,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00, -0x52,0x01,0x00,0x00,0x14,0x00,0x00,0x00,0x16,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x53,0x01,0x00,0x00, -0x52,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00, -0x54,0x01,0x00,0x00,0x14,0x00,0x00,0x00,0x1a,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x55,0x01,0x00,0x00, -0x54,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x56,0x01,0x00,0x00,0x53,0x01,0x00,0x00,0x55,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x57,0x01,0x00,0x00, -0x14,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x58,0x01,0x00,0x00,0x57,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x59,0x01,0x00,0x00, -0x56,0x01,0x00,0x00,0x58,0x01,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x5a,0x01,0x00,0x00,0xcb,0x00,0x00,0x00, -0x59,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x5e,0x01,0x00,0x00,0x5a,0x01,0x00,0x00,0x53,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x61,0x01,0x00,0x00, -0x5e,0x01,0x00,0x00,0x55,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x64,0x01,0x00,0x00,0x61,0x01,0x00,0x00, -0x58,0x01,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x67,0x01,0x00,0x00,0xcb,0x00,0x00,0x00,0x64,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6c,0x01,0x00,0x00, -0x55,0x01,0x00,0x00,0x58,0x01,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x6d,0x01,0x00,0x00,0x67,0x01,0x00,0x00, -0x6c,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x71,0x01,0x00,0x00,0x6d,0x01,0x00,0x00,0x55,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x74,0x01,0x00,0x00, -0x71,0x01,0x00,0x00,0x58,0x01,0x00,0x00,0x82,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x79,0x01,0x00,0x00,0x67,0x01,0x00,0x00, -0x74,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x7c,0x01,0x00,0x00,0x79,0x01,0x00,0x00,0x58,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x85,0x01,0x00,0x00, -0x7c,0x01,0x00,0x00,0x58,0x01,0x00,0x00,0x82,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x86,0x01,0x00,0x00,0x79,0x01,0x00,0x00, -0x85,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00, -0x88,0x01,0x00,0x00,0x14,0x00,0x00,0x00,0x55,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x89,0x01,0x00,0x00, -0x88,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x8a,0x01,0x00,0x00,0x5a,0x01,0x00,0x00,0x89,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x8c,0x01,0x00,0x00, -0x14,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x8d,0x01,0x00,0x00,0x8c,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8e,0x01,0x00,0x00, -0x6d,0x01,0x00,0x00,0x8d,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x8f,0x01,0x00,0x00,0x8a,0x01,0x00,0x00, -0x8e,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00, -0x91,0x01,0x00,0x00,0x14,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x92,0x01,0x00,0x00, -0x91,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x93,0x01,0x00,0x00,0x7c,0x01,0x00,0x00,0x92,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x94,0x01,0x00,0x00, -0x8f,0x01,0x00,0x00,0x93,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x17,0x00,0x00,0x00,0x96,0x01,0x00,0x00,0x14,0x00,0x00,0x00, -0x66,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x97,0x01,0x00,0x00,0x96,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x98,0x01,0x00,0x00,0x86,0x01,0x00,0x00, -0x97,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x99,0x01,0x00,0x00,0x94,0x01,0x00,0x00,0x98,0x01,0x00,0x00, -0x41,0x00,0x06,0x00,0xe9,0x00,0x00,0x00,0xea,0x00,0x00,0x00, -0xe4,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x99,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0x11,0x00,0x00,0x00,0xeb,0x00,0x00,0x00, -0xea,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0xd4,0x00,0x00,0x00, -0xec,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,0x41,0x00,0x06,0x00, -0xed,0x00,0x00,0x00,0xee,0x00,0x00,0x00,0xd8,0x00,0x00,0x00, -0xcc,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,0x3e,0x00,0x03,0x00, -0xee,0x00,0x00,0x00,0xec,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xf2,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xf2,0x00,0x00,0x00, -0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00, -}; -const uint64_t cpy_f32_f16_len = 3284; - -unsigned char cpy_f32_f32_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0x97,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00, -0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30, -0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x0f,0x00,0x09,0x00,0x05,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0xd7,0x00,0x00,0x00, -0xe3,0x00,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x12,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x12,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x12,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x0a,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x12,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x0d,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x12,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x38,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x3c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x12,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x44,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x48,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x13,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x12,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xc7,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xd4,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0xd5,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0xd5,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0xd5,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xd7,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xd7,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xe0,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0xe1,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0xe1,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0xe1,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xe3,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xe3,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xee,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x19,0x00,0x00,0x00,0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00, -0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0x11,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x1e,0x00,0x16,0x00,0x12,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x15,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x15,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00, -0x1a,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x15,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x55,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00, -0x5a,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x15,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x66,0x00,0x00,0x00, -0x05,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00, -0x6f,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x15,0x00,0x00,0x00,0x72,0x00,0x00,0x00,0x0a,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x76,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00, -0xad,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x15,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xb8,0x00,0x00,0x00, -0x0e,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00, -0xbe,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x17,0x00,0x04,0x00, -0xc5,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0xc6,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0xc5,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xc6,0x00,0x00,0x00, -0xc7,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0xc9,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00, -0xcc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x14,0x00,0x02,0x00, -0xcf,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0xd4,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0xd5,0x00,0x00,0x00, -0xd4,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xd6,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0xd6,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xd8,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0xe0,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0xe1,0x00,0x00,0x00, -0xe0,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xe2,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0xe1,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0xe2,0x00,0x00,0x00,0xe3,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0xe8,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xec,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xed,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2c,0x00,0x06,0x00,0xc5,0x00,0x00,0x00,0xee,0x00,0x00,0x00, -0xec,0x00,0x00,0x00,0xed,0x00,0x00,0x00,0xed,0x00,0x00,0x00, -0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x05,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0xef,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0xfb,0x00,0x03,0x00,0xc8,0x00,0x00,0x00, -0xf0,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xf0,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0xc9,0x00,0x00,0x00,0xca,0x00,0x00,0x00, -0xc7,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0xca,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xcd,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xce,0x00,0x00,0x00,0xcd,0x00,0x00,0x00, -0xae,0x00,0x05,0x00,0xcf,0x00,0x00,0x00,0xd0,0x00,0x00,0x00, -0xcb,0x00,0x00,0x00,0xce,0x00,0x00,0x00,0xf7,0x00,0x03,0x00, -0xd2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xd0,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0xd2,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xd1,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xef,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd2,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xd9,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0xd8,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xda,0x00,0x00,0x00,0xd9,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xfe,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xfe,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x00,0x01,0x00,0x00, -0x14,0x00,0x00,0x00,0x72,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x02,0x01,0x00,0x00, -0xff,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x17,0x00,0x00,0x00,0x03,0x01,0x00,0x00,0x14,0x00,0x00,0x00, -0x76,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x04,0x01,0x00,0x00,0x03,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x05,0x01,0x00,0x00,0x02,0x01,0x00,0x00, -0x04,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x06,0x01,0x00,0x00,0xcb,0x00,0x00,0x00,0x05,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0a,0x01,0x00,0x00, -0x06,0x01,0x00,0x00,0xff,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x0d,0x01,0x00,0x00,0x0a,0x01,0x00,0x00, -0x01,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x10,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,0x04,0x01,0x00,0x00, -0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x13,0x01,0x00,0x00, -0xcb,0x00,0x00,0x00,0x10,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x18,0x01,0x00,0x00,0x01,0x01,0x00,0x00, -0x04,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x19,0x01,0x00,0x00,0x13,0x01,0x00,0x00,0x18,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1d,0x01,0x00,0x00, -0x19,0x01,0x00,0x00,0x01,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x20,0x01,0x00,0x00,0x1d,0x01,0x00,0x00, -0x04,0x01,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x25,0x01,0x00,0x00,0x13,0x01,0x00,0x00,0x20,0x01,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x28,0x01,0x00,0x00, -0x25,0x01,0x00,0x00,0x04,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x31,0x01,0x00,0x00,0x28,0x01,0x00,0x00, -0x04,0x01,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x32,0x01,0x00,0x00,0x25,0x01,0x00,0x00,0x31,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x34,0x01,0x00,0x00, -0x14,0x00,0x00,0x00,0xad,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x35,0x01,0x00,0x00,0x34,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x36,0x01,0x00,0x00, -0x06,0x01,0x00,0x00,0x35,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x17,0x00,0x00,0x00,0x38,0x01,0x00,0x00,0x14,0x00,0x00,0x00, -0xb2,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x39,0x01,0x00,0x00,0x38,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3a,0x01,0x00,0x00,0x19,0x01,0x00,0x00, -0x39,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x3b,0x01,0x00,0x00,0x36,0x01,0x00,0x00,0x3a,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x3d,0x01,0x00,0x00, -0x14,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x3e,0x01,0x00,0x00,0x3d,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3f,0x01,0x00,0x00, -0x28,0x01,0x00,0x00,0x3e,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x40,0x01,0x00,0x00,0x3b,0x01,0x00,0x00, -0x3f,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00, -0x42,0x01,0x00,0x00,0x14,0x00,0x00,0x00,0xbe,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x43,0x01,0x00,0x00, -0x42,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x44,0x01,0x00,0x00,0x32,0x01,0x00,0x00,0x43,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x45,0x01,0x00,0x00, -0x40,0x01,0x00,0x00,0x44,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0xda,0x00,0x00,0x00, -0x45,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00, -0x4f,0x01,0x00,0x00,0x14,0x00,0x00,0x00,0x16,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x50,0x01,0x00,0x00, -0x4f,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00, -0x51,0x01,0x00,0x00,0x14,0x00,0x00,0x00,0x1a,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x52,0x01,0x00,0x00, -0x51,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x53,0x01,0x00,0x00,0x50,0x01,0x00,0x00,0x52,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x54,0x01,0x00,0x00, -0x14,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x55,0x01,0x00,0x00,0x54,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x56,0x01,0x00,0x00, -0x53,0x01,0x00,0x00,0x55,0x01,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x57,0x01,0x00,0x00,0xcb,0x00,0x00,0x00, -0x56,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x5b,0x01,0x00,0x00,0x57,0x01,0x00,0x00,0x50,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5e,0x01,0x00,0x00, -0x5b,0x01,0x00,0x00,0x52,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x61,0x01,0x00,0x00,0x5e,0x01,0x00,0x00, -0x55,0x01,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x64,0x01,0x00,0x00,0xcb,0x00,0x00,0x00,0x61,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x69,0x01,0x00,0x00, -0x52,0x01,0x00,0x00,0x55,0x01,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x6a,0x01,0x00,0x00,0x64,0x01,0x00,0x00, -0x69,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x6e,0x01,0x00,0x00,0x6a,0x01,0x00,0x00,0x52,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x71,0x01,0x00,0x00, -0x6e,0x01,0x00,0x00,0x55,0x01,0x00,0x00,0x82,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x76,0x01,0x00,0x00,0x64,0x01,0x00,0x00, -0x71,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x79,0x01,0x00,0x00,0x76,0x01,0x00,0x00,0x55,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x82,0x01,0x00,0x00, -0x79,0x01,0x00,0x00,0x55,0x01,0x00,0x00,0x82,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x83,0x01,0x00,0x00,0x76,0x01,0x00,0x00, -0x82,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00, -0x85,0x01,0x00,0x00,0x14,0x00,0x00,0x00,0x55,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x86,0x01,0x00,0x00, -0x85,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x87,0x01,0x00,0x00,0x57,0x01,0x00,0x00,0x86,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x89,0x01,0x00,0x00, -0x14,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x8a,0x01,0x00,0x00,0x89,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8b,0x01,0x00,0x00, -0x6a,0x01,0x00,0x00,0x8a,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x8c,0x01,0x00,0x00,0x87,0x01,0x00,0x00, -0x8b,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00, -0x8e,0x01,0x00,0x00,0x14,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x8f,0x01,0x00,0x00, -0x8e,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x90,0x01,0x00,0x00,0x79,0x01,0x00,0x00,0x8f,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x91,0x01,0x00,0x00, -0x8c,0x01,0x00,0x00,0x90,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x17,0x00,0x00,0x00,0x93,0x01,0x00,0x00,0x14,0x00,0x00,0x00, -0x66,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x94,0x01,0x00,0x00,0x93,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x95,0x01,0x00,0x00,0x83,0x01,0x00,0x00, -0x94,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x96,0x01,0x00,0x00,0x91,0x01,0x00,0x00,0x95,0x01,0x00,0x00, -0x41,0x00,0x06,0x00,0xe8,0x00,0x00,0x00,0xe9,0x00,0x00,0x00, -0xe3,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x96,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0x11,0x00,0x00,0x00,0xea,0x00,0x00,0x00, -0xe9,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0xe8,0x00,0x00,0x00, -0xeb,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,0xcc,0x00,0x00,0x00, -0xdf,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0xeb,0x00,0x00,0x00, -0xea,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xef,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xef,0x00,0x00,0x00,0xfd,0x00,0x01,0x00, -0x38,0x00,0x01,0x00, -}; -const uint64_t cpy_f32_f32_len = 3232; - -unsigned char dequant_f32_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0x1f,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00, -0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c, -0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00, -0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x0f,0x00,0x09,0x00,0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x35,0x00,0x00,0x00, -0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00, -0x00,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x13,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x13,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x13,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x13,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x13,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x13,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x29,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x48,0x00,0x04,0x00,0x2a,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x2a,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0x2a,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x2c,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x2c,0x00,0x00,0x00, -0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x32,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x04,0x00,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x33,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0x33,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x35,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x35,0x00,0x00,0x00, -0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x44,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00, -0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x1e,0x00,0x07,0x00,0x13,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x14,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x16,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x16,0x00,0x00,0x00, -0x17,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x18,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x14,0x00,0x02,0x00,0x1b,0x00,0x00,0x00,0x16,0x00,0x03,0x00, -0x28,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x1d,0x00,0x03,0x00, -0x29,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x1e,0x00,0x03,0x00, -0x2a,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x2b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2a,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x2b,0x00,0x00,0x00,0x2c,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x16,0x00,0x00,0x00, -0x2d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x16,0x00,0x03,0x00, -0x31,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x1d,0x00,0x03,0x00, -0x32,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x1e,0x00,0x03,0x00, -0x33,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x34,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x33,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x34,0x00,0x00,0x00,0x35,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x39,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x3d,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x42,0x00,0x00,0x00, -0x00,0x01,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x43,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2c,0x00,0x06,0x00, -0x09,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x42,0x00,0x00,0x00, -0x43,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x11,0x01,0x00,0x00,0x02,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x12,0x01,0x00,0x00, -0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x13,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x14,0x01,0x00,0x00,0x05,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x15,0x01,0x00,0x00, -0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x16,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x17,0x01,0x00,0x00,0x08,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x18,0x01,0x00,0x00, -0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x19,0x01,0x00,0x00,0x0a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x1a,0x01,0x00,0x00,0x0b,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x1b,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x1c,0x01,0x00,0x00,0x0d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x1d,0x01,0x00,0x00,0x0e,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x1e,0x01,0x00,0x00, -0x0f,0x00,0x00,0x00,0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,0xf7,0x00,0x03,0x00, -0x45,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfb,0x00,0x03,0x00, -0x0c,0x00,0x00,0x00,0x46,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x46,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x0e,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x18,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0xae,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0xf7,0x00,0x03,0x00, -0x1e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x1c,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,0x1e,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x1d,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x45,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x1e,0x00,0x00,0x00, -0x41,0x00,0x06,0x00,0x39,0x00,0x00,0x00,0x3a,0x00,0x00,0x00, -0x35,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0x11,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x31,0x00,0x00,0x00,0x3b,0x00,0x00,0x00, -0x3a,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x28,0x00,0x00,0x00, -0x3c,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x41,0x00,0x06,0x00, -0x3d,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x2c,0x00,0x00,0x00, -0x2d,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x3e,0x00,0x03,0x00, -0x3e,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x52,0x00,0x00,0x00,0x11,0x00,0x00,0x00, -0x43,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x39,0x00,0x00,0x00, -0x54,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x2d,0x00,0x00,0x00, -0x52,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x31,0x00,0x00,0x00, -0x55,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x73,0x00,0x04,0x00, -0x28,0x00,0x00,0x00,0x56,0x00,0x00,0x00,0x55,0x00,0x00,0x00, -0x41,0x00,0x06,0x00,0x3d,0x00,0x00,0x00,0x57,0x00,0x00,0x00, -0x2c,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0x52,0x00,0x00,0x00, -0x3e,0x00,0x03,0x00,0x57,0x00,0x00,0x00,0x56,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5f,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x11,0x01,0x00,0x00,0x41,0x00,0x06,0x00, -0x39,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x35,0x00,0x00,0x00, -0x2d,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x31,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x61,0x00,0x00,0x00, -0x73,0x00,0x04,0x00,0x28,0x00,0x00,0x00,0x63,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x3d,0x00,0x00,0x00, -0x64,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x2d,0x00,0x00,0x00, -0x5f,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0x64,0x00,0x00,0x00, -0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x12,0x01,0x00,0x00, -0x41,0x00,0x06,0x00,0x39,0x00,0x00,0x00,0x6e,0x00,0x00,0x00, -0x35,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x31,0x00,0x00,0x00,0x6f,0x00,0x00,0x00, -0x6e,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x28,0x00,0x00,0x00, -0x70,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x41,0x00,0x06,0x00, -0x3d,0x00,0x00,0x00,0x71,0x00,0x00,0x00,0x2c,0x00,0x00,0x00, -0x2d,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x3e,0x00,0x03,0x00, -0x71,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x11,0x00,0x00,0x00, -0x13,0x01,0x00,0x00,0x41,0x00,0x06,0x00,0x39,0x00,0x00,0x00, -0x7b,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x2d,0x00,0x00,0x00, -0x79,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x31,0x00,0x00,0x00, -0x7c,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,0x73,0x00,0x04,0x00, -0x28,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x7c,0x00,0x00,0x00, -0x41,0x00,0x06,0x00,0x3d,0x00,0x00,0x00,0x7e,0x00,0x00,0x00, -0x2c,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0x79,0x00,0x00,0x00, -0x3e,0x00,0x03,0x00,0x7e,0x00,0x00,0x00,0x7d,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x14,0x01,0x00,0x00,0x41,0x00,0x06,0x00, -0x39,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x35,0x00,0x00,0x00, -0x2d,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x31,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x88,0x00,0x00,0x00, -0x73,0x00,0x04,0x00,0x28,0x00,0x00,0x00,0x8a,0x00,0x00,0x00, -0x89,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x3d,0x00,0x00,0x00, -0x8b,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x2d,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0x8b,0x00,0x00,0x00, -0x8a,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x93,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x15,0x01,0x00,0x00, -0x41,0x00,0x06,0x00,0x39,0x00,0x00,0x00,0x95,0x00,0x00,0x00, -0x35,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0x93,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x31,0x00,0x00,0x00,0x96,0x00,0x00,0x00, -0x95,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x28,0x00,0x00,0x00, -0x97,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x41,0x00,0x06,0x00, -0x3d,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x2c,0x00,0x00,0x00, -0x2d,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x3e,0x00,0x03,0x00, -0x98,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0x11,0x00,0x00,0x00, -0x16,0x01,0x00,0x00,0x41,0x00,0x06,0x00,0x39,0x00,0x00,0x00, -0xa2,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x2d,0x00,0x00,0x00, -0xa0,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x31,0x00,0x00,0x00, -0xa3,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x73,0x00,0x04,0x00, -0x28,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0xa3,0x00,0x00,0x00, -0x41,0x00,0x06,0x00,0x3d,0x00,0x00,0x00,0xa5,0x00,0x00,0x00, -0x2c,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0xa0,0x00,0x00,0x00, -0x3e,0x00,0x03,0x00,0xa5,0x00,0x00,0x00,0xa4,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xad,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x17,0x01,0x00,0x00,0x41,0x00,0x06,0x00, -0x39,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0x35,0x00,0x00,0x00, -0x2d,0x00,0x00,0x00,0xad,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x31,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0xaf,0x00,0x00,0x00, -0x73,0x00,0x04,0x00,0x28,0x00,0x00,0x00,0xb1,0x00,0x00,0x00, -0xb0,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x3d,0x00,0x00,0x00, -0xb2,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x2d,0x00,0x00,0x00, -0xad,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0xb2,0x00,0x00,0x00, -0xb1,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xba,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x18,0x01,0x00,0x00, -0x41,0x00,0x06,0x00,0x39,0x00,0x00,0x00,0xbc,0x00,0x00,0x00, -0x35,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0xba,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x31,0x00,0x00,0x00,0xbd,0x00,0x00,0x00, -0xbc,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x28,0x00,0x00,0x00, -0xbe,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x41,0x00,0x06,0x00, -0x3d,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x2c,0x00,0x00,0x00, -0x2d,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0x3e,0x00,0x03,0x00, -0xbf,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0x11,0x00,0x00,0x00, -0x19,0x01,0x00,0x00,0x41,0x00,0x06,0x00,0x39,0x00,0x00,0x00, -0xc9,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x2d,0x00,0x00,0x00, -0xc7,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x31,0x00,0x00,0x00, -0xca,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x73,0x00,0x04,0x00, -0x28,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0xca,0x00,0x00,0x00, -0x41,0x00,0x06,0x00,0x3d,0x00,0x00,0x00,0xcc,0x00,0x00,0x00, -0x2c,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0xc7,0x00,0x00,0x00, -0x3e,0x00,0x03,0x00,0xcc,0x00,0x00,0x00,0xcb,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd4,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x1a,0x01,0x00,0x00,0x41,0x00,0x06,0x00, -0x39,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0x35,0x00,0x00,0x00, -0x2d,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x31,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,0xd6,0x00,0x00,0x00, -0x73,0x00,0x04,0x00,0x28,0x00,0x00,0x00,0xd8,0x00,0x00,0x00, -0xd7,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x3d,0x00,0x00,0x00, -0xd9,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x2d,0x00,0x00,0x00, -0xd4,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0xd9,0x00,0x00,0x00, -0xd8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xe1,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x1b,0x01,0x00,0x00, -0x41,0x00,0x06,0x00,0x39,0x00,0x00,0x00,0xe3,0x00,0x00,0x00, -0x35,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0xe1,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x31,0x00,0x00,0x00,0xe4,0x00,0x00,0x00, -0xe3,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x28,0x00,0x00,0x00, -0xe5,0x00,0x00,0x00,0xe4,0x00,0x00,0x00,0x41,0x00,0x06,0x00, -0x3d,0x00,0x00,0x00,0xe6,0x00,0x00,0x00,0x2c,0x00,0x00,0x00, -0x2d,0x00,0x00,0x00,0xe1,0x00,0x00,0x00,0x3e,0x00,0x03,0x00, -0xe6,0x00,0x00,0x00,0xe5,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xee,0x00,0x00,0x00,0x11,0x00,0x00,0x00, -0x1c,0x01,0x00,0x00,0x41,0x00,0x06,0x00,0x39,0x00,0x00,0x00, -0xf0,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x2d,0x00,0x00,0x00, -0xee,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x31,0x00,0x00,0x00, -0xf1,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x73,0x00,0x04,0x00, -0x28,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,0xf1,0x00,0x00,0x00, -0x41,0x00,0x06,0x00,0x3d,0x00,0x00,0x00,0xf3,0x00,0x00,0x00, -0x2c,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0xee,0x00,0x00,0x00, -0x3e,0x00,0x03,0x00,0xf3,0x00,0x00,0x00,0xf2,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfb,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x1d,0x01,0x00,0x00,0x41,0x00,0x06,0x00, -0x39,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,0x35,0x00,0x00,0x00, -0x2d,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x31,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0xfd,0x00,0x00,0x00, -0x73,0x00,0x04,0x00,0x28,0x00,0x00,0x00,0xff,0x00,0x00,0x00, -0xfe,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x3d,0x00,0x00,0x00, -0x00,0x01,0x00,0x00,0x2c,0x00,0x00,0x00,0x2d,0x00,0x00,0x00, -0xfb,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0x00,0x01,0x00,0x00, -0xff,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x08,0x01,0x00,0x00,0x11,0x00,0x00,0x00,0x1e,0x01,0x00,0x00, -0x41,0x00,0x06,0x00,0x39,0x00,0x00,0x00,0x0a,0x01,0x00,0x00, -0x35,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0x08,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0x31,0x00,0x00,0x00,0x0b,0x01,0x00,0x00, -0x0a,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x28,0x00,0x00,0x00, -0x0c,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,0x41,0x00,0x06,0x00, -0x3d,0x00,0x00,0x00,0x0d,0x01,0x00,0x00,0x2c,0x00,0x00,0x00, -0x2d,0x00,0x00,0x00,0x08,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0x0d,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0x45,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x45,0x00,0x00,0x00, -0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00, -}; -const uint64_t dequant_f32_len = 3200; - -unsigned char dequant_q2_K_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0x10,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x27,0x00,0x00,0x00, -0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00, -0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00, -0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30, -0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x0f,0x00,0x0a,0x00,0x05,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00, -0x16,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x30,0x00,0x00,0x00, -0x5e,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x10,0x00,0x06,0x00, -0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x16,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1e,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1e,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1e,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1e,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x1e,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x30,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x55,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x57,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x5a,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x5a,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x5a,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x50,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x5b,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0x5c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x5c,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x5c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x5e,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x5e,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x76,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0x77,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x77,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x77,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x79,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x79,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x00,0x01,0x00,0x00, -0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x13,0x00,0x02,0x00, -0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x00,0x01,0x00,0x00,0x14,0x00,0x02,0x00,0x11,0x00,0x00,0x00, -0x17,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x15,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x15,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x1e,0x00,0x07,0x00,0x1e,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x1f,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x1e,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x1f,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x21,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x21,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x23,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00, -0x26,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x15,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x35,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x3d,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x47,0x00,0x00,0x00, -0x80,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x52,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1c,0x00,0x04,0x00, -0x55,0x00,0x00,0x00,0x52,0x00,0x00,0x00,0x41,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x56,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x57,0x00,0x00,0x00, -0x52,0x00,0x00,0x00,0x56,0x00,0x00,0x00,0x16,0x00,0x03,0x00, -0x58,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x17,0x00,0x04,0x00, -0x59,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x1e,0x00,0x05,0x00,0x5a,0x00,0x00,0x00,0x55,0x00,0x00,0x00, -0x57,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x1d,0x00,0x03,0x00, -0x5b,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,0x1e,0x00,0x03,0x00, -0x5c,0x00,0x00,0x00,0x5b,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x5d,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x5c,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x5d,0x00,0x00,0x00,0x5e,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x64,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x52,0x00,0x00,0x00,0x16,0x00,0x03,0x00, -0x67,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x21,0x00,0x00,0x00,0x6b,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x6c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x58,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x72,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x1d,0x00,0x03,0x00, -0x76,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x1e,0x00,0x03,0x00, -0x77,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x78,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x77,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x78,0x00,0x00,0x00,0x79,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x21,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0x95,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xa1,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xdd,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xe2,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x21,0x00,0x00,0x00,0xea,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x2c,0x00,0x06,0x00,0x14,0x00,0x00,0x00,0x00,0x01,0x00,0x00, -0x56,0x00,0x00,0x00,0x72,0x00,0x00,0x00,0x72,0x00,0x00,0x00, -0x2a,0x00,0x03,0x00,0x11,0x00,0x00,0x00,0x03,0x01,0x00,0x00, -0x29,0x00,0x03,0x00,0x11,0x00,0x00,0x00,0x06,0x01,0x00,0x00, -0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x05,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x01,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0xfb,0x00,0x03,0x00,0x09,0x00,0x00,0x00, -0x02,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x02,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0x0a,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x0a,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x09,0x01,0x00,0x00,0x09,0x00,0x00,0x00,0x02,0x01,0x00,0x00, -0xff,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0xb0,0x00,0x05,0x00, -0x11,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x09,0x01,0x00,0x00, -0x10,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x0c,0x00,0x00,0x00, -0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x12,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x0b,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x17,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x16,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x19,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x1c,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x09,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0x24,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x23,0x00,0x00,0x00,0x27,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x26,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x27,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x29,0x00,0x00,0x00, -0x25,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x29,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0xae,0x00,0x05,0x00,0x11,0x00,0x00,0x00, -0x2b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x2a,0x00,0x00,0x00, -0xf7,0x00,0x03,0x00,0x2d,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x2b,0x00,0x00,0x00,0x2c,0x00,0x00,0x00, -0x2d,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x2c,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x0c,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x2d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00, -0x31,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x31,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x36,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x35,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00, -0x35,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x82,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x3a,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x3f,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x36,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x42,0x00,0x00,0x00, -0x3b,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x3f,0x00,0x00,0x00, -0x42,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x46,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x49,0x00,0x00,0x00, -0x47,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x46,0x00,0x00,0x00, -0x49,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x4c,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x3b,0x00,0x00,0x00, -0x41,0x00,0x08,0x00,0x64,0x00,0x00,0x00,0x65,0x00,0x00,0x00, -0x5e,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x26,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x52,0x00,0x00,0x00,0x66,0x00,0x00,0x00,0x65,0x00,0x00,0x00, -0x41,0x00,0x08,0x00,0x6c,0x00,0x00,0x00,0x6d,0x00,0x00,0x00, -0x5e,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x6b,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x58,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x6d,0x00,0x00,0x00, -0x73,0x00,0x04,0x00,0x67,0x00,0x00,0x00,0x6f,0x00,0x00,0x00, -0x6e,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x6c,0x00,0x00,0x00, -0x73,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x1c,0x00,0x00,0x00,0x6b,0x00,0x00,0x00,0x72,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x58,0x00,0x00,0x00,0x74,0x00,0x00,0x00, -0x73,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x67,0x00,0x00,0x00, -0x75,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x41,0x00,0x08,0x00, -0x64,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x5e,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x43,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x52,0x00,0x00,0x00, -0x81,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x81,0x00,0x00,0x00, -0x7c,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0x83,0x00,0x00,0x00, -0x82,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x21,0x00,0x00,0x00, -0x85,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xc2,0x00,0x05,0x00,0x52,0x00,0x00,0x00,0x87,0x00,0x00,0x00, -0x66,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x87,0x00,0x00,0x00, -0x7c,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0x89,0x00,0x00,0x00, -0x88,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x21,0x00,0x00,0x00, -0x8b,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x8a,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x21,0x00,0x00,0x00,0x8c,0x00,0x00,0x00, -0x85,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,0x6f,0x00,0x04,0x00, -0x67,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x8c,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x52,0x00,0x00,0x00,0x94,0x00,0x00,0x00, -0x80,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,0x52,0x00,0x00,0x00, -0x96,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x95,0x00,0x00,0x00, -0x70,0x00,0x04,0x00,0x67,0x00,0x00,0x00,0x97,0x00,0x00,0x00, -0x96,0x00,0x00,0x00,0x85,0x00,0x05,0x00,0x67,0x00,0x00,0x00, -0x98,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0x97,0x00,0x00,0x00, -0x7f,0x00,0x04,0x00,0x67,0x00,0x00,0x00,0x0c,0x01,0x00,0x00, -0x98,0x00,0x00,0x00,0x0c,0x00,0x08,0x00,0x67,0x00,0x00,0x00, -0x99,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x6f,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x0c,0x01,0x00,0x00, -0x73,0x00,0x04,0x00,0x58,0x00,0x00,0x00,0x9a,0x00,0x00,0x00, -0x99,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x6c,0x00,0x00,0x00, -0x9b,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x4c,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0x9b,0x00,0x00,0x00, -0x9a,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9d,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x35,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa2,0x00,0x00,0x00, -0x43,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0x41,0x00,0x08,0x00, -0x64,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0x5e,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0xa2,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x52,0x00,0x00,0x00, -0xa4,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,0xa4,0x00,0x00,0x00, -0x7c,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0xa6,0x00,0x00,0x00, -0xa5,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x21,0x00,0x00,0x00, -0xa7,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xc2,0x00,0x05,0x00,0x52,0x00,0x00,0x00,0xa9,0x00,0x00,0x00, -0x66,0x00,0x00,0x00,0x6b,0x00,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0xa9,0x00,0x00,0x00, -0x7c,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0xab,0x00,0x00,0x00, -0xaa,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x21,0x00,0x00,0x00, -0xac,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0x8a,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x21,0x00,0x00,0x00,0xad,0x00,0x00,0x00, -0xa7,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0x6f,0x00,0x04,0x00, -0x67,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0xad,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x52,0x00,0x00,0x00,0xb5,0x00,0x00,0x00, -0xa3,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,0x52,0x00,0x00,0x00, -0xb6,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,0x95,0x00,0x00,0x00, -0x70,0x00,0x04,0x00,0x67,0x00,0x00,0x00,0xb7,0x00,0x00,0x00, -0xb6,0x00,0x00,0x00,0x85,0x00,0x05,0x00,0x67,0x00,0x00,0x00, -0xb8,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0xb7,0x00,0x00,0x00, -0x7f,0x00,0x04,0x00,0x67,0x00,0x00,0x00,0x0d,0x01,0x00,0x00, -0xb8,0x00,0x00,0x00,0x0c,0x00,0x08,0x00,0x67,0x00,0x00,0x00, -0xb9,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x6f,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0x0d,0x01,0x00,0x00, -0x73,0x00,0x04,0x00,0x58,0x00,0x00,0x00,0xba,0x00,0x00,0x00, -0xb9,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x6c,0x00,0x00,0x00, -0xbb,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x9d,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0xbb,0x00,0x00,0x00, -0xba,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xbd,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x56,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc2,0x00,0x00,0x00, -0x43,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,0x41,0x00,0x08,0x00, -0x64,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0x5e,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0xc2,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x52,0x00,0x00,0x00, -0xc4,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0xc4,0x00,0x00,0x00, -0x7c,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0xc6,0x00,0x00,0x00, -0xc5,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x21,0x00,0x00,0x00, -0xc7,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xc2,0x00,0x05,0x00,0x52,0x00,0x00,0x00,0xc9,0x00,0x00,0x00, -0x66,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0xc9,0x00,0x00,0x00, -0x7c,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0xcb,0x00,0x00,0x00, -0xca,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x21,0x00,0x00,0x00, -0xcc,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0x8a,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x21,0x00,0x00,0x00,0xcd,0x00,0x00,0x00, -0xc7,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x6f,0x00,0x04,0x00, -0x67,0x00,0x00,0x00,0xce,0x00,0x00,0x00,0xcd,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x52,0x00,0x00,0x00,0xd5,0x00,0x00,0x00, -0xc3,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,0x52,0x00,0x00,0x00, -0xd6,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0x95,0x00,0x00,0x00, -0x70,0x00,0x04,0x00,0x67,0x00,0x00,0x00,0xd7,0x00,0x00,0x00, -0xd6,0x00,0x00,0x00,0x85,0x00,0x05,0x00,0x67,0x00,0x00,0x00, -0xd8,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0xd7,0x00,0x00,0x00, -0x7f,0x00,0x04,0x00,0x67,0x00,0x00,0x00,0x0e,0x01,0x00,0x00, -0xd8,0x00,0x00,0x00,0x0c,0x00,0x08,0x00,0x67,0x00,0x00,0x00, -0xd9,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x6f,0x00,0x00,0x00,0xce,0x00,0x00,0x00,0x0e,0x01,0x00,0x00, -0x73,0x00,0x04,0x00,0x58,0x00,0x00,0x00,0xda,0x00,0x00,0x00, -0xd9,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x6c,0x00,0x00,0x00, -0xdb,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0xbd,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0xdb,0x00,0x00,0x00, -0xda,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xde,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0xdd,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe3,0x00,0x00,0x00, -0x43,0x00,0x00,0x00,0xe2,0x00,0x00,0x00,0x41,0x00,0x08,0x00, -0x64,0x00,0x00,0x00,0xe4,0x00,0x00,0x00,0x5e,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0xe3,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x52,0x00,0x00,0x00, -0xe5,0x00,0x00,0x00,0xe4,0x00,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xe6,0x00,0x00,0x00,0xe5,0x00,0x00,0x00, -0x7c,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0xe7,0x00,0x00,0x00, -0xe6,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x21,0x00,0x00,0x00, -0xe8,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xc2,0x00,0x05,0x00,0x52,0x00,0x00,0x00,0xeb,0x00,0x00,0x00, -0x66,0x00,0x00,0x00,0xea,0x00,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xec,0x00,0x00,0x00,0xeb,0x00,0x00,0x00, -0x7c,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0xed,0x00,0x00,0x00, -0xec,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x21,0x00,0x00,0x00, -0xee,0x00,0x00,0x00,0xed,0x00,0x00,0x00,0x8a,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x21,0x00,0x00,0x00,0xef,0x00,0x00,0x00, -0xe8,0x00,0x00,0x00,0xee,0x00,0x00,0x00,0x6f,0x00,0x04,0x00, -0x67,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0xef,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x52,0x00,0x00,0x00,0xf7,0x00,0x00,0x00, -0xe4,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,0x52,0x00,0x00,0x00, -0xf8,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,0x95,0x00,0x00,0x00, -0x70,0x00,0x04,0x00,0x67,0x00,0x00,0x00,0xf9,0x00,0x00,0x00, -0xf8,0x00,0x00,0x00,0x85,0x00,0x05,0x00,0x67,0x00,0x00,0x00, -0xfa,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0xf9,0x00,0x00,0x00, -0x7f,0x00,0x04,0x00,0x67,0x00,0x00,0x00,0x0f,0x01,0x00,0x00, -0xfa,0x00,0x00,0x00,0x0c,0x00,0x08,0x00,0x67,0x00,0x00,0x00, -0xfb,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x6f,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x0f,0x01,0x00,0x00, -0x73,0x00,0x04,0x00,0x58,0x00,0x00,0x00,0xfc,0x00,0x00,0x00, -0xfb,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x6c,0x00,0x00,0x00, -0xfd,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0xde,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0xfd,0x00,0x00,0x00, -0xfc,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x0d,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x0d,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x09,0x01,0x00,0x00, -0x26,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x0a,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x0c,0x00,0x00,0x00,0xf5,0x00,0x07,0x00, -0x11,0x00,0x00,0x00,0x0a,0x01,0x00,0x00,0x03,0x01,0x00,0x00, -0x0a,0x00,0x00,0x00,0x06,0x01,0x00,0x00,0x2c,0x00,0x00,0x00, -0xf7,0x00,0x03,0x00,0x07,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x0a,0x01,0x00,0x00,0x01,0x01,0x00,0x00, -0x07,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x07,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0x01,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x01,0x01,0x00,0x00,0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00, - -}; -const uint64_t dequant_q2_K_len = 4032; - -unsigned char dequant_q3_K_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0x3f,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x27,0x00,0x00,0x00, -0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00, -0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00, -0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30, -0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x0f,0x00,0x0a,0x00,0x05,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00, -0x16,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x30,0x00,0x00,0x00, -0x77,0x00,0x00,0x00,0x06,0x01,0x00,0x00,0x10,0x00,0x06,0x00, -0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x16,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1e,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1e,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1e,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1e,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x1e,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x30,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x6d,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x6f,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x71,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x73,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x73,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x73,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x73,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x74,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0x75,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x75,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x75,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x77,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x77,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x03,0x01,0x00,0x00, -0x06,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0x04,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x04,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x04,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x06,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x06,0x01,0x00,0x00,0x21,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x2c,0x01,0x00,0x00, -0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x13,0x00,0x02,0x00, -0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x00,0x01,0x00,0x00,0x14,0x00,0x02,0x00,0x11,0x00,0x00,0x00, -0x17,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x15,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x15,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x1e,0x00,0x07,0x00,0x1e,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x1f,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x1e,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x1f,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x21,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x21,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x23,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00, -0x26,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x15,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x33,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x4d,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x55,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x6d,0x00,0x00,0x00, -0x4d,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x1c,0x00,0x04,0x00,0x6f,0x00,0x00,0x00,0x4d,0x00,0x00,0x00, -0x6e,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x70,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x1c,0x00,0x04,0x00, -0x71,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x70,0x00,0x00,0x00, -0x16,0x00,0x03,0x00,0x72,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x1e,0x00,0x06,0x00,0x73,0x00,0x00,0x00,0x6d,0x00,0x00,0x00, -0x6f,0x00,0x00,0x00,0x71,0x00,0x00,0x00,0x72,0x00,0x00,0x00, -0x1d,0x00,0x03,0x00,0x74,0x00,0x00,0x00,0x73,0x00,0x00,0x00, -0x1e,0x00,0x03,0x00,0x75,0x00,0x00,0x00,0x74,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x76,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x75,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x76,0x00,0x00,0x00, -0x77,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x21,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x7c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x4d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00, -0x81,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x21,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0x8d,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00, -0xd0,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x16,0x00,0x03,0x00, -0xdb,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0xdf,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x72,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0xe7,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xee,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x1d,0x00,0x03,0x00, -0x03,0x01,0x00,0x00,0x72,0x00,0x00,0x00,0x1e,0x00,0x03,0x00, -0x04,0x01,0x00,0x00,0x03,0x01,0x00,0x00,0x20,0x00,0x04,0x00, -0x05,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x04,0x01,0x00,0x00, -0x3b,0x00,0x04,0x00,0x05,0x01,0x00,0x00,0x06,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x2b,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x2c,0x00,0x06,0x00, -0x14,0x00,0x00,0x00,0x2c,0x01,0x00,0x00,0x6e,0x00,0x00,0x00, -0x2b,0x01,0x00,0x00,0x2b,0x01,0x00,0x00,0x2a,0x00,0x03,0x00, -0x11,0x00,0x00,0x00,0x2f,0x01,0x00,0x00,0x29,0x00,0x03,0x00, -0x11,0x00,0x00,0x00,0x32,0x01,0x00,0x00,0x36,0x00,0x05,0x00, -0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00, -0xf7,0x00,0x03,0x00,0x2d,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0xfb,0x00,0x03,0x00,0x09,0x00,0x00,0x00,0x2e,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x2e,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0x0a,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x0a,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x35,0x01,0x00,0x00, -0x09,0x00,0x00,0x00,0x2e,0x01,0x00,0x00,0x2a,0x01,0x00,0x00, -0x0d,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x11,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x35,0x01,0x00,0x00,0x10,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0d,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x12,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x0b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x1a,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x1a,0x00,0x00,0x00,0x35,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x25,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x23,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x26,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x28,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x25,0x00,0x00,0x00, -0x28,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x2a,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0xae,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x2b,0x00,0x00,0x00, -0x1c,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0xf7,0x00,0x03,0x00, -0x2d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x2b,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x2d,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x2c,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x0c,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x2d,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x31,0x00,0x00,0x00, -0x30,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x31,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0x33,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x3b,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3f,0x00,0x00,0x00, -0x3d,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x33,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x43,0x00,0x00,0x00,0x33,0x00,0x00,0x00,0x42,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x44,0x00,0x00,0x00, -0x3f,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0x38,0x00,0x00,0x00, -0x33,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x4b,0x00,0x00,0x00,0x33,0x00,0x00,0x00,0x47,0x00,0x00,0x00, -0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4c,0x00,0x00,0x00, -0x38,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0xc4,0x00,0x05,0x00, -0x21,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x26,0x00,0x00,0x00, -0x38,0x00,0x00,0x00,0x72,0x00,0x04,0x00,0x55,0x00,0x00,0x00, -0x56,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x7c,0x00,0x04,0x00, -0x4d,0x00,0x00,0x00,0x57,0x00,0x00,0x00,0x56,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5b,0x00,0x00,0x00, -0x59,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x4c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x5e,0x00,0x00,0x00,0x5b,0x00,0x00,0x00,0x5d,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x5e,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0xb0,0x00,0x05,0x00, -0x11,0x00,0x00,0x00,0x67,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x33,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x6b,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x67,0x00,0x00,0x00, -0x6a,0x00,0x00,0x00,0x90,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x6a,0x00,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x7b,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x41,0x00,0x08,0x00,0x7c,0x00,0x00,0x00,0x7d,0x00,0x00,0x00, -0x77,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x79,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x4d,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x7d,0x00,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x7f,0x00,0x00,0x00, -0x7e,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x21,0x00,0x00,0x00, -0x80,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0xc7,0x00,0x05,0x00, -0x21,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x80,0x00,0x00,0x00, -0x81,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x85,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x59,0x00,0x00,0x00, -0x41,0x00,0x08,0x00,0x7c,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x77,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x79,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x4d,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0xc2,0x00,0x05,0x00,0x4d,0x00,0x00,0x00,0x88,0x00,0x00,0x00, -0x87,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x88,0x00,0x00,0x00, -0x7c,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0x8a,0x00,0x00,0x00, -0x89,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x21,0x00,0x00,0x00, -0x8c,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0x8b,0x00,0x00,0x00, -0xc4,0x00,0x05,0x00,0x21,0x00,0x00,0x00,0x8e,0x00,0x00,0x00, -0x8c,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0xc5,0x00,0x05,0x00, -0x21,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,0x82,0x00,0x00,0x00, -0x8e,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x6b,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x90,0x00,0x00,0x00,0xb0,0x00,0x05,0x00, -0x11,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x59,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x95,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x92,0x00,0x00,0x00, -0x94,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x94,0x00,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x98,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x41,0x00,0x08,0x00,0x7c,0x00,0x00,0x00,0x99,0x00,0x00,0x00, -0x77,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x79,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x4d,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x99,0x00,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x9b,0x00,0x00,0x00, -0x9a,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x21,0x00,0x00,0x00, -0x9c,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0xc7,0x00,0x05,0x00, -0x21,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,0x9c,0x00,0x00,0x00, -0x81,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa0,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x33,0x00,0x00,0x00, -0x41,0x00,0x08,0x00,0x7c,0x00,0x00,0x00,0xa1,0x00,0x00,0x00, -0x77,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x79,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x4d,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0xa1,0x00,0x00,0x00, -0xc2,0x00,0x05,0x00,0x4d,0x00,0x00,0x00,0xa3,0x00,0x00,0x00, -0xa2,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0xa3,0x00,0x00,0x00, -0x7c,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0xa5,0x00,0x00,0x00, -0xa4,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x21,0x00,0x00,0x00, -0xa6,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,0x8b,0x00,0x00,0x00, -0xc4,0x00,0x05,0x00,0x21,0x00,0x00,0x00,0xa7,0x00,0x00,0x00, -0xa6,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0xc5,0x00,0x05,0x00, -0x21,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x9d,0x00,0x00,0x00, -0xa7,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x95,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xa9,0x00,0x00,0x00,0xb0,0x00,0x05,0x00, -0x11,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x70,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0xae,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xab,0x00,0x00,0x00, -0xad,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xad,0x00,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xb1,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x59,0x00,0x00,0x00, -0x41,0x00,0x08,0x00,0x7c,0x00,0x00,0x00,0xb2,0x00,0x00,0x00, -0x77,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x79,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x4d,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0xb2,0x00,0x00,0x00, -0xc2,0x00,0x05,0x00,0x4d,0x00,0x00,0x00,0xb4,0x00,0x00,0x00, -0xb3,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,0xb4,0x00,0x00,0x00, -0x7c,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0xb6,0x00,0x00,0x00, -0xb5,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x7c,0x00,0x00,0x00, -0xba,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x1c,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x4d,0x00,0x00,0x00,0xbb,0x00,0x00,0x00, -0xba,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,0x4d,0x00,0x00,0x00, -0xbc,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x8d,0x00,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xbd,0x00,0x00,0x00, -0xbc,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x21,0x00,0x00,0x00, -0xbe,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0xc7,0x00,0x05,0x00, -0x21,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0xbe,0x00,0x00,0x00, -0x8b,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,0x21,0x00,0x00,0x00, -0xc0,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x8d,0x00,0x00,0x00, -0xc5,0x00,0x05,0x00,0x21,0x00,0x00,0x00,0xc1,0x00,0x00,0x00, -0xb6,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xae,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xc2,0x00,0x00,0x00, -0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x41,0x00,0x08,0x00, -0x7c,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x77,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x79,0x00,0x00,0x00, -0xc5,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x4d,0x00,0x00,0x00, -0xc7,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0xc2,0x00,0x05,0x00, -0x4d,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0xc7,0x00,0x00,0x00, -0x8d,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xc9,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x7c,0x00,0x04,0x00, -0x21,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0xc9,0x00,0x00,0x00, -0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xcd,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x33,0x00,0x00,0x00,0x41,0x00,0x08,0x00, -0x7c,0x00,0x00,0x00,0xce,0x00,0x00,0x00,0x77,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x79,0x00,0x00,0x00, -0xcd,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x4d,0x00,0x00,0x00, -0xcf,0x00,0x00,0x00,0xce,0x00,0x00,0x00,0xc2,0x00,0x05,0x00, -0x4d,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0xcf,0x00,0x00,0x00, -0xd0,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xd2,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0x7c,0x00,0x04,0x00, -0x21,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,0xd2,0x00,0x00,0x00, -0xc7,0x00,0x05,0x00,0x21,0x00,0x00,0x00,0xd4,0x00,0x00,0x00, -0xd3,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,0xc4,0x00,0x05,0x00, -0x21,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0xd4,0x00,0x00,0x00, -0x8d,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,0x21,0x00,0x00,0x00, -0xd6,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0xd5,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xae,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xae,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x21,0x00,0x00,0x00, -0x36,0x01,0x00,0x00,0xc1,0x00,0x00,0x00,0xad,0x00,0x00,0x00, -0xd6,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x95,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x95,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x21,0x00,0x00,0x00,0x37,0x01,0x00,0x00, -0xa8,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x36,0x01,0x00,0x00, -0xae,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x6b,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x6b,0x00,0x00,0x00,0xf5,0x00,0x07,0x00, -0x21,0x00,0x00,0x00,0x38,0x01,0x00,0x00,0x8f,0x00,0x00,0x00, -0x6a,0x00,0x00,0x00,0x37,0x01,0x00,0x00,0x95,0x00,0x00,0x00, -0x72,0x00,0x04,0x00,0x55,0x00,0x00,0x00,0xda,0x00,0x00,0x00, -0x38,0x01,0x00,0x00,0x41,0x00,0x07,0x00,0xdf,0x00,0x00,0x00, -0xe0,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x1c,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x72,0x00,0x00,0x00,0xe1,0x00,0x00,0x00,0xe0,0x00,0x00,0x00, -0x73,0x00,0x04,0x00,0xdb,0x00,0x00,0x00,0xe2,0x00,0x00,0x00, -0xe1,0x00,0x00,0x00,0x72,0x00,0x04,0x00,0x21,0x00,0x00,0x00, -0xe6,0x00,0x00,0x00,0xda,0x00,0x00,0x00,0x82,0x00,0x05,0x00, -0x21,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0xe6,0x00,0x00,0x00, -0xe7,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,0xdb,0x00,0x00,0x00, -0xe9,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0x85,0x00,0x05,0x00, -0xdb,0x00,0x00,0x00,0xea,0x00,0x00,0x00,0xe2,0x00,0x00,0x00, -0xe9,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xed,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf0,0x00,0x00,0x00, -0xee,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xf1,0x00,0x00,0x00,0xed,0x00,0x00,0x00, -0xf0,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xf3,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x4c,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf4,0x00,0x00,0x00, -0xf1,0x00,0x00,0x00,0xf3,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x47,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xfa,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xfa,0x00,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x39,0x01,0x00,0x00,0x44,0x00,0x00,0x00, -0x6b,0x00,0x00,0x00,0x28,0x01,0x00,0x00,0xfb,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x01,0x01,0x00,0x00, -0x44,0x00,0x00,0x00,0x33,0x00,0x00,0x00,0xb0,0x00,0x05,0x00, -0x11,0x00,0x00,0x00,0x02,0x01,0x00,0x00,0x39,0x01,0x00,0x00, -0x01,0x01,0x00,0x00,0xf6,0x00,0x04,0x00,0xfc,0x00,0x00,0x00, -0xfb,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x02,0x01,0x00,0x00,0xfb,0x00,0x00,0x00,0xfc,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xfb,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x09,0x01,0x00,0x00,0xf4,0x00,0x00,0x00, -0x39,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x0e,0x01,0x00,0x00,0xf7,0x00,0x00,0x00,0x39,0x01,0x00,0x00, -0x41,0x00,0x08,0x00,0x7c,0x00,0x00,0x00,0x0f,0x01,0x00,0x00, -0x77,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x26,0x00,0x00,0x00,0x0e,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0x4d,0x00,0x00,0x00,0x10,0x01,0x00,0x00,0x0f,0x01,0x00,0x00, -0xc2,0x00,0x05,0x00,0x4d,0x00,0x00,0x00,0x12,0x01,0x00,0x00, -0x10,0x01,0x00,0x00,0x5d,0x00,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x13,0x01,0x00,0x00,0x12,0x01,0x00,0x00, -0x7c,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0x14,0x01,0x00,0x00, -0x13,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x21,0x00,0x00,0x00, -0x15,0x01,0x00,0x00,0x14,0x01,0x00,0x00,0x8b,0x00,0x00,0x00, -0x72,0x00,0x04,0x00,0x55,0x00,0x00,0x00,0x16,0x01,0x00,0x00, -0x15,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0x21,0x00,0x00,0x00, -0x17,0x01,0x00,0x00,0x16,0x01,0x00,0x00,0x41,0x00,0x08,0x00, -0x7c,0x00,0x00,0x00,0x1a,0x01,0x00,0x00,0x77,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x39,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x4d,0x00,0x00,0x00, -0x1b,0x01,0x00,0x00,0x1a,0x01,0x00,0x00,0xc7,0x00,0x05,0x00, -0x4d,0x00,0x00,0x00,0x1d,0x01,0x00,0x00,0x1b,0x01,0x00,0x00, -0x57,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x1e,0x01,0x00,0x00,0x1d,0x01,0x00,0x00,0x7c,0x00,0x04,0x00, -0x21,0x00,0x00,0x00,0x1f,0x01,0x00,0x00,0x1e,0x01,0x00,0x00, -0xab,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x20,0x01,0x00,0x00, -0x1f,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0xa9,0x00,0x06,0x00, -0x21,0x00,0x00,0x00,0x21,0x01,0x00,0x00,0x20,0x01,0x00,0x00, -0x22,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x82,0x00,0x05,0x00, -0x21,0x00,0x00,0x00,0x22,0x01,0x00,0x00,0x17,0x01,0x00,0x00, -0x21,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,0xdb,0x00,0x00,0x00, -0x23,0x01,0x00,0x00,0x22,0x01,0x00,0x00,0x85,0x00,0x05,0x00, -0xdb,0x00,0x00,0x00,0x24,0x01,0x00,0x00,0xea,0x00,0x00,0x00, -0x23,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x72,0x00,0x00,0x00, -0x25,0x01,0x00,0x00,0x24,0x01,0x00,0x00,0x41,0x00,0x06,0x00, -0xdf,0x00,0x00,0x00,0x26,0x01,0x00,0x00,0x06,0x01,0x00,0x00, -0x22,0x00,0x00,0x00,0x09,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0x26,0x01,0x00,0x00,0x25,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x28,0x01,0x00,0x00,0x39,0x01,0x00,0x00, -0x26,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xfa,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xfc,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x0d,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x0d,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2a,0x01,0x00,0x00, -0x35,0x01,0x00,0x00,0x26,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x0a,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x0c,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x11,0x00,0x00,0x00,0x3e,0x01,0x00,0x00, -0x2f,0x01,0x00,0x00,0x0a,0x00,0x00,0x00,0x32,0x01,0x00,0x00, -0x2c,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x33,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x3e,0x01,0x00,0x00, -0x2d,0x01,0x00,0x00,0x33,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x33,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x2d,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x2d,0x01,0x00,0x00,0xfd,0x00,0x01,0x00, -0x38,0x00,0x01,0x00, -}; -const uint64_t dequant_q3_K_len = 4804; - -unsigned char dequant_q4_0_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0x83,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x27,0x00,0x00,0x00, -0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00, -0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00, -0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30, -0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x0f,0x00,0x0a,0x00,0x05,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x2b,0x00,0x00,0x00, -0x4d,0x00,0x00,0x00,0x66,0x00,0x00,0x00,0x10,0x00,0x06,0x00, -0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x00,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x12,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x1b,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x29,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x29,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x29,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x29,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x29,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x29,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x48,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x49,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x49,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x4a,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0x4b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x4b,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x4b,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x4d,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x4d,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x63,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0x64,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x64,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x64,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x66,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x66,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x94,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x13,0x00,0x02,0x00, -0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00, -0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x15,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x1e,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x1e,0x00,0x07,0x00, -0x29,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x2a,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x29,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x2a,0x00,0x00,0x00, -0x2b,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00, -0x2c,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x2c,0x00,0x00,0x00,0x2d,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x2e,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x14,0x00,0x02,0x00, -0x32,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x38,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x16,0x00,0x03,0x00,0x42,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x16,0x00,0x03,0x00,0x45,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x46,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x47,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x1c,0x00,0x04,0x00, -0x48,0x00,0x00,0x00,0x46,0x00,0x00,0x00,0x47,0x00,0x00,0x00, -0x1e,0x00,0x04,0x00,0x49,0x00,0x00,0x00,0x45,0x00,0x00,0x00, -0x48,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x4a,0x00,0x00,0x00, -0x49,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x4b,0x00,0x00,0x00, -0x4a,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x4c,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x4c,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x2c,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x50,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x42,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0xc1, -0x1d,0x00,0x03,0x00,0x63,0x00,0x00,0x00,0x45,0x00,0x00,0x00, -0x1e,0x00,0x03,0x00,0x64,0x00,0x00,0x00,0x63,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x65,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x64,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x65,0x00,0x00,0x00, -0x66,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x2c,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x71,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x46,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x2c,0x00,0x00,0x00, -0x76,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x00,0x01,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x93,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2c,0x00,0x06,0x00,0x09,0x00,0x00,0x00, -0x94,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x93,0x00,0x00,0x00, -0x93,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x77,0x01,0x00,0x00,0x11,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x78,0x01,0x00,0x00,0x02,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x79,0x01,0x00,0x00, -0x12,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x7a,0x01,0x00,0x00,0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x7b,0x01,0x00,0x00,0x13,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x7c,0x01,0x00,0x00, -0x14,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x7d,0x01,0x00,0x00,0x05,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x7e,0x01,0x00,0x00,0x15,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x7f,0x01,0x00,0x00, -0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x80,0x01,0x00,0x00,0x16,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x81,0x01,0x00,0x00,0x07,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x82,0x01,0x00,0x00, -0x17,0x00,0x00,0x00,0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,0xf7,0x00,0x03,0x00, -0x95,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfb,0x00,0x03,0x00, -0x0c,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x96,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x0e,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x13,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x13,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x16,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x11,0x00,0x00,0x00, -0x16,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x1b,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x15,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1f,0x00,0x00,0x00, -0x1b,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x1b,0x00,0x00,0x00, -0x1e,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x25,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x17,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x27,0x00,0x00,0x00, -0x25,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x2e,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x2b,0x00,0x00,0x00, -0x2d,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x30,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x30,0x00,0x00,0x00, -0x1e,0x00,0x00,0x00,0xae,0x00,0x05,0x00,0x32,0x00,0x00,0x00, -0x33,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x31,0x00,0x00,0x00, -0xf7,0x00,0x03,0x00,0x35,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x33,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x35,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x34,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x95,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x35,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x3a,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x17,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3c,0x00,0x00,0x00, -0x1e,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00, -0x3c,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x1f,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x41,0x00,0x00,0x00, -0x3d,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x41,0x00,0x07,0x00, -0x50,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x4d,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x45,0x00,0x00,0x00,0x52,0x00,0x00,0x00, -0x51,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x42,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x52,0x00,0x00,0x00,0x85,0x00,0x05,0x00, -0x42,0x00,0x00,0x00,0x57,0x00,0x00,0x00,0x55,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x71,0x00,0x00,0x00, -0x72,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x27,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x46,0x00,0x00,0x00,0x73,0x00,0x00,0x00, -0x72,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x74,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x7c,0x00,0x04,0x00, -0x2c,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0x74,0x00,0x00,0x00, -0xc7,0x00,0x05,0x00,0x2c,0x00,0x00,0x00,0x77,0x00,0x00,0x00, -0x75,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x6f,0x00,0x04,0x00, -0x42,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x77,0x00,0x00,0x00, -0x0c,0x00,0x08,0x00,0x42,0x00,0x00,0x00,0x7b,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0x78,0x00,0x00,0x00,0x57,0x00,0x00,0x00,0x73,0x00,0x04,0x00, -0x45,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x7b,0x00,0x00,0x00, -0x41,0x00,0x06,0x00,0x50,0x00,0x00,0x00,0x7d,0x00,0x00,0x00, -0x66,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x41,0x00,0x00,0x00, -0x3e,0x00,0x03,0x00,0x7d,0x00,0x00,0x00,0x7c,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x81,0x00,0x00,0x00, -0x41,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x46,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x72,0x00,0x00,0x00, -0xc2,0x00,0x05,0x00,0x46,0x00,0x00,0x00,0x89,0x00,0x00,0x00, -0x88,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0x70,0x00,0x04,0x00, -0x42,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0x89,0x00,0x00,0x00, -0x0c,0x00,0x08,0x00,0x42,0x00,0x00,0x00,0x8d,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0x8a,0x00,0x00,0x00,0x57,0x00,0x00,0x00,0x73,0x00,0x04,0x00, -0x45,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0x8d,0x00,0x00,0x00, -0x41,0x00,0x06,0x00,0x50,0x00,0x00,0x00,0x8f,0x00,0x00,0x00, -0x66,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x81,0x00,0x00,0x00, -0x3e,0x00,0x03,0x00,0x8f,0x00,0x00,0x00,0x8e,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa2,0x00,0x00,0x00, -0x41,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x93,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x71,0x00,0x00,0x00, -0xa5,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x27,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0xa4,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x46,0x00,0x00,0x00,0xa6,0x00,0x00,0x00, -0xa5,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xa7,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,0x7c,0x00,0x04,0x00, -0x2c,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0xa7,0x00,0x00,0x00, -0xc7,0x00,0x05,0x00,0x2c,0x00,0x00,0x00,0xa9,0x00,0x00,0x00, -0xa8,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x6f,0x00,0x04,0x00, -0x42,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0xa9,0x00,0x00,0x00, -0x0c,0x00,0x08,0x00,0x42,0x00,0x00,0x00,0xac,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0xaa,0x00,0x00,0x00,0x57,0x00,0x00,0x00,0x73,0x00,0x04,0x00, -0x45,0x00,0x00,0x00,0xad,0x00,0x00,0x00,0xac,0x00,0x00,0x00, -0x41,0x00,0x06,0x00,0x50,0x00,0x00,0x00,0xae,0x00,0x00,0x00, -0x66,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0xa2,0x00,0x00,0x00, -0x3e,0x00,0x03,0x00,0xae,0x00,0x00,0x00,0xad,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb0,0x00,0x00,0x00, -0x41,0x00,0x00,0x00,0x77,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0x46,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0xa5,0x00,0x00,0x00, -0xc2,0x00,0x05,0x00,0x46,0x00,0x00,0x00,0xb4,0x00,0x00,0x00, -0xb3,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0x70,0x00,0x04,0x00, -0x42,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,0xb4,0x00,0x00,0x00, -0x0c,0x00,0x08,0x00,0x42,0x00,0x00,0x00,0xb7,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0xb5,0x00,0x00,0x00,0x57,0x00,0x00,0x00,0x73,0x00,0x04,0x00, -0x45,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0xb7,0x00,0x00,0x00, -0x41,0x00,0x06,0x00,0x50,0x00,0x00,0x00,0xb9,0x00,0x00,0x00, -0x66,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0xb0,0x00,0x00,0x00, -0x3e,0x00,0x03,0x00,0xb9,0x00,0x00,0x00,0xb8,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc1,0x00,0x00,0x00, -0x41,0x00,0x00,0x00,0x78,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x78,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x71,0x00,0x00,0x00, -0xc4,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x27,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0xc3,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x46,0x00,0x00,0x00,0xc5,0x00,0x00,0x00, -0xc4,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xc6,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0x7c,0x00,0x04,0x00, -0x2c,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0xc6,0x00,0x00,0x00, -0xc7,0x00,0x05,0x00,0x2c,0x00,0x00,0x00,0xc8,0x00,0x00,0x00, -0xc7,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x6f,0x00,0x04,0x00, -0x42,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0xc8,0x00,0x00,0x00, -0x0c,0x00,0x08,0x00,0x42,0x00,0x00,0x00,0xcb,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0xc9,0x00,0x00,0x00,0x57,0x00,0x00,0x00,0x73,0x00,0x04,0x00, -0x45,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0xcb,0x00,0x00,0x00, -0x41,0x00,0x06,0x00,0x50,0x00,0x00,0x00,0xcd,0x00,0x00,0x00, -0x66,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0xc1,0x00,0x00,0x00, -0x3e,0x00,0x03,0x00,0xcd,0x00,0x00,0x00,0xcc,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xcf,0x00,0x00,0x00, -0x41,0x00,0x00,0x00,0x79,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0x46,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0xc4,0x00,0x00,0x00, -0xc2,0x00,0x05,0x00,0x46,0x00,0x00,0x00,0xd3,0x00,0x00,0x00, -0xd2,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0x70,0x00,0x04,0x00, -0x42,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,0xd3,0x00,0x00,0x00, -0x0c,0x00,0x08,0x00,0x42,0x00,0x00,0x00,0xd6,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0xd4,0x00,0x00,0x00,0x57,0x00,0x00,0x00,0x73,0x00,0x04,0x00, -0x45,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,0xd6,0x00,0x00,0x00, -0x41,0x00,0x06,0x00,0x50,0x00,0x00,0x00,0xd8,0x00,0x00,0x00, -0x66,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0xcf,0x00,0x00,0x00, -0x3e,0x00,0x03,0x00,0xd8,0x00,0x00,0x00,0xd7,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe0,0x00,0x00,0x00, -0x41,0x00,0x00,0x00,0x7a,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xe2,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x7a,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x71,0x00,0x00,0x00, -0xe3,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x27,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0xe2,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x46,0x00,0x00,0x00,0xe4,0x00,0x00,0x00, -0xe3,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xe5,0x00,0x00,0x00,0xe4,0x00,0x00,0x00,0x7c,0x00,0x04,0x00, -0x2c,0x00,0x00,0x00,0xe6,0x00,0x00,0x00,0xe5,0x00,0x00,0x00, -0xc7,0x00,0x05,0x00,0x2c,0x00,0x00,0x00,0xe7,0x00,0x00,0x00, -0xe6,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x6f,0x00,0x04,0x00, -0x42,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0xe7,0x00,0x00,0x00, -0x0c,0x00,0x08,0x00,0x42,0x00,0x00,0x00,0xea,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0xe8,0x00,0x00,0x00,0x57,0x00,0x00,0x00,0x73,0x00,0x04,0x00, -0x45,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,0xea,0x00,0x00,0x00, -0x41,0x00,0x06,0x00,0x50,0x00,0x00,0x00,0xec,0x00,0x00,0x00, -0x66,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0xe0,0x00,0x00,0x00, -0x3e,0x00,0x03,0x00,0xec,0x00,0x00,0x00,0xeb,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xee,0x00,0x00,0x00, -0x41,0x00,0x00,0x00,0x7b,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0x46,0x00,0x00,0x00,0xf1,0x00,0x00,0x00,0xe3,0x00,0x00,0x00, -0xc2,0x00,0x05,0x00,0x46,0x00,0x00,0x00,0xf2,0x00,0x00,0x00, -0xf1,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0x70,0x00,0x04,0x00, -0x42,0x00,0x00,0x00,0xf3,0x00,0x00,0x00,0xf2,0x00,0x00,0x00, -0x0c,0x00,0x08,0x00,0x42,0x00,0x00,0x00,0xf5,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0xf3,0x00,0x00,0x00,0x57,0x00,0x00,0x00,0x73,0x00,0x04,0x00, -0x45,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,0xf5,0x00,0x00,0x00, -0x41,0x00,0x06,0x00,0x50,0x00,0x00,0x00,0xf7,0x00,0x00,0x00, -0x66,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0xee,0x00,0x00,0x00, -0x3e,0x00,0x03,0x00,0xf7,0x00,0x00,0x00,0xf6,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xff,0x00,0x00,0x00, -0x41,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x40,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x71,0x00,0x00,0x00, -0x02,0x01,0x00,0x00,0x4d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x27,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x01,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0x46,0x00,0x00,0x00,0x03,0x01,0x00,0x00, -0x02,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x04,0x01,0x00,0x00,0x03,0x01,0x00,0x00,0x7c,0x00,0x04,0x00, -0x2c,0x00,0x00,0x00,0x05,0x01,0x00,0x00,0x04,0x01,0x00,0x00, -0xc7,0x00,0x05,0x00,0x2c,0x00,0x00,0x00,0x06,0x01,0x00,0x00, -0x05,0x01,0x00,0x00,0x76,0x00,0x00,0x00,0x6f,0x00,0x04,0x00, -0x42,0x00,0x00,0x00,0x07,0x01,0x00,0x00,0x06,0x01,0x00,0x00, -0x0c,0x00,0x08,0x00,0x42,0x00,0x00,0x00,0x09,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0x07,0x01,0x00,0x00,0x57,0x00,0x00,0x00,0x73,0x00,0x04,0x00, -0x45,0x00,0x00,0x00,0x0a,0x01,0x00,0x00,0x09,0x01,0x00,0x00, -0x41,0x00,0x06,0x00,0x50,0x00,0x00,0x00,0x0b,0x01,0x00,0x00, -0x66,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0xff,0x00,0x00,0x00, -0x3e,0x00,0x03,0x00,0x0b,0x01,0x00,0x00,0x0a,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0d,0x01,0x00,0x00, -0x41,0x00,0x00,0x00,0x7c,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0x46,0x00,0x00,0x00,0x10,0x01,0x00,0x00,0x02,0x01,0x00,0x00, -0xc2,0x00,0x05,0x00,0x46,0x00,0x00,0x00,0x11,0x01,0x00,0x00, -0x10,0x01,0x00,0x00,0x2d,0x00,0x00,0x00,0x70,0x00,0x04,0x00, -0x42,0x00,0x00,0x00,0x12,0x01,0x00,0x00,0x11,0x01,0x00,0x00, -0x0c,0x00,0x08,0x00,0x42,0x00,0x00,0x00,0x14,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0x12,0x01,0x00,0x00,0x57,0x00,0x00,0x00,0x73,0x00,0x04,0x00, -0x45,0x00,0x00,0x00,0x15,0x01,0x00,0x00,0x14,0x01,0x00,0x00, -0x41,0x00,0x06,0x00,0x50,0x00,0x00,0x00,0x16,0x01,0x00,0x00, -0x66,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x0d,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0x16,0x01,0x00,0x00,0x15,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1e,0x01,0x00,0x00, -0x41,0x00,0x00,0x00,0x7d,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x20,0x01,0x00,0x00,0x40,0x00,0x00,0x00, -0x7d,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x71,0x00,0x00,0x00, -0x21,0x01,0x00,0x00,0x4d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x27,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x20,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0x46,0x00,0x00,0x00,0x22,0x01,0x00,0x00, -0x21,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x23,0x01,0x00,0x00,0x22,0x01,0x00,0x00,0x7c,0x00,0x04,0x00, -0x2c,0x00,0x00,0x00,0x24,0x01,0x00,0x00,0x23,0x01,0x00,0x00, -0xc7,0x00,0x05,0x00,0x2c,0x00,0x00,0x00,0x25,0x01,0x00,0x00, -0x24,0x01,0x00,0x00,0x76,0x00,0x00,0x00,0x6f,0x00,0x04,0x00, -0x42,0x00,0x00,0x00,0x26,0x01,0x00,0x00,0x25,0x01,0x00,0x00, -0x0c,0x00,0x08,0x00,0x42,0x00,0x00,0x00,0x28,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0x26,0x01,0x00,0x00,0x57,0x00,0x00,0x00,0x73,0x00,0x04,0x00, -0x45,0x00,0x00,0x00,0x29,0x01,0x00,0x00,0x28,0x01,0x00,0x00, -0x41,0x00,0x06,0x00,0x50,0x00,0x00,0x00,0x2a,0x01,0x00,0x00, -0x66,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1e,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0x2a,0x01,0x00,0x00,0x29,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2c,0x01,0x00,0x00, -0x41,0x00,0x00,0x00,0x7e,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0x46,0x00,0x00,0x00,0x2f,0x01,0x00,0x00,0x21,0x01,0x00,0x00, -0xc2,0x00,0x05,0x00,0x46,0x00,0x00,0x00,0x30,0x01,0x00,0x00, -0x2f,0x01,0x00,0x00,0x2d,0x00,0x00,0x00,0x70,0x00,0x04,0x00, -0x42,0x00,0x00,0x00,0x31,0x01,0x00,0x00,0x30,0x01,0x00,0x00, -0x0c,0x00,0x08,0x00,0x42,0x00,0x00,0x00,0x33,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0x31,0x01,0x00,0x00,0x57,0x00,0x00,0x00,0x73,0x00,0x04,0x00, -0x45,0x00,0x00,0x00,0x34,0x01,0x00,0x00,0x33,0x01,0x00,0x00, -0x41,0x00,0x06,0x00,0x50,0x00,0x00,0x00,0x35,0x01,0x00,0x00, -0x66,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x2c,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0x35,0x01,0x00,0x00,0x34,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3d,0x01,0x00,0x00, -0x41,0x00,0x00,0x00,0x7f,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3f,0x01,0x00,0x00,0x40,0x00,0x00,0x00, -0x7f,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x71,0x00,0x00,0x00, -0x40,0x01,0x00,0x00,0x4d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x27,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3f,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0x46,0x00,0x00,0x00,0x41,0x01,0x00,0x00, -0x40,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x42,0x01,0x00,0x00,0x41,0x01,0x00,0x00,0x7c,0x00,0x04,0x00, -0x2c,0x00,0x00,0x00,0x43,0x01,0x00,0x00,0x42,0x01,0x00,0x00, -0xc7,0x00,0x05,0x00,0x2c,0x00,0x00,0x00,0x44,0x01,0x00,0x00, -0x43,0x01,0x00,0x00,0x76,0x00,0x00,0x00,0x6f,0x00,0x04,0x00, -0x42,0x00,0x00,0x00,0x45,0x01,0x00,0x00,0x44,0x01,0x00,0x00, -0x0c,0x00,0x08,0x00,0x42,0x00,0x00,0x00,0x47,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0x45,0x01,0x00,0x00,0x57,0x00,0x00,0x00,0x73,0x00,0x04,0x00, -0x45,0x00,0x00,0x00,0x48,0x01,0x00,0x00,0x47,0x01,0x00,0x00, -0x41,0x00,0x06,0x00,0x50,0x00,0x00,0x00,0x49,0x01,0x00,0x00, -0x66,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x3d,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0x49,0x01,0x00,0x00,0x48,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4b,0x01,0x00,0x00, -0x41,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0x46,0x00,0x00,0x00,0x4e,0x01,0x00,0x00,0x40,0x01,0x00,0x00, -0xc2,0x00,0x05,0x00,0x46,0x00,0x00,0x00,0x4f,0x01,0x00,0x00, -0x4e,0x01,0x00,0x00,0x2d,0x00,0x00,0x00,0x70,0x00,0x04,0x00, -0x42,0x00,0x00,0x00,0x50,0x01,0x00,0x00,0x4f,0x01,0x00,0x00, -0x0c,0x00,0x08,0x00,0x42,0x00,0x00,0x00,0x52,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0x50,0x01,0x00,0x00,0x57,0x00,0x00,0x00,0x73,0x00,0x04,0x00, -0x45,0x00,0x00,0x00,0x53,0x01,0x00,0x00,0x52,0x01,0x00,0x00, -0x41,0x00,0x06,0x00,0x50,0x00,0x00,0x00,0x54,0x01,0x00,0x00, -0x66,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x4b,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0x54,0x01,0x00,0x00,0x53,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5c,0x01,0x00,0x00, -0x41,0x00,0x00,0x00,0x81,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x5e,0x01,0x00,0x00,0x40,0x00,0x00,0x00, -0x81,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x71,0x00,0x00,0x00, -0x5f,0x01,0x00,0x00,0x4d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x27,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x5e,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0x46,0x00,0x00,0x00,0x60,0x01,0x00,0x00, -0x5f,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x61,0x01,0x00,0x00,0x60,0x01,0x00,0x00,0x7c,0x00,0x04,0x00, -0x2c,0x00,0x00,0x00,0x62,0x01,0x00,0x00,0x61,0x01,0x00,0x00, -0xc7,0x00,0x05,0x00,0x2c,0x00,0x00,0x00,0x63,0x01,0x00,0x00, -0x62,0x01,0x00,0x00,0x76,0x00,0x00,0x00,0x6f,0x00,0x04,0x00, -0x42,0x00,0x00,0x00,0x64,0x01,0x00,0x00,0x63,0x01,0x00,0x00, -0x0c,0x00,0x08,0x00,0x42,0x00,0x00,0x00,0x66,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0x64,0x01,0x00,0x00,0x57,0x00,0x00,0x00,0x73,0x00,0x04,0x00, -0x45,0x00,0x00,0x00,0x67,0x01,0x00,0x00,0x66,0x01,0x00,0x00, -0x41,0x00,0x06,0x00,0x50,0x00,0x00,0x00,0x68,0x01,0x00,0x00, -0x66,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x5c,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0x68,0x01,0x00,0x00,0x67,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6a,0x01,0x00,0x00, -0x41,0x00,0x00,0x00,0x82,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0x46,0x00,0x00,0x00,0x6d,0x01,0x00,0x00,0x5f,0x01,0x00,0x00, -0xc2,0x00,0x05,0x00,0x46,0x00,0x00,0x00,0x6e,0x01,0x00,0x00, -0x6d,0x01,0x00,0x00,0x2d,0x00,0x00,0x00,0x70,0x00,0x04,0x00, -0x42,0x00,0x00,0x00,0x6f,0x01,0x00,0x00,0x6e,0x01,0x00,0x00, -0x0c,0x00,0x08,0x00,0x42,0x00,0x00,0x00,0x71,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0x6f,0x01,0x00,0x00,0x57,0x00,0x00,0x00,0x73,0x00,0x04,0x00, -0x45,0x00,0x00,0x00,0x72,0x01,0x00,0x00,0x71,0x01,0x00,0x00, -0x41,0x00,0x06,0x00,0x50,0x00,0x00,0x00,0x73,0x01,0x00,0x00, -0x66,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x6a,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0x73,0x01,0x00,0x00,0x72,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0x95,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x95,0x00,0x00,0x00,0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00, - -}; -const uint64_t dequant_q4_0_len = 5184; - -unsigned char dequant_q4_1_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0x85,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x27,0x00,0x00,0x00, -0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00, -0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00, -0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30, -0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x0f,0x00,0x0a,0x00,0x05,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x2b,0x00,0x00,0x00, -0x4d,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x10,0x00,0x06,0x00, -0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x00,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x12,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x1b,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x29,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x29,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x29,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x29,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x29,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x29,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x48,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x49,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x49,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x49,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x4a,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x4b,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x4b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x4b,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x4d,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x4d,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x65,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x66,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x66,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x66,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x68,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x68,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x96,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x19,0x00,0x00,0x00,0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00, -0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x1e,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x1e,0x00,0x07,0x00,0x29,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x2a,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x29,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x2a,0x00,0x00,0x00,0x2b,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x2c,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x2c,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x2e,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x14,0x00,0x02,0x00,0x32,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x38,0x00,0x00,0x00, -0x00,0x04,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x3e,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x16,0x00,0x03,0x00, -0x42,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x16,0x00,0x03,0x00, -0x45,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x15,0x00,0x04,0x00, -0x46,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x47,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x48,0x00,0x00,0x00, -0x46,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0x1e,0x00,0x05,0x00, -0x49,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x45,0x00,0x00,0x00, -0x48,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x4a,0x00,0x00,0x00, -0x49,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x4b,0x00,0x00,0x00, -0x4a,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x4c,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x4c,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x2c,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x50,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x2c,0x00,0x00,0x00,0x56,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x1d,0x00,0x03,0x00,0x65,0x00,0x00,0x00,0x45,0x00,0x00,0x00, -0x1e,0x00,0x03,0x00,0x66,0x00,0x00,0x00,0x65,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x67,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x66,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x67,0x00,0x00,0x00, -0x68,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x2c,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x73,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x46,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x2c,0x00,0x00,0x00, -0x78,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x00,0x01,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x95,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2c,0x00,0x06,0x00,0x09,0x00,0x00,0x00, -0x96,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x95,0x00,0x00,0x00, -0x95,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x79,0x01,0x00,0x00,0x11,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x7a,0x01,0x00,0x00,0x02,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x7b,0x01,0x00,0x00, -0x12,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x7c,0x01,0x00,0x00,0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x7d,0x01,0x00,0x00,0x13,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x7e,0x01,0x00,0x00, -0x14,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x7f,0x01,0x00,0x00,0x05,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x15,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x81,0x01,0x00,0x00, -0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x82,0x01,0x00,0x00,0x16,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x83,0x01,0x00,0x00,0x07,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x84,0x01,0x00,0x00, -0x17,0x00,0x00,0x00,0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,0xf7,0x00,0x03,0x00, -0x97,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfb,0x00,0x03,0x00, -0x0c,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x98,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x0e,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x13,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x13,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x16,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x11,0x00,0x00,0x00, -0x16,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x1b,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x15,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1f,0x00,0x00,0x00, -0x1b,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x1b,0x00,0x00,0x00, -0x1e,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x25,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x17,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x27,0x00,0x00,0x00, -0x25,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x2e,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x2b,0x00,0x00,0x00, -0x2d,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x30,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x30,0x00,0x00,0x00, -0x1e,0x00,0x00,0x00,0xae,0x00,0x05,0x00,0x32,0x00,0x00,0x00, -0x33,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x31,0x00,0x00,0x00, -0xf7,0x00,0x03,0x00,0x35,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x33,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x35,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x34,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x97,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x35,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x3a,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x17,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3c,0x00,0x00,0x00, -0x1e,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00, -0x3c,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x1f,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x41,0x00,0x00,0x00, -0x3d,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x41,0x00,0x07,0x00, -0x50,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x4d,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x45,0x00,0x00,0x00,0x52,0x00,0x00,0x00, -0x51,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x42,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x52,0x00,0x00,0x00,0x41,0x00,0x07,0x00, -0x50,0x00,0x00,0x00,0x57,0x00,0x00,0x00,0x4d,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x56,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x45,0x00,0x00,0x00,0x58,0x00,0x00,0x00, -0x57,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x42,0x00,0x00,0x00, -0x59,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x41,0x00,0x08,0x00, -0x73,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x4d,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x6f,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x46,0x00,0x00,0x00, -0x75,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x75,0x00,0x00,0x00, -0x7c,0x00,0x04,0x00,0x2c,0x00,0x00,0x00,0x77,0x00,0x00,0x00, -0x76,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x2c,0x00,0x00,0x00, -0x79,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x78,0x00,0x00,0x00, -0x6f,0x00,0x04,0x00,0x42,0x00,0x00,0x00,0x7a,0x00,0x00,0x00, -0x79,0x00,0x00,0x00,0x0c,0x00,0x08,0x00,0x42,0x00,0x00,0x00, -0x7d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,0x59,0x00,0x00,0x00, -0x73,0x00,0x04,0x00,0x45,0x00,0x00,0x00,0x7e,0x00,0x00,0x00, -0x7d,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x50,0x00,0x00,0x00, -0x7f,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x41,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0x7f,0x00,0x00,0x00, -0x7e,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x83,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x47,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x46,0x00,0x00,0x00,0x8a,0x00,0x00,0x00, -0x74,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,0x46,0x00,0x00,0x00, -0x8b,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0x2d,0x00,0x00,0x00, -0x70,0x00,0x04,0x00,0x42,0x00,0x00,0x00,0x8c,0x00,0x00,0x00, -0x8b,0x00,0x00,0x00,0x0c,0x00,0x08,0x00,0x42,0x00,0x00,0x00, -0x8f,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,0x59,0x00,0x00,0x00, -0x73,0x00,0x04,0x00,0x45,0x00,0x00,0x00,0x90,0x00,0x00,0x00, -0x8f,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x50,0x00,0x00,0x00, -0x91,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x83,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0x91,0x00,0x00,0x00, -0x90,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa4,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x95,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa6,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0x41,0x00,0x08,0x00, -0x73,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0x4d,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x6f,0x00,0x00,0x00, -0xa6,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x46,0x00,0x00,0x00, -0xa8,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,0xa8,0x00,0x00,0x00, -0x7c,0x00,0x04,0x00,0x2c,0x00,0x00,0x00,0xaa,0x00,0x00,0x00, -0xa9,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x2c,0x00,0x00,0x00, -0xab,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0x78,0x00,0x00,0x00, -0x6f,0x00,0x04,0x00,0x42,0x00,0x00,0x00,0xac,0x00,0x00,0x00, -0xab,0x00,0x00,0x00,0x0c,0x00,0x08,0x00,0x42,0x00,0x00,0x00, -0xae,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0x59,0x00,0x00,0x00, -0x73,0x00,0x04,0x00,0x45,0x00,0x00,0x00,0xaf,0x00,0x00,0x00, -0xae,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x50,0x00,0x00,0x00, -0xb0,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0xa4,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0xb0,0x00,0x00,0x00, -0xaf,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xb2,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x79,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0x46,0x00,0x00,0x00,0xb5,0x00,0x00,0x00, -0xa7,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,0x46,0x00,0x00,0x00, -0xb6,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,0x2d,0x00,0x00,0x00, -0x70,0x00,0x04,0x00,0x42,0x00,0x00,0x00,0xb7,0x00,0x00,0x00, -0xb6,0x00,0x00,0x00,0x0c,0x00,0x08,0x00,0x42,0x00,0x00,0x00, -0xb9,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0x59,0x00,0x00,0x00, -0x73,0x00,0x04,0x00,0x45,0x00,0x00,0x00,0xba,0x00,0x00,0x00, -0xb9,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x50,0x00,0x00,0x00, -0xbb,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0xb2,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0xbb,0x00,0x00,0x00, -0xba,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xc3,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x7a,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x7a,0x01,0x00,0x00,0x41,0x00,0x08,0x00, -0x73,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x4d,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x6f,0x00,0x00,0x00, -0xc5,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x46,0x00,0x00,0x00, -0xc7,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0xc7,0x00,0x00,0x00, -0x7c,0x00,0x04,0x00,0x2c,0x00,0x00,0x00,0xc9,0x00,0x00,0x00, -0xc8,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x2c,0x00,0x00,0x00, -0xca,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x78,0x00,0x00,0x00, -0x6f,0x00,0x04,0x00,0x42,0x00,0x00,0x00,0xcb,0x00,0x00,0x00, -0xca,0x00,0x00,0x00,0x0c,0x00,0x08,0x00,0x42,0x00,0x00,0x00, -0xcd,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0x59,0x00,0x00,0x00, -0x73,0x00,0x04,0x00,0x45,0x00,0x00,0x00,0xce,0x00,0x00,0x00, -0xcd,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x50,0x00,0x00,0x00, -0xcf,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0xc3,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0xcf,0x00,0x00,0x00, -0xce,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd1,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x7b,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0x46,0x00,0x00,0x00,0xd4,0x00,0x00,0x00, -0xc6,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,0x46,0x00,0x00,0x00, -0xd5,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,0x2d,0x00,0x00,0x00, -0x70,0x00,0x04,0x00,0x42,0x00,0x00,0x00,0xd6,0x00,0x00,0x00, -0xd5,0x00,0x00,0x00,0x0c,0x00,0x08,0x00,0x42,0x00,0x00,0x00, -0xd8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0x59,0x00,0x00,0x00, -0x73,0x00,0x04,0x00,0x45,0x00,0x00,0x00,0xd9,0x00,0x00,0x00, -0xd8,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x50,0x00,0x00,0x00, -0xda,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0xd1,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0xda,0x00,0x00,0x00, -0xd9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xe2,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x7c,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe4,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x7c,0x01,0x00,0x00,0x41,0x00,0x08,0x00, -0x73,0x00,0x00,0x00,0xe5,0x00,0x00,0x00,0x4d,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x6f,0x00,0x00,0x00, -0xe4,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x46,0x00,0x00,0x00, -0xe6,0x00,0x00,0x00,0xe5,0x00,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,0xe6,0x00,0x00,0x00, -0x7c,0x00,0x04,0x00,0x2c,0x00,0x00,0x00,0xe8,0x00,0x00,0x00, -0xe7,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x2c,0x00,0x00,0x00, -0xe9,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0x78,0x00,0x00,0x00, -0x6f,0x00,0x04,0x00,0x42,0x00,0x00,0x00,0xea,0x00,0x00,0x00, -0xe9,0x00,0x00,0x00,0x0c,0x00,0x08,0x00,0x42,0x00,0x00,0x00, -0xec,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0xea,0x00,0x00,0x00,0x59,0x00,0x00,0x00, -0x73,0x00,0x04,0x00,0x45,0x00,0x00,0x00,0xed,0x00,0x00,0x00, -0xec,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x50,0x00,0x00,0x00, -0xee,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0xe2,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0xee,0x00,0x00,0x00, -0xed,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xf0,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x7d,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0x46,0x00,0x00,0x00,0xf3,0x00,0x00,0x00, -0xe5,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,0x46,0x00,0x00,0x00, -0xf4,0x00,0x00,0x00,0xf3,0x00,0x00,0x00,0x2d,0x00,0x00,0x00, -0x70,0x00,0x04,0x00,0x42,0x00,0x00,0x00,0xf5,0x00,0x00,0x00, -0xf4,0x00,0x00,0x00,0x0c,0x00,0x08,0x00,0x42,0x00,0x00,0x00, -0xf7,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,0x59,0x00,0x00,0x00, -0x73,0x00,0x04,0x00,0x45,0x00,0x00,0x00,0xf8,0x00,0x00,0x00, -0xf7,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x50,0x00,0x00,0x00, -0xf9,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0xf0,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0xf9,0x00,0x00,0x00, -0xf8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x01,0x01,0x00,0x00,0x41,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x03,0x01,0x00,0x00, -0x40,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x41,0x00,0x08,0x00, -0x73,0x00,0x00,0x00,0x04,0x01,0x00,0x00,0x4d,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x6f,0x00,0x00,0x00, -0x03,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x46,0x00,0x00,0x00, -0x05,0x01,0x00,0x00,0x04,0x01,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x06,0x01,0x00,0x00,0x05,0x01,0x00,0x00, -0x7c,0x00,0x04,0x00,0x2c,0x00,0x00,0x00,0x07,0x01,0x00,0x00, -0x06,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x2c,0x00,0x00,0x00, -0x08,0x01,0x00,0x00,0x07,0x01,0x00,0x00,0x78,0x00,0x00,0x00, -0x6f,0x00,0x04,0x00,0x42,0x00,0x00,0x00,0x09,0x01,0x00,0x00, -0x08,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,0x42,0x00,0x00,0x00, -0x0b,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x09,0x01,0x00,0x00,0x59,0x00,0x00,0x00, -0x73,0x00,0x04,0x00,0x45,0x00,0x00,0x00,0x0c,0x01,0x00,0x00, -0x0b,0x01,0x00,0x00,0x41,0x00,0x06,0x00,0x50,0x00,0x00,0x00, -0x0d,0x01,0x00,0x00,0x68,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x01,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x0d,0x01,0x00,0x00, -0x0c,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x0f,0x01,0x00,0x00,0x41,0x00,0x00,0x00,0x7e,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0x46,0x00,0x00,0x00,0x12,0x01,0x00,0x00, -0x04,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x46,0x00,0x00,0x00, -0x13,0x01,0x00,0x00,0x12,0x01,0x00,0x00,0x2d,0x00,0x00,0x00, -0x70,0x00,0x04,0x00,0x42,0x00,0x00,0x00,0x14,0x01,0x00,0x00, -0x13,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,0x42,0x00,0x00,0x00, -0x16,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x14,0x01,0x00,0x00,0x59,0x00,0x00,0x00, -0x73,0x00,0x04,0x00,0x45,0x00,0x00,0x00,0x17,0x01,0x00,0x00, -0x16,0x01,0x00,0x00,0x41,0x00,0x06,0x00,0x50,0x00,0x00,0x00, -0x18,0x01,0x00,0x00,0x68,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x0f,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x18,0x01,0x00,0x00, -0x17,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x20,0x01,0x00,0x00,0x41,0x00,0x00,0x00,0x7f,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x22,0x01,0x00,0x00, -0x40,0x00,0x00,0x00,0x7f,0x01,0x00,0x00,0x41,0x00,0x08,0x00, -0x73,0x00,0x00,0x00,0x23,0x01,0x00,0x00,0x4d,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x6f,0x00,0x00,0x00, -0x22,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x46,0x00,0x00,0x00, -0x24,0x01,0x00,0x00,0x23,0x01,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x25,0x01,0x00,0x00,0x24,0x01,0x00,0x00, -0x7c,0x00,0x04,0x00,0x2c,0x00,0x00,0x00,0x26,0x01,0x00,0x00, -0x25,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x2c,0x00,0x00,0x00, -0x27,0x01,0x00,0x00,0x26,0x01,0x00,0x00,0x78,0x00,0x00,0x00, -0x6f,0x00,0x04,0x00,0x42,0x00,0x00,0x00,0x28,0x01,0x00,0x00, -0x27,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,0x42,0x00,0x00,0x00, -0x2a,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x28,0x01,0x00,0x00,0x59,0x00,0x00,0x00, -0x73,0x00,0x04,0x00,0x45,0x00,0x00,0x00,0x2b,0x01,0x00,0x00, -0x2a,0x01,0x00,0x00,0x41,0x00,0x06,0x00,0x50,0x00,0x00,0x00, -0x2c,0x01,0x00,0x00,0x68,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x20,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x2c,0x01,0x00,0x00, -0x2b,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x2e,0x01,0x00,0x00,0x41,0x00,0x00,0x00,0x80,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0x46,0x00,0x00,0x00,0x31,0x01,0x00,0x00, -0x23,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x46,0x00,0x00,0x00, -0x32,0x01,0x00,0x00,0x31,0x01,0x00,0x00,0x2d,0x00,0x00,0x00, -0x70,0x00,0x04,0x00,0x42,0x00,0x00,0x00,0x33,0x01,0x00,0x00, -0x32,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,0x42,0x00,0x00,0x00, -0x35,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x33,0x01,0x00,0x00,0x59,0x00,0x00,0x00, -0x73,0x00,0x04,0x00,0x45,0x00,0x00,0x00,0x36,0x01,0x00,0x00, -0x35,0x01,0x00,0x00,0x41,0x00,0x06,0x00,0x50,0x00,0x00,0x00, -0x37,0x01,0x00,0x00,0x68,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x2e,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x37,0x01,0x00,0x00, -0x36,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x3f,0x01,0x00,0x00,0x41,0x00,0x00,0x00,0x81,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x41,0x01,0x00,0x00, -0x40,0x00,0x00,0x00,0x81,0x01,0x00,0x00,0x41,0x00,0x08,0x00, -0x73,0x00,0x00,0x00,0x42,0x01,0x00,0x00,0x4d,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x6f,0x00,0x00,0x00, -0x41,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x46,0x00,0x00,0x00, -0x43,0x01,0x00,0x00,0x42,0x01,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x44,0x01,0x00,0x00,0x43,0x01,0x00,0x00, -0x7c,0x00,0x04,0x00,0x2c,0x00,0x00,0x00,0x45,0x01,0x00,0x00, -0x44,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x2c,0x00,0x00,0x00, -0x46,0x01,0x00,0x00,0x45,0x01,0x00,0x00,0x78,0x00,0x00,0x00, -0x6f,0x00,0x04,0x00,0x42,0x00,0x00,0x00,0x47,0x01,0x00,0x00, -0x46,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,0x42,0x00,0x00,0x00, -0x49,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x47,0x01,0x00,0x00,0x59,0x00,0x00,0x00, -0x73,0x00,0x04,0x00,0x45,0x00,0x00,0x00,0x4a,0x01,0x00,0x00, -0x49,0x01,0x00,0x00,0x41,0x00,0x06,0x00,0x50,0x00,0x00,0x00, -0x4b,0x01,0x00,0x00,0x68,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x3f,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x4b,0x01,0x00,0x00, -0x4a,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x4d,0x01,0x00,0x00,0x41,0x00,0x00,0x00,0x82,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0x46,0x00,0x00,0x00,0x50,0x01,0x00,0x00, -0x42,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x46,0x00,0x00,0x00, -0x51,0x01,0x00,0x00,0x50,0x01,0x00,0x00,0x2d,0x00,0x00,0x00, -0x70,0x00,0x04,0x00,0x42,0x00,0x00,0x00,0x52,0x01,0x00,0x00, -0x51,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,0x42,0x00,0x00,0x00, -0x54,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x52,0x01,0x00,0x00,0x59,0x00,0x00,0x00, -0x73,0x00,0x04,0x00,0x45,0x00,0x00,0x00,0x55,0x01,0x00,0x00, -0x54,0x01,0x00,0x00,0x41,0x00,0x06,0x00,0x50,0x00,0x00,0x00, -0x56,0x01,0x00,0x00,0x68,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x4d,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x56,0x01,0x00,0x00, -0x55,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x5e,0x01,0x00,0x00,0x41,0x00,0x00,0x00,0x83,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x60,0x01,0x00,0x00, -0x40,0x00,0x00,0x00,0x83,0x01,0x00,0x00,0x41,0x00,0x08,0x00, -0x73,0x00,0x00,0x00,0x61,0x01,0x00,0x00,0x4d,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x6f,0x00,0x00,0x00, -0x60,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x46,0x00,0x00,0x00, -0x62,0x01,0x00,0x00,0x61,0x01,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x63,0x01,0x00,0x00,0x62,0x01,0x00,0x00, -0x7c,0x00,0x04,0x00,0x2c,0x00,0x00,0x00,0x64,0x01,0x00,0x00, -0x63,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x2c,0x00,0x00,0x00, -0x65,0x01,0x00,0x00,0x64,0x01,0x00,0x00,0x78,0x00,0x00,0x00, -0x6f,0x00,0x04,0x00,0x42,0x00,0x00,0x00,0x66,0x01,0x00,0x00, -0x65,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,0x42,0x00,0x00,0x00, -0x68,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x66,0x01,0x00,0x00,0x59,0x00,0x00,0x00, -0x73,0x00,0x04,0x00,0x45,0x00,0x00,0x00,0x69,0x01,0x00,0x00, -0x68,0x01,0x00,0x00,0x41,0x00,0x06,0x00,0x50,0x00,0x00,0x00, -0x6a,0x01,0x00,0x00,0x68,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x5e,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x6a,0x01,0x00,0x00, -0x69,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x6c,0x01,0x00,0x00,0x41,0x00,0x00,0x00,0x84,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0x46,0x00,0x00,0x00,0x6f,0x01,0x00,0x00, -0x61,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x46,0x00,0x00,0x00, -0x70,0x01,0x00,0x00,0x6f,0x01,0x00,0x00,0x2d,0x00,0x00,0x00, -0x70,0x00,0x04,0x00,0x42,0x00,0x00,0x00,0x71,0x01,0x00,0x00, -0x70,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,0x42,0x00,0x00,0x00, -0x73,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x71,0x01,0x00,0x00,0x59,0x00,0x00,0x00, -0x73,0x00,0x04,0x00,0x45,0x00,0x00,0x00,0x74,0x01,0x00,0x00, -0x73,0x01,0x00,0x00,0x41,0x00,0x06,0x00,0x50,0x00,0x00,0x00, -0x75,0x01,0x00,0x00,0x68,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x6c,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x75,0x01,0x00,0x00, -0x74,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x97,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x97,0x00,0x00,0x00,0xfd,0x00,0x01,0x00, -0x38,0x00,0x01,0x00, -}; -const uint64_t dequant_q4_1_len = 5248; - -unsigned char dequant_q4_K_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0xae,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x27,0x00,0x00,0x00, -0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00, -0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00, -0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30, -0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x0f,0x00,0x0a,0x00,0x05,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00, -0x16,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x30,0x00,0x00,0x00, -0x4c,0x00,0x00,0x00,0x08,0x01,0x00,0x00,0x10,0x00,0x06,0x00, -0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x16,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1e,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1e,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1e,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1e,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x1e,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x30,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x45,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x47,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x48,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x48,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x48,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x49,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x90,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0x4a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x4a,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x4a,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x4c,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x4c,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x05,0x01,0x00,0x00, -0x06,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0x06,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x06,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x06,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x08,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x08,0x01,0x00,0x00,0x21,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x33,0x01,0x00,0x00, -0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x13,0x00,0x02,0x00, -0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x00,0x01,0x00,0x00,0x14,0x00,0x02,0x00,0x11,0x00,0x00,0x00, -0x17,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x15,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x15,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x1e,0x00,0x07,0x00,0x1e,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x1f,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x1e,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x1f,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x21,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x21,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x23,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00, -0x26,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x15,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x35,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x3b,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x16,0x00,0x03,0x00, -0x3e,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x16,0x00,0x03,0x00, -0x41,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x17,0x00,0x04,0x00, -0x42,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x43,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x44,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x1c,0x00,0x04,0x00, -0x45,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x44,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x46,0x00,0x00,0x00, -0x80,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x47,0x00,0x00,0x00, -0x43,0x00,0x00,0x00,0x46,0x00,0x00,0x00,0x1e,0x00,0x05,0x00, -0x48,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x45,0x00,0x00,0x00, -0x47,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x49,0x00,0x00,0x00, -0x48,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x4a,0x00,0x00,0x00, -0x49,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x4b,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x4b,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x4e,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x41,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x54,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x5b,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x5f,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x64,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x72,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x43,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0x77,0x00,0x00,0x00, -0x3f,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x79,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x21,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0x96,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00, -0x98,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x05,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xda,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x05,0x01,0x00,0x00, -0x41,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x06,0x01,0x00,0x00, -0x05,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x07,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x06,0x01,0x00,0x00,0x3b,0x00,0x04,0x00, -0x07,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0x0e,0x01,0x00,0x00, -0x02,0x00,0x00,0x00,0x2c,0x00,0x06,0x00,0x14,0x00,0x00,0x00, -0x33,0x01,0x00,0x00,0x64,0x00,0x00,0x00,0x54,0x00,0x00,0x00, -0x54,0x00,0x00,0x00,0x2a,0x00,0x03,0x00,0x11,0x00,0x00,0x00, -0x36,0x01,0x00,0x00,0x29,0x00,0x03,0x00,0x11,0x00,0x00,0x00, -0x39,0x01,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xa7,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xaa,0x01,0x00,0x00,0x22,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xad,0x01,0x00,0x00, -0x23,0x00,0x00,0x00,0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,0xf7,0x00,0x03,0x00, -0x34,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfb,0x00,0x03,0x00, -0x09,0x00,0x00,0x00,0x35,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x35,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x0a,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x0a,0x00,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x3c,0x01,0x00,0x00,0x09,0x00,0x00,0x00, -0x35,0x01,0x00,0x00,0x32,0x01,0x00,0x00,0x0d,0x00,0x00,0x00, -0xb0,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x3c,0x01,0x00,0x00,0x10,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x0c,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x12,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x0b,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x16,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1a,0x00,0x00,0x00, -0x19,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x1a,0x00,0x00,0x00, -0x3c,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x23,0x00,0x00,0x00, -0x24,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x25,0x00,0x00,0x00, -0x24,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x23,0x00,0x00,0x00, -0x27,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x26,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0x27,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x29,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2a,0x00,0x00,0x00, -0x29,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0xae,0x00,0x05,0x00, -0x11,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x2a,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x2d,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x2b,0x00,0x00,0x00, -0x2c,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x2c,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x0c,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x2d,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x17,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x30,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x35,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x35,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x3b,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x41,0x00,0x08,0x00, -0x4e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x4c,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x41,0x00,0x00,0x00, -0x50,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x73,0x00,0x04,0x00, -0x3e,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x50,0x00,0x00,0x00, -0x41,0x00,0x08,0x00,0x4e,0x00,0x00,0x00,0x55,0x00,0x00,0x00, -0x4c,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x41,0x00,0x00,0x00,0x56,0x00,0x00,0x00,0x55,0x00,0x00,0x00, -0x73,0x00,0x04,0x00,0x3e,0x00,0x00,0x00,0x57,0x00,0x00,0x00, -0x56,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x5a,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5d,0x00,0x00,0x00, -0x5b,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x5a,0x00,0x00,0x00, -0x5d,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x61,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x5e,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x66,0x00,0x00,0x00,0x64,0x00,0x00,0x00, -0x36,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x69,0x00,0x00,0x00,0x66,0x00,0x00,0x00,0x61,0x00,0x00,0x00, -0xb0,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x6b,0x00,0x00,0x00, -0x3d,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,0xf7,0x00,0x03,0x00, -0x6d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x6b,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x87,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x6c,0x00,0x00,0x00,0x41,0x00,0x08,0x00, -0x72,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x4c,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x26,0x00,0x00,0x00, -0x3d,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x43,0x00,0x00,0x00, -0x74,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0x74,0x00,0x00,0x00, -0x7c,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0x76,0x00,0x00,0x00, -0x75,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x21,0x00,0x00,0x00, -0x78,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x77,0x00,0x00,0x00, -0x72,0x00,0x04,0x00,0x79,0x00,0x00,0x00,0x7a,0x00,0x00,0x00, -0x78,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x43,0x00,0x00,0x00, -0x7b,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x5f,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x72,0x00,0x00,0x00, -0x80,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x1c,0x00,0x00,0x00,0x26,0x00,0x00,0x00,0x7f,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x43,0x00,0x00,0x00,0x81,0x00,0x00,0x00, -0x80,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x82,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x7c,0x00,0x04,0x00, -0x21,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x82,0x00,0x00,0x00, -0xc7,0x00,0x05,0x00,0x21,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x83,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x72,0x00,0x04,0x00, -0x79,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x7c,0x00,0x04,0x00,0x43,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x85,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x6d,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x87,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x5f,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x72,0x00,0x00,0x00, -0x8b,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x1c,0x00,0x00,0x00,0x26,0x00,0x00,0x00,0x8a,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x43,0x00,0x00,0x00,0x8c,0x00,0x00,0x00, -0x8b,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x8d,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,0x7c,0x00,0x04,0x00, -0x21,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0x8d,0x00,0x00,0x00, -0xc7,0x00,0x05,0x00,0x21,0x00,0x00,0x00,0x90,0x00,0x00,0x00, -0x8e,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,0x82,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x5f,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x72,0x00,0x00,0x00, -0x94,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x1c,0x00,0x00,0x00,0x26,0x00,0x00,0x00,0x93,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x43,0x00,0x00,0x00,0x95,0x00,0x00,0x00, -0x94,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,0x43,0x00,0x00,0x00, -0x97,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0x96,0x00,0x00,0x00, -0xc4,0x00,0x05,0x00,0x43,0x00,0x00,0x00,0x99,0x00,0x00,0x00, -0x97,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x99,0x00,0x00,0x00, -0x7c,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0x9b,0x00,0x00,0x00, -0x9a,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,0x21,0x00,0x00,0x00, -0x9c,0x00,0x00,0x00,0x90,0x00,0x00,0x00,0x9b,0x00,0x00,0x00, -0x72,0x00,0x04,0x00,0x79,0x00,0x00,0x00,0x9d,0x00,0x00,0x00, -0x9c,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x43,0x00,0x00,0x00, -0x9e,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x43,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0x8b,0x00,0x00,0x00, -0xc2,0x00,0x05,0x00,0x43,0x00,0x00,0x00,0xa4,0x00,0x00,0x00, -0xa3,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x41,0x00,0x08,0x00, -0x72,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0x4c,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x26,0x00,0x00,0x00, -0x3d,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x43,0x00,0x00,0x00, -0xa8,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0xc2,0x00,0x05,0x00, -0x43,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,0xa8,0x00,0x00,0x00, -0x96,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,0x43,0x00,0x00,0x00, -0xaa,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,0x98,0x00,0x00,0x00, -0xc5,0x00,0x05,0x00,0x43,0x00,0x00,0x00,0xab,0x00,0x00,0x00, -0xa4,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x6d,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x6d,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x43,0x00,0x00,0x00,0x3e,0x01,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0xab,0x00,0x00,0x00, -0x87,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x43,0x00,0x00,0x00, -0x3d,0x01,0x00,0x00,0x7b,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x9e,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x70,0x00,0x04,0x00, -0x3e,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0x3d,0x01,0x00,0x00, -0x85,0x00,0x05,0x00,0x3e,0x00,0x00,0x00,0xb0,0x00,0x00,0x00, -0x51,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0x70,0x00,0x04,0x00, -0x3e,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0x3e,0x01,0x00,0x00, -0x85,0x00,0x05,0x00,0x3e,0x00,0x00,0x00,0xb5,0x00,0x00,0x00, -0x57,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0xf7,0x00,0x03,0x00, -0xb9,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x6b,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xb8,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x54,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x72,0x00,0x00,0x00, -0xbd,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x1c,0x00,0x00,0x00,0x26,0x00,0x00,0x00,0xbc,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x43,0x00,0x00,0x00,0xbe,0x00,0x00,0x00, -0xbd,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xbf,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x7c,0x00,0x04,0x00, -0x21,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0xbf,0x00,0x00,0x00, -0xc7,0x00,0x05,0x00,0x21,0x00,0x00,0x00,0xc1,0x00,0x00,0x00, -0xc0,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x72,0x00,0x04,0x00, -0x79,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,0xc1,0x00,0x00,0x00, -0x7c,0x00,0x04,0x00,0x43,0x00,0x00,0x00,0xc3,0x00,0x00,0x00, -0xc2,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xc7,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0xc6,0x00,0x00,0x00, -0x41,0x00,0x08,0x00,0x72,0x00,0x00,0x00,0xc8,0x00,0x00,0x00, -0x4c,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x26,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x43,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0xc8,0x00,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xca,0x00,0x00,0x00, -0xc9,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x21,0x00,0x00,0x00, -0xcb,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0xc7,0x00,0x05,0x00, -0x21,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0xcb,0x00,0x00,0x00, -0x77,0x00,0x00,0x00,0x72,0x00,0x04,0x00,0x79,0x00,0x00,0x00, -0xcd,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x7c,0x00,0x04,0x00, -0x43,0x00,0x00,0x00,0xce,0x00,0x00,0x00,0xcd,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xb9,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xcf,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd2,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0xc6,0x00,0x00,0x00, -0x41,0x00,0x08,0x00,0x72,0x00,0x00,0x00,0xd3,0x00,0x00,0x00, -0x4c,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x26,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x43,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,0xd3,0x00,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xd5,0x00,0x00,0x00, -0xd4,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x21,0x00,0x00,0x00, -0xd6,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0xc7,0x00,0x05,0x00, -0x21,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,0xd6,0x00,0x00,0x00, -0x8f,0x00,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xdb,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0xda,0x00,0x00,0x00, -0x41,0x00,0x08,0x00,0x72,0x00,0x00,0x00,0xdc,0x00,0x00,0x00, -0x4c,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x26,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x43,0x00,0x00,0x00,0xdd,0x00,0x00,0x00,0xdc,0x00,0x00,0x00, -0xc2,0x00,0x05,0x00,0x43,0x00,0x00,0x00,0xde,0x00,0x00,0x00, -0xdd,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0xc4,0x00,0x05,0x00, -0x43,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0xde,0x00,0x00,0x00, -0x98,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xe0,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0x7c,0x00,0x04,0x00, -0x21,0x00,0x00,0x00,0xe1,0x00,0x00,0x00,0xe0,0x00,0x00,0x00, -0xc5,0x00,0x05,0x00,0x21,0x00,0x00,0x00,0xe2,0x00,0x00,0x00, -0xd7,0x00,0x00,0x00,0xe1,0x00,0x00,0x00,0x72,0x00,0x04,0x00, -0x79,0x00,0x00,0x00,0xe3,0x00,0x00,0x00,0xe2,0x00,0x00,0x00, -0x7c,0x00,0x04,0x00,0x43,0x00,0x00,0x00,0xe4,0x00,0x00,0x00, -0xe3,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x43,0x00,0x00,0x00, -0xe9,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,0xc2,0x00,0x05,0x00, -0x43,0x00,0x00,0x00,0xea,0x00,0x00,0x00,0xe9,0x00,0x00,0x00, -0x98,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xed,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x54,0x00,0x00,0x00, -0x41,0x00,0x08,0x00,0x72,0x00,0x00,0x00,0xee,0x00,0x00,0x00, -0x4c,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x26,0x00,0x00,0x00,0xed,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x43,0x00,0x00,0x00,0xef,0x00,0x00,0x00,0xee,0x00,0x00,0x00, -0xc2,0x00,0x05,0x00,0x43,0x00,0x00,0x00,0xf0,0x00,0x00,0x00, -0xef,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0xc4,0x00,0x05,0x00, -0x43,0x00,0x00,0x00,0xf1,0x00,0x00,0x00,0xf0,0x00,0x00,0x00, -0x98,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,0x43,0x00,0x00,0x00, -0xf2,0x00,0x00,0x00,0xea,0x00,0x00,0x00,0xf1,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xb9,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xb9,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x43,0x00,0x00,0x00, -0x40,0x01,0x00,0x00,0xce,0x00,0x00,0x00,0xb8,0x00,0x00,0x00, -0xf2,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0xf5,0x00,0x07,0x00, -0x43,0x00,0x00,0x00,0x3f,0x01,0x00,0x00,0xc3,0x00,0x00,0x00, -0xb8,0x00,0x00,0x00,0xe4,0x00,0x00,0x00,0xcf,0x00,0x00,0x00, -0x70,0x00,0x04,0x00,0x3e,0x00,0x00,0x00,0xf6,0x00,0x00,0x00, -0x3f,0x01,0x00,0x00,0x85,0x00,0x05,0x00,0x3e,0x00,0x00,0x00, -0xf7,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0xf6,0x00,0x00,0x00, -0x70,0x00,0x04,0x00,0x3e,0x00,0x00,0x00,0xfb,0x00,0x00,0x00, -0x40,0x01,0x00,0x00,0x85,0x00,0x05,0x00,0x3e,0x00,0x00,0x00, -0xfc,0x00,0x00,0x00,0x57,0x00,0x00,0x00,0xfb,0x00,0x00,0x00, -0x41,0x00,0x08,0x00,0x72,0x00,0x00,0x00,0x12,0x01,0x00,0x00, -0x4c,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x0e,0x01,0x00,0x00,0x69,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x43,0x00,0x00,0x00,0x13,0x01,0x00,0x00,0x12,0x01,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x14,0x01,0x00,0x00, -0x13,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x21,0x00,0x00,0x00, -0x15,0x01,0x00,0x00,0x14,0x01,0x00,0x00,0xc7,0x00,0x05,0x00, -0x21,0x00,0x00,0x00,0x16,0x01,0x00,0x00,0x15,0x01,0x00,0x00, -0x8f,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,0x3e,0x00,0x00,0x00, -0x17,0x01,0x00,0x00,0x16,0x01,0x00,0x00,0x7f,0x00,0x04,0x00, -0x3e,0x00,0x00,0x00,0xa4,0x01,0x00,0x00,0xb5,0x00,0x00,0x00, -0x0c,0x00,0x08,0x00,0x3e,0x00,0x00,0x00,0x1a,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0xb0,0x00,0x00,0x00, -0x17,0x01,0x00,0x00,0xa4,0x01,0x00,0x00,0x73,0x00,0x04,0x00, -0x41,0x00,0x00,0x00,0x1b,0x01,0x00,0x00,0x1a,0x01,0x00,0x00, -0x41,0x00,0x06,0x00,0x4e,0x00,0x00,0x00,0x1c,0x01,0x00,0x00, -0x08,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x3e,0x00,0x03,0x00,0x1c,0x01,0x00,0x00,0x1b,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x20,0x01,0x00,0x00, -0x62,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x43,0x00,0x00,0x00,0x27,0x01,0x00,0x00,0x12,0x01,0x00,0x00, -0xc2,0x00,0x05,0x00,0x43,0x00,0x00,0x00,0x28,0x01,0x00,0x00, -0x27,0x01,0x00,0x00,0x98,0x00,0x00,0x00,0x70,0x00,0x04,0x00, -0x3e,0x00,0x00,0x00,0x29,0x01,0x00,0x00,0x28,0x01,0x00,0x00, -0x7f,0x00,0x04,0x00,0x3e,0x00,0x00,0x00,0xa5,0x01,0x00,0x00, -0xfc,0x00,0x00,0x00,0x0c,0x00,0x08,0x00,0x3e,0x00,0x00,0x00, -0x2c,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0xf7,0x00,0x00,0x00,0x29,0x01,0x00,0x00,0xa5,0x01,0x00,0x00, -0x73,0x00,0x04,0x00,0x41,0x00,0x00,0x00,0x2d,0x01,0x00,0x00, -0x2c,0x01,0x00,0x00,0x41,0x00,0x06,0x00,0x4e,0x00,0x00,0x00, -0x2e,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x22,0x00,0x00,0x00, -0x20,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x2e,0x01,0x00,0x00, -0x2d,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x4f,0x01,0x00,0x00,0x62,0x00,0x00,0x00,0x54,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x50,0x01,0x00,0x00, -0x69,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x41,0x00,0x08,0x00, -0x72,0x00,0x00,0x00,0x51,0x01,0x00,0x00,0x4c,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x0e,0x01,0x00,0x00, -0x50,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x43,0x00,0x00,0x00, -0x52,0x01,0x00,0x00,0x51,0x01,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x53,0x01,0x00,0x00,0x52,0x01,0x00,0x00, -0x7c,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0x54,0x01,0x00,0x00, -0x53,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x21,0x00,0x00,0x00, -0x55,0x01,0x00,0x00,0x54,0x01,0x00,0x00,0x8f,0x00,0x00,0x00, -0x6f,0x00,0x04,0x00,0x3e,0x00,0x00,0x00,0x56,0x01,0x00,0x00, -0x55,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,0x3e,0x00,0x00,0x00, -0x58,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0xb0,0x00,0x00,0x00,0x56,0x01,0x00,0x00,0xa4,0x01,0x00,0x00, -0x73,0x00,0x04,0x00,0x41,0x00,0x00,0x00,0x59,0x01,0x00,0x00, -0x58,0x01,0x00,0x00,0x41,0x00,0x06,0x00,0x4e,0x00,0x00,0x00, -0x5a,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x22,0x00,0x00,0x00, -0x4f,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x5a,0x01,0x00,0x00, -0x59,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x5c,0x01,0x00,0x00,0x62,0x00,0x00,0x00,0xa7,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0x43,0x00,0x00,0x00,0x5f,0x01,0x00,0x00, -0x51,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x43,0x00,0x00,0x00, -0x60,0x01,0x00,0x00,0x5f,0x01,0x00,0x00,0x98,0x00,0x00,0x00, -0x70,0x00,0x04,0x00,0x3e,0x00,0x00,0x00,0x61,0x01,0x00,0x00, -0x60,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,0x3e,0x00,0x00,0x00, -0x63,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0xf7,0x00,0x00,0x00,0x61,0x01,0x00,0x00,0xa5,0x01,0x00,0x00, -0x73,0x00,0x04,0x00,0x41,0x00,0x00,0x00,0x64,0x01,0x00,0x00, -0x63,0x01,0x00,0x00,0x41,0x00,0x06,0x00,0x4e,0x00,0x00,0x00, -0x65,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x22,0x00,0x00,0x00, -0x5c,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x65,0x01,0x00,0x00, -0x64,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x6d,0x01,0x00,0x00,0x62,0x00,0x00,0x00,0x3b,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6e,0x01,0x00,0x00, -0x69,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x41,0x00,0x08,0x00, -0x72,0x00,0x00,0x00,0x6f,0x01,0x00,0x00,0x4c,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x0e,0x01,0x00,0x00, -0x6e,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x43,0x00,0x00,0x00, -0x70,0x01,0x00,0x00,0x6f,0x01,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x71,0x01,0x00,0x00,0x70,0x01,0x00,0x00, -0x7c,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0x72,0x01,0x00,0x00, -0x71,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x21,0x00,0x00,0x00, -0x73,0x01,0x00,0x00,0x72,0x01,0x00,0x00,0x8f,0x00,0x00,0x00, -0x6f,0x00,0x04,0x00,0x3e,0x00,0x00,0x00,0x74,0x01,0x00,0x00, -0x73,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,0x3e,0x00,0x00,0x00, -0x76,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0xb0,0x00,0x00,0x00,0x74,0x01,0x00,0x00,0xa4,0x01,0x00,0x00, -0x73,0x00,0x04,0x00,0x41,0x00,0x00,0x00,0x77,0x01,0x00,0x00, -0x76,0x01,0x00,0x00,0x41,0x00,0x06,0x00,0x4e,0x00,0x00,0x00, -0x78,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x22,0x00,0x00,0x00, -0x6d,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x78,0x01,0x00,0x00, -0x77,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x7a,0x01,0x00,0x00,0x62,0x00,0x00,0x00,0xaa,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0x43,0x00,0x00,0x00,0x7d,0x01,0x00,0x00, -0x6f,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x43,0x00,0x00,0x00, -0x7e,0x01,0x00,0x00,0x7d,0x01,0x00,0x00,0x98,0x00,0x00,0x00, -0x70,0x00,0x04,0x00,0x3e,0x00,0x00,0x00,0x7f,0x01,0x00,0x00, -0x7e,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,0x3e,0x00,0x00,0x00, -0x81,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0xf7,0x00,0x00,0x00,0x7f,0x01,0x00,0x00,0xa5,0x01,0x00,0x00, -0x73,0x00,0x04,0x00,0x41,0x00,0x00,0x00,0x82,0x01,0x00,0x00, -0x81,0x01,0x00,0x00,0x41,0x00,0x06,0x00,0x4e,0x00,0x00,0x00, -0x83,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x22,0x00,0x00,0x00, -0x7a,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x83,0x01,0x00,0x00, -0x82,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x8b,0x01,0x00,0x00,0x62,0x00,0x00,0x00,0xda,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8c,0x01,0x00,0x00, -0x69,0x00,0x00,0x00,0xda,0x00,0x00,0x00,0x41,0x00,0x08,0x00, -0x72,0x00,0x00,0x00,0x8d,0x01,0x00,0x00,0x4c,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x0e,0x01,0x00,0x00, -0x8c,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x43,0x00,0x00,0x00, -0x8e,0x01,0x00,0x00,0x8d,0x01,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x8f,0x01,0x00,0x00,0x8e,0x01,0x00,0x00, -0x7c,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0x90,0x01,0x00,0x00, -0x8f,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x21,0x00,0x00,0x00, -0x91,0x01,0x00,0x00,0x90,0x01,0x00,0x00,0x8f,0x00,0x00,0x00, -0x6f,0x00,0x04,0x00,0x3e,0x00,0x00,0x00,0x92,0x01,0x00,0x00, -0x91,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,0x3e,0x00,0x00,0x00, -0x94,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0xb0,0x00,0x00,0x00,0x92,0x01,0x00,0x00,0xa4,0x01,0x00,0x00, -0x73,0x00,0x04,0x00,0x41,0x00,0x00,0x00,0x95,0x01,0x00,0x00, -0x94,0x01,0x00,0x00,0x41,0x00,0x06,0x00,0x4e,0x00,0x00,0x00, -0x96,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x22,0x00,0x00,0x00, -0x8b,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x96,0x01,0x00,0x00, -0x95,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x98,0x01,0x00,0x00,0x62,0x00,0x00,0x00,0xad,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0x43,0x00,0x00,0x00,0x9b,0x01,0x00,0x00, -0x8d,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x43,0x00,0x00,0x00, -0x9c,0x01,0x00,0x00,0x9b,0x01,0x00,0x00,0x98,0x00,0x00,0x00, -0x70,0x00,0x04,0x00,0x3e,0x00,0x00,0x00,0x9d,0x01,0x00,0x00, -0x9c,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,0x3e,0x00,0x00,0x00, -0x9f,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0xf7,0x00,0x00,0x00,0x9d,0x01,0x00,0x00,0xa5,0x01,0x00,0x00, -0x73,0x00,0x04,0x00,0x41,0x00,0x00,0x00,0xa0,0x01,0x00,0x00, -0x9f,0x01,0x00,0x00,0x41,0x00,0x06,0x00,0x4e,0x00,0x00,0x00, -0xa1,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x22,0x00,0x00,0x00, -0x98,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xa1,0x01,0x00,0x00, -0xa0,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x0d,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x0d,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x32,0x01,0x00,0x00,0x3c,0x01,0x00,0x00, -0x26,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x0a,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x0c,0x00,0x00,0x00,0xf5,0x00,0x07,0x00, -0x11,0x00,0x00,0x00,0x45,0x01,0x00,0x00,0x36,0x01,0x00,0x00, -0x0a,0x00,0x00,0x00,0x39,0x01,0x00,0x00,0x2c,0x00,0x00,0x00, -0xf7,0x00,0x03,0x00,0x3a,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x45,0x01,0x00,0x00,0x34,0x01,0x00,0x00, -0x3a,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x3a,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0x34,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x34,0x01,0x00,0x00,0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00, - -}; -const uint64_t dequant_q4_K_len = 5916; - -unsigned char dequant_q5_0_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0xb7,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00, -0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00, -0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64, -0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00, -0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0f,0x00,0x0a,0x00, -0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e, -0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x2b,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x7f,0x00,0x00,0x00, -0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00, -0x00,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x12,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x29,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x29,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x29,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x29,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x29,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0x29,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x48,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x4b,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x4c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x4c,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x4c,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x4d,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x16,0x00,0x00,0x00, -0x48,0x00,0x04,0x00,0x4e,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x4e,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0x4e,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x50,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x50,0x00,0x00,0x00, -0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x7c,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x48,0x00,0x04,0x00,0x7d,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x7d,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0x7d,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x7f,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x7f,0x00,0x00,0x00, -0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xab,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00, -0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x1e,0x00,0x07,0x00,0x29,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x2a,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x2a,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x2c,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x2c,0x00,0x00,0x00, -0x2d,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x2e,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x14,0x00,0x02,0x00,0x32,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x00,0x04,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x3e,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0x42,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0x45,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x46,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x1c,0x00,0x04,0x00,0x48,0x00,0x00,0x00,0x46,0x00,0x00,0x00, -0x47,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x49,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x1c,0x00,0x04,0x00,0x4b,0x00,0x00,0x00,0x49,0x00,0x00,0x00, -0x4a,0x00,0x00,0x00,0x1e,0x00,0x05,0x00,0x4c,0x00,0x00,0x00, -0x45,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x4b,0x00,0x00,0x00, -0x1d,0x00,0x03,0x00,0x4d,0x00,0x00,0x00,0x4c,0x00,0x00,0x00, -0x1e,0x00,0x03,0x00,0x4e,0x00,0x00,0x00,0x4d,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x4f,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x4f,0x00,0x00,0x00, -0x50,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x2c,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x53,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x45,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x2c,0x00,0x00,0x00, -0x59,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x5a,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x46,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x2c,0x00,0x00,0x00,0x5e,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x2c,0x00,0x00,0x00, -0x76,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x78,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x49,0x00,0x00,0x00, -0x1d,0x00,0x03,0x00,0x7c,0x00,0x00,0x00,0x45,0x00,0x00,0x00, -0x1e,0x00,0x03,0x00,0x7d,0x00,0x00,0x00,0x7c,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x7e,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x7d,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x7e,0x00,0x00,0x00, -0x7f,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x42,0x00,0x00,0x00,0x8f,0x00,0x00,0x00, -0x00,0x00,0x80,0x41,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x9d,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,0x00,0x01,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xaa,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2c,0x00,0x06,0x00,0x09,0x00,0x00,0x00, -0xab,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,0xaa,0x00,0x00,0x00, -0xaa,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xaa,0x01,0x00,0x00,0x11,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xab,0x01,0x00,0x00,0x0d,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xac,0x01,0x00,0x00, -0x12,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xad,0x01,0x00,0x00,0x0e,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xae,0x01,0x00,0x00,0x03,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xaf,0x01,0x00,0x00, -0x13,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xb0,0x01,0x00,0x00,0x14,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xb1,0x01,0x00,0x00,0x05,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb2,0x01,0x00,0x00, -0x15,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xb3,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xb4,0x01,0x00,0x00,0x16,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb5,0x01,0x00,0x00, -0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xb6,0x01,0x00,0x00,0x17,0x00,0x00,0x00,0x36,0x00,0x05,0x00, -0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00, -0xf7,0x00,0x03,0x00,0xac,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0xfb,0x00,0x03,0x00,0x0c,0x00,0x00,0x00,0xad,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xad,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x13,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0x13,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x16,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x15,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x17,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x1f,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x1e,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x1b,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0x1e,0x00,0x00,0x00, -0x17,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x27,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x2e,0x00,0x00,0x00,0x2f,0x00,0x00,0x00, -0x2b,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x2f,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x31,0x00,0x00,0x00, -0x30,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0xae,0x00,0x05,0x00, -0x32,0x00,0x00,0x00,0x33,0x00,0x00,0x00,0x27,0x00,0x00,0x00, -0x31,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x35,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x33,0x00,0x00,0x00, -0x34,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x34,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xac,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x35,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x38,0x00,0x00,0x00, -0x17,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x3c,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x3a,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x3e,0x00,0x00,0x00, -0x1f,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x41,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x41,0x00,0x07,0x00,0x53,0x00,0x00,0x00,0x54,0x00,0x00,0x00, -0x50,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x27,0x00,0x00,0x00, -0x51,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x45,0x00,0x00,0x00, -0x55,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x73,0x00,0x04,0x00, -0x42,0x00,0x00,0x00,0x56,0x00,0x00,0x00,0x55,0x00,0x00,0x00, -0x41,0x00,0x08,0x00,0x5a,0x00,0x00,0x00,0x5b,0x00,0x00,0x00, -0x50,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x27,0x00,0x00,0x00, -0x59,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x46,0x00,0x00,0x00,0x5c,0x00,0x00,0x00,0x5b,0x00,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x5d,0x00,0x00,0x00, -0x5c,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x5f,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,0x5e,0x00,0x00,0x00, -0x41,0x00,0x08,0x00,0x5a,0x00,0x00,0x00,0x61,0x00,0x00,0x00, -0x50,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x27,0x00,0x00,0x00, -0x59,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x46,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x61,0x00,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x63,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x64,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,0x63,0x00,0x00,0x00, -0x41,0x00,0x08,0x00,0x78,0x00,0x00,0x00,0x79,0x00,0x00,0x00, -0x50,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x27,0x00,0x00,0x00, -0x76,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x49,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,0x79,0x00,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x7b,0x00,0x00,0x00, -0x7a,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x87,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8a,0x00,0x00,0x00, -0x64,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0xc4,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,0x8a,0x00,0x00,0x00, -0x2d,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x8c,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,0x4a,0x00,0x00,0x00, -0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8d,0x00,0x00,0x00, -0x87,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,0x70,0x00,0x04,0x00, -0x42,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0x8d,0x00,0x00,0x00, -0x83,0x00,0x05,0x00,0x42,0x00,0x00,0x00,0x90,0x00,0x00,0x00, -0x8e,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,0x85,0x00,0x05,0x00, -0x42,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x56,0x00,0x00,0x00, -0x90,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x45,0x00,0x00,0x00, -0x92,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x41,0x00,0x06,0x00, -0x53,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x7f,0x00,0x00,0x00, -0x51,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x3e,0x00,0x03,0x00, -0x93,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x41,0x00,0x00,0x00, -0x4a,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9a,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,0x2d,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9e,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,0xc2,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9f,0x00,0x00,0x00,0x64,0x00,0x00,0x00, -0x9e,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa0,0x00,0x00,0x00,0x9f,0x00,0x00,0x00,0x4a,0x00,0x00,0x00, -0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa1,0x00,0x00,0x00, -0x9a,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0x70,0x00,0x04,0x00, -0x42,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0xa1,0x00,0x00,0x00, -0x83,0x00,0x05,0x00,0x42,0x00,0x00,0x00,0xa3,0x00,0x00,0x00, -0xa2,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,0x85,0x00,0x05,0x00, -0x42,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0x56,0x00,0x00,0x00, -0xa3,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x45,0x00,0x00,0x00, -0xa5,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0x41,0x00,0x06,0x00, -0x53,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,0x7f,0x00,0x00,0x00, -0x51,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x3e,0x00,0x03,0x00, -0xa6,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0xaa,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x78,0x00,0x00,0x00, -0xba,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x51,0x00,0x00,0x00, -0x27,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0xb9,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x49,0x00,0x00,0x00,0xbb,0x00,0x00,0x00, -0xba,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xbc,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x41,0x00,0x00,0x00, -0xaa,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xbf,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc0,0x00,0x00,0x00, -0x64,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0xc4,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,0xc0,0x00,0x00,0x00, -0x2d,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xc2,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,0x4a,0x00,0x00,0x00, -0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc3,0x00,0x00,0x00, -0xbf,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,0x70,0x00,0x04,0x00, -0x42,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0xc3,0x00,0x00,0x00, -0x83,0x00,0x05,0x00,0x42,0x00,0x00,0x00,0xc5,0x00,0x00,0x00, -0xc4,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,0x85,0x00,0x05,0x00, -0x42,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x56,0x00,0x00,0x00, -0xc5,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x45,0x00,0x00,0x00, -0xc7,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x41,0x00,0x06,0x00, -0x53,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x7f,0x00,0x00,0x00, -0x51,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x3e,0x00,0x03,0x00, -0xc8,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0x41,0x00,0x00,0x00, -0xaa,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xcb,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x2d,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xcc,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0xab,0x01,0x00,0x00,0xc2,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,0x64,0x00,0x00,0x00, -0xcc,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xce,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,0x4a,0x00,0x00,0x00, -0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xcf,0x00,0x00,0x00, -0xcb,0x00,0x00,0x00,0xce,0x00,0x00,0x00,0x70,0x00,0x04,0x00, -0x42,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0xcf,0x00,0x00,0x00, -0x83,0x00,0x05,0x00,0x42,0x00,0x00,0x00,0xd1,0x00,0x00,0x00, -0xd0,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,0x85,0x00,0x05,0x00, -0x42,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0x56,0x00,0x00,0x00, -0xd1,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x45,0x00,0x00,0x00, -0xd3,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0x41,0x00,0x06,0x00, -0x53,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,0x7f,0x00,0x00,0x00, -0x51,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0x3e,0x00,0x03,0x00, -0xd4,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x47,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x78,0x00,0x00,0x00, -0xdd,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x51,0x00,0x00,0x00, -0x27,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0xdc,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x49,0x00,0x00,0x00,0xde,0x00,0x00,0x00, -0xdd,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xdf,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,0x41,0x00,0x00,0x00, -0x47,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xe2,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe3,0x00,0x00,0x00, -0x64,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,0xc4,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xe4,0x00,0x00,0x00,0xe3,0x00,0x00,0x00, -0x2d,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xe5,0x00,0x00,0x00,0xe4,0x00,0x00,0x00,0x4a,0x00,0x00,0x00, -0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe6,0x00,0x00,0x00, -0xe2,0x00,0x00,0x00,0xe5,0x00,0x00,0x00,0x70,0x00,0x04,0x00, -0x42,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,0xe6,0x00,0x00,0x00, -0x83,0x00,0x05,0x00,0x42,0x00,0x00,0x00,0xe8,0x00,0x00,0x00, -0xe7,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,0x85,0x00,0x05,0x00, -0x42,0x00,0x00,0x00,0xe9,0x00,0x00,0x00,0x56,0x00,0x00,0x00, -0xe8,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x45,0x00,0x00,0x00, -0xea,0x00,0x00,0x00,0xe9,0x00,0x00,0x00,0x41,0x00,0x06,0x00, -0x53,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,0x7f,0x00,0x00,0x00, -0x51,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,0x3e,0x00,0x03,0x00, -0xeb,0x00,0x00,0x00,0xea,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xed,0x00,0x00,0x00,0x41,0x00,0x00,0x00, -0xac,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xee,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0x2d,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xef,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0xad,0x01,0x00,0x00,0xc2,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x64,0x00,0x00,0x00, -0xef,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xf1,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x4a,0x00,0x00,0x00, -0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf2,0x00,0x00,0x00, -0xee,0x00,0x00,0x00,0xf1,0x00,0x00,0x00,0x70,0x00,0x04,0x00, -0x42,0x00,0x00,0x00,0xf3,0x00,0x00,0x00,0xf2,0x00,0x00,0x00, -0x83,0x00,0x05,0x00,0x42,0x00,0x00,0x00,0xf4,0x00,0x00,0x00, -0xf3,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,0x85,0x00,0x05,0x00, -0x42,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,0x56,0x00,0x00,0x00, -0xf4,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x45,0x00,0x00,0x00, -0xf6,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,0x41,0x00,0x06,0x00, -0x53,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,0x7f,0x00,0x00,0x00, -0x51,0x00,0x00,0x00,0xed,0x00,0x00,0x00,0x3e,0x00,0x03,0x00, -0xf7,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0xae,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x78,0x00,0x00,0x00, -0x00,0x01,0x00,0x00,0x50,0x00,0x00,0x00,0x51,0x00,0x00,0x00, -0x27,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0xff,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x49,0x00,0x00,0x00,0x01,0x01,0x00,0x00, -0x00,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x02,0x01,0x00,0x00,0x01,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x03,0x01,0x00,0x00,0x41,0x00,0x00,0x00, -0xae,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x05,0x01,0x00,0x00,0x02,0x01,0x00,0x00,0x86,0x00,0x00,0x00, -0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x06,0x01,0x00,0x00, -0x64,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xc4,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x07,0x01,0x00,0x00,0x06,0x01,0x00,0x00, -0x2d,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x08,0x01,0x00,0x00,0x07,0x01,0x00,0x00,0x4a,0x00,0x00,0x00, -0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x09,0x01,0x00,0x00, -0x05,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x70,0x00,0x04,0x00, -0x42,0x00,0x00,0x00,0x0a,0x01,0x00,0x00,0x09,0x01,0x00,0x00, -0x83,0x00,0x05,0x00,0x42,0x00,0x00,0x00,0x0b,0x01,0x00,0x00, -0x0a,0x01,0x00,0x00,0x8f,0x00,0x00,0x00,0x85,0x00,0x05,0x00, -0x42,0x00,0x00,0x00,0x0c,0x01,0x00,0x00,0x56,0x00,0x00,0x00, -0x0b,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x45,0x00,0x00,0x00, -0x0d,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,0x41,0x00,0x06,0x00, -0x53,0x00,0x00,0x00,0x0e,0x01,0x00,0x00,0x7f,0x00,0x00,0x00, -0x51,0x00,0x00,0x00,0x03,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0x0e,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x10,0x01,0x00,0x00,0x41,0x00,0x00,0x00, -0xaf,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x11,0x01,0x00,0x00,0x02,0x01,0x00,0x00,0x2d,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x12,0x01,0x00,0x00, -0x40,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0xc2,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x13,0x01,0x00,0x00,0x64,0x00,0x00,0x00, -0x12,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x14,0x01,0x00,0x00,0x13,0x01,0x00,0x00,0x4a,0x00,0x00,0x00, -0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x15,0x01,0x00,0x00, -0x11,0x01,0x00,0x00,0x14,0x01,0x00,0x00,0x70,0x00,0x04,0x00, -0x42,0x00,0x00,0x00,0x16,0x01,0x00,0x00,0x15,0x01,0x00,0x00, -0x83,0x00,0x05,0x00,0x42,0x00,0x00,0x00,0x17,0x01,0x00,0x00, -0x16,0x01,0x00,0x00,0x8f,0x00,0x00,0x00,0x85,0x00,0x05,0x00, -0x42,0x00,0x00,0x00,0x18,0x01,0x00,0x00,0x56,0x00,0x00,0x00, -0x17,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x45,0x00,0x00,0x00, -0x19,0x01,0x00,0x00,0x18,0x01,0x00,0x00,0x41,0x00,0x06,0x00, -0x53,0x00,0x00,0x00,0x1a,0x01,0x00,0x00,0x7f,0x00,0x00,0x00, -0x51,0x00,0x00,0x00,0x10,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0x1a,0x01,0x00,0x00,0x19,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x22,0x01,0x00,0x00,0x40,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x78,0x00,0x00,0x00, -0x23,0x01,0x00,0x00,0x50,0x00,0x00,0x00,0x51,0x00,0x00,0x00, -0x27,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x22,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0x49,0x00,0x00,0x00,0x24,0x01,0x00,0x00, -0x23,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x25,0x01,0x00,0x00,0x24,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x26,0x01,0x00,0x00,0x41,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x28,0x01,0x00,0x00,0x25,0x01,0x00,0x00,0x86,0x00,0x00,0x00, -0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x29,0x01,0x00,0x00, -0x64,0x00,0x00,0x00,0x22,0x01,0x00,0x00,0xc4,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x2a,0x01,0x00,0x00,0x29,0x01,0x00,0x00, -0x2d,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x2b,0x01,0x00,0x00,0x2a,0x01,0x00,0x00,0x4a,0x00,0x00,0x00, -0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2c,0x01,0x00,0x00, -0x28,0x01,0x00,0x00,0x2b,0x01,0x00,0x00,0x70,0x00,0x04,0x00, -0x42,0x00,0x00,0x00,0x2d,0x01,0x00,0x00,0x2c,0x01,0x00,0x00, -0x83,0x00,0x05,0x00,0x42,0x00,0x00,0x00,0x2e,0x01,0x00,0x00, -0x2d,0x01,0x00,0x00,0x8f,0x00,0x00,0x00,0x85,0x00,0x05,0x00, -0x42,0x00,0x00,0x00,0x2f,0x01,0x00,0x00,0x56,0x00,0x00,0x00, -0x2e,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x45,0x00,0x00,0x00, -0x30,0x01,0x00,0x00,0x2f,0x01,0x00,0x00,0x41,0x00,0x06,0x00, -0x53,0x00,0x00,0x00,0x31,0x01,0x00,0x00,0x7f,0x00,0x00,0x00, -0x51,0x00,0x00,0x00,0x26,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0x31,0x01,0x00,0x00,0x30,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x33,0x01,0x00,0x00,0x41,0x00,0x00,0x00, -0xb0,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x34,0x01,0x00,0x00,0x25,0x01,0x00,0x00,0x2d,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x35,0x01,0x00,0x00, -0x40,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0xc2,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x36,0x01,0x00,0x00,0x64,0x00,0x00,0x00, -0x35,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x37,0x01,0x00,0x00,0x36,0x01,0x00,0x00,0x4a,0x00,0x00,0x00, -0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x38,0x01,0x00,0x00, -0x34,0x01,0x00,0x00,0x37,0x01,0x00,0x00,0x70,0x00,0x04,0x00, -0x42,0x00,0x00,0x00,0x39,0x01,0x00,0x00,0x38,0x01,0x00,0x00, -0x83,0x00,0x05,0x00,0x42,0x00,0x00,0x00,0x3a,0x01,0x00,0x00, -0x39,0x01,0x00,0x00,0x8f,0x00,0x00,0x00,0x85,0x00,0x05,0x00, -0x42,0x00,0x00,0x00,0x3b,0x01,0x00,0x00,0x56,0x00,0x00,0x00, -0x3a,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x45,0x00,0x00,0x00, -0x3c,0x01,0x00,0x00,0x3b,0x01,0x00,0x00,0x41,0x00,0x06,0x00, -0x53,0x00,0x00,0x00,0x3d,0x01,0x00,0x00,0x7f,0x00,0x00,0x00, -0x51,0x00,0x00,0x00,0x33,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0x3d,0x01,0x00,0x00,0x3c,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x45,0x01,0x00,0x00,0x40,0x00,0x00,0x00, -0xb1,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x78,0x00,0x00,0x00, -0x46,0x01,0x00,0x00,0x50,0x00,0x00,0x00,0x51,0x00,0x00,0x00, -0x27,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x45,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0x49,0x00,0x00,0x00,0x47,0x01,0x00,0x00, -0x46,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x48,0x01,0x00,0x00,0x47,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x49,0x01,0x00,0x00,0x41,0x00,0x00,0x00, -0xb1,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x4b,0x01,0x00,0x00,0x48,0x01,0x00,0x00,0x86,0x00,0x00,0x00, -0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4c,0x01,0x00,0x00, -0x64,0x00,0x00,0x00,0x45,0x01,0x00,0x00,0xc4,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x4d,0x01,0x00,0x00,0x4c,0x01,0x00,0x00, -0x2d,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x4e,0x01,0x00,0x00,0x4d,0x01,0x00,0x00,0x4a,0x00,0x00,0x00, -0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4f,0x01,0x00,0x00, -0x4b,0x01,0x00,0x00,0x4e,0x01,0x00,0x00,0x70,0x00,0x04,0x00, -0x42,0x00,0x00,0x00,0x50,0x01,0x00,0x00,0x4f,0x01,0x00,0x00, -0x83,0x00,0x05,0x00,0x42,0x00,0x00,0x00,0x51,0x01,0x00,0x00, -0x50,0x01,0x00,0x00,0x8f,0x00,0x00,0x00,0x85,0x00,0x05,0x00, -0x42,0x00,0x00,0x00,0x52,0x01,0x00,0x00,0x56,0x00,0x00,0x00, -0x51,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x45,0x00,0x00,0x00, -0x53,0x01,0x00,0x00,0x52,0x01,0x00,0x00,0x41,0x00,0x06,0x00, -0x53,0x00,0x00,0x00,0x54,0x01,0x00,0x00,0x7f,0x00,0x00,0x00, -0x51,0x00,0x00,0x00,0x49,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0x54,0x01,0x00,0x00,0x53,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x56,0x01,0x00,0x00,0x41,0x00,0x00,0x00, -0xb2,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x57,0x01,0x00,0x00,0x48,0x01,0x00,0x00,0x2d,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x58,0x01,0x00,0x00, -0x40,0x00,0x00,0x00,0xaa,0x01,0x00,0x00,0xc2,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x59,0x01,0x00,0x00,0x64,0x00,0x00,0x00, -0x58,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x5a,0x01,0x00,0x00,0x59,0x01,0x00,0x00,0x4a,0x00,0x00,0x00, -0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5b,0x01,0x00,0x00, -0x57,0x01,0x00,0x00,0x5a,0x01,0x00,0x00,0x70,0x00,0x04,0x00, -0x42,0x00,0x00,0x00,0x5c,0x01,0x00,0x00,0x5b,0x01,0x00,0x00, -0x83,0x00,0x05,0x00,0x42,0x00,0x00,0x00,0x5d,0x01,0x00,0x00, -0x5c,0x01,0x00,0x00,0x8f,0x00,0x00,0x00,0x85,0x00,0x05,0x00, -0x42,0x00,0x00,0x00,0x5e,0x01,0x00,0x00,0x56,0x00,0x00,0x00, -0x5d,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x45,0x00,0x00,0x00, -0x5f,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,0x41,0x00,0x06,0x00, -0x53,0x00,0x00,0x00,0x60,0x01,0x00,0x00,0x7f,0x00,0x00,0x00, -0x51,0x00,0x00,0x00,0x56,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0x60,0x01,0x00,0x00,0x5f,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x68,0x01,0x00,0x00,0x40,0x00,0x00,0x00, -0xb3,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x78,0x00,0x00,0x00, -0x69,0x01,0x00,0x00,0x50,0x00,0x00,0x00,0x51,0x00,0x00,0x00, -0x27,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x68,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0x49,0x00,0x00,0x00,0x6a,0x01,0x00,0x00, -0x69,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x6b,0x01,0x00,0x00,0x6a,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x6c,0x01,0x00,0x00,0x41,0x00,0x00,0x00, -0xb3,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x6e,0x01,0x00,0x00,0x6b,0x01,0x00,0x00,0x86,0x00,0x00,0x00, -0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6f,0x01,0x00,0x00, -0x64,0x00,0x00,0x00,0x68,0x01,0x00,0x00,0xc4,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x70,0x01,0x00,0x00,0x6f,0x01,0x00,0x00, -0x2d,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x71,0x01,0x00,0x00,0x70,0x01,0x00,0x00,0x4a,0x00,0x00,0x00, -0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x72,0x01,0x00,0x00, -0x6e,0x01,0x00,0x00,0x71,0x01,0x00,0x00,0x70,0x00,0x04,0x00, -0x42,0x00,0x00,0x00,0x73,0x01,0x00,0x00,0x72,0x01,0x00,0x00, -0x83,0x00,0x05,0x00,0x42,0x00,0x00,0x00,0x74,0x01,0x00,0x00, -0x73,0x01,0x00,0x00,0x8f,0x00,0x00,0x00,0x85,0x00,0x05,0x00, -0x42,0x00,0x00,0x00,0x75,0x01,0x00,0x00,0x56,0x00,0x00,0x00, -0x74,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x45,0x00,0x00,0x00, -0x76,0x01,0x00,0x00,0x75,0x01,0x00,0x00,0x41,0x00,0x06,0x00, -0x53,0x00,0x00,0x00,0x77,0x01,0x00,0x00,0x7f,0x00,0x00,0x00, -0x51,0x00,0x00,0x00,0x6c,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0x77,0x01,0x00,0x00,0x76,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x79,0x01,0x00,0x00,0x41,0x00,0x00,0x00, -0xb4,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x7a,0x01,0x00,0x00,0x6b,0x01,0x00,0x00,0x2d,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7b,0x01,0x00,0x00, -0x40,0x00,0x00,0x00,0xac,0x01,0x00,0x00,0xc2,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x7c,0x01,0x00,0x00,0x64,0x00,0x00,0x00, -0x7b,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x7d,0x01,0x00,0x00,0x7c,0x01,0x00,0x00,0x4a,0x00,0x00,0x00, -0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7e,0x01,0x00,0x00, -0x7a,0x01,0x00,0x00,0x7d,0x01,0x00,0x00,0x70,0x00,0x04,0x00, -0x42,0x00,0x00,0x00,0x7f,0x01,0x00,0x00,0x7e,0x01,0x00,0x00, -0x83,0x00,0x05,0x00,0x42,0x00,0x00,0x00,0x80,0x01,0x00,0x00, -0x7f,0x01,0x00,0x00,0x8f,0x00,0x00,0x00,0x85,0x00,0x05,0x00, -0x42,0x00,0x00,0x00,0x81,0x01,0x00,0x00,0x56,0x00,0x00,0x00, -0x80,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x45,0x00,0x00,0x00, -0x82,0x01,0x00,0x00,0x81,0x01,0x00,0x00,0x41,0x00,0x06,0x00, -0x53,0x00,0x00,0x00,0x83,0x01,0x00,0x00,0x7f,0x00,0x00,0x00, -0x51,0x00,0x00,0x00,0x79,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0x83,0x01,0x00,0x00,0x82,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x8b,0x01,0x00,0x00,0x40,0x00,0x00,0x00, -0xb5,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x78,0x00,0x00,0x00, -0x8c,0x01,0x00,0x00,0x50,0x00,0x00,0x00,0x51,0x00,0x00,0x00, -0x27,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x8b,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0x49,0x00,0x00,0x00,0x8d,0x01,0x00,0x00, -0x8c,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x8e,0x01,0x00,0x00,0x8d,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x8f,0x01,0x00,0x00,0x41,0x00,0x00,0x00, -0xb5,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x91,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,0x86,0x00,0x00,0x00, -0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x92,0x01,0x00,0x00, -0x64,0x00,0x00,0x00,0x8b,0x01,0x00,0x00,0xc4,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x93,0x01,0x00,0x00,0x92,0x01,0x00,0x00, -0x2d,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x94,0x01,0x00,0x00,0x93,0x01,0x00,0x00,0x4a,0x00,0x00,0x00, -0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x95,0x01,0x00,0x00, -0x91,0x01,0x00,0x00,0x94,0x01,0x00,0x00,0x70,0x00,0x04,0x00, -0x42,0x00,0x00,0x00,0x96,0x01,0x00,0x00,0x95,0x01,0x00,0x00, -0x83,0x00,0x05,0x00,0x42,0x00,0x00,0x00,0x97,0x01,0x00,0x00, -0x96,0x01,0x00,0x00,0x8f,0x00,0x00,0x00,0x85,0x00,0x05,0x00, -0x42,0x00,0x00,0x00,0x98,0x01,0x00,0x00,0x56,0x00,0x00,0x00, -0x97,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x45,0x00,0x00,0x00, -0x99,0x01,0x00,0x00,0x98,0x01,0x00,0x00,0x41,0x00,0x06,0x00, -0x53,0x00,0x00,0x00,0x9a,0x01,0x00,0x00,0x7f,0x00,0x00,0x00, -0x51,0x00,0x00,0x00,0x8f,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0x9a,0x01,0x00,0x00,0x99,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9c,0x01,0x00,0x00,0x41,0x00,0x00,0x00, -0xb6,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9d,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,0x2d,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9e,0x01,0x00,0x00, -0x40,0x00,0x00,0x00,0xaf,0x01,0x00,0x00,0xc2,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9f,0x01,0x00,0x00,0x64,0x00,0x00,0x00, -0x9e,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa0,0x01,0x00,0x00,0x9f,0x01,0x00,0x00,0x4a,0x00,0x00,0x00, -0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa1,0x01,0x00,0x00, -0x9d,0x01,0x00,0x00,0xa0,0x01,0x00,0x00,0x70,0x00,0x04,0x00, -0x42,0x00,0x00,0x00,0xa2,0x01,0x00,0x00,0xa1,0x01,0x00,0x00, -0x83,0x00,0x05,0x00,0x42,0x00,0x00,0x00,0xa3,0x01,0x00,0x00, -0xa2,0x01,0x00,0x00,0x8f,0x00,0x00,0x00,0x85,0x00,0x05,0x00, -0x42,0x00,0x00,0x00,0xa4,0x01,0x00,0x00,0x56,0x00,0x00,0x00, -0xa3,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x45,0x00,0x00,0x00, -0xa5,0x01,0x00,0x00,0xa4,0x01,0x00,0x00,0x41,0x00,0x06,0x00, -0x53,0x00,0x00,0x00,0xa6,0x01,0x00,0x00,0x7f,0x00,0x00,0x00, -0x51,0x00,0x00,0x00,0x9c,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0xa6,0x01,0x00,0x00,0xa5,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xac,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xac,0x00,0x00,0x00, -0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00, -}; -const uint64_t dequant_q5_0_len = 6644; - -unsigned char dequant_q5_1_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0xb4,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00, -0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00, -0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64, -0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00, -0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0f,0x00,0x0a,0x00, -0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e, -0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x2b,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x7a,0x00,0x00,0x00, -0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00, -0x00,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x12,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x29,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x29,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x29,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x29,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x29,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0x29,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x48,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x49,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x49,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x49,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x49,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x4a,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x4b,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x4b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x4b,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x4d,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x4d,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x77,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x78,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x78,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x7a,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x7a,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xa7,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x19,0x00,0x00,0x00,0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00, -0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x1e,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x1e,0x00,0x07,0x00,0x29,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x2a,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x29,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x2a,0x00,0x00,0x00,0x2b,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x2c,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x2c,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x2e,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x14,0x00,0x02,0x00,0x32,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x38,0x00,0x00,0x00, -0x00,0x04,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x3e,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x16,0x00,0x03,0x00, -0x42,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x16,0x00,0x03,0x00, -0x45,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x15,0x00,0x04,0x00, -0x46,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x47,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x48,0x00,0x00,0x00, -0x46,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0x1e,0x00,0x06,0x00, -0x49,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x45,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x1d,0x00,0x03,0x00, -0x4a,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x1e,0x00,0x03,0x00, -0x4b,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x4c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x4b,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x4c,0x00,0x00,0x00,0x4d,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x2c,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x50,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x45,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x2c,0x00,0x00,0x00,0x56,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x2c,0x00,0x00,0x00, -0x5c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x5d,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x2c,0x00,0x00,0x00,0x71,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x73,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x46,0x00,0x00,0x00,0x1d,0x00,0x03,0x00, -0x77,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x1e,0x00,0x03,0x00, -0x78,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x79,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x78,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x79,0x00,0x00,0x00,0x7a,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x81,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa5,0x00,0x00,0x00, -0x00,0x01,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xa6,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2c,0x00,0x06,0x00, -0x09,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0xa5,0x00,0x00,0x00, -0xa6,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xa6,0x01,0x00,0x00,0x11,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa7,0x01,0x00,0x00, -0x0d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xa8,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xa9,0x01,0x00,0x00,0x12,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xaa,0x01,0x00,0x00, -0x0e,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xab,0x01,0x00,0x00,0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xac,0x01,0x00,0x00,0x13,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xad,0x01,0x00,0x00, -0x14,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xae,0x01,0x00,0x00,0x05,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xaf,0x01,0x00,0x00,0x15,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb0,0x01,0x00,0x00, -0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xb1,0x01,0x00,0x00,0x16,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xb2,0x01,0x00,0x00,0x07,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb3,0x01,0x00,0x00, -0x17,0x00,0x00,0x00,0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,0xf7,0x00,0x03,0x00, -0xa8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfb,0x00,0x03,0x00, -0x0c,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xa9,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x0e,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x13,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x13,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x16,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x11,0x00,0x00,0x00, -0x16,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x1b,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x15,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1f,0x00,0x00,0x00, -0x1b,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x1b,0x00,0x00,0x00, -0x1e,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x25,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x17,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x27,0x00,0x00,0x00, -0x25,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x2e,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x2b,0x00,0x00,0x00, -0x2d,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x30,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x30,0x00,0x00,0x00, -0x1e,0x00,0x00,0x00,0xae,0x00,0x05,0x00,0x32,0x00,0x00,0x00, -0x33,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x31,0x00,0x00,0x00, -0xf7,0x00,0x03,0x00,0x35,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x33,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x35,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x34,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xa8,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x35,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x3a,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x17,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3c,0x00,0x00,0x00, -0x1e,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00, -0x3c,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x1f,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x41,0x00,0x00,0x00, -0x3d,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x41,0x00,0x07,0x00, -0x50,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x4d,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x45,0x00,0x00,0x00,0x52,0x00,0x00,0x00, -0x51,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x42,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x52,0x00,0x00,0x00,0x41,0x00,0x07,0x00, -0x50,0x00,0x00,0x00,0x57,0x00,0x00,0x00,0x4d,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x56,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x45,0x00,0x00,0x00,0x58,0x00,0x00,0x00, -0x57,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x42,0x00,0x00,0x00, -0x59,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x41,0x00,0x07,0x00, -0x5d,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x4d,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x5c,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x5f,0x00,0x00,0x00, -0x5e,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x73,0x00,0x00,0x00, -0x74,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x27,0x00,0x00,0x00,0x71,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x46,0x00,0x00,0x00,0x75,0x00,0x00,0x00, -0x74,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x76,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0xc7,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x76,0x00,0x00,0x00, -0x81,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x85,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0xc4,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x85,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0xc7,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x47,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x88,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x87,0x00,0x00,0x00, -0x70,0x00,0x04,0x00,0x42,0x00,0x00,0x00,0x89,0x00,0x00,0x00, -0x88,0x00,0x00,0x00,0x0c,0x00,0x08,0x00,0x42,0x00,0x00,0x00, -0x8c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x59,0x00,0x00,0x00, -0x73,0x00,0x04,0x00,0x45,0x00,0x00,0x00,0x8d,0x00,0x00,0x00, -0x8c,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x50,0x00,0x00,0x00, -0x8e,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x41,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0x8e,0x00,0x00,0x00, -0x8d,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x92,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x47,0x00,0x00,0x00, -0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x95,0x00,0x00,0x00, -0x76,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x98,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9a,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,0x99,0x00,0x00,0x00, -0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9b,0x00,0x00,0x00, -0x9a,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0xc5,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0x95,0x00,0x00,0x00, -0x9b,0x00,0x00,0x00,0x70,0x00,0x04,0x00,0x42,0x00,0x00,0x00, -0x9d,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0x0c,0x00,0x08,0x00, -0x42,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x9d,0x00,0x00,0x00, -0x59,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x45,0x00,0x00,0x00, -0xa1,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0x41,0x00,0x06,0x00, -0x50,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x7a,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x3e,0x00,0x03,0x00, -0xa2,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0xa6,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x73,0x00,0x00,0x00, -0xb6,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x27,0x00,0x00,0x00,0x71,0x00,0x00,0x00,0xb5,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x46,0x00,0x00,0x00,0xb7,0x00,0x00,0x00, -0xb6,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xb8,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x41,0x00,0x00,0x00, -0xa6,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xbb,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x81,0x00,0x00,0x00, -0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbc,0x00,0x00,0x00, -0x5f,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,0xc4,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0xbc,0x00,0x00,0x00, -0x2d,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xbe,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x47,0x00,0x00,0x00, -0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbf,0x00,0x00,0x00, -0xbb,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x70,0x00,0x04,0x00, -0x42,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0xbf,0x00,0x00,0x00, -0x0c,0x00,0x08,0x00,0x42,0x00,0x00,0x00,0xc2,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0xc0,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x73,0x00,0x04,0x00, -0x45,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0xc2,0x00,0x00,0x00, -0x41,0x00,0x06,0x00,0x50,0x00,0x00,0x00,0xc4,0x00,0x00,0x00, -0x7a,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0xb9,0x00,0x00,0x00, -0x3e,0x00,0x03,0x00,0xc4,0x00,0x00,0x00,0xc3,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00, -0x41,0x00,0x00,0x00,0xa6,0x01,0x00,0x00,0xc2,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0xb8,0x00,0x00,0x00, -0x2d,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xc8,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0xa7,0x01,0x00,0x00, -0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc9,0x00,0x00,0x00, -0x5f,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0xc7,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0xc9,0x00,0x00,0x00, -0x47,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xcb,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0xca,0x00,0x00,0x00, -0x70,0x00,0x04,0x00,0x42,0x00,0x00,0x00,0xcc,0x00,0x00,0x00, -0xcb,0x00,0x00,0x00,0x0c,0x00,0x08,0x00,0x42,0x00,0x00,0x00, -0xce,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x59,0x00,0x00,0x00, -0x73,0x00,0x04,0x00,0x45,0x00,0x00,0x00,0xcf,0x00,0x00,0x00, -0xce,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x50,0x00,0x00,0x00, -0xd0,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0xc6,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0xd0,0x00,0x00,0x00, -0xcf,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd8,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0xa8,0x01,0x00,0x00, -0x41,0x00,0x08,0x00,0x73,0x00,0x00,0x00,0xd9,0x00,0x00,0x00, -0x4d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x27,0x00,0x00,0x00, -0x71,0x00,0x00,0x00,0xd8,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x46,0x00,0x00,0x00,0xda,0x00,0x00,0x00,0xd9,0x00,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xdb,0x00,0x00,0x00, -0xda,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xdc,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0xa8,0x01,0x00,0x00, -0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xde,0x00,0x00,0x00, -0xdb,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0xc2,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0x5f,0x00,0x00,0x00, -0xd8,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xe0,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0x2d,0x00,0x00,0x00, -0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe1,0x00,0x00,0x00, -0xe0,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0xc5,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xe2,0x00,0x00,0x00,0xde,0x00,0x00,0x00, -0xe1,0x00,0x00,0x00,0x70,0x00,0x04,0x00,0x42,0x00,0x00,0x00, -0xe3,0x00,0x00,0x00,0xe2,0x00,0x00,0x00,0x0c,0x00,0x08,0x00, -0x42,0x00,0x00,0x00,0xe5,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0xe3,0x00,0x00,0x00, -0x59,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x45,0x00,0x00,0x00, -0xe6,0x00,0x00,0x00,0xe5,0x00,0x00,0x00,0x41,0x00,0x06,0x00, -0x50,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,0x7a,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,0x3e,0x00,0x03,0x00, -0xe7,0x00,0x00,0x00,0xe6,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xe9,0x00,0x00,0x00,0x41,0x00,0x00,0x00, -0xa9,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xea,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,0x2d,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xeb,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0xaa,0x01,0x00,0x00,0xc2,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xec,0x00,0x00,0x00,0x5f,0x00,0x00,0x00, -0xeb,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xed,0x00,0x00,0x00,0xec,0x00,0x00,0x00,0x47,0x00,0x00,0x00, -0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xee,0x00,0x00,0x00, -0xea,0x00,0x00,0x00,0xed,0x00,0x00,0x00,0x70,0x00,0x04,0x00, -0x42,0x00,0x00,0x00,0xef,0x00,0x00,0x00,0xee,0x00,0x00,0x00, -0x0c,0x00,0x08,0x00,0x42,0x00,0x00,0x00,0xf1,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0xef,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x73,0x00,0x04,0x00, -0x45,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,0xf1,0x00,0x00,0x00, -0x41,0x00,0x06,0x00,0x50,0x00,0x00,0x00,0xf3,0x00,0x00,0x00, -0x7a,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0xe9,0x00,0x00,0x00, -0x3e,0x00,0x03,0x00,0xf3,0x00,0x00,0x00,0xf2,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfb,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0xab,0x01,0x00,0x00,0x41,0x00,0x08,0x00, -0x73,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x4d,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x71,0x00,0x00,0x00, -0xfb,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x46,0x00,0x00,0x00, -0xfd,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0xfd,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xff,0x00,0x00,0x00, -0x41,0x00,0x00,0x00,0xab,0x01,0x00,0x00,0xc7,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0xfe,0x00,0x00,0x00, -0x81,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x02,0x01,0x00,0x00,0x5f,0x00,0x00,0x00,0xfb,0x00,0x00,0x00, -0xc4,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x03,0x01,0x00,0x00, -0x02,0x01,0x00,0x00,0x2d,0x00,0x00,0x00,0xc7,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x04,0x01,0x00,0x00,0x03,0x01,0x00,0x00, -0x47,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x05,0x01,0x00,0x00,0x01,0x01,0x00,0x00,0x04,0x01,0x00,0x00, -0x70,0x00,0x04,0x00,0x42,0x00,0x00,0x00,0x06,0x01,0x00,0x00, -0x05,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,0x42,0x00,0x00,0x00, -0x08,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x06,0x01,0x00,0x00,0x59,0x00,0x00,0x00, -0x73,0x00,0x04,0x00,0x45,0x00,0x00,0x00,0x09,0x01,0x00,0x00, -0x08,0x01,0x00,0x00,0x41,0x00,0x06,0x00,0x50,0x00,0x00,0x00, -0x0a,0x01,0x00,0x00,0x7a,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0xff,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0x0a,0x01,0x00,0x00, -0x09,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x0c,0x01,0x00,0x00,0x41,0x00,0x00,0x00,0xac,0x01,0x00,0x00, -0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0d,0x01,0x00,0x00, -0xfe,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x0e,0x01,0x00,0x00,0x40,0x00,0x00,0x00, -0x81,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x0f,0x01,0x00,0x00,0x5f,0x00,0x00,0x00,0x0e,0x01,0x00,0x00, -0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x10,0x01,0x00,0x00, -0x0f,0x01,0x00,0x00,0x47,0x00,0x00,0x00,0xc5,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x11,0x01,0x00,0x00,0x0d,0x01,0x00,0x00, -0x10,0x01,0x00,0x00,0x70,0x00,0x04,0x00,0x42,0x00,0x00,0x00, -0x12,0x01,0x00,0x00,0x11,0x01,0x00,0x00,0x0c,0x00,0x08,0x00, -0x42,0x00,0x00,0x00,0x14,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x12,0x01,0x00,0x00, -0x59,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x45,0x00,0x00,0x00, -0x15,0x01,0x00,0x00,0x14,0x01,0x00,0x00,0x41,0x00,0x06,0x00, -0x50,0x00,0x00,0x00,0x16,0x01,0x00,0x00,0x7a,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x0c,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0x16,0x01,0x00,0x00,0x15,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x1e,0x01,0x00,0x00,0x40,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x73,0x00,0x00,0x00, -0x1f,0x01,0x00,0x00,0x4d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x27,0x00,0x00,0x00,0x71,0x00,0x00,0x00,0x1e,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0x46,0x00,0x00,0x00,0x20,0x01,0x00,0x00, -0x1f,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x21,0x01,0x00,0x00,0x20,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x22,0x01,0x00,0x00,0x41,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x24,0x01,0x00,0x00,0x21,0x01,0x00,0x00,0x81,0x00,0x00,0x00, -0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x25,0x01,0x00,0x00, -0x5f,0x00,0x00,0x00,0x1e,0x01,0x00,0x00,0xc4,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x26,0x01,0x00,0x00,0x25,0x01,0x00,0x00, -0x2d,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x27,0x01,0x00,0x00,0x26,0x01,0x00,0x00,0x47,0x00,0x00,0x00, -0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x28,0x01,0x00,0x00, -0x24,0x01,0x00,0x00,0x27,0x01,0x00,0x00,0x70,0x00,0x04,0x00, -0x42,0x00,0x00,0x00,0x29,0x01,0x00,0x00,0x28,0x01,0x00,0x00, -0x0c,0x00,0x08,0x00,0x42,0x00,0x00,0x00,0x2b,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0x29,0x01,0x00,0x00,0x59,0x00,0x00,0x00,0x73,0x00,0x04,0x00, -0x45,0x00,0x00,0x00,0x2c,0x01,0x00,0x00,0x2b,0x01,0x00,0x00, -0x41,0x00,0x06,0x00,0x50,0x00,0x00,0x00,0x2d,0x01,0x00,0x00, -0x7a,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x22,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0x2d,0x01,0x00,0x00,0x2c,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2f,0x01,0x00,0x00, -0x41,0x00,0x00,0x00,0xad,0x01,0x00,0x00,0xc2,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x30,0x01,0x00,0x00,0x21,0x01,0x00,0x00, -0x2d,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x31,0x01,0x00,0x00,0x40,0x00,0x00,0x00,0x47,0x00,0x00,0x00, -0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x32,0x01,0x00,0x00, -0x5f,0x00,0x00,0x00,0x31,0x01,0x00,0x00,0xc7,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x33,0x01,0x00,0x00,0x32,0x01,0x00,0x00, -0x47,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x34,0x01,0x00,0x00,0x30,0x01,0x00,0x00,0x33,0x01,0x00,0x00, -0x70,0x00,0x04,0x00,0x42,0x00,0x00,0x00,0x35,0x01,0x00,0x00, -0x34,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,0x42,0x00,0x00,0x00, -0x37,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x35,0x01,0x00,0x00,0x59,0x00,0x00,0x00, -0x73,0x00,0x04,0x00,0x45,0x00,0x00,0x00,0x38,0x01,0x00,0x00, -0x37,0x01,0x00,0x00,0x41,0x00,0x06,0x00,0x50,0x00,0x00,0x00, -0x39,0x01,0x00,0x00,0x7a,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x2f,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x39,0x01,0x00,0x00, -0x38,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x41,0x01,0x00,0x00,0x40,0x00,0x00,0x00,0xae,0x01,0x00,0x00, -0x41,0x00,0x08,0x00,0x73,0x00,0x00,0x00,0x42,0x01,0x00,0x00, -0x4d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x27,0x00,0x00,0x00, -0x71,0x00,0x00,0x00,0x41,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0x46,0x00,0x00,0x00,0x43,0x01,0x00,0x00,0x42,0x01,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x44,0x01,0x00,0x00, -0x43,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x45,0x01,0x00,0x00,0x41,0x00,0x00,0x00,0xae,0x01,0x00,0x00, -0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x47,0x01,0x00,0x00, -0x44,0x01,0x00,0x00,0x81,0x00,0x00,0x00,0xc2,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x48,0x01,0x00,0x00,0x5f,0x00,0x00,0x00, -0x41,0x01,0x00,0x00,0xc4,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x49,0x01,0x00,0x00,0x48,0x01,0x00,0x00,0x2d,0x00,0x00,0x00, -0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4a,0x01,0x00,0x00, -0x49,0x01,0x00,0x00,0x47,0x00,0x00,0x00,0xc5,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x4b,0x01,0x00,0x00,0x47,0x01,0x00,0x00, -0x4a,0x01,0x00,0x00,0x70,0x00,0x04,0x00,0x42,0x00,0x00,0x00, -0x4c,0x01,0x00,0x00,0x4b,0x01,0x00,0x00,0x0c,0x00,0x08,0x00, -0x42,0x00,0x00,0x00,0x4e,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x4c,0x01,0x00,0x00, -0x59,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x45,0x00,0x00,0x00, -0x4f,0x01,0x00,0x00,0x4e,0x01,0x00,0x00,0x41,0x00,0x06,0x00, -0x50,0x00,0x00,0x00,0x50,0x01,0x00,0x00,0x7a,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x45,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0x50,0x01,0x00,0x00,0x4f,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x52,0x01,0x00,0x00,0x41,0x00,0x00,0x00, -0xaf,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x53,0x01,0x00,0x00,0x44,0x01,0x00,0x00,0x2d,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x54,0x01,0x00,0x00, -0x40,0x00,0x00,0x00,0xa6,0x01,0x00,0x00,0xc2,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x55,0x01,0x00,0x00,0x5f,0x00,0x00,0x00, -0x54,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x56,0x01,0x00,0x00,0x55,0x01,0x00,0x00,0x47,0x00,0x00,0x00, -0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x57,0x01,0x00,0x00, -0x53,0x01,0x00,0x00,0x56,0x01,0x00,0x00,0x70,0x00,0x04,0x00, -0x42,0x00,0x00,0x00,0x58,0x01,0x00,0x00,0x57,0x01,0x00,0x00, -0x0c,0x00,0x08,0x00,0x42,0x00,0x00,0x00,0x5a,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0x58,0x01,0x00,0x00,0x59,0x00,0x00,0x00,0x73,0x00,0x04,0x00, -0x45,0x00,0x00,0x00,0x5b,0x01,0x00,0x00,0x5a,0x01,0x00,0x00, -0x41,0x00,0x06,0x00,0x50,0x00,0x00,0x00,0x5c,0x01,0x00,0x00, -0x7a,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x52,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0x5c,0x01,0x00,0x00,0x5b,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x64,0x01,0x00,0x00, -0x40,0x00,0x00,0x00,0xb0,0x01,0x00,0x00,0x41,0x00,0x08,0x00, -0x73,0x00,0x00,0x00,0x65,0x01,0x00,0x00,0x4d,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x71,0x00,0x00,0x00, -0x64,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x46,0x00,0x00,0x00, -0x66,0x01,0x00,0x00,0x65,0x01,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x67,0x01,0x00,0x00,0x66,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x68,0x01,0x00,0x00, -0x41,0x00,0x00,0x00,0xb0,0x01,0x00,0x00,0xc7,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x6a,0x01,0x00,0x00,0x67,0x01,0x00,0x00, -0x81,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x6b,0x01,0x00,0x00,0x5f,0x00,0x00,0x00,0x64,0x01,0x00,0x00, -0xc4,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6c,0x01,0x00,0x00, -0x6b,0x01,0x00,0x00,0x2d,0x00,0x00,0x00,0xc7,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x6d,0x01,0x00,0x00,0x6c,0x01,0x00,0x00, -0x47,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x6e,0x01,0x00,0x00,0x6a,0x01,0x00,0x00,0x6d,0x01,0x00,0x00, -0x70,0x00,0x04,0x00,0x42,0x00,0x00,0x00,0x6f,0x01,0x00,0x00, -0x6e,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,0x42,0x00,0x00,0x00, -0x71,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x6f,0x01,0x00,0x00,0x59,0x00,0x00,0x00, -0x73,0x00,0x04,0x00,0x45,0x00,0x00,0x00,0x72,0x01,0x00,0x00, -0x71,0x01,0x00,0x00,0x41,0x00,0x06,0x00,0x50,0x00,0x00,0x00, -0x73,0x01,0x00,0x00,0x7a,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x68,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x73,0x01,0x00,0x00, -0x72,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x75,0x01,0x00,0x00,0x41,0x00,0x00,0x00,0xb1,0x01,0x00,0x00, -0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x76,0x01,0x00,0x00, -0x67,0x01,0x00,0x00,0x2d,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x77,0x01,0x00,0x00,0x40,0x00,0x00,0x00, -0xa9,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x78,0x01,0x00,0x00,0x5f,0x00,0x00,0x00,0x77,0x01,0x00,0x00, -0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x79,0x01,0x00,0x00, -0x78,0x01,0x00,0x00,0x47,0x00,0x00,0x00,0xc5,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x7a,0x01,0x00,0x00,0x76,0x01,0x00,0x00, -0x79,0x01,0x00,0x00,0x70,0x00,0x04,0x00,0x42,0x00,0x00,0x00, -0x7b,0x01,0x00,0x00,0x7a,0x01,0x00,0x00,0x0c,0x00,0x08,0x00, -0x42,0x00,0x00,0x00,0x7d,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x7b,0x01,0x00,0x00, -0x59,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x45,0x00,0x00,0x00, -0x7e,0x01,0x00,0x00,0x7d,0x01,0x00,0x00,0x41,0x00,0x06,0x00, -0x50,0x00,0x00,0x00,0x7f,0x01,0x00,0x00,0x7a,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x75,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0x7f,0x01,0x00,0x00,0x7e,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x87,0x01,0x00,0x00,0x40,0x00,0x00,0x00, -0xb2,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x73,0x00,0x00,0x00, -0x88,0x01,0x00,0x00,0x4d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x27,0x00,0x00,0x00,0x71,0x00,0x00,0x00,0x87,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0x46,0x00,0x00,0x00,0x89,0x01,0x00,0x00, -0x88,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x8a,0x01,0x00,0x00,0x89,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x8b,0x01,0x00,0x00,0x41,0x00,0x00,0x00, -0xb2,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x8d,0x01,0x00,0x00,0x8a,0x01,0x00,0x00,0x81,0x00,0x00,0x00, -0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8e,0x01,0x00,0x00, -0x5f,0x00,0x00,0x00,0x87,0x01,0x00,0x00,0xc4,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x8f,0x01,0x00,0x00,0x8e,0x01,0x00,0x00, -0x2d,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x90,0x01,0x00,0x00,0x8f,0x01,0x00,0x00,0x47,0x00,0x00,0x00, -0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x91,0x01,0x00,0x00, -0x8d,0x01,0x00,0x00,0x90,0x01,0x00,0x00,0x70,0x00,0x04,0x00, -0x42,0x00,0x00,0x00,0x92,0x01,0x00,0x00,0x91,0x01,0x00,0x00, -0x0c,0x00,0x08,0x00,0x42,0x00,0x00,0x00,0x94,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0x92,0x01,0x00,0x00,0x59,0x00,0x00,0x00,0x73,0x00,0x04,0x00, -0x45,0x00,0x00,0x00,0x95,0x01,0x00,0x00,0x94,0x01,0x00,0x00, -0x41,0x00,0x06,0x00,0x50,0x00,0x00,0x00,0x96,0x01,0x00,0x00, -0x7a,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x8b,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0x96,0x01,0x00,0x00,0x95,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x98,0x01,0x00,0x00, -0x41,0x00,0x00,0x00,0xb3,0x01,0x00,0x00,0xc2,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x99,0x01,0x00,0x00,0x8a,0x01,0x00,0x00, -0x2d,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9a,0x01,0x00,0x00,0x40,0x00,0x00,0x00,0xac,0x01,0x00,0x00, -0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9b,0x01,0x00,0x00, -0x5f,0x00,0x00,0x00,0x9a,0x01,0x00,0x00,0xc7,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9c,0x01,0x00,0x00,0x9b,0x01,0x00,0x00, -0x47,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9d,0x01,0x00,0x00,0x99,0x01,0x00,0x00,0x9c,0x01,0x00,0x00, -0x70,0x00,0x04,0x00,0x42,0x00,0x00,0x00,0x9e,0x01,0x00,0x00, -0x9d,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,0x42,0x00,0x00,0x00, -0xa0,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x9e,0x01,0x00,0x00,0x59,0x00,0x00,0x00, -0x73,0x00,0x04,0x00,0x45,0x00,0x00,0x00,0xa1,0x01,0x00,0x00, -0xa0,0x01,0x00,0x00,0x41,0x00,0x06,0x00,0x50,0x00,0x00,0x00, -0xa2,0x01,0x00,0x00,0x7a,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x98,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xa2,0x01,0x00,0x00, -0xa1,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xa8,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xa8,0x00,0x00,0x00,0xfd,0x00,0x01,0x00, -0x38,0x00,0x01,0x00, -}; -const uint64_t dequant_q5_1_len = 6412; - -unsigned char dequant_q5_K_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0x9e,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x27,0x00,0x00,0x00, -0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00, -0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00, -0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30, -0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x0f,0x00,0x0a,0x00,0x05,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00, -0x16,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x30,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x11,0x01,0x00,0x00,0x10,0x00,0x06,0x00, -0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x16,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1e,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1e,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1e,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1e,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x1e,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x30,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x45,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x47,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x49,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x4a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x4a,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x4a,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x4a,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x30,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x4b,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0x4c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x4c,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x4c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x4e,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x4e,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0e,0x01,0x00,0x00, -0x06,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0x0f,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x0f,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x0f,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x11,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x11,0x01,0x00,0x00,0x21,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x87,0x01,0x00,0x00, -0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x13,0x00,0x02,0x00, -0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x00,0x01,0x00,0x00,0x14,0x00,0x02,0x00,0x11,0x00,0x00,0x00, -0x17,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x15,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x15,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x1e,0x00,0x07,0x00,0x1e,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x1f,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x1e,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x1f,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x21,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x21,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x23,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00, -0x26,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x15,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x35,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x3b,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x16,0x00,0x03,0x00, -0x3e,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x16,0x00,0x03,0x00, -0x41,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x17,0x00,0x04,0x00, -0x42,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x43,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x44,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x1c,0x00,0x04,0x00, -0x45,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x44,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x46,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x47,0x00,0x00,0x00, -0x43,0x00,0x00,0x00,0x46,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x80,0x00,0x00,0x00, -0x1c,0x00,0x04,0x00,0x49,0x00,0x00,0x00,0x43,0x00,0x00,0x00, -0x48,0x00,0x00,0x00,0x1e,0x00,0x06,0x00,0x4a,0x00,0x00,0x00, -0x42,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x47,0x00,0x00,0x00, -0x49,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x4b,0x00,0x00,0x00, -0x4a,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x4c,0x00,0x00,0x00, -0x4b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x4d,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x4d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x50,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x41,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x56,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x6e,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x76,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x21,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,0x3f,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x7d,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00, -0x93,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x21,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0x9c,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xca,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x1d,0x00,0x03,0x00,0x0e,0x01,0x00,0x00,0x41,0x00,0x00,0x00, -0x1e,0x00,0x03,0x00,0x0f,0x01,0x00,0x00,0x0e,0x01,0x00,0x00, -0x20,0x00,0x04,0x00,0x10,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x0f,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x10,0x01,0x00,0x00, -0x11,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x21,0x00,0x00,0x00,0x15,0x01,0x00,0x00,0x03,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0x1d,0x01,0x00,0x00, -0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00, -0x26,0x01,0x00,0x00,0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x68,0x01,0x00,0x00,0x21,0x00,0x00,0x00, -0x2c,0x00,0x06,0x00,0x14,0x00,0x00,0x00,0x87,0x01,0x00,0x00, -0x5d,0x00,0x00,0x00,0x56,0x00,0x00,0x00,0x56,0x00,0x00,0x00, -0x2a,0x00,0x03,0x00,0x11,0x00,0x00,0x00,0x8a,0x01,0x00,0x00, -0x29,0x00,0x03,0x00,0x11,0x00,0x00,0x00,0x8d,0x01,0x00,0x00, -0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x05,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x88,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0xfb,0x00,0x03,0x00,0x09,0x00,0x00,0x00, -0x89,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x89,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0x0a,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x0a,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x90,0x01,0x00,0x00,0x09,0x00,0x00,0x00,0x89,0x01,0x00,0x00, -0x86,0x01,0x00,0x00,0x0d,0x00,0x00,0x00,0xb0,0x00,0x05,0x00, -0x11,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x90,0x01,0x00,0x00, -0x10,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x0c,0x00,0x00,0x00, -0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x12,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x0b,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x17,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x16,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x19,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x1c,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x90,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0x24,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x23,0x00,0x00,0x00,0x27,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x26,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x27,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x29,0x00,0x00,0x00, -0x25,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x29,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0xae,0x00,0x05,0x00,0x11,0x00,0x00,0x00, -0x2b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x2a,0x00,0x00,0x00, -0xf7,0x00,0x03,0x00,0x2d,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x2b,0x00,0x00,0x00,0x2c,0x00,0x00,0x00, -0x2d,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x2c,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x0c,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x2d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00, -0x31,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x31,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x36,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x35,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x3b,0x00,0x00,0x00, -0x36,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x50,0x00,0x00,0x00, -0x51,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x1c,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x41,0x00,0x00,0x00,0x52,0x00,0x00,0x00, -0x51,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x3e,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x52,0x00,0x00,0x00,0x41,0x00,0x08,0x00, -0x50,0x00,0x00,0x00,0x57,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x56,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x41,0x00,0x00,0x00, -0x58,0x00,0x00,0x00,0x57,0x00,0x00,0x00,0x73,0x00,0x04,0x00, -0x3e,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x58,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5c,0x00,0x00,0x00, -0x1c,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,0x5d,0x00,0x00,0x00, -0x36,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x5c,0x00,0x00,0x00,0x5f,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x3b,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x66,0x00,0x00,0x00,0x46,0x00,0x00,0x00,0x36,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x69,0x00,0x00,0x00, -0x66,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0xb0,0x00,0x05,0x00, -0x11,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x6e,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x71,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x6f,0x00,0x00,0x00, -0x70,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x70,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x76,0x00,0x00,0x00, -0x77,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x1c,0x00,0x00,0x00,0x26,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x43,0x00,0x00,0x00,0x78,0x00,0x00,0x00, -0x77,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x79,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x7c,0x00,0x04,0x00, -0x21,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,0x79,0x00,0x00,0x00, -0xc7,0x00,0x05,0x00,0x21,0x00,0x00,0x00,0x7c,0x00,0x00,0x00, -0x7a,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,0x72,0x00,0x04,0x00, -0x7d,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x7c,0x00,0x00,0x00, -0x7c,0x00,0x04,0x00,0x43,0x00,0x00,0x00,0x7f,0x00,0x00,0x00, -0x7e,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x83,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x6e,0x00,0x00,0x00, -0x41,0x00,0x08,0x00,0x76,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x26,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x43,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x85,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x21,0x00,0x00,0x00, -0x87,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0xc7,0x00,0x05,0x00, -0x21,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x87,0x00,0x00,0x00, -0x7b,0x00,0x00,0x00,0x72,0x00,0x04,0x00,0x7d,0x00,0x00,0x00, -0x89,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x7c,0x00,0x04,0x00, -0x43,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0x89,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x71,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x8b,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x8e,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x6e,0x00,0x00,0x00, -0x41,0x00,0x08,0x00,0x76,0x00,0x00,0x00,0x8f,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x26,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x43,0x00,0x00,0x00,0x90,0x00,0x00,0x00,0x8f,0x00,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x91,0x00,0x00,0x00, -0x90,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x21,0x00,0x00,0x00, -0x92,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0xc7,0x00,0x05,0x00, -0x21,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x92,0x00,0x00,0x00, -0x93,0x00,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x97,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x6e,0x00,0x00,0x00, -0x41,0x00,0x08,0x00,0x76,0x00,0x00,0x00,0x98,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x26,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x43,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x98,0x00,0x00,0x00, -0xc2,0x00,0x05,0x00,0x43,0x00,0x00,0x00,0x9b,0x00,0x00,0x00, -0x99,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0xc4,0x00,0x05,0x00, -0x43,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,0x9b,0x00,0x00,0x00, -0x9c,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x9e,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,0x7c,0x00,0x04,0x00, -0x21,0x00,0x00,0x00,0x9f,0x00,0x00,0x00,0x9e,0x00,0x00,0x00, -0xc5,0x00,0x05,0x00,0x21,0x00,0x00,0x00,0xa0,0x00,0x00,0x00, -0x94,0x00,0x00,0x00,0x9f,0x00,0x00,0x00,0x72,0x00,0x04,0x00, -0x7d,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0xa0,0x00,0x00,0x00, -0x7c,0x00,0x04,0x00,0x43,0x00,0x00,0x00,0xa2,0x00,0x00,0x00, -0xa1,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x43,0x00,0x00,0x00, -0xa7,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,0xc2,0x00,0x05,0x00, -0x43,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0xa7,0x00,0x00,0x00, -0x9c,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x76,0x00,0x00,0x00, -0xab,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x1c,0x00,0x00,0x00,0x26,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x43,0x00,0x00,0x00,0xac,0x00,0x00,0x00, -0xab,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,0x43,0x00,0x00,0x00, -0xad,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0x9a,0x00,0x00,0x00, -0xc4,0x00,0x05,0x00,0x43,0x00,0x00,0x00,0xae,0x00,0x00,0x00, -0xad,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0xc5,0x00,0x05,0x00, -0x43,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0xa8,0x00,0x00,0x00, -0xae,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x71,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x71,0x00,0x00,0x00,0xf5,0x00,0x07,0x00, -0x43,0x00,0x00,0x00,0x92,0x01,0x00,0x00,0x8a,0x00,0x00,0x00, -0x70,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0x8b,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x43,0x00,0x00,0x00,0x91,0x01,0x00,0x00, -0x7f,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0xa2,0x00,0x00,0x00, -0x8b,0x00,0x00,0x00,0x70,0x00,0x04,0x00,0x3e,0x00,0x00,0x00, -0xb3,0x00,0x00,0x00,0x91,0x01,0x00,0x00,0x85,0x00,0x05,0x00, -0x3e,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0xb3,0x00,0x00,0x00,0x70,0x00,0x04,0x00,0x3e,0x00,0x00,0x00, -0xb8,0x00,0x00,0x00,0x92,0x01,0x00,0x00,0x85,0x00,0x05,0x00, -0x3e,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x59,0x00,0x00,0x00, -0xb8,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0xbd,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x6f,0x00,0x00,0x00, -0xbc,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xc0,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x56,0x00,0x00,0x00, -0x41,0x00,0x08,0x00,0x76,0x00,0x00,0x00,0xc1,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x26,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x43,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,0xc1,0x00,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xc3,0x00,0x00,0x00, -0xc2,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x21,0x00,0x00,0x00, -0xc4,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0xc7,0x00,0x05,0x00, -0x21,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0xc4,0x00,0x00,0x00, -0x7b,0x00,0x00,0x00,0x72,0x00,0x04,0x00,0x7d,0x00,0x00,0x00, -0xc6,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0x7c,0x00,0x04,0x00, -0x43,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0xc6,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xcb,0x00,0x00,0x00, -0x3d,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0x41,0x00,0x08,0x00, -0x76,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x26,0x00,0x00,0x00, -0xcb,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x43,0x00,0x00,0x00, -0xcd,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xce,0x00,0x00,0x00,0xcd,0x00,0x00,0x00, -0x7c,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0xcf,0x00,0x00,0x00, -0xce,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x21,0x00,0x00,0x00, -0xd0,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x7b,0x00,0x00,0x00, -0x72,0x00,0x04,0x00,0x7d,0x00,0x00,0x00,0xd1,0x00,0x00,0x00, -0xd0,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x43,0x00,0x00,0x00, -0xd2,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xbd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd3,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd6,0x00,0x00,0x00, -0x3d,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0x41,0x00,0x08,0x00, -0x76,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x26,0x00,0x00,0x00, -0xd6,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x43,0x00,0x00,0x00, -0xd8,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xd9,0x00,0x00,0x00,0xd8,0x00,0x00,0x00, -0x7c,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0xda,0x00,0x00,0x00, -0xd9,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x21,0x00,0x00,0x00, -0xdb,0x00,0x00,0x00,0xda,0x00,0x00,0x00,0x93,0x00,0x00,0x00, -0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdf,0x00,0x00,0x00, -0x3d,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0x41,0x00,0x08,0x00, -0x76,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x26,0x00,0x00,0x00, -0xdf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x43,0x00,0x00,0x00, -0xe1,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,0xc2,0x00,0x05,0x00, -0x43,0x00,0x00,0x00,0xe2,0x00,0x00,0x00,0xe1,0x00,0x00,0x00, -0x9a,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,0x43,0x00,0x00,0x00, -0xe3,0x00,0x00,0x00,0xe2,0x00,0x00,0x00,0x9c,0x00,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xe4,0x00,0x00,0x00, -0xe3,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x21,0x00,0x00,0x00, -0xe5,0x00,0x00,0x00,0xe4,0x00,0x00,0x00,0xc5,0x00,0x05,0x00, -0x21,0x00,0x00,0x00,0xe6,0x00,0x00,0x00,0xdb,0x00,0x00,0x00, -0xe5,0x00,0x00,0x00,0x72,0x00,0x04,0x00,0x7d,0x00,0x00,0x00, -0xe7,0x00,0x00,0x00,0xe6,0x00,0x00,0x00,0x7c,0x00,0x04,0x00, -0x43,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0xe7,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x43,0x00,0x00,0x00,0xed,0x00,0x00,0x00, -0xd7,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,0x43,0x00,0x00,0x00, -0xee,0x00,0x00,0x00,0xed,0x00,0x00,0x00,0x9c,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf1,0x00,0x00,0x00, -0x3d,0x00,0x00,0x00,0x56,0x00,0x00,0x00,0x41,0x00,0x08,0x00, -0x76,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x26,0x00,0x00,0x00, -0xf1,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x43,0x00,0x00,0x00, -0xf3,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,0xc2,0x00,0x05,0x00, -0x43,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,0xf3,0x00,0x00,0x00, -0x9a,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,0x43,0x00,0x00,0x00, -0xf5,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,0x9c,0x00,0x00,0x00, -0xc5,0x00,0x05,0x00,0x43,0x00,0x00,0x00,0xf6,0x00,0x00,0x00, -0xee,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xbd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xbd,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x43,0x00,0x00,0x00,0x94,0x01,0x00,0x00, -0xd2,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0xf6,0x00,0x00,0x00, -0xd3,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x43,0x00,0x00,0x00, -0x93,0x01,0x00,0x00,0xc7,0x00,0x00,0x00,0xbc,0x00,0x00,0x00, -0xe8,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,0x70,0x00,0x04,0x00, -0x3e,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0x93,0x01,0x00,0x00, -0x85,0x00,0x05,0x00,0x3e,0x00,0x00,0x00,0xfb,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0x70,0x00,0x04,0x00, -0x3e,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x94,0x01,0x00,0x00, -0x85,0x00,0x05,0x00,0x3e,0x00,0x00,0x00,0x00,0x01,0x00,0x00, -0x59,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xc4,0x00,0x05,0x00, -0x21,0x00,0x00,0x00,0x04,0x01,0x00,0x00,0x26,0x00,0x00,0x00, -0x3d,0x00,0x00,0x00,0x72,0x00,0x04,0x00,0x7d,0x00,0x00,0x00, -0x05,0x01,0x00,0x00,0x04,0x01,0x00,0x00,0x7c,0x00,0x04,0x00, -0x43,0x00,0x00,0x00,0x06,0x01,0x00,0x00,0x05,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0a,0x01,0x00,0x00, -0x3d,0x00,0x00,0x00,0x56,0x00,0x00,0x00,0xc4,0x00,0x05,0x00, -0x21,0x00,0x00,0x00,0x0b,0x01,0x00,0x00,0x26,0x00,0x00,0x00, -0x0a,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0x7d,0x00,0x00,0x00, -0x0c,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,0x7c,0x00,0x04,0x00, -0x43,0x00,0x00,0x00,0x0d,0x01,0x00,0x00,0x0c,0x01,0x00,0x00, -0x41,0x00,0x08,0x00,0x76,0x00,0x00,0x00,0x17,0x01,0x00,0x00, -0x4e,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x15,0x01,0x00,0x00,0x69,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x43,0x00,0x00,0x00,0x18,0x01,0x00,0x00,0x17,0x01,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x19,0x01,0x00,0x00, -0x18,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x21,0x00,0x00,0x00, -0x1a,0x01,0x00,0x00,0x19,0x01,0x00,0x00,0xc7,0x00,0x05,0x00, -0x21,0x00,0x00,0x00,0x1b,0x01,0x00,0x00,0x1a,0x01,0x00,0x00, -0x93,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x76,0x00,0x00,0x00, -0x1f,0x01,0x00,0x00,0x4e,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x1c,0x00,0x00,0x00,0x1d,0x01,0x00,0x00,0x62,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x43,0x00,0x00,0x00,0x20,0x01,0x00,0x00, -0x1f,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x43,0x00,0x00,0x00, -0x22,0x01,0x00,0x00,0x20,0x01,0x00,0x00,0x06,0x01,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x23,0x01,0x00,0x00, -0x22,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x21,0x00,0x00,0x00, -0x24,0x01,0x00,0x00,0x23,0x01,0x00,0x00,0xab,0x00,0x05,0x00, -0x11,0x00,0x00,0x00,0x25,0x01,0x00,0x00,0x24,0x01,0x00,0x00, -0x22,0x00,0x00,0x00,0xa9,0x00,0x06,0x00,0x21,0x00,0x00,0x00, -0x27,0x01,0x00,0x00,0x25,0x01,0x00,0x00,0x26,0x01,0x00,0x00, -0x22,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x21,0x00,0x00,0x00, -0x28,0x01,0x00,0x00,0x1b,0x01,0x00,0x00,0x27,0x01,0x00,0x00, -0x6f,0x00,0x04,0x00,0x3e,0x00,0x00,0x00,0x29,0x01,0x00,0x00, -0x28,0x01,0x00,0x00,0x7f,0x00,0x04,0x00,0x3e,0x00,0x00,0x00, -0x9b,0x01,0x00,0x00,0xb9,0x00,0x00,0x00,0x0c,0x00,0x08,0x00, -0x3e,0x00,0x00,0x00,0x2c,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0x29,0x01,0x00,0x00, -0x9b,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x41,0x00,0x00,0x00, -0x2d,0x01,0x00,0x00,0x2c,0x01,0x00,0x00,0x41,0x00,0x06,0x00, -0x50,0x00,0x00,0x00,0x2e,0x01,0x00,0x00,0x11,0x01,0x00,0x00, -0x22,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x3e,0x00,0x03,0x00, -0x2e,0x01,0x00,0x00,0x2d,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x30,0x01,0x00,0x00,0x63,0x00,0x00,0x00, -0x56,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x34,0x01,0x00,0x00,0x69,0x00,0x00,0x00,0x56,0x00,0x00,0x00, -0x41,0x00,0x08,0x00,0x76,0x00,0x00,0x00,0x35,0x01,0x00,0x00, -0x4e,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x15,0x01,0x00,0x00,0x34,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0x43,0x00,0x00,0x00,0x36,0x01,0x00,0x00,0x35,0x01,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x37,0x01,0x00,0x00, -0x36,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x21,0x00,0x00,0x00, -0x38,0x01,0x00,0x00,0x37,0x01,0x00,0x00,0xc7,0x00,0x05,0x00, -0x21,0x00,0x00,0x00,0x39,0x01,0x00,0x00,0x38,0x01,0x00,0x00, -0x93,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x3c,0x01,0x00,0x00,0x62,0x00,0x00,0x00,0x56,0x00,0x00,0x00, -0x41,0x00,0x08,0x00,0x76,0x00,0x00,0x00,0x3d,0x01,0x00,0x00, -0x4e,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x1d,0x01,0x00,0x00,0x3c,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0x43,0x00,0x00,0x00,0x3e,0x01,0x00,0x00,0x3d,0x01,0x00,0x00, -0xc7,0x00,0x05,0x00,0x43,0x00,0x00,0x00,0x40,0x01,0x00,0x00, -0x3e,0x01,0x00,0x00,0x06,0x01,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x41,0x01,0x00,0x00,0x40,0x01,0x00,0x00, -0x7c,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0x42,0x01,0x00,0x00, -0x41,0x01,0x00,0x00,0xab,0x00,0x05,0x00,0x11,0x00,0x00,0x00, -0x43,0x01,0x00,0x00,0x42,0x01,0x00,0x00,0x22,0x00,0x00,0x00, -0xa9,0x00,0x06,0x00,0x21,0x00,0x00,0x00,0x44,0x01,0x00,0x00, -0x43,0x01,0x00,0x00,0x26,0x01,0x00,0x00,0x22,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x21,0x00,0x00,0x00,0x45,0x01,0x00,0x00, -0x39,0x01,0x00,0x00,0x44,0x01,0x00,0x00,0x6f,0x00,0x04,0x00, -0x3e,0x00,0x00,0x00,0x46,0x01,0x00,0x00,0x45,0x01,0x00,0x00, -0x0c,0x00,0x08,0x00,0x3e,0x00,0x00,0x00,0x49,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0xb4,0x00,0x00,0x00, -0x46,0x01,0x00,0x00,0x9b,0x01,0x00,0x00,0x73,0x00,0x04,0x00, -0x41,0x00,0x00,0x00,0x4a,0x01,0x00,0x00,0x49,0x01,0x00,0x00, -0x41,0x00,0x06,0x00,0x50,0x00,0x00,0x00,0x4b,0x01,0x00,0x00, -0x11,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x30,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0x4b,0x01,0x00,0x00,0x4a,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4d,0x01,0x00,0x00, -0x63,0x00,0x00,0x00,0x46,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x43,0x00,0x00,0x00,0x52,0x01,0x00,0x00,0x17,0x01,0x00,0x00, -0xc2,0x00,0x05,0x00,0x43,0x00,0x00,0x00,0x53,0x01,0x00,0x00, -0x52,0x01,0x00,0x00,0x9c,0x00,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x54,0x01,0x00,0x00,0x53,0x01,0x00,0x00, -0x7c,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0x55,0x01,0x00,0x00, -0x54,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x43,0x00,0x00,0x00, -0x59,0x01,0x00,0x00,0x1f,0x01,0x00,0x00,0xc7,0x00,0x05,0x00, -0x43,0x00,0x00,0x00,0x5b,0x01,0x00,0x00,0x59,0x01,0x00,0x00, -0x0d,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x5c,0x01,0x00,0x00,0x5b,0x01,0x00,0x00,0x7c,0x00,0x04,0x00, -0x21,0x00,0x00,0x00,0x5d,0x01,0x00,0x00,0x5c,0x01,0x00,0x00, -0xab,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x5e,0x01,0x00,0x00, -0x5d,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0xa9,0x00,0x06,0x00, -0x21,0x00,0x00,0x00,0x5f,0x01,0x00,0x00,0x5e,0x01,0x00,0x00, -0x26,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x21,0x00,0x00,0x00,0x60,0x01,0x00,0x00,0x55,0x01,0x00,0x00, -0x5f,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,0x3e,0x00,0x00,0x00, -0x61,0x01,0x00,0x00,0x60,0x01,0x00,0x00,0x7f,0x00,0x04,0x00, -0x3e,0x00,0x00,0x00,0x9d,0x01,0x00,0x00,0x00,0x01,0x00,0x00, -0x0c,0x00,0x08,0x00,0x3e,0x00,0x00,0x00,0x64,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0xfb,0x00,0x00,0x00, -0x61,0x01,0x00,0x00,0x9d,0x01,0x00,0x00,0x73,0x00,0x04,0x00, -0x41,0x00,0x00,0x00,0x65,0x01,0x00,0x00,0x64,0x01,0x00,0x00, -0x41,0x00,0x06,0x00,0x50,0x00,0x00,0x00,0x66,0x01,0x00,0x00, -0x11,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x4d,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0x66,0x01,0x00,0x00,0x65,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x69,0x01,0x00,0x00, -0x63,0x00,0x00,0x00,0x68,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0x43,0x00,0x00,0x00,0x6f,0x01,0x00,0x00,0x35,0x01,0x00,0x00, -0xc2,0x00,0x05,0x00,0x43,0x00,0x00,0x00,0x70,0x01,0x00,0x00, -0x6f,0x01,0x00,0x00,0x9c,0x00,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x71,0x01,0x00,0x00,0x70,0x01,0x00,0x00, -0x7c,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0x72,0x01,0x00,0x00, -0x71,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x43,0x00,0x00,0x00, -0x77,0x01,0x00,0x00,0x3d,0x01,0x00,0x00,0xc7,0x00,0x05,0x00, -0x43,0x00,0x00,0x00,0x79,0x01,0x00,0x00,0x77,0x01,0x00,0x00, -0x0d,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x7a,0x01,0x00,0x00,0x79,0x01,0x00,0x00,0x7c,0x00,0x04,0x00, -0x21,0x00,0x00,0x00,0x7b,0x01,0x00,0x00,0x7a,0x01,0x00,0x00, -0xab,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x7c,0x01,0x00,0x00, -0x7b,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0xa9,0x00,0x06,0x00, -0x21,0x00,0x00,0x00,0x7d,0x01,0x00,0x00,0x7c,0x01,0x00,0x00, -0x26,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x21,0x00,0x00,0x00,0x7e,0x01,0x00,0x00,0x72,0x01,0x00,0x00, -0x7d,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,0x3e,0x00,0x00,0x00, -0x7f,0x01,0x00,0x00,0x7e,0x01,0x00,0x00,0x0c,0x00,0x08,0x00, -0x3e,0x00,0x00,0x00,0x82,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0x7f,0x01,0x00,0x00, -0x9d,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x41,0x00,0x00,0x00, -0x83,0x01,0x00,0x00,0x82,0x01,0x00,0x00,0x41,0x00,0x06,0x00, -0x50,0x00,0x00,0x00,0x84,0x01,0x00,0x00,0x11,0x01,0x00,0x00, -0x22,0x00,0x00,0x00,0x69,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0x84,0x01,0x00,0x00,0x83,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0x0d,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x0d,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x86,0x01,0x00,0x00, -0x90,0x01,0x00,0x00,0x26,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x0a,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x0c,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x11,0x00,0x00,0x00,0x97,0x01,0x00,0x00, -0x8a,0x01,0x00,0x00,0x0a,0x00,0x00,0x00,0x8d,0x01,0x00,0x00, -0x2c,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x8e,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x97,0x01,0x00,0x00, -0x88,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x8e,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x88,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x88,0x01,0x00,0x00,0xfd,0x00,0x01,0x00, -0x38,0x00,0x01,0x00, -}; -const uint64_t dequant_q5_K_len = 5980; - -unsigned char dequant_q6_K_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0x0d,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x27,0x00,0x00,0x00, -0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00, -0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00, -0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30, -0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x0f,0x00,0x0a,0x00,0x05,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00, -0x16,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x30,0x00,0x00,0x00, -0x5f,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x10,0x00,0x06,0x00, -0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x16,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1e,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1e,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1e,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1e,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x1e,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x30,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x56,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x57,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x59,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x5b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x5b,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x80,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x5b,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x5b,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0xd0,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x5c,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0x5d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x5d,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x5d,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x5f,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x5f,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x71,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0x72,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x72,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x72,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x74,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x74,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x02,0x01,0x00,0x00, -0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x13,0x00,0x02,0x00, -0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x00,0x01,0x00,0x00,0x14,0x00,0x02,0x00,0x11,0x00,0x00,0x00, -0x17,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x15,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x15,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x1e,0x00,0x07,0x00,0x1e,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x1f,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x1e,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x1f,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x21,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x21,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x23,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00, -0x26,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x15,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x35,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x3d,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x47,0x00,0x00,0x00, -0x80,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x15,0x00,0x04,0x00, -0x53,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x1c,0x00,0x04,0x00,0x56,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0x47,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x57,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x15,0x00,0x04,0x00, -0x58,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x1c,0x00,0x04,0x00,0x59,0x00,0x00,0x00,0x58,0x00,0x00,0x00, -0x41,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0x5a,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x1e,0x00,0x06,0x00,0x5b,0x00,0x00,0x00, -0x56,0x00,0x00,0x00,0x57,0x00,0x00,0x00,0x59,0x00,0x00,0x00, -0x5a,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x5c,0x00,0x00,0x00, -0x5b,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x5d,0x00,0x00,0x00, -0x5c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x5e,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x5e,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x65,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0x68,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x6d,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x5a,0x00,0x00,0x00, -0x1d,0x00,0x03,0x00,0x71,0x00,0x00,0x00,0x5a,0x00,0x00,0x00, -0x1e,0x00,0x03,0x00,0x72,0x00,0x00,0x00,0x71,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x73,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x72,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x73,0x00,0x00,0x00, -0x74,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x21,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x7c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x58,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00, -0x87,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x21,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0x93,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x9f,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xdd,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xe2,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x21,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x01,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0x2c,0x00,0x06,0x00,0x14,0x00,0x00,0x00, -0x02,0x01,0x00,0x00,0x4e,0x00,0x00,0x00,0x01,0x01,0x00,0x00, -0x01,0x01,0x00,0x00,0x2a,0x00,0x03,0x00,0x11,0x00,0x00,0x00, -0x05,0x01,0x00,0x00,0x29,0x00,0x03,0x00,0x11,0x00,0x00,0x00, -0x08,0x01,0x00,0x00,0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,0xf7,0x00,0x03,0x00, -0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfb,0x00,0x03,0x00, -0x09,0x00,0x00,0x00,0x04,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x04,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x0a,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x0a,0x00,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x0b,0x01,0x00,0x00,0x09,0x00,0x00,0x00, -0x04,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x0d,0x00,0x00,0x00, -0xb0,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x0b,0x01,0x00,0x00,0x10,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x0c,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x12,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x0b,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x16,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1a,0x00,0x00,0x00, -0x19,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x1a,0x00,0x00,0x00, -0x0b,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x23,0x00,0x00,0x00, -0x24,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x25,0x00,0x00,0x00, -0x24,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x23,0x00,0x00,0x00, -0x27,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x26,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0x27,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x29,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2a,0x00,0x00,0x00, -0x29,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0xae,0x00,0x05,0x00, -0x11,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x2a,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x2d,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x2b,0x00,0x00,0x00, -0x2c,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x2c,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x0c,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x2d,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x17,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x30,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x35,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x3a,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x36,0x00,0x00,0x00, -0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x36,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x42,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x41,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x43,0x00,0x00,0x00, -0x3f,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x46,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x49,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0x36,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4a,0x00,0x00,0x00, -0x46,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x4a,0x00,0x00,0x00, -0x3b,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x50,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x36,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x52,0x00,0x00,0x00, -0x50,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x41,0x00,0x08,0x00, -0x65,0x00,0x00,0x00,0x66,0x00,0x00,0x00,0x5f,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x26,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x53,0x00,0x00,0x00, -0x67,0x00,0x00,0x00,0x66,0x00,0x00,0x00,0x41,0x00,0x07,0x00, -0x6d,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x5f,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x5a,0x00,0x00,0x00,0x6f,0x00,0x00,0x00, -0x6e,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x68,0x00,0x00,0x00, -0x70,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x41,0x00,0x08,0x00, -0x7c,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x5f,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x79,0x00,0x00,0x00, -0x43,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x58,0x00,0x00,0x00, -0x7e,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x72,0x00,0x04,0x00, -0x21,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x7e,0x00,0x00,0x00, -0x41,0x00,0x08,0x00,0x65,0x00,0x00,0x00,0x83,0x00,0x00,0x00, -0x5f,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x52,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x53,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x83,0x00,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x85,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x21,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0xc7,0x00,0x05,0x00, -0x21,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x87,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,0x53,0x00,0x00,0x00, -0x8a,0x00,0x00,0x00,0x67,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x8b,0x00,0x00,0x00, -0x8a,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x21,0x00,0x00,0x00, -0x8c,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,0xc7,0x00,0x05,0x00, -0x21,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x8c,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,0x21,0x00,0x00,0x00, -0x8f,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x8e,0x00,0x00,0x00, -0xc5,0x00,0x05,0x00,0x21,0x00,0x00,0x00,0x90,0x00,0x00,0x00, -0x88,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,0x72,0x00,0x04,0x00, -0x58,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x90,0x00,0x00,0x00, -0x72,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0x92,0x00,0x00,0x00, -0x91,0x00,0x00,0x00,0x82,0x00,0x05,0x00,0x21,0x00,0x00,0x00, -0x94,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x93,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x21,0x00,0x00,0x00,0x95,0x00,0x00,0x00, -0x7f,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x6f,0x00,0x04,0x00, -0x68,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x95,0x00,0x00,0x00, -0x85,0x00,0x05,0x00,0x68,0x00,0x00,0x00,0x97,0x00,0x00,0x00, -0x70,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x73,0x00,0x04,0x00, -0x5a,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x97,0x00,0x00,0x00, -0x41,0x00,0x06,0x00,0x6d,0x00,0x00,0x00,0x99,0x00,0x00,0x00, -0x74,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x4c,0x00,0x00,0x00, -0x3e,0x00,0x03,0x00,0x99,0x00,0x00,0x00,0x98,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9b,0x00,0x00,0x00, -0x4c,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0x43,0x00,0x00,0x00, -0x9f,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x7c,0x00,0x00,0x00, -0xa1,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x1c,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0xa0,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x58,0x00,0x00,0x00,0xa2,0x00,0x00,0x00, -0xa1,0x00,0x00,0x00,0x72,0x00,0x04,0x00,0x21,0x00,0x00,0x00, -0xa3,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,0x52,0x00,0x00,0x00, -0x35,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x65,0x00,0x00,0x00, -0xa7,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x1c,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0xa6,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x53,0x00,0x00,0x00,0xa8,0x00,0x00,0x00, -0xa7,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xa9,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x7c,0x00,0x04,0x00, -0x21,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0xa9,0x00,0x00,0x00, -0xc7,0x00,0x05,0x00,0x21,0x00,0x00,0x00,0xab,0x00,0x00,0x00, -0xaa,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0xc2,0x00,0x05,0x00, -0x53,0x00,0x00,0x00,0xad,0x00,0x00,0x00,0x67,0x00,0x00,0x00, -0x79,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xae,0x00,0x00,0x00,0xad,0x00,0x00,0x00,0x7c,0x00,0x04,0x00, -0x21,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0xae,0x00,0x00,0x00, -0xc7,0x00,0x05,0x00,0x21,0x00,0x00,0x00,0xb0,0x00,0x00,0x00, -0xaf,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0xc4,0x00,0x05,0x00, -0x21,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,0xb0,0x00,0x00,0x00, -0x8e,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,0x21,0x00,0x00,0x00, -0xb2,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0xb1,0x00,0x00,0x00, -0x72,0x00,0x04,0x00,0x58,0x00,0x00,0x00,0xb3,0x00,0x00,0x00, -0xb2,0x00,0x00,0x00,0x72,0x00,0x04,0x00,0x21,0x00,0x00,0x00, -0xb4,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0x82,0x00,0x05,0x00, -0x21,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,0xb4,0x00,0x00,0x00, -0x93,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x21,0x00,0x00,0x00, -0xb6,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0xb5,0x00,0x00,0x00, -0x6f,0x00,0x04,0x00,0x68,0x00,0x00,0x00,0xb7,0x00,0x00,0x00, -0xb6,0x00,0x00,0x00,0x85,0x00,0x05,0x00,0x68,0x00,0x00,0x00, -0xb8,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0xb7,0x00,0x00,0x00, -0x73,0x00,0x04,0x00,0x5a,0x00,0x00,0x00,0xb9,0x00,0x00,0x00, -0xb8,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x6d,0x00,0x00,0x00, -0xba,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x9b,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0xba,0x00,0x00,0x00, -0xb9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xbc,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc1,0x00,0x00,0x00, -0x43,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x41,0x00,0x08,0x00, -0x7c,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,0x5f,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x79,0x00,0x00,0x00, -0xc1,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x58,0x00,0x00,0x00, -0xc3,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,0x72,0x00,0x04,0x00, -0x21,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0xc3,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x53,0x00,0x00,0x00,0xc9,0x00,0x00,0x00, -0x83,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,0x53,0x00,0x00,0x00, -0xca,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x8e,0x00,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xcb,0x00,0x00,0x00, -0xca,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x21,0x00,0x00,0x00, -0xcc,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0xc2,0x00,0x05,0x00, -0x53,0x00,0x00,0x00,0xce,0x00,0x00,0x00,0x67,0x00,0x00,0x00, -0x8e,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xcf,0x00,0x00,0x00,0xce,0x00,0x00,0x00,0x7c,0x00,0x04,0x00, -0x21,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0xcf,0x00,0x00,0x00, -0xc7,0x00,0x05,0x00,0x21,0x00,0x00,0x00,0xd1,0x00,0x00,0x00, -0xd0,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0xc4,0x00,0x05,0x00, -0x21,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0xd1,0x00,0x00,0x00, -0x8e,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,0x21,0x00,0x00,0x00, -0xd3,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0xd2,0x00,0x00,0x00, -0x72,0x00,0x04,0x00,0x58,0x00,0x00,0x00,0xd4,0x00,0x00,0x00, -0xd3,0x00,0x00,0x00,0x72,0x00,0x04,0x00,0x21,0x00,0x00,0x00, -0xd5,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,0x82,0x00,0x05,0x00, -0x21,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0xd5,0x00,0x00,0x00, -0x93,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x21,0x00,0x00,0x00, -0xd7,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0xd6,0x00,0x00,0x00, -0x6f,0x00,0x04,0x00,0x68,0x00,0x00,0x00,0xd8,0x00,0x00,0x00, -0xd7,0x00,0x00,0x00,0x85,0x00,0x05,0x00,0x68,0x00,0x00,0x00, -0xd9,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0xd8,0x00,0x00,0x00, -0x73,0x00,0x04,0x00,0x5a,0x00,0x00,0x00,0xda,0x00,0x00,0x00, -0xd9,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x6d,0x00,0x00,0x00, -0xdb,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0xbc,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0xdb,0x00,0x00,0x00, -0xda,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xde,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0xdd,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe3,0x00,0x00,0x00, -0x43,0x00,0x00,0x00,0xe2,0x00,0x00,0x00,0x41,0x00,0x08,0x00, -0x7c,0x00,0x00,0x00,0xe4,0x00,0x00,0x00,0x5f,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x79,0x00,0x00,0x00, -0xe3,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x58,0x00,0x00,0x00, -0xe5,0x00,0x00,0x00,0xe4,0x00,0x00,0x00,0x72,0x00,0x04,0x00, -0x21,0x00,0x00,0x00,0xe6,0x00,0x00,0x00,0xe5,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x53,0x00,0x00,0x00,0xeb,0x00,0x00,0x00, -0xa7,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,0x53,0x00,0x00,0x00, -0xec,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,0x8e,0x00,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xed,0x00,0x00,0x00, -0xec,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x21,0x00,0x00,0x00, -0xee,0x00,0x00,0x00,0xed,0x00,0x00,0x00,0xc2,0x00,0x05,0x00, -0x53,0x00,0x00,0x00,0xf1,0x00,0x00,0x00,0x67,0x00,0x00,0x00, -0xf0,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xf2,0x00,0x00,0x00,0xf1,0x00,0x00,0x00,0x7c,0x00,0x04,0x00, -0x21,0x00,0x00,0x00,0xf3,0x00,0x00,0x00,0xf2,0x00,0x00,0x00, -0xc7,0x00,0x05,0x00,0x21,0x00,0x00,0x00,0xf4,0x00,0x00,0x00, -0xf3,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0xc4,0x00,0x05,0x00, -0x21,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,0xf4,0x00,0x00,0x00, -0x8e,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,0x21,0x00,0x00,0x00, -0xf6,0x00,0x00,0x00,0xee,0x00,0x00,0x00,0xf5,0x00,0x00,0x00, -0x72,0x00,0x04,0x00,0x58,0x00,0x00,0x00,0xf7,0x00,0x00,0x00, -0xf6,0x00,0x00,0x00,0x72,0x00,0x04,0x00,0x21,0x00,0x00,0x00, -0xf8,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,0x82,0x00,0x05,0x00, -0x21,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,0xf8,0x00,0x00,0x00, -0x93,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x21,0x00,0x00,0x00, -0xfa,0x00,0x00,0x00,0xe6,0x00,0x00,0x00,0xf9,0x00,0x00,0x00, -0x6f,0x00,0x04,0x00,0x68,0x00,0x00,0x00,0xfb,0x00,0x00,0x00, -0xfa,0x00,0x00,0x00,0x85,0x00,0x05,0x00,0x68,0x00,0x00,0x00, -0xfc,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0xfb,0x00,0x00,0x00, -0x73,0x00,0x04,0x00,0x5a,0x00,0x00,0x00,0xfd,0x00,0x00,0x00, -0xfc,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x6d,0x00,0x00,0x00, -0xfe,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0xde,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0xfe,0x00,0x00,0x00, -0xfd,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x0d,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x0d,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x0b,0x01,0x00,0x00, -0x26,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x0a,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x0c,0x00,0x00,0x00,0xf5,0x00,0x07,0x00, -0x11,0x00,0x00,0x00,0x0c,0x01,0x00,0x00,0x05,0x01,0x00,0x00, -0x0a,0x00,0x00,0x00,0x08,0x01,0x00,0x00,0x2c,0x00,0x00,0x00, -0xf7,0x00,0x03,0x00,0x09,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x0c,0x01,0x00,0x00,0x03,0x01,0x00,0x00, -0x09,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x09,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0x03,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x03,0x01,0x00,0x00,0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00, - -}; -const uint64_t dequant_q6_K_len = 4272; - -unsigned char dequant_q8_0_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0x4c,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x27,0x00,0x00,0x00, -0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00, -0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00, -0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30, -0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x0f,0x00,0x0a,0x00,0x05,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x2b,0x00,0x00,0x00, -0x4c,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x10,0x00,0x06,0x00, -0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x00,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x12,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x1b,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x29,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x29,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x29,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x29,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x29,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x29,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x47,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x48,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x48,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x49,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0x4a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x4a,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x4a,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x4c,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x4c,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x5e,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0x5f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x5f,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x5f,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x61,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x61,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x87,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x13,0x00,0x02,0x00, -0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00, -0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x15,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x1e,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x1e,0x00,0x07,0x00, -0x29,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x2a,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x29,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x2a,0x00,0x00,0x00, -0x2b,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00, -0x2c,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x2c,0x00,0x00,0x00,0x2d,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x2e,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x14,0x00,0x02,0x00, -0x32,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x38,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x16,0x00,0x03,0x00,0x42,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x16,0x00,0x03,0x00,0x45,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x46,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x47,0x00,0x00,0x00, -0x46,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x1e,0x00,0x04,0x00, -0x48,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x47,0x00,0x00,0x00, -0x1d,0x00,0x03,0x00,0x49,0x00,0x00,0x00,0x48,0x00,0x00,0x00, -0x1e,0x00,0x03,0x00,0x4a,0x00,0x00,0x00,0x49,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x4b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x4a,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x4b,0x00,0x00,0x00, -0x4c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x2c,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x4f,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x45,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x5e,0x00,0x00,0x00, -0x45,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x5f,0x00,0x00,0x00, -0x5e,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x60,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x60,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x2c,0x00,0x00,0x00,0x67,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x6b,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x46,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x83,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x2c,0x00,0x06,0x00, -0x09,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x75,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x40,0x01,0x00,0x00,0x03,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x41,0x01,0x00,0x00, -0x05,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x42,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x43,0x01,0x00,0x00,0x07,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x44,0x01,0x00,0x00, -0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x45,0x01,0x00,0x00,0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x46,0x01,0x00,0x00,0x0a,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x47,0x01,0x00,0x00, -0x0b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x48,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x49,0x01,0x00,0x00,0x0d,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4a,0x01,0x00,0x00, -0x0e,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x4b,0x01,0x00,0x00,0x0f,0x00,0x00,0x00,0x36,0x00,0x05,0x00, -0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00, -0xf7,0x00,0x03,0x00,0x88,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0xfb,0x00,0x03,0x00,0x0c,0x00,0x00,0x00,0x89,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x89,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x13,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0x13,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x16,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x15,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x17,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x1f,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x1e,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x1b,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0x1e,0x00,0x00,0x00, -0x17,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x27,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x2e,0x00,0x00,0x00,0x2f,0x00,0x00,0x00, -0x2b,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x2f,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x31,0x00,0x00,0x00, -0x30,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0xae,0x00,0x05,0x00, -0x32,0x00,0x00,0x00,0x33,0x00,0x00,0x00,0x27,0x00,0x00,0x00, -0x31,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x35,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x33,0x00,0x00,0x00, -0x34,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x34,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x88,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x35,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x38,0x00,0x00,0x00, -0x17,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x3c,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x3a,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x3e,0x00,0x00,0x00, -0x1f,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x41,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x41,0x00,0x07,0x00,0x4f,0x00,0x00,0x00,0x50,0x00,0x00,0x00, -0x4c,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x27,0x00,0x00,0x00, -0x4d,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x45,0x00,0x00,0x00, -0x51,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x73,0x00,0x04,0x00, -0x42,0x00,0x00,0x00,0x52,0x00,0x00,0x00,0x51,0x00,0x00,0x00, -0x41,0x00,0x08,0x00,0x6b,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x4c,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x27,0x00,0x00,0x00, -0x67,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x46,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x6f,0x00,0x04,0x00,0x42,0x00,0x00,0x00,0x6e,0x00,0x00,0x00, -0x6d,0x00,0x00,0x00,0x85,0x00,0x05,0x00,0x42,0x00,0x00,0x00, -0x6f,0x00,0x00,0x00,0x52,0x00,0x00,0x00,0x6e,0x00,0x00,0x00, -0x73,0x00,0x04,0x00,0x45,0x00,0x00,0x00,0x70,0x00,0x00,0x00, -0x6f,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x4f,0x00,0x00,0x00, -0x71,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x4d,0x00,0x00,0x00, -0x41,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0x71,0x00,0x00,0x00, -0x70,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x76,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x75,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7c,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0x41,0x00,0x08,0x00, -0x6b,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x4c,0x00,0x00,0x00, -0x4d,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x67,0x00,0x00,0x00, -0x7c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x46,0x00,0x00,0x00, -0x7e,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x6f,0x00,0x04,0x00, -0x42,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x7e,0x00,0x00,0x00, -0x85,0x00,0x05,0x00,0x42,0x00,0x00,0x00,0x80,0x00,0x00,0x00, -0x52,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x73,0x00,0x04,0x00, -0x45,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x80,0x00,0x00,0x00, -0x41,0x00,0x06,0x00,0x4f,0x00,0x00,0x00,0x82,0x00,0x00,0x00, -0x61,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x76,0x00,0x00,0x00, -0x3e,0x00,0x03,0x00,0x82,0x00,0x00,0x00,0x81,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x95,0x00,0x00,0x00, -0x41,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x83,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x6b,0x00,0x00,0x00, -0x97,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x4d,0x00,0x00,0x00, -0x27,0x00,0x00,0x00,0x67,0x00,0x00,0x00,0x96,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x46,0x00,0x00,0x00,0x98,0x00,0x00,0x00, -0x97,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,0x42,0x00,0x00,0x00, -0x99,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x85,0x00,0x05,0x00, -0x42,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x52,0x00,0x00,0x00, -0x99,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x45,0x00,0x00,0x00, -0x9b,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x41,0x00,0x06,0x00, -0x4f,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0x61,0x00,0x00,0x00, -0x4d,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0x3e,0x00,0x03,0x00, -0x9c,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,0x41,0x00,0x00,0x00, -0x40,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa0,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x40,0x01,0x00,0x00, -0x41,0x00,0x08,0x00,0x6b,0x00,0x00,0x00,0xa1,0x00,0x00,0x00, -0x4c,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x27,0x00,0x00,0x00, -0x67,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x46,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0xa1,0x00,0x00,0x00, -0x6f,0x00,0x04,0x00,0x42,0x00,0x00,0x00,0xa3,0x00,0x00,0x00, -0xa2,0x00,0x00,0x00,0x85,0x00,0x05,0x00,0x42,0x00,0x00,0x00, -0xa4,0x00,0x00,0x00,0x52,0x00,0x00,0x00,0xa3,0x00,0x00,0x00, -0x73,0x00,0x04,0x00,0x45,0x00,0x00,0x00,0xa5,0x00,0x00,0x00, -0xa4,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x4f,0x00,0x00,0x00, -0xa6,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x4d,0x00,0x00,0x00, -0x9e,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0xa6,0x00,0x00,0x00, -0xa5,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xae,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xaf,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x41,0x00,0x08,0x00, -0x6b,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0x4c,0x00,0x00,0x00, -0x4d,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x67,0x00,0x00,0x00, -0xaf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x46,0x00,0x00,0x00, -0xb1,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0x6f,0x00,0x04,0x00, -0x42,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0xb1,0x00,0x00,0x00, -0x85,0x00,0x05,0x00,0x42,0x00,0x00,0x00,0xb3,0x00,0x00,0x00, -0x52,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0x73,0x00,0x04,0x00, -0x45,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0xb3,0x00,0x00,0x00, -0x41,0x00,0x06,0x00,0x4f,0x00,0x00,0x00,0xb5,0x00,0x00,0x00, -0x61,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0xae,0x00,0x00,0x00, -0x3e,0x00,0x03,0x00,0xb5,0x00,0x00,0x00,0xb4,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb7,0x00,0x00,0x00, -0x41,0x00,0x00,0x00,0x41,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x41,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x6b,0x00,0x00,0x00, -0xba,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x4d,0x00,0x00,0x00, -0x27,0x00,0x00,0x00,0x67,0x00,0x00,0x00,0xb9,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x46,0x00,0x00,0x00,0xbb,0x00,0x00,0x00, -0xba,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,0x42,0x00,0x00,0x00, -0xbc,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x85,0x00,0x05,0x00, -0x42,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x52,0x00,0x00,0x00, -0xbc,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x45,0x00,0x00,0x00, -0xbe,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x41,0x00,0x06,0x00, -0x4f,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x61,0x00,0x00,0x00, -0x4d,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0x3e,0x00,0x03,0x00, -0xbf,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0x41,0x00,0x00,0x00, -0x42,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xc8,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x42,0x01,0x00,0x00, -0x41,0x00,0x08,0x00,0x6b,0x00,0x00,0x00,0xc9,0x00,0x00,0x00, -0x4c,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x27,0x00,0x00,0x00, -0x67,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x46,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0xc9,0x00,0x00,0x00, -0x6f,0x00,0x04,0x00,0x42,0x00,0x00,0x00,0xcb,0x00,0x00,0x00, -0xca,0x00,0x00,0x00,0x85,0x00,0x05,0x00,0x42,0x00,0x00,0x00, -0xcc,0x00,0x00,0x00,0x52,0x00,0x00,0x00,0xcb,0x00,0x00,0x00, -0x73,0x00,0x04,0x00,0x45,0x00,0x00,0x00,0xcd,0x00,0x00,0x00, -0xcc,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x4f,0x00,0x00,0x00, -0xce,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x4d,0x00,0x00,0x00, -0xc7,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0xce,0x00,0x00,0x00, -0xcd,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd0,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x43,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd2,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x43,0x01,0x00,0x00,0x41,0x00,0x08,0x00, -0x6b,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,0x4c,0x00,0x00,0x00, -0x4d,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x67,0x00,0x00,0x00, -0xd2,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x46,0x00,0x00,0x00, -0xd4,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,0x6f,0x00,0x04,0x00, -0x42,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0xd4,0x00,0x00,0x00, -0x85,0x00,0x05,0x00,0x42,0x00,0x00,0x00,0xd6,0x00,0x00,0x00, -0x52,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0x73,0x00,0x04,0x00, -0x45,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,0xd6,0x00,0x00,0x00, -0x41,0x00,0x06,0x00,0x4f,0x00,0x00,0x00,0xd8,0x00,0x00,0x00, -0x61,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0xd0,0x00,0x00,0x00, -0x3e,0x00,0x03,0x00,0xd8,0x00,0x00,0x00,0xd7,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe0,0x00,0x00,0x00, -0x41,0x00,0x00,0x00,0x44,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xe1,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x44,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x6b,0x00,0x00,0x00, -0xe2,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x4d,0x00,0x00,0x00, -0x27,0x00,0x00,0x00,0x67,0x00,0x00,0x00,0xe1,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x46,0x00,0x00,0x00,0xe3,0x00,0x00,0x00, -0xe2,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,0x42,0x00,0x00,0x00, -0xe4,0x00,0x00,0x00,0xe3,0x00,0x00,0x00,0x85,0x00,0x05,0x00, -0x42,0x00,0x00,0x00,0xe5,0x00,0x00,0x00,0x52,0x00,0x00,0x00, -0xe4,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x45,0x00,0x00,0x00, -0xe6,0x00,0x00,0x00,0xe5,0x00,0x00,0x00,0x41,0x00,0x06,0x00, -0x4f,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,0x61,0x00,0x00,0x00, -0x4d,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,0x3e,0x00,0x03,0x00, -0xe7,0x00,0x00,0x00,0xe6,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xe9,0x00,0x00,0x00,0x41,0x00,0x00,0x00, -0x45,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xeb,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x45,0x01,0x00,0x00, -0x41,0x00,0x08,0x00,0x6b,0x00,0x00,0x00,0xec,0x00,0x00,0x00, -0x4c,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x27,0x00,0x00,0x00, -0x67,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x46,0x00,0x00,0x00,0xed,0x00,0x00,0x00,0xec,0x00,0x00,0x00, -0x6f,0x00,0x04,0x00,0x42,0x00,0x00,0x00,0xee,0x00,0x00,0x00, -0xed,0x00,0x00,0x00,0x85,0x00,0x05,0x00,0x42,0x00,0x00,0x00, -0xef,0x00,0x00,0x00,0x52,0x00,0x00,0x00,0xee,0x00,0x00,0x00, -0x73,0x00,0x04,0x00,0x45,0x00,0x00,0x00,0xf0,0x00,0x00,0x00, -0xef,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x4f,0x00,0x00,0x00, -0xf1,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x4d,0x00,0x00,0x00, -0xe9,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0xf1,0x00,0x00,0x00, -0xf0,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xf9,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x46,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfa,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x46,0x01,0x00,0x00,0x41,0x00,0x08,0x00, -0x6b,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0x4c,0x00,0x00,0x00, -0x4d,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x67,0x00,0x00,0x00, -0xfa,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x46,0x00,0x00,0x00, -0xfc,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0x6f,0x00,0x04,0x00, -0x42,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,0xfc,0x00,0x00,0x00, -0x85,0x00,0x05,0x00,0x42,0x00,0x00,0x00,0xfe,0x00,0x00,0x00, -0x52,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,0x73,0x00,0x04,0x00, -0x45,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xfe,0x00,0x00,0x00, -0x41,0x00,0x06,0x00,0x4f,0x00,0x00,0x00,0x00,0x01,0x00,0x00, -0x61,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0xf9,0x00,0x00,0x00, -0x3e,0x00,0x03,0x00,0x00,0x01,0x00,0x00,0xff,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x02,0x01,0x00,0x00, -0x41,0x00,0x00,0x00,0x47,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x04,0x01,0x00,0x00,0x40,0x00,0x00,0x00, -0x47,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x6b,0x00,0x00,0x00, -0x05,0x01,0x00,0x00,0x4c,0x00,0x00,0x00,0x4d,0x00,0x00,0x00, -0x27,0x00,0x00,0x00,0x67,0x00,0x00,0x00,0x04,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0x46,0x00,0x00,0x00,0x06,0x01,0x00,0x00, -0x05,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,0x42,0x00,0x00,0x00, -0x07,0x01,0x00,0x00,0x06,0x01,0x00,0x00,0x85,0x00,0x05,0x00, -0x42,0x00,0x00,0x00,0x08,0x01,0x00,0x00,0x52,0x00,0x00,0x00, -0x07,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x45,0x00,0x00,0x00, -0x09,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x41,0x00,0x06,0x00, -0x4f,0x00,0x00,0x00,0x0a,0x01,0x00,0x00,0x61,0x00,0x00,0x00, -0x4d,0x00,0x00,0x00,0x02,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0x0a,0x01,0x00,0x00,0x09,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x12,0x01,0x00,0x00,0x41,0x00,0x00,0x00, -0x48,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x13,0x01,0x00,0x00,0x40,0x00,0x00,0x00,0x48,0x01,0x00,0x00, -0x41,0x00,0x08,0x00,0x6b,0x00,0x00,0x00,0x14,0x01,0x00,0x00, -0x4c,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x27,0x00,0x00,0x00, -0x67,0x00,0x00,0x00,0x13,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0x46,0x00,0x00,0x00,0x15,0x01,0x00,0x00,0x14,0x01,0x00,0x00, -0x6f,0x00,0x04,0x00,0x42,0x00,0x00,0x00,0x16,0x01,0x00,0x00, -0x15,0x01,0x00,0x00,0x85,0x00,0x05,0x00,0x42,0x00,0x00,0x00, -0x17,0x01,0x00,0x00,0x52,0x00,0x00,0x00,0x16,0x01,0x00,0x00, -0x73,0x00,0x04,0x00,0x45,0x00,0x00,0x00,0x18,0x01,0x00,0x00, -0x17,0x01,0x00,0x00,0x41,0x00,0x06,0x00,0x4f,0x00,0x00,0x00, -0x19,0x01,0x00,0x00,0x61,0x00,0x00,0x00,0x4d,0x00,0x00,0x00, -0x12,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x19,0x01,0x00,0x00, -0x18,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x1b,0x01,0x00,0x00,0x41,0x00,0x00,0x00,0x49,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1d,0x01,0x00,0x00, -0x40,0x00,0x00,0x00,0x49,0x01,0x00,0x00,0x41,0x00,0x08,0x00, -0x6b,0x00,0x00,0x00,0x1e,0x01,0x00,0x00,0x4c,0x00,0x00,0x00, -0x4d,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x67,0x00,0x00,0x00, -0x1d,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x46,0x00,0x00,0x00, -0x1f,0x01,0x00,0x00,0x1e,0x01,0x00,0x00,0x6f,0x00,0x04,0x00, -0x42,0x00,0x00,0x00,0x20,0x01,0x00,0x00,0x1f,0x01,0x00,0x00, -0x85,0x00,0x05,0x00,0x42,0x00,0x00,0x00,0x21,0x01,0x00,0x00, -0x52,0x00,0x00,0x00,0x20,0x01,0x00,0x00,0x73,0x00,0x04,0x00, -0x45,0x00,0x00,0x00,0x22,0x01,0x00,0x00,0x21,0x01,0x00,0x00, -0x41,0x00,0x06,0x00,0x4f,0x00,0x00,0x00,0x23,0x01,0x00,0x00, -0x61,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x1b,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0x23,0x01,0x00,0x00,0x22,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2b,0x01,0x00,0x00, -0x41,0x00,0x00,0x00,0x4a,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x2c,0x01,0x00,0x00,0x40,0x00,0x00,0x00, -0x4a,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x6b,0x00,0x00,0x00, -0x2d,0x01,0x00,0x00,0x4c,0x00,0x00,0x00,0x4d,0x00,0x00,0x00, -0x27,0x00,0x00,0x00,0x67,0x00,0x00,0x00,0x2c,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0x46,0x00,0x00,0x00,0x2e,0x01,0x00,0x00, -0x2d,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,0x42,0x00,0x00,0x00, -0x2f,0x01,0x00,0x00,0x2e,0x01,0x00,0x00,0x85,0x00,0x05,0x00, -0x42,0x00,0x00,0x00,0x30,0x01,0x00,0x00,0x52,0x00,0x00,0x00, -0x2f,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x45,0x00,0x00,0x00, -0x31,0x01,0x00,0x00,0x30,0x01,0x00,0x00,0x41,0x00,0x06,0x00, -0x4f,0x00,0x00,0x00,0x32,0x01,0x00,0x00,0x61,0x00,0x00,0x00, -0x4d,0x00,0x00,0x00,0x2b,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0x32,0x01,0x00,0x00,0x31,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x34,0x01,0x00,0x00,0x41,0x00,0x00,0x00, -0x4b,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x36,0x01,0x00,0x00,0x40,0x00,0x00,0x00,0x4b,0x01,0x00,0x00, -0x41,0x00,0x08,0x00,0x6b,0x00,0x00,0x00,0x37,0x01,0x00,0x00, -0x4c,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x27,0x00,0x00,0x00, -0x67,0x00,0x00,0x00,0x36,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0x46,0x00,0x00,0x00,0x38,0x01,0x00,0x00,0x37,0x01,0x00,0x00, -0x6f,0x00,0x04,0x00,0x42,0x00,0x00,0x00,0x39,0x01,0x00,0x00, -0x38,0x01,0x00,0x00,0x85,0x00,0x05,0x00,0x42,0x00,0x00,0x00, -0x3a,0x01,0x00,0x00,0x52,0x00,0x00,0x00,0x39,0x01,0x00,0x00, -0x73,0x00,0x04,0x00,0x45,0x00,0x00,0x00,0x3b,0x01,0x00,0x00, -0x3a,0x01,0x00,0x00,0x41,0x00,0x06,0x00,0x4f,0x00,0x00,0x00, -0x3c,0x01,0x00,0x00,0x61,0x00,0x00,0x00,0x4d,0x00,0x00,0x00, -0x34,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x3c,0x01,0x00,0x00, -0x3b,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x88,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x88,0x00,0x00,0x00,0xfd,0x00,0x01,0x00, -0x38,0x00,0x01,0x00, -}; -const uint64_t dequant_q8_0_len = 4780; - -unsigned char diag_mask_inf_f32_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0x4c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00, -0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30, -0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x0f,0x00,0x09,0x00,0x05,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x2d,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x15,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x2a,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x04,0x00,0x2b,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x2b,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0x2b,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x2d,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x2d,0x00,0x00,0x00, -0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x2f,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x04,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x30,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0x30,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x32,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x32,0x00,0x00,0x00, -0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x49,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00, -0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x1e,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x16,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x15,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x16,0x00,0x00,0x00,0x17,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x18,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x18,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x1a,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x14,0x00,0x02,0x00,0x1d,0x00,0x00,0x00, -0x16,0x00,0x03,0x00,0x29,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x1d,0x00,0x03,0x00,0x2a,0x00,0x00,0x00,0x29,0x00,0x00,0x00, -0x1e,0x00,0x03,0x00,0x2b,0x00,0x00,0x00,0x2a,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x2c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x2b,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x2c,0x00,0x00,0x00, -0x2d,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x1d,0x00,0x03,0x00, -0x2f,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x1e,0x00,0x03,0x00, -0x30,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x31,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x30,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x31,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x34,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x18,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x18,0x00,0x00,0x00,0x3c,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x43,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x00,0x02,0x00,0x00, -0x2c,0x00,0x06,0x00,0x09,0x00,0x00,0x00,0x49,0x00,0x00,0x00, -0x48,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x05,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x4a,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0xfb,0x00,0x03,0x00,0x11,0x00,0x00,0x00, -0x4b,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x4b,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x1b,0x00,0x00,0x00, -0x17,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x1b,0x00,0x00,0x00, -0xae,0x00,0x05,0x00,0x1d,0x00,0x00,0x00,0x1e,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0xf7,0x00,0x03,0x00, -0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x1e,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x1f,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x4a,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x20,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x26,0x00,0x00,0x00, -0x13,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x26,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x34,0x00,0x00,0x00, -0x35,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x28,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x29,0x00,0x00,0x00, -0x36,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x17,0x00,0x00,0x00, -0x38,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x3a,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x17,0x00,0x00,0x00, -0x3c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x3e,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x13,0x00,0x00,0x00, -0x3e,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x3f,0x00,0x00,0x00, -0xac,0x00,0x05,0x00,0x1d,0x00,0x00,0x00,0x41,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0xa9,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x41,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x42,0x00,0x00,0x00, -0x43,0x00,0x00,0x00,0x70,0x00,0x04,0x00,0x29,0x00,0x00,0x00, -0x45,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x83,0x00,0x05,0x00, -0x29,0x00,0x00,0x00,0x46,0x00,0x00,0x00,0x36,0x00,0x00,0x00, -0x45,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x34,0x00,0x00,0x00, -0x47,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x28,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0x47,0x00,0x00,0x00, -0x46,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x4a,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x4a,0x00,0x00,0x00,0xfd,0x00,0x01,0x00, -0x38,0x00,0x01,0x00, -}; -const uint64_t diag_mask_inf_f32_len = 1480; - -unsigned char gelu_f32_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0x4b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00, -0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30, -0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x0f,0x00,0x09,0x00,0x05,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x24,0x00,0x00,0x00, -0x38,0x00,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x12,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x12,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x21,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x22,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x24,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x24,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x35,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0x36,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x36,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x36,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x38,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x38,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x48,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x13,0x00,0x02,0x00, -0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00, -0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0x11,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x1e,0x00,0x06,0x00,0x12,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x11,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00, -0x16,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x17,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x14,0x00,0x02,0x00,0x1a,0x00,0x00,0x00,0x1d,0x00,0x03,0x00, -0x21,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x1e,0x00,0x03,0x00, -0x22,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x26,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x11,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x2a,0x42,0x4c,0x3f, -0x2b,0x00,0x04,0x00,0x11,0x00,0x00,0x00,0x2d,0x00,0x00,0x00, -0x00,0x00,0x80,0x3f,0x2b,0x00,0x04,0x00,0x11,0x00,0x00,0x00, -0x2e,0x00,0x00,0x00,0x13,0x27,0x37,0x3d,0x1d,0x00,0x03,0x00, -0x35,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x1e,0x00,0x03,0x00, -0x36,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x37,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x36,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x37,0x00,0x00,0x00,0x38,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x11,0x00,0x00,0x00, -0x3a,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0x2b,0x00,0x04,0x00, -0x11,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x00,0x00,0x00,0x40, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x46,0x00,0x00,0x00, -0x00,0x02,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x47,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2c,0x00,0x06,0x00, -0x09,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x46,0x00,0x00,0x00, -0x47,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0x36,0x00,0x05,0x00, -0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00, -0xf7,0x00,0x03,0x00,0x49,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0xfb,0x00,0x03,0x00,0x0c,0x00,0x00,0x00,0x4a,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x4a,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x17,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0x16,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x19,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0xae,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x19,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x1d,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x1b,0x00,0x00,0x00, -0x1c,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x1c,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x49,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x1d,0x00,0x00,0x00,0x41,0x00,0x06,0x00, -0x26,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x24,0x00,0x00,0x00, -0x16,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x11,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x27,0x00,0x00,0x00, -0x85,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x2c,0x00,0x00,0x00, -0x2a,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x85,0x00,0x05,0x00, -0x11,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x2e,0x00,0x00,0x00, -0x28,0x00,0x00,0x00,0x0c,0x00,0x08,0x00,0x11,0x00,0x00,0x00, -0x33,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x30,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x2d,0x00,0x00,0x00, -0x85,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x2c,0x00,0x00,0x00,0x33,0x00,0x00,0x00,0x85,0x00,0x05,0x00, -0x11,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x3a,0x00,0x00,0x00, -0x28,0x00,0x00,0x00,0x85,0x00,0x05,0x00,0x11,0x00,0x00,0x00, -0x3f,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x0c,0x00,0x06,0x00,0x11,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x3f,0x00,0x00,0x00, -0x81,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x41,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0x88,0x00,0x05,0x00, -0x11,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x41,0x00,0x00,0x00,0x83,0x00,0x05,0x00,0x11,0x00,0x00,0x00, -0x43,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x42,0x00,0x00,0x00, -0x85,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x44,0x00,0x00,0x00, -0x3c,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x41,0x00,0x06,0x00, -0x26,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x38,0x00,0x00,0x00, -0x16,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x3e,0x00,0x03,0x00, -0x45,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x49,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x49,0x00,0x00,0x00, -0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00, -}; -const uint64_t gelu_f32_len = 1484; - -unsigned char get_rows_f16_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0x87,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00, -0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c, -0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00, -0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x0f,0x00,0x0a,0x00,0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x1b,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x74,0x00,0x00,0x00, -0x7b,0x00,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x19,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x19,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,0x05,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x19,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x19,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00, -0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x19,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x30,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00, -0x0d,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,0x0e,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x19,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x3c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,0x11,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x19,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x48,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00, -0x13,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x4c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x19,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x54,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00, -0x16,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x58,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,0x17,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x5c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x19,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00, -0x19,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x64,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,0x1a,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x19,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x19,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x32,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x33,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x35,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x35,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x71,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0x72,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x72,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x72,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x74,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x74,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x78,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0x79,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x79,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x79,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x7b,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x7b,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x84,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x13,0x00,0x02,0x00, -0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00, -0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x16,0x00,0x03,0x00,0x18,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x1e,0x00,0x1e,0x00,0x19,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x1a,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x19,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x1a,0x00,0x00,0x00, -0x1b,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00, -0x1c,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x1c,0x00,0x00,0x00,0x1d,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x1e,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x1c,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x14,0x00,0x02,0x00,0x2c,0x00,0x00,0x00,0x1d,0x00,0x03,0x00, -0x32,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x1e,0x00,0x03,0x00, -0x33,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x34,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x33,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x34,0x00,0x00,0x00,0x35,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1c,0x00,0x00,0x00, -0x36,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x1c,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x0d,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x1c,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x0e,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1c,0x00,0x00,0x00, -0x43,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x48,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x1c,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1c,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x1c,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x1c,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x16,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1c,0x00,0x00,0x00, -0x65,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x1c,0x00,0x00,0x00,0x6b,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x16,0x00,0x03,0x00,0x70,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x1d,0x00,0x03,0x00,0x71,0x00,0x00,0x00,0x70,0x00,0x00,0x00, -0x1e,0x00,0x03,0x00,0x72,0x00,0x00,0x00,0x71,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x73,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x72,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x73,0x00,0x00,0x00, -0x74,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x1d,0x00,0x03,0x00, -0x78,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x1e,0x00,0x03,0x00, -0x79,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x7a,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x79,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x7a,0x00,0x00,0x00,0x7b,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x7f,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x00,0x02,0x00,0x00, -0x2c,0x00,0x06,0x00,0x09,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x83,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x11,0x00,0x00,0x00, -0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x05,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x85,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0xfb,0x00,0x03,0x00,0x0c,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x86,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x16,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x16,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x1e,0x00,0x00,0x00,0x1f,0x00,0x00,0x00, -0x1b,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x1f,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0x17,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x17,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x1e,0x00,0x00,0x00, -0x2a,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x29,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x00,0x00, -0x2a,0x00,0x00,0x00,0xae,0x00,0x05,0x00,0x2c,0x00,0x00,0x00, -0x2d,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x2b,0x00,0x00,0x00, -0xf7,0x00,0x03,0x00,0x2f,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x2d,0x00,0x00,0x00,0x2e,0x00,0x00,0x00, -0x2f,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x2e,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x85,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x2f,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x1e,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x38,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x3b,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x3a,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x1e,0x00,0x00,0x00,0x3e,0x00,0x00,0x00, -0x1b,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x3e,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x21,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x3b,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x1e,0x00,0x00,0x00, -0x44,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x43,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x45,0x00,0x00,0x00, -0x44,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x46,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x45,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x47,0x00,0x00,0x00, -0x41,0x00,0x00,0x00,0x46,0x00,0x00,0x00,0x41,0x00,0x06,0x00, -0x48,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x35,0x00,0x00,0x00, -0x36,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x1c,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x49,0x00,0x00,0x00, -0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4b,0x00,0x00,0x00, -0x4a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x1e,0x00,0x00,0x00, -0x4f,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00, -0x4f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x51,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0x50,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x1e,0x00,0x00,0x00,0x54,0x00,0x00,0x00, -0x1b,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x54,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x56,0x00,0x00,0x00, -0x21,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x57,0x00,0x00,0x00,0x51,0x00,0x00,0x00, -0x56,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x1e,0x00,0x00,0x00, -0x5a,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x59,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x5b,0x00,0x00,0x00, -0x5a,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x5c,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x5b,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5d,0x00,0x00,0x00, -0x57,0x00,0x00,0x00,0x5c,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x1e,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x1b,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x13,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x1e,0x00,0x00,0x00, -0x66,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x65,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x67,0x00,0x00,0x00, -0x66,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x68,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x67,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x69,0x00,0x00,0x00, -0x63,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x1e,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x1b,0x00,0x00,0x00, -0x6b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x6d,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x27,0x00,0x00,0x00, -0x6d,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x6f,0x00,0x00,0x00,0x69,0x00,0x00,0x00,0x6e,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x77,0x00,0x00,0x00, -0x6f,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x5d,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x7f,0x00,0x00,0x00, -0x80,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,0x36,0x00,0x00,0x00, -0x7e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x70,0x00,0x00,0x00, -0x81,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x41,0x00,0x06,0x00, -0x7f,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x74,0x00,0x00,0x00, -0x36,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x3e,0x00,0x03,0x00, -0x82,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x85,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x85,0x00,0x00,0x00, -0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00, -}; -const uint64_t get_rows_f16_len = 2996; - -unsigned char get_rows_f16_f32_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0x89,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00, -0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c, -0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00, -0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x0f,0x00,0x0a,0x00,0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x1b,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x73,0x00,0x00,0x00, -0x7b,0x00,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x19,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x19,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,0x05,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x19,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x19,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00, -0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x19,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x30,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00, -0x0d,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,0x0e,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x19,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x3c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,0x11,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x19,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x48,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00, -0x13,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x4c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x19,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x54,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00, -0x16,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x58,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,0x17,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x5c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x19,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00, -0x19,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x64,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,0x1a,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x19,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x19,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x32,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x33,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x35,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x35,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x70,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0x71,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x71,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x71,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x73,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x73,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x78,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0x79,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x79,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x79,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x7b,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x7b,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x86,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x13,0x00,0x02,0x00, -0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00, -0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x16,0x00,0x03,0x00,0x18,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x1e,0x00,0x1e,0x00,0x19,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x1a,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x19,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x1a,0x00,0x00,0x00, -0x1b,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00, -0x1c,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x1c,0x00,0x00,0x00,0x1d,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x1e,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x1c,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x14,0x00,0x02,0x00,0x2c,0x00,0x00,0x00,0x1d,0x00,0x03,0x00, -0x32,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x1e,0x00,0x03,0x00, -0x33,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x34,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x33,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x34,0x00,0x00,0x00,0x35,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1c,0x00,0x00,0x00, -0x36,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x1c,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x0d,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x1c,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x0e,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1c,0x00,0x00,0x00, -0x43,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x48,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x1c,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1c,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x1c,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x1c,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x16,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1c,0x00,0x00,0x00, -0x65,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x1c,0x00,0x00,0x00,0x6b,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x1d,0x00,0x03,0x00,0x70,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x1e,0x00,0x03,0x00,0x71,0x00,0x00,0x00,0x70,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x72,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x71,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x72,0x00,0x00,0x00, -0x73,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x16,0x00,0x03,0x00, -0x77,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x1d,0x00,0x03,0x00, -0x78,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x1e,0x00,0x03,0x00, -0x79,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x7a,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x79,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x7a,0x00,0x00,0x00,0x7b,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x7f,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x83,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x85,0x00,0x00,0x00, -0x00,0x02,0x00,0x00,0x2c,0x00,0x06,0x00,0x09,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x11,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,0xf7,0x00,0x03,0x00, -0x87,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfb,0x00,0x03,0x00, -0x0c,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x88,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x11,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x13,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x16,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x15,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x17,0x00,0x00,0x00, -0x16,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x1e,0x00,0x00,0x00, -0x1f,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x1d,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x1f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x21,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x27,0x00,0x00,0x00, -0x17,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x1e,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x1b,0x00,0x00,0x00, -0x29,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x2b,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0xae,0x00,0x05,0x00, -0x2c,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x2b,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x2f,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x2d,0x00,0x00,0x00, -0x2e,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x2e,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x87,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x2f,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x1e,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x1b,0x00,0x00,0x00, -0x38,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x3a,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x13,0x00,0x00,0x00, -0x3a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x1e,0x00,0x00,0x00, -0x3e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x3f,0x00,0x00,0x00, -0x3e,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x3f,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x41,0x00,0x00,0x00, -0x3b,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x1e,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x1b,0x00,0x00,0x00, -0x43,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x45,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x46,0x00,0x00,0x00,0x27,0x00,0x00,0x00, -0x45,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x47,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x46,0x00,0x00,0x00, -0x41,0x00,0x06,0x00,0x48,0x00,0x00,0x00,0x49,0x00,0x00,0x00, -0x35,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x47,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x1c,0x00,0x00,0x00,0x4a,0x00,0x00,0x00, -0x49,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x4b,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x1e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x1b,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x50,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x4b,0x00,0x00,0x00, -0x50,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x1e,0x00,0x00,0x00, -0x54,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00, -0x54,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x56,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x55,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x57,0x00,0x00,0x00, -0x51,0x00,0x00,0x00,0x56,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x1e,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,0x1b,0x00,0x00,0x00, -0x59,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x5b,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x5c,0x00,0x00,0x00,0x27,0x00,0x00,0x00, -0x5b,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x5d,0x00,0x00,0x00,0x57,0x00,0x00,0x00,0x5c,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x1e,0x00,0x00,0x00,0x61,0x00,0x00,0x00, -0x1b,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x61,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x63,0x00,0x00,0x00, -0x13,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x1e,0x00,0x00,0x00,0x66,0x00,0x00,0x00,0x1b,0x00,0x00,0x00, -0x65,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x67,0x00,0x00,0x00,0x66,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0x67,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x69,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x68,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x1e,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x1b,0x00,0x00,0x00,0x6b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6e,0x00,0x00,0x00, -0x27,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x69,0x00,0x00,0x00, -0x6e,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x76,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7e,0x00,0x00,0x00, -0x5d,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x41,0x00,0x06,0x00, -0x7f,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x7b,0x00,0x00,0x00, -0x36,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x77,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x80,0x00,0x00,0x00, -0x73,0x00,0x04,0x00,0x18,0x00,0x00,0x00,0x82,0x00,0x00,0x00, -0x81,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x83,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x36,0x00,0x00,0x00, -0x76,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0x84,0x00,0x00,0x00, -0x82,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x87,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x87,0x00,0x00,0x00,0xfd,0x00,0x01,0x00, -0x38,0x00,0x01,0x00, -}; -const uint64_t get_rows_f16_f32_len = 3028; - -unsigned char get_rows_f32_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0x89,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00, -0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c, -0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00, -0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x0f,0x00,0x0a,0x00,0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x1b,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x74,0x00,0x00,0x00, -0x7b,0x00,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x19,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x19,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,0x05,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x19,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x19,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00, -0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x19,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x30,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00, -0x0d,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,0x0e,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x19,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x3c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,0x11,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x19,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x48,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00, -0x13,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x4c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x19,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x54,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00, -0x16,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x58,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,0x17,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x5c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x19,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00, -0x19,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x64,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,0x1a,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x19,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x19,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x32,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x33,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x35,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x35,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x71,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0x72,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x72,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x72,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x74,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x74,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x78,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0x79,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x79,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x79,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x7b,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x7b,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x86,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x13,0x00,0x02,0x00, -0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00, -0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x16,0x00,0x03,0x00,0x18,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x1e,0x00,0x1e,0x00,0x19,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x1a,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x19,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x1a,0x00,0x00,0x00, -0x1b,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00, -0x1c,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x1c,0x00,0x00,0x00,0x1d,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x1e,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x1c,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x14,0x00,0x02,0x00,0x2c,0x00,0x00,0x00,0x1d,0x00,0x03,0x00, -0x32,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x1e,0x00,0x03,0x00, -0x33,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x34,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x33,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x34,0x00,0x00,0x00,0x35,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1c,0x00,0x00,0x00, -0x36,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x1c,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x0d,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x1c,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x0e,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1c,0x00,0x00,0x00, -0x43,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x48,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x1c,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1c,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x1c,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x1c,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x16,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1c,0x00,0x00,0x00, -0x65,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x1c,0x00,0x00,0x00,0x6b,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x16,0x00,0x03,0x00,0x70,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x1d,0x00,0x03,0x00,0x71,0x00,0x00,0x00,0x70,0x00,0x00,0x00, -0x1e,0x00,0x03,0x00,0x72,0x00,0x00,0x00,0x71,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x73,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x72,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x73,0x00,0x00,0x00, -0x74,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x1d,0x00,0x03,0x00, -0x78,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x1e,0x00,0x03,0x00, -0x79,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x7a,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x79,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x7a,0x00,0x00,0x00,0x7b,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x7f,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x83,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x70,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x85,0x00,0x00,0x00, -0x00,0x02,0x00,0x00,0x2c,0x00,0x06,0x00,0x09,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x11,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,0xf7,0x00,0x03,0x00, -0x87,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfb,0x00,0x03,0x00, -0x0c,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x88,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x11,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x13,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x16,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x15,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x17,0x00,0x00,0x00, -0x16,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x1e,0x00,0x00,0x00, -0x1f,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x1d,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x1f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x21,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x27,0x00,0x00,0x00, -0x17,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x1e,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x1b,0x00,0x00,0x00, -0x29,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x2b,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0xae,0x00,0x05,0x00, -0x2c,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x2b,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x2f,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x2d,0x00,0x00,0x00, -0x2e,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x2e,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x87,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x2f,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x1e,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x1b,0x00,0x00,0x00, -0x38,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x3a,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x13,0x00,0x00,0x00, -0x3a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x1e,0x00,0x00,0x00, -0x3e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x3f,0x00,0x00,0x00, -0x3e,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x3f,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x41,0x00,0x00,0x00, -0x3b,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x1e,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x1b,0x00,0x00,0x00, -0x43,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x45,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x46,0x00,0x00,0x00,0x27,0x00,0x00,0x00, -0x45,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x47,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x46,0x00,0x00,0x00, -0x41,0x00,0x06,0x00,0x48,0x00,0x00,0x00,0x49,0x00,0x00,0x00, -0x35,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x47,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x1c,0x00,0x00,0x00,0x4a,0x00,0x00,0x00, -0x49,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x4b,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x1e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x1b,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x50,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x4b,0x00,0x00,0x00, -0x50,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x1e,0x00,0x00,0x00, -0x54,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00, -0x54,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x56,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x55,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x57,0x00,0x00,0x00, -0x51,0x00,0x00,0x00,0x56,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x1e,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,0x1b,0x00,0x00,0x00, -0x59,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x5b,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x5c,0x00,0x00,0x00,0x27,0x00,0x00,0x00, -0x5b,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x5d,0x00,0x00,0x00,0x57,0x00,0x00,0x00,0x5c,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x1e,0x00,0x00,0x00,0x61,0x00,0x00,0x00, -0x1b,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x61,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x63,0x00,0x00,0x00, -0x13,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x1e,0x00,0x00,0x00,0x66,0x00,0x00,0x00,0x1b,0x00,0x00,0x00, -0x65,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x67,0x00,0x00,0x00,0x66,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0x67,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x69,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x68,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x1e,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x1b,0x00,0x00,0x00,0x6b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6e,0x00,0x00,0x00, -0x27,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x69,0x00,0x00,0x00, -0x6e,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x77,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7e,0x00,0x00,0x00, -0x5d,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x41,0x00,0x06,0x00, -0x7f,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x7b,0x00,0x00,0x00, -0x36,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x18,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x80,0x00,0x00,0x00, -0x73,0x00,0x04,0x00,0x70,0x00,0x00,0x00,0x82,0x00,0x00,0x00, -0x81,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x83,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x36,0x00,0x00,0x00, -0x77,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0x84,0x00,0x00,0x00, -0x82,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x87,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x87,0x00,0x00,0x00,0xfd,0x00,0x01,0x00, -0x38,0x00,0x01,0x00, -}; -const uint64_t get_rows_f32_len = 3028; - -unsigned char get_rows_f32_f32_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0x86,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00, -0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30, -0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x0f,0x00,0x0a,0x00,0x05,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x35,0x00,0x00,0x00, -0x73,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,0x10,0x00,0x06,0x00, -0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x00,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x19,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x19,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00, -0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x19,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x19,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x19,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x34,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00, -0x0e,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x38,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x19,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x44,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x19,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x4c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x50,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,0x15,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x19,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x58,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00, -0x17,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x5c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x19,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x64,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00, -0x1a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x68,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,0x1b,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x19,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x32,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x04,0x00,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x33,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0x33,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x35,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x35,0x00,0x00,0x00, -0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x70,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x04,0x00,0x71,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x71,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0x71,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x73,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x73,0x00,0x00,0x00, -0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x77,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x04,0x00,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x78,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0x78,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x7a,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x7a,0x00,0x00,0x00, -0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x83,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00, -0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x15,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0x18,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x1e,0x00,0x1e,0x00,0x19,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x1a,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x1a,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x1c,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1c,0x00,0x00,0x00, -0x1d,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x1e,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x1c,0x00,0x00,0x00,0x29,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x14,0x00,0x02,0x00,0x2c,0x00,0x00,0x00, -0x1d,0x00,0x03,0x00,0x32,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x1e,0x00,0x03,0x00,0x33,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x34,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x33,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x34,0x00,0x00,0x00, -0x35,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x1c,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x1c,0x00,0x00,0x00,0x38,0x00,0x00,0x00, -0x0d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1c,0x00,0x00,0x00, -0x3d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x1c,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x48,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x1c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1c,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x1c,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x1c,0x00,0x00,0x00,0x59,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1c,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x1c,0x00,0x00,0x00,0x65,0x00,0x00,0x00,0x17,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x1c,0x00,0x00,0x00,0x6b,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x70,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x71,0x00,0x00,0x00, -0x70,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x72,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x71,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x72,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x1d,0x00,0x03,0x00,0x77,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x1e,0x00,0x03,0x00,0x78,0x00,0x00,0x00,0x77,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x79,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x78,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x79,0x00,0x00,0x00, -0x7a,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x7e,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x82,0x00,0x00,0x00, -0x00,0x02,0x00,0x00,0x2c,0x00,0x06,0x00,0x09,0x00,0x00,0x00, -0x83,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x11,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,0xf7,0x00,0x03,0x00, -0x84,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfb,0x00,0x03,0x00, -0x0c,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x85,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x11,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x13,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x16,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x15,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x17,0x00,0x00,0x00, -0x16,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x1e,0x00,0x00,0x00, -0x1f,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x1d,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x1f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x21,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x27,0x00,0x00,0x00, -0x17,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x1e,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x1b,0x00,0x00,0x00, -0x29,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x2b,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0xae,0x00,0x05,0x00, -0x2c,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x2b,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x2f,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x2d,0x00,0x00,0x00, -0x2e,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x2e,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x84,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x2f,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x1e,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x1b,0x00,0x00,0x00, -0x38,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x3a,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x13,0x00,0x00,0x00, -0x3a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x1e,0x00,0x00,0x00, -0x3e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x3f,0x00,0x00,0x00, -0x3e,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x3f,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x41,0x00,0x00,0x00, -0x3b,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x1e,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x1b,0x00,0x00,0x00, -0x43,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x45,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x46,0x00,0x00,0x00,0x27,0x00,0x00,0x00, -0x45,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x47,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x46,0x00,0x00,0x00, -0x41,0x00,0x06,0x00,0x48,0x00,0x00,0x00,0x49,0x00,0x00,0x00, -0x35,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x47,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x1c,0x00,0x00,0x00,0x4a,0x00,0x00,0x00, -0x49,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x4b,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x1e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x1b,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x50,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x4b,0x00,0x00,0x00, -0x50,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x1e,0x00,0x00,0x00, -0x54,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00, -0x54,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x56,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x55,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x57,0x00,0x00,0x00, -0x51,0x00,0x00,0x00,0x56,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x1e,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,0x1b,0x00,0x00,0x00, -0x59,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x5b,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x5c,0x00,0x00,0x00,0x27,0x00,0x00,0x00, -0x5b,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x5d,0x00,0x00,0x00,0x57,0x00,0x00,0x00,0x5c,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x1e,0x00,0x00,0x00,0x61,0x00,0x00,0x00, -0x1b,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x61,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x63,0x00,0x00,0x00, -0x13,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x1e,0x00,0x00,0x00,0x66,0x00,0x00,0x00,0x1b,0x00,0x00,0x00, -0x65,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x67,0x00,0x00,0x00,0x66,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0x67,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x69,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x68,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x1e,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x1b,0x00,0x00,0x00,0x6b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6e,0x00,0x00,0x00, -0x27,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x69,0x00,0x00,0x00, -0x6e,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x76,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7d,0x00,0x00,0x00, -0x5d,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x41,0x00,0x06,0x00, -0x7e,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x7a,0x00,0x00,0x00, -0x36,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x18,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x7f,0x00,0x00,0x00, -0x41,0x00,0x06,0x00,0x7e,0x00,0x00,0x00,0x81,0x00,0x00,0x00, -0x73,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x76,0x00,0x00,0x00, -0x3e,0x00,0x03,0x00,0x81,0x00,0x00,0x00,0x80,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x84,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x84,0x00,0x00,0x00,0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00, - -}; -const uint64_t get_rows_f32_f32_len = 2976; - -unsigned char get_rows_q4_0_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0xcb,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00, -0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00, -0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64, -0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00, -0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0f,0x00,0x0a,0x00, -0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e, -0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x36,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0xac,0x00,0x00,0x00, -0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00, -0x00,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x0a,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x0d,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x38,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x3c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x44,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x48,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x13,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x50,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x54,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x16,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x5c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x68,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x1b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0x1a,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x33,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x34,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x34,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x34,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x36,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x36,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x85,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x86,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x86,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x87,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x48,0x00,0x04,0x00,0x88,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x88,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0x88,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x8a,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x8a,0x00,0x00,0x00, -0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xa9,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x48,0x00,0x04,0x00,0xaa,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0xaa,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0xaa,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xac,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xac,0x00,0x00,0x00, -0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xc1,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00, -0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x13,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0x19,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x1e,0x00,0x1e,0x00,0x1a,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x19,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x1b,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x1b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x1d,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1d,0x00,0x00,0x00, -0x1e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x1f,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x1d,0x00,0x00,0x00,0x2a,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x14,0x00,0x02,0x00,0x2d,0x00,0x00,0x00, -0x1d,0x00,0x03,0x00,0x33,0x00,0x00,0x00,0x1d,0x00,0x00,0x00, -0x1e,0x00,0x03,0x00,0x34,0x00,0x00,0x00,0x33,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x35,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x34,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x35,0x00,0x00,0x00, -0x36,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x1d,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x1d,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x0d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1d,0x00,0x00,0x00, -0x3e,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x1d,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x49,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x1d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1d,0x00,0x00,0x00, -0x4f,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x1d,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x1d,0x00,0x00,0x00,0x5a,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1d,0x00,0x00,0x00, -0x61,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x1d,0x00,0x00,0x00,0x66,0x00,0x00,0x00,0x17,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x1d,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x74,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x16,0x00,0x03,0x00, -0x82,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x15,0x00,0x04,0x00, -0x83,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x85,0x00,0x00,0x00, -0x83,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x1e,0x00,0x04,0x00, -0x86,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x85,0x00,0x00,0x00, -0x1d,0x00,0x03,0x00,0x87,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x1e,0x00,0x03,0x00,0x88,0x00,0x00,0x00,0x87,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x89,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x88,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x89,0x00,0x00,0x00, -0x8a,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x8c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x82,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x93,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x83,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x97,0x00,0x00,0x00, -0x19,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x1d,0x00,0x00,0x00,0x9f,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x19,0x00,0x00,0x00, -0xa4,0x00,0x00,0x00,0x00,0x00,0x00,0x41,0x1d,0x00,0x03,0x00, -0xa9,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x1e,0x00,0x03,0x00, -0xaa,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0xab,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xaa,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0xab,0x00,0x00,0x00,0xac,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xc0,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x2c,0x00,0x06,0x00, -0x09,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,0xc0,0x00,0x00,0x00, -0x13,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x2c,0x00,0x05,0x00, -0x97,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0xa4,0x00,0x00,0x00, -0xa4,0x00,0x00,0x00,0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,0xf7,0x00,0x03,0x00, -0xc2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfb,0x00,0x03,0x00, -0x0c,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xc3,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x0e,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x17,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x17,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x1f,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x1c,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x21,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x1f,0x00,0x00,0x00, -0x2b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x2a,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x2c,0x00,0x00,0x00, -0x2b,0x00,0x00,0x00,0xae,0x00,0x05,0x00,0x2d,0x00,0x00,0x00, -0x2e,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x2c,0x00,0x00,0x00, -0xf7,0x00,0x03,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x2e,0x00,0x00,0x00,0x2f,0x00,0x00,0x00, -0x30,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x2f,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xc2,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x30,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x1f,0x00,0x00,0x00, -0x3a,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00, -0x3a,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x3c,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x3b,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x1f,0x00,0x00,0x00,0x3f,0x00,0x00,0x00, -0x1c,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x3f,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x41,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x3c,0x00,0x00,0x00, -0x41,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x1f,0x00,0x00,0x00, -0x45,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x44,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x46,0x00,0x00,0x00, -0x45,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x47,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x46,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x48,0x00,0x00,0x00, -0x42,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0x41,0x00,0x06,0x00, -0x49,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x36,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x1d,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0x4a,0x00,0x00,0x00, -0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4c,0x00,0x00,0x00, -0x4b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x1f,0x00,0x00,0x00, -0x50,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x4f,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x51,0x00,0x00,0x00, -0x50,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x52,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x51,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x1f,0x00,0x00,0x00,0x55,0x00,0x00,0x00, -0x1c,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x56,0x00,0x00,0x00,0x55,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x57,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x56,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x52,0x00,0x00,0x00, -0x57,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x1f,0x00,0x00,0x00, -0x5b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x5a,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x5c,0x00,0x00,0x00, -0x5b,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x5d,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x5c,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5e,0x00,0x00,0x00, -0x58,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x1f,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x61,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x63,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x15,0x00,0x00,0x00, -0x63,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x1f,0x00,0x00,0x00, -0x67,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x66,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x68,0x00,0x00,0x00, -0x67,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x69,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x68,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6a,0x00,0x00,0x00, -0x64,0x00,0x00,0x00,0x69,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x1f,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x6e,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0x6e,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x70,0x00,0x00,0x00,0x6a,0x00,0x00,0x00,0x6f,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x75,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x5e,0x00,0x00,0x00, -0x75,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x79,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x74,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7a,0x00,0x00,0x00, -0x79,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x82,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x11,0x00,0x00,0x00, -0x79,0x00,0x00,0x00,0x41,0x00,0x07,0x00,0x8c,0x00,0x00,0x00, -0x8d,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x76,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x82,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0x8d,0x00,0x00,0x00, -0x73,0x00,0x04,0x00,0x19,0x00,0x00,0x00,0x8f,0x00,0x00,0x00, -0x8e,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x93,0x00,0x00,0x00, -0x94,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x76,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x7a,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x83,0x00,0x00,0x00,0x95,0x00,0x00,0x00, -0x94,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x96,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0xc7,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0x96,0x00,0x00,0x00, -0x9b,0x00,0x00,0x00,0x70,0x00,0x04,0x00,0x19,0x00,0x00,0x00, -0x9d,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0xc2,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0x96,0x00,0x00,0x00, -0x9f,0x00,0x00,0x00,0x70,0x00,0x04,0x00,0x19,0x00,0x00,0x00, -0xa1,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0x50,0x00,0x05,0x00, -0x97,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x9d,0x00,0x00,0x00, -0xa1,0x00,0x00,0x00,0x83,0x00,0x05,0x00,0x97,0x00,0x00,0x00, -0xa6,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0xca,0x00,0x00,0x00, -0x8e,0x00,0x05,0x00,0x97,0x00,0x00,0x00,0xa8,0x00,0x00,0x00, -0xa6,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0x70,0x00,0x00,0x00, -0x7f,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xb1,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0x7a,0x00,0x00,0x00, -0x51,0x00,0x05,0x00,0x19,0x00,0x00,0x00,0xb3,0x00,0x00,0x00, -0xa8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x73,0x00,0x04,0x00, -0x82,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0xb3,0x00,0x00,0x00, -0x41,0x00,0x06,0x00,0x8c,0x00,0x00,0x00,0xb5,0x00,0x00,0x00, -0xac,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0xb1,0x00,0x00,0x00, -0x3e,0x00,0x03,0x00,0xb5,0x00,0x00,0x00,0xb4,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbb,0x00,0x00,0x00, -0xb1,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x51,0x00,0x05,0x00, -0x19,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0xa8,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x82,0x00,0x00,0x00, -0xbe,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x41,0x00,0x06,0x00, -0x8c,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0xac,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x3e,0x00,0x03,0x00, -0xbf,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xc2,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xc2,0x00,0x00,0x00, -0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00, -}; -const uint64_t get_rows_q4_0_len = 3704; - -unsigned char get_rows_q4_0_f32_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0xca,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00, -0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00, -0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64, -0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00, -0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0f,0x00,0x0a,0x00, -0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e, -0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x36,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0xac,0x00,0x00,0x00, -0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00, -0x00,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x0a,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x0d,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x38,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x3c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x44,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x48,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x13,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x50,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x54,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x16,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x5c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x68,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x1b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0x1a,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x33,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x34,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x34,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x34,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x36,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x36,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x85,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x86,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x86,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x87,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x48,0x00,0x04,0x00,0x88,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x88,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0x88,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x8a,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x8a,0x00,0x00,0x00, -0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xa9,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x04,0x00,0xaa,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0xaa,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0xaa,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xac,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xac,0x00,0x00,0x00, -0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xc0,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00, -0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x13,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0x19,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x1e,0x00,0x1e,0x00,0x1a,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x19,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x1b,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x1b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x1d,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1d,0x00,0x00,0x00, -0x1e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x1f,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x1d,0x00,0x00,0x00,0x2a,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x14,0x00,0x02,0x00,0x2d,0x00,0x00,0x00, -0x1d,0x00,0x03,0x00,0x33,0x00,0x00,0x00,0x1d,0x00,0x00,0x00, -0x1e,0x00,0x03,0x00,0x34,0x00,0x00,0x00,0x33,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x35,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x34,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x35,0x00,0x00,0x00, -0x36,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x1d,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x1d,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x0d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1d,0x00,0x00,0x00, -0x3e,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x1d,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x49,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x1d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1d,0x00,0x00,0x00, -0x4f,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x1d,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x1d,0x00,0x00,0x00,0x5a,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1d,0x00,0x00,0x00, -0x61,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x1d,0x00,0x00,0x00,0x66,0x00,0x00,0x00,0x17,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x1d,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x74,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x16,0x00,0x03,0x00, -0x82,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x15,0x00,0x04,0x00, -0x83,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x85,0x00,0x00,0x00, -0x83,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x1e,0x00,0x04,0x00, -0x86,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x85,0x00,0x00,0x00, -0x1d,0x00,0x03,0x00,0x87,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x1e,0x00,0x03,0x00,0x88,0x00,0x00,0x00,0x87,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x89,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x88,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x89,0x00,0x00,0x00, -0x8a,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x8c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x82,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x93,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x83,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x97,0x00,0x00,0x00, -0x19,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x1d,0x00,0x00,0x00,0x9f,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x19,0x00,0x00,0x00, -0xa4,0x00,0x00,0x00,0x00,0x00,0x00,0x41,0x1d,0x00,0x03,0x00, -0xa9,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x1e,0x00,0x03,0x00, -0xaa,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0xab,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xaa,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0xab,0x00,0x00,0x00,0xac,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xb4,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x00,0x02,0x00,0x00, -0x2c,0x00,0x06,0x00,0x09,0x00,0x00,0x00,0xc0,0x00,0x00,0x00, -0xbf,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x13,0x00,0x00,0x00, -0x2c,0x00,0x05,0x00,0x97,0x00,0x00,0x00,0xc9,0x00,0x00,0x00, -0xa4,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0x36,0x00,0x05,0x00, -0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00, -0xf7,0x00,0x03,0x00,0xc1,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0xfb,0x00,0x03,0x00,0x0c,0x00,0x00,0x00,0xc2,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xc2,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x13,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x15,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x17,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x17,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x1f,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x1e,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x1f,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x2a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x2c,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0xae,0x00,0x05,0x00, -0x2d,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x11,0x00,0x00,0x00, -0x2c,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x30,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x2e,0x00,0x00,0x00, -0x2f,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x2f,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xc1,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x30,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x1f,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x3b,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x15,0x00,0x00,0x00, -0x3b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x1f,0x00,0x00,0x00, -0x3f,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x3e,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x3f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x41,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x42,0x00,0x00,0x00, -0x3c,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x1f,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x44,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x46,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0x46,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x48,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x47,0x00,0x00,0x00, -0x41,0x00,0x06,0x00,0x49,0x00,0x00,0x00,0x4a,0x00,0x00,0x00, -0x36,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x48,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x1d,0x00,0x00,0x00,0x4b,0x00,0x00,0x00, -0x4a,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x4c,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x1f,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x4f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x51,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x52,0x00,0x00,0x00,0x4c,0x00,0x00,0x00, -0x51,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x1f,0x00,0x00,0x00, -0x55,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x54,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x56,0x00,0x00,0x00, -0x55,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x57,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x56,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x58,0x00,0x00,0x00, -0x52,0x00,0x00,0x00,0x57,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x1f,0x00,0x00,0x00,0x5b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x5a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x5c,0x00,0x00,0x00,0x5b,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0x5c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x5e,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x5d,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x1f,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x1c,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x64,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x1f,0x00,0x00,0x00,0x67,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x66,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x68,0x00,0x00,0x00,0x67,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x69,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x68,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x6a,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x69,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x1f,0x00,0x00,0x00,0x6d,0x00,0x00,0x00, -0x1c,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x6d,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6f,0x00,0x00,0x00, -0x28,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x6a,0x00,0x00,0x00, -0x6f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x75,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x74,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x76,0x00,0x00,0x00, -0x5e,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x11,0x00,0x00,0x00, -0x74,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x7a,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7f,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x41,0x00,0x07,0x00, -0x8c,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x8a,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x82,0x00,0x00,0x00,0x8e,0x00,0x00,0x00, -0x8d,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x19,0x00,0x00,0x00, -0x8f,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0x41,0x00,0x08,0x00, -0x93,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x8a,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x2a,0x00,0x00,0x00, -0x7a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x83,0x00,0x00,0x00, -0x95,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x95,0x00,0x00,0x00, -0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9c,0x00,0x00,0x00, -0x96,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x70,0x00,0x04,0x00, -0x19,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,0x9c,0x00,0x00,0x00, -0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa0,0x00,0x00,0x00, -0x96,0x00,0x00,0x00,0x9f,0x00,0x00,0x00,0x70,0x00,0x04,0x00, -0x19,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0xa0,0x00,0x00,0x00, -0x50,0x00,0x05,0x00,0x97,0x00,0x00,0x00,0xa2,0x00,0x00,0x00, -0x9d,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0x83,0x00,0x05,0x00, -0x97,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,0xa2,0x00,0x00,0x00, -0xc9,0x00,0x00,0x00,0x8e,0x00,0x05,0x00,0x97,0x00,0x00,0x00, -0xa8,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,0x8f,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xaf,0x00,0x00,0x00, -0x70,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,0xaf,0x00,0x00,0x00, -0x7a,0x00,0x00,0x00,0x51,0x00,0x05,0x00,0x19,0x00,0x00,0x00, -0xb3,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x41,0x00,0x06,0x00,0xb4,0x00,0x00,0x00,0xb5,0x00,0x00,0x00, -0xac,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0xb1,0x00,0x00,0x00, -0x3e,0x00,0x03,0x00,0xb5,0x00,0x00,0x00,0xb3,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbb,0x00,0x00,0x00, -0xb1,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x51,0x00,0x05,0x00, -0x19,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0xa8,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0xb4,0x00,0x00,0x00, -0xbe,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0xbb,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0xbe,0x00,0x00,0x00, -0xbd,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xc1,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xc1,0x00,0x00,0x00,0xfd,0x00,0x01,0x00, -0x38,0x00,0x01,0x00, -}; -const uint64_t get_rows_q4_0_f32_len = 3688; - -unsigned char get_rows_q4_1_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0xca,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00, -0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00, -0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64, -0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00, -0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0f,0x00,0x0a,0x00, -0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e, -0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x36,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0xb2,0x00,0x00,0x00, -0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00, -0x00,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x0a,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x0d,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x38,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x3c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x44,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x48,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x13,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x50,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x54,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x16,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x5c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x68,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x1b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0x1a,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x33,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x34,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x34,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x34,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x36,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x36,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x85,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x86,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x86,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x86,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x87,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0x88,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x88,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x88,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x8a,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x8a,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xaf,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0xb0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0xb0,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0xb0,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xb2,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xb2,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xc7,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x13,0x00,0x02,0x00, -0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00, -0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x16,0x00,0x03,0x00,0x19,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x1e,0x00,0x1e,0x00,0x1a,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x1a,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00, -0x1c,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00, -0x1d,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x1d,0x00,0x00,0x00,0x1e,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x1f,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x1d,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x14,0x00,0x02,0x00,0x2d,0x00,0x00,0x00,0x1d,0x00,0x03,0x00, -0x33,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,0x1e,0x00,0x03,0x00, -0x34,0x00,0x00,0x00,0x33,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x35,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x35,0x00,0x00,0x00,0x36,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1d,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x1d,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x0d,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x1d,0x00,0x00,0x00,0x3e,0x00,0x00,0x00, -0x0e,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1d,0x00,0x00,0x00, -0x44,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x49,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x1d,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x1d,0x00,0x00,0x00,0x4f,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1d,0x00,0x00,0x00, -0x54,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x1d,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x1d,0x00,0x00,0x00,0x61,0x00,0x00,0x00, -0x16,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1d,0x00,0x00,0x00, -0x66,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x1d,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x74,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0x82,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x83,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x1c,0x00,0x04,0x00,0x85,0x00,0x00,0x00,0x83,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0x1e,0x00,0x05,0x00,0x86,0x00,0x00,0x00, -0x82,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x85,0x00,0x00,0x00, -0x1d,0x00,0x03,0x00,0x87,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x1e,0x00,0x03,0x00,0x88,0x00,0x00,0x00,0x87,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x89,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x88,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x89,0x00,0x00,0x00, -0x8a,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x8c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x82,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x1d,0x00,0x00,0x00,0x97,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x99,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x17,0x00,0x04,0x00, -0x9d,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa1,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1d,0x00,0x00,0x00, -0xa5,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x1d,0x00,0x03,0x00, -0xaf,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x1e,0x00,0x03,0x00, -0xb0,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0xb1,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xb0,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0xb1,0x00,0x00,0x00,0xb2,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xc6,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x2c,0x00,0x06,0x00, -0x09,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0xc6,0x00,0x00,0x00, -0x13,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x36,0x00,0x05,0x00, -0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00, -0xf7,0x00,0x03,0x00,0xc8,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0xfb,0x00,0x03,0x00,0x0c,0x00,0x00,0x00,0xc9,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xc9,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x13,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x15,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x17,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x17,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x1f,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x1e,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x1f,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x2a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x2c,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0xae,0x00,0x05,0x00, -0x2d,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x11,0x00,0x00,0x00, -0x2c,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x30,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x2e,0x00,0x00,0x00, -0x2f,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x2f,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xc8,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x30,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x1f,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x3b,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x15,0x00,0x00,0x00, -0x3b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x1f,0x00,0x00,0x00, -0x3f,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x3e,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x3f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x41,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x42,0x00,0x00,0x00, -0x3c,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x1f,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x44,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x46,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0x46,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x48,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x47,0x00,0x00,0x00, -0x41,0x00,0x06,0x00,0x49,0x00,0x00,0x00,0x4a,0x00,0x00,0x00, -0x36,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x48,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x1d,0x00,0x00,0x00,0x4b,0x00,0x00,0x00, -0x4a,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x4c,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x1f,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x4f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x51,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x52,0x00,0x00,0x00,0x4c,0x00,0x00,0x00, -0x51,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x1f,0x00,0x00,0x00, -0x55,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x54,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x56,0x00,0x00,0x00, -0x55,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x57,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x56,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x58,0x00,0x00,0x00, -0x52,0x00,0x00,0x00,0x57,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x1f,0x00,0x00,0x00,0x5b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x5a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x5c,0x00,0x00,0x00,0x5b,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0x5c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x5e,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x5d,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x1f,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x1c,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x64,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x1f,0x00,0x00,0x00,0x67,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x66,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x68,0x00,0x00,0x00,0x67,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x69,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x68,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x6a,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x69,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x1f,0x00,0x00,0x00,0x6d,0x00,0x00,0x00, -0x1c,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x6d,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6f,0x00,0x00,0x00, -0x28,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x6a,0x00,0x00,0x00, -0x6f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x75,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x74,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x76,0x00,0x00,0x00, -0x5e,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x11,0x00,0x00,0x00, -0x74,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x7a,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7f,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x41,0x00,0x07,0x00, -0x8c,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x8a,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x82,0x00,0x00,0x00,0x8e,0x00,0x00,0x00, -0x8d,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x19,0x00,0x00,0x00, -0x8f,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0x41,0x00,0x07,0x00, -0x8c,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x8a,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x2a,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x82,0x00,0x00,0x00,0x93,0x00,0x00,0x00, -0x92,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x19,0x00,0x00,0x00, -0x94,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x41,0x00,0x08,0x00, -0x99,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x8a,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x97,0x00,0x00,0x00, -0x7a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x83,0x00,0x00,0x00, -0x9b,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0x9b,0x00,0x00,0x00, -0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa2,0x00,0x00,0x00, -0x9c,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0x70,0x00,0x04,0x00, -0x19,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0xa2,0x00,0x00,0x00, -0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa6,0x00,0x00,0x00, -0x9c,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,0x70,0x00,0x04,0x00, -0x19,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0xa6,0x00,0x00,0x00, -0x50,0x00,0x05,0x00,0x9d,0x00,0x00,0x00,0xa8,0x00,0x00,0x00, -0xa3,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0x8e,0x00,0x05,0x00, -0x9d,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0xa8,0x00,0x00,0x00, -0x8f,0x00,0x00,0x00,0x50,0x00,0x05,0x00,0x9d,0x00,0x00,0x00, -0xad,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x94,0x00,0x00,0x00, -0x81,0x00,0x05,0x00,0x9d,0x00,0x00,0x00,0xae,0x00,0x00,0x00, -0xab,0x00,0x00,0x00,0xad,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,0x70,0x00,0x00,0x00, -0x7f,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xb7,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,0x7a,0x00,0x00,0x00, -0x51,0x00,0x05,0x00,0x19,0x00,0x00,0x00,0xb9,0x00,0x00,0x00, -0xae,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x73,0x00,0x04,0x00, -0x82,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0xb9,0x00,0x00,0x00, -0x41,0x00,0x06,0x00,0x8c,0x00,0x00,0x00,0xbb,0x00,0x00,0x00, -0xb2,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0xb7,0x00,0x00,0x00, -0x3e,0x00,0x03,0x00,0xbb,0x00,0x00,0x00,0xba,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc1,0x00,0x00,0x00, -0xb7,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x51,0x00,0x05,0x00, -0x19,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0xae,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x82,0x00,0x00,0x00, -0xc4,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0x41,0x00,0x06,0x00, -0x8c,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0xb2,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,0x3e,0x00,0x03,0x00, -0xc5,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xc8,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xc8,0x00,0x00,0x00, -0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00, -}; -const uint64_t get_rows_q4_1_len = 3788; - -unsigned char get_rows_q4_1_f32_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0xc9,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00, -0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00, -0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64, -0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00, -0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0f,0x00,0x0a,0x00, -0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e, -0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x36,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0xb2,0x00,0x00,0x00, -0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00, -0x00,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x0a,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x0d,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x38,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x3c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x44,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x48,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x13,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x50,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x54,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x16,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x5c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x68,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x1b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0x1a,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x33,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x34,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x34,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x34,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x36,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x36,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x85,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x86,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x86,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x86,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x87,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0x88,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x88,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x88,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x8a,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x8a,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xaf,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0xb0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0xb0,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0xb0,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xb2,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xb2,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xc6,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x13,0x00,0x02,0x00, -0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00, -0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x16,0x00,0x03,0x00,0x19,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x1e,0x00,0x1e,0x00,0x1a,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x1a,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00, -0x1c,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00, -0x1d,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x1d,0x00,0x00,0x00,0x1e,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x1f,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x1d,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x14,0x00,0x02,0x00,0x2d,0x00,0x00,0x00,0x1d,0x00,0x03,0x00, -0x33,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,0x1e,0x00,0x03,0x00, -0x34,0x00,0x00,0x00,0x33,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x35,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x35,0x00,0x00,0x00,0x36,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1d,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x1d,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x0d,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x1d,0x00,0x00,0x00,0x3e,0x00,0x00,0x00, -0x0e,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1d,0x00,0x00,0x00, -0x44,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x49,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x1d,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x1d,0x00,0x00,0x00,0x4f,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1d,0x00,0x00,0x00, -0x54,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x1d,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x1d,0x00,0x00,0x00,0x61,0x00,0x00,0x00, -0x16,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1d,0x00,0x00,0x00, -0x66,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x1d,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x74,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0x82,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x83,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x1c,0x00,0x04,0x00,0x85,0x00,0x00,0x00,0x83,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0x1e,0x00,0x05,0x00,0x86,0x00,0x00,0x00, -0x82,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x85,0x00,0x00,0x00, -0x1d,0x00,0x03,0x00,0x87,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x1e,0x00,0x03,0x00,0x88,0x00,0x00,0x00,0x87,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x89,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x88,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x89,0x00,0x00,0x00, -0x8a,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x8c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x82,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x1d,0x00,0x00,0x00,0x97,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x99,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x17,0x00,0x04,0x00, -0x9d,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa1,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1d,0x00,0x00,0x00, -0xa5,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x1d,0x00,0x03,0x00, -0xaf,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x1e,0x00,0x03,0x00, -0xb0,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0xb1,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xb0,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0xb1,0x00,0x00,0x00,0xb2,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xba,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0x00,0x02,0x00,0x00, -0x2c,0x00,0x06,0x00,0x09,0x00,0x00,0x00,0xc6,0x00,0x00,0x00, -0xc5,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x13,0x00,0x00,0x00, -0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x05,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0xc7,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0xfb,0x00,0x03,0x00,0x0c,0x00,0x00,0x00, -0xc8,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xc8,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x11,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x13,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x1f,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x1e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x21,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x21,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x28,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x1f,0x00,0x00,0x00,0x2b,0x00,0x00,0x00, -0x1c,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x2b,0x00,0x00,0x00, -0xae,0x00,0x05,0x00,0x2d,0x00,0x00,0x00,0x2e,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0xf7,0x00,0x03,0x00, -0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x2e,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x30,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x2f,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xc7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x30,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x1f,0x00,0x00,0x00,0x3a,0x00,0x00,0x00, -0x1c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x3a,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3c,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x1f,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x42,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x41,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x1f,0x00,0x00,0x00,0x45,0x00,0x00,0x00, -0x1c,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x46,0x00,0x00,0x00,0x45,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x47,0x00,0x00,0x00, -0x28,0x00,0x00,0x00,0x46,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x42,0x00,0x00,0x00, -0x47,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x49,0x00,0x00,0x00, -0x4a,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x48,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x1d,0x00,0x00,0x00, -0x4b,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x7c,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x4b,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x1f,0x00,0x00,0x00,0x50,0x00,0x00,0x00, -0x1c,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x50,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x52,0x00,0x00,0x00, -0x4c,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x1f,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x54,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x56,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x57,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x56,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x58,0x00,0x00,0x00,0x52,0x00,0x00,0x00,0x57,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x1f,0x00,0x00,0x00,0x5b,0x00,0x00,0x00, -0x1c,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x5c,0x00,0x00,0x00,0x5b,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5d,0x00,0x00,0x00, -0x28,0x00,0x00,0x00,0x5c,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x58,0x00,0x00,0x00, -0x5d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x1f,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x61,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x63,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x64,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x63,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x1f,0x00,0x00,0x00,0x67,0x00,0x00,0x00, -0x1c,0x00,0x00,0x00,0x66,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x67,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x69,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x6a,0x00,0x00,0x00,0x64,0x00,0x00,0x00, -0x69,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x1f,0x00,0x00,0x00, -0x6d,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x6e,0x00,0x00,0x00, -0x6d,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x6f,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x6e,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x70,0x00,0x00,0x00, -0x6a,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0x11,0x00,0x00,0x00, -0x74,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x76,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x75,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x79,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,0x79,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x7f,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x79,0x00,0x00,0x00, -0x41,0x00,0x07,0x00,0x8c,0x00,0x00,0x00,0x8d,0x00,0x00,0x00, -0x8a,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x76,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x82,0x00,0x00,0x00, -0x8e,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x73,0x00,0x04,0x00, -0x19,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,0x8e,0x00,0x00,0x00, -0x41,0x00,0x07,0x00,0x8c,0x00,0x00,0x00,0x92,0x00,0x00,0x00, -0x8a,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x76,0x00,0x00,0x00, -0x2a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x82,0x00,0x00,0x00, -0x93,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x73,0x00,0x04,0x00, -0x19,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x93,0x00,0x00,0x00, -0x41,0x00,0x08,0x00,0x99,0x00,0x00,0x00,0x9a,0x00,0x00,0x00, -0x8a,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x76,0x00,0x00,0x00, -0x97,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x83,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x9a,0x00,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x9c,0x00,0x00,0x00, -0x9b,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa2,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0xa1,0x00,0x00,0x00, -0x70,0x00,0x04,0x00,0x19,0x00,0x00,0x00,0xa3,0x00,0x00,0x00, -0xa2,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa6,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0xa5,0x00,0x00,0x00, -0x70,0x00,0x04,0x00,0x19,0x00,0x00,0x00,0xa7,0x00,0x00,0x00, -0xa6,0x00,0x00,0x00,0x50,0x00,0x05,0x00,0x9d,0x00,0x00,0x00, -0xa8,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0xa7,0x00,0x00,0x00, -0x8e,0x00,0x05,0x00,0x9d,0x00,0x00,0x00,0xab,0x00,0x00,0x00, -0xa8,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,0x50,0x00,0x05,0x00, -0x9d,0x00,0x00,0x00,0xad,0x00,0x00,0x00,0x94,0x00,0x00,0x00, -0x94,0x00,0x00,0x00,0x81,0x00,0x05,0x00,0x9d,0x00,0x00,0x00, -0xae,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0xad,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb5,0x00,0x00,0x00, -0x70,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0xb5,0x00,0x00,0x00, -0x7a,0x00,0x00,0x00,0x51,0x00,0x05,0x00,0x19,0x00,0x00,0x00, -0xb9,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x41,0x00,0x06,0x00,0xba,0x00,0x00,0x00,0xbb,0x00,0x00,0x00, -0xb2,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0xb7,0x00,0x00,0x00, -0x3e,0x00,0x03,0x00,0xbb,0x00,0x00,0x00,0xb9,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc1,0x00,0x00,0x00, -0xb7,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x51,0x00,0x05,0x00, -0x19,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0xae,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0xba,0x00,0x00,0x00, -0xc4,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0xc1,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0xc4,0x00,0x00,0x00, -0xc3,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xc7,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xc7,0x00,0x00,0x00,0xfd,0x00,0x01,0x00, -0x38,0x00,0x01,0x00, -}; -const uint64_t get_rows_q4_1_f32_len = 3772; - -unsigned char get_rows_q5_0_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0xf7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00, -0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00, -0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64, -0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00, -0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0f,0x00,0x0a,0x00, -0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e, -0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x36,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,0xd6,0x00,0x00,0x00, -0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00, -0x00,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x0a,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x0d,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x38,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x3c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x44,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x48,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x13,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x50,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x54,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x16,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x5c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x68,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x1b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0x1a,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x33,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x34,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x34,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x34,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x36,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x36,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x84,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x87,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x88,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x88,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x88,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x89,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x16,0x00,0x00,0x00, -0x48,0x00,0x04,0x00,0x8a,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x8a,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0x8a,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x8c,0x00,0x00,0x00, -0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xd3,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x48,0x00,0x04,0x00,0xd4,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0xd4,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0xd4,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xd6,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xd6,0x00,0x00,0x00, -0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xeb,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00, -0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x13,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0x19,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x1e,0x00,0x1e,0x00,0x1a,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x19,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x1b,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x1b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x1d,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1d,0x00,0x00,0x00, -0x1e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x1f,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x1d,0x00,0x00,0x00,0x2a,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x14,0x00,0x02,0x00,0x2d,0x00,0x00,0x00, -0x1d,0x00,0x03,0x00,0x33,0x00,0x00,0x00,0x1d,0x00,0x00,0x00, -0x1e,0x00,0x03,0x00,0x34,0x00,0x00,0x00,0x33,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x35,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x34,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x35,0x00,0x00,0x00, -0x36,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x1d,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x1d,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x0d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1d,0x00,0x00,0x00, -0x3e,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x1d,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x49,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x1d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1d,0x00,0x00,0x00, -0x4f,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x1d,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x1d,0x00,0x00,0x00,0x5a,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1d,0x00,0x00,0x00, -0x61,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x1d,0x00,0x00,0x00,0x66,0x00,0x00,0x00,0x17,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x1d,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x74,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x16,0x00,0x03,0x00, -0x82,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x15,0x00,0x04,0x00, -0x83,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x1c,0x00,0x04,0x00,0x84,0x00,0x00,0x00,0x83,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x85,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x1c,0x00,0x04,0x00,0x87,0x00,0x00,0x00,0x85,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x1e,0x00,0x05,0x00,0x88,0x00,0x00,0x00, -0x82,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x87,0x00,0x00,0x00, -0x1d,0x00,0x03,0x00,0x89,0x00,0x00,0x00,0x88,0x00,0x00,0x00, -0x1e,0x00,0x03,0x00,0x8a,0x00,0x00,0x00,0x89,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x8b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x8a,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x8b,0x00,0x00,0x00, -0x8c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x8e,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x82,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x94,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x83,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1d,0x00,0x00,0x00, -0x98,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x1d,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xab,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1d,0x00,0x00,0x00, -0xb3,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0xb5,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x85,0x00,0x00,0x00, -0x17,0x00,0x04,0x00,0xb9,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xbd,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x19,0x00,0x00,0x00,0xce,0x00,0x00,0x00,0x00,0x00,0x80,0x41, -0x1d,0x00,0x03,0x00,0xd3,0x00,0x00,0x00,0x82,0x00,0x00,0x00, -0x1e,0x00,0x03,0x00,0xd4,0x00,0x00,0x00,0xd3,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0xd5,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0xd4,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xd5,0x00,0x00,0x00, -0xd6,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xea,0x00,0x00,0x00,0x00,0x02,0x00,0x00, -0x2c,0x00,0x06,0x00,0x09,0x00,0x00,0x00,0xeb,0x00,0x00,0x00, -0xea,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x13,0x00,0x00,0x00, -0x2c,0x00,0x05,0x00,0xb9,0x00,0x00,0x00,0xf6,0x00,0x00,0x00, -0xce,0x00,0x00,0x00,0xce,0x00,0x00,0x00,0x36,0x00,0x05,0x00, -0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00, -0xf7,0x00,0x03,0x00,0xec,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0xfb,0x00,0x03,0x00,0x0c,0x00,0x00,0x00,0xed,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xed,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x13,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x15,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x17,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x17,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x1f,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x1e,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x1f,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x2a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x2c,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0xae,0x00,0x05,0x00, -0x2d,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x11,0x00,0x00,0x00, -0x2c,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x30,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x2e,0x00,0x00,0x00, -0x2f,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x2f,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xec,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x30,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x1f,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x3b,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x15,0x00,0x00,0x00, -0x3b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x1f,0x00,0x00,0x00, -0x3f,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x3e,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x3f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x41,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x42,0x00,0x00,0x00, -0x3c,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x1f,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x44,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x46,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0x46,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x48,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x47,0x00,0x00,0x00, -0x41,0x00,0x06,0x00,0x49,0x00,0x00,0x00,0x4a,0x00,0x00,0x00, -0x36,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x48,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x1d,0x00,0x00,0x00,0x4b,0x00,0x00,0x00, -0x4a,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x4c,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x1f,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x4f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x51,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x52,0x00,0x00,0x00,0x4c,0x00,0x00,0x00, -0x51,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x1f,0x00,0x00,0x00, -0x55,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x54,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x56,0x00,0x00,0x00, -0x55,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x57,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x56,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x58,0x00,0x00,0x00, -0x52,0x00,0x00,0x00,0x57,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x1f,0x00,0x00,0x00,0x5b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x5a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x5c,0x00,0x00,0x00,0x5b,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0x5c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x5e,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x5d,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x1f,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x1c,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x64,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x1f,0x00,0x00,0x00,0x67,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x66,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x68,0x00,0x00,0x00,0x67,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x69,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x68,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x6a,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x69,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x1f,0x00,0x00,0x00,0x6d,0x00,0x00,0x00, -0x1c,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x6d,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6f,0x00,0x00,0x00, -0x28,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x6a,0x00,0x00,0x00, -0x6f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x75,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x74,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x76,0x00,0x00,0x00, -0x5e,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x11,0x00,0x00,0x00, -0x74,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x7a,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7f,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x41,0x00,0x07,0x00, -0x8e,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,0x8c,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x82,0x00,0x00,0x00,0x90,0x00,0x00,0x00, -0x8f,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x19,0x00,0x00,0x00, -0x91,0x00,0x00,0x00,0x90,0x00,0x00,0x00,0x41,0x00,0x08,0x00, -0x94,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0x8c,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x2a,0x00,0x00,0x00, -0x2a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x83,0x00,0x00,0x00, -0x96,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x96,0x00,0x00,0x00, -0xc4,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x99,0x00,0x00,0x00, -0x97,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x41,0x00,0x08,0x00, -0x94,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x8c,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x2a,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x83,0x00,0x00,0x00, -0x9c,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,0x9c,0x00,0x00,0x00, -0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9e,0x00,0x00,0x00, -0x99,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,0xc2,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0x9e,0x00,0x00,0x00, -0x7a,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa6,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0xa5,0x00,0x00,0x00, -0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa7,0x00,0x00,0x00, -0xa6,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x7c,0x00,0x04,0x00, -0x1d,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0xa7,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00, -0x7a,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0xc2,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xad,0x00,0x00,0x00,0x9e,0x00,0x00,0x00, -0xac,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xae,0x00,0x00,0x00,0xad,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x7c,0x00,0x04,0x00,0x1d,0x00,0x00,0x00,0xaf,0x00,0x00,0x00, -0xae,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0xb5,0x00,0x00,0x00, -0xb6,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x76,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0x7a,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x85,0x00,0x00,0x00,0xb7,0x00,0x00,0x00, -0xb6,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xb8,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0xc7,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0xb8,0x00,0x00,0x00, -0xbd,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xc2,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0xc5,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0xbe,0x00,0x00,0x00, -0xc2,0x00,0x00,0x00,0x70,0x00,0x04,0x00,0x19,0x00,0x00,0x00, -0xc4,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0xc2,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0xb8,0x00,0x00,0x00, -0xa5,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xc9,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0xc5,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0xc6,0x00,0x00,0x00, -0xc9,0x00,0x00,0x00,0x70,0x00,0x04,0x00,0x19,0x00,0x00,0x00, -0xcb,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0x50,0x00,0x05,0x00, -0xb9,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0xc4,0x00,0x00,0x00, -0xcb,0x00,0x00,0x00,0x83,0x00,0x05,0x00,0xb9,0x00,0x00,0x00, -0xd0,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0xf6,0x00,0x00,0x00, -0x8e,0x00,0x05,0x00,0xb9,0x00,0x00,0x00,0xd2,0x00,0x00,0x00, -0xd0,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xd9,0x00,0x00,0x00,0x70,0x00,0x00,0x00, -0x7f,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xdb,0x00,0x00,0x00,0xd9,0x00,0x00,0x00,0x7a,0x00,0x00,0x00, -0x51,0x00,0x05,0x00,0x19,0x00,0x00,0x00,0xdd,0x00,0x00,0x00, -0xd2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x73,0x00,0x04,0x00, -0x82,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0xdd,0x00,0x00,0x00, -0x41,0x00,0x06,0x00,0x8e,0x00,0x00,0x00,0xdf,0x00,0x00,0x00, -0xd6,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0xdb,0x00,0x00,0x00, -0x3e,0x00,0x03,0x00,0xdf,0x00,0x00,0x00,0xde,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe5,0x00,0x00,0x00, -0xdb,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x51,0x00,0x05,0x00, -0x19,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,0xd2,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x82,0x00,0x00,0x00, -0xe8,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,0x41,0x00,0x06,0x00, -0x8e,0x00,0x00,0x00,0xe9,0x00,0x00,0x00,0xd6,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0xe5,0x00,0x00,0x00,0x3e,0x00,0x03,0x00, -0xe9,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xec,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xec,0x00,0x00,0x00, -0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00, -}; -const uint64_t get_rows_q5_0_len = 4232; - -unsigned char get_rows_q5_0_f32_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0xf6,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00, -0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00, -0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64, -0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00, -0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0f,0x00,0x0a,0x00, -0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e, -0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x36,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,0xd6,0x00,0x00,0x00, -0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00, -0x00,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x0a,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x0d,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x38,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x3c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x44,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x48,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x13,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x50,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x54,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x16,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x5c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x68,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x1b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0x1a,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x33,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x34,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x34,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x34,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x36,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x36,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x84,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x87,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x88,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x88,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x88,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x89,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x16,0x00,0x00,0x00, -0x48,0x00,0x04,0x00,0x8a,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x8a,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0x8a,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x8c,0x00,0x00,0x00, -0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xd3,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x04,0x00,0xd4,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0xd4,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0xd4,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xd6,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xd6,0x00,0x00,0x00, -0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xea,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00, -0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x13,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0x19,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x1e,0x00,0x1e,0x00,0x1a,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x19,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x1b,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x1b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x1d,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1d,0x00,0x00,0x00, -0x1e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x1f,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x1d,0x00,0x00,0x00,0x2a,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x14,0x00,0x02,0x00,0x2d,0x00,0x00,0x00, -0x1d,0x00,0x03,0x00,0x33,0x00,0x00,0x00,0x1d,0x00,0x00,0x00, -0x1e,0x00,0x03,0x00,0x34,0x00,0x00,0x00,0x33,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x35,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x34,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x35,0x00,0x00,0x00, -0x36,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x1d,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x1d,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x0d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1d,0x00,0x00,0x00, -0x3e,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x1d,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x49,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x1d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1d,0x00,0x00,0x00, -0x4f,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x1d,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x1d,0x00,0x00,0x00,0x5a,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1d,0x00,0x00,0x00, -0x61,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x1d,0x00,0x00,0x00,0x66,0x00,0x00,0x00,0x17,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x1d,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x74,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x16,0x00,0x03,0x00, -0x82,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x15,0x00,0x04,0x00, -0x83,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x1c,0x00,0x04,0x00,0x84,0x00,0x00,0x00,0x83,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x85,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x1c,0x00,0x04,0x00,0x87,0x00,0x00,0x00,0x85,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x1e,0x00,0x05,0x00,0x88,0x00,0x00,0x00, -0x82,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x87,0x00,0x00,0x00, -0x1d,0x00,0x03,0x00,0x89,0x00,0x00,0x00,0x88,0x00,0x00,0x00, -0x1e,0x00,0x03,0x00,0x8a,0x00,0x00,0x00,0x89,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x8b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x8a,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x8b,0x00,0x00,0x00, -0x8c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x8e,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x82,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x94,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x83,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1d,0x00,0x00,0x00, -0x98,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x1d,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xab,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1d,0x00,0x00,0x00, -0xb3,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0xb5,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x85,0x00,0x00,0x00, -0x17,0x00,0x04,0x00,0xb9,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xbd,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x19,0x00,0x00,0x00,0xce,0x00,0x00,0x00,0x00,0x00,0x80,0x41, -0x1d,0x00,0x03,0x00,0xd3,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x1e,0x00,0x03,0x00,0xd4,0x00,0x00,0x00,0xd3,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0xd5,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0xd4,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xd5,0x00,0x00,0x00, -0xd6,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0xde,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xe9,0x00,0x00,0x00, -0x00,0x02,0x00,0x00,0x2c,0x00,0x06,0x00,0x09,0x00,0x00,0x00, -0xea,0x00,0x00,0x00,0xe9,0x00,0x00,0x00,0x13,0x00,0x00,0x00, -0x13,0x00,0x00,0x00,0x2c,0x00,0x05,0x00,0xb9,0x00,0x00,0x00, -0xf5,0x00,0x00,0x00,0xce,0x00,0x00,0x00,0xce,0x00,0x00,0x00, -0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x05,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0xeb,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0xfb,0x00,0x03,0x00,0x0c,0x00,0x00,0x00, -0xec,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xec,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x11,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x13,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x1f,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x1e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x21,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x21,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x28,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x1f,0x00,0x00,0x00,0x2b,0x00,0x00,0x00, -0x1c,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x2b,0x00,0x00,0x00, -0xae,0x00,0x05,0x00,0x2d,0x00,0x00,0x00,0x2e,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0xf7,0x00,0x03,0x00, -0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x2e,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x30,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x2f,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xeb,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x30,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x1f,0x00,0x00,0x00,0x3a,0x00,0x00,0x00, -0x1c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x3a,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3c,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x1f,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x42,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x41,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x1f,0x00,0x00,0x00,0x45,0x00,0x00,0x00, -0x1c,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x46,0x00,0x00,0x00,0x45,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x47,0x00,0x00,0x00, -0x28,0x00,0x00,0x00,0x46,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x42,0x00,0x00,0x00, -0x47,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x49,0x00,0x00,0x00, -0x4a,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x48,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x1d,0x00,0x00,0x00, -0x4b,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x7c,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x4b,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x1f,0x00,0x00,0x00,0x50,0x00,0x00,0x00, -0x1c,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x50,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x52,0x00,0x00,0x00, -0x4c,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x1f,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x54,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x56,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x57,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x56,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x58,0x00,0x00,0x00,0x52,0x00,0x00,0x00,0x57,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x1f,0x00,0x00,0x00,0x5b,0x00,0x00,0x00, -0x1c,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x5c,0x00,0x00,0x00,0x5b,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5d,0x00,0x00,0x00, -0x28,0x00,0x00,0x00,0x5c,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x58,0x00,0x00,0x00, -0x5d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x1f,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x61,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x63,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x64,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x63,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x1f,0x00,0x00,0x00,0x67,0x00,0x00,0x00, -0x1c,0x00,0x00,0x00,0x66,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x67,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x69,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x6a,0x00,0x00,0x00,0x64,0x00,0x00,0x00, -0x69,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x1f,0x00,0x00,0x00, -0x6d,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x6e,0x00,0x00,0x00, -0x6d,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x6f,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x6e,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x70,0x00,0x00,0x00, -0x6a,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0x11,0x00,0x00,0x00, -0x74,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x76,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x75,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x79,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,0x79,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x7f,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x79,0x00,0x00,0x00, -0x41,0x00,0x07,0x00,0x8e,0x00,0x00,0x00,0x8f,0x00,0x00,0x00, -0x8c,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x76,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x82,0x00,0x00,0x00, -0x90,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,0x73,0x00,0x04,0x00, -0x19,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x90,0x00,0x00,0x00, -0x41,0x00,0x08,0x00,0x94,0x00,0x00,0x00,0x95,0x00,0x00,0x00, -0x8c,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x76,0x00,0x00,0x00, -0x2a,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x83,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x95,0x00,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x97,0x00,0x00,0x00, -0x96,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x99,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x98,0x00,0x00,0x00, -0x41,0x00,0x08,0x00,0x94,0x00,0x00,0x00,0x9b,0x00,0x00,0x00, -0x8c,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x76,0x00,0x00,0x00, -0x2a,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x83,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0x9b,0x00,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x9d,0x00,0x00,0x00, -0x9c,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9e,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x9d,0x00,0x00,0x00, -0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00, -0x9e,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,0xc4,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,0xa4,0x00,0x00,0x00, -0xa5,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa7,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x7c,0x00,0x04,0x00,0x1d,0x00,0x00,0x00,0xa8,0x00,0x00,0x00, -0xa7,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xac,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,0xab,0x00,0x00,0x00, -0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xad,0x00,0x00,0x00, -0x9e,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0xc7,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0xad,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x1d,0x00,0x00,0x00, -0xaf,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0x41,0x00,0x08,0x00, -0xb5,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,0x8c,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0xb3,0x00,0x00,0x00, -0x7a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x85,0x00,0x00,0x00, -0xb7,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0xb7,0x00,0x00,0x00, -0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbe,0x00,0x00,0x00, -0xb8,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x7c,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,0xa8,0x00,0x00,0x00, -0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc3,0x00,0x00,0x00, -0xbe,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,0x70,0x00,0x04,0x00, -0x19,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0xc3,0x00,0x00,0x00, -0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00, -0xb8,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,0x7c,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0xaf,0x00,0x00,0x00, -0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xca,0x00,0x00,0x00, -0xc6,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x70,0x00,0x04,0x00, -0x19,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0xca,0x00,0x00,0x00, -0x50,0x00,0x05,0x00,0xb9,0x00,0x00,0x00,0xcc,0x00,0x00,0x00, -0xc4,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0x83,0x00,0x05,0x00, -0xb9,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0xcc,0x00,0x00,0x00, -0xf5,0x00,0x00,0x00,0x8e,0x00,0x05,0x00,0xb9,0x00,0x00,0x00, -0xd2,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x91,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd9,0x00,0x00,0x00, -0x70,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,0xd9,0x00,0x00,0x00, -0x7a,0x00,0x00,0x00,0x51,0x00,0x05,0x00,0x19,0x00,0x00,0x00, -0xdd,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x41,0x00,0x06,0x00,0xde,0x00,0x00,0x00,0xdf,0x00,0x00,0x00, -0xd6,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0xdb,0x00,0x00,0x00, -0x3e,0x00,0x03,0x00,0xdf,0x00,0x00,0x00,0xdd,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe5,0x00,0x00,0x00, -0xdb,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x51,0x00,0x05,0x00, -0x19,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,0xd2,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0xde,0x00,0x00,0x00, -0xe8,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0xe5,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0xe8,0x00,0x00,0x00, -0xe7,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xeb,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xeb,0x00,0x00,0x00,0xfd,0x00,0x01,0x00, -0x38,0x00,0x01,0x00, -}; -const uint64_t get_rows_q5_0_f32_len = 4216; - -unsigned char get_rows_q5_1_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0xea,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00, -0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00, -0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64, -0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00, -0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0f,0x00,0x0a,0x00, -0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e, -0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x36,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0xd2,0x00,0x00,0x00, -0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00, -0x00,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x0a,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x0d,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x38,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x3c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x44,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x48,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x13,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x50,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x54,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x16,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x5c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x68,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x1b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0x1a,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x33,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x34,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x34,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x34,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x36,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x36,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x85,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x86,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x86,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x86,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x86,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x87,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x88,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x88,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x88,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x8a,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x8a,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0xd0,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0xd0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0xd0,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xd2,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xd2,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xe7,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x19,0x00,0x00,0x00,0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00, -0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x13,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x16,0x00,0x03,0x00, -0x19,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x1e,0x00,0x1e,0x00, -0x1a,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x19,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x1b,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x1a,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x1d,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x1d,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x1f,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1d,0x00,0x00,0x00, -0x2a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x14,0x00,0x02,0x00, -0x2d,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x33,0x00,0x00,0x00, -0x1d,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x34,0x00,0x00,0x00, -0x33,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x35,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x35,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x1d,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1d,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x1d,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x0e,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x1d,0x00,0x00,0x00,0x44,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x49,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x1d,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x1d,0x00,0x00,0x00,0x54,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1d,0x00,0x00,0x00, -0x5a,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x1d,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x16,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x1d,0x00,0x00,0x00,0x66,0x00,0x00,0x00, -0x17,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1d,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x16,0x00,0x03,0x00,0x82,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x83,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x1c,0x00,0x04,0x00, -0x85,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x1e,0x00,0x06,0x00,0x86,0x00,0x00,0x00,0x82,0x00,0x00,0x00, -0x82,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x85,0x00,0x00,0x00, -0x1d,0x00,0x03,0x00,0x87,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x1e,0x00,0x03,0x00,0x88,0x00,0x00,0x00,0x87,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x89,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x88,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x89,0x00,0x00,0x00, -0x8a,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x8c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x82,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x1d,0x00,0x00,0x00,0x97,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x98,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x1d,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa7,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1d,0x00,0x00,0x00, -0xaf,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0xb1,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x83,0x00,0x00,0x00, -0x17,0x00,0x04,0x00,0xb5,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xb9,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x1d,0x00,0x03,0x00, -0xcf,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x1e,0x00,0x03,0x00, -0xd0,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0xd1,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xd0,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0xd1,0x00,0x00,0x00,0xd2,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xe6,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x2c,0x00,0x06,0x00, -0x09,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,0xe6,0x00,0x00,0x00, -0x13,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x36,0x00,0x05,0x00, -0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00, -0xf7,0x00,0x03,0x00,0xe8,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0xfb,0x00,0x03,0x00,0x0c,0x00,0x00,0x00,0xe9,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xe9,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x13,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x15,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x17,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x17,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x1f,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x1e,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x1f,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x2a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x2c,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0xae,0x00,0x05,0x00, -0x2d,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x11,0x00,0x00,0x00, -0x2c,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x30,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x2e,0x00,0x00,0x00, -0x2f,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x2f,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xe8,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x30,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x1f,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x3b,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x15,0x00,0x00,0x00, -0x3b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x1f,0x00,0x00,0x00, -0x3f,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x3e,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x3f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x41,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x42,0x00,0x00,0x00, -0x3c,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x1f,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x44,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x46,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0x46,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x48,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x47,0x00,0x00,0x00, -0x41,0x00,0x06,0x00,0x49,0x00,0x00,0x00,0x4a,0x00,0x00,0x00, -0x36,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x48,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x1d,0x00,0x00,0x00,0x4b,0x00,0x00,0x00, -0x4a,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x4c,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x1f,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x4f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x51,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x52,0x00,0x00,0x00,0x4c,0x00,0x00,0x00, -0x51,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x1f,0x00,0x00,0x00, -0x55,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x54,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x56,0x00,0x00,0x00, -0x55,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x57,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x56,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x58,0x00,0x00,0x00, -0x52,0x00,0x00,0x00,0x57,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x1f,0x00,0x00,0x00,0x5b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x5a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x5c,0x00,0x00,0x00,0x5b,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0x5c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x5e,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x5d,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x1f,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x1c,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x64,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x1f,0x00,0x00,0x00,0x67,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x66,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x68,0x00,0x00,0x00,0x67,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x69,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x68,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x6a,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x69,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x1f,0x00,0x00,0x00,0x6d,0x00,0x00,0x00, -0x1c,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x6d,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6f,0x00,0x00,0x00, -0x28,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x6a,0x00,0x00,0x00, -0x6f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x75,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x74,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x76,0x00,0x00,0x00, -0x5e,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x11,0x00,0x00,0x00, -0x74,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x7a,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7f,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x41,0x00,0x07,0x00, -0x8c,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x8a,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x82,0x00,0x00,0x00,0x8e,0x00,0x00,0x00, -0x8d,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x19,0x00,0x00,0x00, -0x8f,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0x41,0x00,0x07,0x00, -0x8c,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x8a,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x2a,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x82,0x00,0x00,0x00,0x93,0x00,0x00,0x00, -0x92,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x19,0x00,0x00,0x00, -0x94,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x41,0x00,0x07,0x00, -0x98,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x8a,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x97,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x9a,0x00,0x00,0x00, -0x99,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa0,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x7a,0x00,0x00,0x00, -0xc4,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa2,0x00,0x00,0x00, -0xa0,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0xc7,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0xa2,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x1d,0x00,0x00,0x00, -0xa4,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x7a,0x00,0x00,0x00, -0xa7,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa9,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0xa8,0x00,0x00,0x00, -0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xaa,0x00,0x00,0x00, -0xa9,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x7c,0x00,0x04,0x00, -0x1d,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0xaa,0x00,0x00,0x00, -0x41,0x00,0x08,0x00,0xb1,0x00,0x00,0x00,0xb2,0x00,0x00,0x00, -0x8a,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x76,0x00,0x00,0x00, -0xaf,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x83,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0xb2,0x00,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb4,0x00,0x00,0x00, -0xb3,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xba,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0xb9,0x00,0x00,0x00, -0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xbe,0x00,0x00,0x00, -0xa4,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xbf,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0xbe,0x00,0x00,0x00, -0x70,0x00,0x04,0x00,0x19,0x00,0x00,0x00,0xc0,0x00,0x00,0x00, -0xbf,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xc2,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0xa1,0x00,0x00,0x00, -0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00, -0xab,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xc6,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,0xc5,0x00,0x00,0x00, -0x70,0x00,0x04,0x00,0x19,0x00,0x00,0x00,0xc7,0x00,0x00,0x00, -0xc6,0x00,0x00,0x00,0x50,0x00,0x05,0x00,0xb5,0x00,0x00,0x00, -0xc8,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0xc7,0x00,0x00,0x00, -0x8e,0x00,0x05,0x00,0xb5,0x00,0x00,0x00,0xcb,0x00,0x00,0x00, -0xc8,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,0x50,0x00,0x05,0x00, -0xb5,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,0x94,0x00,0x00,0x00, -0x94,0x00,0x00,0x00,0x81,0x00,0x05,0x00,0xb5,0x00,0x00,0x00, -0xce,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0xcd,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd5,0x00,0x00,0x00, -0x70,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,0xd5,0x00,0x00,0x00, -0x7a,0x00,0x00,0x00,0x51,0x00,0x05,0x00,0x19,0x00,0x00,0x00, -0xd9,0x00,0x00,0x00,0xce,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x73,0x00,0x04,0x00,0x82,0x00,0x00,0x00,0xda,0x00,0x00,0x00, -0xd9,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x8c,0x00,0x00,0x00, -0xdb,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0xd7,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0xdb,0x00,0x00,0x00, -0xda,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xe1,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x51,0x00,0x05,0x00,0x19,0x00,0x00,0x00,0xe3,0x00,0x00,0x00, -0xce,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x73,0x00,0x04,0x00, -0x82,0x00,0x00,0x00,0xe4,0x00,0x00,0x00,0xe3,0x00,0x00,0x00, -0x41,0x00,0x06,0x00,0x8c,0x00,0x00,0x00,0xe5,0x00,0x00,0x00, -0xd2,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0xe1,0x00,0x00,0x00, -0x3e,0x00,0x03,0x00,0xe5,0x00,0x00,0x00,0xe4,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xe8,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xe8,0x00,0x00,0x00,0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00, - -}; -const uint64_t get_rows_q5_1_len = 4128; - -unsigned char get_rows_q5_1_f32_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0xe9,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00, -0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00, -0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64, -0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00, -0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0f,0x00,0x0a,0x00, -0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e, -0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x36,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0xd2,0x00,0x00,0x00, -0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00, -0x00,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x0a,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x0d,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x38,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x3c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x44,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x48,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x13,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x50,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x54,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x16,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x5c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x68,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x1b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0x1a,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x33,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x34,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x34,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x34,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x36,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x36,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x85,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x86,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x86,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x86,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x86,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x87,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x88,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x88,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x88,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x8a,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x8a,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0xd0,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0xd0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0xd0,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xd2,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xd2,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xe6,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x19,0x00,0x00,0x00,0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00, -0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x13,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x16,0x00,0x03,0x00, -0x19,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x1e,0x00,0x1e,0x00, -0x1a,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x19,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x1b,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x1a,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x1d,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x1d,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x1f,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1d,0x00,0x00,0x00, -0x2a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x14,0x00,0x02,0x00, -0x2d,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x33,0x00,0x00,0x00, -0x1d,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x34,0x00,0x00,0x00, -0x33,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x35,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x35,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x1d,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1d,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x1d,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x0e,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x1d,0x00,0x00,0x00,0x44,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x49,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x1d,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x1d,0x00,0x00,0x00,0x54,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1d,0x00,0x00,0x00, -0x5a,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x1d,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x16,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x1d,0x00,0x00,0x00,0x66,0x00,0x00,0x00, -0x17,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1d,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x16,0x00,0x03,0x00,0x82,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x83,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x1c,0x00,0x04,0x00, -0x85,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x1e,0x00,0x06,0x00,0x86,0x00,0x00,0x00,0x82,0x00,0x00,0x00, -0x82,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x85,0x00,0x00,0x00, -0x1d,0x00,0x03,0x00,0x87,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x1e,0x00,0x03,0x00,0x88,0x00,0x00,0x00,0x87,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x89,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x88,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x89,0x00,0x00,0x00, -0x8a,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x8c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x82,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x1d,0x00,0x00,0x00,0x97,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x98,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x1d,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa7,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1d,0x00,0x00,0x00, -0xaf,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0xb1,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x83,0x00,0x00,0x00, -0x17,0x00,0x04,0x00,0xb5,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xb9,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x1d,0x00,0x03,0x00, -0xcf,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x1e,0x00,0x03,0x00, -0xd0,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0xd1,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xd0,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0xd1,0x00,0x00,0x00,0xd2,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xda,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xe5,0x00,0x00,0x00,0x00,0x02,0x00,0x00, -0x2c,0x00,0x06,0x00,0x09,0x00,0x00,0x00,0xe6,0x00,0x00,0x00, -0xe5,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x13,0x00,0x00,0x00, -0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x05,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0xe7,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0xfb,0x00,0x03,0x00,0x0c,0x00,0x00,0x00, -0xe8,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe8,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x11,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x13,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x1f,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x1e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x21,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x21,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x28,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x1f,0x00,0x00,0x00,0x2b,0x00,0x00,0x00, -0x1c,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x2b,0x00,0x00,0x00, -0xae,0x00,0x05,0x00,0x2d,0x00,0x00,0x00,0x2e,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0xf7,0x00,0x03,0x00, -0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x2e,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x30,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x2f,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xe7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x30,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x1f,0x00,0x00,0x00,0x3a,0x00,0x00,0x00, -0x1c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x3a,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3c,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x1f,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x42,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x41,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x1f,0x00,0x00,0x00,0x45,0x00,0x00,0x00, -0x1c,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x46,0x00,0x00,0x00,0x45,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x47,0x00,0x00,0x00, -0x28,0x00,0x00,0x00,0x46,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x42,0x00,0x00,0x00, -0x47,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x49,0x00,0x00,0x00, -0x4a,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x48,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x1d,0x00,0x00,0x00, -0x4b,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x7c,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x4b,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x1f,0x00,0x00,0x00,0x50,0x00,0x00,0x00, -0x1c,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x50,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x52,0x00,0x00,0x00, -0x4c,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x1f,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x54,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x56,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x57,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x56,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x58,0x00,0x00,0x00,0x52,0x00,0x00,0x00,0x57,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x1f,0x00,0x00,0x00,0x5b,0x00,0x00,0x00, -0x1c,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x5c,0x00,0x00,0x00,0x5b,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5d,0x00,0x00,0x00, -0x28,0x00,0x00,0x00,0x5c,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x58,0x00,0x00,0x00, -0x5d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x1f,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x61,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x63,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x64,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x63,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x1f,0x00,0x00,0x00,0x67,0x00,0x00,0x00, -0x1c,0x00,0x00,0x00,0x66,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x67,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x69,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x6a,0x00,0x00,0x00,0x64,0x00,0x00,0x00, -0x69,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x1f,0x00,0x00,0x00, -0x6d,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x6e,0x00,0x00,0x00, -0x6d,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x6f,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x6e,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x70,0x00,0x00,0x00, -0x6a,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0x11,0x00,0x00,0x00, -0x74,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x76,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x75,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x79,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,0x79,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x7f,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x79,0x00,0x00,0x00, -0x41,0x00,0x07,0x00,0x8c,0x00,0x00,0x00,0x8d,0x00,0x00,0x00, -0x8a,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x76,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x82,0x00,0x00,0x00, -0x8e,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x73,0x00,0x04,0x00, -0x19,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,0x8e,0x00,0x00,0x00, -0x41,0x00,0x07,0x00,0x8c,0x00,0x00,0x00,0x92,0x00,0x00,0x00, -0x8a,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x76,0x00,0x00,0x00, -0x2a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x82,0x00,0x00,0x00, -0x93,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x73,0x00,0x04,0x00, -0x19,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x93,0x00,0x00,0x00, -0x41,0x00,0x07,0x00,0x98,0x00,0x00,0x00,0x99,0x00,0x00,0x00, -0x8a,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x76,0x00,0x00,0x00, -0x97,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x9a,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0xc2,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0x9a,0x00,0x00,0x00, -0x7a,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa2,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0xa1,0x00,0x00,0x00, -0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa3,0x00,0x00,0x00, -0xa2,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x7c,0x00,0x04,0x00, -0x1d,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0xa3,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa8,0x00,0x00,0x00, -0x7a,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0xc2,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,0x9a,0x00,0x00,0x00, -0xa8,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xaa,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x7c,0x00,0x04,0x00,0x1d,0x00,0x00,0x00,0xab,0x00,0x00,0x00, -0xaa,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0xb1,0x00,0x00,0x00, -0xb2,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x76,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0x7a,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x83,0x00,0x00,0x00,0xb3,0x00,0x00,0x00, -0xb2,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xb4,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0xc7,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0xb4,0x00,0x00,0x00, -0xb9,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xbe,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0xc5,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0xba,0x00,0x00,0x00, -0xbe,0x00,0x00,0x00,0x70,0x00,0x04,0x00,0x19,0x00,0x00,0x00, -0xc0,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0xc2,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,0xb4,0x00,0x00,0x00, -0xa1,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xc5,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0xc5,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0xc2,0x00,0x00,0x00, -0xc5,0x00,0x00,0x00,0x70,0x00,0x04,0x00,0x19,0x00,0x00,0x00, -0xc7,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x50,0x00,0x05,0x00, -0xb5,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0xc0,0x00,0x00,0x00, -0xc7,0x00,0x00,0x00,0x8e,0x00,0x05,0x00,0xb5,0x00,0x00,0x00, -0xcb,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x8f,0x00,0x00,0x00, -0x50,0x00,0x05,0x00,0xb5,0x00,0x00,0x00,0xcd,0x00,0x00,0x00, -0x94,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x81,0x00,0x05,0x00, -0xb5,0x00,0x00,0x00,0xce,0x00,0x00,0x00,0xcb,0x00,0x00,0x00, -0xcd,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd5,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x7f,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd7,0x00,0x00,0x00, -0xd5,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,0x51,0x00,0x05,0x00, -0x19,0x00,0x00,0x00,0xd9,0x00,0x00,0x00,0xce,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0xda,0x00,0x00,0x00, -0xdb,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0xd7,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0xdb,0x00,0x00,0x00, -0xd9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xe1,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x51,0x00,0x05,0x00,0x19,0x00,0x00,0x00,0xe3,0x00,0x00,0x00, -0xce,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x41,0x00,0x06,0x00, -0xda,0x00,0x00,0x00,0xe4,0x00,0x00,0x00,0xd2,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0xe1,0x00,0x00,0x00,0x3e,0x00,0x03,0x00, -0xe4,0x00,0x00,0x00,0xe3,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xe7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe7,0x00,0x00,0x00, -0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00, -}; -const uint64_t get_rows_q5_1_f32_len = 4112; - -unsigned char get_rows_q8_0_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0xbf,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00, -0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00, -0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64, -0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00, -0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0f,0x00,0x0a,0x00, -0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e, -0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x36,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0xa7,0x00,0x00,0x00, -0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00, -0x00,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x0a,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x0d,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x38,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x3c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x44,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x48,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x13,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x50,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x54,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x16,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x5c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x68,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x1b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0x1a,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x33,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x34,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x34,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x34,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x36,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x36,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x84,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x85,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x85,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x86,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x48,0x00,0x04,0x00,0x87,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x87,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0x87,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x89,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x89,0x00,0x00,0x00, -0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xa4,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x48,0x00,0x04,0x00,0xa5,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0xa5,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0xa5,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xa7,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xa7,0x00,0x00,0x00, -0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xbc,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00, -0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x13,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0x19,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x1e,0x00,0x1e,0x00,0x1a,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x19,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x1b,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x1b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x1d,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1d,0x00,0x00,0x00, -0x1e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x1f,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x1d,0x00,0x00,0x00,0x2a,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x14,0x00,0x02,0x00,0x2d,0x00,0x00,0x00, -0x1d,0x00,0x03,0x00,0x33,0x00,0x00,0x00,0x1d,0x00,0x00,0x00, -0x1e,0x00,0x03,0x00,0x34,0x00,0x00,0x00,0x33,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x35,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x34,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x35,0x00,0x00,0x00, -0x36,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x1d,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x1d,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x0d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1d,0x00,0x00,0x00, -0x3e,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x1d,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x49,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x1d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1d,0x00,0x00,0x00, -0x4f,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x1d,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x1d,0x00,0x00,0x00,0x5a,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1d,0x00,0x00,0x00, -0x61,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x1d,0x00,0x00,0x00,0x66,0x00,0x00,0x00,0x17,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x1d,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x74,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x16,0x00,0x03,0x00, -0x82,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x15,0x00,0x04,0x00, -0x83,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x1c,0x00,0x04,0x00,0x84,0x00,0x00,0x00,0x83,0x00,0x00,0x00, -0x74,0x00,0x00,0x00,0x1e,0x00,0x04,0x00,0x85,0x00,0x00,0x00, -0x82,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x1d,0x00,0x03,0x00, -0x86,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x1e,0x00,0x03,0x00, -0x87,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x88,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x87,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x88,0x00,0x00,0x00,0x89,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x8b,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x17,0x00,0x04,0x00, -0x8f,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x94,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x83,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0xa4,0x00,0x00,0x00, -0x82,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0xa5,0x00,0x00,0x00, -0xa4,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xa6,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0xa6,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xbb,0x00,0x00,0x00, -0x00,0x02,0x00,0x00,0x2c,0x00,0x06,0x00,0x09,0x00,0x00,0x00, -0xbc,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x13,0x00,0x00,0x00, -0x13,0x00,0x00,0x00,0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,0xf7,0x00,0x03,0x00, -0xbd,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfb,0x00,0x03,0x00, -0x0c,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xbe,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x0e,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x17,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x17,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x1f,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x1c,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x21,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x1f,0x00,0x00,0x00, -0x2b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x2a,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x2c,0x00,0x00,0x00, -0x2b,0x00,0x00,0x00,0xae,0x00,0x05,0x00,0x2d,0x00,0x00,0x00, -0x2e,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x2c,0x00,0x00,0x00, -0xf7,0x00,0x03,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x2e,0x00,0x00,0x00,0x2f,0x00,0x00,0x00, -0x30,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x2f,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xbd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x30,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x1f,0x00,0x00,0x00, -0x3a,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00, -0x3a,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x3c,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x3b,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x1f,0x00,0x00,0x00,0x3f,0x00,0x00,0x00, -0x1c,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x3f,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x41,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x3c,0x00,0x00,0x00, -0x41,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x1f,0x00,0x00,0x00, -0x45,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x44,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x46,0x00,0x00,0x00, -0x45,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x47,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x46,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x48,0x00,0x00,0x00, -0x42,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0x41,0x00,0x06,0x00, -0x49,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x36,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x1d,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0x4a,0x00,0x00,0x00, -0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4c,0x00,0x00,0x00, -0x4b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x1f,0x00,0x00,0x00, -0x50,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x4f,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x51,0x00,0x00,0x00, -0x50,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x52,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x51,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x1f,0x00,0x00,0x00,0x55,0x00,0x00,0x00, -0x1c,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x56,0x00,0x00,0x00,0x55,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x57,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x56,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x52,0x00,0x00,0x00, -0x57,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x1f,0x00,0x00,0x00, -0x5b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x5a,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x5c,0x00,0x00,0x00, -0x5b,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x5d,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x5c,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5e,0x00,0x00,0x00, -0x58,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x1f,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x61,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x63,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x15,0x00,0x00,0x00, -0x63,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x1f,0x00,0x00,0x00, -0x67,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x66,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x68,0x00,0x00,0x00, -0x67,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x69,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x68,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6a,0x00,0x00,0x00, -0x64,0x00,0x00,0x00,0x69,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x1f,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x6e,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0x6e,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x70,0x00,0x00,0x00,0x6a,0x00,0x00,0x00,0x6f,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x75,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x5e,0x00,0x00,0x00, -0x75,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x79,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x74,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7a,0x00,0x00,0x00, -0x79,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x82,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x11,0x00,0x00,0x00, -0x79,0x00,0x00,0x00,0x41,0x00,0x07,0x00,0x8b,0x00,0x00,0x00, -0x8c,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x76,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x82,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x8c,0x00,0x00,0x00, -0x73,0x00,0x04,0x00,0x19,0x00,0x00,0x00,0x8e,0x00,0x00,0x00, -0x8d,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x94,0x00,0x00,0x00, -0x95,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x76,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x7a,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x83,0x00,0x00,0x00,0x96,0x00,0x00,0x00, -0x95,0x00,0x00,0x00,0x72,0x00,0x04,0x00,0x1d,0x00,0x00,0x00, -0x97,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x6f,0x00,0x04,0x00, -0x19,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x97,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9b,0x00,0x00,0x00, -0x7a,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x41,0x00,0x08,0x00, -0x94,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0x89,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x2a,0x00,0x00,0x00, -0x9b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x83,0x00,0x00,0x00, -0x9d,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0x72,0x00,0x04,0x00, -0x1d,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,0x9d,0x00,0x00,0x00, -0x6f,0x00,0x04,0x00,0x19,0x00,0x00,0x00,0x9f,0x00,0x00,0x00, -0x9e,0x00,0x00,0x00,0x50,0x00,0x05,0x00,0x8f,0x00,0x00,0x00, -0xa0,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x9f,0x00,0x00,0x00, -0x8e,0x00,0x05,0x00,0x8f,0x00,0x00,0x00,0xa3,0x00,0x00,0x00, -0xa0,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0x70,0x00,0x00,0x00, -0x7f,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xac,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0x7a,0x00,0x00,0x00, -0x51,0x00,0x05,0x00,0x19,0x00,0x00,0x00,0xae,0x00,0x00,0x00, -0xa3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x73,0x00,0x04,0x00, -0x82,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0xae,0x00,0x00,0x00, -0x41,0x00,0x06,0x00,0x8b,0x00,0x00,0x00,0xb0,0x00,0x00,0x00, -0xa7,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0xac,0x00,0x00,0x00, -0x3e,0x00,0x03,0x00,0xb0,0x00,0x00,0x00,0xaf,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb6,0x00,0x00,0x00, -0xac,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x51,0x00,0x05,0x00, -0x19,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0xa3,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x82,0x00,0x00,0x00, -0xb9,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x41,0x00,0x06,0x00, -0x8b,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0xa7,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,0x3e,0x00,0x03,0x00, -0xba,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xbd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xbd,0x00,0x00,0x00, -0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00, -}; -const uint64_t get_rows_q8_0_len = 3644; - -unsigned char get_rows_q8_0_f32_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0xbe,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00, -0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00, -0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64, -0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00, -0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0f,0x00,0x0a,0x00, -0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e, -0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x36,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0xa7,0x00,0x00,0x00, -0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00, -0x00,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x0a,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x0d,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x38,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x3c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x44,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x48,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x13,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x50,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x54,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x16,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x5c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x68,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x1b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0x1a,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x33,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x34,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x34,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x34,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x36,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x36,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x84,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x85,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x85,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x86,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x48,0x00,0x04,0x00,0x87,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x87,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0x87,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x89,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x89,0x00,0x00,0x00, -0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xa4,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x04,0x00,0xa5,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0xa5,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0xa5,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xa7,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xa7,0x00,0x00,0x00, -0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xbb,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00, -0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x13,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0x19,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x1e,0x00,0x1e,0x00,0x1a,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x19,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x1b,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x1b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x1d,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1d,0x00,0x00,0x00, -0x1e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x1f,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x1d,0x00,0x00,0x00,0x2a,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x14,0x00,0x02,0x00,0x2d,0x00,0x00,0x00, -0x1d,0x00,0x03,0x00,0x33,0x00,0x00,0x00,0x1d,0x00,0x00,0x00, -0x1e,0x00,0x03,0x00,0x34,0x00,0x00,0x00,0x33,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x35,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x34,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x35,0x00,0x00,0x00, -0x36,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x1d,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x1d,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x0d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1d,0x00,0x00,0x00, -0x3e,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x1d,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x49,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x1d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1d,0x00,0x00,0x00, -0x4f,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x1d,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x1d,0x00,0x00,0x00,0x5a,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1d,0x00,0x00,0x00, -0x61,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x1d,0x00,0x00,0x00,0x66,0x00,0x00,0x00,0x17,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x1d,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x74,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x16,0x00,0x03,0x00, -0x82,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x15,0x00,0x04,0x00, -0x83,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x1c,0x00,0x04,0x00,0x84,0x00,0x00,0x00,0x83,0x00,0x00,0x00, -0x74,0x00,0x00,0x00,0x1e,0x00,0x04,0x00,0x85,0x00,0x00,0x00, -0x82,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x1d,0x00,0x03,0x00, -0x86,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x1e,0x00,0x03,0x00, -0x87,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x88,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x87,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x88,0x00,0x00,0x00,0x89,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x8b,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x17,0x00,0x04,0x00, -0x8f,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x94,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x83,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0xa4,0x00,0x00,0x00, -0x19,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0xa5,0x00,0x00,0x00, -0xa4,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xa6,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0xa6,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0xaf,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x19,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xba,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x2c,0x00,0x06,0x00, -0x09,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0xba,0x00,0x00,0x00, -0x13,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x36,0x00,0x05,0x00, -0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00, -0xf7,0x00,0x03,0x00,0xbc,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0xfb,0x00,0x03,0x00,0x0c,0x00,0x00,0x00,0xbd,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xbd,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x13,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x15,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x17,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x17,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x1f,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x1e,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x1f,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x2a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x2c,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0xae,0x00,0x05,0x00, -0x2d,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x11,0x00,0x00,0x00, -0x2c,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x30,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x2e,0x00,0x00,0x00, -0x2f,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x2f,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xbc,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x30,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x1f,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x3b,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x15,0x00,0x00,0x00, -0x3b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x1f,0x00,0x00,0x00, -0x3f,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x3e,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x3f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x41,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x42,0x00,0x00,0x00, -0x3c,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x1f,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x44,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x46,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0x46,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x48,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x47,0x00,0x00,0x00, -0x41,0x00,0x06,0x00,0x49,0x00,0x00,0x00,0x4a,0x00,0x00,0x00, -0x36,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x48,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x1d,0x00,0x00,0x00,0x4b,0x00,0x00,0x00, -0x4a,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x4c,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x1f,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x4f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x51,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x52,0x00,0x00,0x00,0x4c,0x00,0x00,0x00, -0x51,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x1f,0x00,0x00,0x00, -0x55,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x54,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x56,0x00,0x00,0x00, -0x55,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x57,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x56,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x58,0x00,0x00,0x00, -0x52,0x00,0x00,0x00,0x57,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x1f,0x00,0x00,0x00,0x5b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x5a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x5c,0x00,0x00,0x00,0x5b,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0x5c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x5e,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x5d,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x1f,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x1c,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x64,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x1f,0x00,0x00,0x00,0x67,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x66,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x68,0x00,0x00,0x00,0x67,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x69,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x68,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x6a,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x69,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x1f,0x00,0x00,0x00,0x6d,0x00,0x00,0x00, -0x1c,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x6d,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6f,0x00,0x00,0x00, -0x28,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x6a,0x00,0x00,0x00, -0x6f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x75,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x74,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x76,0x00,0x00,0x00, -0x5e,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x11,0x00,0x00,0x00, -0x74,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x7a,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x13,0x00,0x00,0x00, -0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7f,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x41,0x00,0x07,0x00, -0x8b,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,0x89,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x82,0x00,0x00,0x00,0x8d,0x00,0x00,0x00, -0x8c,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x19,0x00,0x00,0x00, -0x8e,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x41,0x00,0x08,0x00, -0x94,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0x89,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x2a,0x00,0x00,0x00, -0x7a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x83,0x00,0x00,0x00, -0x96,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0x72,0x00,0x04,0x00, -0x1d,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x96,0x00,0x00,0x00, -0x6f,0x00,0x04,0x00,0x19,0x00,0x00,0x00,0x98,0x00,0x00,0x00, -0x97,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9b,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,0x13,0x00,0x00,0x00, -0x41,0x00,0x08,0x00,0x94,0x00,0x00,0x00,0x9c,0x00,0x00,0x00, -0x89,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x76,0x00,0x00,0x00, -0x2a,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x83,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,0x9c,0x00,0x00,0x00, -0x72,0x00,0x04,0x00,0x1d,0x00,0x00,0x00,0x9e,0x00,0x00,0x00, -0x9d,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,0x19,0x00,0x00,0x00, -0x9f,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,0x50,0x00,0x05,0x00, -0x8f,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0x98,0x00,0x00,0x00, -0x9f,0x00,0x00,0x00,0x8e,0x00,0x05,0x00,0x8f,0x00,0x00,0x00, -0xa3,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0x8e,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xaa,0x00,0x00,0x00, -0x70,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0xaa,0x00,0x00,0x00, -0x7a,0x00,0x00,0x00,0x51,0x00,0x05,0x00,0x19,0x00,0x00,0x00, -0xae,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x41,0x00,0x06,0x00,0xaf,0x00,0x00,0x00,0xb0,0x00,0x00,0x00, -0xa7,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0xac,0x00,0x00,0x00, -0x3e,0x00,0x03,0x00,0xb0,0x00,0x00,0x00,0xae,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb6,0x00,0x00,0x00, -0xac,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x51,0x00,0x05,0x00, -0x19,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0xa3,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0xaf,0x00,0x00,0x00, -0xb9,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0xb6,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0xb9,0x00,0x00,0x00, -0xb8,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xbc,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xbc,0x00,0x00,0x00,0xfd,0x00,0x01,0x00, -0x38,0x00,0x01,0x00, -}; -const uint64_t get_rows_q8_0_f32_len = 3628; - -unsigned char matmul_f16_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0xd9,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x09,0x00,0x00,0x00, -0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,0x0b,0x00,0x06,0x00, -0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64, -0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00, -0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0f,0x00,0x0f,0x00, -0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e, -0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x3d,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0xfb,0x00,0x00,0x00, -0x06,0x01,0x00,0x00,0x46,0x01,0x00,0x00,0x51,0x01,0x00,0x00, -0x39,0x02,0x00,0x00,0x82,0x02,0x00,0x00,0x10,0x00,0x06,0x00, -0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x34,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x10,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x37,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x3d,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x4c,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x4f,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x53,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x60,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x62,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x6c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xa6,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xb8,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xbb,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x03,0x01,0x00,0x00,0x06,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x04,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x04,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x04,0x01,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x06,0x01,0x00,0x00, -0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x06,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x20,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x21,0x01,0x00,0x00, -0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x4e,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x48,0x00,0x04,0x00,0x4f,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x4f,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0x4f,0x01,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x51,0x01,0x00,0x00,0x22,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x51,0x01,0x00,0x00, -0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x39,0x02,0x00,0x00,0x0b,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x7f,0x02,0x00,0x00,0x06,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x80,0x02,0x00,0x00, -0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x80,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x80,0x02,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x82,0x02,0x00,0x00, -0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x82,0x02,0x00,0x00,0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00, -0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x1e,0x00,0x10,0x00, -0x10,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x11,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x11,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x15,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x0a,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x27,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x2d,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x3e,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x4c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x54,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x58,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x63,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x67,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x6d,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x72,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x77,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x7c,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x80,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x90,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x96,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa6,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0xa8,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0xb8,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xba,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xbb,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xbc,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xba,0x00,0x00,0x00, -0xbb,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xbd,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xbc,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xbe,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0xb9,0x00,0x00,0x00, -0xbd,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xbf,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xb7,0x00,0x00,0x00, -0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xc0,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xbf,0x00,0x00,0x00, -0xbb,0x00,0x00,0x00,0x14,0x00,0x02,0x00,0xc1,0x00,0x00,0x00, -0x16,0x00,0x03,0x00,0xc3,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc4,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0xbe,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0xbb,0x00,0x00,0x00, -0x1c,0x00,0x04,0x00,0xc7,0x00,0x00,0x00,0xc3,0x00,0x00,0x00, -0xc6,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xc8,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0xc3,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0xcc,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0xc3,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0xcf,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x16,0x00,0x03,0x00, -0xf6,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,0x1c,0x00,0x04,0x00, -0xf9,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,0xf8,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0xfa,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0xf9,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xfa,0x00,0x00,0x00, -0xfb,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x1d,0x00,0x03,0x00, -0x03,0x01,0x00,0x00,0xf6,0x00,0x00,0x00,0x1e,0x00,0x03,0x00, -0x04,0x01,0x00,0x00,0x03,0x01,0x00,0x00,0x20,0x00,0x04,0x00, -0x05,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x04,0x01,0x00,0x00, -0x3b,0x00,0x04,0x00,0x05,0x01,0x00,0x00,0x06,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x11,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x14,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0xf6,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x1a,0x01,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0xf6,0x00,0x00,0x00,0x1e,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x20,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00, -0x09,0x00,0x00,0x00,0x21,0x01,0x00,0x00,0x20,0x01,0x00,0x00, -0x39,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x22,0x01,0x00,0x00,0x51,0x00,0x00,0x00, -0x21,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x23,0x01,0x00,0x00,0x84,0x00,0x00,0x00, -0x22,0x01,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x24,0x01,0x00,0x00,0x86,0x00,0x00,0x00, -0x23,0x01,0x00,0x00,0x6c,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x42,0x01,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x43,0x01,0x00,0x00,0x84,0x00,0x00,0x00, -0xa6,0x00,0x00,0x00,0x42,0x01,0x00,0x00,0x1c,0x00,0x04,0x00, -0x44,0x01,0x00,0x00,0xf6,0x00,0x00,0x00,0x43,0x01,0x00,0x00, -0x20,0x00,0x04,0x00,0x45,0x01,0x00,0x00,0x04,0x00,0x00,0x00, -0x44,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x45,0x01,0x00,0x00, -0x46,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x4a,0x01,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x1d,0x00,0x03,0x00, -0x4e,0x01,0x00,0x00,0xf6,0x00,0x00,0x00,0x1e,0x00,0x03,0x00, -0x4f,0x01,0x00,0x00,0x4e,0x01,0x00,0x00,0x20,0x00,0x04,0x00, -0x50,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x4f,0x01,0x00,0x00, -0x3b,0x00,0x04,0x00,0x50,0x01,0x00,0x00,0x51,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x63,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x68,0x01,0x00,0x00,0x51,0x00,0x00,0x00,0x21,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x69,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x68,0x01,0x00,0x00, -0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x6a,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x69,0x01,0x00,0x00, -0x6c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x6d,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x6e,0x01,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x71,0x01,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x8c,0x01,0x00,0x00,0x84,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x1c,0x00,0x04,0x00, -0x8d,0x01,0x00,0x00,0xf6,0x00,0x00,0x00,0x8c,0x01,0x00,0x00, -0x20,0x00,0x04,0x00,0x8e,0x01,0x00,0x00,0x07,0x00,0x00,0x00, -0x8d,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x9e,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xa4,0x01,0x00,0x00, -0x07,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xba,0x01,0x00,0x00,0x84,0x00,0x00,0x00, -0xbe,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x1c,0x00,0x04,0x00, -0xbb,0x01,0x00,0x00,0xf6,0x00,0x00,0x00,0xba,0x01,0x00,0x00, -0x20,0x00,0x04,0x00,0xbc,0x01,0x00,0x00,0x07,0x00,0x00,0x00, -0xbb,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xc5,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0xb8,0x00,0x00,0x00, -0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xcd,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xfc,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x31,0x02,0x00,0x00,0x0d,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x39,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0x1d,0x00,0x03,0x00,0x7f,0x02,0x00,0x00,0xc3,0x00,0x00,0x00, -0x1e,0x00,0x03,0x00,0x80,0x02,0x00,0x00,0x7f,0x02,0x00,0x00, -0x20,0x00,0x04,0x00,0x81,0x02,0x00,0x00,0x0c,0x00,0x00,0x00, -0x80,0x02,0x00,0x00,0x3b,0x00,0x04,0x00,0x81,0x02,0x00,0x00, -0x82,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x87,0x02,0x00,0x00,0x05,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x94,0x02,0x00,0x00, -0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x9d,0x02,0x00,0x00,0x0c,0x00,0x00,0x00, -0xc3,0x00,0x00,0x00,0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0xc8,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x8e,0x01,0x00,0x00,0x8f,0x01,0x00,0x00, -0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xbc,0x01,0x00,0x00, -0xbd,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x17,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x17,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x1e,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x17,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x27,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x29,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x1e,0x00,0x00,0x00, -0x29,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x2e,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x2d,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x2f,0x00,0x00,0x00, -0x2e,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x30,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x2f,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x30,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x34,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x36,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x36,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x3a,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00, -0x3a,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x3b,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x47,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x3b,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x49,0x00,0x00,0x00, -0x3d,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x49,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x4d,0x00,0x00,0x00, -0x4c,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x4d,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x50,0x00,0x00,0x00, -0x54,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x59,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x58,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5d,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x5d,0x00,0x00,0x00, -0x63,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x68,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,0x67,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6e,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x72,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x78,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x77,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7d,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x80,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x82,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x47,0x00,0x00,0x00, -0x82,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x85,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x87,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x89,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8c,0x00,0x00,0x00, -0x89,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x0c,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x26,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x8c,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x91,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x90,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x91,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x93,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0x42,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x97,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x96,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x98,0x00,0x00,0x00, -0x97,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x99,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0x98,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9a,0x00,0x00,0x00, -0x93,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0x9a,0x00,0x00,0x00, -0x83,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9d,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0xa2,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0xa2,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0x4a,0x00,0x00,0x00, -0xa6,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0xa9,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0xa8,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xaa,0x00,0x00,0x00, -0xa9,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xab,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0xaa,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00, -0xa4,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0xac,0x00,0x00,0x00, -0x83,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xaf,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xb1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xb1,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xa7,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0x05,0x00,0x00,0x00, -0xd0,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,0xa7,0x02,0x00,0x00, -0xc0,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xb3,0x00,0x00,0x00, -0xb2,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xc2,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0xb3,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0xcc,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,0xc9,0x00,0x00,0x00, -0xa7,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0xcd,0x00,0x00,0x00, -0xcb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd0,0x00,0x00,0x00,0xa7,0x02,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xb1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xb3,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd3,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xd3,0x00,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xc0,0x02,0x00,0x00,0xaf,0x00,0x00,0x00, -0xb3,0x00,0x00,0x00,0x73,0x01,0x00,0x00,0xd6,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xbc,0x02,0x00,0x00, -0x9d,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0x70,0x01,0x00,0x00, -0xd6,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xa8,0x02,0x00,0x00,0x83,0x00,0x00,0x00,0xb3,0x00,0x00,0x00, -0x21,0x02,0x00,0x00,0xd6,0x00,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0xda,0x00,0x00,0x00,0xa8,0x02,0x00,0x00, -0x8d,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xd5,0x00,0x00,0x00, -0xd6,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xda,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,0xd5,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xd4,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xdc,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdc,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xb8,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,0x26,0x01,0x00,0x00, -0xdf,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0xe2,0x00,0x00,0x00,0xb8,0x02,0x00,0x00,0x37,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xde,0x00,0x00,0x00,0xdf,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xe2,0x00,0x00,0x00, -0xdd,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xdd,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xe6,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0x73,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe8,0x00,0x00,0x00, -0xe6,0x00,0x00,0x00,0xb8,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,0xe8,0x00,0x00,0x00, -0x36,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0xed,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xeb,0x00,0x00,0x00, -0xec,0x00,0x00,0x00,0xed,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xec,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xf0,0x00,0x00,0x00,0xa8,0x02,0x00,0x00,0x6e,0x00,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xf2,0x00,0x00,0x00, -0xf0,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xed,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xed,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0xc1,0x00,0x00,0x00,0xf3,0x00,0x00,0x00, -0xeb,0x00,0x00,0x00,0xdd,0x00,0x00,0x00,0xf2,0x00,0x00,0x00, -0xec,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0xf5,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xf3,0x00,0x00,0x00, -0xf4,0x00,0x00,0x00,0x16,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xf4,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xfe,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0xb8,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x00,0x01,0x00,0x00, -0xfe,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x02,0x01,0x00,0x00,0x00,0x01,0x00,0x00, -0x6e,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x0d,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,0x98,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0e,0x01,0x00,0x00, -0xbc,0x02,0x00,0x00,0x0d,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x10,0x01,0x00,0x00,0x0e,0x01,0x00,0x00, -0x6e,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x11,0x01,0x00,0x00, -0x12,0x01,0x00,0x00,0x06,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0x10,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xf6,0x00,0x00,0x00, -0x13,0x01,0x00,0x00,0x12,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x14,0x01,0x00,0x00,0x15,0x01,0x00,0x00,0xfb,0x00,0x00,0x00, -0x02,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x15,0x01,0x00,0x00, -0x13,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xf5,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x16,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x19,0x01,0x00,0x00,0x73,0x00,0x00,0x00, -0xb8,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x1b,0x01,0x00,0x00,0x19,0x01,0x00,0x00,0x1a,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1d,0x01,0x00,0x00, -0x1b,0x01,0x00,0x00,0x6e,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x14,0x01,0x00,0x00,0x1f,0x01,0x00,0x00,0xfb,0x00,0x00,0x00, -0x1d,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x1f,0x01,0x00,0x00, -0x1e,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xf5,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xf5,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xdf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdf,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x26,0x01,0x00,0x00, -0xb8,0x02,0x00,0x00,0x24,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xdc,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x28,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x28,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xb9,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0xde,0x00,0x00,0x00, -0x6c,0x01,0x00,0x00,0x2b,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0x2e,0x01,0x00,0x00,0xb9,0x02,0x00,0x00, -0xa6,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x2a,0x01,0x00,0x00, -0x2b,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x2e,0x01,0x00,0x00,0x29,0x01,0x00,0x00,0x2a,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x29,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x32,0x01,0x00,0x00,0xa7,0x00,0x00,0x00, -0x7d,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x34,0x01,0x00,0x00,0x32,0x01,0x00,0x00,0xb9,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x35,0x01,0x00,0x00, -0x12,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x36,0x01,0x00,0x00,0x35,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x37,0x01,0x00,0x00, -0x34,0x01,0x00,0x00,0x36,0x01,0x00,0x00,0xf7,0x00,0x03,0x00, -0x39,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x37,0x01,0x00,0x00,0x38,0x01,0x00,0x00,0x39,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x38,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3c,0x01,0x00,0x00,0xa8,0x02,0x00,0x00, -0x78,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0x3e,0x01,0x00,0x00,0x3c,0x01,0x00,0x00,0x8d,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x39,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x39,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0xc1,0x00,0x00,0x00, -0x3f,0x01,0x00,0x00,0x37,0x01,0x00,0x00,0x29,0x01,0x00,0x00, -0x3e,0x01,0x00,0x00,0x38,0x01,0x00,0x00,0xf7,0x00,0x03,0x00, -0x41,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x3f,0x01,0x00,0x00,0x40,0x01,0x00,0x00,0x5f,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x40,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x49,0x01,0x00,0x00,0x7d,0x00,0x00,0x00, -0xb9,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x4b,0x01,0x00,0x00,0x49,0x01,0x00,0x00,0x4a,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4d,0x01,0x00,0x00, -0x4b,0x01,0x00,0x00,0x78,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x58,0x01,0x00,0x00,0x49,0x01,0x00,0x00, -0xaa,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x59,0x01,0x00,0x00,0xc0,0x02,0x00,0x00,0x58,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5b,0x01,0x00,0x00, -0x59,0x01,0x00,0x00,0x78,0x00,0x00,0x00,0x41,0x00,0x06,0x00, -0x11,0x01,0x00,0x00,0x5c,0x01,0x00,0x00,0x51,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0x5b,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0xf6,0x00,0x00,0x00,0x5d,0x01,0x00,0x00,0x5c,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x14,0x01,0x00,0x00,0x5e,0x01,0x00,0x00, -0x46,0x01,0x00,0x00,0x4d,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0x5e,0x01,0x00,0x00,0x5d,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0x41,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x5f,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x62,0x01,0x00,0x00, -0x7d,0x00,0x00,0x00,0xb9,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x64,0x01,0x00,0x00,0x62,0x01,0x00,0x00, -0x63,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x66,0x01,0x00,0x00,0x64,0x01,0x00,0x00,0x78,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x14,0x01,0x00,0x00,0x67,0x01,0x00,0x00, -0x46,0x01,0x00,0x00,0x66,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0x67,0x01,0x00,0x00,0x1e,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0x41,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x41,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0x2b,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x2b,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x6c,0x01,0x00,0x00,0xb9,0x02,0x00,0x00,0x6a,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0x28,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x2a,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x6d,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x70,0x01,0x00,0x00,0xbc,0x02,0x00,0x00, -0x6e,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x73,0x01,0x00,0x00,0xc0,0x02,0x00,0x00,0x71,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0x75,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x75,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xc2,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0x2a,0x01,0x00,0x00, -0x1f,0x02,0x00,0x00,0x78,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0x7b,0x01,0x00,0x00,0xc2,0x02,0x00,0x00, -0x6c,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x77,0x01,0x00,0x00, -0x78,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x7b,0x01,0x00,0x00,0x76,0x01,0x00,0x00,0x77,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x76,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0x7d,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x7d,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xc6,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0x76,0x01,0x00,0x00,0xa9,0x01,0x00,0x00, -0x80,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0x83,0x01,0x00,0x00,0xc6,0x02,0x00,0x00,0x60,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x7f,0x01,0x00,0x00,0x80,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x83,0x01,0x00,0x00, -0x7e,0x01,0x00,0x00,0x7f,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x7e,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x85,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x85,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xd8,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0x7e,0x01,0x00,0x00,0xa7,0x01,0x00,0x00,0x86,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x8b,0x01,0x00,0x00, -0xd8,0x02,0x00,0x00,0x62,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x87,0x01,0x00,0x00,0x86,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x8b,0x01,0x00,0x00,0x86,0x01,0x00,0x00, -0x87,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x86,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x91,0x01,0x00,0x00, -0xc6,0x02,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x93,0x01,0x00,0x00,0x91,0x01,0x00,0x00, -0xd8,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x95,0x01,0x00,0x00,0x55,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x97,0x01,0x00,0x00, -0xc6,0x02,0x00,0x00,0x61,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x98,0x01,0x00,0x00,0x95,0x01,0x00,0x00, -0x97,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9a,0x01,0x00,0x00,0x64,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9b,0x01,0x00,0x00, -0x98,0x01,0x00,0x00,0x9a,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9d,0x01,0x00,0x00,0x9b,0x01,0x00,0x00, -0xd8,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9f,0x01,0x00,0x00,0x9d,0x01,0x00,0x00,0x9e,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa1,0x01,0x00,0x00, -0x9f,0x01,0x00,0x00,0xc2,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0x14,0x01,0x00,0x00,0xa2,0x01,0x00,0x00,0xfb,0x00,0x00,0x00, -0xa1,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xf6,0x00,0x00,0x00, -0xa3,0x01,0x00,0x00,0xa2,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0xa4,0x01,0x00,0x00,0xa5,0x01,0x00,0x00,0x8f,0x01,0x00,0x00, -0x93,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xa5,0x01,0x00,0x00, -0xa3,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa7,0x01,0x00,0x00,0xd8,0x02,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x85,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x87,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x80,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x80,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa9,0x01,0x00,0x00,0xc6,0x02,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x7d,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x7f,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xab,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xab,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xc7,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0x7f,0x01,0x00,0x00,0xd7,0x01,0x00,0x00, -0xae,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0xb1,0x01,0x00,0x00,0xc7,0x02,0x00,0x00,0xbe,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xad,0x01,0x00,0x00,0xae,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xb1,0x01,0x00,0x00, -0xac,0x01,0x00,0x00,0xad,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xac,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xb3,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xb3,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xd5,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0xac,0x01,0x00,0x00,0xd5,0x01,0x00,0x00,0xb4,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xb9,0x01,0x00,0x00, -0xd5,0x02,0x00,0x00,0xbb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xb5,0x01,0x00,0x00,0xb4,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xb9,0x01,0x00,0x00,0xb4,0x01,0x00,0x00, -0xb5,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xb4,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbf,0x01,0x00,0x00, -0xc7,0x02,0x00,0x00,0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xc1,0x01,0x00,0x00,0xbf,0x01,0x00,0x00, -0xd5,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xc3,0x01,0x00,0x00,0x59,0x00,0x00,0x00,0xb8,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc6,0x01,0x00,0x00, -0xc7,0x02,0x00,0x00,0xc5,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xc7,0x01,0x00,0x00,0xc3,0x01,0x00,0x00, -0xc6,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xc9,0x01,0x00,0x00,0x68,0x00,0x00,0x00,0xbb,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xca,0x01,0x00,0x00, -0xc7,0x01,0x00,0x00,0xc9,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xcc,0x01,0x00,0x00,0xca,0x01,0x00,0x00, -0xd5,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xce,0x01,0x00,0x00,0xcc,0x01,0x00,0x00,0xcd,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd0,0x01,0x00,0x00, -0xce,0x01,0x00,0x00,0xc2,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0x14,0x01,0x00,0x00,0xd1,0x01,0x00,0x00,0x46,0x01,0x00,0x00, -0xd0,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xf6,0x00,0x00,0x00, -0xd2,0x01,0x00,0x00,0xd1,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0xa4,0x01,0x00,0x00,0xd3,0x01,0x00,0x00,0xbd,0x01,0x00,0x00, -0xc1,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xd3,0x01,0x00,0x00, -0xd2,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd5,0x01,0x00,0x00,0xd5,0x02,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xb3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xb5,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xae,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xae,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xd7,0x01,0x00,0x00,0xc7,0x02,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xab,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xad,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xd9,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xd9,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xc8,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0xad,0x01,0x00,0x00,0x1d,0x02,0x00,0x00, -0xdc,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0xdf,0x01,0x00,0x00,0xc8,0x02,0x00,0x00,0xbe,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xdb,0x01,0x00,0x00,0xdc,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xdf,0x01,0x00,0x00, -0xda,0x01,0x00,0x00,0xdb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xda,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xe1,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xe1,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xcc,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0xda,0x01,0x00,0x00,0x1b,0x02,0x00,0x00,0xe4,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xe7,0x01,0x00,0x00, -0xcc,0x02,0x00,0x00,0x60,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xe3,0x01,0x00,0x00,0xe4,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xe7,0x01,0x00,0x00,0xe2,0x01,0x00,0x00, -0xe3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xe2,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xe9,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xe9,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xce,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0xe2,0x01,0x00,0x00, -0x19,0x02,0x00,0x00,0xec,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0xef,0x01,0x00,0x00,0xce,0x02,0x00,0x00, -0xbb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xeb,0x01,0x00,0x00, -0xec,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xef,0x01,0x00,0x00,0xea,0x01,0x00,0x00,0xeb,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xea,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xf1,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xf1,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xd0,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0xea,0x01,0x00,0x00,0x17,0x02,0x00,0x00, -0xf2,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0xf7,0x01,0x00,0x00,0xd0,0x02,0x00,0x00,0x62,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xf3,0x01,0x00,0x00,0xf2,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xf7,0x01,0x00,0x00, -0xf2,0x01,0x00,0x00,0xf3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xf2,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xf9,0x01,0x00,0x00,0xc8,0x02,0x00,0x00,0xbb,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfb,0x01,0x00,0x00, -0xf9,0x01,0x00,0x00,0xce,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xfd,0x01,0x00,0x00,0xfb,0x01,0x00,0x00, -0xfc,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xff,0x01,0x00,0x00,0xcc,0x02,0x00,0x00,0x62,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x00,0x02,0x00,0x00, -0xfd,0x01,0x00,0x00,0xff,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x02,0x02,0x00,0x00,0x00,0x02,0x00,0x00, -0xd0,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x06,0x02,0x00,0x00,0xff,0x01,0x00,0x00,0xd0,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0xa4,0x01,0x00,0x00,0x07,0x02,0x00,0x00, -0x8f,0x01,0x00,0x00,0x06,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0xf6,0x00,0x00,0x00,0x08,0x02,0x00,0x00,0x07,0x02,0x00,0x00, -0x73,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x09,0x02,0x00,0x00, -0x08,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xa4,0x01,0x00,0x00, -0x0e,0x02,0x00,0x00,0xbd,0x01,0x00,0x00,0xfb,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0xf6,0x00,0x00,0x00,0x0f,0x02,0x00,0x00, -0x0e,0x02,0x00,0x00,0x73,0x00,0x04,0x00,0xc3,0x00,0x00,0x00, -0x10,0x02,0x00,0x00,0x0f,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0xcc,0x00,0x00,0x00,0x12,0x02,0x00,0x00,0xc9,0x00,0x00,0x00, -0x02,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00, -0x13,0x02,0x00,0x00,0x12,0x02,0x00,0x00,0x0c,0x00,0x08,0x00, -0xc3,0x00,0x00,0x00,0x14,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0x09,0x02,0x00,0x00,0x10,0x02,0x00,0x00, -0x13,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x12,0x02,0x00,0x00, -0x14,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x17,0x02,0x00,0x00,0xd0,0x02,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xf1,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xf3,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xec,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xec,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x19,0x02,0x00,0x00,0xce,0x02,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xe9,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xeb,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xe4,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xe4,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1b,0x02,0x00,0x00, -0xcc,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xe1,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xe3,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xdc,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xdc,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x1d,0x02,0x00,0x00,0xc8,0x02,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xd9,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xdb,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x78,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x78,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x1f,0x02,0x00,0x00,0xc2,0x02,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x75,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x77,0x01,0x00,0x00,0xe0,0x00,0x04,0x00, -0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x6d,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xd6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xd6,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x21,0x02,0x00,0x00,0xa8,0x02,0x00,0x00,0x6c,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xd3,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xd5,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x26,0x02,0x00,0x00,0x55,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x27,0x02,0x00,0x00, -0x95,0x00,0x00,0x00,0x26,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x2c,0x02,0x00,0x00,0x59,0x00,0x00,0x00, -0xb8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x2d,0x02,0x00,0x00,0xa7,0x00,0x00,0x00,0x2c,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x32,0x02,0x00,0x00, -0x12,0x00,0x00,0x00,0x31,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x33,0x02,0x00,0x00,0x32,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x34,0x02,0x00,0x00, -0x0f,0x00,0x00,0x00,0x33,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x38,0x02,0x00,0x00,0x47,0x00,0x00,0x00, -0x33,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x3a,0x02,0x00,0x00,0x39,0x02,0x00,0x00,0x0c,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x3b,0x02,0x00,0x00, -0x3a,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x3c,0x02,0x00,0x00,0x38,0x02,0x00,0x00,0x3b,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3d,0x02,0x00,0x00, -0x34,0x02,0x00,0x00,0x3c,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x3f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x3f,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xa9,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0xa6,0x02,0x00,0x00, -0x42,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0x45,0x02,0x00,0x00,0xa9,0x02,0x00,0x00,0xbe,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x41,0x02,0x00,0x00,0x42,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x45,0x02,0x00,0x00, -0x40,0x02,0x00,0x00,0x41,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x40,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x47,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x47,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xaa,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0x40,0x02,0x00,0x00,0xa4,0x02,0x00,0x00,0x4a,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x4d,0x02,0x00,0x00, -0xaa,0x02,0x00,0x00,0x60,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x49,0x02,0x00,0x00,0x4a,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x4d,0x02,0x00,0x00,0x48,0x02,0x00,0x00, -0x49,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x48,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x51,0x02,0x00,0x00, -0xaa,0x02,0x00,0x00,0x61,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x52,0x02,0x00,0x00,0x27,0x02,0x00,0x00, -0x51,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x54,0x02,0x00,0x00,0x64,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x55,0x02,0x00,0x00, -0x52,0x02,0x00,0x00,0x54,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x59,0x02,0x00,0x00,0xa9,0x02,0x00,0x00, -0xc5,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x5a,0x02,0x00,0x00,0x2d,0x02,0x00,0x00,0x59,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5c,0x02,0x00,0x00, -0x68,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x5d,0x02,0x00,0x00,0x5a,0x02,0x00,0x00, -0x5c,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x5f,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x5f,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xac,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0x48,0x02,0x00,0x00,0xa2,0x02,0x00,0x00,0x62,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x65,0x02,0x00,0x00, -0xac,0x02,0x00,0x00,0xbb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x61,0x02,0x00,0x00,0x62,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x65,0x02,0x00,0x00,0x60,0x02,0x00,0x00, -0x61,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x60,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x67,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x67,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xae,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0x60,0x02,0x00,0x00, -0xa0,0x02,0x00,0x00,0x6a,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0x6d,0x02,0x00,0x00,0xae,0x02,0x00,0x00, -0x62,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x69,0x02,0x00,0x00, -0x6a,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x6d,0x02,0x00,0x00,0x68,0x02,0x00,0x00,0x69,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x68,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x70,0x02,0x00,0x00,0x55,0x02,0x00,0x00, -0xae,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0x73,0x02,0x00,0x00,0x70,0x02,0x00,0x00,0x36,0x00,0x00,0x00, -0xf7,0x00,0x03,0x00,0x75,0x02,0x00,0x00,0x00,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x73,0x02,0x00,0x00,0x74,0x02,0x00,0x00, -0x75,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x74,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x78,0x02,0x00,0x00, -0x5d,0x02,0x00,0x00,0xac,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x79,0x02,0x00,0x00,0x12,0x00,0x00,0x00, -0xcf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x7a,0x02,0x00,0x00,0x79,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0x7b,0x02,0x00,0x00,0x78,0x02,0x00,0x00, -0x7a,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x75,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x75,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0xc1,0x00,0x00,0x00,0x7c,0x02,0x00,0x00,0x73,0x02,0x00,0x00, -0x68,0x02,0x00,0x00,0x7b,0x02,0x00,0x00,0x74,0x02,0x00,0x00, -0xf7,0x00,0x03,0x00,0x7e,0x02,0x00,0x00,0x00,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x7c,0x02,0x00,0x00,0x7d,0x02,0x00,0x00, -0x7e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x7d,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x86,0x02,0x00,0x00, -0x5d,0x02,0x00,0x00,0xac,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x88,0x02,0x00,0x00,0x12,0x00,0x00,0x00, -0x87,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x89,0x02,0x00,0x00,0x88,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x8a,0x02,0x00,0x00,0x86,0x02,0x00,0x00, -0x89,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x8b,0x02,0x00,0x00,0x3d,0x02,0x00,0x00,0x8a,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8d,0x02,0x00,0x00, -0x8b,0x02,0x00,0x00,0x55,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x8f,0x02,0x00,0x00,0x8d,0x02,0x00,0x00, -0xae,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x91,0x02,0x00,0x00,0xa9,0x02,0x00,0x00,0xbb,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x93,0x02,0x00,0x00, -0x91,0x02,0x00,0x00,0xac,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x95,0x02,0x00,0x00,0x93,0x02,0x00,0x00, -0x94,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x97,0x02,0x00,0x00,0xaa,0x02,0x00,0x00,0x62,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x98,0x02,0x00,0x00, -0x95,0x02,0x00,0x00,0x97,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9a,0x02,0x00,0x00,0x98,0x02,0x00,0x00, -0xae,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00, -0x9b,0x02,0x00,0x00,0xc9,0x00,0x00,0x00,0x9a,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x9c,0x02,0x00,0x00, -0x9b,0x02,0x00,0x00,0x41,0x00,0x06,0x00,0x9d,0x02,0x00,0x00, -0x9e,0x02,0x00,0x00,0x82,0x02,0x00,0x00,0x34,0x00,0x00,0x00, -0x8f,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x9e,0x02,0x00,0x00, -0x9c,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x7e,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x7e,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x6a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x6a,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa0,0x02,0x00,0x00, -0xae,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x67,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x69,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x62,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x62,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa2,0x02,0x00,0x00,0xac,0x02,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x5f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x61,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x4a,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x4a,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa4,0x02,0x00,0x00,0xaa,0x02,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x47,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x49,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x42,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x42,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa6,0x02,0x00,0x00, -0xa9,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x3f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x41,0x02,0x00,0x00, -0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00, -}; -const uint64_t matmul_f16_len = 10316; - -unsigned char matmul_f16_aligned_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0x09,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x09,0x00,0x00,0x00, -0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,0x0b,0x00,0x06,0x00, -0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64, -0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00, -0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0f,0x00,0x0f,0x00, -0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e, -0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x3d,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0xfe,0x00,0x00,0x00, -0x05,0x01,0x00,0x00,0x63,0x01,0x00,0x00,0x69,0x01,0x00,0x00, -0x69,0x02,0x00,0x00,0xb2,0x02,0x00,0x00,0x10,0x00,0x06,0x00, -0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x34,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x10,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x37,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x3d,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x4c,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x4f,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x53,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x60,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x62,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x6c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xa7,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xb9,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xbc,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x02,0x01,0x00,0x00,0x06,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x03,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x03,0x01,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x05,0x01,0x00,0x00, -0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x05,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x3b,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x3c,0x01,0x00,0x00, -0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x66,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x48,0x00,0x04,0x00,0x67,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x05,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x67,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x67,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x67,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0x67,0x01,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x69,0x01,0x00,0x00,0x22,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x69,0x01,0x00,0x00, -0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x69,0x02,0x00,0x00,0x0b,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xaf,0x02,0x00,0x00,0x06,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0xb0,0x02,0x00,0x00, -0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0xb0,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0xb0,0x02,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xb2,0x02,0x00,0x00, -0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xb2,0x02,0x00,0x00,0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00, -0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x1e,0x00,0x10,0x00, -0x10,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x11,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x11,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x15,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x0a,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x27,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x2d,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x3e,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x4c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x54,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x58,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x63,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x67,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x6d,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x91,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0xa2,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xa7,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xba,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0xb9,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xbb,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x4f,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xbc,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xbb,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xbd,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0xba,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xb8,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xc0,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x14,0x00,0x02,0x00, -0xc2,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0xc4,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xc5,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xc6,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc5,0x00,0x00,0x00, -0xbf,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xc7,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc6,0x00,0x00,0x00, -0xbc,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xc8,0x00,0x00,0x00, -0xc4,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0xc9,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xc8,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0xcc,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xcd,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xf4,0x00,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x16,0x00,0x03,0x00,0xf9,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xfa,0x00,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xfb,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0xfa,0x00,0x00,0x00, -0x1c,0x00,0x04,0x00,0xfc,0x00,0x00,0x00,0xf9,0x00,0x00,0x00, -0xfb,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xfd,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0xfd,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x17,0x00,0x04,0x00,0x00,0x01,0x00,0x00,0xf9,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x18,0x00,0x04,0x00,0x01,0x01,0x00,0x00, -0x00,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x1d,0x00,0x03,0x00, -0x02,0x01,0x00,0x00,0x01,0x01,0x00,0x00,0x1e,0x00,0x03,0x00, -0x03,0x01,0x00,0x00,0x02,0x01,0x00,0x00,0x20,0x00,0x04,0x00, -0x04,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x03,0x01,0x00,0x00, -0x3b,0x00,0x04,0x00,0x04,0x01,0x00,0x00,0x05,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x07,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x0a,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0xf9,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x19,0x01,0x00,0x00, -0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x20,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x27,0x01,0x00,0x00,0x05,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x2e,0x01,0x00,0x00, -0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x35,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x3b,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0x33,0x00,0x06,0x00,0x09,0x00,0x00,0x00,0x3c,0x01,0x00,0x00, -0x3b,0x01,0x00,0x00,0x39,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x3d,0x01,0x00,0x00, -0x51,0x00,0x00,0x00,0x3c,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x3e,0x01,0x00,0x00, -0x84,0x00,0x00,0x00,0x3d,0x01,0x00,0x00,0x6d,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x3f,0x01,0x00,0x00, -0x86,0x00,0x00,0x00,0x3e,0x01,0x00,0x00,0x6c,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x5a,0x01,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x5f,0x01,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x60,0x01,0x00,0x00, -0x84,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0x5f,0x01,0x00,0x00, -0x1c,0x00,0x04,0x00,0x61,0x01,0x00,0x00,0xf9,0x00,0x00,0x00, -0x60,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x62,0x01,0x00,0x00, -0x04,0x00,0x00,0x00,0x61,0x01,0x00,0x00,0x3b,0x00,0x04,0x00, -0x62,0x01,0x00,0x00,0x63,0x01,0x00,0x00,0x04,0x00,0x00,0x00, -0x1d,0x00,0x03,0x00,0x66,0x01,0x00,0x00,0x01,0x01,0x00,0x00, -0x1e,0x00,0x03,0x00,0x67,0x01,0x00,0x00,0x66,0x01,0x00,0x00, -0x20,0x00,0x04,0x00,0x68,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x67,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x68,0x01,0x00,0x00, -0x69,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x98,0x01,0x00,0x00,0x51,0x00,0x00,0x00, -0x3c,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x99,0x01,0x00,0x00,0x84,0x00,0x00,0x00, -0x98,0x01,0x00,0x00,0x6d,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x9a,0x01,0x00,0x00,0x86,0x00,0x00,0x00, -0x99,0x01,0x00,0x00,0x6c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x9d,0x01,0x00,0x00,0x08,0x01,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x9e,0x01,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x6d,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xa1,0x01,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x6d,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbc,0x01,0x00,0x00, -0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x1c,0x00,0x04,0x00,0xbd,0x01,0x00,0x00,0xf9,0x00,0x00,0x00, -0xbc,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0xbe,0x01,0x00,0x00, -0x07,0x00,0x00,0x00,0xbd,0x01,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xce,0x01,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0xd4,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0xf9,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xea,0x01,0x00,0x00, -0x84,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0xbc,0x00,0x00,0x00, -0x1c,0x00,0x04,0x00,0xeb,0x01,0x00,0x00,0xf9,0x00,0x00,0x00, -0xea,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0xec,0x01,0x00,0x00, -0x07,0x00,0x00,0x00,0xeb,0x01,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xf5,0x01,0x00,0x00,0x86,0x00,0x00,0x00, -0xb9,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xfd,0x01,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x2c,0x02,0x00,0x00,0x84,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x61,0x02,0x00,0x00,0x0d,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x69,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0xaf,0x02,0x00,0x00, -0xc4,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0xb0,0x02,0x00,0x00, -0xaf,0x02,0x00,0x00,0x20,0x00,0x04,0x00,0xb1,0x02,0x00,0x00, -0x0c,0x00,0x00,0x00,0xb0,0x02,0x00,0x00,0x3b,0x00,0x04,0x00, -0xb1,0x02,0x00,0x00,0xb2,0x02,0x00,0x00,0x0c,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0xb7,0x02,0x00,0x00, -0x05,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xc4,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xcd,0x02,0x00,0x00, -0x0c,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0x36,0x00,0x05,0x00, -0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0xc9,0x00,0x00,0x00,0xca,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xbe,0x01,0x00,0x00, -0xbf,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0xec,0x01,0x00,0x00,0xed,0x01,0x00,0x00,0x07,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x16,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x16,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x17,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x24,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2a,0x00,0x00,0x00, -0x1e,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x2d,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x2f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x24,0x00,0x00,0x00, -0x2f,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x2a,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x35,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x35,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x38,0x00,0x00,0x00, -0x36,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x82,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x38,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x3b,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x3f,0x00,0x00,0x00, -0x3d,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x3f,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x42,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x3b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x49,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4a,0x00,0x00,0x00, -0x49,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x4d,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x3e,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x4d,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x50,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00, -0x50,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x50,0x00,0x00,0x00, -0x58,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x5d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x64,0x00,0x00,0x00, -0x5d,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x5d,0x00,0x00,0x00, -0x67,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x6f,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x6e,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x74,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x78,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x7e,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x7d,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x82,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x82,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x47,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x88,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0x47,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x8d,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0x83,0x00,0x00,0x00, -0x0c,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x8e,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x26,0x00,0x00,0x00,0x88,0x00,0x00,0x00, -0x8d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x92,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x91,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x93,0x00,0x00,0x00, -0x92,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x94,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x93,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x96,0x00,0x00,0x00, -0x42,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x97,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x99,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x96,0x00,0x00,0x00, -0x99,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9b,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x9a,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9d,0x00,0x00,0x00, -0x9b,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,0x9d,0x00,0x00,0x00, -0x6d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0xa3,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0xa2,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00, -0xa3,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa5,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0xa4,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa8,0x00,0x00,0x00, -0x4a,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0xa9,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xab,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0xa8,0x00,0x00,0x00, -0xab,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xad,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,0xac,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xaf,0x00,0x00,0x00, -0xad,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0xaf,0x00,0x00,0x00, -0x6d,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb2,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xd7,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0x05,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0xb3,0x00,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xc3,0x00,0x00,0x00, -0xd7,0x02,0x00,0x00,0xc1,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xb4,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0xb3,0x00,0x00,0x00, -0xb4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb3,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,0xce,0x00,0x00,0x00, -0xca,0x00,0x00,0x00,0xd7,0x02,0x00,0x00,0x3e,0x00,0x03,0x00, -0xce,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0xd7,0x02,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb2,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xb4,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xd4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd4,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xf0,0x02,0x00,0x00, -0xb0,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0xa3,0x01,0x00,0x00, -0xd7,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xec,0x02,0x00,0x00,0x9e,0x00,0x00,0x00,0xb4,0x00,0x00,0x00, -0xa0,0x01,0x00,0x00,0xd7,0x00,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xd8,0x02,0x00,0x00,0x84,0x00,0x00,0x00, -0xb4,0x00,0x00,0x00,0x51,0x02,0x00,0x00,0xd7,0x00,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xdb,0x00,0x00,0x00, -0xd8,0x02,0x00,0x00,0x8e,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xd6,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xdb,0x00,0x00,0x00,0xd5,0x00,0x00,0x00, -0xd6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd5,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xdd,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xe8,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0xd5,0x00,0x00,0x00, -0x41,0x01,0x00,0x00,0xde,0x00,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0xe3,0x00,0x00,0x00,0xe8,0x02,0x00,0x00, -0x37,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xdf,0x00,0x00,0x00, -0xde,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xe3,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0xdf,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0x74,0x00,0x00,0x00, -0xe8,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xeb,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0x99,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xec,0x00,0x00,0x00, -0xeb,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xed,0x00,0x00,0x00,0xec,0x02,0x00,0x00, -0xec,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xef,0x00,0x00,0x00,0xed,0x00,0x00,0x00,0x6f,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf5,0x00,0x00,0x00, -0xe8,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,0x6f,0x00,0x00,0x00, -0x6d,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xf8,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,0xf7,0x00,0x00,0x00, -0x41,0x00,0x08,0x00,0x07,0x01,0x00,0x00,0x08,0x01,0x00,0x00, -0x05,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0xef,0x00,0x00,0x00, -0x34,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0xf9,0x00,0x00,0x00,0x09,0x01,0x00,0x00,0x08,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x0a,0x01,0x00,0x00,0x0b,0x01,0x00,0x00, -0xfe,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,0x3e,0x00,0x03,0x00, -0x0b,0x01,0x00,0x00,0x09,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x0d,0x01,0x00,0x00,0xf8,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x07,0x01,0x00,0x00, -0x0f,0x01,0x00,0x00,0x05,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0xef,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0xf9,0x00,0x00,0x00,0x10,0x01,0x00,0x00, -0x0f,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x0a,0x01,0x00,0x00, -0x11,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,0x0d,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0x11,0x01,0x00,0x00,0x10,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x13,0x01,0x00,0x00, -0xf8,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x41,0x00,0x08,0x00, -0x07,0x01,0x00,0x00,0x15,0x01,0x00,0x00,0x05,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xef,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xf9,0x00,0x00,0x00, -0x16,0x01,0x00,0x00,0x15,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x0a,0x01,0x00,0x00,0x17,0x01,0x00,0x00,0xfe,0x00,0x00,0x00, -0x13,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x17,0x01,0x00,0x00, -0x16,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x1a,0x01,0x00,0x00,0xf8,0x00,0x00,0x00,0x19,0x01,0x00,0x00, -0x41,0x00,0x08,0x00,0x07,0x01,0x00,0x00,0x1c,0x01,0x00,0x00, -0x05,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0xef,0x00,0x00,0x00, -0x34,0x00,0x00,0x00,0x19,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0xf9,0x00,0x00,0x00,0x1d,0x01,0x00,0x00,0x1c,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x0a,0x01,0x00,0x00,0x1e,0x01,0x00,0x00, -0xfe,0x00,0x00,0x00,0x1a,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0x1e,0x01,0x00,0x00,0x1d,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x21,0x01,0x00,0x00,0xf8,0x00,0x00,0x00, -0x20,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x07,0x01,0x00,0x00, -0x23,0x01,0x00,0x00,0x05,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0xef,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x3e,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0xf9,0x00,0x00,0x00,0x24,0x01,0x00,0x00, -0x23,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x0a,0x01,0x00,0x00, -0x25,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,0x21,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0x25,0x01,0x00,0x00,0x24,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x28,0x01,0x00,0x00, -0xf8,0x00,0x00,0x00,0x27,0x01,0x00,0x00,0x41,0x00,0x08,0x00, -0x07,0x01,0x00,0x00,0x2a,0x01,0x00,0x00,0x05,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xef,0x00,0x00,0x00,0xd0,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xf9,0x00,0x00,0x00, -0x2b,0x01,0x00,0x00,0x2a,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x0a,0x01,0x00,0x00,0x2c,0x01,0x00,0x00,0xfe,0x00,0x00,0x00, -0x28,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x2c,0x01,0x00,0x00, -0x2b,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x2f,0x01,0x00,0x00,0xf8,0x00,0x00,0x00,0x2e,0x01,0x00,0x00, -0x41,0x00,0x08,0x00,0x07,0x01,0x00,0x00,0x31,0x01,0x00,0x00, -0x05,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0xef,0x00,0x00,0x00, -0xd0,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0xf9,0x00,0x00,0x00,0x32,0x01,0x00,0x00,0x31,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x0a,0x01,0x00,0x00,0x33,0x01,0x00,0x00, -0xfe,0x00,0x00,0x00,0x2f,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0x33,0x01,0x00,0x00,0x32,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x36,0x01,0x00,0x00,0xf8,0x00,0x00,0x00, -0x35,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x07,0x01,0x00,0x00, -0x38,0x01,0x00,0x00,0x05,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0xef,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x19,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0xf9,0x00,0x00,0x00,0x39,0x01,0x00,0x00, -0x38,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x0a,0x01,0x00,0x00, -0x3a,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,0x36,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0x3a,0x01,0x00,0x00,0x39,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x41,0x01,0x00,0x00, -0xe8,0x02,0x00,0x00,0x3f,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x43,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x43,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xe9,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0xdf,0x00,0x00,0x00, -0x9c,0x01,0x00,0x00,0x44,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0x49,0x01,0x00,0x00,0xe9,0x02,0x00,0x00, -0xa7,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x45,0x01,0x00,0x00, -0x44,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x49,0x01,0x00,0x00,0x44,0x01,0x00,0x00,0x45,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x44,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x4e,0x01,0x00,0x00,0x7e,0x00,0x00,0x00, -0xe9,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x51,0x01,0x00,0x00,0x4e,0x01,0x00,0x00,0xab,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x52,0x01,0x00,0x00, -0x51,0x01,0x00,0x00,0x6d,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x53,0x01,0x00,0x00,0xf0,0x02,0x00,0x00, -0x52,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x55,0x01,0x00,0x00,0x53,0x01,0x00,0x00,0x79,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5b,0x01,0x00,0x00, -0x4e,0x01,0x00,0x00,0x5a,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x5d,0x01,0x00,0x00,0x79,0x00,0x00,0x00, -0x6d,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x5e,0x01,0x00,0x00,0x5b,0x01,0x00,0x00,0x5d,0x01,0x00,0x00, -0x41,0x00,0x08,0x00,0x07,0x01,0x00,0x00,0x6b,0x01,0x00,0x00, -0x69,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0x55,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0xf9,0x00,0x00,0x00,0x6c,0x01,0x00,0x00,0x6b,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x0a,0x01,0x00,0x00,0x6d,0x01,0x00,0x00, -0x63,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0x6d,0x01,0x00,0x00,0x6c,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x6f,0x01,0x00,0x00,0x5e,0x01,0x00,0x00, -0x39,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x07,0x01,0x00,0x00, -0x71,0x01,0x00,0x00,0x69,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0x55,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0xf9,0x00,0x00,0x00,0x72,0x01,0x00,0x00, -0x71,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x0a,0x01,0x00,0x00, -0x73,0x01,0x00,0x00,0x63,0x01,0x00,0x00,0x6f,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0x73,0x01,0x00,0x00,0x72,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x75,0x01,0x00,0x00, -0x5e,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x41,0x00,0x08,0x00, -0x07,0x01,0x00,0x00,0x77,0x01,0x00,0x00,0x69,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0x55,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xf9,0x00,0x00,0x00, -0x78,0x01,0x00,0x00,0x77,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x0a,0x01,0x00,0x00,0x79,0x01,0x00,0x00,0x63,0x01,0x00,0x00, -0x75,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x79,0x01,0x00,0x00, -0x78,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x7b,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,0x19,0x01,0x00,0x00, -0x41,0x00,0x08,0x00,0x07,0x01,0x00,0x00,0x7d,0x01,0x00,0x00, -0x69,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0x55,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0x19,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0xf9,0x00,0x00,0x00,0x7e,0x01,0x00,0x00,0x7d,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x0a,0x01,0x00,0x00,0x7f,0x01,0x00,0x00, -0x63,0x01,0x00,0x00,0x7b,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0x7f,0x01,0x00,0x00,0x7e,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x81,0x01,0x00,0x00,0x5e,0x01,0x00,0x00, -0x20,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x07,0x01,0x00,0x00, -0x83,0x01,0x00,0x00,0x69,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0x55,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,0x3e,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0xf9,0x00,0x00,0x00,0x84,0x01,0x00,0x00, -0x83,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x0a,0x01,0x00,0x00, -0x85,0x01,0x00,0x00,0x63,0x01,0x00,0x00,0x81,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0x85,0x01,0x00,0x00,0x84,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x87,0x01,0x00,0x00, -0x5e,0x01,0x00,0x00,0x27,0x01,0x00,0x00,0x41,0x00,0x08,0x00, -0x07,0x01,0x00,0x00,0x89,0x01,0x00,0x00,0x69,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0x55,0x01,0x00,0x00,0xd0,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xf9,0x00,0x00,0x00, -0x8a,0x01,0x00,0x00,0x89,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x0a,0x01,0x00,0x00,0x8b,0x01,0x00,0x00,0x63,0x01,0x00,0x00, -0x87,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x8b,0x01,0x00,0x00, -0x8a,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x8d,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,0x2e,0x01,0x00,0x00, -0x41,0x00,0x08,0x00,0x07,0x01,0x00,0x00,0x8f,0x01,0x00,0x00, -0x69,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0x55,0x01,0x00,0x00, -0xd0,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0xf9,0x00,0x00,0x00,0x90,0x01,0x00,0x00,0x8f,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x0a,0x01,0x00,0x00,0x91,0x01,0x00,0x00, -0x63,0x01,0x00,0x00,0x8d,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0x91,0x01,0x00,0x00,0x90,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x93,0x01,0x00,0x00,0x5e,0x01,0x00,0x00, -0x35,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x07,0x01,0x00,0x00, -0x95,0x01,0x00,0x00,0x69,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0x55,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,0x19,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0xf9,0x00,0x00,0x00,0x96,0x01,0x00,0x00, -0x95,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x0a,0x01,0x00,0x00, -0x97,0x01,0x00,0x00,0x63,0x01,0x00,0x00,0x93,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0x97,0x01,0x00,0x00,0x96,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9c,0x01,0x00,0x00, -0xe9,0x02,0x00,0x00,0x9a,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0x43,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x45,0x01,0x00,0x00, -0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x9d,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa0,0x01,0x00,0x00,0xec,0x02,0x00,0x00,0x9e,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa3,0x01,0x00,0x00, -0xf0,0x02,0x00,0x00,0xa1,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xa5,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xa5,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xf2,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0x45,0x01,0x00,0x00,0x4f,0x02,0x00,0x00, -0xa8,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0xab,0x01,0x00,0x00,0xf2,0x02,0x00,0x00,0x6c,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xa7,0x01,0x00,0x00,0xa8,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xab,0x01,0x00,0x00, -0xa6,0x01,0x00,0x00,0xa7,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xa6,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xad,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xad,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xf6,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0xa6,0x01,0x00,0x00,0xd9,0x01,0x00,0x00,0xb0,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xb3,0x01,0x00,0x00, -0xf6,0x02,0x00,0x00,0x60,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xaf,0x01,0x00,0x00,0xb0,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xb3,0x01,0x00,0x00,0xae,0x01,0x00,0x00, -0xaf,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xae,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xb5,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xb5,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x08,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0xae,0x01,0x00,0x00, -0xd7,0x01,0x00,0x00,0xb6,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0xbb,0x01,0x00,0x00,0x08,0x03,0x00,0x00, -0x62,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xb7,0x01,0x00,0x00, -0xb6,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xbb,0x01,0x00,0x00,0xb6,0x01,0x00,0x00,0xb7,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xb6,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xc1,0x01,0x00,0x00,0xf6,0x02,0x00,0x00, -0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xc3,0x01,0x00,0x00,0xc1,0x01,0x00,0x00,0x08,0x03,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc5,0x01,0x00,0x00, -0x55,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xc7,0x01,0x00,0x00,0xf6,0x02,0x00,0x00, -0x61,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xc8,0x01,0x00,0x00,0xc5,0x01,0x00,0x00,0xc7,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xca,0x01,0x00,0x00, -0x64,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xcb,0x01,0x00,0x00,0xc8,0x01,0x00,0x00, -0xca,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xcd,0x01,0x00,0x00,0xcb,0x01,0x00,0x00,0x08,0x03,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xcf,0x01,0x00,0x00, -0xcd,0x01,0x00,0x00,0xce,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xd1,0x01,0x00,0x00,0xcf,0x01,0x00,0x00, -0xf2,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x0a,0x01,0x00,0x00, -0xd2,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,0xd1,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0xf9,0x00,0x00,0x00,0xd3,0x01,0x00,0x00, -0xd2,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0xd4,0x01,0x00,0x00, -0xd5,0x01,0x00,0x00,0xbf,0x01,0x00,0x00,0xc3,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0xd5,0x01,0x00,0x00,0xd3,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd7,0x01,0x00,0x00, -0x08,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xb5,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xb7,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xb0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xb0,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd9,0x01,0x00,0x00,0xf6,0x02,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xad,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xaf,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xdb,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xdb,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xf7,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0xaf,0x01,0x00,0x00,0x07,0x02,0x00,0x00,0xde,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xe1,0x01,0x00,0x00, -0xf7,0x02,0x00,0x00,0xbf,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xdd,0x01,0x00,0x00,0xde,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xe1,0x01,0x00,0x00,0xdc,0x01,0x00,0x00, -0xdd,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xdc,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xe3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xe3,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x05,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0xdc,0x01,0x00,0x00, -0x05,0x02,0x00,0x00,0xe4,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0xe9,0x01,0x00,0x00,0x05,0x03,0x00,0x00, -0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xe5,0x01,0x00,0x00, -0xe4,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xe9,0x01,0x00,0x00,0xe4,0x01,0x00,0x00,0xe5,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xe4,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xef,0x01,0x00,0x00,0xf7,0x02,0x00,0x00, -0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xf1,0x01,0x00,0x00,0xef,0x01,0x00,0x00,0x05,0x03,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf3,0x01,0x00,0x00, -0x59,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xf6,0x01,0x00,0x00,0xf7,0x02,0x00,0x00, -0xf5,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xf7,0x01,0x00,0x00,0xf3,0x01,0x00,0x00,0xf6,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf9,0x01,0x00,0x00, -0x68,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xfa,0x01,0x00,0x00,0xf7,0x01,0x00,0x00, -0xf9,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xfc,0x01,0x00,0x00,0xfa,0x01,0x00,0x00,0x05,0x03,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfe,0x01,0x00,0x00, -0xfc,0x01,0x00,0x00,0xfd,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0xfe,0x01,0x00,0x00, -0xf2,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x0a,0x01,0x00,0x00, -0x01,0x02,0x00,0x00,0x63,0x01,0x00,0x00,0x00,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0xf9,0x00,0x00,0x00,0x02,0x02,0x00,0x00, -0x01,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xd4,0x01,0x00,0x00, -0x03,0x02,0x00,0x00,0xed,0x01,0x00,0x00,0xf1,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0x03,0x02,0x00,0x00,0x02,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x05,0x02,0x00,0x00, -0x05,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xe3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xe5,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xde,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xde,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x07,0x02,0x00,0x00,0xf7,0x02,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xdb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xdd,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x09,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x09,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xf8,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0xdd,0x01,0x00,0x00,0x4d,0x02,0x00,0x00,0x0c,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x0f,0x02,0x00,0x00, -0xf8,0x02,0x00,0x00,0xbf,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x0b,0x02,0x00,0x00,0x0c,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x0f,0x02,0x00,0x00,0x0a,0x02,0x00,0x00, -0x0b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x0a,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x11,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x11,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xfc,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0x0a,0x02,0x00,0x00, -0x4b,0x02,0x00,0x00,0x14,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0x17,0x02,0x00,0x00,0xfc,0x02,0x00,0x00, -0x60,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x13,0x02,0x00,0x00, -0x14,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x17,0x02,0x00,0x00,0x12,0x02,0x00,0x00,0x13,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x12,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x19,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x19,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xfe,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0x12,0x02,0x00,0x00,0x49,0x02,0x00,0x00, -0x1c,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0x1f,0x02,0x00,0x00,0xfe,0x02,0x00,0x00,0xbc,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x1b,0x02,0x00,0x00,0x1c,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x1f,0x02,0x00,0x00, -0x1a,0x02,0x00,0x00,0x1b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x1a,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x21,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x21,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0x1a,0x02,0x00,0x00,0x47,0x02,0x00,0x00,0x22,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x27,0x02,0x00,0x00, -0x00,0x03,0x00,0x00,0x62,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x23,0x02,0x00,0x00,0x22,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x27,0x02,0x00,0x00,0x22,0x02,0x00,0x00, -0x23,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x22,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x29,0x02,0x00,0x00, -0xf8,0x02,0x00,0x00,0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x2b,0x02,0x00,0x00,0x29,0x02,0x00,0x00, -0xfe,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x2d,0x02,0x00,0x00,0x2b,0x02,0x00,0x00,0x2c,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2f,0x02,0x00,0x00, -0xfc,0x02,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x30,0x02,0x00,0x00,0x2d,0x02,0x00,0x00, -0x2f,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x32,0x02,0x00,0x00,0x30,0x02,0x00,0x00,0x00,0x03,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x36,0x02,0x00,0x00, -0x2f,0x02,0x00,0x00,0x00,0x03,0x00,0x00,0x41,0x00,0x05,0x00, -0xd4,0x01,0x00,0x00,0x37,0x02,0x00,0x00,0xbf,0x01,0x00,0x00, -0x36,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xf9,0x00,0x00,0x00, -0x38,0x02,0x00,0x00,0x37,0x02,0x00,0x00,0x73,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0x39,0x02,0x00,0x00,0x38,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0xd4,0x01,0x00,0x00,0x3e,0x02,0x00,0x00, -0xed,0x01,0x00,0x00,0x2b,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0xf9,0x00,0x00,0x00,0x3f,0x02,0x00,0x00,0x3e,0x02,0x00,0x00, -0x73,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x40,0x02,0x00,0x00, -0x3f,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00, -0x42,0x02,0x00,0x00,0xca,0x00,0x00,0x00,0x32,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x43,0x02,0x00,0x00, -0x42,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,0xc4,0x00,0x00,0x00, -0x44,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x39,0x02,0x00,0x00,0x40,0x02,0x00,0x00,0x43,0x02,0x00,0x00, -0x3e,0x00,0x03,0x00,0x42,0x02,0x00,0x00,0x44,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x47,0x02,0x00,0x00, -0x00,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x21,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x23,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x1c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x1c,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x49,0x02,0x00,0x00,0xfe,0x02,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x19,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x1b,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x14,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x14,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x4b,0x02,0x00,0x00,0xfc,0x02,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x11,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x13,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x0c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x0c,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4d,0x02,0x00,0x00, -0xf8,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x09,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x0b,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0xa8,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xa8,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x4f,0x02,0x00,0x00,0xf2,0x02,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xa5,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xa7,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x9d,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xd7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd7,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x51,0x02,0x00,0x00, -0xd8,0x02,0x00,0x00,0x6c,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xd4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd6,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x56,0x02,0x00,0x00, -0x55,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x57,0x02,0x00,0x00,0x96,0x00,0x00,0x00, -0x56,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x5c,0x02,0x00,0x00,0x59,0x00,0x00,0x00,0xb9,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5d,0x02,0x00,0x00, -0xa8,0x00,0x00,0x00,0x5c,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x62,0x02,0x00,0x00,0x12,0x00,0x00,0x00, -0x61,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x63,0x02,0x00,0x00,0x62,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x64,0x02,0x00,0x00,0x0f,0x00,0x00,0x00, -0x63,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x68,0x02,0x00,0x00,0x47,0x00,0x00,0x00,0x63,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x6a,0x02,0x00,0x00, -0x69,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x6b,0x02,0x00,0x00,0x6a,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6c,0x02,0x00,0x00, -0x68,0x02,0x00,0x00,0x6b,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x6d,0x02,0x00,0x00,0x64,0x02,0x00,0x00, -0x6c,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x6f,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x6f,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xd9,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0xd6,0x00,0x00,0x00,0xd6,0x02,0x00,0x00,0x72,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x75,0x02,0x00,0x00, -0xd9,0x02,0x00,0x00,0xbf,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x71,0x02,0x00,0x00,0x72,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x75,0x02,0x00,0x00,0x70,0x02,0x00,0x00, -0x71,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x70,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x77,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x77,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xda,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0x70,0x02,0x00,0x00, -0xd4,0x02,0x00,0x00,0x7a,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0x7d,0x02,0x00,0x00,0xda,0x02,0x00,0x00, -0x60,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x79,0x02,0x00,0x00, -0x7a,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x7d,0x02,0x00,0x00,0x78,0x02,0x00,0x00,0x79,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x78,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x81,0x02,0x00,0x00,0xda,0x02,0x00,0x00, -0x61,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x82,0x02,0x00,0x00,0x57,0x02,0x00,0x00,0x81,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x84,0x02,0x00,0x00, -0x64,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x85,0x02,0x00,0x00,0x82,0x02,0x00,0x00, -0x84,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x89,0x02,0x00,0x00,0xd9,0x02,0x00,0x00,0xf5,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8a,0x02,0x00,0x00, -0x5d,0x02,0x00,0x00,0x89,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x8c,0x02,0x00,0x00,0x68,0x00,0x00,0x00, -0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x8d,0x02,0x00,0x00,0x8a,0x02,0x00,0x00,0x8c,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x8f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x8f,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xdc,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0x78,0x02,0x00,0x00, -0xd2,0x02,0x00,0x00,0x92,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0x95,0x02,0x00,0x00,0xdc,0x02,0x00,0x00, -0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x91,0x02,0x00,0x00, -0x92,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x95,0x02,0x00,0x00,0x90,0x02,0x00,0x00,0x91,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x90,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x97,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x97,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xde,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0x90,0x02,0x00,0x00,0xd0,0x02,0x00,0x00, -0x9a,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0x9d,0x02,0x00,0x00,0xde,0x02,0x00,0x00,0x62,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x99,0x02,0x00,0x00,0x9a,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x9d,0x02,0x00,0x00, -0x98,0x02,0x00,0x00,0x99,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x98,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa0,0x02,0x00,0x00,0x85,0x02,0x00,0x00,0xde,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xa3,0x02,0x00,0x00, -0xa0,0x02,0x00,0x00,0x36,0x00,0x00,0x00,0xf7,0x00,0x03,0x00, -0xa5,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xa3,0x02,0x00,0x00,0xa4,0x02,0x00,0x00,0xa5,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xa4,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa8,0x02,0x00,0x00,0x8d,0x02,0x00,0x00, -0xdc,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0xa9,0x02,0x00,0x00,0x12,0x00,0x00,0x00,0xd0,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xaa,0x02,0x00,0x00, -0xa9,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0xab,0x02,0x00,0x00,0xa8,0x02,0x00,0x00,0xaa,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0xa5,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xa5,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0xc2,0x00,0x00,0x00, -0xac,0x02,0x00,0x00,0xa3,0x02,0x00,0x00,0x98,0x02,0x00,0x00, -0xab,0x02,0x00,0x00,0xa4,0x02,0x00,0x00,0xf7,0x00,0x03,0x00, -0xae,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xac,0x02,0x00,0x00,0xad,0x02,0x00,0x00,0xae,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xad,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xb6,0x02,0x00,0x00,0x8d,0x02,0x00,0x00, -0xdc,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0xb8,0x02,0x00,0x00,0x12,0x00,0x00,0x00,0xb7,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb9,0x02,0x00,0x00, -0xb8,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xba,0x02,0x00,0x00,0xb6,0x02,0x00,0x00,0xb9,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbb,0x02,0x00,0x00, -0x6d,0x02,0x00,0x00,0xba,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xbd,0x02,0x00,0x00,0xbb,0x02,0x00,0x00, -0x85,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xbf,0x02,0x00,0x00,0xbd,0x02,0x00,0x00,0xde,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc1,0x02,0x00,0x00, -0xd9,0x02,0x00,0x00,0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xc3,0x02,0x00,0x00,0xc1,0x02,0x00,0x00, -0xdc,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xc5,0x02,0x00,0x00,0xc3,0x02,0x00,0x00,0xc4,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc7,0x02,0x00,0x00, -0xda,0x02,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xc8,0x02,0x00,0x00,0xc5,0x02,0x00,0x00, -0xc7,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xca,0x02,0x00,0x00,0xc8,0x02,0x00,0x00,0xde,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,0xcb,0x02,0x00,0x00, -0xca,0x00,0x00,0x00,0xca,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0xcc,0x02,0x00,0x00,0xcb,0x02,0x00,0x00, -0x41,0x00,0x06,0x00,0xcd,0x02,0x00,0x00,0xce,0x02,0x00,0x00, -0xb2,0x02,0x00,0x00,0x34,0x00,0x00,0x00,0xbf,0x02,0x00,0x00, -0x3e,0x00,0x03,0x00,0xce,0x02,0x00,0x00,0xcc,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0xae,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xae,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x9a,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x9a,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xd0,0x02,0x00,0x00,0xde,0x02,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x97,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x99,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x92,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x92,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd2,0x02,0x00,0x00, -0xdc,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x8f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x91,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x7a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x7a,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd4,0x02,0x00,0x00,0xda,0x02,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x77,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x79,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x72,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x72,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xd6,0x02,0x00,0x00,0xd9,0x02,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x6f,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x71,0x02,0x00,0x00,0xfd,0x00,0x01,0x00, -0x38,0x00,0x01,0x00, -}; -const uint64_t matmul_f16_aligned_len = 11200; - -unsigned char matmul_f16_aligned_fp32_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0xd9,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00, -0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c, -0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00, -0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x0f,0x00,0x0f,0x00,0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x4c,0x00,0x00,0x00, -0xfd,0x00,0x00,0x00,0x04,0x01,0x00,0x00,0x4a,0x01,0x00,0x00, -0x50,0x01,0x00,0x00,0x39,0x02,0x00,0x00,0x82,0x02,0x00,0x00, -0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x0a,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x0d,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x10,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x37,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x3d,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x4c,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x4f,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x53,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x60,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x62,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x6c,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xa7,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xb9,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xbc,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x01,0x01,0x00,0x00, -0x06,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x02,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x04,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x04,0x01,0x00,0x00,0x21,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x22,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x23,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x4d,0x01,0x00,0x00,0x06,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x4e,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x4e,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x4e,0x01,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x50,0x01,0x00,0x00, -0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x50,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x39,0x02,0x00,0x00,0x0b,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x7f,0x02,0x00,0x00, -0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0x80,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x80,0x02,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x80,0x02,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x82,0x02,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x82,0x02,0x00,0x00,0x21,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00, -0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x1e,0x00,0x10,0x00,0x10,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x11,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x11,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x15,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0x0a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x27,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x3e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x61,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x63,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x61,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x67,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x61,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x6e,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x6d,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x73,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x6d,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x78,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x6d,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x7d,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x6d,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x81,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x97,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0xa2,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0xa9,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xb8,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xb9,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x4f,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbd,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0xbc,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbe,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbf,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0xbe,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc0,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0xbf,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc1,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0xbc,0x00,0x00,0x00, -0x14,0x00,0x02,0x00,0xc2,0x00,0x00,0x00,0x16,0x00,0x03,0x00, -0xc4,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xc5,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xc6,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x1c,0x00,0x04,0x00, -0xc8,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0xc7,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0xc9,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0xc8,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0xcc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0xcd,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xc4,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0xd0,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xf4,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xf9,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xfa,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0xf9,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xfb,0x00,0x00,0x00, -0xc4,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0xfc,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0xfb,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0xfc,0x00,0x00,0x00,0xfd,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0xff,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x00,0x01,0x00,0x00, -0xff,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x1d,0x00,0x03,0x00, -0x01,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x1e,0x00,0x03,0x00, -0x02,0x01,0x00,0x00,0x01,0x01,0x00,0x00,0x20,0x00,0x04,0x00, -0x03,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x02,0x01,0x00,0x00, -0x3b,0x00,0x04,0x00,0x03,0x01,0x00,0x00,0x04,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x06,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x0a,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0xc4,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x1b,0x01,0x00,0x00, -0x03,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x22,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00, -0x09,0x00,0x00,0x00,0x23,0x01,0x00,0x00,0x22,0x01,0x00,0x00, -0x39,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x24,0x01,0x00,0x00,0x51,0x00,0x00,0x00, -0x23,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x25,0x01,0x00,0x00,0x84,0x00,0x00,0x00, -0x24,0x01,0x00,0x00,0x6d,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x26,0x01,0x00,0x00,0x86,0x00,0x00,0x00, -0x25,0x01,0x00,0x00,0x6c,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x41,0x01,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x46,0x01,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x47,0x01,0x00,0x00,0x84,0x00,0x00,0x00, -0xa7,0x00,0x00,0x00,0x46,0x01,0x00,0x00,0x1c,0x00,0x04,0x00, -0x48,0x01,0x00,0x00,0xc4,0x00,0x00,0x00,0x47,0x01,0x00,0x00, -0x20,0x00,0x04,0x00,0x49,0x01,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x49,0x01,0x00,0x00, -0x4a,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x1d,0x00,0x03,0x00, -0x4d,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x1e,0x00,0x03,0x00, -0x4e,0x01,0x00,0x00,0x4d,0x01,0x00,0x00,0x20,0x00,0x04,0x00, -0x4f,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x4e,0x01,0x00,0x00, -0x3b,0x00,0x04,0x00,0x4f,0x01,0x00,0x00,0x50,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x6b,0x01,0x00,0x00,0x51,0x00,0x00,0x00,0x23,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x6c,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x6b,0x01,0x00,0x00, -0x6d,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x6d,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x6c,0x01,0x00,0x00, -0x6c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x70,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x71,0x01,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x74,0x01,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x8f,0x01,0x00,0x00,0x84,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x1c,0x00,0x04,0x00, -0x90,0x01,0x00,0x00,0xc4,0x00,0x00,0x00,0x8f,0x01,0x00,0x00, -0x20,0x00,0x04,0x00,0x91,0x01,0x00,0x00,0x07,0x00,0x00,0x00, -0x90,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xa1,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xbc,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0xbf,0x00,0x00,0x00, -0xbc,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xbd,0x01,0x00,0x00, -0xc4,0x00,0x00,0x00,0xbc,0x01,0x00,0x00,0x20,0x00,0x04,0x00, -0xbe,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0xbd,0x01,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc7,0x01,0x00,0x00, -0x86,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0xbf,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xcf,0x01,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xfe,0x01,0x00,0x00, -0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x31,0x02,0x00,0x00, -0x0d,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x39,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x1d,0x00,0x03,0x00, -0x7f,0x02,0x00,0x00,0xc4,0x00,0x00,0x00,0x1e,0x00,0x03,0x00, -0x80,0x02,0x00,0x00,0x7f,0x02,0x00,0x00,0x20,0x00,0x04,0x00, -0x81,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x80,0x02,0x00,0x00, -0x3b,0x00,0x04,0x00,0x81,0x02,0x00,0x00,0x82,0x02,0x00,0x00, -0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x87,0x02,0x00,0x00,0x05,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x94,0x02,0x00,0x00,0x84,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x9d,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0xc4,0x00,0x00,0x00, -0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x05,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xc9,0x00,0x00,0x00, -0xca,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x91,0x01,0x00,0x00,0x92,0x01,0x00,0x00,0x07,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0xbe,0x01,0x00,0x00,0xbf,0x01,0x00,0x00, -0x07,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x16,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x17,0x00,0x00,0x00, -0x16,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x17,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1e,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x21,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x28,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x27,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x29,0x00,0x00,0x00, -0x28,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x2a,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x29,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x2e,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00, -0x24,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x30,0x00,0x00,0x00, -0x2a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x35,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x36,0x00,0x00,0x00, -0x35,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x38,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00, -0x38,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x3a,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x3f,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x3e,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x3f,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x42,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x3b,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x47,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x4a,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x4c,0x00,0x00,0x00, -0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x4f,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x55,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x54,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00, -0x50,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x4f,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x64,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,0x63,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x68,0x00,0x00,0x00, -0x5d,0x00,0x00,0x00,0x67,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x6e,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x74,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x73,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x79,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x7d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x82,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x81,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x83,0x00,0x00,0x00, -0x82,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0x83,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x87,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x87,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8a,0x00,0x00,0x00, -0x47,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x8a,0x00,0x00,0x00, -0x83,0x00,0x00,0x00,0x0c,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x8e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x26,0x00,0x00,0x00, -0x88,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x91,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x93,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x93,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x96,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x98,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x98,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9a,0x00,0x00,0x00, -0x96,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x94,0x00,0x00,0x00, -0x9a,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9d,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9e,0x00,0x00,0x00, -0x9d,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0xa2,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xa4,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0xa4,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa8,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0xa7,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0xaa,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0xaa,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00, -0xa8,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xad,0x00,0x00,0x00,0xa5,0x00,0x00,0x00, -0xac,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xaf,0x00,0x00,0x00,0xad,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb0,0x00,0x00,0x00, -0xaf,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xb2,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb2,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xa7,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0xd1,0x00,0x00,0x00, -0xb3,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0xc3,0x00,0x00,0x00,0xa7,0x02,0x00,0x00,0xc1,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xb4,0x00,0x00,0x00,0xb3,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xc3,0x00,0x00,0x00, -0xb3,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xb3,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00, -0xce,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0xa7,0x02,0x00,0x00, -0x3e,0x00,0x03,0x00,0xce,0x00,0x00,0x00,0xcc,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd1,0x00,0x00,0x00, -0xa7,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xb2,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb4,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xd4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xd4,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xc0,0x02,0x00,0x00,0xb0,0x00,0x00,0x00,0xb4,0x00,0x00,0x00, -0x76,0x01,0x00,0x00,0xd7,0x00,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xbc,0x02,0x00,0x00,0x9e,0x00,0x00,0x00, -0xb4,0x00,0x00,0x00,0x73,0x01,0x00,0x00,0xd7,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xa8,0x02,0x00,0x00, -0x84,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0x21,0x02,0x00,0x00, -0xd7,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0xdb,0x00,0x00,0x00,0xa8,0x02,0x00,0x00,0x8e,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xd6,0x00,0x00,0x00,0xd7,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xdb,0x00,0x00,0x00, -0xd5,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xd5,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xdd,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xb8,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0xd5,0x00,0x00,0x00,0x28,0x01,0x00,0x00,0xde,0x00,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xe3,0x00,0x00,0x00, -0xb8,0x02,0x00,0x00,0x37,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xdf,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xe3,0x00,0x00,0x00,0xde,0x00,0x00,0x00, -0xdf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe8,0x00,0x00,0x00, -0x74,0x00,0x00,0x00,0xb8,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,0xe8,0x00,0x00,0x00, -0x99,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xec,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,0x6d,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xed,0x00,0x00,0x00, -0xbc,0x02,0x00,0x00,0xec,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xef,0x00,0x00,0x00,0xed,0x00,0x00,0x00, -0x6f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xf5,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0xf4,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf7,0x00,0x00,0x00, -0x6f,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,0xf5,0x00,0x00,0x00, -0xf7,0x00,0x00,0x00,0x41,0x00,0x07,0x00,0x06,0x01,0x00,0x00, -0x07,0x01,0x00,0x00,0x04,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0xef,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0xff,0x00,0x00,0x00,0x08,0x01,0x00,0x00,0x07,0x01,0x00,0x00, -0x73,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x09,0x01,0x00,0x00, -0x08,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x0a,0x01,0x00,0x00, -0x0b,0x01,0x00,0x00,0xfd,0x00,0x00,0x00,0xf8,0x00,0x00,0x00, -0x3e,0x00,0x03,0x00,0x0b,0x01,0x00,0x00,0x09,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0d,0x01,0x00,0x00, -0xf8,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x41,0x00,0x07,0x00, -0x06,0x01,0x00,0x00,0x0f,0x01,0x00,0x00,0x04,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xef,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0xff,0x00,0x00,0x00,0x10,0x01,0x00,0x00, -0x0f,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0x11,0x01,0x00,0x00,0x10,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x0a,0x01,0x00,0x00,0x12,0x01,0x00,0x00,0xfd,0x00,0x00,0x00, -0x0d,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x12,0x01,0x00,0x00, -0x11,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x14,0x01,0x00,0x00,0xf8,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x41,0x00,0x07,0x00,0x06,0x01,0x00,0x00,0x16,0x01,0x00,0x00, -0x04,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0xef,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xff,0x00,0x00,0x00, -0x17,0x01,0x00,0x00,0x16,0x01,0x00,0x00,0x73,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0x18,0x01,0x00,0x00,0x17,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x0a,0x01,0x00,0x00,0x19,0x01,0x00,0x00, -0xfd,0x00,0x00,0x00,0x14,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0x19,0x01,0x00,0x00,0x18,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x1c,0x01,0x00,0x00,0xf8,0x00,0x00,0x00, -0x1b,0x01,0x00,0x00,0x41,0x00,0x07,0x00,0x06,0x01,0x00,0x00, -0x1e,0x01,0x00,0x00,0x04,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0xef,0x00,0x00,0x00,0x1b,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0xff,0x00,0x00,0x00,0x1f,0x01,0x00,0x00,0x1e,0x01,0x00,0x00, -0x73,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x20,0x01,0x00,0x00, -0x1f,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x0a,0x01,0x00,0x00, -0x21,0x01,0x00,0x00,0xfd,0x00,0x00,0x00,0x1c,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0x21,0x01,0x00,0x00,0x20,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x28,0x01,0x00,0x00, -0xb8,0x02,0x00,0x00,0x26,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x2a,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x2a,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xb9,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0xdf,0x00,0x00,0x00, -0x6f,0x01,0x00,0x00,0x2b,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0x30,0x01,0x00,0x00,0xb9,0x02,0x00,0x00, -0xa7,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x2c,0x01,0x00,0x00, -0x2b,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x30,0x01,0x00,0x00,0x2b,0x01,0x00,0x00,0x2c,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x2b,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x35,0x01,0x00,0x00,0x7e,0x00,0x00,0x00, -0xb9,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x38,0x01,0x00,0x00,0x35,0x01,0x00,0x00,0xab,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x39,0x01,0x00,0x00, -0x38,0x01,0x00,0x00,0x6d,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3a,0x01,0x00,0x00,0xc0,0x02,0x00,0x00, -0x39,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x3c,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,0x79,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x42,0x01,0x00,0x00, -0x35,0x01,0x00,0x00,0x41,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x44,0x01,0x00,0x00,0x79,0x00,0x00,0x00, -0x6d,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x45,0x01,0x00,0x00,0x42,0x01,0x00,0x00,0x44,0x01,0x00,0x00, -0x41,0x00,0x07,0x00,0x06,0x01,0x00,0x00,0x52,0x01,0x00,0x00, -0x50,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0x3c,0x01,0x00,0x00, -0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xff,0x00,0x00,0x00, -0x53,0x01,0x00,0x00,0x52,0x01,0x00,0x00,0x73,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0x54,0x01,0x00,0x00,0x53,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x0a,0x01,0x00,0x00,0x55,0x01,0x00,0x00, -0x4a,0x01,0x00,0x00,0x45,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0x55,0x01,0x00,0x00,0x54,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x57,0x01,0x00,0x00,0x45,0x01,0x00,0x00, -0x39,0x00,0x00,0x00,0x41,0x00,0x07,0x00,0x06,0x01,0x00,0x00, -0x59,0x01,0x00,0x00,0x50,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0x3c,0x01,0x00,0x00,0x39,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0xff,0x00,0x00,0x00,0x5a,0x01,0x00,0x00,0x59,0x01,0x00,0x00, -0x73,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x5b,0x01,0x00,0x00, -0x5a,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x0a,0x01,0x00,0x00, -0x5c,0x01,0x00,0x00,0x4a,0x01,0x00,0x00,0x57,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0x5c,0x01,0x00,0x00,0x5b,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5e,0x01,0x00,0x00, -0x45,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x41,0x00,0x07,0x00, -0x06,0x01,0x00,0x00,0x60,0x01,0x00,0x00,0x50,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0x3c,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0xff,0x00,0x00,0x00,0x61,0x01,0x00,0x00, -0x60,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0x62,0x01,0x00,0x00,0x61,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x0a,0x01,0x00,0x00,0x63,0x01,0x00,0x00,0x4a,0x01,0x00,0x00, -0x5e,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x63,0x01,0x00,0x00, -0x62,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x65,0x01,0x00,0x00,0x45,0x01,0x00,0x00,0x1b,0x01,0x00,0x00, -0x41,0x00,0x07,0x00,0x06,0x01,0x00,0x00,0x67,0x01,0x00,0x00, -0x50,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0x3c,0x01,0x00,0x00, -0x1b,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xff,0x00,0x00,0x00, -0x68,0x01,0x00,0x00,0x67,0x01,0x00,0x00,0x73,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0x69,0x01,0x00,0x00,0x68,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x0a,0x01,0x00,0x00,0x6a,0x01,0x00,0x00, -0x4a,0x01,0x00,0x00,0x65,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0x6a,0x01,0x00,0x00,0x69,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x6f,0x01,0x00,0x00,0xb9,0x02,0x00,0x00, -0x6d,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x2a,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x2c,0x01,0x00,0x00,0xe0,0x00,0x04,0x00, -0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x70,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x73,0x01,0x00,0x00, -0xbc,0x02,0x00,0x00,0x71,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x76,0x01,0x00,0x00,0xc0,0x02,0x00,0x00, -0x74,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x78,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x78,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xc2,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0x2c,0x01,0x00,0x00,0x1f,0x02,0x00,0x00,0x7b,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x7e,0x01,0x00,0x00, -0xc2,0x02,0x00,0x00,0x6c,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x7a,0x01,0x00,0x00,0x7b,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x7e,0x01,0x00,0x00,0x79,0x01,0x00,0x00, -0x7a,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x79,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0x80,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x80,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xc6,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0x79,0x01,0x00,0x00, -0xab,0x01,0x00,0x00,0x83,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0x86,0x01,0x00,0x00,0xc6,0x02,0x00,0x00, -0x60,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x82,0x01,0x00,0x00, -0x83,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x86,0x01,0x00,0x00,0x81,0x01,0x00,0x00,0x82,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x81,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0x88,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x88,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xd8,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0x81,0x01,0x00,0x00,0xa9,0x01,0x00,0x00, -0x89,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0x8e,0x01,0x00,0x00,0xd8,0x02,0x00,0x00,0x62,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x8a,0x01,0x00,0x00,0x89,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x8e,0x01,0x00,0x00, -0x89,0x01,0x00,0x00,0x8a,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x89,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x94,0x01,0x00,0x00,0xc6,0x02,0x00,0x00,0x62,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x96,0x01,0x00,0x00, -0x94,0x01,0x00,0x00,0xd8,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x98,0x01,0x00,0x00,0x55,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9a,0x01,0x00,0x00,0xc6,0x02,0x00,0x00,0x61,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9b,0x01,0x00,0x00, -0x98,0x01,0x00,0x00,0x9a,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9d,0x01,0x00,0x00,0x64,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9e,0x01,0x00,0x00,0x9b,0x01,0x00,0x00,0x9d,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa0,0x01,0x00,0x00, -0x9e,0x01,0x00,0x00,0xd8,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa2,0x01,0x00,0x00,0xa0,0x01,0x00,0x00, -0xa1,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa4,0x01,0x00,0x00,0xa2,0x01,0x00,0x00,0xc2,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0x0a,0x01,0x00,0x00,0xa5,0x01,0x00,0x00, -0xfd,0x00,0x00,0x00,0xa4,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0xa6,0x01,0x00,0x00,0xa5,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,0xa7,0x01,0x00,0x00, -0x92,0x01,0x00,0x00,0x96,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0xa7,0x01,0x00,0x00,0xa6,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa9,0x01,0x00,0x00,0xd8,0x02,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x88,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x8a,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0x83,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x83,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xab,0x01,0x00,0x00, -0xc6,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x80,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x82,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xad,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xad,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xc7,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0x82,0x01,0x00,0x00, -0xd9,0x01,0x00,0x00,0xb0,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0xb3,0x01,0x00,0x00,0xc7,0x02,0x00,0x00, -0xbf,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xaf,0x01,0x00,0x00, -0xb0,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xb3,0x01,0x00,0x00,0xae,0x01,0x00,0x00,0xaf,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xae,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xb5,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xb5,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xd5,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0xae,0x01,0x00,0x00,0xd7,0x01,0x00,0x00, -0xb6,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0xbb,0x01,0x00,0x00,0xd5,0x02,0x00,0x00,0xbc,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xb7,0x01,0x00,0x00,0xb6,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xbb,0x01,0x00,0x00, -0xb6,0x01,0x00,0x00,0xb7,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xb6,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xc1,0x01,0x00,0x00,0xc7,0x02,0x00,0x00,0xbc,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc3,0x01,0x00,0x00, -0xc1,0x01,0x00,0x00,0xd5,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xc5,0x01,0x00,0x00,0x59,0x00,0x00,0x00, -0xb9,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xc8,0x01,0x00,0x00,0xc7,0x02,0x00,0x00,0xc7,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc9,0x01,0x00,0x00, -0xc5,0x01,0x00,0x00,0xc8,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xcb,0x01,0x00,0x00,0x68,0x00,0x00,0x00, -0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xcc,0x01,0x00,0x00,0xc9,0x01,0x00,0x00,0xcb,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xce,0x01,0x00,0x00, -0xcc,0x01,0x00,0x00,0xd5,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xd0,0x01,0x00,0x00,0xce,0x01,0x00,0x00, -0xcf,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd2,0x01,0x00,0x00,0xd0,0x01,0x00,0x00,0xc2,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0x0a,0x01,0x00,0x00,0xd3,0x01,0x00,0x00, -0x4a,0x01,0x00,0x00,0xd2,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0xd4,0x01,0x00,0x00,0xd3,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,0xd5,0x01,0x00,0x00, -0xbf,0x01,0x00,0x00,0xc3,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0xd5,0x01,0x00,0x00,0xd4,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xd7,0x01,0x00,0x00,0xd5,0x02,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb5,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xb7,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xb0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xb0,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd9,0x01,0x00,0x00, -0xc7,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xad,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xaf,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xdb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xdb,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xc8,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0xaf,0x01,0x00,0x00, -0x1d,0x02,0x00,0x00,0xde,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0xe1,0x01,0x00,0x00,0xc8,0x02,0x00,0x00, -0xbf,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xdd,0x01,0x00,0x00, -0xde,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xe1,0x01,0x00,0x00,0xdc,0x01,0x00,0x00,0xdd,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xdc,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xe3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xe3,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xcc,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0xdc,0x01,0x00,0x00,0x1b,0x02,0x00,0x00, -0xe6,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0xe9,0x01,0x00,0x00,0xcc,0x02,0x00,0x00,0x60,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xe5,0x01,0x00,0x00,0xe6,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xe9,0x01,0x00,0x00, -0xe4,0x01,0x00,0x00,0xe5,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xe4,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xeb,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xeb,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xce,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0xe4,0x01,0x00,0x00,0x19,0x02,0x00,0x00,0xee,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xf1,0x01,0x00,0x00, -0xce,0x02,0x00,0x00,0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xed,0x01,0x00,0x00,0xee,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xf1,0x01,0x00,0x00,0xec,0x01,0x00,0x00, -0xed,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xec,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xf3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xf3,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xd0,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0xec,0x01,0x00,0x00, -0x17,0x02,0x00,0x00,0xf4,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0xf9,0x01,0x00,0x00,0xd0,0x02,0x00,0x00, -0x62,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xf5,0x01,0x00,0x00, -0xf4,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xf9,0x01,0x00,0x00,0xf4,0x01,0x00,0x00,0xf5,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xf4,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xfb,0x01,0x00,0x00,0xc8,0x02,0x00,0x00, -0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xfd,0x01,0x00,0x00,0xfb,0x01,0x00,0x00,0xce,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xff,0x01,0x00,0x00, -0xfd,0x01,0x00,0x00,0xfe,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x01,0x02,0x00,0x00,0xcc,0x02,0x00,0x00, -0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x02,0x02,0x00,0x00,0xff,0x01,0x00,0x00,0x01,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x04,0x02,0x00,0x00, -0x02,0x02,0x00,0x00,0xd0,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x08,0x02,0x00,0x00,0x01,0x02,0x00,0x00, -0xd0,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00, -0x09,0x02,0x00,0x00,0x92,0x01,0x00,0x00,0x08,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x0a,0x02,0x00,0x00, -0x09,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00, -0x0f,0x02,0x00,0x00,0xbf,0x01,0x00,0x00,0xfd,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x10,0x02,0x00,0x00, -0x0f,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00, -0x12,0x02,0x00,0x00,0xca,0x00,0x00,0x00,0x04,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x13,0x02,0x00,0x00, -0x12,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,0xc4,0x00,0x00,0x00, -0x14,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x0a,0x02,0x00,0x00,0x10,0x02,0x00,0x00,0x13,0x02,0x00,0x00, -0x3e,0x00,0x03,0x00,0x12,0x02,0x00,0x00,0x14,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x17,0x02,0x00,0x00, -0xd0,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xf3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xf5,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xee,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xee,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x19,0x02,0x00,0x00,0xce,0x02,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xeb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xed,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xe6,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xe6,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x1b,0x02,0x00,0x00,0xcc,0x02,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xe3,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xe5,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xde,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xde,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1d,0x02,0x00,0x00, -0xc8,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xdb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xdd,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0x7b,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x7b,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x1f,0x02,0x00,0x00,0xc2,0x02,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x78,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x7a,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x70,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xd7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd7,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x21,0x02,0x00,0x00, -0xa8,0x02,0x00,0x00,0x6c,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xd4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd6,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x26,0x02,0x00,0x00, -0x55,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x27,0x02,0x00,0x00,0x96,0x00,0x00,0x00, -0x26,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x2c,0x02,0x00,0x00,0x59,0x00,0x00,0x00,0xb9,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2d,0x02,0x00,0x00, -0xa8,0x00,0x00,0x00,0x2c,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x32,0x02,0x00,0x00,0x12,0x00,0x00,0x00, -0x31,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x33,0x02,0x00,0x00,0x32,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x34,0x02,0x00,0x00,0x0f,0x00,0x00,0x00, -0x33,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x38,0x02,0x00,0x00,0x47,0x00,0x00,0x00,0x33,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x3a,0x02,0x00,0x00, -0x39,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x3b,0x02,0x00,0x00,0x3a,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3c,0x02,0x00,0x00, -0x38,0x02,0x00,0x00,0x3b,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3d,0x02,0x00,0x00,0x34,0x02,0x00,0x00, -0x3c,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x3f,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x3f,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xa9,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0xd6,0x00,0x00,0x00,0xa6,0x02,0x00,0x00,0x42,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x45,0x02,0x00,0x00, -0xa9,0x02,0x00,0x00,0xbf,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x41,0x02,0x00,0x00,0x42,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x45,0x02,0x00,0x00,0x40,0x02,0x00,0x00, -0x41,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x40,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x47,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x47,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xaa,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0x40,0x02,0x00,0x00, -0xa4,0x02,0x00,0x00,0x4a,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0x4d,0x02,0x00,0x00,0xaa,0x02,0x00,0x00, -0x60,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x49,0x02,0x00,0x00, -0x4a,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x4d,0x02,0x00,0x00,0x48,0x02,0x00,0x00,0x49,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x48,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x51,0x02,0x00,0x00,0xaa,0x02,0x00,0x00, -0x61,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x52,0x02,0x00,0x00,0x27,0x02,0x00,0x00,0x51,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x54,0x02,0x00,0x00, -0x64,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x55,0x02,0x00,0x00,0x52,0x02,0x00,0x00, -0x54,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x59,0x02,0x00,0x00,0xa9,0x02,0x00,0x00,0xc7,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5a,0x02,0x00,0x00, -0x2d,0x02,0x00,0x00,0x59,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x5c,0x02,0x00,0x00,0x68,0x00,0x00,0x00, -0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x5d,0x02,0x00,0x00,0x5a,0x02,0x00,0x00,0x5c,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x5f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x5f,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xac,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0x48,0x02,0x00,0x00, -0xa2,0x02,0x00,0x00,0x62,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0x65,0x02,0x00,0x00,0xac,0x02,0x00,0x00, -0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x61,0x02,0x00,0x00, -0x62,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x65,0x02,0x00,0x00,0x60,0x02,0x00,0x00,0x61,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x60,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x67,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x67,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xae,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0x60,0x02,0x00,0x00,0xa0,0x02,0x00,0x00, -0x6a,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0x6d,0x02,0x00,0x00,0xae,0x02,0x00,0x00,0x62,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x69,0x02,0x00,0x00,0x6a,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x6d,0x02,0x00,0x00, -0x68,0x02,0x00,0x00,0x69,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x68,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x70,0x02,0x00,0x00,0x55,0x02,0x00,0x00,0xae,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x73,0x02,0x00,0x00, -0x70,0x02,0x00,0x00,0x36,0x00,0x00,0x00,0xf7,0x00,0x03,0x00, -0x75,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x73,0x02,0x00,0x00,0x74,0x02,0x00,0x00,0x75,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x74,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x78,0x02,0x00,0x00,0x5d,0x02,0x00,0x00, -0xac,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x79,0x02,0x00,0x00,0x12,0x00,0x00,0x00,0xd0,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x7a,0x02,0x00,0x00, -0x79,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0x7b,0x02,0x00,0x00,0x78,0x02,0x00,0x00,0x7a,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x75,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x75,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0xc2,0x00,0x00,0x00, -0x7c,0x02,0x00,0x00,0x73,0x02,0x00,0x00,0x68,0x02,0x00,0x00, -0x7b,0x02,0x00,0x00,0x74,0x02,0x00,0x00,0xf7,0x00,0x03,0x00, -0x7e,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x7c,0x02,0x00,0x00,0x7d,0x02,0x00,0x00,0x7e,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x7d,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x86,0x02,0x00,0x00,0x5d,0x02,0x00,0x00, -0xac,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x88,0x02,0x00,0x00,0x12,0x00,0x00,0x00,0x87,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x89,0x02,0x00,0x00, -0x88,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x8a,0x02,0x00,0x00,0x86,0x02,0x00,0x00,0x89,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8b,0x02,0x00,0x00, -0x3d,0x02,0x00,0x00,0x8a,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x8d,0x02,0x00,0x00,0x8b,0x02,0x00,0x00, -0x55,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x8f,0x02,0x00,0x00,0x8d,0x02,0x00,0x00,0xae,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x91,0x02,0x00,0x00, -0xa9,0x02,0x00,0x00,0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x93,0x02,0x00,0x00,0x91,0x02,0x00,0x00, -0xac,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x95,0x02,0x00,0x00,0x93,0x02,0x00,0x00,0x94,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x97,0x02,0x00,0x00, -0xaa,0x02,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x98,0x02,0x00,0x00,0x95,0x02,0x00,0x00, -0x97,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9a,0x02,0x00,0x00,0x98,0x02,0x00,0x00,0xae,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,0x9b,0x02,0x00,0x00, -0xca,0x00,0x00,0x00,0x9a,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0x9c,0x02,0x00,0x00,0x9b,0x02,0x00,0x00, -0x41,0x00,0x06,0x00,0x9d,0x02,0x00,0x00,0x9e,0x02,0x00,0x00, -0x82,0x02,0x00,0x00,0x34,0x00,0x00,0x00,0x8f,0x02,0x00,0x00, -0x3e,0x00,0x03,0x00,0x9e,0x02,0x00,0x00,0x9c,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x7e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x7e,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x6a,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x6a,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa0,0x02,0x00,0x00,0xae,0x02,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x67,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x69,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x62,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x62,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa2,0x02,0x00,0x00, -0xac,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x5f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x61,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x4a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x4a,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa4,0x02,0x00,0x00,0xaa,0x02,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x47,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x49,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x42,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x42,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa6,0x02,0x00,0x00,0xa9,0x02,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x3f,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x41,0x02,0x00,0x00,0xfd,0x00,0x01,0x00, -0x38,0x00,0x01,0x00, -}; -const uint64_t matmul_f16_aligned_fp32_len = 10288; - -unsigned char matmul_f16_f32_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0xda,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x09,0x00,0x00,0x00, -0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,0x0b,0x00,0x06,0x00, -0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64, -0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00, -0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0f,0x00,0x0f,0x00, -0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e, -0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x3d,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0xfb,0x00,0x00,0x00, -0x06,0x01,0x00,0x00,0x46,0x01,0x00,0x00,0x51,0x01,0x00,0x00, -0x3b,0x02,0x00,0x00,0x84,0x02,0x00,0x00,0x10,0x00,0x06,0x00, -0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x34,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x10,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x37,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x3d,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x4c,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x4f,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x53,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x60,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x62,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x6c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xa6,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xb8,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xbb,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x03,0x01,0x00,0x00,0x06,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x04,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x04,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x04,0x01,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x06,0x01,0x00,0x00, -0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x06,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x20,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x21,0x01,0x00,0x00, -0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x4e,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x04,0x00,0x4f,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x4f,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0x4f,0x01,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x51,0x01,0x00,0x00,0x22,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x51,0x01,0x00,0x00, -0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x3b,0x02,0x00,0x00,0x0b,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x81,0x02,0x00,0x00,0x06,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x82,0x02,0x00,0x00, -0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x82,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x82,0x02,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x84,0x02,0x00,0x00, -0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x84,0x02,0x00,0x00,0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00, -0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x1e,0x00,0x10,0x00, -0x10,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x11,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x11,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x15,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x0a,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x27,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x2d,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x3e,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x4c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x54,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x58,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x63,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x67,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x6d,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x72,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x77,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x7c,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x80,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x90,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x96,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa6,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0xa8,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0xb8,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xba,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xbb,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xbc,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xba,0x00,0x00,0x00, -0xbb,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xbd,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xbc,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xbe,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0xb9,0x00,0x00,0x00, -0xbd,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xbf,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xb7,0x00,0x00,0x00, -0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xc0,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xbf,0x00,0x00,0x00, -0xbb,0x00,0x00,0x00,0x14,0x00,0x02,0x00,0xc1,0x00,0x00,0x00, -0x16,0x00,0x03,0x00,0xc3,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc4,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0xbe,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0xbb,0x00,0x00,0x00, -0x1c,0x00,0x04,0x00,0xc7,0x00,0x00,0x00,0xc3,0x00,0x00,0x00, -0xc6,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xc8,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0xc3,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0xcc,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0xc3,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0xcf,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x16,0x00,0x03,0x00, -0xf6,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,0x1c,0x00,0x04,0x00, -0xf9,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,0xf8,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0xfa,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0xf9,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xfa,0x00,0x00,0x00, -0xfb,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x1d,0x00,0x03,0x00, -0x03,0x01,0x00,0x00,0xf6,0x00,0x00,0x00,0x1e,0x00,0x03,0x00, -0x04,0x01,0x00,0x00,0x03,0x01,0x00,0x00,0x20,0x00,0x04,0x00, -0x05,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x04,0x01,0x00,0x00, -0x3b,0x00,0x04,0x00,0x05,0x01,0x00,0x00,0x06,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x11,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x14,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0xf6,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x1a,0x01,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0xf6,0x00,0x00,0x00,0x1e,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x20,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00, -0x09,0x00,0x00,0x00,0x21,0x01,0x00,0x00,0x20,0x01,0x00,0x00, -0x39,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x22,0x01,0x00,0x00,0x51,0x00,0x00,0x00, -0x21,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x23,0x01,0x00,0x00,0x84,0x00,0x00,0x00, -0x22,0x01,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x24,0x01,0x00,0x00,0x86,0x00,0x00,0x00, -0x23,0x01,0x00,0x00,0x6c,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x42,0x01,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x43,0x01,0x00,0x00,0x84,0x00,0x00,0x00, -0xa6,0x00,0x00,0x00,0x42,0x01,0x00,0x00,0x1c,0x00,0x04,0x00, -0x44,0x01,0x00,0x00,0xf6,0x00,0x00,0x00,0x43,0x01,0x00,0x00, -0x20,0x00,0x04,0x00,0x45,0x01,0x00,0x00,0x04,0x00,0x00,0x00, -0x44,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x45,0x01,0x00,0x00, -0x46,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x4a,0x01,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x1d,0x00,0x03,0x00, -0x4e,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,0x1e,0x00,0x03,0x00, -0x4f,0x01,0x00,0x00,0x4e,0x01,0x00,0x00,0x20,0x00,0x04,0x00, -0x50,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x4f,0x01,0x00,0x00, -0x3b,0x00,0x04,0x00,0x50,0x01,0x00,0x00,0x51,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x5c,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x65,0x01,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x6a,0x01,0x00,0x00,0x51,0x00,0x00,0x00, -0x21,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x6b,0x01,0x00,0x00,0x84,0x00,0x00,0x00, -0x6a,0x01,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x6c,0x01,0x00,0x00,0x86,0x00,0x00,0x00, -0x6b,0x01,0x00,0x00,0x6c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x6f,0x01,0x00,0x00,0x08,0x01,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x70,0x01,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x73,0x01,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x8e,0x01,0x00,0x00, -0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x1c,0x00,0x04,0x00,0x8f,0x01,0x00,0x00,0xf6,0x00,0x00,0x00, -0x8e,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x90,0x01,0x00,0x00, -0x07,0x00,0x00,0x00,0x8f,0x01,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xa0,0x01,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0xa6,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0xf6,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbc,0x01,0x00,0x00, -0x84,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0xbb,0x00,0x00,0x00, -0x1c,0x00,0x04,0x00,0xbd,0x01,0x00,0x00,0xf6,0x00,0x00,0x00, -0xbc,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0xbe,0x01,0x00,0x00, -0x07,0x00,0x00,0x00,0xbd,0x01,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xc7,0x01,0x00,0x00,0x86,0x00,0x00,0x00, -0xb8,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xcf,0x01,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xfe,0x01,0x00,0x00,0x84,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x33,0x02,0x00,0x00,0x0d,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x3b,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x81,0x02,0x00,0x00, -0xc3,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x82,0x02,0x00,0x00, -0x81,0x02,0x00,0x00,0x20,0x00,0x04,0x00,0x83,0x02,0x00,0x00, -0x0c,0x00,0x00,0x00,0x82,0x02,0x00,0x00,0x3b,0x00,0x04,0x00, -0x83,0x02,0x00,0x00,0x84,0x02,0x00,0x00,0x0c,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x89,0x02,0x00,0x00, -0x05,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x96,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0xc8,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x90,0x01,0x00,0x00,0x91,0x01,0x00,0x00, -0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xbe,0x01,0x00,0x00, -0xbf,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x17,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x17,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x1e,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x17,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x27,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x29,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x1e,0x00,0x00,0x00, -0x29,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x2e,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x2d,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x2f,0x00,0x00,0x00, -0x2e,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x30,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x2f,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x30,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x34,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x36,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x36,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x3a,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00, -0x3a,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x3b,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x47,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x3b,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x49,0x00,0x00,0x00, -0x3d,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x49,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x4d,0x00,0x00,0x00, -0x4c,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x4d,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x50,0x00,0x00,0x00, -0x54,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x59,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x58,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5d,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x5d,0x00,0x00,0x00, -0x63,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x68,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,0x67,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6e,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x72,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x78,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x77,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7d,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x80,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x82,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x47,0x00,0x00,0x00, -0x82,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x85,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x87,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x89,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8c,0x00,0x00,0x00, -0x89,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x0c,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x26,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x8c,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x91,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x90,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x91,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x93,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0x42,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x97,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x96,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x98,0x00,0x00,0x00, -0x97,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x99,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0x98,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9a,0x00,0x00,0x00, -0x93,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0x9a,0x00,0x00,0x00, -0x83,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9d,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0xa2,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0xa2,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0x4a,0x00,0x00,0x00, -0xa6,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0xa9,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0xa8,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xaa,0x00,0x00,0x00, -0xa9,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xab,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0xaa,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00, -0xa4,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0xac,0x00,0x00,0x00, -0x83,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xaf,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xb1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xb1,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xa8,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0x05,0x00,0x00,0x00, -0xd0,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,0xa8,0x02,0x00,0x00, -0xc0,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xb3,0x00,0x00,0x00, -0xb2,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xc2,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0xb3,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0xcc,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,0xc9,0x00,0x00,0x00, -0xa8,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0xcd,0x00,0x00,0x00, -0xcb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd0,0x00,0x00,0x00,0xa8,0x02,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xb1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xb3,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd3,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xd3,0x00,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xc1,0x02,0x00,0x00,0xaf,0x00,0x00,0x00, -0xb3,0x00,0x00,0x00,0x75,0x01,0x00,0x00,0xd6,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xbd,0x02,0x00,0x00, -0x9d,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0x72,0x01,0x00,0x00, -0xd6,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xa9,0x02,0x00,0x00,0x83,0x00,0x00,0x00,0xb3,0x00,0x00,0x00, -0x23,0x02,0x00,0x00,0xd6,0x00,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0xda,0x00,0x00,0x00,0xa9,0x02,0x00,0x00, -0x8d,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xd5,0x00,0x00,0x00, -0xd6,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xda,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,0xd5,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xd4,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xdc,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdc,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xb9,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,0x26,0x01,0x00,0x00, -0xdf,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0xe2,0x00,0x00,0x00,0xb9,0x02,0x00,0x00,0x37,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xde,0x00,0x00,0x00,0xdf,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xe2,0x00,0x00,0x00, -0xdd,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xdd,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xe6,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0x73,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe8,0x00,0x00,0x00, -0xe6,0x00,0x00,0x00,0xb9,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,0xe8,0x00,0x00,0x00, -0x36,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0xed,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xeb,0x00,0x00,0x00, -0xec,0x00,0x00,0x00,0xed,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xec,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xf0,0x00,0x00,0x00,0xa9,0x02,0x00,0x00,0x6e,0x00,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xf2,0x00,0x00,0x00, -0xf0,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xed,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xed,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0xc1,0x00,0x00,0x00,0xf3,0x00,0x00,0x00, -0xeb,0x00,0x00,0x00,0xdd,0x00,0x00,0x00,0xf2,0x00,0x00,0x00, -0xec,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0xf5,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xf3,0x00,0x00,0x00, -0xf4,0x00,0x00,0x00,0x16,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xf4,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xfe,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0xb9,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x00,0x01,0x00,0x00, -0xfe,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x02,0x01,0x00,0x00,0x00,0x01,0x00,0x00, -0x6e,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x0d,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,0x98,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0e,0x01,0x00,0x00, -0xbd,0x02,0x00,0x00,0x0d,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x10,0x01,0x00,0x00,0x0e,0x01,0x00,0x00, -0x6e,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x11,0x01,0x00,0x00, -0x12,0x01,0x00,0x00,0x06,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0x10,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xf6,0x00,0x00,0x00, -0x13,0x01,0x00,0x00,0x12,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x14,0x01,0x00,0x00,0x15,0x01,0x00,0x00,0xfb,0x00,0x00,0x00, -0x02,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x15,0x01,0x00,0x00, -0x13,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xf5,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x16,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x19,0x01,0x00,0x00,0x73,0x00,0x00,0x00, -0xb9,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x1b,0x01,0x00,0x00,0x19,0x01,0x00,0x00,0x1a,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1d,0x01,0x00,0x00, -0x1b,0x01,0x00,0x00,0x6e,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x14,0x01,0x00,0x00,0x1f,0x01,0x00,0x00,0xfb,0x00,0x00,0x00, -0x1d,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x1f,0x01,0x00,0x00, -0x1e,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xf5,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xf5,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xdf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdf,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x26,0x01,0x00,0x00, -0xb9,0x02,0x00,0x00,0x24,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xdc,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x28,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x28,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xba,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0xde,0x00,0x00,0x00, -0x6e,0x01,0x00,0x00,0x2b,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0x2e,0x01,0x00,0x00,0xba,0x02,0x00,0x00, -0xa6,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x2a,0x01,0x00,0x00, -0x2b,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x2e,0x01,0x00,0x00,0x29,0x01,0x00,0x00,0x2a,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x29,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x32,0x01,0x00,0x00,0xa7,0x00,0x00,0x00, -0x7d,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x34,0x01,0x00,0x00,0x32,0x01,0x00,0x00,0xba,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x35,0x01,0x00,0x00, -0x12,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x36,0x01,0x00,0x00,0x35,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x37,0x01,0x00,0x00, -0x34,0x01,0x00,0x00,0x36,0x01,0x00,0x00,0xf7,0x00,0x03,0x00, -0x39,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x37,0x01,0x00,0x00,0x38,0x01,0x00,0x00,0x39,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x38,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3c,0x01,0x00,0x00,0xa9,0x02,0x00,0x00, -0x78,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0x3e,0x01,0x00,0x00,0x3c,0x01,0x00,0x00,0x8d,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x39,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x39,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0xc1,0x00,0x00,0x00, -0x3f,0x01,0x00,0x00,0x37,0x01,0x00,0x00,0x29,0x01,0x00,0x00, -0x3e,0x01,0x00,0x00,0x38,0x01,0x00,0x00,0xf7,0x00,0x03,0x00, -0x41,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x3f,0x01,0x00,0x00,0x40,0x01,0x00,0x00,0x61,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x40,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x49,0x01,0x00,0x00,0x7d,0x00,0x00,0x00, -0xba,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x4b,0x01,0x00,0x00,0x49,0x01,0x00,0x00,0x4a,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4d,0x01,0x00,0x00, -0x4b,0x01,0x00,0x00,0x78,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x58,0x01,0x00,0x00,0x49,0x01,0x00,0x00, -0xaa,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x59,0x01,0x00,0x00,0xc1,0x02,0x00,0x00,0x58,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5b,0x01,0x00,0x00, -0x59,0x01,0x00,0x00,0x78,0x00,0x00,0x00,0x41,0x00,0x06,0x00, -0x5c,0x01,0x00,0x00,0x5d,0x01,0x00,0x00,0x51,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0x5b,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc3,0x00,0x00,0x00,0x5e,0x01,0x00,0x00,0x5d,0x01,0x00,0x00, -0x73,0x00,0x04,0x00,0xf6,0x00,0x00,0x00,0x5f,0x01,0x00,0x00, -0x5e,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x14,0x01,0x00,0x00, -0x60,0x01,0x00,0x00,0x46,0x01,0x00,0x00,0x4d,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0x60,0x01,0x00,0x00,0x5f,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0x41,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x61,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x64,0x01,0x00,0x00,0x7d,0x00,0x00,0x00,0xba,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x66,0x01,0x00,0x00, -0x64,0x01,0x00,0x00,0x65,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x68,0x01,0x00,0x00,0x66,0x01,0x00,0x00, -0x78,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x14,0x01,0x00,0x00, -0x69,0x01,0x00,0x00,0x46,0x01,0x00,0x00,0x68,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0x69,0x01,0x00,0x00,0x1e,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0x41,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x41,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x2b,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x2b,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x6e,0x01,0x00,0x00,0xba,0x02,0x00,0x00, -0x6c,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x28,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x2a,0x01,0x00,0x00,0xe0,0x00,0x04,0x00, -0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x6f,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x72,0x01,0x00,0x00, -0xbd,0x02,0x00,0x00,0x70,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x75,0x01,0x00,0x00,0xc1,0x02,0x00,0x00, -0x73,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x77,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x77,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xc3,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0x2a,0x01,0x00,0x00,0x21,0x02,0x00,0x00,0x7a,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x7d,0x01,0x00,0x00, -0xc3,0x02,0x00,0x00,0x6c,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x79,0x01,0x00,0x00,0x7a,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x7d,0x01,0x00,0x00,0x78,0x01,0x00,0x00, -0x79,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x78,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0x7f,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x7f,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xc7,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0x78,0x01,0x00,0x00, -0xab,0x01,0x00,0x00,0x82,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0x85,0x01,0x00,0x00,0xc7,0x02,0x00,0x00, -0x60,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x81,0x01,0x00,0x00, -0x82,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x85,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0x81,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x80,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0x87,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x87,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xd9,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0xa9,0x01,0x00,0x00, -0x88,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0x8d,0x01,0x00,0x00,0xd9,0x02,0x00,0x00,0x62,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x89,0x01,0x00,0x00,0x88,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x8d,0x01,0x00,0x00, -0x88,0x01,0x00,0x00,0x89,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x88,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x93,0x01,0x00,0x00,0xc7,0x02,0x00,0x00,0x62,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x95,0x01,0x00,0x00, -0x93,0x01,0x00,0x00,0xd9,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x97,0x01,0x00,0x00,0x55,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x99,0x01,0x00,0x00,0xc7,0x02,0x00,0x00,0x61,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9a,0x01,0x00,0x00, -0x97,0x01,0x00,0x00,0x99,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9c,0x01,0x00,0x00,0x64,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9d,0x01,0x00,0x00,0x9a,0x01,0x00,0x00,0x9c,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9f,0x01,0x00,0x00, -0x9d,0x01,0x00,0x00,0xd9,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa1,0x01,0x00,0x00,0x9f,0x01,0x00,0x00, -0xa0,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa3,0x01,0x00,0x00,0xa1,0x01,0x00,0x00,0xc3,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0x14,0x01,0x00,0x00,0xa4,0x01,0x00,0x00, -0xfb,0x00,0x00,0x00,0xa3,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0xf6,0x00,0x00,0x00,0xa5,0x01,0x00,0x00,0xa4,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0xa6,0x01,0x00,0x00,0xa7,0x01,0x00,0x00, -0x91,0x01,0x00,0x00,0x95,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0xa7,0x01,0x00,0x00,0xa5,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa9,0x01,0x00,0x00,0xd9,0x02,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x87,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x89,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0x82,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x82,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xab,0x01,0x00,0x00, -0xc7,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x7f,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x81,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xad,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xad,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xc8,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0x81,0x01,0x00,0x00, -0xd9,0x01,0x00,0x00,0xb0,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0xb3,0x01,0x00,0x00,0xc8,0x02,0x00,0x00, -0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xaf,0x01,0x00,0x00, -0xb0,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xb3,0x01,0x00,0x00,0xae,0x01,0x00,0x00,0xaf,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xae,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xb5,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xb5,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xd6,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0xae,0x01,0x00,0x00,0xd7,0x01,0x00,0x00, -0xb6,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0xbb,0x01,0x00,0x00,0xd6,0x02,0x00,0x00,0xbb,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xb7,0x01,0x00,0x00,0xb6,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xbb,0x01,0x00,0x00, -0xb6,0x01,0x00,0x00,0xb7,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xb6,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xc1,0x01,0x00,0x00,0xc8,0x02,0x00,0x00,0xbb,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc3,0x01,0x00,0x00, -0xc1,0x01,0x00,0x00,0xd6,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xc5,0x01,0x00,0x00,0x59,0x00,0x00,0x00, -0xb8,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xc8,0x01,0x00,0x00,0xc8,0x02,0x00,0x00,0xc7,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc9,0x01,0x00,0x00, -0xc5,0x01,0x00,0x00,0xc8,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xcb,0x01,0x00,0x00,0x68,0x00,0x00,0x00, -0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xcc,0x01,0x00,0x00,0xc9,0x01,0x00,0x00,0xcb,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xce,0x01,0x00,0x00, -0xcc,0x01,0x00,0x00,0xd6,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xd0,0x01,0x00,0x00,0xce,0x01,0x00,0x00, -0xcf,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd2,0x01,0x00,0x00,0xd0,0x01,0x00,0x00,0xc3,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0x14,0x01,0x00,0x00,0xd3,0x01,0x00,0x00, -0x46,0x01,0x00,0x00,0xd2,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0xf6,0x00,0x00,0x00,0xd4,0x01,0x00,0x00,0xd3,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0xa6,0x01,0x00,0x00,0xd5,0x01,0x00,0x00, -0xbf,0x01,0x00,0x00,0xc3,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0xd5,0x01,0x00,0x00,0xd4,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xd7,0x01,0x00,0x00,0xd6,0x02,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb5,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xb7,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xb0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xb0,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd9,0x01,0x00,0x00, -0xc8,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xad,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xaf,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xdb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xdb,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xc9,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0xaf,0x01,0x00,0x00, -0x1f,0x02,0x00,0x00,0xde,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0xe1,0x01,0x00,0x00,0xc9,0x02,0x00,0x00, -0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xdd,0x01,0x00,0x00, -0xde,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xe1,0x01,0x00,0x00,0xdc,0x01,0x00,0x00,0xdd,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xdc,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xe3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xe3,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xcd,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0xdc,0x01,0x00,0x00,0x1d,0x02,0x00,0x00, -0xe6,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0xe9,0x01,0x00,0x00,0xcd,0x02,0x00,0x00,0x60,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xe5,0x01,0x00,0x00,0xe6,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xe9,0x01,0x00,0x00, -0xe4,0x01,0x00,0x00,0xe5,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xe4,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xeb,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xeb,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xcf,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0xe4,0x01,0x00,0x00,0x1b,0x02,0x00,0x00,0xee,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xf1,0x01,0x00,0x00, -0xcf,0x02,0x00,0x00,0xbb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xed,0x01,0x00,0x00,0xee,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xf1,0x01,0x00,0x00,0xec,0x01,0x00,0x00, -0xed,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xec,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xf3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xf3,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xd1,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0xec,0x01,0x00,0x00, -0x19,0x02,0x00,0x00,0xf4,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0xf9,0x01,0x00,0x00,0xd1,0x02,0x00,0x00, -0x62,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xf5,0x01,0x00,0x00, -0xf4,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xf9,0x01,0x00,0x00,0xf4,0x01,0x00,0x00,0xf5,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xf4,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xfb,0x01,0x00,0x00,0xc9,0x02,0x00,0x00, -0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xfd,0x01,0x00,0x00,0xfb,0x01,0x00,0x00,0xcf,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xff,0x01,0x00,0x00, -0xfd,0x01,0x00,0x00,0xfe,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x01,0x02,0x00,0x00,0xcd,0x02,0x00,0x00, -0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x02,0x02,0x00,0x00,0xff,0x01,0x00,0x00,0x01,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x04,0x02,0x00,0x00, -0x02,0x02,0x00,0x00,0xd1,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x08,0x02,0x00,0x00,0x01,0x02,0x00,0x00, -0xd1,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xa6,0x01,0x00,0x00, -0x09,0x02,0x00,0x00,0x91,0x01,0x00,0x00,0x08,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0xf6,0x00,0x00,0x00,0x0a,0x02,0x00,0x00, -0x09,0x02,0x00,0x00,0x73,0x00,0x04,0x00,0xc3,0x00,0x00,0x00, -0x0b,0x02,0x00,0x00,0x0a,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0xa6,0x01,0x00,0x00,0x10,0x02,0x00,0x00,0xbf,0x01,0x00,0x00, -0xfd,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xf6,0x00,0x00,0x00, -0x11,0x02,0x00,0x00,0x10,0x02,0x00,0x00,0x73,0x00,0x04,0x00, -0xc3,0x00,0x00,0x00,0x12,0x02,0x00,0x00,0x11,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,0x14,0x02,0x00,0x00, -0xc9,0x00,0x00,0x00,0x04,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc3,0x00,0x00,0x00,0x15,0x02,0x00,0x00,0x14,0x02,0x00,0x00, -0x0c,0x00,0x08,0x00,0xc3,0x00,0x00,0x00,0x16,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x0b,0x02,0x00,0x00, -0x12,0x02,0x00,0x00,0x15,0x02,0x00,0x00,0x3e,0x00,0x03,0x00, -0x14,0x02,0x00,0x00,0x16,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x19,0x02,0x00,0x00,0xd1,0x02,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xf3,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xf5,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xee,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xee,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1b,0x02,0x00,0x00, -0xcf,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xeb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xed,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xe6,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xe6,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x1d,0x02,0x00,0x00,0xcd,0x02,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xe3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xe5,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xde,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xde,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x1f,0x02,0x00,0x00,0xc9,0x02,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xdb,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xdd,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0x7a,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x7a,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x21,0x02,0x00,0x00, -0xc3,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x77,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x79,0x01,0x00,0x00, -0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x6f,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xd6,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xd6,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x23,0x02,0x00,0x00,0xa9,0x02,0x00,0x00, -0x6c,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd3,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xd5,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x28,0x02,0x00,0x00,0x55,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x29,0x02,0x00,0x00,0x95,0x00,0x00,0x00,0x28,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2e,0x02,0x00,0x00, -0x59,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x2f,0x02,0x00,0x00,0xa7,0x00,0x00,0x00, -0x2e,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x34,0x02,0x00,0x00,0x12,0x00,0x00,0x00,0x33,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x35,0x02,0x00,0x00, -0x34,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x36,0x02,0x00,0x00,0x0f,0x00,0x00,0x00,0x35,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3a,0x02,0x00,0x00, -0x47,0x00,0x00,0x00,0x35,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0x3c,0x02,0x00,0x00,0x3b,0x02,0x00,0x00, -0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x3d,0x02,0x00,0x00,0x3c,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3e,0x02,0x00,0x00,0x3a,0x02,0x00,0x00, -0x3d,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x3f,0x02,0x00,0x00,0x36,0x02,0x00,0x00,0x3e,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x41,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x41,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xaa,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0xd5,0x00,0x00,0x00, -0xa7,0x02,0x00,0x00,0x44,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0x47,0x02,0x00,0x00,0xaa,0x02,0x00,0x00, -0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x43,0x02,0x00,0x00, -0x44,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x47,0x02,0x00,0x00,0x42,0x02,0x00,0x00,0x43,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x42,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x49,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x49,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xab,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0x42,0x02,0x00,0x00,0xa5,0x02,0x00,0x00, -0x4c,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0x4f,0x02,0x00,0x00,0xab,0x02,0x00,0x00,0x60,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x4b,0x02,0x00,0x00,0x4c,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x4f,0x02,0x00,0x00, -0x4a,0x02,0x00,0x00,0x4b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x4a,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x53,0x02,0x00,0x00,0xab,0x02,0x00,0x00,0x61,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x54,0x02,0x00,0x00, -0x29,0x02,0x00,0x00,0x53,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x56,0x02,0x00,0x00,0x64,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x57,0x02,0x00,0x00,0x54,0x02,0x00,0x00,0x56,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5b,0x02,0x00,0x00, -0xaa,0x02,0x00,0x00,0xc7,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x5c,0x02,0x00,0x00,0x2f,0x02,0x00,0x00, -0x5b,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x5e,0x02,0x00,0x00,0x68,0x00,0x00,0x00,0xbb,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5f,0x02,0x00,0x00, -0x5c,0x02,0x00,0x00,0x5e,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x61,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x61,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xad,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0x4a,0x02,0x00,0x00,0xa3,0x02,0x00,0x00, -0x64,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0x67,0x02,0x00,0x00,0xad,0x02,0x00,0x00,0xbb,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x63,0x02,0x00,0x00,0x64,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x67,0x02,0x00,0x00, -0x62,0x02,0x00,0x00,0x63,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x62,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x69,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x69,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xaf,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0x62,0x02,0x00,0x00,0xa1,0x02,0x00,0x00,0x6c,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x6f,0x02,0x00,0x00, -0xaf,0x02,0x00,0x00,0x62,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x6b,0x02,0x00,0x00,0x6c,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x6f,0x02,0x00,0x00,0x6a,0x02,0x00,0x00, -0x6b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x6a,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x72,0x02,0x00,0x00, -0x57,0x02,0x00,0x00,0xaf,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0x75,0x02,0x00,0x00,0x72,0x02,0x00,0x00, -0x36,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x77,0x02,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x75,0x02,0x00,0x00, -0x76,0x02,0x00,0x00,0x77,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x76,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x7a,0x02,0x00,0x00,0x5f,0x02,0x00,0x00,0xad,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x7b,0x02,0x00,0x00, -0x12,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x7c,0x02,0x00,0x00,0x7b,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x7d,0x02,0x00,0x00, -0x7a,0x02,0x00,0x00,0x7c,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x77,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x77,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0xc1,0x00,0x00,0x00,0x7e,0x02,0x00,0x00, -0x75,0x02,0x00,0x00,0x6a,0x02,0x00,0x00,0x7d,0x02,0x00,0x00, -0x76,0x02,0x00,0x00,0xf7,0x00,0x03,0x00,0x80,0x02,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x7e,0x02,0x00,0x00, -0x7f,0x02,0x00,0x00,0x80,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x7f,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x88,0x02,0x00,0x00,0x5f,0x02,0x00,0x00,0xad,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x8a,0x02,0x00,0x00, -0x12,0x00,0x00,0x00,0x89,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x8b,0x02,0x00,0x00,0x8a,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8c,0x02,0x00,0x00, -0x88,0x02,0x00,0x00,0x8b,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x8d,0x02,0x00,0x00,0x3f,0x02,0x00,0x00, -0x8c,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x8f,0x02,0x00,0x00,0x8d,0x02,0x00,0x00,0x57,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x91,0x02,0x00,0x00, -0x8f,0x02,0x00,0x00,0xaf,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x93,0x02,0x00,0x00,0xaa,0x02,0x00,0x00, -0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x95,0x02,0x00,0x00,0x93,0x02,0x00,0x00,0xad,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x97,0x02,0x00,0x00, -0x95,0x02,0x00,0x00,0x96,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x99,0x02,0x00,0x00,0xab,0x02,0x00,0x00, -0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9a,0x02,0x00,0x00,0x97,0x02,0x00,0x00,0x99,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9c,0x02,0x00,0x00, -0x9a,0x02,0x00,0x00,0xaf,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0xcc,0x00,0x00,0x00,0x9d,0x02,0x00,0x00,0xc9,0x00,0x00,0x00, -0x9c,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00, -0x9e,0x02,0x00,0x00,0x9d,0x02,0x00,0x00,0x41,0x00,0x06,0x00, -0x5c,0x01,0x00,0x00,0x9f,0x02,0x00,0x00,0x84,0x02,0x00,0x00, -0x34,0x00,0x00,0x00,0x91,0x02,0x00,0x00,0x3e,0x00,0x03,0x00, -0x9f,0x02,0x00,0x00,0x9e,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x80,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x80,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x6c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x6c,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa1,0x02,0x00,0x00,0xaf,0x02,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x69,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x6b,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x64,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x64,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa3,0x02,0x00,0x00,0xad,0x02,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x61,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x63,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x4c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x4c,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa5,0x02,0x00,0x00, -0xab,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x49,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x4b,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x44,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x44,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa7,0x02,0x00,0x00,0xaa,0x02,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x41,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x43,0x02,0x00,0x00,0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00, - -}; -const uint64_t matmul_f16_f32_len = 10332; - -unsigned char matmul_f16_f32_aligned_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0x13,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x09,0x00,0x00,0x00, -0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,0x0b,0x00,0x06,0x00, -0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64, -0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00, -0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0f,0x00,0x0f,0x00, -0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e, -0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x3d,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0xfe,0x00,0x00,0x00, -0x05,0x01,0x00,0x00,0x63,0x01,0x00,0x00,0x6b,0x01,0x00,0x00, -0x74,0x02,0x00,0x00,0xbd,0x02,0x00,0x00,0x10,0x00,0x06,0x00, -0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x34,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x10,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x37,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x3d,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x4c,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x4f,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x53,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x60,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x62,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x6c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xa7,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xb9,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xbc,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x02,0x01,0x00,0x00,0x06,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x03,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x03,0x01,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x05,0x01,0x00,0x00, -0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x05,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x3b,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x3c,0x01,0x00,0x00, -0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x68,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x48,0x00,0x04,0x00,0x69,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x05,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x69,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x69,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x69,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0x69,0x01,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x6b,0x01,0x00,0x00,0x22,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x6b,0x01,0x00,0x00, -0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x74,0x02,0x00,0x00,0x0b,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xba,0x02,0x00,0x00,0x06,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0xbb,0x02,0x00,0x00, -0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0xbb,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0xbb,0x02,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xbd,0x02,0x00,0x00, -0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xbd,0x02,0x00,0x00,0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00, -0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x1e,0x00,0x10,0x00, -0x10,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x11,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x11,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x15,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x0a,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x27,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x2d,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x3e,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x4c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x54,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x58,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x63,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x67,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x6d,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x91,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0xa2,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xa7,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xba,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0xb9,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xbb,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x4f,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xbc,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xbb,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xbd,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0xba,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xb8,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xc0,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x14,0x00,0x02,0x00, -0xc2,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0xc4,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xc5,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xc6,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc5,0x00,0x00,0x00, -0xbf,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xc7,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc6,0x00,0x00,0x00, -0xbc,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xc8,0x00,0x00,0x00, -0xc4,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0xc9,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xc8,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0xcc,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xcd,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xf4,0x00,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x16,0x00,0x03,0x00,0xf9,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xfa,0x00,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xfb,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0xfa,0x00,0x00,0x00, -0x1c,0x00,0x04,0x00,0xfc,0x00,0x00,0x00,0xf9,0x00,0x00,0x00, -0xfb,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xfd,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0xfd,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x17,0x00,0x04,0x00,0x00,0x01,0x00,0x00,0xf9,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x18,0x00,0x04,0x00,0x01,0x01,0x00,0x00, -0x00,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x1d,0x00,0x03,0x00, -0x02,0x01,0x00,0x00,0x01,0x01,0x00,0x00,0x1e,0x00,0x03,0x00, -0x03,0x01,0x00,0x00,0x02,0x01,0x00,0x00,0x20,0x00,0x04,0x00, -0x04,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x03,0x01,0x00,0x00, -0x3b,0x00,0x04,0x00,0x04,0x01,0x00,0x00,0x05,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x07,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x0a,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0xf9,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x19,0x01,0x00,0x00, -0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x20,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x27,0x01,0x00,0x00,0x05,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x2e,0x01,0x00,0x00, -0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x35,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x3b,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0x33,0x00,0x06,0x00,0x09,0x00,0x00,0x00,0x3c,0x01,0x00,0x00, -0x3b,0x01,0x00,0x00,0x39,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x3d,0x01,0x00,0x00, -0x51,0x00,0x00,0x00,0x3c,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x3e,0x01,0x00,0x00, -0x84,0x00,0x00,0x00,0x3d,0x01,0x00,0x00,0x6d,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x3f,0x01,0x00,0x00, -0x86,0x00,0x00,0x00,0x3e,0x01,0x00,0x00,0x6c,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x5a,0x01,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x5f,0x01,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x60,0x01,0x00,0x00, -0x84,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0x5f,0x01,0x00,0x00, -0x1c,0x00,0x04,0x00,0x61,0x01,0x00,0x00,0xf9,0x00,0x00,0x00, -0x60,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x62,0x01,0x00,0x00, -0x04,0x00,0x00,0x00,0x61,0x01,0x00,0x00,0x3b,0x00,0x04,0x00, -0x62,0x01,0x00,0x00,0x63,0x01,0x00,0x00,0x04,0x00,0x00,0x00, -0x17,0x00,0x04,0x00,0x66,0x01,0x00,0x00,0xc4,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x18,0x00,0x04,0x00,0x67,0x01,0x00,0x00, -0x66,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x1d,0x00,0x03,0x00, -0x68,0x01,0x00,0x00,0x67,0x01,0x00,0x00,0x1e,0x00,0x03,0x00, -0x69,0x01,0x00,0x00,0x68,0x01,0x00,0x00,0x20,0x00,0x04,0x00, -0x6a,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x69,0x01,0x00,0x00, -0x3b,0x00,0x04,0x00,0x6a,0x01,0x00,0x00,0x6b,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x6d,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xa3,0x01,0x00,0x00,0x51,0x00,0x00,0x00, -0x3c,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xa4,0x01,0x00,0x00,0x84,0x00,0x00,0x00, -0xa3,0x01,0x00,0x00,0x6d,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xa5,0x01,0x00,0x00,0x86,0x00,0x00,0x00, -0xa4,0x01,0x00,0x00,0x6c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xa8,0x01,0x00,0x00,0x08,0x01,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xa9,0x01,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x6d,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xac,0x01,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x6d,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc7,0x01,0x00,0x00, -0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x1c,0x00,0x04,0x00,0xc8,0x01,0x00,0x00,0xf9,0x00,0x00,0x00, -0xc7,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0xc9,0x01,0x00,0x00, -0x07,0x00,0x00,0x00,0xc8,0x01,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xd9,0x01,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0xdf,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0xf9,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xf5,0x01,0x00,0x00, -0x84,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0xbc,0x00,0x00,0x00, -0x1c,0x00,0x04,0x00,0xf6,0x01,0x00,0x00,0xf9,0x00,0x00,0x00, -0xf5,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0xf7,0x01,0x00,0x00, -0x07,0x00,0x00,0x00,0xf6,0x01,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x86,0x00,0x00,0x00, -0xb9,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x08,0x02,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x37,0x02,0x00,0x00,0x84,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x6c,0x02,0x00,0x00,0x0d,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x74,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0xba,0x02,0x00,0x00, -0xc4,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0xbb,0x02,0x00,0x00, -0xba,0x02,0x00,0x00,0x20,0x00,0x04,0x00,0xbc,0x02,0x00,0x00, -0x0c,0x00,0x00,0x00,0xbb,0x02,0x00,0x00,0x3b,0x00,0x04,0x00, -0xbc,0x02,0x00,0x00,0xbd,0x02,0x00,0x00,0x0c,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0xc2,0x02,0x00,0x00, -0x05,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xcf,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0xc9,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0xc9,0x01,0x00,0x00,0xca,0x01,0x00,0x00, -0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xf7,0x01,0x00,0x00, -0xf8,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x17,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x17,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x1e,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x17,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x27,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x29,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x1e,0x00,0x00,0x00, -0x29,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x2e,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x2d,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x2f,0x00,0x00,0x00, -0x2e,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x30,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x2f,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x30,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x34,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x36,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x36,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x3a,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00, -0x3a,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x3b,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x47,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x3b,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x49,0x00,0x00,0x00, -0x3d,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x49,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x4d,0x00,0x00,0x00, -0x4c,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x4d,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x50,0x00,0x00,0x00, -0x54,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x59,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x58,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5d,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x5d,0x00,0x00,0x00, -0x63,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x68,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,0x67,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6f,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x73,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x79,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x78,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7e,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x81,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x83,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x47,0x00,0x00,0x00, -0x83,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x87,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x88,0x00,0x00,0x00, -0x87,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x8a,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8d,0x00,0x00,0x00, -0x8a,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x0c,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x26,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x8d,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x92,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x92,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x94,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x42,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x98,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x97,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x99,0x00,0x00,0x00, -0x98,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9a,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x99,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9b,0x00,0x00,0x00, -0x94,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,0x9b,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9e,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,0x6d,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0xa3,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0xa3,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa5,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x4a,0x00,0x00,0x00, -0xa7,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0xaa,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0xa9,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xab,0x00,0x00,0x00, -0xaa,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xac,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0xab,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xad,0x00,0x00,0x00, -0xa5,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0xad,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xb0,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0x6d,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xb2,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xe1,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0x05,0x00,0x00,0x00, -0xd1,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0xe1,0x02,0x00,0x00, -0xc1,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xb4,0x00,0x00,0x00, -0xb3,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xc3,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0xb4,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xb3,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0xcd,0x00,0x00,0x00,0xce,0x00,0x00,0x00,0xca,0x00,0x00,0x00, -0xe1,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0xce,0x00,0x00,0x00, -0xcc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd1,0x00,0x00,0x00,0xe1,0x02,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xb4,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd4,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xd4,0x00,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xfa,0x02,0x00,0x00,0xb0,0x00,0x00,0x00, -0xb4,0x00,0x00,0x00,0xae,0x01,0x00,0x00,0xd7,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xf6,0x02,0x00,0x00, -0x9e,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0xab,0x01,0x00,0x00, -0xd7,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xe2,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0xb4,0x00,0x00,0x00, -0x5c,0x02,0x00,0x00,0xd7,0x00,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,0xe2,0x02,0x00,0x00, -0x8e,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xd6,0x00,0x00,0x00, -0xd7,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xdb,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0xd6,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xd5,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdd,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xf2,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0x41,0x01,0x00,0x00, -0xde,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0xe3,0x00,0x00,0x00,0xf2,0x02,0x00,0x00,0x37,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xdf,0x00,0x00,0x00,0xde,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xe3,0x00,0x00,0x00, -0xde,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xde,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xe8,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0xf2,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xeb,0x00,0x00,0x00, -0xe8,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xec,0x00,0x00,0x00,0xeb,0x00,0x00,0x00, -0x6d,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xed,0x00,0x00,0x00,0xf6,0x02,0x00,0x00,0xec,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xef,0x00,0x00,0x00, -0xed,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,0xe8,0x00,0x00,0x00, -0xf4,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xf7,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x6d,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf8,0x00,0x00,0x00, -0xf5,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,0x41,0x00,0x08,0x00, -0x07,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x05,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xef,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xf9,0x00,0x00,0x00, -0x09,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x0a,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,0xfe,0x00,0x00,0x00, -0xf8,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0x0b,0x01,0x00,0x00, -0x09,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x0d,0x01,0x00,0x00,0xf8,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x41,0x00,0x08,0x00,0x07,0x01,0x00,0x00,0x0f,0x01,0x00,0x00, -0x05,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0xef,0x00,0x00,0x00, -0x34,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0xf9,0x00,0x00,0x00,0x10,0x01,0x00,0x00,0x0f,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x0a,0x01,0x00,0x00,0x11,0x01,0x00,0x00, -0xfe,0x00,0x00,0x00,0x0d,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0x11,0x01,0x00,0x00,0x10,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x13,0x01,0x00,0x00,0xf8,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x07,0x01,0x00,0x00, -0x15,0x01,0x00,0x00,0x05,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0xef,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0xf9,0x00,0x00,0x00,0x16,0x01,0x00,0x00, -0x15,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x0a,0x01,0x00,0x00, -0x17,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,0x13,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0x17,0x01,0x00,0x00,0x16,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1a,0x01,0x00,0x00, -0xf8,0x00,0x00,0x00,0x19,0x01,0x00,0x00,0x41,0x00,0x08,0x00, -0x07,0x01,0x00,0x00,0x1c,0x01,0x00,0x00,0x05,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xef,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x19,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xf9,0x00,0x00,0x00, -0x1d,0x01,0x00,0x00,0x1c,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x0a,0x01,0x00,0x00,0x1e,0x01,0x00,0x00,0xfe,0x00,0x00,0x00, -0x1a,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x1e,0x01,0x00,0x00, -0x1d,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x21,0x01,0x00,0x00,0xf8,0x00,0x00,0x00,0x20,0x01,0x00,0x00, -0x41,0x00,0x08,0x00,0x07,0x01,0x00,0x00,0x23,0x01,0x00,0x00, -0x05,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0xef,0x00,0x00,0x00, -0xd0,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0xf9,0x00,0x00,0x00,0x24,0x01,0x00,0x00,0x23,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x0a,0x01,0x00,0x00,0x25,0x01,0x00,0x00, -0xfe,0x00,0x00,0x00,0x21,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0x25,0x01,0x00,0x00,0x24,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x28,0x01,0x00,0x00,0xf8,0x00,0x00,0x00, -0x27,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x07,0x01,0x00,0x00, -0x2a,0x01,0x00,0x00,0x05,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0xef,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0xf9,0x00,0x00,0x00,0x2b,0x01,0x00,0x00, -0x2a,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x0a,0x01,0x00,0x00, -0x2c,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,0x28,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0x2c,0x01,0x00,0x00,0x2b,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2f,0x01,0x00,0x00, -0xf8,0x00,0x00,0x00,0x2e,0x01,0x00,0x00,0x41,0x00,0x08,0x00, -0x07,0x01,0x00,0x00,0x31,0x01,0x00,0x00,0x05,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xef,0x00,0x00,0x00,0xd0,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xf9,0x00,0x00,0x00, -0x32,0x01,0x00,0x00,0x31,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x0a,0x01,0x00,0x00,0x33,0x01,0x00,0x00,0xfe,0x00,0x00,0x00, -0x2f,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x33,0x01,0x00,0x00, -0x32,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x36,0x01,0x00,0x00,0xf8,0x00,0x00,0x00,0x35,0x01,0x00,0x00, -0x41,0x00,0x08,0x00,0x07,0x01,0x00,0x00,0x38,0x01,0x00,0x00, -0x05,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0xef,0x00,0x00,0x00, -0xd0,0x00,0x00,0x00,0x19,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0xf9,0x00,0x00,0x00,0x39,0x01,0x00,0x00,0x38,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x0a,0x01,0x00,0x00,0x3a,0x01,0x00,0x00, -0xfe,0x00,0x00,0x00,0x36,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0x3a,0x01,0x00,0x00,0x39,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x41,0x01,0x00,0x00,0xf2,0x02,0x00,0x00, -0x3f,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xdd,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xdf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x43,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x43,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xf3,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0xa7,0x01,0x00,0x00, -0x44,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0x49,0x01,0x00,0x00,0xf3,0x02,0x00,0x00,0xa7,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x45,0x01,0x00,0x00,0x44,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x49,0x01,0x00,0x00, -0x44,0x01,0x00,0x00,0x45,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x44,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x4e,0x01,0x00,0x00,0x7e,0x00,0x00,0x00,0xf3,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x51,0x01,0x00,0x00, -0x4e,0x01,0x00,0x00,0xab,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x52,0x01,0x00,0x00,0x51,0x01,0x00,0x00, -0x6d,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x53,0x01,0x00,0x00,0xfa,0x02,0x00,0x00,0x52,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x55,0x01,0x00,0x00, -0x53,0x01,0x00,0x00,0x79,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x5b,0x01,0x00,0x00,0x4e,0x01,0x00,0x00, -0x5a,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x5d,0x01,0x00,0x00,0x79,0x00,0x00,0x00,0x6d,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5e,0x01,0x00,0x00, -0x5b,0x01,0x00,0x00,0x5d,0x01,0x00,0x00,0x41,0x00,0x08,0x00, -0x6d,0x01,0x00,0x00,0x6e,0x01,0x00,0x00,0x6b,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0x55,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0x6f,0x01,0x00,0x00,0x6e,0x01,0x00,0x00,0x73,0x00,0x04,0x00, -0xf9,0x00,0x00,0x00,0x70,0x01,0x00,0x00,0x6f,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x0a,0x01,0x00,0x00,0x71,0x01,0x00,0x00, -0x63,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0x71,0x01,0x00,0x00,0x70,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x73,0x01,0x00,0x00,0x5e,0x01,0x00,0x00, -0x39,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x6d,0x01,0x00,0x00, -0x75,0x01,0x00,0x00,0x6b,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0x55,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x76,0x01,0x00,0x00, -0x75,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0xf9,0x00,0x00,0x00, -0x77,0x01,0x00,0x00,0x76,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x0a,0x01,0x00,0x00,0x78,0x01,0x00,0x00,0x63,0x01,0x00,0x00, -0x73,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x78,0x01,0x00,0x00, -0x77,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x7a,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x41,0x00,0x08,0x00,0x6d,0x01,0x00,0x00,0x7c,0x01,0x00,0x00, -0x6b,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0x55,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0x7d,0x01,0x00,0x00,0x7c,0x01,0x00,0x00, -0x73,0x00,0x04,0x00,0xf9,0x00,0x00,0x00,0x7e,0x01,0x00,0x00, -0x7d,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x0a,0x01,0x00,0x00, -0x7f,0x01,0x00,0x00,0x63,0x01,0x00,0x00,0x7a,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0x7f,0x01,0x00,0x00,0x7e,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x81,0x01,0x00,0x00, -0x5e,0x01,0x00,0x00,0x19,0x01,0x00,0x00,0x41,0x00,0x08,0x00, -0x6d,0x01,0x00,0x00,0x83,0x01,0x00,0x00,0x6b,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0x55,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0x19,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0x84,0x01,0x00,0x00,0x83,0x01,0x00,0x00,0x73,0x00,0x04,0x00, -0xf9,0x00,0x00,0x00,0x85,0x01,0x00,0x00,0x84,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x0a,0x01,0x00,0x00,0x86,0x01,0x00,0x00, -0x63,0x01,0x00,0x00,0x81,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0x86,0x01,0x00,0x00,0x85,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x88,0x01,0x00,0x00,0x5e,0x01,0x00,0x00, -0x20,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x6d,0x01,0x00,0x00, -0x8a,0x01,0x00,0x00,0x6b,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0x55,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,0x3e,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x8b,0x01,0x00,0x00, -0x8a,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0xf9,0x00,0x00,0x00, -0x8c,0x01,0x00,0x00,0x8b,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x0a,0x01,0x00,0x00,0x8d,0x01,0x00,0x00,0x63,0x01,0x00,0x00, -0x88,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x8d,0x01,0x00,0x00, -0x8c,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x8f,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,0x27,0x01,0x00,0x00, -0x41,0x00,0x08,0x00,0x6d,0x01,0x00,0x00,0x91,0x01,0x00,0x00, -0x6b,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0x55,0x01,0x00,0x00, -0xd0,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0x92,0x01,0x00,0x00,0x91,0x01,0x00,0x00, -0x73,0x00,0x04,0x00,0xf9,0x00,0x00,0x00,0x93,0x01,0x00,0x00, -0x92,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x0a,0x01,0x00,0x00, -0x94,0x01,0x00,0x00,0x63,0x01,0x00,0x00,0x8f,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0x94,0x01,0x00,0x00,0x93,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x96,0x01,0x00,0x00, -0x5e,0x01,0x00,0x00,0x2e,0x01,0x00,0x00,0x41,0x00,0x08,0x00, -0x6d,0x01,0x00,0x00,0x98,0x01,0x00,0x00,0x6b,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0x55,0x01,0x00,0x00,0xd0,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0x99,0x01,0x00,0x00,0x98,0x01,0x00,0x00,0x73,0x00,0x04,0x00, -0xf9,0x00,0x00,0x00,0x9a,0x01,0x00,0x00,0x99,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x0a,0x01,0x00,0x00,0x9b,0x01,0x00,0x00, -0x63,0x01,0x00,0x00,0x96,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0x9b,0x01,0x00,0x00,0x9a,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9d,0x01,0x00,0x00,0x5e,0x01,0x00,0x00, -0x35,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x6d,0x01,0x00,0x00, -0x9f,0x01,0x00,0x00,0x6b,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0x55,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,0x19,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0xa0,0x01,0x00,0x00, -0x9f,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0xf9,0x00,0x00,0x00, -0xa1,0x01,0x00,0x00,0xa0,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x0a,0x01,0x00,0x00,0xa2,0x01,0x00,0x00,0x63,0x01,0x00,0x00, -0x9d,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xa2,0x01,0x00,0x00, -0xa1,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa7,0x01,0x00,0x00,0xf3,0x02,0x00,0x00,0xa5,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0x43,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x45,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0xa8,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xab,0x01,0x00,0x00,0xf6,0x02,0x00,0x00, -0xa9,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xae,0x01,0x00,0x00,0xfa,0x02,0x00,0x00,0xac,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xb0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xb0,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xfc,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0x45,0x01,0x00,0x00, -0x5a,0x02,0x00,0x00,0xb3,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0xb6,0x01,0x00,0x00,0xfc,0x02,0x00,0x00, -0x6c,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xb2,0x01,0x00,0x00, -0xb3,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xb6,0x01,0x00,0x00,0xb1,0x01,0x00,0x00,0xb2,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xb1,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xb8,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xb8,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x00,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0xb1,0x01,0x00,0x00,0xe4,0x01,0x00,0x00, -0xbb,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0xbe,0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x60,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xba,0x01,0x00,0x00,0xbb,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xbe,0x01,0x00,0x00, -0xb9,0x01,0x00,0x00,0xba,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xb9,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xc0,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xc0,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x12,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0xb9,0x01,0x00,0x00,0xe2,0x01,0x00,0x00,0xc1,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xc6,0x01,0x00,0x00, -0x12,0x03,0x00,0x00,0x62,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xc2,0x01,0x00,0x00,0xc1,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xc6,0x01,0x00,0x00,0xc1,0x01,0x00,0x00, -0xc2,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xc1,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xcc,0x01,0x00,0x00, -0x00,0x03,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xce,0x01,0x00,0x00,0xcc,0x01,0x00,0x00, -0x12,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd0,0x01,0x00,0x00,0x55,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd2,0x01,0x00,0x00, -0x00,0x03,0x00,0x00,0x61,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xd3,0x01,0x00,0x00,0xd0,0x01,0x00,0x00, -0xd2,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd5,0x01,0x00,0x00,0x64,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd6,0x01,0x00,0x00, -0xd3,0x01,0x00,0x00,0xd5,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xd8,0x01,0x00,0x00,0xd6,0x01,0x00,0x00, -0x12,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xda,0x01,0x00,0x00,0xd8,0x01,0x00,0x00,0xd9,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdc,0x01,0x00,0x00, -0xda,0x01,0x00,0x00,0xfc,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0x0a,0x01,0x00,0x00,0xdd,0x01,0x00,0x00,0xfe,0x00,0x00,0x00, -0xdc,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xf9,0x00,0x00,0x00, -0xde,0x01,0x00,0x00,0xdd,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0xdf,0x01,0x00,0x00,0xe0,0x01,0x00,0x00,0xca,0x01,0x00,0x00, -0xce,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xe0,0x01,0x00,0x00, -0xde,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xe2,0x01,0x00,0x00,0x12,0x03,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xc0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xc2,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xbb,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xbb,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xe4,0x01,0x00,0x00,0x00,0x03,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb8,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xba,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xe6,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xe6,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x01,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0xba,0x01,0x00,0x00,0x12,0x02,0x00,0x00, -0xe9,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0xec,0x01,0x00,0x00,0x01,0x03,0x00,0x00,0xbf,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xe8,0x01,0x00,0x00,0xe9,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xec,0x01,0x00,0x00, -0xe7,0x01,0x00,0x00,0xe8,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xe7,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xee,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xee,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x0f,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0xe7,0x01,0x00,0x00,0x10,0x02,0x00,0x00,0xef,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xf4,0x01,0x00,0x00, -0x0f,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xf0,0x01,0x00,0x00,0xef,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xf4,0x01,0x00,0x00,0xef,0x01,0x00,0x00, -0xf0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xef,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfa,0x01,0x00,0x00, -0x01,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xfc,0x01,0x00,0x00,0xfa,0x01,0x00,0x00, -0x0f,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xfe,0x01,0x00,0x00,0x59,0x00,0x00,0x00,0xb9,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x01,0x02,0x00,0x00, -0x01,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x02,0x02,0x00,0x00,0xfe,0x01,0x00,0x00, -0x01,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x04,0x02,0x00,0x00,0x68,0x00,0x00,0x00,0xbc,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x05,0x02,0x00,0x00, -0x02,0x02,0x00,0x00,0x04,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x07,0x02,0x00,0x00,0x05,0x02,0x00,0x00, -0x0f,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x09,0x02,0x00,0x00,0x07,0x02,0x00,0x00,0x08,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0b,0x02,0x00,0x00, -0x09,0x02,0x00,0x00,0xfc,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0x0a,0x01,0x00,0x00,0x0c,0x02,0x00,0x00,0x63,0x01,0x00,0x00, -0x0b,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xf9,0x00,0x00,0x00, -0x0d,0x02,0x00,0x00,0x0c,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0xdf,0x01,0x00,0x00,0x0e,0x02,0x00,0x00,0xf8,0x01,0x00,0x00, -0xfc,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x0e,0x02,0x00,0x00, -0x0d,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x10,0x02,0x00,0x00,0x0f,0x03,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xee,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xf0,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xe9,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xe9,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x12,0x02,0x00,0x00,0x01,0x03,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xe6,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xe8,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0x14,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x14,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x02,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0xe8,0x01,0x00,0x00,0x58,0x02,0x00,0x00, -0x17,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0x1a,0x02,0x00,0x00,0x02,0x03,0x00,0x00,0xbf,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x16,0x02,0x00,0x00,0x17,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x1a,0x02,0x00,0x00, -0x15,0x02,0x00,0x00,0x16,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x15,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x1c,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x1c,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x06,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0x15,0x02,0x00,0x00,0x56,0x02,0x00,0x00,0x1f,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x22,0x02,0x00,0x00, -0x06,0x03,0x00,0x00,0x60,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x1e,0x02,0x00,0x00,0x1f,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x22,0x02,0x00,0x00,0x1d,0x02,0x00,0x00, -0x1e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x1d,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x24,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x24,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x08,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0x1d,0x02,0x00,0x00, -0x54,0x02,0x00,0x00,0x27,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0x2a,0x02,0x00,0x00,0x08,0x03,0x00,0x00, -0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x26,0x02,0x00,0x00, -0x27,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x2a,0x02,0x00,0x00,0x25,0x02,0x00,0x00,0x26,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x25,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x2c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x2c,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x0a,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0x25,0x02,0x00,0x00,0x52,0x02,0x00,0x00, -0x2d,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0x32,0x02,0x00,0x00,0x0a,0x03,0x00,0x00,0x62,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x2e,0x02,0x00,0x00,0x2d,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x32,0x02,0x00,0x00, -0x2d,0x02,0x00,0x00,0x2e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x2d,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x34,0x02,0x00,0x00,0x02,0x03,0x00,0x00,0xbc,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x36,0x02,0x00,0x00, -0x34,0x02,0x00,0x00,0x08,0x03,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x38,0x02,0x00,0x00,0x36,0x02,0x00,0x00, -0x37,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x3a,0x02,0x00,0x00,0x06,0x03,0x00,0x00,0x62,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3b,0x02,0x00,0x00, -0x38,0x02,0x00,0x00,0x3a,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3d,0x02,0x00,0x00,0x3b,0x02,0x00,0x00, -0x0a,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x41,0x02,0x00,0x00,0x3a,0x02,0x00,0x00,0x0a,0x03,0x00,0x00, -0x41,0x00,0x05,0x00,0xdf,0x01,0x00,0x00,0x42,0x02,0x00,0x00, -0xca,0x01,0x00,0x00,0x41,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0xf9,0x00,0x00,0x00,0x43,0x02,0x00,0x00,0x42,0x02,0x00,0x00, -0x73,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x44,0x02,0x00,0x00, -0x43,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xdf,0x01,0x00,0x00, -0x49,0x02,0x00,0x00,0xf8,0x01,0x00,0x00,0x36,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0xf9,0x00,0x00,0x00,0x4a,0x02,0x00,0x00, -0x49,0x02,0x00,0x00,0x73,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0x4b,0x02,0x00,0x00,0x4a,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0xcd,0x00,0x00,0x00,0x4d,0x02,0x00,0x00,0xca,0x00,0x00,0x00, -0x3d,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0x4e,0x02,0x00,0x00,0x4d,0x02,0x00,0x00,0x0c,0x00,0x08,0x00, -0xc4,0x00,0x00,0x00,0x4f,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0x44,0x02,0x00,0x00,0x4b,0x02,0x00,0x00, -0x4e,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x4d,0x02,0x00,0x00, -0x4f,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x52,0x02,0x00,0x00,0x0a,0x03,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x2c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x2e,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x27,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x27,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x54,0x02,0x00,0x00,0x08,0x03,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x24,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x26,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x1f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x1f,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x56,0x02,0x00,0x00, -0x06,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x1c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x1e,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x17,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x17,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x58,0x02,0x00,0x00,0x02,0x03,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x14,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x16,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xb3,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xb3,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x5a,0x02,0x00,0x00,0xfc,0x02,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb0,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xb2,0x01,0x00,0x00,0xe0,0x00,0x04,0x00, -0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xa8,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xd7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xd7,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x5c,0x02,0x00,0x00,0xe2,0x02,0x00,0x00,0x6c,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xd4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xd6,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x61,0x02,0x00,0x00,0x55,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x62,0x02,0x00,0x00, -0x96,0x00,0x00,0x00,0x61,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x67,0x02,0x00,0x00,0x59,0x00,0x00,0x00, -0xb9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x68,0x02,0x00,0x00,0xa8,0x00,0x00,0x00,0x67,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x6d,0x02,0x00,0x00, -0x12,0x00,0x00,0x00,0x6c,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x6e,0x02,0x00,0x00,0x6d,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6f,0x02,0x00,0x00, -0x0f,0x00,0x00,0x00,0x6e,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x73,0x02,0x00,0x00,0x47,0x00,0x00,0x00, -0x6e,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x75,0x02,0x00,0x00,0x74,0x02,0x00,0x00,0x0c,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x76,0x02,0x00,0x00, -0x75,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x77,0x02,0x00,0x00,0x73,0x02,0x00,0x00,0x76,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x78,0x02,0x00,0x00, -0x6f,0x02,0x00,0x00,0x77,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x7a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x7a,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xe3,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0xe0,0x02,0x00,0x00, -0x7d,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0x80,0x02,0x00,0x00,0xe3,0x02,0x00,0x00,0xbf,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x7c,0x02,0x00,0x00,0x7d,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x80,0x02,0x00,0x00, -0x7b,0x02,0x00,0x00,0x7c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x7b,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x82,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x82,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xe4,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0x7b,0x02,0x00,0x00,0xde,0x02,0x00,0x00,0x85,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x88,0x02,0x00,0x00, -0xe4,0x02,0x00,0x00,0x60,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x84,0x02,0x00,0x00,0x85,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x88,0x02,0x00,0x00,0x83,0x02,0x00,0x00, -0x84,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x83,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8c,0x02,0x00,0x00, -0xe4,0x02,0x00,0x00,0x61,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x8d,0x02,0x00,0x00,0x62,0x02,0x00,0x00, -0x8c,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x8f,0x02,0x00,0x00,0x64,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x90,0x02,0x00,0x00, -0x8d,0x02,0x00,0x00,0x8f,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x94,0x02,0x00,0x00,0xe3,0x02,0x00,0x00, -0x00,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x95,0x02,0x00,0x00,0x68,0x02,0x00,0x00,0x94,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x97,0x02,0x00,0x00, -0x68,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x98,0x02,0x00,0x00,0x95,0x02,0x00,0x00, -0x97,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x9a,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x9a,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xe6,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0x83,0x02,0x00,0x00,0xdc,0x02,0x00,0x00,0x9d,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xa0,0x02,0x00,0x00, -0xe6,0x02,0x00,0x00,0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x9c,0x02,0x00,0x00,0x9d,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xa0,0x02,0x00,0x00,0x9b,0x02,0x00,0x00, -0x9c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x9b,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0xa2,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xa2,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xe8,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0x9b,0x02,0x00,0x00, -0xda,0x02,0x00,0x00,0xa5,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0xa8,0x02,0x00,0x00,0xe8,0x02,0x00,0x00, -0x62,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xa4,0x02,0x00,0x00, -0xa5,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xa8,0x02,0x00,0x00,0xa3,0x02,0x00,0x00,0xa4,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xa3,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xab,0x02,0x00,0x00,0x90,0x02,0x00,0x00, -0xe8,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0xae,0x02,0x00,0x00,0xab,0x02,0x00,0x00,0x36,0x00,0x00,0x00, -0xf7,0x00,0x03,0x00,0xb0,0x02,0x00,0x00,0x00,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xae,0x02,0x00,0x00,0xaf,0x02,0x00,0x00, -0xb0,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xaf,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb3,0x02,0x00,0x00, -0x98,0x02,0x00,0x00,0xe6,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0xb4,0x02,0x00,0x00,0x12,0x00,0x00,0x00, -0xd0,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xb5,0x02,0x00,0x00,0xb4,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0xb6,0x02,0x00,0x00,0xb3,0x02,0x00,0x00, -0xb5,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xb0,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xb0,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0xc2,0x00,0x00,0x00,0xb7,0x02,0x00,0x00,0xae,0x02,0x00,0x00, -0xa3,0x02,0x00,0x00,0xb6,0x02,0x00,0x00,0xaf,0x02,0x00,0x00, -0xf7,0x00,0x03,0x00,0xb9,0x02,0x00,0x00,0x00,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xb7,0x02,0x00,0x00,0xb8,0x02,0x00,0x00, -0xb9,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xb8,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc1,0x02,0x00,0x00, -0x98,0x02,0x00,0x00,0xe6,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0xc3,0x02,0x00,0x00,0x12,0x00,0x00,0x00, -0xc2,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xc4,0x02,0x00,0x00,0xc3,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xc5,0x02,0x00,0x00,0xc1,0x02,0x00,0x00, -0xc4,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xc6,0x02,0x00,0x00,0x78,0x02,0x00,0x00,0xc5,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc8,0x02,0x00,0x00, -0xc6,0x02,0x00,0x00,0x90,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xca,0x02,0x00,0x00,0xc8,0x02,0x00,0x00, -0xe8,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xcc,0x02,0x00,0x00,0xe3,0x02,0x00,0x00,0xbc,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xce,0x02,0x00,0x00, -0xcc,0x02,0x00,0x00,0xe6,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xd0,0x02,0x00,0x00,0xce,0x02,0x00,0x00, -0xcf,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd2,0x02,0x00,0x00,0xe4,0x02,0x00,0x00,0x62,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd3,0x02,0x00,0x00, -0xd0,0x02,0x00,0x00,0xd2,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xd5,0x02,0x00,0x00,0xd3,0x02,0x00,0x00, -0xe8,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00, -0xd6,0x02,0x00,0x00,0xca,0x00,0x00,0x00,0xd5,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0xd7,0x02,0x00,0x00, -0xd6,0x02,0x00,0x00,0x41,0x00,0x06,0x00,0x6d,0x01,0x00,0x00, -0xd8,0x02,0x00,0x00,0xbd,0x02,0x00,0x00,0x34,0x00,0x00,0x00, -0xca,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0xd8,0x02,0x00,0x00, -0xd7,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xb9,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xb9,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0xa5,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xa5,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xda,0x02,0x00,0x00, -0xe8,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xa2,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xa4,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x9d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x9d,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xdc,0x02,0x00,0x00,0xe6,0x02,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x9a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x9c,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x85,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x85,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xde,0x02,0x00,0x00,0xe4,0x02,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x82,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x84,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x7d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x7d,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe0,0x02,0x00,0x00, -0xe3,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x7a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x7c,0x02,0x00,0x00, -0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00, -}; -const uint64_t matmul_f16_f32_aligned_len = 11360; - -unsigned char matmul_f16_f32_aligned_fp32_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0xd6,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00, -0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c, -0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00, -0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x0f,0x00,0x0f,0x00,0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x4c,0x00,0x00,0x00, -0xfd,0x00,0x00,0x00,0x04,0x01,0x00,0x00,0x4a,0x01,0x00,0x00, -0x51,0x01,0x00,0x00,0x37,0x02,0x00,0x00,0x80,0x02,0x00,0x00, -0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x0a,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x0d,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x10,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x37,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x3d,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x4c,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x4f,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x53,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x60,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x62,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x6c,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xa7,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xb9,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xbc,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x01,0x01,0x00,0x00, -0x06,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x02,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x04,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x04,0x01,0x00,0x00,0x21,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x22,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x23,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x4e,0x01,0x00,0x00,0x06,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x4f,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x4f,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x4f,0x01,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x51,0x01,0x00,0x00, -0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x51,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x37,0x02,0x00,0x00,0x0b,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x7d,0x02,0x00,0x00, -0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0x7e,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x7e,0x02,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x7e,0x02,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x80,0x02,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x80,0x02,0x00,0x00,0x21,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00, -0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x1e,0x00,0x10,0x00,0x10,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x11,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x11,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x15,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0x0a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x27,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x3e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x61,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x63,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x61,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x67,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x61,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x6e,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x6d,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x73,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x6d,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x78,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x6d,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x7d,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x6d,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x81,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x97,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0xa2,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0xa9,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xb8,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xb9,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x4f,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbd,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0xbc,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbe,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbf,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0xbe,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc0,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0xbf,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc1,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0xbc,0x00,0x00,0x00, -0x14,0x00,0x02,0x00,0xc2,0x00,0x00,0x00,0x16,0x00,0x03,0x00, -0xc4,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xc5,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xc6,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x1c,0x00,0x04,0x00, -0xc8,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0xc7,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0xc9,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0xc8,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0xcc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0xcd,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xc4,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0xd0,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xf4,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xf9,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xfa,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0xf9,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xfb,0x00,0x00,0x00, -0xc4,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0xfc,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0xfb,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0xfc,0x00,0x00,0x00,0xfd,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0xff,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x00,0x01,0x00,0x00, -0xff,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x1d,0x00,0x03,0x00, -0x01,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x1e,0x00,0x03,0x00, -0x02,0x01,0x00,0x00,0x01,0x01,0x00,0x00,0x20,0x00,0x04,0x00, -0x03,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x02,0x01,0x00,0x00, -0x3b,0x00,0x04,0x00,0x03,0x01,0x00,0x00,0x04,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x06,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x0a,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0xc4,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x1b,0x01,0x00,0x00, -0x03,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x22,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00, -0x09,0x00,0x00,0x00,0x23,0x01,0x00,0x00,0x22,0x01,0x00,0x00, -0x39,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x24,0x01,0x00,0x00,0x51,0x00,0x00,0x00, -0x23,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x25,0x01,0x00,0x00,0x84,0x00,0x00,0x00, -0x24,0x01,0x00,0x00,0x6d,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x26,0x01,0x00,0x00,0x86,0x00,0x00,0x00, -0x25,0x01,0x00,0x00,0x6c,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x41,0x01,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x46,0x01,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x47,0x01,0x00,0x00,0x84,0x00,0x00,0x00, -0xa7,0x00,0x00,0x00,0x46,0x01,0x00,0x00,0x1c,0x00,0x04,0x00, -0x48,0x01,0x00,0x00,0xc4,0x00,0x00,0x00,0x47,0x01,0x00,0x00, -0x20,0x00,0x04,0x00,0x49,0x01,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x49,0x01,0x00,0x00, -0x4a,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x17,0x00,0x04,0x00, -0x4d,0x01,0x00,0x00,0xc4,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x1d,0x00,0x03,0x00,0x4e,0x01,0x00,0x00,0x4d,0x01,0x00,0x00, -0x1e,0x00,0x03,0x00,0x4f,0x01,0x00,0x00,0x4e,0x01,0x00,0x00, -0x20,0x00,0x04,0x00,0x50,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x4f,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x50,0x01,0x00,0x00, -0x51,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x53,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0xc4,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x69,0x01,0x00,0x00, -0x51,0x00,0x00,0x00,0x23,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x6a,0x01,0x00,0x00, -0x84,0x00,0x00,0x00,0x69,0x01,0x00,0x00,0x6d,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x6b,0x01,0x00,0x00, -0x86,0x00,0x00,0x00,0x6a,0x01,0x00,0x00,0x6c,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x6e,0x01,0x00,0x00, -0x08,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x6f,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x6d,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x72,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x6d,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x8d,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x8e,0x01,0x00,0x00, -0xc4,0x00,0x00,0x00,0x8d,0x01,0x00,0x00,0x20,0x00,0x04,0x00, -0x8f,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x8e,0x01,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x9f,0x01,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xba,0x01,0x00,0x00, -0x84,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0xbc,0x00,0x00,0x00, -0x1c,0x00,0x04,0x00,0xbb,0x01,0x00,0x00,0xc4,0x00,0x00,0x00, -0xba,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0xbc,0x01,0x00,0x00, -0x07,0x00,0x00,0x00,0xbb,0x01,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xc5,0x01,0x00,0x00,0x86,0x00,0x00,0x00, -0xb9,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xcd,0x01,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xfc,0x01,0x00,0x00,0x84,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x2f,0x02,0x00,0x00,0x0d,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x37,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x7d,0x02,0x00,0x00, -0xc4,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x7e,0x02,0x00,0x00, -0x7d,0x02,0x00,0x00,0x20,0x00,0x04,0x00,0x7f,0x02,0x00,0x00, -0x0c,0x00,0x00,0x00,0x7e,0x02,0x00,0x00,0x3b,0x00,0x04,0x00, -0x7f,0x02,0x00,0x00,0x80,0x02,0x00,0x00,0x0c,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x85,0x02,0x00,0x00, -0x05,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x92,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0xc9,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x8f,0x01,0x00,0x00,0x90,0x01,0x00,0x00, -0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xbc,0x01,0x00,0x00, -0xbd,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x17,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x17,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x1e,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x17,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x27,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x29,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x1e,0x00,0x00,0x00, -0x29,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x2e,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x2d,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x2f,0x00,0x00,0x00, -0x2e,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x30,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x2f,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x30,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x34,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x36,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x36,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x3a,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00, -0x3a,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x3b,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x47,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x3b,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x49,0x00,0x00,0x00, -0x3d,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x49,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x4d,0x00,0x00,0x00, -0x4c,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x4d,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x50,0x00,0x00,0x00, -0x54,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x59,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x58,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5d,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x5d,0x00,0x00,0x00, -0x63,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x68,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,0x67,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6f,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x73,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x79,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x78,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7e,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x81,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x83,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x47,0x00,0x00,0x00, -0x83,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x87,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x88,0x00,0x00,0x00, -0x87,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x8a,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8d,0x00,0x00,0x00, -0x8a,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x0c,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x26,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x8d,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x92,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x92,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x94,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x42,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x98,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x97,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x99,0x00,0x00,0x00, -0x98,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9a,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x99,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9b,0x00,0x00,0x00, -0x94,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,0x9b,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9e,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,0x6d,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0xa3,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0xa3,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa5,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x4a,0x00,0x00,0x00, -0xa7,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0xaa,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0xa9,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xab,0x00,0x00,0x00, -0xaa,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xac,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0xab,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xad,0x00,0x00,0x00, -0xa5,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0xad,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xb0,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0x6d,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xb2,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xa4,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0x05,0x00,0x00,0x00, -0xd1,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0xa4,0x02,0x00,0x00, -0xc1,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xb4,0x00,0x00,0x00, -0xb3,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xc3,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0xb4,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xb3,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0xcd,0x00,0x00,0x00,0xce,0x00,0x00,0x00,0xca,0x00,0x00,0x00, -0xa4,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0xce,0x00,0x00,0x00, -0xcc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd1,0x00,0x00,0x00,0xa4,0x02,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xb4,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd4,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xd4,0x00,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xbd,0x02,0x00,0x00,0xb0,0x00,0x00,0x00, -0xb4,0x00,0x00,0x00,0x74,0x01,0x00,0x00,0xd7,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xb9,0x02,0x00,0x00, -0x9e,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0x71,0x01,0x00,0x00, -0xd7,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xa5,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0xb4,0x00,0x00,0x00, -0x1f,0x02,0x00,0x00,0xd7,0x00,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,0xa5,0x02,0x00,0x00, -0x8e,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xd6,0x00,0x00,0x00, -0xd7,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xdb,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0xd6,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xd5,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdd,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xb5,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0x28,0x01,0x00,0x00, -0xde,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0xe3,0x00,0x00,0x00,0xb5,0x02,0x00,0x00,0x37,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xdf,0x00,0x00,0x00,0xde,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xe3,0x00,0x00,0x00, -0xde,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xde,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xe8,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0xb5,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xeb,0x00,0x00,0x00, -0xe8,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xec,0x00,0x00,0x00,0xeb,0x00,0x00,0x00, -0x6d,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xed,0x00,0x00,0x00,0xb9,0x02,0x00,0x00,0xec,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xef,0x00,0x00,0x00, -0xed,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,0xe8,0x00,0x00,0x00, -0xf4,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xf7,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x6d,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf8,0x00,0x00,0x00, -0xf5,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,0x41,0x00,0x07,0x00, -0x06,0x01,0x00,0x00,0x07,0x01,0x00,0x00,0x04,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xef,0x00,0x00,0x00,0x3e,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0xff,0x00,0x00,0x00,0x08,0x01,0x00,0x00, -0x07,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0x09,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x0a,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,0xfd,0x00,0x00,0x00, -0xf8,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0x0b,0x01,0x00,0x00, -0x09,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x0d,0x01,0x00,0x00,0xf8,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x41,0x00,0x07,0x00,0x06,0x01,0x00,0x00,0x0f,0x01,0x00,0x00, -0x04,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0xef,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xff,0x00,0x00,0x00, -0x10,0x01,0x00,0x00,0x0f,0x01,0x00,0x00,0x73,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0x11,0x01,0x00,0x00,0x10,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x0a,0x01,0x00,0x00,0x12,0x01,0x00,0x00, -0xfd,0x00,0x00,0x00,0x0d,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0x12,0x01,0x00,0x00,0x11,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x14,0x01,0x00,0x00,0xf8,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x41,0x00,0x07,0x00,0x06,0x01,0x00,0x00, -0x16,0x01,0x00,0x00,0x04,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0xef,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0xff,0x00,0x00,0x00,0x17,0x01,0x00,0x00,0x16,0x01,0x00,0x00, -0x73,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x18,0x01,0x00,0x00, -0x17,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x0a,0x01,0x00,0x00, -0x19,0x01,0x00,0x00,0xfd,0x00,0x00,0x00,0x14,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0x19,0x01,0x00,0x00,0x18,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1c,0x01,0x00,0x00, -0xf8,0x00,0x00,0x00,0x1b,0x01,0x00,0x00,0x41,0x00,0x07,0x00, -0x06,0x01,0x00,0x00,0x1e,0x01,0x00,0x00,0x04,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xef,0x00,0x00,0x00,0x1b,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0xff,0x00,0x00,0x00,0x1f,0x01,0x00,0x00, -0x1e,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0x20,0x01,0x00,0x00,0x1f,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x0a,0x01,0x00,0x00,0x21,0x01,0x00,0x00,0xfd,0x00,0x00,0x00, -0x1c,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x21,0x01,0x00,0x00, -0x20,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x28,0x01,0x00,0x00,0xb5,0x02,0x00,0x00,0x26,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xdf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x2a,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x2a,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xb6,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0xdf,0x00,0x00,0x00,0x6d,0x01,0x00,0x00,0x2b,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x30,0x01,0x00,0x00, -0xb6,0x02,0x00,0x00,0xa7,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x2c,0x01,0x00,0x00,0x2b,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x30,0x01,0x00,0x00,0x2b,0x01,0x00,0x00, -0x2c,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x2b,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x35,0x01,0x00,0x00, -0x7e,0x00,0x00,0x00,0xb6,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x38,0x01,0x00,0x00,0x35,0x01,0x00,0x00, -0xab,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x39,0x01,0x00,0x00,0x38,0x01,0x00,0x00,0x6d,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3a,0x01,0x00,0x00, -0xbd,0x02,0x00,0x00,0x39,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3c,0x01,0x00,0x00,0x3a,0x01,0x00,0x00, -0x79,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x42,0x01,0x00,0x00,0x35,0x01,0x00,0x00,0x41,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x44,0x01,0x00,0x00, -0x79,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x45,0x01,0x00,0x00,0x42,0x01,0x00,0x00, -0x44,0x01,0x00,0x00,0x41,0x00,0x07,0x00,0x53,0x01,0x00,0x00, -0x54,0x01,0x00,0x00,0x51,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0x3c,0x01,0x00,0x00,0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0x55,0x01,0x00,0x00,0x54,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x0a,0x01,0x00,0x00,0x56,0x01,0x00,0x00, -0x4a,0x01,0x00,0x00,0x45,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0x56,0x01,0x00,0x00,0x55,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x58,0x01,0x00,0x00,0x45,0x01,0x00,0x00, -0x39,0x00,0x00,0x00,0x41,0x00,0x07,0x00,0x53,0x01,0x00,0x00, -0x5a,0x01,0x00,0x00,0x51,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0x3c,0x01,0x00,0x00,0x39,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0x5b,0x01,0x00,0x00,0x5a,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x0a,0x01,0x00,0x00,0x5c,0x01,0x00,0x00, -0x4a,0x01,0x00,0x00,0x58,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0x5c,0x01,0x00,0x00,0x5b,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x5e,0x01,0x00,0x00,0x45,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x41,0x00,0x07,0x00,0x53,0x01,0x00,0x00, -0x60,0x01,0x00,0x00,0x51,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0x3c,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0x61,0x01,0x00,0x00,0x60,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x0a,0x01,0x00,0x00,0x62,0x01,0x00,0x00, -0x4a,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0x62,0x01,0x00,0x00,0x61,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x64,0x01,0x00,0x00,0x45,0x01,0x00,0x00, -0x1b,0x01,0x00,0x00,0x41,0x00,0x07,0x00,0x53,0x01,0x00,0x00, -0x66,0x01,0x00,0x00,0x51,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0x3c,0x01,0x00,0x00,0x1b,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0x67,0x01,0x00,0x00,0x66,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x0a,0x01,0x00,0x00,0x68,0x01,0x00,0x00, -0x4a,0x01,0x00,0x00,0x64,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0x68,0x01,0x00,0x00,0x67,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x6d,0x01,0x00,0x00,0xb6,0x02,0x00,0x00, -0x6b,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x2a,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x2c,0x01,0x00,0x00,0xe0,0x00,0x04,0x00, -0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x6e,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x71,0x01,0x00,0x00, -0xb9,0x02,0x00,0x00,0x6f,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x74,0x01,0x00,0x00,0xbd,0x02,0x00,0x00, -0x72,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x76,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x76,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xbf,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0x2c,0x01,0x00,0x00,0x1d,0x02,0x00,0x00,0x79,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x7c,0x01,0x00,0x00, -0xbf,0x02,0x00,0x00,0x6c,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x78,0x01,0x00,0x00,0x79,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x7c,0x01,0x00,0x00,0x77,0x01,0x00,0x00, -0x78,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x77,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0x7e,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x7e,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xc3,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0x77,0x01,0x00,0x00, -0xa9,0x01,0x00,0x00,0x81,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0x84,0x01,0x00,0x00,0xc3,0x02,0x00,0x00, -0x60,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x80,0x01,0x00,0x00, -0x81,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x84,0x01,0x00,0x00,0x7f,0x01,0x00,0x00,0x80,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x7f,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0x86,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x86,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xd5,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0x7f,0x01,0x00,0x00,0xa7,0x01,0x00,0x00, -0x87,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0x8c,0x01,0x00,0x00,0xd5,0x02,0x00,0x00,0x62,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x88,0x01,0x00,0x00,0x87,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x8c,0x01,0x00,0x00, -0x87,0x01,0x00,0x00,0x88,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x87,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x92,0x01,0x00,0x00,0xc3,0x02,0x00,0x00,0x62,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x94,0x01,0x00,0x00, -0x92,0x01,0x00,0x00,0xd5,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x96,0x01,0x00,0x00,0x55,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x98,0x01,0x00,0x00,0xc3,0x02,0x00,0x00,0x61,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x99,0x01,0x00,0x00, -0x96,0x01,0x00,0x00,0x98,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9b,0x01,0x00,0x00,0x64,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9c,0x01,0x00,0x00,0x99,0x01,0x00,0x00,0x9b,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9e,0x01,0x00,0x00, -0x9c,0x01,0x00,0x00,0xd5,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa0,0x01,0x00,0x00,0x9e,0x01,0x00,0x00, -0x9f,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa2,0x01,0x00,0x00,0xa0,0x01,0x00,0x00,0xbf,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0x0a,0x01,0x00,0x00,0xa3,0x01,0x00,0x00, -0xfd,0x00,0x00,0x00,0xa2,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0xa4,0x01,0x00,0x00,0xa3,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,0xa5,0x01,0x00,0x00, -0x90,0x01,0x00,0x00,0x94,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0xa5,0x01,0x00,0x00,0xa4,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa7,0x01,0x00,0x00,0xd5,0x02,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x86,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x88,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0x81,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x81,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa9,0x01,0x00,0x00, -0xc3,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x7e,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x80,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xab,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xab,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xc4,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0x80,0x01,0x00,0x00, -0xd7,0x01,0x00,0x00,0xae,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0xb1,0x01,0x00,0x00,0xc4,0x02,0x00,0x00, -0xbf,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xad,0x01,0x00,0x00, -0xae,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xb1,0x01,0x00,0x00,0xac,0x01,0x00,0x00,0xad,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xac,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xb3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xb3,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xd2,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0xac,0x01,0x00,0x00,0xd5,0x01,0x00,0x00, -0xb4,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0xb9,0x01,0x00,0x00,0xd2,0x02,0x00,0x00,0xbc,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xb5,0x01,0x00,0x00,0xb4,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xb9,0x01,0x00,0x00, -0xb4,0x01,0x00,0x00,0xb5,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xb4,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xbf,0x01,0x00,0x00,0xc4,0x02,0x00,0x00,0xbc,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc1,0x01,0x00,0x00, -0xbf,0x01,0x00,0x00,0xd2,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xc3,0x01,0x00,0x00,0x59,0x00,0x00,0x00, -0xb9,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xc6,0x01,0x00,0x00,0xc4,0x02,0x00,0x00,0xc5,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc7,0x01,0x00,0x00, -0xc3,0x01,0x00,0x00,0xc6,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xc9,0x01,0x00,0x00,0x68,0x00,0x00,0x00, -0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xca,0x01,0x00,0x00,0xc7,0x01,0x00,0x00,0xc9,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xcc,0x01,0x00,0x00, -0xca,0x01,0x00,0x00,0xd2,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xce,0x01,0x00,0x00,0xcc,0x01,0x00,0x00, -0xcd,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd0,0x01,0x00,0x00,0xce,0x01,0x00,0x00,0xbf,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0x0a,0x01,0x00,0x00,0xd1,0x01,0x00,0x00, -0x4a,0x01,0x00,0x00,0xd0,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0xd2,0x01,0x00,0x00,0xd1,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,0xd3,0x01,0x00,0x00, -0xbd,0x01,0x00,0x00,0xc1,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0xd3,0x01,0x00,0x00,0xd2,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xd5,0x01,0x00,0x00,0xd2,0x02,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb3,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xb5,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xae,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xae,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd7,0x01,0x00,0x00, -0xc4,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xab,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xad,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xd9,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xd9,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xc5,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0xad,0x01,0x00,0x00, -0x1b,0x02,0x00,0x00,0xdc,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0xdf,0x01,0x00,0x00,0xc5,0x02,0x00,0x00, -0xbf,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xdb,0x01,0x00,0x00, -0xdc,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xdf,0x01,0x00,0x00,0xda,0x01,0x00,0x00,0xdb,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xda,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xe1,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xe1,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xc9,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0xda,0x01,0x00,0x00,0x19,0x02,0x00,0x00, -0xe4,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0xe7,0x01,0x00,0x00,0xc9,0x02,0x00,0x00,0x60,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xe3,0x01,0x00,0x00,0xe4,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xe7,0x01,0x00,0x00, -0xe2,0x01,0x00,0x00,0xe3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xe2,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xe9,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xe9,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xcb,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0xe2,0x01,0x00,0x00,0x17,0x02,0x00,0x00,0xec,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xef,0x01,0x00,0x00, -0xcb,0x02,0x00,0x00,0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xeb,0x01,0x00,0x00,0xec,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xef,0x01,0x00,0x00,0xea,0x01,0x00,0x00, -0xeb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xea,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xf1,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xf1,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xcd,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0xea,0x01,0x00,0x00, -0x15,0x02,0x00,0x00,0xf2,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0xf7,0x01,0x00,0x00,0xcd,0x02,0x00,0x00, -0x62,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xf3,0x01,0x00,0x00, -0xf2,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xf7,0x01,0x00,0x00,0xf2,0x01,0x00,0x00,0xf3,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xf2,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xf9,0x01,0x00,0x00,0xc5,0x02,0x00,0x00, -0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xfb,0x01,0x00,0x00,0xf9,0x01,0x00,0x00,0xcb,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfd,0x01,0x00,0x00, -0xfb,0x01,0x00,0x00,0xfc,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xff,0x01,0x00,0x00,0xc9,0x02,0x00,0x00, -0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x00,0x02,0x00,0x00,0xfd,0x01,0x00,0x00,0xff,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x02,0x02,0x00,0x00, -0x00,0x02,0x00,0x00,0xcd,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x06,0x02,0x00,0x00,0xff,0x01,0x00,0x00, -0xcd,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00, -0x07,0x02,0x00,0x00,0x90,0x01,0x00,0x00,0x06,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x08,0x02,0x00,0x00, -0x07,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00, -0x0d,0x02,0x00,0x00,0xbd,0x01,0x00,0x00,0xfb,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x0e,0x02,0x00,0x00, -0x0d,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00, -0x10,0x02,0x00,0x00,0xca,0x00,0x00,0x00,0x02,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x11,0x02,0x00,0x00, -0x10,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,0xc4,0x00,0x00,0x00, -0x12,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x08,0x02,0x00,0x00,0x0e,0x02,0x00,0x00,0x11,0x02,0x00,0x00, -0x3e,0x00,0x03,0x00,0x10,0x02,0x00,0x00,0x12,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x15,0x02,0x00,0x00, -0xcd,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xf1,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xf3,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xec,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xec,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x17,0x02,0x00,0x00,0xcb,0x02,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xe9,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xeb,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xe4,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xe4,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x19,0x02,0x00,0x00,0xc9,0x02,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xe1,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xe3,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xdc,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xdc,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1b,0x02,0x00,0x00, -0xc5,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xd9,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xdb,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0x79,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x79,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x1d,0x02,0x00,0x00,0xbf,0x02,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x76,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x78,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x6e,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xd7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd7,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1f,0x02,0x00,0x00, -0xa5,0x02,0x00,0x00,0x6c,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xd4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd6,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x24,0x02,0x00,0x00, -0x55,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x25,0x02,0x00,0x00,0x96,0x00,0x00,0x00, -0x24,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x2a,0x02,0x00,0x00,0x59,0x00,0x00,0x00,0xb9,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2b,0x02,0x00,0x00, -0xa8,0x00,0x00,0x00,0x2a,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x30,0x02,0x00,0x00,0x12,0x00,0x00,0x00, -0x2f,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x31,0x02,0x00,0x00,0x30,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x32,0x02,0x00,0x00,0x0f,0x00,0x00,0x00, -0x31,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x36,0x02,0x00,0x00,0x47,0x00,0x00,0x00,0x31,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x38,0x02,0x00,0x00, -0x37,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x39,0x02,0x00,0x00,0x38,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3a,0x02,0x00,0x00, -0x36,0x02,0x00,0x00,0x39,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3b,0x02,0x00,0x00,0x32,0x02,0x00,0x00, -0x3a,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x3d,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x3d,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xa6,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0xd6,0x00,0x00,0x00,0xa3,0x02,0x00,0x00,0x40,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x43,0x02,0x00,0x00, -0xa6,0x02,0x00,0x00,0xbf,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x3f,0x02,0x00,0x00,0x40,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x43,0x02,0x00,0x00,0x3e,0x02,0x00,0x00, -0x3f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x3e,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x45,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x45,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xa7,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0x3e,0x02,0x00,0x00, -0xa1,0x02,0x00,0x00,0x48,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0x4b,0x02,0x00,0x00,0xa7,0x02,0x00,0x00, -0x60,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x47,0x02,0x00,0x00, -0x48,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x4b,0x02,0x00,0x00,0x46,0x02,0x00,0x00,0x47,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x46,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x4f,0x02,0x00,0x00,0xa7,0x02,0x00,0x00, -0x61,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x50,0x02,0x00,0x00,0x25,0x02,0x00,0x00,0x4f,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x52,0x02,0x00,0x00, -0x64,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x53,0x02,0x00,0x00,0x50,0x02,0x00,0x00, -0x52,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x57,0x02,0x00,0x00,0xa6,0x02,0x00,0x00,0xc5,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x58,0x02,0x00,0x00, -0x2b,0x02,0x00,0x00,0x57,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x5a,0x02,0x00,0x00,0x68,0x00,0x00,0x00, -0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x5b,0x02,0x00,0x00,0x58,0x02,0x00,0x00,0x5a,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x5d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x5d,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xa9,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0x46,0x02,0x00,0x00, -0x9f,0x02,0x00,0x00,0x60,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0x63,0x02,0x00,0x00,0xa9,0x02,0x00,0x00, -0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x5f,0x02,0x00,0x00, -0x60,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x63,0x02,0x00,0x00,0x5e,0x02,0x00,0x00,0x5f,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x5e,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x65,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x65,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xab,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0x5e,0x02,0x00,0x00,0x9d,0x02,0x00,0x00, -0x68,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0x6b,0x02,0x00,0x00,0xab,0x02,0x00,0x00,0x62,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x67,0x02,0x00,0x00,0x68,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x6b,0x02,0x00,0x00, -0x66,0x02,0x00,0x00,0x67,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x66,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x6e,0x02,0x00,0x00,0x53,0x02,0x00,0x00,0xab,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x71,0x02,0x00,0x00, -0x6e,0x02,0x00,0x00,0x36,0x00,0x00,0x00,0xf7,0x00,0x03,0x00, -0x73,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x71,0x02,0x00,0x00,0x72,0x02,0x00,0x00,0x73,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x72,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x76,0x02,0x00,0x00,0x5b,0x02,0x00,0x00, -0xa9,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x77,0x02,0x00,0x00,0x12,0x00,0x00,0x00,0xd0,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x78,0x02,0x00,0x00, -0x77,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0x79,0x02,0x00,0x00,0x76,0x02,0x00,0x00,0x78,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x73,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x73,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0xc2,0x00,0x00,0x00, -0x7a,0x02,0x00,0x00,0x71,0x02,0x00,0x00,0x66,0x02,0x00,0x00, -0x79,0x02,0x00,0x00,0x72,0x02,0x00,0x00,0xf7,0x00,0x03,0x00, -0x7c,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x7a,0x02,0x00,0x00,0x7b,0x02,0x00,0x00,0x7c,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x7b,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x84,0x02,0x00,0x00,0x5b,0x02,0x00,0x00, -0xa9,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x86,0x02,0x00,0x00,0x12,0x00,0x00,0x00,0x85,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x87,0x02,0x00,0x00, -0x86,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x88,0x02,0x00,0x00,0x84,0x02,0x00,0x00,0x87,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x89,0x02,0x00,0x00, -0x3b,0x02,0x00,0x00,0x88,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x8b,0x02,0x00,0x00,0x89,0x02,0x00,0x00, -0x53,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x8d,0x02,0x00,0x00,0x8b,0x02,0x00,0x00,0xab,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8f,0x02,0x00,0x00, -0xa6,0x02,0x00,0x00,0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x91,0x02,0x00,0x00,0x8f,0x02,0x00,0x00, -0xa9,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x93,0x02,0x00,0x00,0x91,0x02,0x00,0x00,0x92,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x95,0x02,0x00,0x00, -0xa7,0x02,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x96,0x02,0x00,0x00,0x93,0x02,0x00,0x00, -0x95,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x98,0x02,0x00,0x00,0x96,0x02,0x00,0x00,0xab,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,0x99,0x02,0x00,0x00, -0xca,0x00,0x00,0x00,0x98,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0x9a,0x02,0x00,0x00,0x99,0x02,0x00,0x00, -0x41,0x00,0x06,0x00,0x53,0x01,0x00,0x00,0x9b,0x02,0x00,0x00, -0x80,0x02,0x00,0x00,0x34,0x00,0x00,0x00,0x8d,0x02,0x00,0x00, -0x3e,0x00,0x03,0x00,0x9b,0x02,0x00,0x00,0x9a,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x7c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x7c,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x68,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x68,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9d,0x02,0x00,0x00,0xab,0x02,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x65,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x67,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x60,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x60,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9f,0x02,0x00,0x00, -0xa9,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x5d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x5f,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x48,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x48,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa1,0x02,0x00,0x00,0xa7,0x02,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x45,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x47,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x40,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x40,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa3,0x02,0x00,0x00,0xa6,0x02,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x3d,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x3f,0x02,0x00,0x00,0xfd,0x00,0x01,0x00, -0x38,0x00,0x01,0x00, -}; -const uint64_t matmul_f16_f32_aligned_fp32_len = 10240; - -unsigned char matmul_f16_f32_fp32_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0xd6,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00, -0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c, -0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00, -0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x0f,0x00,0x0f,0x00,0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x4c,0x00,0x00,0x00, -0xfa,0x00,0x00,0x00,0x06,0x01,0x00,0x00,0x46,0x01,0x00,0x00, -0x51,0x01,0x00,0x00,0x37,0x02,0x00,0x00,0x80,0x02,0x00,0x00, -0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x0a,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x0d,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x10,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x37,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x3d,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x4c,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x4f,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x53,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x60,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x62,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x6c,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xa6,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xb8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x03,0x01,0x00,0x00, -0x06,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0x04,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x04,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x04,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x06,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x06,0x01,0x00,0x00,0x21,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x20,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x21,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x4e,0x01,0x00,0x00,0x06,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x4f,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x4f,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x4f,0x01,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x51,0x01,0x00,0x00, -0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x51,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x37,0x02,0x00,0x00,0x0b,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x7d,0x02,0x00,0x00, -0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0x7e,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x7e,0x02,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x7e,0x02,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x80,0x02,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x80,0x02,0x00,0x00,0x21,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00, -0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x1e,0x00,0x10,0x00,0x10,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x11,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x11,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x15,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0x0a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x27,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x3e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x61,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x63,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x61,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x67,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x61,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x72,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x85,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x90,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0xa1,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xa6,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xb7,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xb9,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0xb8,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xba,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x4f,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xbb,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xba,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xbc,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0xb9,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xb7,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xbf,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x14,0x00,0x02,0x00, -0xc1,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0xc3,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xc4,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xc5,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc4,0x00,0x00,0x00, -0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xc6,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc5,0x00,0x00,0x00, -0xbb,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xc7,0x00,0x00,0x00, -0xc3,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0xc8,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xc7,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0xcb,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xcc,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xf6,0x00,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xf7,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0xf6,0x00,0x00,0x00, -0x1c,0x00,0x04,0x00,0xf8,0x00,0x00,0x00,0xc3,0x00,0x00,0x00, -0xf7,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xf9,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0xf9,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xfe,0x00,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x16,0x00,0x03,0x00,0x02,0x01,0x00,0x00,0x10,0x00,0x00,0x00, -0x1d,0x00,0x03,0x00,0x03,0x01,0x00,0x00,0x02,0x01,0x00,0x00, -0x1e,0x00,0x03,0x00,0x04,0x01,0x00,0x00,0x03,0x01,0x00,0x00, -0x20,0x00,0x04,0x00,0x05,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x04,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x05,0x01,0x00,0x00, -0x06,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x11,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x02,0x01,0x00,0x00, -0x20,0x00,0x04,0x00,0x15,0x01,0x00,0x00,0x04,0x00,0x00,0x00, -0xc3,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x1b,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x20,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00, -0x09,0x00,0x00,0x00,0x21,0x01,0x00,0x00,0x20,0x01,0x00,0x00, -0x39,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x22,0x01,0x00,0x00,0x51,0x00,0x00,0x00, -0x21,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x23,0x01,0x00,0x00,0x84,0x00,0x00,0x00, -0x22,0x01,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x24,0x01,0x00,0x00,0x86,0x00,0x00,0x00, -0x23,0x01,0x00,0x00,0x6c,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x42,0x01,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x43,0x01,0x00,0x00,0x84,0x00,0x00,0x00, -0xa6,0x00,0x00,0x00,0x42,0x01,0x00,0x00,0x1c,0x00,0x04,0x00, -0x44,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,0x43,0x01,0x00,0x00, -0x20,0x00,0x04,0x00,0x45,0x01,0x00,0x00,0x04,0x00,0x00,0x00, -0x44,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x45,0x01,0x00,0x00, -0x46,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x4a,0x01,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x1d,0x00,0x03,0x00, -0x4e,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,0x1e,0x00,0x03,0x00, -0x4f,0x01,0x00,0x00,0x4e,0x01,0x00,0x00,0x20,0x00,0x04,0x00, -0x50,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x4f,0x01,0x00,0x00, -0x3b,0x00,0x04,0x00,0x50,0x01,0x00,0x00,0x51,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x5c,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x64,0x01,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x69,0x01,0x00,0x00,0x51,0x00,0x00,0x00, -0x21,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x6a,0x01,0x00,0x00,0x84,0x00,0x00,0x00, -0x69,0x01,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x6b,0x01,0x00,0x00,0x86,0x00,0x00,0x00, -0x6a,0x01,0x00,0x00,0x6c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x6e,0x01,0x00,0x00,0x08,0x01,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x6f,0x01,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x72,0x01,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x8d,0x01,0x00,0x00, -0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x1c,0x00,0x04,0x00,0x8e,0x01,0x00,0x00,0xc3,0x00,0x00,0x00, -0x8d,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x8f,0x01,0x00,0x00, -0x07,0x00,0x00,0x00,0x8e,0x01,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x9f,0x01,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xba,0x01,0x00,0x00,0x84,0x00,0x00,0x00, -0xbe,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x1c,0x00,0x04,0x00, -0xbb,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,0xba,0x01,0x00,0x00, -0x20,0x00,0x04,0x00,0xbc,0x01,0x00,0x00,0x07,0x00,0x00,0x00, -0xbb,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xc5,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0xb8,0x00,0x00,0x00, -0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xcd,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xfc,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x2f,0x02,0x00,0x00,0x0d,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x37,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0x1d,0x00,0x03,0x00,0x7d,0x02,0x00,0x00,0xc3,0x00,0x00,0x00, -0x1e,0x00,0x03,0x00,0x7e,0x02,0x00,0x00,0x7d,0x02,0x00,0x00, -0x20,0x00,0x04,0x00,0x7f,0x02,0x00,0x00,0x0c,0x00,0x00,0x00, -0x7e,0x02,0x00,0x00,0x3b,0x00,0x04,0x00,0x7f,0x02,0x00,0x00, -0x80,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x85,0x02,0x00,0x00,0x05,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x92,0x02,0x00,0x00, -0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x05,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xc8,0x00,0x00,0x00, -0xc9,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x8f,0x01,0x00,0x00,0x90,0x01,0x00,0x00,0x07,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0xbc,0x01,0x00,0x00,0xbd,0x01,0x00,0x00, -0x07,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x16,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x17,0x00,0x00,0x00, -0x16,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x17,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1e,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x21,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x28,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x27,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x29,0x00,0x00,0x00, -0x28,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x2a,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x29,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x2e,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00, -0x24,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x30,0x00,0x00,0x00, -0x2a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x35,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x36,0x00,0x00,0x00, -0x35,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x38,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00, -0x38,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x3a,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x3f,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x3e,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x3f,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x42,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x3b,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x47,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x4a,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x4c,0x00,0x00,0x00, -0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x4f,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x55,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x54,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00, -0x50,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x4f,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x64,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,0x63,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x68,0x00,0x00,0x00, -0x5d,0x00,0x00,0x00,0x67,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x6d,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x73,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x72,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x78,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x7c,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x81,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x80,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x82,0x00,0x00,0x00, -0x81,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x83,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0x82,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x89,0x00,0x00,0x00, -0x47,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,0x89,0x00,0x00,0x00, -0x82,0x00,0x00,0x00,0x0c,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x8d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x26,0x00,0x00,0x00, -0x87,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x90,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x92,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x92,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x95,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x97,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x97,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x99,0x00,0x00,0x00, -0x95,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x93,0x00,0x00,0x00, -0x99,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9c,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x83,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9d,0x00,0x00,0x00, -0x9c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0xa1,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xa3,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0xa3,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa7,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0xa6,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0xa9,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0xa9,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xab,0x00,0x00,0x00, -0xa7,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0xa4,0x00,0x00,0x00, -0xab,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xae,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0x83,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xaf,0x00,0x00,0x00, -0xae,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xb1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb1,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xa4,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0xd0,0x00,0x00,0x00, -0xb2,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0xc2,0x00,0x00,0x00,0xa4,0x02,0x00,0x00,0xc0,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xb3,0x00,0x00,0x00,0xb2,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xc2,0x00,0x00,0x00, -0xb2,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xb2,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00, -0xcd,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0xa4,0x02,0x00,0x00, -0x3e,0x00,0x03,0x00,0xcd,0x00,0x00,0x00,0xcb,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd0,0x00,0x00,0x00, -0xa4,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xb1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb3,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xd3,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xd3,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xbd,0x02,0x00,0x00,0xaf,0x00,0x00,0x00,0xb3,0x00,0x00,0x00, -0x74,0x01,0x00,0x00,0xd6,0x00,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xb9,0x02,0x00,0x00,0x9d,0x00,0x00,0x00, -0xb3,0x00,0x00,0x00,0x71,0x01,0x00,0x00,0xd6,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xa5,0x02,0x00,0x00, -0x83,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0x1f,0x02,0x00,0x00, -0xd6,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0xda,0x00,0x00,0x00,0xa5,0x02,0x00,0x00,0x8d,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xd5,0x00,0x00,0x00,0xd6,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xda,0x00,0x00,0x00, -0xd4,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xd4,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xdc,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xdc,0x00,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xb5,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0xd4,0x00,0x00,0x00,0x26,0x01,0x00,0x00,0xdf,0x00,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xe2,0x00,0x00,0x00, -0xb5,0x02,0x00,0x00,0x37,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xde,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xe2,0x00,0x00,0x00,0xdd,0x00,0x00,0x00, -0xde,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdd,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe6,0x00,0x00,0x00, -0x95,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0xe6,0x00,0x00,0x00, -0xb5,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0xeb,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0x36,0x00,0x00,0x00, -0xf7,0x00,0x03,0x00,0xed,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xeb,0x00,0x00,0x00,0xec,0x00,0x00,0x00, -0xed,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xec,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf0,0x00,0x00,0x00, -0xa5,0x02,0x00,0x00,0x6e,0x00,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,0xf0,0x00,0x00,0x00, -0x8d,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xed,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xed,0x00,0x00,0x00,0xf5,0x00,0x07,0x00, -0xc1,0x00,0x00,0x00,0xf3,0x00,0x00,0x00,0xeb,0x00,0x00,0x00, -0xdd,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,0xec,0x00,0x00,0x00, -0xf7,0x00,0x03,0x00,0xf5,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xf3,0x00,0x00,0x00,0xf4,0x00,0x00,0x00, -0x17,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xf4,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfd,0x00,0x00,0x00, -0x73,0x00,0x00,0x00,0xb5,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xfd,0x00,0x00,0x00, -0xfe,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x01,0x01,0x00,0x00,0xff,0x00,0x00,0x00,0x6e,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0d,0x01,0x00,0x00, -0xfd,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x0e,0x01,0x00,0x00,0xb9,0x02,0x00,0x00, -0x0d,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x10,0x01,0x00,0x00,0x0e,0x01,0x00,0x00,0x6e,0x00,0x00,0x00, -0x41,0x00,0x06,0x00,0x11,0x01,0x00,0x00,0x12,0x01,0x00,0x00, -0x06,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0x10,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0x02,0x01,0x00,0x00,0x13,0x01,0x00,0x00, -0x12,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0xc3,0x00,0x00,0x00, -0x14,0x01,0x00,0x00,0x13,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x01,0x00,0x00,0x16,0x01,0x00,0x00,0xfa,0x00,0x00,0x00, -0x01,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x16,0x01,0x00,0x00, -0x14,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xf5,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x17,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x1a,0x01,0x00,0x00,0x73,0x00,0x00,0x00, -0xb5,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x1c,0x01,0x00,0x00,0x1a,0x01,0x00,0x00,0x1b,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1e,0x01,0x00,0x00, -0x1c,0x01,0x00,0x00,0x6e,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x01,0x00,0x00,0x1f,0x01,0x00,0x00,0xfa,0x00,0x00,0x00, -0x1e,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x1f,0x01,0x00,0x00, -0xcb,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xf5,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xf5,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xdf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdf,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x26,0x01,0x00,0x00, -0xb5,0x02,0x00,0x00,0x24,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xdc,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x28,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x28,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xb6,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0xde,0x00,0x00,0x00, -0x6d,0x01,0x00,0x00,0x2b,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0x2e,0x01,0x00,0x00,0xb6,0x02,0x00,0x00, -0xa6,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x2a,0x01,0x00,0x00, -0x2b,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x2e,0x01,0x00,0x00,0x29,0x01,0x00,0x00,0x2a,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x29,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x32,0x01,0x00,0x00,0xa7,0x00,0x00,0x00, -0x7d,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x34,0x01,0x00,0x00,0x32,0x01,0x00,0x00,0xb6,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x35,0x01,0x00,0x00, -0x12,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x36,0x01,0x00,0x00,0x35,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x37,0x01,0x00,0x00, -0x34,0x01,0x00,0x00,0x36,0x01,0x00,0x00,0xf7,0x00,0x03,0x00, -0x39,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x37,0x01,0x00,0x00,0x38,0x01,0x00,0x00,0x39,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x38,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3c,0x01,0x00,0x00,0xa5,0x02,0x00,0x00, -0x78,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0x3e,0x01,0x00,0x00,0x3c,0x01,0x00,0x00,0x8d,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x39,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x39,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0xc1,0x00,0x00,0x00, -0x3f,0x01,0x00,0x00,0x37,0x01,0x00,0x00,0x29,0x01,0x00,0x00, -0x3e,0x01,0x00,0x00,0x38,0x01,0x00,0x00,0xf7,0x00,0x03,0x00, -0x41,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x3f,0x01,0x00,0x00,0x40,0x01,0x00,0x00,0x60,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x40,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x49,0x01,0x00,0x00,0x7d,0x00,0x00,0x00, -0xb6,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x4b,0x01,0x00,0x00,0x49,0x01,0x00,0x00,0x4a,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4d,0x01,0x00,0x00, -0x4b,0x01,0x00,0x00,0x78,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x58,0x01,0x00,0x00,0x49,0x01,0x00,0x00, -0xaa,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x59,0x01,0x00,0x00,0xbd,0x02,0x00,0x00,0x58,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5b,0x01,0x00,0x00, -0x59,0x01,0x00,0x00,0x78,0x00,0x00,0x00,0x41,0x00,0x06,0x00, -0x5c,0x01,0x00,0x00,0x5d,0x01,0x00,0x00,0x51,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0x5b,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc3,0x00,0x00,0x00,0x5e,0x01,0x00,0x00,0x5d,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x01,0x00,0x00,0x5f,0x01,0x00,0x00, -0x46,0x01,0x00,0x00,0x4d,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0x5f,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0x41,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x60,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x63,0x01,0x00,0x00, -0x7d,0x00,0x00,0x00,0xb6,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x65,0x01,0x00,0x00,0x63,0x01,0x00,0x00, -0x64,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x67,0x01,0x00,0x00,0x65,0x01,0x00,0x00,0x78,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x01,0x00,0x00,0x68,0x01,0x00,0x00, -0x46,0x01,0x00,0x00,0x67,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0x68,0x01,0x00,0x00,0xcb,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x41,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x41,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0x2b,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x2b,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x6d,0x01,0x00,0x00,0xb6,0x02,0x00,0x00,0x6b,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0x28,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x2a,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x6e,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x71,0x01,0x00,0x00,0xb9,0x02,0x00,0x00, -0x6f,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x74,0x01,0x00,0x00,0xbd,0x02,0x00,0x00,0x72,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0x76,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x76,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xbf,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0x2a,0x01,0x00,0x00, -0x1d,0x02,0x00,0x00,0x79,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0x7c,0x01,0x00,0x00,0xbf,0x02,0x00,0x00, -0x6c,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x78,0x01,0x00,0x00, -0x79,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x7c,0x01,0x00,0x00,0x77,0x01,0x00,0x00,0x78,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x77,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0x7e,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x7e,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xc3,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0x77,0x01,0x00,0x00,0xa9,0x01,0x00,0x00, -0x81,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0x84,0x01,0x00,0x00,0xc3,0x02,0x00,0x00,0x60,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x80,0x01,0x00,0x00,0x81,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x84,0x01,0x00,0x00, -0x7f,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x7f,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x86,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x86,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xd5,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0x7f,0x01,0x00,0x00,0xa7,0x01,0x00,0x00,0x87,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x8c,0x01,0x00,0x00, -0xd5,0x02,0x00,0x00,0x62,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x88,0x01,0x00,0x00,0x87,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x8c,0x01,0x00,0x00,0x87,0x01,0x00,0x00, -0x88,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x87,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x92,0x01,0x00,0x00, -0xc3,0x02,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x94,0x01,0x00,0x00,0x92,0x01,0x00,0x00, -0xd5,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x96,0x01,0x00,0x00,0x55,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x98,0x01,0x00,0x00, -0xc3,0x02,0x00,0x00,0x61,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x99,0x01,0x00,0x00,0x96,0x01,0x00,0x00, -0x98,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9b,0x01,0x00,0x00,0x64,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9c,0x01,0x00,0x00, -0x99,0x01,0x00,0x00,0x9b,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9e,0x01,0x00,0x00,0x9c,0x01,0x00,0x00, -0xd5,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa0,0x01,0x00,0x00,0x9e,0x01,0x00,0x00,0x9f,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa2,0x01,0x00,0x00, -0xa0,0x01,0x00,0x00,0xbf,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x01,0x00,0x00,0xa3,0x01,0x00,0x00,0xfa,0x00,0x00,0x00, -0xa2,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00, -0xa4,0x01,0x00,0x00,0xa3,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0xcc,0x00,0x00,0x00,0xa5,0x01,0x00,0x00,0x90,0x01,0x00,0x00, -0x94,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xa5,0x01,0x00,0x00, -0xa4,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa7,0x01,0x00,0x00,0xd5,0x02,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x86,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x88,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x81,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x81,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa9,0x01,0x00,0x00,0xc3,0x02,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x7e,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x80,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xab,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xab,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xc4,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0xd7,0x01,0x00,0x00, -0xae,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0xb1,0x01,0x00,0x00,0xc4,0x02,0x00,0x00,0xbe,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xad,0x01,0x00,0x00,0xae,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xb1,0x01,0x00,0x00, -0xac,0x01,0x00,0x00,0xad,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xac,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xb3,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xb3,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xd2,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0xac,0x01,0x00,0x00,0xd5,0x01,0x00,0x00,0xb4,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xb9,0x01,0x00,0x00, -0xd2,0x02,0x00,0x00,0xbb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xb5,0x01,0x00,0x00,0xb4,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xb9,0x01,0x00,0x00,0xb4,0x01,0x00,0x00, -0xb5,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xb4,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbf,0x01,0x00,0x00, -0xc4,0x02,0x00,0x00,0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xc1,0x01,0x00,0x00,0xbf,0x01,0x00,0x00, -0xd2,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xc3,0x01,0x00,0x00,0x59,0x00,0x00,0x00,0xb8,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc6,0x01,0x00,0x00, -0xc4,0x02,0x00,0x00,0xc5,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xc7,0x01,0x00,0x00,0xc3,0x01,0x00,0x00, -0xc6,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xc9,0x01,0x00,0x00,0x68,0x00,0x00,0x00,0xbb,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xca,0x01,0x00,0x00, -0xc7,0x01,0x00,0x00,0xc9,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xcc,0x01,0x00,0x00,0xca,0x01,0x00,0x00, -0xd2,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xce,0x01,0x00,0x00,0xcc,0x01,0x00,0x00,0xcd,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd0,0x01,0x00,0x00, -0xce,0x01,0x00,0x00,0xbf,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x01,0x00,0x00,0xd1,0x01,0x00,0x00,0x46,0x01,0x00,0x00, -0xd0,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00, -0xd2,0x01,0x00,0x00,0xd1,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0xcc,0x00,0x00,0x00,0xd3,0x01,0x00,0x00,0xbd,0x01,0x00,0x00, -0xc1,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xd3,0x01,0x00,0x00, -0xd2,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd5,0x01,0x00,0x00,0xd2,0x02,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xb3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xb5,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xae,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xae,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xd7,0x01,0x00,0x00,0xc4,0x02,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xab,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xad,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xd9,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xd9,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xc5,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0xad,0x01,0x00,0x00,0x1b,0x02,0x00,0x00, -0xdc,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0xdf,0x01,0x00,0x00,0xc5,0x02,0x00,0x00,0xbe,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xdb,0x01,0x00,0x00,0xdc,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xdf,0x01,0x00,0x00, -0xda,0x01,0x00,0x00,0xdb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xda,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xe1,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xe1,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xc9,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0xda,0x01,0x00,0x00,0x19,0x02,0x00,0x00,0xe4,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xe7,0x01,0x00,0x00, -0xc9,0x02,0x00,0x00,0x60,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xe3,0x01,0x00,0x00,0xe4,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xe7,0x01,0x00,0x00,0xe2,0x01,0x00,0x00, -0xe3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xe2,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xe9,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xe9,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xcb,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0xe2,0x01,0x00,0x00, -0x17,0x02,0x00,0x00,0xec,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0xef,0x01,0x00,0x00,0xcb,0x02,0x00,0x00, -0xbb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xeb,0x01,0x00,0x00, -0xec,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xef,0x01,0x00,0x00,0xea,0x01,0x00,0x00,0xeb,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xea,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xf1,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xf1,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xcd,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0xea,0x01,0x00,0x00,0x15,0x02,0x00,0x00, -0xf2,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0xf7,0x01,0x00,0x00,0xcd,0x02,0x00,0x00,0x62,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xf3,0x01,0x00,0x00,0xf2,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xf7,0x01,0x00,0x00, -0xf2,0x01,0x00,0x00,0xf3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xf2,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xf9,0x01,0x00,0x00,0xc5,0x02,0x00,0x00,0xbb,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfb,0x01,0x00,0x00, -0xf9,0x01,0x00,0x00,0xcb,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xfd,0x01,0x00,0x00,0xfb,0x01,0x00,0x00, -0xfc,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xff,0x01,0x00,0x00,0xc9,0x02,0x00,0x00,0x62,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x00,0x02,0x00,0x00, -0xfd,0x01,0x00,0x00,0xff,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x02,0x02,0x00,0x00,0x00,0x02,0x00,0x00, -0xcd,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x06,0x02,0x00,0x00,0xff,0x01,0x00,0x00,0xcd,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,0x07,0x02,0x00,0x00, -0x90,0x01,0x00,0x00,0x06,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc3,0x00,0x00,0x00,0x08,0x02,0x00,0x00,0x07,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,0x0d,0x02,0x00,0x00, -0xbd,0x01,0x00,0x00,0xfb,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc3,0x00,0x00,0x00,0x0e,0x02,0x00,0x00,0x0d,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,0x10,0x02,0x00,0x00, -0xc9,0x00,0x00,0x00,0x02,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc3,0x00,0x00,0x00,0x11,0x02,0x00,0x00,0x10,0x02,0x00,0x00, -0x0c,0x00,0x08,0x00,0xc3,0x00,0x00,0x00,0x12,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x08,0x02,0x00,0x00, -0x0e,0x02,0x00,0x00,0x11,0x02,0x00,0x00,0x3e,0x00,0x03,0x00, -0x10,0x02,0x00,0x00,0x12,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x15,0x02,0x00,0x00,0xcd,0x02,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xf1,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xf3,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xec,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xec,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x17,0x02,0x00,0x00, -0xcb,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xe9,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xeb,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xe4,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xe4,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x19,0x02,0x00,0x00,0xc9,0x02,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xe1,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xe3,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xdc,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xdc,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x1b,0x02,0x00,0x00,0xc5,0x02,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd9,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xdb,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0x79,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x79,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1d,0x02,0x00,0x00, -0xbf,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x76,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x78,0x01,0x00,0x00, -0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x6e,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xd6,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xd6,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x1f,0x02,0x00,0x00,0xa5,0x02,0x00,0x00, -0x6c,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd3,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xd5,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x24,0x02,0x00,0x00,0x55,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x25,0x02,0x00,0x00,0x95,0x00,0x00,0x00,0x24,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2a,0x02,0x00,0x00, -0x59,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x2b,0x02,0x00,0x00,0xa7,0x00,0x00,0x00, -0x2a,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x30,0x02,0x00,0x00,0x12,0x00,0x00,0x00,0x2f,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x31,0x02,0x00,0x00, -0x30,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x32,0x02,0x00,0x00,0x0f,0x00,0x00,0x00,0x31,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x36,0x02,0x00,0x00, -0x47,0x00,0x00,0x00,0x31,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0x38,0x02,0x00,0x00,0x37,0x02,0x00,0x00, -0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x39,0x02,0x00,0x00,0x38,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3a,0x02,0x00,0x00,0x36,0x02,0x00,0x00, -0x39,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x3b,0x02,0x00,0x00,0x32,0x02,0x00,0x00,0x3a,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x3d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x3d,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xa6,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0xd5,0x00,0x00,0x00, -0xa3,0x02,0x00,0x00,0x40,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0x43,0x02,0x00,0x00,0xa6,0x02,0x00,0x00, -0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x3f,0x02,0x00,0x00, -0x40,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x43,0x02,0x00,0x00,0x3e,0x02,0x00,0x00,0x3f,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x3e,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x45,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x45,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xa7,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0x3e,0x02,0x00,0x00,0xa1,0x02,0x00,0x00, -0x48,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0x4b,0x02,0x00,0x00,0xa7,0x02,0x00,0x00,0x60,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x47,0x02,0x00,0x00,0x48,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x4b,0x02,0x00,0x00, -0x46,0x02,0x00,0x00,0x47,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x46,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x4f,0x02,0x00,0x00,0xa7,0x02,0x00,0x00,0x61,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x50,0x02,0x00,0x00, -0x25,0x02,0x00,0x00,0x4f,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x52,0x02,0x00,0x00,0x64,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x53,0x02,0x00,0x00,0x50,0x02,0x00,0x00,0x52,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x57,0x02,0x00,0x00, -0xa6,0x02,0x00,0x00,0xc5,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x58,0x02,0x00,0x00,0x2b,0x02,0x00,0x00, -0x57,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x5a,0x02,0x00,0x00,0x68,0x00,0x00,0x00,0xbb,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5b,0x02,0x00,0x00, -0x58,0x02,0x00,0x00,0x5a,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x5d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x5d,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xa9,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0x46,0x02,0x00,0x00,0x9f,0x02,0x00,0x00, -0x60,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0x63,0x02,0x00,0x00,0xa9,0x02,0x00,0x00,0xbb,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x5f,0x02,0x00,0x00,0x60,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x63,0x02,0x00,0x00, -0x5e,0x02,0x00,0x00,0x5f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x5e,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x65,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x65,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xab,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0x5e,0x02,0x00,0x00,0x9d,0x02,0x00,0x00,0x68,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x6b,0x02,0x00,0x00, -0xab,0x02,0x00,0x00,0x62,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x67,0x02,0x00,0x00,0x68,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x6b,0x02,0x00,0x00,0x66,0x02,0x00,0x00, -0x67,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x66,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6e,0x02,0x00,0x00, -0x53,0x02,0x00,0x00,0xab,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0x71,0x02,0x00,0x00,0x6e,0x02,0x00,0x00, -0x36,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x73,0x02,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x71,0x02,0x00,0x00, -0x72,0x02,0x00,0x00,0x73,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x72,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x76,0x02,0x00,0x00,0x5b,0x02,0x00,0x00,0xa9,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x77,0x02,0x00,0x00, -0x12,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x78,0x02,0x00,0x00,0x77,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x79,0x02,0x00,0x00, -0x76,0x02,0x00,0x00,0x78,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x73,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x73,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0xc1,0x00,0x00,0x00,0x7a,0x02,0x00,0x00, -0x71,0x02,0x00,0x00,0x66,0x02,0x00,0x00,0x79,0x02,0x00,0x00, -0x72,0x02,0x00,0x00,0xf7,0x00,0x03,0x00,0x7c,0x02,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x7a,0x02,0x00,0x00, -0x7b,0x02,0x00,0x00,0x7c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x7b,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x84,0x02,0x00,0x00,0x5b,0x02,0x00,0x00,0xa9,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x86,0x02,0x00,0x00, -0x12,0x00,0x00,0x00,0x85,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x87,0x02,0x00,0x00,0x86,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x88,0x02,0x00,0x00, -0x84,0x02,0x00,0x00,0x87,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x89,0x02,0x00,0x00,0x3b,0x02,0x00,0x00, -0x88,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x8b,0x02,0x00,0x00,0x89,0x02,0x00,0x00,0x53,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8d,0x02,0x00,0x00, -0x8b,0x02,0x00,0x00,0xab,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x8f,0x02,0x00,0x00,0xa6,0x02,0x00,0x00, -0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x91,0x02,0x00,0x00,0x8f,0x02,0x00,0x00,0xa9,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x93,0x02,0x00,0x00, -0x91,0x02,0x00,0x00,0x92,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x95,0x02,0x00,0x00,0xa7,0x02,0x00,0x00, -0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x96,0x02,0x00,0x00,0x93,0x02,0x00,0x00,0x95,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x98,0x02,0x00,0x00, -0x96,0x02,0x00,0x00,0xab,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0xcc,0x00,0x00,0x00,0x99,0x02,0x00,0x00,0xc9,0x00,0x00,0x00, -0x98,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00, -0x9a,0x02,0x00,0x00,0x99,0x02,0x00,0x00,0x41,0x00,0x06,0x00, -0x5c,0x01,0x00,0x00,0x9b,0x02,0x00,0x00,0x80,0x02,0x00,0x00, -0x34,0x00,0x00,0x00,0x8d,0x02,0x00,0x00,0x3e,0x00,0x03,0x00, -0x9b,0x02,0x00,0x00,0x9a,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x7c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x7c,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x68,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x68,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9d,0x02,0x00,0x00,0xab,0x02,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x65,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x67,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x60,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x60,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9f,0x02,0x00,0x00,0xa9,0x02,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x5d,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x5f,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x48,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x48,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa1,0x02,0x00,0x00, -0xa7,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x45,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x47,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x40,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x40,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa3,0x02,0x00,0x00,0xa6,0x02,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x3d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x3f,0x02,0x00,0x00,0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00, - -}; -const uint64_t matmul_f16_f32_fp32_len = 10260; - -unsigned char matmul_f16_fp32_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0xd7,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00, -0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c, -0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00, -0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x0f,0x00,0x0f,0x00,0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x4c,0x00,0x00,0x00, -0xfa,0x00,0x00,0x00,0x06,0x01,0x00,0x00,0x46,0x01,0x00,0x00, -0x51,0x01,0x00,0x00,0x37,0x02,0x00,0x00,0x80,0x02,0x00,0x00, -0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x0a,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x0d,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x10,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x37,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x3d,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x4c,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x4f,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x53,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x60,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x62,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x6c,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xa6,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xb8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x03,0x01,0x00,0x00, -0x06,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0x04,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x04,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x04,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x06,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x06,0x01,0x00,0x00,0x21,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x20,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x21,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x4e,0x01,0x00,0x00,0x06,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x4f,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x4f,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x4f,0x01,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x51,0x01,0x00,0x00, -0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x51,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x37,0x02,0x00,0x00,0x0b,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x7d,0x02,0x00,0x00, -0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0x7e,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x7e,0x02,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x7e,0x02,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x80,0x02,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x80,0x02,0x00,0x00,0x21,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00, -0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x1e,0x00,0x10,0x00,0x10,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x11,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x11,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x15,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0x0a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x27,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x3e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x61,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x63,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x61,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x67,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x61,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x72,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x85,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x90,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0xa1,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xa6,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xb7,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xb9,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0xb8,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xba,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x4f,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xbb,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xba,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xbc,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0xb9,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xb7,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xbf,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x14,0x00,0x02,0x00, -0xc1,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0xc3,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xc4,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xc5,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc4,0x00,0x00,0x00, -0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xc6,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc5,0x00,0x00,0x00, -0xbb,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xc7,0x00,0x00,0x00, -0xc3,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0xc8,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xc7,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0xcb,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xcc,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xf6,0x00,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xf7,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0xf6,0x00,0x00,0x00, -0x1c,0x00,0x04,0x00,0xf8,0x00,0x00,0x00,0xc3,0x00,0x00,0x00, -0xf7,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xf9,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0xf9,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xfe,0x00,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x16,0x00,0x03,0x00,0x02,0x01,0x00,0x00,0x10,0x00,0x00,0x00, -0x1d,0x00,0x03,0x00,0x03,0x01,0x00,0x00,0x02,0x01,0x00,0x00, -0x1e,0x00,0x03,0x00,0x04,0x01,0x00,0x00,0x03,0x01,0x00,0x00, -0x20,0x00,0x04,0x00,0x05,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x04,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x05,0x01,0x00,0x00, -0x06,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x11,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x02,0x01,0x00,0x00, -0x20,0x00,0x04,0x00,0x15,0x01,0x00,0x00,0x04,0x00,0x00,0x00, -0xc3,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x1b,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x20,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00, -0x09,0x00,0x00,0x00,0x21,0x01,0x00,0x00,0x20,0x01,0x00,0x00, -0x39,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x22,0x01,0x00,0x00,0x51,0x00,0x00,0x00, -0x21,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x23,0x01,0x00,0x00,0x84,0x00,0x00,0x00, -0x22,0x01,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x24,0x01,0x00,0x00,0x86,0x00,0x00,0x00, -0x23,0x01,0x00,0x00,0x6c,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x42,0x01,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x43,0x01,0x00,0x00,0x84,0x00,0x00,0x00, -0xa6,0x00,0x00,0x00,0x42,0x01,0x00,0x00,0x1c,0x00,0x04,0x00, -0x44,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,0x43,0x01,0x00,0x00, -0x20,0x00,0x04,0x00,0x45,0x01,0x00,0x00,0x04,0x00,0x00,0x00, -0x44,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x45,0x01,0x00,0x00, -0x46,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x4a,0x01,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x1d,0x00,0x03,0x00, -0x4e,0x01,0x00,0x00,0x02,0x01,0x00,0x00,0x1e,0x00,0x03,0x00, -0x4f,0x01,0x00,0x00,0x4e,0x01,0x00,0x00,0x20,0x00,0x04,0x00, -0x50,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x4f,0x01,0x00,0x00, -0x3b,0x00,0x04,0x00,0x50,0x01,0x00,0x00,0x51,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x64,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x69,0x01,0x00,0x00,0x51,0x00,0x00,0x00,0x21,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x6a,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x69,0x01,0x00,0x00, -0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x6b,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x6a,0x01,0x00,0x00, -0x6c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x6e,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x6f,0x01,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x72,0x01,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x8d,0x01,0x00,0x00,0x84,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x1c,0x00,0x04,0x00, -0x8e,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,0x8d,0x01,0x00,0x00, -0x20,0x00,0x04,0x00,0x8f,0x01,0x00,0x00,0x07,0x00,0x00,0x00, -0x8e,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x9f,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xba,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0xbe,0x00,0x00,0x00, -0xbb,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xbb,0x01,0x00,0x00, -0xc3,0x00,0x00,0x00,0xba,0x01,0x00,0x00,0x20,0x00,0x04,0x00, -0xbc,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0xbb,0x01,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc5,0x01,0x00,0x00, -0x86,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0xbe,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xcd,0x01,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xfc,0x01,0x00,0x00, -0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x2f,0x02,0x00,0x00, -0x0d,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x37,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x1d,0x00,0x03,0x00, -0x7d,0x02,0x00,0x00,0xc3,0x00,0x00,0x00,0x1e,0x00,0x03,0x00, -0x7e,0x02,0x00,0x00,0x7d,0x02,0x00,0x00,0x20,0x00,0x04,0x00, -0x7f,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x7e,0x02,0x00,0x00, -0x3b,0x00,0x04,0x00,0x7f,0x02,0x00,0x00,0x80,0x02,0x00,0x00, -0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x85,0x02,0x00,0x00,0x05,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x92,0x02,0x00,0x00,0x84,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x9b,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0xc3,0x00,0x00,0x00, -0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x05,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xc8,0x00,0x00,0x00, -0xc9,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x8f,0x01,0x00,0x00,0x90,0x01,0x00,0x00,0x07,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0xbc,0x01,0x00,0x00,0xbd,0x01,0x00,0x00, -0x07,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x16,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x17,0x00,0x00,0x00, -0x16,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x17,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1e,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x21,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x28,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x27,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x29,0x00,0x00,0x00, -0x28,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x2a,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x29,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x2e,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00, -0x24,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x30,0x00,0x00,0x00, -0x2a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x35,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x36,0x00,0x00,0x00, -0x35,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x38,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00, -0x38,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x3a,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x3f,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x3e,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x3f,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x42,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x3b,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x47,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x4a,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x4c,0x00,0x00,0x00, -0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x4f,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x55,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x54,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00, -0x50,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x4f,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x64,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,0x63,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x68,0x00,0x00,0x00, -0x5d,0x00,0x00,0x00,0x67,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x6d,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x73,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x72,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x78,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x7c,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x81,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x80,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x82,0x00,0x00,0x00, -0x81,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x83,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0x82,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x89,0x00,0x00,0x00, -0x47,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,0x89,0x00,0x00,0x00, -0x82,0x00,0x00,0x00,0x0c,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x8d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x26,0x00,0x00,0x00, -0x87,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x90,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x92,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x92,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x95,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x97,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x97,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x99,0x00,0x00,0x00, -0x95,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x93,0x00,0x00,0x00, -0x99,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9c,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x83,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9d,0x00,0x00,0x00, -0x9c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0xa1,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xa3,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0xa3,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa7,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0xa6,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0xa9,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0xa9,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xab,0x00,0x00,0x00, -0xa7,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0xa4,0x00,0x00,0x00, -0xab,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xae,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0x83,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xaf,0x00,0x00,0x00, -0xae,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xb1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb1,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xa5,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0xd0,0x00,0x00,0x00, -0xb2,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0xc2,0x00,0x00,0x00,0xa5,0x02,0x00,0x00,0xc0,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xb3,0x00,0x00,0x00,0xb2,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xc2,0x00,0x00,0x00, -0xb2,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xb2,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00, -0xcd,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0xa5,0x02,0x00,0x00, -0x3e,0x00,0x03,0x00,0xcd,0x00,0x00,0x00,0xcb,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd0,0x00,0x00,0x00, -0xa5,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xb1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb3,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xd3,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xd3,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xbe,0x02,0x00,0x00,0xaf,0x00,0x00,0x00,0xb3,0x00,0x00,0x00, -0x74,0x01,0x00,0x00,0xd6,0x00,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xba,0x02,0x00,0x00,0x9d,0x00,0x00,0x00, -0xb3,0x00,0x00,0x00,0x71,0x01,0x00,0x00,0xd6,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xa6,0x02,0x00,0x00, -0x83,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0x1f,0x02,0x00,0x00, -0xd6,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0xda,0x00,0x00,0x00,0xa6,0x02,0x00,0x00,0x8d,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xd5,0x00,0x00,0x00,0xd6,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xda,0x00,0x00,0x00, -0xd4,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xd4,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xdc,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xdc,0x00,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xb6,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0xd4,0x00,0x00,0x00,0x26,0x01,0x00,0x00,0xdf,0x00,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xe2,0x00,0x00,0x00, -0xb6,0x02,0x00,0x00,0x37,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xde,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xe2,0x00,0x00,0x00,0xdd,0x00,0x00,0x00, -0xde,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdd,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe6,0x00,0x00,0x00, -0x95,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0xe6,0x00,0x00,0x00, -0xb6,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0xeb,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0x36,0x00,0x00,0x00, -0xf7,0x00,0x03,0x00,0xed,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xeb,0x00,0x00,0x00,0xec,0x00,0x00,0x00, -0xed,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xec,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf0,0x00,0x00,0x00, -0xa6,0x02,0x00,0x00,0x6e,0x00,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,0xf0,0x00,0x00,0x00, -0x8d,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xed,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xed,0x00,0x00,0x00,0xf5,0x00,0x07,0x00, -0xc1,0x00,0x00,0x00,0xf3,0x00,0x00,0x00,0xeb,0x00,0x00,0x00, -0xdd,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,0xec,0x00,0x00,0x00, -0xf7,0x00,0x03,0x00,0xf5,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xf3,0x00,0x00,0x00,0xf4,0x00,0x00,0x00, -0x17,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xf4,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfd,0x00,0x00,0x00, -0x73,0x00,0x00,0x00,0xb6,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xfd,0x00,0x00,0x00, -0xfe,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x01,0x01,0x00,0x00,0xff,0x00,0x00,0x00,0x6e,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0d,0x01,0x00,0x00, -0xfd,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x0e,0x01,0x00,0x00,0xba,0x02,0x00,0x00, -0x0d,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x10,0x01,0x00,0x00,0x0e,0x01,0x00,0x00,0x6e,0x00,0x00,0x00, -0x41,0x00,0x06,0x00,0x11,0x01,0x00,0x00,0x12,0x01,0x00,0x00, -0x06,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0x10,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0x02,0x01,0x00,0x00,0x13,0x01,0x00,0x00, -0x12,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0xc3,0x00,0x00,0x00, -0x14,0x01,0x00,0x00,0x13,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x01,0x00,0x00,0x16,0x01,0x00,0x00,0xfa,0x00,0x00,0x00, -0x01,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x16,0x01,0x00,0x00, -0x14,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xf5,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x17,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x1a,0x01,0x00,0x00,0x73,0x00,0x00,0x00, -0xb6,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x1c,0x01,0x00,0x00,0x1a,0x01,0x00,0x00,0x1b,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1e,0x01,0x00,0x00, -0x1c,0x01,0x00,0x00,0x6e,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x01,0x00,0x00,0x1f,0x01,0x00,0x00,0xfa,0x00,0x00,0x00, -0x1e,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x1f,0x01,0x00,0x00, -0xcb,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xf5,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xf5,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xdf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdf,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x26,0x01,0x00,0x00, -0xb6,0x02,0x00,0x00,0x24,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xdc,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x28,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x28,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xb7,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0xde,0x00,0x00,0x00, -0x6d,0x01,0x00,0x00,0x2b,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0x2e,0x01,0x00,0x00,0xb7,0x02,0x00,0x00, -0xa6,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x2a,0x01,0x00,0x00, -0x2b,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x2e,0x01,0x00,0x00,0x29,0x01,0x00,0x00,0x2a,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x29,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x32,0x01,0x00,0x00,0xa7,0x00,0x00,0x00, -0x7d,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x34,0x01,0x00,0x00,0x32,0x01,0x00,0x00,0xb7,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x35,0x01,0x00,0x00, -0x12,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x36,0x01,0x00,0x00,0x35,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x37,0x01,0x00,0x00, -0x34,0x01,0x00,0x00,0x36,0x01,0x00,0x00,0xf7,0x00,0x03,0x00, -0x39,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x37,0x01,0x00,0x00,0x38,0x01,0x00,0x00,0x39,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x38,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3c,0x01,0x00,0x00,0xa6,0x02,0x00,0x00, -0x78,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0x3e,0x01,0x00,0x00,0x3c,0x01,0x00,0x00,0x8d,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x39,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x39,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0xc1,0x00,0x00,0x00, -0x3f,0x01,0x00,0x00,0x37,0x01,0x00,0x00,0x29,0x01,0x00,0x00, -0x3e,0x01,0x00,0x00,0x38,0x01,0x00,0x00,0xf7,0x00,0x03,0x00, -0x41,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x3f,0x01,0x00,0x00,0x40,0x01,0x00,0x00,0x60,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x40,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x49,0x01,0x00,0x00,0x7d,0x00,0x00,0x00, -0xb7,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x4b,0x01,0x00,0x00,0x49,0x01,0x00,0x00,0x4a,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4d,0x01,0x00,0x00, -0x4b,0x01,0x00,0x00,0x78,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x58,0x01,0x00,0x00,0x49,0x01,0x00,0x00, -0xaa,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x59,0x01,0x00,0x00,0xbe,0x02,0x00,0x00,0x58,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5b,0x01,0x00,0x00, -0x59,0x01,0x00,0x00,0x78,0x00,0x00,0x00,0x41,0x00,0x06,0x00, -0x11,0x01,0x00,0x00,0x5c,0x01,0x00,0x00,0x51,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0x5b,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0x02,0x01,0x00,0x00,0x5d,0x01,0x00,0x00,0x5c,0x01,0x00,0x00, -0x73,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x5e,0x01,0x00,0x00, -0x5d,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x01,0x00,0x00, -0x5f,0x01,0x00,0x00,0x46,0x01,0x00,0x00,0x4d,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0x5f,0x01,0x00,0x00,0x5e,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0x41,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x60,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x63,0x01,0x00,0x00,0x7d,0x00,0x00,0x00,0xb7,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x65,0x01,0x00,0x00, -0x63,0x01,0x00,0x00,0x64,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x67,0x01,0x00,0x00,0x65,0x01,0x00,0x00, -0x78,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x01,0x00,0x00, -0x68,0x01,0x00,0x00,0x46,0x01,0x00,0x00,0x67,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0x68,0x01,0x00,0x00,0xcb,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x41,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x41,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x2b,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x2b,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x6d,0x01,0x00,0x00,0xb7,0x02,0x00,0x00, -0x6b,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x28,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x2a,0x01,0x00,0x00,0xe0,0x00,0x04,0x00, -0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x6e,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x71,0x01,0x00,0x00, -0xba,0x02,0x00,0x00,0x6f,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x74,0x01,0x00,0x00,0xbe,0x02,0x00,0x00, -0x72,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x76,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x76,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xc0,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0x2a,0x01,0x00,0x00,0x1d,0x02,0x00,0x00,0x79,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x7c,0x01,0x00,0x00, -0xc0,0x02,0x00,0x00,0x6c,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x78,0x01,0x00,0x00,0x79,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x7c,0x01,0x00,0x00,0x77,0x01,0x00,0x00, -0x78,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x77,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0x7e,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x7e,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xc4,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0x77,0x01,0x00,0x00, -0xa9,0x01,0x00,0x00,0x81,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0x84,0x01,0x00,0x00,0xc4,0x02,0x00,0x00, -0x60,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x80,0x01,0x00,0x00, -0x81,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x84,0x01,0x00,0x00,0x7f,0x01,0x00,0x00,0x80,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x7f,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0x86,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x86,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xd6,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0x7f,0x01,0x00,0x00,0xa7,0x01,0x00,0x00, -0x87,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0x8c,0x01,0x00,0x00,0xd6,0x02,0x00,0x00,0x62,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x88,0x01,0x00,0x00,0x87,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x8c,0x01,0x00,0x00, -0x87,0x01,0x00,0x00,0x88,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x87,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x92,0x01,0x00,0x00,0xc4,0x02,0x00,0x00,0x62,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x94,0x01,0x00,0x00, -0x92,0x01,0x00,0x00,0xd6,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x96,0x01,0x00,0x00,0x55,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x98,0x01,0x00,0x00,0xc4,0x02,0x00,0x00,0x61,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x99,0x01,0x00,0x00, -0x96,0x01,0x00,0x00,0x98,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9b,0x01,0x00,0x00,0x64,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9c,0x01,0x00,0x00,0x99,0x01,0x00,0x00,0x9b,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9e,0x01,0x00,0x00, -0x9c,0x01,0x00,0x00,0xd6,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa0,0x01,0x00,0x00,0x9e,0x01,0x00,0x00, -0x9f,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa2,0x01,0x00,0x00,0xa0,0x01,0x00,0x00,0xc0,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x01,0x00,0x00,0xa3,0x01,0x00,0x00, -0xfa,0x00,0x00,0x00,0xa2,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc3,0x00,0x00,0x00,0xa4,0x01,0x00,0x00,0xa3,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,0xa5,0x01,0x00,0x00, -0x90,0x01,0x00,0x00,0x94,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0xa5,0x01,0x00,0x00,0xa4,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa7,0x01,0x00,0x00,0xd6,0x02,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x86,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x88,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0x81,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x81,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa9,0x01,0x00,0x00, -0xc4,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x7e,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x80,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xab,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xab,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xc5,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0x80,0x01,0x00,0x00, -0xd7,0x01,0x00,0x00,0xae,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0xb1,0x01,0x00,0x00,0xc5,0x02,0x00,0x00, -0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xad,0x01,0x00,0x00, -0xae,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xb1,0x01,0x00,0x00,0xac,0x01,0x00,0x00,0xad,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xac,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xb3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xb3,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xd3,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0xac,0x01,0x00,0x00,0xd5,0x01,0x00,0x00, -0xb4,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0xb9,0x01,0x00,0x00,0xd3,0x02,0x00,0x00,0xbb,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xb5,0x01,0x00,0x00,0xb4,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xb9,0x01,0x00,0x00, -0xb4,0x01,0x00,0x00,0xb5,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xb4,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xbf,0x01,0x00,0x00,0xc5,0x02,0x00,0x00,0xbb,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc1,0x01,0x00,0x00, -0xbf,0x01,0x00,0x00,0xd3,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xc3,0x01,0x00,0x00,0x59,0x00,0x00,0x00, -0xb8,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xc6,0x01,0x00,0x00,0xc5,0x02,0x00,0x00,0xc5,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc7,0x01,0x00,0x00, -0xc3,0x01,0x00,0x00,0xc6,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xc9,0x01,0x00,0x00,0x68,0x00,0x00,0x00, -0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xca,0x01,0x00,0x00,0xc7,0x01,0x00,0x00,0xc9,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xcc,0x01,0x00,0x00, -0xca,0x01,0x00,0x00,0xd3,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xce,0x01,0x00,0x00,0xcc,0x01,0x00,0x00, -0xcd,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd0,0x01,0x00,0x00,0xce,0x01,0x00,0x00,0xc0,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x01,0x00,0x00,0xd1,0x01,0x00,0x00, -0x46,0x01,0x00,0x00,0xd0,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc3,0x00,0x00,0x00,0xd2,0x01,0x00,0x00,0xd1,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,0xd3,0x01,0x00,0x00, -0xbd,0x01,0x00,0x00,0xc1,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0xd3,0x01,0x00,0x00,0xd2,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xd5,0x01,0x00,0x00,0xd3,0x02,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb3,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xb5,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xae,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xae,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd7,0x01,0x00,0x00, -0xc5,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xab,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xad,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xd9,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xd9,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xc6,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0xad,0x01,0x00,0x00, -0x1b,0x02,0x00,0x00,0xdc,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0xdf,0x01,0x00,0x00,0xc6,0x02,0x00,0x00, -0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xdb,0x01,0x00,0x00, -0xdc,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xdf,0x01,0x00,0x00,0xda,0x01,0x00,0x00,0xdb,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xda,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xe1,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xe1,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xca,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0xda,0x01,0x00,0x00,0x19,0x02,0x00,0x00, -0xe4,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0xe7,0x01,0x00,0x00,0xca,0x02,0x00,0x00,0x60,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xe3,0x01,0x00,0x00,0xe4,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xe7,0x01,0x00,0x00, -0xe2,0x01,0x00,0x00,0xe3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xe2,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xe9,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xe9,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xcc,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0xe2,0x01,0x00,0x00,0x17,0x02,0x00,0x00,0xec,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xef,0x01,0x00,0x00, -0xcc,0x02,0x00,0x00,0xbb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xeb,0x01,0x00,0x00,0xec,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xef,0x01,0x00,0x00,0xea,0x01,0x00,0x00, -0xeb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xea,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xf1,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xf1,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xce,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0xea,0x01,0x00,0x00, -0x15,0x02,0x00,0x00,0xf2,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0xf7,0x01,0x00,0x00,0xce,0x02,0x00,0x00, -0x62,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xf3,0x01,0x00,0x00, -0xf2,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xf7,0x01,0x00,0x00,0xf2,0x01,0x00,0x00,0xf3,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xf2,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xf9,0x01,0x00,0x00,0xc6,0x02,0x00,0x00, -0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xfb,0x01,0x00,0x00,0xf9,0x01,0x00,0x00,0xcc,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfd,0x01,0x00,0x00, -0xfb,0x01,0x00,0x00,0xfc,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xff,0x01,0x00,0x00,0xca,0x02,0x00,0x00, -0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x00,0x02,0x00,0x00,0xfd,0x01,0x00,0x00,0xff,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x02,0x02,0x00,0x00, -0x00,0x02,0x00,0x00,0xce,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x06,0x02,0x00,0x00,0xff,0x01,0x00,0x00, -0xce,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00, -0x07,0x02,0x00,0x00,0x90,0x01,0x00,0x00,0x06,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x08,0x02,0x00,0x00, -0x07,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00, -0x0d,0x02,0x00,0x00,0xbd,0x01,0x00,0x00,0xfb,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x0e,0x02,0x00,0x00, -0x0d,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00, -0x10,0x02,0x00,0x00,0xc9,0x00,0x00,0x00,0x02,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x11,0x02,0x00,0x00, -0x10,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,0xc3,0x00,0x00,0x00, -0x12,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x08,0x02,0x00,0x00,0x0e,0x02,0x00,0x00,0x11,0x02,0x00,0x00, -0x3e,0x00,0x03,0x00,0x10,0x02,0x00,0x00,0x12,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x15,0x02,0x00,0x00, -0xce,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xf1,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xf3,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xec,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xec,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x17,0x02,0x00,0x00,0xcc,0x02,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xe9,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xeb,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xe4,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xe4,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x19,0x02,0x00,0x00,0xca,0x02,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xe1,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xe3,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xdc,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xdc,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1b,0x02,0x00,0x00, -0xc6,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xd9,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xdb,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0x79,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x79,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x1d,0x02,0x00,0x00,0xc0,0x02,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x76,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x78,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x6e,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xd6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd6,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1f,0x02,0x00,0x00, -0xa6,0x02,0x00,0x00,0x6c,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xd3,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd5,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x24,0x02,0x00,0x00, -0x55,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x25,0x02,0x00,0x00,0x95,0x00,0x00,0x00, -0x24,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x2a,0x02,0x00,0x00,0x59,0x00,0x00,0x00,0xb8,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2b,0x02,0x00,0x00, -0xa7,0x00,0x00,0x00,0x2a,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x30,0x02,0x00,0x00,0x12,0x00,0x00,0x00, -0x2f,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x31,0x02,0x00,0x00,0x30,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x32,0x02,0x00,0x00,0x0f,0x00,0x00,0x00, -0x31,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x36,0x02,0x00,0x00,0x47,0x00,0x00,0x00,0x31,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x38,0x02,0x00,0x00, -0x37,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x39,0x02,0x00,0x00,0x38,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3a,0x02,0x00,0x00, -0x36,0x02,0x00,0x00,0x39,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3b,0x02,0x00,0x00,0x32,0x02,0x00,0x00, -0x3a,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x3d,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x3d,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xa7,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0xd5,0x00,0x00,0x00,0xa4,0x02,0x00,0x00,0x40,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x43,0x02,0x00,0x00, -0xa7,0x02,0x00,0x00,0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x3f,0x02,0x00,0x00,0x40,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x43,0x02,0x00,0x00,0x3e,0x02,0x00,0x00, -0x3f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x3e,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x45,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x45,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xa8,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0x3e,0x02,0x00,0x00, -0xa2,0x02,0x00,0x00,0x48,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0x4b,0x02,0x00,0x00,0xa8,0x02,0x00,0x00, -0x60,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x47,0x02,0x00,0x00, -0x48,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x4b,0x02,0x00,0x00,0x46,0x02,0x00,0x00,0x47,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x46,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x4f,0x02,0x00,0x00,0xa8,0x02,0x00,0x00, -0x61,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x50,0x02,0x00,0x00,0x25,0x02,0x00,0x00,0x4f,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x52,0x02,0x00,0x00, -0x64,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x53,0x02,0x00,0x00,0x50,0x02,0x00,0x00, -0x52,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x57,0x02,0x00,0x00,0xa7,0x02,0x00,0x00,0xc5,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x58,0x02,0x00,0x00, -0x2b,0x02,0x00,0x00,0x57,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x5a,0x02,0x00,0x00,0x68,0x00,0x00,0x00, -0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x5b,0x02,0x00,0x00,0x58,0x02,0x00,0x00,0x5a,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x5d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x5d,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xaa,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0x46,0x02,0x00,0x00, -0xa0,0x02,0x00,0x00,0x60,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0x63,0x02,0x00,0x00,0xaa,0x02,0x00,0x00, -0xbb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x5f,0x02,0x00,0x00, -0x60,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x63,0x02,0x00,0x00,0x5e,0x02,0x00,0x00,0x5f,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x5e,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x65,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x65,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xac,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0x5e,0x02,0x00,0x00,0x9e,0x02,0x00,0x00, -0x68,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0x6b,0x02,0x00,0x00,0xac,0x02,0x00,0x00,0x62,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x67,0x02,0x00,0x00,0x68,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x6b,0x02,0x00,0x00, -0x66,0x02,0x00,0x00,0x67,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x66,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x6e,0x02,0x00,0x00,0x53,0x02,0x00,0x00,0xac,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x71,0x02,0x00,0x00, -0x6e,0x02,0x00,0x00,0x36,0x00,0x00,0x00,0xf7,0x00,0x03,0x00, -0x73,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x71,0x02,0x00,0x00,0x72,0x02,0x00,0x00,0x73,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x72,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x76,0x02,0x00,0x00,0x5b,0x02,0x00,0x00, -0xaa,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x77,0x02,0x00,0x00,0x12,0x00,0x00,0x00,0xcf,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x78,0x02,0x00,0x00, -0x77,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0x79,0x02,0x00,0x00,0x76,0x02,0x00,0x00,0x78,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x73,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x73,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0xc1,0x00,0x00,0x00, -0x7a,0x02,0x00,0x00,0x71,0x02,0x00,0x00,0x66,0x02,0x00,0x00, -0x79,0x02,0x00,0x00,0x72,0x02,0x00,0x00,0xf7,0x00,0x03,0x00, -0x7c,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x7a,0x02,0x00,0x00,0x7b,0x02,0x00,0x00,0x7c,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x7b,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x84,0x02,0x00,0x00,0x5b,0x02,0x00,0x00, -0xaa,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x86,0x02,0x00,0x00,0x12,0x00,0x00,0x00,0x85,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x87,0x02,0x00,0x00, -0x86,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x88,0x02,0x00,0x00,0x84,0x02,0x00,0x00,0x87,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x89,0x02,0x00,0x00, -0x3b,0x02,0x00,0x00,0x88,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x8b,0x02,0x00,0x00,0x89,0x02,0x00,0x00, -0x53,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x8d,0x02,0x00,0x00,0x8b,0x02,0x00,0x00,0xac,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8f,0x02,0x00,0x00, -0xa7,0x02,0x00,0x00,0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x91,0x02,0x00,0x00,0x8f,0x02,0x00,0x00, -0xaa,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x93,0x02,0x00,0x00,0x91,0x02,0x00,0x00,0x92,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x95,0x02,0x00,0x00, -0xa8,0x02,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x96,0x02,0x00,0x00,0x93,0x02,0x00,0x00, -0x95,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x98,0x02,0x00,0x00,0x96,0x02,0x00,0x00,0xac,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,0x99,0x02,0x00,0x00, -0xc9,0x00,0x00,0x00,0x98,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc3,0x00,0x00,0x00,0x9a,0x02,0x00,0x00,0x99,0x02,0x00,0x00, -0x41,0x00,0x06,0x00,0x9b,0x02,0x00,0x00,0x9c,0x02,0x00,0x00, -0x80,0x02,0x00,0x00,0x34,0x00,0x00,0x00,0x8d,0x02,0x00,0x00, -0x3e,0x00,0x03,0x00,0x9c,0x02,0x00,0x00,0x9a,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x7c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x7c,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x68,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x68,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9e,0x02,0x00,0x00,0xac,0x02,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x65,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x67,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x60,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x60,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa0,0x02,0x00,0x00, -0xaa,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x5d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x5f,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x48,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x48,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa2,0x02,0x00,0x00,0xa8,0x02,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x45,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x47,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x40,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x40,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa4,0x02,0x00,0x00,0xa7,0x02,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x3d,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x3f,0x02,0x00,0x00,0xfd,0x00,0x01,0x00, -0x38,0x00,0x01,0x00, -}; -const uint64_t matmul_f16_fp32_len = 10276; - -unsigned char matmul_f32_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0xda,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x09,0x00,0x00,0x00, -0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c, -0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00, -0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x0f,0x00,0x0f,0x00,0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x4c,0x00,0x00,0x00, -0xfb,0x00,0x00,0x00,0x06,0x01,0x00,0x00,0x47,0x01,0x00,0x00, -0x52,0x01,0x00,0x00,0x3b,0x02,0x00,0x00,0x84,0x02,0x00,0x00, -0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x0a,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x0d,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x10,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x37,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x3d,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x4c,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x4f,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x53,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x60,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x62,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x6c,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xa6,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xb8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x03,0x01,0x00,0x00, -0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0x04,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x04,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x04,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x06,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x06,0x01,0x00,0x00,0x21,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x21,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x22,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x4f,0x01,0x00,0x00,0x06,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x50,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x50,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x50,0x01,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x52,0x01,0x00,0x00, -0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x52,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x3b,0x02,0x00,0x00,0x0b,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x81,0x02,0x00,0x00, -0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0x82,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x82,0x02,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x82,0x02,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x84,0x02,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x84,0x02,0x00,0x00,0x21,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00, -0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x1e,0x00,0x10,0x00,0x10,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x11,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x11,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x15,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0x0a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x27,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x3e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x61,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x63,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x61,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x67,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x61,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x72,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x85,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x90,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0xa1,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xa6,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xb7,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xb9,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0xb8,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xba,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x4f,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xbb,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xba,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xbc,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0xb9,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xb7,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xbf,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x14,0x00,0x02,0x00, -0xc1,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0xc3,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xc4,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xc5,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc4,0x00,0x00,0x00, -0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xc6,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc5,0x00,0x00,0x00, -0xbb,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xc7,0x00,0x00,0x00, -0xc3,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0xc8,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xc7,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0xcb,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xcc,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x16,0x00,0x03,0x00,0xf6,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xf7,0x00,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xf8,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0xf7,0x00,0x00,0x00, -0x1c,0x00,0x04,0x00,0xf9,0x00,0x00,0x00,0xf6,0x00,0x00,0x00, -0xf8,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xfa,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0xfa,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xff,0x00,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x1d,0x00,0x03,0x00,0x03,0x01,0x00,0x00,0xc3,0x00,0x00,0x00, -0x1e,0x00,0x03,0x00,0x04,0x01,0x00,0x00,0x03,0x01,0x00,0x00, -0x20,0x00,0x04,0x00,0x05,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x04,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x05,0x01,0x00,0x00, -0x06,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x11,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0xc3,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x15,0x01,0x00,0x00,0x04,0x00,0x00,0x00, -0xf6,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x1b,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0xf6,0x00,0x00,0x00, -0x1f,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x21,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0x33,0x00,0x06,0x00,0x09,0x00,0x00,0x00,0x22,0x01,0x00,0x00, -0x21,0x01,0x00,0x00,0x39,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x23,0x01,0x00,0x00, -0x51,0x00,0x00,0x00,0x22,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x24,0x01,0x00,0x00, -0x84,0x00,0x00,0x00,0x23,0x01,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x25,0x01,0x00,0x00, -0x86,0x00,0x00,0x00,0x24,0x01,0x00,0x00,0x6c,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x43,0x01,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x44,0x01,0x00,0x00, -0x84,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,0x43,0x01,0x00,0x00, -0x1c,0x00,0x04,0x00,0x45,0x01,0x00,0x00,0xf6,0x00,0x00,0x00, -0x44,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x46,0x01,0x00,0x00, -0x04,0x00,0x00,0x00,0x45,0x01,0x00,0x00,0x3b,0x00,0x04,0x00, -0x46,0x01,0x00,0x00,0x47,0x01,0x00,0x00,0x04,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x4b,0x01,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x1d,0x00,0x03,0x00,0x4f,0x01,0x00,0x00,0xc3,0x00,0x00,0x00, -0x1e,0x00,0x03,0x00,0x50,0x01,0x00,0x00,0x4f,0x01,0x00,0x00, -0x20,0x00,0x04,0x00,0x51,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x50,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x51,0x01,0x00,0x00, -0x52,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x65,0x01,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x6a,0x01,0x00,0x00,0x51,0x00,0x00,0x00, -0x22,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x6b,0x01,0x00,0x00,0x84,0x00,0x00,0x00, -0x6a,0x01,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x6c,0x01,0x00,0x00,0x86,0x00,0x00,0x00, -0x6b,0x01,0x00,0x00,0x6c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x6f,0x01,0x00,0x00,0x08,0x01,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x70,0x01,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x73,0x01,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x8e,0x01,0x00,0x00, -0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x1c,0x00,0x04,0x00,0x8f,0x01,0x00,0x00,0xf6,0x00,0x00,0x00, -0x8e,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x90,0x01,0x00,0x00, -0x07,0x00,0x00,0x00,0x8f,0x01,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xa0,0x01,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0xa6,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0xf6,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbc,0x01,0x00,0x00, -0x84,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0xbb,0x00,0x00,0x00, -0x1c,0x00,0x04,0x00,0xbd,0x01,0x00,0x00,0xf6,0x00,0x00,0x00, -0xbc,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0xbe,0x01,0x00,0x00, -0x07,0x00,0x00,0x00,0xbd,0x01,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xc7,0x01,0x00,0x00,0x86,0x00,0x00,0x00, -0xb8,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xcf,0x01,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xfe,0x01,0x00,0x00,0x84,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x33,0x02,0x00,0x00,0x0d,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x3b,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x81,0x02,0x00,0x00, -0xc3,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x82,0x02,0x00,0x00, -0x81,0x02,0x00,0x00,0x20,0x00,0x04,0x00,0x83,0x02,0x00,0x00, -0x0c,0x00,0x00,0x00,0x82,0x02,0x00,0x00,0x3b,0x00,0x04,0x00, -0x83,0x02,0x00,0x00,0x84,0x02,0x00,0x00,0x0c,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x89,0x02,0x00,0x00, -0x05,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x96,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0xc8,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x90,0x01,0x00,0x00,0x91,0x01,0x00,0x00, -0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xbe,0x01,0x00,0x00, -0xbf,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x17,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x17,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x1e,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x17,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x27,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x29,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x1e,0x00,0x00,0x00, -0x29,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x2e,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x2d,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x2f,0x00,0x00,0x00, -0x2e,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x30,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x2f,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x30,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x34,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x36,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x36,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x3a,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00, -0x3a,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x3b,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x47,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x3b,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x49,0x00,0x00,0x00, -0x3d,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x49,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x4d,0x00,0x00,0x00, -0x4c,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x4d,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x50,0x00,0x00,0x00, -0x54,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x59,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x58,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5d,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x5d,0x00,0x00,0x00, -0x63,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x68,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,0x67,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6e,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x72,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x78,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x77,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7d,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x80,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x82,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x47,0x00,0x00,0x00, -0x82,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x85,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x87,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x89,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8c,0x00,0x00,0x00, -0x89,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x0c,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x26,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x8c,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x91,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x90,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x91,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x93,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0x42,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x97,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x96,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x98,0x00,0x00,0x00, -0x97,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x99,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0x98,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9a,0x00,0x00,0x00, -0x93,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0x9a,0x00,0x00,0x00, -0x83,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9d,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0xa2,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0xa2,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0x4a,0x00,0x00,0x00, -0xa6,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0xa9,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0xa8,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xaa,0x00,0x00,0x00, -0xa9,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xab,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0xaa,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00, -0xa4,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0xac,0x00,0x00,0x00, -0x83,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xaf,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xb1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xb1,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xa8,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0x05,0x00,0x00,0x00, -0xd0,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,0xa8,0x02,0x00,0x00, -0xc0,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xb3,0x00,0x00,0x00, -0xb2,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xc2,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0xb3,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0xcc,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,0xc9,0x00,0x00,0x00, -0xa8,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0xcd,0x00,0x00,0x00, -0xcb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd0,0x00,0x00,0x00,0xa8,0x02,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xb1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xb3,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd3,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xd3,0x00,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xc1,0x02,0x00,0x00,0xaf,0x00,0x00,0x00, -0xb3,0x00,0x00,0x00,0x75,0x01,0x00,0x00,0xd6,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xbd,0x02,0x00,0x00, -0x9d,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0x72,0x01,0x00,0x00, -0xd6,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xa9,0x02,0x00,0x00,0x83,0x00,0x00,0x00,0xb3,0x00,0x00,0x00, -0x23,0x02,0x00,0x00,0xd6,0x00,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0xda,0x00,0x00,0x00,0xa9,0x02,0x00,0x00, -0x8d,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xd5,0x00,0x00,0x00, -0xd6,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xda,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,0xd5,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xd4,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xdc,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdc,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xb9,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,0x27,0x01,0x00,0x00, -0xdf,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0xe2,0x00,0x00,0x00,0xb9,0x02,0x00,0x00,0x37,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xde,0x00,0x00,0x00,0xdf,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xe2,0x00,0x00,0x00, -0xdd,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xdd,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xe6,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0x73,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe8,0x00,0x00,0x00, -0xe6,0x00,0x00,0x00,0xb9,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,0xe8,0x00,0x00,0x00, -0x36,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0xed,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xeb,0x00,0x00,0x00, -0xec,0x00,0x00,0x00,0xed,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xec,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xf0,0x00,0x00,0x00,0xa9,0x02,0x00,0x00,0x6e,0x00,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xf2,0x00,0x00,0x00, -0xf0,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xed,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xed,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0xc1,0x00,0x00,0x00,0xf3,0x00,0x00,0x00, -0xeb,0x00,0x00,0x00,0xdd,0x00,0x00,0x00,0xf2,0x00,0x00,0x00, -0xec,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0xf5,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xf3,0x00,0x00,0x00, -0xf4,0x00,0x00,0x00,0x17,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xf4,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xfe,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0xb9,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x00,0x01,0x00,0x00, -0xfe,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x02,0x01,0x00,0x00,0x00,0x01,0x00,0x00, -0x6e,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x0d,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,0x98,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0e,0x01,0x00,0x00, -0xbd,0x02,0x00,0x00,0x0d,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x10,0x01,0x00,0x00,0x0e,0x01,0x00,0x00, -0x6e,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x11,0x01,0x00,0x00, -0x12,0x01,0x00,0x00,0x06,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0x10,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00, -0x13,0x01,0x00,0x00,0x12,0x01,0x00,0x00,0x73,0x00,0x04,0x00, -0xf6,0x00,0x00,0x00,0x14,0x01,0x00,0x00,0x13,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x01,0x00,0x00,0x16,0x01,0x00,0x00, -0xfb,0x00,0x00,0x00,0x02,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0x16,0x01,0x00,0x00,0x14,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xf5,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x17,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1a,0x01,0x00,0x00, -0x73,0x00,0x00,0x00,0xb9,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x1c,0x01,0x00,0x00,0x1a,0x01,0x00,0x00, -0x1b,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x1e,0x01,0x00,0x00,0x1c,0x01,0x00,0x00,0x6e,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x01,0x00,0x00,0x20,0x01,0x00,0x00, -0xfb,0x00,0x00,0x00,0x1e,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0x20,0x01,0x00,0x00,0x1f,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xf5,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xf5,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xdf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xdf,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x27,0x01,0x00,0x00,0xb9,0x02,0x00,0x00,0x25,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xdc,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xde,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x29,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x29,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xba,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0xde,0x00,0x00,0x00,0x6e,0x01,0x00,0x00,0x2c,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x2f,0x01,0x00,0x00, -0xba,0x02,0x00,0x00,0xa6,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x2b,0x01,0x00,0x00,0x2c,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x2f,0x01,0x00,0x00,0x2a,0x01,0x00,0x00, -0x2b,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x2a,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x33,0x01,0x00,0x00, -0xa7,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x35,0x01,0x00,0x00,0x33,0x01,0x00,0x00, -0xba,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x36,0x01,0x00,0x00,0x12,0x00,0x00,0x00,0xcf,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x37,0x01,0x00,0x00, -0x36,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0x38,0x01,0x00,0x00,0x35,0x01,0x00,0x00,0x37,0x01,0x00,0x00, -0xf7,0x00,0x03,0x00,0x3a,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x38,0x01,0x00,0x00,0x39,0x01,0x00,0x00, -0x3a,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x39,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3d,0x01,0x00,0x00, -0xa9,0x02,0x00,0x00,0x78,0x00,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0x3f,0x01,0x00,0x00,0x3d,0x01,0x00,0x00, -0x8d,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x3a,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x3a,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0xc1,0x00,0x00,0x00,0x40,0x01,0x00,0x00,0x38,0x01,0x00,0x00, -0x2a,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,0x39,0x01,0x00,0x00, -0xf7,0x00,0x03,0x00,0x42,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x40,0x01,0x00,0x00,0x41,0x01,0x00,0x00, -0x61,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x41,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4a,0x01,0x00,0x00, -0x7d,0x00,0x00,0x00,0xba,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x4c,0x01,0x00,0x00,0x4a,0x01,0x00,0x00, -0x4b,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x4e,0x01,0x00,0x00,0x4c,0x01,0x00,0x00,0x78,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x59,0x01,0x00,0x00, -0x4a,0x01,0x00,0x00,0xaa,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x5a,0x01,0x00,0x00,0xc1,0x02,0x00,0x00, -0x59,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x5c,0x01,0x00,0x00,0x5a,0x01,0x00,0x00,0x78,0x00,0x00,0x00, -0x41,0x00,0x06,0x00,0x11,0x01,0x00,0x00,0x5d,0x01,0x00,0x00, -0x52,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0x5c,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x5e,0x01,0x00,0x00, -0x5d,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0xf6,0x00,0x00,0x00, -0x5f,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x01,0x00,0x00,0x60,0x01,0x00,0x00,0x47,0x01,0x00,0x00, -0x4e,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x60,0x01,0x00,0x00, -0x5f,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x42,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x61,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x64,0x01,0x00,0x00,0x7d,0x00,0x00,0x00, -0xba,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x66,0x01,0x00,0x00,0x64,0x01,0x00,0x00,0x65,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x68,0x01,0x00,0x00, -0x66,0x01,0x00,0x00,0x78,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x01,0x00,0x00,0x69,0x01,0x00,0x00,0x47,0x01,0x00,0x00, -0x68,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x69,0x01,0x00,0x00, -0x1f,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x42,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x42,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0x2c,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x2c,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6e,0x01,0x00,0x00, -0xba,0x02,0x00,0x00,0x6c,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0x29,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x2b,0x01,0x00,0x00, -0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x6f,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x72,0x01,0x00,0x00,0xbd,0x02,0x00,0x00,0x70,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x75,0x01,0x00,0x00, -0xc1,0x02,0x00,0x00,0x73,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0x77,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x77,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xc3,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0x2b,0x01,0x00,0x00,0x21,0x02,0x00,0x00, -0x7a,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0x7d,0x01,0x00,0x00,0xc3,0x02,0x00,0x00,0x6c,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x79,0x01,0x00,0x00,0x7a,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x7d,0x01,0x00,0x00, -0x78,0x01,0x00,0x00,0x79,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x78,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x7f,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x7f,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xc7,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0x78,0x01,0x00,0x00,0xab,0x01,0x00,0x00,0x82,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x85,0x01,0x00,0x00, -0xc7,0x02,0x00,0x00,0x60,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x81,0x01,0x00,0x00,0x82,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x85,0x01,0x00,0x00,0x80,0x01,0x00,0x00, -0x81,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x80,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0x87,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x87,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xd9,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0x80,0x01,0x00,0x00, -0xa9,0x01,0x00,0x00,0x88,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0x8d,0x01,0x00,0x00,0xd9,0x02,0x00,0x00, -0x62,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x89,0x01,0x00,0x00, -0x88,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x8d,0x01,0x00,0x00,0x88,0x01,0x00,0x00,0x89,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x88,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x93,0x01,0x00,0x00,0xc7,0x02,0x00,0x00, -0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x95,0x01,0x00,0x00,0x93,0x01,0x00,0x00,0xd9,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x97,0x01,0x00,0x00, -0x55,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x99,0x01,0x00,0x00,0xc7,0x02,0x00,0x00, -0x61,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9a,0x01,0x00,0x00,0x97,0x01,0x00,0x00,0x99,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9c,0x01,0x00,0x00, -0x64,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9d,0x01,0x00,0x00,0x9a,0x01,0x00,0x00, -0x9c,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9f,0x01,0x00,0x00,0x9d,0x01,0x00,0x00,0xd9,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa1,0x01,0x00,0x00, -0x9f,0x01,0x00,0x00,0xa0,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa3,0x01,0x00,0x00,0xa1,0x01,0x00,0x00, -0xc3,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x01,0x00,0x00, -0xa4,0x01,0x00,0x00,0xfb,0x00,0x00,0x00,0xa3,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0xf6,0x00,0x00,0x00,0xa5,0x01,0x00,0x00, -0xa4,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0xa6,0x01,0x00,0x00, -0xa7,0x01,0x00,0x00,0x91,0x01,0x00,0x00,0x95,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0xa7,0x01,0x00,0x00,0xa5,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa9,0x01,0x00,0x00, -0xd9,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x87,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x89,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0x82,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x82,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xab,0x01,0x00,0x00,0xc7,0x02,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x7f,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x81,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xad,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xad,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xc8,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0x81,0x01,0x00,0x00,0xd9,0x01,0x00,0x00,0xb0,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xb3,0x01,0x00,0x00, -0xc8,0x02,0x00,0x00,0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xaf,0x01,0x00,0x00,0xb0,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xb3,0x01,0x00,0x00,0xae,0x01,0x00,0x00, -0xaf,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xae,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xb5,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xb5,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xd6,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0xae,0x01,0x00,0x00, -0xd7,0x01,0x00,0x00,0xb6,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0xbb,0x01,0x00,0x00,0xd6,0x02,0x00,0x00, -0xbb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xb7,0x01,0x00,0x00, -0xb6,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xbb,0x01,0x00,0x00,0xb6,0x01,0x00,0x00,0xb7,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xb6,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xc1,0x01,0x00,0x00,0xc8,0x02,0x00,0x00, -0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xc3,0x01,0x00,0x00,0xc1,0x01,0x00,0x00,0xd6,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc5,0x01,0x00,0x00, -0x59,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xc8,0x01,0x00,0x00,0xc8,0x02,0x00,0x00, -0xc7,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xc9,0x01,0x00,0x00,0xc5,0x01,0x00,0x00,0xc8,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xcb,0x01,0x00,0x00, -0x68,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xcc,0x01,0x00,0x00,0xc9,0x01,0x00,0x00, -0xcb,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xce,0x01,0x00,0x00,0xcc,0x01,0x00,0x00,0xd6,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd0,0x01,0x00,0x00, -0xce,0x01,0x00,0x00,0xcf,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xd2,0x01,0x00,0x00,0xd0,0x01,0x00,0x00, -0xc3,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x01,0x00,0x00, -0xd3,0x01,0x00,0x00,0x47,0x01,0x00,0x00,0xd2,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0xf6,0x00,0x00,0x00,0xd4,0x01,0x00,0x00, -0xd3,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0xa6,0x01,0x00,0x00, -0xd5,0x01,0x00,0x00,0xbf,0x01,0x00,0x00,0xc3,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0xd5,0x01,0x00,0x00,0xd4,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd7,0x01,0x00,0x00, -0xd6,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xb5,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xb7,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xb0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xb0,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd9,0x01,0x00,0x00,0xc8,0x02,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xad,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xaf,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xdb,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xdb,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xc9,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0xaf,0x01,0x00,0x00,0x1f,0x02,0x00,0x00,0xde,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xe1,0x01,0x00,0x00, -0xc9,0x02,0x00,0x00,0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xdd,0x01,0x00,0x00,0xde,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xe1,0x01,0x00,0x00,0xdc,0x01,0x00,0x00, -0xdd,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xdc,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xe3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xe3,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xcd,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0xdc,0x01,0x00,0x00, -0x1d,0x02,0x00,0x00,0xe6,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0xe9,0x01,0x00,0x00,0xcd,0x02,0x00,0x00, -0x60,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xe5,0x01,0x00,0x00, -0xe6,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xe9,0x01,0x00,0x00,0xe4,0x01,0x00,0x00,0xe5,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xe4,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xeb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xeb,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xcf,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0xe4,0x01,0x00,0x00,0x1b,0x02,0x00,0x00, -0xee,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0xf1,0x01,0x00,0x00,0xcf,0x02,0x00,0x00,0xbb,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xed,0x01,0x00,0x00,0xee,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xf1,0x01,0x00,0x00, -0xec,0x01,0x00,0x00,0xed,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xec,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xf3,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xf3,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xd1,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0xec,0x01,0x00,0x00,0x19,0x02,0x00,0x00,0xf4,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xf9,0x01,0x00,0x00, -0xd1,0x02,0x00,0x00,0x62,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xf5,0x01,0x00,0x00,0xf4,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xf9,0x01,0x00,0x00,0xf4,0x01,0x00,0x00, -0xf5,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xf4,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfb,0x01,0x00,0x00, -0xc9,0x02,0x00,0x00,0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xfd,0x01,0x00,0x00,0xfb,0x01,0x00,0x00, -0xcf,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xff,0x01,0x00,0x00,0xfd,0x01,0x00,0x00,0xfe,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x01,0x02,0x00,0x00, -0xcd,0x02,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x02,0x02,0x00,0x00,0xff,0x01,0x00,0x00, -0x01,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x04,0x02,0x00,0x00,0x02,0x02,0x00,0x00,0xd1,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x08,0x02,0x00,0x00, -0x01,0x02,0x00,0x00,0xd1,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0xa6,0x01,0x00,0x00,0x09,0x02,0x00,0x00,0x91,0x01,0x00,0x00, -0x08,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xf6,0x00,0x00,0x00, -0x0a,0x02,0x00,0x00,0x09,0x02,0x00,0x00,0x73,0x00,0x04,0x00, -0xc3,0x00,0x00,0x00,0x0b,0x02,0x00,0x00,0x0a,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0xa6,0x01,0x00,0x00,0x10,0x02,0x00,0x00, -0xbf,0x01,0x00,0x00,0xfd,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0xf6,0x00,0x00,0x00,0x11,0x02,0x00,0x00,0x10,0x02,0x00,0x00, -0x73,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x12,0x02,0x00,0x00, -0x11,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00, -0x14,0x02,0x00,0x00,0xc9,0x00,0x00,0x00,0x04,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x15,0x02,0x00,0x00, -0x14,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,0xc3,0x00,0x00,0x00, -0x16,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x0b,0x02,0x00,0x00,0x12,0x02,0x00,0x00,0x15,0x02,0x00,0x00, -0x3e,0x00,0x03,0x00,0x14,0x02,0x00,0x00,0x16,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x19,0x02,0x00,0x00, -0xd1,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xf3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xf5,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xee,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xee,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x1b,0x02,0x00,0x00,0xcf,0x02,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xeb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xed,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xe6,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xe6,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x1d,0x02,0x00,0x00,0xcd,0x02,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xe3,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xe5,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xde,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xde,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1f,0x02,0x00,0x00, -0xc9,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xdb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xdd,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0x7a,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x7a,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x21,0x02,0x00,0x00,0xc3,0x02,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x77,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x79,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x6f,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xd6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd6,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x23,0x02,0x00,0x00, -0xa9,0x02,0x00,0x00,0x6c,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xd3,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd5,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x28,0x02,0x00,0x00, -0x55,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x29,0x02,0x00,0x00,0x95,0x00,0x00,0x00, -0x28,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x2e,0x02,0x00,0x00,0x59,0x00,0x00,0x00,0xb8,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2f,0x02,0x00,0x00, -0xa7,0x00,0x00,0x00,0x2e,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x34,0x02,0x00,0x00,0x12,0x00,0x00,0x00, -0x33,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x35,0x02,0x00,0x00,0x34,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x36,0x02,0x00,0x00,0x0f,0x00,0x00,0x00, -0x35,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x3a,0x02,0x00,0x00,0x47,0x00,0x00,0x00,0x35,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x3c,0x02,0x00,0x00, -0x3b,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x3d,0x02,0x00,0x00,0x3c,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3e,0x02,0x00,0x00, -0x3a,0x02,0x00,0x00,0x3d,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3f,0x02,0x00,0x00,0x36,0x02,0x00,0x00, -0x3e,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x41,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x41,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xaa,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0xd5,0x00,0x00,0x00,0xa7,0x02,0x00,0x00,0x44,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x47,0x02,0x00,0x00, -0xaa,0x02,0x00,0x00,0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x43,0x02,0x00,0x00,0x44,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x47,0x02,0x00,0x00,0x42,0x02,0x00,0x00, -0x43,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x42,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x49,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x49,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xab,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0x42,0x02,0x00,0x00, -0xa5,0x02,0x00,0x00,0x4c,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0x4f,0x02,0x00,0x00,0xab,0x02,0x00,0x00, -0x60,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x4b,0x02,0x00,0x00, -0x4c,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x4f,0x02,0x00,0x00,0x4a,0x02,0x00,0x00,0x4b,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x4a,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x53,0x02,0x00,0x00,0xab,0x02,0x00,0x00, -0x61,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x54,0x02,0x00,0x00,0x29,0x02,0x00,0x00,0x53,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x56,0x02,0x00,0x00, -0x64,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x57,0x02,0x00,0x00,0x54,0x02,0x00,0x00, -0x56,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x5b,0x02,0x00,0x00,0xaa,0x02,0x00,0x00,0xc7,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5c,0x02,0x00,0x00, -0x2f,0x02,0x00,0x00,0x5b,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x5e,0x02,0x00,0x00,0x68,0x00,0x00,0x00, -0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x5f,0x02,0x00,0x00,0x5c,0x02,0x00,0x00,0x5e,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x61,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x61,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xad,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0x4a,0x02,0x00,0x00, -0xa3,0x02,0x00,0x00,0x64,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0x67,0x02,0x00,0x00,0xad,0x02,0x00,0x00, -0xbb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x63,0x02,0x00,0x00, -0x64,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x67,0x02,0x00,0x00,0x62,0x02,0x00,0x00,0x63,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x62,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x69,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x69,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xaf,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0x62,0x02,0x00,0x00,0xa1,0x02,0x00,0x00, -0x6c,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0x6f,0x02,0x00,0x00,0xaf,0x02,0x00,0x00,0x62,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x6b,0x02,0x00,0x00,0x6c,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x6f,0x02,0x00,0x00, -0x6a,0x02,0x00,0x00,0x6b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x6a,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x72,0x02,0x00,0x00,0x57,0x02,0x00,0x00,0xaf,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x75,0x02,0x00,0x00, -0x72,0x02,0x00,0x00,0x36,0x00,0x00,0x00,0xf7,0x00,0x03,0x00, -0x77,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x75,0x02,0x00,0x00,0x76,0x02,0x00,0x00,0x77,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x76,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x7a,0x02,0x00,0x00,0x5f,0x02,0x00,0x00, -0xad,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x7b,0x02,0x00,0x00,0x12,0x00,0x00,0x00,0xcf,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x7c,0x02,0x00,0x00, -0x7b,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0x7d,0x02,0x00,0x00,0x7a,0x02,0x00,0x00,0x7c,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x77,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x77,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0xc1,0x00,0x00,0x00, -0x7e,0x02,0x00,0x00,0x75,0x02,0x00,0x00,0x6a,0x02,0x00,0x00, -0x7d,0x02,0x00,0x00,0x76,0x02,0x00,0x00,0xf7,0x00,0x03,0x00, -0x80,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x7e,0x02,0x00,0x00,0x7f,0x02,0x00,0x00,0x80,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x7f,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x88,0x02,0x00,0x00,0x5f,0x02,0x00,0x00, -0xad,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x8a,0x02,0x00,0x00,0x12,0x00,0x00,0x00,0x89,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x8b,0x02,0x00,0x00, -0x8a,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x8c,0x02,0x00,0x00,0x88,0x02,0x00,0x00,0x8b,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8d,0x02,0x00,0x00, -0x3f,0x02,0x00,0x00,0x8c,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x8f,0x02,0x00,0x00,0x8d,0x02,0x00,0x00, -0x57,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x91,0x02,0x00,0x00,0x8f,0x02,0x00,0x00,0xaf,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x93,0x02,0x00,0x00, -0xaa,0x02,0x00,0x00,0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x95,0x02,0x00,0x00,0x93,0x02,0x00,0x00, -0xad,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x97,0x02,0x00,0x00,0x95,0x02,0x00,0x00,0x96,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x99,0x02,0x00,0x00, -0xab,0x02,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9a,0x02,0x00,0x00,0x97,0x02,0x00,0x00, -0x99,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9c,0x02,0x00,0x00,0x9a,0x02,0x00,0x00,0xaf,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,0x9d,0x02,0x00,0x00, -0xc9,0x00,0x00,0x00,0x9c,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc3,0x00,0x00,0x00,0x9e,0x02,0x00,0x00,0x9d,0x02,0x00,0x00, -0x41,0x00,0x06,0x00,0x11,0x01,0x00,0x00,0x9f,0x02,0x00,0x00, -0x84,0x02,0x00,0x00,0x34,0x00,0x00,0x00,0x91,0x02,0x00,0x00, -0x3e,0x00,0x03,0x00,0x9f,0x02,0x00,0x00,0x9e,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x80,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x80,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x6c,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x6c,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa1,0x02,0x00,0x00,0xaf,0x02,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x69,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x6b,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x64,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x64,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa3,0x02,0x00,0x00, -0xad,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x61,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x63,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x4c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x4c,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa5,0x02,0x00,0x00,0xab,0x02,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x49,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x4b,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x44,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x44,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa7,0x02,0x00,0x00,0xaa,0x02,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x41,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x43,0x02,0x00,0x00,0xfd,0x00,0x01,0x00, -0x38,0x00,0x01,0x00, -}; -const uint64_t matmul_f32_len = 10324; - -unsigned char matmul_f32_aligned_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0x18,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x09,0x00,0x00,0x00, -0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c, -0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00, -0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x0f,0x00,0x0f,0x00,0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x4c,0x00,0x00,0x00, -0xfe,0x00,0x00,0x00,0x05,0x01,0x00,0x00,0x6b,0x01,0x00,0x00, -0x71,0x01,0x00,0x00,0x79,0x02,0x00,0x00,0xc2,0x02,0x00,0x00, -0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x0a,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x0d,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x10,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x37,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x3d,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x4c,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x4f,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x53,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x60,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x62,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x6c,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xa7,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xb9,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xbc,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x02,0x01,0x00,0x00, -0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x00,0x00,0x00, -0x48,0x00,0x04,0x00,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x03,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x03,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x05,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x05,0x01,0x00,0x00,0x21,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x43,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x44,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x6e,0x01,0x00,0x00,0x06,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x6f,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0x6f,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x6f,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x6f,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x6f,0x01,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x71,0x01,0x00,0x00, -0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x71,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x79,0x02,0x00,0x00,0x0b,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xbf,0x02,0x00,0x00, -0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0xc0,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0xc0,0x02,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0xc0,0x02,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xc2,0x02,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xc2,0x02,0x00,0x00,0x21,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00, -0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x1e,0x00,0x10,0x00,0x10,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x11,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x11,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x15,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0x0a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x27,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x3e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x61,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x63,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x61,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x67,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x61,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x6e,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x6d,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x73,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x6d,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x78,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x6d,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x7d,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x6d,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x81,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x97,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0xa2,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0xa9,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xb8,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xb9,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x4f,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbd,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0xbc,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbe,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbf,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0xbe,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc0,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0xbf,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc1,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0xbc,0x00,0x00,0x00, -0x14,0x00,0x02,0x00,0xc2,0x00,0x00,0x00,0x16,0x00,0x03,0x00, -0xc4,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xc5,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xc6,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x1c,0x00,0x04,0x00, -0xc8,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0xc7,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0xc9,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0xc8,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0xcc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0xcd,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xc4,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0xd0,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xf4,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0xf9,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xfa,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xfb,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0xfa,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xfc,0x00,0x00,0x00, -0xf9,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0xfd,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0xfc,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0xfd,0x00,0x00,0x00,0xfe,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x00,0x01,0x00,0x00, -0xc4,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x18,0x00,0x04,0x00, -0x01,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x02,0x00,0x00,0x00, -0x1d,0x00,0x03,0x00,0x02,0x01,0x00,0x00,0x01,0x01,0x00,0x00, -0x1e,0x00,0x03,0x00,0x03,0x01,0x00,0x00,0x02,0x01,0x00,0x00, -0x20,0x00,0x04,0x00,0x04,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x03,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x04,0x01,0x00,0x00, -0x05,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x07,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0xc4,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x0b,0x01,0x00,0x00,0x04,0x00,0x00,0x00, -0xf9,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x1c,0x01,0x00,0x00,0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x24,0x01,0x00,0x00,0x04,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x2c,0x01,0x00,0x00, -0x05,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x34,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x3c,0x01,0x00,0x00,0x07,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x43,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00,0x09,0x00,0x00,0x00, -0x44,0x01,0x00,0x00,0x43,0x01,0x00,0x00,0x39,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x45,0x01,0x00,0x00,0x51,0x00,0x00,0x00,0x44,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x46,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x45,0x01,0x00,0x00, -0x6d,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x47,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x46,0x01,0x00,0x00, -0x6c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x62,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x67,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x68,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0xa7,0x00,0x00,0x00, -0x67,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,0x69,0x01,0x00,0x00, -0xf9,0x00,0x00,0x00,0x68,0x01,0x00,0x00,0x20,0x00,0x04,0x00, -0x6a,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x69,0x01,0x00,0x00, -0x3b,0x00,0x04,0x00,0x6a,0x01,0x00,0x00,0x6b,0x01,0x00,0x00, -0x04,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x6e,0x01,0x00,0x00, -0x01,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,0x6f,0x01,0x00,0x00, -0x6e,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x70,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x6f,0x01,0x00,0x00,0x3b,0x00,0x04,0x00, -0x70,0x01,0x00,0x00,0x71,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xa8,0x01,0x00,0x00, -0x51,0x00,0x00,0x00,0x44,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xa9,0x01,0x00,0x00, -0x84,0x00,0x00,0x00,0xa8,0x01,0x00,0x00,0x6d,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xaa,0x01,0x00,0x00, -0x86,0x00,0x00,0x00,0xa9,0x01,0x00,0x00,0x6c,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xad,0x01,0x00,0x00, -0x08,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xae,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x6d,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xb1,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x6d,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xcc,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xcd,0x01,0x00,0x00, -0xf9,0x00,0x00,0x00,0xcc,0x01,0x00,0x00,0x20,0x00,0x04,0x00, -0xce,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0xcd,0x01,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xde,0x01,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0xe4,0x01,0x00,0x00,0x07,0x00,0x00,0x00, -0xf9,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xfa,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0xbf,0x00,0x00,0x00, -0xbc,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xfb,0x01,0x00,0x00, -0xf9,0x00,0x00,0x00,0xfa,0x01,0x00,0x00,0x20,0x00,0x04,0x00, -0xfc,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0xfb,0x01,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x05,0x02,0x00,0x00, -0x86,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0xbf,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x0d,0x02,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x3c,0x02,0x00,0x00, -0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x71,0x02,0x00,0x00, -0x0d,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x79,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x1d,0x00,0x03,0x00, -0xbf,0x02,0x00,0x00,0xc4,0x00,0x00,0x00,0x1e,0x00,0x03,0x00, -0xc0,0x02,0x00,0x00,0xbf,0x02,0x00,0x00,0x20,0x00,0x04,0x00, -0xc1,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0xc0,0x02,0x00,0x00, -0x3b,0x00,0x04,0x00,0xc1,0x02,0x00,0x00,0xc2,0x02,0x00,0x00, -0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0xc7,0x02,0x00,0x00,0x05,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xd4,0x02,0x00,0x00,0x84,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x36,0x00,0x05,0x00, -0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0xc9,0x00,0x00,0x00,0xca,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xce,0x01,0x00,0x00, -0xcf,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0xfc,0x01,0x00,0x00,0xfd,0x01,0x00,0x00,0x07,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x16,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x16,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x17,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x24,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2a,0x00,0x00,0x00, -0x1e,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x2d,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x2f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x24,0x00,0x00,0x00, -0x2f,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x2a,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x35,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x35,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x38,0x00,0x00,0x00, -0x36,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x82,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x38,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x3b,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x3f,0x00,0x00,0x00, -0x3d,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x3f,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x42,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x3b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x49,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4a,0x00,0x00,0x00, -0x49,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x4d,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x3e,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x4d,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x50,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00, -0x50,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x50,0x00,0x00,0x00, -0x58,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x5d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x64,0x00,0x00,0x00, -0x5d,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x5d,0x00,0x00,0x00, -0x67,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x6f,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x6e,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x74,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x78,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x7e,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x7d,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x82,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x82,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x47,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x88,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0x47,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x8d,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0x83,0x00,0x00,0x00, -0x0c,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x8e,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x26,0x00,0x00,0x00,0x88,0x00,0x00,0x00, -0x8d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x92,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x91,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x93,0x00,0x00,0x00, -0x92,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x94,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x93,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x96,0x00,0x00,0x00, -0x42,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x97,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x99,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x96,0x00,0x00,0x00, -0x99,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9b,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x9a,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9d,0x00,0x00,0x00, -0x9b,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,0x9d,0x00,0x00,0x00, -0x6d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0xa3,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0xa2,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00, -0xa3,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa5,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0xa4,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa8,0x00,0x00,0x00, -0x4a,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0xa9,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xab,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0xa8,0x00,0x00,0x00, -0xab,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xad,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,0xac,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xaf,0x00,0x00,0x00, -0xad,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0xaf,0x00,0x00,0x00, -0x6d,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb2,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xe6,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0x05,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0xb3,0x00,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xc3,0x00,0x00,0x00, -0xe6,0x02,0x00,0x00,0xc1,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xb4,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0xb3,0x00,0x00,0x00, -0xb4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb3,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,0xce,0x00,0x00,0x00, -0xca,0x00,0x00,0x00,0xe6,0x02,0x00,0x00,0x3e,0x00,0x03,0x00, -0xce,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0xe6,0x02,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb2,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xb4,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xd4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd4,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xff,0x02,0x00,0x00, -0xb0,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0xb3,0x01,0x00,0x00, -0xd7,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xfb,0x02,0x00,0x00,0x9e,0x00,0x00,0x00,0xb4,0x00,0x00,0x00, -0xb0,0x01,0x00,0x00,0xd7,0x00,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xe7,0x02,0x00,0x00,0x84,0x00,0x00,0x00, -0xb4,0x00,0x00,0x00,0x61,0x02,0x00,0x00,0xd7,0x00,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xdb,0x00,0x00,0x00, -0xe7,0x02,0x00,0x00,0x8e,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xd6,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xdb,0x00,0x00,0x00,0xd5,0x00,0x00,0x00, -0xd6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd5,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xdd,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xf7,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0xd5,0x00,0x00,0x00, -0x49,0x01,0x00,0x00,0xde,0x00,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0xe3,0x00,0x00,0x00,0xf7,0x02,0x00,0x00, -0x37,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xdf,0x00,0x00,0x00, -0xde,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xe3,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0xdf,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0x74,0x00,0x00,0x00, -0xf7,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xeb,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0x99,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xec,0x00,0x00,0x00, -0xeb,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xed,0x00,0x00,0x00,0xfb,0x02,0x00,0x00, -0xec,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xef,0x00,0x00,0x00,0xed,0x00,0x00,0x00,0x6f,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf5,0x00,0x00,0x00, -0xe8,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,0x6f,0x00,0x00,0x00, -0x6d,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xf8,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,0xf7,0x00,0x00,0x00, -0x41,0x00,0x08,0x00,0x07,0x01,0x00,0x00,0x08,0x01,0x00,0x00, -0x05,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0xef,0x00,0x00,0x00, -0x34,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0x09,0x01,0x00,0x00,0x08,0x01,0x00,0x00, -0x73,0x00,0x04,0x00,0xf9,0x00,0x00,0x00,0x0a,0x01,0x00,0x00, -0x09,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x0b,0x01,0x00,0x00, -0x0c,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,0xf8,0x00,0x00,0x00, -0x3e,0x00,0x03,0x00,0x0c,0x01,0x00,0x00,0x0a,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0e,0x01,0x00,0x00, -0xf8,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x41,0x00,0x08,0x00, -0x07,0x01,0x00,0x00,0x10,0x01,0x00,0x00,0x05,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xef,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0x11,0x01,0x00,0x00,0x10,0x01,0x00,0x00,0x73,0x00,0x04,0x00, -0xf9,0x00,0x00,0x00,0x12,0x01,0x00,0x00,0x11,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x0b,0x01,0x00,0x00,0x13,0x01,0x00,0x00, -0xfe,0x00,0x00,0x00,0x0e,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0x13,0x01,0x00,0x00,0x12,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x15,0x01,0x00,0x00,0xf8,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x07,0x01,0x00,0x00, -0x17,0x01,0x00,0x00,0x05,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0xef,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x18,0x01,0x00,0x00, -0x17,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0xf9,0x00,0x00,0x00, -0x19,0x01,0x00,0x00,0x18,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x0b,0x01,0x00,0x00,0x1a,0x01,0x00,0x00,0xfe,0x00,0x00,0x00, -0x15,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x1a,0x01,0x00,0x00, -0x19,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x1d,0x01,0x00,0x00,0xf8,0x00,0x00,0x00,0x1c,0x01,0x00,0x00, -0x41,0x00,0x08,0x00,0x07,0x01,0x00,0x00,0x1f,0x01,0x00,0x00, -0x05,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0xef,0x00,0x00,0x00, -0x34,0x00,0x00,0x00,0x1c,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0x20,0x01,0x00,0x00,0x1f,0x01,0x00,0x00, -0x73,0x00,0x04,0x00,0xf9,0x00,0x00,0x00,0x21,0x01,0x00,0x00, -0x20,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x0b,0x01,0x00,0x00, -0x22,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,0x1d,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0x22,0x01,0x00,0x00,0x21,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x25,0x01,0x00,0x00, -0xf8,0x00,0x00,0x00,0x24,0x01,0x00,0x00,0x41,0x00,0x08,0x00, -0x07,0x01,0x00,0x00,0x27,0x01,0x00,0x00,0x05,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xef,0x00,0x00,0x00,0xd0,0x00,0x00,0x00, -0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0x28,0x01,0x00,0x00,0x27,0x01,0x00,0x00,0x73,0x00,0x04,0x00, -0xf9,0x00,0x00,0x00,0x29,0x01,0x00,0x00,0x28,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x0b,0x01,0x00,0x00,0x2a,0x01,0x00,0x00, -0xfe,0x00,0x00,0x00,0x25,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0x2a,0x01,0x00,0x00,0x29,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x2d,0x01,0x00,0x00,0xf8,0x00,0x00,0x00, -0x2c,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x07,0x01,0x00,0x00, -0x2f,0x01,0x00,0x00,0x05,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0xef,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x30,0x01,0x00,0x00, -0x2f,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0xf9,0x00,0x00,0x00, -0x31,0x01,0x00,0x00,0x30,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x0b,0x01,0x00,0x00,0x32,0x01,0x00,0x00,0xfe,0x00,0x00,0x00, -0x2d,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x32,0x01,0x00,0x00, -0x31,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x35,0x01,0x00,0x00,0xf8,0x00,0x00,0x00,0x34,0x01,0x00,0x00, -0x41,0x00,0x08,0x00,0x07,0x01,0x00,0x00,0x37,0x01,0x00,0x00, -0x05,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0xef,0x00,0x00,0x00, -0xd0,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0x38,0x01,0x00,0x00,0x37,0x01,0x00,0x00, -0x73,0x00,0x04,0x00,0xf9,0x00,0x00,0x00,0x39,0x01,0x00,0x00, -0x38,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x0b,0x01,0x00,0x00, -0x3a,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,0x35,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0x3a,0x01,0x00,0x00,0x39,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3d,0x01,0x00,0x00, -0xf8,0x00,0x00,0x00,0x3c,0x01,0x00,0x00,0x41,0x00,0x08,0x00, -0x07,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,0x05,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xef,0x00,0x00,0x00,0xd0,0x00,0x00,0x00, -0x1c,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0x40,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,0x73,0x00,0x04,0x00, -0xf9,0x00,0x00,0x00,0x41,0x01,0x00,0x00,0x40,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x0b,0x01,0x00,0x00,0x42,0x01,0x00,0x00, -0xfe,0x00,0x00,0x00,0x3d,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0x42,0x01,0x00,0x00,0x41,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x49,0x01,0x00,0x00,0xf7,0x02,0x00,0x00, -0x47,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xdd,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xdf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x4b,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x4b,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xf8,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0xac,0x01,0x00,0x00, -0x4c,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0x51,0x01,0x00,0x00,0xf8,0x02,0x00,0x00,0xa7,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x4d,0x01,0x00,0x00,0x4c,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x51,0x01,0x00,0x00, -0x4c,0x01,0x00,0x00,0x4d,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x4c,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x56,0x01,0x00,0x00,0x7e,0x00,0x00,0x00,0xf8,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x59,0x01,0x00,0x00, -0x56,0x01,0x00,0x00,0xab,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x5a,0x01,0x00,0x00,0x59,0x01,0x00,0x00, -0x6d,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x5b,0x01,0x00,0x00,0xff,0x02,0x00,0x00,0x5a,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5d,0x01,0x00,0x00, -0x5b,0x01,0x00,0x00,0x79,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x63,0x01,0x00,0x00,0x56,0x01,0x00,0x00, -0x62,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x65,0x01,0x00,0x00,0x79,0x00,0x00,0x00,0x6d,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x66,0x01,0x00,0x00, -0x63,0x01,0x00,0x00,0x65,0x01,0x00,0x00,0x41,0x00,0x08,0x00, -0x07,0x01,0x00,0x00,0x73,0x01,0x00,0x00,0x71,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0x5d,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0x74,0x01,0x00,0x00,0x73,0x01,0x00,0x00,0x73,0x00,0x04,0x00, -0xf9,0x00,0x00,0x00,0x75,0x01,0x00,0x00,0x74,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x0b,0x01,0x00,0x00,0x76,0x01,0x00,0x00, -0x6b,0x01,0x00,0x00,0x66,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0x76,0x01,0x00,0x00,0x75,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x78,0x01,0x00,0x00,0x66,0x01,0x00,0x00, -0x39,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x07,0x01,0x00,0x00, -0x7a,0x01,0x00,0x00,0x71,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0x5d,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x7b,0x01,0x00,0x00, -0x7a,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0xf9,0x00,0x00,0x00, -0x7c,0x01,0x00,0x00,0x7b,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x0b,0x01,0x00,0x00,0x7d,0x01,0x00,0x00,0x6b,0x01,0x00,0x00, -0x78,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x7d,0x01,0x00,0x00, -0x7c,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x7f,0x01,0x00,0x00,0x66,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x41,0x00,0x08,0x00,0x07,0x01,0x00,0x00,0x81,0x01,0x00,0x00, -0x71,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0x5d,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0x82,0x01,0x00,0x00,0x81,0x01,0x00,0x00, -0x73,0x00,0x04,0x00,0xf9,0x00,0x00,0x00,0x83,0x01,0x00,0x00, -0x82,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x0b,0x01,0x00,0x00, -0x84,0x01,0x00,0x00,0x6b,0x01,0x00,0x00,0x7f,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0x84,0x01,0x00,0x00,0x83,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x86,0x01,0x00,0x00, -0x66,0x01,0x00,0x00,0x1c,0x01,0x00,0x00,0x41,0x00,0x08,0x00, -0x07,0x01,0x00,0x00,0x88,0x01,0x00,0x00,0x71,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0x5d,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0x1c,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0x89,0x01,0x00,0x00,0x88,0x01,0x00,0x00,0x73,0x00,0x04,0x00, -0xf9,0x00,0x00,0x00,0x8a,0x01,0x00,0x00,0x89,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x0b,0x01,0x00,0x00,0x8b,0x01,0x00,0x00, -0x6b,0x01,0x00,0x00,0x86,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0x8b,0x01,0x00,0x00,0x8a,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x8d,0x01,0x00,0x00,0x66,0x01,0x00,0x00, -0x24,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x07,0x01,0x00,0x00, -0x8f,0x01,0x00,0x00,0x71,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0x5d,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,0x3e,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x90,0x01,0x00,0x00, -0x8f,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0xf9,0x00,0x00,0x00, -0x91,0x01,0x00,0x00,0x90,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x0b,0x01,0x00,0x00,0x92,0x01,0x00,0x00,0x6b,0x01,0x00,0x00, -0x8d,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x92,0x01,0x00,0x00, -0x91,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x94,0x01,0x00,0x00,0x66,0x01,0x00,0x00,0x2c,0x01,0x00,0x00, -0x41,0x00,0x08,0x00,0x07,0x01,0x00,0x00,0x96,0x01,0x00,0x00, -0x71,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0x5d,0x01,0x00,0x00, -0xd0,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0x97,0x01,0x00,0x00,0x96,0x01,0x00,0x00, -0x73,0x00,0x04,0x00,0xf9,0x00,0x00,0x00,0x98,0x01,0x00,0x00, -0x97,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x0b,0x01,0x00,0x00, -0x99,0x01,0x00,0x00,0x6b,0x01,0x00,0x00,0x94,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0x99,0x01,0x00,0x00,0x98,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9b,0x01,0x00,0x00, -0x66,0x01,0x00,0x00,0x34,0x01,0x00,0x00,0x41,0x00,0x08,0x00, -0x07,0x01,0x00,0x00,0x9d,0x01,0x00,0x00,0x71,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0x5d,0x01,0x00,0x00,0xd0,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0x9e,0x01,0x00,0x00,0x9d,0x01,0x00,0x00,0x73,0x00,0x04,0x00, -0xf9,0x00,0x00,0x00,0x9f,0x01,0x00,0x00,0x9e,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x0b,0x01,0x00,0x00,0xa0,0x01,0x00,0x00, -0x6b,0x01,0x00,0x00,0x9b,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0xa0,0x01,0x00,0x00,0x9f,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa2,0x01,0x00,0x00,0x66,0x01,0x00,0x00, -0x3c,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x07,0x01,0x00,0x00, -0xa4,0x01,0x00,0x00,0x71,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0x5d,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,0x1c,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0xa5,0x01,0x00,0x00, -0xa4,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0xf9,0x00,0x00,0x00, -0xa6,0x01,0x00,0x00,0xa5,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x0b,0x01,0x00,0x00,0xa7,0x01,0x00,0x00,0x6b,0x01,0x00,0x00, -0xa2,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xa7,0x01,0x00,0x00, -0xa6,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xac,0x01,0x00,0x00,0xf8,0x02,0x00,0x00,0xaa,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0x4b,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x4d,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0xad,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xb0,0x01,0x00,0x00,0xfb,0x02,0x00,0x00, -0xae,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xb3,0x01,0x00,0x00,0xff,0x02,0x00,0x00,0xb1,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xb5,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xb5,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x01,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0x4d,0x01,0x00,0x00, -0x5f,0x02,0x00,0x00,0xb8,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0xbb,0x01,0x00,0x00,0x01,0x03,0x00,0x00, -0x6c,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xb7,0x01,0x00,0x00, -0xb8,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xbb,0x01,0x00,0x00,0xb6,0x01,0x00,0x00,0xb7,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xb6,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xbd,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xbd,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x05,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0xb6,0x01,0x00,0x00,0xe9,0x01,0x00,0x00, -0xc0,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0xc3,0x01,0x00,0x00,0x05,0x03,0x00,0x00,0x60,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xbf,0x01,0x00,0x00,0xc0,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xc3,0x01,0x00,0x00, -0xbe,0x01,0x00,0x00,0xbf,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xbe,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xc5,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xc5,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x17,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0xbe,0x01,0x00,0x00,0xe7,0x01,0x00,0x00,0xc6,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xcb,0x01,0x00,0x00, -0x17,0x03,0x00,0x00,0x62,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xc7,0x01,0x00,0x00,0xc6,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xcb,0x01,0x00,0x00,0xc6,0x01,0x00,0x00, -0xc7,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xc6,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd1,0x01,0x00,0x00, -0x05,0x03,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xd3,0x01,0x00,0x00,0xd1,0x01,0x00,0x00, -0x17,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd5,0x01,0x00,0x00,0x55,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd7,0x01,0x00,0x00, -0x05,0x03,0x00,0x00,0x61,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xd8,0x01,0x00,0x00,0xd5,0x01,0x00,0x00, -0xd7,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xda,0x01,0x00,0x00,0x64,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdb,0x01,0x00,0x00, -0xd8,0x01,0x00,0x00,0xda,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xdd,0x01,0x00,0x00,0xdb,0x01,0x00,0x00, -0x17,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xdf,0x01,0x00,0x00,0xdd,0x01,0x00,0x00,0xde,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe1,0x01,0x00,0x00, -0xdf,0x01,0x00,0x00,0x01,0x03,0x00,0x00,0x41,0x00,0x05,0x00, -0x0b,0x01,0x00,0x00,0xe2,0x01,0x00,0x00,0xfe,0x00,0x00,0x00, -0xe1,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xf9,0x00,0x00,0x00, -0xe3,0x01,0x00,0x00,0xe2,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0xe4,0x01,0x00,0x00,0xe5,0x01,0x00,0x00,0xcf,0x01,0x00,0x00, -0xd3,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xe5,0x01,0x00,0x00, -0xe3,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xe7,0x01,0x00,0x00,0x17,0x03,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xc5,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xc7,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xc0,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xc0,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xe9,0x01,0x00,0x00,0x05,0x03,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xbd,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xbf,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xeb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xeb,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x06,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0xbf,0x01,0x00,0x00,0x17,0x02,0x00,0x00, -0xee,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0xf1,0x01,0x00,0x00,0x06,0x03,0x00,0x00,0xbf,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xed,0x01,0x00,0x00,0xee,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xf1,0x01,0x00,0x00, -0xec,0x01,0x00,0x00,0xed,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xec,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xf3,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xf3,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x14,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0xec,0x01,0x00,0x00,0x15,0x02,0x00,0x00,0xf4,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xf9,0x01,0x00,0x00, -0x14,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xf5,0x01,0x00,0x00,0xf4,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xf9,0x01,0x00,0x00,0xf4,0x01,0x00,0x00, -0xf5,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xf4,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xff,0x01,0x00,0x00, -0x06,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x01,0x02,0x00,0x00,0xff,0x01,0x00,0x00, -0x14,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x03,0x02,0x00,0x00,0x59,0x00,0x00,0x00,0xb9,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x06,0x02,0x00,0x00, -0x06,0x03,0x00,0x00,0x05,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x07,0x02,0x00,0x00,0x03,0x02,0x00,0x00, -0x06,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x09,0x02,0x00,0x00,0x68,0x00,0x00,0x00,0xbc,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0a,0x02,0x00,0x00, -0x07,0x02,0x00,0x00,0x09,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x0c,0x02,0x00,0x00,0x0a,0x02,0x00,0x00, -0x14,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x0e,0x02,0x00,0x00,0x0c,0x02,0x00,0x00,0x0d,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x10,0x02,0x00,0x00, -0x0e,0x02,0x00,0x00,0x01,0x03,0x00,0x00,0x41,0x00,0x05,0x00, -0x0b,0x01,0x00,0x00,0x11,0x02,0x00,0x00,0x6b,0x01,0x00,0x00, -0x10,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xf9,0x00,0x00,0x00, -0x12,0x02,0x00,0x00,0x11,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0xe4,0x01,0x00,0x00,0x13,0x02,0x00,0x00,0xfd,0x01,0x00,0x00, -0x01,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x13,0x02,0x00,0x00, -0x12,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x15,0x02,0x00,0x00,0x14,0x03,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xf3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xf5,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xee,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xee,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x17,0x02,0x00,0x00,0x06,0x03,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xeb,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xed,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0x19,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x19,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x07,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0xed,0x01,0x00,0x00,0x5d,0x02,0x00,0x00, -0x1c,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0x1f,0x02,0x00,0x00,0x07,0x03,0x00,0x00,0xbf,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x1b,0x02,0x00,0x00,0x1c,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x1f,0x02,0x00,0x00, -0x1a,0x02,0x00,0x00,0x1b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x1a,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x21,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x21,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x0b,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0x1a,0x02,0x00,0x00,0x5b,0x02,0x00,0x00,0x24,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x27,0x02,0x00,0x00, -0x0b,0x03,0x00,0x00,0x60,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x23,0x02,0x00,0x00,0x24,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x27,0x02,0x00,0x00,0x22,0x02,0x00,0x00, -0x23,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x22,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x29,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x29,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x0d,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0x22,0x02,0x00,0x00, -0x59,0x02,0x00,0x00,0x2c,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0x2f,0x02,0x00,0x00,0x0d,0x03,0x00,0x00, -0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x2b,0x02,0x00,0x00, -0x2c,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x2f,0x02,0x00,0x00,0x2a,0x02,0x00,0x00,0x2b,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x2a,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x31,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x31,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x0f,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0x2a,0x02,0x00,0x00,0x57,0x02,0x00,0x00, -0x32,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0x37,0x02,0x00,0x00,0x0f,0x03,0x00,0x00,0x62,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x33,0x02,0x00,0x00,0x32,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x37,0x02,0x00,0x00, -0x32,0x02,0x00,0x00,0x33,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x32,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x39,0x02,0x00,0x00,0x07,0x03,0x00,0x00,0xbc,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3b,0x02,0x00,0x00, -0x39,0x02,0x00,0x00,0x0d,0x03,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3d,0x02,0x00,0x00,0x3b,0x02,0x00,0x00, -0x3c,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x3f,0x02,0x00,0x00,0x0b,0x03,0x00,0x00,0x62,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x40,0x02,0x00,0x00, -0x3d,0x02,0x00,0x00,0x3f,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x42,0x02,0x00,0x00,0x40,0x02,0x00,0x00, -0x0f,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x46,0x02,0x00,0x00,0x3f,0x02,0x00,0x00,0x0f,0x03,0x00,0x00, -0x41,0x00,0x05,0x00,0xe4,0x01,0x00,0x00,0x47,0x02,0x00,0x00, -0xcf,0x01,0x00,0x00,0x46,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0xf9,0x00,0x00,0x00,0x48,0x02,0x00,0x00,0x47,0x02,0x00,0x00, -0x73,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x49,0x02,0x00,0x00, -0x48,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xe4,0x01,0x00,0x00, -0x4e,0x02,0x00,0x00,0xfd,0x01,0x00,0x00,0x3b,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0xf9,0x00,0x00,0x00,0x4f,0x02,0x00,0x00, -0x4e,0x02,0x00,0x00,0x73,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0x50,0x02,0x00,0x00,0x4f,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0xcd,0x00,0x00,0x00,0x52,0x02,0x00,0x00,0xca,0x00,0x00,0x00, -0x42,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0x53,0x02,0x00,0x00,0x52,0x02,0x00,0x00,0x0c,0x00,0x08,0x00, -0xc4,0x00,0x00,0x00,0x54,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0x49,0x02,0x00,0x00,0x50,0x02,0x00,0x00, -0x53,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x52,0x02,0x00,0x00, -0x54,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x57,0x02,0x00,0x00,0x0f,0x03,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x31,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x33,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x2c,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x2c,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x59,0x02,0x00,0x00,0x0d,0x03,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x29,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x2b,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x24,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x24,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5b,0x02,0x00,0x00, -0x0b,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x21,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x23,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x1c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x1c,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x5d,0x02,0x00,0x00,0x07,0x03,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x19,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x1b,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xb8,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xb8,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x5f,0x02,0x00,0x00,0x01,0x03,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb5,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xb7,0x01,0x00,0x00,0xe0,0x00,0x04,0x00, -0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xad,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xd7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xd7,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x61,0x02,0x00,0x00,0xe7,0x02,0x00,0x00,0x6c,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xd4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xd6,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x66,0x02,0x00,0x00,0x55,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x67,0x02,0x00,0x00, -0x96,0x00,0x00,0x00,0x66,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x6c,0x02,0x00,0x00,0x59,0x00,0x00,0x00, -0xb9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x6d,0x02,0x00,0x00,0xa8,0x00,0x00,0x00,0x6c,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x72,0x02,0x00,0x00, -0x12,0x00,0x00,0x00,0x71,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x73,0x02,0x00,0x00,0x72,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x74,0x02,0x00,0x00, -0x0f,0x00,0x00,0x00,0x73,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x78,0x02,0x00,0x00,0x47,0x00,0x00,0x00, -0x73,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x7a,0x02,0x00,0x00,0x79,0x02,0x00,0x00,0x0c,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x7b,0x02,0x00,0x00, -0x7a,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x7c,0x02,0x00,0x00,0x78,0x02,0x00,0x00,0x7b,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7d,0x02,0x00,0x00, -0x74,0x02,0x00,0x00,0x7c,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x7f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x7f,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xe8,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0xe5,0x02,0x00,0x00, -0x82,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0x85,0x02,0x00,0x00,0xe8,0x02,0x00,0x00,0xbf,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x81,0x02,0x00,0x00,0x82,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x85,0x02,0x00,0x00, -0x80,0x02,0x00,0x00,0x81,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x80,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x87,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x87,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xe9,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0x80,0x02,0x00,0x00,0xe3,0x02,0x00,0x00,0x8a,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x8d,0x02,0x00,0x00, -0xe9,0x02,0x00,0x00,0x60,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x89,0x02,0x00,0x00,0x8a,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x8d,0x02,0x00,0x00,0x88,0x02,0x00,0x00, -0x89,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x88,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x91,0x02,0x00,0x00, -0xe9,0x02,0x00,0x00,0x61,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x92,0x02,0x00,0x00,0x67,0x02,0x00,0x00, -0x91,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x94,0x02,0x00,0x00,0x64,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x95,0x02,0x00,0x00, -0x92,0x02,0x00,0x00,0x94,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x99,0x02,0x00,0x00,0xe8,0x02,0x00,0x00, -0x05,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9a,0x02,0x00,0x00,0x6d,0x02,0x00,0x00,0x99,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9c,0x02,0x00,0x00, -0x68,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9d,0x02,0x00,0x00,0x9a,0x02,0x00,0x00, -0x9c,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x9f,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x9f,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xeb,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0x88,0x02,0x00,0x00,0xe1,0x02,0x00,0x00,0xa2,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xa5,0x02,0x00,0x00, -0xeb,0x02,0x00,0x00,0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xa1,0x02,0x00,0x00,0xa2,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xa5,0x02,0x00,0x00,0xa0,0x02,0x00,0x00, -0xa1,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xa0,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0xa7,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xa7,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xed,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0xa0,0x02,0x00,0x00, -0xdf,0x02,0x00,0x00,0xaa,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0xad,0x02,0x00,0x00,0xed,0x02,0x00,0x00, -0x62,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xa9,0x02,0x00,0x00, -0xaa,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xad,0x02,0x00,0x00,0xa8,0x02,0x00,0x00,0xa9,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xa8,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xb0,0x02,0x00,0x00,0x95,0x02,0x00,0x00, -0xed,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0xb3,0x02,0x00,0x00,0xb0,0x02,0x00,0x00,0x36,0x00,0x00,0x00, -0xf7,0x00,0x03,0x00,0xb5,0x02,0x00,0x00,0x00,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xb3,0x02,0x00,0x00,0xb4,0x02,0x00,0x00, -0xb5,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xb4,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb8,0x02,0x00,0x00, -0x9d,0x02,0x00,0x00,0xeb,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0xb9,0x02,0x00,0x00,0x12,0x00,0x00,0x00, -0xd0,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xba,0x02,0x00,0x00,0xb9,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0xbb,0x02,0x00,0x00,0xb8,0x02,0x00,0x00, -0xba,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xb5,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xb5,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0xc2,0x00,0x00,0x00,0xbc,0x02,0x00,0x00,0xb3,0x02,0x00,0x00, -0xa8,0x02,0x00,0x00,0xbb,0x02,0x00,0x00,0xb4,0x02,0x00,0x00, -0xf7,0x00,0x03,0x00,0xbe,0x02,0x00,0x00,0x00,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xbc,0x02,0x00,0x00,0xbd,0x02,0x00,0x00, -0xbe,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xbd,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc6,0x02,0x00,0x00, -0x9d,0x02,0x00,0x00,0xeb,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0xc8,0x02,0x00,0x00,0x12,0x00,0x00,0x00, -0xc7,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xc9,0x02,0x00,0x00,0xc8,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xca,0x02,0x00,0x00,0xc6,0x02,0x00,0x00, -0xc9,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xcb,0x02,0x00,0x00,0x7d,0x02,0x00,0x00,0xca,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xcd,0x02,0x00,0x00, -0xcb,0x02,0x00,0x00,0x95,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xcf,0x02,0x00,0x00,0xcd,0x02,0x00,0x00, -0xed,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd1,0x02,0x00,0x00,0xe8,0x02,0x00,0x00,0xbc,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd3,0x02,0x00,0x00, -0xd1,0x02,0x00,0x00,0xeb,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xd5,0x02,0x00,0x00,0xd3,0x02,0x00,0x00, -0xd4,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd7,0x02,0x00,0x00,0xe9,0x02,0x00,0x00,0x62,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd8,0x02,0x00,0x00, -0xd5,0x02,0x00,0x00,0xd7,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xda,0x02,0x00,0x00,0xd8,0x02,0x00,0x00, -0xed,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00, -0xdb,0x02,0x00,0x00,0xca,0x00,0x00,0x00,0xda,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0xdc,0x02,0x00,0x00, -0xdb,0x02,0x00,0x00,0x41,0x00,0x06,0x00,0x07,0x01,0x00,0x00, -0xdd,0x02,0x00,0x00,0xc2,0x02,0x00,0x00,0x34,0x00,0x00,0x00, -0xcf,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0xdd,0x02,0x00,0x00, -0xdc,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xbe,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xbe,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0xaa,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xaa,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdf,0x02,0x00,0x00, -0xed,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xa7,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xa9,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0xa2,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xa2,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xe1,0x02,0x00,0x00,0xeb,0x02,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x9f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xa1,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x8a,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x8a,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xe3,0x02,0x00,0x00,0xe9,0x02,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x87,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x89,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x82,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x82,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe5,0x02,0x00,0x00, -0xe8,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x7f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x81,0x02,0x00,0x00, -0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00, -}; -const uint64_t matmul_f32_aligned_len = 11432; - -unsigned char matmul_f32_aligned_fp32_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0xcf,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00, -0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30, -0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x0f,0x00,0x0f,0x00,0x05,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x4c,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,0x03,0x01,0x00,0x00, -0x45,0x01,0x00,0x00,0x4b,0x01,0x00,0x00,0x30,0x02,0x00,0x00, -0x79,0x02,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x05,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x30,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x0d,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0x10,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x37,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x3d,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x4c,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x4f,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x53,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x60,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x62,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x6c,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xa7,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xb9,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xbc,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x00,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x48,0x00,0x04,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x01,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0x01,0x01,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x03,0x01,0x00,0x00,0x22,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x03,0x01,0x00,0x00, -0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x1d,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x1e,0x01,0x00,0x00,0x0b,0x00,0x00,0x00, -0x19,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x48,0x01,0x00,0x00, -0x06,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0x49,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x49,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x49,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x4b,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x4b,0x01,0x00,0x00,0x21,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x30,0x02,0x00,0x00, -0x0b,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x76,0x02,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x04,0x00,0x77,0x02,0x00,0x00,0x00,0x00,0x00,0x00, -0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x77,0x02,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0x77,0x02,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x79,0x02,0x00,0x00,0x22,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x79,0x02,0x00,0x00, -0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00, -0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00, -0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x1e,0x00,0x10,0x00,0x10,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x11,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x11,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x21,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x2d,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x34,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x3d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x4c,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x4f,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x58,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x61,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x61,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x67,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x61,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x6d,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x6e,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x6d,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x73,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x6d,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x78,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x6d,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x7d,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x6d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x81,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x91,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x97,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa7,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0xa9,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xba,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0xb9,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbb,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xbc,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xbd,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xbb,0x00,0x00,0x00, -0xbc,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xbe,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xbd,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xbf,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0xba,0x00,0x00,0x00, -0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xc0,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xb8,0x00,0x00,0x00, -0xbf,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xc1,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc0,0x00,0x00,0x00, -0xbc,0x00,0x00,0x00,0x14,0x00,0x02,0x00,0xc2,0x00,0x00,0x00, -0x16,0x00,0x03,0x00,0xc4,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0xbf,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc7,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0xbc,0x00,0x00,0x00, -0x1c,0x00,0x04,0x00,0xc8,0x00,0x00,0x00,0xc4,0x00,0x00,0x00, -0xc7,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xc9,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0xcd,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0xc4,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0xd0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,0x1c,0x00,0x04,0x00, -0xfb,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0xfa,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0xfc,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0xfb,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xfc,0x00,0x00,0x00, -0xfd,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x17,0x00,0x04,0x00, -0xff,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x1d,0x00,0x03,0x00,0x00,0x01,0x00,0x00,0xff,0x00,0x00,0x00, -0x1e,0x00,0x03,0x00,0x01,0x01,0x00,0x00,0x00,0x01,0x00,0x00, -0x20,0x00,0x04,0x00,0x02,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x01,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x02,0x01,0x00,0x00, -0x03,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x05,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0xc4,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x08,0x01,0x00,0x00,0x04,0x00,0x00,0x00, -0xc4,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x17,0x01,0x00,0x00,0x03,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x1d,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0x33,0x00,0x06,0x00,0x09,0x00,0x00,0x00,0x1e,0x01,0x00,0x00, -0x1d,0x01,0x00,0x00,0x39,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x1f,0x01,0x00,0x00, -0x51,0x00,0x00,0x00,0x1e,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x20,0x01,0x00,0x00, -0x84,0x00,0x00,0x00,0x1f,0x01,0x00,0x00,0x6d,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x21,0x01,0x00,0x00, -0x86,0x00,0x00,0x00,0x20,0x01,0x00,0x00,0x6c,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x3c,0x01,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x41,0x01,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x42,0x01,0x00,0x00, -0x84,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0x41,0x01,0x00,0x00, -0x1c,0x00,0x04,0x00,0x43,0x01,0x00,0x00,0xc4,0x00,0x00,0x00, -0x42,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x44,0x01,0x00,0x00, -0x04,0x00,0x00,0x00,0x43,0x01,0x00,0x00,0x3b,0x00,0x04,0x00, -0x44,0x01,0x00,0x00,0x45,0x01,0x00,0x00,0x04,0x00,0x00,0x00, -0x1d,0x00,0x03,0x00,0x48,0x01,0x00,0x00,0xff,0x00,0x00,0x00, -0x1e,0x00,0x03,0x00,0x49,0x01,0x00,0x00,0x48,0x01,0x00,0x00, -0x20,0x00,0x04,0x00,0x4a,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x49,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x4a,0x01,0x00,0x00, -0x4b,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x62,0x01,0x00,0x00,0x51,0x00,0x00,0x00, -0x1e,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x63,0x01,0x00,0x00,0x84,0x00,0x00,0x00, -0x62,0x01,0x00,0x00,0x6d,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x64,0x01,0x00,0x00,0x86,0x00,0x00,0x00, -0x63,0x01,0x00,0x00,0x6c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x67,0x01,0x00,0x00,0x08,0x01,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x68,0x01,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x6d,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x6b,0x01,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x6d,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x86,0x01,0x00,0x00, -0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x1c,0x00,0x04,0x00,0x87,0x01,0x00,0x00,0xc4,0x00,0x00,0x00, -0x86,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x88,0x01,0x00,0x00, -0x07,0x00,0x00,0x00,0x87,0x01,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x98,0x01,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xb3,0x01,0x00,0x00,0x84,0x00,0x00,0x00, -0xbf,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x1c,0x00,0x04,0x00, -0xb4,0x01,0x00,0x00,0xc4,0x00,0x00,0x00,0xb3,0x01,0x00,0x00, -0x20,0x00,0x04,0x00,0xb5,0x01,0x00,0x00,0x07,0x00,0x00,0x00, -0xb4,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xbe,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0xb9,0x00,0x00,0x00, -0xbf,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xc6,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xf5,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x28,0x02,0x00,0x00,0x0d,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x30,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0x1d,0x00,0x03,0x00,0x76,0x02,0x00,0x00,0xc4,0x00,0x00,0x00, -0x1e,0x00,0x03,0x00,0x77,0x02,0x00,0x00,0x76,0x02,0x00,0x00, -0x20,0x00,0x04,0x00,0x78,0x02,0x00,0x00,0x0c,0x00,0x00,0x00, -0x77,0x02,0x00,0x00,0x3b,0x00,0x04,0x00,0x78,0x02,0x00,0x00, -0x79,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x7e,0x02,0x00,0x00,0x05,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x8b,0x02,0x00,0x00, -0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x05,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xc9,0x00,0x00,0x00, -0xca,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x88,0x01,0x00,0x00,0x89,0x01,0x00,0x00,0x07,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0xb5,0x01,0x00,0x00,0xb6,0x01,0x00,0x00, -0x07,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x16,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x17,0x00,0x00,0x00, -0x16,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x17,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1e,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x21,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x28,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x27,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x29,0x00,0x00,0x00, -0x28,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x2a,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x29,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x2e,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00, -0x24,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x30,0x00,0x00,0x00, -0x2a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x35,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x36,0x00,0x00,0x00, -0x35,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x38,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00, -0x38,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x3a,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x3f,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x3e,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x3f,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x42,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x3b,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x47,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x4a,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x4c,0x00,0x00,0x00, -0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x4f,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x55,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x54,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00, -0x50,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x4f,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x64,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,0x63,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x68,0x00,0x00,0x00, -0x5d,0x00,0x00,0x00,0x67,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x6e,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x74,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x73,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x79,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x7d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x82,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x81,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x83,0x00,0x00,0x00, -0x82,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0x83,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x87,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x87,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8a,0x00,0x00,0x00, -0x47,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x8a,0x00,0x00,0x00, -0x83,0x00,0x00,0x00,0x0c,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x8e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x26,0x00,0x00,0x00, -0x88,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x91,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x93,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x93,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x96,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x98,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x98,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9a,0x00,0x00,0x00, -0x96,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x94,0x00,0x00,0x00, -0x9a,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9d,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9e,0x00,0x00,0x00, -0x9d,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0xa2,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xa4,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0xa4,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa8,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0xa7,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0xaa,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0xaa,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00, -0xa8,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xad,0x00,0x00,0x00,0xa5,0x00,0x00,0x00, -0xac,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xaf,0x00,0x00,0x00,0xad,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb0,0x00,0x00,0x00, -0xaf,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xb2,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb2,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x9d,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0xd1,0x00,0x00,0x00, -0xb3,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0xc3,0x00,0x00,0x00,0x9d,0x02,0x00,0x00,0xc1,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xb4,0x00,0x00,0x00,0xb3,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xc3,0x00,0x00,0x00, -0xb3,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xb3,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00, -0xce,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0x9d,0x02,0x00,0x00, -0x3e,0x00,0x03,0x00,0xce,0x00,0x00,0x00,0xcc,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd1,0x00,0x00,0x00, -0x9d,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xb2,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb4,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xd4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xd4,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xb6,0x02,0x00,0x00,0xb0,0x00,0x00,0x00,0xb4,0x00,0x00,0x00, -0x6d,0x01,0x00,0x00,0xd7,0x00,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xb2,0x02,0x00,0x00,0x9e,0x00,0x00,0x00, -0xb4,0x00,0x00,0x00,0x6a,0x01,0x00,0x00,0xd7,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x9e,0x02,0x00,0x00, -0x84,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0x18,0x02,0x00,0x00, -0xd7,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0xdb,0x00,0x00,0x00,0x9e,0x02,0x00,0x00,0x8e,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xd6,0x00,0x00,0x00,0xd7,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xdb,0x00,0x00,0x00, -0xd5,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xd5,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xdd,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xae,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0xd5,0x00,0x00,0x00,0x23,0x01,0x00,0x00,0xde,0x00,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xe3,0x00,0x00,0x00, -0xae,0x02,0x00,0x00,0x37,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xdf,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xe3,0x00,0x00,0x00,0xde,0x00,0x00,0x00, -0xdf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe8,0x00,0x00,0x00, -0x74,0x00,0x00,0x00,0xae,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,0xe8,0x00,0x00,0x00, -0x99,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xec,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,0x6d,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xed,0x00,0x00,0x00, -0xb2,0x02,0x00,0x00,0xec,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xef,0x00,0x00,0x00,0xed,0x00,0x00,0x00, -0x6f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xf5,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0xf4,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf7,0x00,0x00,0x00, -0x6f,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,0xf5,0x00,0x00,0x00, -0xf7,0x00,0x00,0x00,0x41,0x00,0x07,0x00,0x05,0x01,0x00,0x00, -0x06,0x01,0x00,0x00,0x03,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0xef,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0x07,0x01,0x00,0x00,0x06,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x08,0x01,0x00,0x00,0x09,0x01,0x00,0x00, -0xfd,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,0x3e,0x00,0x03,0x00, -0x09,0x01,0x00,0x00,0x07,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x0b,0x01,0x00,0x00,0xf8,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x41,0x00,0x07,0x00,0x05,0x01,0x00,0x00, -0x0d,0x01,0x00,0x00,0x03,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0xef,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0x0e,0x01,0x00,0x00,0x0d,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x08,0x01,0x00,0x00,0x0f,0x01,0x00,0x00, -0xfd,0x00,0x00,0x00,0x0b,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0x0f,0x01,0x00,0x00,0x0e,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x11,0x01,0x00,0x00,0xf8,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x41,0x00,0x07,0x00,0x05,0x01,0x00,0x00, -0x13,0x01,0x00,0x00,0x03,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0xef,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0x14,0x01,0x00,0x00,0x13,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x08,0x01,0x00,0x00,0x15,0x01,0x00,0x00, -0xfd,0x00,0x00,0x00,0x11,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0x15,0x01,0x00,0x00,0x14,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x18,0x01,0x00,0x00,0xf8,0x00,0x00,0x00, -0x17,0x01,0x00,0x00,0x41,0x00,0x07,0x00,0x05,0x01,0x00,0x00, -0x1a,0x01,0x00,0x00,0x03,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0xef,0x00,0x00,0x00,0x17,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0x1b,0x01,0x00,0x00,0x1a,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x08,0x01,0x00,0x00,0x1c,0x01,0x00,0x00, -0xfd,0x00,0x00,0x00,0x18,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0x1c,0x01,0x00,0x00,0x1b,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x23,0x01,0x00,0x00,0xae,0x02,0x00,0x00, -0x21,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xdd,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xdf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x25,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x25,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xaf,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0x66,0x01,0x00,0x00, -0x26,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0x2b,0x01,0x00,0x00,0xaf,0x02,0x00,0x00,0xa7,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x27,0x01,0x00,0x00,0x26,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x2b,0x01,0x00,0x00, -0x26,0x01,0x00,0x00,0x27,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x26,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x30,0x01,0x00,0x00,0x7e,0x00,0x00,0x00,0xaf,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x33,0x01,0x00,0x00, -0x30,0x01,0x00,0x00,0xab,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x34,0x01,0x00,0x00,0x33,0x01,0x00,0x00, -0x6d,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x35,0x01,0x00,0x00,0xb6,0x02,0x00,0x00,0x34,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x37,0x01,0x00,0x00, -0x35,0x01,0x00,0x00,0x79,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3d,0x01,0x00,0x00,0x30,0x01,0x00,0x00, -0x3c,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x3f,0x01,0x00,0x00,0x79,0x00,0x00,0x00,0x6d,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x40,0x01,0x00,0x00, -0x3d,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,0x41,0x00,0x07,0x00, -0x05,0x01,0x00,0x00,0x4d,0x01,0x00,0x00,0x4b,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0x37,0x01,0x00,0x00,0x3e,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x4e,0x01,0x00,0x00, -0x4d,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x08,0x01,0x00,0x00, -0x4f,0x01,0x00,0x00,0x45,0x01,0x00,0x00,0x40,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0x4f,0x01,0x00,0x00,0x4e,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x51,0x01,0x00,0x00, -0x40,0x01,0x00,0x00,0x39,0x00,0x00,0x00,0x41,0x00,0x07,0x00, -0x05,0x01,0x00,0x00,0x53,0x01,0x00,0x00,0x4b,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0x37,0x01,0x00,0x00,0x39,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x54,0x01,0x00,0x00, -0x53,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x08,0x01,0x00,0x00, -0x55,0x01,0x00,0x00,0x45,0x01,0x00,0x00,0x51,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0x55,0x01,0x00,0x00,0x54,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x57,0x01,0x00,0x00, -0x40,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x41,0x00,0x07,0x00, -0x05,0x01,0x00,0x00,0x59,0x01,0x00,0x00,0x4b,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0x37,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x5a,0x01,0x00,0x00, -0x59,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x08,0x01,0x00,0x00, -0x5b,0x01,0x00,0x00,0x45,0x01,0x00,0x00,0x57,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0x5b,0x01,0x00,0x00,0x5a,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5d,0x01,0x00,0x00, -0x40,0x01,0x00,0x00,0x17,0x01,0x00,0x00,0x41,0x00,0x07,0x00, -0x05,0x01,0x00,0x00,0x5f,0x01,0x00,0x00,0x4b,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0x37,0x01,0x00,0x00,0x17,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x60,0x01,0x00,0x00, -0x5f,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x08,0x01,0x00,0x00, -0x61,0x01,0x00,0x00,0x45,0x01,0x00,0x00,0x5d,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0x61,0x01,0x00,0x00,0x60,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x66,0x01,0x00,0x00, -0xaf,0x02,0x00,0x00,0x64,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0x25,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x27,0x01,0x00,0x00, -0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x67,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x6a,0x01,0x00,0x00,0xb2,0x02,0x00,0x00,0x68,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6d,0x01,0x00,0x00, -0xb6,0x02,0x00,0x00,0x6b,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0x6f,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x6f,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xb8,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0x27,0x01,0x00,0x00,0x16,0x02,0x00,0x00, -0x72,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0x75,0x01,0x00,0x00,0xb8,0x02,0x00,0x00,0x6c,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x71,0x01,0x00,0x00,0x72,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x75,0x01,0x00,0x00, -0x70,0x01,0x00,0x00,0x71,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x70,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x77,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x77,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xbc,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0x70,0x01,0x00,0x00,0xa2,0x01,0x00,0x00,0x7a,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x7d,0x01,0x00,0x00, -0xbc,0x02,0x00,0x00,0x60,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x79,0x01,0x00,0x00,0x7a,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x7d,0x01,0x00,0x00,0x78,0x01,0x00,0x00, -0x79,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x78,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0x7f,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x7f,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xce,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0x78,0x01,0x00,0x00, -0xa0,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0x85,0x01,0x00,0x00,0xce,0x02,0x00,0x00, -0x62,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x81,0x01,0x00,0x00, -0x80,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x85,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0x81,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x80,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x8b,0x01,0x00,0x00,0xbc,0x02,0x00,0x00, -0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x8d,0x01,0x00,0x00,0x8b,0x01,0x00,0x00,0xce,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8f,0x01,0x00,0x00, -0x55,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x91,0x01,0x00,0x00,0xbc,0x02,0x00,0x00, -0x61,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x92,0x01,0x00,0x00,0x8f,0x01,0x00,0x00,0x91,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x94,0x01,0x00,0x00, -0x64,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x95,0x01,0x00,0x00,0x92,0x01,0x00,0x00, -0x94,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x97,0x01,0x00,0x00,0x95,0x01,0x00,0x00,0xce,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x99,0x01,0x00,0x00, -0x97,0x01,0x00,0x00,0x98,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9b,0x01,0x00,0x00,0x99,0x01,0x00,0x00, -0xb8,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x08,0x01,0x00,0x00, -0x9c,0x01,0x00,0x00,0xfd,0x00,0x00,0x00,0x9b,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x9d,0x01,0x00,0x00, -0x9c,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00, -0x9e,0x01,0x00,0x00,0x89,0x01,0x00,0x00,0x8d,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0x9e,0x01,0x00,0x00,0x9d,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa0,0x01,0x00,0x00, -0xce,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x7f,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x81,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0x7a,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x7a,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa2,0x01,0x00,0x00,0xbc,0x02,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x77,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x79,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xa4,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xa4,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xbd,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0x79,0x01,0x00,0x00,0xd0,0x01,0x00,0x00,0xa7,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xaa,0x01,0x00,0x00, -0xbd,0x02,0x00,0x00,0xbf,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xa6,0x01,0x00,0x00,0xa7,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xaa,0x01,0x00,0x00,0xa5,0x01,0x00,0x00, -0xa6,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xa5,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xac,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xac,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xcb,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0xa5,0x01,0x00,0x00, -0xce,0x01,0x00,0x00,0xad,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0xb2,0x01,0x00,0x00,0xcb,0x02,0x00,0x00, -0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xae,0x01,0x00,0x00, -0xad,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xb2,0x01,0x00,0x00,0xad,0x01,0x00,0x00,0xae,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xad,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xb8,0x01,0x00,0x00,0xbd,0x02,0x00,0x00, -0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xba,0x01,0x00,0x00,0xb8,0x01,0x00,0x00,0xcb,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbc,0x01,0x00,0x00, -0x59,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xbf,0x01,0x00,0x00,0xbd,0x02,0x00,0x00, -0xbe,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xc0,0x01,0x00,0x00,0xbc,0x01,0x00,0x00,0xbf,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc2,0x01,0x00,0x00, -0x68,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xc3,0x01,0x00,0x00,0xc0,0x01,0x00,0x00, -0xc2,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xc5,0x01,0x00,0x00,0xc3,0x01,0x00,0x00,0xcb,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc7,0x01,0x00,0x00, -0xc5,0x01,0x00,0x00,0xc6,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xc9,0x01,0x00,0x00,0xc7,0x01,0x00,0x00, -0xb8,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x08,0x01,0x00,0x00, -0xca,0x01,0x00,0x00,0x45,0x01,0x00,0x00,0xc9,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0xcb,0x01,0x00,0x00, -0xca,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00, -0xcc,0x01,0x00,0x00,0xb6,0x01,0x00,0x00,0xba,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0xcc,0x01,0x00,0x00,0xcb,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xce,0x01,0x00,0x00, -0xcb,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xac,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xae,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xa7,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xa7,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd0,0x01,0x00,0x00,0xbd,0x02,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xa4,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xa6,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xd2,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xd2,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xbe,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0xa6,0x01,0x00,0x00,0x14,0x02,0x00,0x00,0xd5,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xd8,0x01,0x00,0x00, -0xbe,0x02,0x00,0x00,0xbf,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xd4,0x01,0x00,0x00,0xd5,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xd8,0x01,0x00,0x00,0xd3,0x01,0x00,0x00, -0xd4,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xd3,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xda,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xda,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xc2,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0xd3,0x01,0x00,0x00, -0x12,0x02,0x00,0x00,0xdd,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0xe0,0x01,0x00,0x00,0xc2,0x02,0x00,0x00, -0x60,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xdc,0x01,0x00,0x00, -0xdd,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xe0,0x01,0x00,0x00,0xdb,0x01,0x00,0x00,0xdc,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xdb,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xe2,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xe2,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xc4,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0xdb,0x01,0x00,0x00,0x10,0x02,0x00,0x00, -0xe5,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0xe8,0x01,0x00,0x00,0xc4,0x02,0x00,0x00,0xbc,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xe4,0x01,0x00,0x00,0xe5,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xe8,0x01,0x00,0x00, -0xe3,0x01,0x00,0x00,0xe4,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xe3,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xea,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xea,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xc6,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0xe3,0x01,0x00,0x00,0x0e,0x02,0x00,0x00,0xeb,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xf0,0x01,0x00,0x00, -0xc6,0x02,0x00,0x00,0x62,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xec,0x01,0x00,0x00,0xeb,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xf0,0x01,0x00,0x00,0xeb,0x01,0x00,0x00, -0xec,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xeb,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf2,0x01,0x00,0x00, -0xbe,0x02,0x00,0x00,0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xf4,0x01,0x00,0x00,0xf2,0x01,0x00,0x00, -0xc4,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xf6,0x01,0x00,0x00,0xf4,0x01,0x00,0x00,0xf5,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf8,0x01,0x00,0x00, -0xc2,0x02,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xf9,0x01,0x00,0x00,0xf6,0x01,0x00,0x00, -0xf8,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xfb,0x01,0x00,0x00,0xf9,0x01,0x00,0x00,0xc6,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xff,0x01,0x00,0x00, -0xf8,0x01,0x00,0x00,0xc6,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0xcd,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x89,0x01,0x00,0x00, -0xff,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0x01,0x02,0x00,0x00,0x00,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0xcd,0x00,0x00,0x00,0x06,0x02,0x00,0x00,0xb6,0x01,0x00,0x00, -0xf4,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0x07,0x02,0x00,0x00,0x06,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0xcd,0x00,0x00,0x00,0x09,0x02,0x00,0x00,0xca,0x00,0x00,0x00, -0xfb,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0x0a,0x02,0x00,0x00,0x09,0x02,0x00,0x00,0x0c,0x00,0x08,0x00, -0xc4,0x00,0x00,0x00,0x0b,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0x01,0x02,0x00,0x00,0x07,0x02,0x00,0x00, -0x0a,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x09,0x02,0x00,0x00, -0x0b,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x0e,0x02,0x00,0x00,0xc6,0x02,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xea,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xec,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xe5,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xe5,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x10,0x02,0x00,0x00,0xc4,0x02,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xe2,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xe4,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xdd,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xdd,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x12,0x02,0x00,0x00, -0xc2,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xda,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xdc,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xd5,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xd5,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x14,0x02,0x00,0x00,0xbe,0x02,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xd2,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xd4,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x72,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x72,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x16,0x02,0x00,0x00,0xb8,0x02,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x6f,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x71,0x01,0x00,0x00,0xe0,0x00,0x04,0x00, -0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x67,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xd7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xd7,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x18,0x02,0x00,0x00,0x9e,0x02,0x00,0x00,0x6c,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xd4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xd6,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x1d,0x02,0x00,0x00,0x55,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1e,0x02,0x00,0x00, -0x96,0x00,0x00,0x00,0x1d,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x23,0x02,0x00,0x00,0x59,0x00,0x00,0x00, -0xb9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x24,0x02,0x00,0x00,0xa8,0x00,0x00,0x00,0x23,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x29,0x02,0x00,0x00, -0x12,0x00,0x00,0x00,0x28,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x2a,0x02,0x00,0x00,0x29,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2b,0x02,0x00,0x00, -0x0f,0x00,0x00,0x00,0x2a,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x2f,0x02,0x00,0x00,0x47,0x00,0x00,0x00, -0x2a,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x31,0x02,0x00,0x00,0x30,0x02,0x00,0x00,0x0c,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x32,0x02,0x00,0x00, -0x31,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x33,0x02,0x00,0x00,0x2f,0x02,0x00,0x00,0x32,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x34,0x02,0x00,0x00, -0x2b,0x02,0x00,0x00,0x33,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x36,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x36,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x9f,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0x9c,0x02,0x00,0x00, -0x39,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0x3c,0x02,0x00,0x00,0x9f,0x02,0x00,0x00,0xbf,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x38,0x02,0x00,0x00,0x39,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x3c,0x02,0x00,0x00, -0x37,0x02,0x00,0x00,0x38,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x37,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x3e,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x3e,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xa0,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0x37,0x02,0x00,0x00,0x9a,0x02,0x00,0x00,0x41,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x44,0x02,0x00,0x00, -0xa0,0x02,0x00,0x00,0x60,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x40,0x02,0x00,0x00,0x41,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x44,0x02,0x00,0x00,0x3f,0x02,0x00,0x00, -0x40,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x3f,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x48,0x02,0x00,0x00, -0xa0,0x02,0x00,0x00,0x61,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x49,0x02,0x00,0x00,0x1e,0x02,0x00,0x00, -0x48,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x4b,0x02,0x00,0x00,0x64,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4c,0x02,0x00,0x00, -0x49,0x02,0x00,0x00,0x4b,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x50,0x02,0x00,0x00,0x9f,0x02,0x00,0x00, -0xbe,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x51,0x02,0x00,0x00,0x24,0x02,0x00,0x00,0x50,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x53,0x02,0x00,0x00, -0x68,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x54,0x02,0x00,0x00,0x51,0x02,0x00,0x00, -0x53,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x56,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x56,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xa2,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0x3f,0x02,0x00,0x00,0x98,0x02,0x00,0x00,0x59,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x5c,0x02,0x00,0x00, -0xa2,0x02,0x00,0x00,0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x58,0x02,0x00,0x00,0x59,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x5c,0x02,0x00,0x00,0x57,0x02,0x00,0x00, -0x58,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x57,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x5e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x5e,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xa4,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0x57,0x02,0x00,0x00, -0x96,0x02,0x00,0x00,0x61,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0x64,0x02,0x00,0x00,0xa4,0x02,0x00,0x00, -0x62,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x60,0x02,0x00,0x00, -0x61,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x64,0x02,0x00,0x00,0x5f,0x02,0x00,0x00,0x60,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x5f,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x67,0x02,0x00,0x00,0x4c,0x02,0x00,0x00, -0xa4,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0x6a,0x02,0x00,0x00,0x67,0x02,0x00,0x00,0x36,0x00,0x00,0x00, -0xf7,0x00,0x03,0x00,0x6c,0x02,0x00,0x00,0x00,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x6a,0x02,0x00,0x00,0x6b,0x02,0x00,0x00, -0x6c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x6b,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6f,0x02,0x00,0x00, -0x54,0x02,0x00,0x00,0xa2,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x70,0x02,0x00,0x00,0x12,0x00,0x00,0x00, -0xd0,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x71,0x02,0x00,0x00,0x70,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0x72,0x02,0x00,0x00,0x6f,0x02,0x00,0x00, -0x71,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x6c,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x6c,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0xc2,0x00,0x00,0x00,0x73,0x02,0x00,0x00,0x6a,0x02,0x00,0x00, -0x5f,0x02,0x00,0x00,0x72,0x02,0x00,0x00,0x6b,0x02,0x00,0x00, -0xf7,0x00,0x03,0x00,0x75,0x02,0x00,0x00,0x00,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x73,0x02,0x00,0x00,0x74,0x02,0x00,0x00, -0x75,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x74,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7d,0x02,0x00,0x00, -0x54,0x02,0x00,0x00,0xa2,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x7f,0x02,0x00,0x00,0x12,0x00,0x00,0x00, -0x7e,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x80,0x02,0x00,0x00,0x7f,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x81,0x02,0x00,0x00,0x7d,0x02,0x00,0x00, -0x80,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x82,0x02,0x00,0x00,0x34,0x02,0x00,0x00,0x81,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x84,0x02,0x00,0x00, -0x82,0x02,0x00,0x00,0x4c,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x86,0x02,0x00,0x00,0x84,0x02,0x00,0x00, -0xa4,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x88,0x02,0x00,0x00,0x9f,0x02,0x00,0x00,0xbc,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8a,0x02,0x00,0x00, -0x88,0x02,0x00,0x00,0xa2,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x8c,0x02,0x00,0x00,0x8a,0x02,0x00,0x00, -0x8b,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x8e,0x02,0x00,0x00,0xa0,0x02,0x00,0x00,0x62,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8f,0x02,0x00,0x00, -0x8c,0x02,0x00,0x00,0x8e,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x91,0x02,0x00,0x00,0x8f,0x02,0x00,0x00, -0xa4,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00, -0x92,0x02,0x00,0x00,0xca,0x00,0x00,0x00,0x91,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x93,0x02,0x00,0x00, -0x92,0x02,0x00,0x00,0x41,0x00,0x06,0x00,0x05,0x01,0x00,0x00, -0x94,0x02,0x00,0x00,0x79,0x02,0x00,0x00,0x34,0x00,0x00,0x00, -0x86,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x94,0x02,0x00,0x00, -0x93,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x75,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x75,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x61,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x61,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x96,0x02,0x00,0x00, -0xa4,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x5e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x60,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x59,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x59,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x98,0x02,0x00,0x00,0xa2,0x02,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x56,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x58,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x41,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x41,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9a,0x02,0x00,0x00,0xa0,0x02,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x3e,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x40,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x39,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x39,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9c,0x02,0x00,0x00, -0x9f,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x36,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x38,0x02,0x00,0x00, -0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00, -}; -const uint64_t matmul_f32_aligned_fp32_len = 10124; - -unsigned char matmul_f32_fp32_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0xd3,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00, -0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30, -0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x0f,0x00,0x0f,0x00,0x05,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x4c,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0x05,0x01,0x00,0x00, -0x44,0x01,0x00,0x00,0x4f,0x01,0x00,0x00,0x34,0x02,0x00,0x00, -0x7d,0x02,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x05,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x30,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x0d,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0x10,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x37,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x3d,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x4c,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x4f,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x53,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x60,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x62,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x6c,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xa6,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xb8,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xbb,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x02,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x04,0x00,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x03,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0x03,0x01,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x05,0x01,0x00,0x00,0x22,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x05,0x01,0x00,0x00, -0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x1e,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x1f,0x01,0x00,0x00,0x0b,0x00,0x00,0x00, -0x19,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x4c,0x01,0x00,0x00, -0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0x4d,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x4d,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x4d,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x4f,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x4f,0x01,0x00,0x00,0x21,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x34,0x02,0x00,0x00, -0x0b,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x7a,0x02,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x04,0x00,0x7b,0x02,0x00,0x00,0x00,0x00,0x00,0x00, -0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x7b,0x02,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0x7b,0x02,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x7d,0x02,0x00,0x00,0x22,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x7d,0x02,0x00,0x00, -0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00, -0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00, -0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x1e,0x00,0x10,0x00,0x10,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x11,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x11,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x21,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x2d,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x34,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x3d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x4c,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x4f,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x58,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x61,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x61,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x67,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x61,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x6d,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x72,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x77,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x7c,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x80,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x85,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x90,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x96,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0xa1,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0xa8,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xb7,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xb8,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x4f,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbc,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0xbb,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbd,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbe,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0xbd,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbf,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0xbe,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc0,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0xbb,0x00,0x00,0x00, -0x14,0x00,0x02,0x00,0xc1,0x00,0x00,0x00,0x16,0x00,0x03,0x00, -0xc3,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xc4,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xc5,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x1c,0x00,0x04,0x00, -0xc7,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0xc6,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0xc8,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0xc7,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0xc3,0x00,0x00,0x00, -0xcb,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0xcc,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xc3,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0xcf,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xf6,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xf7,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0xf6,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xf8,0x00,0x00,0x00, -0xc3,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0xf9,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0xf8,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0xf9,0x00,0x00,0x00,0xfa,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xfe,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x02,0x01,0x00,0x00, -0xc3,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x03,0x01,0x00,0x00, -0x02,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x04,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x03,0x01,0x00,0x00,0x3b,0x00,0x04,0x00, -0x04,0x01,0x00,0x00,0x05,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x10,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0xc3,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x13,0x01,0x00,0x00, -0x04,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x19,0x01,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x1e,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0x33,0x00,0x06,0x00,0x09,0x00,0x00,0x00,0x1f,0x01,0x00,0x00, -0x1e,0x01,0x00,0x00,0x39,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x20,0x01,0x00,0x00, -0x51,0x00,0x00,0x00,0x1f,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x21,0x01,0x00,0x00, -0x84,0x00,0x00,0x00,0x20,0x01,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x22,0x01,0x00,0x00, -0x86,0x00,0x00,0x00,0x21,0x01,0x00,0x00,0x6c,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x40,0x01,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x41,0x01,0x00,0x00, -0x84,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,0x40,0x01,0x00,0x00, -0x1c,0x00,0x04,0x00,0x42,0x01,0x00,0x00,0xc3,0x00,0x00,0x00, -0x41,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x43,0x01,0x00,0x00, -0x04,0x00,0x00,0x00,0x42,0x01,0x00,0x00,0x3b,0x00,0x04,0x00, -0x43,0x01,0x00,0x00,0x44,0x01,0x00,0x00,0x04,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x48,0x01,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x1d,0x00,0x03,0x00,0x4c,0x01,0x00,0x00,0xc3,0x00,0x00,0x00, -0x1e,0x00,0x03,0x00,0x4d,0x01,0x00,0x00,0x4c,0x01,0x00,0x00, -0x20,0x00,0x04,0x00,0x4e,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x4d,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x4e,0x01,0x00,0x00, -0x4f,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x61,0x01,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x66,0x01,0x00,0x00,0x51,0x00,0x00,0x00, -0x1f,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x67,0x01,0x00,0x00,0x84,0x00,0x00,0x00, -0x66,0x01,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x68,0x01,0x00,0x00,0x86,0x00,0x00,0x00, -0x67,0x01,0x00,0x00,0x6c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x6b,0x01,0x00,0x00,0x08,0x01,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x6c,0x01,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x6f,0x01,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x8a,0x01,0x00,0x00, -0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x1c,0x00,0x04,0x00,0x8b,0x01,0x00,0x00,0xc3,0x00,0x00,0x00, -0x8a,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x8c,0x01,0x00,0x00, -0x07,0x00,0x00,0x00,0x8b,0x01,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x9c,0x01,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xb7,0x01,0x00,0x00,0x84,0x00,0x00,0x00, -0xbe,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x1c,0x00,0x04,0x00, -0xb8,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,0xb7,0x01,0x00,0x00, -0x20,0x00,0x04,0x00,0xb9,0x01,0x00,0x00,0x07,0x00,0x00,0x00, -0xb8,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xc2,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0xb8,0x00,0x00,0x00, -0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xca,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xf9,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x2c,0x02,0x00,0x00,0x0d,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x34,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0x1d,0x00,0x03,0x00,0x7a,0x02,0x00,0x00,0xc3,0x00,0x00,0x00, -0x1e,0x00,0x03,0x00,0x7b,0x02,0x00,0x00,0x7a,0x02,0x00,0x00, -0x20,0x00,0x04,0x00,0x7c,0x02,0x00,0x00,0x0c,0x00,0x00,0x00, -0x7b,0x02,0x00,0x00,0x3b,0x00,0x04,0x00,0x7c,0x02,0x00,0x00, -0x7d,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x82,0x02,0x00,0x00,0x05,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x8f,0x02,0x00,0x00, -0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x05,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xc8,0x00,0x00,0x00, -0xc9,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x8c,0x01,0x00,0x00,0x8d,0x01,0x00,0x00,0x07,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0xb9,0x01,0x00,0x00,0xba,0x01,0x00,0x00, -0x07,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x16,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x17,0x00,0x00,0x00, -0x16,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x17,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1e,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x21,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x28,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x27,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x29,0x00,0x00,0x00, -0x28,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x2a,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x29,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x2e,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00, -0x24,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x30,0x00,0x00,0x00, -0x2a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x35,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x36,0x00,0x00,0x00, -0x35,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x38,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00, -0x38,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x3a,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x3f,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x3e,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x3f,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x42,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x3b,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x47,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x4a,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x4c,0x00,0x00,0x00, -0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x4f,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x55,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x54,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00, -0x50,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x4f,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x64,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,0x63,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x68,0x00,0x00,0x00, -0x5d,0x00,0x00,0x00,0x67,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x6d,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x73,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x72,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x78,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x7c,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x81,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x80,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x82,0x00,0x00,0x00, -0x81,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x83,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0x82,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x89,0x00,0x00,0x00, -0x47,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,0x89,0x00,0x00,0x00, -0x82,0x00,0x00,0x00,0x0c,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x8d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x26,0x00,0x00,0x00, -0x87,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x90,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x92,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x92,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x95,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x97,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x97,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x99,0x00,0x00,0x00, -0x95,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x93,0x00,0x00,0x00, -0x99,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9c,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x83,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9d,0x00,0x00,0x00, -0x9c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0xa1,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xa3,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0xa3,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa7,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0xa6,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0xa9,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0xa9,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xab,0x00,0x00,0x00, -0xa7,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0xa4,0x00,0x00,0x00, -0xab,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xae,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0x83,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xaf,0x00,0x00,0x00, -0xae,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xb1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb1,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xa1,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0xd0,0x00,0x00,0x00, -0xb2,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0xc2,0x00,0x00,0x00,0xa1,0x02,0x00,0x00,0xc0,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xb3,0x00,0x00,0x00,0xb2,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xc2,0x00,0x00,0x00, -0xb2,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xb2,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00, -0xcd,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0xa1,0x02,0x00,0x00, -0x3e,0x00,0x03,0x00,0xcd,0x00,0x00,0x00,0xcb,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd0,0x00,0x00,0x00, -0xa1,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xb1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb3,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xd3,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xd3,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xba,0x02,0x00,0x00,0xaf,0x00,0x00,0x00,0xb3,0x00,0x00,0x00, -0x71,0x01,0x00,0x00,0xd6,0x00,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xb6,0x02,0x00,0x00,0x9d,0x00,0x00,0x00, -0xb3,0x00,0x00,0x00,0x6e,0x01,0x00,0x00,0xd6,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xa2,0x02,0x00,0x00, -0x83,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0x1c,0x02,0x00,0x00, -0xd6,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0xda,0x00,0x00,0x00,0xa2,0x02,0x00,0x00,0x8d,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xd5,0x00,0x00,0x00,0xd6,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xda,0x00,0x00,0x00, -0xd4,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xd4,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xdc,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xdc,0x00,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xb2,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0xd4,0x00,0x00,0x00,0x24,0x01,0x00,0x00,0xdf,0x00,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xe2,0x00,0x00,0x00, -0xb2,0x02,0x00,0x00,0x37,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xde,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xe2,0x00,0x00,0x00,0xdd,0x00,0x00,0x00, -0xde,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdd,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe6,0x00,0x00,0x00, -0x95,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0xe6,0x00,0x00,0x00, -0xb2,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0xeb,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0x36,0x00,0x00,0x00, -0xf7,0x00,0x03,0x00,0xed,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xeb,0x00,0x00,0x00,0xec,0x00,0x00,0x00, -0xed,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xec,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf0,0x00,0x00,0x00, -0xa2,0x02,0x00,0x00,0x6e,0x00,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,0xf0,0x00,0x00,0x00, -0x8d,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xed,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xed,0x00,0x00,0x00,0xf5,0x00,0x07,0x00, -0xc1,0x00,0x00,0x00,0xf3,0x00,0x00,0x00,0xeb,0x00,0x00,0x00, -0xdd,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,0xec,0x00,0x00,0x00, -0xf7,0x00,0x03,0x00,0xf5,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xf3,0x00,0x00,0x00,0xf4,0x00,0x00,0x00, -0x15,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xf4,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfd,0x00,0x00,0x00, -0x73,0x00,0x00,0x00,0xb2,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xfd,0x00,0x00,0x00, -0xfe,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x01,0x01,0x00,0x00,0xff,0x00,0x00,0x00,0x6e,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0c,0x01,0x00,0x00, -0xfd,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x0d,0x01,0x00,0x00,0xb6,0x02,0x00,0x00, -0x0c,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x0f,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,0x6e,0x00,0x00,0x00, -0x41,0x00,0x06,0x00,0x10,0x01,0x00,0x00,0x11,0x01,0x00,0x00, -0x05,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0x0f,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x12,0x01,0x00,0x00, -0x11,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x13,0x01,0x00,0x00, -0x14,0x01,0x00,0x00,0xfa,0x00,0x00,0x00,0x01,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0x14,0x01,0x00,0x00,0x12,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xf5,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x15,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x18,0x01,0x00,0x00,0x73,0x00,0x00,0x00,0xb2,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1a,0x01,0x00,0x00, -0x18,0x01,0x00,0x00,0x19,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x1c,0x01,0x00,0x00,0x1a,0x01,0x00,0x00, -0x6e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x13,0x01,0x00,0x00, -0x1d,0x01,0x00,0x00,0xfa,0x00,0x00,0x00,0x1c,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0x1d,0x01,0x00,0x00,0xcb,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xf5,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xf5,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xdf,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xdf,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x24,0x01,0x00,0x00,0xb2,0x02,0x00,0x00, -0x22,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xdc,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x26,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x26,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xb3,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0x6a,0x01,0x00,0x00, -0x29,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0x2c,0x01,0x00,0x00,0xb3,0x02,0x00,0x00,0xa6,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x28,0x01,0x00,0x00,0x29,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x2c,0x01,0x00,0x00, -0x27,0x01,0x00,0x00,0x28,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x27,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x30,0x01,0x00,0x00,0xa7,0x00,0x00,0x00,0x7d,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x32,0x01,0x00,0x00, -0x30,0x01,0x00,0x00,0xb3,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x33,0x01,0x00,0x00,0x12,0x00,0x00,0x00, -0xcf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x34,0x01,0x00,0x00,0x33,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0x35,0x01,0x00,0x00,0x32,0x01,0x00,0x00, -0x34,0x01,0x00,0x00,0xf7,0x00,0x03,0x00,0x37,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x35,0x01,0x00,0x00, -0x36,0x01,0x00,0x00,0x37,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x36,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x3a,0x01,0x00,0x00,0xa2,0x02,0x00,0x00,0x78,0x00,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x3c,0x01,0x00,0x00, -0x3a,0x01,0x00,0x00,0x8d,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x37,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x37,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0xc1,0x00,0x00,0x00,0x3d,0x01,0x00,0x00, -0x35,0x01,0x00,0x00,0x27,0x01,0x00,0x00,0x3c,0x01,0x00,0x00, -0x36,0x01,0x00,0x00,0xf7,0x00,0x03,0x00,0x3f,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x3d,0x01,0x00,0x00, -0x3e,0x01,0x00,0x00,0x5d,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x3e,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x47,0x01,0x00,0x00,0x7d,0x00,0x00,0x00,0xb3,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x49,0x01,0x00,0x00, -0x47,0x01,0x00,0x00,0x48,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x4b,0x01,0x00,0x00,0x49,0x01,0x00,0x00, -0x78,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x56,0x01,0x00,0x00,0x47,0x01,0x00,0x00,0xaa,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x57,0x01,0x00,0x00, -0xba,0x02,0x00,0x00,0x56,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x59,0x01,0x00,0x00,0x57,0x01,0x00,0x00, -0x78,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x10,0x01,0x00,0x00, -0x5a,0x01,0x00,0x00,0x4f,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0x59,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00, -0x5b,0x01,0x00,0x00,0x5a,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x13,0x01,0x00,0x00,0x5c,0x01,0x00,0x00,0x44,0x01,0x00,0x00, -0x4b,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x5c,0x01,0x00,0x00, -0x5b,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x3f,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x5d,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x60,0x01,0x00,0x00,0x7d,0x00,0x00,0x00, -0xb3,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x62,0x01,0x00,0x00,0x60,0x01,0x00,0x00,0x61,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x64,0x01,0x00,0x00, -0x62,0x01,0x00,0x00,0x78,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x13,0x01,0x00,0x00,0x65,0x01,0x00,0x00,0x44,0x01,0x00,0x00, -0x64,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x65,0x01,0x00,0x00, -0xcb,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x3f,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x3f,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0x29,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x29,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6a,0x01,0x00,0x00, -0xb3,0x02,0x00,0x00,0x68,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0x26,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x28,0x01,0x00,0x00, -0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x6b,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x6e,0x01,0x00,0x00,0xb6,0x02,0x00,0x00,0x6c,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x71,0x01,0x00,0x00, -0xba,0x02,0x00,0x00,0x6f,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0x73,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x73,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xbc,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0x28,0x01,0x00,0x00,0x1a,0x02,0x00,0x00, -0x76,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0x79,0x01,0x00,0x00,0xbc,0x02,0x00,0x00,0x6c,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x75,0x01,0x00,0x00,0x76,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x79,0x01,0x00,0x00, -0x74,0x01,0x00,0x00,0x75,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x74,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x7b,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x7b,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xc0,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0x74,0x01,0x00,0x00,0xa6,0x01,0x00,0x00,0x7e,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x81,0x01,0x00,0x00, -0xc0,0x02,0x00,0x00,0x60,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x7d,0x01,0x00,0x00,0x7e,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x81,0x01,0x00,0x00,0x7c,0x01,0x00,0x00, -0x7d,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x7c,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0x83,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x83,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xd2,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0x7c,0x01,0x00,0x00, -0xa4,0x01,0x00,0x00,0x84,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0x89,0x01,0x00,0x00,0xd2,0x02,0x00,0x00, -0x62,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x85,0x01,0x00,0x00, -0x84,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x89,0x01,0x00,0x00,0x84,0x01,0x00,0x00,0x85,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x84,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x8f,0x01,0x00,0x00,0xc0,0x02,0x00,0x00, -0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x91,0x01,0x00,0x00,0x8f,0x01,0x00,0x00,0xd2,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x93,0x01,0x00,0x00, -0x55,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x95,0x01,0x00,0x00,0xc0,0x02,0x00,0x00, -0x61,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x96,0x01,0x00,0x00,0x93,0x01,0x00,0x00,0x95,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x98,0x01,0x00,0x00, -0x64,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x99,0x01,0x00,0x00,0x96,0x01,0x00,0x00, -0x98,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9b,0x01,0x00,0x00,0x99,0x01,0x00,0x00,0xd2,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9d,0x01,0x00,0x00, -0x9b,0x01,0x00,0x00,0x9c,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9f,0x01,0x00,0x00,0x9d,0x01,0x00,0x00, -0xbc,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x13,0x01,0x00,0x00, -0xa0,0x01,0x00,0x00,0xfa,0x00,0x00,0x00,0x9f,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0xa1,0x01,0x00,0x00, -0xa0,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00, -0xa2,0x01,0x00,0x00,0x8d,0x01,0x00,0x00,0x91,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0xa2,0x01,0x00,0x00,0xa1,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa4,0x01,0x00,0x00, -0xd2,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x83,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x85,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0x7e,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x7e,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa6,0x01,0x00,0x00,0xc0,0x02,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x7b,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x7d,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xa8,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xa8,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xc1,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0x7d,0x01,0x00,0x00,0xd4,0x01,0x00,0x00,0xab,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xae,0x01,0x00,0x00, -0xc1,0x02,0x00,0x00,0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xaa,0x01,0x00,0x00,0xab,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xae,0x01,0x00,0x00,0xa9,0x01,0x00,0x00, -0xaa,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xa9,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xb0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xb0,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xcf,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0xa9,0x01,0x00,0x00, -0xd2,0x01,0x00,0x00,0xb1,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0xb6,0x01,0x00,0x00,0xcf,0x02,0x00,0x00, -0xbb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xb2,0x01,0x00,0x00, -0xb1,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xb6,0x01,0x00,0x00,0xb1,0x01,0x00,0x00,0xb2,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xb1,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xbc,0x01,0x00,0x00,0xc1,0x02,0x00,0x00, -0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xbe,0x01,0x00,0x00,0xbc,0x01,0x00,0x00,0xcf,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc0,0x01,0x00,0x00, -0x59,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xc3,0x01,0x00,0x00,0xc1,0x02,0x00,0x00, -0xc2,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xc4,0x01,0x00,0x00,0xc0,0x01,0x00,0x00,0xc3,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc6,0x01,0x00,0x00, -0x68,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xc7,0x01,0x00,0x00,0xc4,0x01,0x00,0x00, -0xc6,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xc9,0x01,0x00,0x00,0xc7,0x01,0x00,0x00,0xcf,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xcb,0x01,0x00,0x00, -0xc9,0x01,0x00,0x00,0xca,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xcd,0x01,0x00,0x00,0xcb,0x01,0x00,0x00, -0xbc,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x13,0x01,0x00,0x00, -0xce,0x01,0x00,0x00,0x44,0x01,0x00,0x00,0xcd,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0xcf,0x01,0x00,0x00, -0xce,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00, -0xd0,0x01,0x00,0x00,0xba,0x01,0x00,0x00,0xbe,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0xd0,0x01,0x00,0x00,0xcf,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd2,0x01,0x00,0x00, -0xcf,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xb0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xb2,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xab,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xab,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd4,0x01,0x00,0x00,0xc1,0x02,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xa8,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xaa,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xd6,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xd6,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xc2,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0xaa,0x01,0x00,0x00,0x18,0x02,0x00,0x00,0xd9,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xdc,0x01,0x00,0x00, -0xc2,0x02,0x00,0x00,0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xd8,0x01,0x00,0x00,0xd9,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xdc,0x01,0x00,0x00,0xd7,0x01,0x00,0x00, -0xd8,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xd7,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xde,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xde,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xc6,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0xd7,0x01,0x00,0x00, -0x16,0x02,0x00,0x00,0xe1,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0xe4,0x01,0x00,0x00,0xc6,0x02,0x00,0x00, -0x60,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xe0,0x01,0x00,0x00, -0xe1,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xe4,0x01,0x00,0x00,0xdf,0x01,0x00,0x00,0xe0,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xdf,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xe6,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xe6,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xc8,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0xdf,0x01,0x00,0x00,0x14,0x02,0x00,0x00, -0xe9,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0xec,0x01,0x00,0x00,0xc8,0x02,0x00,0x00,0xbb,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xe8,0x01,0x00,0x00,0xe9,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xec,0x01,0x00,0x00, -0xe7,0x01,0x00,0x00,0xe8,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xe7,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xee,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xee,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xca,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0xe7,0x01,0x00,0x00,0x12,0x02,0x00,0x00,0xef,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xf4,0x01,0x00,0x00, -0xca,0x02,0x00,0x00,0x62,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xf0,0x01,0x00,0x00,0xef,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xf4,0x01,0x00,0x00,0xef,0x01,0x00,0x00, -0xf0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xef,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf6,0x01,0x00,0x00, -0xc2,0x02,0x00,0x00,0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xf8,0x01,0x00,0x00,0xf6,0x01,0x00,0x00, -0xc8,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xfa,0x01,0x00,0x00,0xf8,0x01,0x00,0x00,0xf9,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfc,0x01,0x00,0x00, -0xc6,0x02,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xfd,0x01,0x00,0x00,0xfa,0x01,0x00,0x00, -0xfc,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xff,0x01,0x00,0x00,0xfd,0x01,0x00,0x00,0xca,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x03,0x02,0x00,0x00, -0xfc,0x01,0x00,0x00,0xca,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0xcc,0x00,0x00,0x00,0x04,0x02,0x00,0x00,0x8d,0x01,0x00,0x00, -0x03,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00, -0x05,0x02,0x00,0x00,0x04,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0xcc,0x00,0x00,0x00,0x0a,0x02,0x00,0x00,0xba,0x01,0x00,0x00, -0xf8,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00, -0x0b,0x02,0x00,0x00,0x0a,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0xcc,0x00,0x00,0x00,0x0d,0x02,0x00,0x00,0xc9,0x00,0x00,0x00, -0xff,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00, -0x0e,0x02,0x00,0x00,0x0d,0x02,0x00,0x00,0x0c,0x00,0x08,0x00, -0xc3,0x00,0x00,0x00,0x0f,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0x05,0x02,0x00,0x00,0x0b,0x02,0x00,0x00, -0x0e,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x0d,0x02,0x00,0x00, -0x0f,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x12,0x02,0x00,0x00,0xca,0x02,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xee,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xf0,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xe9,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xe9,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x14,0x02,0x00,0x00,0xc8,0x02,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xe6,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xe8,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xe1,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xe1,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x16,0x02,0x00,0x00, -0xc6,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xde,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xe0,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xd9,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xd9,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x18,0x02,0x00,0x00,0xc2,0x02,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xd6,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xd8,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x76,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x76,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x1a,0x02,0x00,0x00,0xbc,0x02,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x73,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x75,0x01,0x00,0x00,0xe0,0x00,0x04,0x00, -0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x6b,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xd6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xd6,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x1c,0x02,0x00,0x00,0xa2,0x02,0x00,0x00,0x6c,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xd3,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xd5,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x21,0x02,0x00,0x00,0x55,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x22,0x02,0x00,0x00, -0x95,0x00,0x00,0x00,0x21,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x27,0x02,0x00,0x00,0x59,0x00,0x00,0x00, -0xb8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x28,0x02,0x00,0x00,0xa7,0x00,0x00,0x00,0x27,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x2d,0x02,0x00,0x00, -0x12,0x00,0x00,0x00,0x2c,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x2e,0x02,0x00,0x00,0x2d,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2f,0x02,0x00,0x00, -0x0f,0x00,0x00,0x00,0x2e,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x33,0x02,0x00,0x00,0x47,0x00,0x00,0x00, -0x2e,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x35,0x02,0x00,0x00,0x34,0x02,0x00,0x00,0x0c,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x36,0x02,0x00,0x00, -0x35,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x37,0x02,0x00,0x00,0x33,0x02,0x00,0x00,0x36,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x38,0x02,0x00,0x00, -0x2f,0x02,0x00,0x00,0x37,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x3a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x3a,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xa3,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0xa0,0x02,0x00,0x00, -0x3d,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0x40,0x02,0x00,0x00,0xa3,0x02,0x00,0x00,0xbe,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x3c,0x02,0x00,0x00,0x3d,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x40,0x02,0x00,0x00, -0x3b,0x02,0x00,0x00,0x3c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x3b,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x42,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x42,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xa4,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0x3b,0x02,0x00,0x00,0x9e,0x02,0x00,0x00,0x45,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x48,0x02,0x00,0x00, -0xa4,0x02,0x00,0x00,0x60,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x44,0x02,0x00,0x00,0x45,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x48,0x02,0x00,0x00,0x43,0x02,0x00,0x00, -0x44,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x43,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4c,0x02,0x00,0x00, -0xa4,0x02,0x00,0x00,0x61,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x4d,0x02,0x00,0x00,0x22,0x02,0x00,0x00, -0x4c,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x4f,0x02,0x00,0x00,0x64,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x50,0x02,0x00,0x00, -0x4d,0x02,0x00,0x00,0x4f,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x54,0x02,0x00,0x00,0xa3,0x02,0x00,0x00, -0xc2,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x55,0x02,0x00,0x00,0x28,0x02,0x00,0x00,0x54,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x57,0x02,0x00,0x00, -0x68,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x58,0x02,0x00,0x00,0x55,0x02,0x00,0x00, -0x57,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x5a,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x5a,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xa6,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0x43,0x02,0x00,0x00,0x9c,0x02,0x00,0x00,0x5d,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x60,0x02,0x00,0x00, -0xa6,0x02,0x00,0x00,0xbb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x5c,0x02,0x00,0x00,0x5d,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x60,0x02,0x00,0x00,0x5b,0x02,0x00,0x00, -0x5c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x5b,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x62,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x62,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xa8,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0x5b,0x02,0x00,0x00, -0x9a,0x02,0x00,0x00,0x65,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0x68,0x02,0x00,0x00,0xa8,0x02,0x00,0x00, -0x62,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x64,0x02,0x00,0x00, -0x65,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x68,0x02,0x00,0x00,0x63,0x02,0x00,0x00,0x64,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x63,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x6b,0x02,0x00,0x00,0x50,0x02,0x00,0x00, -0xa8,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0x6e,0x02,0x00,0x00,0x6b,0x02,0x00,0x00,0x36,0x00,0x00,0x00, -0xf7,0x00,0x03,0x00,0x70,0x02,0x00,0x00,0x00,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x6e,0x02,0x00,0x00,0x6f,0x02,0x00,0x00, -0x70,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x6f,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x73,0x02,0x00,0x00, -0x58,0x02,0x00,0x00,0xa6,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x74,0x02,0x00,0x00,0x12,0x00,0x00,0x00, -0xcf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x75,0x02,0x00,0x00,0x74,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0x76,0x02,0x00,0x00,0x73,0x02,0x00,0x00, -0x75,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x70,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x70,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0xc1,0x00,0x00,0x00,0x77,0x02,0x00,0x00,0x6e,0x02,0x00,0x00, -0x63,0x02,0x00,0x00,0x76,0x02,0x00,0x00,0x6f,0x02,0x00,0x00, -0xf7,0x00,0x03,0x00,0x79,0x02,0x00,0x00,0x00,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x77,0x02,0x00,0x00,0x78,0x02,0x00,0x00, -0x79,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x78,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x81,0x02,0x00,0x00, -0x58,0x02,0x00,0x00,0xa6,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x83,0x02,0x00,0x00,0x12,0x00,0x00,0x00, -0x82,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x84,0x02,0x00,0x00,0x83,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x85,0x02,0x00,0x00,0x81,0x02,0x00,0x00, -0x84,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x86,0x02,0x00,0x00,0x38,0x02,0x00,0x00,0x85,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x88,0x02,0x00,0x00, -0x86,0x02,0x00,0x00,0x50,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x8a,0x02,0x00,0x00,0x88,0x02,0x00,0x00, -0xa8,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x8c,0x02,0x00,0x00,0xa3,0x02,0x00,0x00,0xbb,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8e,0x02,0x00,0x00, -0x8c,0x02,0x00,0x00,0xa6,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x90,0x02,0x00,0x00,0x8e,0x02,0x00,0x00, -0x8f,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x92,0x02,0x00,0x00,0xa4,0x02,0x00,0x00,0x62,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x93,0x02,0x00,0x00, -0x90,0x02,0x00,0x00,0x92,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x95,0x02,0x00,0x00,0x93,0x02,0x00,0x00, -0xa8,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00, -0x96,0x02,0x00,0x00,0xc9,0x00,0x00,0x00,0x95,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x97,0x02,0x00,0x00, -0x96,0x02,0x00,0x00,0x41,0x00,0x06,0x00,0x10,0x01,0x00,0x00, -0x98,0x02,0x00,0x00,0x7d,0x02,0x00,0x00,0x34,0x00,0x00,0x00, -0x8a,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x98,0x02,0x00,0x00, -0x97,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x79,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x79,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x65,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x65,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9a,0x02,0x00,0x00, -0xa8,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x62,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x64,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x5d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x5d,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9c,0x02,0x00,0x00,0xa6,0x02,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x5a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x5c,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x45,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x45,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9e,0x02,0x00,0x00,0xa4,0x02,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x42,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x44,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x3d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x3d,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa0,0x02,0x00,0x00, -0xa3,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x3a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x3c,0x02,0x00,0x00, -0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00, -}; -const uint64_t matmul_f32_fp32_len = 10208; - -unsigned char matmul_q2_k_f32_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0x4f,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x09,0x00,0x00,0x00, -0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00, -0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00, -0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30, -0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x0f,0x00,0x0f,0x00,0x05,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x4c,0x00,0x00,0x00,0x1f,0x01,0x00,0x00,0x58,0x01,0x00,0x00, -0x8b,0x01,0x00,0x00,0x96,0x01,0x00,0x00,0x81,0x02,0x00,0x00, -0xca,0x02,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x05,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x30,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x0d,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0x10,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x37,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x3d,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x4c,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x4f,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x53,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x60,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x62,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x6c,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xa6,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xb8,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xbb,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x17,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x18,0x01,0x00,0x00,0x06,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1b,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1b,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1b,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x50,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x1c,0x01,0x00,0x00, -0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0x1d,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1d,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x1d,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x1f,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x1f,0x01,0x00,0x00,0x21,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x65,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x66,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x93,0x01,0x00,0x00,0x06,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x94,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x94,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x94,0x01,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x96,0x01,0x00,0x00, -0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x96,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x81,0x02,0x00,0x00,0x0b,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xc7,0x02,0x00,0x00, -0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0xc8,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0xc8,0x02,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0xc8,0x02,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xca,0x02,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xca,0x02,0x00,0x00,0x21,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00, -0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x1e,0x00,0x10,0x00,0x10,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x11,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x11,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x15,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0x0a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x27,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x3e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x61,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x63,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x61,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x67,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x61,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x72,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x85,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x90,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0xa1,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xa6,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xb7,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xb9,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0xb8,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xba,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x4f,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xbb,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xba,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xbc,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0xb9,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xb7,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xbf,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x14,0x00,0x02,0x00, -0xc1,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0xc3,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xc4,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xc5,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc4,0x00,0x00,0x00, -0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xc6,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc5,0x00,0x00,0x00, -0xbb,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xc7,0x00,0x00,0x00, -0xc3,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0xc8,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xc7,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0xcb,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xcc,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xf3,0x00,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xfa,0x00,0x00,0x00, -0x80,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x01,0x01,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x03,0x01,0x00,0x00,0x20,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x06,0x01,0x00,0x00, -0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x0c,0x01,0x00,0x00,0x08,0x00,0x00,0x00,0x17,0x00,0x04,0x00, -0x13,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x16,0x01,0x00,0x00,0x08,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x17,0x01,0x00,0x00, -0x16,0x01,0x00,0x00,0x06,0x01,0x00,0x00,0x1c,0x00,0x04,0x00, -0x18,0x01,0x00,0x00,0x16,0x01,0x00,0x00,0x01,0x01,0x00,0x00, -0x16,0x00,0x03,0x00,0x19,0x01,0x00,0x00,0x10,0x00,0x00,0x00, -0x17,0x00,0x04,0x00,0x1a,0x01,0x00,0x00,0x19,0x01,0x00,0x00, -0x02,0x00,0x00,0x00,0x1e,0x00,0x05,0x00,0x1b,0x01,0x00,0x00, -0x17,0x01,0x00,0x00,0x18,0x01,0x00,0x00,0x1a,0x01,0x00,0x00, -0x1d,0x00,0x03,0x00,0x1c,0x01,0x00,0x00,0x1b,0x01,0x00,0x00, -0x1e,0x00,0x03,0x00,0x1d,0x01,0x00,0x00,0x1c,0x01,0x00,0x00, -0x20,0x00,0x04,0x00,0x1e,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x1d,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x1e,0x01,0x00,0x00, -0x1f,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x22,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x16,0x01,0x00,0x00, -0x17,0x00,0x04,0x00,0x33,0x01,0x00,0x00,0xc3,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x37,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x1a,0x01,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x3f,0x01,0x00,0x00,0x0f,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x47,0x01,0x00,0x00, -0x03,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x54,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x55,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x54,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,0x56,0x01,0x00,0x00, -0x19,0x01,0x00,0x00,0x55,0x01,0x00,0x00,0x20,0x00,0x04,0x00, -0x57,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x56,0x01,0x00,0x00, -0x3b,0x00,0x04,0x00,0x57,0x01,0x00,0x00,0x58,0x01,0x00,0x00, -0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x5d,0x01,0x00,0x00, -0x04,0x00,0x00,0x00,0x19,0x01,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x65,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0x33,0x00,0x06,0x00,0x09,0x00,0x00,0x00,0x66,0x01,0x00,0x00, -0x65,0x01,0x00,0x00,0x39,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x67,0x01,0x00,0x00, -0x51,0x00,0x00,0x00,0x66,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x68,0x01,0x00,0x00, -0x84,0x00,0x00,0x00,0x67,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x69,0x01,0x00,0x00, -0x86,0x00,0x00,0x00,0x68,0x01,0x00,0x00,0x6c,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x87,0x01,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x88,0x01,0x00,0x00, -0x84,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,0x87,0x01,0x00,0x00, -0x1c,0x00,0x04,0x00,0x89,0x01,0x00,0x00,0x19,0x01,0x00,0x00, -0x88,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x8a,0x01,0x00,0x00, -0x04,0x00,0x00,0x00,0x89,0x01,0x00,0x00,0x3b,0x00,0x04,0x00, -0x8a,0x01,0x00,0x00,0x8b,0x01,0x00,0x00,0x04,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x8f,0x01,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x1d,0x00,0x03,0x00,0x93,0x01,0x00,0x00,0xc3,0x00,0x00,0x00, -0x1e,0x00,0x03,0x00,0x94,0x01,0x00,0x00,0x93,0x01,0x00,0x00, -0x20,0x00,0x04,0x00,0x95,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x94,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x95,0x01,0x00,0x00, -0x96,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0xa1,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0xc3,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xaa,0x01,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x19,0x01,0x00,0x00,0xae,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xb0,0x01,0x00,0x00,0x51,0x00,0x00,0x00,0x66,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xb1,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0xb0,0x01,0x00,0x00, -0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xb2,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0xb1,0x01,0x00,0x00, -0x6c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xb5,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xb6,0x01,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xb9,0x01,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xd4,0x01,0x00,0x00,0x84,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x1c,0x00,0x04,0x00, -0xd5,0x01,0x00,0x00,0x19,0x01,0x00,0x00,0xd4,0x01,0x00,0x00, -0x20,0x00,0x04,0x00,0xd6,0x01,0x00,0x00,0x07,0x00,0x00,0x00, -0xd5,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xe6,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xec,0x01,0x00,0x00, -0x07,0x00,0x00,0x00,0x19,0x01,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x02,0x02,0x00,0x00,0x84,0x00,0x00,0x00, -0xbe,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x1c,0x00,0x04,0x00, -0x03,0x02,0x00,0x00,0x19,0x01,0x00,0x00,0x02,0x02,0x00,0x00, -0x20,0x00,0x04,0x00,0x04,0x02,0x00,0x00,0x07,0x00,0x00,0x00, -0x03,0x02,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x0d,0x02,0x00,0x00,0x86,0x00,0x00,0x00,0xb8,0x00,0x00,0x00, -0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x15,0x02,0x00,0x00,0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x44,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x79,0x02,0x00,0x00,0x0d,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x81,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0x1d,0x00,0x03,0x00,0xc7,0x02,0x00,0x00,0xc3,0x00,0x00,0x00, -0x1e,0x00,0x03,0x00,0xc8,0x02,0x00,0x00,0xc7,0x02,0x00,0x00, -0x20,0x00,0x04,0x00,0xc9,0x02,0x00,0x00,0x0c,0x00,0x00,0x00, -0xc8,0x02,0x00,0x00,0x3b,0x00,0x04,0x00,0xc9,0x02,0x00,0x00, -0xca,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0xcf,0x02,0x00,0x00,0x05,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xdc,0x02,0x00,0x00, -0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x2c,0x00,0x05,0x00,0x13,0x01,0x00,0x00,0x4e,0x03,0x00,0x00, -0x47,0x01,0x00,0x00,0x47,0x01,0x00,0x00,0x36,0x00,0x05,0x00, -0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0xc8,0x00,0x00,0x00,0xc9,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xd6,0x01,0x00,0x00, -0xd7,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x04,0x02,0x00,0x00,0x05,0x02,0x00,0x00,0x07,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x16,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x16,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x17,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x24,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2a,0x00,0x00,0x00, -0x1e,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x2d,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x2f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x24,0x00,0x00,0x00, -0x2f,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x2a,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x35,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x35,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x38,0x00,0x00,0x00, -0x36,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x82,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x38,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x3b,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x3f,0x00,0x00,0x00, -0x3d,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x3f,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x42,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x3b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x49,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4a,0x00,0x00,0x00, -0x49,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x4d,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x3e,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x4d,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x50,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00, -0x50,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x50,0x00,0x00,0x00, -0x58,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x5d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x64,0x00,0x00,0x00, -0x5d,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x5d,0x00,0x00,0x00, -0x67,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x6e,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x6d,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x73,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x72,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x77,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x7d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x7c,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x81,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x81,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x83,0x00,0x00,0x00, -0x47,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x85,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x87,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x47,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x8c,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x82,0x00,0x00,0x00, -0x0c,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x8d,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x26,0x00,0x00,0x00,0x87,0x00,0x00,0x00, -0x8c,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x91,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x90,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x92,0x00,0x00,0x00, -0x91,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x93,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x92,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x95,0x00,0x00,0x00, -0x42,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x96,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x98,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x95,0x00,0x00,0x00, -0x98,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9a,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x99,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9c,0x00,0x00,0x00, -0x9a,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,0x9c,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0xa2,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0xa1,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa3,0x00,0x00,0x00, -0xa2,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa4,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0xa3,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa7,0x00,0x00,0x00, -0x4a,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0xa8,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xaa,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0xa7,0x00,0x00,0x00, -0xaa,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xac,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0xab,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xae,0x00,0x00,0x00, -0xac,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0xae,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb1,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xb1,0x00,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xf2,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0x05,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0xb2,0x00,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xc2,0x00,0x00,0x00, -0xf2,0x02,0x00,0x00,0xc0,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xb3,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xc2,0x00,0x00,0x00,0xb2,0x00,0x00,0x00, -0xb3,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb2,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,0xcd,0x00,0x00,0x00, -0xc9,0x00,0x00,0x00,0xf2,0x02,0x00,0x00,0x3e,0x00,0x03,0x00, -0xcd,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0xf2,0x02,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb1,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xb3,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xd3,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd3,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x0b,0x03,0x00,0x00, -0xaf,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0xbb,0x01,0x00,0x00, -0xd6,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x07,0x03,0x00,0x00,0x9d,0x00,0x00,0x00,0xb3,0x00,0x00,0x00, -0xb8,0x01,0x00,0x00,0xd6,0x00,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xf3,0x02,0x00,0x00,0x83,0x00,0x00,0x00, -0xb3,0x00,0x00,0x00,0x69,0x02,0x00,0x00,0xd6,0x00,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xda,0x00,0x00,0x00, -0xf3,0x02,0x00,0x00,0x8d,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xd5,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xda,0x00,0x00,0x00,0xd4,0x00,0x00,0x00, -0xd5,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd4,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xdc,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xdc,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x03,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0xd4,0x00,0x00,0x00, -0x6b,0x01,0x00,0x00,0xdd,0x00,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0xe2,0x00,0x00,0x00,0x03,0x03,0x00,0x00, -0x37,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xde,0x00,0x00,0x00, -0xdd,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xe2,0x00,0x00,0x00,0xdd,0x00,0x00,0x00,0xde,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,0x73,0x00,0x00,0x00, -0x03,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xea,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,0x98,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xeb,0x00,0x00,0x00, -0xea,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xec,0x00,0x00,0x00,0x07,0x03,0x00,0x00, -0xeb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xee,0x00,0x00,0x00,0xec,0x00,0x00,0x00,0x6e,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf4,0x00,0x00,0x00, -0xe7,0x00,0x00,0x00,0xf3,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,0x6e,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xf7,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,0xf6,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfb,0x00,0x00,0x00, -0xee,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0xee,0x00,0x00,0x00, -0xfa,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x02,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,0x01,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x04,0x01,0x00,0x00, -0x02,0x01,0x00,0x00,0x03,0x01,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x07,0x01,0x00,0x00,0xfe,0x00,0x00,0x00, -0x06,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x08,0x01,0x00,0x00,0x07,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x09,0x01,0x00,0x00, -0x04,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x0d,0x01,0x00,0x00,0xfe,0x00,0x00,0x00, -0x0c,0x01,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x10,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,0x01,0x01,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x11,0x01,0x00,0x00, -0x10,0x01,0x00,0x00,0x06,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x12,0x01,0x00,0x00,0x11,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x22,0x01,0x00,0x00, -0x23,0x01,0x00,0x00,0x1f,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0xfb,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x09,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0x16,0x01,0x00,0x00,0x24,0x01,0x00,0x00, -0x23,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x25,0x01,0x00,0x00,0x24,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x28,0x01,0x00,0x00,0x09,0x01,0x00,0x00, -0x39,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x22,0x01,0x00,0x00, -0x29,0x01,0x00,0x00,0x1f,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0xfb,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x28,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0x16,0x01,0x00,0x00,0x2a,0x01,0x00,0x00, -0x29,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x2b,0x01,0x00,0x00,0x2a,0x01,0x00,0x00,0x50,0x00,0x05,0x00, -0x13,0x01,0x00,0x00,0x2c,0x01,0x00,0x00,0x25,0x01,0x00,0x00, -0x2b,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x22,0x01,0x00,0x00, -0x30,0x01,0x00,0x00,0x1f,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0xfb,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x0d,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0x16,0x01,0x00,0x00,0x31,0x01,0x00,0x00, -0x30,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x32,0x01,0x00,0x00,0x31,0x01,0x00,0x00,0x41,0x00,0x07,0x00, -0x37,0x01,0x00,0x00,0x38,0x01,0x00,0x00,0x1f,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0x85,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x1a,0x01,0x00,0x00,0x39,0x01,0x00,0x00, -0x38,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x33,0x01,0x00,0x00, -0x3a,0x01,0x00,0x00,0x39,0x01,0x00,0x00,0x51,0x00,0x05,0x00, -0xc3,0x00,0x00,0x00,0x3d,0x01,0x00,0x00,0x3a,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x40,0x01,0x00,0x00,0x32,0x01,0x00,0x00,0x3f,0x01,0x00,0x00, -0x70,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x41,0x01,0x00,0x00, -0x40,0x01,0x00,0x00,0x85,0x00,0x05,0x00,0xc3,0x00,0x00,0x00, -0x42,0x01,0x00,0x00,0x3d,0x01,0x00,0x00,0x41,0x01,0x00,0x00, -0x50,0x00,0x05,0x00,0x13,0x01,0x00,0x00,0x45,0x01,0x00,0x00, -0x12,0x01,0x00,0x00,0x12,0x01,0x00,0x00,0xc2,0x00,0x05,0x00, -0x13,0x01,0x00,0x00,0x46,0x01,0x00,0x00,0x2c,0x01,0x00,0x00, -0x45,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x13,0x01,0x00,0x00, -0x49,0x01,0x00,0x00,0x46,0x01,0x00,0x00,0x4e,0x03,0x00,0x00, -0x70,0x00,0x04,0x00,0x33,0x01,0x00,0x00,0x4a,0x01,0x00,0x00, -0x49,0x01,0x00,0x00,0x8e,0x00,0x05,0x00,0x33,0x01,0x00,0x00, -0x4b,0x01,0x00,0x00,0x4a,0x01,0x00,0x00,0x42,0x01,0x00,0x00, -0x51,0x00,0x05,0x00,0xc3,0x00,0x00,0x00,0x4d,0x01,0x00,0x00, -0x3a,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xc2,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x4f,0x01,0x00,0x00,0x32,0x01,0x00,0x00, -0xa8,0x00,0x00,0x00,0x70,0x00,0x04,0x00,0xc3,0x00,0x00,0x00, -0x50,0x01,0x00,0x00,0x4f,0x01,0x00,0x00,0x85,0x00,0x05,0x00, -0xc3,0x00,0x00,0x00,0x51,0x01,0x00,0x00,0x4d,0x01,0x00,0x00, -0x50,0x01,0x00,0x00,0x50,0x00,0x05,0x00,0x33,0x01,0x00,0x00, -0x52,0x01,0x00,0x00,0x51,0x01,0x00,0x00,0x51,0x01,0x00,0x00, -0x83,0x00,0x05,0x00,0x33,0x01,0x00,0x00,0x53,0x01,0x00,0x00, -0x4b,0x01,0x00,0x00,0x52,0x01,0x00,0x00,0x51,0x00,0x05,0x00, -0xc3,0x00,0x00,0x00,0x5b,0x01,0x00,0x00,0x53,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x19,0x01,0x00,0x00, -0x5c,0x01,0x00,0x00,0x5b,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x5d,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,0x58,0x01,0x00,0x00, -0xf7,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0x5e,0x01,0x00,0x00, -0x5c,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x60,0x01,0x00,0x00,0xf7,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x51,0x00,0x05,0x00,0xc3,0x00,0x00,0x00,0x62,0x01,0x00,0x00, -0x53,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x73,0x00,0x04,0x00, -0x19,0x01,0x00,0x00,0x63,0x01,0x00,0x00,0x62,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x5d,0x01,0x00,0x00,0x64,0x01,0x00,0x00, -0x58,0x01,0x00,0x00,0x60,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0x64,0x01,0x00,0x00,0x63,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x6b,0x01,0x00,0x00,0x03,0x03,0x00,0x00, -0x69,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xdc,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x6d,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x6d,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x04,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0xb4,0x01,0x00,0x00, -0x70,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0x73,0x01,0x00,0x00,0x04,0x03,0x00,0x00,0xa6,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x6f,0x01,0x00,0x00,0x70,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x73,0x01,0x00,0x00, -0x6e,0x01,0x00,0x00,0x6f,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x6e,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x77,0x01,0x00,0x00,0xa7,0x00,0x00,0x00,0x7d,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x79,0x01,0x00,0x00, -0x77,0x01,0x00,0x00,0x04,0x03,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x7a,0x01,0x00,0x00,0x12,0x00,0x00,0x00, -0xcf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x7b,0x01,0x00,0x00,0x7a,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0x7c,0x01,0x00,0x00,0x79,0x01,0x00,0x00, -0x7b,0x01,0x00,0x00,0xf7,0x00,0x03,0x00,0x7e,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x7c,0x01,0x00,0x00, -0x7d,0x01,0x00,0x00,0x7e,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x7d,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x81,0x01,0x00,0x00,0xf3,0x02,0x00,0x00,0x78,0x00,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x83,0x01,0x00,0x00, -0x81,0x01,0x00,0x00,0x8d,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x7e,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x7e,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0xc1,0x00,0x00,0x00,0x84,0x01,0x00,0x00, -0x7c,0x01,0x00,0x00,0x6e,0x01,0x00,0x00,0x83,0x01,0x00,0x00, -0x7d,0x01,0x00,0x00,0xf7,0x00,0x03,0x00,0x86,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x84,0x01,0x00,0x00, -0x85,0x01,0x00,0x00,0xa6,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x85,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x8e,0x01,0x00,0x00,0x7d,0x00,0x00,0x00,0x04,0x03,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x90,0x01,0x00,0x00, -0x8e,0x01,0x00,0x00,0x8f,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x92,0x01,0x00,0x00,0x90,0x01,0x00,0x00, -0x78,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9d,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,0xaa,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9e,0x01,0x00,0x00, -0x0b,0x03,0x00,0x00,0x9d,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa0,0x01,0x00,0x00,0x9e,0x01,0x00,0x00, -0x78,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0xa1,0x01,0x00,0x00, -0xa2,0x01,0x00,0x00,0x96,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0xa0,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00, -0xa3,0x01,0x00,0x00,0xa2,0x01,0x00,0x00,0x73,0x00,0x04,0x00, -0x19,0x01,0x00,0x00,0xa4,0x01,0x00,0x00,0xa3,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x5d,0x01,0x00,0x00,0xa5,0x01,0x00,0x00, -0x8b,0x01,0x00,0x00,0x92,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0xa5,0x01,0x00,0x00,0xa4,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0x86,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xa6,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa9,0x01,0x00,0x00, -0x7d,0x00,0x00,0x00,0x04,0x03,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xab,0x01,0x00,0x00,0xa9,0x01,0x00,0x00, -0xaa,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xad,0x01,0x00,0x00,0xab,0x01,0x00,0x00,0x78,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x5d,0x01,0x00,0x00,0xaf,0x01,0x00,0x00, -0x8b,0x01,0x00,0x00,0xad,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0xaf,0x01,0x00,0x00,0xae,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0x86,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x86,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0x70,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x70,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xb4,0x01,0x00,0x00,0x04,0x03,0x00,0x00,0xb2,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0x6d,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x6f,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0xb5,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xb8,0x01,0x00,0x00,0x07,0x03,0x00,0x00, -0xb6,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xbb,0x01,0x00,0x00,0x0b,0x03,0x00,0x00,0xb9,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xbd,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xbd,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x0d,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0x6f,0x01,0x00,0x00, -0x67,0x02,0x00,0x00,0xc0,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0xc3,0x01,0x00,0x00,0x0d,0x03,0x00,0x00, -0x6c,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xbf,0x01,0x00,0x00, -0xc0,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xc3,0x01,0x00,0x00,0xbe,0x01,0x00,0x00,0xbf,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xbe,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xc5,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xc5,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x11,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0xbe,0x01,0x00,0x00,0xf1,0x01,0x00,0x00, -0xc8,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0xcb,0x01,0x00,0x00,0x11,0x03,0x00,0x00,0x60,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xc7,0x01,0x00,0x00,0xc8,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xcb,0x01,0x00,0x00, -0xc6,0x01,0x00,0x00,0xc7,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xc6,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xcd,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xcd,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x23,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0xc6,0x01,0x00,0x00,0xef,0x01,0x00,0x00,0xce,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xd3,0x01,0x00,0x00, -0x23,0x03,0x00,0x00,0x62,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xcf,0x01,0x00,0x00,0xce,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xd3,0x01,0x00,0x00,0xce,0x01,0x00,0x00, -0xcf,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xce,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd9,0x01,0x00,0x00, -0x11,0x03,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xdb,0x01,0x00,0x00,0xd9,0x01,0x00,0x00, -0x23,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xdd,0x01,0x00,0x00,0x55,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdf,0x01,0x00,0x00, -0x11,0x03,0x00,0x00,0x61,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xe0,0x01,0x00,0x00,0xdd,0x01,0x00,0x00, -0xdf,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xe2,0x01,0x00,0x00,0x64,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe3,0x01,0x00,0x00, -0xe0,0x01,0x00,0x00,0xe2,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xe5,0x01,0x00,0x00,0xe3,0x01,0x00,0x00, -0x23,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xe7,0x01,0x00,0x00,0xe5,0x01,0x00,0x00,0xe6,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe9,0x01,0x00,0x00, -0xe7,0x01,0x00,0x00,0x0d,0x03,0x00,0x00,0x41,0x00,0x05,0x00, -0x5d,0x01,0x00,0x00,0xea,0x01,0x00,0x00,0x58,0x01,0x00,0x00, -0xe9,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x19,0x01,0x00,0x00, -0xeb,0x01,0x00,0x00,0xea,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0xec,0x01,0x00,0x00,0xed,0x01,0x00,0x00,0xd7,0x01,0x00,0x00, -0xdb,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xed,0x01,0x00,0x00, -0xeb,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xef,0x01,0x00,0x00,0x23,0x03,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xcd,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xcf,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xc8,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xc8,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xf1,0x01,0x00,0x00,0x11,0x03,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xc5,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xc7,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xf3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xf3,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x12,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0xc7,0x01,0x00,0x00,0x1f,0x02,0x00,0x00, -0xf6,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0xf9,0x01,0x00,0x00,0x12,0x03,0x00,0x00,0xbe,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xf5,0x01,0x00,0x00,0xf6,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xf9,0x01,0x00,0x00, -0xf4,0x01,0x00,0x00,0xf5,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xf4,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xfb,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xfb,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x20,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0xf4,0x01,0x00,0x00,0x1d,0x02,0x00,0x00,0xfc,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x01,0x02,0x00,0x00, -0x20,0x03,0x00,0x00,0xbb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xfd,0x01,0x00,0x00,0xfc,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x01,0x02,0x00,0x00,0xfc,0x01,0x00,0x00, -0xfd,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xfc,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x07,0x02,0x00,0x00, -0x12,0x03,0x00,0x00,0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x09,0x02,0x00,0x00,0x07,0x02,0x00,0x00, -0x20,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x0b,0x02,0x00,0x00,0x59,0x00,0x00,0x00,0xb8,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0e,0x02,0x00,0x00, -0x12,0x03,0x00,0x00,0x0d,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x0f,0x02,0x00,0x00,0x0b,0x02,0x00,0x00, -0x0e,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x11,0x02,0x00,0x00,0x68,0x00,0x00,0x00,0xbb,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x12,0x02,0x00,0x00, -0x0f,0x02,0x00,0x00,0x11,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x14,0x02,0x00,0x00,0x12,0x02,0x00,0x00, -0x20,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x16,0x02,0x00,0x00,0x14,0x02,0x00,0x00,0x15,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x18,0x02,0x00,0x00, -0x16,0x02,0x00,0x00,0x0d,0x03,0x00,0x00,0x41,0x00,0x05,0x00, -0x5d,0x01,0x00,0x00,0x19,0x02,0x00,0x00,0x8b,0x01,0x00,0x00, -0x18,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x19,0x01,0x00,0x00, -0x1a,0x02,0x00,0x00,0x19,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0xec,0x01,0x00,0x00,0x1b,0x02,0x00,0x00,0x05,0x02,0x00,0x00, -0x09,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x1b,0x02,0x00,0x00, -0x1a,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x1d,0x02,0x00,0x00,0x20,0x03,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xfb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xfd,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xf6,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xf6,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x1f,0x02,0x00,0x00,0x12,0x03,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xf3,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xf5,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0x21,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x21,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x13,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0xf5,0x01,0x00,0x00,0x65,0x02,0x00,0x00, -0x24,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0x27,0x02,0x00,0x00,0x13,0x03,0x00,0x00,0xbe,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x23,0x02,0x00,0x00,0x24,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x27,0x02,0x00,0x00, -0x22,0x02,0x00,0x00,0x23,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x22,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x29,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x29,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x17,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0x22,0x02,0x00,0x00,0x63,0x02,0x00,0x00,0x2c,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x2f,0x02,0x00,0x00, -0x17,0x03,0x00,0x00,0x60,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x2b,0x02,0x00,0x00,0x2c,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x2f,0x02,0x00,0x00,0x2a,0x02,0x00,0x00, -0x2b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x2a,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x31,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x31,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x19,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0x2a,0x02,0x00,0x00, -0x61,0x02,0x00,0x00,0x34,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0x37,0x02,0x00,0x00,0x19,0x03,0x00,0x00, -0xbb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x33,0x02,0x00,0x00, -0x34,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x37,0x02,0x00,0x00,0x32,0x02,0x00,0x00,0x33,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x32,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x39,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x39,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x1b,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0x32,0x02,0x00,0x00,0x5f,0x02,0x00,0x00, -0x3a,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0x3f,0x02,0x00,0x00,0x1b,0x03,0x00,0x00,0x62,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x3b,0x02,0x00,0x00,0x3a,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x3f,0x02,0x00,0x00, -0x3a,0x02,0x00,0x00,0x3b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x3a,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x41,0x02,0x00,0x00,0x13,0x03,0x00,0x00,0xbb,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x43,0x02,0x00,0x00, -0x41,0x02,0x00,0x00,0x19,0x03,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x45,0x02,0x00,0x00,0x43,0x02,0x00,0x00, -0x44,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x47,0x02,0x00,0x00,0x17,0x03,0x00,0x00,0x62,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x48,0x02,0x00,0x00, -0x45,0x02,0x00,0x00,0x47,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x4a,0x02,0x00,0x00,0x48,0x02,0x00,0x00, -0x1b,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x4e,0x02,0x00,0x00,0x47,0x02,0x00,0x00,0x1b,0x03,0x00,0x00, -0x41,0x00,0x05,0x00,0xec,0x01,0x00,0x00,0x4f,0x02,0x00,0x00, -0xd7,0x01,0x00,0x00,0x4e,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0x19,0x01,0x00,0x00,0x50,0x02,0x00,0x00,0x4f,0x02,0x00,0x00, -0x73,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x51,0x02,0x00,0x00, -0x50,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xec,0x01,0x00,0x00, -0x56,0x02,0x00,0x00,0x05,0x02,0x00,0x00,0x43,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0x19,0x01,0x00,0x00,0x57,0x02,0x00,0x00, -0x56,0x02,0x00,0x00,0x73,0x00,0x04,0x00,0xc3,0x00,0x00,0x00, -0x58,0x02,0x00,0x00,0x57,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0xcc,0x00,0x00,0x00,0x5a,0x02,0x00,0x00,0xc9,0x00,0x00,0x00, -0x4a,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00, -0x5b,0x02,0x00,0x00,0x5a,0x02,0x00,0x00,0x0c,0x00,0x08,0x00, -0xc3,0x00,0x00,0x00,0x5c,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0x51,0x02,0x00,0x00,0x58,0x02,0x00,0x00, -0x5b,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x5a,0x02,0x00,0x00, -0x5c,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x5f,0x02,0x00,0x00,0x1b,0x03,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x39,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x3b,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x34,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x34,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x61,0x02,0x00,0x00,0x19,0x03,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x31,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x33,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x2c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x2c,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x63,0x02,0x00,0x00, -0x17,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x29,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x2b,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x24,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x24,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x65,0x02,0x00,0x00,0x13,0x03,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x21,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x23,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xc0,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xc0,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x67,0x02,0x00,0x00,0x0d,0x03,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xbd,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xbf,0x01,0x00,0x00,0xe0,0x00,0x04,0x00, -0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xb5,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xd6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xd6,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x69,0x02,0x00,0x00,0xf3,0x02,0x00,0x00,0x6c,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xd3,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xd5,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x6e,0x02,0x00,0x00,0x55,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6f,0x02,0x00,0x00, -0x95,0x00,0x00,0x00,0x6e,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x74,0x02,0x00,0x00,0x59,0x00,0x00,0x00, -0xb8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x75,0x02,0x00,0x00,0xa7,0x00,0x00,0x00,0x74,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x7a,0x02,0x00,0x00, -0x12,0x00,0x00,0x00,0x79,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x7b,0x02,0x00,0x00,0x7a,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7c,0x02,0x00,0x00, -0x0f,0x00,0x00,0x00,0x7b,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x80,0x02,0x00,0x00,0x47,0x00,0x00,0x00, -0x7b,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x82,0x02,0x00,0x00,0x81,0x02,0x00,0x00,0x0c,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x83,0x02,0x00,0x00, -0x82,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x84,0x02,0x00,0x00,0x80,0x02,0x00,0x00,0x83,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x85,0x02,0x00,0x00, -0x7c,0x02,0x00,0x00,0x84,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x87,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x87,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xf4,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0xed,0x02,0x00,0x00, -0x8a,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0x8d,0x02,0x00,0x00,0xf4,0x02,0x00,0x00,0xbe,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x89,0x02,0x00,0x00,0x8a,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x8d,0x02,0x00,0x00, -0x88,0x02,0x00,0x00,0x89,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x88,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x8f,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x8f,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xf5,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0x88,0x02,0x00,0x00,0xeb,0x02,0x00,0x00,0x92,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x95,0x02,0x00,0x00, -0xf5,0x02,0x00,0x00,0x60,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x91,0x02,0x00,0x00,0x92,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x95,0x02,0x00,0x00,0x90,0x02,0x00,0x00, -0x91,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x90,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x99,0x02,0x00,0x00, -0xf5,0x02,0x00,0x00,0x61,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9a,0x02,0x00,0x00,0x6f,0x02,0x00,0x00, -0x99,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9c,0x02,0x00,0x00,0x64,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9d,0x02,0x00,0x00, -0x9a,0x02,0x00,0x00,0x9c,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa1,0x02,0x00,0x00,0xf4,0x02,0x00,0x00, -0x0d,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa2,0x02,0x00,0x00,0x75,0x02,0x00,0x00,0xa1,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa4,0x02,0x00,0x00, -0x68,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa5,0x02,0x00,0x00,0xa2,0x02,0x00,0x00, -0xa4,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xa7,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xa7,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xf7,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0x90,0x02,0x00,0x00,0xe9,0x02,0x00,0x00,0xaa,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xad,0x02,0x00,0x00, -0xf7,0x02,0x00,0x00,0xbb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xa9,0x02,0x00,0x00,0xaa,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xad,0x02,0x00,0x00,0xa8,0x02,0x00,0x00, -0xa9,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xa8,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0xaf,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xaf,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xf9,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0xa8,0x02,0x00,0x00, -0xe7,0x02,0x00,0x00,0xb2,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0xb5,0x02,0x00,0x00,0xf9,0x02,0x00,0x00, -0x62,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xb1,0x02,0x00,0x00, -0xb2,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xb5,0x02,0x00,0x00,0xb0,0x02,0x00,0x00,0xb1,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xb0,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xb8,0x02,0x00,0x00,0x9d,0x02,0x00,0x00, -0xf9,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0xbb,0x02,0x00,0x00,0xb8,0x02,0x00,0x00,0x36,0x00,0x00,0x00, -0xf7,0x00,0x03,0x00,0xbd,0x02,0x00,0x00,0x00,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xbb,0x02,0x00,0x00,0xbc,0x02,0x00,0x00, -0xbd,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xbc,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc0,0x02,0x00,0x00, -0xa5,0x02,0x00,0x00,0xf7,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0xc1,0x02,0x00,0x00,0x12,0x00,0x00,0x00, -0xcf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xc2,0x02,0x00,0x00,0xc1,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0xc3,0x02,0x00,0x00,0xc0,0x02,0x00,0x00, -0xc2,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xbd,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xbd,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0xc1,0x00,0x00,0x00,0xc4,0x02,0x00,0x00,0xbb,0x02,0x00,0x00, -0xb0,0x02,0x00,0x00,0xc3,0x02,0x00,0x00,0xbc,0x02,0x00,0x00, -0xf7,0x00,0x03,0x00,0xc6,0x02,0x00,0x00,0x00,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xc4,0x02,0x00,0x00,0xc5,0x02,0x00,0x00, -0xc6,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xc5,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xce,0x02,0x00,0x00, -0xa5,0x02,0x00,0x00,0xf7,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0xd0,0x02,0x00,0x00,0x12,0x00,0x00,0x00, -0xcf,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xd1,0x02,0x00,0x00,0xd0,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xd2,0x02,0x00,0x00,0xce,0x02,0x00,0x00, -0xd1,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd3,0x02,0x00,0x00,0x85,0x02,0x00,0x00,0xd2,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd5,0x02,0x00,0x00, -0xd3,0x02,0x00,0x00,0x9d,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xd7,0x02,0x00,0x00,0xd5,0x02,0x00,0x00, -0xf9,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd9,0x02,0x00,0x00,0xf4,0x02,0x00,0x00,0xbb,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdb,0x02,0x00,0x00, -0xd9,0x02,0x00,0x00,0xf7,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xdd,0x02,0x00,0x00,0xdb,0x02,0x00,0x00, -0xdc,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xdf,0x02,0x00,0x00,0xf5,0x02,0x00,0x00,0x62,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe0,0x02,0x00,0x00, -0xdd,0x02,0x00,0x00,0xdf,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xe2,0x02,0x00,0x00,0xe0,0x02,0x00,0x00, -0xf9,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00, -0xe3,0x02,0x00,0x00,0xc9,0x00,0x00,0x00,0xe2,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0xe4,0x02,0x00,0x00, -0xe3,0x02,0x00,0x00,0x41,0x00,0x06,0x00,0xa1,0x01,0x00,0x00, -0xe5,0x02,0x00,0x00,0xca,0x02,0x00,0x00,0x34,0x00,0x00,0x00, -0xd7,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0xe5,0x02,0x00,0x00, -0xe4,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xc6,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xc6,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0xb2,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xb2,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe7,0x02,0x00,0x00, -0xf9,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xaf,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xb1,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0xaa,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xaa,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xe9,0x02,0x00,0x00,0xf7,0x02,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xa7,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xa9,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x92,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x92,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xeb,0x02,0x00,0x00,0xf5,0x02,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x8f,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x91,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x8a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x8a,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xed,0x02,0x00,0x00, -0xf4,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x87,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x89,0x02,0x00,0x00, -0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00, -}; -const uint64_t matmul_q2_k_f32_len = 11240; - -unsigned char matmul_q2_k_f32_aligned_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0x68,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x09,0x00,0x00,0x00, -0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00, -0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00, -0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30, -0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x0f,0x00,0x0f,0x00,0x05,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x4c,0x00,0x00,0x00,0x1f,0x01,0x00,0x00,0x58,0x01,0x00,0x00, -0x8d,0x01,0x00,0x00,0x95,0x01,0x00,0x00,0xa2,0x02,0x00,0x00, -0xeb,0x02,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x05,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x30,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x0d,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0x10,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x37,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x3d,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x4c,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x4f,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x53,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x60,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x62,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x6c,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xa7,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xb9,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xbc,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x17,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x18,0x01,0x00,0x00,0x06,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1b,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1b,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1b,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x50,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x1c,0x01,0x00,0x00, -0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0x1d,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1d,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x1d,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x1f,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x1f,0x01,0x00,0x00,0x21,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x65,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x66,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x92,0x01,0x00,0x00,0x06,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x93,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0x93,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x93,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x93,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x93,0x01,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x95,0x01,0x00,0x00, -0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x95,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xa2,0x02,0x00,0x00,0x0b,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xe8,0x02,0x00,0x00, -0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0xe9,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0xe9,0x02,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0xe9,0x02,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xeb,0x02,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xeb,0x02,0x00,0x00,0x21,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00, -0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x1e,0x00,0x10,0x00,0x10,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x11,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x11,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x15,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0x0a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x27,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x3e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x61,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x63,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x61,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x67,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x61,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x72,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x78,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x77,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x7d,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x77,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x81,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x97,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0xa2,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0xa9,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xb8,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xb9,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x4f,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbd,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0xbc,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbe,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbf,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0xbe,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc0,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0xbf,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc1,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0xbc,0x00,0x00,0x00, -0x14,0x00,0x02,0x00,0xc2,0x00,0x00,0x00,0x16,0x00,0x03,0x00, -0xc4,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xc5,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xc6,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x1c,0x00,0x04,0x00, -0xc8,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0xc7,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0xc9,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0xc8,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0xcc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0xcd,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xc4,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0xd0,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xf4,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xfb,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x02,0x01,0x00,0x00,0x40,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x04,0x01,0x00,0x00, -0x20,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x07,0x01,0x00,0x00,0x10,0x00,0x00,0x00,0x17,0x00,0x04,0x00, -0x13,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x16,0x01,0x00,0x00,0x08,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x17,0x01,0x00,0x00, -0x16,0x01,0x00,0x00,0x07,0x01,0x00,0x00,0x1c,0x00,0x04,0x00, -0x18,0x01,0x00,0x00,0x16,0x01,0x00,0x00,0x02,0x01,0x00,0x00, -0x16,0x00,0x03,0x00,0x19,0x01,0x00,0x00,0x10,0x00,0x00,0x00, -0x17,0x00,0x04,0x00,0x1a,0x01,0x00,0x00,0x19,0x01,0x00,0x00, -0x02,0x00,0x00,0x00,0x1e,0x00,0x05,0x00,0x1b,0x01,0x00,0x00, -0x17,0x01,0x00,0x00,0x18,0x01,0x00,0x00,0x1a,0x01,0x00,0x00, -0x1d,0x00,0x03,0x00,0x1c,0x01,0x00,0x00,0x1b,0x01,0x00,0x00, -0x1e,0x00,0x03,0x00,0x1d,0x01,0x00,0x00,0x1c,0x01,0x00,0x00, -0x20,0x00,0x04,0x00,0x1e,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x1d,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x1e,0x01,0x00,0x00, -0x1f,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x22,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x16,0x01,0x00,0x00, -0x17,0x00,0x04,0x00,0x33,0x01,0x00,0x00,0xc4,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x37,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x1a,0x01,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x3f,0x01,0x00,0x00,0x0f,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x47,0x01,0x00,0x00, -0x03,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x54,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x55,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x54,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,0x56,0x01,0x00,0x00, -0x19,0x01,0x00,0x00,0x55,0x01,0x00,0x00,0x20,0x00,0x04,0x00, -0x57,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x56,0x01,0x00,0x00, -0x3b,0x00,0x04,0x00,0x57,0x01,0x00,0x00,0x58,0x01,0x00,0x00, -0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x5d,0x01,0x00,0x00, -0x04,0x00,0x00,0x00,0x19,0x01,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x65,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0x33,0x00,0x06,0x00,0x09,0x00,0x00,0x00,0x66,0x01,0x00,0x00, -0x65,0x01,0x00,0x00,0x39,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x67,0x01,0x00,0x00, -0x51,0x00,0x00,0x00,0x66,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x68,0x01,0x00,0x00, -0x84,0x00,0x00,0x00,0x67,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x69,0x01,0x00,0x00, -0x86,0x00,0x00,0x00,0x68,0x01,0x00,0x00,0x6c,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x84,0x01,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x89,0x01,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x8a,0x01,0x00,0x00, -0x84,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0x89,0x01,0x00,0x00, -0x1c,0x00,0x04,0x00,0x8b,0x01,0x00,0x00,0x19,0x01,0x00,0x00, -0x8a,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x8c,0x01,0x00,0x00, -0x04,0x00,0x00,0x00,0x8b,0x01,0x00,0x00,0x3b,0x00,0x04,0x00, -0x8c,0x01,0x00,0x00,0x8d,0x01,0x00,0x00,0x04,0x00,0x00,0x00, -0x17,0x00,0x04,0x00,0x90,0x01,0x00,0x00,0xc4,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x18,0x00,0x04,0x00,0x91,0x01,0x00,0x00, -0x90,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x1d,0x00,0x03,0x00, -0x92,0x01,0x00,0x00,0x91,0x01,0x00,0x00,0x1e,0x00,0x03,0x00, -0x93,0x01,0x00,0x00,0x92,0x01,0x00,0x00,0x20,0x00,0x04,0x00, -0x94,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x93,0x01,0x00,0x00, -0x3b,0x00,0x04,0x00,0x94,0x01,0x00,0x00,0x95,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x97,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xb2,0x01,0x00,0x00,0x04,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xba,0x01,0x00,0x00, -0x05,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xc2,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xca,0x01,0x00,0x00,0x07,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xd1,0x01,0x00,0x00, -0x51,0x00,0x00,0x00,0x66,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xd2,0x01,0x00,0x00, -0x84,0x00,0x00,0x00,0xd1,0x01,0x00,0x00,0x77,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xd3,0x01,0x00,0x00, -0x86,0x00,0x00,0x00,0xd2,0x01,0x00,0x00,0x6c,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xd6,0x01,0x00,0x00, -0x08,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xd7,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xda,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x77,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xf5,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xf6,0x01,0x00,0x00, -0x19,0x01,0x00,0x00,0xf5,0x01,0x00,0x00,0x20,0x00,0x04,0x00, -0xf7,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0xf6,0x01,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x07,0x02,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x0d,0x02,0x00,0x00,0x07,0x00,0x00,0x00, -0x19,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x23,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0xbf,0x00,0x00,0x00, -0xbc,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x24,0x02,0x00,0x00, -0x19,0x01,0x00,0x00,0x23,0x02,0x00,0x00,0x20,0x00,0x04,0x00, -0x25,0x02,0x00,0x00,0x07,0x00,0x00,0x00,0x24,0x02,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x2e,0x02,0x00,0x00, -0x86,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0xbf,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x36,0x02,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x65,0x02,0x00,0x00, -0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x9a,0x02,0x00,0x00, -0x0d,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0xa2,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x1d,0x00,0x03,0x00, -0xe8,0x02,0x00,0x00,0xc4,0x00,0x00,0x00,0x1e,0x00,0x03,0x00, -0xe9,0x02,0x00,0x00,0xe8,0x02,0x00,0x00,0x20,0x00,0x04,0x00, -0xea,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0xe9,0x02,0x00,0x00, -0x3b,0x00,0x04,0x00,0xea,0x02,0x00,0x00,0xeb,0x02,0x00,0x00, -0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0xf0,0x02,0x00,0x00,0x05,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xfd,0x02,0x00,0x00,0x84,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x2c,0x00,0x05,0x00, -0x13,0x01,0x00,0x00,0x67,0x03,0x00,0x00,0x47,0x01,0x00,0x00, -0x47,0x01,0x00,0x00,0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0xc9,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0xf7,0x01,0x00,0x00,0xf8,0x01,0x00,0x00, -0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x25,0x02,0x00,0x00, -0x26,0x02,0x00,0x00,0x07,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x17,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x17,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x1e,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x17,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x27,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x29,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x1e,0x00,0x00,0x00, -0x29,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x2e,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x2d,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x2f,0x00,0x00,0x00, -0x2e,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x30,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x2f,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x30,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x34,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x36,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x36,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x3a,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00, -0x3a,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x3b,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x47,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x3b,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x49,0x00,0x00,0x00, -0x3d,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x49,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x4d,0x00,0x00,0x00, -0x4c,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x4d,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x50,0x00,0x00,0x00, -0x54,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x59,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x58,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5d,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x5d,0x00,0x00,0x00, -0x63,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x68,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,0x67,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6e,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x72,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x79,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x78,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7e,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x81,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x83,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x47,0x00,0x00,0x00, -0x83,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x87,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x88,0x00,0x00,0x00, -0x87,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x8a,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8d,0x00,0x00,0x00, -0x8a,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x0c,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x26,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x8d,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x92,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x92,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x94,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x42,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x98,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x97,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x99,0x00,0x00,0x00, -0x98,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9a,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x99,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9b,0x00,0x00,0x00, -0x94,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,0x9b,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9e,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0xa3,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0xa3,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa5,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x4a,0x00,0x00,0x00, -0xa7,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0xaa,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0xa9,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xab,0x00,0x00,0x00, -0xaa,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xac,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0xab,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xad,0x00,0x00,0x00, -0xa5,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0xad,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xb0,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0x77,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xb2,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x13,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0x05,0x00,0x00,0x00, -0xd1,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0x13,0x03,0x00,0x00, -0xc1,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xb4,0x00,0x00,0x00, -0xb3,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xc3,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0xb4,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xb3,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0xcd,0x00,0x00,0x00,0xce,0x00,0x00,0x00,0xca,0x00,0x00,0x00, -0x13,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,0xce,0x00,0x00,0x00, -0xcc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd1,0x00,0x00,0x00,0x13,0x03,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xb4,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd4,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xd4,0x00,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x2c,0x03,0x00,0x00,0xb0,0x00,0x00,0x00, -0xb4,0x00,0x00,0x00,0xdc,0x01,0x00,0x00,0xd7,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x28,0x03,0x00,0x00, -0x9e,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0xd9,0x01,0x00,0x00, -0xd7,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x14,0x03,0x00,0x00,0x84,0x00,0x00,0x00,0xb4,0x00,0x00,0x00, -0x8a,0x02,0x00,0x00,0xd7,0x00,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,0x14,0x03,0x00,0x00, -0x8e,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xd6,0x00,0x00,0x00, -0xd7,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xdb,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0xd6,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xd5,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdd,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x24,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0x6b,0x01,0x00,0x00, -0xde,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0xe3,0x00,0x00,0x00,0x24,0x03,0x00,0x00,0x37,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xdf,0x00,0x00,0x00,0xde,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xe3,0x00,0x00,0x00, -0xde,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xde,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xe8,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x24,0x03,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xeb,0x00,0x00,0x00, -0xe8,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xec,0x00,0x00,0x00,0xeb,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xed,0x00,0x00,0x00,0x28,0x03,0x00,0x00,0xec,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xef,0x00,0x00,0x00, -0xed,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,0xe8,0x00,0x00,0x00, -0xf4,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xf7,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf8,0x00,0x00,0x00, -0xf5,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0xef,0x00,0x00,0x00, -0xfb,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xff,0x00,0x00,0x00,0xef,0x00,0x00,0x00,0xfb,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x03,0x01,0x00,0x00, -0xff,0x00,0x00,0x00,0x02,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x05,0x01,0x00,0x00,0x03,0x01,0x00,0x00, -0x04,0x01,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x08,0x01,0x00,0x00,0xff,0x00,0x00,0x00,0x07,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x09,0x01,0x00,0x00, -0x08,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x0a,0x01,0x00,0x00,0x05,0x01,0x00,0x00, -0x09,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x0d,0x01,0x00,0x00,0xff,0x00,0x00,0x00,0x77,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x10,0x01,0x00,0x00, -0xff,0x00,0x00,0x00,0x02,0x01,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x11,0x01,0x00,0x00,0x10,0x01,0x00,0x00, -0x07,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x12,0x01,0x00,0x00,0x11,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x41,0x00,0x08,0x00,0x22,0x01,0x00,0x00,0x23,0x01,0x00,0x00, -0x1f,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0xfc,0x00,0x00,0x00, -0xd0,0x00,0x00,0x00,0x0a,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0x16,0x01,0x00,0x00,0x24,0x01,0x00,0x00,0x23,0x01,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x25,0x01,0x00,0x00, -0x24,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x28,0x01,0x00,0x00,0x0a,0x01,0x00,0x00,0x39,0x00,0x00,0x00, -0x41,0x00,0x08,0x00,0x22,0x01,0x00,0x00,0x29,0x01,0x00,0x00, -0x1f,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0xfc,0x00,0x00,0x00, -0xd0,0x00,0x00,0x00,0x28,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0x16,0x01,0x00,0x00,0x2a,0x01,0x00,0x00,0x29,0x01,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x2b,0x01,0x00,0x00, -0x2a,0x01,0x00,0x00,0x50,0x00,0x05,0x00,0x13,0x01,0x00,0x00, -0x2c,0x01,0x00,0x00,0x25,0x01,0x00,0x00,0x2b,0x01,0x00,0x00, -0x41,0x00,0x08,0x00,0x22,0x01,0x00,0x00,0x30,0x01,0x00,0x00, -0x1f,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0xfc,0x00,0x00,0x00, -0x34,0x00,0x00,0x00,0x0d,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0x16,0x01,0x00,0x00,0x31,0x01,0x00,0x00,0x30,0x01,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x32,0x01,0x00,0x00, -0x31,0x01,0x00,0x00,0x41,0x00,0x07,0x00,0x37,0x01,0x00,0x00, -0x38,0x01,0x00,0x00,0x1f,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0xfc,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x1a,0x01,0x00,0x00,0x39,0x01,0x00,0x00,0x38,0x01,0x00,0x00, -0x73,0x00,0x04,0x00,0x33,0x01,0x00,0x00,0x3a,0x01,0x00,0x00, -0x39,0x01,0x00,0x00,0x51,0x00,0x05,0x00,0xc4,0x00,0x00,0x00, -0x3d,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x40,0x01,0x00,0x00, -0x32,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,0x70,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0x41,0x01,0x00,0x00,0x40,0x01,0x00,0x00, -0x85,0x00,0x05,0x00,0xc4,0x00,0x00,0x00,0x42,0x01,0x00,0x00, -0x3d,0x01,0x00,0x00,0x41,0x01,0x00,0x00,0x50,0x00,0x05,0x00, -0x13,0x01,0x00,0x00,0x45,0x01,0x00,0x00,0x12,0x01,0x00,0x00, -0x12,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x13,0x01,0x00,0x00, -0x46,0x01,0x00,0x00,0x2c,0x01,0x00,0x00,0x45,0x01,0x00,0x00, -0xc7,0x00,0x05,0x00,0x13,0x01,0x00,0x00,0x49,0x01,0x00,0x00, -0x46,0x01,0x00,0x00,0x67,0x03,0x00,0x00,0x70,0x00,0x04,0x00, -0x33,0x01,0x00,0x00,0x4a,0x01,0x00,0x00,0x49,0x01,0x00,0x00, -0x8e,0x00,0x05,0x00,0x33,0x01,0x00,0x00,0x4b,0x01,0x00,0x00, -0x4a,0x01,0x00,0x00,0x42,0x01,0x00,0x00,0x51,0x00,0x05,0x00, -0xc4,0x00,0x00,0x00,0x4d,0x01,0x00,0x00,0x3a,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x4f,0x01,0x00,0x00,0x32,0x01,0x00,0x00,0xa9,0x00,0x00,0x00, -0x70,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x50,0x01,0x00,0x00, -0x4f,0x01,0x00,0x00,0x85,0x00,0x05,0x00,0xc4,0x00,0x00,0x00, -0x51,0x01,0x00,0x00,0x4d,0x01,0x00,0x00,0x50,0x01,0x00,0x00, -0x50,0x00,0x05,0x00,0x33,0x01,0x00,0x00,0x52,0x01,0x00,0x00, -0x51,0x01,0x00,0x00,0x51,0x01,0x00,0x00,0x83,0x00,0x05,0x00, -0x33,0x01,0x00,0x00,0x53,0x01,0x00,0x00,0x4b,0x01,0x00,0x00, -0x52,0x01,0x00,0x00,0x51,0x00,0x05,0x00,0xc4,0x00,0x00,0x00, -0x5b,0x01,0x00,0x00,0x53,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x73,0x00,0x04,0x00,0x19,0x01,0x00,0x00,0x5c,0x01,0x00,0x00, -0x5b,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x5d,0x01,0x00,0x00, -0x5e,0x01,0x00,0x00,0x58,0x01,0x00,0x00,0xf8,0x00,0x00,0x00, -0x3e,0x00,0x03,0x00,0x5e,0x01,0x00,0x00,0x5c,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x60,0x01,0x00,0x00, -0xf8,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x51,0x00,0x05,0x00, -0xc4,0x00,0x00,0x00,0x62,0x01,0x00,0x00,0x53,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x19,0x01,0x00,0x00, -0x63,0x01,0x00,0x00,0x62,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x5d,0x01,0x00,0x00,0x64,0x01,0x00,0x00,0x58,0x01,0x00,0x00, -0x60,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x64,0x01,0x00,0x00, -0x63,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x6b,0x01,0x00,0x00,0x24,0x03,0x00,0x00,0x69,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xdf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x6d,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x6d,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x25,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0xdf,0x00,0x00,0x00,0xd5,0x01,0x00,0x00,0x6e,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x73,0x01,0x00,0x00, -0x25,0x03,0x00,0x00,0xa7,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x6f,0x01,0x00,0x00,0x6e,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x73,0x01,0x00,0x00,0x6e,0x01,0x00,0x00, -0x6f,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x6e,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x78,0x01,0x00,0x00, -0x7e,0x00,0x00,0x00,0x25,0x03,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x7b,0x01,0x00,0x00,0x78,0x01,0x00,0x00, -0xab,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x7c,0x01,0x00,0x00,0x7b,0x01,0x00,0x00,0x77,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7d,0x01,0x00,0x00, -0x2c,0x03,0x00,0x00,0x7c,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x7f,0x01,0x00,0x00,0x7d,0x01,0x00,0x00, -0x79,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x85,0x01,0x00,0x00,0x78,0x01,0x00,0x00,0x84,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x87,0x01,0x00,0x00, -0x79,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x88,0x01,0x00,0x00,0x85,0x01,0x00,0x00, -0x87,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x97,0x01,0x00,0x00, -0x98,0x01,0x00,0x00,0x95,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0x7f,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0x3e,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x99,0x01,0x00,0x00, -0x98,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x19,0x01,0x00,0x00, -0x9a,0x01,0x00,0x00,0x99,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x5d,0x01,0x00,0x00,0x9b,0x01,0x00,0x00,0x8d,0x01,0x00,0x00, -0x88,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x9b,0x01,0x00,0x00, -0x9a,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9d,0x01,0x00,0x00,0x88,0x01,0x00,0x00,0x39,0x00,0x00,0x00, -0x41,0x00,0x08,0x00,0x97,0x01,0x00,0x00,0x9f,0x01,0x00,0x00, -0x95,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0x7f,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0xa0,0x01,0x00,0x00,0x9f,0x01,0x00,0x00, -0x73,0x00,0x04,0x00,0x19,0x01,0x00,0x00,0xa1,0x01,0x00,0x00, -0xa0,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x5d,0x01,0x00,0x00, -0xa2,0x01,0x00,0x00,0x8d,0x01,0x00,0x00,0x9d,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0xa2,0x01,0x00,0x00,0xa1,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa4,0x01,0x00,0x00, -0x88,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x41,0x00,0x08,0x00, -0x97,0x01,0x00,0x00,0xa6,0x01,0x00,0x00,0x95,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0x7f,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0xa7,0x01,0x00,0x00,0xa6,0x01,0x00,0x00,0x73,0x00,0x04,0x00, -0x19,0x01,0x00,0x00,0xa8,0x01,0x00,0x00,0xa7,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x5d,0x01,0x00,0x00,0xa9,0x01,0x00,0x00, -0x8d,0x01,0x00,0x00,0xa4,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0xa9,0x01,0x00,0x00,0xa8,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xab,0x01,0x00,0x00,0x88,0x01,0x00,0x00, -0x47,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x97,0x01,0x00,0x00, -0xad,0x01,0x00,0x00,0x95,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0x7f,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0x47,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0xae,0x01,0x00,0x00, -0xad,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x19,0x01,0x00,0x00, -0xaf,0x01,0x00,0x00,0xae,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x5d,0x01,0x00,0x00,0xb0,0x01,0x00,0x00,0x8d,0x01,0x00,0x00, -0xab,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xb0,0x01,0x00,0x00, -0xaf,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xb3,0x01,0x00,0x00,0x88,0x01,0x00,0x00,0xb2,0x01,0x00,0x00, -0x41,0x00,0x08,0x00,0x97,0x01,0x00,0x00,0xb5,0x01,0x00,0x00, -0x95,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0x7f,0x01,0x00,0x00, -0xd0,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0xb6,0x01,0x00,0x00,0xb5,0x01,0x00,0x00, -0x73,0x00,0x04,0x00,0x19,0x01,0x00,0x00,0xb7,0x01,0x00,0x00, -0xb6,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x5d,0x01,0x00,0x00, -0xb8,0x01,0x00,0x00,0x8d,0x01,0x00,0x00,0xb3,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0xb8,0x01,0x00,0x00,0xb7,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbb,0x01,0x00,0x00, -0x88,0x01,0x00,0x00,0xba,0x01,0x00,0x00,0x41,0x00,0x08,0x00, -0x97,0x01,0x00,0x00,0xbd,0x01,0x00,0x00,0x95,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0x7f,0x01,0x00,0x00,0xd0,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0xbe,0x01,0x00,0x00,0xbd,0x01,0x00,0x00,0x73,0x00,0x04,0x00, -0x19,0x01,0x00,0x00,0xbf,0x01,0x00,0x00,0xbe,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x5d,0x01,0x00,0x00,0xc0,0x01,0x00,0x00, -0x8d,0x01,0x00,0x00,0xbb,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0xc0,0x01,0x00,0x00,0xbf,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xc3,0x01,0x00,0x00,0x88,0x01,0x00,0x00, -0xc2,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x97,0x01,0x00,0x00, -0xc5,0x01,0x00,0x00,0x95,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0x7f,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0xc6,0x01,0x00,0x00, -0xc5,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x19,0x01,0x00,0x00, -0xc7,0x01,0x00,0x00,0xc6,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x5d,0x01,0x00,0x00,0xc8,0x01,0x00,0x00,0x8d,0x01,0x00,0x00, -0xc3,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xc8,0x01,0x00,0x00, -0xc7,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xcb,0x01,0x00,0x00,0x88,0x01,0x00,0x00,0xca,0x01,0x00,0x00, -0x41,0x00,0x08,0x00,0x97,0x01,0x00,0x00,0xcd,0x01,0x00,0x00, -0x95,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0x7f,0x01,0x00,0x00, -0xd0,0x00,0x00,0x00,0x47,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0xce,0x01,0x00,0x00,0xcd,0x01,0x00,0x00, -0x73,0x00,0x04,0x00,0x19,0x01,0x00,0x00,0xcf,0x01,0x00,0x00, -0xce,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x5d,0x01,0x00,0x00, -0xd0,0x01,0x00,0x00,0x8d,0x01,0x00,0x00,0xcb,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0xd0,0x01,0x00,0x00,0xcf,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd5,0x01,0x00,0x00, -0x25,0x03,0x00,0x00,0xd3,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0x6d,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x6f,0x01,0x00,0x00, -0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0xd6,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd9,0x01,0x00,0x00,0x28,0x03,0x00,0x00,0xd7,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdc,0x01,0x00,0x00, -0x2c,0x03,0x00,0x00,0xda,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xde,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xde,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x2e,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0x6f,0x01,0x00,0x00,0x88,0x02,0x00,0x00, -0xe1,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0xe4,0x01,0x00,0x00,0x2e,0x03,0x00,0x00,0x6c,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xe0,0x01,0x00,0x00,0xe1,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xe4,0x01,0x00,0x00, -0xdf,0x01,0x00,0x00,0xe0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xdf,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xe6,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xe6,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x32,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0xdf,0x01,0x00,0x00,0x12,0x02,0x00,0x00,0xe9,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xec,0x01,0x00,0x00, -0x32,0x03,0x00,0x00,0x60,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xe8,0x01,0x00,0x00,0xe9,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xec,0x01,0x00,0x00,0xe7,0x01,0x00,0x00, -0xe8,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xe7,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xee,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xee,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x44,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0xe7,0x01,0x00,0x00, -0x10,0x02,0x00,0x00,0xef,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0xf4,0x01,0x00,0x00,0x44,0x03,0x00,0x00, -0x62,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xf0,0x01,0x00,0x00, -0xef,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xf4,0x01,0x00,0x00,0xef,0x01,0x00,0x00,0xf0,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xef,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xfa,0x01,0x00,0x00,0x32,0x03,0x00,0x00, -0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xfc,0x01,0x00,0x00,0xfa,0x01,0x00,0x00,0x44,0x03,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfe,0x01,0x00,0x00, -0x55,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x32,0x03,0x00,0x00, -0x61,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x01,0x02,0x00,0x00,0xfe,0x01,0x00,0x00,0x00,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x03,0x02,0x00,0x00, -0x64,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x04,0x02,0x00,0x00,0x01,0x02,0x00,0x00, -0x03,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x06,0x02,0x00,0x00,0x04,0x02,0x00,0x00,0x44,0x03,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x08,0x02,0x00,0x00, -0x06,0x02,0x00,0x00,0x07,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x0a,0x02,0x00,0x00,0x08,0x02,0x00,0x00, -0x2e,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x5d,0x01,0x00,0x00, -0x0b,0x02,0x00,0x00,0x58,0x01,0x00,0x00,0x0a,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0x19,0x01,0x00,0x00,0x0c,0x02,0x00,0x00, -0x0b,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x02,0x00,0x00, -0x0e,0x02,0x00,0x00,0xf8,0x01,0x00,0x00,0xfc,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0x0e,0x02,0x00,0x00,0x0c,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x10,0x02,0x00,0x00, -0x44,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xee,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xf0,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xe9,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xe9,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x12,0x02,0x00,0x00,0x32,0x03,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xe6,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xe8,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x14,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x14,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x33,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0xe8,0x01,0x00,0x00,0x40,0x02,0x00,0x00,0x17,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x1a,0x02,0x00,0x00, -0x33,0x03,0x00,0x00,0xbf,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x16,0x02,0x00,0x00,0x17,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x1a,0x02,0x00,0x00,0x15,0x02,0x00,0x00, -0x16,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x15,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x1c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x1c,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x41,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0x15,0x02,0x00,0x00, -0x3e,0x02,0x00,0x00,0x1d,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0x22,0x02,0x00,0x00,0x41,0x03,0x00,0x00, -0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x1e,0x02,0x00,0x00, -0x1d,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x22,0x02,0x00,0x00,0x1d,0x02,0x00,0x00,0x1e,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x1d,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x28,0x02,0x00,0x00,0x33,0x03,0x00,0x00, -0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x2a,0x02,0x00,0x00,0x28,0x02,0x00,0x00,0x41,0x03,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2c,0x02,0x00,0x00, -0x59,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x2f,0x02,0x00,0x00,0x33,0x03,0x00,0x00, -0x2e,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x30,0x02,0x00,0x00,0x2c,0x02,0x00,0x00,0x2f,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x32,0x02,0x00,0x00, -0x68,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x33,0x02,0x00,0x00,0x30,0x02,0x00,0x00, -0x32,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x35,0x02,0x00,0x00,0x33,0x02,0x00,0x00,0x41,0x03,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x37,0x02,0x00,0x00, -0x35,0x02,0x00,0x00,0x36,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x39,0x02,0x00,0x00,0x37,0x02,0x00,0x00, -0x2e,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x5d,0x01,0x00,0x00, -0x3a,0x02,0x00,0x00,0x8d,0x01,0x00,0x00,0x39,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0x19,0x01,0x00,0x00,0x3b,0x02,0x00,0x00, -0x3a,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x02,0x00,0x00, -0x3c,0x02,0x00,0x00,0x26,0x02,0x00,0x00,0x2a,0x02,0x00,0x00, -0x3e,0x00,0x03,0x00,0x3c,0x02,0x00,0x00,0x3b,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3e,0x02,0x00,0x00, -0x41,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x1c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x1e,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x17,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x17,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x40,0x02,0x00,0x00,0x33,0x03,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x14,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x16,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x42,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x42,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x34,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0x16,0x02,0x00,0x00,0x86,0x02,0x00,0x00,0x45,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x48,0x02,0x00,0x00, -0x34,0x03,0x00,0x00,0xbf,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x44,0x02,0x00,0x00,0x45,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x48,0x02,0x00,0x00,0x43,0x02,0x00,0x00, -0x44,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x43,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x4a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x4a,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x38,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0x43,0x02,0x00,0x00, -0x84,0x02,0x00,0x00,0x4d,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0x50,0x02,0x00,0x00,0x38,0x03,0x00,0x00, -0x60,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x4c,0x02,0x00,0x00, -0x4d,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x50,0x02,0x00,0x00,0x4b,0x02,0x00,0x00,0x4c,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x4b,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x52,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x52,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x3a,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0x4b,0x02,0x00,0x00,0x82,0x02,0x00,0x00, -0x55,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0x58,0x02,0x00,0x00,0x3a,0x03,0x00,0x00,0xbc,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x54,0x02,0x00,0x00,0x55,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x58,0x02,0x00,0x00, -0x53,0x02,0x00,0x00,0x54,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x53,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x5a,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x5a,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x3c,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0x53,0x02,0x00,0x00,0x80,0x02,0x00,0x00,0x5b,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x60,0x02,0x00,0x00, -0x3c,0x03,0x00,0x00,0x62,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x5c,0x02,0x00,0x00,0x5b,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x60,0x02,0x00,0x00,0x5b,0x02,0x00,0x00, -0x5c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x5b,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x62,0x02,0x00,0x00, -0x34,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x64,0x02,0x00,0x00,0x62,0x02,0x00,0x00, -0x3a,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x66,0x02,0x00,0x00,0x64,0x02,0x00,0x00,0x65,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x68,0x02,0x00,0x00, -0x38,0x03,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x69,0x02,0x00,0x00,0x66,0x02,0x00,0x00, -0x68,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x6b,0x02,0x00,0x00,0x69,0x02,0x00,0x00,0x3c,0x03,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6f,0x02,0x00,0x00, -0x68,0x02,0x00,0x00,0x3c,0x03,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x02,0x00,0x00,0x70,0x02,0x00,0x00,0xf8,0x01,0x00,0x00, -0x6f,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x19,0x01,0x00,0x00, -0x71,0x02,0x00,0x00,0x70,0x02,0x00,0x00,0x73,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0x72,0x02,0x00,0x00,0x71,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x02,0x00,0x00,0x77,0x02,0x00,0x00, -0x26,0x02,0x00,0x00,0x64,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0x19,0x01,0x00,0x00,0x78,0x02,0x00,0x00,0x77,0x02,0x00,0x00, -0x73,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x79,0x02,0x00,0x00, -0x78,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00, -0x7b,0x02,0x00,0x00,0xca,0x00,0x00,0x00,0x6b,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x7c,0x02,0x00,0x00, -0x7b,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,0xc4,0x00,0x00,0x00, -0x7d,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x72,0x02,0x00,0x00,0x79,0x02,0x00,0x00,0x7c,0x02,0x00,0x00, -0x3e,0x00,0x03,0x00,0x7b,0x02,0x00,0x00,0x7d,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x80,0x02,0x00,0x00, -0x3c,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x5a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x5c,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x55,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x55,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x82,0x02,0x00,0x00,0x3a,0x03,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x52,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x54,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x4d,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x4d,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x84,0x02,0x00,0x00,0x38,0x03,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x4a,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x4c,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x45,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x45,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x86,0x02,0x00,0x00, -0x34,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x42,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x44,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0xe1,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xe1,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x88,0x02,0x00,0x00,0x2e,0x03,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xde,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xe0,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0xd6,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xd7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd7,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8a,0x02,0x00,0x00, -0x14,0x03,0x00,0x00,0x6c,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xd4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd6,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8f,0x02,0x00,0x00, -0x55,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x90,0x02,0x00,0x00,0x96,0x00,0x00,0x00, -0x8f,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x95,0x02,0x00,0x00,0x59,0x00,0x00,0x00,0xb9,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x96,0x02,0x00,0x00, -0xa8,0x00,0x00,0x00,0x95,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x9b,0x02,0x00,0x00,0x12,0x00,0x00,0x00, -0x9a,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x9c,0x02,0x00,0x00,0x9b,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9d,0x02,0x00,0x00,0x0f,0x00,0x00,0x00, -0x9c,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa1,0x02,0x00,0x00,0x47,0x00,0x00,0x00,0x9c,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0xa3,0x02,0x00,0x00, -0xa2,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xa4,0x02,0x00,0x00,0xa3,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa5,0x02,0x00,0x00, -0xa1,0x02,0x00,0x00,0xa4,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa6,0x02,0x00,0x00,0x9d,0x02,0x00,0x00, -0xa5,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xa8,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xa8,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x15,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0xd6,0x00,0x00,0x00,0x0e,0x03,0x00,0x00,0xab,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xae,0x02,0x00,0x00, -0x15,0x03,0x00,0x00,0xbf,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xaa,0x02,0x00,0x00,0xab,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xae,0x02,0x00,0x00,0xa9,0x02,0x00,0x00, -0xaa,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xa9,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0xb0,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xb0,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x16,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0xa9,0x02,0x00,0x00, -0x0c,0x03,0x00,0x00,0xb3,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0xb6,0x02,0x00,0x00,0x16,0x03,0x00,0x00, -0x60,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xb2,0x02,0x00,0x00, -0xb3,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xb6,0x02,0x00,0x00,0xb1,0x02,0x00,0x00,0xb2,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xb1,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xba,0x02,0x00,0x00,0x16,0x03,0x00,0x00, -0x61,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xbb,0x02,0x00,0x00,0x90,0x02,0x00,0x00,0xba,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbd,0x02,0x00,0x00, -0x64,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xbe,0x02,0x00,0x00,0xbb,0x02,0x00,0x00, -0xbd,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xc2,0x02,0x00,0x00,0x15,0x03,0x00,0x00,0x2e,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc3,0x02,0x00,0x00, -0x96,0x02,0x00,0x00,0xc2,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xc5,0x02,0x00,0x00,0x68,0x00,0x00,0x00, -0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xc6,0x02,0x00,0x00,0xc3,0x02,0x00,0x00,0xc5,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0xc8,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xc8,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x18,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0xb1,0x02,0x00,0x00, -0x0a,0x03,0x00,0x00,0xcb,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0xce,0x02,0x00,0x00,0x18,0x03,0x00,0x00, -0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xca,0x02,0x00,0x00, -0xcb,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xce,0x02,0x00,0x00,0xc9,0x02,0x00,0x00,0xca,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xc9,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0xd0,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xd0,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x1a,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0xc9,0x02,0x00,0x00,0x08,0x03,0x00,0x00, -0xd3,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0xd6,0x02,0x00,0x00,0x1a,0x03,0x00,0x00,0x62,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xd2,0x02,0x00,0x00,0xd3,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xd6,0x02,0x00,0x00, -0xd1,0x02,0x00,0x00,0xd2,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xd1,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd9,0x02,0x00,0x00,0xbe,0x02,0x00,0x00,0x1a,0x03,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xdc,0x02,0x00,0x00, -0xd9,0x02,0x00,0x00,0x36,0x00,0x00,0x00,0xf7,0x00,0x03,0x00, -0xde,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xdc,0x02,0x00,0x00,0xdd,0x02,0x00,0x00,0xde,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xdd,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xe1,0x02,0x00,0x00,0xc6,0x02,0x00,0x00, -0x18,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0xe2,0x02,0x00,0x00,0x12,0x00,0x00,0x00,0xd0,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xe3,0x02,0x00,0x00, -0xe2,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0xe4,0x02,0x00,0x00,0xe1,0x02,0x00,0x00,0xe3,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0xde,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xde,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0xc2,0x00,0x00,0x00, -0xe5,0x02,0x00,0x00,0xdc,0x02,0x00,0x00,0xd1,0x02,0x00,0x00, -0xe4,0x02,0x00,0x00,0xdd,0x02,0x00,0x00,0xf7,0x00,0x03,0x00, -0xe7,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xe5,0x02,0x00,0x00,0xe6,0x02,0x00,0x00,0xe7,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xe6,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xef,0x02,0x00,0x00,0xc6,0x02,0x00,0x00, -0x18,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0xf1,0x02,0x00,0x00,0x12,0x00,0x00,0x00,0xf0,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xf2,0x02,0x00,0x00, -0xf1,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xf3,0x02,0x00,0x00,0xef,0x02,0x00,0x00,0xf2,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf4,0x02,0x00,0x00, -0xa6,0x02,0x00,0x00,0xf3,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xf6,0x02,0x00,0x00,0xf4,0x02,0x00,0x00, -0xbe,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xf8,0x02,0x00,0x00,0xf6,0x02,0x00,0x00,0x1a,0x03,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfa,0x02,0x00,0x00, -0x15,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xfc,0x02,0x00,0x00,0xfa,0x02,0x00,0x00, -0x18,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xfe,0x02,0x00,0x00,0xfc,0x02,0x00,0x00,0xfd,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x00,0x03,0x00,0x00, -0x16,0x03,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x01,0x03,0x00,0x00,0xfe,0x02,0x00,0x00, -0x00,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x03,0x03,0x00,0x00,0x01,0x03,0x00,0x00,0x1a,0x03,0x00,0x00, -0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,0x04,0x03,0x00,0x00, -0xca,0x00,0x00,0x00,0x03,0x03,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0x05,0x03,0x00,0x00,0x04,0x03,0x00,0x00, -0x41,0x00,0x06,0x00,0x97,0x01,0x00,0x00,0x06,0x03,0x00,0x00, -0xeb,0x02,0x00,0x00,0x34,0x00,0x00,0x00,0xf8,0x02,0x00,0x00, -0x3e,0x00,0x03,0x00,0x06,0x03,0x00,0x00,0x05,0x03,0x00,0x00, -0xf9,0x00,0x02,0x00,0xe7,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xe7,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xd3,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xd3,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x08,0x03,0x00,0x00,0x1a,0x03,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd0,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xd2,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0xcb,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xcb,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0a,0x03,0x00,0x00, -0x18,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xc8,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xca,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0xb3,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xb3,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x0c,0x03,0x00,0x00,0x16,0x03,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xb0,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xb2,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xab,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xab,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x0e,0x03,0x00,0x00,0x15,0x03,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xa8,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xaa,0x02,0x00,0x00,0xfd,0x00,0x01,0x00, -0x38,0x00,0x01,0x00, -}; -const uint64_t matmul_q2_k_f32_aligned_len = 11800; - -unsigned char matmul_q2_k_f32_aligned_fp32_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0x3f,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00, -0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00, -0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64, -0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00, -0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0f,0x00,0x0f,0x00, -0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e, -0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x3d,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x20,0x01,0x00,0x00, -0x59,0x01,0x00,0x00,0x8c,0x01,0x00,0x00,0x93,0x01,0x00,0x00, -0x79,0x02,0x00,0x00,0xc2,0x02,0x00,0x00,0x10,0x00,0x06,0x00, -0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x34,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x10,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x37,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x3d,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x4c,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x4f,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x53,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x60,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x62,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x6c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xa7,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xb9,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xbc,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x18,0x01,0x00,0x00,0x06,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x19,0x01,0x00,0x00, -0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1c,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1c,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1c,0x01,0x00,0x00,0x02,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x1d,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00, -0x48,0x00,0x04,0x00,0x1e,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1e,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0x1e,0x01,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x20,0x01,0x00,0x00,0x22,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x20,0x01,0x00,0x00, -0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x64,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x65,0x01,0x00,0x00,0x0b,0x00,0x00,0x00, -0x19,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x90,0x01,0x00,0x00, -0x06,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0x91,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x91,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x91,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x93,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x93,0x01,0x00,0x00,0x21,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x79,0x02,0x00,0x00, -0x0b,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xbf,0x02,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x04,0x00,0xc0,0x02,0x00,0x00,0x00,0x00,0x00,0x00, -0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0xc0,0x02,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0xc0,0x02,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xc2,0x02,0x00,0x00,0x22,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xc2,0x02,0x00,0x00, -0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00, -0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00, -0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x1e,0x00,0x10,0x00,0x10,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x11,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x11,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x21,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x2d,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x34,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x3d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x4c,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x4f,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x58,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x61,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x61,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x67,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x61,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x6d,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x72,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x77,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x78,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x77,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x7d,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x77,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x81,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x91,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x97,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa7,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0xa9,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xba,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0xb9,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbb,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xbc,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xbd,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xbb,0x00,0x00,0x00, -0xbc,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xbe,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xbd,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xbf,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0xba,0x00,0x00,0x00, -0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xc0,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xb8,0x00,0x00,0x00, -0xbf,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xc1,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc0,0x00,0x00,0x00, -0xbc,0x00,0x00,0x00,0x14,0x00,0x02,0x00,0xc2,0x00,0x00,0x00, -0x16,0x00,0x03,0x00,0xc4,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0xbf,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc7,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0xbc,0x00,0x00,0x00, -0x1c,0x00,0x04,0x00,0xc8,0x00,0x00,0x00,0xc4,0x00,0x00,0x00, -0xc7,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xc9,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0xcd,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0xc4,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0xd0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0x80,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x02,0x01,0x00,0x00, -0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x04,0x01,0x00,0x00,0x20,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x07,0x01,0x00,0x00,0x10,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0d,0x01,0x00,0x00, -0x08,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x14,0x01,0x00,0x00, -0x06,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00, -0x17,0x01,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x1c,0x00,0x04,0x00,0x18,0x01,0x00,0x00,0x17,0x01,0x00,0x00, -0x07,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,0x19,0x01,0x00,0x00, -0x17,0x01,0x00,0x00,0x02,0x01,0x00,0x00,0x16,0x00,0x03,0x00, -0x1a,0x01,0x00,0x00,0x10,0x00,0x00,0x00,0x17,0x00,0x04,0x00, -0x1b,0x01,0x00,0x00,0x1a,0x01,0x00,0x00,0x02,0x00,0x00,0x00, -0x1e,0x00,0x05,0x00,0x1c,0x01,0x00,0x00,0x18,0x01,0x00,0x00, -0x19,0x01,0x00,0x00,0x1b,0x01,0x00,0x00,0x1d,0x00,0x03,0x00, -0x1d,0x01,0x00,0x00,0x1c,0x01,0x00,0x00,0x1e,0x00,0x03,0x00, -0x1e,0x01,0x00,0x00,0x1d,0x01,0x00,0x00,0x20,0x00,0x04,0x00, -0x1f,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x1e,0x01,0x00,0x00, -0x3b,0x00,0x04,0x00,0x1f,0x01,0x00,0x00,0x20,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x23,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x17,0x01,0x00,0x00,0x17,0x00,0x04,0x00, -0x34,0x01,0x00,0x00,0xc4,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x38,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x1b,0x01,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x40,0x01,0x00,0x00,0x0f,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x48,0x01,0x00,0x00,0x03,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x55,0x01,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x56,0x01,0x00,0x00, -0x84,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x55,0x01,0x00,0x00, -0x1c,0x00,0x04,0x00,0x57,0x01,0x00,0x00,0xc4,0x00,0x00,0x00, -0x56,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x58,0x01,0x00,0x00, -0x04,0x00,0x00,0x00,0x57,0x01,0x00,0x00,0x3b,0x00,0x04,0x00, -0x58,0x01,0x00,0x00,0x59,0x01,0x00,0x00,0x04,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x5d,0x01,0x00,0x00,0x04,0x00,0x00,0x00, -0xc4,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x64,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00, -0x09,0x00,0x00,0x00,0x65,0x01,0x00,0x00,0x64,0x01,0x00,0x00, -0x39,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x66,0x01,0x00,0x00,0x51,0x00,0x00,0x00, -0x65,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x67,0x01,0x00,0x00,0x84,0x00,0x00,0x00, -0x66,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x68,0x01,0x00,0x00,0x86,0x00,0x00,0x00, -0x67,0x01,0x00,0x00,0x6c,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x83,0x01,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x88,0x01,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x89,0x01,0x00,0x00,0x84,0x00,0x00,0x00, -0xa7,0x00,0x00,0x00,0x88,0x01,0x00,0x00,0x1c,0x00,0x04,0x00, -0x8a,0x01,0x00,0x00,0xc4,0x00,0x00,0x00,0x89,0x01,0x00,0x00, -0x20,0x00,0x04,0x00,0x8b,0x01,0x00,0x00,0x04,0x00,0x00,0x00, -0x8a,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x8b,0x01,0x00,0x00, -0x8c,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x17,0x00,0x04,0x00, -0x8f,0x01,0x00,0x00,0xc4,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x1d,0x00,0x03,0x00,0x90,0x01,0x00,0x00,0x8f,0x01,0x00,0x00, -0x1e,0x00,0x03,0x00,0x91,0x01,0x00,0x00,0x90,0x01,0x00,0x00, -0x20,0x00,0x04,0x00,0x92,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x91,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x92,0x01,0x00,0x00, -0x93,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x95,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0xc4,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xab,0x01,0x00,0x00, -0x51,0x00,0x00,0x00,0x65,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xac,0x01,0x00,0x00, -0x84,0x00,0x00,0x00,0xab,0x01,0x00,0x00,0x77,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xad,0x01,0x00,0x00, -0x86,0x00,0x00,0x00,0xac,0x01,0x00,0x00,0x6c,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb0,0x01,0x00,0x00, -0x08,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xb1,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xb4,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x77,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xcf,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xd0,0x01,0x00,0x00, -0xc4,0x00,0x00,0x00,0xcf,0x01,0x00,0x00,0x20,0x00,0x04,0x00, -0xd1,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0xd0,0x01,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xe1,0x01,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xfc,0x01,0x00,0x00, -0x84,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0xbc,0x00,0x00,0x00, -0x1c,0x00,0x04,0x00,0xfd,0x01,0x00,0x00,0xc4,0x00,0x00,0x00, -0xfc,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0xfe,0x01,0x00,0x00, -0x07,0x00,0x00,0x00,0xfd,0x01,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x07,0x02,0x00,0x00,0x86,0x00,0x00,0x00, -0xb9,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x0f,0x02,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x3e,0x02,0x00,0x00,0x84,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x71,0x02,0x00,0x00,0x0d,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x79,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0xbf,0x02,0x00,0x00, -0xc4,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0xc0,0x02,0x00,0x00, -0xbf,0x02,0x00,0x00,0x20,0x00,0x04,0x00,0xc1,0x02,0x00,0x00, -0x0c,0x00,0x00,0x00,0xc0,0x02,0x00,0x00,0x3b,0x00,0x04,0x00, -0xc1,0x02,0x00,0x00,0xc2,0x02,0x00,0x00,0x0c,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0xc7,0x02,0x00,0x00, -0x05,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xd4,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x2c,0x00,0x05,0x00,0x14,0x01,0x00,0x00, -0x3e,0x03,0x00,0x00,0x48,0x01,0x00,0x00,0x48,0x01,0x00,0x00, -0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x05,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xc9,0x00,0x00,0x00, -0xca,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0xd1,0x01,0x00,0x00,0xd2,0x01,0x00,0x00,0x07,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0xfe,0x01,0x00,0x00,0xff,0x01,0x00,0x00, -0x07,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x16,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x17,0x00,0x00,0x00, -0x16,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x17,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1e,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x21,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x28,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x27,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x29,0x00,0x00,0x00, -0x28,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x2a,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x29,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x2e,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00, -0x24,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x30,0x00,0x00,0x00, -0x2a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x35,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x36,0x00,0x00,0x00, -0x35,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x38,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00, -0x38,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x3a,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x3f,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x3e,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x3f,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x42,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x3b,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x47,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x4a,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x4c,0x00,0x00,0x00, -0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x4f,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x55,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x54,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00, -0x50,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x4f,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x64,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,0x63,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x68,0x00,0x00,0x00, -0x5d,0x00,0x00,0x00,0x67,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x6d,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x73,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x72,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x79,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x7d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x82,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x81,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x83,0x00,0x00,0x00, -0x82,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0x83,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x87,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x87,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8a,0x00,0x00,0x00, -0x47,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x8a,0x00,0x00,0x00, -0x83,0x00,0x00,0x00,0x0c,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x8e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x26,0x00,0x00,0x00, -0x88,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x91,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x93,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x93,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x96,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x98,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x98,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9a,0x00,0x00,0x00, -0x96,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x94,0x00,0x00,0x00, -0x9a,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9d,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9e,0x00,0x00,0x00, -0x9d,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0xa2,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xa4,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0xa4,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa8,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0xa7,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0xaa,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0xaa,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00, -0xa8,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xad,0x00,0x00,0x00,0xa5,0x00,0x00,0x00, -0xac,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xaf,0x00,0x00,0x00,0xad,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb0,0x00,0x00,0x00, -0xaf,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xb2,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb2,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xea,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0xd1,0x00,0x00,0x00, -0xb3,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0xc3,0x00,0x00,0x00,0xea,0x02,0x00,0x00,0xc1,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xb4,0x00,0x00,0x00,0xb3,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xc3,0x00,0x00,0x00, -0xb3,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xb3,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00, -0xce,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0xea,0x02,0x00,0x00, -0x3e,0x00,0x03,0x00,0xce,0x00,0x00,0x00,0xcc,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd1,0x00,0x00,0x00, -0xea,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xb2,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb4,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xd4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xd4,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x03,0x03,0x00,0x00,0xb0,0x00,0x00,0x00,0xb4,0x00,0x00,0x00, -0xb6,0x01,0x00,0x00,0xd7,0x00,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xff,0x02,0x00,0x00,0x9e,0x00,0x00,0x00, -0xb4,0x00,0x00,0x00,0xb3,0x01,0x00,0x00,0xd7,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xeb,0x02,0x00,0x00, -0x84,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0x61,0x02,0x00,0x00, -0xd7,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0xdb,0x00,0x00,0x00,0xeb,0x02,0x00,0x00,0x8e,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xd6,0x00,0x00,0x00,0xd7,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xdb,0x00,0x00,0x00, -0xd5,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xd5,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xdd,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xfb,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0xd5,0x00,0x00,0x00,0x6a,0x01,0x00,0x00,0xde,0x00,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xe3,0x00,0x00,0x00, -0xfb,0x02,0x00,0x00,0x37,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xdf,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xe3,0x00,0x00,0x00,0xde,0x00,0x00,0x00, -0xdf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe8,0x00,0x00,0x00, -0x73,0x00,0x00,0x00,0xfb,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,0xe8,0x00,0x00,0x00, -0x99,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xec,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xed,0x00,0x00,0x00, -0xff,0x02,0x00,0x00,0xec,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xef,0x00,0x00,0x00,0xed,0x00,0x00,0x00, -0x6e,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xf5,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0xf4,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf7,0x00,0x00,0x00, -0x6e,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,0xf5,0x00,0x00,0x00, -0xf7,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xfc,0x00,0x00,0x00,0xef,0x00,0x00,0x00,0xfb,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xff,0x00,0x00,0x00, -0xef,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x03,0x01,0x00,0x00,0xff,0x00,0x00,0x00, -0x02,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x05,0x01,0x00,0x00,0x03,0x01,0x00,0x00,0x04,0x01,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x08,0x01,0x00,0x00, -0xff,0x00,0x00,0x00,0x07,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x09,0x01,0x00,0x00,0x08,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x0a,0x01,0x00,0x00,0x05,0x01,0x00,0x00,0x09,0x01,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0e,0x01,0x00,0x00, -0xff,0x00,0x00,0x00,0x0d,0x01,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x11,0x01,0x00,0x00,0xff,0x00,0x00,0x00, -0x02,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x12,0x01,0x00,0x00,0x11,0x01,0x00,0x00,0x07,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x13,0x01,0x00,0x00, -0x12,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x41,0x00,0x08,0x00, -0x23,0x01,0x00,0x00,0x24,0x01,0x00,0x00,0x20,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0xd0,0x00,0x00,0x00, -0x0a,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x17,0x01,0x00,0x00, -0x25,0x01,0x00,0x00,0x24,0x01,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x26,0x01,0x00,0x00,0x25,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x29,0x01,0x00,0x00, -0x0a,0x01,0x00,0x00,0x39,0x00,0x00,0x00,0x41,0x00,0x08,0x00, -0x23,0x01,0x00,0x00,0x2a,0x01,0x00,0x00,0x20,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0xd0,0x00,0x00,0x00, -0x29,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x17,0x01,0x00,0x00, -0x2b,0x01,0x00,0x00,0x2a,0x01,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x2c,0x01,0x00,0x00,0x2b,0x01,0x00,0x00, -0x50,0x00,0x05,0x00,0x14,0x01,0x00,0x00,0x2d,0x01,0x00,0x00, -0x26,0x01,0x00,0x00,0x2c,0x01,0x00,0x00,0x41,0x00,0x08,0x00, -0x23,0x01,0x00,0x00,0x31,0x01,0x00,0x00,0x20,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x0e,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x17,0x01,0x00,0x00, -0x32,0x01,0x00,0x00,0x31,0x01,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x33,0x01,0x00,0x00,0x32,0x01,0x00,0x00, -0x41,0x00,0x07,0x00,0x38,0x01,0x00,0x00,0x39,0x01,0x00,0x00, -0x20,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0xfc,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x1b,0x01,0x00,0x00, -0x3a,0x01,0x00,0x00,0x39,0x01,0x00,0x00,0x73,0x00,0x04,0x00, -0x34,0x01,0x00,0x00,0x3b,0x01,0x00,0x00,0x3a,0x01,0x00,0x00, -0x51,0x00,0x05,0x00,0xc4,0x00,0x00,0x00,0x3e,0x01,0x00,0x00, -0x3b,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xc7,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x41,0x01,0x00,0x00,0x33,0x01,0x00,0x00, -0x40,0x01,0x00,0x00,0x70,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0x42,0x01,0x00,0x00,0x41,0x01,0x00,0x00,0x85,0x00,0x05,0x00, -0xc4,0x00,0x00,0x00,0x43,0x01,0x00,0x00,0x3e,0x01,0x00,0x00, -0x42,0x01,0x00,0x00,0x50,0x00,0x05,0x00,0x14,0x01,0x00,0x00, -0x46,0x01,0x00,0x00,0x13,0x01,0x00,0x00,0x13,0x01,0x00,0x00, -0xc2,0x00,0x05,0x00,0x14,0x01,0x00,0x00,0x47,0x01,0x00,0x00, -0x2d,0x01,0x00,0x00,0x46,0x01,0x00,0x00,0xc7,0x00,0x05,0x00, -0x14,0x01,0x00,0x00,0x4a,0x01,0x00,0x00,0x47,0x01,0x00,0x00, -0x3e,0x03,0x00,0x00,0x70,0x00,0x04,0x00,0x34,0x01,0x00,0x00, -0x4b,0x01,0x00,0x00,0x4a,0x01,0x00,0x00,0x8e,0x00,0x05,0x00, -0x34,0x01,0x00,0x00,0x4c,0x01,0x00,0x00,0x4b,0x01,0x00,0x00, -0x43,0x01,0x00,0x00,0x51,0x00,0x05,0x00,0xc4,0x00,0x00,0x00, -0x4e,0x01,0x00,0x00,0x3b,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x50,0x01,0x00,0x00, -0x33,0x01,0x00,0x00,0xa9,0x00,0x00,0x00,0x70,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0x51,0x01,0x00,0x00,0x50,0x01,0x00,0x00, -0x85,0x00,0x05,0x00,0xc4,0x00,0x00,0x00,0x52,0x01,0x00,0x00, -0x4e,0x01,0x00,0x00,0x51,0x01,0x00,0x00,0x50,0x00,0x05,0x00, -0x34,0x01,0x00,0x00,0x53,0x01,0x00,0x00,0x52,0x01,0x00,0x00, -0x52,0x01,0x00,0x00,0x83,0x00,0x05,0x00,0x34,0x01,0x00,0x00, -0x54,0x01,0x00,0x00,0x4c,0x01,0x00,0x00,0x53,0x01,0x00,0x00, -0x51,0x00,0x05,0x00,0xc4,0x00,0x00,0x00,0x5c,0x01,0x00,0x00, -0x54,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x5d,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,0x59,0x01,0x00,0x00, -0xf8,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0x5e,0x01,0x00,0x00, -0x5c,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x60,0x01,0x00,0x00,0xf8,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x51,0x00,0x05,0x00,0xc4,0x00,0x00,0x00,0x62,0x01,0x00,0x00, -0x54,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x5d,0x01,0x00,0x00,0x63,0x01,0x00,0x00,0x59,0x01,0x00,0x00, -0x60,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x63,0x01,0x00,0x00, -0x62,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x6a,0x01,0x00,0x00,0xfb,0x02,0x00,0x00,0x68,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xdf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x6c,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x6c,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xfc,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0xdf,0x00,0x00,0x00,0xaf,0x01,0x00,0x00,0x6d,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x72,0x01,0x00,0x00, -0xfc,0x02,0x00,0x00,0xa7,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x6e,0x01,0x00,0x00,0x6d,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x72,0x01,0x00,0x00,0x6d,0x01,0x00,0x00, -0x6e,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x6d,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x77,0x01,0x00,0x00, -0x7e,0x00,0x00,0x00,0xfc,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x7a,0x01,0x00,0x00,0x77,0x01,0x00,0x00, -0xab,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x7b,0x01,0x00,0x00,0x7a,0x01,0x00,0x00,0x77,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7c,0x01,0x00,0x00, -0x03,0x03,0x00,0x00,0x7b,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x7e,0x01,0x00,0x00,0x7c,0x01,0x00,0x00, -0x79,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x84,0x01,0x00,0x00,0x77,0x01,0x00,0x00,0x83,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x86,0x01,0x00,0x00, -0x79,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x87,0x01,0x00,0x00,0x84,0x01,0x00,0x00, -0x86,0x01,0x00,0x00,0x41,0x00,0x07,0x00,0x95,0x01,0x00,0x00, -0x96,0x01,0x00,0x00,0x93,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0x7e,0x01,0x00,0x00,0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0x97,0x01,0x00,0x00,0x96,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x5d,0x01,0x00,0x00,0x98,0x01,0x00,0x00, -0x8c,0x01,0x00,0x00,0x87,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0x98,0x01,0x00,0x00,0x97,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9a,0x01,0x00,0x00,0x87,0x01,0x00,0x00, -0x39,0x00,0x00,0x00,0x41,0x00,0x07,0x00,0x95,0x01,0x00,0x00, -0x9c,0x01,0x00,0x00,0x93,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0x7e,0x01,0x00,0x00,0x39,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0x9d,0x01,0x00,0x00,0x9c,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x5d,0x01,0x00,0x00,0x9e,0x01,0x00,0x00, -0x8c,0x01,0x00,0x00,0x9a,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0x9e,0x01,0x00,0x00,0x9d,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa0,0x01,0x00,0x00,0x87,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x41,0x00,0x07,0x00,0x95,0x01,0x00,0x00, -0xa2,0x01,0x00,0x00,0x93,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0x7e,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0xa3,0x01,0x00,0x00,0xa2,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x5d,0x01,0x00,0x00,0xa4,0x01,0x00,0x00, -0x8c,0x01,0x00,0x00,0xa0,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0xa4,0x01,0x00,0x00,0xa3,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa6,0x01,0x00,0x00,0x87,0x01,0x00,0x00, -0x48,0x01,0x00,0x00,0x41,0x00,0x07,0x00,0x95,0x01,0x00,0x00, -0xa8,0x01,0x00,0x00,0x93,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0x7e,0x01,0x00,0x00,0x48,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0xa9,0x01,0x00,0x00,0xa8,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x5d,0x01,0x00,0x00,0xaa,0x01,0x00,0x00, -0x8c,0x01,0x00,0x00,0xa6,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0xaa,0x01,0x00,0x00,0xa9,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xaf,0x01,0x00,0x00,0xfc,0x02,0x00,0x00, -0xad,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x6c,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x6e,0x01,0x00,0x00,0xe0,0x00,0x04,0x00, -0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xb0,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb3,0x01,0x00,0x00, -0xff,0x02,0x00,0x00,0xb1,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xb6,0x01,0x00,0x00,0x03,0x03,0x00,0x00, -0xb4,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xb8,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xb8,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x05,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0x6e,0x01,0x00,0x00,0x5f,0x02,0x00,0x00,0xbb,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xbe,0x01,0x00,0x00, -0x05,0x03,0x00,0x00,0x6c,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xba,0x01,0x00,0x00,0xbb,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xbe,0x01,0x00,0x00,0xb9,0x01,0x00,0x00, -0xba,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xb9,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xc0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xc0,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x09,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0xb9,0x01,0x00,0x00, -0xeb,0x01,0x00,0x00,0xc3,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0xc6,0x01,0x00,0x00,0x09,0x03,0x00,0x00, -0x60,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xc2,0x01,0x00,0x00, -0xc3,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xc6,0x01,0x00,0x00,0xc1,0x01,0x00,0x00,0xc2,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xc1,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xc8,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xc8,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x1b,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0xc1,0x01,0x00,0x00,0xe9,0x01,0x00,0x00, -0xc9,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0xce,0x01,0x00,0x00,0x1b,0x03,0x00,0x00,0x62,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xca,0x01,0x00,0x00,0xc9,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xce,0x01,0x00,0x00, -0xc9,0x01,0x00,0x00,0xca,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xc9,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd4,0x01,0x00,0x00,0x09,0x03,0x00,0x00,0x62,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd6,0x01,0x00,0x00, -0xd4,0x01,0x00,0x00,0x1b,0x03,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xd8,0x01,0x00,0x00,0x55,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xda,0x01,0x00,0x00,0x09,0x03,0x00,0x00,0x61,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdb,0x01,0x00,0x00, -0xd8,0x01,0x00,0x00,0xda,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xdd,0x01,0x00,0x00,0x64,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xde,0x01,0x00,0x00,0xdb,0x01,0x00,0x00,0xdd,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe0,0x01,0x00,0x00, -0xde,0x01,0x00,0x00,0x1b,0x03,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xe2,0x01,0x00,0x00,0xe0,0x01,0x00,0x00, -0xe1,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xe4,0x01,0x00,0x00,0xe2,0x01,0x00,0x00,0x05,0x03,0x00,0x00, -0x41,0x00,0x05,0x00,0x5d,0x01,0x00,0x00,0xe5,0x01,0x00,0x00, -0x59,0x01,0x00,0x00,0xe4,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0xe6,0x01,0x00,0x00,0xe5,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,0xe7,0x01,0x00,0x00, -0xd2,0x01,0x00,0x00,0xd6,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0xe7,0x01,0x00,0x00,0xe6,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xe9,0x01,0x00,0x00,0x1b,0x03,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xc8,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xca,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xc3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xc3,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xeb,0x01,0x00,0x00, -0x09,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xc0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xc2,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xed,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xed,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x0a,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0xc2,0x01,0x00,0x00, -0x19,0x02,0x00,0x00,0xf0,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0xf3,0x01,0x00,0x00,0x0a,0x03,0x00,0x00, -0xbf,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xef,0x01,0x00,0x00, -0xf0,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xf3,0x01,0x00,0x00,0xee,0x01,0x00,0x00,0xef,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xee,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xf5,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xf5,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x18,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0xee,0x01,0x00,0x00,0x17,0x02,0x00,0x00, -0xf6,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0xfb,0x01,0x00,0x00,0x18,0x03,0x00,0x00,0xbc,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xf7,0x01,0x00,0x00,0xf6,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xfb,0x01,0x00,0x00, -0xf6,0x01,0x00,0x00,0xf7,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xf6,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x01,0x02,0x00,0x00,0x0a,0x03,0x00,0x00,0xbc,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x03,0x02,0x00,0x00, -0x01,0x02,0x00,0x00,0x18,0x03,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x05,0x02,0x00,0x00,0x59,0x00,0x00,0x00, -0xb9,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x08,0x02,0x00,0x00,0x0a,0x03,0x00,0x00,0x07,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x09,0x02,0x00,0x00, -0x05,0x02,0x00,0x00,0x08,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x0b,0x02,0x00,0x00,0x68,0x00,0x00,0x00, -0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x0c,0x02,0x00,0x00,0x09,0x02,0x00,0x00,0x0b,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0e,0x02,0x00,0x00, -0x0c,0x02,0x00,0x00,0x18,0x03,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x10,0x02,0x00,0x00,0x0e,0x02,0x00,0x00, -0x0f,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x12,0x02,0x00,0x00,0x10,0x02,0x00,0x00,0x05,0x03,0x00,0x00, -0x41,0x00,0x05,0x00,0x5d,0x01,0x00,0x00,0x13,0x02,0x00,0x00, -0x8c,0x01,0x00,0x00,0x12,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0x14,0x02,0x00,0x00,0x13,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,0x15,0x02,0x00,0x00, -0xff,0x01,0x00,0x00,0x03,0x02,0x00,0x00,0x3e,0x00,0x03,0x00, -0x15,0x02,0x00,0x00,0x14,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x17,0x02,0x00,0x00,0x18,0x03,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xf5,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xf7,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xf0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xf0,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x19,0x02,0x00,0x00, -0x0a,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xed,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xef,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0x1b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x1b,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x0b,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0xef,0x01,0x00,0x00, -0x5d,0x02,0x00,0x00,0x1e,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0x21,0x02,0x00,0x00,0x0b,0x03,0x00,0x00, -0xbf,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x1d,0x02,0x00,0x00, -0x1e,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x21,0x02,0x00,0x00,0x1c,0x02,0x00,0x00,0x1d,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x1c,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x23,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x23,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x0f,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0x1c,0x02,0x00,0x00,0x5b,0x02,0x00,0x00, -0x26,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0x29,0x02,0x00,0x00,0x0f,0x03,0x00,0x00,0x60,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x25,0x02,0x00,0x00,0x26,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x29,0x02,0x00,0x00, -0x24,0x02,0x00,0x00,0x25,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x24,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x2b,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x2b,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x11,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0x24,0x02,0x00,0x00,0x59,0x02,0x00,0x00,0x2e,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x31,0x02,0x00,0x00, -0x11,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x2d,0x02,0x00,0x00,0x2e,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x31,0x02,0x00,0x00,0x2c,0x02,0x00,0x00, -0x2d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x2c,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x33,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x33,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x13,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0x2c,0x02,0x00,0x00, -0x57,0x02,0x00,0x00,0x34,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0x39,0x02,0x00,0x00,0x13,0x03,0x00,0x00, -0x62,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x35,0x02,0x00,0x00, -0x34,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x39,0x02,0x00,0x00,0x34,0x02,0x00,0x00,0x35,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x34,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3b,0x02,0x00,0x00,0x0b,0x03,0x00,0x00, -0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x3d,0x02,0x00,0x00,0x3b,0x02,0x00,0x00,0x11,0x03,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3f,0x02,0x00,0x00, -0x3d,0x02,0x00,0x00,0x3e,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x41,0x02,0x00,0x00,0x0f,0x03,0x00,0x00, -0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x42,0x02,0x00,0x00,0x3f,0x02,0x00,0x00,0x41,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x44,0x02,0x00,0x00, -0x42,0x02,0x00,0x00,0x13,0x03,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x48,0x02,0x00,0x00,0x41,0x02,0x00,0x00, -0x13,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00, -0x49,0x02,0x00,0x00,0xd2,0x01,0x00,0x00,0x48,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x4a,0x02,0x00,0x00, -0x49,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00, -0x4f,0x02,0x00,0x00,0xff,0x01,0x00,0x00,0x3d,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x50,0x02,0x00,0x00, -0x4f,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00, -0x52,0x02,0x00,0x00,0xca,0x00,0x00,0x00,0x44,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x53,0x02,0x00,0x00, -0x52,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,0xc4,0x00,0x00,0x00, -0x54,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x4a,0x02,0x00,0x00,0x50,0x02,0x00,0x00,0x53,0x02,0x00,0x00, -0x3e,0x00,0x03,0x00,0x52,0x02,0x00,0x00,0x54,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x57,0x02,0x00,0x00, -0x13,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x33,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x35,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x2e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x2e,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x59,0x02,0x00,0x00,0x11,0x03,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x2b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x2d,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x26,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x26,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x5b,0x02,0x00,0x00,0x0f,0x03,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x23,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x25,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x1e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x1e,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5d,0x02,0x00,0x00, -0x0b,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x1b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x1d,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0xbb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xbb,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x5f,0x02,0x00,0x00,0x05,0x03,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xb8,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xba,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0xb0,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xd7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd7,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x61,0x02,0x00,0x00, -0xeb,0x02,0x00,0x00,0x6c,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xd4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd6,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x66,0x02,0x00,0x00, -0x55,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x67,0x02,0x00,0x00,0x96,0x00,0x00,0x00, -0x66,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x6c,0x02,0x00,0x00,0x59,0x00,0x00,0x00,0xb9,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6d,0x02,0x00,0x00, -0xa8,0x00,0x00,0x00,0x6c,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x72,0x02,0x00,0x00,0x12,0x00,0x00,0x00, -0x71,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x73,0x02,0x00,0x00,0x72,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x74,0x02,0x00,0x00,0x0f,0x00,0x00,0x00, -0x73,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x78,0x02,0x00,0x00,0x47,0x00,0x00,0x00,0x73,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x7a,0x02,0x00,0x00, -0x79,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x7b,0x02,0x00,0x00,0x7a,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7c,0x02,0x00,0x00, -0x78,0x02,0x00,0x00,0x7b,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x7d,0x02,0x00,0x00,0x74,0x02,0x00,0x00, -0x7c,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x7f,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x7f,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xec,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0xd6,0x00,0x00,0x00,0xe5,0x02,0x00,0x00,0x82,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x85,0x02,0x00,0x00, -0xec,0x02,0x00,0x00,0xbf,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x81,0x02,0x00,0x00,0x82,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x85,0x02,0x00,0x00,0x80,0x02,0x00,0x00, -0x81,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x80,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x87,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x87,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xed,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0x80,0x02,0x00,0x00, -0xe3,0x02,0x00,0x00,0x8a,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0x8d,0x02,0x00,0x00,0xed,0x02,0x00,0x00, -0x60,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x89,0x02,0x00,0x00, -0x8a,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x8d,0x02,0x00,0x00,0x88,0x02,0x00,0x00,0x89,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x88,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x91,0x02,0x00,0x00,0xed,0x02,0x00,0x00, -0x61,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x92,0x02,0x00,0x00,0x67,0x02,0x00,0x00,0x91,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x94,0x02,0x00,0x00, -0x64,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x95,0x02,0x00,0x00,0x92,0x02,0x00,0x00, -0x94,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x99,0x02,0x00,0x00,0xec,0x02,0x00,0x00,0x07,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9a,0x02,0x00,0x00, -0x6d,0x02,0x00,0x00,0x99,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9c,0x02,0x00,0x00,0x68,0x00,0x00,0x00, -0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9d,0x02,0x00,0x00,0x9a,0x02,0x00,0x00,0x9c,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x9f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x9f,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xef,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0x88,0x02,0x00,0x00, -0xe1,0x02,0x00,0x00,0xa2,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0xa5,0x02,0x00,0x00,0xef,0x02,0x00,0x00, -0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xa1,0x02,0x00,0x00, -0xa2,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xa5,0x02,0x00,0x00,0xa0,0x02,0x00,0x00,0xa1,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xa0,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0xa7,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xa7,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xf1,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0xa0,0x02,0x00,0x00,0xdf,0x02,0x00,0x00, -0xaa,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0xad,0x02,0x00,0x00,0xf1,0x02,0x00,0x00,0x62,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xa9,0x02,0x00,0x00,0xaa,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xad,0x02,0x00,0x00, -0xa8,0x02,0x00,0x00,0xa9,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xa8,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xb0,0x02,0x00,0x00,0x95,0x02,0x00,0x00,0xf1,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xb3,0x02,0x00,0x00, -0xb0,0x02,0x00,0x00,0x36,0x00,0x00,0x00,0xf7,0x00,0x03,0x00, -0xb5,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xb3,0x02,0x00,0x00,0xb4,0x02,0x00,0x00,0xb5,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xb4,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xb8,0x02,0x00,0x00,0x9d,0x02,0x00,0x00, -0xef,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0xb9,0x02,0x00,0x00,0x12,0x00,0x00,0x00,0xd0,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xba,0x02,0x00,0x00, -0xb9,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0xbb,0x02,0x00,0x00,0xb8,0x02,0x00,0x00,0xba,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0xb5,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xb5,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0xc2,0x00,0x00,0x00, -0xbc,0x02,0x00,0x00,0xb3,0x02,0x00,0x00,0xa8,0x02,0x00,0x00, -0xbb,0x02,0x00,0x00,0xb4,0x02,0x00,0x00,0xf7,0x00,0x03,0x00, -0xbe,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xbc,0x02,0x00,0x00,0xbd,0x02,0x00,0x00,0xbe,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xbd,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xc6,0x02,0x00,0x00,0x9d,0x02,0x00,0x00, -0xef,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0xc8,0x02,0x00,0x00,0x12,0x00,0x00,0x00,0xc7,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xc9,0x02,0x00,0x00, -0xc8,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xca,0x02,0x00,0x00,0xc6,0x02,0x00,0x00,0xc9,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xcb,0x02,0x00,0x00, -0x7d,0x02,0x00,0x00,0xca,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xcd,0x02,0x00,0x00,0xcb,0x02,0x00,0x00, -0x95,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xcf,0x02,0x00,0x00,0xcd,0x02,0x00,0x00,0xf1,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd1,0x02,0x00,0x00, -0xec,0x02,0x00,0x00,0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xd3,0x02,0x00,0x00,0xd1,0x02,0x00,0x00, -0xef,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd5,0x02,0x00,0x00,0xd3,0x02,0x00,0x00,0xd4,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd7,0x02,0x00,0x00, -0xed,0x02,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xd8,0x02,0x00,0x00,0xd5,0x02,0x00,0x00, -0xd7,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xda,0x02,0x00,0x00,0xd8,0x02,0x00,0x00,0xf1,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,0xdb,0x02,0x00,0x00, -0xca,0x00,0x00,0x00,0xda,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0xdc,0x02,0x00,0x00,0xdb,0x02,0x00,0x00, -0x41,0x00,0x06,0x00,0x95,0x01,0x00,0x00,0xdd,0x02,0x00,0x00, -0xc2,0x02,0x00,0x00,0x34,0x00,0x00,0x00,0xcf,0x02,0x00,0x00, -0x3e,0x00,0x03,0x00,0xdd,0x02,0x00,0x00,0xdc,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0xbe,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xbe,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xaa,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xaa,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xdf,0x02,0x00,0x00,0xf1,0x02,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xa7,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xa9,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0xa2,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xa2,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe1,0x02,0x00,0x00, -0xef,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x9f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xa1,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x8a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x8a,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xe3,0x02,0x00,0x00,0xed,0x02,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x87,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x89,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x82,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x82,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xe5,0x02,0x00,0x00,0xec,0x02,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x7f,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x81,0x02,0x00,0x00,0xfd,0x00,0x01,0x00, -0x38,0x00,0x01,0x00, -}; -const uint64_t matmul_q2_k_f32_aligned_fp32_len = 11068; - -unsigned char matmul_q2_k_f32_fp32_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0x48,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00, -0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00, -0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64, -0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00, -0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0f,0x00,0x0f,0x00, -0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e, -0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x3d,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x1f,0x01,0x00,0x00, -0x58,0x01,0x00,0x00,0x89,0x01,0x00,0x00,0x94,0x01,0x00,0x00, -0x7a,0x02,0x00,0x00,0xc3,0x02,0x00,0x00,0x10,0x00,0x06,0x00, -0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x34,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x10,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x37,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x3d,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x4c,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x4f,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x53,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x60,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x62,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x6c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xa6,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xb8,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xbb,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x17,0x01,0x00,0x00,0x06,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x18,0x01,0x00,0x00, -0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1b,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1b,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1b,0x01,0x00,0x00,0x02,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x1c,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00, -0x48,0x00,0x04,0x00,0x1d,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1d,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0x1d,0x01,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x1f,0x01,0x00,0x00,0x22,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x1f,0x01,0x00,0x00, -0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x63,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x64,0x01,0x00,0x00,0x0b,0x00,0x00,0x00, -0x19,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x91,0x01,0x00,0x00, -0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0x92,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x92,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x92,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x94,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x94,0x01,0x00,0x00,0x21,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x7a,0x02,0x00,0x00, -0x0b,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xc0,0x02,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x04,0x00,0xc1,0x02,0x00,0x00,0x00,0x00,0x00,0x00, -0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0xc1,0x02,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0xc1,0x02,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xc3,0x02,0x00,0x00,0x22,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xc3,0x02,0x00,0x00, -0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00, -0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00, -0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x1e,0x00,0x10,0x00,0x10,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x11,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x11,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x21,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x2d,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x34,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x3d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x4c,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x4f,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x58,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x61,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x61,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x67,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x61,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x6d,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x72,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x77,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x7c,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x80,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x85,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x90,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x96,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0xa1,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0xa8,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xb7,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xb8,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x4f,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbc,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0xbb,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbd,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbe,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0xbd,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbf,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0xbe,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc0,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0xbb,0x00,0x00,0x00, -0x14,0x00,0x02,0x00,0xc1,0x00,0x00,0x00,0x16,0x00,0x03,0x00, -0xc3,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xc4,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xc5,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x1c,0x00,0x04,0x00, -0xc7,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0xc6,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0xc8,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0xc7,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0xc3,0x00,0x00,0x00, -0xcb,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0xcc,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xc3,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0xcf,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xf3,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xfa,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x40,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x03,0x01,0x00,0x00, -0x20,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x06,0x01,0x00,0x00,0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x0c,0x01,0x00,0x00,0x08,0x00,0x00,0x00, -0x17,0x00,0x04,0x00,0x13,0x01,0x00,0x00,0x06,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x16,0x01,0x00,0x00, -0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1c,0x00,0x04,0x00, -0x17,0x01,0x00,0x00,0x16,0x01,0x00,0x00,0x06,0x01,0x00,0x00, -0x1c,0x00,0x04,0x00,0x18,0x01,0x00,0x00,0x16,0x01,0x00,0x00, -0x01,0x01,0x00,0x00,0x16,0x00,0x03,0x00,0x19,0x01,0x00,0x00, -0x10,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x1a,0x01,0x00,0x00, -0x19,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x1e,0x00,0x05,0x00, -0x1b,0x01,0x00,0x00,0x17,0x01,0x00,0x00,0x18,0x01,0x00,0x00, -0x1a,0x01,0x00,0x00,0x1d,0x00,0x03,0x00,0x1c,0x01,0x00,0x00, -0x1b,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,0x1d,0x01,0x00,0x00, -0x1c,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x1e,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x1d,0x01,0x00,0x00,0x3b,0x00,0x04,0x00, -0x1e,0x01,0x00,0x00,0x1f,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x22,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x16,0x01,0x00,0x00,0x17,0x00,0x04,0x00,0x33,0x01,0x00,0x00, -0xc3,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x37,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x1a,0x01,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x3f,0x01,0x00,0x00, -0x0f,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x47,0x01,0x00,0x00,0x03,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x54,0x01,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x55,0x01,0x00,0x00,0x84,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x54,0x01,0x00,0x00,0x1c,0x00,0x04,0x00, -0x56,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,0x55,0x01,0x00,0x00, -0x20,0x00,0x04,0x00,0x57,0x01,0x00,0x00,0x04,0x00,0x00,0x00, -0x56,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x57,0x01,0x00,0x00, -0x58,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x5c,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0xc3,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x63,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00,0x09,0x00,0x00,0x00, -0x64,0x01,0x00,0x00,0x63,0x01,0x00,0x00,0x39,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x65,0x01,0x00,0x00,0x51,0x00,0x00,0x00,0x64,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x66,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x65,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x67,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x66,0x01,0x00,0x00, -0x6c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x85,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x86,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0xa6,0x00,0x00,0x00, -0x85,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,0x87,0x01,0x00,0x00, -0xc3,0x00,0x00,0x00,0x86,0x01,0x00,0x00,0x20,0x00,0x04,0x00, -0x88,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x87,0x01,0x00,0x00, -0x3b,0x00,0x04,0x00,0x88,0x01,0x00,0x00,0x89,0x01,0x00,0x00, -0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x8d,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x91,0x01,0x00,0x00, -0xc3,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x92,0x01,0x00,0x00, -0x91,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x93,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x92,0x01,0x00,0x00,0x3b,0x00,0x04,0x00, -0x93,0x01,0x00,0x00,0x94,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x9f,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0xc3,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xa7,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xac,0x01,0x00,0x00,0x51,0x00,0x00,0x00,0x64,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xad,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0xac,0x01,0x00,0x00, -0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xae,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0xad,0x01,0x00,0x00, -0x6c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xb1,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xb2,0x01,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xb5,0x01,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xd0,0x01,0x00,0x00,0x84,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x1c,0x00,0x04,0x00, -0xd1,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,0xd0,0x01,0x00,0x00, -0x20,0x00,0x04,0x00,0xd2,0x01,0x00,0x00,0x07,0x00,0x00,0x00, -0xd1,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xe2,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xfd,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0xbe,0x00,0x00,0x00, -0xbb,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xfe,0x01,0x00,0x00, -0xc3,0x00,0x00,0x00,0xfd,0x01,0x00,0x00,0x20,0x00,0x04,0x00, -0xff,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0xfe,0x01,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x08,0x02,0x00,0x00, -0x86,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0xbe,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x10,0x02,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x3f,0x02,0x00,0x00, -0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x72,0x02,0x00,0x00, -0x0d,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x7a,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x1d,0x00,0x03,0x00, -0xc0,0x02,0x00,0x00,0xc3,0x00,0x00,0x00,0x1e,0x00,0x03,0x00, -0xc1,0x02,0x00,0x00,0xc0,0x02,0x00,0x00,0x20,0x00,0x04,0x00, -0xc2,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0xc1,0x02,0x00,0x00, -0x3b,0x00,0x04,0x00,0xc2,0x02,0x00,0x00,0xc3,0x02,0x00,0x00, -0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0xc8,0x02,0x00,0x00,0x05,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xd5,0x02,0x00,0x00,0x84,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x2c,0x00,0x05,0x00, -0x13,0x01,0x00,0x00,0x47,0x03,0x00,0x00,0x47,0x01,0x00,0x00, -0x47,0x01,0x00,0x00,0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0xc8,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0xd2,0x01,0x00,0x00,0xd3,0x01,0x00,0x00, -0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xff,0x01,0x00,0x00, -0x00,0x02,0x00,0x00,0x07,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x17,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x17,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x1e,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x17,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x27,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x29,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x1e,0x00,0x00,0x00, -0x29,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x2e,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x2d,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x2f,0x00,0x00,0x00, -0x2e,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x30,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x2f,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x30,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x34,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x36,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x36,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x3a,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00, -0x3a,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x3b,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x47,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x3b,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x49,0x00,0x00,0x00, -0x3d,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x49,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x4d,0x00,0x00,0x00, -0x4c,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x4d,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x50,0x00,0x00,0x00, -0x54,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x59,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x58,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5d,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x5d,0x00,0x00,0x00, -0x63,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x68,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,0x67,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6e,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x72,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x78,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x77,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7d,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x80,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x82,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x47,0x00,0x00,0x00, -0x82,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x85,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x87,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x89,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8c,0x00,0x00,0x00, -0x89,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x0c,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x26,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x8c,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x91,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x90,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x91,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x93,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0x42,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x97,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x96,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x98,0x00,0x00,0x00, -0x97,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x99,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0x98,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9a,0x00,0x00,0x00, -0x93,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0x9a,0x00,0x00,0x00, -0x83,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9d,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0xa2,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0xa2,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0x4a,0x00,0x00,0x00, -0xa6,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0xa9,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0xa8,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xaa,0x00,0x00,0x00, -0xa9,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xab,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0xaa,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00, -0xa4,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0xac,0x00,0x00,0x00, -0x83,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xaf,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xb1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xb1,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xeb,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0x05,0x00,0x00,0x00, -0xd0,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,0xeb,0x02,0x00,0x00, -0xc0,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xb3,0x00,0x00,0x00, -0xb2,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xc2,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0xb3,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0xcc,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,0xc9,0x00,0x00,0x00, -0xeb,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0xcd,0x00,0x00,0x00, -0xcb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd0,0x00,0x00,0x00,0xeb,0x02,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xb1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xb3,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd3,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xd3,0x00,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x04,0x03,0x00,0x00,0xaf,0x00,0x00,0x00, -0xb3,0x00,0x00,0x00,0xb7,0x01,0x00,0x00,0xd6,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x00,0x03,0x00,0x00, -0x9d,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0xb4,0x01,0x00,0x00, -0xd6,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xec,0x02,0x00,0x00,0x83,0x00,0x00,0x00,0xb3,0x00,0x00,0x00, -0x62,0x02,0x00,0x00,0xd6,0x00,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0xda,0x00,0x00,0x00,0xec,0x02,0x00,0x00, -0x8d,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xd5,0x00,0x00,0x00, -0xd6,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xda,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,0xd5,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xd4,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xdc,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdc,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xfc,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,0x69,0x01,0x00,0x00, -0xdd,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0xe2,0x00,0x00,0x00,0xfc,0x02,0x00,0x00,0x37,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xde,0x00,0x00,0x00,0xdd,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xe2,0x00,0x00,0x00, -0xdd,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xdd,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xe7,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0xfc,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xea,0x00,0x00,0x00, -0xe7,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,0xea,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xec,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0xeb,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xee,0x00,0x00,0x00, -0xec,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,0xe7,0x00,0x00,0x00, -0xf3,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xf6,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf7,0x00,0x00,0x00, -0xf4,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0xee,0x00,0x00,0x00, -0xfa,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xfe,0x00,0x00,0x00,0xee,0x00,0x00,0x00,0xfa,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x02,0x01,0x00,0x00, -0xfe,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x04,0x01,0x00,0x00,0x02,0x01,0x00,0x00, -0x03,0x01,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x07,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,0x06,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x08,0x01,0x00,0x00, -0x07,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x09,0x01,0x00,0x00,0x04,0x01,0x00,0x00, -0x08,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x0d,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,0x0c,0x01,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x10,0x01,0x00,0x00, -0xfe,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x11,0x01,0x00,0x00,0x10,0x01,0x00,0x00, -0x06,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x12,0x01,0x00,0x00,0x11,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x41,0x00,0x08,0x00,0x22,0x01,0x00,0x00,0x23,0x01,0x00,0x00, -0x1f,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0xfb,0x00,0x00,0x00, -0xcf,0x00,0x00,0x00,0x09,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0x16,0x01,0x00,0x00,0x24,0x01,0x00,0x00,0x23,0x01,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x25,0x01,0x00,0x00, -0x24,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x28,0x01,0x00,0x00,0x09,0x01,0x00,0x00,0x39,0x00,0x00,0x00, -0x41,0x00,0x08,0x00,0x22,0x01,0x00,0x00,0x29,0x01,0x00,0x00, -0x1f,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0xfb,0x00,0x00,0x00, -0xcf,0x00,0x00,0x00,0x28,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0x16,0x01,0x00,0x00,0x2a,0x01,0x00,0x00,0x29,0x01,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x2b,0x01,0x00,0x00, -0x2a,0x01,0x00,0x00,0x50,0x00,0x05,0x00,0x13,0x01,0x00,0x00, -0x2c,0x01,0x00,0x00,0x25,0x01,0x00,0x00,0x2b,0x01,0x00,0x00, -0x41,0x00,0x08,0x00,0x22,0x01,0x00,0x00,0x30,0x01,0x00,0x00, -0x1f,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0xfb,0x00,0x00,0x00, -0x34,0x00,0x00,0x00,0x0d,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0x16,0x01,0x00,0x00,0x31,0x01,0x00,0x00,0x30,0x01,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x32,0x01,0x00,0x00, -0x31,0x01,0x00,0x00,0x41,0x00,0x07,0x00,0x37,0x01,0x00,0x00, -0x38,0x01,0x00,0x00,0x1f,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0xfb,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x1a,0x01,0x00,0x00,0x39,0x01,0x00,0x00,0x38,0x01,0x00,0x00, -0x73,0x00,0x04,0x00,0x33,0x01,0x00,0x00,0x3a,0x01,0x00,0x00, -0x39,0x01,0x00,0x00,0x51,0x00,0x05,0x00,0xc3,0x00,0x00,0x00, -0x3d,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x40,0x01,0x00,0x00, -0x32,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,0x70,0x00,0x04,0x00, -0xc3,0x00,0x00,0x00,0x41,0x01,0x00,0x00,0x40,0x01,0x00,0x00, -0x85,0x00,0x05,0x00,0xc3,0x00,0x00,0x00,0x42,0x01,0x00,0x00, -0x3d,0x01,0x00,0x00,0x41,0x01,0x00,0x00,0x50,0x00,0x05,0x00, -0x13,0x01,0x00,0x00,0x45,0x01,0x00,0x00,0x12,0x01,0x00,0x00, -0x12,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x13,0x01,0x00,0x00, -0x46,0x01,0x00,0x00,0x2c,0x01,0x00,0x00,0x45,0x01,0x00,0x00, -0xc7,0x00,0x05,0x00,0x13,0x01,0x00,0x00,0x49,0x01,0x00,0x00, -0x46,0x01,0x00,0x00,0x47,0x03,0x00,0x00,0x70,0x00,0x04,0x00, -0x33,0x01,0x00,0x00,0x4a,0x01,0x00,0x00,0x49,0x01,0x00,0x00, -0x8e,0x00,0x05,0x00,0x33,0x01,0x00,0x00,0x4b,0x01,0x00,0x00, -0x4a,0x01,0x00,0x00,0x42,0x01,0x00,0x00,0x51,0x00,0x05,0x00, -0xc3,0x00,0x00,0x00,0x4d,0x01,0x00,0x00,0x3a,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x4f,0x01,0x00,0x00,0x32,0x01,0x00,0x00,0xa8,0x00,0x00,0x00, -0x70,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x50,0x01,0x00,0x00, -0x4f,0x01,0x00,0x00,0x85,0x00,0x05,0x00,0xc3,0x00,0x00,0x00, -0x51,0x01,0x00,0x00,0x4d,0x01,0x00,0x00,0x50,0x01,0x00,0x00, -0x50,0x00,0x05,0x00,0x33,0x01,0x00,0x00,0x52,0x01,0x00,0x00, -0x51,0x01,0x00,0x00,0x51,0x01,0x00,0x00,0x83,0x00,0x05,0x00, -0x33,0x01,0x00,0x00,0x53,0x01,0x00,0x00,0x4b,0x01,0x00,0x00, -0x52,0x01,0x00,0x00,0x51,0x00,0x05,0x00,0xc3,0x00,0x00,0x00, -0x5b,0x01,0x00,0x00,0x53,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x5c,0x01,0x00,0x00,0x5d,0x01,0x00,0x00, -0x58,0x01,0x00,0x00,0xf7,0x00,0x00,0x00,0x3e,0x00,0x03,0x00, -0x5d,0x01,0x00,0x00,0x5b,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x5f,0x01,0x00,0x00,0xf7,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x51,0x00,0x05,0x00,0xc3,0x00,0x00,0x00, -0x61,0x01,0x00,0x00,0x53,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x5c,0x01,0x00,0x00,0x62,0x01,0x00,0x00, -0x58,0x01,0x00,0x00,0x5f,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0x62,0x01,0x00,0x00,0x61,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x69,0x01,0x00,0x00,0xfc,0x02,0x00,0x00, -0x67,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xdc,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x6b,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x6b,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xfd,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0xb0,0x01,0x00,0x00, -0x6e,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0x71,0x01,0x00,0x00,0xfd,0x02,0x00,0x00,0xa6,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x6d,0x01,0x00,0x00,0x6e,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x71,0x01,0x00,0x00, -0x6c,0x01,0x00,0x00,0x6d,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x6c,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x75,0x01,0x00,0x00,0xa7,0x00,0x00,0x00,0x7d,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x77,0x01,0x00,0x00, -0x75,0x01,0x00,0x00,0xfd,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x78,0x01,0x00,0x00,0x12,0x00,0x00,0x00, -0xcf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x79,0x01,0x00,0x00,0x78,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0x7a,0x01,0x00,0x00,0x77,0x01,0x00,0x00, -0x79,0x01,0x00,0x00,0xf7,0x00,0x03,0x00,0x7c,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x7a,0x01,0x00,0x00, -0x7b,0x01,0x00,0x00,0x7c,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x7b,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x7f,0x01,0x00,0x00,0xec,0x02,0x00,0x00,0x78,0x00,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x81,0x01,0x00,0x00, -0x7f,0x01,0x00,0x00,0x8d,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x7c,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x7c,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0xc1,0x00,0x00,0x00,0x82,0x01,0x00,0x00, -0x7a,0x01,0x00,0x00,0x6c,0x01,0x00,0x00,0x81,0x01,0x00,0x00, -0x7b,0x01,0x00,0x00,0xf7,0x00,0x03,0x00,0x84,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x82,0x01,0x00,0x00, -0x83,0x01,0x00,0x00,0xa3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x83,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x8c,0x01,0x00,0x00,0x7d,0x00,0x00,0x00,0xfd,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8e,0x01,0x00,0x00, -0x8c,0x01,0x00,0x00,0x8d,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x90,0x01,0x00,0x00,0x8e,0x01,0x00,0x00, -0x78,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9b,0x01,0x00,0x00,0x8c,0x01,0x00,0x00,0xaa,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9c,0x01,0x00,0x00, -0x04,0x03,0x00,0x00,0x9b,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9e,0x01,0x00,0x00,0x9c,0x01,0x00,0x00, -0x78,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x9f,0x01,0x00,0x00, -0xa0,0x01,0x00,0x00,0x94,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0x9e,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00, -0xa1,0x01,0x00,0x00,0xa0,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x5c,0x01,0x00,0x00,0xa2,0x01,0x00,0x00,0x89,0x01,0x00,0x00, -0x90,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xa2,0x01,0x00,0x00, -0xa1,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x84,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xa3,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa6,0x01,0x00,0x00,0x7d,0x00,0x00,0x00, -0xfd,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa8,0x01,0x00,0x00,0xa6,0x01,0x00,0x00,0xa7,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xaa,0x01,0x00,0x00, -0xa8,0x01,0x00,0x00,0x78,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x5c,0x01,0x00,0x00,0xab,0x01,0x00,0x00,0x89,0x01,0x00,0x00, -0xaa,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xab,0x01,0x00,0x00, -0xcb,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x84,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x84,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0x6e,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x6e,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb0,0x01,0x00,0x00, -0xfd,0x02,0x00,0x00,0xae,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0x6b,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x6d,0x01,0x00,0x00, -0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0xb1,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xb4,0x01,0x00,0x00,0x00,0x03,0x00,0x00,0xb2,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb7,0x01,0x00,0x00, -0x04,0x03,0x00,0x00,0xb5,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xb9,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xb9,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x06,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0x6d,0x01,0x00,0x00,0x60,0x02,0x00,0x00, -0xbc,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0xbf,0x01,0x00,0x00,0x06,0x03,0x00,0x00,0x6c,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xbb,0x01,0x00,0x00,0xbc,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xbf,0x01,0x00,0x00, -0xba,0x01,0x00,0x00,0xbb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xba,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xc1,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xc1,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x0a,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0xba,0x01,0x00,0x00,0xec,0x01,0x00,0x00,0xc4,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xc7,0x01,0x00,0x00, -0x0a,0x03,0x00,0x00,0x60,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xc3,0x01,0x00,0x00,0xc4,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xc7,0x01,0x00,0x00,0xc2,0x01,0x00,0x00, -0xc3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xc2,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xc9,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xc9,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x1c,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0xc2,0x01,0x00,0x00, -0xea,0x01,0x00,0x00,0xca,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0xcf,0x01,0x00,0x00,0x1c,0x03,0x00,0x00, -0x62,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xcb,0x01,0x00,0x00, -0xca,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xcf,0x01,0x00,0x00,0xca,0x01,0x00,0x00,0xcb,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xca,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xd5,0x01,0x00,0x00,0x0a,0x03,0x00,0x00, -0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd7,0x01,0x00,0x00,0xd5,0x01,0x00,0x00,0x1c,0x03,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd9,0x01,0x00,0x00, -0x55,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xdb,0x01,0x00,0x00,0x0a,0x03,0x00,0x00, -0x61,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xdc,0x01,0x00,0x00,0xd9,0x01,0x00,0x00,0xdb,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xde,0x01,0x00,0x00, -0x64,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xdf,0x01,0x00,0x00,0xdc,0x01,0x00,0x00, -0xde,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xe1,0x01,0x00,0x00,0xdf,0x01,0x00,0x00,0x1c,0x03,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe3,0x01,0x00,0x00, -0xe1,0x01,0x00,0x00,0xe2,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xe5,0x01,0x00,0x00,0xe3,0x01,0x00,0x00, -0x06,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x5c,0x01,0x00,0x00, -0xe6,0x01,0x00,0x00,0x58,0x01,0x00,0x00,0xe5,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0xe7,0x01,0x00,0x00, -0xe6,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00, -0xe8,0x01,0x00,0x00,0xd3,0x01,0x00,0x00,0xd7,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0xe8,0x01,0x00,0x00,0xe7,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xea,0x01,0x00,0x00, -0x1c,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xc9,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xcb,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xc4,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xc4,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xec,0x01,0x00,0x00,0x0a,0x03,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xc1,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xc3,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xee,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xee,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x0b,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0xc3,0x01,0x00,0x00,0x1a,0x02,0x00,0x00,0xf1,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xf4,0x01,0x00,0x00, -0x0b,0x03,0x00,0x00,0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xf0,0x01,0x00,0x00,0xf1,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xf4,0x01,0x00,0x00,0xef,0x01,0x00,0x00, -0xf0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xef,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xf6,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xf6,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x19,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0xef,0x01,0x00,0x00, -0x18,0x02,0x00,0x00,0xf7,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0xfc,0x01,0x00,0x00,0x19,0x03,0x00,0x00, -0xbb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xf8,0x01,0x00,0x00, -0xf7,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xfc,0x01,0x00,0x00,0xf7,0x01,0x00,0x00,0xf8,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xf7,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x02,0x02,0x00,0x00,0x0b,0x03,0x00,0x00, -0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x04,0x02,0x00,0x00,0x02,0x02,0x00,0x00,0x19,0x03,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x06,0x02,0x00,0x00, -0x59,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x09,0x02,0x00,0x00,0x0b,0x03,0x00,0x00, -0x08,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x0a,0x02,0x00,0x00,0x06,0x02,0x00,0x00,0x09,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0c,0x02,0x00,0x00, -0x68,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x0d,0x02,0x00,0x00,0x0a,0x02,0x00,0x00, -0x0c,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x0f,0x02,0x00,0x00,0x0d,0x02,0x00,0x00,0x19,0x03,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x11,0x02,0x00,0x00, -0x0f,0x02,0x00,0x00,0x10,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x13,0x02,0x00,0x00,0x11,0x02,0x00,0x00, -0x06,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x5c,0x01,0x00,0x00, -0x14,0x02,0x00,0x00,0x89,0x01,0x00,0x00,0x13,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x15,0x02,0x00,0x00, -0x14,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00, -0x16,0x02,0x00,0x00,0x00,0x02,0x00,0x00,0x04,0x02,0x00,0x00, -0x3e,0x00,0x03,0x00,0x16,0x02,0x00,0x00,0x15,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x18,0x02,0x00,0x00, -0x19,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xf6,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xf8,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xf1,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xf1,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x1a,0x02,0x00,0x00,0x0b,0x03,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xee,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xf0,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x1c,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x1c,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x0c,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0xf0,0x01,0x00,0x00,0x5e,0x02,0x00,0x00,0x1f,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x22,0x02,0x00,0x00, -0x0c,0x03,0x00,0x00,0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x1e,0x02,0x00,0x00,0x1f,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x22,0x02,0x00,0x00,0x1d,0x02,0x00,0x00, -0x1e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x1d,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x24,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x24,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x10,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0x1d,0x02,0x00,0x00, -0x5c,0x02,0x00,0x00,0x27,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0x2a,0x02,0x00,0x00,0x10,0x03,0x00,0x00, -0x60,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x26,0x02,0x00,0x00, -0x27,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x2a,0x02,0x00,0x00,0x25,0x02,0x00,0x00,0x26,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x25,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x2c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x2c,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x12,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0x25,0x02,0x00,0x00,0x5a,0x02,0x00,0x00, -0x2f,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0x32,0x02,0x00,0x00,0x12,0x03,0x00,0x00,0xbb,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x2e,0x02,0x00,0x00,0x2f,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x32,0x02,0x00,0x00, -0x2d,0x02,0x00,0x00,0x2e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x2d,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x34,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x34,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x14,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0x2d,0x02,0x00,0x00,0x58,0x02,0x00,0x00,0x35,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x3a,0x02,0x00,0x00, -0x14,0x03,0x00,0x00,0x62,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x36,0x02,0x00,0x00,0x35,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x3a,0x02,0x00,0x00,0x35,0x02,0x00,0x00, -0x36,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x35,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3c,0x02,0x00,0x00, -0x0c,0x03,0x00,0x00,0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3e,0x02,0x00,0x00,0x3c,0x02,0x00,0x00, -0x12,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x40,0x02,0x00,0x00,0x3e,0x02,0x00,0x00,0x3f,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x42,0x02,0x00,0x00, -0x10,0x03,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x43,0x02,0x00,0x00,0x40,0x02,0x00,0x00, -0x42,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x45,0x02,0x00,0x00,0x43,0x02,0x00,0x00,0x14,0x03,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x49,0x02,0x00,0x00, -0x42,0x02,0x00,0x00,0x14,0x03,0x00,0x00,0x41,0x00,0x05,0x00, -0xcc,0x00,0x00,0x00,0x4a,0x02,0x00,0x00,0xd3,0x01,0x00,0x00, -0x49,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00, -0x4b,0x02,0x00,0x00,0x4a,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0xcc,0x00,0x00,0x00,0x50,0x02,0x00,0x00,0x00,0x02,0x00,0x00, -0x3e,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00, -0x51,0x02,0x00,0x00,0x50,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0xcc,0x00,0x00,0x00,0x53,0x02,0x00,0x00,0xc9,0x00,0x00,0x00, -0x45,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00, -0x54,0x02,0x00,0x00,0x53,0x02,0x00,0x00,0x0c,0x00,0x08,0x00, -0xc3,0x00,0x00,0x00,0x55,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0x4b,0x02,0x00,0x00,0x51,0x02,0x00,0x00, -0x54,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x53,0x02,0x00,0x00, -0x55,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x58,0x02,0x00,0x00,0x14,0x03,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x34,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x36,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x2f,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x2f,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x5a,0x02,0x00,0x00,0x12,0x03,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x2c,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x2e,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x27,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x27,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5c,0x02,0x00,0x00, -0x10,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x24,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x26,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x1f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x1f,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x5e,0x02,0x00,0x00,0x0c,0x03,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x1c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x1e,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xbc,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xbc,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x60,0x02,0x00,0x00,0x06,0x03,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb9,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xbb,0x01,0x00,0x00,0xe0,0x00,0x04,0x00, -0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xb1,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xd6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xd6,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x62,0x02,0x00,0x00,0xec,0x02,0x00,0x00,0x6c,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xd3,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xd5,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x67,0x02,0x00,0x00,0x55,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x68,0x02,0x00,0x00, -0x95,0x00,0x00,0x00,0x67,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x6d,0x02,0x00,0x00,0x59,0x00,0x00,0x00, -0xb8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x6e,0x02,0x00,0x00,0xa7,0x00,0x00,0x00,0x6d,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x73,0x02,0x00,0x00, -0x12,0x00,0x00,0x00,0x72,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x74,0x02,0x00,0x00,0x73,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x75,0x02,0x00,0x00, -0x0f,0x00,0x00,0x00,0x74,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x79,0x02,0x00,0x00,0x47,0x00,0x00,0x00, -0x74,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x7b,0x02,0x00,0x00,0x7a,0x02,0x00,0x00,0x0c,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x7c,0x02,0x00,0x00, -0x7b,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x7d,0x02,0x00,0x00,0x79,0x02,0x00,0x00,0x7c,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7e,0x02,0x00,0x00, -0x75,0x02,0x00,0x00,0x7d,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x80,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x80,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xed,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0xe6,0x02,0x00,0x00, -0x83,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0x86,0x02,0x00,0x00,0xed,0x02,0x00,0x00,0xbe,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x82,0x02,0x00,0x00,0x83,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x86,0x02,0x00,0x00, -0x81,0x02,0x00,0x00,0x82,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x81,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x88,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x88,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xee,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0x81,0x02,0x00,0x00,0xe4,0x02,0x00,0x00,0x8b,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x8e,0x02,0x00,0x00, -0xee,0x02,0x00,0x00,0x60,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x8a,0x02,0x00,0x00,0x8b,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x8e,0x02,0x00,0x00,0x89,0x02,0x00,0x00, -0x8a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x89,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x92,0x02,0x00,0x00, -0xee,0x02,0x00,0x00,0x61,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x93,0x02,0x00,0x00,0x68,0x02,0x00,0x00, -0x92,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x95,0x02,0x00,0x00,0x64,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x96,0x02,0x00,0x00, -0x93,0x02,0x00,0x00,0x95,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9a,0x02,0x00,0x00,0xed,0x02,0x00,0x00, -0x08,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9b,0x02,0x00,0x00,0x6e,0x02,0x00,0x00,0x9a,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9d,0x02,0x00,0x00, -0x68,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9e,0x02,0x00,0x00,0x9b,0x02,0x00,0x00, -0x9d,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xa0,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xa0,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xf0,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0x89,0x02,0x00,0x00,0xe2,0x02,0x00,0x00,0xa3,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xa6,0x02,0x00,0x00, -0xf0,0x02,0x00,0x00,0xbb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xa2,0x02,0x00,0x00,0xa3,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xa6,0x02,0x00,0x00,0xa1,0x02,0x00,0x00, -0xa2,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xa1,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0xa8,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xa8,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xf2,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0xa1,0x02,0x00,0x00, -0xe0,0x02,0x00,0x00,0xab,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0xae,0x02,0x00,0x00,0xf2,0x02,0x00,0x00, -0x62,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xaa,0x02,0x00,0x00, -0xab,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xae,0x02,0x00,0x00,0xa9,0x02,0x00,0x00,0xaa,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xa9,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xb1,0x02,0x00,0x00,0x96,0x02,0x00,0x00, -0xf2,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0xb4,0x02,0x00,0x00,0xb1,0x02,0x00,0x00,0x36,0x00,0x00,0x00, -0xf7,0x00,0x03,0x00,0xb6,0x02,0x00,0x00,0x00,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xb4,0x02,0x00,0x00,0xb5,0x02,0x00,0x00, -0xb6,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xb5,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb9,0x02,0x00,0x00, -0x9e,0x02,0x00,0x00,0xf0,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0xba,0x02,0x00,0x00,0x12,0x00,0x00,0x00, -0xcf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xbb,0x02,0x00,0x00,0xba,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0xbc,0x02,0x00,0x00,0xb9,0x02,0x00,0x00, -0xbb,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xb6,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xb6,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0xc1,0x00,0x00,0x00,0xbd,0x02,0x00,0x00,0xb4,0x02,0x00,0x00, -0xa9,0x02,0x00,0x00,0xbc,0x02,0x00,0x00,0xb5,0x02,0x00,0x00, -0xf7,0x00,0x03,0x00,0xbf,0x02,0x00,0x00,0x00,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xbd,0x02,0x00,0x00,0xbe,0x02,0x00,0x00, -0xbf,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xbe,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc7,0x02,0x00,0x00, -0x9e,0x02,0x00,0x00,0xf0,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0xc9,0x02,0x00,0x00,0x12,0x00,0x00,0x00, -0xc8,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xca,0x02,0x00,0x00,0xc9,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xcb,0x02,0x00,0x00,0xc7,0x02,0x00,0x00, -0xca,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xcc,0x02,0x00,0x00,0x7e,0x02,0x00,0x00,0xcb,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xce,0x02,0x00,0x00, -0xcc,0x02,0x00,0x00,0x96,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xd0,0x02,0x00,0x00,0xce,0x02,0x00,0x00, -0xf2,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd2,0x02,0x00,0x00,0xed,0x02,0x00,0x00,0xbb,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd4,0x02,0x00,0x00, -0xd2,0x02,0x00,0x00,0xf0,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xd6,0x02,0x00,0x00,0xd4,0x02,0x00,0x00, -0xd5,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd8,0x02,0x00,0x00,0xee,0x02,0x00,0x00,0x62,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd9,0x02,0x00,0x00, -0xd6,0x02,0x00,0x00,0xd8,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xdb,0x02,0x00,0x00,0xd9,0x02,0x00,0x00, -0xf2,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00, -0xdc,0x02,0x00,0x00,0xc9,0x00,0x00,0x00,0xdb,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0xdd,0x02,0x00,0x00, -0xdc,0x02,0x00,0x00,0x41,0x00,0x06,0x00,0x9f,0x01,0x00,0x00, -0xde,0x02,0x00,0x00,0xc3,0x02,0x00,0x00,0x34,0x00,0x00,0x00, -0xd0,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0xde,0x02,0x00,0x00, -0xdd,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xbf,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xbf,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0xab,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xab,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe0,0x02,0x00,0x00, -0xf2,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xa8,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xaa,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0xa3,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xa3,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xe2,0x02,0x00,0x00,0xf0,0x02,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xa0,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xa2,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x8b,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x8b,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xe4,0x02,0x00,0x00,0xee,0x02,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x88,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x8a,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x83,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x83,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe6,0x02,0x00,0x00, -0xed,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x80,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x82,0x02,0x00,0x00, -0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00, -}; -const uint64_t matmul_q2_k_f32_fp32_len = 11120; - -unsigned char matmul_q3_k_f32_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0xa8,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x09,0x00,0x00,0x00, -0x11,0x00,0x02,0x00,0x27,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00, -0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c, -0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00, -0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x0f,0x00,0x0f,0x00,0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x4c,0x00,0x00,0x00, -0x3a,0x01,0x00,0x00,0xaa,0x01,0x00,0x00,0x0b,0x02,0x00,0x00, -0x16,0x02,0x00,0x00,0x01,0x03,0x00,0x00,0x4a,0x03,0x00,0x00, -0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x0a,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x0d,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x10,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x37,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x3d,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x4c,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x4f,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x53,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x60,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x62,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x6c,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xa6,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xb8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x31,0x01,0x00,0x00, -0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x32,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x34,0x01,0x00,0x00,0x06,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x36,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x36,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x36,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x36,0x01,0x00,0x00, -0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x37,0x01,0x00,0x00,0x06,0x00,0x00,0x00, -0x6e,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x38,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x38,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x38,0x01,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x3a,0x01,0x00,0x00, -0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x3a,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xe5,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xe6,0x01,0x00,0x00, -0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x13,0x02,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x04,0x00,0x14,0x02,0x00,0x00,0x00,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x14,0x02,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0x14,0x02,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x16,0x02,0x00,0x00,0x22,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x16,0x02,0x00,0x00, -0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x01,0x03,0x00,0x00,0x0b,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x47,0x03,0x00,0x00,0x06,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x48,0x03,0x00,0x00, -0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x48,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x48,0x03,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x4a,0x03,0x00,0x00, -0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x4a,0x03,0x00,0x00,0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00, -0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x1e,0x00,0x10,0x00, -0x10,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x11,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x11,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x15,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x0a,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x27,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x2d,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x3e,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x4c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x54,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x58,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x63,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x67,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x6d,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x72,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x77,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x7c,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x80,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x90,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x96,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa6,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0xa8,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0xb8,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xba,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xbb,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xbc,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xba,0x00,0x00,0x00, -0xbb,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xbd,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xbc,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xbe,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0xb9,0x00,0x00,0x00, -0xbd,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xbf,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xb7,0x00,0x00,0x00, -0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xc0,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xbf,0x00,0x00,0x00, -0xbb,0x00,0x00,0x00,0x14,0x00,0x02,0x00,0xc1,0x00,0x00,0x00, -0x16,0x00,0x03,0x00,0xc3,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc4,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0xbe,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0xbb,0x00,0x00,0x00, -0x1c,0x00,0x04,0x00,0xc7,0x00,0x00,0x00,0xc3,0x00,0x00,0x00, -0xc6,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xc8,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0xc3,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0xcc,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0xc3,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0xcf,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xf3,0x00,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0x80,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x01,0x01,0x00,0x00, -0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x05,0x01,0x00,0x00,0x20,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x08,0x01,0x00,0x00,0x10,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x13,0x01,0x00,0x00, -0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x17,0x01,0x00,0x00,0x08,0x00,0x00,0x00,0x15,0x00,0x04,0x00, -0x27,0x01,0x00,0x00,0x08,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x30,0x01,0x00,0x00,0x08,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x31,0x01,0x00,0x00, -0x30,0x01,0x00,0x00,0x05,0x01,0x00,0x00,0x1c,0x00,0x04,0x00, -0x32,0x01,0x00,0x00,0x30,0x01,0x00,0x00,0x01,0x01,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x33,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x34,0x01,0x00,0x00, -0x30,0x01,0x00,0x00,0x33,0x01,0x00,0x00,0x16,0x00,0x03,0x00, -0x35,0x01,0x00,0x00,0x10,0x00,0x00,0x00,0x1e,0x00,0x06,0x00, -0x36,0x01,0x00,0x00,0x31,0x01,0x00,0x00,0x32,0x01,0x00,0x00, -0x34,0x01,0x00,0x00,0x35,0x01,0x00,0x00,0x1d,0x00,0x03,0x00, -0x37,0x01,0x00,0x00,0x36,0x01,0x00,0x00,0x1e,0x00,0x03,0x00, -0x38,0x01,0x00,0x00,0x37,0x01,0x00,0x00,0x20,0x00,0x04,0x00, -0x39,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x38,0x01,0x00,0x00, -0x3b,0x00,0x04,0x00,0x39,0x01,0x00,0x00,0x3a,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x3e,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x30,0x01,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x43,0x01,0x00,0x00,0x0f,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x9c,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x35,0x01,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0xa2,0x01,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xa6,0x01,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xa7,0x01,0x00,0x00,0x84,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0xa6,0x01,0x00,0x00,0x1c,0x00,0x04,0x00, -0xa8,0x01,0x00,0x00,0x35,0x01,0x00,0x00,0xa7,0x01,0x00,0x00, -0x20,0x00,0x04,0x00,0xa9,0x01,0x00,0x00,0x04,0x00,0x00,0x00, -0xa8,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0xa9,0x01,0x00,0x00, -0xaa,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0xc5,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x35,0x01,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xe5,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00,0x09,0x00,0x00,0x00, -0xe6,0x01,0x00,0x00,0xe5,0x01,0x00,0x00,0x39,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xe7,0x01,0x00,0x00,0x51,0x00,0x00,0x00,0xe6,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xe8,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0xe7,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xe9,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0xe8,0x01,0x00,0x00, -0x6c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x07,0x02,0x00,0x00,0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x08,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0xa6,0x00,0x00,0x00, -0x07,0x02,0x00,0x00,0x1c,0x00,0x04,0x00,0x09,0x02,0x00,0x00, -0x35,0x01,0x00,0x00,0x08,0x02,0x00,0x00,0x20,0x00,0x04,0x00, -0x0a,0x02,0x00,0x00,0x04,0x00,0x00,0x00,0x09,0x02,0x00,0x00, -0x3b,0x00,0x04,0x00,0x0a,0x02,0x00,0x00,0x0b,0x02,0x00,0x00, -0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x0f,0x02,0x00,0x00,0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x13,0x02,0x00,0x00, -0xc3,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x14,0x02,0x00,0x00, -0x13,0x02,0x00,0x00,0x20,0x00,0x04,0x00,0x15,0x02,0x00,0x00, -0x0c,0x00,0x00,0x00,0x14,0x02,0x00,0x00,0x3b,0x00,0x04,0x00, -0x15,0x02,0x00,0x00,0x16,0x02,0x00,0x00,0x0c,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x21,0x02,0x00,0x00,0x0c,0x00,0x00,0x00, -0xc3,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x2a,0x02,0x00,0x00,0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x35,0x01,0x00,0x00, -0x2e,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x30,0x02,0x00,0x00,0x51,0x00,0x00,0x00, -0xe6,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x31,0x02,0x00,0x00,0x84,0x00,0x00,0x00, -0x30,0x02,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x32,0x02,0x00,0x00,0x86,0x00,0x00,0x00, -0x31,0x02,0x00,0x00,0x6c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x35,0x02,0x00,0x00,0x08,0x01,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x36,0x02,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x39,0x02,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x54,0x02,0x00,0x00, -0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x1c,0x00,0x04,0x00,0x55,0x02,0x00,0x00,0x35,0x01,0x00,0x00, -0x54,0x02,0x00,0x00,0x20,0x00,0x04,0x00,0x56,0x02,0x00,0x00, -0x07,0x00,0x00,0x00,0x55,0x02,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x66,0x02,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x6c,0x02,0x00,0x00,0x07,0x00,0x00,0x00,0x35,0x01,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x82,0x02,0x00,0x00, -0x84,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0xbb,0x00,0x00,0x00, -0x1c,0x00,0x04,0x00,0x83,0x02,0x00,0x00,0x35,0x01,0x00,0x00, -0x82,0x02,0x00,0x00,0x20,0x00,0x04,0x00,0x84,0x02,0x00,0x00, -0x07,0x00,0x00,0x00,0x83,0x02,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x8d,0x02,0x00,0x00,0x86,0x00,0x00,0x00, -0xb8,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x95,0x02,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xc4,0x02,0x00,0x00,0x84,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0xf9,0x02,0x00,0x00,0x0d,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x01,0x03,0x00,0x00, -0x01,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x47,0x03,0x00,0x00, -0xc3,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x48,0x03,0x00,0x00, -0x47,0x03,0x00,0x00,0x20,0x00,0x04,0x00,0x49,0x03,0x00,0x00, -0x0c,0x00,0x00,0x00,0x48,0x03,0x00,0x00,0x3b,0x00,0x04,0x00, -0x49,0x03,0x00,0x00,0x4a,0x03,0x00,0x00,0x0c,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x4f,0x03,0x00,0x00, -0x05,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x5c,0x03,0x00,0x00,0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0xc8,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x56,0x02,0x00,0x00,0x57,0x02,0x00,0x00, -0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x84,0x02,0x00,0x00, -0x85,0x02,0x00,0x00,0x07,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x17,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x17,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x1e,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x17,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x27,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x29,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x1e,0x00,0x00,0x00, -0x29,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x2e,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x2d,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x2f,0x00,0x00,0x00, -0x2e,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x30,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x2f,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x30,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x34,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x36,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x36,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x3a,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00, -0x3a,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x3b,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x47,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x3b,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x49,0x00,0x00,0x00, -0x3d,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x49,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x4d,0x00,0x00,0x00, -0x4c,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x4d,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x50,0x00,0x00,0x00, -0x54,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x59,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x58,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5d,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x5d,0x00,0x00,0x00, -0x63,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x68,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,0x67,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6e,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x72,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x78,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x77,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7d,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x80,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x82,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x47,0x00,0x00,0x00, -0x82,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x85,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x87,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x89,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8c,0x00,0x00,0x00, -0x89,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x0c,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x26,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x8c,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x91,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x90,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x91,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x93,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0x42,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x97,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x96,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x98,0x00,0x00,0x00, -0x97,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x99,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0x98,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9a,0x00,0x00,0x00, -0x93,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0x9a,0x00,0x00,0x00, -0x83,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9d,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0xa2,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0xa2,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0x4a,0x00,0x00,0x00, -0xa6,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0xa9,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0xa8,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xaa,0x00,0x00,0x00, -0xa9,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xab,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0xaa,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00, -0xa4,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0xac,0x00,0x00,0x00, -0x83,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xaf,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xb1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xb1,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x6e,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0x05,0x00,0x00,0x00, -0xd0,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,0x6e,0x03,0x00,0x00, -0xc0,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xb3,0x00,0x00,0x00, -0xb2,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xc2,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0xb3,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0xcc,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,0xc9,0x00,0x00,0x00, -0x6e,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,0xcd,0x00,0x00,0x00, -0xcb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd0,0x00,0x00,0x00,0x6e,0x03,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xb1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xb3,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd3,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xd3,0x00,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x87,0x03,0x00,0x00,0xaf,0x00,0x00,0x00, -0xb3,0x00,0x00,0x00,0x3b,0x02,0x00,0x00,0xd6,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x83,0x03,0x00,0x00, -0x9d,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0x38,0x02,0x00,0x00, -0xd6,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x6f,0x03,0x00,0x00,0x83,0x00,0x00,0x00,0xb3,0x00,0x00,0x00, -0xe9,0x02,0x00,0x00,0xd6,0x00,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0xda,0x00,0x00,0x00,0x6f,0x03,0x00,0x00, -0x8d,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xd5,0x00,0x00,0x00, -0xd6,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xda,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,0xd5,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xd4,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xdc,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdc,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x7f,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,0xeb,0x01,0x00,0x00, -0xdf,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0xe2,0x00,0x00,0x00,0x7f,0x03,0x00,0x00,0x37,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xde,0x00,0x00,0x00,0xdf,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xe2,0x00,0x00,0x00, -0xdd,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xdd,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xe7,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x7f,0x03,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xea,0x00,0x00,0x00, -0xe7,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,0xea,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xec,0x00,0x00,0x00,0x83,0x03,0x00,0x00,0xeb,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xee,0x00,0x00,0x00, -0xec,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,0xe7,0x00,0x00,0x00, -0xf3,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xf6,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf7,0x00,0x00,0x00, -0xf4,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0xee,0x00,0x00,0x00, -0xfa,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xfe,0x00,0x00,0x00,0xee,0x00,0x00,0x00,0xfa,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x02,0x01,0x00,0x00, -0xfe,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x06,0x01,0x00,0x00,0x02,0x01,0x00,0x00, -0x05,0x01,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x09,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,0x08,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0a,0x01,0x00,0x00, -0x09,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x0b,0x01,0x00,0x00,0x06,0x01,0x00,0x00, -0x0a,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x18,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,0x17,0x01,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1b,0x01,0x00,0x00, -0xfe,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x1c,0x01,0x00,0x00,0x1b,0x01,0x00,0x00, -0x08,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x1f,0x01,0x00,0x00,0x1c,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x22,0x01,0x00,0x00, -0x13,0x01,0x00,0x00,0x02,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x24,0x01,0x00,0x00,0x22,0x01,0x00,0x00, -0x1c,0x01,0x00,0x00,0xc4,0x00,0x05,0x00,0x13,0x00,0x00,0x00, -0x25,0x01,0x00,0x00,0xcf,0x00,0x00,0x00,0x24,0x01,0x00,0x00, -0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x26,0x01,0x00,0x00, -0x25,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0x2b,0x01,0x00,0x00,0x18,0x01,0x00,0x00,0x13,0x01,0x00,0x00, -0xf7,0x00,0x03,0x00,0x2f,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x2b,0x01,0x00,0x00,0x2e,0x01,0x00,0x00, -0x50,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x2e,0x01,0x00,0x00, -0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3d,0x01,0x00,0x00, -0x18,0x01,0x00,0x00,0x3e,0x00,0x00,0x00,0x41,0x00,0x08,0x00, -0x3e,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,0x3a,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0x85,0x00,0x00,0x00, -0x3d,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x30,0x01,0x00,0x00, -0x40,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x41,0x01,0x00,0x00,0x40,0x01,0x00,0x00, -0x7c,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x42,0x01,0x00,0x00, -0x41,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x13,0x00,0x00,0x00, -0x44,0x01,0x00,0x00,0x42,0x01,0x00,0x00,0x43,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x47,0x01,0x00,0x00, -0x18,0x01,0x00,0x00,0x17,0x01,0x00,0x00,0x41,0x00,0x08,0x00, -0x3e,0x01,0x00,0x00,0x48,0x01,0x00,0x00,0x3a,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0x85,0x00,0x00,0x00, -0x47,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x30,0x01,0x00,0x00, -0x49,0x01,0x00,0x00,0x48,0x01,0x00,0x00,0xc2,0x00,0x05,0x00, -0x30,0x01,0x00,0x00,0x4a,0x01,0x00,0x00,0x49,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x4b,0x01,0x00,0x00,0x4a,0x01,0x00,0x00,0x7c,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x4c,0x01,0x00,0x00,0x4b,0x01,0x00,0x00, -0xc7,0x00,0x05,0x00,0x13,0x00,0x00,0x00,0x4d,0x01,0x00,0x00, -0x4c,0x01,0x00,0x00,0x96,0x00,0x00,0x00,0xc4,0x00,0x05,0x00, -0x13,0x00,0x00,0x00,0x4e,0x01,0x00,0x00,0x4d,0x01,0x00,0x00, -0xa8,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,0x13,0x00,0x00,0x00, -0x4f,0x01,0x00,0x00,0x44,0x01,0x00,0x00,0x4e,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0x2f,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x50,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0x52,0x01,0x00,0x00,0x18,0x01,0x00,0x00,0x17,0x01,0x00,0x00, -0xf7,0x00,0x03,0x00,0x55,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x52,0x01,0x00,0x00,0x54,0x01,0x00,0x00, -0x69,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x54,0x01,0x00,0x00, -0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x58,0x01,0x00,0x00, -0x18,0x01,0x00,0x00,0x3e,0x00,0x00,0x00,0x41,0x00,0x08,0x00, -0x3e,0x01,0x00,0x00,0x59,0x01,0x00,0x00,0x3a,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0x85,0x00,0x00,0x00, -0x58,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x30,0x01,0x00,0x00, -0x5a,0x01,0x00,0x00,0x59,0x01,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x5b,0x01,0x00,0x00,0x5a,0x01,0x00,0x00, -0x7c,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x5c,0x01,0x00,0x00, -0x5b,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x13,0x00,0x00,0x00, -0x5d,0x01,0x00,0x00,0x5c,0x01,0x00,0x00,0x43,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x60,0x01,0x00,0x00, -0x18,0x01,0x00,0x00,0x13,0x01,0x00,0x00,0x41,0x00,0x08,0x00, -0x3e,0x01,0x00,0x00,0x61,0x01,0x00,0x00,0x3a,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0x85,0x00,0x00,0x00, -0x60,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x30,0x01,0x00,0x00, -0x62,0x01,0x00,0x00,0x61,0x01,0x00,0x00,0xc2,0x00,0x05,0x00, -0x30,0x01,0x00,0x00,0x63,0x01,0x00,0x00,0x62,0x01,0x00,0x00, -0x85,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x64,0x01,0x00,0x00,0x63,0x01,0x00,0x00,0x7c,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x65,0x01,0x00,0x00,0x64,0x01,0x00,0x00, -0xc7,0x00,0x05,0x00,0x13,0x00,0x00,0x00,0x66,0x01,0x00,0x00, -0x65,0x01,0x00,0x00,0x96,0x00,0x00,0x00,0xc4,0x00,0x05,0x00, -0x13,0x00,0x00,0x00,0x67,0x01,0x00,0x00,0x66,0x01,0x00,0x00, -0xa8,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,0x13,0x00,0x00,0x00, -0x68,0x01,0x00,0x00,0x5d,0x01,0x00,0x00,0x67,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0x55,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x69,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0x6b,0x01,0x00,0x00,0x18,0x01,0x00,0x00,0x33,0x01,0x00,0x00, -0xf7,0x00,0x03,0x00,0x6e,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x6b,0x01,0x00,0x00,0x6d,0x01,0x00,0x00, -0x82,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x6d,0x01,0x00,0x00, -0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x71,0x01,0x00,0x00, -0x18,0x01,0x00,0x00,0x17,0x01,0x00,0x00,0x41,0x00,0x08,0x00, -0x3e,0x01,0x00,0x00,0x72,0x01,0x00,0x00,0x3a,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0x85,0x00,0x00,0x00, -0x71,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x30,0x01,0x00,0x00, -0x73,0x01,0x00,0x00,0x72,0x01,0x00,0x00,0xc2,0x00,0x05,0x00, -0x30,0x01,0x00,0x00,0x74,0x01,0x00,0x00,0x73,0x01,0x00,0x00, -0xa8,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x75,0x01,0x00,0x00,0x74,0x01,0x00,0x00,0x7c,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x76,0x01,0x00,0x00,0x75,0x01,0x00,0x00, -0x41,0x00,0x08,0x00,0x3e,0x01,0x00,0x00,0x7a,0x01,0x00,0x00, -0x3a,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0xfb,0x00,0x00,0x00, -0x85,0x00,0x00,0x00,0x18,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0x30,0x01,0x00,0x00,0x7b,0x01,0x00,0x00,0x7a,0x01,0x00,0x00, -0xc2,0x00,0x05,0x00,0x30,0x01,0x00,0x00,0x7c,0x01,0x00,0x00, -0x7b,0x01,0x00,0x00,0xa8,0x00,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x7d,0x01,0x00,0x00,0x7c,0x01,0x00,0x00, -0x7c,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x7e,0x01,0x00,0x00, -0x7d,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x13,0x00,0x00,0x00, -0x7f,0x01,0x00,0x00,0x7e,0x01,0x00,0x00,0x96,0x00,0x00,0x00, -0xc4,0x00,0x05,0x00,0x13,0x00,0x00,0x00,0x80,0x01,0x00,0x00, -0x7f,0x01,0x00,0x00,0xa8,0x00,0x00,0x00,0xc5,0x00,0x05,0x00, -0x13,0x00,0x00,0x00,0x81,0x01,0x00,0x00,0x76,0x01,0x00,0x00, -0x80,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x6e,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x82,0x01,0x00,0x00,0x82,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x85,0x01,0x00,0x00,0x18,0x01,0x00,0x00, -0x17,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x3e,0x01,0x00,0x00, -0x86,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0xfb,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x85,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0x30,0x01,0x00,0x00,0x87,0x01,0x00,0x00, -0x86,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x30,0x01,0x00,0x00, -0x88,0x01,0x00,0x00,0x87,0x01,0x00,0x00,0xa8,0x00,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x89,0x01,0x00,0x00, -0x88,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x8a,0x01,0x00,0x00,0x89,0x01,0x00,0x00,0x82,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x8d,0x01,0x00,0x00,0x18,0x01,0x00,0x00, -0x13,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x3e,0x01,0x00,0x00, -0x8e,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0xfb,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x8d,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0x30,0x01,0x00,0x00,0x8f,0x01,0x00,0x00, -0x8e,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x30,0x01,0x00,0x00, -0x90,0x01,0x00,0x00,0x8f,0x01,0x00,0x00,0x80,0x00,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x91,0x01,0x00,0x00, -0x90,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x92,0x01,0x00,0x00,0x91,0x01,0x00,0x00,0xc7,0x00,0x05,0x00, -0x13,0x00,0x00,0x00,0x93,0x01,0x00,0x00,0x92,0x01,0x00,0x00, -0x96,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,0x13,0x00,0x00,0x00, -0x94,0x01,0x00,0x00,0x93,0x01,0x00,0x00,0xa8,0x00,0x00,0x00, -0xc5,0x00,0x05,0x00,0x13,0x00,0x00,0x00,0x95,0x01,0x00,0x00, -0x8a,0x01,0x00,0x00,0x94,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0x6e,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x6e,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0x13,0x00,0x00,0x00,0xa5,0x03,0x00,0x00, -0x81,0x01,0x00,0x00,0x6d,0x01,0x00,0x00,0x95,0x01,0x00,0x00, -0x82,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x55,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x55,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x13,0x00,0x00,0x00,0xa6,0x03,0x00,0x00,0x68,0x01,0x00,0x00, -0x54,0x01,0x00,0x00,0xa5,0x03,0x00,0x00,0x6e,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0x2f,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x2f,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x13,0x00,0x00,0x00, -0xa7,0x03,0x00,0x00,0x4f,0x01,0x00,0x00,0x2e,0x01,0x00,0x00, -0xa6,0x03,0x00,0x00,0x55,0x01,0x00,0x00,0x72,0x00,0x04,0x00, -0x27,0x01,0x00,0x00,0x99,0x01,0x00,0x00,0xa7,0x03,0x00,0x00, -0x41,0x00,0x07,0x00,0x9c,0x01,0x00,0x00,0x9d,0x01,0x00,0x00, -0x3a,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0xfb,0x00,0x00,0x00, -0x96,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x35,0x01,0x00,0x00, -0x9e,0x01,0x00,0x00,0x9d,0x01,0x00,0x00,0x73,0x00,0x04,0x00, -0xc3,0x00,0x00,0x00,0x9f,0x01,0x00,0x00,0x9e,0x01,0x00,0x00, -0x72,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0xa1,0x01,0x00,0x00, -0x99,0x01,0x00,0x00,0x82,0x00,0x05,0x00,0x13,0x00,0x00,0x00, -0xa3,0x01,0x00,0x00,0xa1,0x01,0x00,0x00,0xa2,0x01,0x00,0x00, -0x6f,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0xa4,0x01,0x00,0x00, -0xa3,0x01,0x00,0x00,0x85,0x00,0x05,0x00,0xc3,0x00,0x00,0x00, -0xa5,0x01,0x00,0x00,0x9f,0x01,0x00,0x00,0xa4,0x01,0x00,0x00, -0x41,0x00,0x08,0x00,0x3e,0x01,0x00,0x00,0xaf,0x01,0x00,0x00, -0x3a,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0xfb,0x00,0x00,0x00, -0xcf,0x00,0x00,0x00,0x0b,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0x30,0x01,0x00,0x00,0xb0,0x01,0x00,0x00,0xaf,0x01,0x00,0x00, -0xc2,0x00,0x05,0x00,0x30,0x01,0x00,0x00,0xb2,0x01,0x00,0x00, -0xb0,0x01,0x00,0x00,0x1f,0x01,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xb3,0x01,0x00,0x00,0xb2,0x01,0x00,0x00, -0x7c,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0xb4,0x01,0x00,0x00, -0xb3,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x13,0x00,0x00,0x00, -0xb5,0x01,0x00,0x00,0xb4,0x01,0x00,0x00,0x96,0x00,0x00,0x00, -0x72,0x00,0x04,0x00,0x27,0x01,0x00,0x00,0xb6,0x01,0x00,0x00, -0xb5,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0xb7,0x01,0x00,0x00,0xb6,0x01,0x00,0x00,0x41,0x00,0x08,0x00, -0x3e,0x01,0x00,0x00,0xba,0x01,0x00,0x00,0x3a,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x0a,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x30,0x01,0x00,0x00, -0xbb,0x01,0x00,0x00,0xba,0x01,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xbc,0x01,0x00,0x00,0xbb,0x01,0x00,0x00, -0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbe,0x01,0x00,0x00, -0xbc,0x01,0x00,0x00,0x26,0x01,0x00,0x00,0xab,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0xbf,0x01,0x00,0x00,0xbe,0x01,0x00,0x00, -0x3e,0x00,0x00,0x00,0xa9,0x00,0x06,0x00,0x13,0x00,0x00,0x00, -0xc0,0x01,0x00,0x00,0xbf,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0xa8,0x00,0x00,0x00,0x82,0x00,0x05,0x00,0x13,0x00,0x00,0x00, -0xc1,0x01,0x00,0x00,0xb7,0x01,0x00,0x00,0xc0,0x01,0x00,0x00, -0x6f,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0xc2,0x01,0x00,0x00, -0xc1,0x01,0x00,0x00,0x85,0x00,0x05,0x00,0xc3,0x00,0x00,0x00, -0xc3,0x01,0x00,0x00,0xa5,0x01,0x00,0x00,0xc2,0x01,0x00,0x00, -0x73,0x00,0x04,0x00,0x35,0x01,0x00,0x00,0xc4,0x01,0x00,0x00, -0xc3,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0xc5,0x01,0x00,0x00, -0xc6,0x01,0x00,0x00,0xaa,0x01,0x00,0x00,0xf7,0x00,0x00,0x00, -0x3e,0x00,0x03,0x00,0xc6,0x01,0x00,0x00,0xc4,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc8,0x01,0x00,0x00, -0xf7,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xcc,0x01,0x00,0x00,0x0b,0x01,0x00,0x00, -0x39,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x3e,0x01,0x00,0x00, -0xcd,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0xfb,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0xcc,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0x30,0x01,0x00,0x00,0xce,0x01,0x00,0x00, -0xcd,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x30,0x01,0x00,0x00, -0xd0,0x01,0x00,0x00,0xce,0x01,0x00,0x00,0x1f,0x01,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xd1,0x01,0x00,0x00, -0xd0,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0xd2,0x01,0x00,0x00,0xd1,0x01,0x00,0x00,0xc7,0x00,0x05,0x00, -0x13,0x00,0x00,0x00,0xd3,0x01,0x00,0x00,0xd2,0x01,0x00,0x00, -0x96,0x00,0x00,0x00,0x72,0x00,0x04,0x00,0x27,0x01,0x00,0x00, -0xd4,0x01,0x00,0x00,0xd3,0x01,0x00,0x00,0x72,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0xd5,0x01,0x00,0x00,0xd4,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd8,0x01,0x00,0x00, -0x0a,0x01,0x00,0x00,0x39,0x00,0x00,0x00,0x41,0x00,0x08,0x00, -0x3e,0x01,0x00,0x00,0xd9,0x01,0x00,0x00,0x3a,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0xd8,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x30,0x01,0x00,0x00, -0xda,0x01,0x00,0x00,0xd9,0x01,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xdb,0x01,0x00,0x00,0xda,0x01,0x00,0x00, -0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdd,0x01,0x00,0x00, -0xdb,0x01,0x00,0x00,0x26,0x01,0x00,0x00,0xab,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0xde,0x01,0x00,0x00,0xdd,0x01,0x00,0x00, -0x3e,0x00,0x00,0x00,0xa9,0x00,0x06,0x00,0x13,0x00,0x00,0x00, -0xdf,0x01,0x00,0x00,0xde,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0xa8,0x00,0x00,0x00,0x82,0x00,0x05,0x00,0x13,0x00,0x00,0x00, -0xe0,0x01,0x00,0x00,0xd5,0x01,0x00,0x00,0xdf,0x01,0x00,0x00, -0x6f,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0xe1,0x01,0x00,0x00, -0xe0,0x01,0x00,0x00,0x85,0x00,0x05,0x00,0xc3,0x00,0x00,0x00, -0xe2,0x01,0x00,0x00,0xa5,0x01,0x00,0x00,0xe1,0x01,0x00,0x00, -0x73,0x00,0x04,0x00,0x35,0x01,0x00,0x00,0xe3,0x01,0x00,0x00, -0xe2,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0xc5,0x01,0x00,0x00, -0xe4,0x01,0x00,0x00,0xaa,0x01,0x00,0x00,0xc8,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0xe4,0x01,0x00,0x00,0xe3,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xdf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xdf,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xeb,0x01,0x00,0x00,0x7f,0x03,0x00,0x00,0xe9,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xdc,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xde,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xed,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xed,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x80,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0xde,0x00,0x00,0x00,0x34,0x02,0x00,0x00,0xf0,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xf3,0x01,0x00,0x00, -0x80,0x03,0x00,0x00,0xa6,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xef,0x01,0x00,0x00,0xf0,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xf3,0x01,0x00,0x00,0xee,0x01,0x00,0x00, -0xef,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xee,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf7,0x01,0x00,0x00, -0xa7,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xf9,0x01,0x00,0x00,0xf7,0x01,0x00,0x00, -0x80,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0xfa,0x01,0x00,0x00,0x12,0x00,0x00,0x00,0xcf,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xfb,0x01,0x00,0x00, -0xfa,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0xfc,0x01,0x00,0x00,0xf9,0x01,0x00,0x00,0xfb,0x01,0x00,0x00, -0xf7,0x00,0x03,0x00,0xfe,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xfc,0x01,0x00,0x00,0xfd,0x01,0x00,0x00, -0xfe,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xfd,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x01,0x02,0x00,0x00, -0x6f,0x03,0x00,0x00,0x78,0x00,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0x03,0x02,0x00,0x00,0x01,0x02,0x00,0x00, -0x8d,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xfe,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xfe,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0xc1,0x00,0x00,0x00,0x04,0x02,0x00,0x00,0xfc,0x01,0x00,0x00, -0xee,0x01,0x00,0x00,0x03,0x02,0x00,0x00,0xfd,0x01,0x00,0x00, -0xf7,0x00,0x03,0x00,0x06,0x02,0x00,0x00,0x00,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x04,0x02,0x00,0x00,0x05,0x02,0x00,0x00, -0x26,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0e,0x02,0x00,0x00, -0x7d,0x00,0x00,0x00,0x80,0x03,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x10,0x02,0x00,0x00,0x0e,0x02,0x00,0x00, -0x0f,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x12,0x02,0x00,0x00,0x10,0x02,0x00,0x00,0x78,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1d,0x02,0x00,0x00, -0x0e,0x02,0x00,0x00,0xaa,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x1e,0x02,0x00,0x00,0x87,0x03,0x00,0x00, -0x1d,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x20,0x02,0x00,0x00,0x1e,0x02,0x00,0x00,0x78,0x00,0x00,0x00, -0x41,0x00,0x06,0x00,0x21,0x02,0x00,0x00,0x22,0x02,0x00,0x00, -0x16,0x02,0x00,0x00,0x34,0x00,0x00,0x00,0x20,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x23,0x02,0x00,0x00, -0x22,0x02,0x00,0x00,0x73,0x00,0x04,0x00,0x35,0x01,0x00,0x00, -0x24,0x02,0x00,0x00,0x23,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0xc5,0x01,0x00,0x00,0x25,0x02,0x00,0x00,0x0b,0x02,0x00,0x00, -0x12,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x25,0x02,0x00,0x00, -0x24,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x06,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x26,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x29,0x02,0x00,0x00,0x7d,0x00,0x00,0x00, -0x80,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x2b,0x02,0x00,0x00,0x29,0x02,0x00,0x00,0x2a,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2d,0x02,0x00,0x00, -0x2b,0x02,0x00,0x00,0x78,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0xc5,0x01,0x00,0x00,0x2f,0x02,0x00,0x00,0x0b,0x02,0x00,0x00, -0x2d,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x2f,0x02,0x00,0x00, -0x2e,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x06,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x06,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0xf0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xf0,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x34,0x02,0x00,0x00, -0x80,0x03,0x00,0x00,0x32,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0xed,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xef,0x01,0x00,0x00, -0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x35,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x38,0x02,0x00,0x00,0x83,0x03,0x00,0x00,0x36,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3b,0x02,0x00,0x00, -0x87,0x03,0x00,0x00,0x39,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x3d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x3d,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x89,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0xef,0x01,0x00,0x00,0xe7,0x02,0x00,0x00, -0x40,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0x43,0x02,0x00,0x00,0x89,0x03,0x00,0x00,0x6c,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x3f,0x02,0x00,0x00,0x40,0x02,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x43,0x02,0x00,0x00, -0x3e,0x02,0x00,0x00,0x3f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x3e,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x45,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x45,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x8d,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0x3e,0x02,0x00,0x00,0x71,0x02,0x00,0x00,0x48,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x4b,0x02,0x00,0x00, -0x8d,0x03,0x00,0x00,0x60,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x47,0x02,0x00,0x00,0x48,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x4b,0x02,0x00,0x00,0x46,0x02,0x00,0x00, -0x47,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x46,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x4d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x4d,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x9f,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0x46,0x02,0x00,0x00, -0x6f,0x02,0x00,0x00,0x4e,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0x53,0x02,0x00,0x00,0x9f,0x03,0x00,0x00, -0x62,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x4f,0x02,0x00,0x00, -0x4e,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x53,0x02,0x00,0x00,0x4e,0x02,0x00,0x00,0x4f,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x4e,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x59,0x02,0x00,0x00,0x8d,0x03,0x00,0x00, -0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x5b,0x02,0x00,0x00,0x59,0x02,0x00,0x00,0x9f,0x03,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5d,0x02,0x00,0x00, -0x55,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x5f,0x02,0x00,0x00,0x8d,0x03,0x00,0x00, -0x61,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x60,0x02,0x00,0x00,0x5d,0x02,0x00,0x00,0x5f,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x62,0x02,0x00,0x00, -0x64,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x63,0x02,0x00,0x00,0x60,0x02,0x00,0x00, -0x62,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x65,0x02,0x00,0x00,0x63,0x02,0x00,0x00,0x9f,0x03,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x67,0x02,0x00,0x00, -0x65,0x02,0x00,0x00,0x66,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x69,0x02,0x00,0x00,0x67,0x02,0x00,0x00, -0x89,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0xc5,0x01,0x00,0x00, -0x6a,0x02,0x00,0x00,0xaa,0x01,0x00,0x00,0x69,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0x35,0x01,0x00,0x00,0x6b,0x02,0x00,0x00, -0x6a,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x6c,0x02,0x00,0x00, -0x6d,0x02,0x00,0x00,0x57,0x02,0x00,0x00,0x5b,0x02,0x00,0x00, -0x3e,0x00,0x03,0x00,0x6d,0x02,0x00,0x00,0x6b,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6f,0x02,0x00,0x00, -0x9f,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x4d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x4f,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x48,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x48,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x71,0x02,0x00,0x00,0x8d,0x03,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x45,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x47,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x73,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x73,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x8e,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0x47,0x02,0x00,0x00,0x9f,0x02,0x00,0x00,0x76,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x79,0x02,0x00,0x00, -0x8e,0x03,0x00,0x00,0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x75,0x02,0x00,0x00,0x76,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x79,0x02,0x00,0x00,0x74,0x02,0x00,0x00, -0x75,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x74,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x7b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x7b,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x9c,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0x74,0x02,0x00,0x00, -0x9d,0x02,0x00,0x00,0x7c,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0x81,0x02,0x00,0x00,0x9c,0x03,0x00,0x00, -0xbb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x7d,0x02,0x00,0x00, -0x7c,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x81,0x02,0x00,0x00,0x7c,0x02,0x00,0x00,0x7d,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x7c,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x87,0x02,0x00,0x00,0x8e,0x03,0x00,0x00, -0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x89,0x02,0x00,0x00,0x87,0x02,0x00,0x00,0x9c,0x03,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8b,0x02,0x00,0x00, -0x59,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x8e,0x02,0x00,0x00,0x8e,0x03,0x00,0x00, -0x8d,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x8f,0x02,0x00,0x00,0x8b,0x02,0x00,0x00,0x8e,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x91,0x02,0x00,0x00, -0x68,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x92,0x02,0x00,0x00,0x8f,0x02,0x00,0x00, -0x91,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x94,0x02,0x00,0x00,0x92,0x02,0x00,0x00,0x9c,0x03,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x96,0x02,0x00,0x00, -0x94,0x02,0x00,0x00,0x95,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x98,0x02,0x00,0x00,0x96,0x02,0x00,0x00, -0x89,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0xc5,0x01,0x00,0x00, -0x99,0x02,0x00,0x00,0x0b,0x02,0x00,0x00,0x98,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0x35,0x01,0x00,0x00,0x9a,0x02,0x00,0x00, -0x99,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x6c,0x02,0x00,0x00, -0x9b,0x02,0x00,0x00,0x85,0x02,0x00,0x00,0x89,0x02,0x00,0x00, -0x3e,0x00,0x03,0x00,0x9b,0x02,0x00,0x00,0x9a,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9d,0x02,0x00,0x00, -0x9c,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x7b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x7d,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x76,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x76,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9f,0x02,0x00,0x00,0x8e,0x03,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x73,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x75,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xa1,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xa1,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x8f,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0x75,0x02,0x00,0x00,0xe5,0x02,0x00,0x00,0xa4,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xa7,0x02,0x00,0x00, -0x8f,0x03,0x00,0x00,0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xa3,0x02,0x00,0x00,0xa4,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xa7,0x02,0x00,0x00,0xa2,0x02,0x00,0x00, -0xa3,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xa2,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0xa9,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xa9,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x93,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0xa2,0x02,0x00,0x00, -0xe3,0x02,0x00,0x00,0xac,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0xaf,0x02,0x00,0x00,0x93,0x03,0x00,0x00, -0x60,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xab,0x02,0x00,0x00, -0xac,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xaf,0x02,0x00,0x00,0xaa,0x02,0x00,0x00,0xab,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xaa,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0xb1,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xb1,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x95,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0xaa,0x02,0x00,0x00,0xe1,0x02,0x00,0x00, -0xb4,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0xb7,0x02,0x00,0x00,0x95,0x03,0x00,0x00,0xbb,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xb3,0x02,0x00,0x00,0xb4,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xb7,0x02,0x00,0x00, -0xb2,0x02,0x00,0x00,0xb3,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xb2,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xb9,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xb9,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x97,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0xb2,0x02,0x00,0x00,0xdf,0x02,0x00,0x00,0xba,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xbf,0x02,0x00,0x00, -0x97,0x03,0x00,0x00,0x62,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xbb,0x02,0x00,0x00,0xba,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xbf,0x02,0x00,0x00,0xba,0x02,0x00,0x00, -0xbb,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xba,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc1,0x02,0x00,0x00, -0x8f,0x03,0x00,0x00,0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xc3,0x02,0x00,0x00,0xc1,0x02,0x00,0x00, -0x95,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xc5,0x02,0x00,0x00,0xc3,0x02,0x00,0x00,0xc4,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc7,0x02,0x00,0x00, -0x93,0x03,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xc8,0x02,0x00,0x00,0xc5,0x02,0x00,0x00, -0xc7,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xca,0x02,0x00,0x00,0xc8,0x02,0x00,0x00,0x97,0x03,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xce,0x02,0x00,0x00, -0xc7,0x02,0x00,0x00,0x97,0x03,0x00,0x00,0x41,0x00,0x05,0x00, -0x6c,0x02,0x00,0x00,0xcf,0x02,0x00,0x00,0x57,0x02,0x00,0x00, -0xce,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x35,0x01,0x00,0x00, -0xd0,0x02,0x00,0x00,0xcf,0x02,0x00,0x00,0x73,0x00,0x04,0x00, -0xc3,0x00,0x00,0x00,0xd1,0x02,0x00,0x00,0xd0,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0x6c,0x02,0x00,0x00,0xd6,0x02,0x00,0x00, -0x85,0x02,0x00,0x00,0xc3,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0x35,0x01,0x00,0x00,0xd7,0x02,0x00,0x00,0xd6,0x02,0x00,0x00, -0x73,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0xd8,0x02,0x00,0x00, -0xd7,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00, -0xda,0x02,0x00,0x00,0xc9,0x00,0x00,0x00,0xca,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0xdb,0x02,0x00,0x00, -0xda,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,0xc3,0x00,0x00,0x00, -0xdc,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0xd1,0x02,0x00,0x00,0xd8,0x02,0x00,0x00,0xdb,0x02,0x00,0x00, -0x3e,0x00,0x03,0x00,0xda,0x02,0x00,0x00,0xdc,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdf,0x02,0x00,0x00, -0x97,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xb9,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xbb,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0xb4,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xb4,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xe1,0x02,0x00,0x00,0x95,0x03,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xb1,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xb3,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xac,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xac,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xe3,0x02,0x00,0x00,0x93,0x03,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xa9,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xab,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0xa4,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xa4,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe5,0x02,0x00,0x00, -0x8f,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xa1,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xa3,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x40,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x40,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xe7,0x02,0x00,0x00,0x89,0x03,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x3d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x3f,0x02,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x35,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0xd6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd6,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe9,0x02,0x00,0x00, -0x6f,0x03,0x00,0x00,0x6c,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xd3,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd5,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xee,0x02,0x00,0x00, -0x55,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xef,0x02,0x00,0x00,0x95,0x00,0x00,0x00, -0xee,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xf4,0x02,0x00,0x00,0x59,0x00,0x00,0x00,0xb8,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf5,0x02,0x00,0x00, -0xa7,0x00,0x00,0x00,0xf4,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0xfa,0x02,0x00,0x00,0x12,0x00,0x00,0x00, -0xf9,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xfb,0x02,0x00,0x00,0xfa,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xfc,0x02,0x00,0x00,0x0f,0x00,0x00,0x00, -0xfb,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x00,0x03,0x00,0x00,0x47,0x00,0x00,0x00,0xfb,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x02,0x03,0x00,0x00, -0x01,0x03,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x03,0x03,0x00,0x00,0x02,0x03,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x04,0x03,0x00,0x00, -0x00,0x03,0x00,0x00,0x03,0x03,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x05,0x03,0x00,0x00,0xfc,0x02,0x00,0x00, -0x04,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,0x07,0x03,0x00,0x00, -0xf8,0x00,0x02,0x00,0x07,0x03,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x70,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0xd5,0x00,0x00,0x00,0x6d,0x03,0x00,0x00,0x0a,0x03,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x0d,0x03,0x00,0x00, -0x70,0x03,0x00,0x00,0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x09,0x03,0x00,0x00,0x0a,0x03,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x0d,0x03,0x00,0x00,0x08,0x03,0x00,0x00, -0x09,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x08,0x03,0x00,0x00, -0xf9,0x00,0x02,0x00,0x0f,0x03,0x00,0x00,0xf8,0x00,0x02,0x00, -0x0f,0x03,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x71,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0x08,0x03,0x00,0x00, -0x6b,0x03,0x00,0x00,0x12,0x03,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0x15,0x03,0x00,0x00,0x71,0x03,0x00,0x00, -0x60,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x11,0x03,0x00,0x00, -0x12,0x03,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x15,0x03,0x00,0x00,0x10,0x03,0x00,0x00,0x11,0x03,0x00,0x00, -0xf8,0x00,0x02,0x00,0x10,0x03,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x19,0x03,0x00,0x00,0x71,0x03,0x00,0x00, -0x61,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x1a,0x03,0x00,0x00,0xef,0x02,0x00,0x00,0x19,0x03,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1c,0x03,0x00,0x00, -0x64,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x1d,0x03,0x00,0x00,0x1a,0x03,0x00,0x00, -0x1c,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x21,0x03,0x00,0x00,0x70,0x03,0x00,0x00,0x8d,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x22,0x03,0x00,0x00, -0xf5,0x02,0x00,0x00,0x21,0x03,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x24,0x03,0x00,0x00,0x68,0x00,0x00,0x00, -0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x25,0x03,0x00,0x00,0x22,0x03,0x00,0x00,0x24,0x03,0x00,0x00, -0xf9,0x00,0x02,0x00,0x27,0x03,0x00,0x00,0xf8,0x00,0x02,0x00, -0x27,0x03,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x73,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0x10,0x03,0x00,0x00, -0x69,0x03,0x00,0x00,0x2a,0x03,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0x2d,0x03,0x00,0x00,0x73,0x03,0x00,0x00, -0xbb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x29,0x03,0x00,0x00, -0x2a,0x03,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x2d,0x03,0x00,0x00,0x28,0x03,0x00,0x00,0x29,0x03,0x00,0x00, -0xf8,0x00,0x02,0x00,0x28,0x03,0x00,0x00,0xf9,0x00,0x02,0x00, -0x2f,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x2f,0x03,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x75,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0x28,0x03,0x00,0x00,0x67,0x03,0x00,0x00, -0x32,0x03,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0x35,0x03,0x00,0x00,0x75,0x03,0x00,0x00,0x62,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x31,0x03,0x00,0x00,0x32,0x03,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x35,0x03,0x00,0x00, -0x30,0x03,0x00,0x00,0x31,0x03,0x00,0x00,0xf8,0x00,0x02,0x00, -0x30,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x38,0x03,0x00,0x00,0x1d,0x03,0x00,0x00,0x75,0x03,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x3b,0x03,0x00,0x00, -0x38,0x03,0x00,0x00,0x36,0x00,0x00,0x00,0xf7,0x00,0x03,0x00, -0x3d,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x3b,0x03,0x00,0x00,0x3c,0x03,0x00,0x00,0x3d,0x03,0x00,0x00, -0xf8,0x00,0x02,0x00,0x3c,0x03,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x40,0x03,0x00,0x00,0x25,0x03,0x00,0x00, -0x73,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x41,0x03,0x00,0x00,0x12,0x00,0x00,0x00,0xcf,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x42,0x03,0x00,0x00, -0x41,0x03,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0x43,0x03,0x00,0x00,0x40,0x03,0x00,0x00,0x42,0x03,0x00,0x00, -0xf9,0x00,0x02,0x00,0x3d,0x03,0x00,0x00,0xf8,0x00,0x02,0x00, -0x3d,0x03,0x00,0x00,0xf5,0x00,0x07,0x00,0xc1,0x00,0x00,0x00, -0x44,0x03,0x00,0x00,0x3b,0x03,0x00,0x00,0x30,0x03,0x00,0x00, -0x43,0x03,0x00,0x00,0x3c,0x03,0x00,0x00,0xf7,0x00,0x03,0x00, -0x46,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x44,0x03,0x00,0x00,0x45,0x03,0x00,0x00,0x46,0x03,0x00,0x00, -0xf8,0x00,0x02,0x00,0x45,0x03,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x4e,0x03,0x00,0x00,0x25,0x03,0x00,0x00, -0x73,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x50,0x03,0x00,0x00,0x12,0x00,0x00,0x00,0x4f,0x03,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x51,0x03,0x00,0x00, -0x50,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x52,0x03,0x00,0x00,0x4e,0x03,0x00,0x00,0x51,0x03,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x53,0x03,0x00,0x00, -0x05,0x03,0x00,0x00,0x52,0x03,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x55,0x03,0x00,0x00,0x53,0x03,0x00,0x00, -0x1d,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x57,0x03,0x00,0x00,0x55,0x03,0x00,0x00,0x75,0x03,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x59,0x03,0x00,0x00, -0x70,0x03,0x00,0x00,0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x5b,0x03,0x00,0x00,0x59,0x03,0x00,0x00, -0x73,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x5d,0x03,0x00,0x00,0x5b,0x03,0x00,0x00,0x5c,0x03,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5f,0x03,0x00,0x00, -0x71,0x03,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x60,0x03,0x00,0x00,0x5d,0x03,0x00,0x00, -0x5f,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x62,0x03,0x00,0x00,0x60,0x03,0x00,0x00,0x75,0x03,0x00,0x00, -0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,0x63,0x03,0x00,0x00, -0xc9,0x00,0x00,0x00,0x62,0x03,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc3,0x00,0x00,0x00,0x64,0x03,0x00,0x00,0x63,0x03,0x00,0x00, -0x41,0x00,0x06,0x00,0x21,0x02,0x00,0x00,0x65,0x03,0x00,0x00, -0x4a,0x03,0x00,0x00,0x34,0x00,0x00,0x00,0x57,0x03,0x00,0x00, -0x3e,0x00,0x03,0x00,0x65,0x03,0x00,0x00,0x64,0x03,0x00,0x00, -0xf9,0x00,0x02,0x00,0x46,0x03,0x00,0x00,0xf8,0x00,0x02,0x00, -0x46,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,0x32,0x03,0x00,0x00, -0xf8,0x00,0x02,0x00,0x32,0x03,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x67,0x03,0x00,0x00,0x75,0x03,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x2f,0x03,0x00,0x00, -0xf8,0x00,0x02,0x00,0x31,0x03,0x00,0x00,0xf9,0x00,0x02,0x00, -0x2a,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x2a,0x03,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x69,0x03,0x00,0x00, -0x73,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x27,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x29,0x03,0x00,0x00, -0xf9,0x00,0x02,0x00,0x12,0x03,0x00,0x00,0xf8,0x00,0x02,0x00, -0x12,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x6b,0x03,0x00,0x00,0x71,0x03,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x0f,0x03,0x00,0x00,0xf8,0x00,0x02,0x00, -0x11,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,0x0a,0x03,0x00,0x00, -0xf8,0x00,0x02,0x00,0x0a,0x03,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x6d,0x03,0x00,0x00,0x70,0x03,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x07,0x03,0x00,0x00, -0xf8,0x00,0x02,0x00,0x09,0x03,0x00,0x00,0xfd,0x00,0x01,0x00, -0x38,0x00,0x01,0x00, -}; -const uint64_t matmul_q3_k_f32_len = 13144; - -unsigned char matmul_q3_k_f32_aligned_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0xc6,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x09,0x00,0x00,0x00, -0x11,0x00,0x02,0x00,0x27,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00, -0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c, -0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00, -0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x0f,0x00,0x0f,0x00,0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x4c,0x00,0x00,0x00, -0x3a,0x01,0x00,0x00,0xaa,0x01,0x00,0x00,0x0d,0x02,0x00,0x00, -0x15,0x02,0x00,0x00,0x22,0x03,0x00,0x00,0x6b,0x03,0x00,0x00, -0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x0a,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x0d,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x10,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x37,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x3d,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x4c,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x4f,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x53,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x60,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x62,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x6c,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xa7,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xb9,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xbc,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x31,0x01,0x00,0x00, -0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x32,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x34,0x01,0x00,0x00,0x06,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x36,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x36,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x36,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x36,0x01,0x00,0x00, -0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x37,0x01,0x00,0x00,0x06,0x00,0x00,0x00, -0x6e,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x38,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x38,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x38,0x01,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x3a,0x01,0x00,0x00, -0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x3a,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xe5,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xe6,0x01,0x00,0x00, -0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x12,0x02,0x00,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x48,0x00,0x04,0x00,0x13,0x02,0x00,0x00,0x00,0x00,0x00,0x00, -0x05,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x13,0x02,0x00,0x00, -0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x13,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x13,0x02,0x00,0x00, -0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0x13,0x02,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x15,0x02,0x00,0x00,0x22,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x15,0x02,0x00,0x00, -0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x22,0x03,0x00,0x00,0x0b,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x68,0x03,0x00,0x00,0x06,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x69,0x03,0x00,0x00, -0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x69,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x69,0x03,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x6b,0x03,0x00,0x00, -0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x6b,0x03,0x00,0x00,0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00, -0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x1e,0x00,0x10,0x00, -0x10,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x11,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x11,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x15,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x0a,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x27,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x2d,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x3e,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x4c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x54,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x58,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x63,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x67,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x6d,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x72,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x77,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x91,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0xa2,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xa7,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xba,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0xb9,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xbb,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x4f,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xbc,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xbb,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xbd,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0xba,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xb8,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xc0,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x14,0x00,0x02,0x00, -0xc2,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0xc4,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xc5,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xc6,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc5,0x00,0x00,0x00, -0xbf,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xc7,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc6,0x00,0x00,0x00, -0xbc,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xc8,0x00,0x00,0x00, -0xc4,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0xc9,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xc8,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0xcc,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xcd,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xf4,0x00,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xfb,0x00,0x00,0x00, -0x80,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x02,0x01,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x06,0x01,0x00,0x00,0x20,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x09,0x01,0x00,0x00, -0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x14,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x15,0x00,0x04,0x00, -0x27,0x01,0x00,0x00,0x08,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x30,0x01,0x00,0x00,0x08,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x31,0x01,0x00,0x00, -0x30,0x01,0x00,0x00,0x06,0x01,0x00,0x00,0x1c,0x00,0x04,0x00, -0x32,0x01,0x00,0x00,0x30,0x01,0x00,0x00,0x02,0x01,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x33,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x34,0x01,0x00,0x00, -0x30,0x01,0x00,0x00,0x33,0x01,0x00,0x00,0x16,0x00,0x03,0x00, -0x35,0x01,0x00,0x00,0x10,0x00,0x00,0x00,0x1e,0x00,0x06,0x00, -0x36,0x01,0x00,0x00,0x31,0x01,0x00,0x00,0x32,0x01,0x00,0x00, -0x34,0x01,0x00,0x00,0x35,0x01,0x00,0x00,0x1d,0x00,0x03,0x00, -0x37,0x01,0x00,0x00,0x36,0x01,0x00,0x00,0x1e,0x00,0x03,0x00, -0x38,0x01,0x00,0x00,0x37,0x01,0x00,0x00,0x20,0x00,0x04,0x00, -0x39,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x38,0x01,0x00,0x00, -0x3b,0x00,0x04,0x00,0x39,0x01,0x00,0x00,0x3a,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x3e,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x30,0x01,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x43,0x01,0x00,0x00,0x0f,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x9c,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x35,0x01,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0xa2,0x01,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xa6,0x01,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xa7,0x01,0x00,0x00,0x84,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0xa6,0x01,0x00,0x00,0x1c,0x00,0x04,0x00, -0xa8,0x01,0x00,0x00,0x35,0x01,0x00,0x00,0xa7,0x01,0x00,0x00, -0x20,0x00,0x04,0x00,0xa9,0x01,0x00,0x00,0x04,0x00,0x00,0x00, -0xa8,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0xa9,0x01,0x00,0x00, -0xaa,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0xc5,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x35,0x01,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xe5,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00,0x09,0x00,0x00,0x00, -0xe6,0x01,0x00,0x00,0xe5,0x01,0x00,0x00,0x39,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xe7,0x01,0x00,0x00,0x51,0x00,0x00,0x00,0xe6,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xe8,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0xe7,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xe9,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0xe8,0x01,0x00,0x00, -0x6c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x04,0x02,0x00,0x00,0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x09,0x02,0x00,0x00,0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x0a,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0xa7,0x00,0x00,0x00, -0x09,0x02,0x00,0x00,0x1c,0x00,0x04,0x00,0x0b,0x02,0x00,0x00, -0x35,0x01,0x00,0x00,0x0a,0x02,0x00,0x00,0x20,0x00,0x04,0x00, -0x0c,0x02,0x00,0x00,0x04,0x00,0x00,0x00,0x0b,0x02,0x00,0x00, -0x3b,0x00,0x04,0x00,0x0c,0x02,0x00,0x00,0x0d,0x02,0x00,0x00, -0x04,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x10,0x02,0x00,0x00, -0xc4,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x18,0x00,0x04,0x00, -0x11,0x02,0x00,0x00,0x10,0x02,0x00,0x00,0x02,0x00,0x00,0x00, -0x1d,0x00,0x03,0x00,0x12,0x02,0x00,0x00,0x11,0x02,0x00,0x00, -0x1e,0x00,0x03,0x00,0x13,0x02,0x00,0x00,0x12,0x02,0x00,0x00, -0x20,0x00,0x04,0x00,0x14,0x02,0x00,0x00,0x0c,0x00,0x00,0x00, -0x13,0x02,0x00,0x00,0x3b,0x00,0x04,0x00,0x14,0x02,0x00,0x00, -0x15,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x17,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0xc4,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x2b,0x02,0x00,0x00, -0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x3a,0x02,0x00,0x00,0x05,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x42,0x02,0x00,0x00,0x06,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4a,0x02,0x00,0x00, -0x07,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x51,0x02,0x00,0x00,0x51,0x00,0x00,0x00,0xe6,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x52,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x51,0x02,0x00,0x00, -0x77,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x53,0x02,0x00,0x00,0x86,0x00,0x00,0x00,0x52,0x02,0x00,0x00, -0x6c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x56,0x02,0x00,0x00,0x08,0x01,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x57,0x02,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x5a,0x02,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x75,0x02,0x00,0x00,0x84,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x1c,0x00,0x04,0x00, -0x76,0x02,0x00,0x00,0x35,0x01,0x00,0x00,0x75,0x02,0x00,0x00, -0x20,0x00,0x04,0x00,0x77,0x02,0x00,0x00,0x07,0x00,0x00,0x00, -0x76,0x02,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x87,0x02,0x00,0x00,0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x8d,0x02,0x00,0x00, -0x07,0x00,0x00,0x00,0x35,0x01,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xa3,0x02,0x00,0x00,0x84,0x00,0x00,0x00, -0xbf,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x1c,0x00,0x04,0x00, -0xa4,0x02,0x00,0x00,0x35,0x01,0x00,0x00,0xa3,0x02,0x00,0x00, -0x20,0x00,0x04,0x00,0xa5,0x02,0x00,0x00,0x07,0x00,0x00,0x00, -0xa4,0x02,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xae,0x02,0x00,0x00,0x86,0x00,0x00,0x00,0xb9,0x00,0x00,0x00, -0xbf,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xb6,0x02,0x00,0x00,0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xe5,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x1a,0x03,0x00,0x00,0x0d,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x22,0x03,0x00,0x00,0x01,0x00,0x00,0x00, -0x1d,0x00,0x03,0x00,0x68,0x03,0x00,0x00,0xc4,0x00,0x00,0x00, -0x1e,0x00,0x03,0x00,0x69,0x03,0x00,0x00,0x68,0x03,0x00,0x00, -0x20,0x00,0x04,0x00,0x6a,0x03,0x00,0x00,0x0c,0x00,0x00,0x00, -0x69,0x03,0x00,0x00,0x3b,0x00,0x04,0x00,0x6a,0x03,0x00,0x00, -0x6b,0x03,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x70,0x03,0x00,0x00,0x05,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x7d,0x03,0x00,0x00, -0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x05,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xc9,0x00,0x00,0x00, -0xca,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x77,0x02,0x00,0x00,0x78,0x02,0x00,0x00,0x07,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0xa5,0x02,0x00,0x00,0xa6,0x02,0x00,0x00, -0x07,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x16,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x17,0x00,0x00,0x00, -0x16,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x17,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1e,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x21,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x28,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x27,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x29,0x00,0x00,0x00, -0x28,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x2a,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x29,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x2e,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00, -0x24,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x30,0x00,0x00,0x00, -0x2a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x35,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x36,0x00,0x00,0x00, -0x35,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x38,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00, -0x38,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x3a,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x3f,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x3e,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x3f,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x42,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x3b,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x47,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x4a,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x4c,0x00,0x00,0x00, -0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x4f,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x55,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x54,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00, -0x50,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x4f,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x64,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,0x63,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x68,0x00,0x00,0x00, -0x5d,0x00,0x00,0x00,0x67,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x6d,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x73,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x72,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x79,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x7d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x82,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x81,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x83,0x00,0x00,0x00, -0x82,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0x83,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x87,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x87,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8a,0x00,0x00,0x00, -0x47,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x8a,0x00,0x00,0x00, -0x83,0x00,0x00,0x00,0x0c,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x8e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x26,0x00,0x00,0x00, -0x88,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x91,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x93,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x93,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x96,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x98,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x98,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9a,0x00,0x00,0x00, -0x96,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x94,0x00,0x00,0x00, -0x9a,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9d,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9e,0x00,0x00,0x00, -0x9d,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0xa2,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xa4,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0xa4,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa8,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0xa7,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0xaa,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0xaa,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00, -0xa8,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xad,0x00,0x00,0x00,0xa5,0x00,0x00,0x00, -0xac,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xaf,0x00,0x00,0x00,0xad,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb0,0x00,0x00,0x00, -0xaf,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xb2,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb2,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x8f,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0xd1,0x00,0x00,0x00, -0xb3,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0xc3,0x00,0x00,0x00,0x8f,0x03,0x00,0x00,0xc1,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xb4,0x00,0x00,0x00,0xb3,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xc3,0x00,0x00,0x00, -0xb3,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xb3,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00, -0xce,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0x8f,0x03,0x00,0x00, -0x3e,0x00,0x03,0x00,0xce,0x00,0x00,0x00,0xcc,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd1,0x00,0x00,0x00, -0x8f,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xb2,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb4,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xd4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xd4,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xa8,0x03,0x00,0x00,0xb0,0x00,0x00,0x00,0xb4,0x00,0x00,0x00, -0x5c,0x02,0x00,0x00,0xd7,0x00,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xa4,0x03,0x00,0x00,0x9e,0x00,0x00,0x00, -0xb4,0x00,0x00,0x00,0x59,0x02,0x00,0x00,0xd7,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x90,0x03,0x00,0x00, -0x84,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0x0a,0x03,0x00,0x00, -0xd7,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0xdb,0x00,0x00,0x00,0x90,0x03,0x00,0x00,0x8e,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xd6,0x00,0x00,0x00,0xd7,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xdb,0x00,0x00,0x00, -0xd5,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xd5,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xdd,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xa0,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0xd5,0x00,0x00,0x00,0xeb,0x01,0x00,0x00,0xe0,0x00,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xe3,0x00,0x00,0x00, -0xa0,0x03,0x00,0x00,0x37,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xdf,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xe3,0x00,0x00,0x00,0xde,0x00,0x00,0x00, -0xdf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe8,0x00,0x00,0x00, -0x73,0x00,0x00,0x00,0xa0,0x03,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,0xe8,0x00,0x00,0x00, -0x99,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xec,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xed,0x00,0x00,0x00, -0xa4,0x03,0x00,0x00,0xec,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xef,0x00,0x00,0x00,0xed,0x00,0x00,0x00, -0x6e,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xf5,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0xf4,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf7,0x00,0x00,0x00, -0x6e,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,0xf5,0x00,0x00,0x00, -0xf7,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xfc,0x00,0x00,0x00,0xef,0x00,0x00,0x00,0xfb,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xff,0x00,0x00,0x00, -0xef,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x03,0x01,0x00,0x00,0xff,0x00,0x00,0x00, -0x02,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x07,0x01,0x00,0x00,0x03,0x01,0x00,0x00,0x06,0x01,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0a,0x01,0x00,0x00, -0xff,0x00,0x00,0x00,0x09,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x0b,0x01,0x00,0x00,0x0a,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x0c,0x01,0x00,0x00,0x07,0x01,0x00,0x00,0x0b,0x01,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x18,0x01,0x00,0x00, -0xff,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x1b,0x01,0x00,0x00,0xff,0x00,0x00,0x00, -0x02,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x1c,0x01,0x00,0x00,0x1b,0x01,0x00,0x00,0x09,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1f,0x01,0x00,0x00, -0x1c,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x22,0x01,0x00,0x00,0x14,0x01,0x00,0x00, -0x03,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x24,0x01,0x00,0x00,0x22,0x01,0x00,0x00,0x1c,0x01,0x00,0x00, -0xc4,0x00,0x05,0x00,0x13,0x00,0x00,0x00,0x25,0x01,0x00,0x00, -0xd0,0x00,0x00,0x00,0x24,0x01,0x00,0x00,0x7c,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x26,0x01,0x00,0x00,0x25,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x2b,0x01,0x00,0x00, -0x18,0x01,0x00,0x00,0x14,0x01,0x00,0x00,0xf7,0x00,0x03,0x00, -0x2f,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x2b,0x01,0x00,0x00,0x2e,0x01,0x00,0x00,0x50,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x2e,0x01,0x00,0x00,0x82,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3d,0x01,0x00,0x00,0x18,0x01,0x00,0x00, -0x3e,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x3e,0x01,0x00,0x00, -0x3f,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0xfc,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x3d,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0x30,0x01,0x00,0x00,0x40,0x01,0x00,0x00, -0x3f,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x41,0x01,0x00,0x00,0x40,0x01,0x00,0x00,0x7c,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x42,0x01,0x00,0x00,0x41,0x01,0x00,0x00, -0xc7,0x00,0x05,0x00,0x13,0x00,0x00,0x00,0x44,0x01,0x00,0x00, -0x42,0x01,0x00,0x00,0x43,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x47,0x01,0x00,0x00,0x18,0x01,0x00,0x00, -0x77,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x3e,0x01,0x00,0x00, -0x48,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0xfc,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x47,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0x30,0x01,0x00,0x00,0x49,0x01,0x00,0x00, -0x48,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x30,0x01,0x00,0x00, -0x4a,0x01,0x00,0x00,0x49,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4b,0x01,0x00,0x00, -0x4a,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x4c,0x01,0x00,0x00,0x4b,0x01,0x00,0x00,0xc7,0x00,0x05,0x00, -0x13,0x00,0x00,0x00,0x4d,0x01,0x00,0x00,0x4c,0x01,0x00,0x00, -0x97,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,0x13,0x00,0x00,0x00, -0x4e,0x01,0x00,0x00,0x4d,0x01,0x00,0x00,0xa9,0x00,0x00,0x00, -0xc5,0x00,0x05,0x00,0x13,0x00,0x00,0x00,0x4f,0x01,0x00,0x00, -0x44,0x01,0x00,0x00,0x4e,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0x2f,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x50,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x52,0x01,0x00,0x00, -0x18,0x01,0x00,0x00,0x77,0x00,0x00,0x00,0xf7,0x00,0x03,0x00, -0x55,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x52,0x01,0x00,0x00,0x54,0x01,0x00,0x00,0x69,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x54,0x01,0x00,0x00,0x82,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x58,0x01,0x00,0x00,0x18,0x01,0x00,0x00, -0x3e,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x3e,0x01,0x00,0x00, -0x59,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0xfc,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x58,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0x30,0x01,0x00,0x00,0x5a,0x01,0x00,0x00, -0x59,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x5b,0x01,0x00,0x00,0x5a,0x01,0x00,0x00,0x7c,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x5c,0x01,0x00,0x00,0x5b,0x01,0x00,0x00, -0xc7,0x00,0x05,0x00,0x13,0x00,0x00,0x00,0x5d,0x01,0x00,0x00, -0x5c,0x01,0x00,0x00,0x43,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x60,0x01,0x00,0x00,0x18,0x01,0x00,0x00, -0x14,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x3e,0x01,0x00,0x00, -0x61,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0xfc,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x60,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0x30,0x01,0x00,0x00,0x62,0x01,0x00,0x00, -0x61,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x30,0x01,0x00,0x00, -0x63,0x01,0x00,0x00,0x62,0x01,0x00,0x00,0x86,0x00,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x64,0x01,0x00,0x00, -0x63,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x65,0x01,0x00,0x00,0x64,0x01,0x00,0x00,0xc7,0x00,0x05,0x00, -0x13,0x00,0x00,0x00,0x66,0x01,0x00,0x00,0x65,0x01,0x00,0x00, -0x97,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,0x13,0x00,0x00,0x00, -0x67,0x01,0x00,0x00,0x66,0x01,0x00,0x00,0xa9,0x00,0x00,0x00, -0xc5,0x00,0x05,0x00,0x13,0x00,0x00,0x00,0x68,0x01,0x00,0x00, -0x5d,0x01,0x00,0x00,0x67,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0x55,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x69,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x6b,0x01,0x00,0x00, -0x18,0x01,0x00,0x00,0x33,0x01,0x00,0x00,0xf7,0x00,0x03,0x00, -0x6e,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x6b,0x01,0x00,0x00,0x6d,0x01,0x00,0x00,0x82,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x6d,0x01,0x00,0x00,0x82,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x71,0x01,0x00,0x00,0x18,0x01,0x00,0x00, -0x77,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x3e,0x01,0x00,0x00, -0x72,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0xfc,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x71,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0x30,0x01,0x00,0x00,0x73,0x01,0x00,0x00, -0x72,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x30,0x01,0x00,0x00, -0x74,0x01,0x00,0x00,0x73,0x01,0x00,0x00,0xa9,0x00,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x75,0x01,0x00,0x00, -0x74,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x76,0x01,0x00,0x00,0x75,0x01,0x00,0x00,0x41,0x00,0x08,0x00, -0x3e,0x01,0x00,0x00,0x7a,0x01,0x00,0x00,0x3a,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x18,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x30,0x01,0x00,0x00, -0x7b,0x01,0x00,0x00,0x7a,0x01,0x00,0x00,0xc2,0x00,0x05,0x00, -0x30,0x01,0x00,0x00,0x7c,0x01,0x00,0x00,0x7b,0x01,0x00,0x00, -0xa9,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x7d,0x01,0x00,0x00,0x7c,0x01,0x00,0x00,0x7c,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x7e,0x01,0x00,0x00,0x7d,0x01,0x00,0x00, -0xc7,0x00,0x05,0x00,0x13,0x00,0x00,0x00,0x7f,0x01,0x00,0x00, -0x7e,0x01,0x00,0x00,0x97,0x00,0x00,0x00,0xc4,0x00,0x05,0x00, -0x13,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x7f,0x01,0x00,0x00, -0xa9,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,0x13,0x00,0x00,0x00, -0x81,0x01,0x00,0x00,0x76,0x01,0x00,0x00,0x80,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0x6e,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x82,0x01,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x85,0x01,0x00,0x00,0x18,0x01,0x00,0x00,0x77,0x00,0x00,0x00, -0x41,0x00,0x08,0x00,0x3e,0x01,0x00,0x00,0x86,0x01,0x00,0x00, -0x3a,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0xfc,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x85,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0x30,0x01,0x00,0x00,0x87,0x01,0x00,0x00,0x86,0x01,0x00,0x00, -0xc2,0x00,0x05,0x00,0x30,0x01,0x00,0x00,0x88,0x01,0x00,0x00, -0x87,0x01,0x00,0x00,0xa9,0x00,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x89,0x01,0x00,0x00,0x88,0x01,0x00,0x00, -0x7c,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x8a,0x01,0x00,0x00, -0x89,0x01,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x8d,0x01,0x00,0x00,0x18,0x01,0x00,0x00,0x14,0x01,0x00,0x00, -0x41,0x00,0x08,0x00,0x3e,0x01,0x00,0x00,0x8e,0x01,0x00,0x00, -0x3a,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0xfc,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x8d,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0x30,0x01,0x00,0x00,0x8f,0x01,0x00,0x00,0x8e,0x01,0x00,0x00, -0xc2,0x00,0x05,0x00,0x30,0x01,0x00,0x00,0x90,0x01,0x00,0x00, -0x8f,0x01,0x00,0x00,0x81,0x00,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x91,0x01,0x00,0x00,0x90,0x01,0x00,0x00, -0x7c,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x92,0x01,0x00,0x00, -0x91,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x13,0x00,0x00,0x00, -0x93,0x01,0x00,0x00,0x92,0x01,0x00,0x00,0x97,0x00,0x00,0x00, -0xc4,0x00,0x05,0x00,0x13,0x00,0x00,0x00,0x94,0x01,0x00,0x00, -0x93,0x01,0x00,0x00,0xa9,0x00,0x00,0x00,0xc5,0x00,0x05,0x00, -0x13,0x00,0x00,0x00,0x95,0x01,0x00,0x00,0x8a,0x01,0x00,0x00, -0x94,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x6e,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x6e,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x13,0x00,0x00,0x00,0xc3,0x03,0x00,0x00,0x81,0x01,0x00,0x00, -0x6d,0x01,0x00,0x00,0x95,0x01,0x00,0x00,0x82,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0x55,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x55,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x13,0x00,0x00,0x00, -0xc4,0x03,0x00,0x00,0x68,0x01,0x00,0x00,0x54,0x01,0x00,0x00, -0xc3,0x03,0x00,0x00,0x6e,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0x2f,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x2f,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0x13,0x00,0x00,0x00,0xc5,0x03,0x00,0x00, -0x4f,0x01,0x00,0x00,0x2e,0x01,0x00,0x00,0xc4,0x03,0x00,0x00, -0x55,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0x27,0x01,0x00,0x00, -0x99,0x01,0x00,0x00,0xc5,0x03,0x00,0x00,0x41,0x00,0x07,0x00, -0x9c,0x01,0x00,0x00,0x9d,0x01,0x00,0x00,0x3a,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x97,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x35,0x01,0x00,0x00,0x9e,0x01,0x00,0x00, -0x9d,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0x9f,0x01,0x00,0x00,0x9e,0x01,0x00,0x00,0x72,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0xa1,0x01,0x00,0x00,0x99,0x01,0x00,0x00, -0x82,0x00,0x05,0x00,0x13,0x00,0x00,0x00,0xa3,0x01,0x00,0x00, -0xa1,0x01,0x00,0x00,0xa2,0x01,0x00,0x00,0x6f,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0xa4,0x01,0x00,0x00,0xa3,0x01,0x00,0x00, -0x85,0x00,0x05,0x00,0xc4,0x00,0x00,0x00,0xa5,0x01,0x00,0x00, -0x9f,0x01,0x00,0x00,0xa4,0x01,0x00,0x00,0x41,0x00,0x08,0x00, -0x3e,0x01,0x00,0x00,0xaf,0x01,0x00,0x00,0x3a,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0xd0,0x00,0x00,0x00, -0x0c,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x30,0x01,0x00,0x00, -0xb0,0x01,0x00,0x00,0xaf,0x01,0x00,0x00,0xc2,0x00,0x05,0x00, -0x30,0x01,0x00,0x00,0xb2,0x01,0x00,0x00,0xb0,0x01,0x00,0x00, -0x1f,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xb3,0x01,0x00,0x00,0xb2,0x01,0x00,0x00,0x7c,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0xb4,0x01,0x00,0x00,0xb3,0x01,0x00,0x00, -0xc7,0x00,0x05,0x00,0x13,0x00,0x00,0x00,0xb5,0x01,0x00,0x00, -0xb4,0x01,0x00,0x00,0x97,0x00,0x00,0x00,0x72,0x00,0x04,0x00, -0x27,0x01,0x00,0x00,0xb6,0x01,0x00,0x00,0xb5,0x01,0x00,0x00, -0x72,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0xb7,0x01,0x00,0x00, -0xb6,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x3e,0x01,0x00,0x00, -0xba,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0xfc,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x0b,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0x30,0x01,0x00,0x00,0xbb,0x01,0x00,0x00, -0xba,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xbc,0x01,0x00,0x00,0xbb,0x01,0x00,0x00,0xc7,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xbe,0x01,0x00,0x00,0xbc,0x01,0x00,0x00, -0x26,0x01,0x00,0x00,0xab,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0xbf,0x01,0x00,0x00,0xbe,0x01,0x00,0x00,0x3e,0x00,0x00,0x00, -0xa9,0x00,0x06,0x00,0x13,0x00,0x00,0x00,0xc0,0x01,0x00,0x00, -0xbf,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0xa9,0x00,0x00,0x00, -0x82,0x00,0x05,0x00,0x13,0x00,0x00,0x00,0xc1,0x01,0x00,0x00, -0xb7,0x01,0x00,0x00,0xc0,0x01,0x00,0x00,0x6f,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0xc2,0x01,0x00,0x00,0xc1,0x01,0x00,0x00, -0x85,0x00,0x05,0x00,0xc4,0x00,0x00,0x00,0xc3,0x01,0x00,0x00, -0xa5,0x01,0x00,0x00,0xc2,0x01,0x00,0x00,0x73,0x00,0x04,0x00, -0x35,0x01,0x00,0x00,0xc4,0x01,0x00,0x00,0xc3,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0xc5,0x01,0x00,0x00,0xc6,0x01,0x00,0x00, -0xaa,0x01,0x00,0x00,0xf8,0x00,0x00,0x00,0x3e,0x00,0x03,0x00, -0xc6,0x01,0x00,0x00,0xc4,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xc8,0x01,0x00,0x00,0xf8,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xcc,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,0x39,0x00,0x00,0x00, -0x41,0x00,0x08,0x00,0x3e,0x01,0x00,0x00,0xcd,0x01,0x00,0x00, -0x3a,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0xfc,0x00,0x00,0x00, -0xd0,0x00,0x00,0x00,0xcc,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0x30,0x01,0x00,0x00,0xce,0x01,0x00,0x00,0xcd,0x01,0x00,0x00, -0xc2,0x00,0x05,0x00,0x30,0x01,0x00,0x00,0xd0,0x01,0x00,0x00, -0xce,0x01,0x00,0x00,0x1f,0x01,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xd1,0x01,0x00,0x00,0xd0,0x01,0x00,0x00, -0x7c,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0xd2,0x01,0x00,0x00, -0xd1,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x13,0x00,0x00,0x00, -0xd3,0x01,0x00,0x00,0xd2,0x01,0x00,0x00,0x97,0x00,0x00,0x00, -0x72,0x00,0x04,0x00,0x27,0x01,0x00,0x00,0xd4,0x01,0x00,0x00, -0xd3,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0xd5,0x01,0x00,0x00,0xd4,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xd8,0x01,0x00,0x00,0x0b,0x01,0x00,0x00, -0x39,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x3e,0x01,0x00,0x00, -0xd9,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0xfc,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0xd8,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0x30,0x01,0x00,0x00,0xda,0x01,0x00,0x00, -0xd9,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xdb,0x01,0x00,0x00,0xda,0x01,0x00,0x00,0xc7,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xdd,0x01,0x00,0x00,0xdb,0x01,0x00,0x00, -0x26,0x01,0x00,0x00,0xab,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0xde,0x01,0x00,0x00,0xdd,0x01,0x00,0x00,0x3e,0x00,0x00,0x00, -0xa9,0x00,0x06,0x00,0x13,0x00,0x00,0x00,0xdf,0x01,0x00,0x00, -0xde,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0xa9,0x00,0x00,0x00, -0x82,0x00,0x05,0x00,0x13,0x00,0x00,0x00,0xe0,0x01,0x00,0x00, -0xd5,0x01,0x00,0x00,0xdf,0x01,0x00,0x00,0x6f,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0xe1,0x01,0x00,0x00,0xe0,0x01,0x00,0x00, -0x85,0x00,0x05,0x00,0xc4,0x00,0x00,0x00,0xe2,0x01,0x00,0x00, -0xa5,0x01,0x00,0x00,0xe1,0x01,0x00,0x00,0x73,0x00,0x04,0x00, -0x35,0x01,0x00,0x00,0xe3,0x01,0x00,0x00,0xe2,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0xc5,0x01,0x00,0x00,0xe4,0x01,0x00,0x00, -0xaa,0x01,0x00,0x00,0xc8,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0xe4,0x01,0x00,0x00,0xe3,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xe0,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe0,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xeb,0x01,0x00,0x00, -0xa0,0x03,0x00,0x00,0xe9,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xed,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xed,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xa1,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0xdf,0x00,0x00,0x00, -0x55,0x02,0x00,0x00,0xee,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0xf3,0x01,0x00,0x00,0xa1,0x03,0x00,0x00, -0xa7,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xef,0x01,0x00,0x00, -0xee,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xf3,0x01,0x00,0x00,0xee,0x01,0x00,0x00,0xef,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xee,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xf8,0x01,0x00,0x00,0x7e,0x00,0x00,0x00, -0xa1,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xfb,0x01,0x00,0x00,0xf8,0x01,0x00,0x00,0xab,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfc,0x01,0x00,0x00, -0xfb,0x01,0x00,0x00,0x77,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xfd,0x01,0x00,0x00,0xa8,0x03,0x00,0x00, -0xfc,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xff,0x01,0x00,0x00,0xfd,0x01,0x00,0x00,0x79,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x05,0x02,0x00,0x00, -0xf8,0x01,0x00,0x00,0x04,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x07,0x02,0x00,0x00,0x79,0x00,0x00,0x00, -0x77,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x08,0x02,0x00,0x00,0x05,0x02,0x00,0x00,0x07,0x02,0x00,0x00, -0x41,0x00,0x08,0x00,0x17,0x02,0x00,0x00,0x18,0x02,0x00,0x00, -0x15,0x02,0x00,0x00,0x34,0x00,0x00,0x00,0xff,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0x19,0x02,0x00,0x00,0x18,0x02,0x00,0x00, -0x73,0x00,0x04,0x00,0x35,0x01,0x00,0x00,0x1a,0x02,0x00,0x00, -0x19,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xc5,0x01,0x00,0x00, -0x1b,0x02,0x00,0x00,0x0d,0x02,0x00,0x00,0x08,0x02,0x00,0x00, -0x3e,0x00,0x03,0x00,0x1b,0x02,0x00,0x00,0x1a,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1d,0x02,0x00,0x00, -0x08,0x02,0x00,0x00,0x39,0x00,0x00,0x00,0x41,0x00,0x08,0x00, -0x17,0x02,0x00,0x00,0x1f,0x02,0x00,0x00,0x15,0x02,0x00,0x00, -0x34,0x00,0x00,0x00,0xff,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0x20,0x02,0x00,0x00,0x1f,0x02,0x00,0x00,0x73,0x00,0x04,0x00, -0x35,0x01,0x00,0x00,0x21,0x02,0x00,0x00,0x20,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0xc5,0x01,0x00,0x00,0x22,0x02,0x00,0x00, -0x0d,0x02,0x00,0x00,0x1d,0x02,0x00,0x00,0x3e,0x00,0x03,0x00, -0x22,0x02,0x00,0x00,0x21,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x24,0x02,0x00,0x00,0x08,0x02,0x00,0x00, -0x0c,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x17,0x02,0x00,0x00, -0x26,0x02,0x00,0x00,0x15,0x02,0x00,0x00,0x34,0x00,0x00,0x00, -0xff,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x27,0x02,0x00,0x00, -0x26,0x02,0x00,0x00,0x73,0x00,0x04,0x00,0x35,0x01,0x00,0x00, -0x28,0x02,0x00,0x00,0x27,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0xc5,0x01,0x00,0x00,0x29,0x02,0x00,0x00,0x0d,0x02,0x00,0x00, -0x24,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x29,0x02,0x00,0x00, -0x28,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x2c,0x02,0x00,0x00,0x08,0x02,0x00,0x00,0x2b,0x02,0x00,0x00, -0x41,0x00,0x08,0x00,0x17,0x02,0x00,0x00,0x2e,0x02,0x00,0x00, -0x15,0x02,0x00,0x00,0x34,0x00,0x00,0x00,0xff,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0x2b,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0x2f,0x02,0x00,0x00,0x2e,0x02,0x00,0x00, -0x73,0x00,0x04,0x00,0x35,0x01,0x00,0x00,0x30,0x02,0x00,0x00, -0x2f,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xc5,0x01,0x00,0x00, -0x31,0x02,0x00,0x00,0x0d,0x02,0x00,0x00,0x2c,0x02,0x00,0x00, -0x3e,0x00,0x03,0x00,0x31,0x02,0x00,0x00,0x30,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x33,0x02,0x00,0x00, -0x08,0x02,0x00,0x00,0x14,0x01,0x00,0x00,0x41,0x00,0x08,0x00, -0x17,0x02,0x00,0x00,0x35,0x02,0x00,0x00,0x15,0x02,0x00,0x00, -0x34,0x00,0x00,0x00,0xff,0x01,0x00,0x00,0xd0,0x00,0x00,0x00, -0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0x36,0x02,0x00,0x00,0x35,0x02,0x00,0x00,0x73,0x00,0x04,0x00, -0x35,0x01,0x00,0x00,0x37,0x02,0x00,0x00,0x36,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0xc5,0x01,0x00,0x00,0x38,0x02,0x00,0x00, -0x0d,0x02,0x00,0x00,0x33,0x02,0x00,0x00,0x3e,0x00,0x03,0x00, -0x38,0x02,0x00,0x00,0x37,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3b,0x02,0x00,0x00,0x08,0x02,0x00,0x00, -0x3a,0x02,0x00,0x00,0x41,0x00,0x08,0x00,0x17,0x02,0x00,0x00, -0x3d,0x02,0x00,0x00,0x15,0x02,0x00,0x00,0x34,0x00,0x00,0x00, -0xff,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x3e,0x02,0x00,0x00, -0x3d,0x02,0x00,0x00,0x73,0x00,0x04,0x00,0x35,0x01,0x00,0x00, -0x3f,0x02,0x00,0x00,0x3e,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0xc5,0x01,0x00,0x00,0x40,0x02,0x00,0x00,0x0d,0x02,0x00,0x00, -0x3b,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x40,0x02,0x00,0x00, -0x3f,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x43,0x02,0x00,0x00,0x08,0x02,0x00,0x00,0x42,0x02,0x00,0x00, -0x41,0x00,0x08,0x00,0x17,0x02,0x00,0x00,0x45,0x02,0x00,0x00, -0x15,0x02,0x00,0x00,0x34,0x00,0x00,0x00,0xff,0x01,0x00,0x00, -0xd0,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0x46,0x02,0x00,0x00,0x45,0x02,0x00,0x00, -0x73,0x00,0x04,0x00,0x35,0x01,0x00,0x00,0x47,0x02,0x00,0x00, -0x46,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xc5,0x01,0x00,0x00, -0x48,0x02,0x00,0x00,0x0d,0x02,0x00,0x00,0x43,0x02,0x00,0x00, -0x3e,0x00,0x03,0x00,0x48,0x02,0x00,0x00,0x47,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4b,0x02,0x00,0x00, -0x08,0x02,0x00,0x00,0x4a,0x02,0x00,0x00,0x41,0x00,0x08,0x00, -0x17,0x02,0x00,0x00,0x4d,0x02,0x00,0x00,0x15,0x02,0x00,0x00, -0x34,0x00,0x00,0x00,0xff,0x01,0x00,0x00,0xd0,0x00,0x00,0x00, -0x2b,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0x4e,0x02,0x00,0x00,0x4d,0x02,0x00,0x00,0x73,0x00,0x04,0x00, -0x35,0x01,0x00,0x00,0x4f,0x02,0x00,0x00,0x4e,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0xc5,0x01,0x00,0x00,0x50,0x02,0x00,0x00, -0x0d,0x02,0x00,0x00,0x4b,0x02,0x00,0x00,0x3e,0x00,0x03,0x00, -0x50,0x02,0x00,0x00,0x4f,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x55,0x02,0x00,0x00,0xa1,0x03,0x00,0x00, -0x53,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xed,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xef,0x01,0x00,0x00,0xe0,0x00,0x04,0x00, -0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x56,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x59,0x02,0x00,0x00, -0xa4,0x03,0x00,0x00,0x57,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x5c,0x02,0x00,0x00,0xa8,0x03,0x00,0x00, -0x5a,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x5e,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x5e,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xaa,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0xef,0x01,0x00,0x00,0x08,0x03,0x00,0x00,0x61,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x64,0x02,0x00,0x00, -0xaa,0x03,0x00,0x00,0x6c,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x60,0x02,0x00,0x00,0x61,0x02,0x00,0x00,0x00,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x64,0x02,0x00,0x00,0x5f,0x02,0x00,0x00, -0x60,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x5f,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x66,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x66,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xae,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0x5f,0x02,0x00,0x00, -0x92,0x02,0x00,0x00,0x69,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0x6c,0x02,0x00,0x00,0xae,0x03,0x00,0x00, -0x60,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x68,0x02,0x00,0x00, -0x69,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x6c,0x02,0x00,0x00,0x67,0x02,0x00,0x00,0x68,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x67,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x6e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x6e,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xc0,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0x67,0x02,0x00,0x00,0x90,0x02,0x00,0x00, -0x6f,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0x74,0x02,0x00,0x00,0xc0,0x03,0x00,0x00,0x62,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x70,0x02,0x00,0x00,0x6f,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x74,0x02,0x00,0x00, -0x6f,0x02,0x00,0x00,0x70,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x6f,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x7a,0x02,0x00,0x00,0xae,0x03,0x00,0x00,0x62,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7c,0x02,0x00,0x00, -0x7a,0x02,0x00,0x00,0xc0,0x03,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x7e,0x02,0x00,0x00,0x55,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x80,0x02,0x00,0x00,0xae,0x03,0x00,0x00,0x61,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x81,0x02,0x00,0x00, -0x7e,0x02,0x00,0x00,0x80,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x83,0x02,0x00,0x00,0x64,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x84,0x02,0x00,0x00,0x81,0x02,0x00,0x00,0x83,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x86,0x02,0x00,0x00, -0x84,0x02,0x00,0x00,0xc0,0x03,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x88,0x02,0x00,0x00,0x86,0x02,0x00,0x00, -0x87,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x8a,0x02,0x00,0x00,0x88,0x02,0x00,0x00,0xaa,0x03,0x00,0x00, -0x41,0x00,0x05,0x00,0xc5,0x01,0x00,0x00,0x8b,0x02,0x00,0x00, -0xaa,0x01,0x00,0x00,0x8a,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0x35,0x01,0x00,0x00,0x8c,0x02,0x00,0x00,0x8b,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0x8d,0x02,0x00,0x00,0x8e,0x02,0x00,0x00, -0x78,0x02,0x00,0x00,0x7c,0x02,0x00,0x00,0x3e,0x00,0x03,0x00, -0x8e,0x02,0x00,0x00,0x8c,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x90,0x02,0x00,0x00,0xc0,0x03,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x6e,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x70,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x69,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x69,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x92,0x02,0x00,0x00, -0xae,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x66,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x68,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x94,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x94,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xaf,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0x68,0x02,0x00,0x00, -0xc0,0x02,0x00,0x00,0x97,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0x9a,0x02,0x00,0x00,0xaf,0x03,0x00,0x00, -0xbf,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x96,0x02,0x00,0x00, -0x97,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x9a,0x02,0x00,0x00,0x95,0x02,0x00,0x00,0x96,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x95,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x9c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x9c,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xbd,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0x95,0x02,0x00,0x00,0xbe,0x02,0x00,0x00, -0x9d,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0xa2,0x02,0x00,0x00,0xbd,0x03,0x00,0x00,0xbc,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x9e,0x02,0x00,0x00,0x9d,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xa2,0x02,0x00,0x00, -0x9d,0x02,0x00,0x00,0x9e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x9d,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa8,0x02,0x00,0x00,0xaf,0x03,0x00,0x00,0xbc,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xaa,0x02,0x00,0x00, -0xa8,0x02,0x00,0x00,0xbd,0x03,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xac,0x02,0x00,0x00,0x59,0x00,0x00,0x00, -0xb9,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xaf,0x02,0x00,0x00,0xaf,0x03,0x00,0x00,0xae,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb0,0x02,0x00,0x00, -0xac,0x02,0x00,0x00,0xaf,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xb2,0x02,0x00,0x00,0x68,0x00,0x00,0x00, -0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xb3,0x02,0x00,0x00,0xb0,0x02,0x00,0x00,0xb2,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb5,0x02,0x00,0x00, -0xb3,0x02,0x00,0x00,0xbd,0x03,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xb7,0x02,0x00,0x00,0xb5,0x02,0x00,0x00, -0xb6,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xb9,0x02,0x00,0x00,0xb7,0x02,0x00,0x00,0xaa,0x03,0x00,0x00, -0x41,0x00,0x05,0x00,0xc5,0x01,0x00,0x00,0xba,0x02,0x00,0x00, -0x0d,0x02,0x00,0x00,0xb9,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0x35,0x01,0x00,0x00,0xbb,0x02,0x00,0x00,0xba,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0x8d,0x02,0x00,0x00,0xbc,0x02,0x00,0x00, -0xa6,0x02,0x00,0x00,0xaa,0x02,0x00,0x00,0x3e,0x00,0x03,0x00, -0xbc,0x02,0x00,0x00,0xbb,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xbe,0x02,0x00,0x00,0xbd,0x03,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x9c,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x9e,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x97,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x97,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc0,0x02,0x00,0x00, -0xaf,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x94,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x96,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0xc2,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xc2,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xb0,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0x96,0x02,0x00,0x00, -0x06,0x03,0x00,0x00,0xc5,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0xc8,0x02,0x00,0x00,0xb0,0x03,0x00,0x00, -0xbf,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xc4,0x02,0x00,0x00, -0xc5,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xc8,0x02,0x00,0x00,0xc3,0x02,0x00,0x00,0xc4,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xc3,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0xca,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xca,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xb4,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0xc3,0x02,0x00,0x00,0x04,0x03,0x00,0x00, -0xcd,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0xd0,0x02,0x00,0x00,0xb4,0x03,0x00,0x00,0x60,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xcc,0x02,0x00,0x00,0xcd,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xd0,0x02,0x00,0x00, -0xcb,0x02,0x00,0x00,0xcc,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xcb,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xd2,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xd2,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xb6,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0xcb,0x02,0x00,0x00,0x02,0x03,0x00,0x00,0xd5,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xd8,0x02,0x00,0x00, -0xb6,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xd4,0x02,0x00,0x00,0xd5,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xd8,0x02,0x00,0x00,0xd3,0x02,0x00,0x00, -0xd4,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xd3,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0xda,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xda,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xb8,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0xd3,0x02,0x00,0x00, -0x00,0x03,0x00,0x00,0xdb,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0xe0,0x02,0x00,0x00,0xb8,0x03,0x00,0x00, -0x62,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xdc,0x02,0x00,0x00, -0xdb,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xe0,0x02,0x00,0x00,0xdb,0x02,0x00,0x00,0xdc,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xdb,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xe2,0x02,0x00,0x00,0xb0,0x03,0x00,0x00, -0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xe4,0x02,0x00,0x00,0xe2,0x02,0x00,0x00,0xb6,0x03,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe6,0x02,0x00,0x00, -0xe4,0x02,0x00,0x00,0xe5,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xe8,0x02,0x00,0x00,0xb4,0x03,0x00,0x00, -0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xe9,0x02,0x00,0x00,0xe6,0x02,0x00,0x00,0xe8,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xeb,0x02,0x00,0x00, -0xe9,0x02,0x00,0x00,0xb8,0x03,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xef,0x02,0x00,0x00,0xe8,0x02,0x00,0x00, -0xb8,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x8d,0x02,0x00,0x00, -0xf0,0x02,0x00,0x00,0x78,0x02,0x00,0x00,0xef,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0x35,0x01,0x00,0x00,0xf1,0x02,0x00,0x00, -0xf0,0x02,0x00,0x00,0x73,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0xf2,0x02,0x00,0x00,0xf1,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0x8d,0x02,0x00,0x00,0xf7,0x02,0x00,0x00,0xa6,0x02,0x00,0x00, -0xe4,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x35,0x01,0x00,0x00, -0xf8,0x02,0x00,0x00,0xf7,0x02,0x00,0x00,0x73,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0xf9,0x02,0x00,0x00,0xf8,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,0xfb,0x02,0x00,0x00, -0xca,0x00,0x00,0x00,0xeb,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0xfc,0x02,0x00,0x00,0xfb,0x02,0x00,0x00, -0x0c,0x00,0x08,0x00,0xc4,0x00,0x00,0x00,0xfd,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0xf2,0x02,0x00,0x00, -0xf9,0x02,0x00,0x00,0xfc,0x02,0x00,0x00,0x3e,0x00,0x03,0x00, -0xfb,0x02,0x00,0x00,0xfd,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0xb8,0x03,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xda,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xdc,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0xd5,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xd5,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x02,0x03,0x00,0x00, -0xb6,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xd2,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xd4,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0xcd,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xcd,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x04,0x03,0x00,0x00,0xb4,0x03,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xca,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xcc,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xc5,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xc5,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x06,0x03,0x00,0x00,0xb0,0x03,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xc2,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xc4,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x61,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x61,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x08,0x03,0x00,0x00, -0xaa,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x5e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x60,0x02,0x00,0x00, -0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x56,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xd7,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xd7,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x0a,0x03,0x00,0x00,0x90,0x03,0x00,0x00, -0x6c,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd4,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xd6,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x0f,0x03,0x00,0x00,0x55,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x10,0x03,0x00,0x00,0x96,0x00,0x00,0x00,0x0f,0x03,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x15,0x03,0x00,0x00, -0x59,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x16,0x03,0x00,0x00,0xa8,0x00,0x00,0x00, -0x15,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x1b,0x03,0x00,0x00,0x12,0x00,0x00,0x00,0x1a,0x03,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x1c,0x03,0x00,0x00, -0x1b,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x1d,0x03,0x00,0x00,0x0f,0x00,0x00,0x00,0x1c,0x03,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x21,0x03,0x00,0x00, -0x47,0x00,0x00,0x00,0x1c,0x03,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0x23,0x03,0x00,0x00,0x22,0x03,0x00,0x00, -0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x24,0x03,0x00,0x00,0x23,0x03,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x25,0x03,0x00,0x00,0x21,0x03,0x00,0x00, -0x24,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x26,0x03,0x00,0x00,0x1d,0x03,0x00,0x00,0x25,0x03,0x00,0x00, -0xf9,0x00,0x02,0x00,0x28,0x03,0x00,0x00,0xf8,0x00,0x02,0x00, -0x28,0x03,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x91,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0xd6,0x00,0x00,0x00, -0x8e,0x03,0x00,0x00,0x2b,0x03,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0x2e,0x03,0x00,0x00,0x91,0x03,0x00,0x00, -0xbf,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x2a,0x03,0x00,0x00, -0x2b,0x03,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x2e,0x03,0x00,0x00,0x29,0x03,0x00,0x00,0x2a,0x03,0x00,0x00, -0xf8,0x00,0x02,0x00,0x29,0x03,0x00,0x00,0xf9,0x00,0x02,0x00, -0x30,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x30,0x03,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x92,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0x29,0x03,0x00,0x00,0x8c,0x03,0x00,0x00, -0x33,0x03,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0x36,0x03,0x00,0x00,0x92,0x03,0x00,0x00,0x60,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x32,0x03,0x00,0x00,0x33,0x03,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x36,0x03,0x00,0x00, -0x31,0x03,0x00,0x00,0x32,0x03,0x00,0x00,0xf8,0x00,0x02,0x00, -0x31,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x3a,0x03,0x00,0x00,0x92,0x03,0x00,0x00,0x61,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3b,0x03,0x00,0x00, -0x10,0x03,0x00,0x00,0x3a,0x03,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3d,0x03,0x00,0x00,0x64,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x3e,0x03,0x00,0x00,0x3b,0x03,0x00,0x00,0x3d,0x03,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x42,0x03,0x00,0x00, -0x91,0x03,0x00,0x00,0xae,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x43,0x03,0x00,0x00,0x16,0x03,0x00,0x00, -0x42,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x45,0x03,0x00,0x00,0x68,0x00,0x00,0x00,0xbc,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x46,0x03,0x00,0x00, -0x43,0x03,0x00,0x00,0x45,0x03,0x00,0x00,0xf9,0x00,0x02,0x00, -0x48,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x48,0x03,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x94,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0x31,0x03,0x00,0x00,0x8a,0x03,0x00,0x00, -0x4b,0x03,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0x4e,0x03,0x00,0x00,0x94,0x03,0x00,0x00,0xbc,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x4a,0x03,0x00,0x00,0x4b,0x03,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x4e,0x03,0x00,0x00, -0x49,0x03,0x00,0x00,0x4a,0x03,0x00,0x00,0xf8,0x00,0x02,0x00, -0x49,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,0x50,0x03,0x00,0x00, -0xf8,0x00,0x02,0x00,0x50,0x03,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x96,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0x49,0x03,0x00,0x00,0x88,0x03,0x00,0x00,0x53,0x03,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x56,0x03,0x00,0x00, -0x96,0x03,0x00,0x00,0x62,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x52,0x03,0x00,0x00,0x53,0x03,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x56,0x03,0x00,0x00,0x51,0x03,0x00,0x00, -0x52,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x51,0x03,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x59,0x03,0x00,0x00, -0x3e,0x03,0x00,0x00,0x96,0x03,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0x5c,0x03,0x00,0x00,0x59,0x03,0x00,0x00, -0x36,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x5e,0x03,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x5c,0x03,0x00,0x00, -0x5d,0x03,0x00,0x00,0x5e,0x03,0x00,0x00,0xf8,0x00,0x02,0x00, -0x5d,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x61,0x03,0x00,0x00,0x46,0x03,0x00,0x00,0x94,0x03,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x62,0x03,0x00,0x00, -0x12,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x63,0x03,0x00,0x00,0x62,0x03,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x64,0x03,0x00,0x00, -0x61,0x03,0x00,0x00,0x63,0x03,0x00,0x00,0xf9,0x00,0x02,0x00, -0x5e,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x5e,0x03,0x00,0x00, -0xf5,0x00,0x07,0x00,0xc2,0x00,0x00,0x00,0x65,0x03,0x00,0x00, -0x5c,0x03,0x00,0x00,0x51,0x03,0x00,0x00,0x64,0x03,0x00,0x00, -0x5d,0x03,0x00,0x00,0xf7,0x00,0x03,0x00,0x67,0x03,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x65,0x03,0x00,0x00, -0x66,0x03,0x00,0x00,0x67,0x03,0x00,0x00,0xf8,0x00,0x02,0x00, -0x66,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x6f,0x03,0x00,0x00,0x46,0x03,0x00,0x00,0x94,0x03,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x71,0x03,0x00,0x00, -0x12,0x00,0x00,0x00,0x70,0x03,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x72,0x03,0x00,0x00,0x71,0x03,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x73,0x03,0x00,0x00, -0x6f,0x03,0x00,0x00,0x72,0x03,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x74,0x03,0x00,0x00,0x26,0x03,0x00,0x00, -0x73,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x76,0x03,0x00,0x00,0x74,0x03,0x00,0x00,0x3e,0x03,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x78,0x03,0x00,0x00, -0x76,0x03,0x00,0x00,0x96,0x03,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x7a,0x03,0x00,0x00,0x91,0x03,0x00,0x00, -0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x7c,0x03,0x00,0x00,0x7a,0x03,0x00,0x00,0x94,0x03,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7e,0x03,0x00,0x00, -0x7c,0x03,0x00,0x00,0x7d,0x03,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x80,0x03,0x00,0x00,0x92,0x03,0x00,0x00, -0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x81,0x03,0x00,0x00,0x7e,0x03,0x00,0x00,0x80,0x03,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x83,0x03,0x00,0x00, -0x81,0x03,0x00,0x00,0x96,0x03,0x00,0x00,0x41,0x00,0x05,0x00, -0xcd,0x00,0x00,0x00,0x84,0x03,0x00,0x00,0xca,0x00,0x00,0x00, -0x83,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0x85,0x03,0x00,0x00,0x84,0x03,0x00,0x00,0x41,0x00,0x06,0x00, -0x17,0x02,0x00,0x00,0x86,0x03,0x00,0x00,0x6b,0x03,0x00,0x00, -0x34,0x00,0x00,0x00,0x78,0x03,0x00,0x00,0x3e,0x00,0x03,0x00, -0x86,0x03,0x00,0x00,0x85,0x03,0x00,0x00,0xf9,0x00,0x02,0x00, -0x67,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x67,0x03,0x00,0x00, -0xf9,0x00,0x02,0x00,0x53,0x03,0x00,0x00,0xf8,0x00,0x02,0x00, -0x53,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x88,0x03,0x00,0x00,0x96,0x03,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x50,0x03,0x00,0x00,0xf8,0x00,0x02,0x00, -0x52,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,0x4b,0x03,0x00,0x00, -0xf8,0x00,0x02,0x00,0x4b,0x03,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x8a,0x03,0x00,0x00,0x94,0x03,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x48,0x03,0x00,0x00, -0xf8,0x00,0x02,0x00,0x4a,0x03,0x00,0x00,0xf9,0x00,0x02,0x00, -0x33,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x33,0x03,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8c,0x03,0x00,0x00, -0x92,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x30,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x32,0x03,0x00,0x00, -0xf9,0x00,0x02,0x00,0x2b,0x03,0x00,0x00,0xf8,0x00,0x02,0x00, -0x2b,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x8e,0x03,0x00,0x00,0x91,0x03,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x28,0x03,0x00,0x00,0xf8,0x00,0x02,0x00, -0x2a,0x03,0x00,0x00,0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00, - -}; -const uint64_t matmul_q3_k_f32_aligned_len = 13704; - -unsigned char matmul_q3_k_f32_aligned_fp32_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0x9d,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x27,0x00,0x00,0x00, -0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00, -0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00, -0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30, -0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x0f,0x00,0x0f,0x00,0x05,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x4c,0x00,0x00,0x00,0x3a,0x01,0x00,0x00,0xaa,0x01,0x00,0x00, -0x0b,0x02,0x00,0x00,0x12,0x02,0x00,0x00,0xf9,0x02,0x00,0x00, -0x42,0x03,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x05,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x30,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x0d,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0x10,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x37,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x3d,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x4c,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x4f,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x53,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x60,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x62,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x6c,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xa7,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xb9,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xbc,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x31,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x32,0x01,0x00,0x00,0x06,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x34,0x01,0x00,0x00, -0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x36,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x36,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x36,0x01,0x00,0x00,0x02,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x36,0x01,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x37,0x01,0x00,0x00, -0x06,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0x38,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x38,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x38,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x3a,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x3a,0x01,0x00,0x00,0x21,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xe3,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xe4,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x0f,0x02,0x00,0x00,0x06,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x10,0x02,0x00,0x00, -0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x10,0x02,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x12,0x02,0x00,0x00, -0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x12,0x02,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xf9,0x02,0x00,0x00,0x0b,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x3f,0x03,0x00,0x00, -0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0x40,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x40,0x03,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x40,0x03,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x42,0x03,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x42,0x03,0x00,0x00,0x21,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00, -0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x1e,0x00,0x10,0x00,0x10,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x11,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x11,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x15,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0x0a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x27,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x3e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x61,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x63,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x61,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x67,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x61,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x72,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x78,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x77,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x7d,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x77,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x81,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x97,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0xa2,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0xa9,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xb8,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xb9,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x4f,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbd,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0xbc,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbe,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbf,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0xbe,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc0,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0xbf,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc1,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0xbc,0x00,0x00,0x00, -0x14,0x00,0x02,0x00,0xc2,0x00,0x00,0x00,0x16,0x00,0x03,0x00, -0xc4,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xc5,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xc6,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x1c,0x00,0x04,0x00, -0xc8,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0xc7,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0xc9,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0xc8,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0xcc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0xcd,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xc4,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0xd0,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xf4,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xfb,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x02,0x01,0x00,0x00,0x40,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x06,0x01,0x00,0x00, -0x20,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x09,0x01,0x00,0x00,0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x17,0x01,0x00,0x00,0x08,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x27,0x01,0x00,0x00,0x08,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x30,0x01,0x00,0x00, -0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1c,0x00,0x04,0x00, -0x31,0x01,0x00,0x00,0x30,0x01,0x00,0x00,0x06,0x01,0x00,0x00, -0x1c,0x00,0x04,0x00,0x32,0x01,0x00,0x00,0x30,0x01,0x00,0x00, -0x02,0x01,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x33,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x1c,0x00,0x04,0x00, -0x34,0x01,0x00,0x00,0x30,0x01,0x00,0x00,0x33,0x01,0x00,0x00, -0x16,0x00,0x03,0x00,0x35,0x01,0x00,0x00,0x10,0x00,0x00,0x00, -0x1e,0x00,0x06,0x00,0x36,0x01,0x00,0x00,0x31,0x01,0x00,0x00, -0x32,0x01,0x00,0x00,0x34,0x01,0x00,0x00,0x35,0x01,0x00,0x00, -0x1d,0x00,0x03,0x00,0x37,0x01,0x00,0x00,0x36,0x01,0x00,0x00, -0x1e,0x00,0x03,0x00,0x38,0x01,0x00,0x00,0x37,0x01,0x00,0x00, -0x20,0x00,0x04,0x00,0x39,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x38,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x39,0x01,0x00,0x00, -0x3a,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x3e,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x30,0x01,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x43,0x01,0x00,0x00, -0x0f,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x9c,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x35,0x01,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0xa2,0x01,0x00,0x00,0x20,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xa6,0x01,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xa7,0x01,0x00,0x00, -0x84,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0xa6,0x01,0x00,0x00, -0x1c,0x00,0x04,0x00,0xa8,0x01,0x00,0x00,0xc4,0x00,0x00,0x00, -0xa7,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0xa9,0x01,0x00,0x00, -0x04,0x00,0x00,0x00,0xa8,0x01,0x00,0x00,0x3b,0x00,0x04,0x00, -0xa9,0x01,0x00,0x00,0xaa,0x01,0x00,0x00,0x04,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0xc4,0x01,0x00,0x00,0x04,0x00,0x00,0x00, -0xc4,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xe3,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00, -0x09,0x00,0x00,0x00,0xe4,0x01,0x00,0x00,0xe3,0x01,0x00,0x00, -0x39,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xe5,0x01,0x00,0x00,0x51,0x00,0x00,0x00, -0xe4,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xe6,0x01,0x00,0x00,0x84,0x00,0x00,0x00, -0xe5,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xe7,0x01,0x00,0x00,0x86,0x00,0x00,0x00, -0xe6,0x01,0x00,0x00,0x6c,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x02,0x02,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x07,0x02,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x08,0x02,0x00,0x00,0x84,0x00,0x00,0x00, -0xa7,0x00,0x00,0x00,0x07,0x02,0x00,0x00,0x1c,0x00,0x04,0x00, -0x09,0x02,0x00,0x00,0xc4,0x00,0x00,0x00,0x08,0x02,0x00,0x00, -0x20,0x00,0x04,0x00,0x0a,0x02,0x00,0x00,0x04,0x00,0x00,0x00, -0x09,0x02,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x02,0x00,0x00, -0x0b,0x02,0x00,0x00,0x04,0x00,0x00,0x00,0x17,0x00,0x04,0x00, -0x0e,0x02,0x00,0x00,0xc4,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x1d,0x00,0x03,0x00,0x0f,0x02,0x00,0x00,0x0e,0x02,0x00,0x00, -0x1e,0x00,0x03,0x00,0x10,0x02,0x00,0x00,0x0f,0x02,0x00,0x00, -0x20,0x00,0x04,0x00,0x11,0x02,0x00,0x00,0x0c,0x00,0x00,0x00, -0x10,0x02,0x00,0x00,0x3b,0x00,0x04,0x00,0x11,0x02,0x00,0x00, -0x12,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x14,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0xc4,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x25,0x02,0x00,0x00, -0x03,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x2b,0x02,0x00,0x00,0x51,0x00,0x00,0x00,0xe4,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x2c,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x2b,0x02,0x00,0x00, -0x77,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x2d,0x02,0x00,0x00,0x86,0x00,0x00,0x00,0x2c,0x02,0x00,0x00, -0x6c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x30,0x02,0x00,0x00,0x08,0x01,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x31,0x02,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x34,0x02,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x4f,0x02,0x00,0x00,0x84,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x1c,0x00,0x04,0x00, -0x50,0x02,0x00,0x00,0xc4,0x00,0x00,0x00,0x4f,0x02,0x00,0x00, -0x20,0x00,0x04,0x00,0x51,0x02,0x00,0x00,0x07,0x00,0x00,0x00, -0x50,0x02,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x61,0x02,0x00,0x00,0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x7c,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0xbf,0x00,0x00,0x00, -0xbc,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x7d,0x02,0x00,0x00, -0xc4,0x00,0x00,0x00,0x7c,0x02,0x00,0x00,0x20,0x00,0x04,0x00, -0x7e,0x02,0x00,0x00,0x07,0x00,0x00,0x00,0x7d,0x02,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x87,0x02,0x00,0x00, -0x86,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0xbf,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x8f,0x02,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbe,0x02,0x00,0x00, -0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0xf1,0x02,0x00,0x00, -0x0d,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0xf9,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x1d,0x00,0x03,0x00, -0x3f,0x03,0x00,0x00,0xc4,0x00,0x00,0x00,0x1e,0x00,0x03,0x00, -0x40,0x03,0x00,0x00,0x3f,0x03,0x00,0x00,0x20,0x00,0x04,0x00, -0x41,0x03,0x00,0x00,0x0c,0x00,0x00,0x00,0x40,0x03,0x00,0x00, -0x3b,0x00,0x04,0x00,0x41,0x03,0x00,0x00,0x42,0x03,0x00,0x00, -0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x47,0x03,0x00,0x00,0x05,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x54,0x03,0x00,0x00,0x84,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x36,0x00,0x05,0x00, -0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0xc9,0x00,0x00,0x00,0xca,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x51,0x02,0x00,0x00, -0x52,0x02,0x00,0x00,0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x7e,0x02,0x00,0x00,0x7f,0x02,0x00,0x00,0x07,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x16,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x16,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x17,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x24,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2a,0x00,0x00,0x00, -0x1e,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x2d,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x2f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x24,0x00,0x00,0x00, -0x2f,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x2a,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x35,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x35,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x38,0x00,0x00,0x00, -0x36,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x82,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x38,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x3b,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x3f,0x00,0x00,0x00, -0x3d,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x3f,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x42,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x3b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x49,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4a,0x00,0x00,0x00, -0x49,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x4d,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x3e,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x4d,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x50,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00, -0x50,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x50,0x00,0x00,0x00, -0x58,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x5d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x64,0x00,0x00,0x00, -0x5d,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x5d,0x00,0x00,0x00, -0x67,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x6e,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x6d,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x73,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x72,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x78,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x7e,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x7d,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x82,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x82,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x47,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x88,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0x47,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x8d,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0x83,0x00,0x00,0x00, -0x0c,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x8e,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x26,0x00,0x00,0x00,0x88,0x00,0x00,0x00, -0x8d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x92,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x91,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x93,0x00,0x00,0x00, -0x92,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x94,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x93,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x96,0x00,0x00,0x00, -0x42,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x97,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x99,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x96,0x00,0x00,0x00, -0x99,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9b,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x9a,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9d,0x00,0x00,0x00, -0x9b,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,0x9d,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0xa3,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0xa2,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00, -0xa3,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa5,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0xa4,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa8,0x00,0x00,0x00, -0x4a,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0xa9,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xab,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0xa8,0x00,0x00,0x00, -0xab,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xad,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,0xac,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xaf,0x00,0x00,0x00, -0xad,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0xaf,0x00,0x00,0x00, -0x77,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb2,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x66,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0x05,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0xb3,0x00,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xc3,0x00,0x00,0x00, -0x66,0x03,0x00,0x00,0xc1,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xb4,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0xb3,0x00,0x00,0x00, -0xb4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb3,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,0xce,0x00,0x00,0x00, -0xca,0x00,0x00,0x00,0x66,0x03,0x00,0x00,0x3e,0x00,0x03,0x00, -0xce,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0x66,0x03,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb2,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xb4,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xd4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd4,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x7f,0x03,0x00,0x00, -0xb0,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0x36,0x02,0x00,0x00, -0xd7,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x7b,0x03,0x00,0x00,0x9e,0x00,0x00,0x00,0xb4,0x00,0x00,0x00, -0x33,0x02,0x00,0x00,0xd7,0x00,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x67,0x03,0x00,0x00,0x84,0x00,0x00,0x00, -0xb4,0x00,0x00,0x00,0xe1,0x02,0x00,0x00,0xd7,0x00,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xdb,0x00,0x00,0x00, -0x67,0x03,0x00,0x00,0x8e,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xd6,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xdb,0x00,0x00,0x00,0xd5,0x00,0x00,0x00, -0xd6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd5,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xdd,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x77,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0xd5,0x00,0x00,0x00, -0xe9,0x01,0x00,0x00,0xe0,0x00,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0xe3,0x00,0x00,0x00,0x77,0x03,0x00,0x00, -0x37,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xdf,0x00,0x00,0x00, -0xe0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xe3,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0xdf,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0x73,0x00,0x00,0x00, -0x77,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xeb,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0x99,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xec,0x00,0x00,0x00, -0xeb,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xed,0x00,0x00,0x00,0x7b,0x03,0x00,0x00, -0xec,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xef,0x00,0x00,0x00,0xed,0x00,0x00,0x00,0x6e,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf5,0x00,0x00,0x00, -0xe8,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,0x6e,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xf8,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,0xf7,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfc,0x00,0x00,0x00, -0xef,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xef,0x00,0x00,0x00, -0xfb,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x03,0x01,0x00,0x00,0xff,0x00,0x00,0x00,0x02,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x07,0x01,0x00,0x00, -0x03,0x01,0x00,0x00,0x06,0x01,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x0a,0x01,0x00,0x00,0xff,0x00,0x00,0x00, -0x09,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x0b,0x01,0x00,0x00,0x0a,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0c,0x01,0x00,0x00, -0x07,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x18,0x01,0x00,0x00,0xff,0x00,0x00,0x00, -0x17,0x01,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x1b,0x01,0x00,0x00,0xff,0x00,0x00,0x00,0x02,0x01,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1c,0x01,0x00,0x00, -0x1b,0x01,0x00,0x00,0x09,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x1f,0x01,0x00,0x00,0x1c,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x22,0x01,0x00,0x00,0x77,0x00,0x00,0x00,0x03,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x24,0x01,0x00,0x00, -0x22,0x01,0x00,0x00,0x1c,0x01,0x00,0x00,0xc4,0x00,0x05,0x00, -0x13,0x00,0x00,0x00,0x25,0x01,0x00,0x00,0xd0,0x00,0x00,0x00, -0x24,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x26,0x01,0x00,0x00,0x25,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0x2b,0x01,0x00,0x00,0x18,0x01,0x00,0x00, -0x77,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x2f,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x2b,0x01,0x00,0x00, -0x2e,0x01,0x00,0x00,0x50,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x2e,0x01,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x3d,0x01,0x00,0x00,0x18,0x01,0x00,0x00,0x3e,0x00,0x00,0x00, -0x41,0x00,0x08,0x00,0x3e,0x01,0x00,0x00,0x3f,0x01,0x00,0x00, -0x3a,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0xfc,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x3d,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0x30,0x01,0x00,0x00,0x40,0x01,0x00,0x00,0x3f,0x01,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x41,0x01,0x00,0x00, -0x40,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x42,0x01,0x00,0x00,0x41,0x01,0x00,0x00,0xc7,0x00,0x05,0x00, -0x13,0x00,0x00,0x00,0x44,0x01,0x00,0x00,0x42,0x01,0x00,0x00, -0x43,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x47,0x01,0x00,0x00,0x18,0x01,0x00,0x00,0x17,0x01,0x00,0x00, -0x41,0x00,0x08,0x00,0x3e,0x01,0x00,0x00,0x48,0x01,0x00,0x00, -0x3a,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0xfc,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x47,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0x30,0x01,0x00,0x00,0x49,0x01,0x00,0x00,0x48,0x01,0x00,0x00, -0xc2,0x00,0x05,0x00,0x30,0x01,0x00,0x00,0x4a,0x01,0x00,0x00, -0x49,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x4b,0x01,0x00,0x00,0x4a,0x01,0x00,0x00, -0x7c,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x4c,0x01,0x00,0x00, -0x4b,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x13,0x00,0x00,0x00, -0x4d,0x01,0x00,0x00,0x4c,0x01,0x00,0x00,0x97,0x00,0x00,0x00, -0xc4,0x00,0x05,0x00,0x13,0x00,0x00,0x00,0x4e,0x01,0x00,0x00, -0x4d,0x01,0x00,0x00,0xa9,0x00,0x00,0x00,0xc5,0x00,0x05,0x00, -0x13,0x00,0x00,0x00,0x4f,0x01,0x00,0x00,0x44,0x01,0x00,0x00, -0x4e,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x2f,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x50,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0x52,0x01,0x00,0x00,0x18,0x01,0x00,0x00, -0x17,0x01,0x00,0x00,0xf7,0x00,0x03,0x00,0x55,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x52,0x01,0x00,0x00, -0x54,0x01,0x00,0x00,0x69,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x54,0x01,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x58,0x01,0x00,0x00,0x18,0x01,0x00,0x00,0x3e,0x00,0x00,0x00, -0x41,0x00,0x08,0x00,0x3e,0x01,0x00,0x00,0x59,0x01,0x00,0x00, -0x3a,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0xfc,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x58,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0x30,0x01,0x00,0x00,0x5a,0x01,0x00,0x00,0x59,0x01,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x5b,0x01,0x00,0x00, -0x5a,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x5c,0x01,0x00,0x00,0x5b,0x01,0x00,0x00,0xc7,0x00,0x05,0x00, -0x13,0x00,0x00,0x00,0x5d,0x01,0x00,0x00,0x5c,0x01,0x00,0x00, -0x43,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x60,0x01,0x00,0x00,0x18,0x01,0x00,0x00,0x77,0x00,0x00,0x00, -0x41,0x00,0x08,0x00,0x3e,0x01,0x00,0x00,0x61,0x01,0x00,0x00, -0x3a,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0xfc,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x60,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0x30,0x01,0x00,0x00,0x62,0x01,0x00,0x00,0x61,0x01,0x00,0x00, -0xc2,0x00,0x05,0x00,0x30,0x01,0x00,0x00,0x63,0x01,0x00,0x00, -0x62,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x64,0x01,0x00,0x00,0x63,0x01,0x00,0x00, -0x7c,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x65,0x01,0x00,0x00, -0x64,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x13,0x00,0x00,0x00, -0x66,0x01,0x00,0x00,0x65,0x01,0x00,0x00,0x97,0x00,0x00,0x00, -0xc4,0x00,0x05,0x00,0x13,0x00,0x00,0x00,0x67,0x01,0x00,0x00, -0x66,0x01,0x00,0x00,0xa9,0x00,0x00,0x00,0xc5,0x00,0x05,0x00, -0x13,0x00,0x00,0x00,0x68,0x01,0x00,0x00,0x5d,0x01,0x00,0x00, -0x67,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x55,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x69,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0x6b,0x01,0x00,0x00,0x18,0x01,0x00,0x00, -0x33,0x01,0x00,0x00,0xf7,0x00,0x03,0x00,0x6e,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x6b,0x01,0x00,0x00, -0x6d,0x01,0x00,0x00,0x82,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x6d,0x01,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x71,0x01,0x00,0x00,0x18,0x01,0x00,0x00,0x17,0x01,0x00,0x00, -0x41,0x00,0x08,0x00,0x3e,0x01,0x00,0x00,0x72,0x01,0x00,0x00, -0x3a,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0xfc,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x71,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0x30,0x01,0x00,0x00,0x73,0x01,0x00,0x00,0x72,0x01,0x00,0x00, -0xc2,0x00,0x05,0x00,0x30,0x01,0x00,0x00,0x74,0x01,0x00,0x00, -0x73,0x01,0x00,0x00,0xa9,0x00,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x75,0x01,0x00,0x00,0x74,0x01,0x00,0x00, -0x7c,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x76,0x01,0x00,0x00, -0x75,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x3e,0x01,0x00,0x00, -0x7a,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0xfc,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x18,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0x30,0x01,0x00,0x00,0x7b,0x01,0x00,0x00, -0x7a,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x30,0x01,0x00,0x00, -0x7c,0x01,0x00,0x00,0x7b,0x01,0x00,0x00,0xa9,0x00,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x7d,0x01,0x00,0x00, -0x7c,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x7e,0x01,0x00,0x00,0x7d,0x01,0x00,0x00,0xc7,0x00,0x05,0x00, -0x13,0x00,0x00,0x00,0x7f,0x01,0x00,0x00,0x7e,0x01,0x00,0x00, -0x97,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,0x13,0x00,0x00,0x00, -0x80,0x01,0x00,0x00,0x7f,0x01,0x00,0x00,0xa9,0x00,0x00,0x00, -0xc5,0x00,0x05,0x00,0x13,0x00,0x00,0x00,0x81,0x01,0x00,0x00, -0x76,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0x6e,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x82,0x01,0x00,0x00, -0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x85,0x01,0x00,0x00, -0x18,0x01,0x00,0x00,0x17,0x01,0x00,0x00,0x41,0x00,0x08,0x00, -0x3e,0x01,0x00,0x00,0x86,0x01,0x00,0x00,0x3a,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x85,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x30,0x01,0x00,0x00, -0x87,0x01,0x00,0x00,0x86,0x01,0x00,0x00,0xc2,0x00,0x05,0x00, -0x30,0x01,0x00,0x00,0x88,0x01,0x00,0x00,0x87,0x01,0x00,0x00, -0xa9,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x89,0x01,0x00,0x00,0x88,0x01,0x00,0x00,0x7c,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x8a,0x01,0x00,0x00,0x89,0x01,0x00,0x00, -0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8d,0x01,0x00,0x00, -0x18,0x01,0x00,0x00,0x77,0x00,0x00,0x00,0x41,0x00,0x08,0x00, -0x3e,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,0x3a,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x8d,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x30,0x01,0x00,0x00, -0x8f,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,0xc2,0x00,0x05,0x00, -0x30,0x01,0x00,0x00,0x90,0x01,0x00,0x00,0x8f,0x01,0x00,0x00, -0x81,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x91,0x01,0x00,0x00,0x90,0x01,0x00,0x00,0x7c,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x92,0x01,0x00,0x00,0x91,0x01,0x00,0x00, -0xc7,0x00,0x05,0x00,0x13,0x00,0x00,0x00,0x93,0x01,0x00,0x00, -0x92,0x01,0x00,0x00,0x97,0x00,0x00,0x00,0xc4,0x00,0x05,0x00, -0x13,0x00,0x00,0x00,0x94,0x01,0x00,0x00,0x93,0x01,0x00,0x00, -0xa9,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,0x13,0x00,0x00,0x00, -0x95,0x01,0x00,0x00,0x8a,0x01,0x00,0x00,0x94,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0x6e,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x6e,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x13,0x00,0x00,0x00, -0x9a,0x03,0x00,0x00,0x81,0x01,0x00,0x00,0x6d,0x01,0x00,0x00, -0x95,0x01,0x00,0x00,0x82,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0x55,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x55,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0x13,0x00,0x00,0x00,0x9b,0x03,0x00,0x00, -0x68,0x01,0x00,0x00,0x54,0x01,0x00,0x00,0x9a,0x03,0x00,0x00, -0x6e,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x2f,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x2f,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x13,0x00,0x00,0x00,0x9c,0x03,0x00,0x00,0x4f,0x01,0x00,0x00, -0x2e,0x01,0x00,0x00,0x9b,0x03,0x00,0x00,0x55,0x01,0x00,0x00, -0x72,0x00,0x04,0x00,0x27,0x01,0x00,0x00,0x99,0x01,0x00,0x00, -0x9c,0x03,0x00,0x00,0x41,0x00,0x07,0x00,0x9c,0x01,0x00,0x00, -0x9d,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0xfc,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x35,0x01,0x00,0x00,0x9e,0x01,0x00,0x00,0x9d,0x01,0x00,0x00, -0x73,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x9f,0x01,0x00,0x00, -0x9e,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0xa1,0x01,0x00,0x00,0x99,0x01,0x00,0x00,0x82,0x00,0x05,0x00, -0x13,0x00,0x00,0x00,0xa3,0x01,0x00,0x00,0xa1,0x01,0x00,0x00, -0xa2,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0xa4,0x01,0x00,0x00,0xa3,0x01,0x00,0x00,0x85,0x00,0x05,0x00, -0xc4,0x00,0x00,0x00,0xa5,0x01,0x00,0x00,0x9f,0x01,0x00,0x00, -0xa4,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x3e,0x01,0x00,0x00, -0xaf,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0xfc,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x0c,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0x30,0x01,0x00,0x00,0xb0,0x01,0x00,0x00, -0xaf,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x30,0x01,0x00,0x00, -0xb2,0x01,0x00,0x00,0xb0,0x01,0x00,0x00,0x1f,0x01,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb3,0x01,0x00,0x00, -0xb2,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0xb4,0x01,0x00,0x00,0xb3,0x01,0x00,0x00,0xc7,0x00,0x05,0x00, -0x13,0x00,0x00,0x00,0xb5,0x01,0x00,0x00,0xb4,0x01,0x00,0x00, -0x97,0x00,0x00,0x00,0x72,0x00,0x04,0x00,0x27,0x01,0x00,0x00, -0xb6,0x01,0x00,0x00,0xb5,0x01,0x00,0x00,0x72,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0xb7,0x01,0x00,0x00,0xb6,0x01,0x00,0x00, -0x41,0x00,0x08,0x00,0x3e,0x01,0x00,0x00,0xba,0x01,0x00,0x00, -0x3a,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0xfc,0x00,0x00,0x00, -0x34,0x00,0x00,0x00,0x0b,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0x30,0x01,0x00,0x00,0xbb,0x01,0x00,0x00,0xba,0x01,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xbc,0x01,0x00,0x00, -0xbb,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xbe,0x01,0x00,0x00,0xbc,0x01,0x00,0x00,0x26,0x01,0x00,0x00, -0xab,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xbf,0x01,0x00,0x00, -0xbe,0x01,0x00,0x00,0x3e,0x00,0x00,0x00,0xa9,0x00,0x06,0x00, -0x13,0x00,0x00,0x00,0xc0,0x01,0x00,0x00,0xbf,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,0x82,0x00,0x05,0x00, -0x13,0x00,0x00,0x00,0xc1,0x01,0x00,0x00,0xb7,0x01,0x00,0x00, -0xc0,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0xc2,0x01,0x00,0x00,0xc1,0x01,0x00,0x00,0x85,0x00,0x05,0x00, -0xc4,0x00,0x00,0x00,0xc3,0x01,0x00,0x00,0xa5,0x01,0x00,0x00, -0xc2,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0xc4,0x01,0x00,0x00, -0xc5,0x01,0x00,0x00,0xaa,0x01,0x00,0x00,0xf8,0x00,0x00,0x00, -0x3e,0x00,0x03,0x00,0xc5,0x01,0x00,0x00,0xc3,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc7,0x01,0x00,0x00, -0xf8,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xcb,0x01,0x00,0x00,0x0c,0x01,0x00,0x00, -0x39,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x3e,0x01,0x00,0x00, -0xcc,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0xfc,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0xcb,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0x30,0x01,0x00,0x00,0xcd,0x01,0x00,0x00, -0xcc,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x30,0x01,0x00,0x00, -0xcf,0x01,0x00,0x00,0xcd,0x01,0x00,0x00,0x1f,0x01,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xd0,0x01,0x00,0x00, -0xcf,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0xd1,0x01,0x00,0x00,0xd0,0x01,0x00,0x00,0xc7,0x00,0x05,0x00, -0x13,0x00,0x00,0x00,0xd2,0x01,0x00,0x00,0xd1,0x01,0x00,0x00, -0x97,0x00,0x00,0x00,0x72,0x00,0x04,0x00,0x27,0x01,0x00,0x00, -0xd3,0x01,0x00,0x00,0xd2,0x01,0x00,0x00,0x72,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0xd4,0x01,0x00,0x00,0xd3,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd7,0x01,0x00,0x00, -0x0b,0x01,0x00,0x00,0x39,0x00,0x00,0x00,0x41,0x00,0x08,0x00, -0x3e,0x01,0x00,0x00,0xd8,0x01,0x00,0x00,0x3a,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0xd7,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x30,0x01,0x00,0x00, -0xd9,0x01,0x00,0x00,0xd8,0x01,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xda,0x01,0x00,0x00,0xd9,0x01,0x00,0x00, -0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdc,0x01,0x00,0x00, -0xda,0x01,0x00,0x00,0x26,0x01,0x00,0x00,0xab,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0xdd,0x01,0x00,0x00,0xdc,0x01,0x00,0x00, -0x3e,0x00,0x00,0x00,0xa9,0x00,0x06,0x00,0x13,0x00,0x00,0x00, -0xde,0x01,0x00,0x00,0xdd,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0xa9,0x00,0x00,0x00,0x82,0x00,0x05,0x00,0x13,0x00,0x00,0x00, -0xdf,0x01,0x00,0x00,0xd4,0x01,0x00,0x00,0xde,0x01,0x00,0x00, -0x6f,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0xe0,0x01,0x00,0x00, -0xdf,0x01,0x00,0x00,0x85,0x00,0x05,0x00,0xc4,0x00,0x00,0x00, -0xe1,0x01,0x00,0x00,0xa5,0x01,0x00,0x00,0xe0,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0xc4,0x01,0x00,0x00,0xe2,0x01,0x00,0x00, -0xaa,0x01,0x00,0x00,0xc7,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0xe2,0x01,0x00,0x00,0xe1,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xe0,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe0,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe9,0x01,0x00,0x00, -0x77,0x03,0x00,0x00,0xe7,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xeb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xeb,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x78,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0xdf,0x00,0x00,0x00, -0x2f,0x02,0x00,0x00,0xec,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0xf1,0x01,0x00,0x00,0x78,0x03,0x00,0x00, -0xa7,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xed,0x01,0x00,0x00, -0xec,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xf1,0x01,0x00,0x00,0xec,0x01,0x00,0x00,0xed,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xec,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xf6,0x01,0x00,0x00,0x7e,0x00,0x00,0x00, -0x78,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xf9,0x01,0x00,0x00,0xf6,0x01,0x00,0x00,0xab,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfa,0x01,0x00,0x00, -0xf9,0x01,0x00,0x00,0x77,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xfb,0x01,0x00,0x00,0x7f,0x03,0x00,0x00, -0xfa,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xfd,0x01,0x00,0x00,0xfb,0x01,0x00,0x00,0x79,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x03,0x02,0x00,0x00, -0xf6,0x01,0x00,0x00,0x02,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x05,0x02,0x00,0x00,0x79,0x00,0x00,0x00, -0x77,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x06,0x02,0x00,0x00,0x03,0x02,0x00,0x00,0x05,0x02,0x00,0x00, -0x41,0x00,0x07,0x00,0x14,0x02,0x00,0x00,0x15,0x02,0x00,0x00, -0x12,0x02,0x00,0x00,0x34,0x00,0x00,0x00,0xfd,0x01,0x00,0x00, -0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0x16,0x02,0x00,0x00,0x15,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0xc4,0x01,0x00,0x00,0x17,0x02,0x00,0x00,0x0b,0x02,0x00,0x00, -0x06,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x17,0x02,0x00,0x00, -0x16,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x19,0x02,0x00,0x00,0x06,0x02,0x00,0x00,0x39,0x00,0x00,0x00, -0x41,0x00,0x07,0x00,0x14,0x02,0x00,0x00,0x1b,0x02,0x00,0x00, -0x12,0x02,0x00,0x00,0x34,0x00,0x00,0x00,0xfd,0x01,0x00,0x00, -0x39,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0x1c,0x02,0x00,0x00,0x1b,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0xc4,0x01,0x00,0x00,0x1d,0x02,0x00,0x00,0x0b,0x02,0x00,0x00, -0x19,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x1d,0x02,0x00,0x00, -0x1c,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x1f,0x02,0x00,0x00,0x06,0x02,0x00,0x00,0x0c,0x00,0x00,0x00, -0x41,0x00,0x07,0x00,0x14,0x02,0x00,0x00,0x21,0x02,0x00,0x00, -0x12,0x02,0x00,0x00,0x34,0x00,0x00,0x00,0xfd,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0x22,0x02,0x00,0x00,0x21,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0xc4,0x01,0x00,0x00,0x23,0x02,0x00,0x00,0x0b,0x02,0x00,0x00, -0x1f,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x23,0x02,0x00,0x00, -0x22,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x26,0x02,0x00,0x00,0x06,0x02,0x00,0x00,0x25,0x02,0x00,0x00, -0x41,0x00,0x07,0x00,0x14,0x02,0x00,0x00,0x28,0x02,0x00,0x00, -0x12,0x02,0x00,0x00,0x34,0x00,0x00,0x00,0xfd,0x01,0x00,0x00, -0x25,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0x29,0x02,0x00,0x00,0x28,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0xc4,0x01,0x00,0x00,0x2a,0x02,0x00,0x00,0x0b,0x02,0x00,0x00, -0x26,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x2a,0x02,0x00,0x00, -0x29,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x2f,0x02,0x00,0x00,0x78,0x03,0x00,0x00,0x2d,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0xeb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xed,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x30,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x33,0x02,0x00,0x00,0x7b,0x03,0x00,0x00, -0x31,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x36,0x02,0x00,0x00,0x7f,0x03,0x00,0x00,0x34,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x38,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x38,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x81,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0xed,0x01,0x00,0x00, -0xdf,0x02,0x00,0x00,0x3b,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0x3e,0x02,0x00,0x00,0x81,0x03,0x00,0x00, -0x6c,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x3a,0x02,0x00,0x00, -0x3b,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x3e,0x02,0x00,0x00,0x39,0x02,0x00,0x00,0x3a,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x39,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x40,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x40,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x85,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0x39,0x02,0x00,0x00,0x6b,0x02,0x00,0x00, -0x43,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0x46,0x02,0x00,0x00,0x85,0x03,0x00,0x00,0x60,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x42,0x02,0x00,0x00,0x43,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x46,0x02,0x00,0x00, -0x41,0x02,0x00,0x00,0x42,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x41,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x48,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x48,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x97,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0x41,0x02,0x00,0x00,0x69,0x02,0x00,0x00,0x49,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x4e,0x02,0x00,0x00, -0x97,0x03,0x00,0x00,0x62,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x4a,0x02,0x00,0x00,0x49,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x4e,0x02,0x00,0x00,0x49,0x02,0x00,0x00, -0x4a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x49,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x54,0x02,0x00,0x00, -0x85,0x03,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x56,0x02,0x00,0x00,0x54,0x02,0x00,0x00, -0x97,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x58,0x02,0x00,0x00,0x55,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5a,0x02,0x00,0x00, -0x85,0x03,0x00,0x00,0x61,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x5b,0x02,0x00,0x00,0x58,0x02,0x00,0x00, -0x5a,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x5d,0x02,0x00,0x00,0x64,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5e,0x02,0x00,0x00, -0x5b,0x02,0x00,0x00,0x5d,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x60,0x02,0x00,0x00,0x5e,0x02,0x00,0x00, -0x97,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x62,0x02,0x00,0x00,0x60,0x02,0x00,0x00,0x61,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x64,0x02,0x00,0x00, -0x62,0x02,0x00,0x00,0x81,0x03,0x00,0x00,0x41,0x00,0x05,0x00, -0xc4,0x01,0x00,0x00,0x65,0x02,0x00,0x00,0xaa,0x01,0x00,0x00, -0x64,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0x66,0x02,0x00,0x00,0x65,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0xcd,0x00,0x00,0x00,0x67,0x02,0x00,0x00,0x52,0x02,0x00,0x00, -0x56,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x67,0x02,0x00,0x00, -0x66,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x69,0x02,0x00,0x00,0x97,0x03,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x48,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x4a,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x43,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x43,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x6b,0x02,0x00,0x00,0x85,0x03,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x40,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x42,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x6d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x6d,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x86,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0x42,0x02,0x00,0x00,0x99,0x02,0x00,0x00, -0x70,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0x73,0x02,0x00,0x00,0x86,0x03,0x00,0x00,0xbf,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x6f,0x02,0x00,0x00,0x70,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x73,0x02,0x00,0x00, -0x6e,0x02,0x00,0x00,0x6f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x6e,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x75,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x75,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x94,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0x6e,0x02,0x00,0x00,0x97,0x02,0x00,0x00,0x76,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x7b,0x02,0x00,0x00, -0x94,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x77,0x02,0x00,0x00,0x76,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x7b,0x02,0x00,0x00,0x76,0x02,0x00,0x00, -0x77,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x76,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x81,0x02,0x00,0x00, -0x86,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x83,0x02,0x00,0x00,0x81,0x02,0x00,0x00, -0x94,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x85,0x02,0x00,0x00,0x59,0x00,0x00,0x00,0xb9,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x88,0x02,0x00,0x00, -0x86,0x03,0x00,0x00,0x87,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x89,0x02,0x00,0x00,0x85,0x02,0x00,0x00, -0x88,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x8b,0x02,0x00,0x00,0x68,0x00,0x00,0x00,0xbc,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8c,0x02,0x00,0x00, -0x89,0x02,0x00,0x00,0x8b,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x8e,0x02,0x00,0x00,0x8c,0x02,0x00,0x00, -0x94,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x90,0x02,0x00,0x00,0x8e,0x02,0x00,0x00,0x8f,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x92,0x02,0x00,0x00, -0x90,0x02,0x00,0x00,0x81,0x03,0x00,0x00,0x41,0x00,0x05,0x00, -0xc4,0x01,0x00,0x00,0x93,0x02,0x00,0x00,0x0b,0x02,0x00,0x00, -0x92,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0x94,0x02,0x00,0x00,0x93,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0xcd,0x00,0x00,0x00,0x95,0x02,0x00,0x00,0x7f,0x02,0x00,0x00, -0x83,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x95,0x02,0x00,0x00, -0x94,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x97,0x02,0x00,0x00,0x94,0x03,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x75,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x77,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x70,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x70,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x99,0x02,0x00,0x00,0x86,0x03,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x6d,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x6f,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x9b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x9b,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x87,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0x6f,0x02,0x00,0x00,0xdd,0x02,0x00,0x00, -0x9e,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0xa1,0x02,0x00,0x00,0x87,0x03,0x00,0x00,0xbf,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x9d,0x02,0x00,0x00,0x9e,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xa1,0x02,0x00,0x00, -0x9c,0x02,0x00,0x00,0x9d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x9c,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xa3,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xa3,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x8b,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0x9c,0x02,0x00,0x00,0xdb,0x02,0x00,0x00,0xa6,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xa9,0x02,0x00,0x00, -0x8b,0x03,0x00,0x00,0x60,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xa5,0x02,0x00,0x00,0xa6,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xa9,0x02,0x00,0x00,0xa4,0x02,0x00,0x00, -0xa5,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xa4,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0xab,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xab,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x8d,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0xa4,0x02,0x00,0x00, -0xd9,0x02,0x00,0x00,0xae,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0xb1,0x02,0x00,0x00,0x8d,0x03,0x00,0x00, -0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xad,0x02,0x00,0x00, -0xae,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xb1,0x02,0x00,0x00,0xac,0x02,0x00,0x00,0xad,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xac,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0xb3,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xb3,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x8f,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0xac,0x02,0x00,0x00,0xd7,0x02,0x00,0x00, -0xb4,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0xb9,0x02,0x00,0x00,0x8f,0x03,0x00,0x00,0x62,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xb5,0x02,0x00,0x00,0xb4,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xb9,0x02,0x00,0x00, -0xb4,0x02,0x00,0x00,0xb5,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xb4,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xbb,0x02,0x00,0x00,0x87,0x03,0x00,0x00,0xbc,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbd,0x02,0x00,0x00, -0xbb,0x02,0x00,0x00,0x8d,0x03,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xbf,0x02,0x00,0x00,0xbd,0x02,0x00,0x00, -0xbe,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xc1,0x02,0x00,0x00,0x8b,0x03,0x00,0x00,0x62,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc2,0x02,0x00,0x00, -0xbf,0x02,0x00,0x00,0xc1,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xc4,0x02,0x00,0x00,0xc2,0x02,0x00,0x00, -0x8f,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xc8,0x02,0x00,0x00,0xc1,0x02,0x00,0x00,0x8f,0x03,0x00,0x00, -0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,0xc9,0x02,0x00,0x00, -0x52,0x02,0x00,0x00,0xc8,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0xca,0x02,0x00,0x00,0xc9,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,0xcf,0x02,0x00,0x00, -0x7f,0x02,0x00,0x00,0xbd,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0xd0,0x02,0x00,0x00,0xcf,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,0xd2,0x02,0x00,0x00, -0xca,0x00,0x00,0x00,0xc4,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0xd3,0x02,0x00,0x00,0xd2,0x02,0x00,0x00, -0x0c,0x00,0x08,0x00,0xc4,0x00,0x00,0x00,0xd4,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0xca,0x02,0x00,0x00, -0xd0,0x02,0x00,0x00,0xd3,0x02,0x00,0x00,0x3e,0x00,0x03,0x00, -0xd2,0x02,0x00,0x00,0xd4,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xd7,0x02,0x00,0x00,0x8f,0x03,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb3,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xb5,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0xae,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xae,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd9,0x02,0x00,0x00, -0x8d,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xab,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xad,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0xa6,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xa6,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xdb,0x02,0x00,0x00,0x8b,0x03,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xa3,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xa5,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x9e,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x9e,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xdd,0x02,0x00,0x00,0x87,0x03,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x9b,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x9d,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x3b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x3b,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdf,0x02,0x00,0x00, -0x81,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x38,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x3a,0x02,0x00,0x00, -0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x30,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xd7,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xd7,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xe1,0x02,0x00,0x00,0x67,0x03,0x00,0x00, -0x6c,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd4,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xd6,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xe6,0x02,0x00,0x00,0x55,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xe7,0x02,0x00,0x00,0x96,0x00,0x00,0x00,0xe6,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xec,0x02,0x00,0x00, -0x59,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xed,0x02,0x00,0x00,0xa8,0x00,0x00,0x00, -0xec,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0xf2,0x02,0x00,0x00,0x12,0x00,0x00,0x00,0xf1,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xf3,0x02,0x00,0x00, -0xf2,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xf4,0x02,0x00,0x00,0x0f,0x00,0x00,0x00,0xf3,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf8,0x02,0x00,0x00, -0x47,0x00,0x00,0x00,0xf3,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0xfa,0x02,0x00,0x00,0xf9,0x02,0x00,0x00, -0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xfb,0x02,0x00,0x00,0xfa,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xfc,0x02,0x00,0x00,0xf8,0x02,0x00,0x00, -0xfb,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xfd,0x02,0x00,0x00,0xf4,0x02,0x00,0x00,0xfc,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0xff,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xff,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x68,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0xd6,0x00,0x00,0x00, -0x65,0x03,0x00,0x00,0x02,0x03,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0x05,0x03,0x00,0x00,0x68,0x03,0x00,0x00, -0xbf,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x01,0x03,0x00,0x00, -0x02,0x03,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x05,0x03,0x00,0x00,0x00,0x03,0x00,0x00,0x01,0x03,0x00,0x00, -0xf8,0x00,0x02,0x00,0x00,0x03,0x00,0x00,0xf9,0x00,0x02,0x00, -0x07,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x07,0x03,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x69,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x63,0x03,0x00,0x00, -0x0a,0x03,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0x0d,0x03,0x00,0x00,0x69,0x03,0x00,0x00,0x60,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x09,0x03,0x00,0x00,0x0a,0x03,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x0d,0x03,0x00,0x00, -0x08,0x03,0x00,0x00,0x09,0x03,0x00,0x00,0xf8,0x00,0x02,0x00, -0x08,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x11,0x03,0x00,0x00,0x69,0x03,0x00,0x00,0x61,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x12,0x03,0x00,0x00, -0xe7,0x02,0x00,0x00,0x11,0x03,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x14,0x03,0x00,0x00,0x64,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x15,0x03,0x00,0x00,0x12,0x03,0x00,0x00,0x14,0x03,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x19,0x03,0x00,0x00, -0x68,0x03,0x00,0x00,0x87,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x1a,0x03,0x00,0x00,0xed,0x02,0x00,0x00, -0x19,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x1c,0x03,0x00,0x00,0x68,0x00,0x00,0x00,0xbc,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1d,0x03,0x00,0x00, -0x1a,0x03,0x00,0x00,0x1c,0x03,0x00,0x00,0xf9,0x00,0x02,0x00, -0x1f,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x1f,0x03,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x6b,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0x08,0x03,0x00,0x00,0x61,0x03,0x00,0x00, -0x22,0x03,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0x25,0x03,0x00,0x00,0x6b,0x03,0x00,0x00,0xbc,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x21,0x03,0x00,0x00,0x22,0x03,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x25,0x03,0x00,0x00, -0x20,0x03,0x00,0x00,0x21,0x03,0x00,0x00,0xf8,0x00,0x02,0x00, -0x20,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,0x27,0x03,0x00,0x00, -0xf8,0x00,0x02,0x00,0x27,0x03,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x6d,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0x20,0x03,0x00,0x00,0x5f,0x03,0x00,0x00,0x2a,0x03,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x2d,0x03,0x00,0x00, -0x6d,0x03,0x00,0x00,0x62,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x29,0x03,0x00,0x00,0x2a,0x03,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x2d,0x03,0x00,0x00,0x28,0x03,0x00,0x00, -0x29,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x28,0x03,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x30,0x03,0x00,0x00, -0x15,0x03,0x00,0x00,0x6d,0x03,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0x33,0x03,0x00,0x00,0x30,0x03,0x00,0x00, -0x36,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x35,0x03,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x33,0x03,0x00,0x00, -0x34,0x03,0x00,0x00,0x35,0x03,0x00,0x00,0xf8,0x00,0x02,0x00, -0x34,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x38,0x03,0x00,0x00,0x1d,0x03,0x00,0x00,0x6b,0x03,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x39,0x03,0x00,0x00, -0x12,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x3a,0x03,0x00,0x00,0x39,0x03,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x3b,0x03,0x00,0x00, -0x38,0x03,0x00,0x00,0x3a,0x03,0x00,0x00,0xf9,0x00,0x02,0x00, -0x35,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x35,0x03,0x00,0x00, -0xf5,0x00,0x07,0x00,0xc2,0x00,0x00,0x00,0x3c,0x03,0x00,0x00, -0x33,0x03,0x00,0x00,0x28,0x03,0x00,0x00,0x3b,0x03,0x00,0x00, -0x34,0x03,0x00,0x00,0xf7,0x00,0x03,0x00,0x3e,0x03,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x3c,0x03,0x00,0x00, -0x3d,0x03,0x00,0x00,0x3e,0x03,0x00,0x00,0xf8,0x00,0x02,0x00, -0x3d,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x46,0x03,0x00,0x00,0x1d,0x03,0x00,0x00,0x6b,0x03,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x48,0x03,0x00,0x00, -0x12,0x00,0x00,0x00,0x47,0x03,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x49,0x03,0x00,0x00,0x48,0x03,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4a,0x03,0x00,0x00, -0x46,0x03,0x00,0x00,0x49,0x03,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x4b,0x03,0x00,0x00,0xfd,0x02,0x00,0x00, -0x4a,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x4d,0x03,0x00,0x00,0x4b,0x03,0x00,0x00,0x15,0x03,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4f,0x03,0x00,0x00, -0x4d,0x03,0x00,0x00,0x6d,0x03,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x51,0x03,0x00,0x00,0x68,0x03,0x00,0x00, -0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x53,0x03,0x00,0x00,0x51,0x03,0x00,0x00,0x6b,0x03,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x55,0x03,0x00,0x00, -0x53,0x03,0x00,0x00,0x54,0x03,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x57,0x03,0x00,0x00,0x69,0x03,0x00,0x00, -0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x58,0x03,0x00,0x00,0x55,0x03,0x00,0x00,0x57,0x03,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5a,0x03,0x00,0x00, -0x58,0x03,0x00,0x00,0x6d,0x03,0x00,0x00,0x41,0x00,0x05,0x00, -0xcd,0x00,0x00,0x00,0x5b,0x03,0x00,0x00,0xca,0x00,0x00,0x00, -0x5a,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0x5c,0x03,0x00,0x00,0x5b,0x03,0x00,0x00,0x41,0x00,0x06,0x00, -0x14,0x02,0x00,0x00,0x5d,0x03,0x00,0x00,0x42,0x03,0x00,0x00, -0x34,0x00,0x00,0x00,0x4f,0x03,0x00,0x00,0x3e,0x00,0x03,0x00, -0x5d,0x03,0x00,0x00,0x5c,0x03,0x00,0x00,0xf9,0x00,0x02,0x00, -0x3e,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x3e,0x03,0x00,0x00, -0xf9,0x00,0x02,0x00,0x2a,0x03,0x00,0x00,0xf8,0x00,0x02,0x00, -0x2a,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x5f,0x03,0x00,0x00,0x6d,0x03,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x27,0x03,0x00,0x00,0xf8,0x00,0x02,0x00, -0x29,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,0x22,0x03,0x00,0x00, -0xf8,0x00,0x02,0x00,0x22,0x03,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x61,0x03,0x00,0x00,0x6b,0x03,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x1f,0x03,0x00,0x00, -0xf8,0x00,0x02,0x00,0x21,0x03,0x00,0x00,0xf9,0x00,0x02,0x00, -0x0a,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x0a,0x03,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x63,0x03,0x00,0x00, -0x69,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x07,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x09,0x03,0x00,0x00, -0xf9,0x00,0x02,0x00,0x02,0x03,0x00,0x00,0xf8,0x00,0x02,0x00, -0x02,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x65,0x03,0x00,0x00,0x68,0x03,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xff,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x01,0x03,0x00,0x00,0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00, - -}; -const uint64_t matmul_q3_k_f32_aligned_fp32_len = 12972; - -unsigned char matmul_q3_k_f32_fp32_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0xa1,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x27,0x00,0x00,0x00, -0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00, -0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00, -0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30, -0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x0f,0x00,0x0f,0x00,0x05,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x4c,0x00,0x00,0x00,0x3a,0x01,0x00,0x00,0xaa,0x01,0x00,0x00, -0x09,0x02,0x00,0x00,0x14,0x02,0x00,0x00,0xfa,0x02,0x00,0x00, -0x43,0x03,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x05,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x30,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x0d,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0x10,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x37,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x3d,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x4c,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x4f,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x53,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x60,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x62,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x6c,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xa6,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xb8,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xbb,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x31,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x32,0x01,0x00,0x00,0x06,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x34,0x01,0x00,0x00, -0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x36,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x36,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x36,0x01,0x00,0x00,0x02,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x36,0x01,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x37,0x01,0x00,0x00, -0x06,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0x38,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x38,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x38,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x3a,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x3a,0x01,0x00,0x00,0x21,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xe3,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xe4,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x11,0x02,0x00,0x00,0x06,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x12,0x02,0x00,0x00, -0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x12,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x12,0x02,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x14,0x02,0x00,0x00, -0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x14,0x02,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xfa,0x02,0x00,0x00,0x0b,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x40,0x03,0x00,0x00, -0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0x41,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x41,0x03,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x41,0x03,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x43,0x03,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x43,0x03,0x00,0x00,0x21,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00, -0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x1e,0x00,0x10,0x00,0x10,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x11,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x11,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x15,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0x0a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x27,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x3e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x61,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x63,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x61,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x67,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x61,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x72,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x85,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x90,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0xa1,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xa6,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xb7,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xb9,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0xb8,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xba,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x4f,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xbb,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xba,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xbc,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0xb9,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xb7,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xbf,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x14,0x00,0x02,0x00, -0xc1,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0xc3,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xc4,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xc5,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc4,0x00,0x00,0x00, -0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xc6,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc5,0x00,0x00,0x00, -0xbb,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xc7,0x00,0x00,0x00, -0xc3,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0xc8,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xc7,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0xcb,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xcc,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xf3,0x00,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xfa,0x00,0x00,0x00, -0x80,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x01,0x01,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x05,0x01,0x00,0x00,0x20,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x08,0x01,0x00,0x00, -0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x13,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x17,0x01,0x00,0x00,0x08,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x27,0x01,0x00,0x00,0x08,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x30,0x01,0x00,0x00, -0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1c,0x00,0x04,0x00, -0x31,0x01,0x00,0x00,0x30,0x01,0x00,0x00,0x05,0x01,0x00,0x00, -0x1c,0x00,0x04,0x00,0x32,0x01,0x00,0x00,0x30,0x01,0x00,0x00, -0x01,0x01,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x33,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x1c,0x00,0x04,0x00, -0x34,0x01,0x00,0x00,0x30,0x01,0x00,0x00,0x33,0x01,0x00,0x00, -0x16,0x00,0x03,0x00,0x35,0x01,0x00,0x00,0x10,0x00,0x00,0x00, -0x1e,0x00,0x06,0x00,0x36,0x01,0x00,0x00,0x31,0x01,0x00,0x00, -0x32,0x01,0x00,0x00,0x34,0x01,0x00,0x00,0x35,0x01,0x00,0x00, -0x1d,0x00,0x03,0x00,0x37,0x01,0x00,0x00,0x36,0x01,0x00,0x00, -0x1e,0x00,0x03,0x00,0x38,0x01,0x00,0x00,0x37,0x01,0x00,0x00, -0x20,0x00,0x04,0x00,0x39,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x38,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x39,0x01,0x00,0x00, -0x3a,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x3e,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x30,0x01,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x43,0x01,0x00,0x00, -0x0f,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x9c,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x35,0x01,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0xa2,0x01,0x00,0x00,0x20,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xa6,0x01,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xa7,0x01,0x00,0x00, -0x84,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0xa6,0x01,0x00,0x00, -0x1c,0x00,0x04,0x00,0xa8,0x01,0x00,0x00,0xc3,0x00,0x00,0x00, -0xa7,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0xa9,0x01,0x00,0x00, -0x04,0x00,0x00,0x00,0xa8,0x01,0x00,0x00,0x3b,0x00,0x04,0x00, -0xa9,0x01,0x00,0x00,0xaa,0x01,0x00,0x00,0x04,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0xc4,0x01,0x00,0x00,0x04,0x00,0x00,0x00, -0xc3,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xe3,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00, -0x09,0x00,0x00,0x00,0xe4,0x01,0x00,0x00,0xe3,0x01,0x00,0x00, -0x39,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xe5,0x01,0x00,0x00,0x51,0x00,0x00,0x00, -0xe4,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xe6,0x01,0x00,0x00,0x84,0x00,0x00,0x00, -0xe5,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xe7,0x01,0x00,0x00,0x86,0x00,0x00,0x00, -0xe6,0x01,0x00,0x00,0x6c,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x05,0x02,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x06,0x02,0x00,0x00,0x84,0x00,0x00,0x00, -0xa6,0x00,0x00,0x00,0x05,0x02,0x00,0x00,0x1c,0x00,0x04,0x00, -0x07,0x02,0x00,0x00,0xc3,0x00,0x00,0x00,0x06,0x02,0x00,0x00, -0x20,0x00,0x04,0x00,0x08,0x02,0x00,0x00,0x04,0x00,0x00,0x00, -0x07,0x02,0x00,0x00,0x3b,0x00,0x04,0x00,0x08,0x02,0x00,0x00, -0x09,0x02,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x0d,0x02,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x1d,0x00,0x03,0x00, -0x11,0x02,0x00,0x00,0xc3,0x00,0x00,0x00,0x1e,0x00,0x03,0x00, -0x12,0x02,0x00,0x00,0x11,0x02,0x00,0x00,0x20,0x00,0x04,0x00, -0x13,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x12,0x02,0x00,0x00, -0x3b,0x00,0x04,0x00,0x13,0x02,0x00,0x00,0x14,0x02,0x00,0x00, -0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x1f,0x02,0x00,0x00, -0x0c,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x27,0x02,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x2c,0x02,0x00,0x00,0x51,0x00,0x00,0x00, -0xe4,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x2d,0x02,0x00,0x00,0x84,0x00,0x00,0x00, -0x2c,0x02,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x2e,0x02,0x00,0x00,0x86,0x00,0x00,0x00, -0x2d,0x02,0x00,0x00,0x6c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x31,0x02,0x00,0x00,0x08,0x01,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x32,0x02,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x35,0x02,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x50,0x02,0x00,0x00, -0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x1c,0x00,0x04,0x00,0x51,0x02,0x00,0x00,0xc3,0x00,0x00,0x00, -0x50,0x02,0x00,0x00,0x20,0x00,0x04,0x00,0x52,0x02,0x00,0x00, -0x07,0x00,0x00,0x00,0x51,0x02,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x62,0x02,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x7d,0x02,0x00,0x00,0x84,0x00,0x00,0x00, -0xbe,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x1c,0x00,0x04,0x00, -0x7e,0x02,0x00,0x00,0xc3,0x00,0x00,0x00,0x7d,0x02,0x00,0x00, -0x20,0x00,0x04,0x00,0x7f,0x02,0x00,0x00,0x07,0x00,0x00,0x00, -0x7e,0x02,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x88,0x02,0x00,0x00,0x86,0x00,0x00,0x00,0xb8,0x00,0x00,0x00, -0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x90,0x02,0x00,0x00,0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xbf,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0xf2,0x02,0x00,0x00,0x0d,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0xfa,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0x1d,0x00,0x03,0x00,0x40,0x03,0x00,0x00,0xc3,0x00,0x00,0x00, -0x1e,0x00,0x03,0x00,0x41,0x03,0x00,0x00,0x40,0x03,0x00,0x00, -0x20,0x00,0x04,0x00,0x42,0x03,0x00,0x00,0x0c,0x00,0x00,0x00, -0x41,0x03,0x00,0x00,0x3b,0x00,0x04,0x00,0x42,0x03,0x00,0x00, -0x43,0x03,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x48,0x03,0x00,0x00,0x05,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x55,0x03,0x00,0x00, -0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x05,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xc8,0x00,0x00,0x00, -0xc9,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x52,0x02,0x00,0x00,0x53,0x02,0x00,0x00,0x07,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x7f,0x02,0x00,0x00,0x80,0x02,0x00,0x00, -0x07,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x16,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x17,0x00,0x00,0x00, -0x16,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x17,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1e,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x21,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x28,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x27,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x29,0x00,0x00,0x00, -0x28,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x2a,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x29,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x2e,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00, -0x24,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x30,0x00,0x00,0x00, -0x2a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x35,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x36,0x00,0x00,0x00, -0x35,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x38,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00, -0x38,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x3a,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x3f,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x3e,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x3f,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x42,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x3b,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x47,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x4a,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x4c,0x00,0x00,0x00, -0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x4f,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x55,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x54,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00, -0x50,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x4f,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x64,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,0x63,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x68,0x00,0x00,0x00, -0x5d,0x00,0x00,0x00,0x67,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x6d,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x73,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x72,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x78,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x7c,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x81,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x80,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x82,0x00,0x00,0x00, -0x81,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x83,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0x82,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x89,0x00,0x00,0x00, -0x47,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,0x89,0x00,0x00,0x00, -0x82,0x00,0x00,0x00,0x0c,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x8d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x26,0x00,0x00,0x00, -0x87,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x90,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x92,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x92,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x95,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x97,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x97,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x99,0x00,0x00,0x00, -0x95,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x93,0x00,0x00,0x00, -0x99,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9c,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x83,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9d,0x00,0x00,0x00, -0x9c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0xa1,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xa3,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0xa3,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa7,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0xa6,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0xa9,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0xa9,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xab,0x00,0x00,0x00, -0xa7,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0xa4,0x00,0x00,0x00, -0xab,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xae,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0x83,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xaf,0x00,0x00,0x00, -0xae,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xb1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb1,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x67,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0xd0,0x00,0x00,0x00, -0xb2,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0xc2,0x00,0x00,0x00,0x67,0x03,0x00,0x00,0xc0,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xb3,0x00,0x00,0x00,0xb2,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xc2,0x00,0x00,0x00, -0xb2,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xb2,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00, -0xcd,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x67,0x03,0x00,0x00, -0x3e,0x00,0x03,0x00,0xcd,0x00,0x00,0x00,0xcb,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd0,0x00,0x00,0x00, -0x67,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xb1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb3,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xd3,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xd3,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x80,0x03,0x00,0x00,0xaf,0x00,0x00,0x00,0xb3,0x00,0x00,0x00, -0x37,0x02,0x00,0x00,0xd6,0x00,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x7c,0x03,0x00,0x00,0x9d,0x00,0x00,0x00, -0xb3,0x00,0x00,0x00,0x34,0x02,0x00,0x00,0xd6,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x68,0x03,0x00,0x00, -0x83,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0xe2,0x02,0x00,0x00, -0xd6,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0xda,0x00,0x00,0x00,0x68,0x03,0x00,0x00,0x8d,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xd5,0x00,0x00,0x00,0xd6,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xda,0x00,0x00,0x00, -0xd4,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xd4,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xdc,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xdc,0x00,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x78,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0xd4,0x00,0x00,0x00,0xe9,0x01,0x00,0x00,0xdf,0x00,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xe2,0x00,0x00,0x00, -0x78,0x03,0x00,0x00,0x37,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xde,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xe2,0x00,0x00,0x00,0xdd,0x00,0x00,0x00, -0xde,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdd,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe7,0x00,0x00,0x00, -0x73,0x00,0x00,0x00,0x78,0x03,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xea,0x00,0x00,0x00,0xe7,0x00,0x00,0x00, -0x98,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xeb,0x00,0x00,0x00,0xea,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xec,0x00,0x00,0x00, -0x7c,0x03,0x00,0x00,0xeb,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xee,0x00,0x00,0x00,0xec,0x00,0x00,0x00, -0x6e,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xf4,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,0xf3,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf6,0x00,0x00,0x00, -0x6e,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,0xf4,0x00,0x00,0x00, -0xf6,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xfb,0x00,0x00,0x00,0xee,0x00,0x00,0x00,0xfa,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfe,0x00,0x00,0x00, -0xee,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x02,0x01,0x00,0x00,0xfe,0x00,0x00,0x00, -0x01,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x06,0x01,0x00,0x00,0x02,0x01,0x00,0x00,0x05,0x01,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x09,0x01,0x00,0x00, -0xfe,0x00,0x00,0x00,0x08,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x0a,0x01,0x00,0x00,0x09,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x0b,0x01,0x00,0x00,0x06,0x01,0x00,0x00,0x0a,0x01,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x18,0x01,0x00,0x00, -0xfe,0x00,0x00,0x00,0x17,0x01,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x1b,0x01,0x00,0x00,0xfe,0x00,0x00,0x00, -0x01,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x1c,0x01,0x00,0x00,0x1b,0x01,0x00,0x00,0x08,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1f,0x01,0x00,0x00, -0x1c,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x22,0x01,0x00,0x00,0x13,0x01,0x00,0x00, -0x02,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x24,0x01,0x00,0x00,0x22,0x01,0x00,0x00,0x1c,0x01,0x00,0x00, -0xc4,0x00,0x05,0x00,0x13,0x00,0x00,0x00,0x25,0x01,0x00,0x00, -0xcf,0x00,0x00,0x00,0x24,0x01,0x00,0x00,0x7c,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x26,0x01,0x00,0x00,0x25,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x2b,0x01,0x00,0x00, -0x18,0x01,0x00,0x00,0x13,0x01,0x00,0x00,0xf7,0x00,0x03,0x00, -0x2f,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x2b,0x01,0x00,0x00,0x2e,0x01,0x00,0x00,0x50,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x2e,0x01,0x00,0x00,0x82,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3d,0x01,0x00,0x00,0x18,0x01,0x00,0x00, -0x3e,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x3e,0x01,0x00,0x00, -0x3f,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0xfb,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x3d,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0x30,0x01,0x00,0x00,0x40,0x01,0x00,0x00, -0x3f,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x41,0x01,0x00,0x00,0x40,0x01,0x00,0x00,0x7c,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x42,0x01,0x00,0x00,0x41,0x01,0x00,0x00, -0xc7,0x00,0x05,0x00,0x13,0x00,0x00,0x00,0x44,0x01,0x00,0x00, -0x42,0x01,0x00,0x00,0x43,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x47,0x01,0x00,0x00,0x18,0x01,0x00,0x00, -0x17,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x3e,0x01,0x00,0x00, -0x48,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0xfb,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x47,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0x30,0x01,0x00,0x00,0x49,0x01,0x00,0x00, -0x48,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x30,0x01,0x00,0x00, -0x4a,0x01,0x00,0x00,0x49,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4b,0x01,0x00,0x00, -0x4a,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x4c,0x01,0x00,0x00,0x4b,0x01,0x00,0x00,0xc7,0x00,0x05,0x00, -0x13,0x00,0x00,0x00,0x4d,0x01,0x00,0x00,0x4c,0x01,0x00,0x00, -0x96,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,0x13,0x00,0x00,0x00, -0x4e,0x01,0x00,0x00,0x4d,0x01,0x00,0x00,0xa8,0x00,0x00,0x00, -0xc5,0x00,0x05,0x00,0x13,0x00,0x00,0x00,0x4f,0x01,0x00,0x00, -0x44,0x01,0x00,0x00,0x4e,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0x2f,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x50,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x52,0x01,0x00,0x00, -0x18,0x01,0x00,0x00,0x17,0x01,0x00,0x00,0xf7,0x00,0x03,0x00, -0x55,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x52,0x01,0x00,0x00,0x54,0x01,0x00,0x00,0x69,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x54,0x01,0x00,0x00,0x82,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x58,0x01,0x00,0x00,0x18,0x01,0x00,0x00, -0x3e,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x3e,0x01,0x00,0x00, -0x59,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0xfb,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x58,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0x30,0x01,0x00,0x00,0x5a,0x01,0x00,0x00, -0x59,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x5b,0x01,0x00,0x00,0x5a,0x01,0x00,0x00,0x7c,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x5c,0x01,0x00,0x00,0x5b,0x01,0x00,0x00, -0xc7,0x00,0x05,0x00,0x13,0x00,0x00,0x00,0x5d,0x01,0x00,0x00, -0x5c,0x01,0x00,0x00,0x43,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x60,0x01,0x00,0x00,0x18,0x01,0x00,0x00, -0x13,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x3e,0x01,0x00,0x00, -0x61,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0xfb,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x60,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0x30,0x01,0x00,0x00,0x62,0x01,0x00,0x00, -0x61,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x30,0x01,0x00,0x00, -0x63,0x01,0x00,0x00,0x62,0x01,0x00,0x00,0x85,0x00,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x64,0x01,0x00,0x00, -0x63,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x65,0x01,0x00,0x00,0x64,0x01,0x00,0x00,0xc7,0x00,0x05,0x00, -0x13,0x00,0x00,0x00,0x66,0x01,0x00,0x00,0x65,0x01,0x00,0x00, -0x96,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,0x13,0x00,0x00,0x00, -0x67,0x01,0x00,0x00,0x66,0x01,0x00,0x00,0xa8,0x00,0x00,0x00, -0xc5,0x00,0x05,0x00,0x13,0x00,0x00,0x00,0x68,0x01,0x00,0x00, -0x5d,0x01,0x00,0x00,0x67,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0x55,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x69,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x6b,0x01,0x00,0x00, -0x18,0x01,0x00,0x00,0x33,0x01,0x00,0x00,0xf7,0x00,0x03,0x00, -0x6e,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x6b,0x01,0x00,0x00,0x6d,0x01,0x00,0x00,0x82,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x6d,0x01,0x00,0x00,0x82,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x71,0x01,0x00,0x00,0x18,0x01,0x00,0x00, -0x17,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x3e,0x01,0x00,0x00, -0x72,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0xfb,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x71,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0x30,0x01,0x00,0x00,0x73,0x01,0x00,0x00, -0x72,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x30,0x01,0x00,0x00, -0x74,0x01,0x00,0x00,0x73,0x01,0x00,0x00,0xa8,0x00,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x75,0x01,0x00,0x00, -0x74,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x76,0x01,0x00,0x00,0x75,0x01,0x00,0x00,0x41,0x00,0x08,0x00, -0x3e,0x01,0x00,0x00,0x7a,0x01,0x00,0x00,0x3a,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0x85,0x00,0x00,0x00, -0x18,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x30,0x01,0x00,0x00, -0x7b,0x01,0x00,0x00,0x7a,0x01,0x00,0x00,0xc2,0x00,0x05,0x00, -0x30,0x01,0x00,0x00,0x7c,0x01,0x00,0x00,0x7b,0x01,0x00,0x00, -0xa8,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x7d,0x01,0x00,0x00,0x7c,0x01,0x00,0x00,0x7c,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x7e,0x01,0x00,0x00,0x7d,0x01,0x00,0x00, -0xc7,0x00,0x05,0x00,0x13,0x00,0x00,0x00,0x7f,0x01,0x00,0x00, -0x7e,0x01,0x00,0x00,0x96,0x00,0x00,0x00,0xc4,0x00,0x05,0x00, -0x13,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x7f,0x01,0x00,0x00, -0xa8,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,0x13,0x00,0x00,0x00, -0x81,0x01,0x00,0x00,0x76,0x01,0x00,0x00,0x80,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0x6e,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x82,0x01,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x85,0x01,0x00,0x00,0x18,0x01,0x00,0x00,0x17,0x01,0x00,0x00, -0x41,0x00,0x08,0x00,0x3e,0x01,0x00,0x00,0x86,0x01,0x00,0x00, -0x3a,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0xfb,0x00,0x00,0x00, -0x85,0x00,0x00,0x00,0x85,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0x30,0x01,0x00,0x00,0x87,0x01,0x00,0x00,0x86,0x01,0x00,0x00, -0xc2,0x00,0x05,0x00,0x30,0x01,0x00,0x00,0x88,0x01,0x00,0x00, -0x87,0x01,0x00,0x00,0xa8,0x00,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x89,0x01,0x00,0x00,0x88,0x01,0x00,0x00, -0x7c,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x8a,0x01,0x00,0x00, -0x89,0x01,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x8d,0x01,0x00,0x00,0x18,0x01,0x00,0x00,0x13,0x01,0x00,0x00, -0x41,0x00,0x08,0x00,0x3e,0x01,0x00,0x00,0x8e,0x01,0x00,0x00, -0x3a,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0xfb,0x00,0x00,0x00, -0x85,0x00,0x00,0x00,0x8d,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0x30,0x01,0x00,0x00,0x8f,0x01,0x00,0x00,0x8e,0x01,0x00,0x00, -0xc2,0x00,0x05,0x00,0x30,0x01,0x00,0x00,0x90,0x01,0x00,0x00, -0x8f,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x91,0x01,0x00,0x00,0x90,0x01,0x00,0x00, -0x7c,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x92,0x01,0x00,0x00, -0x91,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x13,0x00,0x00,0x00, -0x93,0x01,0x00,0x00,0x92,0x01,0x00,0x00,0x96,0x00,0x00,0x00, -0xc4,0x00,0x05,0x00,0x13,0x00,0x00,0x00,0x94,0x01,0x00,0x00, -0x93,0x01,0x00,0x00,0xa8,0x00,0x00,0x00,0xc5,0x00,0x05,0x00, -0x13,0x00,0x00,0x00,0x95,0x01,0x00,0x00,0x8a,0x01,0x00,0x00, -0x94,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x6e,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x6e,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x13,0x00,0x00,0x00,0x9e,0x03,0x00,0x00,0x81,0x01,0x00,0x00, -0x6d,0x01,0x00,0x00,0x95,0x01,0x00,0x00,0x82,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0x55,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x55,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x13,0x00,0x00,0x00, -0x9f,0x03,0x00,0x00,0x68,0x01,0x00,0x00,0x54,0x01,0x00,0x00, -0x9e,0x03,0x00,0x00,0x6e,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0x2f,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x2f,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0x13,0x00,0x00,0x00,0xa0,0x03,0x00,0x00, -0x4f,0x01,0x00,0x00,0x2e,0x01,0x00,0x00,0x9f,0x03,0x00,0x00, -0x55,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0x27,0x01,0x00,0x00, -0x99,0x01,0x00,0x00,0xa0,0x03,0x00,0x00,0x41,0x00,0x07,0x00, -0x9c,0x01,0x00,0x00,0x9d,0x01,0x00,0x00,0x3a,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0x96,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x35,0x01,0x00,0x00,0x9e,0x01,0x00,0x00, -0x9d,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0xc3,0x00,0x00,0x00, -0x9f,0x01,0x00,0x00,0x9e,0x01,0x00,0x00,0x72,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0xa1,0x01,0x00,0x00,0x99,0x01,0x00,0x00, -0x82,0x00,0x05,0x00,0x13,0x00,0x00,0x00,0xa3,0x01,0x00,0x00, -0xa1,0x01,0x00,0x00,0xa2,0x01,0x00,0x00,0x6f,0x00,0x04,0x00, -0xc3,0x00,0x00,0x00,0xa4,0x01,0x00,0x00,0xa3,0x01,0x00,0x00, -0x85,0x00,0x05,0x00,0xc3,0x00,0x00,0x00,0xa5,0x01,0x00,0x00, -0x9f,0x01,0x00,0x00,0xa4,0x01,0x00,0x00,0x41,0x00,0x08,0x00, -0x3e,0x01,0x00,0x00,0xaf,0x01,0x00,0x00,0x3a,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0xcf,0x00,0x00,0x00, -0x0b,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x30,0x01,0x00,0x00, -0xb0,0x01,0x00,0x00,0xaf,0x01,0x00,0x00,0xc2,0x00,0x05,0x00, -0x30,0x01,0x00,0x00,0xb2,0x01,0x00,0x00,0xb0,0x01,0x00,0x00, -0x1f,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xb3,0x01,0x00,0x00,0xb2,0x01,0x00,0x00,0x7c,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0xb4,0x01,0x00,0x00,0xb3,0x01,0x00,0x00, -0xc7,0x00,0x05,0x00,0x13,0x00,0x00,0x00,0xb5,0x01,0x00,0x00, -0xb4,0x01,0x00,0x00,0x96,0x00,0x00,0x00,0x72,0x00,0x04,0x00, -0x27,0x01,0x00,0x00,0xb6,0x01,0x00,0x00,0xb5,0x01,0x00,0x00, -0x72,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0xb7,0x01,0x00,0x00, -0xb6,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x3e,0x01,0x00,0x00, -0xba,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0xfb,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x0a,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0x30,0x01,0x00,0x00,0xbb,0x01,0x00,0x00, -0xba,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xbc,0x01,0x00,0x00,0xbb,0x01,0x00,0x00,0xc7,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xbe,0x01,0x00,0x00,0xbc,0x01,0x00,0x00, -0x26,0x01,0x00,0x00,0xab,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0xbf,0x01,0x00,0x00,0xbe,0x01,0x00,0x00,0x3e,0x00,0x00,0x00, -0xa9,0x00,0x06,0x00,0x13,0x00,0x00,0x00,0xc0,0x01,0x00,0x00, -0xbf,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0xa8,0x00,0x00,0x00, -0x82,0x00,0x05,0x00,0x13,0x00,0x00,0x00,0xc1,0x01,0x00,0x00, -0xb7,0x01,0x00,0x00,0xc0,0x01,0x00,0x00,0x6f,0x00,0x04,0x00, -0xc3,0x00,0x00,0x00,0xc2,0x01,0x00,0x00,0xc1,0x01,0x00,0x00, -0x85,0x00,0x05,0x00,0xc3,0x00,0x00,0x00,0xc3,0x01,0x00,0x00, -0xa5,0x01,0x00,0x00,0xc2,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0xc4,0x01,0x00,0x00,0xc5,0x01,0x00,0x00,0xaa,0x01,0x00,0x00, -0xf7,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0xc5,0x01,0x00,0x00, -0xc3,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xc7,0x01,0x00,0x00,0xf7,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xcb,0x01,0x00,0x00, -0x0b,0x01,0x00,0x00,0x39,0x00,0x00,0x00,0x41,0x00,0x08,0x00, -0x3e,0x01,0x00,0x00,0xcc,0x01,0x00,0x00,0x3a,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0xcf,0x00,0x00,0x00, -0xcb,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x30,0x01,0x00,0x00, -0xcd,0x01,0x00,0x00,0xcc,0x01,0x00,0x00,0xc2,0x00,0x05,0x00, -0x30,0x01,0x00,0x00,0xcf,0x01,0x00,0x00,0xcd,0x01,0x00,0x00, -0x1f,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xd0,0x01,0x00,0x00,0xcf,0x01,0x00,0x00,0x7c,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0xd1,0x01,0x00,0x00,0xd0,0x01,0x00,0x00, -0xc7,0x00,0x05,0x00,0x13,0x00,0x00,0x00,0xd2,0x01,0x00,0x00, -0xd1,0x01,0x00,0x00,0x96,0x00,0x00,0x00,0x72,0x00,0x04,0x00, -0x27,0x01,0x00,0x00,0xd3,0x01,0x00,0x00,0xd2,0x01,0x00,0x00, -0x72,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0xd4,0x01,0x00,0x00, -0xd3,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd7,0x01,0x00,0x00,0x0a,0x01,0x00,0x00,0x39,0x00,0x00,0x00, -0x41,0x00,0x08,0x00,0x3e,0x01,0x00,0x00,0xd8,0x01,0x00,0x00, -0x3a,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0xfb,0x00,0x00,0x00, -0x34,0x00,0x00,0x00,0xd7,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0x30,0x01,0x00,0x00,0xd9,0x01,0x00,0x00,0xd8,0x01,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xda,0x01,0x00,0x00, -0xd9,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xdc,0x01,0x00,0x00,0xda,0x01,0x00,0x00,0x26,0x01,0x00,0x00, -0xab,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xdd,0x01,0x00,0x00, -0xdc,0x01,0x00,0x00,0x3e,0x00,0x00,0x00,0xa9,0x00,0x06,0x00, -0x13,0x00,0x00,0x00,0xde,0x01,0x00,0x00,0xdd,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x82,0x00,0x05,0x00, -0x13,0x00,0x00,0x00,0xdf,0x01,0x00,0x00,0xd4,0x01,0x00,0x00, -0xde,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,0xc3,0x00,0x00,0x00, -0xe0,0x01,0x00,0x00,0xdf,0x01,0x00,0x00,0x85,0x00,0x05,0x00, -0xc3,0x00,0x00,0x00,0xe1,0x01,0x00,0x00,0xa5,0x01,0x00,0x00, -0xe0,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0xc4,0x01,0x00,0x00, -0xe2,0x01,0x00,0x00,0xaa,0x01,0x00,0x00,0xc7,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0xe2,0x01,0x00,0x00,0xe1,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xdf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xdf,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xe9,0x01,0x00,0x00,0x78,0x03,0x00,0x00,0xe7,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xdc,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xde,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xeb,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xeb,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x79,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0xde,0x00,0x00,0x00,0x30,0x02,0x00,0x00,0xee,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xf1,0x01,0x00,0x00, -0x79,0x03,0x00,0x00,0xa6,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xed,0x01,0x00,0x00,0xee,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xf1,0x01,0x00,0x00,0xec,0x01,0x00,0x00, -0xed,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xec,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf5,0x01,0x00,0x00, -0xa7,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xf7,0x01,0x00,0x00,0xf5,0x01,0x00,0x00, -0x79,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0xf8,0x01,0x00,0x00,0x12,0x00,0x00,0x00,0xcf,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xf9,0x01,0x00,0x00, -0xf8,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0xfa,0x01,0x00,0x00,0xf7,0x01,0x00,0x00,0xf9,0x01,0x00,0x00, -0xf7,0x00,0x03,0x00,0xfc,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xfa,0x01,0x00,0x00,0xfb,0x01,0x00,0x00, -0xfc,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xfb,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xff,0x01,0x00,0x00, -0x68,0x03,0x00,0x00,0x78,0x00,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0x01,0x02,0x00,0x00,0xff,0x01,0x00,0x00, -0x8d,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xfc,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xfc,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0xc1,0x00,0x00,0x00,0x02,0x02,0x00,0x00,0xfa,0x01,0x00,0x00, -0xec,0x01,0x00,0x00,0x01,0x02,0x00,0x00,0xfb,0x01,0x00,0x00, -0xf7,0x00,0x03,0x00,0x04,0x02,0x00,0x00,0x00,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x02,0x02,0x00,0x00,0x03,0x02,0x00,0x00, -0x23,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x03,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0c,0x02,0x00,0x00, -0x7d,0x00,0x00,0x00,0x79,0x03,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x0e,0x02,0x00,0x00,0x0c,0x02,0x00,0x00, -0x0d,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x10,0x02,0x00,0x00,0x0e,0x02,0x00,0x00,0x78,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1b,0x02,0x00,0x00, -0x0c,0x02,0x00,0x00,0xaa,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x1c,0x02,0x00,0x00,0x80,0x03,0x00,0x00, -0x1b,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x1e,0x02,0x00,0x00,0x1c,0x02,0x00,0x00,0x78,0x00,0x00,0x00, -0x41,0x00,0x06,0x00,0x1f,0x02,0x00,0x00,0x20,0x02,0x00,0x00, -0x14,0x02,0x00,0x00,0x34,0x00,0x00,0x00,0x1e,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x21,0x02,0x00,0x00, -0x20,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xc4,0x01,0x00,0x00, -0x22,0x02,0x00,0x00,0x09,0x02,0x00,0x00,0x10,0x02,0x00,0x00, -0x3e,0x00,0x03,0x00,0x22,0x02,0x00,0x00,0x21,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x04,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x23,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x26,0x02,0x00,0x00,0x7d,0x00,0x00,0x00,0x79,0x03,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x28,0x02,0x00,0x00, -0x26,0x02,0x00,0x00,0x27,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x2a,0x02,0x00,0x00,0x28,0x02,0x00,0x00, -0x78,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0xc4,0x01,0x00,0x00, -0x2b,0x02,0x00,0x00,0x09,0x02,0x00,0x00,0x2a,0x02,0x00,0x00, -0x3e,0x00,0x03,0x00,0x2b,0x02,0x00,0x00,0xcb,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x04,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x04,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xee,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xee,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x30,0x02,0x00,0x00,0x79,0x03,0x00,0x00, -0x2e,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xeb,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xed,0x01,0x00,0x00,0xe0,0x00,0x04,0x00, -0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x31,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x34,0x02,0x00,0x00, -0x7c,0x03,0x00,0x00,0x32,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x37,0x02,0x00,0x00,0x80,0x03,0x00,0x00, -0x35,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x39,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x39,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x82,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0xed,0x01,0x00,0x00,0xe0,0x02,0x00,0x00,0x3c,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x3f,0x02,0x00,0x00, -0x82,0x03,0x00,0x00,0x6c,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x3b,0x02,0x00,0x00,0x3c,0x02,0x00,0x00,0x00,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x3f,0x02,0x00,0x00,0x3a,0x02,0x00,0x00, -0x3b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x3a,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x41,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x41,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x86,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0x3a,0x02,0x00,0x00, -0x6c,0x02,0x00,0x00,0x44,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0x47,0x02,0x00,0x00,0x86,0x03,0x00,0x00, -0x60,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x43,0x02,0x00,0x00, -0x44,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x47,0x02,0x00,0x00,0x42,0x02,0x00,0x00,0x43,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x42,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x49,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x49,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x98,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0x42,0x02,0x00,0x00,0x6a,0x02,0x00,0x00, -0x4a,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0x4f,0x02,0x00,0x00,0x98,0x03,0x00,0x00,0x62,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x4b,0x02,0x00,0x00,0x4a,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x4f,0x02,0x00,0x00, -0x4a,0x02,0x00,0x00,0x4b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x4a,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x55,0x02,0x00,0x00,0x86,0x03,0x00,0x00,0x62,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x57,0x02,0x00,0x00, -0x55,0x02,0x00,0x00,0x98,0x03,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x59,0x02,0x00,0x00,0x55,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x5b,0x02,0x00,0x00,0x86,0x03,0x00,0x00,0x61,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5c,0x02,0x00,0x00, -0x59,0x02,0x00,0x00,0x5b,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x5e,0x02,0x00,0x00,0x64,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x5f,0x02,0x00,0x00,0x5c,0x02,0x00,0x00,0x5e,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x61,0x02,0x00,0x00, -0x5f,0x02,0x00,0x00,0x98,0x03,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x63,0x02,0x00,0x00,0x61,0x02,0x00,0x00, -0x62,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x65,0x02,0x00,0x00,0x63,0x02,0x00,0x00,0x82,0x03,0x00,0x00, -0x41,0x00,0x05,0x00,0xc4,0x01,0x00,0x00,0x66,0x02,0x00,0x00, -0xaa,0x01,0x00,0x00,0x65,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc3,0x00,0x00,0x00,0x67,0x02,0x00,0x00,0x66,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,0x68,0x02,0x00,0x00, -0x53,0x02,0x00,0x00,0x57,0x02,0x00,0x00,0x3e,0x00,0x03,0x00, -0x68,0x02,0x00,0x00,0x67,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x6a,0x02,0x00,0x00,0x98,0x03,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x49,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x4b,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x44,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x44,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6c,0x02,0x00,0x00, -0x86,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x41,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x43,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x6e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x6e,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x87,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0x43,0x02,0x00,0x00, -0x9a,0x02,0x00,0x00,0x71,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0x74,0x02,0x00,0x00,0x87,0x03,0x00,0x00, -0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x70,0x02,0x00,0x00, -0x71,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x74,0x02,0x00,0x00,0x6f,0x02,0x00,0x00,0x70,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x6f,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x76,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x76,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x95,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0x6f,0x02,0x00,0x00,0x98,0x02,0x00,0x00, -0x77,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0x7c,0x02,0x00,0x00,0x95,0x03,0x00,0x00,0xbb,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x78,0x02,0x00,0x00,0x77,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x7c,0x02,0x00,0x00, -0x77,0x02,0x00,0x00,0x78,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x77,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x82,0x02,0x00,0x00,0x87,0x03,0x00,0x00,0xbb,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x84,0x02,0x00,0x00, -0x82,0x02,0x00,0x00,0x95,0x03,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x86,0x02,0x00,0x00,0x59,0x00,0x00,0x00, -0xb8,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x89,0x02,0x00,0x00,0x87,0x03,0x00,0x00,0x88,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8a,0x02,0x00,0x00, -0x86,0x02,0x00,0x00,0x89,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x8c,0x02,0x00,0x00,0x68,0x00,0x00,0x00, -0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x8d,0x02,0x00,0x00,0x8a,0x02,0x00,0x00,0x8c,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8f,0x02,0x00,0x00, -0x8d,0x02,0x00,0x00,0x95,0x03,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x91,0x02,0x00,0x00,0x8f,0x02,0x00,0x00, -0x90,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x93,0x02,0x00,0x00,0x91,0x02,0x00,0x00,0x82,0x03,0x00,0x00, -0x41,0x00,0x05,0x00,0xc4,0x01,0x00,0x00,0x94,0x02,0x00,0x00, -0x09,0x02,0x00,0x00,0x93,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc3,0x00,0x00,0x00,0x95,0x02,0x00,0x00,0x94,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,0x96,0x02,0x00,0x00, -0x80,0x02,0x00,0x00,0x84,0x02,0x00,0x00,0x3e,0x00,0x03,0x00, -0x96,0x02,0x00,0x00,0x95,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x98,0x02,0x00,0x00,0x95,0x03,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x76,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x78,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x71,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x71,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9a,0x02,0x00,0x00, -0x87,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x6e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x70,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x9c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x9c,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x88,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0x70,0x02,0x00,0x00, -0xde,0x02,0x00,0x00,0x9f,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0xa2,0x02,0x00,0x00,0x88,0x03,0x00,0x00, -0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x9e,0x02,0x00,0x00, -0x9f,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xa2,0x02,0x00,0x00,0x9d,0x02,0x00,0x00,0x9e,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x9d,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0xa4,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xa4,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x8c,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0x9d,0x02,0x00,0x00,0xdc,0x02,0x00,0x00, -0xa7,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0xaa,0x02,0x00,0x00,0x8c,0x03,0x00,0x00,0x60,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xa6,0x02,0x00,0x00,0xa7,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xaa,0x02,0x00,0x00, -0xa5,0x02,0x00,0x00,0xa6,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xa5,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xac,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xac,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x8e,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0xa5,0x02,0x00,0x00,0xda,0x02,0x00,0x00,0xaf,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xb2,0x02,0x00,0x00, -0x8e,0x03,0x00,0x00,0xbb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xae,0x02,0x00,0x00,0xaf,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xb2,0x02,0x00,0x00,0xad,0x02,0x00,0x00, -0xae,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xad,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0xb4,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xb4,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x90,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0xad,0x02,0x00,0x00, -0xd8,0x02,0x00,0x00,0xb5,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0xba,0x02,0x00,0x00,0x90,0x03,0x00,0x00, -0x62,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xb6,0x02,0x00,0x00, -0xb5,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xba,0x02,0x00,0x00,0xb5,0x02,0x00,0x00,0xb6,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xb5,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xbc,0x02,0x00,0x00,0x88,0x03,0x00,0x00, -0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xbe,0x02,0x00,0x00,0xbc,0x02,0x00,0x00,0x8e,0x03,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc0,0x02,0x00,0x00, -0xbe,0x02,0x00,0x00,0xbf,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xc2,0x02,0x00,0x00,0x8c,0x03,0x00,0x00, -0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xc3,0x02,0x00,0x00,0xc0,0x02,0x00,0x00,0xc2,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc5,0x02,0x00,0x00, -0xc3,0x02,0x00,0x00,0x90,0x03,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xc9,0x02,0x00,0x00,0xc2,0x02,0x00,0x00, -0x90,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00, -0xca,0x02,0x00,0x00,0x53,0x02,0x00,0x00,0xc9,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0xcb,0x02,0x00,0x00, -0xca,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00, -0xd0,0x02,0x00,0x00,0x80,0x02,0x00,0x00,0xbe,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0xd1,0x02,0x00,0x00, -0xd0,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00, -0xd3,0x02,0x00,0x00,0xc9,0x00,0x00,0x00,0xc5,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0xd4,0x02,0x00,0x00, -0xd3,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,0xc3,0x00,0x00,0x00, -0xd5,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0xcb,0x02,0x00,0x00,0xd1,0x02,0x00,0x00,0xd4,0x02,0x00,0x00, -0x3e,0x00,0x03,0x00,0xd3,0x02,0x00,0x00,0xd5,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd8,0x02,0x00,0x00, -0x90,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xb4,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xb6,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0xaf,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xaf,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xda,0x02,0x00,0x00,0x8e,0x03,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xac,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xae,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xa7,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xa7,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xdc,0x02,0x00,0x00,0x8c,0x03,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xa4,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xa6,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x9f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x9f,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xde,0x02,0x00,0x00, -0x88,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x9c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x9e,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x3c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x3c,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xe0,0x02,0x00,0x00,0x82,0x03,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x39,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x3b,0x02,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x31,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0xd6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd6,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe2,0x02,0x00,0x00, -0x68,0x03,0x00,0x00,0x6c,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xd3,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd5,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe7,0x02,0x00,0x00, -0x55,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xe8,0x02,0x00,0x00,0x95,0x00,0x00,0x00, -0xe7,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xed,0x02,0x00,0x00,0x59,0x00,0x00,0x00,0xb8,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xee,0x02,0x00,0x00, -0xa7,0x00,0x00,0x00,0xed,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0xf3,0x02,0x00,0x00,0x12,0x00,0x00,0x00, -0xf2,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xf4,0x02,0x00,0x00,0xf3,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xf5,0x02,0x00,0x00,0x0f,0x00,0x00,0x00, -0xf4,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xf9,0x02,0x00,0x00,0x47,0x00,0x00,0x00,0xf4,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0xfb,0x02,0x00,0x00, -0xfa,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xfc,0x02,0x00,0x00,0xfb,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfd,0x02,0x00,0x00, -0xf9,0x02,0x00,0x00,0xfc,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xfe,0x02,0x00,0x00,0xf5,0x02,0x00,0x00, -0xfd,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x00,0x03,0x00,0x00, -0xf8,0x00,0x02,0x00,0x00,0x03,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x69,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0xd5,0x00,0x00,0x00,0x66,0x03,0x00,0x00,0x03,0x03,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x06,0x03,0x00,0x00, -0x69,0x03,0x00,0x00,0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x02,0x03,0x00,0x00,0x03,0x03,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x06,0x03,0x00,0x00,0x01,0x03,0x00,0x00, -0x02,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x01,0x03,0x00,0x00, -0xf9,0x00,0x02,0x00,0x08,0x03,0x00,0x00,0xf8,0x00,0x02,0x00, -0x08,0x03,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x6a,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0x01,0x03,0x00,0x00, -0x64,0x03,0x00,0x00,0x0b,0x03,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0x0e,0x03,0x00,0x00,0x6a,0x03,0x00,0x00, -0x60,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x0a,0x03,0x00,0x00, -0x0b,0x03,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x0e,0x03,0x00,0x00,0x09,0x03,0x00,0x00,0x0a,0x03,0x00,0x00, -0xf8,0x00,0x02,0x00,0x09,0x03,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x12,0x03,0x00,0x00,0x6a,0x03,0x00,0x00, -0x61,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x13,0x03,0x00,0x00,0xe8,0x02,0x00,0x00,0x12,0x03,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x15,0x03,0x00,0x00, -0x64,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x16,0x03,0x00,0x00,0x13,0x03,0x00,0x00, -0x15,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x1a,0x03,0x00,0x00,0x69,0x03,0x00,0x00,0x88,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1b,0x03,0x00,0x00, -0xee,0x02,0x00,0x00,0x1a,0x03,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x1d,0x03,0x00,0x00,0x68,0x00,0x00,0x00, -0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x1e,0x03,0x00,0x00,0x1b,0x03,0x00,0x00,0x1d,0x03,0x00,0x00, -0xf9,0x00,0x02,0x00,0x20,0x03,0x00,0x00,0xf8,0x00,0x02,0x00, -0x20,0x03,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x6c,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0x09,0x03,0x00,0x00, -0x62,0x03,0x00,0x00,0x23,0x03,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0x26,0x03,0x00,0x00,0x6c,0x03,0x00,0x00, -0xbb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x22,0x03,0x00,0x00, -0x23,0x03,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x26,0x03,0x00,0x00,0x21,0x03,0x00,0x00,0x22,0x03,0x00,0x00, -0xf8,0x00,0x02,0x00,0x21,0x03,0x00,0x00,0xf9,0x00,0x02,0x00, -0x28,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x28,0x03,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x6e,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0x21,0x03,0x00,0x00,0x60,0x03,0x00,0x00, -0x2b,0x03,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0x2e,0x03,0x00,0x00,0x6e,0x03,0x00,0x00,0x62,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x2a,0x03,0x00,0x00,0x2b,0x03,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x2e,0x03,0x00,0x00, -0x29,0x03,0x00,0x00,0x2a,0x03,0x00,0x00,0xf8,0x00,0x02,0x00, -0x29,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x31,0x03,0x00,0x00,0x16,0x03,0x00,0x00,0x6e,0x03,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x34,0x03,0x00,0x00, -0x31,0x03,0x00,0x00,0x36,0x00,0x00,0x00,0xf7,0x00,0x03,0x00, -0x36,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x34,0x03,0x00,0x00,0x35,0x03,0x00,0x00,0x36,0x03,0x00,0x00, -0xf8,0x00,0x02,0x00,0x35,0x03,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x39,0x03,0x00,0x00,0x1e,0x03,0x00,0x00, -0x6c,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x3a,0x03,0x00,0x00,0x12,0x00,0x00,0x00,0xcf,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x3b,0x03,0x00,0x00, -0x3a,0x03,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0x3c,0x03,0x00,0x00,0x39,0x03,0x00,0x00,0x3b,0x03,0x00,0x00, -0xf9,0x00,0x02,0x00,0x36,0x03,0x00,0x00,0xf8,0x00,0x02,0x00, -0x36,0x03,0x00,0x00,0xf5,0x00,0x07,0x00,0xc1,0x00,0x00,0x00, -0x3d,0x03,0x00,0x00,0x34,0x03,0x00,0x00,0x29,0x03,0x00,0x00, -0x3c,0x03,0x00,0x00,0x35,0x03,0x00,0x00,0xf7,0x00,0x03,0x00, -0x3f,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x3d,0x03,0x00,0x00,0x3e,0x03,0x00,0x00,0x3f,0x03,0x00,0x00, -0xf8,0x00,0x02,0x00,0x3e,0x03,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x47,0x03,0x00,0x00,0x1e,0x03,0x00,0x00, -0x6c,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x49,0x03,0x00,0x00,0x12,0x00,0x00,0x00,0x48,0x03,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4a,0x03,0x00,0x00, -0x49,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x4b,0x03,0x00,0x00,0x47,0x03,0x00,0x00,0x4a,0x03,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4c,0x03,0x00,0x00, -0xfe,0x02,0x00,0x00,0x4b,0x03,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x4e,0x03,0x00,0x00,0x4c,0x03,0x00,0x00, -0x16,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x50,0x03,0x00,0x00,0x4e,0x03,0x00,0x00,0x6e,0x03,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x52,0x03,0x00,0x00, -0x69,0x03,0x00,0x00,0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x54,0x03,0x00,0x00,0x52,0x03,0x00,0x00, -0x6c,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x56,0x03,0x00,0x00,0x54,0x03,0x00,0x00,0x55,0x03,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x58,0x03,0x00,0x00, -0x6a,0x03,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x59,0x03,0x00,0x00,0x56,0x03,0x00,0x00, -0x58,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x5b,0x03,0x00,0x00,0x59,0x03,0x00,0x00,0x6e,0x03,0x00,0x00, -0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,0x5c,0x03,0x00,0x00, -0xc9,0x00,0x00,0x00,0x5b,0x03,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc3,0x00,0x00,0x00,0x5d,0x03,0x00,0x00,0x5c,0x03,0x00,0x00, -0x41,0x00,0x06,0x00,0x1f,0x02,0x00,0x00,0x5e,0x03,0x00,0x00, -0x43,0x03,0x00,0x00,0x34,0x00,0x00,0x00,0x50,0x03,0x00,0x00, -0x3e,0x00,0x03,0x00,0x5e,0x03,0x00,0x00,0x5d,0x03,0x00,0x00, -0xf9,0x00,0x02,0x00,0x3f,0x03,0x00,0x00,0xf8,0x00,0x02,0x00, -0x3f,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,0x2b,0x03,0x00,0x00, -0xf8,0x00,0x02,0x00,0x2b,0x03,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x60,0x03,0x00,0x00,0x6e,0x03,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x28,0x03,0x00,0x00, -0xf8,0x00,0x02,0x00,0x2a,0x03,0x00,0x00,0xf9,0x00,0x02,0x00, -0x23,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x23,0x03,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x62,0x03,0x00,0x00, -0x6c,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x20,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x22,0x03,0x00,0x00, -0xf9,0x00,0x02,0x00,0x0b,0x03,0x00,0x00,0xf8,0x00,0x02,0x00, -0x0b,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x64,0x03,0x00,0x00,0x6a,0x03,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x08,0x03,0x00,0x00,0xf8,0x00,0x02,0x00, -0x0a,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,0x03,0x03,0x00,0x00, -0xf8,0x00,0x02,0x00,0x03,0x03,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x66,0x03,0x00,0x00,0x69,0x03,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x00,0x03,0x00,0x00, -0xf8,0x00,0x02,0x00,0x02,0x03,0x00,0x00,0xfd,0x00,0x01,0x00, -0x38,0x00,0x01,0x00, -}; -const uint64_t matmul_q3_k_f32_fp32_len = 13024; - -unsigned char matmul_q4_0_f32_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0x1c,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x09,0x00,0x00,0x00, -0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00, -0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00, -0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30, -0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x0f,0x00,0x0f,0x00,0x05,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x4c,0x00,0x00,0x00,0x07,0x01,0x00,0x00,0x27,0x01,0x00,0x00, -0x5a,0x01,0x00,0x00,0x65,0x01,0x00,0x00,0x50,0x02,0x00,0x00, -0x99,0x02,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x05,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x30,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x0d,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0x10,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x37,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x3d,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x4c,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x4f,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x53,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x60,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x62,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x6c,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xa6,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xb8,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xbb,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x02,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x03,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x04,0x01,0x00,0x00, -0x06,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0x05,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x05,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x05,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x07,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x07,0x01,0x00,0x00,0x21,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x34,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x35,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x62,0x01,0x00,0x00,0x06,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x63,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x63,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x63,0x01,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x65,0x01,0x00,0x00, -0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x65,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x50,0x02,0x00,0x00,0x0b,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x96,0x02,0x00,0x00, -0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0x97,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x97,0x02,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x97,0x02,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x99,0x02,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x99,0x02,0x00,0x00,0x21,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00, -0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x1e,0x00,0x10,0x00,0x10,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x11,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x11,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x15,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0x0a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x27,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x3e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x61,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x63,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x61,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x67,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x61,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x72,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x85,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x90,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0xa1,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xa6,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xb7,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xb9,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0xb8,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xba,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x4f,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xbb,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xba,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xbc,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0xb9,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xb7,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xbf,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x14,0x00,0x02,0x00, -0xc1,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0xc3,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xc4,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xc5,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc4,0x00,0x00,0x00, -0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xc6,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc5,0x00,0x00,0x00, -0xbb,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xc7,0x00,0x00,0x00, -0xc3,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0xc8,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xc7,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0xcb,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xcc,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xf3,0x00,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xf9,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xfd,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x16,0x00,0x03,0x00, -0x00,0x01,0x00,0x00,0x10,0x00,0x00,0x00,0x15,0x00,0x04,0x00, -0x01,0x01,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x1c,0x00,0x04,0x00,0x02,0x01,0x00,0x00,0x01,0x01,0x00,0x00, -0xf9,0x00,0x00,0x00,0x1e,0x00,0x04,0x00,0x03,0x01,0x00,0x00, -0x00,0x01,0x00,0x00,0x02,0x01,0x00,0x00,0x1d,0x00,0x03,0x00, -0x04,0x01,0x00,0x00,0x03,0x01,0x00,0x00,0x1e,0x00,0x03,0x00, -0x05,0x01,0x00,0x00,0x04,0x01,0x00,0x00,0x20,0x00,0x04,0x00, -0x06,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x05,0x01,0x00,0x00, -0x3b,0x00,0x04,0x00,0x06,0x01,0x00,0x00,0x07,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x09,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x20,0x00,0x04,0x00, -0x10,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x01,0x01,0x00,0x00, -0x17,0x00,0x04,0x00,0x14,0x01,0x00,0x00,0xc3,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0xc3,0x00,0x00,0x00, -0x1e,0x01,0x00,0x00,0x00,0x00,0x00,0x41,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x23,0x01,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x24,0x01,0x00,0x00,0x84,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x23,0x01,0x00,0x00,0x1c,0x00,0x04,0x00, -0x25,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x24,0x01,0x00,0x00, -0x20,0x00,0x04,0x00,0x26,0x01,0x00,0x00,0x04,0x00,0x00,0x00, -0x25,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x26,0x01,0x00,0x00, -0x27,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x2c,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x01,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x34,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00,0x09,0x00,0x00,0x00, -0x35,0x01,0x00,0x00,0x34,0x01,0x00,0x00,0x39,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x36,0x01,0x00,0x00,0x51,0x00,0x00,0x00,0x35,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x37,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x36,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x38,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x37,0x01,0x00,0x00, -0x6c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x56,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x57,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0xa6,0x00,0x00,0x00, -0x56,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,0x58,0x01,0x00,0x00, -0x00,0x01,0x00,0x00,0x57,0x01,0x00,0x00,0x20,0x00,0x04,0x00, -0x59,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x58,0x01,0x00,0x00, -0x3b,0x00,0x04,0x00,0x59,0x01,0x00,0x00,0x5a,0x01,0x00,0x00, -0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x5e,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x62,0x01,0x00,0x00, -0xc3,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x63,0x01,0x00,0x00, -0x62,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x64,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x63,0x01,0x00,0x00,0x3b,0x00,0x04,0x00, -0x64,0x01,0x00,0x00,0x65,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x70,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0xc3,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x79,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x00,0x01,0x00,0x00, -0x7d,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x7f,0x01,0x00,0x00,0x51,0x00,0x00,0x00, -0x35,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x84,0x00,0x00,0x00, -0x7f,0x01,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x81,0x01,0x00,0x00,0x86,0x00,0x00,0x00, -0x80,0x01,0x00,0x00,0x6c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x84,0x01,0x00,0x00,0x08,0x01,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x85,0x01,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x88,0x01,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xa3,0x01,0x00,0x00, -0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x1c,0x00,0x04,0x00,0xa4,0x01,0x00,0x00,0x00,0x01,0x00,0x00, -0xa3,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0xa5,0x01,0x00,0x00, -0x07,0x00,0x00,0x00,0xa4,0x01,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xb5,0x01,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0xbb,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x00,0x01,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xd1,0x01,0x00,0x00, -0x84,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0xbb,0x00,0x00,0x00, -0x1c,0x00,0x04,0x00,0xd2,0x01,0x00,0x00,0x00,0x01,0x00,0x00, -0xd1,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0xd3,0x01,0x00,0x00, -0x07,0x00,0x00,0x00,0xd2,0x01,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xdc,0x01,0x00,0x00,0x86,0x00,0x00,0x00, -0xb8,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xe4,0x01,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x13,0x02,0x00,0x00,0x84,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x48,0x02,0x00,0x00,0x0d,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x50,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x96,0x02,0x00,0x00, -0xc3,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x97,0x02,0x00,0x00, -0x96,0x02,0x00,0x00,0x20,0x00,0x04,0x00,0x98,0x02,0x00,0x00, -0x0c,0x00,0x00,0x00,0x97,0x02,0x00,0x00,0x3b,0x00,0x04,0x00, -0x98,0x02,0x00,0x00,0x99,0x02,0x00,0x00,0x0c,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x9e,0x02,0x00,0x00, -0x05,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xab,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x2c,0x00,0x05,0x00,0x14,0x01,0x00,0x00, -0x1b,0x03,0x00,0x00,0x1e,0x01,0x00,0x00,0x1e,0x01,0x00,0x00, -0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x05,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xc8,0x00,0x00,0x00, -0xc9,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0xa5,0x01,0x00,0x00,0xa6,0x01,0x00,0x00,0x07,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0xd3,0x01,0x00,0x00,0xd4,0x01,0x00,0x00, -0x07,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x16,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x17,0x00,0x00,0x00, -0x16,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x17,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1e,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x21,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x28,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x27,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x29,0x00,0x00,0x00, -0x28,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x2a,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x29,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x2e,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00, -0x24,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x30,0x00,0x00,0x00, -0x2a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x35,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x36,0x00,0x00,0x00, -0x35,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x38,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00, -0x38,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x3a,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x3f,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x3e,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x3f,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x42,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x3b,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x47,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x4a,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x4c,0x00,0x00,0x00, -0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x4f,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x55,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x54,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00, -0x50,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x4f,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x64,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,0x63,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x68,0x00,0x00,0x00, -0x5d,0x00,0x00,0x00,0x67,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x6d,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x73,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x72,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x78,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x7c,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x81,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x80,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x82,0x00,0x00,0x00, -0x81,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x83,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0x82,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x89,0x00,0x00,0x00, -0x47,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,0x89,0x00,0x00,0x00, -0x82,0x00,0x00,0x00,0x0c,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x8d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x26,0x00,0x00,0x00, -0x87,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x90,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x92,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x92,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x95,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x97,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x97,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x99,0x00,0x00,0x00, -0x95,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x93,0x00,0x00,0x00, -0x99,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9c,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x83,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9d,0x00,0x00,0x00, -0x9c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0xa1,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xa3,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0xa3,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa7,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0xa6,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0xa9,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0xa9,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xab,0x00,0x00,0x00, -0xa7,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0xa4,0x00,0x00,0x00, -0xab,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xae,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0x83,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xaf,0x00,0x00,0x00, -0xae,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xb1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb1,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xbf,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0xd0,0x00,0x00,0x00, -0xb2,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0xc2,0x00,0x00,0x00,0xbf,0x02,0x00,0x00,0xc0,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xb3,0x00,0x00,0x00,0xb2,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xc2,0x00,0x00,0x00, -0xb2,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xb2,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00, -0xcd,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0xbf,0x02,0x00,0x00, -0x3e,0x00,0x03,0x00,0xcd,0x00,0x00,0x00,0xcb,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd0,0x00,0x00,0x00, -0xbf,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xb1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb3,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xd3,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xd3,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xd8,0x02,0x00,0x00,0xaf,0x00,0x00,0x00,0xb3,0x00,0x00,0x00, -0x8a,0x01,0x00,0x00,0xd6,0x00,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xd4,0x02,0x00,0x00,0x9d,0x00,0x00,0x00, -0xb3,0x00,0x00,0x00,0x87,0x01,0x00,0x00,0xd6,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xc0,0x02,0x00,0x00, -0x83,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0x38,0x02,0x00,0x00, -0xd6,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0xda,0x00,0x00,0x00,0xc0,0x02,0x00,0x00,0x8d,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xd5,0x00,0x00,0x00,0xd6,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xda,0x00,0x00,0x00, -0xd4,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xd4,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xdc,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xdc,0x00,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xd0,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0xd4,0x00,0x00,0x00,0x3a,0x01,0x00,0x00,0xdd,0x00,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xe2,0x00,0x00,0x00, -0xd0,0x02,0x00,0x00,0x37,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xde,0x00,0x00,0x00,0xdd,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xe2,0x00,0x00,0x00,0xdd,0x00,0x00,0x00, -0xde,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdd,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe7,0x00,0x00,0x00, -0x73,0x00,0x00,0x00,0xd0,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xea,0x00,0x00,0x00,0xe7,0x00,0x00,0x00, -0x98,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xeb,0x00,0x00,0x00,0xea,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xec,0x00,0x00,0x00, -0xd4,0x02,0x00,0x00,0xeb,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xee,0x00,0x00,0x00,0xec,0x00,0x00,0x00, -0x6e,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xf4,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,0xf3,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf6,0x00,0x00,0x00, -0xf4,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0xee,0x00,0x00,0x00, -0xf9,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xfe,0x00,0x00,0x00,0xee,0x00,0x00,0x00,0xfd,0x00,0x00,0x00, -0x41,0x00,0x07,0x00,0x09,0x01,0x00,0x00,0x0a,0x01,0x00,0x00, -0x07,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0xfa,0x00,0x00,0x00, -0x34,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x00,0x01,0x00,0x00, -0x0b,0x01,0x00,0x00,0x0a,0x01,0x00,0x00,0x73,0x00,0x04,0x00, -0xc3,0x00,0x00,0x00,0x0c,0x01,0x00,0x00,0x0b,0x01,0x00,0x00, -0x41,0x00,0x08,0x00,0x10,0x01,0x00,0x00,0x11,0x01,0x00,0x00, -0x07,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0xfa,0x00,0x00,0x00, -0xcf,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x01,0x01,0x00,0x00,0x12,0x01,0x00,0x00,0x11,0x01,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x13,0x01,0x00,0x00, -0x12,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x18,0x01,0x00,0x00,0x13,0x01,0x00,0x00,0xfd,0x00,0x00,0x00, -0x70,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x19,0x01,0x00,0x00, -0x18,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x1b,0x01,0x00,0x00,0x13,0x01,0x00,0x00,0xa8,0x00,0x00,0x00, -0x70,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x1c,0x01,0x00,0x00, -0x1b,0x01,0x00,0x00,0x50,0x00,0x05,0x00,0x14,0x01,0x00,0x00, -0x1d,0x01,0x00,0x00,0x19,0x01,0x00,0x00,0x1c,0x01,0x00,0x00, -0x83,0x00,0x05,0x00,0x14,0x01,0x00,0x00,0x20,0x01,0x00,0x00, -0x1d,0x01,0x00,0x00,0x1b,0x03,0x00,0x00,0x8e,0x00,0x05,0x00, -0x14,0x01,0x00,0x00,0x22,0x01,0x00,0x00,0x20,0x01,0x00,0x00, -0x0c,0x01,0x00,0x00,0x51,0x00,0x05,0x00,0xc3,0x00,0x00,0x00, -0x2a,0x01,0x00,0x00,0x22,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x73,0x00,0x04,0x00,0x00,0x01,0x00,0x00,0x2b,0x01,0x00,0x00, -0x2a,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x2c,0x01,0x00,0x00, -0x2d,0x01,0x00,0x00,0x27,0x01,0x00,0x00,0xf6,0x00,0x00,0x00, -0x3e,0x00,0x03,0x00,0x2d,0x01,0x00,0x00,0x2b,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2f,0x01,0x00,0x00, -0xf6,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,0x51,0x00,0x05,0x00, -0xc3,0x00,0x00,0x00,0x31,0x01,0x00,0x00,0x22,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x00,0x01,0x00,0x00, -0x32,0x01,0x00,0x00,0x31,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x2c,0x01,0x00,0x00,0x33,0x01,0x00,0x00,0x27,0x01,0x00,0x00, -0x2f,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x33,0x01,0x00,0x00, -0x32,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x3a,0x01,0x00,0x00,0xd0,0x02,0x00,0x00,0x38,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xdc,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xde,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x3c,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x3c,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xd1,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0xde,0x00,0x00,0x00,0x83,0x01,0x00,0x00,0x3f,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x42,0x01,0x00,0x00, -0xd1,0x02,0x00,0x00,0xa6,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x3e,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x42,0x01,0x00,0x00,0x3d,0x01,0x00,0x00, -0x3e,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x3d,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x46,0x01,0x00,0x00, -0xa7,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x48,0x01,0x00,0x00,0x46,0x01,0x00,0x00, -0xd1,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x49,0x01,0x00,0x00,0x12,0x00,0x00,0x00,0xcf,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4a,0x01,0x00,0x00, -0x49,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0x4b,0x01,0x00,0x00,0x48,0x01,0x00,0x00,0x4a,0x01,0x00,0x00, -0xf7,0x00,0x03,0x00,0x4d,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x4b,0x01,0x00,0x00,0x4c,0x01,0x00,0x00, -0x4d,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x4c,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x50,0x01,0x00,0x00, -0xc0,0x02,0x00,0x00,0x78,0x00,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0x52,0x01,0x00,0x00,0x50,0x01,0x00,0x00, -0x8d,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x4d,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x4d,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0xc1,0x00,0x00,0x00,0x53,0x01,0x00,0x00,0x4b,0x01,0x00,0x00, -0x3d,0x01,0x00,0x00,0x52,0x01,0x00,0x00,0x4c,0x01,0x00,0x00, -0xf7,0x00,0x03,0x00,0x55,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x53,0x01,0x00,0x00,0x54,0x01,0x00,0x00, -0x75,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x54,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5d,0x01,0x00,0x00, -0x7d,0x00,0x00,0x00,0xd1,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x5f,0x01,0x00,0x00,0x5d,0x01,0x00,0x00, -0x5e,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x61,0x01,0x00,0x00,0x5f,0x01,0x00,0x00,0x78,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6c,0x01,0x00,0x00, -0x5d,0x01,0x00,0x00,0xaa,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x6d,0x01,0x00,0x00,0xd8,0x02,0x00,0x00, -0x6c,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x6f,0x01,0x00,0x00,0x6d,0x01,0x00,0x00,0x78,0x00,0x00,0x00, -0x41,0x00,0x06,0x00,0x70,0x01,0x00,0x00,0x71,0x01,0x00,0x00, -0x65,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0x6f,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x72,0x01,0x00,0x00, -0x71,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x00,0x01,0x00,0x00, -0x73,0x01,0x00,0x00,0x72,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x2c,0x01,0x00,0x00,0x74,0x01,0x00,0x00,0x5a,0x01,0x00,0x00, -0x61,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x74,0x01,0x00,0x00, -0x73,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x55,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x75,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x78,0x01,0x00,0x00,0x7d,0x00,0x00,0x00, -0xd1,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x7a,0x01,0x00,0x00,0x78,0x01,0x00,0x00,0x79,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7c,0x01,0x00,0x00, -0x7a,0x01,0x00,0x00,0x78,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x2c,0x01,0x00,0x00,0x7e,0x01,0x00,0x00,0x5a,0x01,0x00,0x00, -0x7c,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x7e,0x01,0x00,0x00, -0x7d,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x55,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x55,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0x3f,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x3f,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x83,0x01,0x00,0x00, -0xd1,0x02,0x00,0x00,0x81,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0x3c,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x3e,0x01,0x00,0x00, -0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x84,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x87,0x01,0x00,0x00,0xd4,0x02,0x00,0x00,0x85,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8a,0x01,0x00,0x00, -0xd8,0x02,0x00,0x00,0x88,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0x8c,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x8c,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xda,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0x3e,0x01,0x00,0x00,0x36,0x02,0x00,0x00, -0x8f,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0x92,0x01,0x00,0x00,0xda,0x02,0x00,0x00,0x6c,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x8e,0x01,0x00,0x00,0x8f,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x92,0x01,0x00,0x00, -0x8d,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x8d,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x94,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x94,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xde,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0x8d,0x01,0x00,0x00,0xc0,0x01,0x00,0x00,0x97,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x9a,0x01,0x00,0x00, -0xde,0x02,0x00,0x00,0x60,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x96,0x01,0x00,0x00,0x97,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x9a,0x01,0x00,0x00,0x95,0x01,0x00,0x00, -0x96,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x95,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0x9c,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x9c,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xf0,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0x95,0x01,0x00,0x00, -0xbe,0x01,0x00,0x00,0x9d,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0xa2,0x01,0x00,0x00,0xf0,0x02,0x00,0x00, -0x62,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x9e,0x01,0x00,0x00, -0x9d,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xa2,0x01,0x00,0x00,0x9d,0x01,0x00,0x00,0x9e,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x9d,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa8,0x01,0x00,0x00,0xde,0x02,0x00,0x00, -0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xaa,0x01,0x00,0x00,0xa8,0x01,0x00,0x00,0xf0,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xac,0x01,0x00,0x00, -0x55,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xae,0x01,0x00,0x00,0xde,0x02,0x00,0x00, -0x61,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xaf,0x01,0x00,0x00,0xac,0x01,0x00,0x00,0xae,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb1,0x01,0x00,0x00, -0x64,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xb2,0x01,0x00,0x00,0xaf,0x01,0x00,0x00, -0xb1,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xb4,0x01,0x00,0x00,0xb2,0x01,0x00,0x00,0xf0,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb6,0x01,0x00,0x00, -0xb4,0x01,0x00,0x00,0xb5,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xb8,0x01,0x00,0x00,0xb6,0x01,0x00,0x00, -0xda,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x2c,0x01,0x00,0x00, -0xb9,0x01,0x00,0x00,0x27,0x01,0x00,0x00,0xb8,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0x00,0x01,0x00,0x00,0xba,0x01,0x00,0x00, -0xb9,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0xbb,0x01,0x00,0x00, -0xbc,0x01,0x00,0x00,0xa6,0x01,0x00,0x00,0xaa,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0xbc,0x01,0x00,0x00,0xba,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbe,0x01,0x00,0x00, -0xf0,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x9c,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x9e,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0x97,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x97,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xc0,0x01,0x00,0x00,0xde,0x02,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x94,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x96,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xc2,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xc2,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xdf,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0x96,0x01,0x00,0x00,0xee,0x01,0x00,0x00,0xc5,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xc8,0x01,0x00,0x00, -0xdf,0x02,0x00,0x00,0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xc4,0x01,0x00,0x00,0xc5,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xc8,0x01,0x00,0x00,0xc3,0x01,0x00,0x00, -0xc4,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xc3,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xca,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xca,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xed,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0xc3,0x01,0x00,0x00, -0xec,0x01,0x00,0x00,0xcb,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0xd0,0x01,0x00,0x00,0xed,0x02,0x00,0x00, -0xbb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xcc,0x01,0x00,0x00, -0xcb,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xd0,0x01,0x00,0x00,0xcb,0x01,0x00,0x00,0xcc,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xcb,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xd6,0x01,0x00,0x00,0xdf,0x02,0x00,0x00, -0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd8,0x01,0x00,0x00,0xd6,0x01,0x00,0x00,0xed,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xda,0x01,0x00,0x00, -0x59,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xdd,0x01,0x00,0x00,0xdf,0x02,0x00,0x00, -0xdc,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xde,0x01,0x00,0x00,0xda,0x01,0x00,0x00,0xdd,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe0,0x01,0x00,0x00, -0x68,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xe1,0x01,0x00,0x00,0xde,0x01,0x00,0x00, -0xe0,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xe3,0x01,0x00,0x00,0xe1,0x01,0x00,0x00,0xed,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe5,0x01,0x00,0x00, -0xe3,0x01,0x00,0x00,0xe4,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xe7,0x01,0x00,0x00,0xe5,0x01,0x00,0x00, -0xda,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x2c,0x01,0x00,0x00, -0xe8,0x01,0x00,0x00,0x5a,0x01,0x00,0x00,0xe7,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0x00,0x01,0x00,0x00,0xe9,0x01,0x00,0x00, -0xe8,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0xbb,0x01,0x00,0x00, -0xea,0x01,0x00,0x00,0xd4,0x01,0x00,0x00,0xd8,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0xea,0x01,0x00,0x00,0xe9,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xec,0x01,0x00,0x00, -0xed,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xca,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xcc,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xc5,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xc5,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xee,0x01,0x00,0x00,0xdf,0x02,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xc2,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xc4,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xf0,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xf0,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xe0,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0xc4,0x01,0x00,0x00,0x34,0x02,0x00,0x00,0xf3,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xf6,0x01,0x00,0x00, -0xe0,0x02,0x00,0x00,0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xf2,0x01,0x00,0x00,0xf3,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xf6,0x01,0x00,0x00,0xf1,0x01,0x00,0x00, -0xf2,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xf1,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xf8,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xf8,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xe4,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0xf1,0x01,0x00,0x00, -0x32,0x02,0x00,0x00,0xfb,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0xfe,0x01,0x00,0x00,0xe4,0x02,0x00,0x00, -0x60,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xfa,0x01,0x00,0x00, -0xfb,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xfe,0x01,0x00,0x00,0xf9,0x01,0x00,0x00,0xfa,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xf9,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0x00,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x00,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xe6,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0xf9,0x01,0x00,0x00,0x30,0x02,0x00,0x00, -0x03,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0x06,0x02,0x00,0x00,0xe6,0x02,0x00,0x00,0xbb,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x02,0x02,0x00,0x00,0x03,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x06,0x02,0x00,0x00, -0x01,0x02,0x00,0x00,0x02,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x01,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x08,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x08,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xe8,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0x01,0x02,0x00,0x00,0x2e,0x02,0x00,0x00,0x09,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x0e,0x02,0x00,0x00, -0xe8,0x02,0x00,0x00,0x62,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x0a,0x02,0x00,0x00,0x09,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x0e,0x02,0x00,0x00,0x09,0x02,0x00,0x00, -0x0a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x09,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x10,0x02,0x00,0x00, -0xe0,0x02,0x00,0x00,0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x12,0x02,0x00,0x00,0x10,0x02,0x00,0x00, -0xe6,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x14,0x02,0x00,0x00,0x12,0x02,0x00,0x00,0x13,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x16,0x02,0x00,0x00, -0xe4,0x02,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x17,0x02,0x00,0x00,0x14,0x02,0x00,0x00, -0x16,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x19,0x02,0x00,0x00,0x17,0x02,0x00,0x00,0xe8,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1d,0x02,0x00,0x00, -0x16,0x02,0x00,0x00,0xe8,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0xbb,0x01,0x00,0x00,0x1e,0x02,0x00,0x00,0xa6,0x01,0x00,0x00, -0x1d,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x00,0x01,0x00,0x00, -0x1f,0x02,0x00,0x00,0x1e,0x02,0x00,0x00,0x73,0x00,0x04,0x00, -0xc3,0x00,0x00,0x00,0x20,0x02,0x00,0x00,0x1f,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0xbb,0x01,0x00,0x00,0x25,0x02,0x00,0x00, -0xd4,0x01,0x00,0x00,0x12,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0x00,0x01,0x00,0x00,0x26,0x02,0x00,0x00,0x25,0x02,0x00,0x00, -0x73,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x27,0x02,0x00,0x00, -0x26,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00, -0x29,0x02,0x00,0x00,0xc9,0x00,0x00,0x00,0x19,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x2a,0x02,0x00,0x00, -0x29,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,0xc3,0x00,0x00,0x00, -0x2b,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x20,0x02,0x00,0x00,0x27,0x02,0x00,0x00,0x2a,0x02,0x00,0x00, -0x3e,0x00,0x03,0x00,0x29,0x02,0x00,0x00,0x2b,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2e,0x02,0x00,0x00, -0xe8,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x08,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x0a,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x03,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x03,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x30,0x02,0x00,0x00,0xe6,0x02,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x00,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x02,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xfb,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xfb,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x32,0x02,0x00,0x00,0xe4,0x02,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xf8,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xfa,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xf3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xf3,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x34,0x02,0x00,0x00, -0xe0,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xf0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xf2,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0x8f,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x8f,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x36,0x02,0x00,0x00,0xda,0x02,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x8c,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x8e,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x84,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xd6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd6,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x38,0x02,0x00,0x00, -0xc0,0x02,0x00,0x00,0x6c,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xd3,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd5,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3d,0x02,0x00,0x00, -0x55,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3e,0x02,0x00,0x00,0x95,0x00,0x00,0x00, -0x3d,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x43,0x02,0x00,0x00,0x59,0x00,0x00,0x00,0xb8,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x44,0x02,0x00,0x00, -0xa7,0x00,0x00,0x00,0x43,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x49,0x02,0x00,0x00,0x12,0x00,0x00,0x00, -0x48,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x4a,0x02,0x00,0x00,0x49,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x4b,0x02,0x00,0x00,0x0f,0x00,0x00,0x00, -0x4a,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x4f,0x02,0x00,0x00,0x47,0x00,0x00,0x00,0x4a,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x51,0x02,0x00,0x00, -0x50,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x52,0x02,0x00,0x00,0x51,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x53,0x02,0x00,0x00, -0x4f,0x02,0x00,0x00,0x52,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x54,0x02,0x00,0x00,0x4b,0x02,0x00,0x00, -0x53,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x56,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x56,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xc1,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0xd5,0x00,0x00,0x00,0xbc,0x02,0x00,0x00,0x59,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x5c,0x02,0x00,0x00, -0xc1,0x02,0x00,0x00,0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x58,0x02,0x00,0x00,0x59,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x5c,0x02,0x00,0x00,0x57,0x02,0x00,0x00, -0x58,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x57,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x5e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x5e,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xc2,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0x57,0x02,0x00,0x00, -0xba,0x02,0x00,0x00,0x61,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0x64,0x02,0x00,0x00,0xc2,0x02,0x00,0x00, -0x60,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x60,0x02,0x00,0x00, -0x61,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x64,0x02,0x00,0x00,0x5f,0x02,0x00,0x00,0x60,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x5f,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x68,0x02,0x00,0x00,0xc2,0x02,0x00,0x00, -0x61,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x69,0x02,0x00,0x00,0x3e,0x02,0x00,0x00,0x68,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6b,0x02,0x00,0x00, -0x64,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x6c,0x02,0x00,0x00,0x69,0x02,0x00,0x00, -0x6b,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x70,0x02,0x00,0x00,0xc1,0x02,0x00,0x00,0xdc,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x71,0x02,0x00,0x00, -0x44,0x02,0x00,0x00,0x70,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x73,0x02,0x00,0x00,0x68,0x00,0x00,0x00, -0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x74,0x02,0x00,0x00,0x71,0x02,0x00,0x00,0x73,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x76,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x76,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xc4,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0x5f,0x02,0x00,0x00, -0xb8,0x02,0x00,0x00,0x79,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0x7c,0x02,0x00,0x00,0xc4,0x02,0x00,0x00, -0xbb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x78,0x02,0x00,0x00, -0x79,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x7c,0x02,0x00,0x00,0x77,0x02,0x00,0x00,0x78,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x77,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x7e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x7e,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xc6,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0x77,0x02,0x00,0x00,0xb6,0x02,0x00,0x00, -0x81,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0x84,0x02,0x00,0x00,0xc6,0x02,0x00,0x00,0x62,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x80,0x02,0x00,0x00,0x81,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x84,0x02,0x00,0x00, -0x7f,0x02,0x00,0x00,0x80,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x7f,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x87,0x02,0x00,0x00,0x6c,0x02,0x00,0x00,0xc6,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x8a,0x02,0x00,0x00, -0x87,0x02,0x00,0x00,0x36,0x00,0x00,0x00,0xf7,0x00,0x03,0x00, -0x8c,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x8a,0x02,0x00,0x00,0x8b,0x02,0x00,0x00,0x8c,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x8b,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x8f,0x02,0x00,0x00,0x74,0x02,0x00,0x00, -0xc4,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x90,0x02,0x00,0x00,0x12,0x00,0x00,0x00,0xcf,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x91,0x02,0x00,0x00, -0x90,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0x92,0x02,0x00,0x00,0x8f,0x02,0x00,0x00,0x91,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x8c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x8c,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0xc1,0x00,0x00,0x00, -0x93,0x02,0x00,0x00,0x8a,0x02,0x00,0x00,0x7f,0x02,0x00,0x00, -0x92,0x02,0x00,0x00,0x8b,0x02,0x00,0x00,0xf7,0x00,0x03,0x00, -0x95,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x93,0x02,0x00,0x00,0x94,0x02,0x00,0x00,0x95,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x94,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9d,0x02,0x00,0x00,0x74,0x02,0x00,0x00, -0xc4,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x9f,0x02,0x00,0x00,0x12,0x00,0x00,0x00,0x9e,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa0,0x02,0x00,0x00, -0x9f,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa1,0x02,0x00,0x00,0x9d,0x02,0x00,0x00,0xa0,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa2,0x02,0x00,0x00, -0x54,0x02,0x00,0x00,0xa1,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa4,0x02,0x00,0x00,0xa2,0x02,0x00,0x00, -0x6c,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa6,0x02,0x00,0x00,0xa4,0x02,0x00,0x00,0xc6,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa8,0x02,0x00,0x00, -0xc1,0x02,0x00,0x00,0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xaa,0x02,0x00,0x00,0xa8,0x02,0x00,0x00, -0xc4,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xac,0x02,0x00,0x00,0xaa,0x02,0x00,0x00,0xab,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xae,0x02,0x00,0x00, -0xc2,0x02,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xaf,0x02,0x00,0x00,0xac,0x02,0x00,0x00, -0xae,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xb1,0x02,0x00,0x00,0xaf,0x02,0x00,0x00,0xc6,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,0xb2,0x02,0x00,0x00, -0xc9,0x00,0x00,0x00,0xb1,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc3,0x00,0x00,0x00,0xb3,0x02,0x00,0x00,0xb2,0x02,0x00,0x00, -0x41,0x00,0x06,0x00,0x70,0x01,0x00,0x00,0xb4,0x02,0x00,0x00, -0x99,0x02,0x00,0x00,0x34,0x00,0x00,0x00,0xa6,0x02,0x00,0x00, -0x3e,0x00,0x03,0x00,0xb4,0x02,0x00,0x00,0xb3,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x95,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x95,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x81,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x81,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xb6,0x02,0x00,0x00,0xc6,0x02,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x7e,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x80,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x79,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x79,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb8,0x02,0x00,0x00, -0xc4,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x76,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x78,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x61,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x61,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xba,0x02,0x00,0x00,0xc2,0x02,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x5e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x60,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x59,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x59,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xbc,0x02,0x00,0x00,0xc1,0x02,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x56,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x58,0x02,0x00,0x00,0xfd,0x00,0x01,0x00, -0x38,0x00,0x01,0x00, -}; -const uint64_t matmul_q4_0_f32_len = 10564; - -unsigned char matmul_q4_0_f32_aligned_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0x37,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x09,0x00,0x00,0x00, -0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00, -0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00, -0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30, -0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x0f,0x00,0x0f,0x00,0x05,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x4c,0x00,0x00,0x00,0x08,0x01,0x00,0x00,0x28,0x01,0x00,0x00, -0x5d,0x01,0x00,0x00,0x65,0x01,0x00,0x00,0x73,0x02,0x00,0x00, -0xbc,0x02,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x05,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x30,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x0d,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0x10,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x37,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x3d,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x4c,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x4f,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x53,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x60,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x62,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x6c,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xa7,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xb9,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xbc,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x03,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x04,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x04,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x05,0x01,0x00,0x00, -0x06,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0x06,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x06,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x06,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x08,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x08,0x01,0x00,0x00,0x21,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x35,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x36,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x62,0x01,0x00,0x00,0x06,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x63,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0x63,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x63,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x63,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x63,0x01,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x65,0x01,0x00,0x00, -0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x65,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x73,0x02,0x00,0x00,0x0b,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xb9,0x02,0x00,0x00, -0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0xba,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0xba,0x02,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0xba,0x02,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xbc,0x02,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xbc,0x02,0x00,0x00,0x21,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00, -0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x1e,0x00,0x10,0x00,0x10,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x11,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x11,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x15,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0x0a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x27,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x3e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x61,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x63,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x61,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x67,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x61,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x72,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x78,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x77,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x7d,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x77,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x81,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x97,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0xa2,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0xa9,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xb8,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xb9,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x4f,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbd,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0xbc,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbe,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbf,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0xbe,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc0,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0xbf,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc1,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0xbc,0x00,0x00,0x00, -0x14,0x00,0x02,0x00,0xc2,0x00,0x00,0x00,0x16,0x00,0x03,0x00, -0xc4,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xc5,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xc6,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x1c,0x00,0x04,0x00, -0xc8,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0xc7,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0xc9,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0xc8,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0xcc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0xcd,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xc4,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0xd0,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xf4,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xfa,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x16,0x00,0x03,0x00,0x01,0x01,0x00,0x00,0x10,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x02,0x01,0x00,0x00,0x08,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x03,0x01,0x00,0x00, -0x02,0x01,0x00,0x00,0xfa,0x00,0x00,0x00,0x1e,0x00,0x04,0x00, -0x04,0x01,0x00,0x00,0x01,0x01,0x00,0x00,0x03,0x01,0x00,0x00, -0x1d,0x00,0x03,0x00,0x05,0x01,0x00,0x00,0x04,0x01,0x00,0x00, -0x1e,0x00,0x03,0x00,0x06,0x01,0x00,0x00,0x05,0x01,0x00,0x00, -0x20,0x00,0x04,0x00,0x07,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x06,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x07,0x01,0x00,0x00, -0x08,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x0a,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x01,0x01,0x00,0x00, -0x20,0x00,0x04,0x00,0x11,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x02,0x01,0x00,0x00,0x17,0x00,0x04,0x00,0x15,0x01,0x00,0x00, -0xc4,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0x1f,0x01,0x00,0x00,0x00,0x00,0x00,0x41, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x24,0x01,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x25,0x01,0x00,0x00, -0x84,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x24,0x01,0x00,0x00, -0x1c,0x00,0x04,0x00,0x26,0x01,0x00,0x00,0x01,0x01,0x00,0x00, -0x25,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x27,0x01,0x00,0x00, -0x04,0x00,0x00,0x00,0x26,0x01,0x00,0x00,0x3b,0x00,0x04,0x00, -0x27,0x01,0x00,0x00,0x28,0x01,0x00,0x00,0x04,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x2d,0x01,0x00,0x00,0x04,0x00,0x00,0x00, -0x01,0x01,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x35,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00, -0x09,0x00,0x00,0x00,0x36,0x01,0x00,0x00,0x35,0x01,0x00,0x00, -0x39,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x37,0x01,0x00,0x00,0x51,0x00,0x00,0x00, -0x36,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x38,0x01,0x00,0x00,0x84,0x00,0x00,0x00, -0x37,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x39,0x01,0x00,0x00,0x86,0x00,0x00,0x00, -0x38,0x01,0x00,0x00,0x6c,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x54,0x01,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x59,0x01,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x5a,0x01,0x00,0x00,0x84,0x00,0x00,0x00, -0xa7,0x00,0x00,0x00,0x59,0x01,0x00,0x00,0x1c,0x00,0x04,0x00, -0x5b,0x01,0x00,0x00,0x01,0x01,0x00,0x00,0x5a,0x01,0x00,0x00, -0x20,0x00,0x04,0x00,0x5c,0x01,0x00,0x00,0x04,0x00,0x00,0x00, -0x5b,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x5c,0x01,0x00,0x00, -0x5d,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x17,0x00,0x04,0x00, -0x60,0x01,0x00,0x00,0xc4,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x18,0x00,0x04,0x00,0x61,0x01,0x00,0x00,0x60,0x01,0x00,0x00, -0x02,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x62,0x01,0x00,0x00, -0x61,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,0x63,0x01,0x00,0x00, -0x62,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x64,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x63,0x01,0x00,0x00,0x3b,0x00,0x04,0x00, -0x64,0x01,0x00,0x00,0x65,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x67,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0xc4,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x7b,0x01,0x00,0x00,0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x83,0x01,0x00,0x00,0x04,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x8b,0x01,0x00,0x00, -0x05,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x93,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x9b,0x01,0x00,0x00,0x07,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xa2,0x01,0x00,0x00, -0x51,0x00,0x00,0x00,0x36,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xa3,0x01,0x00,0x00, -0x84,0x00,0x00,0x00,0xa2,0x01,0x00,0x00,0x77,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xa4,0x01,0x00,0x00, -0x86,0x00,0x00,0x00,0xa3,0x01,0x00,0x00,0x6c,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa7,0x01,0x00,0x00, -0x08,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xa8,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xab,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x77,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xc6,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xc7,0x01,0x00,0x00, -0x01,0x01,0x00,0x00,0xc6,0x01,0x00,0x00,0x20,0x00,0x04,0x00, -0xc8,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0xc7,0x01,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xd8,0x01,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0xde,0x01,0x00,0x00,0x07,0x00,0x00,0x00, -0x01,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xf4,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0xbf,0x00,0x00,0x00, -0xbc,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xf5,0x01,0x00,0x00, -0x01,0x01,0x00,0x00,0xf4,0x01,0x00,0x00,0x20,0x00,0x04,0x00, -0xf6,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0xf5,0x01,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xff,0x01,0x00,0x00, -0x86,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0xbf,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x07,0x02,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x36,0x02,0x00,0x00, -0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x6b,0x02,0x00,0x00, -0x0d,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x73,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x1d,0x00,0x03,0x00, -0xb9,0x02,0x00,0x00,0xc4,0x00,0x00,0x00,0x1e,0x00,0x03,0x00, -0xba,0x02,0x00,0x00,0xb9,0x02,0x00,0x00,0x20,0x00,0x04,0x00, -0xbb,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0xba,0x02,0x00,0x00, -0x3b,0x00,0x04,0x00,0xbb,0x02,0x00,0x00,0xbc,0x02,0x00,0x00, -0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0xc1,0x02,0x00,0x00,0x05,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xce,0x02,0x00,0x00,0x84,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x2c,0x00,0x05,0x00, -0x15,0x01,0x00,0x00,0x36,0x03,0x00,0x00,0x1f,0x01,0x00,0x00, -0x1f,0x01,0x00,0x00,0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0xc9,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0xc8,0x01,0x00,0x00,0xc9,0x01,0x00,0x00, -0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xf6,0x01,0x00,0x00, -0xf7,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x17,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x17,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x1e,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x17,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x27,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x29,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x1e,0x00,0x00,0x00, -0x29,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x2e,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x2d,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x2f,0x00,0x00,0x00, -0x2e,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x30,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x2f,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x30,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x34,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x36,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x36,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x3a,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00, -0x3a,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x3b,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x47,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x3b,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x49,0x00,0x00,0x00, -0x3d,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x49,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x4d,0x00,0x00,0x00, -0x4c,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x4d,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x50,0x00,0x00,0x00, -0x54,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x59,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x58,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5d,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x5d,0x00,0x00,0x00, -0x63,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x68,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,0x67,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6e,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x72,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x79,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x78,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7e,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x81,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x83,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x47,0x00,0x00,0x00, -0x83,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x87,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x88,0x00,0x00,0x00, -0x87,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x8a,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8d,0x00,0x00,0x00, -0x8a,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x0c,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x26,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x8d,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x92,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x92,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x94,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x42,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x98,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x97,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x99,0x00,0x00,0x00, -0x98,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9a,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x99,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9b,0x00,0x00,0x00, -0x94,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,0x9b,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9e,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0xa3,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0xa3,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa5,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x4a,0x00,0x00,0x00, -0xa7,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0xaa,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0xa9,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xab,0x00,0x00,0x00, -0xaa,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xac,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0xab,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xad,0x00,0x00,0x00, -0xa5,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0xad,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xb0,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0x77,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xb2,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xe2,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0x05,0x00,0x00,0x00, -0xd1,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0xe2,0x02,0x00,0x00, -0xc1,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xb4,0x00,0x00,0x00, -0xb3,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xc3,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0xb4,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xb3,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0xcd,0x00,0x00,0x00,0xce,0x00,0x00,0x00,0xca,0x00,0x00,0x00, -0xe2,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0xce,0x00,0x00,0x00, -0xcc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd1,0x00,0x00,0x00,0xe2,0x02,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xb4,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd4,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xd4,0x00,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xfb,0x02,0x00,0x00,0xb0,0x00,0x00,0x00, -0xb4,0x00,0x00,0x00,0xad,0x01,0x00,0x00,0xd7,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xf7,0x02,0x00,0x00, -0x9e,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0xaa,0x01,0x00,0x00, -0xd7,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xe3,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0xb4,0x00,0x00,0x00, -0x5b,0x02,0x00,0x00,0xd7,0x00,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,0xe3,0x02,0x00,0x00, -0x8e,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xd6,0x00,0x00,0x00, -0xd7,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xdb,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0xd6,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xd5,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdd,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xf3,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0x3b,0x01,0x00,0x00, -0xde,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0xe3,0x00,0x00,0x00,0xf3,0x02,0x00,0x00,0x37,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xdf,0x00,0x00,0x00,0xde,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xe3,0x00,0x00,0x00, -0xde,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xde,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xe8,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0xf3,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xeb,0x00,0x00,0x00, -0xe8,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xec,0x00,0x00,0x00,0xeb,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xed,0x00,0x00,0x00,0xf7,0x02,0x00,0x00,0xec,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xef,0x00,0x00,0x00, -0xed,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,0xe8,0x00,0x00,0x00, -0xf4,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xf7,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,0x6e,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfb,0x00,0x00,0x00, -0xef,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0xc7,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xef,0x00,0x00,0x00, -0xfe,0x00,0x00,0x00,0x41,0x00,0x07,0x00,0x0a,0x01,0x00,0x00, -0x0b,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0xfb,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x01,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,0x0b,0x01,0x00,0x00, -0x73,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x0d,0x01,0x00,0x00, -0x0c,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x11,0x01,0x00,0x00, -0x12,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0xfb,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0xff,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x02,0x01,0x00,0x00,0x13,0x01,0x00,0x00, -0x12,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x14,0x01,0x00,0x00,0x13,0x01,0x00,0x00,0xc7,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x19,0x01,0x00,0x00,0x14,0x01,0x00,0x00, -0xfe,0x00,0x00,0x00,0x70,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0x1a,0x01,0x00,0x00,0x19,0x01,0x00,0x00,0xc2,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x1c,0x01,0x00,0x00,0x14,0x01,0x00,0x00, -0xa9,0x00,0x00,0x00,0x70,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0x1d,0x01,0x00,0x00,0x1c,0x01,0x00,0x00,0x50,0x00,0x05,0x00, -0x15,0x01,0x00,0x00,0x1e,0x01,0x00,0x00,0x1a,0x01,0x00,0x00, -0x1d,0x01,0x00,0x00,0x83,0x00,0x05,0x00,0x15,0x01,0x00,0x00, -0x21,0x01,0x00,0x00,0x1e,0x01,0x00,0x00,0x36,0x03,0x00,0x00, -0x8e,0x00,0x05,0x00,0x15,0x01,0x00,0x00,0x23,0x01,0x00,0x00, -0x21,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,0x51,0x00,0x05,0x00, -0xc4,0x00,0x00,0x00,0x2b,0x01,0x00,0x00,0x23,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x01,0x01,0x00,0x00, -0x2c,0x01,0x00,0x00,0x2b,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x2d,0x01,0x00,0x00,0x2e,0x01,0x00,0x00,0x28,0x01,0x00,0x00, -0xf7,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0x2e,0x01,0x00,0x00, -0x2c,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x30,0x01,0x00,0x00,0xf7,0x00,0x00,0x00,0xfa,0x00,0x00,0x00, -0x51,0x00,0x05,0x00,0xc4,0x00,0x00,0x00,0x32,0x01,0x00,0x00, -0x23,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x73,0x00,0x04,0x00, -0x01,0x01,0x00,0x00,0x33,0x01,0x00,0x00,0x32,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x2d,0x01,0x00,0x00,0x34,0x01,0x00,0x00, -0x28,0x01,0x00,0x00,0x30,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0x34,0x01,0x00,0x00,0x33,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3b,0x01,0x00,0x00,0xf3,0x02,0x00,0x00, -0x39,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xdd,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xdf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x3d,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x3d,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xf4,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0xa6,0x01,0x00,0x00, -0x3e,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0x43,0x01,0x00,0x00,0xf4,0x02,0x00,0x00,0xa7,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x3f,0x01,0x00,0x00,0x3e,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x43,0x01,0x00,0x00, -0x3e,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x3e,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x48,0x01,0x00,0x00,0x7e,0x00,0x00,0x00,0xf4,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4b,0x01,0x00,0x00, -0x48,0x01,0x00,0x00,0xab,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x4c,0x01,0x00,0x00,0x4b,0x01,0x00,0x00, -0x77,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x4d,0x01,0x00,0x00,0xfb,0x02,0x00,0x00,0x4c,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4f,0x01,0x00,0x00, -0x4d,0x01,0x00,0x00,0x79,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x55,0x01,0x00,0x00,0x48,0x01,0x00,0x00, -0x54,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x57,0x01,0x00,0x00,0x79,0x00,0x00,0x00,0x77,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x58,0x01,0x00,0x00, -0x55,0x01,0x00,0x00,0x57,0x01,0x00,0x00,0x41,0x00,0x08,0x00, -0x67,0x01,0x00,0x00,0x68,0x01,0x00,0x00,0x65,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0x4f,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0x69,0x01,0x00,0x00,0x68,0x01,0x00,0x00,0x73,0x00,0x04,0x00, -0x01,0x01,0x00,0x00,0x6a,0x01,0x00,0x00,0x69,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x2d,0x01,0x00,0x00,0x6b,0x01,0x00,0x00, -0x5d,0x01,0x00,0x00,0x58,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0x6b,0x01,0x00,0x00,0x6a,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x6d,0x01,0x00,0x00,0x58,0x01,0x00,0x00, -0x39,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x67,0x01,0x00,0x00, -0x6f,0x01,0x00,0x00,0x65,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0x4f,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x70,0x01,0x00,0x00, -0x6f,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x01,0x01,0x00,0x00, -0x71,0x01,0x00,0x00,0x70,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x2d,0x01,0x00,0x00,0x72,0x01,0x00,0x00,0x5d,0x01,0x00,0x00, -0x6d,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x72,0x01,0x00,0x00, -0x71,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x74,0x01,0x00,0x00,0x58,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x41,0x00,0x08,0x00,0x67,0x01,0x00,0x00,0x76,0x01,0x00,0x00, -0x65,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0x4f,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0x77,0x01,0x00,0x00,0x76,0x01,0x00,0x00, -0x73,0x00,0x04,0x00,0x01,0x01,0x00,0x00,0x78,0x01,0x00,0x00, -0x77,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x2d,0x01,0x00,0x00, -0x79,0x01,0x00,0x00,0x5d,0x01,0x00,0x00,0x74,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0x79,0x01,0x00,0x00,0x78,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7c,0x01,0x00,0x00, -0x58,0x01,0x00,0x00,0x7b,0x01,0x00,0x00,0x41,0x00,0x08,0x00, -0x67,0x01,0x00,0x00,0x7e,0x01,0x00,0x00,0x65,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0x4f,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0x7b,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0x7f,0x01,0x00,0x00,0x7e,0x01,0x00,0x00,0x73,0x00,0x04,0x00, -0x01,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0x7f,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x2d,0x01,0x00,0x00,0x81,0x01,0x00,0x00, -0x5d,0x01,0x00,0x00,0x7c,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0x81,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x84,0x01,0x00,0x00,0x58,0x01,0x00,0x00, -0x83,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x67,0x01,0x00,0x00, -0x86,0x01,0x00,0x00,0x65,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0x4f,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,0x3e,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x87,0x01,0x00,0x00, -0x86,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x01,0x01,0x00,0x00, -0x88,0x01,0x00,0x00,0x87,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x2d,0x01,0x00,0x00,0x89,0x01,0x00,0x00,0x5d,0x01,0x00,0x00, -0x84,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x89,0x01,0x00,0x00, -0x88,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x8c,0x01,0x00,0x00,0x58,0x01,0x00,0x00,0x8b,0x01,0x00,0x00, -0x41,0x00,0x08,0x00,0x67,0x01,0x00,0x00,0x8e,0x01,0x00,0x00, -0x65,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0x4f,0x01,0x00,0x00, -0xd0,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0x8f,0x01,0x00,0x00,0x8e,0x01,0x00,0x00, -0x73,0x00,0x04,0x00,0x01,0x01,0x00,0x00,0x90,0x01,0x00,0x00, -0x8f,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x2d,0x01,0x00,0x00, -0x91,0x01,0x00,0x00,0x5d,0x01,0x00,0x00,0x8c,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0x91,0x01,0x00,0x00,0x90,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x94,0x01,0x00,0x00, -0x58,0x01,0x00,0x00,0x93,0x01,0x00,0x00,0x41,0x00,0x08,0x00, -0x67,0x01,0x00,0x00,0x96,0x01,0x00,0x00,0x65,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0x4f,0x01,0x00,0x00,0xd0,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0x97,0x01,0x00,0x00,0x96,0x01,0x00,0x00,0x73,0x00,0x04,0x00, -0x01,0x01,0x00,0x00,0x98,0x01,0x00,0x00,0x97,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x2d,0x01,0x00,0x00,0x99,0x01,0x00,0x00, -0x5d,0x01,0x00,0x00,0x94,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0x99,0x01,0x00,0x00,0x98,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9c,0x01,0x00,0x00,0x58,0x01,0x00,0x00, -0x9b,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x67,0x01,0x00,0x00, -0x9e,0x01,0x00,0x00,0x65,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0x4f,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,0x7b,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x9f,0x01,0x00,0x00, -0x9e,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x01,0x01,0x00,0x00, -0xa0,0x01,0x00,0x00,0x9f,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x2d,0x01,0x00,0x00,0xa1,0x01,0x00,0x00,0x5d,0x01,0x00,0x00, -0x9c,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xa1,0x01,0x00,0x00, -0xa0,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa6,0x01,0x00,0x00,0xf4,0x02,0x00,0x00,0xa4,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0x3d,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x3f,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0xa7,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xaa,0x01,0x00,0x00,0xf7,0x02,0x00,0x00, -0xa8,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xad,0x01,0x00,0x00,0xfb,0x02,0x00,0x00,0xab,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xaf,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xaf,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xfd,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0x3f,0x01,0x00,0x00, -0x59,0x02,0x00,0x00,0xb2,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0xb5,0x01,0x00,0x00,0xfd,0x02,0x00,0x00, -0x6c,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xb1,0x01,0x00,0x00, -0xb2,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xb5,0x01,0x00,0x00,0xb0,0x01,0x00,0x00,0xb1,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xb0,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xb7,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xb7,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x01,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0xb0,0x01,0x00,0x00,0xe3,0x01,0x00,0x00, -0xba,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0xbd,0x01,0x00,0x00,0x01,0x03,0x00,0x00,0x60,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xb9,0x01,0x00,0x00,0xba,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xbd,0x01,0x00,0x00, -0xb8,0x01,0x00,0x00,0xb9,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xb8,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xbf,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xbf,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x13,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0xb8,0x01,0x00,0x00,0xe1,0x01,0x00,0x00,0xc0,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xc5,0x01,0x00,0x00, -0x13,0x03,0x00,0x00,0x62,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xc1,0x01,0x00,0x00,0xc0,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xc5,0x01,0x00,0x00,0xc0,0x01,0x00,0x00, -0xc1,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xc0,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xcb,0x01,0x00,0x00, -0x01,0x03,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xcd,0x01,0x00,0x00,0xcb,0x01,0x00,0x00, -0x13,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xcf,0x01,0x00,0x00,0x55,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd1,0x01,0x00,0x00, -0x01,0x03,0x00,0x00,0x61,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xd2,0x01,0x00,0x00,0xcf,0x01,0x00,0x00, -0xd1,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd4,0x01,0x00,0x00,0x64,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd5,0x01,0x00,0x00, -0xd2,0x01,0x00,0x00,0xd4,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xd7,0x01,0x00,0x00,0xd5,0x01,0x00,0x00, -0x13,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd9,0x01,0x00,0x00,0xd7,0x01,0x00,0x00,0xd8,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdb,0x01,0x00,0x00, -0xd9,0x01,0x00,0x00,0xfd,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0x2d,0x01,0x00,0x00,0xdc,0x01,0x00,0x00,0x28,0x01,0x00,0x00, -0xdb,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x01,0x01,0x00,0x00, -0xdd,0x01,0x00,0x00,0xdc,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0xde,0x01,0x00,0x00,0xdf,0x01,0x00,0x00,0xc9,0x01,0x00,0x00, -0xcd,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xdf,0x01,0x00,0x00, -0xdd,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xe1,0x01,0x00,0x00,0x13,0x03,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xbf,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xc1,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xba,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xba,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xe3,0x01,0x00,0x00,0x01,0x03,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb7,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xb9,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xe5,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xe5,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x02,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0xb9,0x01,0x00,0x00,0x11,0x02,0x00,0x00, -0xe8,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0xeb,0x01,0x00,0x00,0x02,0x03,0x00,0x00,0xbf,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xe7,0x01,0x00,0x00,0xe8,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xeb,0x01,0x00,0x00, -0xe6,0x01,0x00,0x00,0xe7,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xe6,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xed,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xed,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x10,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0xe6,0x01,0x00,0x00,0x0f,0x02,0x00,0x00,0xee,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xf3,0x01,0x00,0x00, -0x10,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xef,0x01,0x00,0x00,0xee,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xf3,0x01,0x00,0x00,0xee,0x01,0x00,0x00, -0xef,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xee,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf9,0x01,0x00,0x00, -0x02,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xfb,0x01,0x00,0x00,0xf9,0x01,0x00,0x00, -0x10,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xfd,0x01,0x00,0x00,0x59,0x00,0x00,0x00,0xb9,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x00,0x02,0x00,0x00, -0x02,0x03,0x00,0x00,0xff,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x01,0x02,0x00,0x00,0xfd,0x01,0x00,0x00, -0x00,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x03,0x02,0x00,0x00,0x68,0x00,0x00,0x00,0xbc,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x04,0x02,0x00,0x00, -0x01,0x02,0x00,0x00,0x03,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x06,0x02,0x00,0x00,0x04,0x02,0x00,0x00, -0x10,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x08,0x02,0x00,0x00,0x06,0x02,0x00,0x00,0x07,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0a,0x02,0x00,0x00, -0x08,0x02,0x00,0x00,0xfd,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0x2d,0x01,0x00,0x00,0x0b,0x02,0x00,0x00,0x5d,0x01,0x00,0x00, -0x0a,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x01,0x01,0x00,0x00, -0x0c,0x02,0x00,0x00,0x0b,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0xde,0x01,0x00,0x00,0x0d,0x02,0x00,0x00,0xf7,0x01,0x00,0x00, -0xfb,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x0d,0x02,0x00,0x00, -0x0c,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x0f,0x02,0x00,0x00,0x10,0x03,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xed,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xef,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xe8,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xe8,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x11,0x02,0x00,0x00,0x02,0x03,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xe5,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xe7,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0x13,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x13,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x03,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0xe7,0x01,0x00,0x00,0x57,0x02,0x00,0x00, -0x16,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0x19,0x02,0x00,0x00,0x03,0x03,0x00,0x00,0xbf,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x15,0x02,0x00,0x00,0x16,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x19,0x02,0x00,0x00, -0x14,0x02,0x00,0x00,0x15,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x14,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x1b,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x1b,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x07,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0x14,0x02,0x00,0x00,0x55,0x02,0x00,0x00,0x1e,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x21,0x02,0x00,0x00, -0x07,0x03,0x00,0x00,0x60,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x1d,0x02,0x00,0x00,0x1e,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x21,0x02,0x00,0x00,0x1c,0x02,0x00,0x00, -0x1d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x1c,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x23,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x23,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x09,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0x1c,0x02,0x00,0x00, -0x53,0x02,0x00,0x00,0x26,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0x29,0x02,0x00,0x00,0x09,0x03,0x00,0x00, -0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x25,0x02,0x00,0x00, -0x26,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x29,0x02,0x00,0x00,0x24,0x02,0x00,0x00,0x25,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x24,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x2b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x2b,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x0b,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0x24,0x02,0x00,0x00,0x51,0x02,0x00,0x00, -0x2c,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0x31,0x02,0x00,0x00,0x0b,0x03,0x00,0x00,0x62,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x2d,0x02,0x00,0x00,0x2c,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x31,0x02,0x00,0x00, -0x2c,0x02,0x00,0x00,0x2d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x2c,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x33,0x02,0x00,0x00,0x03,0x03,0x00,0x00,0xbc,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x35,0x02,0x00,0x00, -0x33,0x02,0x00,0x00,0x09,0x03,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x37,0x02,0x00,0x00,0x35,0x02,0x00,0x00, -0x36,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x39,0x02,0x00,0x00,0x07,0x03,0x00,0x00,0x62,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3a,0x02,0x00,0x00, -0x37,0x02,0x00,0x00,0x39,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3c,0x02,0x00,0x00,0x3a,0x02,0x00,0x00, -0x0b,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x40,0x02,0x00,0x00,0x39,0x02,0x00,0x00,0x0b,0x03,0x00,0x00, -0x41,0x00,0x05,0x00,0xde,0x01,0x00,0x00,0x41,0x02,0x00,0x00, -0xc9,0x01,0x00,0x00,0x40,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0x01,0x01,0x00,0x00,0x42,0x02,0x00,0x00,0x41,0x02,0x00,0x00, -0x73,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x43,0x02,0x00,0x00, -0x42,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xde,0x01,0x00,0x00, -0x48,0x02,0x00,0x00,0xf7,0x01,0x00,0x00,0x35,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0x01,0x01,0x00,0x00,0x49,0x02,0x00,0x00, -0x48,0x02,0x00,0x00,0x73,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0x4a,0x02,0x00,0x00,0x49,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0xcd,0x00,0x00,0x00,0x4c,0x02,0x00,0x00,0xca,0x00,0x00,0x00, -0x3c,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0x4d,0x02,0x00,0x00,0x4c,0x02,0x00,0x00,0x0c,0x00,0x08,0x00, -0xc4,0x00,0x00,0x00,0x4e,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0x43,0x02,0x00,0x00,0x4a,0x02,0x00,0x00, -0x4d,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x4c,0x02,0x00,0x00, -0x4e,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x51,0x02,0x00,0x00,0x0b,0x03,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x2b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x2d,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x26,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x26,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x53,0x02,0x00,0x00,0x09,0x03,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x23,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x25,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x1e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x1e,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x55,0x02,0x00,0x00, -0x07,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x1b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x1d,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x16,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x16,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x57,0x02,0x00,0x00,0x03,0x03,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x13,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x15,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xb2,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xb2,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x59,0x02,0x00,0x00,0xfd,0x02,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xaf,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xb1,0x01,0x00,0x00,0xe0,0x00,0x04,0x00, -0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xa7,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xd7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xd7,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x5b,0x02,0x00,0x00,0xe3,0x02,0x00,0x00,0x6c,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xd4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xd6,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x60,0x02,0x00,0x00,0x55,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x61,0x02,0x00,0x00, -0x96,0x00,0x00,0x00,0x60,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x66,0x02,0x00,0x00,0x59,0x00,0x00,0x00, -0xb9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x67,0x02,0x00,0x00,0xa8,0x00,0x00,0x00,0x66,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x6c,0x02,0x00,0x00, -0x12,0x00,0x00,0x00,0x6b,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x6d,0x02,0x00,0x00,0x6c,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6e,0x02,0x00,0x00, -0x0f,0x00,0x00,0x00,0x6d,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x72,0x02,0x00,0x00,0x47,0x00,0x00,0x00, -0x6d,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x74,0x02,0x00,0x00,0x73,0x02,0x00,0x00,0x0c,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x75,0x02,0x00,0x00, -0x74,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x76,0x02,0x00,0x00,0x72,0x02,0x00,0x00,0x75,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x77,0x02,0x00,0x00, -0x6e,0x02,0x00,0x00,0x76,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x79,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x79,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xe4,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0xdf,0x02,0x00,0x00, -0x7c,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0x7f,0x02,0x00,0x00,0xe4,0x02,0x00,0x00,0xbf,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x7b,0x02,0x00,0x00,0x7c,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x7f,0x02,0x00,0x00, -0x7a,0x02,0x00,0x00,0x7b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x7a,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x81,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x81,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xe5,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0x7a,0x02,0x00,0x00,0xdd,0x02,0x00,0x00,0x84,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x87,0x02,0x00,0x00, -0xe5,0x02,0x00,0x00,0x60,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x83,0x02,0x00,0x00,0x84,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x87,0x02,0x00,0x00,0x82,0x02,0x00,0x00, -0x83,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x82,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8b,0x02,0x00,0x00, -0xe5,0x02,0x00,0x00,0x61,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x8c,0x02,0x00,0x00,0x61,0x02,0x00,0x00, -0x8b,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x8e,0x02,0x00,0x00,0x64,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8f,0x02,0x00,0x00, -0x8c,0x02,0x00,0x00,0x8e,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x93,0x02,0x00,0x00,0xe4,0x02,0x00,0x00, -0xff,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x94,0x02,0x00,0x00,0x67,0x02,0x00,0x00,0x93,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x96,0x02,0x00,0x00, -0x68,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x97,0x02,0x00,0x00,0x94,0x02,0x00,0x00, -0x96,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x99,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x99,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xe7,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0x82,0x02,0x00,0x00,0xdb,0x02,0x00,0x00,0x9c,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x9f,0x02,0x00,0x00, -0xe7,0x02,0x00,0x00,0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x9b,0x02,0x00,0x00,0x9c,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x9f,0x02,0x00,0x00,0x9a,0x02,0x00,0x00, -0x9b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x9a,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0xa1,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xa1,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xe9,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0x9a,0x02,0x00,0x00, -0xd9,0x02,0x00,0x00,0xa4,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0xa7,0x02,0x00,0x00,0xe9,0x02,0x00,0x00, -0x62,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xa3,0x02,0x00,0x00, -0xa4,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xa7,0x02,0x00,0x00,0xa2,0x02,0x00,0x00,0xa3,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xa2,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xaa,0x02,0x00,0x00,0x8f,0x02,0x00,0x00, -0xe9,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0xad,0x02,0x00,0x00,0xaa,0x02,0x00,0x00,0x36,0x00,0x00,0x00, -0xf7,0x00,0x03,0x00,0xaf,0x02,0x00,0x00,0x00,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xad,0x02,0x00,0x00,0xae,0x02,0x00,0x00, -0xaf,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xae,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb2,0x02,0x00,0x00, -0x97,0x02,0x00,0x00,0xe7,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0xb3,0x02,0x00,0x00,0x12,0x00,0x00,0x00, -0xd0,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xb4,0x02,0x00,0x00,0xb3,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0xb5,0x02,0x00,0x00,0xb2,0x02,0x00,0x00, -0xb4,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xaf,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xaf,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0xc2,0x00,0x00,0x00,0xb6,0x02,0x00,0x00,0xad,0x02,0x00,0x00, -0xa2,0x02,0x00,0x00,0xb5,0x02,0x00,0x00,0xae,0x02,0x00,0x00, -0xf7,0x00,0x03,0x00,0xb8,0x02,0x00,0x00,0x00,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xb6,0x02,0x00,0x00,0xb7,0x02,0x00,0x00, -0xb8,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xb7,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc0,0x02,0x00,0x00, -0x97,0x02,0x00,0x00,0xe7,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0xc2,0x02,0x00,0x00,0x12,0x00,0x00,0x00, -0xc1,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xc3,0x02,0x00,0x00,0xc2,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xc4,0x02,0x00,0x00,0xc0,0x02,0x00,0x00, -0xc3,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xc5,0x02,0x00,0x00,0x77,0x02,0x00,0x00,0xc4,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc7,0x02,0x00,0x00, -0xc5,0x02,0x00,0x00,0x8f,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xc9,0x02,0x00,0x00,0xc7,0x02,0x00,0x00, -0xe9,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xcb,0x02,0x00,0x00,0xe4,0x02,0x00,0x00,0xbc,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xcd,0x02,0x00,0x00, -0xcb,0x02,0x00,0x00,0xe7,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xcf,0x02,0x00,0x00,0xcd,0x02,0x00,0x00, -0xce,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd1,0x02,0x00,0x00,0xe5,0x02,0x00,0x00,0x62,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd2,0x02,0x00,0x00, -0xcf,0x02,0x00,0x00,0xd1,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xd4,0x02,0x00,0x00,0xd2,0x02,0x00,0x00, -0xe9,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00, -0xd5,0x02,0x00,0x00,0xca,0x00,0x00,0x00,0xd4,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0xd6,0x02,0x00,0x00, -0xd5,0x02,0x00,0x00,0x41,0x00,0x06,0x00,0x67,0x01,0x00,0x00, -0xd7,0x02,0x00,0x00,0xbc,0x02,0x00,0x00,0x34,0x00,0x00,0x00, -0xc9,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0xd7,0x02,0x00,0x00, -0xd6,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xb8,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xb8,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0xa4,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xa4,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd9,0x02,0x00,0x00, -0xe9,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xa1,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xa3,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x9c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x9c,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xdb,0x02,0x00,0x00,0xe7,0x02,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x99,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x9b,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x84,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x84,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xdd,0x02,0x00,0x00,0xe5,0x02,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x81,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x83,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x7c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x7c,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdf,0x02,0x00,0x00, -0xe4,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x79,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x7b,0x02,0x00,0x00, -0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00, -}; -const uint64_t matmul_q4_0_f32_aligned_len = 11156; - -unsigned char matmul_q4_0_f32_aligned_fp32_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0x0d,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00, -0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00, -0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64, -0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00, -0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0f,0x00,0x0f,0x00, -0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e, -0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x3d,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x08,0x01,0x00,0x00, -0x28,0x01,0x00,0x00,0x5b,0x01,0x00,0x00,0x62,0x01,0x00,0x00, -0x49,0x02,0x00,0x00,0x92,0x02,0x00,0x00,0x10,0x00,0x06,0x00, -0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x34,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x10,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x37,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x3d,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x4c,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x4f,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x53,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x60,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x62,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x6c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xa7,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xb9,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xbc,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x03,0x01,0x00,0x00,0x06,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x04,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x04,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x05,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x48,0x00,0x04,0x00,0x06,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x06,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0x06,0x01,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x08,0x01,0x00,0x00,0x22,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x08,0x01,0x00,0x00, -0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x33,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x34,0x01,0x00,0x00,0x0b,0x00,0x00,0x00, -0x19,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x5f,0x01,0x00,0x00, -0x06,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0x60,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x60,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x60,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x62,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x62,0x01,0x00,0x00,0x21,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x49,0x02,0x00,0x00, -0x0b,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x8f,0x02,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x04,0x00,0x90,0x02,0x00,0x00,0x00,0x00,0x00,0x00, -0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x90,0x02,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0x90,0x02,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x92,0x02,0x00,0x00,0x22,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x92,0x02,0x00,0x00, -0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00, -0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00, -0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x1e,0x00,0x10,0x00,0x10,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x11,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x11,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x21,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x2d,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x34,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x3d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x4c,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x4f,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x58,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x61,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x61,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x67,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x61,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x6d,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x72,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x77,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x78,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x77,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x7d,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x77,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x81,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x91,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x97,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa7,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0xa9,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xba,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0xb9,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbb,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xbc,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xbd,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xbb,0x00,0x00,0x00, -0xbc,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xbe,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xbd,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xbf,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0xba,0x00,0x00,0x00, -0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xc0,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xb8,0x00,0x00,0x00, -0xbf,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xc1,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc0,0x00,0x00,0x00, -0xbc,0x00,0x00,0x00,0x14,0x00,0x02,0x00,0xc2,0x00,0x00,0x00, -0x16,0x00,0x03,0x00,0xc4,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0xbf,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc7,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0xbc,0x00,0x00,0x00, -0x1c,0x00,0x04,0x00,0xc8,0x00,0x00,0x00,0xc4,0x00,0x00,0x00, -0xc7,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xc9,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0xcd,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0xc4,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0xd0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xfe,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0x01,0x01,0x00,0x00, -0x10,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x02,0x01,0x00,0x00, -0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1c,0x00,0x04,0x00, -0x03,0x01,0x00,0x00,0x02,0x01,0x00,0x00,0xfa,0x00,0x00,0x00, -0x1e,0x00,0x04,0x00,0x04,0x01,0x00,0x00,0x01,0x01,0x00,0x00, -0x03,0x01,0x00,0x00,0x1d,0x00,0x03,0x00,0x05,0x01,0x00,0x00, -0x04,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,0x06,0x01,0x00,0x00, -0x05,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x07,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x06,0x01,0x00,0x00,0x3b,0x00,0x04,0x00, -0x07,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x0a,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x01,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x11,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x02,0x01,0x00,0x00,0x17,0x00,0x04,0x00, -0x15,0x01,0x00,0x00,0xc4,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x1f,0x01,0x00,0x00, -0x00,0x00,0x00,0x41,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x24,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x25,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x24,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,0x26,0x01,0x00,0x00, -0xc4,0x00,0x00,0x00,0x25,0x01,0x00,0x00,0x20,0x00,0x04,0x00, -0x27,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x26,0x01,0x00,0x00, -0x3b,0x00,0x04,0x00,0x27,0x01,0x00,0x00,0x28,0x01,0x00,0x00, -0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x2c,0x01,0x00,0x00, -0x04,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x33,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0x33,0x00,0x06,0x00,0x09,0x00,0x00,0x00,0x34,0x01,0x00,0x00, -0x33,0x01,0x00,0x00,0x39,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x35,0x01,0x00,0x00, -0x51,0x00,0x00,0x00,0x34,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x36,0x01,0x00,0x00, -0x84,0x00,0x00,0x00,0x35,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x37,0x01,0x00,0x00, -0x86,0x00,0x00,0x00,0x36,0x01,0x00,0x00,0x6c,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x52,0x01,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x57,0x01,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x58,0x01,0x00,0x00, -0x84,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0x57,0x01,0x00,0x00, -0x1c,0x00,0x04,0x00,0x59,0x01,0x00,0x00,0xc4,0x00,0x00,0x00, -0x58,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x5a,0x01,0x00,0x00, -0x04,0x00,0x00,0x00,0x59,0x01,0x00,0x00,0x3b,0x00,0x04,0x00, -0x5a,0x01,0x00,0x00,0x5b,0x01,0x00,0x00,0x04,0x00,0x00,0x00, -0x17,0x00,0x04,0x00,0x5e,0x01,0x00,0x00,0xc4,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x5f,0x01,0x00,0x00, -0x5e,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,0x60,0x01,0x00,0x00, -0x5f,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x61,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x60,0x01,0x00,0x00,0x3b,0x00,0x04,0x00, -0x61,0x01,0x00,0x00,0x62,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x64,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0xc4,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x75,0x01,0x00,0x00,0x03,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x7b,0x01,0x00,0x00,0x51,0x00,0x00,0x00, -0x34,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x7c,0x01,0x00,0x00,0x84,0x00,0x00,0x00, -0x7b,0x01,0x00,0x00,0x77,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x7d,0x01,0x00,0x00,0x86,0x00,0x00,0x00, -0x7c,0x01,0x00,0x00,0x6c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x08,0x01,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x81,0x01,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x84,0x01,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x77,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x9f,0x01,0x00,0x00, -0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x1c,0x00,0x04,0x00,0xa0,0x01,0x00,0x00,0xc4,0x00,0x00,0x00, -0x9f,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0xa1,0x01,0x00,0x00, -0x07,0x00,0x00,0x00,0xa0,0x01,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xb1,0x01,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xcc,0x01,0x00,0x00,0x84,0x00,0x00,0x00, -0xbf,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x1c,0x00,0x04,0x00, -0xcd,0x01,0x00,0x00,0xc4,0x00,0x00,0x00,0xcc,0x01,0x00,0x00, -0x20,0x00,0x04,0x00,0xce,0x01,0x00,0x00,0x07,0x00,0x00,0x00, -0xcd,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xd7,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0xb9,0x00,0x00,0x00, -0xbf,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xdf,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x0e,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x41,0x02,0x00,0x00,0x0d,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x49,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0x1d,0x00,0x03,0x00,0x8f,0x02,0x00,0x00,0xc4,0x00,0x00,0x00, -0x1e,0x00,0x03,0x00,0x90,0x02,0x00,0x00,0x8f,0x02,0x00,0x00, -0x20,0x00,0x04,0x00,0x91,0x02,0x00,0x00,0x0c,0x00,0x00,0x00, -0x90,0x02,0x00,0x00,0x3b,0x00,0x04,0x00,0x91,0x02,0x00,0x00, -0x92,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x97,0x02,0x00,0x00,0x05,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xa4,0x02,0x00,0x00, -0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x2c,0x00,0x05,0x00,0x15,0x01,0x00,0x00,0x0c,0x03,0x00,0x00, -0x1f,0x01,0x00,0x00,0x1f,0x01,0x00,0x00,0x36,0x00,0x05,0x00, -0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0xc9,0x00,0x00,0x00,0xca,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xa1,0x01,0x00,0x00, -0xa2,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0xce,0x01,0x00,0x00,0xcf,0x01,0x00,0x00,0x07,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x16,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x16,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x17,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x24,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2a,0x00,0x00,0x00, -0x1e,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x2d,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x2f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x24,0x00,0x00,0x00, -0x2f,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x2a,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x35,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x35,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x38,0x00,0x00,0x00, -0x36,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x82,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x38,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x3b,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x3f,0x00,0x00,0x00, -0x3d,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x3f,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x42,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x3b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x49,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4a,0x00,0x00,0x00, -0x49,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x4d,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x3e,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x4d,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x50,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00, -0x50,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x50,0x00,0x00,0x00, -0x58,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x5d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x64,0x00,0x00,0x00, -0x5d,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x5d,0x00,0x00,0x00, -0x67,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x6e,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x6d,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x73,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x72,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x78,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x7e,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x7d,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x82,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x82,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x47,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x88,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0x47,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x8d,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0x83,0x00,0x00,0x00, -0x0c,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x8e,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x26,0x00,0x00,0x00,0x88,0x00,0x00,0x00, -0x8d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x92,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x91,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x93,0x00,0x00,0x00, -0x92,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x94,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x93,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x96,0x00,0x00,0x00, -0x42,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x97,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x99,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x96,0x00,0x00,0x00, -0x99,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9b,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x9a,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9d,0x00,0x00,0x00, -0x9b,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,0x9d,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0xa3,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0xa2,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00, -0xa3,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa5,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0xa4,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa8,0x00,0x00,0x00, -0x4a,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0xa9,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xab,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0xa8,0x00,0x00,0x00, -0xab,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xad,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,0xac,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xaf,0x00,0x00,0x00, -0xad,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0xaf,0x00,0x00,0x00, -0x77,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb2,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xb8,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0x05,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0xb3,0x00,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xc3,0x00,0x00,0x00, -0xb8,0x02,0x00,0x00,0xc1,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xb4,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0xb3,0x00,0x00,0x00, -0xb4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb3,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,0xce,0x00,0x00,0x00, -0xca,0x00,0x00,0x00,0xb8,0x02,0x00,0x00,0x3e,0x00,0x03,0x00, -0xce,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0xb8,0x02,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb2,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xb4,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xd4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd4,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xd1,0x02,0x00,0x00, -0xb0,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0x86,0x01,0x00,0x00, -0xd7,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xcd,0x02,0x00,0x00,0x9e,0x00,0x00,0x00,0xb4,0x00,0x00,0x00, -0x83,0x01,0x00,0x00,0xd7,0x00,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xb9,0x02,0x00,0x00,0x84,0x00,0x00,0x00, -0xb4,0x00,0x00,0x00,0x31,0x02,0x00,0x00,0xd7,0x00,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xdb,0x00,0x00,0x00, -0xb9,0x02,0x00,0x00,0x8e,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xd6,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xdb,0x00,0x00,0x00,0xd5,0x00,0x00,0x00, -0xd6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd5,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xdd,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xc9,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0xd5,0x00,0x00,0x00, -0x39,0x01,0x00,0x00,0xde,0x00,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0xe3,0x00,0x00,0x00,0xc9,0x02,0x00,0x00, -0x37,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xdf,0x00,0x00,0x00, -0xde,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xe3,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0xdf,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0x73,0x00,0x00,0x00, -0xc9,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xeb,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0x99,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xec,0x00,0x00,0x00, -0xeb,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xed,0x00,0x00,0x00,0xcd,0x02,0x00,0x00, -0xec,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xef,0x00,0x00,0x00,0xed,0x00,0x00,0x00,0x6e,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf5,0x00,0x00,0x00, -0xe8,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,0xf5,0x00,0x00,0x00, -0x6e,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xfb,0x00,0x00,0x00,0xef,0x00,0x00,0x00,0xfa,0x00,0x00,0x00, -0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xff,0x00,0x00,0x00, -0xef,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x41,0x00,0x07,0x00, -0x0a,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,0x08,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x01,0x01,0x00,0x00,0x0c,0x01,0x00,0x00, -0x0b,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0x0d,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,0x41,0x00,0x08,0x00, -0x11,0x01,0x00,0x00,0x12,0x01,0x00,0x00,0x08,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0xd0,0x00,0x00,0x00, -0xff,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x02,0x01,0x00,0x00, -0x13,0x01,0x00,0x00,0x12,0x01,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x14,0x01,0x00,0x00,0x13,0x01,0x00,0x00, -0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x19,0x01,0x00,0x00, -0x14,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,0x70,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0x1a,0x01,0x00,0x00,0x19,0x01,0x00,0x00, -0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1c,0x01,0x00,0x00, -0x14,0x01,0x00,0x00,0xa9,0x00,0x00,0x00,0x70,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0x1d,0x01,0x00,0x00,0x1c,0x01,0x00,0x00, -0x50,0x00,0x05,0x00,0x15,0x01,0x00,0x00,0x1e,0x01,0x00,0x00, -0x1a,0x01,0x00,0x00,0x1d,0x01,0x00,0x00,0x83,0x00,0x05,0x00, -0x15,0x01,0x00,0x00,0x21,0x01,0x00,0x00,0x1e,0x01,0x00,0x00, -0x0c,0x03,0x00,0x00,0x8e,0x00,0x05,0x00,0x15,0x01,0x00,0x00, -0x23,0x01,0x00,0x00,0x21,0x01,0x00,0x00,0x0d,0x01,0x00,0x00, -0x51,0x00,0x05,0x00,0xc4,0x00,0x00,0x00,0x2b,0x01,0x00,0x00, -0x23,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x2c,0x01,0x00,0x00,0x2d,0x01,0x00,0x00,0x28,0x01,0x00,0x00, -0xf7,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0x2d,0x01,0x00,0x00, -0x2b,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x2f,0x01,0x00,0x00,0xf7,0x00,0x00,0x00,0xfa,0x00,0x00,0x00, -0x51,0x00,0x05,0x00,0xc4,0x00,0x00,0x00,0x31,0x01,0x00,0x00, -0x23,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x2c,0x01,0x00,0x00,0x32,0x01,0x00,0x00,0x28,0x01,0x00,0x00, -0x2f,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x32,0x01,0x00,0x00, -0x31,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x39,0x01,0x00,0x00,0xc9,0x02,0x00,0x00,0x37,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xdf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x3b,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x3b,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xca,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0xdf,0x00,0x00,0x00,0x7f,0x01,0x00,0x00,0x3c,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x41,0x01,0x00,0x00, -0xca,0x02,0x00,0x00,0xa7,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x3d,0x01,0x00,0x00,0x3c,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x41,0x01,0x00,0x00,0x3c,0x01,0x00,0x00, -0x3d,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x3c,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x46,0x01,0x00,0x00, -0x7e,0x00,0x00,0x00,0xca,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x49,0x01,0x00,0x00,0x46,0x01,0x00,0x00, -0xab,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x4a,0x01,0x00,0x00,0x49,0x01,0x00,0x00,0x77,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4b,0x01,0x00,0x00, -0xd1,0x02,0x00,0x00,0x4a,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x4d,0x01,0x00,0x00,0x4b,0x01,0x00,0x00, -0x79,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x53,0x01,0x00,0x00,0x46,0x01,0x00,0x00,0x52,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x55,0x01,0x00,0x00, -0x79,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x56,0x01,0x00,0x00,0x53,0x01,0x00,0x00, -0x55,0x01,0x00,0x00,0x41,0x00,0x07,0x00,0x64,0x01,0x00,0x00, -0x65,0x01,0x00,0x00,0x62,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0x4d,0x01,0x00,0x00,0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0x66,0x01,0x00,0x00,0x65,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x2c,0x01,0x00,0x00,0x67,0x01,0x00,0x00, -0x5b,0x01,0x00,0x00,0x56,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0x67,0x01,0x00,0x00,0x66,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x69,0x01,0x00,0x00,0x56,0x01,0x00,0x00, -0x39,0x00,0x00,0x00,0x41,0x00,0x07,0x00,0x64,0x01,0x00,0x00, -0x6b,0x01,0x00,0x00,0x62,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0x4d,0x01,0x00,0x00,0x39,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0x6c,0x01,0x00,0x00,0x6b,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x2c,0x01,0x00,0x00,0x6d,0x01,0x00,0x00, -0x5b,0x01,0x00,0x00,0x69,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0x6d,0x01,0x00,0x00,0x6c,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x6f,0x01,0x00,0x00,0x56,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x41,0x00,0x07,0x00,0x64,0x01,0x00,0x00, -0x71,0x01,0x00,0x00,0x62,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0x4d,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0x72,0x01,0x00,0x00,0x71,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x2c,0x01,0x00,0x00,0x73,0x01,0x00,0x00, -0x5b,0x01,0x00,0x00,0x6f,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0x73,0x01,0x00,0x00,0x72,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x76,0x01,0x00,0x00,0x56,0x01,0x00,0x00, -0x75,0x01,0x00,0x00,0x41,0x00,0x07,0x00,0x64,0x01,0x00,0x00, -0x78,0x01,0x00,0x00,0x62,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0x4d,0x01,0x00,0x00,0x75,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0x79,0x01,0x00,0x00,0x78,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x2c,0x01,0x00,0x00,0x7a,0x01,0x00,0x00, -0x5b,0x01,0x00,0x00,0x76,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0x7a,0x01,0x00,0x00,0x79,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x7f,0x01,0x00,0x00,0xca,0x02,0x00,0x00, -0x7d,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x3b,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x3d,0x01,0x00,0x00,0xe0,0x00,0x04,0x00, -0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x80,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x83,0x01,0x00,0x00, -0xcd,0x02,0x00,0x00,0x81,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x86,0x01,0x00,0x00,0xd1,0x02,0x00,0x00, -0x84,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x88,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x88,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xd3,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0x3d,0x01,0x00,0x00,0x2f,0x02,0x00,0x00,0x8b,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x8e,0x01,0x00,0x00, -0xd3,0x02,0x00,0x00,0x6c,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x8a,0x01,0x00,0x00,0x8b,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x8e,0x01,0x00,0x00,0x89,0x01,0x00,0x00, -0x8a,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x89,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0x90,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x90,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xd7,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0x89,0x01,0x00,0x00, -0xbb,0x01,0x00,0x00,0x93,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0x96,0x01,0x00,0x00,0xd7,0x02,0x00,0x00, -0x60,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x92,0x01,0x00,0x00, -0x93,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x96,0x01,0x00,0x00,0x91,0x01,0x00,0x00,0x92,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x91,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0x98,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x98,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xe9,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0x91,0x01,0x00,0x00,0xb9,0x01,0x00,0x00, -0x99,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0x9e,0x01,0x00,0x00,0xe9,0x02,0x00,0x00,0x62,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x9a,0x01,0x00,0x00,0x99,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x9e,0x01,0x00,0x00, -0x99,0x01,0x00,0x00,0x9a,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x99,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa4,0x01,0x00,0x00,0xd7,0x02,0x00,0x00,0x62,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa6,0x01,0x00,0x00, -0xa4,0x01,0x00,0x00,0xe9,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa8,0x01,0x00,0x00,0x55,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xaa,0x01,0x00,0x00,0xd7,0x02,0x00,0x00,0x61,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xab,0x01,0x00,0x00, -0xa8,0x01,0x00,0x00,0xaa,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xad,0x01,0x00,0x00,0x64,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xae,0x01,0x00,0x00,0xab,0x01,0x00,0x00,0xad,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb0,0x01,0x00,0x00, -0xae,0x01,0x00,0x00,0xe9,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xb2,0x01,0x00,0x00,0xb0,0x01,0x00,0x00, -0xb1,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xb4,0x01,0x00,0x00,0xb2,0x01,0x00,0x00,0xd3,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0x2c,0x01,0x00,0x00,0xb5,0x01,0x00,0x00, -0x28,0x01,0x00,0x00,0xb4,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0xb6,0x01,0x00,0x00,0xb5,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,0xb7,0x01,0x00,0x00, -0xa2,0x01,0x00,0x00,0xa6,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0xb7,0x01,0x00,0x00,0xb6,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xb9,0x01,0x00,0x00,0xe9,0x02,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x98,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x9a,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0x93,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x93,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbb,0x01,0x00,0x00, -0xd7,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x90,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x92,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xbd,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xbd,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xd8,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0x92,0x01,0x00,0x00, -0xe9,0x01,0x00,0x00,0xc0,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0xc3,0x01,0x00,0x00,0xd8,0x02,0x00,0x00, -0xbf,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xbf,0x01,0x00,0x00, -0xc0,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xc3,0x01,0x00,0x00,0xbe,0x01,0x00,0x00,0xbf,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xbe,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xc5,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xc5,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xe6,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0xbe,0x01,0x00,0x00,0xe7,0x01,0x00,0x00, -0xc6,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0xcb,0x01,0x00,0x00,0xe6,0x02,0x00,0x00,0xbc,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xc7,0x01,0x00,0x00,0xc6,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xcb,0x01,0x00,0x00, -0xc6,0x01,0x00,0x00,0xc7,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xc6,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd1,0x01,0x00,0x00,0xd8,0x02,0x00,0x00,0xbc,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd3,0x01,0x00,0x00, -0xd1,0x01,0x00,0x00,0xe6,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xd5,0x01,0x00,0x00,0x59,0x00,0x00,0x00, -0xb9,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd8,0x01,0x00,0x00,0xd8,0x02,0x00,0x00,0xd7,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd9,0x01,0x00,0x00, -0xd5,0x01,0x00,0x00,0xd8,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xdb,0x01,0x00,0x00,0x68,0x00,0x00,0x00, -0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xdc,0x01,0x00,0x00,0xd9,0x01,0x00,0x00,0xdb,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xde,0x01,0x00,0x00, -0xdc,0x01,0x00,0x00,0xe6,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xe0,0x01,0x00,0x00,0xde,0x01,0x00,0x00, -0xdf,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xe2,0x01,0x00,0x00,0xe0,0x01,0x00,0x00,0xd3,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0x2c,0x01,0x00,0x00,0xe3,0x01,0x00,0x00, -0x5b,0x01,0x00,0x00,0xe2,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0xe4,0x01,0x00,0x00,0xe3,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,0xe5,0x01,0x00,0x00, -0xcf,0x01,0x00,0x00,0xd3,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0xe5,0x01,0x00,0x00,0xe4,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xe7,0x01,0x00,0x00,0xe6,0x02,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xc5,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xc7,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xc0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xc0,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe9,0x01,0x00,0x00, -0xd8,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xbd,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xbf,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xeb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xeb,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xd9,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0xbf,0x01,0x00,0x00, -0x2d,0x02,0x00,0x00,0xee,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0xf1,0x01,0x00,0x00,0xd9,0x02,0x00,0x00, -0xbf,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xed,0x01,0x00,0x00, -0xee,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xf1,0x01,0x00,0x00,0xec,0x01,0x00,0x00,0xed,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xec,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xf3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xf3,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xdd,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0xec,0x01,0x00,0x00,0x2b,0x02,0x00,0x00, -0xf6,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0xf9,0x01,0x00,0x00,0xdd,0x02,0x00,0x00,0x60,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xf5,0x01,0x00,0x00,0xf6,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xf9,0x01,0x00,0x00, -0xf4,0x01,0x00,0x00,0xf5,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xf4,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xfb,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xfb,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xdf,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0xf4,0x01,0x00,0x00,0x29,0x02,0x00,0x00,0xfe,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x01,0x02,0x00,0x00, -0xdf,0x02,0x00,0x00,0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xfd,0x01,0x00,0x00,0xfe,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x01,0x02,0x00,0x00,0xfc,0x01,0x00,0x00, -0xfd,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xfc,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0x03,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x03,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xe1,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0xfc,0x01,0x00,0x00, -0x27,0x02,0x00,0x00,0x04,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0x09,0x02,0x00,0x00,0xe1,0x02,0x00,0x00, -0x62,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x05,0x02,0x00,0x00, -0x04,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x09,0x02,0x00,0x00,0x04,0x02,0x00,0x00,0x05,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x04,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x0b,0x02,0x00,0x00,0xd9,0x02,0x00,0x00, -0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x0d,0x02,0x00,0x00,0x0b,0x02,0x00,0x00,0xdf,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0f,0x02,0x00,0x00, -0x0d,0x02,0x00,0x00,0x0e,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x11,0x02,0x00,0x00,0xdd,0x02,0x00,0x00, -0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x12,0x02,0x00,0x00,0x0f,0x02,0x00,0x00,0x11,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x14,0x02,0x00,0x00, -0x12,0x02,0x00,0x00,0xe1,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x18,0x02,0x00,0x00,0x11,0x02,0x00,0x00, -0xe1,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00, -0x19,0x02,0x00,0x00,0xa2,0x01,0x00,0x00,0x18,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x1a,0x02,0x00,0x00, -0x19,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00, -0x1f,0x02,0x00,0x00,0xcf,0x01,0x00,0x00,0x0d,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x20,0x02,0x00,0x00, -0x1f,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00, -0x22,0x02,0x00,0x00,0xca,0x00,0x00,0x00,0x14,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x23,0x02,0x00,0x00, -0x22,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,0xc4,0x00,0x00,0x00, -0x24,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x1a,0x02,0x00,0x00,0x20,0x02,0x00,0x00,0x23,0x02,0x00,0x00, -0x3e,0x00,0x03,0x00,0x22,0x02,0x00,0x00,0x24,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x27,0x02,0x00,0x00, -0xe1,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x03,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0xfe,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xfe,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x29,0x02,0x00,0x00,0xdf,0x02,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xfb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xfd,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xf6,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xf6,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x2b,0x02,0x00,0x00,0xdd,0x02,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xf3,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xf5,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xee,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xee,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2d,0x02,0x00,0x00, -0xd9,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xeb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xed,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0x8b,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x8b,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x2f,0x02,0x00,0x00,0xd3,0x02,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x88,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x8a,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xd7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd7,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x31,0x02,0x00,0x00, -0xb9,0x02,0x00,0x00,0x6c,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xd4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd6,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x36,0x02,0x00,0x00, -0x55,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x37,0x02,0x00,0x00,0x96,0x00,0x00,0x00, -0x36,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x3c,0x02,0x00,0x00,0x59,0x00,0x00,0x00,0xb9,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3d,0x02,0x00,0x00, -0xa8,0x00,0x00,0x00,0x3c,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x42,0x02,0x00,0x00,0x12,0x00,0x00,0x00, -0x41,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x43,0x02,0x00,0x00,0x42,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x44,0x02,0x00,0x00,0x0f,0x00,0x00,0x00, -0x43,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x48,0x02,0x00,0x00,0x47,0x00,0x00,0x00,0x43,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x4a,0x02,0x00,0x00, -0x49,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x4b,0x02,0x00,0x00,0x4a,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4c,0x02,0x00,0x00, -0x48,0x02,0x00,0x00,0x4b,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x4d,0x02,0x00,0x00,0x44,0x02,0x00,0x00, -0x4c,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x4f,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x4f,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xba,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0xd6,0x00,0x00,0x00,0xb5,0x02,0x00,0x00,0x52,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x55,0x02,0x00,0x00, -0xba,0x02,0x00,0x00,0xbf,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x51,0x02,0x00,0x00,0x52,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x55,0x02,0x00,0x00,0x50,0x02,0x00,0x00, -0x51,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x50,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x57,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x57,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xbb,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0x50,0x02,0x00,0x00, -0xb3,0x02,0x00,0x00,0x5a,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0x5d,0x02,0x00,0x00,0xbb,0x02,0x00,0x00, -0x60,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x59,0x02,0x00,0x00, -0x5a,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x5d,0x02,0x00,0x00,0x58,0x02,0x00,0x00,0x59,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x58,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x61,0x02,0x00,0x00,0xbb,0x02,0x00,0x00, -0x61,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x62,0x02,0x00,0x00,0x37,0x02,0x00,0x00,0x61,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x64,0x02,0x00,0x00, -0x64,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x65,0x02,0x00,0x00,0x62,0x02,0x00,0x00, -0x64,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x69,0x02,0x00,0x00,0xba,0x02,0x00,0x00,0xd7,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6a,0x02,0x00,0x00, -0x3d,0x02,0x00,0x00,0x69,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x6c,0x02,0x00,0x00,0x68,0x00,0x00,0x00, -0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x6d,0x02,0x00,0x00,0x6a,0x02,0x00,0x00,0x6c,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x6f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x6f,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xbd,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0x58,0x02,0x00,0x00, -0xb1,0x02,0x00,0x00,0x72,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0x75,0x02,0x00,0x00,0xbd,0x02,0x00,0x00, -0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x71,0x02,0x00,0x00, -0x72,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x75,0x02,0x00,0x00,0x70,0x02,0x00,0x00,0x71,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x70,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x77,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x77,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xbf,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0x70,0x02,0x00,0x00,0xaf,0x02,0x00,0x00, -0x7a,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0x7d,0x02,0x00,0x00,0xbf,0x02,0x00,0x00,0x62,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x79,0x02,0x00,0x00,0x7a,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x7d,0x02,0x00,0x00, -0x78,0x02,0x00,0x00,0x79,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x78,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x80,0x02,0x00,0x00,0x65,0x02,0x00,0x00,0xbf,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x83,0x02,0x00,0x00, -0x80,0x02,0x00,0x00,0x36,0x00,0x00,0x00,0xf7,0x00,0x03,0x00, -0x85,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x83,0x02,0x00,0x00,0x84,0x02,0x00,0x00,0x85,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x84,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x88,0x02,0x00,0x00,0x6d,0x02,0x00,0x00, -0xbd,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x89,0x02,0x00,0x00,0x12,0x00,0x00,0x00,0xd0,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x8a,0x02,0x00,0x00, -0x89,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0x8b,0x02,0x00,0x00,0x88,0x02,0x00,0x00,0x8a,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x85,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x85,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0xc2,0x00,0x00,0x00, -0x8c,0x02,0x00,0x00,0x83,0x02,0x00,0x00,0x78,0x02,0x00,0x00, -0x8b,0x02,0x00,0x00,0x84,0x02,0x00,0x00,0xf7,0x00,0x03,0x00, -0x8e,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x8c,0x02,0x00,0x00,0x8d,0x02,0x00,0x00,0x8e,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x8d,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x96,0x02,0x00,0x00,0x6d,0x02,0x00,0x00, -0xbd,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x98,0x02,0x00,0x00,0x12,0x00,0x00,0x00,0x97,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x99,0x02,0x00,0x00, -0x98,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9a,0x02,0x00,0x00,0x96,0x02,0x00,0x00,0x99,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9b,0x02,0x00,0x00, -0x4d,0x02,0x00,0x00,0x9a,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9d,0x02,0x00,0x00,0x9b,0x02,0x00,0x00, -0x65,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9f,0x02,0x00,0x00,0x9d,0x02,0x00,0x00,0xbf,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa1,0x02,0x00,0x00, -0xba,0x02,0x00,0x00,0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa3,0x02,0x00,0x00,0xa1,0x02,0x00,0x00, -0xbd,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa5,0x02,0x00,0x00,0xa3,0x02,0x00,0x00,0xa4,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa7,0x02,0x00,0x00, -0xbb,0x02,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa8,0x02,0x00,0x00,0xa5,0x02,0x00,0x00, -0xa7,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xaa,0x02,0x00,0x00,0xa8,0x02,0x00,0x00,0xbf,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,0xab,0x02,0x00,0x00, -0xca,0x00,0x00,0x00,0xaa,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0xac,0x02,0x00,0x00,0xab,0x02,0x00,0x00, -0x41,0x00,0x06,0x00,0x64,0x01,0x00,0x00,0xad,0x02,0x00,0x00, -0x92,0x02,0x00,0x00,0x34,0x00,0x00,0x00,0x9f,0x02,0x00,0x00, -0x3e,0x00,0x03,0x00,0xad,0x02,0x00,0x00,0xac,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x8e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x8e,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x7a,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x7a,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xaf,0x02,0x00,0x00,0xbf,0x02,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x77,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x79,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x72,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x72,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb1,0x02,0x00,0x00, -0xbd,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x6f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x71,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x5a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x5a,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xb3,0x02,0x00,0x00,0xbb,0x02,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x57,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x59,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x52,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x52,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xb5,0x02,0x00,0x00,0xba,0x02,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x4f,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x51,0x02,0x00,0x00,0xfd,0x00,0x01,0x00, -0x38,0x00,0x01,0x00, -}; -const uint64_t matmul_q4_0_f32_aligned_fp32_len = 10408; - -unsigned char matmul_q4_0_f32_fp32_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0x15,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00, -0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00, -0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64, -0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00, -0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0f,0x00,0x0f,0x00, -0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e, -0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x3d,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x07,0x01,0x00,0x00, -0x27,0x01,0x00,0x00,0x58,0x01,0x00,0x00,0x63,0x01,0x00,0x00, -0x49,0x02,0x00,0x00,0x92,0x02,0x00,0x00,0x10,0x00,0x06,0x00, -0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x34,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x10,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x37,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x3d,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x4c,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x4f,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x53,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x60,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x62,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x6c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xa6,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xb8,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xbb,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x02,0x01,0x00,0x00,0x06,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x03,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x03,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x04,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x48,0x00,0x04,0x00,0x05,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x05,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0x05,0x01,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x07,0x01,0x00,0x00,0x22,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x07,0x01,0x00,0x00, -0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x32,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x33,0x01,0x00,0x00,0x0b,0x00,0x00,0x00, -0x19,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x60,0x01,0x00,0x00, -0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0x61,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x61,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x61,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x63,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x63,0x01,0x00,0x00,0x21,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x49,0x02,0x00,0x00, -0x0b,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x8f,0x02,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x04,0x00,0x90,0x02,0x00,0x00,0x00,0x00,0x00,0x00, -0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x90,0x02,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0x90,0x02,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x92,0x02,0x00,0x00,0x22,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x92,0x02,0x00,0x00, -0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00, -0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00, -0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x1e,0x00,0x10,0x00,0x10,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x11,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x11,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x21,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x2d,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x34,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x3d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x4c,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x4f,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x58,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x61,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x61,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x67,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x61,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x6d,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x72,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x77,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x7c,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x80,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x85,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x90,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x96,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0xa1,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0xa8,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xb7,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xb8,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x4f,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbc,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0xbb,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbd,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbe,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0xbd,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbf,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0xbe,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc0,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0xbb,0x00,0x00,0x00, -0x14,0x00,0x02,0x00,0xc1,0x00,0x00,0x00,0x16,0x00,0x03,0x00, -0xc3,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xc4,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xc5,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x1c,0x00,0x04,0x00, -0xc7,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0xc6,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0xc8,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0xc7,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0xc3,0x00,0x00,0x00, -0xcb,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0xcc,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xc3,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0xcf,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xf3,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xf9,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x16,0x00,0x03,0x00,0x00,0x01,0x00,0x00,0x10,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x01,0x01,0x00,0x00,0x08,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x02,0x01,0x00,0x00, -0x01,0x01,0x00,0x00,0xf9,0x00,0x00,0x00,0x1e,0x00,0x04,0x00, -0x03,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x02,0x01,0x00,0x00, -0x1d,0x00,0x03,0x00,0x04,0x01,0x00,0x00,0x03,0x01,0x00,0x00, -0x1e,0x00,0x03,0x00,0x05,0x01,0x00,0x00,0x04,0x01,0x00,0x00, -0x20,0x00,0x04,0x00,0x06,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x05,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x06,0x01,0x00,0x00, -0x07,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x09,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x00,0x01,0x00,0x00, -0x20,0x00,0x04,0x00,0x10,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x01,0x01,0x00,0x00,0x17,0x00,0x04,0x00,0x14,0x01,0x00,0x00, -0xc3,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0xc3,0x00,0x00,0x00,0x1e,0x01,0x00,0x00,0x00,0x00,0x00,0x41, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x23,0x01,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x24,0x01,0x00,0x00, -0x84,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x23,0x01,0x00,0x00, -0x1c,0x00,0x04,0x00,0x25,0x01,0x00,0x00,0xc3,0x00,0x00,0x00, -0x24,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x26,0x01,0x00,0x00, -0x04,0x00,0x00,0x00,0x25,0x01,0x00,0x00,0x3b,0x00,0x04,0x00, -0x26,0x01,0x00,0x00,0x27,0x01,0x00,0x00,0x04,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x2b,0x01,0x00,0x00,0x04,0x00,0x00,0x00, -0xc3,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x32,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00, -0x09,0x00,0x00,0x00,0x33,0x01,0x00,0x00,0x32,0x01,0x00,0x00, -0x39,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x34,0x01,0x00,0x00,0x51,0x00,0x00,0x00, -0x33,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x35,0x01,0x00,0x00,0x84,0x00,0x00,0x00, -0x34,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x36,0x01,0x00,0x00,0x86,0x00,0x00,0x00, -0x35,0x01,0x00,0x00,0x6c,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x54,0x01,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x55,0x01,0x00,0x00,0x84,0x00,0x00,0x00, -0xa6,0x00,0x00,0x00,0x54,0x01,0x00,0x00,0x1c,0x00,0x04,0x00, -0x56,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,0x55,0x01,0x00,0x00, -0x20,0x00,0x04,0x00,0x57,0x01,0x00,0x00,0x04,0x00,0x00,0x00, -0x56,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x57,0x01,0x00,0x00, -0x58,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x5c,0x01,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x1d,0x00,0x03,0x00, -0x60,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,0x1e,0x00,0x03,0x00, -0x61,0x01,0x00,0x00,0x60,0x01,0x00,0x00,0x20,0x00,0x04,0x00, -0x62,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x61,0x01,0x00,0x00, -0x3b,0x00,0x04,0x00,0x62,0x01,0x00,0x00,0x63,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x6e,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x76,0x01,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x7b,0x01,0x00,0x00,0x51,0x00,0x00,0x00, -0x33,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x7c,0x01,0x00,0x00,0x84,0x00,0x00,0x00, -0x7b,0x01,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x7d,0x01,0x00,0x00,0x86,0x00,0x00,0x00, -0x7c,0x01,0x00,0x00,0x6c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x08,0x01,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x81,0x01,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x84,0x01,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x9f,0x01,0x00,0x00, -0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x1c,0x00,0x04,0x00,0xa0,0x01,0x00,0x00,0xc3,0x00,0x00,0x00, -0x9f,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0xa1,0x01,0x00,0x00, -0x07,0x00,0x00,0x00,0xa0,0x01,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xb1,0x01,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xcc,0x01,0x00,0x00,0x84,0x00,0x00,0x00, -0xbe,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x1c,0x00,0x04,0x00, -0xcd,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,0xcc,0x01,0x00,0x00, -0x20,0x00,0x04,0x00,0xce,0x01,0x00,0x00,0x07,0x00,0x00,0x00, -0xcd,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xd7,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0xb8,0x00,0x00,0x00, -0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xdf,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x0e,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x41,0x02,0x00,0x00,0x0d,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x49,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0x1d,0x00,0x03,0x00,0x8f,0x02,0x00,0x00,0xc3,0x00,0x00,0x00, -0x1e,0x00,0x03,0x00,0x90,0x02,0x00,0x00,0x8f,0x02,0x00,0x00, -0x20,0x00,0x04,0x00,0x91,0x02,0x00,0x00,0x0c,0x00,0x00,0x00, -0x90,0x02,0x00,0x00,0x3b,0x00,0x04,0x00,0x91,0x02,0x00,0x00, -0x92,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x97,0x02,0x00,0x00,0x05,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xa4,0x02,0x00,0x00, -0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x2c,0x00,0x05,0x00,0x14,0x01,0x00,0x00,0x14,0x03,0x00,0x00, -0x1e,0x01,0x00,0x00,0x1e,0x01,0x00,0x00,0x36,0x00,0x05,0x00, -0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0xc8,0x00,0x00,0x00,0xc9,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xa1,0x01,0x00,0x00, -0xa2,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0xce,0x01,0x00,0x00,0xcf,0x01,0x00,0x00,0x07,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x16,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x16,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x17,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x24,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2a,0x00,0x00,0x00, -0x1e,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x2d,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x2f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x24,0x00,0x00,0x00, -0x2f,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x2a,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x35,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x35,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x38,0x00,0x00,0x00, -0x36,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x82,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x38,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x3b,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x3f,0x00,0x00,0x00, -0x3d,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x3f,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x42,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x3b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x49,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4a,0x00,0x00,0x00, -0x49,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x4d,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x3e,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x4d,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x50,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00, -0x50,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x50,0x00,0x00,0x00, -0x58,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x5d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x64,0x00,0x00,0x00, -0x5d,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x5d,0x00,0x00,0x00, -0x67,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x6e,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x6d,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x73,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x72,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x77,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x7d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x7c,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x81,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x81,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x83,0x00,0x00,0x00, -0x47,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x85,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x87,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x47,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x8c,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x82,0x00,0x00,0x00, -0x0c,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x8d,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x26,0x00,0x00,0x00,0x87,0x00,0x00,0x00, -0x8c,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x91,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x90,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x92,0x00,0x00,0x00, -0x91,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x93,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x92,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x95,0x00,0x00,0x00, -0x42,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x96,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x98,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x95,0x00,0x00,0x00, -0x98,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9a,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x99,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9c,0x00,0x00,0x00, -0x9a,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,0x9c,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0xa2,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0xa1,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa3,0x00,0x00,0x00, -0xa2,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa4,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0xa3,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa7,0x00,0x00,0x00, -0x4a,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0xa8,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xaa,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0xa7,0x00,0x00,0x00, -0xaa,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xac,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0xab,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xae,0x00,0x00,0x00, -0xac,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0xae,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb1,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xb1,0x00,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xb8,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0x05,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0xb2,0x00,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xc2,0x00,0x00,0x00, -0xb8,0x02,0x00,0x00,0xc0,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xb3,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xc2,0x00,0x00,0x00,0xb2,0x00,0x00,0x00, -0xb3,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb2,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,0xcd,0x00,0x00,0x00, -0xc9,0x00,0x00,0x00,0xb8,0x02,0x00,0x00,0x3e,0x00,0x03,0x00, -0xcd,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0xb8,0x02,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb1,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xb3,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xd3,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd3,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xd1,0x02,0x00,0x00, -0xaf,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0x86,0x01,0x00,0x00, -0xd6,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xcd,0x02,0x00,0x00,0x9d,0x00,0x00,0x00,0xb3,0x00,0x00,0x00, -0x83,0x01,0x00,0x00,0xd6,0x00,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xb9,0x02,0x00,0x00,0x83,0x00,0x00,0x00, -0xb3,0x00,0x00,0x00,0x31,0x02,0x00,0x00,0xd6,0x00,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xda,0x00,0x00,0x00, -0xb9,0x02,0x00,0x00,0x8d,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xd5,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xda,0x00,0x00,0x00,0xd4,0x00,0x00,0x00, -0xd5,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd4,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xdc,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xdc,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xc9,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0xd4,0x00,0x00,0x00, -0x38,0x01,0x00,0x00,0xdd,0x00,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0xe2,0x00,0x00,0x00,0xc9,0x02,0x00,0x00, -0x37,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xde,0x00,0x00,0x00, -0xdd,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xe2,0x00,0x00,0x00,0xdd,0x00,0x00,0x00,0xde,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,0x73,0x00,0x00,0x00, -0xc9,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xea,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,0x98,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xeb,0x00,0x00,0x00, -0xea,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xec,0x00,0x00,0x00,0xcd,0x02,0x00,0x00, -0xeb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xee,0x00,0x00,0x00,0xec,0x00,0x00,0x00,0x6e,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf4,0x00,0x00,0x00, -0xe7,0x00,0x00,0x00,0xf3,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,0xf4,0x00,0x00,0x00, -0x6e,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xfa,0x00,0x00,0x00,0xee,0x00,0x00,0x00,0xf9,0x00,0x00,0x00, -0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfe,0x00,0x00,0x00, -0xee,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,0x41,0x00,0x07,0x00, -0x09,0x01,0x00,0x00,0x0a,0x01,0x00,0x00,0x07,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x00,0x01,0x00,0x00,0x0b,0x01,0x00,0x00, -0x0a,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0xc3,0x00,0x00,0x00, -0x0c,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,0x41,0x00,0x08,0x00, -0x10,0x01,0x00,0x00,0x11,0x01,0x00,0x00,0x07,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0xcf,0x00,0x00,0x00, -0xfe,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x01,0x01,0x00,0x00, -0x12,0x01,0x00,0x00,0x11,0x01,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x13,0x01,0x00,0x00,0x12,0x01,0x00,0x00, -0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x18,0x01,0x00,0x00, -0x13,0x01,0x00,0x00,0xfd,0x00,0x00,0x00,0x70,0x00,0x04,0x00, -0xc3,0x00,0x00,0x00,0x19,0x01,0x00,0x00,0x18,0x01,0x00,0x00, -0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1b,0x01,0x00,0x00, -0x13,0x01,0x00,0x00,0xa8,0x00,0x00,0x00,0x70,0x00,0x04,0x00, -0xc3,0x00,0x00,0x00,0x1c,0x01,0x00,0x00,0x1b,0x01,0x00,0x00, -0x50,0x00,0x05,0x00,0x14,0x01,0x00,0x00,0x1d,0x01,0x00,0x00, -0x19,0x01,0x00,0x00,0x1c,0x01,0x00,0x00,0x83,0x00,0x05,0x00, -0x14,0x01,0x00,0x00,0x20,0x01,0x00,0x00,0x1d,0x01,0x00,0x00, -0x14,0x03,0x00,0x00,0x8e,0x00,0x05,0x00,0x14,0x01,0x00,0x00, -0x22,0x01,0x00,0x00,0x20,0x01,0x00,0x00,0x0c,0x01,0x00,0x00, -0x51,0x00,0x05,0x00,0xc3,0x00,0x00,0x00,0x2a,0x01,0x00,0x00, -0x22,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x2b,0x01,0x00,0x00,0x2c,0x01,0x00,0x00,0x27,0x01,0x00,0x00, -0xf6,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0x2c,0x01,0x00,0x00, -0x2a,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x2e,0x01,0x00,0x00,0xf6,0x00,0x00,0x00,0xf9,0x00,0x00,0x00, -0x51,0x00,0x05,0x00,0xc3,0x00,0x00,0x00,0x30,0x01,0x00,0x00, -0x22,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x2b,0x01,0x00,0x00,0x31,0x01,0x00,0x00,0x27,0x01,0x00,0x00, -0x2e,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x31,0x01,0x00,0x00, -0x30,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x38,0x01,0x00,0x00,0xc9,0x02,0x00,0x00,0x36,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xdc,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xde,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x3a,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x3a,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xca,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0xde,0x00,0x00,0x00,0x7f,0x01,0x00,0x00,0x3d,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x40,0x01,0x00,0x00, -0xca,0x02,0x00,0x00,0xa6,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x3c,0x01,0x00,0x00,0x3d,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x40,0x01,0x00,0x00,0x3b,0x01,0x00,0x00, -0x3c,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x3b,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x44,0x01,0x00,0x00, -0xa7,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x46,0x01,0x00,0x00,0x44,0x01,0x00,0x00, -0xca,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x47,0x01,0x00,0x00,0x12,0x00,0x00,0x00,0xcf,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x48,0x01,0x00,0x00, -0x47,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0x49,0x01,0x00,0x00,0x46,0x01,0x00,0x00,0x48,0x01,0x00,0x00, -0xf7,0x00,0x03,0x00,0x4b,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x49,0x01,0x00,0x00,0x4a,0x01,0x00,0x00, -0x4b,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x4a,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4e,0x01,0x00,0x00, -0xb9,0x02,0x00,0x00,0x78,0x00,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0x50,0x01,0x00,0x00,0x4e,0x01,0x00,0x00, -0x8d,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x4b,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x4b,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0xc1,0x00,0x00,0x00,0x51,0x01,0x00,0x00,0x49,0x01,0x00,0x00, -0x3b,0x01,0x00,0x00,0x50,0x01,0x00,0x00,0x4a,0x01,0x00,0x00, -0xf7,0x00,0x03,0x00,0x53,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x51,0x01,0x00,0x00,0x52,0x01,0x00,0x00, -0x72,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x52,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5b,0x01,0x00,0x00, -0x7d,0x00,0x00,0x00,0xca,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x5d,0x01,0x00,0x00,0x5b,0x01,0x00,0x00, -0x5c,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x5f,0x01,0x00,0x00,0x5d,0x01,0x00,0x00,0x78,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6a,0x01,0x00,0x00, -0x5b,0x01,0x00,0x00,0xaa,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x6b,0x01,0x00,0x00,0xd1,0x02,0x00,0x00, -0x6a,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x6d,0x01,0x00,0x00,0x6b,0x01,0x00,0x00,0x78,0x00,0x00,0x00, -0x41,0x00,0x06,0x00,0x6e,0x01,0x00,0x00,0x6f,0x01,0x00,0x00, -0x63,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0x6d,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x70,0x01,0x00,0x00, -0x6f,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x2b,0x01,0x00,0x00, -0x71,0x01,0x00,0x00,0x58,0x01,0x00,0x00,0x5f,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0x71,0x01,0x00,0x00,0x70,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0x53,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x72,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x75,0x01,0x00,0x00,0x7d,0x00,0x00,0x00,0xca,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x77,0x01,0x00,0x00, -0x75,0x01,0x00,0x00,0x76,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x79,0x01,0x00,0x00,0x77,0x01,0x00,0x00, -0x78,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x2b,0x01,0x00,0x00, -0x7a,0x01,0x00,0x00,0x58,0x01,0x00,0x00,0x79,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0x7a,0x01,0x00,0x00,0xcb,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x53,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x53,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x3d,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x3d,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x7f,0x01,0x00,0x00,0xca,0x02,0x00,0x00, -0x7d,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x3a,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x3c,0x01,0x00,0x00,0xe0,0x00,0x04,0x00, -0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x80,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x83,0x01,0x00,0x00, -0xcd,0x02,0x00,0x00,0x81,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x86,0x01,0x00,0x00,0xd1,0x02,0x00,0x00, -0x84,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x88,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x88,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xd3,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0x3c,0x01,0x00,0x00,0x2f,0x02,0x00,0x00,0x8b,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x8e,0x01,0x00,0x00, -0xd3,0x02,0x00,0x00,0x6c,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x8a,0x01,0x00,0x00,0x8b,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x8e,0x01,0x00,0x00,0x89,0x01,0x00,0x00, -0x8a,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x89,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0x90,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x90,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xd7,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0x89,0x01,0x00,0x00, -0xbb,0x01,0x00,0x00,0x93,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0x96,0x01,0x00,0x00,0xd7,0x02,0x00,0x00, -0x60,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x92,0x01,0x00,0x00, -0x93,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x96,0x01,0x00,0x00,0x91,0x01,0x00,0x00,0x92,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x91,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0x98,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x98,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xe9,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0x91,0x01,0x00,0x00,0xb9,0x01,0x00,0x00, -0x99,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0x9e,0x01,0x00,0x00,0xe9,0x02,0x00,0x00,0x62,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x9a,0x01,0x00,0x00,0x99,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x9e,0x01,0x00,0x00, -0x99,0x01,0x00,0x00,0x9a,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x99,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa4,0x01,0x00,0x00,0xd7,0x02,0x00,0x00,0x62,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa6,0x01,0x00,0x00, -0xa4,0x01,0x00,0x00,0xe9,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa8,0x01,0x00,0x00,0x55,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xaa,0x01,0x00,0x00,0xd7,0x02,0x00,0x00,0x61,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xab,0x01,0x00,0x00, -0xa8,0x01,0x00,0x00,0xaa,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xad,0x01,0x00,0x00,0x64,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xae,0x01,0x00,0x00,0xab,0x01,0x00,0x00,0xad,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb0,0x01,0x00,0x00, -0xae,0x01,0x00,0x00,0xe9,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xb2,0x01,0x00,0x00,0xb0,0x01,0x00,0x00, -0xb1,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xb4,0x01,0x00,0x00,0xb2,0x01,0x00,0x00,0xd3,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0x2b,0x01,0x00,0x00,0xb5,0x01,0x00,0x00, -0x27,0x01,0x00,0x00,0xb4,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc3,0x00,0x00,0x00,0xb6,0x01,0x00,0x00,0xb5,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,0xb7,0x01,0x00,0x00, -0xa2,0x01,0x00,0x00,0xa6,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0xb7,0x01,0x00,0x00,0xb6,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xb9,0x01,0x00,0x00,0xe9,0x02,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x98,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x9a,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0x93,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x93,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbb,0x01,0x00,0x00, -0xd7,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x90,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x92,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xbd,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xbd,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xd8,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0x92,0x01,0x00,0x00, -0xe9,0x01,0x00,0x00,0xc0,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0xc3,0x01,0x00,0x00,0xd8,0x02,0x00,0x00, -0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xbf,0x01,0x00,0x00, -0xc0,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xc3,0x01,0x00,0x00,0xbe,0x01,0x00,0x00,0xbf,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xbe,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xc5,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xc5,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xe6,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0xbe,0x01,0x00,0x00,0xe7,0x01,0x00,0x00, -0xc6,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0xcb,0x01,0x00,0x00,0xe6,0x02,0x00,0x00,0xbb,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xc7,0x01,0x00,0x00,0xc6,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xcb,0x01,0x00,0x00, -0xc6,0x01,0x00,0x00,0xc7,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xc6,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd1,0x01,0x00,0x00,0xd8,0x02,0x00,0x00,0xbb,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd3,0x01,0x00,0x00, -0xd1,0x01,0x00,0x00,0xe6,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xd5,0x01,0x00,0x00,0x59,0x00,0x00,0x00, -0xb8,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd8,0x01,0x00,0x00,0xd8,0x02,0x00,0x00,0xd7,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd9,0x01,0x00,0x00, -0xd5,0x01,0x00,0x00,0xd8,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xdb,0x01,0x00,0x00,0x68,0x00,0x00,0x00, -0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xdc,0x01,0x00,0x00,0xd9,0x01,0x00,0x00,0xdb,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xde,0x01,0x00,0x00, -0xdc,0x01,0x00,0x00,0xe6,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xe0,0x01,0x00,0x00,0xde,0x01,0x00,0x00, -0xdf,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xe2,0x01,0x00,0x00,0xe0,0x01,0x00,0x00,0xd3,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0x2b,0x01,0x00,0x00,0xe3,0x01,0x00,0x00, -0x58,0x01,0x00,0x00,0xe2,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc3,0x00,0x00,0x00,0xe4,0x01,0x00,0x00,0xe3,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,0xe5,0x01,0x00,0x00, -0xcf,0x01,0x00,0x00,0xd3,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0xe5,0x01,0x00,0x00,0xe4,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xe7,0x01,0x00,0x00,0xe6,0x02,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xc5,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xc7,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xc0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xc0,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe9,0x01,0x00,0x00, -0xd8,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xbd,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xbf,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xeb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xeb,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xd9,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0xbf,0x01,0x00,0x00, -0x2d,0x02,0x00,0x00,0xee,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0xf1,0x01,0x00,0x00,0xd9,0x02,0x00,0x00, -0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xed,0x01,0x00,0x00, -0xee,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xf1,0x01,0x00,0x00,0xec,0x01,0x00,0x00,0xed,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xec,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xf3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xf3,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xdd,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0xec,0x01,0x00,0x00,0x2b,0x02,0x00,0x00, -0xf6,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0xf9,0x01,0x00,0x00,0xdd,0x02,0x00,0x00,0x60,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xf5,0x01,0x00,0x00,0xf6,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xf9,0x01,0x00,0x00, -0xf4,0x01,0x00,0x00,0xf5,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xf4,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xfb,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xfb,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xdf,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0xf4,0x01,0x00,0x00,0x29,0x02,0x00,0x00,0xfe,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x01,0x02,0x00,0x00, -0xdf,0x02,0x00,0x00,0xbb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xfd,0x01,0x00,0x00,0xfe,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x01,0x02,0x00,0x00,0xfc,0x01,0x00,0x00, -0xfd,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xfc,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0x03,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x03,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xe1,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0xfc,0x01,0x00,0x00, -0x27,0x02,0x00,0x00,0x04,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0x09,0x02,0x00,0x00,0xe1,0x02,0x00,0x00, -0x62,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x05,0x02,0x00,0x00, -0x04,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x09,0x02,0x00,0x00,0x04,0x02,0x00,0x00,0x05,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x04,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x0b,0x02,0x00,0x00,0xd9,0x02,0x00,0x00, -0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x0d,0x02,0x00,0x00,0x0b,0x02,0x00,0x00,0xdf,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0f,0x02,0x00,0x00, -0x0d,0x02,0x00,0x00,0x0e,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x11,0x02,0x00,0x00,0xdd,0x02,0x00,0x00, -0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x12,0x02,0x00,0x00,0x0f,0x02,0x00,0x00,0x11,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x14,0x02,0x00,0x00, -0x12,0x02,0x00,0x00,0xe1,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x18,0x02,0x00,0x00,0x11,0x02,0x00,0x00, -0xe1,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00, -0x19,0x02,0x00,0x00,0xa2,0x01,0x00,0x00,0x18,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x1a,0x02,0x00,0x00, -0x19,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00, -0x1f,0x02,0x00,0x00,0xcf,0x01,0x00,0x00,0x0d,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x20,0x02,0x00,0x00, -0x1f,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00, -0x22,0x02,0x00,0x00,0xc9,0x00,0x00,0x00,0x14,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x23,0x02,0x00,0x00, -0x22,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,0xc3,0x00,0x00,0x00, -0x24,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x1a,0x02,0x00,0x00,0x20,0x02,0x00,0x00,0x23,0x02,0x00,0x00, -0x3e,0x00,0x03,0x00,0x22,0x02,0x00,0x00,0x24,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x27,0x02,0x00,0x00, -0xe1,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x03,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0xfe,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xfe,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x29,0x02,0x00,0x00,0xdf,0x02,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xfb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xfd,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xf6,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xf6,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x2b,0x02,0x00,0x00,0xdd,0x02,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xf3,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xf5,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xee,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xee,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2d,0x02,0x00,0x00, -0xd9,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xeb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xed,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0x8b,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x8b,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x2f,0x02,0x00,0x00,0xd3,0x02,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x88,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x8a,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xd6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd6,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x31,0x02,0x00,0x00, -0xb9,0x02,0x00,0x00,0x6c,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xd3,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd5,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x36,0x02,0x00,0x00, -0x55,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x37,0x02,0x00,0x00,0x95,0x00,0x00,0x00, -0x36,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x3c,0x02,0x00,0x00,0x59,0x00,0x00,0x00,0xb8,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3d,0x02,0x00,0x00, -0xa7,0x00,0x00,0x00,0x3c,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x42,0x02,0x00,0x00,0x12,0x00,0x00,0x00, -0x41,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x43,0x02,0x00,0x00,0x42,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x44,0x02,0x00,0x00,0x0f,0x00,0x00,0x00, -0x43,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x48,0x02,0x00,0x00,0x47,0x00,0x00,0x00,0x43,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x4a,0x02,0x00,0x00, -0x49,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x4b,0x02,0x00,0x00,0x4a,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4c,0x02,0x00,0x00, -0x48,0x02,0x00,0x00,0x4b,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x4d,0x02,0x00,0x00,0x44,0x02,0x00,0x00, -0x4c,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x4f,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x4f,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xba,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0xd5,0x00,0x00,0x00,0xb5,0x02,0x00,0x00,0x52,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x55,0x02,0x00,0x00, -0xba,0x02,0x00,0x00,0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x51,0x02,0x00,0x00,0x52,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x55,0x02,0x00,0x00,0x50,0x02,0x00,0x00, -0x51,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x50,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x57,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x57,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xbb,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0x50,0x02,0x00,0x00, -0xb3,0x02,0x00,0x00,0x5a,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0x5d,0x02,0x00,0x00,0xbb,0x02,0x00,0x00, -0x60,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x59,0x02,0x00,0x00, -0x5a,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x5d,0x02,0x00,0x00,0x58,0x02,0x00,0x00,0x59,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x58,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x61,0x02,0x00,0x00,0xbb,0x02,0x00,0x00, -0x61,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x62,0x02,0x00,0x00,0x37,0x02,0x00,0x00,0x61,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x64,0x02,0x00,0x00, -0x64,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x65,0x02,0x00,0x00,0x62,0x02,0x00,0x00, -0x64,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x69,0x02,0x00,0x00,0xba,0x02,0x00,0x00,0xd7,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6a,0x02,0x00,0x00, -0x3d,0x02,0x00,0x00,0x69,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x6c,0x02,0x00,0x00,0x68,0x00,0x00,0x00, -0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x6d,0x02,0x00,0x00,0x6a,0x02,0x00,0x00,0x6c,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x6f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x6f,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xbd,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0x58,0x02,0x00,0x00, -0xb1,0x02,0x00,0x00,0x72,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0x75,0x02,0x00,0x00,0xbd,0x02,0x00,0x00, -0xbb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x71,0x02,0x00,0x00, -0x72,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x75,0x02,0x00,0x00,0x70,0x02,0x00,0x00,0x71,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x70,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x77,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x77,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xbf,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0x70,0x02,0x00,0x00,0xaf,0x02,0x00,0x00, -0x7a,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0x7d,0x02,0x00,0x00,0xbf,0x02,0x00,0x00,0x62,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x79,0x02,0x00,0x00,0x7a,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x7d,0x02,0x00,0x00, -0x78,0x02,0x00,0x00,0x79,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x78,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x80,0x02,0x00,0x00,0x65,0x02,0x00,0x00,0xbf,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x83,0x02,0x00,0x00, -0x80,0x02,0x00,0x00,0x36,0x00,0x00,0x00,0xf7,0x00,0x03,0x00, -0x85,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x83,0x02,0x00,0x00,0x84,0x02,0x00,0x00,0x85,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x84,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x88,0x02,0x00,0x00,0x6d,0x02,0x00,0x00, -0xbd,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x89,0x02,0x00,0x00,0x12,0x00,0x00,0x00,0xcf,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x8a,0x02,0x00,0x00, -0x89,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0x8b,0x02,0x00,0x00,0x88,0x02,0x00,0x00,0x8a,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x85,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x85,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0xc1,0x00,0x00,0x00, -0x8c,0x02,0x00,0x00,0x83,0x02,0x00,0x00,0x78,0x02,0x00,0x00, -0x8b,0x02,0x00,0x00,0x84,0x02,0x00,0x00,0xf7,0x00,0x03,0x00, -0x8e,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x8c,0x02,0x00,0x00,0x8d,0x02,0x00,0x00,0x8e,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x8d,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x96,0x02,0x00,0x00,0x6d,0x02,0x00,0x00, -0xbd,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x98,0x02,0x00,0x00,0x12,0x00,0x00,0x00,0x97,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x99,0x02,0x00,0x00, -0x98,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9a,0x02,0x00,0x00,0x96,0x02,0x00,0x00,0x99,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9b,0x02,0x00,0x00, -0x4d,0x02,0x00,0x00,0x9a,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9d,0x02,0x00,0x00,0x9b,0x02,0x00,0x00, -0x65,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9f,0x02,0x00,0x00,0x9d,0x02,0x00,0x00,0xbf,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa1,0x02,0x00,0x00, -0xba,0x02,0x00,0x00,0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa3,0x02,0x00,0x00,0xa1,0x02,0x00,0x00, -0xbd,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa5,0x02,0x00,0x00,0xa3,0x02,0x00,0x00,0xa4,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa7,0x02,0x00,0x00, -0xbb,0x02,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa8,0x02,0x00,0x00,0xa5,0x02,0x00,0x00, -0xa7,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xaa,0x02,0x00,0x00,0xa8,0x02,0x00,0x00,0xbf,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,0xab,0x02,0x00,0x00, -0xc9,0x00,0x00,0x00,0xaa,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc3,0x00,0x00,0x00,0xac,0x02,0x00,0x00,0xab,0x02,0x00,0x00, -0x41,0x00,0x06,0x00,0x6e,0x01,0x00,0x00,0xad,0x02,0x00,0x00, -0x92,0x02,0x00,0x00,0x34,0x00,0x00,0x00,0x9f,0x02,0x00,0x00, -0x3e,0x00,0x03,0x00,0xad,0x02,0x00,0x00,0xac,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x8e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x8e,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x7a,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x7a,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xaf,0x02,0x00,0x00,0xbf,0x02,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x77,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x79,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x72,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x72,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb1,0x02,0x00,0x00, -0xbd,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x6f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x71,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x5a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x5a,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xb3,0x02,0x00,0x00,0xbb,0x02,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x57,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x59,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x52,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x52,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xb5,0x02,0x00,0x00,0xba,0x02,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x4f,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x51,0x02,0x00,0x00,0xfd,0x00,0x01,0x00, -0x38,0x00,0x01,0x00, -}; -const uint64_t matmul_q4_0_f32_fp32_len = 10444; - -unsigned char matmul_q4_1_f32_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0xf6,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x09,0x00,0x00,0x00, -0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00, -0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00, -0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30, -0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x0f,0x00,0x0f,0x00,0x05,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x4c,0x00,0x00,0x00,0x07,0x01,0x00,0x00,0x2c,0x01,0x00,0x00, -0x5f,0x01,0x00,0x00,0x6a,0x01,0x00,0x00,0x55,0x02,0x00,0x00, -0x9e,0x02,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x05,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x30,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x0d,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0x10,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x37,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x3d,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x4c,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x4f,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x53,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x60,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x62,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x6c,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xa6,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xb8,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xbb,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x02,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x03,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x03,0x01,0x00,0x00, -0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x04,0x01,0x00,0x00,0x06,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x05,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x05,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x05,0x01,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x07,0x01,0x00,0x00, -0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x07,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x39,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x3a,0x01,0x00,0x00, -0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x67,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x04,0x00,0x68,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x68,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0x68,0x01,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x6a,0x01,0x00,0x00,0x22,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x6a,0x01,0x00,0x00, -0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x55,0x02,0x00,0x00,0x0b,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x9b,0x02,0x00,0x00,0x06,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x9c,0x02,0x00,0x00, -0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x9c,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x9c,0x02,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x9e,0x02,0x00,0x00, -0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x9e,0x02,0x00,0x00,0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00, -0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x1e,0x00,0x10,0x00, -0x10,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x11,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x11,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x15,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x0a,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x27,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x2d,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x3e,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x4c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x54,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x58,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x63,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x67,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x6d,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x72,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x77,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x7c,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x80,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x90,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x96,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa6,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0xa8,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0xb8,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xba,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xbb,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xbc,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xba,0x00,0x00,0x00, -0xbb,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xbd,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xbc,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xbe,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0xb9,0x00,0x00,0x00, -0xbd,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xbf,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xb7,0x00,0x00,0x00, -0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xc0,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xbf,0x00,0x00,0x00, -0xbb,0x00,0x00,0x00,0x14,0x00,0x02,0x00,0xc1,0x00,0x00,0x00, -0x16,0x00,0x03,0x00,0xc3,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc4,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0xbe,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0xbb,0x00,0x00,0x00, -0x1c,0x00,0x04,0x00,0xc7,0x00,0x00,0x00,0xc3,0x00,0x00,0x00, -0xc6,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xc8,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0xc3,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0xcc,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0xc3,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0xcf,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xf3,0x00,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xfd,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0x00,0x01,0x00,0x00, -0x10,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x01,0x01,0x00,0x00, -0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1c,0x00,0x04,0x00, -0x02,0x01,0x00,0x00,0x01,0x01,0x00,0x00,0xf9,0x00,0x00,0x00, -0x1e,0x00,0x05,0x00,0x03,0x01,0x00,0x00,0x00,0x01,0x00,0x00, -0x00,0x01,0x00,0x00,0x02,0x01,0x00,0x00,0x1d,0x00,0x03,0x00, -0x04,0x01,0x00,0x00,0x03,0x01,0x00,0x00,0x1e,0x00,0x03,0x00, -0x05,0x01,0x00,0x00,0x04,0x01,0x00,0x00,0x20,0x00,0x04,0x00, -0x06,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x05,0x01,0x00,0x00, -0x3b,0x00,0x04,0x00,0x06,0x01,0x00,0x00,0x07,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x09,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x20,0x00,0x04,0x00, -0x15,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x01,0x01,0x00,0x00, -0x17,0x00,0x04,0x00,0x19,0x01,0x00,0x00,0xc3,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x28,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x29,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x28,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,0x2a,0x01,0x00,0x00, -0x00,0x01,0x00,0x00,0x29,0x01,0x00,0x00,0x20,0x00,0x04,0x00, -0x2b,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x2a,0x01,0x00,0x00, -0x3b,0x00,0x04,0x00,0x2b,0x01,0x00,0x00,0x2c,0x01,0x00,0x00, -0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x31,0x01,0x00,0x00, -0x04,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x39,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0x33,0x00,0x06,0x00,0x09,0x00,0x00,0x00,0x3a,0x01,0x00,0x00, -0x39,0x01,0x00,0x00,0x39,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x3b,0x01,0x00,0x00, -0x51,0x00,0x00,0x00,0x3a,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x3c,0x01,0x00,0x00, -0x84,0x00,0x00,0x00,0x3b,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x3d,0x01,0x00,0x00, -0x86,0x00,0x00,0x00,0x3c,0x01,0x00,0x00,0x6c,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x5b,0x01,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x5c,0x01,0x00,0x00, -0x84,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,0x5b,0x01,0x00,0x00, -0x1c,0x00,0x04,0x00,0x5d,0x01,0x00,0x00,0x00,0x01,0x00,0x00, -0x5c,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x5e,0x01,0x00,0x00, -0x04,0x00,0x00,0x00,0x5d,0x01,0x00,0x00,0x3b,0x00,0x04,0x00, -0x5e,0x01,0x00,0x00,0x5f,0x01,0x00,0x00,0x04,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x63,0x01,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x1d,0x00,0x03,0x00,0x67,0x01,0x00,0x00,0xc3,0x00,0x00,0x00, -0x1e,0x00,0x03,0x00,0x68,0x01,0x00,0x00,0x67,0x01,0x00,0x00, -0x20,0x00,0x04,0x00,0x69,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x68,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x69,0x01,0x00,0x00, -0x6a,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x75,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0xc3,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x7e,0x01,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x00,0x01,0x00,0x00,0x82,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x84,0x01,0x00,0x00,0x51,0x00,0x00,0x00,0x3a,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x85,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x84,0x01,0x00,0x00, -0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x86,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x85,0x01,0x00,0x00, -0x6c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x89,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x8a,0x01,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x8d,0x01,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xa8,0x01,0x00,0x00,0x84,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x1c,0x00,0x04,0x00, -0xa9,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0xa8,0x01,0x00,0x00, -0x20,0x00,0x04,0x00,0xaa,0x01,0x00,0x00,0x07,0x00,0x00,0x00, -0xa9,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xba,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xc0,0x01,0x00,0x00, -0x07,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xd6,0x01,0x00,0x00,0x84,0x00,0x00,0x00, -0xbe,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x1c,0x00,0x04,0x00, -0xd7,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0xd6,0x01,0x00,0x00, -0x20,0x00,0x04,0x00,0xd8,0x01,0x00,0x00,0x07,0x00,0x00,0x00, -0xd7,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xe1,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0xb8,0x00,0x00,0x00, -0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xe9,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x18,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x4d,0x02,0x00,0x00,0x0d,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x55,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0x1d,0x00,0x03,0x00,0x9b,0x02,0x00,0x00,0xc3,0x00,0x00,0x00, -0x1e,0x00,0x03,0x00,0x9c,0x02,0x00,0x00,0x9b,0x02,0x00,0x00, -0x20,0x00,0x04,0x00,0x9d,0x02,0x00,0x00,0x0c,0x00,0x00,0x00, -0x9c,0x02,0x00,0x00,0x3b,0x00,0x04,0x00,0x9d,0x02,0x00,0x00, -0x9e,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0xa3,0x02,0x00,0x00,0x05,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xb0,0x02,0x00,0x00, -0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x05,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xc8,0x00,0x00,0x00, -0xc9,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0xaa,0x01,0x00,0x00,0xab,0x01,0x00,0x00,0x07,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0xd8,0x01,0x00,0x00,0xd9,0x01,0x00,0x00, -0x07,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x16,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x17,0x00,0x00,0x00, -0x16,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x17,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1e,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x21,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x28,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x27,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x29,0x00,0x00,0x00, -0x28,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x2a,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x29,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x2e,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00, -0x24,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x30,0x00,0x00,0x00, -0x2a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x35,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x36,0x00,0x00,0x00, -0x35,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x38,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00, -0x38,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x3a,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x3f,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x3e,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x3f,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x42,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x3b,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x47,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x4a,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x4c,0x00,0x00,0x00, -0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x4f,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x55,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x54,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00, -0x50,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x4f,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x64,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,0x63,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x68,0x00,0x00,0x00, -0x5d,0x00,0x00,0x00,0x67,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x6d,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x73,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x72,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x78,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x7c,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x81,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x80,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x82,0x00,0x00,0x00, -0x81,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x83,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0x82,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x89,0x00,0x00,0x00, -0x47,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,0x89,0x00,0x00,0x00, -0x82,0x00,0x00,0x00,0x0c,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x8d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x26,0x00,0x00,0x00, -0x87,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x90,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x92,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x92,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x95,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x97,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x97,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x99,0x00,0x00,0x00, -0x95,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x93,0x00,0x00,0x00, -0x99,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9c,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x83,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9d,0x00,0x00,0x00, -0x9c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0xa1,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xa3,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0xa3,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa7,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0xa6,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0xa9,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0xa9,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xab,0x00,0x00,0x00, -0xa7,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0xa4,0x00,0x00,0x00, -0xab,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xae,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0x83,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xaf,0x00,0x00,0x00, -0xae,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xb1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb1,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xc4,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0xd0,0x00,0x00,0x00, -0xb2,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0xc2,0x00,0x00,0x00,0xc4,0x02,0x00,0x00,0xc0,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xb3,0x00,0x00,0x00,0xb2,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xc2,0x00,0x00,0x00, -0xb2,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xb2,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00, -0xcd,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0xc4,0x02,0x00,0x00, -0x3e,0x00,0x03,0x00,0xcd,0x00,0x00,0x00,0xcb,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd0,0x00,0x00,0x00, -0xc4,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xb1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb3,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xd3,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xd3,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xdd,0x02,0x00,0x00,0xaf,0x00,0x00,0x00,0xb3,0x00,0x00,0x00, -0x8f,0x01,0x00,0x00,0xd6,0x00,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xd9,0x02,0x00,0x00,0x9d,0x00,0x00,0x00, -0xb3,0x00,0x00,0x00,0x8c,0x01,0x00,0x00,0xd6,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xc5,0x02,0x00,0x00, -0x83,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0x3d,0x02,0x00,0x00, -0xd6,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0xda,0x00,0x00,0x00,0xc5,0x02,0x00,0x00,0x8d,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xd5,0x00,0x00,0x00,0xd6,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xda,0x00,0x00,0x00, -0xd4,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xd4,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xdc,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xdc,0x00,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xd5,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0xd4,0x00,0x00,0x00,0x3f,0x01,0x00,0x00,0xdd,0x00,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xe2,0x00,0x00,0x00, -0xd5,0x02,0x00,0x00,0x37,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xde,0x00,0x00,0x00,0xdd,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xe2,0x00,0x00,0x00,0xdd,0x00,0x00,0x00, -0xde,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdd,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe7,0x00,0x00,0x00, -0x73,0x00,0x00,0x00,0xd5,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xea,0x00,0x00,0x00,0xe7,0x00,0x00,0x00, -0x98,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xeb,0x00,0x00,0x00,0xea,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xec,0x00,0x00,0x00, -0xd9,0x02,0x00,0x00,0xeb,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xee,0x00,0x00,0x00,0xec,0x00,0x00,0x00, -0x6e,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xf4,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,0xf3,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf6,0x00,0x00,0x00, -0xf4,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0xee,0x00,0x00,0x00, -0xf9,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xfe,0x00,0x00,0x00,0xee,0x00,0x00,0x00,0xfd,0x00,0x00,0x00, -0x41,0x00,0x07,0x00,0x09,0x01,0x00,0x00,0x0a,0x01,0x00,0x00, -0x07,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0xfa,0x00,0x00,0x00, -0x34,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x00,0x01,0x00,0x00, -0x0b,0x01,0x00,0x00,0x0a,0x01,0x00,0x00,0x73,0x00,0x04,0x00, -0xc3,0x00,0x00,0x00,0x0c,0x01,0x00,0x00,0x0b,0x01,0x00,0x00, -0x41,0x00,0x07,0x00,0x09,0x01,0x00,0x00,0x0f,0x01,0x00,0x00, -0x07,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0xfa,0x00,0x00,0x00, -0xcf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x00,0x01,0x00,0x00, -0x10,0x01,0x00,0x00,0x0f,0x01,0x00,0x00,0x73,0x00,0x04,0x00, -0xc3,0x00,0x00,0x00,0x11,0x01,0x00,0x00,0x10,0x01,0x00,0x00, -0x41,0x00,0x08,0x00,0x15,0x01,0x00,0x00,0x16,0x01,0x00,0x00, -0x07,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0xfa,0x00,0x00,0x00, -0x85,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x01,0x01,0x00,0x00,0x17,0x01,0x00,0x00,0x16,0x01,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x18,0x01,0x00,0x00, -0x17,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x1d,0x01,0x00,0x00,0x18,0x01,0x00,0x00,0xfd,0x00,0x00,0x00, -0x70,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x1e,0x01,0x00,0x00, -0x1d,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x20,0x01,0x00,0x00,0x18,0x01,0x00,0x00,0xa8,0x00,0x00,0x00, -0x70,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x21,0x01,0x00,0x00, -0x20,0x01,0x00,0x00,0x50,0x00,0x05,0x00,0x19,0x01,0x00,0x00, -0x22,0x01,0x00,0x00,0x1e,0x01,0x00,0x00,0x21,0x01,0x00,0x00, -0x8e,0x00,0x05,0x00,0x19,0x01,0x00,0x00,0x24,0x01,0x00,0x00, -0x22,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,0x50,0x00,0x05,0x00, -0x19,0x01,0x00,0x00,0x26,0x01,0x00,0x00,0x11,0x01,0x00,0x00, -0x11,0x01,0x00,0x00,0x81,0x00,0x05,0x00,0x19,0x01,0x00,0x00, -0x27,0x01,0x00,0x00,0x24,0x01,0x00,0x00,0x26,0x01,0x00,0x00, -0x51,0x00,0x05,0x00,0xc3,0x00,0x00,0x00,0x2f,0x01,0x00,0x00, -0x27,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x73,0x00,0x04,0x00, -0x00,0x01,0x00,0x00,0x30,0x01,0x00,0x00,0x2f,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x31,0x01,0x00,0x00,0x32,0x01,0x00,0x00, -0x2c,0x01,0x00,0x00,0xf6,0x00,0x00,0x00,0x3e,0x00,0x03,0x00, -0x32,0x01,0x00,0x00,0x30,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x34,0x01,0x00,0x00,0xf6,0x00,0x00,0x00, -0xf9,0x00,0x00,0x00,0x51,0x00,0x05,0x00,0xc3,0x00,0x00,0x00, -0x36,0x01,0x00,0x00,0x27,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0x73,0x00,0x04,0x00,0x00,0x01,0x00,0x00,0x37,0x01,0x00,0x00, -0x36,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x31,0x01,0x00,0x00, -0x38,0x01,0x00,0x00,0x2c,0x01,0x00,0x00,0x34,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0x38,0x01,0x00,0x00,0x37,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3f,0x01,0x00,0x00, -0xd5,0x02,0x00,0x00,0x3d,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xdc,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x41,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x41,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xd6,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0xde,0x00,0x00,0x00, -0x88,0x01,0x00,0x00,0x44,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0x47,0x01,0x00,0x00,0xd6,0x02,0x00,0x00, -0xa6,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x43,0x01,0x00,0x00, -0x44,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x47,0x01,0x00,0x00,0x42,0x01,0x00,0x00,0x43,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x42,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x4b,0x01,0x00,0x00,0xa7,0x00,0x00,0x00, -0x7d,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x4d,0x01,0x00,0x00,0x4b,0x01,0x00,0x00,0xd6,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x4e,0x01,0x00,0x00, -0x12,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x4f,0x01,0x00,0x00,0x4e,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x50,0x01,0x00,0x00, -0x4d,0x01,0x00,0x00,0x4f,0x01,0x00,0x00,0xf7,0x00,0x03,0x00, -0x52,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x50,0x01,0x00,0x00,0x51,0x01,0x00,0x00,0x52,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x51,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x55,0x01,0x00,0x00,0xc5,0x02,0x00,0x00, -0x78,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0x57,0x01,0x00,0x00,0x55,0x01,0x00,0x00,0x8d,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x52,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x52,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0xc1,0x00,0x00,0x00, -0x58,0x01,0x00,0x00,0x50,0x01,0x00,0x00,0x42,0x01,0x00,0x00, -0x57,0x01,0x00,0x00,0x51,0x01,0x00,0x00,0xf7,0x00,0x03,0x00, -0x5a,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x58,0x01,0x00,0x00,0x59,0x01,0x00,0x00,0x7a,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x59,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x62,0x01,0x00,0x00,0x7d,0x00,0x00,0x00, -0xd6,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x64,0x01,0x00,0x00,0x62,0x01,0x00,0x00,0x63,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x66,0x01,0x00,0x00, -0x64,0x01,0x00,0x00,0x78,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x71,0x01,0x00,0x00,0x62,0x01,0x00,0x00, -0xaa,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x72,0x01,0x00,0x00,0xdd,0x02,0x00,0x00,0x71,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x74,0x01,0x00,0x00, -0x72,0x01,0x00,0x00,0x78,0x00,0x00,0x00,0x41,0x00,0x06,0x00, -0x75,0x01,0x00,0x00,0x76,0x01,0x00,0x00,0x6a,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0x74,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc3,0x00,0x00,0x00,0x77,0x01,0x00,0x00,0x76,0x01,0x00,0x00, -0x73,0x00,0x04,0x00,0x00,0x01,0x00,0x00,0x78,0x01,0x00,0x00, -0x77,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x31,0x01,0x00,0x00, -0x79,0x01,0x00,0x00,0x5f,0x01,0x00,0x00,0x66,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0x79,0x01,0x00,0x00,0x78,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0x5a,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x7a,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x7d,0x01,0x00,0x00,0x7d,0x00,0x00,0x00,0xd6,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7f,0x01,0x00,0x00, -0x7d,0x01,0x00,0x00,0x7e,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x81,0x01,0x00,0x00,0x7f,0x01,0x00,0x00, -0x78,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x31,0x01,0x00,0x00, -0x83,0x01,0x00,0x00,0x5f,0x01,0x00,0x00,0x81,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0x83,0x01,0x00,0x00,0x82,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0x5a,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x5a,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x44,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x44,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x88,0x01,0x00,0x00,0xd6,0x02,0x00,0x00, -0x86,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x41,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x43,0x01,0x00,0x00,0xe0,0x00,0x04,0x00, -0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x89,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8c,0x01,0x00,0x00, -0xd9,0x02,0x00,0x00,0x8a,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x8f,0x01,0x00,0x00,0xdd,0x02,0x00,0x00, -0x8d,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x91,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x91,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xdf,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0x43,0x01,0x00,0x00,0x3b,0x02,0x00,0x00,0x94,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x97,0x01,0x00,0x00, -0xdf,0x02,0x00,0x00,0x6c,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x93,0x01,0x00,0x00,0x94,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x97,0x01,0x00,0x00,0x92,0x01,0x00,0x00, -0x93,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x92,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0x99,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x99,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xe3,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0x92,0x01,0x00,0x00, -0xc5,0x01,0x00,0x00,0x9c,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0x9f,0x01,0x00,0x00,0xe3,0x02,0x00,0x00, -0x60,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x9b,0x01,0x00,0x00, -0x9c,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x9f,0x01,0x00,0x00,0x9a,0x01,0x00,0x00,0x9b,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x9a,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xa1,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xa1,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xf5,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0x9a,0x01,0x00,0x00,0xc3,0x01,0x00,0x00, -0xa2,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0xa7,0x01,0x00,0x00,0xf5,0x02,0x00,0x00,0x62,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xa3,0x01,0x00,0x00,0xa2,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xa7,0x01,0x00,0x00, -0xa2,0x01,0x00,0x00,0xa3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xa2,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xad,0x01,0x00,0x00,0xe3,0x02,0x00,0x00,0x62,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xaf,0x01,0x00,0x00, -0xad,0x01,0x00,0x00,0xf5,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xb1,0x01,0x00,0x00,0x55,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xb3,0x01,0x00,0x00,0xe3,0x02,0x00,0x00,0x61,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb4,0x01,0x00,0x00, -0xb1,0x01,0x00,0x00,0xb3,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xb6,0x01,0x00,0x00,0x64,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xb7,0x01,0x00,0x00,0xb4,0x01,0x00,0x00,0xb6,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb9,0x01,0x00,0x00, -0xb7,0x01,0x00,0x00,0xf5,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xbb,0x01,0x00,0x00,0xb9,0x01,0x00,0x00, -0xba,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xbd,0x01,0x00,0x00,0xbb,0x01,0x00,0x00,0xdf,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0x31,0x01,0x00,0x00,0xbe,0x01,0x00,0x00, -0x2c,0x01,0x00,0x00,0xbd,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0x00,0x01,0x00,0x00,0xbf,0x01,0x00,0x00,0xbe,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0xc0,0x01,0x00,0x00,0xc1,0x01,0x00,0x00, -0xab,0x01,0x00,0x00,0xaf,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0xc1,0x01,0x00,0x00,0xbf,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xc3,0x01,0x00,0x00,0xf5,0x02,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xa1,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xa3,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0x9c,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x9c,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc5,0x01,0x00,0x00, -0xe3,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x99,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x9b,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xc7,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xc7,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xe4,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0x9b,0x01,0x00,0x00, -0xf3,0x01,0x00,0x00,0xca,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0xcd,0x01,0x00,0x00,0xe4,0x02,0x00,0x00, -0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xc9,0x01,0x00,0x00, -0xca,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xcd,0x01,0x00,0x00,0xc8,0x01,0x00,0x00,0xc9,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xc8,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xcf,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xcf,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xf2,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0xc8,0x01,0x00,0x00,0xf1,0x01,0x00,0x00, -0xd0,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0xd5,0x01,0x00,0x00,0xf2,0x02,0x00,0x00,0xbb,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xd1,0x01,0x00,0x00,0xd0,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xd5,0x01,0x00,0x00, -0xd0,0x01,0x00,0x00,0xd1,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xd0,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xdb,0x01,0x00,0x00,0xe4,0x02,0x00,0x00,0xbb,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdd,0x01,0x00,0x00, -0xdb,0x01,0x00,0x00,0xf2,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xdf,0x01,0x00,0x00,0x59,0x00,0x00,0x00, -0xb8,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xe2,0x01,0x00,0x00,0xe4,0x02,0x00,0x00,0xe1,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe3,0x01,0x00,0x00, -0xdf,0x01,0x00,0x00,0xe2,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xe5,0x01,0x00,0x00,0x68,0x00,0x00,0x00, -0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xe6,0x01,0x00,0x00,0xe3,0x01,0x00,0x00,0xe5,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe8,0x01,0x00,0x00, -0xe6,0x01,0x00,0x00,0xf2,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xea,0x01,0x00,0x00,0xe8,0x01,0x00,0x00, -0xe9,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xec,0x01,0x00,0x00,0xea,0x01,0x00,0x00,0xdf,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0x31,0x01,0x00,0x00,0xed,0x01,0x00,0x00, -0x5f,0x01,0x00,0x00,0xec,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0x00,0x01,0x00,0x00,0xee,0x01,0x00,0x00,0xed,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0xc0,0x01,0x00,0x00,0xef,0x01,0x00,0x00, -0xd9,0x01,0x00,0x00,0xdd,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0xef,0x01,0x00,0x00,0xee,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xf1,0x01,0x00,0x00,0xf2,0x02,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xcf,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xd1,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xca,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xca,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf3,0x01,0x00,0x00, -0xe4,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xc7,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xc9,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xf5,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xf5,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xe5,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0xc9,0x01,0x00,0x00, -0x39,0x02,0x00,0x00,0xf8,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0xfb,0x01,0x00,0x00,0xe5,0x02,0x00,0x00, -0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xf7,0x01,0x00,0x00, -0xf8,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xfb,0x01,0x00,0x00,0xf6,0x01,0x00,0x00,0xf7,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xf6,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xfd,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xfd,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xe9,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0xf6,0x01,0x00,0x00,0x37,0x02,0x00,0x00, -0x00,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0x03,0x02,0x00,0x00,0xe9,0x02,0x00,0x00,0x60,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xff,0x01,0x00,0x00,0x00,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x03,0x02,0x00,0x00, -0xfe,0x01,0x00,0x00,0xff,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xfe,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x05,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x05,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xeb,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0xfe,0x01,0x00,0x00,0x35,0x02,0x00,0x00,0x08,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x0b,0x02,0x00,0x00, -0xeb,0x02,0x00,0x00,0xbb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x07,0x02,0x00,0x00,0x08,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x0b,0x02,0x00,0x00,0x06,0x02,0x00,0x00, -0x07,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x06,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x0d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x0d,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xed,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0x06,0x02,0x00,0x00, -0x33,0x02,0x00,0x00,0x0e,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0x13,0x02,0x00,0x00,0xed,0x02,0x00,0x00, -0x62,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x0f,0x02,0x00,0x00, -0x0e,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x13,0x02,0x00,0x00,0x0e,0x02,0x00,0x00,0x0f,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x0e,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x15,0x02,0x00,0x00,0xe5,0x02,0x00,0x00, -0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x17,0x02,0x00,0x00,0x15,0x02,0x00,0x00,0xeb,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x19,0x02,0x00,0x00, -0x17,0x02,0x00,0x00,0x18,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x1b,0x02,0x00,0x00,0xe9,0x02,0x00,0x00, -0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x1c,0x02,0x00,0x00,0x19,0x02,0x00,0x00,0x1b,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1e,0x02,0x00,0x00, -0x1c,0x02,0x00,0x00,0xed,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x22,0x02,0x00,0x00,0x1b,0x02,0x00,0x00, -0xed,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xc0,0x01,0x00,0x00, -0x23,0x02,0x00,0x00,0xab,0x01,0x00,0x00,0x22,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0x00,0x01,0x00,0x00,0x24,0x02,0x00,0x00, -0x23,0x02,0x00,0x00,0x73,0x00,0x04,0x00,0xc3,0x00,0x00,0x00, -0x25,0x02,0x00,0x00,0x24,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0xc0,0x01,0x00,0x00,0x2a,0x02,0x00,0x00,0xd9,0x01,0x00,0x00, -0x17,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x00,0x01,0x00,0x00, -0x2b,0x02,0x00,0x00,0x2a,0x02,0x00,0x00,0x73,0x00,0x04,0x00, -0xc3,0x00,0x00,0x00,0x2c,0x02,0x00,0x00,0x2b,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,0x2e,0x02,0x00,0x00, -0xc9,0x00,0x00,0x00,0x1e,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc3,0x00,0x00,0x00,0x2f,0x02,0x00,0x00,0x2e,0x02,0x00,0x00, -0x0c,0x00,0x08,0x00,0xc3,0x00,0x00,0x00,0x30,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x25,0x02,0x00,0x00, -0x2c,0x02,0x00,0x00,0x2f,0x02,0x00,0x00,0x3e,0x00,0x03,0x00, -0x2e,0x02,0x00,0x00,0x30,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x33,0x02,0x00,0x00,0xed,0x02,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x0d,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x0f,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x08,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x08,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x35,0x02,0x00,0x00, -0xeb,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x05,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x07,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x00,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x00,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x37,0x02,0x00,0x00,0xe9,0x02,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xfd,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xff,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xf8,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xf8,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x39,0x02,0x00,0x00,0xe5,0x02,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xf5,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xf7,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0x94,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x94,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3b,0x02,0x00,0x00, -0xdf,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x91,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x93,0x01,0x00,0x00, -0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x89,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xd6,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xd6,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3d,0x02,0x00,0x00,0xc5,0x02,0x00,0x00, -0x6c,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd3,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xd5,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x42,0x02,0x00,0x00,0x55,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x43,0x02,0x00,0x00,0x95,0x00,0x00,0x00,0x42,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x48,0x02,0x00,0x00, -0x59,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x49,0x02,0x00,0x00,0xa7,0x00,0x00,0x00, -0x48,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x4e,0x02,0x00,0x00,0x12,0x00,0x00,0x00,0x4d,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4f,0x02,0x00,0x00, -0x4e,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x50,0x02,0x00,0x00,0x0f,0x00,0x00,0x00,0x4f,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x54,0x02,0x00,0x00, -0x47,0x00,0x00,0x00,0x4f,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0x56,0x02,0x00,0x00,0x55,0x02,0x00,0x00, -0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x57,0x02,0x00,0x00,0x56,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x58,0x02,0x00,0x00,0x54,0x02,0x00,0x00, -0x57,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x59,0x02,0x00,0x00,0x50,0x02,0x00,0x00,0x58,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x5b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x5b,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xc6,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0xd5,0x00,0x00,0x00, -0xc1,0x02,0x00,0x00,0x5e,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0x61,0x02,0x00,0x00,0xc6,0x02,0x00,0x00, -0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x5d,0x02,0x00,0x00, -0x5e,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x61,0x02,0x00,0x00,0x5c,0x02,0x00,0x00,0x5d,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x5c,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x63,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x63,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xc7,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0x5c,0x02,0x00,0x00,0xbf,0x02,0x00,0x00, -0x66,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0x69,0x02,0x00,0x00,0xc7,0x02,0x00,0x00,0x60,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x65,0x02,0x00,0x00,0x66,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x69,0x02,0x00,0x00, -0x64,0x02,0x00,0x00,0x65,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x64,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x6d,0x02,0x00,0x00,0xc7,0x02,0x00,0x00,0x61,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6e,0x02,0x00,0x00, -0x43,0x02,0x00,0x00,0x6d,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x70,0x02,0x00,0x00,0x64,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x71,0x02,0x00,0x00,0x6e,0x02,0x00,0x00,0x70,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x75,0x02,0x00,0x00, -0xc6,0x02,0x00,0x00,0xe1,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x76,0x02,0x00,0x00,0x49,0x02,0x00,0x00, -0x75,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x78,0x02,0x00,0x00,0x68,0x00,0x00,0x00,0xbb,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x79,0x02,0x00,0x00, -0x76,0x02,0x00,0x00,0x78,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x7b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x7b,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xc9,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0x64,0x02,0x00,0x00,0xbd,0x02,0x00,0x00, -0x7e,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0x81,0x02,0x00,0x00,0xc9,0x02,0x00,0x00,0xbb,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x7d,0x02,0x00,0x00,0x7e,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x81,0x02,0x00,0x00, -0x7c,0x02,0x00,0x00,0x7d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x7c,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x83,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x83,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xcb,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0x7c,0x02,0x00,0x00,0xbb,0x02,0x00,0x00,0x86,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x89,0x02,0x00,0x00, -0xcb,0x02,0x00,0x00,0x62,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x85,0x02,0x00,0x00,0x86,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x89,0x02,0x00,0x00,0x84,0x02,0x00,0x00, -0x85,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x84,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8c,0x02,0x00,0x00, -0x71,0x02,0x00,0x00,0xcb,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0x8f,0x02,0x00,0x00,0x8c,0x02,0x00,0x00, -0x36,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x91,0x02,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x8f,0x02,0x00,0x00, -0x90,0x02,0x00,0x00,0x91,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x90,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x94,0x02,0x00,0x00,0x79,0x02,0x00,0x00,0xc9,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x95,0x02,0x00,0x00, -0x12,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x96,0x02,0x00,0x00,0x95,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x97,0x02,0x00,0x00, -0x94,0x02,0x00,0x00,0x96,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x91,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x91,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0xc1,0x00,0x00,0x00,0x98,0x02,0x00,0x00, -0x8f,0x02,0x00,0x00,0x84,0x02,0x00,0x00,0x97,0x02,0x00,0x00, -0x90,0x02,0x00,0x00,0xf7,0x00,0x03,0x00,0x9a,0x02,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x98,0x02,0x00,0x00, -0x99,0x02,0x00,0x00,0x9a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x99,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa2,0x02,0x00,0x00,0x79,0x02,0x00,0x00,0xc9,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0xa4,0x02,0x00,0x00, -0x12,0x00,0x00,0x00,0xa3,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xa5,0x02,0x00,0x00,0xa4,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa6,0x02,0x00,0x00, -0xa2,0x02,0x00,0x00,0xa5,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa7,0x02,0x00,0x00,0x59,0x02,0x00,0x00, -0xa6,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa9,0x02,0x00,0x00,0xa7,0x02,0x00,0x00,0x71,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xab,0x02,0x00,0x00, -0xa9,0x02,0x00,0x00,0xcb,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xad,0x02,0x00,0x00,0xc6,0x02,0x00,0x00, -0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xaf,0x02,0x00,0x00,0xad,0x02,0x00,0x00,0xc9,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb1,0x02,0x00,0x00, -0xaf,0x02,0x00,0x00,0xb0,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xb3,0x02,0x00,0x00,0xc7,0x02,0x00,0x00, -0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xb4,0x02,0x00,0x00,0xb1,0x02,0x00,0x00,0xb3,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb6,0x02,0x00,0x00, -0xb4,0x02,0x00,0x00,0xcb,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0xcc,0x00,0x00,0x00,0xb7,0x02,0x00,0x00,0xc9,0x00,0x00,0x00, -0xb6,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00, -0xb8,0x02,0x00,0x00,0xb7,0x02,0x00,0x00,0x41,0x00,0x06,0x00, -0x75,0x01,0x00,0x00,0xb9,0x02,0x00,0x00,0x9e,0x02,0x00,0x00, -0x34,0x00,0x00,0x00,0xab,0x02,0x00,0x00,0x3e,0x00,0x03,0x00, -0xb9,0x02,0x00,0x00,0xb8,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x9a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x9a,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x86,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x86,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xbb,0x02,0x00,0x00,0xcb,0x02,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x83,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x85,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x7e,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x7e,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xbd,0x02,0x00,0x00,0xc9,0x02,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x7b,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x7d,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x66,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x66,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbf,0x02,0x00,0x00, -0xc7,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x63,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x65,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x5e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x5e,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xc1,0x02,0x00,0x00,0xc6,0x02,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x5b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x5d,0x02,0x00,0x00,0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00, - -}; -const uint64_t matmul_q4_1_f32_len = 10632; - -unsigned char matmul_q4_1_f32_aligned_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0x19,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x09,0x00,0x00,0x00, -0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00, -0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00, -0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30, -0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x0f,0x00,0x0f,0x00,0x05,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x4c,0x00,0x00,0x00,0x08,0x01,0x00,0x00,0x2d,0x01,0x00,0x00, -0x62,0x01,0x00,0x00,0x6a,0x01,0x00,0x00,0x78,0x02,0x00,0x00, -0xc1,0x02,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x05,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x30,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x0d,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0x10,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x37,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x3d,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x4c,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x4f,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x53,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x60,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x62,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x6c,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xa7,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xb9,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xbc,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x03,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x04,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x04,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x04,0x01,0x00,0x00, -0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x05,0x01,0x00,0x00,0x06,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x06,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x06,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x06,0x01,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x08,0x01,0x00,0x00, -0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x08,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x3a,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x3b,0x01,0x00,0x00, -0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x67,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x48,0x00,0x04,0x00,0x68,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x05,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x68,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x68,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x68,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0x68,0x01,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x6a,0x01,0x00,0x00,0x22,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x6a,0x01,0x00,0x00, -0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x78,0x02,0x00,0x00,0x0b,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xbe,0x02,0x00,0x00,0x06,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0xbf,0x02,0x00,0x00, -0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0xbf,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0xbf,0x02,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xc1,0x02,0x00,0x00, -0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xc1,0x02,0x00,0x00,0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00, -0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x1e,0x00,0x10,0x00, -0x10,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x11,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x11,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x15,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x0a,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x27,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x2d,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x3e,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x4c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x54,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x58,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x63,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x67,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x6d,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x72,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x77,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x91,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0xa2,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xa7,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xba,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0xb9,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xbb,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x4f,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xbc,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xbb,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xbd,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0xba,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xb8,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xc0,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x14,0x00,0x02,0x00, -0xc2,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0xc4,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xc5,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xc6,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc5,0x00,0x00,0x00, -0xbf,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xc7,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc6,0x00,0x00,0x00, -0xbc,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xc8,0x00,0x00,0x00, -0xc4,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0xc9,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xc8,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0xcc,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xcd,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xf4,0x00,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xfa,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xfe,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x16,0x00,0x03,0x00, -0x01,0x01,0x00,0x00,0x10,0x00,0x00,0x00,0x15,0x00,0x04,0x00, -0x02,0x01,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x1c,0x00,0x04,0x00,0x03,0x01,0x00,0x00,0x02,0x01,0x00,0x00, -0xfa,0x00,0x00,0x00,0x1e,0x00,0x05,0x00,0x04,0x01,0x00,0x00, -0x01,0x01,0x00,0x00,0x01,0x01,0x00,0x00,0x03,0x01,0x00,0x00, -0x1d,0x00,0x03,0x00,0x05,0x01,0x00,0x00,0x04,0x01,0x00,0x00, -0x1e,0x00,0x03,0x00,0x06,0x01,0x00,0x00,0x05,0x01,0x00,0x00, -0x20,0x00,0x04,0x00,0x07,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x06,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x07,0x01,0x00,0x00, -0x08,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x0a,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x01,0x01,0x00,0x00, -0x20,0x00,0x04,0x00,0x16,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x02,0x01,0x00,0x00,0x17,0x00,0x04,0x00,0x1a,0x01,0x00,0x00, -0xc4,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x29,0x01,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x2a,0x01,0x00,0x00,0x84,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x29,0x01,0x00,0x00,0x1c,0x00,0x04,0x00, -0x2b,0x01,0x00,0x00,0x01,0x01,0x00,0x00,0x2a,0x01,0x00,0x00, -0x20,0x00,0x04,0x00,0x2c,0x01,0x00,0x00,0x04,0x00,0x00,0x00, -0x2b,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x2c,0x01,0x00,0x00, -0x2d,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x32,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x01,0x01,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x3a,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00,0x09,0x00,0x00,0x00, -0x3b,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,0x39,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x3c,0x01,0x00,0x00,0x51,0x00,0x00,0x00,0x3b,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x3d,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x3c,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x3e,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x3d,0x01,0x00,0x00, -0x6c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x59,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x5e,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x5f,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0xa7,0x00,0x00,0x00, -0x5e,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,0x60,0x01,0x00,0x00, -0x01,0x01,0x00,0x00,0x5f,0x01,0x00,0x00,0x20,0x00,0x04,0x00, -0x61,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x60,0x01,0x00,0x00, -0x3b,0x00,0x04,0x00,0x61,0x01,0x00,0x00,0x62,0x01,0x00,0x00, -0x04,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x65,0x01,0x00,0x00, -0xc4,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x18,0x00,0x04,0x00, -0x66,0x01,0x00,0x00,0x65,0x01,0x00,0x00,0x02,0x00,0x00,0x00, -0x1d,0x00,0x03,0x00,0x67,0x01,0x00,0x00,0x66,0x01,0x00,0x00, -0x1e,0x00,0x03,0x00,0x68,0x01,0x00,0x00,0x67,0x01,0x00,0x00, -0x20,0x00,0x04,0x00,0x69,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x68,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x69,0x01,0x00,0x00, -0x6a,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x6c,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0xc4,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x80,0x01,0x00,0x00, -0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x88,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x90,0x01,0x00,0x00,0x05,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x98,0x01,0x00,0x00, -0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xa0,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xa7,0x01,0x00,0x00,0x51,0x00,0x00,0x00, -0x3b,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xa8,0x01,0x00,0x00,0x84,0x00,0x00,0x00, -0xa7,0x01,0x00,0x00,0x77,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xa9,0x01,0x00,0x00,0x86,0x00,0x00,0x00, -0xa8,0x01,0x00,0x00,0x6c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xac,0x01,0x00,0x00,0x08,0x01,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xad,0x01,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xb0,0x01,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x77,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xcb,0x01,0x00,0x00, -0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x1c,0x00,0x04,0x00,0xcc,0x01,0x00,0x00,0x01,0x01,0x00,0x00, -0xcb,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0xcd,0x01,0x00,0x00, -0x07,0x00,0x00,0x00,0xcc,0x01,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xdd,0x01,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0xe3,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x01,0x01,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xf9,0x01,0x00,0x00, -0x84,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0xbc,0x00,0x00,0x00, -0x1c,0x00,0x04,0x00,0xfa,0x01,0x00,0x00,0x01,0x01,0x00,0x00, -0xf9,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0xfb,0x01,0x00,0x00, -0x07,0x00,0x00,0x00,0xfa,0x01,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x04,0x02,0x00,0x00,0x86,0x00,0x00,0x00, -0xb9,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x0c,0x02,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x3b,0x02,0x00,0x00,0x84,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x70,0x02,0x00,0x00,0x0d,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x78,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0xbe,0x02,0x00,0x00, -0xc4,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0xbf,0x02,0x00,0x00, -0xbe,0x02,0x00,0x00,0x20,0x00,0x04,0x00,0xc0,0x02,0x00,0x00, -0x0c,0x00,0x00,0x00,0xbf,0x02,0x00,0x00,0x3b,0x00,0x04,0x00, -0xc0,0x02,0x00,0x00,0xc1,0x02,0x00,0x00,0x0c,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0xc6,0x02,0x00,0x00, -0x05,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xd3,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0xc9,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0xcd,0x01,0x00,0x00,0xce,0x01,0x00,0x00, -0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xfb,0x01,0x00,0x00, -0xfc,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x17,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x17,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x1e,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x17,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x27,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x29,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x1e,0x00,0x00,0x00, -0x29,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x2e,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x2d,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x2f,0x00,0x00,0x00, -0x2e,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x30,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x2f,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x30,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x34,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x36,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x36,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x3a,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00, -0x3a,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x3b,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x47,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x3b,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x49,0x00,0x00,0x00, -0x3d,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x49,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x4d,0x00,0x00,0x00, -0x4c,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x4d,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x50,0x00,0x00,0x00, -0x54,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x59,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x58,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5d,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x5d,0x00,0x00,0x00, -0x63,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x68,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,0x67,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6e,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x72,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x79,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x78,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7e,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x81,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x83,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x47,0x00,0x00,0x00, -0x83,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x87,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x88,0x00,0x00,0x00, -0x87,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x8a,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8d,0x00,0x00,0x00, -0x8a,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x0c,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x26,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x8d,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x92,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x92,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x94,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x42,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x98,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x97,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x99,0x00,0x00,0x00, -0x98,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9a,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x99,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9b,0x00,0x00,0x00, -0x94,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,0x9b,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9e,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0xa3,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0xa3,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa5,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x4a,0x00,0x00,0x00, -0xa7,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0xaa,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0xa9,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xab,0x00,0x00,0x00, -0xaa,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xac,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0xab,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xad,0x00,0x00,0x00, -0xa5,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0xad,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xb0,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0x77,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xb2,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xe7,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0x05,0x00,0x00,0x00, -0xd1,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0xe7,0x02,0x00,0x00, -0xc1,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xb4,0x00,0x00,0x00, -0xb3,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xc3,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0xb4,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xb3,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0xcd,0x00,0x00,0x00,0xce,0x00,0x00,0x00,0xca,0x00,0x00,0x00, -0xe7,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0xce,0x00,0x00,0x00, -0xcc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd1,0x00,0x00,0x00,0xe7,0x02,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xb4,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd4,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xd4,0x00,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0xb0,0x00,0x00,0x00, -0xb4,0x00,0x00,0x00,0xb2,0x01,0x00,0x00,0xd7,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xfc,0x02,0x00,0x00, -0x9e,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0xaf,0x01,0x00,0x00, -0xd7,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xe8,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0xb4,0x00,0x00,0x00, -0x60,0x02,0x00,0x00,0xd7,0x00,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,0xe8,0x02,0x00,0x00, -0x8e,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xd6,0x00,0x00,0x00, -0xd7,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xdb,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0xd6,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xd5,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdd,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xf8,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0x40,0x01,0x00,0x00, -0xde,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0xe3,0x00,0x00,0x00,0xf8,0x02,0x00,0x00,0x37,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xdf,0x00,0x00,0x00,0xde,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xe3,0x00,0x00,0x00, -0xde,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xde,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xe8,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0xf8,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xeb,0x00,0x00,0x00, -0xe8,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xec,0x00,0x00,0x00,0xeb,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xed,0x00,0x00,0x00,0xfc,0x02,0x00,0x00,0xec,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xef,0x00,0x00,0x00, -0xed,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,0xe8,0x00,0x00,0x00, -0xf4,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xf7,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,0x6e,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfb,0x00,0x00,0x00, -0xef,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0xc7,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xef,0x00,0x00,0x00, -0xfe,0x00,0x00,0x00,0x41,0x00,0x07,0x00,0x0a,0x01,0x00,0x00, -0x0b,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0xfb,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x01,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,0x0b,0x01,0x00,0x00, -0x73,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x0d,0x01,0x00,0x00, -0x0c,0x01,0x00,0x00,0x41,0x00,0x07,0x00,0x0a,0x01,0x00,0x00, -0x10,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0xfb,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x01,0x01,0x00,0x00,0x11,0x01,0x00,0x00,0x10,0x01,0x00,0x00, -0x73,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x12,0x01,0x00,0x00, -0x11,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x16,0x01,0x00,0x00, -0x17,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0xfb,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0xff,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x02,0x01,0x00,0x00,0x18,0x01,0x00,0x00, -0x17,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x19,0x01,0x00,0x00,0x18,0x01,0x00,0x00,0xc7,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x1e,0x01,0x00,0x00,0x19,0x01,0x00,0x00, -0xfe,0x00,0x00,0x00,0x70,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0x1f,0x01,0x00,0x00,0x1e,0x01,0x00,0x00,0xc2,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x21,0x01,0x00,0x00,0x19,0x01,0x00,0x00, -0xa9,0x00,0x00,0x00,0x70,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0x22,0x01,0x00,0x00,0x21,0x01,0x00,0x00,0x50,0x00,0x05,0x00, -0x1a,0x01,0x00,0x00,0x23,0x01,0x00,0x00,0x1f,0x01,0x00,0x00, -0x22,0x01,0x00,0x00,0x8e,0x00,0x05,0x00,0x1a,0x01,0x00,0x00, -0x25,0x01,0x00,0x00,0x23,0x01,0x00,0x00,0x0d,0x01,0x00,0x00, -0x50,0x00,0x05,0x00,0x1a,0x01,0x00,0x00,0x27,0x01,0x00,0x00, -0x12,0x01,0x00,0x00,0x12,0x01,0x00,0x00,0x81,0x00,0x05,0x00, -0x1a,0x01,0x00,0x00,0x28,0x01,0x00,0x00,0x25,0x01,0x00,0x00, -0x27,0x01,0x00,0x00,0x51,0x00,0x05,0x00,0xc4,0x00,0x00,0x00, -0x30,0x01,0x00,0x00,0x28,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x73,0x00,0x04,0x00,0x01,0x01,0x00,0x00,0x31,0x01,0x00,0x00, -0x30,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x32,0x01,0x00,0x00, -0x33,0x01,0x00,0x00,0x2d,0x01,0x00,0x00,0xf7,0x00,0x00,0x00, -0x3e,0x00,0x03,0x00,0x33,0x01,0x00,0x00,0x31,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x35,0x01,0x00,0x00, -0xf7,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0x51,0x00,0x05,0x00, -0xc4,0x00,0x00,0x00,0x37,0x01,0x00,0x00,0x28,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x01,0x01,0x00,0x00, -0x38,0x01,0x00,0x00,0x37,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x32,0x01,0x00,0x00,0x39,0x01,0x00,0x00,0x2d,0x01,0x00,0x00, -0x35,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x39,0x01,0x00,0x00, -0x38,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x40,0x01,0x00,0x00,0xf8,0x02,0x00,0x00,0x3e,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xdf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x42,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x42,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xf9,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0xdf,0x00,0x00,0x00,0xab,0x01,0x00,0x00,0x43,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x48,0x01,0x00,0x00, -0xf9,0x02,0x00,0x00,0xa7,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x44,0x01,0x00,0x00,0x43,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x48,0x01,0x00,0x00,0x43,0x01,0x00,0x00, -0x44,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x43,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4d,0x01,0x00,0x00, -0x7e,0x00,0x00,0x00,0xf9,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x50,0x01,0x00,0x00,0x4d,0x01,0x00,0x00, -0xab,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x51,0x01,0x00,0x00,0x50,0x01,0x00,0x00,0x77,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x52,0x01,0x00,0x00, -0x00,0x03,0x00,0x00,0x51,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x54,0x01,0x00,0x00,0x52,0x01,0x00,0x00, -0x79,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x5a,0x01,0x00,0x00,0x4d,0x01,0x00,0x00,0x59,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5c,0x01,0x00,0x00, -0x79,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x5d,0x01,0x00,0x00,0x5a,0x01,0x00,0x00, -0x5c,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x6c,0x01,0x00,0x00, -0x6d,0x01,0x00,0x00,0x6a,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0x54,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0x3e,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x6e,0x01,0x00,0x00, -0x6d,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x01,0x01,0x00,0x00, -0x6f,0x01,0x00,0x00,0x6e,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x32,0x01,0x00,0x00,0x70,0x01,0x00,0x00,0x62,0x01,0x00,0x00, -0x5d,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x70,0x01,0x00,0x00, -0x6f,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x72,0x01,0x00,0x00,0x5d,0x01,0x00,0x00,0x39,0x00,0x00,0x00, -0x41,0x00,0x08,0x00,0x6c,0x01,0x00,0x00,0x74,0x01,0x00,0x00, -0x6a,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0x54,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0x75,0x01,0x00,0x00,0x74,0x01,0x00,0x00, -0x73,0x00,0x04,0x00,0x01,0x01,0x00,0x00,0x76,0x01,0x00,0x00, -0x75,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x32,0x01,0x00,0x00, -0x77,0x01,0x00,0x00,0x62,0x01,0x00,0x00,0x72,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0x77,0x01,0x00,0x00,0x76,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x79,0x01,0x00,0x00, -0x5d,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x41,0x00,0x08,0x00, -0x6c,0x01,0x00,0x00,0x7b,0x01,0x00,0x00,0x6a,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0x54,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0x7c,0x01,0x00,0x00,0x7b,0x01,0x00,0x00,0x73,0x00,0x04,0x00, -0x01,0x01,0x00,0x00,0x7d,0x01,0x00,0x00,0x7c,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x32,0x01,0x00,0x00,0x7e,0x01,0x00,0x00, -0x62,0x01,0x00,0x00,0x79,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0x7e,0x01,0x00,0x00,0x7d,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x81,0x01,0x00,0x00,0x5d,0x01,0x00,0x00, -0x80,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x6c,0x01,0x00,0x00, -0x83,0x01,0x00,0x00,0x6a,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0x54,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0x80,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x84,0x01,0x00,0x00, -0x83,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x01,0x01,0x00,0x00, -0x85,0x01,0x00,0x00,0x84,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x32,0x01,0x00,0x00,0x86,0x01,0x00,0x00,0x62,0x01,0x00,0x00, -0x81,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x86,0x01,0x00,0x00, -0x85,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x89,0x01,0x00,0x00,0x5d,0x01,0x00,0x00,0x88,0x01,0x00,0x00, -0x41,0x00,0x08,0x00,0x6c,0x01,0x00,0x00,0x8b,0x01,0x00,0x00, -0x6a,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0x54,0x01,0x00,0x00, -0xd0,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0x8c,0x01,0x00,0x00,0x8b,0x01,0x00,0x00, -0x73,0x00,0x04,0x00,0x01,0x01,0x00,0x00,0x8d,0x01,0x00,0x00, -0x8c,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x32,0x01,0x00,0x00, -0x8e,0x01,0x00,0x00,0x62,0x01,0x00,0x00,0x89,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0x8e,0x01,0x00,0x00,0x8d,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x91,0x01,0x00,0x00, -0x5d,0x01,0x00,0x00,0x90,0x01,0x00,0x00,0x41,0x00,0x08,0x00, -0x6c,0x01,0x00,0x00,0x93,0x01,0x00,0x00,0x6a,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0x54,0x01,0x00,0x00,0xd0,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0x94,0x01,0x00,0x00,0x93,0x01,0x00,0x00,0x73,0x00,0x04,0x00, -0x01,0x01,0x00,0x00,0x95,0x01,0x00,0x00,0x94,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x32,0x01,0x00,0x00,0x96,0x01,0x00,0x00, -0x62,0x01,0x00,0x00,0x91,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0x96,0x01,0x00,0x00,0x95,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x99,0x01,0x00,0x00,0x5d,0x01,0x00,0x00, -0x98,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x6c,0x01,0x00,0x00, -0x9b,0x01,0x00,0x00,0x6a,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0x54,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x9c,0x01,0x00,0x00, -0x9b,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x01,0x01,0x00,0x00, -0x9d,0x01,0x00,0x00,0x9c,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x32,0x01,0x00,0x00,0x9e,0x01,0x00,0x00,0x62,0x01,0x00,0x00, -0x99,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x9e,0x01,0x00,0x00, -0x9d,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa1,0x01,0x00,0x00,0x5d,0x01,0x00,0x00,0xa0,0x01,0x00,0x00, -0x41,0x00,0x08,0x00,0x6c,0x01,0x00,0x00,0xa3,0x01,0x00,0x00, -0x6a,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0x54,0x01,0x00,0x00, -0xd0,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0xa4,0x01,0x00,0x00,0xa3,0x01,0x00,0x00, -0x73,0x00,0x04,0x00,0x01,0x01,0x00,0x00,0xa5,0x01,0x00,0x00, -0xa4,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x32,0x01,0x00,0x00, -0xa6,0x01,0x00,0x00,0x62,0x01,0x00,0x00,0xa1,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0xa6,0x01,0x00,0x00,0xa5,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xab,0x01,0x00,0x00, -0xf9,0x02,0x00,0x00,0xa9,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0x42,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x44,0x01,0x00,0x00, -0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0xac,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xaf,0x01,0x00,0x00,0xfc,0x02,0x00,0x00,0xad,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb2,0x01,0x00,0x00, -0x00,0x03,0x00,0x00,0xb0,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xb4,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xb4,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x02,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0x44,0x01,0x00,0x00,0x5e,0x02,0x00,0x00, -0xb7,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0xba,0x01,0x00,0x00,0x02,0x03,0x00,0x00,0x6c,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xb6,0x01,0x00,0x00,0xb7,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xba,0x01,0x00,0x00, -0xb5,0x01,0x00,0x00,0xb6,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xb5,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xbc,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xbc,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x06,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0xb5,0x01,0x00,0x00,0xe8,0x01,0x00,0x00,0xbf,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xc2,0x01,0x00,0x00, -0x06,0x03,0x00,0x00,0x60,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xbe,0x01,0x00,0x00,0xbf,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xc2,0x01,0x00,0x00,0xbd,0x01,0x00,0x00, -0xbe,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xbd,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xc4,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xc4,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x18,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0xbd,0x01,0x00,0x00, -0xe6,0x01,0x00,0x00,0xc5,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0xca,0x01,0x00,0x00,0x18,0x03,0x00,0x00, -0x62,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xc6,0x01,0x00,0x00, -0xc5,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xca,0x01,0x00,0x00,0xc5,0x01,0x00,0x00,0xc6,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xc5,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xd0,0x01,0x00,0x00,0x06,0x03,0x00,0x00, -0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd2,0x01,0x00,0x00,0xd0,0x01,0x00,0x00,0x18,0x03,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd4,0x01,0x00,0x00, -0x55,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xd6,0x01,0x00,0x00,0x06,0x03,0x00,0x00, -0x61,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd7,0x01,0x00,0x00,0xd4,0x01,0x00,0x00,0xd6,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd9,0x01,0x00,0x00, -0x64,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xda,0x01,0x00,0x00,0xd7,0x01,0x00,0x00, -0xd9,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xdc,0x01,0x00,0x00,0xda,0x01,0x00,0x00,0x18,0x03,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xde,0x01,0x00,0x00, -0xdc,0x01,0x00,0x00,0xdd,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xe0,0x01,0x00,0x00,0xde,0x01,0x00,0x00, -0x02,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x32,0x01,0x00,0x00, -0xe1,0x01,0x00,0x00,0x2d,0x01,0x00,0x00,0xe0,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0x01,0x01,0x00,0x00,0xe2,0x01,0x00,0x00, -0xe1,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0xe3,0x01,0x00,0x00, -0xe4,0x01,0x00,0x00,0xce,0x01,0x00,0x00,0xd2,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0xe4,0x01,0x00,0x00,0xe2,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe6,0x01,0x00,0x00, -0x18,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xc4,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xc6,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xbf,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xbf,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xe8,0x01,0x00,0x00,0x06,0x03,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xbc,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xbe,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xea,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xea,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x07,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0xbe,0x01,0x00,0x00,0x16,0x02,0x00,0x00,0xed,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xf0,0x01,0x00,0x00, -0x07,0x03,0x00,0x00,0xbf,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xec,0x01,0x00,0x00,0xed,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xf0,0x01,0x00,0x00,0xeb,0x01,0x00,0x00, -0xec,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xeb,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xf2,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xf2,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x15,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0xeb,0x01,0x00,0x00, -0x14,0x02,0x00,0x00,0xf3,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0xf8,0x01,0x00,0x00,0x15,0x03,0x00,0x00, -0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xf4,0x01,0x00,0x00, -0xf3,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xf8,0x01,0x00,0x00,0xf3,0x01,0x00,0x00,0xf4,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xf3,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xfe,0x01,0x00,0x00,0x07,0x03,0x00,0x00, -0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x00,0x02,0x00,0x00,0xfe,0x01,0x00,0x00,0x15,0x03,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x02,0x02,0x00,0x00, -0x59,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x05,0x02,0x00,0x00,0x07,0x03,0x00,0x00, -0x04,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x06,0x02,0x00,0x00,0x02,0x02,0x00,0x00,0x05,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x08,0x02,0x00,0x00, -0x68,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x09,0x02,0x00,0x00,0x06,0x02,0x00,0x00, -0x08,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x0b,0x02,0x00,0x00,0x09,0x02,0x00,0x00,0x15,0x03,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0d,0x02,0x00,0x00, -0x0b,0x02,0x00,0x00,0x0c,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x0f,0x02,0x00,0x00,0x0d,0x02,0x00,0x00, -0x02,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x32,0x01,0x00,0x00, -0x10,0x02,0x00,0x00,0x62,0x01,0x00,0x00,0x0f,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0x01,0x01,0x00,0x00,0x11,0x02,0x00,0x00, -0x10,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xe3,0x01,0x00,0x00, -0x12,0x02,0x00,0x00,0xfc,0x01,0x00,0x00,0x00,0x02,0x00,0x00, -0x3e,0x00,0x03,0x00,0x12,0x02,0x00,0x00,0x11,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x14,0x02,0x00,0x00, -0x15,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xf2,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xf4,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xed,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xed,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x16,0x02,0x00,0x00,0x07,0x03,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xea,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xec,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x18,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x18,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x08,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0xec,0x01,0x00,0x00,0x5c,0x02,0x00,0x00,0x1b,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x1e,0x02,0x00,0x00, -0x08,0x03,0x00,0x00,0xbf,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x1a,0x02,0x00,0x00,0x1b,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x1e,0x02,0x00,0x00,0x19,0x02,0x00,0x00, -0x1a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x19,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x20,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x20,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x0c,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0x19,0x02,0x00,0x00, -0x5a,0x02,0x00,0x00,0x23,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0x26,0x02,0x00,0x00,0x0c,0x03,0x00,0x00, -0x60,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x22,0x02,0x00,0x00, -0x23,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x26,0x02,0x00,0x00,0x21,0x02,0x00,0x00,0x22,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x21,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x28,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x28,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x0e,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0x21,0x02,0x00,0x00,0x58,0x02,0x00,0x00, -0x2b,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0x2e,0x02,0x00,0x00,0x0e,0x03,0x00,0x00,0xbc,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x2a,0x02,0x00,0x00,0x2b,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x2e,0x02,0x00,0x00, -0x29,0x02,0x00,0x00,0x2a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x29,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x30,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x30,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x10,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0x29,0x02,0x00,0x00,0x56,0x02,0x00,0x00,0x31,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x36,0x02,0x00,0x00, -0x10,0x03,0x00,0x00,0x62,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x32,0x02,0x00,0x00,0x31,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x36,0x02,0x00,0x00,0x31,0x02,0x00,0x00, -0x32,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x31,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x38,0x02,0x00,0x00, -0x08,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3a,0x02,0x00,0x00,0x38,0x02,0x00,0x00, -0x0e,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x3c,0x02,0x00,0x00,0x3a,0x02,0x00,0x00,0x3b,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3e,0x02,0x00,0x00, -0x0c,0x03,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3f,0x02,0x00,0x00,0x3c,0x02,0x00,0x00, -0x3e,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x41,0x02,0x00,0x00,0x3f,0x02,0x00,0x00,0x10,0x03,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x45,0x02,0x00,0x00, -0x3e,0x02,0x00,0x00,0x10,0x03,0x00,0x00,0x41,0x00,0x05,0x00, -0xe3,0x01,0x00,0x00,0x46,0x02,0x00,0x00,0xce,0x01,0x00,0x00, -0x45,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x01,0x01,0x00,0x00, -0x47,0x02,0x00,0x00,0x46,0x02,0x00,0x00,0x73,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0x48,0x02,0x00,0x00,0x47,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0xe3,0x01,0x00,0x00,0x4d,0x02,0x00,0x00, -0xfc,0x01,0x00,0x00,0x3a,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0x01,0x01,0x00,0x00,0x4e,0x02,0x00,0x00,0x4d,0x02,0x00,0x00, -0x73,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x4f,0x02,0x00,0x00, -0x4e,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00, -0x51,0x02,0x00,0x00,0xca,0x00,0x00,0x00,0x41,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x52,0x02,0x00,0x00, -0x51,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,0xc4,0x00,0x00,0x00, -0x53,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x48,0x02,0x00,0x00,0x4f,0x02,0x00,0x00,0x52,0x02,0x00,0x00, -0x3e,0x00,0x03,0x00,0x51,0x02,0x00,0x00,0x53,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x56,0x02,0x00,0x00, -0x10,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x30,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x32,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x2b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x2b,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x58,0x02,0x00,0x00,0x0e,0x03,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x28,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x2a,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x23,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x23,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x5a,0x02,0x00,0x00,0x0c,0x03,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x20,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x22,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x1b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x1b,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5c,0x02,0x00,0x00, -0x08,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x18,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x1a,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0xb7,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xb7,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x5e,0x02,0x00,0x00,0x02,0x03,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xb4,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xb6,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0xac,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xd7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd7,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x60,0x02,0x00,0x00, -0xe8,0x02,0x00,0x00,0x6c,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xd4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd6,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x65,0x02,0x00,0x00, -0x55,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x66,0x02,0x00,0x00,0x96,0x00,0x00,0x00, -0x65,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x6b,0x02,0x00,0x00,0x59,0x00,0x00,0x00,0xb9,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6c,0x02,0x00,0x00, -0xa8,0x00,0x00,0x00,0x6b,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x71,0x02,0x00,0x00,0x12,0x00,0x00,0x00, -0x70,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x72,0x02,0x00,0x00,0x71,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x73,0x02,0x00,0x00,0x0f,0x00,0x00,0x00, -0x72,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x77,0x02,0x00,0x00,0x47,0x00,0x00,0x00,0x72,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x79,0x02,0x00,0x00, -0x78,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x7a,0x02,0x00,0x00,0x79,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7b,0x02,0x00,0x00, -0x77,0x02,0x00,0x00,0x7a,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x7c,0x02,0x00,0x00,0x73,0x02,0x00,0x00, -0x7b,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x7e,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x7e,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xe9,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0xd6,0x00,0x00,0x00,0xe4,0x02,0x00,0x00,0x81,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x84,0x02,0x00,0x00, -0xe9,0x02,0x00,0x00,0xbf,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x80,0x02,0x00,0x00,0x81,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x84,0x02,0x00,0x00,0x7f,0x02,0x00,0x00, -0x80,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x7f,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x86,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x86,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xea,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0x7f,0x02,0x00,0x00, -0xe2,0x02,0x00,0x00,0x89,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0x8c,0x02,0x00,0x00,0xea,0x02,0x00,0x00, -0x60,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x88,0x02,0x00,0x00, -0x89,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x8c,0x02,0x00,0x00,0x87,0x02,0x00,0x00,0x88,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x87,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x90,0x02,0x00,0x00,0xea,0x02,0x00,0x00, -0x61,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x91,0x02,0x00,0x00,0x66,0x02,0x00,0x00,0x90,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x93,0x02,0x00,0x00, -0x64,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x94,0x02,0x00,0x00,0x91,0x02,0x00,0x00, -0x93,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x98,0x02,0x00,0x00,0xe9,0x02,0x00,0x00,0x04,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x99,0x02,0x00,0x00, -0x6c,0x02,0x00,0x00,0x98,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9b,0x02,0x00,0x00,0x68,0x00,0x00,0x00, -0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9c,0x02,0x00,0x00,0x99,0x02,0x00,0x00,0x9b,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x9e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x9e,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xec,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0x87,0x02,0x00,0x00, -0xe0,0x02,0x00,0x00,0xa1,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0xa4,0x02,0x00,0x00,0xec,0x02,0x00,0x00, -0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xa0,0x02,0x00,0x00, -0xa1,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xa4,0x02,0x00,0x00,0x9f,0x02,0x00,0x00,0xa0,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x9f,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0xa6,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xa6,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xee,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0x9f,0x02,0x00,0x00,0xde,0x02,0x00,0x00, -0xa9,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0xac,0x02,0x00,0x00,0xee,0x02,0x00,0x00,0x62,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xa8,0x02,0x00,0x00,0xa9,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xac,0x02,0x00,0x00, -0xa7,0x02,0x00,0x00,0xa8,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xa7,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xaf,0x02,0x00,0x00,0x94,0x02,0x00,0x00,0xee,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xb2,0x02,0x00,0x00, -0xaf,0x02,0x00,0x00,0x36,0x00,0x00,0x00,0xf7,0x00,0x03,0x00, -0xb4,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xb2,0x02,0x00,0x00,0xb3,0x02,0x00,0x00,0xb4,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xb3,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xb7,0x02,0x00,0x00,0x9c,0x02,0x00,0x00, -0xec,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0xb8,0x02,0x00,0x00,0x12,0x00,0x00,0x00,0xd0,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb9,0x02,0x00,0x00, -0xb8,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0xba,0x02,0x00,0x00,0xb7,0x02,0x00,0x00,0xb9,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0xb4,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xb4,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0xc2,0x00,0x00,0x00, -0xbb,0x02,0x00,0x00,0xb2,0x02,0x00,0x00,0xa7,0x02,0x00,0x00, -0xba,0x02,0x00,0x00,0xb3,0x02,0x00,0x00,0xf7,0x00,0x03,0x00, -0xbd,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xbb,0x02,0x00,0x00,0xbc,0x02,0x00,0x00,0xbd,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xbc,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xc5,0x02,0x00,0x00,0x9c,0x02,0x00,0x00, -0xec,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0xc7,0x02,0x00,0x00,0x12,0x00,0x00,0x00,0xc6,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xc8,0x02,0x00,0x00, -0xc7,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xc9,0x02,0x00,0x00,0xc5,0x02,0x00,0x00,0xc8,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xca,0x02,0x00,0x00, -0x7c,0x02,0x00,0x00,0xc9,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xcc,0x02,0x00,0x00,0xca,0x02,0x00,0x00, -0x94,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xce,0x02,0x00,0x00,0xcc,0x02,0x00,0x00,0xee,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd0,0x02,0x00,0x00, -0xe9,0x02,0x00,0x00,0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xd2,0x02,0x00,0x00,0xd0,0x02,0x00,0x00, -0xec,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd4,0x02,0x00,0x00,0xd2,0x02,0x00,0x00,0xd3,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd6,0x02,0x00,0x00, -0xea,0x02,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xd7,0x02,0x00,0x00,0xd4,0x02,0x00,0x00, -0xd6,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd9,0x02,0x00,0x00,0xd7,0x02,0x00,0x00,0xee,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,0xda,0x02,0x00,0x00, -0xca,0x00,0x00,0x00,0xd9,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0xdb,0x02,0x00,0x00,0xda,0x02,0x00,0x00, -0x41,0x00,0x06,0x00,0x6c,0x01,0x00,0x00,0xdc,0x02,0x00,0x00, -0xc1,0x02,0x00,0x00,0x34,0x00,0x00,0x00,0xce,0x02,0x00,0x00, -0x3e,0x00,0x03,0x00,0xdc,0x02,0x00,0x00,0xdb,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0xbd,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xbd,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xa9,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xa9,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xde,0x02,0x00,0x00,0xee,0x02,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xa6,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xa8,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0xa1,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xa1,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe0,0x02,0x00,0x00, -0xec,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x9e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xa0,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x89,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x89,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xe2,0x02,0x00,0x00,0xea,0x02,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x86,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x88,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x81,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x81,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xe4,0x02,0x00,0x00,0xe9,0x02,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x7e,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x80,0x02,0x00,0x00,0xfd,0x00,0x01,0x00, -0x38,0x00,0x01,0x00, -}; -const uint64_t matmul_q4_1_f32_aligned_len = 11224; - -unsigned char matmul_q4_1_f32_aligned_fp32_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0xef,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00, -0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00, -0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64, -0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00, -0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0f,0x00,0x0f,0x00, -0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e, -0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x3d,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x08,0x01,0x00,0x00, -0x2d,0x01,0x00,0x00,0x60,0x01,0x00,0x00,0x67,0x01,0x00,0x00, -0x4e,0x02,0x00,0x00,0x97,0x02,0x00,0x00,0x10,0x00,0x06,0x00, -0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x34,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x10,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x37,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x3d,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x4c,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x4f,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x53,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x60,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x62,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x6c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xa7,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xb9,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xbc,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x03,0x01,0x00,0x00,0x06,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x04,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x04,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x04,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x05,0x01,0x00,0x00, -0x06,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0x06,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x06,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x06,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x08,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x08,0x01,0x00,0x00,0x21,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x38,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x39,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x64,0x01,0x00,0x00,0x06,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x65,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x65,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x65,0x01,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x67,0x01,0x00,0x00, -0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x67,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x4e,0x02,0x00,0x00,0x0b,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x94,0x02,0x00,0x00, -0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0x95,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x95,0x02,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x95,0x02,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x97,0x02,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x97,0x02,0x00,0x00,0x21,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00, -0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x1e,0x00,0x10,0x00,0x10,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x11,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x11,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x15,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0x0a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x27,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x3e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x61,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x63,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x61,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x67,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x61,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x72,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x78,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x77,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x7d,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x77,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x81,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x97,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0xa2,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0xa9,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xb8,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xb9,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x4f,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbd,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0xbc,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbe,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbf,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0xbe,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc0,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0xbf,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc1,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0xbc,0x00,0x00,0x00, -0x14,0x00,0x02,0x00,0xc2,0x00,0x00,0x00,0x16,0x00,0x03,0x00, -0xc4,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xc5,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xc6,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x1c,0x00,0x04,0x00, -0xc8,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0xc7,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0xc9,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0xc8,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0xcc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0xcd,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xc4,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0xd0,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xf4,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xfa,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x16,0x00,0x03,0x00,0x01,0x01,0x00,0x00,0x10,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x02,0x01,0x00,0x00,0x08,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x03,0x01,0x00,0x00, -0x02,0x01,0x00,0x00,0xfa,0x00,0x00,0x00,0x1e,0x00,0x05,0x00, -0x04,0x01,0x00,0x00,0x01,0x01,0x00,0x00,0x01,0x01,0x00,0x00, -0x03,0x01,0x00,0x00,0x1d,0x00,0x03,0x00,0x05,0x01,0x00,0x00, -0x04,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,0x06,0x01,0x00,0x00, -0x05,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x07,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x06,0x01,0x00,0x00,0x3b,0x00,0x04,0x00, -0x07,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x0a,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x01,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x16,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x02,0x01,0x00,0x00,0x17,0x00,0x04,0x00, -0x1a,0x01,0x00,0x00,0xc4,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x29,0x01,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x2a,0x01,0x00,0x00, -0x84,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x29,0x01,0x00,0x00, -0x1c,0x00,0x04,0x00,0x2b,0x01,0x00,0x00,0xc4,0x00,0x00,0x00, -0x2a,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x2c,0x01,0x00,0x00, -0x04,0x00,0x00,0x00,0x2b,0x01,0x00,0x00,0x3b,0x00,0x04,0x00, -0x2c,0x01,0x00,0x00,0x2d,0x01,0x00,0x00,0x04,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x31,0x01,0x00,0x00,0x04,0x00,0x00,0x00, -0xc4,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x38,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00, -0x09,0x00,0x00,0x00,0x39,0x01,0x00,0x00,0x38,0x01,0x00,0x00, -0x39,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x3a,0x01,0x00,0x00,0x51,0x00,0x00,0x00, -0x39,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x3b,0x01,0x00,0x00,0x84,0x00,0x00,0x00, -0x3a,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x3c,0x01,0x00,0x00,0x86,0x00,0x00,0x00, -0x3b,0x01,0x00,0x00,0x6c,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x57,0x01,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x5c,0x01,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x5d,0x01,0x00,0x00,0x84,0x00,0x00,0x00, -0xa7,0x00,0x00,0x00,0x5c,0x01,0x00,0x00,0x1c,0x00,0x04,0x00, -0x5e,0x01,0x00,0x00,0xc4,0x00,0x00,0x00,0x5d,0x01,0x00,0x00, -0x20,0x00,0x04,0x00,0x5f,0x01,0x00,0x00,0x04,0x00,0x00,0x00, -0x5e,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x5f,0x01,0x00,0x00, -0x60,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x17,0x00,0x04,0x00, -0x63,0x01,0x00,0x00,0xc4,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x1d,0x00,0x03,0x00,0x64,0x01,0x00,0x00,0x63,0x01,0x00,0x00, -0x1e,0x00,0x03,0x00,0x65,0x01,0x00,0x00,0x64,0x01,0x00,0x00, -0x20,0x00,0x04,0x00,0x66,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x65,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x66,0x01,0x00,0x00, -0x67,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x69,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0xc4,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x7a,0x01,0x00,0x00, -0x03,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x80,0x01,0x00,0x00,0x51,0x00,0x00,0x00,0x39,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x81,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x80,0x01,0x00,0x00, -0x77,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x82,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x81,0x01,0x00,0x00, -0x6c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x85,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x86,0x01,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x89,0x01,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xa4,0x01,0x00,0x00,0x84,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x1c,0x00,0x04,0x00, -0xa5,0x01,0x00,0x00,0xc4,0x00,0x00,0x00,0xa4,0x01,0x00,0x00, -0x20,0x00,0x04,0x00,0xa6,0x01,0x00,0x00,0x07,0x00,0x00,0x00, -0xa5,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xb6,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xd1,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0xbf,0x00,0x00,0x00, -0xbc,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xd2,0x01,0x00,0x00, -0xc4,0x00,0x00,0x00,0xd1,0x01,0x00,0x00,0x20,0x00,0x04,0x00, -0xd3,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0xd2,0x01,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xdc,0x01,0x00,0x00, -0x86,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0xbf,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xe4,0x01,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x13,0x02,0x00,0x00, -0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x46,0x02,0x00,0x00, -0x0d,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x4e,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x1d,0x00,0x03,0x00, -0x94,0x02,0x00,0x00,0xc4,0x00,0x00,0x00,0x1e,0x00,0x03,0x00, -0x95,0x02,0x00,0x00,0x94,0x02,0x00,0x00,0x20,0x00,0x04,0x00, -0x96,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x95,0x02,0x00,0x00, -0x3b,0x00,0x04,0x00,0x96,0x02,0x00,0x00,0x97,0x02,0x00,0x00, -0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x9c,0x02,0x00,0x00,0x05,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xa9,0x02,0x00,0x00,0x84,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x36,0x00,0x05,0x00, -0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0xc9,0x00,0x00,0x00,0xca,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xa6,0x01,0x00,0x00, -0xa7,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0xd3,0x01,0x00,0x00,0xd4,0x01,0x00,0x00,0x07,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x16,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x16,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x17,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x24,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2a,0x00,0x00,0x00, -0x1e,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x2d,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x2f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x24,0x00,0x00,0x00, -0x2f,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x2a,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x35,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x35,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x38,0x00,0x00,0x00, -0x36,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x82,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x38,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x3b,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x3f,0x00,0x00,0x00, -0x3d,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x3f,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x42,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x3b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x49,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4a,0x00,0x00,0x00, -0x49,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x4d,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x3e,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x4d,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x50,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00, -0x50,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x50,0x00,0x00,0x00, -0x58,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x5d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x64,0x00,0x00,0x00, -0x5d,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x5d,0x00,0x00,0x00, -0x67,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x6e,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x6d,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x73,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x72,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x78,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x7e,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x7d,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x82,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x82,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x47,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x88,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0x47,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x8d,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0x83,0x00,0x00,0x00, -0x0c,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x8e,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x26,0x00,0x00,0x00,0x88,0x00,0x00,0x00, -0x8d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x92,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x91,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x93,0x00,0x00,0x00, -0x92,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x94,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x93,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x96,0x00,0x00,0x00, -0x42,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x97,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x99,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x96,0x00,0x00,0x00, -0x99,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9b,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x9a,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9d,0x00,0x00,0x00, -0x9b,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,0x9d,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0xa3,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0xa2,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00, -0xa3,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa5,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0xa4,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa8,0x00,0x00,0x00, -0x4a,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0xa9,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xab,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0xa8,0x00,0x00,0x00, -0xab,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xad,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,0xac,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xaf,0x00,0x00,0x00, -0xad,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0xaf,0x00,0x00,0x00, -0x77,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb2,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xbd,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0x05,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0xb3,0x00,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xc3,0x00,0x00,0x00, -0xbd,0x02,0x00,0x00,0xc1,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xb4,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0xb3,0x00,0x00,0x00, -0xb4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb3,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,0xce,0x00,0x00,0x00, -0xca,0x00,0x00,0x00,0xbd,0x02,0x00,0x00,0x3e,0x00,0x03,0x00, -0xce,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0xbd,0x02,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb2,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xb4,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xd4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd4,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xd6,0x02,0x00,0x00, -0xb0,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0x8b,0x01,0x00,0x00, -0xd7,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xd2,0x02,0x00,0x00,0x9e,0x00,0x00,0x00,0xb4,0x00,0x00,0x00, -0x88,0x01,0x00,0x00,0xd7,0x00,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xbe,0x02,0x00,0x00,0x84,0x00,0x00,0x00, -0xb4,0x00,0x00,0x00,0x36,0x02,0x00,0x00,0xd7,0x00,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xdb,0x00,0x00,0x00, -0xbe,0x02,0x00,0x00,0x8e,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xd6,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xdb,0x00,0x00,0x00,0xd5,0x00,0x00,0x00, -0xd6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd5,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xdd,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xce,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0xd5,0x00,0x00,0x00, -0x3e,0x01,0x00,0x00,0xde,0x00,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0xe3,0x00,0x00,0x00,0xce,0x02,0x00,0x00, -0x37,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xdf,0x00,0x00,0x00, -0xde,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xe3,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0xdf,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0x73,0x00,0x00,0x00, -0xce,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xeb,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0x99,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xec,0x00,0x00,0x00, -0xeb,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xed,0x00,0x00,0x00,0xd2,0x02,0x00,0x00, -0xec,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xef,0x00,0x00,0x00,0xed,0x00,0x00,0x00,0x6e,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf5,0x00,0x00,0x00, -0xe8,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,0xf5,0x00,0x00,0x00, -0x6e,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xfb,0x00,0x00,0x00,0xef,0x00,0x00,0x00,0xfa,0x00,0x00,0x00, -0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xff,0x00,0x00,0x00, -0xef,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x41,0x00,0x07,0x00, -0x0a,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,0x08,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x01,0x01,0x00,0x00,0x0c,0x01,0x00,0x00, -0x0b,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0x0d,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,0x41,0x00,0x07,0x00, -0x0a,0x01,0x00,0x00,0x10,0x01,0x00,0x00,0x08,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0xd0,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x01,0x01,0x00,0x00,0x11,0x01,0x00,0x00, -0x10,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0x12,0x01,0x00,0x00,0x11,0x01,0x00,0x00,0x41,0x00,0x08,0x00, -0x16,0x01,0x00,0x00,0x17,0x01,0x00,0x00,0x08,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0xff,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x02,0x01,0x00,0x00, -0x18,0x01,0x00,0x00,0x17,0x01,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x19,0x01,0x00,0x00,0x18,0x01,0x00,0x00, -0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1e,0x01,0x00,0x00, -0x19,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,0x70,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0x1f,0x01,0x00,0x00,0x1e,0x01,0x00,0x00, -0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x21,0x01,0x00,0x00, -0x19,0x01,0x00,0x00,0xa9,0x00,0x00,0x00,0x70,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0x22,0x01,0x00,0x00,0x21,0x01,0x00,0x00, -0x50,0x00,0x05,0x00,0x1a,0x01,0x00,0x00,0x23,0x01,0x00,0x00, -0x1f,0x01,0x00,0x00,0x22,0x01,0x00,0x00,0x8e,0x00,0x05,0x00, -0x1a,0x01,0x00,0x00,0x25,0x01,0x00,0x00,0x23,0x01,0x00,0x00, -0x0d,0x01,0x00,0x00,0x50,0x00,0x05,0x00,0x1a,0x01,0x00,0x00, -0x27,0x01,0x00,0x00,0x12,0x01,0x00,0x00,0x12,0x01,0x00,0x00, -0x81,0x00,0x05,0x00,0x1a,0x01,0x00,0x00,0x28,0x01,0x00,0x00, -0x25,0x01,0x00,0x00,0x27,0x01,0x00,0x00,0x51,0x00,0x05,0x00, -0xc4,0x00,0x00,0x00,0x30,0x01,0x00,0x00,0x28,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x31,0x01,0x00,0x00, -0x32,0x01,0x00,0x00,0x2d,0x01,0x00,0x00,0xf7,0x00,0x00,0x00, -0x3e,0x00,0x03,0x00,0x32,0x01,0x00,0x00,0x30,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x34,0x01,0x00,0x00, -0xf7,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0x51,0x00,0x05,0x00, -0xc4,0x00,0x00,0x00,0x36,0x01,0x00,0x00,0x28,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x31,0x01,0x00,0x00, -0x37,0x01,0x00,0x00,0x2d,0x01,0x00,0x00,0x34,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0x37,0x01,0x00,0x00,0x36,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3e,0x01,0x00,0x00, -0xce,0x02,0x00,0x00,0x3c,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x40,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x40,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xcf,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0xdf,0x00,0x00,0x00, -0x84,0x01,0x00,0x00,0x41,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0x46,0x01,0x00,0x00,0xcf,0x02,0x00,0x00, -0xa7,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x42,0x01,0x00,0x00, -0x41,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x46,0x01,0x00,0x00,0x41,0x01,0x00,0x00,0x42,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x41,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x4b,0x01,0x00,0x00,0x7e,0x00,0x00,0x00, -0xcf,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x4e,0x01,0x00,0x00,0x4b,0x01,0x00,0x00,0xab,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4f,0x01,0x00,0x00, -0x4e,0x01,0x00,0x00,0x77,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x50,0x01,0x00,0x00,0xd6,0x02,0x00,0x00, -0x4f,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x52,0x01,0x00,0x00,0x50,0x01,0x00,0x00,0x79,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x58,0x01,0x00,0x00, -0x4b,0x01,0x00,0x00,0x57,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x5a,0x01,0x00,0x00,0x79,0x00,0x00,0x00, -0x77,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x5b,0x01,0x00,0x00,0x58,0x01,0x00,0x00,0x5a,0x01,0x00,0x00, -0x41,0x00,0x07,0x00,0x69,0x01,0x00,0x00,0x6a,0x01,0x00,0x00, -0x67,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0x52,0x01,0x00,0x00, -0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0x6b,0x01,0x00,0x00,0x6a,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x31,0x01,0x00,0x00,0x6c,0x01,0x00,0x00,0x60,0x01,0x00,0x00, -0x5b,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x6c,0x01,0x00,0x00, -0x6b,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x6e,0x01,0x00,0x00,0x5b,0x01,0x00,0x00,0x39,0x00,0x00,0x00, -0x41,0x00,0x07,0x00,0x69,0x01,0x00,0x00,0x70,0x01,0x00,0x00, -0x67,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0x52,0x01,0x00,0x00, -0x39,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0x71,0x01,0x00,0x00,0x70,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x31,0x01,0x00,0x00,0x72,0x01,0x00,0x00,0x60,0x01,0x00,0x00, -0x6e,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x72,0x01,0x00,0x00, -0x71,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x74,0x01,0x00,0x00,0x5b,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x41,0x00,0x07,0x00,0x69,0x01,0x00,0x00,0x76,0x01,0x00,0x00, -0x67,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0x52,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0x77,0x01,0x00,0x00,0x76,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x31,0x01,0x00,0x00,0x78,0x01,0x00,0x00,0x60,0x01,0x00,0x00, -0x74,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x78,0x01,0x00,0x00, -0x77,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x7b,0x01,0x00,0x00,0x5b,0x01,0x00,0x00,0x7a,0x01,0x00,0x00, -0x41,0x00,0x07,0x00,0x69,0x01,0x00,0x00,0x7d,0x01,0x00,0x00, -0x67,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0x52,0x01,0x00,0x00, -0x7a,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0x7e,0x01,0x00,0x00,0x7d,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x31,0x01,0x00,0x00,0x7f,0x01,0x00,0x00,0x60,0x01,0x00,0x00, -0x7b,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x7f,0x01,0x00,0x00, -0x7e,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x84,0x01,0x00,0x00,0xcf,0x02,0x00,0x00,0x82,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0x40,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x42,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x85,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x88,0x01,0x00,0x00,0xd2,0x02,0x00,0x00, -0x86,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x8b,0x01,0x00,0x00,0xd6,0x02,0x00,0x00,0x89,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0x8d,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x8d,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xd8,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0x42,0x01,0x00,0x00, -0x34,0x02,0x00,0x00,0x90,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0x93,0x01,0x00,0x00,0xd8,0x02,0x00,0x00, -0x6c,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x8f,0x01,0x00,0x00, -0x90,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x93,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,0x8f,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x8e,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0x95,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x95,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xdc,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0x8e,0x01,0x00,0x00,0xc0,0x01,0x00,0x00, -0x98,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0x9b,0x01,0x00,0x00,0xdc,0x02,0x00,0x00,0x60,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x97,0x01,0x00,0x00,0x98,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x9b,0x01,0x00,0x00, -0x96,0x01,0x00,0x00,0x97,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x96,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x9d,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x9d,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xee,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0x96,0x01,0x00,0x00,0xbe,0x01,0x00,0x00,0x9e,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xa3,0x01,0x00,0x00, -0xee,0x02,0x00,0x00,0x62,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x9f,0x01,0x00,0x00,0x9e,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xa3,0x01,0x00,0x00,0x9e,0x01,0x00,0x00, -0x9f,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x9e,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa9,0x01,0x00,0x00, -0xdc,0x02,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xab,0x01,0x00,0x00,0xa9,0x01,0x00,0x00, -0xee,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xad,0x01,0x00,0x00,0x55,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xaf,0x01,0x00,0x00, -0xdc,0x02,0x00,0x00,0x61,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xb0,0x01,0x00,0x00,0xad,0x01,0x00,0x00, -0xaf,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xb2,0x01,0x00,0x00,0x64,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb3,0x01,0x00,0x00, -0xb0,0x01,0x00,0x00,0xb2,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xb5,0x01,0x00,0x00,0xb3,0x01,0x00,0x00, -0xee,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xb7,0x01,0x00,0x00,0xb5,0x01,0x00,0x00,0xb6,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb9,0x01,0x00,0x00, -0xb7,0x01,0x00,0x00,0xd8,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0x31,0x01,0x00,0x00,0xba,0x01,0x00,0x00,0x2d,0x01,0x00,0x00, -0xb9,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0xbb,0x01,0x00,0x00,0xba,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0xcd,0x00,0x00,0x00,0xbc,0x01,0x00,0x00,0xa7,0x01,0x00,0x00, -0xab,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xbc,0x01,0x00,0x00, -0xbb,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xbe,0x01,0x00,0x00,0xee,0x02,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x9d,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x9f,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x98,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x98,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xc0,0x01,0x00,0x00,0xdc,0x02,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x95,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x97,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xc2,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xc2,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xdd,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0x97,0x01,0x00,0x00,0xee,0x01,0x00,0x00, -0xc5,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0xc8,0x01,0x00,0x00,0xdd,0x02,0x00,0x00,0xbf,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xc4,0x01,0x00,0x00,0xc5,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xc8,0x01,0x00,0x00, -0xc3,0x01,0x00,0x00,0xc4,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xc3,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xca,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xca,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xeb,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0xc3,0x01,0x00,0x00,0xec,0x01,0x00,0x00,0xcb,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xd0,0x01,0x00,0x00, -0xeb,0x02,0x00,0x00,0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xcc,0x01,0x00,0x00,0xcb,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xd0,0x01,0x00,0x00,0xcb,0x01,0x00,0x00, -0xcc,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xcb,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd6,0x01,0x00,0x00, -0xdd,0x02,0x00,0x00,0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xd8,0x01,0x00,0x00,0xd6,0x01,0x00,0x00, -0xeb,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xda,0x01,0x00,0x00,0x59,0x00,0x00,0x00,0xb9,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdd,0x01,0x00,0x00, -0xdd,0x02,0x00,0x00,0xdc,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xde,0x01,0x00,0x00,0xda,0x01,0x00,0x00, -0xdd,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xe0,0x01,0x00,0x00,0x68,0x00,0x00,0x00,0xbc,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe1,0x01,0x00,0x00, -0xde,0x01,0x00,0x00,0xe0,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xe3,0x01,0x00,0x00,0xe1,0x01,0x00,0x00, -0xeb,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xe5,0x01,0x00,0x00,0xe3,0x01,0x00,0x00,0xe4,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe7,0x01,0x00,0x00, -0xe5,0x01,0x00,0x00,0xd8,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0x31,0x01,0x00,0x00,0xe8,0x01,0x00,0x00,0x60,0x01,0x00,0x00, -0xe7,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0xe9,0x01,0x00,0x00,0xe8,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0xcd,0x00,0x00,0x00,0xea,0x01,0x00,0x00,0xd4,0x01,0x00,0x00, -0xd8,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xea,0x01,0x00,0x00, -0xe9,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xec,0x01,0x00,0x00,0xeb,0x02,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xca,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xcc,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xc5,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xc5,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xee,0x01,0x00,0x00,0xdd,0x02,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xc2,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xc4,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xf0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xf0,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xde,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0xc4,0x01,0x00,0x00,0x32,0x02,0x00,0x00, -0xf3,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0xf6,0x01,0x00,0x00,0xde,0x02,0x00,0x00,0xbf,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xf2,0x01,0x00,0x00,0xf3,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xf6,0x01,0x00,0x00, -0xf1,0x01,0x00,0x00,0xf2,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xf1,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xf8,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xf8,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xe2,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0xf1,0x01,0x00,0x00,0x30,0x02,0x00,0x00,0xfb,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xfe,0x01,0x00,0x00, -0xe2,0x02,0x00,0x00,0x60,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xfa,0x01,0x00,0x00,0xfb,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xfe,0x01,0x00,0x00,0xf9,0x01,0x00,0x00, -0xfa,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xf9,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0x00,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x00,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xe4,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0xf9,0x01,0x00,0x00, -0x2e,0x02,0x00,0x00,0x03,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0x06,0x02,0x00,0x00,0xe4,0x02,0x00,0x00, -0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x02,0x02,0x00,0x00, -0x03,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x06,0x02,0x00,0x00,0x01,0x02,0x00,0x00,0x02,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x01,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x08,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x08,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xe6,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0x01,0x02,0x00,0x00,0x2c,0x02,0x00,0x00, -0x09,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0x0e,0x02,0x00,0x00,0xe6,0x02,0x00,0x00,0x62,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x0a,0x02,0x00,0x00,0x09,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x0e,0x02,0x00,0x00, -0x09,0x02,0x00,0x00,0x0a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x09,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x10,0x02,0x00,0x00,0xde,0x02,0x00,0x00,0xbc,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x12,0x02,0x00,0x00, -0x10,0x02,0x00,0x00,0xe4,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x14,0x02,0x00,0x00,0x12,0x02,0x00,0x00, -0x13,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x16,0x02,0x00,0x00,0xe2,0x02,0x00,0x00,0x62,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x17,0x02,0x00,0x00, -0x14,0x02,0x00,0x00,0x16,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x19,0x02,0x00,0x00,0x17,0x02,0x00,0x00, -0xe6,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x1d,0x02,0x00,0x00,0x16,0x02,0x00,0x00,0xe6,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,0x1e,0x02,0x00,0x00, -0xa7,0x01,0x00,0x00,0x1d,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0x1f,0x02,0x00,0x00,0x1e,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,0x24,0x02,0x00,0x00, -0xd4,0x01,0x00,0x00,0x12,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0x25,0x02,0x00,0x00,0x24,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,0x27,0x02,0x00,0x00, -0xca,0x00,0x00,0x00,0x19,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0x28,0x02,0x00,0x00,0x27,0x02,0x00,0x00, -0x0c,0x00,0x08,0x00,0xc4,0x00,0x00,0x00,0x29,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x1f,0x02,0x00,0x00, -0x25,0x02,0x00,0x00,0x28,0x02,0x00,0x00,0x3e,0x00,0x03,0x00, -0x27,0x02,0x00,0x00,0x29,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x2c,0x02,0x00,0x00,0xe6,0x02,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x08,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x0a,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x03,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x03,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2e,0x02,0x00,0x00, -0xe4,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x00,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x02,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0xfb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xfb,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x30,0x02,0x00,0x00,0xe2,0x02,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xf8,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xfa,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xf3,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xf3,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x32,0x02,0x00,0x00,0xde,0x02,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xf0,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xf2,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0x90,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x90,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x34,0x02,0x00,0x00, -0xd8,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x8d,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x8f,0x01,0x00,0x00, -0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x85,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xd7,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xd7,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x36,0x02,0x00,0x00,0xbe,0x02,0x00,0x00, -0x6c,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd4,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xd6,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3b,0x02,0x00,0x00,0x55,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x3c,0x02,0x00,0x00,0x96,0x00,0x00,0x00,0x3b,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x41,0x02,0x00,0x00, -0x59,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x42,0x02,0x00,0x00,0xa8,0x00,0x00,0x00, -0x41,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x47,0x02,0x00,0x00,0x12,0x00,0x00,0x00,0x46,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x48,0x02,0x00,0x00, -0x47,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x49,0x02,0x00,0x00,0x0f,0x00,0x00,0x00,0x48,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4d,0x02,0x00,0x00, -0x47,0x00,0x00,0x00,0x48,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0x4f,0x02,0x00,0x00,0x4e,0x02,0x00,0x00, -0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x50,0x02,0x00,0x00,0x4f,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x51,0x02,0x00,0x00,0x4d,0x02,0x00,0x00, -0x50,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x52,0x02,0x00,0x00,0x49,0x02,0x00,0x00,0x51,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x54,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x54,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xbf,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0xd6,0x00,0x00,0x00, -0xba,0x02,0x00,0x00,0x57,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0x5a,0x02,0x00,0x00,0xbf,0x02,0x00,0x00, -0xbf,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x56,0x02,0x00,0x00, -0x57,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x5a,0x02,0x00,0x00,0x55,0x02,0x00,0x00,0x56,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x55,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x5c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x5c,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xc0,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0x55,0x02,0x00,0x00,0xb8,0x02,0x00,0x00, -0x5f,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0x62,0x02,0x00,0x00,0xc0,0x02,0x00,0x00,0x60,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x5e,0x02,0x00,0x00,0x5f,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x62,0x02,0x00,0x00, -0x5d,0x02,0x00,0x00,0x5e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x5d,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x66,0x02,0x00,0x00,0xc0,0x02,0x00,0x00,0x61,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x67,0x02,0x00,0x00, -0x3c,0x02,0x00,0x00,0x66,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x69,0x02,0x00,0x00,0x64,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x6a,0x02,0x00,0x00,0x67,0x02,0x00,0x00,0x69,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6e,0x02,0x00,0x00, -0xbf,0x02,0x00,0x00,0xdc,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x6f,0x02,0x00,0x00,0x42,0x02,0x00,0x00, -0x6e,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x71,0x02,0x00,0x00,0x68,0x00,0x00,0x00,0xbc,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x72,0x02,0x00,0x00, -0x6f,0x02,0x00,0x00,0x71,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x74,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x74,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xc2,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0x5d,0x02,0x00,0x00,0xb6,0x02,0x00,0x00, -0x77,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0x7a,0x02,0x00,0x00,0xc2,0x02,0x00,0x00,0xbc,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x76,0x02,0x00,0x00,0x77,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x7a,0x02,0x00,0x00, -0x75,0x02,0x00,0x00,0x76,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x75,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x7c,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x7c,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xc4,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0x75,0x02,0x00,0x00,0xb4,0x02,0x00,0x00,0x7f,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x82,0x02,0x00,0x00, -0xc4,0x02,0x00,0x00,0x62,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x7e,0x02,0x00,0x00,0x7f,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x82,0x02,0x00,0x00,0x7d,0x02,0x00,0x00, -0x7e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x7d,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x85,0x02,0x00,0x00, -0x6a,0x02,0x00,0x00,0xc4,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0x88,0x02,0x00,0x00,0x85,0x02,0x00,0x00, -0x36,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x8a,0x02,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x88,0x02,0x00,0x00, -0x89,0x02,0x00,0x00,0x8a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x89,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x8d,0x02,0x00,0x00,0x72,0x02,0x00,0x00,0xc2,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x8e,0x02,0x00,0x00, -0x12,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x8f,0x02,0x00,0x00,0x8e,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x90,0x02,0x00,0x00, -0x8d,0x02,0x00,0x00,0x8f,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x8a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x8a,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0xc2,0x00,0x00,0x00,0x91,0x02,0x00,0x00, -0x88,0x02,0x00,0x00,0x7d,0x02,0x00,0x00,0x90,0x02,0x00,0x00, -0x89,0x02,0x00,0x00,0xf7,0x00,0x03,0x00,0x93,0x02,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x91,0x02,0x00,0x00, -0x92,0x02,0x00,0x00,0x93,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x92,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9b,0x02,0x00,0x00,0x72,0x02,0x00,0x00,0xc2,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x9d,0x02,0x00,0x00, -0x12,0x00,0x00,0x00,0x9c,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x9e,0x02,0x00,0x00,0x9d,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9f,0x02,0x00,0x00, -0x9b,0x02,0x00,0x00,0x9e,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa0,0x02,0x00,0x00,0x52,0x02,0x00,0x00, -0x9f,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa2,0x02,0x00,0x00,0xa0,0x02,0x00,0x00,0x6a,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa4,0x02,0x00,0x00, -0xa2,0x02,0x00,0x00,0xc4,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa6,0x02,0x00,0x00,0xbf,0x02,0x00,0x00, -0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa8,0x02,0x00,0x00,0xa6,0x02,0x00,0x00,0xc2,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xaa,0x02,0x00,0x00, -0xa8,0x02,0x00,0x00,0xa9,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xac,0x02,0x00,0x00,0xc0,0x02,0x00,0x00, -0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xad,0x02,0x00,0x00,0xaa,0x02,0x00,0x00,0xac,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xaf,0x02,0x00,0x00, -0xad,0x02,0x00,0x00,0xc4,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0xcd,0x00,0x00,0x00,0xb0,0x02,0x00,0x00,0xca,0x00,0x00,0x00, -0xaf,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0xb1,0x02,0x00,0x00,0xb0,0x02,0x00,0x00,0x41,0x00,0x06,0x00, -0x69,0x01,0x00,0x00,0xb2,0x02,0x00,0x00,0x97,0x02,0x00,0x00, -0x34,0x00,0x00,0x00,0xa4,0x02,0x00,0x00,0x3e,0x00,0x03,0x00, -0xb2,0x02,0x00,0x00,0xb1,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x93,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x93,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x7f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x7f,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xb4,0x02,0x00,0x00,0xc4,0x02,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x7c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x7e,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x77,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x77,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xb6,0x02,0x00,0x00,0xc2,0x02,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x74,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x76,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x5f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x5f,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb8,0x02,0x00,0x00, -0xc0,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x5c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x5e,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x57,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x57,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xba,0x02,0x00,0x00,0xbf,0x02,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x54,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x56,0x02,0x00,0x00,0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00, - -}; -const uint64_t matmul_q4_1_f32_aligned_fp32_len = 10476; - -unsigned char matmul_q4_1_f32_fp32_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0xef,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00, -0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00, -0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64, -0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00, -0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0f,0x00,0x0f,0x00, -0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e, -0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x3d,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x07,0x01,0x00,0x00, -0x2c,0x01,0x00,0x00,0x5d,0x01,0x00,0x00,0x68,0x01,0x00,0x00, -0x4e,0x02,0x00,0x00,0x97,0x02,0x00,0x00,0x10,0x00,0x06,0x00, -0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x34,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x10,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x37,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x3d,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x4c,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x4f,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x53,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x60,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x62,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x6c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xa6,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xb8,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xbb,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x02,0x01,0x00,0x00,0x06,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x03,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x03,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x03,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x04,0x01,0x00,0x00, -0x06,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0x05,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x05,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x05,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x07,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x07,0x01,0x00,0x00,0x21,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x37,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x38,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x65,0x01,0x00,0x00,0x06,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x66,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x66,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x66,0x01,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x68,0x01,0x00,0x00, -0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x68,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x4e,0x02,0x00,0x00,0x0b,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x94,0x02,0x00,0x00, -0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0x95,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x95,0x02,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x95,0x02,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x97,0x02,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x97,0x02,0x00,0x00,0x21,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00, -0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x1e,0x00,0x10,0x00,0x10,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x11,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x11,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x15,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0x0a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x27,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x3e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x61,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x63,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x61,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x67,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x61,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x72,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x85,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x90,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0xa1,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xa6,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xb7,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xb9,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0xb8,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xba,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x4f,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xbb,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xba,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xbc,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0xb9,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xb7,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xbf,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x14,0x00,0x02,0x00, -0xc1,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0xc3,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xc4,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xc5,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc4,0x00,0x00,0x00, -0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xc6,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc5,0x00,0x00,0x00, -0xbb,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xc7,0x00,0x00,0x00, -0xc3,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0xc8,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xc7,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0xcb,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xcc,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xf3,0x00,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xf9,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xfd,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x16,0x00,0x03,0x00, -0x00,0x01,0x00,0x00,0x10,0x00,0x00,0x00,0x15,0x00,0x04,0x00, -0x01,0x01,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x1c,0x00,0x04,0x00,0x02,0x01,0x00,0x00,0x01,0x01,0x00,0x00, -0xf9,0x00,0x00,0x00,0x1e,0x00,0x05,0x00,0x03,0x01,0x00,0x00, -0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x02,0x01,0x00,0x00, -0x1d,0x00,0x03,0x00,0x04,0x01,0x00,0x00,0x03,0x01,0x00,0x00, -0x1e,0x00,0x03,0x00,0x05,0x01,0x00,0x00,0x04,0x01,0x00,0x00, -0x20,0x00,0x04,0x00,0x06,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x05,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x06,0x01,0x00,0x00, -0x07,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x09,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x00,0x01,0x00,0x00, -0x20,0x00,0x04,0x00,0x15,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x01,0x01,0x00,0x00,0x17,0x00,0x04,0x00,0x19,0x01,0x00,0x00, -0xc3,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x28,0x01,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x29,0x01,0x00,0x00,0x84,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x28,0x01,0x00,0x00,0x1c,0x00,0x04,0x00, -0x2a,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,0x29,0x01,0x00,0x00, -0x20,0x00,0x04,0x00,0x2b,0x01,0x00,0x00,0x04,0x00,0x00,0x00, -0x2a,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x2b,0x01,0x00,0x00, -0x2c,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x30,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0xc3,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x37,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00,0x09,0x00,0x00,0x00, -0x38,0x01,0x00,0x00,0x37,0x01,0x00,0x00,0x39,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x39,0x01,0x00,0x00,0x51,0x00,0x00,0x00,0x38,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x3a,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x39,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x3b,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x3a,0x01,0x00,0x00, -0x6c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x59,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x5a,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0xa6,0x00,0x00,0x00, -0x59,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,0x5b,0x01,0x00,0x00, -0xc3,0x00,0x00,0x00,0x5a,0x01,0x00,0x00,0x20,0x00,0x04,0x00, -0x5c,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x5b,0x01,0x00,0x00, -0x3b,0x00,0x04,0x00,0x5c,0x01,0x00,0x00,0x5d,0x01,0x00,0x00, -0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x61,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x65,0x01,0x00,0x00, -0xc3,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x66,0x01,0x00,0x00, -0x65,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x67,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x66,0x01,0x00,0x00,0x3b,0x00,0x04,0x00, -0x67,0x01,0x00,0x00,0x68,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x73,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0xc3,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x7b,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x80,0x01,0x00,0x00,0x51,0x00,0x00,0x00,0x38,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x81,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x80,0x01,0x00,0x00, -0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x82,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x81,0x01,0x00,0x00, -0x6c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x85,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x86,0x01,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x89,0x01,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xa4,0x01,0x00,0x00,0x84,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x1c,0x00,0x04,0x00, -0xa5,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,0xa4,0x01,0x00,0x00, -0x20,0x00,0x04,0x00,0xa6,0x01,0x00,0x00,0x07,0x00,0x00,0x00, -0xa5,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xb6,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xd1,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0xbe,0x00,0x00,0x00, -0xbb,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xd2,0x01,0x00,0x00, -0xc3,0x00,0x00,0x00,0xd1,0x01,0x00,0x00,0x20,0x00,0x04,0x00, -0xd3,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0xd2,0x01,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xdc,0x01,0x00,0x00, -0x86,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0xbe,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xe4,0x01,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x13,0x02,0x00,0x00, -0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x46,0x02,0x00,0x00, -0x0d,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x4e,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x1d,0x00,0x03,0x00, -0x94,0x02,0x00,0x00,0xc3,0x00,0x00,0x00,0x1e,0x00,0x03,0x00, -0x95,0x02,0x00,0x00,0x94,0x02,0x00,0x00,0x20,0x00,0x04,0x00, -0x96,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x95,0x02,0x00,0x00, -0x3b,0x00,0x04,0x00,0x96,0x02,0x00,0x00,0x97,0x02,0x00,0x00, -0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x9c,0x02,0x00,0x00,0x05,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xa9,0x02,0x00,0x00,0x84,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x36,0x00,0x05,0x00, -0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0xc8,0x00,0x00,0x00,0xc9,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xa6,0x01,0x00,0x00, -0xa7,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0xd3,0x01,0x00,0x00,0xd4,0x01,0x00,0x00,0x07,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x16,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x16,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x17,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x24,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2a,0x00,0x00,0x00, -0x1e,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x2d,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x2f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x24,0x00,0x00,0x00, -0x2f,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x2a,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x35,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x35,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x38,0x00,0x00,0x00, -0x36,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x82,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x38,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x3b,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x3f,0x00,0x00,0x00, -0x3d,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x3f,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x42,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x3b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x49,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4a,0x00,0x00,0x00, -0x49,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x4d,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x3e,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x4d,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x50,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00, -0x50,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x50,0x00,0x00,0x00, -0x58,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x5d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x64,0x00,0x00,0x00, -0x5d,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x5d,0x00,0x00,0x00, -0x67,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x6e,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x6d,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x73,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x72,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x77,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x7d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x7c,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x81,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x81,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x83,0x00,0x00,0x00, -0x47,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x85,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x87,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x47,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x8c,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x82,0x00,0x00,0x00, -0x0c,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x8d,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x26,0x00,0x00,0x00,0x87,0x00,0x00,0x00, -0x8c,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x91,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x90,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x92,0x00,0x00,0x00, -0x91,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x93,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x92,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x95,0x00,0x00,0x00, -0x42,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x96,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x98,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x95,0x00,0x00,0x00, -0x98,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9a,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x99,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9c,0x00,0x00,0x00, -0x9a,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,0x9c,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0xa2,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0xa1,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa3,0x00,0x00,0x00, -0xa2,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa4,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0xa3,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa7,0x00,0x00,0x00, -0x4a,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0xa8,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xaa,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0xa7,0x00,0x00,0x00, -0xaa,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xac,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0xab,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xae,0x00,0x00,0x00, -0xac,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0xae,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb1,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xb1,0x00,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xbd,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0x05,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0xb2,0x00,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xc2,0x00,0x00,0x00, -0xbd,0x02,0x00,0x00,0xc0,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xb3,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xc2,0x00,0x00,0x00,0xb2,0x00,0x00,0x00, -0xb3,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb2,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,0xcd,0x00,0x00,0x00, -0xc9,0x00,0x00,0x00,0xbd,0x02,0x00,0x00,0x3e,0x00,0x03,0x00, -0xcd,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0xbd,0x02,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb1,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xb3,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xd3,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd3,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xd6,0x02,0x00,0x00, -0xaf,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0x8b,0x01,0x00,0x00, -0xd6,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xd2,0x02,0x00,0x00,0x9d,0x00,0x00,0x00,0xb3,0x00,0x00,0x00, -0x88,0x01,0x00,0x00,0xd6,0x00,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xbe,0x02,0x00,0x00,0x83,0x00,0x00,0x00, -0xb3,0x00,0x00,0x00,0x36,0x02,0x00,0x00,0xd6,0x00,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xda,0x00,0x00,0x00, -0xbe,0x02,0x00,0x00,0x8d,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xd5,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xda,0x00,0x00,0x00,0xd4,0x00,0x00,0x00, -0xd5,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd4,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xdc,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xdc,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xce,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0xd4,0x00,0x00,0x00, -0x3d,0x01,0x00,0x00,0xdd,0x00,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0xe2,0x00,0x00,0x00,0xce,0x02,0x00,0x00, -0x37,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xde,0x00,0x00,0x00, -0xdd,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xe2,0x00,0x00,0x00,0xdd,0x00,0x00,0x00,0xde,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,0x73,0x00,0x00,0x00, -0xce,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xea,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,0x98,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xeb,0x00,0x00,0x00, -0xea,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xec,0x00,0x00,0x00,0xd2,0x02,0x00,0x00, -0xeb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xee,0x00,0x00,0x00,0xec,0x00,0x00,0x00,0x6e,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf4,0x00,0x00,0x00, -0xe7,0x00,0x00,0x00,0xf3,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,0xf4,0x00,0x00,0x00, -0x6e,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xfa,0x00,0x00,0x00,0xee,0x00,0x00,0x00,0xf9,0x00,0x00,0x00, -0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfe,0x00,0x00,0x00, -0xee,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,0x41,0x00,0x07,0x00, -0x09,0x01,0x00,0x00,0x0a,0x01,0x00,0x00,0x07,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x00,0x01,0x00,0x00,0x0b,0x01,0x00,0x00, -0x0a,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0xc3,0x00,0x00,0x00, -0x0c,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,0x41,0x00,0x07,0x00, -0x09,0x01,0x00,0x00,0x0f,0x01,0x00,0x00,0x07,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0xcf,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x00,0x01,0x00,0x00,0x10,0x01,0x00,0x00, -0x0f,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0xc3,0x00,0x00,0x00, -0x11,0x01,0x00,0x00,0x10,0x01,0x00,0x00,0x41,0x00,0x08,0x00, -0x15,0x01,0x00,0x00,0x16,0x01,0x00,0x00,0x07,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0x85,0x00,0x00,0x00, -0xfe,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x01,0x01,0x00,0x00, -0x17,0x01,0x00,0x00,0x16,0x01,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x18,0x01,0x00,0x00,0x17,0x01,0x00,0x00, -0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1d,0x01,0x00,0x00, -0x18,0x01,0x00,0x00,0xfd,0x00,0x00,0x00,0x70,0x00,0x04,0x00, -0xc3,0x00,0x00,0x00,0x1e,0x01,0x00,0x00,0x1d,0x01,0x00,0x00, -0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x20,0x01,0x00,0x00, -0x18,0x01,0x00,0x00,0xa8,0x00,0x00,0x00,0x70,0x00,0x04,0x00, -0xc3,0x00,0x00,0x00,0x21,0x01,0x00,0x00,0x20,0x01,0x00,0x00, -0x50,0x00,0x05,0x00,0x19,0x01,0x00,0x00,0x22,0x01,0x00,0x00, -0x1e,0x01,0x00,0x00,0x21,0x01,0x00,0x00,0x8e,0x00,0x05,0x00, -0x19,0x01,0x00,0x00,0x24,0x01,0x00,0x00,0x22,0x01,0x00,0x00, -0x0c,0x01,0x00,0x00,0x50,0x00,0x05,0x00,0x19,0x01,0x00,0x00, -0x26,0x01,0x00,0x00,0x11,0x01,0x00,0x00,0x11,0x01,0x00,0x00, -0x81,0x00,0x05,0x00,0x19,0x01,0x00,0x00,0x27,0x01,0x00,0x00, -0x24,0x01,0x00,0x00,0x26,0x01,0x00,0x00,0x51,0x00,0x05,0x00, -0xc3,0x00,0x00,0x00,0x2f,0x01,0x00,0x00,0x27,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x30,0x01,0x00,0x00, -0x31,0x01,0x00,0x00,0x2c,0x01,0x00,0x00,0xf6,0x00,0x00,0x00, -0x3e,0x00,0x03,0x00,0x31,0x01,0x00,0x00,0x2f,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x33,0x01,0x00,0x00, -0xf6,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,0x51,0x00,0x05,0x00, -0xc3,0x00,0x00,0x00,0x35,0x01,0x00,0x00,0x27,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x30,0x01,0x00,0x00, -0x36,0x01,0x00,0x00,0x2c,0x01,0x00,0x00,0x33,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0x36,0x01,0x00,0x00,0x35,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3d,0x01,0x00,0x00, -0xce,0x02,0x00,0x00,0x3b,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xdc,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x3f,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x3f,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xcf,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0xde,0x00,0x00,0x00, -0x84,0x01,0x00,0x00,0x42,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0x45,0x01,0x00,0x00,0xcf,0x02,0x00,0x00, -0xa6,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x41,0x01,0x00,0x00, -0x42,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x45,0x01,0x00,0x00,0x40,0x01,0x00,0x00,0x41,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x40,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x49,0x01,0x00,0x00,0xa7,0x00,0x00,0x00, -0x7d,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x4b,0x01,0x00,0x00,0x49,0x01,0x00,0x00,0xcf,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x4c,0x01,0x00,0x00, -0x12,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x4d,0x01,0x00,0x00,0x4c,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x4e,0x01,0x00,0x00, -0x4b,0x01,0x00,0x00,0x4d,0x01,0x00,0x00,0xf7,0x00,0x03,0x00, -0x50,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x4e,0x01,0x00,0x00,0x4f,0x01,0x00,0x00,0x50,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x4f,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x53,0x01,0x00,0x00,0xbe,0x02,0x00,0x00, -0x78,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0x55,0x01,0x00,0x00,0x53,0x01,0x00,0x00,0x8d,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x50,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x50,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0xc1,0x00,0x00,0x00, -0x56,0x01,0x00,0x00,0x4e,0x01,0x00,0x00,0x40,0x01,0x00,0x00, -0x55,0x01,0x00,0x00,0x4f,0x01,0x00,0x00,0xf7,0x00,0x03,0x00, -0x58,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x56,0x01,0x00,0x00,0x57,0x01,0x00,0x00,0x77,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x57,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x60,0x01,0x00,0x00,0x7d,0x00,0x00,0x00, -0xcf,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x62,0x01,0x00,0x00,0x60,0x01,0x00,0x00,0x61,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x64,0x01,0x00,0x00, -0x62,0x01,0x00,0x00,0x78,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x6f,0x01,0x00,0x00,0x60,0x01,0x00,0x00, -0xaa,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x70,0x01,0x00,0x00,0xd6,0x02,0x00,0x00,0x6f,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x72,0x01,0x00,0x00, -0x70,0x01,0x00,0x00,0x78,0x00,0x00,0x00,0x41,0x00,0x06,0x00, -0x73,0x01,0x00,0x00,0x74,0x01,0x00,0x00,0x68,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0x72,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc3,0x00,0x00,0x00,0x75,0x01,0x00,0x00,0x74,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x30,0x01,0x00,0x00,0x76,0x01,0x00,0x00, -0x5d,0x01,0x00,0x00,0x64,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0x76,0x01,0x00,0x00,0x75,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0x58,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x77,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7a,0x01,0x00,0x00, -0x7d,0x00,0x00,0x00,0xcf,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x7c,0x01,0x00,0x00,0x7a,0x01,0x00,0x00, -0x7b,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x7e,0x01,0x00,0x00,0x7c,0x01,0x00,0x00,0x78,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x30,0x01,0x00,0x00,0x7f,0x01,0x00,0x00, -0x5d,0x01,0x00,0x00,0x7e,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0x7f,0x01,0x00,0x00,0xcb,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x58,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x58,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0x42,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x42,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x84,0x01,0x00,0x00,0xcf,0x02,0x00,0x00,0x82,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0x3f,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x41,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x85,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x88,0x01,0x00,0x00,0xd2,0x02,0x00,0x00, -0x86,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x8b,0x01,0x00,0x00,0xd6,0x02,0x00,0x00,0x89,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0x8d,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x8d,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xd8,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0x41,0x01,0x00,0x00, -0x34,0x02,0x00,0x00,0x90,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0x93,0x01,0x00,0x00,0xd8,0x02,0x00,0x00, -0x6c,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x8f,0x01,0x00,0x00, -0x90,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x93,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,0x8f,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x8e,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0x95,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x95,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xdc,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0x8e,0x01,0x00,0x00,0xc0,0x01,0x00,0x00, -0x98,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0x9b,0x01,0x00,0x00,0xdc,0x02,0x00,0x00,0x60,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x97,0x01,0x00,0x00,0x98,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x9b,0x01,0x00,0x00, -0x96,0x01,0x00,0x00,0x97,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x96,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x9d,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x9d,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xee,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0x96,0x01,0x00,0x00,0xbe,0x01,0x00,0x00,0x9e,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xa3,0x01,0x00,0x00, -0xee,0x02,0x00,0x00,0x62,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x9f,0x01,0x00,0x00,0x9e,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xa3,0x01,0x00,0x00,0x9e,0x01,0x00,0x00, -0x9f,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x9e,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa9,0x01,0x00,0x00, -0xdc,0x02,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xab,0x01,0x00,0x00,0xa9,0x01,0x00,0x00, -0xee,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xad,0x01,0x00,0x00,0x55,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xaf,0x01,0x00,0x00, -0xdc,0x02,0x00,0x00,0x61,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xb0,0x01,0x00,0x00,0xad,0x01,0x00,0x00, -0xaf,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xb2,0x01,0x00,0x00,0x64,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb3,0x01,0x00,0x00, -0xb0,0x01,0x00,0x00,0xb2,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xb5,0x01,0x00,0x00,0xb3,0x01,0x00,0x00, -0xee,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xb7,0x01,0x00,0x00,0xb5,0x01,0x00,0x00,0xb6,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb9,0x01,0x00,0x00, -0xb7,0x01,0x00,0x00,0xd8,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0x30,0x01,0x00,0x00,0xba,0x01,0x00,0x00,0x2c,0x01,0x00,0x00, -0xb9,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00, -0xbb,0x01,0x00,0x00,0xba,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0xcc,0x00,0x00,0x00,0xbc,0x01,0x00,0x00,0xa7,0x01,0x00,0x00, -0xab,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xbc,0x01,0x00,0x00, -0xbb,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xbe,0x01,0x00,0x00,0xee,0x02,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x9d,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x9f,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x98,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x98,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xc0,0x01,0x00,0x00,0xdc,0x02,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x95,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x97,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xc2,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xc2,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xdd,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0x97,0x01,0x00,0x00,0xee,0x01,0x00,0x00, -0xc5,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0xc8,0x01,0x00,0x00,0xdd,0x02,0x00,0x00,0xbe,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xc4,0x01,0x00,0x00,0xc5,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xc8,0x01,0x00,0x00, -0xc3,0x01,0x00,0x00,0xc4,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xc3,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xca,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xca,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xeb,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0xc3,0x01,0x00,0x00,0xec,0x01,0x00,0x00,0xcb,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xd0,0x01,0x00,0x00, -0xeb,0x02,0x00,0x00,0xbb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xcc,0x01,0x00,0x00,0xcb,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xd0,0x01,0x00,0x00,0xcb,0x01,0x00,0x00, -0xcc,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xcb,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd6,0x01,0x00,0x00, -0xdd,0x02,0x00,0x00,0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xd8,0x01,0x00,0x00,0xd6,0x01,0x00,0x00, -0xeb,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xda,0x01,0x00,0x00,0x59,0x00,0x00,0x00,0xb8,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdd,0x01,0x00,0x00, -0xdd,0x02,0x00,0x00,0xdc,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xde,0x01,0x00,0x00,0xda,0x01,0x00,0x00, -0xdd,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xe0,0x01,0x00,0x00,0x68,0x00,0x00,0x00,0xbb,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe1,0x01,0x00,0x00, -0xde,0x01,0x00,0x00,0xe0,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xe3,0x01,0x00,0x00,0xe1,0x01,0x00,0x00, -0xeb,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xe5,0x01,0x00,0x00,0xe3,0x01,0x00,0x00,0xe4,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe7,0x01,0x00,0x00, -0xe5,0x01,0x00,0x00,0xd8,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0x30,0x01,0x00,0x00,0xe8,0x01,0x00,0x00,0x5d,0x01,0x00,0x00, -0xe7,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00, -0xe9,0x01,0x00,0x00,0xe8,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0xcc,0x00,0x00,0x00,0xea,0x01,0x00,0x00,0xd4,0x01,0x00,0x00, -0xd8,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xea,0x01,0x00,0x00, -0xe9,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xec,0x01,0x00,0x00,0xeb,0x02,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xca,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xcc,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xc5,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xc5,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xee,0x01,0x00,0x00,0xdd,0x02,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xc2,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xc4,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xf0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xf0,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xde,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0xc4,0x01,0x00,0x00,0x32,0x02,0x00,0x00, -0xf3,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0xf6,0x01,0x00,0x00,0xde,0x02,0x00,0x00,0xbe,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xf2,0x01,0x00,0x00,0xf3,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xf6,0x01,0x00,0x00, -0xf1,0x01,0x00,0x00,0xf2,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xf1,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xf8,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xf8,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xe2,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0xf1,0x01,0x00,0x00,0x30,0x02,0x00,0x00,0xfb,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xfe,0x01,0x00,0x00, -0xe2,0x02,0x00,0x00,0x60,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xfa,0x01,0x00,0x00,0xfb,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xfe,0x01,0x00,0x00,0xf9,0x01,0x00,0x00, -0xfa,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xf9,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0x00,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x00,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xe4,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0xf9,0x01,0x00,0x00, -0x2e,0x02,0x00,0x00,0x03,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0x06,0x02,0x00,0x00,0xe4,0x02,0x00,0x00, -0xbb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x02,0x02,0x00,0x00, -0x03,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x06,0x02,0x00,0x00,0x01,0x02,0x00,0x00,0x02,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x01,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x08,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x08,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xe6,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0x01,0x02,0x00,0x00,0x2c,0x02,0x00,0x00, -0x09,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0x0e,0x02,0x00,0x00,0xe6,0x02,0x00,0x00,0x62,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x0a,0x02,0x00,0x00,0x09,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x0e,0x02,0x00,0x00, -0x09,0x02,0x00,0x00,0x0a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x09,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x10,0x02,0x00,0x00,0xde,0x02,0x00,0x00,0xbb,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x12,0x02,0x00,0x00, -0x10,0x02,0x00,0x00,0xe4,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x14,0x02,0x00,0x00,0x12,0x02,0x00,0x00, -0x13,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x16,0x02,0x00,0x00,0xe2,0x02,0x00,0x00,0x62,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x17,0x02,0x00,0x00, -0x14,0x02,0x00,0x00,0x16,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x19,0x02,0x00,0x00,0x17,0x02,0x00,0x00, -0xe6,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x1d,0x02,0x00,0x00,0x16,0x02,0x00,0x00,0xe6,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,0x1e,0x02,0x00,0x00, -0xa7,0x01,0x00,0x00,0x1d,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc3,0x00,0x00,0x00,0x1f,0x02,0x00,0x00,0x1e,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,0x24,0x02,0x00,0x00, -0xd4,0x01,0x00,0x00,0x12,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc3,0x00,0x00,0x00,0x25,0x02,0x00,0x00,0x24,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,0x27,0x02,0x00,0x00, -0xc9,0x00,0x00,0x00,0x19,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc3,0x00,0x00,0x00,0x28,0x02,0x00,0x00,0x27,0x02,0x00,0x00, -0x0c,0x00,0x08,0x00,0xc3,0x00,0x00,0x00,0x29,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x1f,0x02,0x00,0x00, -0x25,0x02,0x00,0x00,0x28,0x02,0x00,0x00,0x3e,0x00,0x03,0x00, -0x27,0x02,0x00,0x00,0x29,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x2c,0x02,0x00,0x00,0xe6,0x02,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x08,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x0a,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x03,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x03,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2e,0x02,0x00,0x00, -0xe4,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x00,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x02,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0xfb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xfb,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x30,0x02,0x00,0x00,0xe2,0x02,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xf8,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xfa,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xf3,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xf3,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x32,0x02,0x00,0x00,0xde,0x02,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xf0,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xf2,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0x90,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x90,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x34,0x02,0x00,0x00, -0xd8,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x8d,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x8f,0x01,0x00,0x00, -0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x85,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xd6,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xd6,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x36,0x02,0x00,0x00,0xbe,0x02,0x00,0x00, -0x6c,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd3,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xd5,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3b,0x02,0x00,0x00,0x55,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x3c,0x02,0x00,0x00,0x95,0x00,0x00,0x00,0x3b,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x41,0x02,0x00,0x00, -0x59,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x42,0x02,0x00,0x00,0xa7,0x00,0x00,0x00, -0x41,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x47,0x02,0x00,0x00,0x12,0x00,0x00,0x00,0x46,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x48,0x02,0x00,0x00, -0x47,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x49,0x02,0x00,0x00,0x0f,0x00,0x00,0x00,0x48,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4d,0x02,0x00,0x00, -0x47,0x00,0x00,0x00,0x48,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0x4f,0x02,0x00,0x00,0x4e,0x02,0x00,0x00, -0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x50,0x02,0x00,0x00,0x4f,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x51,0x02,0x00,0x00,0x4d,0x02,0x00,0x00, -0x50,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x52,0x02,0x00,0x00,0x49,0x02,0x00,0x00,0x51,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x54,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x54,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xbf,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0xd5,0x00,0x00,0x00, -0xba,0x02,0x00,0x00,0x57,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0x5a,0x02,0x00,0x00,0xbf,0x02,0x00,0x00, -0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x56,0x02,0x00,0x00, -0x57,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x5a,0x02,0x00,0x00,0x55,0x02,0x00,0x00,0x56,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x55,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x5c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x5c,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xc0,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0x55,0x02,0x00,0x00,0xb8,0x02,0x00,0x00, -0x5f,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0x62,0x02,0x00,0x00,0xc0,0x02,0x00,0x00,0x60,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x5e,0x02,0x00,0x00,0x5f,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x62,0x02,0x00,0x00, -0x5d,0x02,0x00,0x00,0x5e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x5d,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x66,0x02,0x00,0x00,0xc0,0x02,0x00,0x00,0x61,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x67,0x02,0x00,0x00, -0x3c,0x02,0x00,0x00,0x66,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x69,0x02,0x00,0x00,0x64,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x6a,0x02,0x00,0x00,0x67,0x02,0x00,0x00,0x69,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6e,0x02,0x00,0x00, -0xbf,0x02,0x00,0x00,0xdc,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x6f,0x02,0x00,0x00,0x42,0x02,0x00,0x00, -0x6e,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x71,0x02,0x00,0x00,0x68,0x00,0x00,0x00,0xbb,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x72,0x02,0x00,0x00, -0x6f,0x02,0x00,0x00,0x71,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x74,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x74,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xc2,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0x5d,0x02,0x00,0x00,0xb6,0x02,0x00,0x00, -0x77,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0x7a,0x02,0x00,0x00,0xc2,0x02,0x00,0x00,0xbb,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x76,0x02,0x00,0x00,0x77,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x7a,0x02,0x00,0x00, -0x75,0x02,0x00,0x00,0x76,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x75,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x7c,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x7c,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xc4,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0x75,0x02,0x00,0x00,0xb4,0x02,0x00,0x00,0x7f,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x82,0x02,0x00,0x00, -0xc4,0x02,0x00,0x00,0x62,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x7e,0x02,0x00,0x00,0x7f,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x82,0x02,0x00,0x00,0x7d,0x02,0x00,0x00, -0x7e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x7d,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x85,0x02,0x00,0x00, -0x6a,0x02,0x00,0x00,0xc4,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0x88,0x02,0x00,0x00,0x85,0x02,0x00,0x00, -0x36,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x8a,0x02,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x88,0x02,0x00,0x00, -0x89,0x02,0x00,0x00,0x8a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x89,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x8d,0x02,0x00,0x00,0x72,0x02,0x00,0x00,0xc2,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x8e,0x02,0x00,0x00, -0x12,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x8f,0x02,0x00,0x00,0x8e,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x90,0x02,0x00,0x00, -0x8d,0x02,0x00,0x00,0x8f,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x8a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x8a,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0xc1,0x00,0x00,0x00,0x91,0x02,0x00,0x00, -0x88,0x02,0x00,0x00,0x7d,0x02,0x00,0x00,0x90,0x02,0x00,0x00, -0x89,0x02,0x00,0x00,0xf7,0x00,0x03,0x00,0x93,0x02,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x91,0x02,0x00,0x00, -0x92,0x02,0x00,0x00,0x93,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x92,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9b,0x02,0x00,0x00,0x72,0x02,0x00,0x00,0xc2,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x9d,0x02,0x00,0x00, -0x12,0x00,0x00,0x00,0x9c,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x9e,0x02,0x00,0x00,0x9d,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9f,0x02,0x00,0x00, -0x9b,0x02,0x00,0x00,0x9e,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa0,0x02,0x00,0x00,0x52,0x02,0x00,0x00, -0x9f,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa2,0x02,0x00,0x00,0xa0,0x02,0x00,0x00,0x6a,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa4,0x02,0x00,0x00, -0xa2,0x02,0x00,0x00,0xc4,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa6,0x02,0x00,0x00,0xbf,0x02,0x00,0x00, -0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa8,0x02,0x00,0x00,0xa6,0x02,0x00,0x00,0xc2,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xaa,0x02,0x00,0x00, -0xa8,0x02,0x00,0x00,0xa9,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xac,0x02,0x00,0x00,0xc0,0x02,0x00,0x00, -0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xad,0x02,0x00,0x00,0xaa,0x02,0x00,0x00,0xac,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xaf,0x02,0x00,0x00, -0xad,0x02,0x00,0x00,0xc4,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0xcc,0x00,0x00,0x00,0xb0,0x02,0x00,0x00,0xc9,0x00,0x00,0x00, -0xaf,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00, -0xb1,0x02,0x00,0x00,0xb0,0x02,0x00,0x00,0x41,0x00,0x06,0x00, -0x73,0x01,0x00,0x00,0xb2,0x02,0x00,0x00,0x97,0x02,0x00,0x00, -0x34,0x00,0x00,0x00,0xa4,0x02,0x00,0x00,0x3e,0x00,0x03,0x00, -0xb2,0x02,0x00,0x00,0xb1,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x93,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x93,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x7f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x7f,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xb4,0x02,0x00,0x00,0xc4,0x02,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x7c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x7e,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x77,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x77,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xb6,0x02,0x00,0x00,0xc2,0x02,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x74,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x76,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x5f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x5f,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb8,0x02,0x00,0x00, -0xc0,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x5c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x5e,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x57,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x57,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xba,0x02,0x00,0x00,0xbf,0x02,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x54,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x56,0x02,0x00,0x00,0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00, - -}; -const uint64_t matmul_q4_1_f32_fp32_len = 10512; - -unsigned char matmul_q4_k_f32_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0x8e,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x09,0x00,0x00,0x00, -0x11,0x00,0x02,0x00,0x27,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00, -0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c, -0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00, -0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x0f,0x00,0x0f,0x00,0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x4c,0x00,0x00,0x00, -0x21,0x01,0x00,0x00,0x78,0x01,0x00,0x00,0xc6,0x01,0x00,0x00, -0xd1,0x01,0x00,0x00,0xbc,0x02,0x00,0x00,0x05,0x03,0x00,0x00, -0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x0a,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x0d,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x10,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x37,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x3d,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x4c,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x4f,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x53,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x60,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x62,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x6c,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xa6,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xb8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x1b,0x01,0x00,0x00, -0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x1c,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1d,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1d,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1d,0x01,0x00,0x00, -0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x1e,0x01,0x00,0x00,0x06,0x00,0x00,0x00, -0x90,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x1f,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1f,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x1f,0x01,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x21,0x01,0x00,0x00, -0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x21,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xa0,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xa1,0x01,0x00,0x00, -0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xce,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x04,0x00,0xcf,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0xcf,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0xcf,0x01,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xd1,0x01,0x00,0x00,0x22,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xd1,0x01,0x00,0x00, -0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xbc,0x02,0x00,0x00,0x0b,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x02,0x03,0x00,0x00,0x06,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x03,0x03,0x00,0x00, -0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x03,0x03,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x05,0x03,0x00,0x00, -0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x05,0x03,0x00,0x00,0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00, -0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x1e,0x00,0x10,0x00, -0x10,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x11,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x11,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x15,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x0a,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x27,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x2d,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x3e,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x4c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x54,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x58,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x63,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x67,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x6d,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x72,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x77,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x7c,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x80,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x90,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x96,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa6,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0xa8,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0xb8,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xba,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xbb,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xbc,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xba,0x00,0x00,0x00, -0xbb,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xbd,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xbc,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xbe,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0xb9,0x00,0x00,0x00, -0xbd,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xbf,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xb7,0x00,0x00,0x00, -0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xc0,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xbf,0x00,0x00,0x00, -0xbb,0x00,0x00,0x00,0x14,0x00,0x02,0x00,0xc1,0x00,0x00,0x00, -0x16,0x00,0x03,0x00,0xc3,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc4,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0xbe,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0xbb,0x00,0x00,0x00, -0x1c,0x00,0x04,0x00,0xc7,0x00,0x00,0x00,0xc3,0x00,0x00,0x00, -0xc6,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xc8,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0xc3,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0xcc,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0xc3,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0xcf,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xf3,0x00,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0x80,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x01,0x01,0x00,0x00, -0x20,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x06,0x01,0x00,0x00,0x10,0x00,0x00,0x00,0x17,0x00,0x04,0x00, -0x14,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x16,0x00,0x03,0x00,0x17,0x01,0x00,0x00,0x10,0x00,0x00,0x00, -0x17,0x00,0x04,0x00,0x18,0x01,0x00,0x00,0x17,0x01,0x00,0x00, -0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x19,0x01,0x00,0x00, -0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x1a,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x1c,0x00,0x04,0x00,0x1b,0x01,0x00,0x00,0x19,0x01,0x00,0x00, -0x1a,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,0x1c,0x01,0x00,0x00, -0x19,0x01,0x00,0x00,0xfa,0x00,0x00,0x00,0x1e,0x00,0x05,0x00, -0x1d,0x01,0x00,0x00,0x18,0x01,0x00,0x00,0x1b,0x01,0x00,0x00, -0x1c,0x01,0x00,0x00,0x1d,0x00,0x03,0x00,0x1e,0x01,0x00,0x00, -0x1d,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,0x1f,0x01,0x00,0x00, -0x1e,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x20,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x1f,0x01,0x00,0x00,0x3b,0x00,0x04,0x00, -0x20,0x01,0x00,0x00,0x21,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x23,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x18,0x01,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x28,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x30,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x19,0x01,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x35,0x01,0x00,0x00, -0x3f,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x37,0x01,0x00,0x00, -0x08,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x4d,0x01,0x00,0x00,0x0f,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x74,0x01,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x75,0x01,0x00,0x00, -0x84,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x74,0x01,0x00,0x00, -0x1c,0x00,0x04,0x00,0x76,0x01,0x00,0x00,0x17,0x01,0x00,0x00, -0x75,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x77,0x01,0x00,0x00, -0x04,0x00,0x00,0x00,0x76,0x01,0x00,0x00,0x3b,0x00,0x04,0x00, -0x77,0x01,0x00,0x00,0x78,0x01,0x00,0x00,0x04,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x8a,0x01,0x00,0x00,0x04,0x00,0x00,0x00, -0x17,0x01,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xa0,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00, -0x09,0x00,0x00,0x00,0xa1,0x01,0x00,0x00,0xa0,0x01,0x00,0x00, -0x39,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xa2,0x01,0x00,0x00,0x51,0x00,0x00,0x00, -0xa1,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xa3,0x01,0x00,0x00,0x84,0x00,0x00,0x00, -0xa2,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xa4,0x01,0x00,0x00,0x86,0x00,0x00,0x00, -0xa3,0x01,0x00,0x00,0x6c,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xc2,0x01,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xc3,0x01,0x00,0x00,0x84,0x00,0x00,0x00, -0xa6,0x00,0x00,0x00,0xc2,0x01,0x00,0x00,0x1c,0x00,0x04,0x00, -0xc4,0x01,0x00,0x00,0x17,0x01,0x00,0x00,0xc3,0x01,0x00,0x00, -0x20,0x00,0x04,0x00,0xc5,0x01,0x00,0x00,0x04,0x00,0x00,0x00, -0xc4,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0xc5,0x01,0x00,0x00, -0xc6,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xca,0x01,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x1d,0x00,0x03,0x00, -0xce,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,0x1e,0x00,0x03,0x00, -0xcf,0x01,0x00,0x00,0xce,0x01,0x00,0x00,0x20,0x00,0x04,0x00, -0xd0,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0xcf,0x01,0x00,0x00, -0x3b,0x00,0x04,0x00,0xd0,0x01,0x00,0x00,0xd1,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xdc,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xe5,0x01,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x17,0x01,0x00,0x00,0xe9,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xeb,0x01,0x00,0x00, -0x51,0x00,0x00,0x00,0xa1,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xec,0x01,0x00,0x00, -0x84,0x00,0x00,0x00,0xeb,0x01,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xed,0x01,0x00,0x00, -0x86,0x00,0x00,0x00,0xec,0x01,0x00,0x00,0x6c,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xf0,0x01,0x00,0x00, -0x08,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xf1,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xf4,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x0f,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x10,0x02,0x00,0x00, -0x17,0x01,0x00,0x00,0x0f,0x02,0x00,0x00,0x20,0x00,0x04,0x00, -0x11,0x02,0x00,0x00,0x07,0x00,0x00,0x00,0x10,0x02,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x21,0x02,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x27,0x02,0x00,0x00,0x07,0x00,0x00,0x00, -0x17,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x3d,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0xbe,0x00,0x00,0x00, -0xbb,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x3e,0x02,0x00,0x00, -0x17,0x01,0x00,0x00,0x3d,0x02,0x00,0x00,0x20,0x00,0x04,0x00, -0x3f,0x02,0x00,0x00,0x07,0x00,0x00,0x00,0x3e,0x02,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x48,0x02,0x00,0x00, -0x86,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0xbe,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x50,0x02,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x7f,0x02,0x00,0x00, -0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0xb4,0x02,0x00,0x00, -0x0d,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0xbc,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x1d,0x00,0x03,0x00, -0x02,0x03,0x00,0x00,0xc3,0x00,0x00,0x00,0x1e,0x00,0x03,0x00, -0x03,0x03,0x00,0x00,0x02,0x03,0x00,0x00,0x20,0x00,0x04,0x00, -0x04,0x03,0x00,0x00,0x0c,0x00,0x00,0x00,0x03,0x03,0x00,0x00, -0x3b,0x00,0x04,0x00,0x04,0x03,0x00,0x00,0x05,0x03,0x00,0x00, -0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x0a,0x03,0x00,0x00,0x05,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x17,0x03,0x00,0x00,0x84,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x36,0x00,0x05,0x00, -0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0xc8,0x00,0x00,0x00,0xc9,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x11,0x02,0x00,0x00, -0x12,0x02,0x00,0x00,0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x3f,0x02,0x00,0x00,0x40,0x02,0x00,0x00,0x07,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x16,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x16,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x17,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x24,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2a,0x00,0x00,0x00, -0x1e,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x2d,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x2f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x24,0x00,0x00,0x00, -0x2f,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x2a,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x35,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x35,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x38,0x00,0x00,0x00, -0x36,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x82,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x38,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x3b,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x3f,0x00,0x00,0x00, -0x3d,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x3f,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x42,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x3b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x49,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4a,0x00,0x00,0x00, -0x49,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x4d,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x3e,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x4d,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x50,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00, -0x50,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x50,0x00,0x00,0x00, -0x58,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x5d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x64,0x00,0x00,0x00, -0x5d,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x5d,0x00,0x00,0x00, -0x67,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x6e,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x6d,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x73,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x72,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x77,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x7d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x7c,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x81,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x81,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x83,0x00,0x00,0x00, -0x47,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x85,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x87,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x47,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x8c,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x82,0x00,0x00,0x00, -0x0c,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x8d,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x26,0x00,0x00,0x00,0x87,0x00,0x00,0x00, -0x8c,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x91,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x90,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x92,0x00,0x00,0x00, -0x91,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x93,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x92,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x95,0x00,0x00,0x00, -0x42,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x96,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x98,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x95,0x00,0x00,0x00, -0x98,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9a,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x99,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9c,0x00,0x00,0x00, -0x9a,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,0x9c,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0xa2,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0xa1,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa3,0x00,0x00,0x00, -0xa2,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa4,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0xa3,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa7,0x00,0x00,0x00, -0x4a,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0xa8,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xaa,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0xa7,0x00,0x00,0x00, -0xaa,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xac,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0xab,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xae,0x00,0x00,0x00, -0xac,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0xae,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb1,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xb1,0x00,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x2b,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0x05,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0xb2,0x00,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xc2,0x00,0x00,0x00, -0x2b,0x03,0x00,0x00,0xc0,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xb3,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xc2,0x00,0x00,0x00,0xb2,0x00,0x00,0x00, -0xb3,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb2,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,0xcd,0x00,0x00,0x00, -0xc9,0x00,0x00,0x00,0x2b,0x03,0x00,0x00,0x3e,0x00,0x03,0x00, -0xcd,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x2b,0x03,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb1,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xb3,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xd3,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd3,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x44,0x03,0x00,0x00, -0xaf,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0xf6,0x01,0x00,0x00, -0xd6,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x40,0x03,0x00,0x00,0x9d,0x00,0x00,0x00,0xb3,0x00,0x00,0x00, -0xf3,0x01,0x00,0x00,0xd6,0x00,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x2c,0x03,0x00,0x00,0x83,0x00,0x00,0x00, -0xb3,0x00,0x00,0x00,0xa4,0x02,0x00,0x00,0xd6,0x00,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xda,0x00,0x00,0x00, -0x2c,0x03,0x00,0x00,0x8d,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xd5,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xda,0x00,0x00,0x00,0xd4,0x00,0x00,0x00, -0xd5,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd4,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xdc,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xdc,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x3c,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0xd4,0x00,0x00,0x00, -0xa6,0x01,0x00,0x00,0xdf,0x00,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0xe2,0x00,0x00,0x00,0x3c,0x03,0x00,0x00, -0x37,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xde,0x00,0x00,0x00, -0xdf,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xe2,0x00,0x00,0x00,0xdd,0x00,0x00,0x00,0xde,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,0x73,0x00,0x00,0x00, -0x3c,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xea,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,0x98,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xeb,0x00,0x00,0x00, -0xea,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xec,0x00,0x00,0x00,0x40,0x03,0x00,0x00, -0xeb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xee,0x00,0x00,0x00,0xec,0x00,0x00,0x00,0x6e,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf4,0x00,0x00,0x00, -0xe7,0x00,0x00,0x00,0xf3,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,0x6e,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xf7,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,0xf6,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfb,0x00,0x00,0x00, -0xee,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0xee,0x00,0x00,0x00, -0xfa,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x02,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,0x01,0x01,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x05,0x01,0x00,0x00, -0xfe,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x07,0x01,0x00,0x00,0x05,0x01,0x00,0x00, -0x06,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x0a,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x02,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0c,0x01,0x00,0x00, -0x0a,0x01,0x00,0x00,0x07,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x0f,0x01,0x00,0x00,0x02,0x01,0x00,0x00, -0x01,0x01,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x11,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,0x06,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x12,0x01,0x00,0x00, -0x11,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x13,0x01,0x00,0x00,0x0f,0x01,0x00,0x00, -0x12,0x01,0x00,0x00,0x41,0x00,0x07,0x00,0x23,0x01,0x00,0x00, -0x24,0x01,0x00,0x00,0x21,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0xfb,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x18,0x01,0x00,0x00,0x25,0x01,0x00,0x00,0x24,0x01,0x00,0x00, -0x73,0x00,0x04,0x00,0x14,0x01,0x00,0x00,0x26,0x01,0x00,0x00, -0x25,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0x29,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,0x28,0x01,0x00,0x00, -0xf7,0x00,0x03,0x00,0x2b,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x29,0x01,0x00,0x00,0x2a,0x01,0x00,0x00, -0x45,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x2a,0x01,0x00,0x00, -0x41,0x00,0x08,0x00,0x30,0x01,0x00,0x00,0x31,0x01,0x00,0x00, -0x21,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0xfb,0x00,0x00,0x00, -0xcf,0x00,0x00,0x00,0x0c,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0x19,0x01,0x00,0x00,0x32,0x01,0x00,0x00,0x31,0x01,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x33,0x01,0x00,0x00, -0x32,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x34,0x01,0x00,0x00,0x33,0x01,0x00,0x00,0xc7,0x00,0x05,0x00, -0x13,0x00,0x00,0x00,0x36,0x01,0x00,0x00,0x34,0x01,0x00,0x00, -0x35,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0x37,0x01,0x00,0x00, -0x38,0x01,0x00,0x00,0x36,0x01,0x00,0x00,0x7c,0x00,0x04,0x00, -0x19,0x01,0x00,0x00,0x39,0x01,0x00,0x00,0x38,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3d,0x01,0x00,0x00, -0x0c,0x01,0x00,0x00,0x28,0x01,0x00,0x00,0x41,0x00,0x08,0x00, -0x30,0x01,0x00,0x00,0x3e,0x01,0x00,0x00,0x21,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0xcf,0x00,0x00,0x00, -0x3d,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x19,0x01,0x00,0x00, -0x3f,0x01,0x00,0x00,0x3e,0x01,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x40,0x01,0x00,0x00,0x3f,0x01,0x00,0x00, -0x7c,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x41,0x01,0x00,0x00, -0x40,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x13,0x00,0x00,0x00, -0x42,0x01,0x00,0x00,0x41,0x01,0x00,0x00,0x35,0x01,0x00,0x00, -0x72,0x00,0x04,0x00,0x37,0x01,0x00,0x00,0x43,0x01,0x00,0x00, -0x42,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x19,0x01,0x00,0x00, -0x44,0x01,0x00,0x00,0x43,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0x2b,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x45,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x48,0x01,0x00,0x00, -0x0c,0x01,0x00,0x00,0x28,0x01,0x00,0x00,0x41,0x00,0x08,0x00, -0x30,0x01,0x00,0x00,0x49,0x01,0x00,0x00,0x21,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0xcf,0x00,0x00,0x00, -0x48,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x19,0x01,0x00,0x00, -0x4a,0x01,0x00,0x00,0x49,0x01,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x4b,0x01,0x00,0x00,0x4a,0x01,0x00,0x00, -0x7c,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x4c,0x01,0x00,0x00, -0x4b,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x13,0x00,0x00,0x00, -0x4e,0x01,0x00,0x00,0x4c,0x01,0x00,0x00,0x4d,0x01,0x00,0x00, -0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x51,0x01,0x00,0x00, -0x0c,0x01,0x00,0x00,0x28,0x01,0x00,0x00,0x41,0x00,0x08,0x00, -0x30,0x01,0x00,0x00,0x52,0x01,0x00,0x00,0x21,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0xcf,0x00,0x00,0x00, -0x51,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x19,0x01,0x00,0x00, -0x53,0x01,0x00,0x00,0x52,0x01,0x00,0x00,0xc2,0x00,0x05,0x00, -0x19,0x01,0x00,0x00,0x54,0x01,0x00,0x00,0x53,0x01,0x00,0x00, -0x80,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,0x19,0x01,0x00,0x00, -0x55,0x01,0x00,0x00,0x54,0x01,0x00,0x00,0xa8,0x00,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x56,0x01,0x00,0x00, -0x55,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x57,0x01,0x00,0x00,0x56,0x01,0x00,0x00,0xc5,0x00,0x05,0x00, -0x13,0x00,0x00,0x00,0x58,0x01,0x00,0x00,0x4e,0x01,0x00,0x00, -0x57,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0x37,0x01,0x00,0x00, -0x59,0x01,0x00,0x00,0x58,0x01,0x00,0x00,0x7c,0x00,0x04,0x00, -0x19,0x01,0x00,0x00,0x5a,0x01,0x00,0x00,0x59,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0x19,0x01,0x00,0x00,0x5f,0x01,0x00,0x00, -0x49,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x19,0x01,0x00,0x00, -0x60,0x01,0x00,0x00,0x5f,0x01,0x00,0x00,0xa8,0x00,0x00,0x00, -0x41,0x00,0x08,0x00,0x30,0x01,0x00,0x00,0x63,0x01,0x00,0x00, -0x21,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0xfb,0x00,0x00,0x00, -0xcf,0x00,0x00,0x00,0x0c,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0x19,0x01,0x00,0x00,0x64,0x01,0x00,0x00,0x63,0x01,0x00,0x00, -0xc2,0x00,0x05,0x00,0x19,0x01,0x00,0x00,0x65,0x01,0x00,0x00, -0x64,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0xc4,0x00,0x05,0x00, -0x19,0x01,0x00,0x00,0x66,0x01,0x00,0x00,0x65,0x01,0x00,0x00, -0xa8,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,0x19,0x01,0x00,0x00, -0x67,0x01,0x00,0x00,0x60,0x01,0x00,0x00,0x66,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0x2b,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x2b,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x19,0x01,0x00,0x00, -0x63,0x03,0x00,0x00,0x44,0x01,0x00,0x00,0x2a,0x01,0x00,0x00, -0x67,0x01,0x00,0x00,0x45,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x19,0x01,0x00,0x00,0x62,0x03,0x00,0x00,0x39,0x01,0x00,0x00, -0x2a,0x01,0x00,0x00,0x5a,0x01,0x00,0x00,0x45,0x01,0x00,0x00, -0x51,0x00,0x05,0x00,0xc3,0x00,0x00,0x00,0x6a,0x01,0x00,0x00, -0x26,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0x04,0x00, -0xc3,0x00,0x00,0x00,0x6c,0x01,0x00,0x00,0x62,0x03,0x00,0x00, -0x85,0x00,0x05,0x00,0xc3,0x00,0x00,0x00,0x6d,0x01,0x00,0x00, -0x6a,0x01,0x00,0x00,0x6c,0x01,0x00,0x00,0x51,0x00,0x05,0x00, -0xc3,0x00,0x00,0x00,0x70,0x01,0x00,0x00,0x26,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0x70,0x00,0x04,0x00,0xc3,0x00,0x00,0x00, -0x72,0x01,0x00,0x00,0x63,0x03,0x00,0x00,0x85,0x00,0x05,0x00, -0xc3,0x00,0x00,0x00,0x73,0x01,0x00,0x00,0x70,0x01,0x00,0x00, -0x72,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x30,0x01,0x00,0x00, -0x7d,0x01,0x00,0x00,0x21,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0xfb,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x13,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0x19,0x01,0x00,0x00,0x7e,0x01,0x00,0x00, -0x7d,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x80,0x01,0x00,0x00,0x07,0x01,0x00,0x00,0x28,0x01,0x00,0x00, -0xc2,0x00,0x05,0x00,0x19,0x01,0x00,0x00,0x81,0x01,0x00,0x00, -0x7e,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x82,0x01,0x00,0x00,0x81,0x01,0x00,0x00, -0x7c,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x83,0x01,0x00,0x00, -0x82,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x13,0x00,0x00,0x00, -0x84,0x01,0x00,0x00,0x83,0x01,0x00,0x00,0x4d,0x01,0x00,0x00, -0x6f,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x85,0x01,0x00,0x00, -0x84,0x01,0x00,0x00,0x7f,0x00,0x04,0x00,0xc3,0x00,0x00,0x00, -0x8d,0x03,0x00,0x00,0x73,0x01,0x00,0x00,0x0c,0x00,0x08,0x00, -0xc3,0x00,0x00,0x00,0x88,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0x6d,0x01,0x00,0x00,0x85,0x01,0x00,0x00, -0x8d,0x03,0x00,0x00,0x73,0x00,0x04,0x00,0x17,0x01,0x00,0x00, -0x89,0x01,0x00,0x00,0x88,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x8a,0x01,0x00,0x00,0x8b,0x01,0x00,0x00,0x78,0x01,0x00,0x00, -0xf7,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0x8b,0x01,0x00,0x00, -0x89,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x8d,0x01,0x00,0x00,0xf7,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x91,0x01,0x00,0x00, -0x13,0x01,0x00,0x00,0x39,0x00,0x00,0x00,0x41,0x00,0x08,0x00, -0x30,0x01,0x00,0x00,0x92,0x01,0x00,0x00,0x21,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0x85,0x00,0x00,0x00, -0x91,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x19,0x01,0x00,0x00, -0x93,0x01,0x00,0x00,0x92,0x01,0x00,0x00,0xc2,0x00,0x05,0x00, -0x19,0x01,0x00,0x00,0x96,0x01,0x00,0x00,0x93,0x01,0x00,0x00, -0x80,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x97,0x01,0x00,0x00,0x96,0x01,0x00,0x00,0x7c,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x98,0x01,0x00,0x00,0x97,0x01,0x00,0x00, -0xc7,0x00,0x05,0x00,0x13,0x00,0x00,0x00,0x99,0x01,0x00,0x00, -0x98,0x01,0x00,0x00,0x4d,0x01,0x00,0x00,0x6f,0x00,0x04,0x00, -0xc3,0x00,0x00,0x00,0x9a,0x01,0x00,0x00,0x99,0x01,0x00,0x00, -0x0c,0x00,0x08,0x00,0xc3,0x00,0x00,0x00,0x9d,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x6d,0x01,0x00,0x00, -0x9a,0x01,0x00,0x00,0x8d,0x03,0x00,0x00,0x73,0x00,0x04,0x00, -0x17,0x01,0x00,0x00,0x9e,0x01,0x00,0x00,0x9d,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x8a,0x01,0x00,0x00,0x9f,0x01,0x00,0x00, -0x78,0x01,0x00,0x00,0x8d,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0x9f,0x01,0x00,0x00,0x9e,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xdf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdf,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa6,0x01,0x00,0x00, -0x3c,0x03,0x00,0x00,0xa4,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xdc,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xa8,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xa8,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x3d,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0xde,0x00,0x00,0x00, -0xef,0x01,0x00,0x00,0xab,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0xae,0x01,0x00,0x00,0x3d,0x03,0x00,0x00, -0xa6,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xaa,0x01,0x00,0x00, -0xab,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xae,0x01,0x00,0x00,0xa9,0x01,0x00,0x00,0xaa,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xa9,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xb2,0x01,0x00,0x00,0xa7,0x00,0x00,0x00, -0x7d,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xb4,0x01,0x00,0x00,0xb2,0x01,0x00,0x00,0x3d,0x03,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0xb5,0x01,0x00,0x00, -0x12,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xb6,0x01,0x00,0x00,0xb5,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xb7,0x01,0x00,0x00, -0xb4,0x01,0x00,0x00,0xb6,0x01,0x00,0x00,0xf7,0x00,0x03,0x00, -0xb9,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xb7,0x01,0x00,0x00,0xb8,0x01,0x00,0x00,0xb9,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xb8,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xbc,0x01,0x00,0x00,0x2c,0x03,0x00,0x00, -0x78,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0xbe,0x01,0x00,0x00,0xbc,0x01,0x00,0x00,0x8d,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xb9,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xb9,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0xc1,0x00,0x00,0x00, -0xbf,0x01,0x00,0x00,0xb7,0x01,0x00,0x00,0xa9,0x01,0x00,0x00, -0xbe,0x01,0x00,0x00,0xb8,0x01,0x00,0x00,0xf7,0x00,0x03,0x00, -0xc1,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xbf,0x01,0x00,0x00,0xc0,0x01,0x00,0x00,0xe1,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xc0,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xc9,0x01,0x00,0x00,0x7d,0x00,0x00,0x00, -0x3d,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xcb,0x01,0x00,0x00,0xc9,0x01,0x00,0x00,0xca,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xcd,0x01,0x00,0x00, -0xcb,0x01,0x00,0x00,0x78,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xd8,0x01,0x00,0x00,0xc9,0x01,0x00,0x00, -0xaa,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd9,0x01,0x00,0x00,0x44,0x03,0x00,0x00,0xd8,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdb,0x01,0x00,0x00, -0xd9,0x01,0x00,0x00,0x78,0x00,0x00,0x00,0x41,0x00,0x06,0x00, -0xdc,0x01,0x00,0x00,0xdd,0x01,0x00,0x00,0xd1,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xdb,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc3,0x00,0x00,0x00,0xde,0x01,0x00,0x00,0xdd,0x01,0x00,0x00, -0x73,0x00,0x04,0x00,0x17,0x01,0x00,0x00,0xdf,0x01,0x00,0x00, -0xde,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x8a,0x01,0x00,0x00, -0xe0,0x01,0x00,0x00,0xc6,0x01,0x00,0x00,0xcd,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0xe0,0x01,0x00,0x00,0xdf,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xc1,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xe1,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xe4,0x01,0x00,0x00,0x7d,0x00,0x00,0x00,0x3d,0x03,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe6,0x01,0x00,0x00, -0xe4,0x01,0x00,0x00,0xe5,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xe8,0x01,0x00,0x00,0xe6,0x01,0x00,0x00, -0x78,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x8a,0x01,0x00,0x00, -0xea,0x01,0x00,0x00,0xc6,0x01,0x00,0x00,0xe8,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0xea,0x01,0x00,0x00,0xe9,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xc1,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xc1,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xab,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xab,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xef,0x01,0x00,0x00,0x3d,0x03,0x00,0x00, -0xed,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xa8,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xaa,0x01,0x00,0x00,0xe0,0x00,0x04,0x00, -0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xf0,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf3,0x01,0x00,0x00, -0x40,0x03,0x00,0x00,0xf1,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xf6,0x01,0x00,0x00,0x44,0x03,0x00,0x00, -0xf4,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xf8,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xf8,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x46,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0xaa,0x01,0x00,0x00,0xa2,0x02,0x00,0x00,0xfb,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xfe,0x01,0x00,0x00, -0x46,0x03,0x00,0x00,0x6c,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xfa,0x01,0x00,0x00,0xfb,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xfe,0x01,0x00,0x00,0xf9,0x01,0x00,0x00, -0xfa,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xf9,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0x00,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x00,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x4a,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0xf9,0x01,0x00,0x00, -0x2c,0x02,0x00,0x00,0x03,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0x06,0x02,0x00,0x00,0x4a,0x03,0x00,0x00, -0x60,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x02,0x02,0x00,0x00, -0x03,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x06,0x02,0x00,0x00,0x01,0x02,0x00,0x00,0x02,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x01,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x08,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x08,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x5c,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0x01,0x02,0x00,0x00,0x2a,0x02,0x00,0x00, -0x09,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0x0e,0x02,0x00,0x00,0x5c,0x03,0x00,0x00,0x62,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x0a,0x02,0x00,0x00,0x09,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x0e,0x02,0x00,0x00, -0x09,0x02,0x00,0x00,0x0a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x09,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x14,0x02,0x00,0x00,0x4a,0x03,0x00,0x00,0x62,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x16,0x02,0x00,0x00, -0x14,0x02,0x00,0x00,0x5c,0x03,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x18,0x02,0x00,0x00,0x55,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x1a,0x02,0x00,0x00,0x4a,0x03,0x00,0x00,0x61,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1b,0x02,0x00,0x00, -0x18,0x02,0x00,0x00,0x1a,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x1d,0x02,0x00,0x00,0x64,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x1e,0x02,0x00,0x00,0x1b,0x02,0x00,0x00,0x1d,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x20,0x02,0x00,0x00, -0x1e,0x02,0x00,0x00,0x5c,0x03,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x22,0x02,0x00,0x00,0x20,0x02,0x00,0x00, -0x21,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x24,0x02,0x00,0x00,0x22,0x02,0x00,0x00,0x46,0x03,0x00,0x00, -0x41,0x00,0x05,0x00,0x8a,0x01,0x00,0x00,0x25,0x02,0x00,0x00, -0x78,0x01,0x00,0x00,0x24,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0x17,0x01,0x00,0x00,0x26,0x02,0x00,0x00,0x25,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0x27,0x02,0x00,0x00,0x28,0x02,0x00,0x00, -0x12,0x02,0x00,0x00,0x16,0x02,0x00,0x00,0x3e,0x00,0x03,0x00, -0x28,0x02,0x00,0x00,0x26,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x2a,0x02,0x00,0x00,0x5c,0x03,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x08,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x0a,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x03,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x03,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2c,0x02,0x00,0x00, -0x4a,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x00,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x02,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x2e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x2e,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x4b,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0x02,0x02,0x00,0x00, -0x5a,0x02,0x00,0x00,0x31,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0x34,0x02,0x00,0x00,0x4b,0x03,0x00,0x00, -0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x30,0x02,0x00,0x00, -0x31,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x34,0x02,0x00,0x00,0x2f,0x02,0x00,0x00,0x30,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x2f,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x36,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x36,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x59,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0x2f,0x02,0x00,0x00,0x58,0x02,0x00,0x00, -0x37,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0x3c,0x02,0x00,0x00,0x59,0x03,0x00,0x00,0xbb,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x38,0x02,0x00,0x00,0x37,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x3c,0x02,0x00,0x00, -0x37,0x02,0x00,0x00,0x38,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x37,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x42,0x02,0x00,0x00,0x4b,0x03,0x00,0x00,0xbb,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x44,0x02,0x00,0x00, -0x42,0x02,0x00,0x00,0x59,0x03,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x46,0x02,0x00,0x00,0x59,0x00,0x00,0x00, -0xb8,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x49,0x02,0x00,0x00,0x4b,0x03,0x00,0x00,0x48,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4a,0x02,0x00,0x00, -0x46,0x02,0x00,0x00,0x49,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x4c,0x02,0x00,0x00,0x68,0x00,0x00,0x00, -0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x4d,0x02,0x00,0x00,0x4a,0x02,0x00,0x00,0x4c,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4f,0x02,0x00,0x00, -0x4d,0x02,0x00,0x00,0x59,0x03,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x51,0x02,0x00,0x00,0x4f,0x02,0x00,0x00, -0x50,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x53,0x02,0x00,0x00,0x51,0x02,0x00,0x00,0x46,0x03,0x00,0x00, -0x41,0x00,0x05,0x00,0x8a,0x01,0x00,0x00,0x54,0x02,0x00,0x00, -0xc6,0x01,0x00,0x00,0x53,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0x17,0x01,0x00,0x00,0x55,0x02,0x00,0x00,0x54,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0x27,0x02,0x00,0x00,0x56,0x02,0x00,0x00, -0x40,0x02,0x00,0x00,0x44,0x02,0x00,0x00,0x3e,0x00,0x03,0x00, -0x56,0x02,0x00,0x00,0x55,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x58,0x02,0x00,0x00,0x59,0x03,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x36,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x38,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x31,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x31,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5a,0x02,0x00,0x00, -0x4b,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x2e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x30,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x5c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x5c,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x4c,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0x30,0x02,0x00,0x00, -0xa0,0x02,0x00,0x00,0x5f,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0x62,0x02,0x00,0x00,0x4c,0x03,0x00,0x00, -0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x5e,0x02,0x00,0x00, -0x5f,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x62,0x02,0x00,0x00,0x5d,0x02,0x00,0x00,0x5e,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x5d,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x64,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x64,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x50,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0x5d,0x02,0x00,0x00,0x9e,0x02,0x00,0x00, -0x67,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0x6a,0x02,0x00,0x00,0x50,0x03,0x00,0x00,0x60,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x66,0x02,0x00,0x00,0x67,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x6a,0x02,0x00,0x00, -0x65,0x02,0x00,0x00,0x66,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x65,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x6c,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x6c,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x52,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0x65,0x02,0x00,0x00,0x9c,0x02,0x00,0x00,0x6f,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x72,0x02,0x00,0x00, -0x52,0x03,0x00,0x00,0xbb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x6e,0x02,0x00,0x00,0x6f,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x72,0x02,0x00,0x00,0x6d,0x02,0x00,0x00, -0x6e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x6d,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x74,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x74,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x54,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0x6d,0x02,0x00,0x00, -0x9a,0x02,0x00,0x00,0x75,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0x7a,0x02,0x00,0x00,0x54,0x03,0x00,0x00, -0x62,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x76,0x02,0x00,0x00, -0x75,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x7a,0x02,0x00,0x00,0x75,0x02,0x00,0x00,0x76,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x75,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x7c,0x02,0x00,0x00,0x4c,0x03,0x00,0x00, -0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x7e,0x02,0x00,0x00,0x7c,0x02,0x00,0x00,0x52,0x03,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x80,0x02,0x00,0x00, -0x7e,0x02,0x00,0x00,0x7f,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x82,0x02,0x00,0x00,0x50,0x03,0x00,0x00, -0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x83,0x02,0x00,0x00,0x80,0x02,0x00,0x00,0x82,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x85,0x02,0x00,0x00, -0x83,0x02,0x00,0x00,0x54,0x03,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x89,0x02,0x00,0x00,0x82,0x02,0x00,0x00, -0x54,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x27,0x02,0x00,0x00, -0x8a,0x02,0x00,0x00,0x12,0x02,0x00,0x00,0x89,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0x17,0x01,0x00,0x00,0x8b,0x02,0x00,0x00, -0x8a,0x02,0x00,0x00,0x73,0x00,0x04,0x00,0xc3,0x00,0x00,0x00, -0x8c,0x02,0x00,0x00,0x8b,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0x27,0x02,0x00,0x00,0x91,0x02,0x00,0x00,0x40,0x02,0x00,0x00, -0x7e,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x17,0x01,0x00,0x00, -0x92,0x02,0x00,0x00,0x91,0x02,0x00,0x00,0x73,0x00,0x04,0x00, -0xc3,0x00,0x00,0x00,0x93,0x02,0x00,0x00,0x92,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,0x95,0x02,0x00,0x00, -0xc9,0x00,0x00,0x00,0x85,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc3,0x00,0x00,0x00,0x96,0x02,0x00,0x00,0x95,0x02,0x00,0x00, -0x0c,0x00,0x08,0x00,0xc3,0x00,0x00,0x00,0x97,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x8c,0x02,0x00,0x00, -0x93,0x02,0x00,0x00,0x96,0x02,0x00,0x00,0x3e,0x00,0x03,0x00, -0x95,0x02,0x00,0x00,0x97,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9a,0x02,0x00,0x00,0x54,0x03,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x74,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x76,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x6f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x6f,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9c,0x02,0x00,0x00, -0x52,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x6c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x6e,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x67,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x67,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9e,0x02,0x00,0x00,0x50,0x03,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x64,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x66,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x5f,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x5f,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa0,0x02,0x00,0x00,0x4c,0x03,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x5c,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x5e,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0xfb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xfb,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa2,0x02,0x00,0x00, -0x46,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xf8,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xfa,0x01,0x00,0x00, -0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0xf0,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xd6,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xd6,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa4,0x02,0x00,0x00,0x2c,0x03,0x00,0x00, -0x6c,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd3,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xd5,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa9,0x02,0x00,0x00,0x55,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xaa,0x02,0x00,0x00,0x95,0x00,0x00,0x00,0xa9,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xaf,0x02,0x00,0x00, -0x59,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xb0,0x02,0x00,0x00,0xa7,0x00,0x00,0x00, -0xaf,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0xb5,0x02,0x00,0x00,0x12,0x00,0x00,0x00,0xb4,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb6,0x02,0x00,0x00, -0xb5,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xb7,0x02,0x00,0x00,0x0f,0x00,0x00,0x00,0xb6,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbb,0x02,0x00,0x00, -0x47,0x00,0x00,0x00,0xb6,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0xbd,0x02,0x00,0x00,0xbc,0x02,0x00,0x00, -0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xbe,0x02,0x00,0x00,0xbd,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xbf,0x02,0x00,0x00,0xbb,0x02,0x00,0x00, -0xbe,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xc0,0x02,0x00,0x00,0xb7,0x02,0x00,0x00,0xbf,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0xc2,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xc2,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x2d,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0xd5,0x00,0x00,0x00, -0x28,0x03,0x00,0x00,0xc5,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0xc8,0x02,0x00,0x00,0x2d,0x03,0x00,0x00, -0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xc4,0x02,0x00,0x00, -0xc5,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xc8,0x02,0x00,0x00,0xc3,0x02,0x00,0x00,0xc4,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xc3,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0xca,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xca,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x2e,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0xc3,0x02,0x00,0x00,0x26,0x03,0x00,0x00, -0xcd,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0xd0,0x02,0x00,0x00,0x2e,0x03,0x00,0x00,0x60,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xcc,0x02,0x00,0x00,0xcd,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xd0,0x02,0x00,0x00, -0xcb,0x02,0x00,0x00,0xcc,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xcb,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd4,0x02,0x00,0x00,0x2e,0x03,0x00,0x00,0x61,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd5,0x02,0x00,0x00, -0xaa,0x02,0x00,0x00,0xd4,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xd7,0x02,0x00,0x00,0x64,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd8,0x02,0x00,0x00,0xd5,0x02,0x00,0x00,0xd7,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdc,0x02,0x00,0x00, -0x2d,0x03,0x00,0x00,0x48,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xdd,0x02,0x00,0x00,0xb0,0x02,0x00,0x00, -0xdc,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xdf,0x02,0x00,0x00,0x68,0x00,0x00,0x00,0xbb,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe0,0x02,0x00,0x00, -0xdd,0x02,0x00,0x00,0xdf,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0xe2,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xe2,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x30,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0xcb,0x02,0x00,0x00,0x24,0x03,0x00,0x00, -0xe5,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0xe8,0x02,0x00,0x00,0x30,0x03,0x00,0x00,0xbb,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xe4,0x02,0x00,0x00,0xe5,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xe8,0x02,0x00,0x00, -0xe3,0x02,0x00,0x00,0xe4,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xe3,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xea,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xea,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x32,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0xe3,0x02,0x00,0x00,0x22,0x03,0x00,0x00,0xed,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xf0,0x02,0x00,0x00, -0x32,0x03,0x00,0x00,0x62,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xec,0x02,0x00,0x00,0xed,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xf0,0x02,0x00,0x00,0xeb,0x02,0x00,0x00, -0xec,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xeb,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf3,0x02,0x00,0x00, -0xd8,0x02,0x00,0x00,0x32,0x03,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0xf6,0x02,0x00,0x00,0xf3,0x02,0x00,0x00, -0x36,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0xf8,0x02,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xf6,0x02,0x00,0x00, -0xf7,0x02,0x00,0x00,0xf8,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xf7,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xfb,0x02,0x00,0x00,0xe0,0x02,0x00,0x00,0x30,0x03,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0xfc,0x02,0x00,0x00, -0x12,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xfd,0x02,0x00,0x00,0xfc,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xfe,0x02,0x00,0x00, -0xfb,0x02,0x00,0x00,0xfd,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0xf8,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xf8,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0xc1,0x00,0x00,0x00,0xff,0x02,0x00,0x00, -0xf6,0x02,0x00,0x00,0xeb,0x02,0x00,0x00,0xfe,0x02,0x00,0x00, -0xf7,0x02,0x00,0x00,0xf7,0x00,0x03,0x00,0x01,0x03,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xff,0x02,0x00,0x00, -0x00,0x03,0x00,0x00,0x01,0x03,0x00,0x00,0xf8,0x00,0x02,0x00, -0x00,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x09,0x03,0x00,0x00,0xe0,0x02,0x00,0x00,0x30,0x03,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x0b,0x03,0x00,0x00, -0x12,0x00,0x00,0x00,0x0a,0x03,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x0c,0x03,0x00,0x00,0x0b,0x03,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0d,0x03,0x00,0x00, -0x09,0x03,0x00,0x00,0x0c,0x03,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x0e,0x03,0x00,0x00,0xc0,0x02,0x00,0x00, -0x0d,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x10,0x03,0x00,0x00,0x0e,0x03,0x00,0x00,0xd8,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x12,0x03,0x00,0x00, -0x10,0x03,0x00,0x00,0x32,0x03,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x14,0x03,0x00,0x00,0x2d,0x03,0x00,0x00, -0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x16,0x03,0x00,0x00,0x14,0x03,0x00,0x00,0x30,0x03,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x18,0x03,0x00,0x00, -0x16,0x03,0x00,0x00,0x17,0x03,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x1a,0x03,0x00,0x00,0x2e,0x03,0x00,0x00, -0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x1b,0x03,0x00,0x00,0x18,0x03,0x00,0x00,0x1a,0x03,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1d,0x03,0x00,0x00, -0x1b,0x03,0x00,0x00,0x32,0x03,0x00,0x00,0x41,0x00,0x05,0x00, -0xcc,0x00,0x00,0x00,0x1e,0x03,0x00,0x00,0xc9,0x00,0x00,0x00, -0x1d,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00, -0x1f,0x03,0x00,0x00,0x1e,0x03,0x00,0x00,0x41,0x00,0x06,0x00, -0xdc,0x01,0x00,0x00,0x20,0x03,0x00,0x00,0x05,0x03,0x00,0x00, -0x34,0x00,0x00,0x00,0x12,0x03,0x00,0x00,0x3e,0x00,0x03,0x00, -0x20,0x03,0x00,0x00,0x1f,0x03,0x00,0x00,0xf9,0x00,0x02,0x00, -0x01,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x01,0x03,0x00,0x00, -0xf9,0x00,0x02,0x00,0xed,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xed,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x22,0x03,0x00,0x00,0x32,0x03,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xea,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xec,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xe5,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xe5,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x24,0x03,0x00,0x00,0x30,0x03,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xe2,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xe4,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0xcd,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xcd,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x26,0x03,0x00,0x00, -0x2e,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xca,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xcc,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0xc5,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xc5,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x28,0x03,0x00,0x00,0x2d,0x03,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xc2,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xc4,0x02,0x00,0x00,0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00, - -}; -const uint64_t matmul_q4_k_f32_len = 12072; - -unsigned char matmul_q4_k_f32_aligned_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0xa8,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x09,0x00,0x00,0x00, -0x11,0x00,0x02,0x00,0x27,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00, -0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c, -0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00, -0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x0f,0x00,0x0f,0x00,0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x4c,0x00,0x00,0x00, -0x22,0x01,0x00,0x00,0x79,0x01,0x00,0x00,0xc9,0x01,0x00,0x00, -0xd1,0x01,0x00,0x00,0xde,0x02,0x00,0x00,0x27,0x03,0x00,0x00, -0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x0a,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x0d,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x10,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x37,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x3d,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x4c,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x4f,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x53,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x60,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x62,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x6c,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xa7,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xb9,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xbc,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x1c,0x01,0x00,0x00, -0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x1d,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1e,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1e,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1e,0x01,0x00,0x00, -0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x1f,0x01,0x00,0x00,0x06,0x00,0x00,0x00, -0x90,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x20,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x20,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x20,0x01,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x22,0x01,0x00,0x00, -0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x22,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xa1,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xa2,0x01,0x00,0x00, -0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xce,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x48,0x00,0x04,0x00,0xcf,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x05,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0xcf,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0xcf,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0xcf,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0xcf,0x01,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xd1,0x01,0x00,0x00,0x22,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xd1,0x01,0x00,0x00, -0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xde,0x02,0x00,0x00,0x0b,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x24,0x03,0x00,0x00,0x06,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x25,0x03,0x00,0x00, -0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x25,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x25,0x03,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x27,0x03,0x00,0x00, -0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x27,0x03,0x00,0x00,0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00, -0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x1e,0x00,0x10,0x00, -0x10,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x11,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x11,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x15,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x0a,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x27,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x2d,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x3e,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x4c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x54,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x58,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x63,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x67,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x6d,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x72,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x77,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x91,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0xa2,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xa7,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xba,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0xb9,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xbb,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x4f,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xbc,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xbb,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xbd,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0xba,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xb8,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xc0,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x14,0x00,0x02,0x00, -0xc2,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0xc4,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xc5,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xc6,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc5,0x00,0x00,0x00, -0xbf,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xc7,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc6,0x00,0x00,0x00, -0xbc,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xc8,0x00,0x00,0x00, -0xc4,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0xc9,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xc8,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0xcc,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xcd,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xf4,0x00,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xfb,0x00,0x00,0x00, -0x80,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x02,0x01,0x00,0x00,0x20,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x07,0x01,0x00,0x00,0x10,0x00,0x00,0x00, -0x17,0x00,0x04,0x00,0x15,0x01,0x00,0x00,0xc4,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0x18,0x01,0x00,0x00, -0x10,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x19,0x01,0x00,0x00, -0x18,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00, -0x1a,0x01,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x1b,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x1c,0x01,0x00,0x00, -0x1a,0x01,0x00,0x00,0x1b,0x01,0x00,0x00,0x1c,0x00,0x04,0x00, -0x1d,0x01,0x00,0x00,0x1a,0x01,0x00,0x00,0xfb,0x00,0x00,0x00, -0x1e,0x00,0x05,0x00,0x1e,0x01,0x00,0x00,0x19,0x01,0x00,0x00, -0x1c,0x01,0x00,0x00,0x1d,0x01,0x00,0x00,0x1d,0x00,0x03,0x00, -0x1f,0x01,0x00,0x00,0x1e,0x01,0x00,0x00,0x1e,0x00,0x03,0x00, -0x20,0x01,0x00,0x00,0x1f,0x01,0x00,0x00,0x20,0x00,0x04,0x00, -0x21,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x01,0x00,0x00, -0x3b,0x00,0x04,0x00,0x21,0x01,0x00,0x00,0x22,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x24,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x19,0x01,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x29,0x01,0x00,0x00,0x04,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x31,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x1a,0x01,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x36,0x01,0x00,0x00,0x3f,0x00,0x00,0x00,0x15,0x00,0x04,0x00, -0x38,0x01,0x00,0x00,0x08,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x4e,0x01,0x00,0x00, -0x0f,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x75,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x76,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x75,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,0x77,0x01,0x00,0x00, -0x18,0x01,0x00,0x00,0x76,0x01,0x00,0x00,0x20,0x00,0x04,0x00, -0x78,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x77,0x01,0x00,0x00, -0x3b,0x00,0x04,0x00,0x78,0x01,0x00,0x00,0x79,0x01,0x00,0x00, -0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x8b,0x01,0x00,0x00, -0x04,0x00,0x00,0x00,0x18,0x01,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xa1,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0x33,0x00,0x06,0x00,0x09,0x00,0x00,0x00,0xa2,0x01,0x00,0x00, -0xa1,0x01,0x00,0x00,0x39,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xa3,0x01,0x00,0x00, -0x51,0x00,0x00,0x00,0xa2,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xa4,0x01,0x00,0x00, -0x84,0x00,0x00,0x00,0xa3,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xa5,0x01,0x00,0x00, -0x86,0x00,0x00,0x00,0xa4,0x01,0x00,0x00,0x6c,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc0,0x01,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc5,0x01,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc6,0x01,0x00,0x00, -0x84,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0xc5,0x01,0x00,0x00, -0x1c,0x00,0x04,0x00,0xc7,0x01,0x00,0x00,0x18,0x01,0x00,0x00, -0xc6,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0xc8,0x01,0x00,0x00, -0x04,0x00,0x00,0x00,0xc7,0x01,0x00,0x00,0x3b,0x00,0x04,0x00, -0xc8,0x01,0x00,0x00,0xc9,0x01,0x00,0x00,0x04,0x00,0x00,0x00, -0x17,0x00,0x04,0x00,0xcc,0x01,0x00,0x00,0xc4,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x18,0x00,0x04,0x00,0xcd,0x01,0x00,0x00, -0xcc,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x1d,0x00,0x03,0x00, -0xce,0x01,0x00,0x00,0xcd,0x01,0x00,0x00,0x1e,0x00,0x03,0x00, -0xcf,0x01,0x00,0x00,0xce,0x01,0x00,0x00,0x20,0x00,0x04,0x00, -0xd0,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0xcf,0x01,0x00,0x00, -0x3b,0x00,0x04,0x00,0xd0,0x01,0x00,0x00,0xd1,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xd3,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xe7,0x01,0x00,0x00,0x03,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xf6,0x01,0x00,0x00, -0x05,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xfe,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x06,0x02,0x00,0x00,0x07,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x0d,0x02,0x00,0x00, -0x51,0x00,0x00,0x00,0xa2,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x0e,0x02,0x00,0x00, -0x84,0x00,0x00,0x00,0x0d,0x02,0x00,0x00,0x77,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x0f,0x02,0x00,0x00, -0x86,0x00,0x00,0x00,0x0e,0x02,0x00,0x00,0x6c,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x12,0x02,0x00,0x00, -0x08,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x13,0x02,0x00,0x00,0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x16,0x02,0x00,0x00,0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x77,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x31,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x32,0x02,0x00,0x00, -0x18,0x01,0x00,0x00,0x31,0x02,0x00,0x00,0x20,0x00,0x04,0x00, -0x33,0x02,0x00,0x00,0x07,0x00,0x00,0x00,0x32,0x02,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x43,0x02,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x49,0x02,0x00,0x00,0x07,0x00,0x00,0x00, -0x18,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x5f,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0xbf,0x00,0x00,0x00, -0xbc,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x60,0x02,0x00,0x00, -0x18,0x01,0x00,0x00,0x5f,0x02,0x00,0x00,0x20,0x00,0x04,0x00, -0x61,0x02,0x00,0x00,0x07,0x00,0x00,0x00,0x60,0x02,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x6a,0x02,0x00,0x00, -0x86,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0xbf,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x72,0x02,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xa1,0x02,0x00,0x00, -0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0xd6,0x02,0x00,0x00, -0x0d,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0xde,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x1d,0x00,0x03,0x00, -0x24,0x03,0x00,0x00,0xc4,0x00,0x00,0x00,0x1e,0x00,0x03,0x00, -0x25,0x03,0x00,0x00,0x24,0x03,0x00,0x00,0x20,0x00,0x04,0x00, -0x26,0x03,0x00,0x00,0x0c,0x00,0x00,0x00,0x25,0x03,0x00,0x00, -0x3b,0x00,0x04,0x00,0x26,0x03,0x00,0x00,0x27,0x03,0x00,0x00, -0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x2c,0x03,0x00,0x00,0x05,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x39,0x03,0x00,0x00,0x84,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x36,0x00,0x05,0x00, -0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0xc9,0x00,0x00,0x00,0xca,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x33,0x02,0x00,0x00, -0x34,0x02,0x00,0x00,0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x61,0x02,0x00,0x00,0x62,0x02,0x00,0x00,0x07,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x16,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x16,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x17,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x24,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2a,0x00,0x00,0x00, -0x1e,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x2d,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x2f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x24,0x00,0x00,0x00, -0x2f,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x2a,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x35,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x35,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x38,0x00,0x00,0x00, -0x36,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x82,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x38,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x3b,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x3f,0x00,0x00,0x00, -0x3d,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x3f,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x42,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x3b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x49,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4a,0x00,0x00,0x00, -0x49,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x4d,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x3e,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x4d,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x50,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00, -0x50,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x50,0x00,0x00,0x00, -0x58,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x5d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x64,0x00,0x00,0x00, -0x5d,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x5d,0x00,0x00,0x00, -0x67,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x6e,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x6d,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x73,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x72,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x78,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x7e,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x7d,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x82,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x82,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x47,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x88,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0x47,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x8d,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0x83,0x00,0x00,0x00, -0x0c,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x8e,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x26,0x00,0x00,0x00,0x88,0x00,0x00,0x00, -0x8d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x92,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x91,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x93,0x00,0x00,0x00, -0x92,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x94,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x93,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x96,0x00,0x00,0x00, -0x42,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x97,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x99,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x96,0x00,0x00,0x00, -0x99,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9b,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x9a,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9d,0x00,0x00,0x00, -0x9b,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,0x9d,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0xa3,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0xa2,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00, -0xa3,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa5,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0xa4,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa8,0x00,0x00,0x00, -0x4a,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0xa9,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xab,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0xa8,0x00,0x00,0x00, -0xab,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xad,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,0xac,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xaf,0x00,0x00,0x00, -0xad,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0xaf,0x00,0x00,0x00, -0x77,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb2,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x4d,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0x05,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0xb3,0x00,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xc3,0x00,0x00,0x00, -0x4d,0x03,0x00,0x00,0xc1,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xb4,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0xb3,0x00,0x00,0x00, -0xb4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb3,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,0xce,0x00,0x00,0x00, -0xca,0x00,0x00,0x00,0x4d,0x03,0x00,0x00,0x3e,0x00,0x03,0x00, -0xce,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0x4d,0x03,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb2,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xb4,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xd4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd4,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x66,0x03,0x00,0x00, -0xb0,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0x18,0x02,0x00,0x00, -0xd7,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x62,0x03,0x00,0x00,0x9e,0x00,0x00,0x00,0xb4,0x00,0x00,0x00, -0x15,0x02,0x00,0x00,0xd7,0x00,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x4e,0x03,0x00,0x00,0x84,0x00,0x00,0x00, -0xb4,0x00,0x00,0x00,0xc6,0x02,0x00,0x00,0xd7,0x00,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xdb,0x00,0x00,0x00, -0x4e,0x03,0x00,0x00,0x8e,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xd6,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xdb,0x00,0x00,0x00,0xd5,0x00,0x00,0x00, -0xd6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd5,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xdd,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x5e,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0xd5,0x00,0x00,0x00, -0xa7,0x01,0x00,0x00,0xe0,0x00,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0xe3,0x00,0x00,0x00,0x5e,0x03,0x00,0x00, -0x37,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xdf,0x00,0x00,0x00, -0xe0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xe3,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0xdf,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0x73,0x00,0x00,0x00, -0x5e,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xeb,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0x99,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xec,0x00,0x00,0x00, -0xeb,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xed,0x00,0x00,0x00,0x62,0x03,0x00,0x00, -0xec,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xef,0x00,0x00,0x00,0xed,0x00,0x00,0x00,0x6e,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf5,0x00,0x00,0x00, -0xe8,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,0x6e,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xf8,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,0xf7,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfc,0x00,0x00,0x00, -0xef,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xef,0x00,0x00,0x00, -0xfb,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x03,0x01,0x00,0x00,0xff,0x00,0x00,0x00,0x02,0x01,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x06,0x01,0x00,0x00, -0xff,0x00,0x00,0x00,0x02,0x01,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x08,0x01,0x00,0x00,0x06,0x01,0x00,0x00, -0x07,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x0b,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x03,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0d,0x01,0x00,0x00, -0x0b,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x10,0x01,0x00,0x00,0x03,0x01,0x00,0x00, -0x02,0x01,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x12,0x01,0x00,0x00,0xff,0x00,0x00,0x00,0x07,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x13,0x01,0x00,0x00, -0x12,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x14,0x01,0x00,0x00,0x10,0x01,0x00,0x00, -0x13,0x01,0x00,0x00,0x41,0x00,0x07,0x00,0x24,0x01,0x00,0x00, -0x25,0x01,0x00,0x00,0x22,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0xfc,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x19,0x01,0x00,0x00,0x26,0x01,0x00,0x00,0x25,0x01,0x00,0x00, -0x73,0x00,0x04,0x00,0x15,0x01,0x00,0x00,0x27,0x01,0x00,0x00, -0x26,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0x2a,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,0x29,0x01,0x00,0x00, -0xf7,0x00,0x03,0x00,0x2c,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x2a,0x01,0x00,0x00,0x2b,0x01,0x00,0x00, -0x46,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x2b,0x01,0x00,0x00, -0x41,0x00,0x08,0x00,0x31,0x01,0x00,0x00,0x32,0x01,0x00,0x00, -0x22,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0xfc,0x00,0x00,0x00, -0xd0,0x00,0x00,0x00,0x0d,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0x1a,0x01,0x00,0x00,0x33,0x01,0x00,0x00,0x32,0x01,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x34,0x01,0x00,0x00, -0x33,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x35,0x01,0x00,0x00,0x34,0x01,0x00,0x00,0xc7,0x00,0x05,0x00, -0x13,0x00,0x00,0x00,0x37,0x01,0x00,0x00,0x35,0x01,0x00,0x00, -0x36,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0x38,0x01,0x00,0x00, -0x39,0x01,0x00,0x00,0x37,0x01,0x00,0x00,0x7c,0x00,0x04,0x00, -0x1a,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,0x39,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3e,0x01,0x00,0x00, -0x0d,0x01,0x00,0x00,0x29,0x01,0x00,0x00,0x41,0x00,0x08,0x00, -0x31,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,0x22,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0xd0,0x00,0x00,0x00, -0x3e,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x1a,0x01,0x00,0x00, -0x40,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x41,0x01,0x00,0x00,0x40,0x01,0x00,0x00, -0x7c,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x42,0x01,0x00,0x00, -0x41,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x13,0x00,0x00,0x00, -0x43,0x01,0x00,0x00,0x42,0x01,0x00,0x00,0x36,0x01,0x00,0x00, -0x72,0x00,0x04,0x00,0x38,0x01,0x00,0x00,0x44,0x01,0x00,0x00, -0x43,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x1a,0x01,0x00,0x00, -0x45,0x01,0x00,0x00,0x44,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0x2c,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x46,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x49,0x01,0x00,0x00, -0x0d,0x01,0x00,0x00,0x29,0x01,0x00,0x00,0x41,0x00,0x08,0x00, -0x31,0x01,0x00,0x00,0x4a,0x01,0x00,0x00,0x22,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0xd0,0x00,0x00,0x00, -0x49,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x1a,0x01,0x00,0x00, -0x4b,0x01,0x00,0x00,0x4a,0x01,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x4c,0x01,0x00,0x00,0x4b,0x01,0x00,0x00, -0x7c,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x4d,0x01,0x00,0x00, -0x4c,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x13,0x00,0x00,0x00, -0x4f,0x01,0x00,0x00,0x4d,0x01,0x00,0x00,0x4e,0x01,0x00,0x00, -0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x52,0x01,0x00,0x00, -0x0d,0x01,0x00,0x00,0x29,0x01,0x00,0x00,0x41,0x00,0x08,0x00, -0x31,0x01,0x00,0x00,0x53,0x01,0x00,0x00,0x22,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0xd0,0x00,0x00,0x00, -0x52,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x1a,0x01,0x00,0x00, -0x54,0x01,0x00,0x00,0x53,0x01,0x00,0x00,0xc2,0x00,0x05,0x00, -0x1a,0x01,0x00,0x00,0x55,0x01,0x00,0x00,0x54,0x01,0x00,0x00, -0x81,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,0x1a,0x01,0x00,0x00, -0x56,0x01,0x00,0x00,0x55,0x01,0x00,0x00,0xa9,0x00,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x57,0x01,0x00,0x00, -0x56,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x58,0x01,0x00,0x00,0x57,0x01,0x00,0x00,0xc5,0x00,0x05,0x00, -0x13,0x00,0x00,0x00,0x59,0x01,0x00,0x00,0x4f,0x01,0x00,0x00, -0x58,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0x38,0x01,0x00,0x00, -0x5a,0x01,0x00,0x00,0x59,0x01,0x00,0x00,0x7c,0x00,0x04,0x00, -0x1a,0x01,0x00,0x00,0x5b,0x01,0x00,0x00,0x5a,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0x1a,0x01,0x00,0x00,0x60,0x01,0x00,0x00, -0x4a,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x1a,0x01,0x00,0x00, -0x61,0x01,0x00,0x00,0x60,0x01,0x00,0x00,0xa9,0x00,0x00,0x00, -0x41,0x00,0x08,0x00,0x31,0x01,0x00,0x00,0x64,0x01,0x00,0x00, -0x22,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0xfc,0x00,0x00,0x00, -0xd0,0x00,0x00,0x00,0x0d,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0x1a,0x01,0x00,0x00,0x65,0x01,0x00,0x00,0x64,0x01,0x00,0x00, -0xc2,0x00,0x05,0x00,0x1a,0x01,0x00,0x00,0x66,0x01,0x00,0x00, -0x65,0x01,0x00,0x00,0x81,0x00,0x00,0x00,0xc4,0x00,0x05,0x00, -0x1a,0x01,0x00,0x00,0x67,0x01,0x00,0x00,0x66,0x01,0x00,0x00, -0xa9,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,0x1a,0x01,0x00,0x00, -0x68,0x01,0x00,0x00,0x61,0x01,0x00,0x00,0x67,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0x2c,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x2c,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x1a,0x01,0x00,0x00, -0x82,0x03,0x00,0x00,0x45,0x01,0x00,0x00,0x2b,0x01,0x00,0x00, -0x68,0x01,0x00,0x00,0x46,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x1a,0x01,0x00,0x00,0x81,0x03,0x00,0x00,0x3a,0x01,0x00,0x00, -0x2b,0x01,0x00,0x00,0x5b,0x01,0x00,0x00,0x46,0x01,0x00,0x00, -0x51,0x00,0x05,0x00,0xc4,0x00,0x00,0x00,0x6b,0x01,0x00,0x00, -0x27,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0x6d,0x01,0x00,0x00,0x81,0x03,0x00,0x00, -0x85,0x00,0x05,0x00,0xc4,0x00,0x00,0x00,0x6e,0x01,0x00,0x00, -0x6b,0x01,0x00,0x00,0x6d,0x01,0x00,0x00,0x51,0x00,0x05,0x00, -0xc4,0x00,0x00,0x00,0x71,0x01,0x00,0x00,0x27,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0x70,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0x73,0x01,0x00,0x00,0x82,0x03,0x00,0x00,0x85,0x00,0x05,0x00, -0xc4,0x00,0x00,0x00,0x74,0x01,0x00,0x00,0x71,0x01,0x00,0x00, -0x73,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x31,0x01,0x00,0x00, -0x7e,0x01,0x00,0x00,0x22,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0xfc,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x14,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0x1a,0x01,0x00,0x00,0x7f,0x01,0x00,0x00, -0x7e,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x81,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x29,0x01,0x00,0x00, -0xc2,0x00,0x05,0x00,0x1a,0x01,0x00,0x00,0x82,0x01,0x00,0x00, -0x7f,0x01,0x00,0x00,0x81,0x01,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x83,0x01,0x00,0x00,0x82,0x01,0x00,0x00, -0x7c,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x84,0x01,0x00,0x00, -0x83,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x13,0x00,0x00,0x00, -0x85,0x01,0x00,0x00,0x84,0x01,0x00,0x00,0x4e,0x01,0x00,0x00, -0x6f,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x86,0x01,0x00,0x00, -0x85,0x01,0x00,0x00,0x7f,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0xa7,0x03,0x00,0x00,0x74,0x01,0x00,0x00,0x0c,0x00,0x08,0x00, -0xc4,0x00,0x00,0x00,0x89,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0x6e,0x01,0x00,0x00,0x86,0x01,0x00,0x00, -0xa7,0x03,0x00,0x00,0x73,0x00,0x04,0x00,0x18,0x01,0x00,0x00, -0x8a,0x01,0x00,0x00,0x89,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x8b,0x01,0x00,0x00,0x8c,0x01,0x00,0x00,0x79,0x01,0x00,0x00, -0xf8,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0x8c,0x01,0x00,0x00, -0x8a,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x8e,0x01,0x00,0x00,0xf8,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x92,0x01,0x00,0x00, -0x14,0x01,0x00,0x00,0x39,0x00,0x00,0x00,0x41,0x00,0x08,0x00, -0x31,0x01,0x00,0x00,0x93,0x01,0x00,0x00,0x22,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x92,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x1a,0x01,0x00,0x00, -0x94,0x01,0x00,0x00,0x93,0x01,0x00,0x00,0xc2,0x00,0x05,0x00, -0x1a,0x01,0x00,0x00,0x97,0x01,0x00,0x00,0x94,0x01,0x00,0x00, -0x81,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x98,0x01,0x00,0x00,0x97,0x01,0x00,0x00,0x7c,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x99,0x01,0x00,0x00,0x98,0x01,0x00,0x00, -0xc7,0x00,0x05,0x00,0x13,0x00,0x00,0x00,0x9a,0x01,0x00,0x00, -0x99,0x01,0x00,0x00,0x4e,0x01,0x00,0x00,0x6f,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0x9b,0x01,0x00,0x00,0x9a,0x01,0x00,0x00, -0x0c,0x00,0x08,0x00,0xc4,0x00,0x00,0x00,0x9e,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x6e,0x01,0x00,0x00, -0x9b,0x01,0x00,0x00,0xa7,0x03,0x00,0x00,0x73,0x00,0x04,0x00, -0x18,0x01,0x00,0x00,0x9f,0x01,0x00,0x00,0x9e,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x8b,0x01,0x00,0x00,0xa0,0x01,0x00,0x00, -0x79,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0xa0,0x01,0x00,0x00,0x9f,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xe0,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe0,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa7,0x01,0x00,0x00, -0x5e,0x03,0x00,0x00,0xa5,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xa9,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xa9,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x5f,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0xdf,0x00,0x00,0x00, -0x11,0x02,0x00,0x00,0xaa,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0xaf,0x01,0x00,0x00,0x5f,0x03,0x00,0x00, -0xa7,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xab,0x01,0x00,0x00, -0xaa,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xaf,0x01,0x00,0x00,0xaa,0x01,0x00,0x00,0xab,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xaa,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xb4,0x01,0x00,0x00,0x7e,0x00,0x00,0x00, -0x5f,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xb7,0x01,0x00,0x00,0xb4,0x01,0x00,0x00,0xab,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb8,0x01,0x00,0x00, -0xb7,0x01,0x00,0x00,0x77,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xb9,0x01,0x00,0x00,0x66,0x03,0x00,0x00, -0xb8,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xbb,0x01,0x00,0x00,0xb9,0x01,0x00,0x00,0x79,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc1,0x01,0x00,0x00, -0xb4,0x01,0x00,0x00,0xc0,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xc3,0x01,0x00,0x00,0x79,0x00,0x00,0x00, -0x77,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xc4,0x01,0x00,0x00,0xc1,0x01,0x00,0x00,0xc3,0x01,0x00,0x00, -0x41,0x00,0x08,0x00,0xd3,0x01,0x00,0x00,0xd4,0x01,0x00,0x00, -0xd1,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0xbb,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0xd5,0x01,0x00,0x00,0xd4,0x01,0x00,0x00, -0x73,0x00,0x04,0x00,0x18,0x01,0x00,0x00,0xd6,0x01,0x00,0x00, -0xd5,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x8b,0x01,0x00,0x00, -0xd7,0x01,0x00,0x00,0xc9,0x01,0x00,0x00,0xc4,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0xd7,0x01,0x00,0x00,0xd6,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd9,0x01,0x00,0x00, -0xc4,0x01,0x00,0x00,0x39,0x00,0x00,0x00,0x41,0x00,0x08,0x00, -0xd3,0x01,0x00,0x00,0xdb,0x01,0x00,0x00,0xd1,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xbb,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0xdc,0x01,0x00,0x00,0xdb,0x01,0x00,0x00,0x73,0x00,0x04,0x00, -0x18,0x01,0x00,0x00,0xdd,0x01,0x00,0x00,0xdc,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x8b,0x01,0x00,0x00,0xde,0x01,0x00,0x00, -0xc9,0x01,0x00,0x00,0xd9,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0xde,0x01,0x00,0x00,0xdd,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xe0,0x01,0x00,0x00,0xc4,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0xd3,0x01,0x00,0x00, -0xe2,0x01,0x00,0x00,0xd1,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0xbb,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0xe3,0x01,0x00,0x00, -0xe2,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x18,0x01,0x00,0x00, -0xe4,0x01,0x00,0x00,0xe3,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x8b,0x01,0x00,0x00,0xe5,0x01,0x00,0x00,0xc9,0x01,0x00,0x00, -0xe0,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xe5,0x01,0x00,0x00, -0xe4,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xe8,0x01,0x00,0x00,0xc4,0x01,0x00,0x00,0xe7,0x01,0x00,0x00, -0x41,0x00,0x08,0x00,0xd3,0x01,0x00,0x00,0xea,0x01,0x00,0x00, -0xd1,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0xbb,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xe7,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0xeb,0x01,0x00,0x00,0xea,0x01,0x00,0x00, -0x73,0x00,0x04,0x00,0x18,0x01,0x00,0x00,0xec,0x01,0x00,0x00, -0xeb,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x8b,0x01,0x00,0x00, -0xed,0x01,0x00,0x00,0xc9,0x01,0x00,0x00,0xe8,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0xed,0x01,0x00,0x00,0xec,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xef,0x01,0x00,0x00, -0xc4,0x01,0x00,0x00,0x29,0x01,0x00,0x00,0x41,0x00,0x08,0x00, -0xd3,0x01,0x00,0x00,0xf1,0x01,0x00,0x00,0xd1,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xbb,0x01,0x00,0x00,0xd0,0x00,0x00,0x00, -0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0xf2,0x01,0x00,0x00,0xf1,0x01,0x00,0x00,0x73,0x00,0x04,0x00, -0x18,0x01,0x00,0x00,0xf3,0x01,0x00,0x00,0xf2,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x8b,0x01,0x00,0x00,0xf4,0x01,0x00,0x00, -0xc9,0x01,0x00,0x00,0xef,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0xf4,0x01,0x00,0x00,0xf3,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xf7,0x01,0x00,0x00,0xc4,0x01,0x00,0x00, -0xf6,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0xd3,0x01,0x00,0x00, -0xf9,0x01,0x00,0x00,0xd1,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0xbb,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0xfa,0x01,0x00,0x00, -0xf9,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x18,0x01,0x00,0x00, -0xfb,0x01,0x00,0x00,0xfa,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x8b,0x01,0x00,0x00,0xfc,0x01,0x00,0x00,0xc9,0x01,0x00,0x00, -0xf7,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xfc,0x01,0x00,0x00, -0xfb,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xff,0x01,0x00,0x00,0xc4,0x01,0x00,0x00,0xfe,0x01,0x00,0x00, -0x41,0x00,0x08,0x00,0xd3,0x01,0x00,0x00,0x01,0x02,0x00,0x00, -0xd1,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0xbb,0x01,0x00,0x00, -0xd0,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0x02,0x02,0x00,0x00,0x01,0x02,0x00,0x00, -0x73,0x00,0x04,0x00,0x18,0x01,0x00,0x00,0x03,0x02,0x00,0x00, -0x02,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x8b,0x01,0x00,0x00, -0x04,0x02,0x00,0x00,0xc9,0x01,0x00,0x00,0xff,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0x04,0x02,0x00,0x00,0x03,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x07,0x02,0x00,0x00, -0xc4,0x01,0x00,0x00,0x06,0x02,0x00,0x00,0x41,0x00,0x08,0x00, -0xd3,0x01,0x00,0x00,0x09,0x02,0x00,0x00,0xd1,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xbb,0x01,0x00,0x00,0xd0,0x00,0x00,0x00, -0xe7,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0x0a,0x02,0x00,0x00,0x09,0x02,0x00,0x00,0x73,0x00,0x04,0x00, -0x18,0x01,0x00,0x00,0x0b,0x02,0x00,0x00,0x0a,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0x8b,0x01,0x00,0x00,0x0c,0x02,0x00,0x00, -0xc9,0x01,0x00,0x00,0x07,0x02,0x00,0x00,0x3e,0x00,0x03,0x00, -0x0c,0x02,0x00,0x00,0x0b,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x11,0x02,0x00,0x00,0x5f,0x03,0x00,0x00, -0x0f,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xa9,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xab,0x01,0x00,0x00,0xe0,0x00,0x04,0x00, -0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x12,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x15,0x02,0x00,0x00, -0x62,0x03,0x00,0x00,0x13,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x18,0x02,0x00,0x00,0x66,0x03,0x00,0x00, -0x16,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x1a,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x1a,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x68,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0xab,0x01,0x00,0x00,0xc4,0x02,0x00,0x00,0x1d,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x20,0x02,0x00,0x00, -0x68,0x03,0x00,0x00,0x6c,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x1c,0x02,0x00,0x00,0x1d,0x02,0x00,0x00,0x00,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x20,0x02,0x00,0x00,0x1b,0x02,0x00,0x00, -0x1c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x1b,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x22,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x22,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x6c,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0x1b,0x02,0x00,0x00, -0x4e,0x02,0x00,0x00,0x25,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0x28,0x02,0x00,0x00,0x6c,0x03,0x00,0x00, -0x60,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x24,0x02,0x00,0x00, -0x25,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x28,0x02,0x00,0x00,0x23,0x02,0x00,0x00,0x24,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x23,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x2a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x2a,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x7e,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0x23,0x02,0x00,0x00,0x4c,0x02,0x00,0x00, -0x2b,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0x30,0x02,0x00,0x00,0x7e,0x03,0x00,0x00,0x62,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x2c,0x02,0x00,0x00,0x2b,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x30,0x02,0x00,0x00, -0x2b,0x02,0x00,0x00,0x2c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x2b,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x36,0x02,0x00,0x00,0x6c,0x03,0x00,0x00,0x62,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x38,0x02,0x00,0x00, -0x36,0x02,0x00,0x00,0x7e,0x03,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3a,0x02,0x00,0x00,0x55,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x3c,0x02,0x00,0x00,0x6c,0x03,0x00,0x00,0x61,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3d,0x02,0x00,0x00, -0x3a,0x02,0x00,0x00,0x3c,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3f,0x02,0x00,0x00,0x64,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x40,0x02,0x00,0x00,0x3d,0x02,0x00,0x00,0x3f,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x42,0x02,0x00,0x00, -0x40,0x02,0x00,0x00,0x7e,0x03,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x44,0x02,0x00,0x00,0x42,0x02,0x00,0x00, -0x43,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x46,0x02,0x00,0x00,0x44,0x02,0x00,0x00,0x68,0x03,0x00,0x00, -0x41,0x00,0x05,0x00,0x8b,0x01,0x00,0x00,0x47,0x02,0x00,0x00, -0x79,0x01,0x00,0x00,0x46,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0x18,0x01,0x00,0x00,0x48,0x02,0x00,0x00,0x47,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0x49,0x02,0x00,0x00,0x4a,0x02,0x00,0x00, -0x34,0x02,0x00,0x00,0x38,0x02,0x00,0x00,0x3e,0x00,0x03,0x00, -0x4a,0x02,0x00,0x00,0x48,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x4c,0x02,0x00,0x00,0x7e,0x03,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x2a,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x2c,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x25,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x25,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4e,0x02,0x00,0x00, -0x6c,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x22,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x24,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x50,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x50,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x6d,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0x24,0x02,0x00,0x00, -0x7c,0x02,0x00,0x00,0x53,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0x56,0x02,0x00,0x00,0x6d,0x03,0x00,0x00, -0xbf,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x52,0x02,0x00,0x00, -0x53,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x56,0x02,0x00,0x00,0x51,0x02,0x00,0x00,0x52,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x51,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x58,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x58,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x7b,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0x51,0x02,0x00,0x00,0x7a,0x02,0x00,0x00, -0x59,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0x5e,0x02,0x00,0x00,0x7b,0x03,0x00,0x00,0xbc,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x5a,0x02,0x00,0x00,0x59,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x5e,0x02,0x00,0x00, -0x59,0x02,0x00,0x00,0x5a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x59,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x64,0x02,0x00,0x00,0x6d,0x03,0x00,0x00,0xbc,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x66,0x02,0x00,0x00, -0x64,0x02,0x00,0x00,0x7b,0x03,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x68,0x02,0x00,0x00,0x59,0x00,0x00,0x00, -0xb9,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x6b,0x02,0x00,0x00,0x6d,0x03,0x00,0x00,0x6a,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6c,0x02,0x00,0x00, -0x68,0x02,0x00,0x00,0x6b,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x6e,0x02,0x00,0x00,0x68,0x00,0x00,0x00, -0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x6f,0x02,0x00,0x00,0x6c,0x02,0x00,0x00,0x6e,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x71,0x02,0x00,0x00, -0x6f,0x02,0x00,0x00,0x7b,0x03,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x73,0x02,0x00,0x00,0x71,0x02,0x00,0x00, -0x72,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x75,0x02,0x00,0x00,0x73,0x02,0x00,0x00,0x68,0x03,0x00,0x00, -0x41,0x00,0x05,0x00,0x8b,0x01,0x00,0x00,0x76,0x02,0x00,0x00, -0xc9,0x01,0x00,0x00,0x75,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0x18,0x01,0x00,0x00,0x77,0x02,0x00,0x00,0x76,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0x49,0x02,0x00,0x00,0x78,0x02,0x00,0x00, -0x62,0x02,0x00,0x00,0x66,0x02,0x00,0x00,0x3e,0x00,0x03,0x00, -0x78,0x02,0x00,0x00,0x77,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x7a,0x02,0x00,0x00,0x7b,0x03,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x58,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x5a,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x53,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x53,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7c,0x02,0x00,0x00, -0x6d,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x50,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x52,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x7e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x7e,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x6e,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0x52,0x02,0x00,0x00, -0xc2,0x02,0x00,0x00,0x81,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0x84,0x02,0x00,0x00,0x6e,0x03,0x00,0x00, -0xbf,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x80,0x02,0x00,0x00, -0x81,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x84,0x02,0x00,0x00,0x7f,0x02,0x00,0x00,0x80,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x7f,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x86,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x86,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x72,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0x7f,0x02,0x00,0x00,0xc0,0x02,0x00,0x00, -0x89,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0x8c,0x02,0x00,0x00,0x72,0x03,0x00,0x00,0x60,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x88,0x02,0x00,0x00,0x89,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x8c,0x02,0x00,0x00, -0x87,0x02,0x00,0x00,0x88,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x87,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x8e,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x8e,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x74,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0x87,0x02,0x00,0x00,0xbe,0x02,0x00,0x00,0x91,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x94,0x02,0x00,0x00, -0x74,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x90,0x02,0x00,0x00,0x91,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x94,0x02,0x00,0x00,0x8f,0x02,0x00,0x00, -0x90,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x8f,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x96,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x96,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x76,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0x8f,0x02,0x00,0x00, -0xbc,0x02,0x00,0x00,0x97,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0x9c,0x02,0x00,0x00,0x76,0x03,0x00,0x00, -0x62,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x98,0x02,0x00,0x00, -0x97,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x9c,0x02,0x00,0x00,0x97,0x02,0x00,0x00,0x98,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x97,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9e,0x02,0x00,0x00,0x6e,0x03,0x00,0x00, -0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa0,0x02,0x00,0x00,0x9e,0x02,0x00,0x00,0x74,0x03,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa2,0x02,0x00,0x00, -0xa0,0x02,0x00,0x00,0xa1,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa4,0x02,0x00,0x00,0x72,0x03,0x00,0x00, -0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa5,0x02,0x00,0x00,0xa2,0x02,0x00,0x00,0xa4,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa7,0x02,0x00,0x00, -0xa5,0x02,0x00,0x00,0x76,0x03,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xab,0x02,0x00,0x00,0xa4,0x02,0x00,0x00, -0x76,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x49,0x02,0x00,0x00, -0xac,0x02,0x00,0x00,0x34,0x02,0x00,0x00,0xab,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0x18,0x01,0x00,0x00,0xad,0x02,0x00,0x00, -0xac,0x02,0x00,0x00,0x73,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0xae,0x02,0x00,0x00,0xad,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0x49,0x02,0x00,0x00,0xb3,0x02,0x00,0x00,0x62,0x02,0x00,0x00, -0xa0,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x18,0x01,0x00,0x00, -0xb4,0x02,0x00,0x00,0xb3,0x02,0x00,0x00,0x73,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0xb5,0x02,0x00,0x00,0xb4,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,0xb7,0x02,0x00,0x00, -0xca,0x00,0x00,0x00,0xa7,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0xb8,0x02,0x00,0x00,0xb7,0x02,0x00,0x00, -0x0c,0x00,0x08,0x00,0xc4,0x00,0x00,0x00,0xb9,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0xae,0x02,0x00,0x00, -0xb5,0x02,0x00,0x00,0xb8,0x02,0x00,0x00,0x3e,0x00,0x03,0x00, -0xb7,0x02,0x00,0x00,0xb9,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xbc,0x02,0x00,0x00,0x76,0x03,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x96,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x98,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x91,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x91,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbe,0x02,0x00,0x00, -0x74,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x8e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x90,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x89,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x89,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xc0,0x02,0x00,0x00,0x72,0x03,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x86,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x88,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x81,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x81,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xc2,0x02,0x00,0x00,0x6e,0x03,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x7e,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x80,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x1d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x1d,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc4,0x02,0x00,0x00, -0x68,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x1a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x1c,0x02,0x00,0x00, -0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x12,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xd7,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xd7,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xc6,0x02,0x00,0x00,0x4e,0x03,0x00,0x00, -0x6c,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd4,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xd6,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xcb,0x02,0x00,0x00,0x55,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xcc,0x02,0x00,0x00,0x96,0x00,0x00,0x00,0xcb,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd1,0x02,0x00,0x00, -0x59,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xd2,0x02,0x00,0x00,0xa8,0x00,0x00,0x00, -0xd1,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0xd7,0x02,0x00,0x00,0x12,0x00,0x00,0x00,0xd6,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xd8,0x02,0x00,0x00, -0xd7,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd9,0x02,0x00,0x00,0x0f,0x00,0x00,0x00,0xd8,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdd,0x02,0x00,0x00, -0x47,0x00,0x00,0x00,0xd8,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0xdf,0x02,0x00,0x00,0xde,0x02,0x00,0x00, -0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xe0,0x02,0x00,0x00,0xdf,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xe1,0x02,0x00,0x00,0xdd,0x02,0x00,0x00, -0xe0,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xe2,0x02,0x00,0x00,0xd9,0x02,0x00,0x00,0xe1,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0xe4,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xe4,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x4f,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0xd6,0x00,0x00,0x00, -0x4a,0x03,0x00,0x00,0xe7,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0xea,0x02,0x00,0x00,0x4f,0x03,0x00,0x00, -0xbf,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xe6,0x02,0x00,0x00, -0xe7,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xea,0x02,0x00,0x00,0xe5,0x02,0x00,0x00,0xe6,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xe5,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0xec,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xec,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x50,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0xe5,0x02,0x00,0x00,0x48,0x03,0x00,0x00, -0xef,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0xf2,0x02,0x00,0x00,0x50,0x03,0x00,0x00,0x60,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xee,0x02,0x00,0x00,0xef,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xf2,0x02,0x00,0x00, -0xed,0x02,0x00,0x00,0xee,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xed,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xf6,0x02,0x00,0x00,0x50,0x03,0x00,0x00,0x61,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf7,0x02,0x00,0x00, -0xcc,0x02,0x00,0x00,0xf6,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xf9,0x02,0x00,0x00,0x64,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xfa,0x02,0x00,0x00,0xf7,0x02,0x00,0x00,0xf9,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfe,0x02,0x00,0x00, -0x4f,0x03,0x00,0x00,0x6a,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xff,0x02,0x00,0x00,0xd2,0x02,0x00,0x00, -0xfe,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x01,0x03,0x00,0x00,0x68,0x00,0x00,0x00,0xbc,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x02,0x03,0x00,0x00, -0xff,0x02,0x00,0x00,0x01,0x03,0x00,0x00,0xf9,0x00,0x02,0x00, -0x04,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x04,0x03,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x52,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0xed,0x02,0x00,0x00,0x46,0x03,0x00,0x00, -0x07,0x03,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0x0a,0x03,0x00,0x00,0x52,0x03,0x00,0x00,0xbc,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x06,0x03,0x00,0x00,0x07,0x03,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x0a,0x03,0x00,0x00, -0x05,0x03,0x00,0x00,0x06,0x03,0x00,0x00,0xf8,0x00,0x02,0x00, -0x05,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,0x0c,0x03,0x00,0x00, -0xf8,0x00,0x02,0x00,0x0c,0x03,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x54,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0x05,0x03,0x00,0x00,0x44,0x03,0x00,0x00,0x0f,0x03,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x12,0x03,0x00,0x00, -0x54,0x03,0x00,0x00,0x62,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x0e,0x03,0x00,0x00,0x0f,0x03,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x12,0x03,0x00,0x00,0x0d,0x03,0x00,0x00, -0x0e,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x0d,0x03,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x15,0x03,0x00,0x00, -0xfa,0x02,0x00,0x00,0x54,0x03,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0x18,0x03,0x00,0x00,0x15,0x03,0x00,0x00, -0x36,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x1a,0x03,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x18,0x03,0x00,0x00, -0x19,0x03,0x00,0x00,0x1a,0x03,0x00,0x00,0xf8,0x00,0x02,0x00, -0x19,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x1d,0x03,0x00,0x00,0x02,0x03,0x00,0x00,0x52,0x03,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x1e,0x03,0x00,0x00, -0x12,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x1f,0x03,0x00,0x00,0x1e,0x03,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x20,0x03,0x00,0x00, -0x1d,0x03,0x00,0x00,0x1f,0x03,0x00,0x00,0xf9,0x00,0x02,0x00, -0x1a,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x1a,0x03,0x00,0x00, -0xf5,0x00,0x07,0x00,0xc2,0x00,0x00,0x00,0x21,0x03,0x00,0x00, -0x18,0x03,0x00,0x00,0x0d,0x03,0x00,0x00,0x20,0x03,0x00,0x00, -0x19,0x03,0x00,0x00,0xf7,0x00,0x03,0x00,0x23,0x03,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x21,0x03,0x00,0x00, -0x22,0x03,0x00,0x00,0x23,0x03,0x00,0x00,0xf8,0x00,0x02,0x00, -0x22,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x2b,0x03,0x00,0x00,0x02,0x03,0x00,0x00,0x52,0x03,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x2d,0x03,0x00,0x00, -0x12,0x00,0x00,0x00,0x2c,0x03,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x2e,0x03,0x00,0x00,0x2d,0x03,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2f,0x03,0x00,0x00, -0x2b,0x03,0x00,0x00,0x2e,0x03,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x30,0x03,0x00,0x00,0xe2,0x02,0x00,0x00, -0x2f,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x32,0x03,0x00,0x00,0x30,0x03,0x00,0x00,0xfa,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x34,0x03,0x00,0x00, -0x32,0x03,0x00,0x00,0x54,0x03,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x36,0x03,0x00,0x00,0x4f,0x03,0x00,0x00, -0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x38,0x03,0x00,0x00,0x36,0x03,0x00,0x00,0x52,0x03,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3a,0x03,0x00,0x00, -0x38,0x03,0x00,0x00,0x39,0x03,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3c,0x03,0x00,0x00,0x50,0x03,0x00,0x00, -0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x3d,0x03,0x00,0x00,0x3a,0x03,0x00,0x00,0x3c,0x03,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3f,0x03,0x00,0x00, -0x3d,0x03,0x00,0x00,0x54,0x03,0x00,0x00,0x41,0x00,0x05,0x00, -0xcd,0x00,0x00,0x00,0x40,0x03,0x00,0x00,0xca,0x00,0x00,0x00, -0x3f,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0x41,0x03,0x00,0x00,0x40,0x03,0x00,0x00,0x41,0x00,0x06,0x00, -0xd3,0x01,0x00,0x00,0x42,0x03,0x00,0x00,0x27,0x03,0x00,0x00, -0x34,0x00,0x00,0x00,0x34,0x03,0x00,0x00,0x3e,0x00,0x03,0x00, -0x42,0x03,0x00,0x00,0x41,0x03,0x00,0x00,0xf9,0x00,0x02,0x00, -0x23,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x23,0x03,0x00,0x00, -0xf9,0x00,0x02,0x00,0x0f,0x03,0x00,0x00,0xf8,0x00,0x02,0x00, -0x0f,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x44,0x03,0x00,0x00,0x54,0x03,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x0c,0x03,0x00,0x00,0xf8,0x00,0x02,0x00, -0x0e,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,0x07,0x03,0x00,0x00, -0xf8,0x00,0x02,0x00,0x07,0x03,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x46,0x03,0x00,0x00,0x52,0x03,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x04,0x03,0x00,0x00, -0xf8,0x00,0x02,0x00,0x06,0x03,0x00,0x00,0xf9,0x00,0x02,0x00, -0xef,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xef,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x48,0x03,0x00,0x00, -0x50,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xec,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xee,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0xe7,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xe7,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x4a,0x03,0x00,0x00,0x4f,0x03,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xe4,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xe6,0x02,0x00,0x00,0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00, - -}; -const uint64_t matmul_q4_k_f32_aligned_len = 12648; - -unsigned char matmul_q4_k_f32_aligned_fp32_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0x7e,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x27,0x00,0x00,0x00, -0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00, -0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00, -0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30, -0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x0f,0x00,0x0f,0x00,0x05,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x4c,0x00,0x00,0x00,0x22,0x01,0x00,0x00,0x78,0x01,0x00,0x00, -0xc6,0x01,0x00,0x00,0xcd,0x01,0x00,0x00,0xb4,0x02,0x00,0x00, -0xfd,0x02,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x05,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x30,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x0d,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0x10,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x37,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x3d,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x4c,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x4f,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x53,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x60,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x62,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x6c,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xa7,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xb9,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xbc,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x1c,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x1d,0x01,0x00,0x00,0x06,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1e,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1e,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1e,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x1f,0x01,0x00,0x00, -0x06,0x00,0x00,0x00,0x90,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0x20,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x20,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x20,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x22,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x22,0x01,0x00,0x00,0x21,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x9e,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x9f,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xca,0x01,0x00,0x00,0x06,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0xcb,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0xcb,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0xcb,0x01,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xcd,0x01,0x00,0x00, -0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xcd,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xb4,0x02,0x00,0x00,0x0b,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xfa,0x02,0x00,0x00, -0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0xfb,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0xfb,0x02,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0xfb,0x02,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xfd,0x02,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xfd,0x02,0x00,0x00,0x21,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00, -0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x1e,0x00,0x10,0x00,0x10,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x11,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x11,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x15,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0x0a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x27,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x3e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x61,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x63,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x61,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x67,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x61,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x72,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x78,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x77,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x7d,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x77,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x81,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x97,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0xa2,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0xa9,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xb8,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xb9,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x4f,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbd,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0xbc,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbe,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbf,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0xbe,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc0,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0xbf,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc1,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0xbc,0x00,0x00,0x00, -0x14,0x00,0x02,0x00,0xc2,0x00,0x00,0x00,0x16,0x00,0x03,0x00, -0xc4,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xc5,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xc6,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x1c,0x00,0x04,0x00, -0xc8,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0xc7,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0xc9,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0xc8,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0xcc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0xcd,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xc4,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0xd0,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xf4,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xfb,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x02,0x01,0x00,0x00,0x20,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x07,0x01,0x00,0x00, -0x10,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x15,0x01,0x00,0x00, -0xc4,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x16,0x00,0x03,0x00, -0x18,0x01,0x00,0x00,0x10,0x00,0x00,0x00,0x17,0x00,0x04,0x00, -0x19,0x01,0x00,0x00,0x18,0x01,0x00,0x00,0x02,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x1a,0x01,0x00,0x00,0x08,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x1b,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x1c,0x00,0x04,0x00, -0x1c,0x01,0x00,0x00,0x1a,0x01,0x00,0x00,0x1b,0x01,0x00,0x00, -0x1c,0x00,0x04,0x00,0x1d,0x01,0x00,0x00,0x1a,0x01,0x00,0x00, -0xfb,0x00,0x00,0x00,0x1e,0x00,0x05,0x00,0x1e,0x01,0x00,0x00, -0x19,0x01,0x00,0x00,0x1c,0x01,0x00,0x00,0x1d,0x01,0x00,0x00, -0x1d,0x00,0x03,0x00,0x1f,0x01,0x00,0x00,0x1e,0x01,0x00,0x00, -0x1e,0x00,0x03,0x00,0x20,0x01,0x00,0x00,0x1f,0x01,0x00,0x00, -0x20,0x00,0x04,0x00,0x21,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x20,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x21,0x01,0x00,0x00, -0x22,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x24,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x19,0x01,0x00,0x00, -0x20,0x00,0x04,0x00,0x30,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x1a,0x01,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x35,0x01,0x00,0x00,0x3f,0x00,0x00,0x00,0x15,0x00,0x04,0x00, -0x37,0x01,0x00,0x00,0x08,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x4d,0x01,0x00,0x00, -0x0f,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x74,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x75,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x74,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,0x76,0x01,0x00,0x00, -0xc4,0x00,0x00,0x00,0x75,0x01,0x00,0x00,0x20,0x00,0x04,0x00, -0x77,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x76,0x01,0x00,0x00, -0x3b,0x00,0x04,0x00,0x77,0x01,0x00,0x00,0x78,0x01,0x00,0x00, -0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x89,0x01,0x00,0x00, -0x04,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x9e,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0x33,0x00,0x06,0x00,0x09,0x00,0x00,0x00,0x9f,0x01,0x00,0x00, -0x9e,0x01,0x00,0x00,0x39,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xa0,0x01,0x00,0x00, -0x51,0x00,0x00,0x00,0x9f,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xa1,0x01,0x00,0x00, -0x84,0x00,0x00,0x00,0xa0,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xa2,0x01,0x00,0x00, -0x86,0x00,0x00,0x00,0xa1,0x01,0x00,0x00,0x6c,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbd,0x01,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc2,0x01,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc3,0x01,0x00,0x00, -0x84,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0xc2,0x01,0x00,0x00, -0x1c,0x00,0x04,0x00,0xc4,0x01,0x00,0x00,0xc4,0x00,0x00,0x00, -0xc3,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0xc5,0x01,0x00,0x00, -0x04,0x00,0x00,0x00,0xc4,0x01,0x00,0x00,0x3b,0x00,0x04,0x00, -0xc5,0x01,0x00,0x00,0xc6,0x01,0x00,0x00,0x04,0x00,0x00,0x00, -0x17,0x00,0x04,0x00,0xc9,0x01,0x00,0x00,0xc4,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0xca,0x01,0x00,0x00, -0xc9,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,0xcb,0x01,0x00,0x00, -0xca,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0xcc,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0xcb,0x01,0x00,0x00,0x3b,0x00,0x04,0x00, -0xcc,0x01,0x00,0x00,0xcd,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0xcf,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0xc4,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xe0,0x01,0x00,0x00,0x03,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xe6,0x01,0x00,0x00,0x51,0x00,0x00,0x00, -0x9f,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xe7,0x01,0x00,0x00,0x84,0x00,0x00,0x00, -0xe6,0x01,0x00,0x00,0x77,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xe8,0x01,0x00,0x00,0x86,0x00,0x00,0x00, -0xe7,0x01,0x00,0x00,0x6c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xeb,0x01,0x00,0x00,0x08,0x01,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xec,0x01,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xef,0x01,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x77,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x0a,0x02,0x00,0x00, -0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x1c,0x00,0x04,0x00,0x0b,0x02,0x00,0x00,0xc4,0x00,0x00,0x00, -0x0a,0x02,0x00,0x00,0x20,0x00,0x04,0x00,0x0c,0x02,0x00,0x00, -0x07,0x00,0x00,0x00,0x0b,0x02,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x1c,0x02,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x37,0x02,0x00,0x00,0x84,0x00,0x00,0x00, -0xbf,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x1c,0x00,0x04,0x00, -0x38,0x02,0x00,0x00,0xc4,0x00,0x00,0x00,0x37,0x02,0x00,0x00, -0x20,0x00,0x04,0x00,0x39,0x02,0x00,0x00,0x07,0x00,0x00,0x00, -0x38,0x02,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x42,0x02,0x00,0x00,0x86,0x00,0x00,0x00,0xb9,0x00,0x00,0x00, -0xbf,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x4a,0x02,0x00,0x00,0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x79,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0xac,0x02,0x00,0x00,0x0d,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0xb4,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0x1d,0x00,0x03,0x00,0xfa,0x02,0x00,0x00,0xc4,0x00,0x00,0x00, -0x1e,0x00,0x03,0x00,0xfb,0x02,0x00,0x00,0xfa,0x02,0x00,0x00, -0x20,0x00,0x04,0x00,0xfc,0x02,0x00,0x00,0x0c,0x00,0x00,0x00, -0xfb,0x02,0x00,0x00,0x3b,0x00,0x04,0x00,0xfc,0x02,0x00,0x00, -0xfd,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x02,0x03,0x00,0x00,0x05,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x0f,0x03,0x00,0x00, -0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x05,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xc9,0x00,0x00,0x00, -0xca,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x0c,0x02,0x00,0x00,0x0d,0x02,0x00,0x00,0x07,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x39,0x02,0x00,0x00,0x3a,0x02,0x00,0x00, -0x07,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x16,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x17,0x00,0x00,0x00, -0x16,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x17,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1e,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x21,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x28,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x27,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x29,0x00,0x00,0x00, -0x28,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x2a,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x29,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x2e,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00, -0x24,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x30,0x00,0x00,0x00, -0x2a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x35,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x36,0x00,0x00,0x00, -0x35,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x38,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00, -0x38,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x3a,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x3f,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x3e,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x3f,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x42,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x3b,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x47,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x4a,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x4c,0x00,0x00,0x00, -0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x4f,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x55,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x54,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00, -0x50,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x4f,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x64,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,0x63,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x68,0x00,0x00,0x00, -0x5d,0x00,0x00,0x00,0x67,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x6d,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x73,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x72,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x79,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x7d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x82,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x81,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x83,0x00,0x00,0x00, -0x82,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0x83,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x87,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x87,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8a,0x00,0x00,0x00, -0x47,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x8a,0x00,0x00,0x00, -0x83,0x00,0x00,0x00,0x0c,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x8e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x26,0x00,0x00,0x00, -0x88,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x91,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x93,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x93,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x96,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x98,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x98,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9a,0x00,0x00,0x00, -0x96,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x94,0x00,0x00,0x00, -0x9a,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9d,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9e,0x00,0x00,0x00, -0x9d,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0xa2,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xa4,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0xa4,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa8,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0xa7,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0xaa,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0xaa,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00, -0xa8,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xad,0x00,0x00,0x00,0xa5,0x00,0x00,0x00, -0xac,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xaf,0x00,0x00,0x00,0xad,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb0,0x00,0x00,0x00, -0xaf,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xb2,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb2,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x23,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0xd1,0x00,0x00,0x00, -0xb3,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0xc3,0x00,0x00,0x00,0x23,0x03,0x00,0x00,0xc1,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xb4,0x00,0x00,0x00,0xb3,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xc3,0x00,0x00,0x00, -0xb3,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xb3,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00, -0xce,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0x23,0x03,0x00,0x00, -0x3e,0x00,0x03,0x00,0xce,0x00,0x00,0x00,0xcc,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd1,0x00,0x00,0x00, -0x23,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xb2,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb4,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xd4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xd4,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x3c,0x03,0x00,0x00,0xb0,0x00,0x00,0x00,0xb4,0x00,0x00,0x00, -0xf1,0x01,0x00,0x00,0xd7,0x00,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x38,0x03,0x00,0x00,0x9e,0x00,0x00,0x00, -0xb4,0x00,0x00,0x00,0xee,0x01,0x00,0x00,0xd7,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x24,0x03,0x00,0x00, -0x84,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0x9c,0x02,0x00,0x00, -0xd7,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0xdb,0x00,0x00,0x00,0x24,0x03,0x00,0x00,0x8e,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xd6,0x00,0x00,0x00,0xd7,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xdb,0x00,0x00,0x00, -0xd5,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xd5,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xdd,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x34,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0xd5,0x00,0x00,0x00,0xa4,0x01,0x00,0x00,0xe0,0x00,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xe3,0x00,0x00,0x00, -0x34,0x03,0x00,0x00,0x37,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xdf,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xe3,0x00,0x00,0x00,0xde,0x00,0x00,0x00, -0xdf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe8,0x00,0x00,0x00, -0x73,0x00,0x00,0x00,0x34,0x03,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,0xe8,0x00,0x00,0x00, -0x99,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xec,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xed,0x00,0x00,0x00, -0x38,0x03,0x00,0x00,0xec,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xef,0x00,0x00,0x00,0xed,0x00,0x00,0x00, -0x6e,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xf5,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0xf4,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf7,0x00,0x00,0x00, -0x6e,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,0xf5,0x00,0x00,0x00, -0xf7,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xfc,0x00,0x00,0x00,0xef,0x00,0x00,0x00,0xfb,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xff,0x00,0x00,0x00, -0xef,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x03,0x01,0x00,0x00,0xff,0x00,0x00,0x00, -0x02,0x01,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x06,0x01,0x00,0x00,0xff,0x00,0x00,0x00,0x02,0x01,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x08,0x01,0x00,0x00, -0x06,0x01,0x00,0x00,0x07,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x0b,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x03,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x0d,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,0x08,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x10,0x01,0x00,0x00, -0x03,0x01,0x00,0x00,0x02,0x01,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x12,0x01,0x00,0x00,0xff,0x00,0x00,0x00, -0x07,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x13,0x01,0x00,0x00,0x12,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x14,0x01,0x00,0x00, -0x10,0x01,0x00,0x00,0x13,0x01,0x00,0x00,0x41,0x00,0x07,0x00, -0x24,0x01,0x00,0x00,0x25,0x01,0x00,0x00,0x22,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x19,0x01,0x00,0x00,0x26,0x01,0x00,0x00, -0x25,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x15,0x01,0x00,0x00, -0x27,0x01,0x00,0x00,0x26,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0x29,0x01,0x00,0x00,0x0d,0x01,0x00,0x00, -0x77,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x2b,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x29,0x01,0x00,0x00, -0x2a,0x01,0x00,0x00,0x45,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x2a,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x30,0x01,0x00,0x00, -0x31,0x01,0x00,0x00,0x22,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0xfc,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x0d,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0x1a,0x01,0x00,0x00,0x32,0x01,0x00,0x00, -0x31,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x33,0x01,0x00,0x00,0x32,0x01,0x00,0x00,0x7c,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x34,0x01,0x00,0x00,0x33,0x01,0x00,0x00, -0xc7,0x00,0x05,0x00,0x13,0x00,0x00,0x00,0x36,0x01,0x00,0x00, -0x34,0x01,0x00,0x00,0x35,0x01,0x00,0x00,0x72,0x00,0x04,0x00, -0x37,0x01,0x00,0x00,0x38,0x01,0x00,0x00,0x36,0x01,0x00,0x00, -0x7c,0x00,0x04,0x00,0x1a,0x01,0x00,0x00,0x39,0x01,0x00,0x00, -0x38,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x3d,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,0x77,0x00,0x00,0x00, -0x41,0x00,0x08,0x00,0x30,0x01,0x00,0x00,0x3e,0x01,0x00,0x00, -0x22,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0xfc,0x00,0x00,0x00, -0xd0,0x00,0x00,0x00,0x3d,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0x1a,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,0x3e,0x01,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x40,0x01,0x00,0x00, -0x3f,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x41,0x01,0x00,0x00,0x40,0x01,0x00,0x00,0xc7,0x00,0x05,0x00, -0x13,0x00,0x00,0x00,0x42,0x01,0x00,0x00,0x41,0x01,0x00,0x00, -0x35,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0x37,0x01,0x00,0x00, -0x43,0x01,0x00,0x00,0x42,0x01,0x00,0x00,0x7c,0x00,0x04,0x00, -0x1a,0x01,0x00,0x00,0x44,0x01,0x00,0x00,0x43,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0x2b,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x45,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x48,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,0x77,0x00,0x00,0x00, -0x41,0x00,0x08,0x00,0x30,0x01,0x00,0x00,0x49,0x01,0x00,0x00, -0x22,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0xfc,0x00,0x00,0x00, -0xd0,0x00,0x00,0x00,0x48,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0x1a,0x01,0x00,0x00,0x4a,0x01,0x00,0x00,0x49,0x01,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4b,0x01,0x00,0x00, -0x4a,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x4c,0x01,0x00,0x00,0x4b,0x01,0x00,0x00,0xc7,0x00,0x05,0x00, -0x13,0x00,0x00,0x00,0x4e,0x01,0x00,0x00,0x4c,0x01,0x00,0x00, -0x4d,0x01,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x51,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,0x77,0x00,0x00,0x00, -0x41,0x00,0x08,0x00,0x30,0x01,0x00,0x00,0x52,0x01,0x00,0x00, -0x22,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0xfc,0x00,0x00,0x00, -0xd0,0x00,0x00,0x00,0x51,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0x1a,0x01,0x00,0x00,0x53,0x01,0x00,0x00,0x52,0x01,0x00,0x00, -0xc2,0x00,0x05,0x00,0x1a,0x01,0x00,0x00,0x54,0x01,0x00,0x00, -0x53,0x01,0x00,0x00,0x81,0x00,0x00,0x00,0xc4,0x00,0x05,0x00, -0x1a,0x01,0x00,0x00,0x55,0x01,0x00,0x00,0x54,0x01,0x00,0x00, -0xa9,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x56,0x01,0x00,0x00,0x55,0x01,0x00,0x00,0x7c,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x57,0x01,0x00,0x00,0x56,0x01,0x00,0x00, -0xc5,0x00,0x05,0x00,0x13,0x00,0x00,0x00,0x58,0x01,0x00,0x00, -0x4e,0x01,0x00,0x00,0x57,0x01,0x00,0x00,0x72,0x00,0x04,0x00, -0x37,0x01,0x00,0x00,0x59,0x01,0x00,0x00,0x58,0x01,0x00,0x00, -0x7c,0x00,0x04,0x00,0x1a,0x01,0x00,0x00,0x5a,0x01,0x00,0x00, -0x59,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x1a,0x01,0x00,0x00, -0x5f,0x01,0x00,0x00,0x49,0x01,0x00,0x00,0xc2,0x00,0x05,0x00, -0x1a,0x01,0x00,0x00,0x60,0x01,0x00,0x00,0x5f,0x01,0x00,0x00, -0xa9,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x30,0x01,0x00,0x00, -0x63,0x01,0x00,0x00,0x22,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0xfc,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x0d,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0x1a,0x01,0x00,0x00,0x64,0x01,0x00,0x00, -0x63,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x1a,0x01,0x00,0x00, -0x65,0x01,0x00,0x00,0x64,0x01,0x00,0x00,0x81,0x00,0x00,0x00, -0xc4,0x00,0x05,0x00,0x1a,0x01,0x00,0x00,0x66,0x01,0x00,0x00, -0x65,0x01,0x00,0x00,0xa9,0x00,0x00,0x00,0xc5,0x00,0x05,0x00, -0x1a,0x01,0x00,0x00,0x67,0x01,0x00,0x00,0x60,0x01,0x00,0x00, -0x66,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x2b,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x2b,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x1a,0x01,0x00,0x00,0x58,0x03,0x00,0x00,0x44,0x01,0x00,0x00, -0x2a,0x01,0x00,0x00,0x67,0x01,0x00,0x00,0x45,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0x1a,0x01,0x00,0x00,0x57,0x03,0x00,0x00, -0x39,0x01,0x00,0x00,0x2a,0x01,0x00,0x00,0x5a,0x01,0x00,0x00, -0x45,0x01,0x00,0x00,0x51,0x00,0x05,0x00,0xc4,0x00,0x00,0x00, -0x6a,0x01,0x00,0x00,0x27,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x70,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x6c,0x01,0x00,0x00, -0x57,0x03,0x00,0x00,0x85,0x00,0x05,0x00,0xc4,0x00,0x00,0x00, -0x6d,0x01,0x00,0x00,0x6a,0x01,0x00,0x00,0x6c,0x01,0x00,0x00, -0x51,0x00,0x05,0x00,0xc4,0x00,0x00,0x00,0x70,0x01,0x00,0x00, -0x27,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x70,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0x72,0x01,0x00,0x00,0x58,0x03,0x00,0x00, -0x85,0x00,0x05,0x00,0xc4,0x00,0x00,0x00,0x73,0x01,0x00,0x00, -0x70,0x01,0x00,0x00,0x72,0x01,0x00,0x00,0x41,0x00,0x08,0x00, -0x30,0x01,0x00,0x00,0x7d,0x01,0x00,0x00,0x22,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x14,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x1a,0x01,0x00,0x00, -0x7e,0x01,0x00,0x00,0x7d,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x08,0x01,0x00,0x00, -0x77,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,0x1a,0x01,0x00,0x00, -0x81,0x01,0x00,0x00,0x7e,0x01,0x00,0x00,0x80,0x01,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x82,0x01,0x00,0x00, -0x81,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x83,0x01,0x00,0x00,0x82,0x01,0x00,0x00,0xc7,0x00,0x05,0x00, -0x13,0x00,0x00,0x00,0x84,0x01,0x00,0x00,0x83,0x01,0x00,0x00, -0x4d,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0x85,0x01,0x00,0x00,0x84,0x01,0x00,0x00,0x7f,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0x7d,0x03,0x00,0x00,0x73,0x01,0x00,0x00, -0x0c,0x00,0x08,0x00,0xc4,0x00,0x00,0x00,0x88,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x6d,0x01,0x00,0x00, -0x85,0x01,0x00,0x00,0x7d,0x03,0x00,0x00,0x41,0x00,0x05,0x00, -0x89,0x01,0x00,0x00,0x8a,0x01,0x00,0x00,0x78,0x01,0x00,0x00, -0xf8,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0x8a,0x01,0x00,0x00, -0x88,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x8c,0x01,0x00,0x00,0xf8,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x90,0x01,0x00,0x00, -0x14,0x01,0x00,0x00,0x39,0x00,0x00,0x00,0x41,0x00,0x08,0x00, -0x30,0x01,0x00,0x00,0x91,0x01,0x00,0x00,0x22,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x90,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x1a,0x01,0x00,0x00, -0x92,0x01,0x00,0x00,0x91,0x01,0x00,0x00,0xc2,0x00,0x05,0x00, -0x1a,0x01,0x00,0x00,0x95,0x01,0x00,0x00,0x92,0x01,0x00,0x00, -0x80,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x96,0x01,0x00,0x00,0x95,0x01,0x00,0x00,0x7c,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x97,0x01,0x00,0x00,0x96,0x01,0x00,0x00, -0xc7,0x00,0x05,0x00,0x13,0x00,0x00,0x00,0x98,0x01,0x00,0x00, -0x97,0x01,0x00,0x00,0x4d,0x01,0x00,0x00,0x6f,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0x99,0x01,0x00,0x00,0x98,0x01,0x00,0x00, -0x0c,0x00,0x08,0x00,0xc4,0x00,0x00,0x00,0x9c,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x6d,0x01,0x00,0x00, -0x99,0x01,0x00,0x00,0x7d,0x03,0x00,0x00,0x41,0x00,0x05,0x00, -0x89,0x01,0x00,0x00,0x9d,0x01,0x00,0x00,0x78,0x01,0x00,0x00, -0x8c,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x9d,0x01,0x00,0x00, -0x9c,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xe0,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xe0,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa4,0x01,0x00,0x00,0x34,0x03,0x00,0x00, -0xa2,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xdd,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xdf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xa6,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xa6,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x35,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0xea,0x01,0x00,0x00, -0xa7,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0xac,0x01,0x00,0x00,0x35,0x03,0x00,0x00,0xa7,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xa8,0x01,0x00,0x00,0xa7,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xac,0x01,0x00,0x00, -0xa7,0x01,0x00,0x00,0xa8,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xa7,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xb1,0x01,0x00,0x00,0x7e,0x00,0x00,0x00,0x35,0x03,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb4,0x01,0x00,0x00, -0xb1,0x01,0x00,0x00,0xab,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xb5,0x01,0x00,0x00,0xb4,0x01,0x00,0x00, -0x77,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xb6,0x01,0x00,0x00,0x3c,0x03,0x00,0x00,0xb5,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb8,0x01,0x00,0x00, -0xb6,0x01,0x00,0x00,0x79,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xbe,0x01,0x00,0x00,0xb1,0x01,0x00,0x00, -0xbd,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xc0,0x01,0x00,0x00,0x79,0x00,0x00,0x00,0x77,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc1,0x01,0x00,0x00, -0xbe,0x01,0x00,0x00,0xc0,0x01,0x00,0x00,0x41,0x00,0x07,0x00, -0xcf,0x01,0x00,0x00,0xd0,0x01,0x00,0x00,0xcd,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xb8,0x01,0x00,0x00,0x3e,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0xd1,0x01,0x00,0x00, -0xd0,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x89,0x01,0x00,0x00, -0xd2,0x01,0x00,0x00,0xc6,0x01,0x00,0x00,0xc1,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0xd2,0x01,0x00,0x00,0xd1,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd4,0x01,0x00,0x00, -0xc1,0x01,0x00,0x00,0x39,0x00,0x00,0x00,0x41,0x00,0x07,0x00, -0xcf,0x01,0x00,0x00,0xd6,0x01,0x00,0x00,0xcd,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xb8,0x01,0x00,0x00,0x39,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0xd7,0x01,0x00,0x00, -0xd6,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x89,0x01,0x00,0x00, -0xd8,0x01,0x00,0x00,0xc6,0x01,0x00,0x00,0xd4,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0xd8,0x01,0x00,0x00,0xd7,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xda,0x01,0x00,0x00, -0xc1,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x41,0x00,0x07,0x00, -0xcf,0x01,0x00,0x00,0xdc,0x01,0x00,0x00,0xcd,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xb8,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0xdd,0x01,0x00,0x00, -0xdc,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x89,0x01,0x00,0x00, -0xde,0x01,0x00,0x00,0xc6,0x01,0x00,0x00,0xda,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0xde,0x01,0x00,0x00,0xdd,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe1,0x01,0x00,0x00, -0xc1,0x01,0x00,0x00,0xe0,0x01,0x00,0x00,0x41,0x00,0x07,0x00, -0xcf,0x01,0x00,0x00,0xe3,0x01,0x00,0x00,0xcd,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xb8,0x01,0x00,0x00,0xe0,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0xe4,0x01,0x00,0x00, -0xe3,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x89,0x01,0x00,0x00, -0xe5,0x01,0x00,0x00,0xc6,0x01,0x00,0x00,0xe1,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0xe5,0x01,0x00,0x00,0xe4,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xea,0x01,0x00,0x00, -0x35,0x03,0x00,0x00,0xe8,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xa6,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xa8,0x01,0x00,0x00, -0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0xeb,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xee,0x01,0x00,0x00,0x38,0x03,0x00,0x00,0xec,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf1,0x01,0x00,0x00, -0x3c,0x03,0x00,0x00,0xef,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xf3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xf3,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x3e,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0xa8,0x01,0x00,0x00,0x9a,0x02,0x00,0x00, -0xf6,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0xf9,0x01,0x00,0x00,0x3e,0x03,0x00,0x00,0x6c,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xf5,0x01,0x00,0x00,0xf6,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xf9,0x01,0x00,0x00, -0xf4,0x01,0x00,0x00,0xf5,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xf4,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xfb,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xfb,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x42,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0xf4,0x01,0x00,0x00,0x26,0x02,0x00,0x00,0xfe,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x01,0x02,0x00,0x00, -0x42,0x03,0x00,0x00,0x60,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xfd,0x01,0x00,0x00,0xfe,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x01,0x02,0x00,0x00,0xfc,0x01,0x00,0x00, -0xfd,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xfc,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0x03,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x03,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x54,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0xfc,0x01,0x00,0x00, -0x24,0x02,0x00,0x00,0x04,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0x09,0x02,0x00,0x00,0x54,0x03,0x00,0x00, -0x62,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x05,0x02,0x00,0x00, -0x04,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x09,0x02,0x00,0x00,0x04,0x02,0x00,0x00,0x05,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x04,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x0f,0x02,0x00,0x00,0x42,0x03,0x00,0x00, -0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x11,0x02,0x00,0x00,0x0f,0x02,0x00,0x00,0x54,0x03,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x13,0x02,0x00,0x00, -0x55,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x15,0x02,0x00,0x00,0x42,0x03,0x00,0x00, -0x61,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x16,0x02,0x00,0x00,0x13,0x02,0x00,0x00,0x15,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x18,0x02,0x00,0x00, -0x64,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x19,0x02,0x00,0x00,0x16,0x02,0x00,0x00, -0x18,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x1b,0x02,0x00,0x00,0x19,0x02,0x00,0x00,0x54,0x03,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1d,0x02,0x00,0x00, -0x1b,0x02,0x00,0x00,0x1c,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x1f,0x02,0x00,0x00,0x1d,0x02,0x00,0x00, -0x3e,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x89,0x01,0x00,0x00, -0x20,0x02,0x00,0x00,0x78,0x01,0x00,0x00,0x1f,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x21,0x02,0x00,0x00, -0x20,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00, -0x22,0x02,0x00,0x00,0x0d,0x02,0x00,0x00,0x11,0x02,0x00,0x00, -0x3e,0x00,0x03,0x00,0x22,0x02,0x00,0x00,0x21,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x24,0x02,0x00,0x00, -0x54,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x03,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0xfe,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xfe,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x26,0x02,0x00,0x00,0x42,0x03,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xfb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xfd,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x28,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x28,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x43,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0xfd,0x01,0x00,0x00,0x54,0x02,0x00,0x00,0x2b,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x2e,0x02,0x00,0x00, -0x43,0x03,0x00,0x00,0xbf,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x2a,0x02,0x00,0x00,0x2b,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x2e,0x02,0x00,0x00,0x29,0x02,0x00,0x00, -0x2a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x29,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x30,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x30,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x51,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0x29,0x02,0x00,0x00, -0x52,0x02,0x00,0x00,0x31,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0x36,0x02,0x00,0x00,0x51,0x03,0x00,0x00, -0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x32,0x02,0x00,0x00, -0x31,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x36,0x02,0x00,0x00,0x31,0x02,0x00,0x00,0x32,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x31,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3c,0x02,0x00,0x00,0x43,0x03,0x00,0x00, -0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x3e,0x02,0x00,0x00,0x3c,0x02,0x00,0x00,0x51,0x03,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x40,0x02,0x00,0x00, -0x59,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x43,0x02,0x00,0x00,0x43,0x03,0x00,0x00, -0x42,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x44,0x02,0x00,0x00,0x40,0x02,0x00,0x00,0x43,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x46,0x02,0x00,0x00, -0x68,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x47,0x02,0x00,0x00,0x44,0x02,0x00,0x00, -0x46,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x49,0x02,0x00,0x00,0x47,0x02,0x00,0x00,0x51,0x03,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4b,0x02,0x00,0x00, -0x49,0x02,0x00,0x00,0x4a,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x4d,0x02,0x00,0x00,0x4b,0x02,0x00,0x00, -0x3e,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x89,0x01,0x00,0x00, -0x4e,0x02,0x00,0x00,0xc6,0x01,0x00,0x00,0x4d,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x4f,0x02,0x00,0x00, -0x4e,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00, -0x50,0x02,0x00,0x00,0x3a,0x02,0x00,0x00,0x3e,0x02,0x00,0x00, -0x3e,0x00,0x03,0x00,0x50,0x02,0x00,0x00,0x4f,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x52,0x02,0x00,0x00, -0x51,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x30,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x32,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x2b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x2b,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x54,0x02,0x00,0x00,0x43,0x03,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x28,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x2a,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x56,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x56,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x44,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0x2a,0x02,0x00,0x00,0x98,0x02,0x00,0x00,0x59,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x5c,0x02,0x00,0x00, -0x44,0x03,0x00,0x00,0xbf,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x58,0x02,0x00,0x00,0x59,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x5c,0x02,0x00,0x00,0x57,0x02,0x00,0x00, -0x58,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x57,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x5e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x5e,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x48,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0x57,0x02,0x00,0x00, -0x96,0x02,0x00,0x00,0x61,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0x64,0x02,0x00,0x00,0x48,0x03,0x00,0x00, -0x60,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x60,0x02,0x00,0x00, -0x61,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x64,0x02,0x00,0x00,0x5f,0x02,0x00,0x00,0x60,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x5f,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x66,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x66,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x4a,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0x5f,0x02,0x00,0x00,0x94,0x02,0x00,0x00, -0x69,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0x6c,0x02,0x00,0x00,0x4a,0x03,0x00,0x00,0xbc,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x68,0x02,0x00,0x00,0x69,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x6c,0x02,0x00,0x00, -0x67,0x02,0x00,0x00,0x68,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x67,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x6e,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x6e,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x4c,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0x67,0x02,0x00,0x00,0x92,0x02,0x00,0x00,0x6f,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x74,0x02,0x00,0x00, -0x4c,0x03,0x00,0x00,0x62,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x70,0x02,0x00,0x00,0x6f,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x74,0x02,0x00,0x00,0x6f,0x02,0x00,0x00, -0x70,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x6f,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x76,0x02,0x00,0x00, -0x44,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x78,0x02,0x00,0x00,0x76,0x02,0x00,0x00, -0x4a,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x7a,0x02,0x00,0x00,0x78,0x02,0x00,0x00,0x79,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7c,0x02,0x00,0x00, -0x48,0x03,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x7d,0x02,0x00,0x00,0x7a,0x02,0x00,0x00, -0x7c,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x7f,0x02,0x00,0x00,0x7d,0x02,0x00,0x00,0x4c,0x03,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x83,0x02,0x00,0x00, -0x7c,0x02,0x00,0x00,0x4c,0x03,0x00,0x00,0x41,0x00,0x05,0x00, -0xcd,0x00,0x00,0x00,0x84,0x02,0x00,0x00,0x0d,0x02,0x00,0x00, -0x83,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0x85,0x02,0x00,0x00,0x84,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0xcd,0x00,0x00,0x00,0x8a,0x02,0x00,0x00,0x3a,0x02,0x00,0x00, -0x78,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0x8b,0x02,0x00,0x00,0x8a,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0xcd,0x00,0x00,0x00,0x8d,0x02,0x00,0x00,0xca,0x00,0x00,0x00, -0x7f,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0x8e,0x02,0x00,0x00,0x8d,0x02,0x00,0x00,0x0c,0x00,0x08,0x00, -0xc4,0x00,0x00,0x00,0x8f,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0x85,0x02,0x00,0x00,0x8b,0x02,0x00,0x00, -0x8e,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x8d,0x02,0x00,0x00, -0x8f,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x92,0x02,0x00,0x00,0x4c,0x03,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x6e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x70,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x69,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x69,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x94,0x02,0x00,0x00,0x4a,0x03,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x66,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x68,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x61,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x61,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x96,0x02,0x00,0x00, -0x48,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x5e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x60,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x59,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x59,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x98,0x02,0x00,0x00,0x44,0x03,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x56,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x58,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xf6,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xf6,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9a,0x02,0x00,0x00,0x3e,0x03,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xf3,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xf5,0x01,0x00,0x00,0xe0,0x00,0x04,0x00, -0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xeb,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xd7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xd7,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9c,0x02,0x00,0x00,0x24,0x03,0x00,0x00,0x6c,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xd4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xd6,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa1,0x02,0x00,0x00,0x55,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa2,0x02,0x00,0x00, -0x96,0x00,0x00,0x00,0xa1,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa7,0x02,0x00,0x00,0x59,0x00,0x00,0x00, -0xb9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa8,0x02,0x00,0x00,0xa8,0x00,0x00,0x00,0xa7,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0xad,0x02,0x00,0x00, -0x12,0x00,0x00,0x00,0xac,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xae,0x02,0x00,0x00,0xad,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xaf,0x02,0x00,0x00, -0x0f,0x00,0x00,0x00,0xae,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xb3,0x02,0x00,0x00,0x47,0x00,0x00,0x00, -0xae,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0xb5,0x02,0x00,0x00,0xb4,0x02,0x00,0x00,0x0c,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb6,0x02,0x00,0x00, -0xb5,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xb7,0x02,0x00,0x00,0xb3,0x02,0x00,0x00,0xb6,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb8,0x02,0x00,0x00, -0xaf,0x02,0x00,0x00,0xb7,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0xba,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xba,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x25,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0x20,0x03,0x00,0x00, -0xbd,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0xc0,0x02,0x00,0x00,0x25,0x03,0x00,0x00,0xbf,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xbc,0x02,0x00,0x00,0xbd,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xc0,0x02,0x00,0x00, -0xbb,0x02,0x00,0x00,0xbc,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xbb,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xc2,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xc2,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x26,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0xbb,0x02,0x00,0x00,0x1e,0x03,0x00,0x00,0xc5,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xc8,0x02,0x00,0x00, -0x26,0x03,0x00,0x00,0x60,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xc4,0x02,0x00,0x00,0xc5,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xc8,0x02,0x00,0x00,0xc3,0x02,0x00,0x00, -0xc4,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xc3,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xcc,0x02,0x00,0x00, -0x26,0x03,0x00,0x00,0x61,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xcd,0x02,0x00,0x00,0xa2,0x02,0x00,0x00, -0xcc,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xcf,0x02,0x00,0x00,0x64,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd0,0x02,0x00,0x00, -0xcd,0x02,0x00,0x00,0xcf,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xd4,0x02,0x00,0x00,0x25,0x03,0x00,0x00, -0x42,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd5,0x02,0x00,0x00,0xa8,0x02,0x00,0x00,0xd4,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd7,0x02,0x00,0x00, -0x68,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xd8,0x02,0x00,0x00,0xd5,0x02,0x00,0x00, -0xd7,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xda,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xda,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x28,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0xc3,0x02,0x00,0x00,0x1c,0x03,0x00,0x00,0xdd,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xe0,0x02,0x00,0x00, -0x28,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xdc,0x02,0x00,0x00,0xdd,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xe0,0x02,0x00,0x00,0xdb,0x02,0x00,0x00, -0xdc,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xdb,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0xe2,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xe2,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x2a,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0xdb,0x02,0x00,0x00, -0x1a,0x03,0x00,0x00,0xe5,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0xe8,0x02,0x00,0x00,0x2a,0x03,0x00,0x00, -0x62,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xe4,0x02,0x00,0x00, -0xe5,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xe8,0x02,0x00,0x00,0xe3,0x02,0x00,0x00,0xe4,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xe3,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xeb,0x02,0x00,0x00,0xd0,0x02,0x00,0x00, -0x2a,0x03,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0xee,0x02,0x00,0x00,0xeb,0x02,0x00,0x00,0x36,0x00,0x00,0x00, -0xf7,0x00,0x03,0x00,0xf0,0x02,0x00,0x00,0x00,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xee,0x02,0x00,0x00,0xef,0x02,0x00,0x00, -0xf0,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xef,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf3,0x02,0x00,0x00, -0xd8,0x02,0x00,0x00,0x28,0x03,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0xf4,0x02,0x00,0x00,0x12,0x00,0x00,0x00, -0xd0,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xf5,0x02,0x00,0x00,0xf4,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0xf6,0x02,0x00,0x00,0xf3,0x02,0x00,0x00, -0xf5,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xf0,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xf0,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0xc2,0x00,0x00,0x00,0xf7,0x02,0x00,0x00,0xee,0x02,0x00,0x00, -0xe3,0x02,0x00,0x00,0xf6,0x02,0x00,0x00,0xef,0x02,0x00,0x00, -0xf7,0x00,0x03,0x00,0xf9,0x02,0x00,0x00,0x00,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xf7,0x02,0x00,0x00,0xf8,0x02,0x00,0x00, -0xf9,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xf8,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x01,0x03,0x00,0x00, -0xd8,0x02,0x00,0x00,0x28,0x03,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x03,0x03,0x00,0x00,0x12,0x00,0x00,0x00, -0x02,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x04,0x03,0x00,0x00,0x03,0x03,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x05,0x03,0x00,0x00,0x01,0x03,0x00,0x00, -0x04,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x06,0x03,0x00,0x00,0xb8,0x02,0x00,0x00,0x05,0x03,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x08,0x03,0x00,0x00, -0x06,0x03,0x00,0x00,0xd0,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x0a,0x03,0x00,0x00,0x08,0x03,0x00,0x00, -0x2a,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x0c,0x03,0x00,0x00,0x25,0x03,0x00,0x00,0xbc,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0e,0x03,0x00,0x00, -0x0c,0x03,0x00,0x00,0x28,0x03,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x10,0x03,0x00,0x00,0x0e,0x03,0x00,0x00, -0x0f,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x12,0x03,0x00,0x00,0x26,0x03,0x00,0x00,0x62,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x13,0x03,0x00,0x00, -0x10,0x03,0x00,0x00,0x12,0x03,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x15,0x03,0x00,0x00,0x13,0x03,0x00,0x00, -0x2a,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00, -0x16,0x03,0x00,0x00,0xca,0x00,0x00,0x00,0x15,0x03,0x00,0x00, -0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x17,0x03,0x00,0x00, -0x16,0x03,0x00,0x00,0x41,0x00,0x06,0x00,0xcf,0x01,0x00,0x00, -0x18,0x03,0x00,0x00,0xfd,0x02,0x00,0x00,0x34,0x00,0x00,0x00, -0x0a,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,0x18,0x03,0x00,0x00, -0x17,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,0xf9,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xf9,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0xe5,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xe5,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1a,0x03,0x00,0x00, -0x2a,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xe2,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xe4,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0xdd,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xdd,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x1c,0x03,0x00,0x00,0x28,0x03,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xda,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xdc,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xc5,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xc5,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x1e,0x03,0x00,0x00,0x26,0x03,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xc2,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xc4,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0xbd,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xbd,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x20,0x03,0x00,0x00, -0x25,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xba,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xbc,0x02,0x00,0x00, -0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00, -}; -const uint64_t matmul_q4_k_f32_aligned_fp32_len = 11900; - -unsigned char matmul_q4_k_f32_fp32_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0x87,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x27,0x00,0x00,0x00, -0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00, -0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00, -0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30, -0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x0f,0x00,0x0f,0x00,0x05,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x4c,0x00,0x00,0x00,0x21,0x01,0x00,0x00,0x78,0x01,0x00,0x00, -0xc4,0x01,0x00,0x00,0xcf,0x01,0x00,0x00,0xb5,0x02,0x00,0x00, -0xfe,0x02,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x05,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x30,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x0d,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0x10,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x37,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x3d,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x4c,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x4f,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x53,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x60,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x62,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x6c,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xa6,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xb8,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xbb,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x1b,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x1c,0x01,0x00,0x00,0x06,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1d,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1d,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1d,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x1e,0x01,0x00,0x00, -0x06,0x00,0x00,0x00,0x90,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0x1f,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1f,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x1f,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x21,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x21,0x01,0x00,0x00,0x21,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x9e,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x9f,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xcc,0x01,0x00,0x00,0x06,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0xcd,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0xcd,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0xcd,0x01,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xcf,0x01,0x00,0x00, -0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xcf,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xb5,0x02,0x00,0x00,0x0b,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xfb,0x02,0x00,0x00, -0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0xfc,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0xfc,0x02,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0xfc,0x02,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xfe,0x02,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xfe,0x02,0x00,0x00,0x21,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00, -0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x1e,0x00,0x10,0x00,0x10,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x11,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x11,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x15,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0x0a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x27,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x3e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x61,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x63,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x61,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x67,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x61,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x72,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x85,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x90,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0xa1,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xa6,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xb7,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xb9,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0xb8,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xba,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x4f,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xbb,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xba,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xbc,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0xb9,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xb7,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xbf,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x14,0x00,0x02,0x00, -0xc1,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0xc3,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xc4,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xc5,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc4,0x00,0x00,0x00, -0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xc6,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc5,0x00,0x00,0x00, -0xbb,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xc7,0x00,0x00,0x00, -0xc3,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0xc8,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xc7,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0xcb,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xcc,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xf3,0x00,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xfa,0x00,0x00,0x00, -0x80,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x01,0x01,0x00,0x00,0x20,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x06,0x01,0x00,0x00,0x10,0x00,0x00,0x00, -0x17,0x00,0x04,0x00,0x14,0x01,0x00,0x00,0xc3,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0x17,0x01,0x00,0x00, -0x10,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x18,0x01,0x00,0x00, -0x17,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00, -0x19,0x01,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x1a,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x1b,0x01,0x00,0x00, -0x19,0x01,0x00,0x00,0x1a,0x01,0x00,0x00,0x1c,0x00,0x04,0x00, -0x1c,0x01,0x00,0x00,0x19,0x01,0x00,0x00,0xfa,0x00,0x00,0x00, -0x1e,0x00,0x05,0x00,0x1d,0x01,0x00,0x00,0x18,0x01,0x00,0x00, -0x1b,0x01,0x00,0x00,0x1c,0x01,0x00,0x00,0x1d,0x00,0x03,0x00, -0x1e,0x01,0x00,0x00,0x1d,0x01,0x00,0x00,0x1e,0x00,0x03,0x00, -0x1f,0x01,0x00,0x00,0x1e,0x01,0x00,0x00,0x20,0x00,0x04,0x00, -0x20,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x1f,0x01,0x00,0x00, -0x3b,0x00,0x04,0x00,0x20,0x01,0x00,0x00,0x21,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x23,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x18,0x01,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x28,0x01,0x00,0x00,0x04,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x30,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x19,0x01,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x35,0x01,0x00,0x00,0x3f,0x00,0x00,0x00,0x15,0x00,0x04,0x00, -0x37,0x01,0x00,0x00,0x08,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x4d,0x01,0x00,0x00, -0x0f,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x74,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x75,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x74,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,0x76,0x01,0x00,0x00, -0xc3,0x00,0x00,0x00,0x75,0x01,0x00,0x00,0x20,0x00,0x04,0x00, -0x77,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x76,0x01,0x00,0x00, -0x3b,0x00,0x04,0x00,0x77,0x01,0x00,0x00,0x78,0x01,0x00,0x00, -0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x89,0x01,0x00,0x00, -0x04,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x9e,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0x33,0x00,0x06,0x00,0x09,0x00,0x00,0x00,0x9f,0x01,0x00,0x00, -0x9e,0x01,0x00,0x00,0x39,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xa0,0x01,0x00,0x00, -0x51,0x00,0x00,0x00,0x9f,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xa1,0x01,0x00,0x00, -0x84,0x00,0x00,0x00,0xa0,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xa2,0x01,0x00,0x00, -0x86,0x00,0x00,0x00,0xa1,0x01,0x00,0x00,0x6c,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc0,0x01,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc1,0x01,0x00,0x00, -0x84,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,0xc0,0x01,0x00,0x00, -0x1c,0x00,0x04,0x00,0xc2,0x01,0x00,0x00,0xc3,0x00,0x00,0x00, -0xc1,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0xc3,0x01,0x00,0x00, -0x04,0x00,0x00,0x00,0xc2,0x01,0x00,0x00,0x3b,0x00,0x04,0x00, -0xc3,0x01,0x00,0x00,0xc4,0x01,0x00,0x00,0x04,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc8,0x01,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x1d,0x00,0x03,0x00,0xcc,0x01,0x00,0x00,0xc3,0x00,0x00,0x00, -0x1e,0x00,0x03,0x00,0xcd,0x01,0x00,0x00,0xcc,0x01,0x00,0x00, -0x20,0x00,0x04,0x00,0xce,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0xcd,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0xce,0x01,0x00,0x00, -0xcf,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0xda,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0xc3,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xe2,0x01,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xe7,0x01,0x00,0x00, -0x51,0x00,0x00,0x00,0x9f,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xe8,0x01,0x00,0x00, -0x84,0x00,0x00,0x00,0xe7,0x01,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xe9,0x01,0x00,0x00, -0x86,0x00,0x00,0x00,0xe8,0x01,0x00,0x00,0x6c,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xec,0x01,0x00,0x00, -0x08,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xed,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xf0,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x0b,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x0c,0x02,0x00,0x00, -0xc3,0x00,0x00,0x00,0x0b,0x02,0x00,0x00,0x20,0x00,0x04,0x00, -0x0d,0x02,0x00,0x00,0x07,0x00,0x00,0x00,0x0c,0x02,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x1d,0x02,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x38,0x02,0x00,0x00, -0x84,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0xbb,0x00,0x00,0x00, -0x1c,0x00,0x04,0x00,0x39,0x02,0x00,0x00,0xc3,0x00,0x00,0x00, -0x38,0x02,0x00,0x00,0x20,0x00,0x04,0x00,0x3a,0x02,0x00,0x00, -0x07,0x00,0x00,0x00,0x39,0x02,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x43,0x02,0x00,0x00,0x86,0x00,0x00,0x00, -0xb8,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x4b,0x02,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x7a,0x02,0x00,0x00,0x84,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0xad,0x02,0x00,0x00,0x0d,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0xb5,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0xfb,0x02,0x00,0x00, -0xc3,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0xfc,0x02,0x00,0x00, -0xfb,0x02,0x00,0x00,0x20,0x00,0x04,0x00,0xfd,0x02,0x00,0x00, -0x0c,0x00,0x00,0x00,0xfc,0x02,0x00,0x00,0x3b,0x00,0x04,0x00, -0xfd,0x02,0x00,0x00,0xfe,0x02,0x00,0x00,0x0c,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x03,0x03,0x00,0x00, -0x05,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x10,0x03,0x00,0x00,0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0xc8,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x0d,0x02,0x00,0x00,0x0e,0x02,0x00,0x00, -0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x3a,0x02,0x00,0x00, -0x3b,0x02,0x00,0x00,0x07,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x17,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x17,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x1e,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x17,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x27,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x29,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x1e,0x00,0x00,0x00, -0x29,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x2e,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x2d,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x2f,0x00,0x00,0x00, -0x2e,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x30,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x2f,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x30,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x34,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x36,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x36,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x3a,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00, -0x3a,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x3b,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x47,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x3b,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x49,0x00,0x00,0x00, -0x3d,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x49,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x4d,0x00,0x00,0x00, -0x4c,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x4d,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x50,0x00,0x00,0x00, -0x54,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x59,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x58,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5d,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x5d,0x00,0x00,0x00, -0x63,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x68,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,0x67,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6e,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x72,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x78,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x77,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7d,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x80,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x82,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x47,0x00,0x00,0x00, -0x82,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x85,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x87,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x89,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8c,0x00,0x00,0x00, -0x89,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x0c,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x26,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x8c,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x91,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x90,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x91,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x93,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0x42,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x97,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x96,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x98,0x00,0x00,0x00, -0x97,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x99,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0x98,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9a,0x00,0x00,0x00, -0x93,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0x9a,0x00,0x00,0x00, -0x83,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9d,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0xa2,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0xa2,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0x4a,0x00,0x00,0x00, -0xa6,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0xa9,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0xa8,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xaa,0x00,0x00,0x00, -0xa9,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xab,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0xaa,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00, -0xa4,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0xac,0x00,0x00,0x00, -0x83,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xaf,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xb1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xb1,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x24,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0x05,0x00,0x00,0x00, -0xd0,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,0x24,0x03,0x00,0x00, -0xc0,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xb3,0x00,0x00,0x00, -0xb2,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xc2,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0xb3,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0xcc,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,0xc9,0x00,0x00,0x00, -0x24,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,0xcd,0x00,0x00,0x00, -0xcb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd0,0x00,0x00,0x00,0x24,0x03,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xb1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xb3,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd3,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xd3,0x00,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x3d,0x03,0x00,0x00,0xaf,0x00,0x00,0x00, -0xb3,0x00,0x00,0x00,0xf2,0x01,0x00,0x00,0xd6,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x39,0x03,0x00,0x00, -0x9d,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0xef,0x01,0x00,0x00, -0xd6,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x25,0x03,0x00,0x00,0x83,0x00,0x00,0x00,0xb3,0x00,0x00,0x00, -0x9d,0x02,0x00,0x00,0xd6,0x00,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0xda,0x00,0x00,0x00,0x25,0x03,0x00,0x00, -0x8d,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xd5,0x00,0x00,0x00, -0xd6,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xda,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,0xd5,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xd4,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xdc,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdc,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x35,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,0xa4,0x01,0x00,0x00, -0xdf,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0xe2,0x00,0x00,0x00,0x35,0x03,0x00,0x00,0x37,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xde,0x00,0x00,0x00,0xdf,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xe2,0x00,0x00,0x00, -0xdd,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xdd,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xe7,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x35,0x03,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xea,0x00,0x00,0x00, -0xe7,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,0xea,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xec,0x00,0x00,0x00,0x39,0x03,0x00,0x00,0xeb,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xee,0x00,0x00,0x00, -0xec,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,0xe7,0x00,0x00,0x00, -0xf3,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xf6,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf7,0x00,0x00,0x00, -0xf4,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0xee,0x00,0x00,0x00, -0xfa,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xfe,0x00,0x00,0x00,0xee,0x00,0x00,0x00,0xfa,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x02,0x01,0x00,0x00, -0xfe,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x05,0x01,0x00,0x00,0xfe,0x00,0x00,0x00, -0x01,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x07,0x01,0x00,0x00,0x05,0x01,0x00,0x00,0x06,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0a,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x02,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x0c,0x01,0x00,0x00,0x0a,0x01,0x00,0x00, -0x07,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x0f,0x01,0x00,0x00,0x02,0x01,0x00,0x00,0x01,0x01,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x11,0x01,0x00,0x00, -0xfe,0x00,0x00,0x00,0x06,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x12,0x01,0x00,0x00,0x11,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x13,0x01,0x00,0x00,0x0f,0x01,0x00,0x00,0x12,0x01,0x00,0x00, -0x41,0x00,0x07,0x00,0x23,0x01,0x00,0x00,0x24,0x01,0x00,0x00, -0x21,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0xfb,0x00,0x00,0x00, -0x34,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x18,0x01,0x00,0x00, -0x25,0x01,0x00,0x00,0x24,0x01,0x00,0x00,0x73,0x00,0x04,0x00, -0x14,0x01,0x00,0x00,0x26,0x01,0x00,0x00,0x25,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x29,0x01,0x00,0x00, -0x0c,0x01,0x00,0x00,0x28,0x01,0x00,0x00,0xf7,0x00,0x03,0x00, -0x2b,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x29,0x01,0x00,0x00,0x2a,0x01,0x00,0x00,0x45,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x2a,0x01,0x00,0x00,0x41,0x00,0x08,0x00, -0x30,0x01,0x00,0x00,0x31,0x01,0x00,0x00,0x21,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0xcf,0x00,0x00,0x00, -0x0c,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x19,0x01,0x00,0x00, -0x32,0x01,0x00,0x00,0x31,0x01,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x33,0x01,0x00,0x00,0x32,0x01,0x00,0x00, -0x7c,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x34,0x01,0x00,0x00, -0x33,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x13,0x00,0x00,0x00, -0x36,0x01,0x00,0x00,0x34,0x01,0x00,0x00,0x35,0x01,0x00,0x00, -0x72,0x00,0x04,0x00,0x37,0x01,0x00,0x00,0x38,0x01,0x00,0x00, -0x36,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x19,0x01,0x00,0x00, -0x39,0x01,0x00,0x00,0x38,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3d,0x01,0x00,0x00,0x0c,0x01,0x00,0x00, -0x28,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x30,0x01,0x00,0x00, -0x3e,0x01,0x00,0x00,0x21,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0xfb,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x3d,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0x19,0x01,0x00,0x00,0x3f,0x01,0x00,0x00, -0x3e,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x40,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,0x7c,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x41,0x01,0x00,0x00,0x40,0x01,0x00,0x00, -0xc7,0x00,0x05,0x00,0x13,0x00,0x00,0x00,0x42,0x01,0x00,0x00, -0x41,0x01,0x00,0x00,0x35,0x01,0x00,0x00,0x72,0x00,0x04,0x00, -0x37,0x01,0x00,0x00,0x43,0x01,0x00,0x00,0x42,0x01,0x00,0x00, -0x7c,0x00,0x04,0x00,0x19,0x01,0x00,0x00,0x44,0x01,0x00,0x00, -0x43,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x2b,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x45,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x48,0x01,0x00,0x00,0x0c,0x01,0x00,0x00, -0x28,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x30,0x01,0x00,0x00, -0x49,0x01,0x00,0x00,0x21,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0xfb,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x48,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0x19,0x01,0x00,0x00,0x4a,0x01,0x00,0x00, -0x49,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x4b,0x01,0x00,0x00,0x4a,0x01,0x00,0x00,0x7c,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x4c,0x01,0x00,0x00,0x4b,0x01,0x00,0x00, -0xc7,0x00,0x05,0x00,0x13,0x00,0x00,0x00,0x4e,0x01,0x00,0x00, -0x4c,0x01,0x00,0x00,0x4d,0x01,0x00,0x00,0x82,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x51,0x01,0x00,0x00,0x0c,0x01,0x00,0x00, -0x28,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x30,0x01,0x00,0x00, -0x52,0x01,0x00,0x00,0x21,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0xfb,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x51,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0x19,0x01,0x00,0x00,0x53,0x01,0x00,0x00, -0x52,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x19,0x01,0x00,0x00, -0x54,0x01,0x00,0x00,0x53,0x01,0x00,0x00,0x80,0x00,0x00,0x00, -0xc4,0x00,0x05,0x00,0x19,0x01,0x00,0x00,0x55,0x01,0x00,0x00, -0x54,0x01,0x00,0x00,0xa8,0x00,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x56,0x01,0x00,0x00,0x55,0x01,0x00,0x00, -0x7c,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x57,0x01,0x00,0x00, -0x56,0x01,0x00,0x00,0xc5,0x00,0x05,0x00,0x13,0x00,0x00,0x00, -0x58,0x01,0x00,0x00,0x4e,0x01,0x00,0x00,0x57,0x01,0x00,0x00, -0x72,0x00,0x04,0x00,0x37,0x01,0x00,0x00,0x59,0x01,0x00,0x00, -0x58,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x19,0x01,0x00,0x00, -0x5a,0x01,0x00,0x00,0x59,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0x19,0x01,0x00,0x00,0x5f,0x01,0x00,0x00,0x49,0x01,0x00,0x00, -0xc2,0x00,0x05,0x00,0x19,0x01,0x00,0x00,0x60,0x01,0x00,0x00, -0x5f,0x01,0x00,0x00,0xa8,0x00,0x00,0x00,0x41,0x00,0x08,0x00, -0x30,0x01,0x00,0x00,0x63,0x01,0x00,0x00,0x21,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0xcf,0x00,0x00,0x00, -0x0c,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x19,0x01,0x00,0x00, -0x64,0x01,0x00,0x00,0x63,0x01,0x00,0x00,0xc2,0x00,0x05,0x00, -0x19,0x01,0x00,0x00,0x65,0x01,0x00,0x00,0x64,0x01,0x00,0x00, -0x80,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,0x19,0x01,0x00,0x00, -0x66,0x01,0x00,0x00,0x65,0x01,0x00,0x00,0xa8,0x00,0x00,0x00, -0xc5,0x00,0x05,0x00,0x19,0x01,0x00,0x00,0x67,0x01,0x00,0x00, -0x60,0x01,0x00,0x00,0x66,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0x2b,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x2b,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0x19,0x01,0x00,0x00,0x5c,0x03,0x00,0x00, -0x44,0x01,0x00,0x00,0x2a,0x01,0x00,0x00,0x67,0x01,0x00,0x00, -0x45,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x19,0x01,0x00,0x00, -0x5b,0x03,0x00,0x00,0x39,0x01,0x00,0x00,0x2a,0x01,0x00,0x00, -0x5a,0x01,0x00,0x00,0x45,0x01,0x00,0x00,0x51,0x00,0x05,0x00, -0xc3,0x00,0x00,0x00,0x6a,0x01,0x00,0x00,0x26,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x70,0x00,0x04,0x00,0xc3,0x00,0x00,0x00, -0x6c,0x01,0x00,0x00,0x5b,0x03,0x00,0x00,0x85,0x00,0x05,0x00, -0xc3,0x00,0x00,0x00,0x6d,0x01,0x00,0x00,0x6a,0x01,0x00,0x00, -0x6c,0x01,0x00,0x00,0x51,0x00,0x05,0x00,0xc3,0x00,0x00,0x00, -0x70,0x01,0x00,0x00,0x26,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0x70,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x72,0x01,0x00,0x00, -0x5c,0x03,0x00,0x00,0x85,0x00,0x05,0x00,0xc3,0x00,0x00,0x00, -0x73,0x01,0x00,0x00,0x70,0x01,0x00,0x00,0x72,0x01,0x00,0x00, -0x41,0x00,0x08,0x00,0x30,0x01,0x00,0x00,0x7d,0x01,0x00,0x00, -0x21,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0xfb,0x00,0x00,0x00, -0x85,0x00,0x00,0x00,0x13,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0x19,0x01,0x00,0x00,0x7e,0x01,0x00,0x00,0x7d,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x80,0x01,0x00,0x00, -0x07,0x01,0x00,0x00,0x28,0x01,0x00,0x00,0xc2,0x00,0x05,0x00, -0x19,0x01,0x00,0x00,0x81,0x01,0x00,0x00,0x7e,0x01,0x00,0x00, -0x80,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x82,0x01,0x00,0x00,0x81,0x01,0x00,0x00,0x7c,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x83,0x01,0x00,0x00,0x82,0x01,0x00,0x00, -0xc7,0x00,0x05,0x00,0x13,0x00,0x00,0x00,0x84,0x01,0x00,0x00, -0x83,0x01,0x00,0x00,0x4d,0x01,0x00,0x00,0x6f,0x00,0x04,0x00, -0xc3,0x00,0x00,0x00,0x85,0x01,0x00,0x00,0x84,0x01,0x00,0x00, -0x7f,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x86,0x03,0x00,0x00, -0x73,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,0xc3,0x00,0x00,0x00, -0x88,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x6d,0x01,0x00,0x00,0x85,0x01,0x00,0x00,0x86,0x03,0x00,0x00, -0x41,0x00,0x05,0x00,0x89,0x01,0x00,0x00,0x8a,0x01,0x00,0x00, -0x78,0x01,0x00,0x00,0xf7,0x00,0x00,0x00,0x3e,0x00,0x03,0x00, -0x8a,0x01,0x00,0x00,0x88,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x8c,0x01,0x00,0x00,0xf7,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x90,0x01,0x00,0x00,0x13,0x01,0x00,0x00,0x39,0x00,0x00,0x00, -0x41,0x00,0x08,0x00,0x30,0x01,0x00,0x00,0x91,0x01,0x00,0x00, -0x21,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0xfb,0x00,0x00,0x00, -0x85,0x00,0x00,0x00,0x90,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0x19,0x01,0x00,0x00,0x92,0x01,0x00,0x00,0x91,0x01,0x00,0x00, -0xc2,0x00,0x05,0x00,0x19,0x01,0x00,0x00,0x95,0x01,0x00,0x00, -0x92,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x96,0x01,0x00,0x00,0x95,0x01,0x00,0x00, -0x7c,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x97,0x01,0x00,0x00, -0x96,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x13,0x00,0x00,0x00, -0x98,0x01,0x00,0x00,0x97,0x01,0x00,0x00,0x4d,0x01,0x00,0x00, -0x6f,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x99,0x01,0x00,0x00, -0x98,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,0xc3,0x00,0x00,0x00, -0x9c,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x6d,0x01,0x00,0x00,0x99,0x01,0x00,0x00,0x86,0x03,0x00,0x00, -0x41,0x00,0x05,0x00,0x89,0x01,0x00,0x00,0x9d,0x01,0x00,0x00, -0x78,0x01,0x00,0x00,0x8c,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0x9d,0x01,0x00,0x00,0x9c,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xdf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdf,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa4,0x01,0x00,0x00, -0x35,0x03,0x00,0x00,0xa2,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xdc,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xa6,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xa6,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x36,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0xde,0x00,0x00,0x00, -0xeb,0x01,0x00,0x00,0xa9,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0xac,0x01,0x00,0x00,0x36,0x03,0x00,0x00, -0xa6,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xa8,0x01,0x00,0x00, -0xa9,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xac,0x01,0x00,0x00,0xa7,0x01,0x00,0x00,0xa8,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xa7,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xb0,0x01,0x00,0x00,0xa7,0x00,0x00,0x00, -0x7d,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xb2,0x01,0x00,0x00,0xb0,0x01,0x00,0x00,0x36,0x03,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0xb3,0x01,0x00,0x00, -0x12,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xb4,0x01,0x00,0x00,0xb3,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xb5,0x01,0x00,0x00, -0xb2,0x01,0x00,0x00,0xb4,0x01,0x00,0x00,0xf7,0x00,0x03,0x00, -0xb7,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xb5,0x01,0x00,0x00,0xb6,0x01,0x00,0x00,0xb7,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xb6,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xba,0x01,0x00,0x00,0x25,0x03,0x00,0x00, -0x78,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0xbc,0x01,0x00,0x00,0xba,0x01,0x00,0x00,0x8d,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xb7,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xb7,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0xc1,0x00,0x00,0x00, -0xbd,0x01,0x00,0x00,0xb5,0x01,0x00,0x00,0xa7,0x01,0x00,0x00, -0xbc,0x01,0x00,0x00,0xb6,0x01,0x00,0x00,0xf7,0x00,0x03,0x00, -0xbf,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xbd,0x01,0x00,0x00,0xbe,0x01,0x00,0x00,0xde,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xbe,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xc7,0x01,0x00,0x00,0x7d,0x00,0x00,0x00, -0x36,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xc9,0x01,0x00,0x00,0xc7,0x01,0x00,0x00,0xc8,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xcb,0x01,0x00,0x00, -0xc9,0x01,0x00,0x00,0x78,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xd6,0x01,0x00,0x00,0xc7,0x01,0x00,0x00, -0xaa,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd7,0x01,0x00,0x00,0x3d,0x03,0x00,0x00,0xd6,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd9,0x01,0x00,0x00, -0xd7,0x01,0x00,0x00,0x78,0x00,0x00,0x00,0x41,0x00,0x06,0x00, -0xda,0x01,0x00,0x00,0xdb,0x01,0x00,0x00,0xcf,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xd9,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc3,0x00,0x00,0x00,0xdc,0x01,0x00,0x00,0xdb,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x89,0x01,0x00,0x00,0xdd,0x01,0x00,0x00, -0xc4,0x01,0x00,0x00,0xcb,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0xdd,0x01,0x00,0x00,0xdc,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xbf,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xde,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe1,0x01,0x00,0x00, -0x7d,0x00,0x00,0x00,0x36,0x03,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xe3,0x01,0x00,0x00,0xe1,0x01,0x00,0x00, -0xe2,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xe5,0x01,0x00,0x00,0xe3,0x01,0x00,0x00,0x78,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x89,0x01,0x00,0x00,0xe6,0x01,0x00,0x00, -0xc4,0x01,0x00,0x00,0xe5,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0xe6,0x01,0x00,0x00,0xcb,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xbf,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xbf,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xa9,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xa9,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xeb,0x01,0x00,0x00,0x36,0x03,0x00,0x00,0xe9,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xa6,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xa8,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0xec,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xef,0x01,0x00,0x00,0x39,0x03,0x00,0x00, -0xed,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xf2,0x01,0x00,0x00,0x3d,0x03,0x00,0x00,0xf0,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xf4,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xf4,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x3f,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0xa8,0x01,0x00,0x00, -0x9b,0x02,0x00,0x00,0xf7,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0xfa,0x01,0x00,0x00,0x3f,0x03,0x00,0x00, -0x6c,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xf6,0x01,0x00,0x00, -0xf7,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xfa,0x01,0x00,0x00,0xf5,0x01,0x00,0x00,0xf6,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xf5,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xfc,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xfc,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x43,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0xf5,0x01,0x00,0x00,0x27,0x02,0x00,0x00, -0xff,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0x02,0x02,0x00,0x00,0x43,0x03,0x00,0x00,0x60,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xfe,0x01,0x00,0x00,0xff,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x02,0x02,0x00,0x00, -0xfd,0x01,0x00,0x00,0xfe,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xfd,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x04,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x04,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x55,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0xfd,0x01,0x00,0x00,0x25,0x02,0x00,0x00,0x05,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x0a,0x02,0x00,0x00, -0x55,0x03,0x00,0x00,0x62,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x06,0x02,0x00,0x00,0x05,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x0a,0x02,0x00,0x00,0x05,0x02,0x00,0x00, -0x06,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x10,0x02,0x00,0x00, -0x43,0x03,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x12,0x02,0x00,0x00,0x10,0x02,0x00,0x00, -0x55,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x14,0x02,0x00,0x00,0x55,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x16,0x02,0x00,0x00, -0x43,0x03,0x00,0x00,0x61,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x17,0x02,0x00,0x00,0x14,0x02,0x00,0x00, -0x16,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x19,0x02,0x00,0x00,0x64,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1a,0x02,0x00,0x00, -0x17,0x02,0x00,0x00,0x19,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x1c,0x02,0x00,0x00,0x1a,0x02,0x00,0x00, -0x55,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x1e,0x02,0x00,0x00,0x1c,0x02,0x00,0x00,0x1d,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x20,0x02,0x00,0x00, -0x1e,0x02,0x00,0x00,0x3f,0x03,0x00,0x00,0x41,0x00,0x05,0x00, -0x89,0x01,0x00,0x00,0x21,0x02,0x00,0x00,0x78,0x01,0x00,0x00, -0x20,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00, -0x22,0x02,0x00,0x00,0x21,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0xcc,0x00,0x00,0x00,0x23,0x02,0x00,0x00,0x0e,0x02,0x00,0x00, -0x12,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x23,0x02,0x00,0x00, -0x22,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x25,0x02,0x00,0x00,0x55,0x03,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x04,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x06,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xff,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xff,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x27,0x02,0x00,0x00,0x43,0x03,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xfc,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xfe,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0x29,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x29,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x44,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0xfe,0x01,0x00,0x00,0x55,0x02,0x00,0x00, -0x2c,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0x2f,0x02,0x00,0x00,0x44,0x03,0x00,0x00,0xbe,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x2b,0x02,0x00,0x00,0x2c,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x2f,0x02,0x00,0x00, -0x2a,0x02,0x00,0x00,0x2b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x2a,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x31,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x31,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x52,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0x2a,0x02,0x00,0x00,0x53,0x02,0x00,0x00,0x32,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x37,0x02,0x00,0x00, -0x52,0x03,0x00,0x00,0xbb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x33,0x02,0x00,0x00,0x32,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x37,0x02,0x00,0x00,0x32,0x02,0x00,0x00, -0x33,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x32,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3d,0x02,0x00,0x00, -0x44,0x03,0x00,0x00,0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3f,0x02,0x00,0x00,0x3d,0x02,0x00,0x00, -0x52,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x41,0x02,0x00,0x00,0x59,0x00,0x00,0x00,0xb8,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x44,0x02,0x00,0x00, -0x44,0x03,0x00,0x00,0x43,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x45,0x02,0x00,0x00,0x41,0x02,0x00,0x00, -0x44,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x47,0x02,0x00,0x00,0x68,0x00,0x00,0x00,0xbb,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x48,0x02,0x00,0x00, -0x45,0x02,0x00,0x00,0x47,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x4a,0x02,0x00,0x00,0x48,0x02,0x00,0x00, -0x52,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x4c,0x02,0x00,0x00,0x4a,0x02,0x00,0x00,0x4b,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4e,0x02,0x00,0x00, -0x4c,0x02,0x00,0x00,0x3f,0x03,0x00,0x00,0x41,0x00,0x05,0x00, -0x89,0x01,0x00,0x00,0x4f,0x02,0x00,0x00,0xc4,0x01,0x00,0x00, -0x4e,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00, -0x50,0x02,0x00,0x00,0x4f,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0xcc,0x00,0x00,0x00,0x51,0x02,0x00,0x00,0x3b,0x02,0x00,0x00, -0x3f,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x51,0x02,0x00,0x00, -0x50,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x53,0x02,0x00,0x00,0x52,0x03,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x31,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x33,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x2c,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x2c,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x55,0x02,0x00,0x00,0x44,0x03,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x29,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x2b,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x57,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x57,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x45,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0x2b,0x02,0x00,0x00,0x99,0x02,0x00,0x00, -0x5a,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0x5d,0x02,0x00,0x00,0x45,0x03,0x00,0x00,0xbe,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x59,0x02,0x00,0x00,0x5a,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x5d,0x02,0x00,0x00, -0x58,0x02,0x00,0x00,0x59,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x58,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x5f,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x5f,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x49,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0x58,0x02,0x00,0x00,0x97,0x02,0x00,0x00,0x62,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x65,0x02,0x00,0x00, -0x49,0x03,0x00,0x00,0x60,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x61,0x02,0x00,0x00,0x62,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x65,0x02,0x00,0x00,0x60,0x02,0x00,0x00, -0x61,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x60,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x67,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x67,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x4b,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0x60,0x02,0x00,0x00, -0x95,0x02,0x00,0x00,0x6a,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0x6d,0x02,0x00,0x00,0x4b,0x03,0x00,0x00, -0xbb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x69,0x02,0x00,0x00, -0x6a,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x6d,0x02,0x00,0x00,0x68,0x02,0x00,0x00,0x69,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x68,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x6f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x6f,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x4d,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0x68,0x02,0x00,0x00,0x93,0x02,0x00,0x00, -0x70,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0x75,0x02,0x00,0x00,0x4d,0x03,0x00,0x00,0x62,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x71,0x02,0x00,0x00,0x70,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x75,0x02,0x00,0x00, -0x70,0x02,0x00,0x00,0x71,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x70,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x77,0x02,0x00,0x00,0x45,0x03,0x00,0x00,0xbb,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x79,0x02,0x00,0x00, -0x77,0x02,0x00,0x00,0x4b,0x03,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x7b,0x02,0x00,0x00,0x79,0x02,0x00,0x00, -0x7a,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x7d,0x02,0x00,0x00,0x49,0x03,0x00,0x00,0x62,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7e,0x02,0x00,0x00, -0x7b,0x02,0x00,0x00,0x7d,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x80,0x02,0x00,0x00,0x7e,0x02,0x00,0x00, -0x4d,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x84,0x02,0x00,0x00,0x7d,0x02,0x00,0x00,0x4d,0x03,0x00,0x00, -0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,0x85,0x02,0x00,0x00, -0x0e,0x02,0x00,0x00,0x84,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc3,0x00,0x00,0x00,0x86,0x02,0x00,0x00,0x85,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,0x8b,0x02,0x00,0x00, -0x3b,0x02,0x00,0x00,0x79,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc3,0x00,0x00,0x00,0x8c,0x02,0x00,0x00,0x8b,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,0x8e,0x02,0x00,0x00, -0xc9,0x00,0x00,0x00,0x80,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc3,0x00,0x00,0x00,0x8f,0x02,0x00,0x00,0x8e,0x02,0x00,0x00, -0x0c,0x00,0x08,0x00,0xc3,0x00,0x00,0x00,0x90,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x86,0x02,0x00,0x00, -0x8c,0x02,0x00,0x00,0x8f,0x02,0x00,0x00,0x3e,0x00,0x03,0x00, -0x8e,0x02,0x00,0x00,0x90,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x93,0x02,0x00,0x00,0x4d,0x03,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x6f,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x71,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x6a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x6a,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x95,0x02,0x00,0x00, -0x4b,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x67,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x69,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x62,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x62,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x97,0x02,0x00,0x00,0x49,0x03,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x5f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x61,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x5a,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x5a,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x99,0x02,0x00,0x00,0x45,0x03,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x57,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x59,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0xf7,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xf7,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9b,0x02,0x00,0x00, -0x3f,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xf4,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xf6,0x01,0x00,0x00, -0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0xec,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xd6,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xd6,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9d,0x02,0x00,0x00,0x25,0x03,0x00,0x00, -0x6c,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd3,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xd5,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa2,0x02,0x00,0x00,0x55,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa3,0x02,0x00,0x00,0x95,0x00,0x00,0x00,0xa2,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa8,0x02,0x00,0x00, -0x59,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa9,0x02,0x00,0x00,0xa7,0x00,0x00,0x00, -0xa8,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0xae,0x02,0x00,0x00,0x12,0x00,0x00,0x00,0xad,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xaf,0x02,0x00,0x00, -0xae,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xb0,0x02,0x00,0x00,0x0f,0x00,0x00,0x00,0xaf,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb4,0x02,0x00,0x00, -0x47,0x00,0x00,0x00,0xaf,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0xb6,0x02,0x00,0x00,0xb5,0x02,0x00,0x00, -0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xb7,0x02,0x00,0x00,0xb6,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xb8,0x02,0x00,0x00,0xb4,0x02,0x00,0x00, -0xb7,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xb9,0x02,0x00,0x00,0xb0,0x02,0x00,0x00,0xb8,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0xbb,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xbb,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x26,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0xd5,0x00,0x00,0x00, -0x21,0x03,0x00,0x00,0xbe,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0xc1,0x02,0x00,0x00,0x26,0x03,0x00,0x00, -0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xbd,0x02,0x00,0x00, -0xbe,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xc1,0x02,0x00,0x00,0xbc,0x02,0x00,0x00,0xbd,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xbc,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0xc3,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xc3,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x27,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0xbc,0x02,0x00,0x00,0x1f,0x03,0x00,0x00, -0xc6,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0xc9,0x02,0x00,0x00,0x27,0x03,0x00,0x00,0x60,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xc5,0x02,0x00,0x00,0xc6,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xc9,0x02,0x00,0x00, -0xc4,0x02,0x00,0x00,0xc5,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xc4,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xcd,0x02,0x00,0x00,0x27,0x03,0x00,0x00,0x61,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xce,0x02,0x00,0x00, -0xa3,0x02,0x00,0x00,0xcd,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xd0,0x02,0x00,0x00,0x64,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd1,0x02,0x00,0x00,0xce,0x02,0x00,0x00,0xd0,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd5,0x02,0x00,0x00, -0x26,0x03,0x00,0x00,0x43,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xd6,0x02,0x00,0x00,0xa9,0x02,0x00,0x00, -0xd5,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd8,0x02,0x00,0x00,0x68,0x00,0x00,0x00,0xbb,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd9,0x02,0x00,0x00, -0xd6,0x02,0x00,0x00,0xd8,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0xdb,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xdb,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x29,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0xc4,0x02,0x00,0x00,0x1d,0x03,0x00,0x00, -0xde,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0xe1,0x02,0x00,0x00,0x29,0x03,0x00,0x00,0xbb,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xdd,0x02,0x00,0x00,0xde,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xe1,0x02,0x00,0x00, -0xdc,0x02,0x00,0x00,0xdd,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xdc,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xe3,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xe3,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x2b,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0xdc,0x02,0x00,0x00,0x1b,0x03,0x00,0x00,0xe6,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xe9,0x02,0x00,0x00, -0x2b,0x03,0x00,0x00,0x62,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xe5,0x02,0x00,0x00,0xe6,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xe9,0x02,0x00,0x00,0xe4,0x02,0x00,0x00, -0xe5,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xe4,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xec,0x02,0x00,0x00, -0xd1,0x02,0x00,0x00,0x2b,0x03,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0xef,0x02,0x00,0x00,0xec,0x02,0x00,0x00, -0x36,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0xf1,0x02,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xef,0x02,0x00,0x00, -0xf0,0x02,0x00,0x00,0xf1,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xf0,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xf4,0x02,0x00,0x00,0xd9,0x02,0x00,0x00,0x29,0x03,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0xf5,0x02,0x00,0x00, -0x12,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xf6,0x02,0x00,0x00,0xf5,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xf7,0x02,0x00,0x00, -0xf4,0x02,0x00,0x00,0xf6,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0xf1,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xf1,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0xc1,0x00,0x00,0x00,0xf8,0x02,0x00,0x00, -0xef,0x02,0x00,0x00,0xe4,0x02,0x00,0x00,0xf7,0x02,0x00,0x00, -0xf0,0x02,0x00,0x00,0xf7,0x00,0x03,0x00,0xfa,0x02,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xf8,0x02,0x00,0x00, -0xf9,0x02,0x00,0x00,0xfa,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xf9,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x02,0x03,0x00,0x00,0xd9,0x02,0x00,0x00,0x29,0x03,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x04,0x03,0x00,0x00, -0x12,0x00,0x00,0x00,0x03,0x03,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x05,0x03,0x00,0x00,0x04,0x03,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x06,0x03,0x00,0x00, -0x02,0x03,0x00,0x00,0x05,0x03,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x07,0x03,0x00,0x00,0xb9,0x02,0x00,0x00, -0x06,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x09,0x03,0x00,0x00,0x07,0x03,0x00,0x00,0xd1,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0b,0x03,0x00,0x00, -0x09,0x03,0x00,0x00,0x2b,0x03,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x0d,0x03,0x00,0x00,0x26,0x03,0x00,0x00, -0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x0f,0x03,0x00,0x00,0x0d,0x03,0x00,0x00,0x29,0x03,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x11,0x03,0x00,0x00, -0x0f,0x03,0x00,0x00,0x10,0x03,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x13,0x03,0x00,0x00,0x27,0x03,0x00,0x00, -0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x14,0x03,0x00,0x00,0x11,0x03,0x00,0x00,0x13,0x03,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x16,0x03,0x00,0x00, -0x14,0x03,0x00,0x00,0x2b,0x03,0x00,0x00,0x41,0x00,0x05,0x00, -0xcc,0x00,0x00,0x00,0x17,0x03,0x00,0x00,0xc9,0x00,0x00,0x00, -0x16,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00, -0x18,0x03,0x00,0x00,0x17,0x03,0x00,0x00,0x41,0x00,0x06,0x00, -0xda,0x01,0x00,0x00,0x19,0x03,0x00,0x00,0xfe,0x02,0x00,0x00, -0x34,0x00,0x00,0x00,0x0b,0x03,0x00,0x00,0x3e,0x00,0x03,0x00, -0x19,0x03,0x00,0x00,0x18,0x03,0x00,0x00,0xf9,0x00,0x02,0x00, -0xfa,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xfa,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0xe6,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xe6,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x1b,0x03,0x00,0x00,0x2b,0x03,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xe3,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xe5,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xde,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xde,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x1d,0x03,0x00,0x00,0x29,0x03,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xdb,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xdd,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0xc6,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xc6,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1f,0x03,0x00,0x00, -0x27,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xc3,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xc5,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0xbe,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xbe,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x21,0x03,0x00,0x00,0x26,0x03,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xbb,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xbd,0x02,0x00,0x00,0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00, - -}; -const uint64_t matmul_q4_k_f32_fp32_len = 11952; - -unsigned char matmul_q5_0_f32_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0x47,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x09,0x00,0x00,0x00, -0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00, -0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00, -0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30, -0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x0f,0x00,0x0f,0x00,0x05,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x4c,0x00,0x00,0x00,0x09,0x01,0x00,0x00,0x50,0x01,0x00,0x00, -0x83,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,0x79,0x02,0x00,0x00, -0xc2,0x02,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x05,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x30,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x0d,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0x10,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x37,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x3d,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x4c,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x4f,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x53,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x60,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x62,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x6c,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xa6,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xb8,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xbb,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x02,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x04,0x01,0x00,0x00,0x06,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x05,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x05,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x05,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x06,0x01,0x00,0x00, -0x06,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0x07,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x07,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x07,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x09,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x09,0x01,0x00,0x00,0x21,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x5d,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x5e,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x8b,0x01,0x00,0x00,0x06,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x8c,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x8c,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x8c,0x01,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x8e,0x01,0x00,0x00, -0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x8e,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x79,0x02,0x00,0x00,0x0b,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xbf,0x02,0x00,0x00, -0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0xc0,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0xc0,0x02,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0xc0,0x02,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xc2,0x02,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xc2,0x02,0x00,0x00,0x21,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00, -0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x1e,0x00,0x10,0x00,0x10,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x11,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x11,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x15,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0x0a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x27,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x3e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x61,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x63,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x61,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x67,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x61,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x72,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x85,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x90,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0xa1,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xa6,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xb7,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xb9,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0xb8,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xba,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x4f,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xbb,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xba,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xbc,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0xb9,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xb7,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xbf,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x14,0x00,0x02,0x00, -0xc1,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0xc3,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xc4,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xc5,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc4,0x00,0x00,0x00, -0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xc6,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc5,0x00,0x00,0x00, -0xbb,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xc7,0x00,0x00,0x00, -0xc3,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0xc8,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xc7,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0xcb,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xcc,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xf3,0x00,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xf9,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xfd,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x16,0x00,0x03,0x00, -0x00,0x01,0x00,0x00,0x10,0x00,0x00,0x00,0x15,0x00,0x04,0x00, -0x01,0x01,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x1c,0x00,0x04,0x00,0x02,0x01,0x00,0x00,0x01,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x03,0x01,0x00,0x00, -0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1c,0x00,0x04,0x00, -0x04,0x01,0x00,0x00,0x03,0x01,0x00,0x00,0xf9,0x00,0x00,0x00, -0x1e,0x00,0x05,0x00,0x05,0x01,0x00,0x00,0x00,0x01,0x00,0x00, -0x02,0x01,0x00,0x00,0x04,0x01,0x00,0x00,0x1d,0x00,0x03,0x00, -0x06,0x01,0x00,0x00,0x05,0x01,0x00,0x00,0x1e,0x00,0x03,0x00, -0x07,0x01,0x00,0x00,0x06,0x01,0x00,0x00,0x20,0x00,0x04,0x00, -0x08,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x07,0x01,0x00,0x00, -0x3b,0x00,0x04,0x00,0x08,0x01,0x00,0x00,0x09,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0b,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x20,0x00,0x04,0x00, -0x11,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x01,0x01,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x15,0x01,0x00,0x00, -0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x27,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x30,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x03,0x01,0x00,0x00, -0x17,0x00,0x04,0x00,0x34,0x01,0x00,0x00,0xc3,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0xc3,0x00,0x00,0x00, -0x47,0x01,0x00,0x00,0x00,0x00,0x80,0x41,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x4c,0x01,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x4d,0x01,0x00,0x00,0x84,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x4c,0x01,0x00,0x00,0x1c,0x00,0x04,0x00, -0x4e,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x4d,0x01,0x00,0x00, -0x20,0x00,0x04,0x00,0x4f,0x01,0x00,0x00,0x04,0x00,0x00,0x00, -0x4e,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x4f,0x01,0x00,0x00, -0x50,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x55,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x01,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x5d,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00,0x09,0x00,0x00,0x00, -0x5e,0x01,0x00,0x00,0x5d,0x01,0x00,0x00,0x39,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x5f,0x01,0x00,0x00,0x51,0x00,0x00,0x00,0x5e,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x60,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x5f,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x61,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x60,0x01,0x00,0x00, -0x6c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x7f,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x80,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0xa6,0x00,0x00,0x00, -0x7f,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,0x81,0x01,0x00,0x00, -0x00,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0x20,0x00,0x04,0x00, -0x82,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x81,0x01,0x00,0x00, -0x3b,0x00,0x04,0x00,0x82,0x01,0x00,0x00,0x83,0x01,0x00,0x00, -0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x87,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x8b,0x01,0x00,0x00, -0xc3,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x8c,0x01,0x00,0x00, -0x8b,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x8d,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x8c,0x01,0x00,0x00,0x3b,0x00,0x04,0x00, -0x8d,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x99,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0xc3,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xa2,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x00,0x01,0x00,0x00, -0xa6,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xa8,0x01,0x00,0x00,0x51,0x00,0x00,0x00, -0x5e,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xa9,0x01,0x00,0x00,0x84,0x00,0x00,0x00, -0xa8,0x01,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xaa,0x01,0x00,0x00,0x86,0x00,0x00,0x00, -0xa9,0x01,0x00,0x00,0x6c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xad,0x01,0x00,0x00,0x08,0x01,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xae,0x01,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xb1,0x01,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xcc,0x01,0x00,0x00, -0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x1c,0x00,0x04,0x00,0xcd,0x01,0x00,0x00,0x00,0x01,0x00,0x00, -0xcc,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0xce,0x01,0x00,0x00, -0x07,0x00,0x00,0x00,0xcd,0x01,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xde,0x01,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0xe4,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x00,0x01,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xfa,0x01,0x00,0x00, -0x84,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0xbb,0x00,0x00,0x00, -0x1c,0x00,0x04,0x00,0xfb,0x01,0x00,0x00,0x00,0x01,0x00,0x00, -0xfa,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0xfc,0x01,0x00,0x00, -0x07,0x00,0x00,0x00,0xfb,0x01,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x05,0x02,0x00,0x00,0x86,0x00,0x00,0x00, -0xb8,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x0d,0x02,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x3c,0x02,0x00,0x00,0x84,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x71,0x02,0x00,0x00,0x0d,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x79,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0xbf,0x02,0x00,0x00, -0xc3,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0xc0,0x02,0x00,0x00, -0xbf,0x02,0x00,0x00,0x20,0x00,0x04,0x00,0xc1,0x02,0x00,0x00, -0x0c,0x00,0x00,0x00,0xc0,0x02,0x00,0x00,0x3b,0x00,0x04,0x00, -0xc1,0x02,0x00,0x00,0xc2,0x02,0x00,0x00,0x0c,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0xc7,0x02,0x00,0x00, -0x05,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xd4,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x2c,0x00,0x05,0x00,0x34,0x01,0x00,0x00, -0x46,0x03,0x00,0x00,0x47,0x01,0x00,0x00,0x47,0x01,0x00,0x00, -0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x05,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xc8,0x00,0x00,0x00, -0xc9,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0xce,0x01,0x00,0x00,0xcf,0x01,0x00,0x00,0x07,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0xfc,0x01,0x00,0x00,0xfd,0x01,0x00,0x00, -0x07,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x16,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x17,0x00,0x00,0x00, -0x16,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x17,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1e,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x21,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x28,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x27,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x29,0x00,0x00,0x00, -0x28,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x2a,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x29,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x2e,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00, -0x24,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x30,0x00,0x00,0x00, -0x2a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x35,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x36,0x00,0x00,0x00, -0x35,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x38,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00, -0x38,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x3a,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x3f,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x3e,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x3f,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x42,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x3b,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x47,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x4a,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x4c,0x00,0x00,0x00, -0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x4f,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x55,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x54,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00, -0x50,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x4f,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x64,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,0x63,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x68,0x00,0x00,0x00, -0x5d,0x00,0x00,0x00,0x67,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x6d,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x73,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x72,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x78,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x7c,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x81,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x80,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x82,0x00,0x00,0x00, -0x81,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x83,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0x82,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x89,0x00,0x00,0x00, -0x47,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,0x89,0x00,0x00,0x00, -0x82,0x00,0x00,0x00,0x0c,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x8d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x26,0x00,0x00,0x00, -0x87,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x90,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x92,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x92,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x95,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x97,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x97,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x99,0x00,0x00,0x00, -0x95,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x93,0x00,0x00,0x00, -0x99,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9c,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x83,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9d,0x00,0x00,0x00, -0x9c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0xa1,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xa3,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0xa3,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa7,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0xa6,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0xa9,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0xa9,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xab,0x00,0x00,0x00, -0xa7,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0xa4,0x00,0x00,0x00, -0xab,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xae,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0x83,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xaf,0x00,0x00,0x00, -0xae,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xb1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb1,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xea,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0xd0,0x00,0x00,0x00, -0xb2,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0xc2,0x00,0x00,0x00,0xea,0x02,0x00,0x00,0xc0,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xb3,0x00,0x00,0x00,0xb2,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xc2,0x00,0x00,0x00, -0xb2,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xb2,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00, -0xcd,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0xea,0x02,0x00,0x00, -0x3e,0x00,0x03,0x00,0xcd,0x00,0x00,0x00,0xcb,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd0,0x00,0x00,0x00, -0xea,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xb1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb3,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xd3,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xd3,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x03,0x03,0x00,0x00,0xaf,0x00,0x00,0x00,0xb3,0x00,0x00,0x00, -0xb3,0x01,0x00,0x00,0xd6,0x00,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xff,0x02,0x00,0x00,0x9d,0x00,0x00,0x00, -0xb3,0x00,0x00,0x00,0xb0,0x01,0x00,0x00,0xd6,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xeb,0x02,0x00,0x00, -0x83,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0x61,0x02,0x00,0x00, -0xd6,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0xda,0x00,0x00,0x00,0xeb,0x02,0x00,0x00,0x8d,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xd5,0x00,0x00,0x00,0xd6,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xda,0x00,0x00,0x00, -0xd4,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xd4,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xdc,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xdc,0x00,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xfb,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0xd4,0x00,0x00,0x00,0x63,0x01,0x00,0x00,0xdd,0x00,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xe2,0x00,0x00,0x00, -0xfb,0x02,0x00,0x00,0x37,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xde,0x00,0x00,0x00,0xdd,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xe2,0x00,0x00,0x00,0xdd,0x00,0x00,0x00, -0xde,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdd,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe7,0x00,0x00,0x00, -0x73,0x00,0x00,0x00,0xfb,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xea,0x00,0x00,0x00,0xe7,0x00,0x00,0x00, -0x98,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xeb,0x00,0x00,0x00,0xea,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xec,0x00,0x00,0x00, -0xff,0x02,0x00,0x00,0xeb,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xee,0x00,0x00,0x00,0xec,0x00,0x00,0x00, -0x6e,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xf4,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,0xf3,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf6,0x00,0x00,0x00, -0xf4,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0xee,0x00,0x00,0x00, -0xf9,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xfe,0x00,0x00,0x00,0xee,0x00,0x00,0x00,0xfd,0x00,0x00,0x00, -0x41,0x00,0x07,0x00,0x0b,0x01,0x00,0x00,0x0c,0x01,0x00,0x00, -0x09,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0xfa,0x00,0x00,0x00, -0x34,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x00,0x01,0x00,0x00, -0x0d,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,0x73,0x00,0x04,0x00, -0xc3,0x00,0x00,0x00,0x0e,0x01,0x00,0x00,0x0d,0x01,0x00,0x00, -0x41,0x00,0x08,0x00,0x11,0x01,0x00,0x00,0x12,0x01,0x00,0x00, -0x09,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0xfa,0x00,0x00,0x00, -0xcf,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x01,0x01,0x00,0x00,0x13,0x01,0x00,0x00,0x12,0x01,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x14,0x01,0x00,0x00, -0x13,0x01,0x00,0x00,0xc4,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x16,0x01,0x00,0x00,0x14,0x01,0x00,0x00,0x15,0x01,0x00,0x00, -0x41,0x00,0x08,0x00,0x11,0x01,0x00,0x00,0x18,0x01,0x00,0x00, -0x09,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0xfa,0x00,0x00,0x00, -0xcf,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x01,0x01,0x00,0x00,0x19,0x01,0x00,0x00,0x18,0x01,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x1a,0x01,0x00,0x00, -0x19,0x01,0x00,0x00,0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x1b,0x01,0x00,0x00,0x16,0x01,0x00,0x00,0x1a,0x01,0x00,0x00, -0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x21,0x01,0x00,0x00, -0x1b,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,0xc4,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x22,0x01,0x00,0x00,0x21,0x01,0x00,0x00, -0xa8,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x23,0x01,0x00,0x00,0x22,0x01,0x00,0x00,0xf9,0x00,0x00,0x00, -0x7c,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x24,0x01,0x00,0x00, -0x23,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x28,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,0x27,0x01,0x00,0x00, -0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x29,0x01,0x00,0x00, -0x1b,0x01,0x00,0x00,0x28,0x01,0x00,0x00,0xc7,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x2a,0x01,0x00,0x00,0x29,0x01,0x00,0x00, -0xf9,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x2b,0x01,0x00,0x00,0x2a,0x01,0x00,0x00,0x41,0x00,0x08,0x00, -0x30,0x01,0x00,0x00,0x31,0x01,0x00,0x00,0x09,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0x85,0x00,0x00,0x00, -0xfe,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x03,0x01,0x00,0x00, -0x32,0x01,0x00,0x00,0x31,0x01,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x33,0x01,0x00,0x00,0x32,0x01,0x00,0x00, -0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x38,0x01,0x00,0x00, -0x33,0x01,0x00,0x00,0xfd,0x00,0x00,0x00,0x7c,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x3c,0x01,0x00,0x00,0x24,0x01,0x00,0x00, -0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3d,0x01,0x00,0x00, -0x38,0x01,0x00,0x00,0x3c,0x01,0x00,0x00,0x70,0x00,0x04,0x00, -0xc3,0x00,0x00,0x00,0x3e,0x01,0x00,0x00,0x3d,0x01,0x00,0x00, -0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x40,0x01,0x00,0x00, -0x33,0x01,0x00,0x00,0xa8,0x00,0x00,0x00,0x7c,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x43,0x01,0x00,0x00,0x2b,0x01,0x00,0x00, -0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x44,0x01,0x00,0x00, -0x40,0x01,0x00,0x00,0x43,0x01,0x00,0x00,0x70,0x00,0x04,0x00, -0xc3,0x00,0x00,0x00,0x45,0x01,0x00,0x00,0x44,0x01,0x00,0x00, -0x50,0x00,0x05,0x00,0x34,0x01,0x00,0x00,0x46,0x01,0x00,0x00, -0x3e,0x01,0x00,0x00,0x45,0x01,0x00,0x00,0x83,0x00,0x05,0x00, -0x34,0x01,0x00,0x00,0x49,0x01,0x00,0x00,0x46,0x01,0x00,0x00, -0x46,0x03,0x00,0x00,0x8e,0x00,0x05,0x00,0x34,0x01,0x00,0x00, -0x4b,0x01,0x00,0x00,0x49,0x01,0x00,0x00,0x0e,0x01,0x00,0x00, -0x51,0x00,0x05,0x00,0xc3,0x00,0x00,0x00,0x53,0x01,0x00,0x00, -0x4b,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x73,0x00,0x04,0x00, -0x00,0x01,0x00,0x00,0x54,0x01,0x00,0x00,0x53,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x55,0x01,0x00,0x00,0x56,0x01,0x00,0x00, -0x50,0x01,0x00,0x00,0xf6,0x00,0x00,0x00,0x3e,0x00,0x03,0x00, -0x56,0x01,0x00,0x00,0x54,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x58,0x01,0x00,0x00,0xf6,0x00,0x00,0x00, -0xf9,0x00,0x00,0x00,0x51,0x00,0x05,0x00,0xc3,0x00,0x00,0x00, -0x5a,0x01,0x00,0x00,0x4b,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0x73,0x00,0x04,0x00,0x00,0x01,0x00,0x00,0x5b,0x01,0x00,0x00, -0x5a,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x55,0x01,0x00,0x00, -0x5c,0x01,0x00,0x00,0x50,0x01,0x00,0x00,0x58,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0x5c,0x01,0x00,0x00,0x5b,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x63,0x01,0x00,0x00, -0xfb,0x02,0x00,0x00,0x61,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xdc,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x65,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x65,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xfc,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0xde,0x00,0x00,0x00, -0xac,0x01,0x00,0x00,0x68,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0x6b,0x01,0x00,0x00,0xfc,0x02,0x00,0x00, -0xa6,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x67,0x01,0x00,0x00, -0x68,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x6b,0x01,0x00,0x00,0x66,0x01,0x00,0x00,0x67,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x66,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x6f,0x01,0x00,0x00,0xa7,0x00,0x00,0x00, -0x7d,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x71,0x01,0x00,0x00,0x6f,0x01,0x00,0x00,0xfc,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x72,0x01,0x00,0x00, -0x12,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x73,0x01,0x00,0x00,0x72,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x74,0x01,0x00,0x00, -0x71,0x01,0x00,0x00,0x73,0x01,0x00,0x00,0xf7,0x00,0x03,0x00, -0x76,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x74,0x01,0x00,0x00,0x75,0x01,0x00,0x00,0x76,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x75,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x79,0x01,0x00,0x00,0xeb,0x02,0x00,0x00, -0x78,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0x7b,0x01,0x00,0x00,0x79,0x01,0x00,0x00,0x8d,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x76,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x76,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0xc1,0x00,0x00,0x00, -0x7c,0x01,0x00,0x00,0x74,0x01,0x00,0x00,0x66,0x01,0x00,0x00, -0x7b,0x01,0x00,0x00,0x75,0x01,0x00,0x00,0xf7,0x00,0x03,0x00, -0x7e,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x7c,0x01,0x00,0x00,0x7d,0x01,0x00,0x00,0x9e,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x7d,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x86,0x01,0x00,0x00,0x7d,0x00,0x00,0x00, -0xfc,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x88,0x01,0x00,0x00,0x86,0x01,0x00,0x00,0x87,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8a,0x01,0x00,0x00, -0x88,0x01,0x00,0x00,0x78,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x95,0x01,0x00,0x00,0x86,0x01,0x00,0x00, -0xaa,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x96,0x01,0x00,0x00,0x03,0x03,0x00,0x00,0x95,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x98,0x01,0x00,0x00, -0x96,0x01,0x00,0x00,0x78,0x00,0x00,0x00,0x41,0x00,0x06,0x00, -0x99,0x01,0x00,0x00,0x9a,0x01,0x00,0x00,0x8e,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0x98,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc3,0x00,0x00,0x00,0x9b,0x01,0x00,0x00,0x9a,0x01,0x00,0x00, -0x73,0x00,0x04,0x00,0x00,0x01,0x00,0x00,0x9c,0x01,0x00,0x00, -0x9b,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x55,0x01,0x00,0x00, -0x9d,0x01,0x00,0x00,0x83,0x01,0x00,0x00,0x8a,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0x9d,0x01,0x00,0x00,0x9c,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0x7e,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x9e,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa1,0x01,0x00,0x00,0x7d,0x00,0x00,0x00,0xfc,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa3,0x01,0x00,0x00, -0xa1,0x01,0x00,0x00,0xa2,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa5,0x01,0x00,0x00,0xa3,0x01,0x00,0x00, -0x78,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x55,0x01,0x00,0x00, -0xa7,0x01,0x00,0x00,0x83,0x01,0x00,0x00,0xa5,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0xa7,0x01,0x00,0x00,0xa6,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0x7e,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x7e,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x68,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x68,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xac,0x01,0x00,0x00,0xfc,0x02,0x00,0x00, -0xaa,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x65,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x67,0x01,0x00,0x00,0xe0,0x00,0x04,0x00, -0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xad,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb0,0x01,0x00,0x00, -0xff,0x02,0x00,0x00,0xae,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xb3,0x01,0x00,0x00,0x03,0x03,0x00,0x00, -0xb1,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xb5,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xb5,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x05,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0x67,0x01,0x00,0x00,0x5f,0x02,0x00,0x00,0xb8,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xbb,0x01,0x00,0x00, -0x05,0x03,0x00,0x00,0x6c,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xb7,0x01,0x00,0x00,0xb8,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xbb,0x01,0x00,0x00,0xb6,0x01,0x00,0x00, -0xb7,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xb6,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xbd,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xbd,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x09,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0xb6,0x01,0x00,0x00, -0xe9,0x01,0x00,0x00,0xc0,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0xc3,0x01,0x00,0x00,0x09,0x03,0x00,0x00, -0x60,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xbf,0x01,0x00,0x00, -0xc0,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xc3,0x01,0x00,0x00,0xbe,0x01,0x00,0x00,0xbf,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xbe,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xc5,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xc5,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x1b,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0xbe,0x01,0x00,0x00,0xe7,0x01,0x00,0x00, -0xc6,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0xcb,0x01,0x00,0x00,0x1b,0x03,0x00,0x00,0x62,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xc7,0x01,0x00,0x00,0xc6,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xcb,0x01,0x00,0x00, -0xc6,0x01,0x00,0x00,0xc7,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xc6,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd1,0x01,0x00,0x00,0x09,0x03,0x00,0x00,0x62,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd3,0x01,0x00,0x00, -0xd1,0x01,0x00,0x00,0x1b,0x03,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xd5,0x01,0x00,0x00,0x55,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd7,0x01,0x00,0x00,0x09,0x03,0x00,0x00,0x61,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd8,0x01,0x00,0x00, -0xd5,0x01,0x00,0x00,0xd7,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xda,0x01,0x00,0x00,0x64,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xdb,0x01,0x00,0x00,0xd8,0x01,0x00,0x00,0xda,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdd,0x01,0x00,0x00, -0xdb,0x01,0x00,0x00,0x1b,0x03,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xdf,0x01,0x00,0x00,0xdd,0x01,0x00,0x00, -0xde,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xe1,0x01,0x00,0x00,0xdf,0x01,0x00,0x00,0x05,0x03,0x00,0x00, -0x41,0x00,0x05,0x00,0x55,0x01,0x00,0x00,0xe2,0x01,0x00,0x00, -0x50,0x01,0x00,0x00,0xe1,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0x00,0x01,0x00,0x00,0xe3,0x01,0x00,0x00,0xe2,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0xe4,0x01,0x00,0x00,0xe5,0x01,0x00,0x00, -0xcf,0x01,0x00,0x00,0xd3,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0xe5,0x01,0x00,0x00,0xe3,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xe7,0x01,0x00,0x00,0x1b,0x03,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xc5,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xc7,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xc0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xc0,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe9,0x01,0x00,0x00, -0x09,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xbd,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xbf,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xeb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xeb,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x0a,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0xbf,0x01,0x00,0x00, -0x17,0x02,0x00,0x00,0xee,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0xf1,0x01,0x00,0x00,0x0a,0x03,0x00,0x00, -0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xed,0x01,0x00,0x00, -0xee,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xf1,0x01,0x00,0x00,0xec,0x01,0x00,0x00,0xed,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xec,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xf3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xf3,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x18,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0xec,0x01,0x00,0x00,0x15,0x02,0x00,0x00, -0xf4,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0xf9,0x01,0x00,0x00,0x18,0x03,0x00,0x00,0xbb,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xf5,0x01,0x00,0x00,0xf4,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xf9,0x01,0x00,0x00, -0xf4,0x01,0x00,0x00,0xf5,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xf4,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xff,0x01,0x00,0x00,0x0a,0x03,0x00,0x00,0xbb,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x01,0x02,0x00,0x00, -0xff,0x01,0x00,0x00,0x18,0x03,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x03,0x02,0x00,0x00,0x59,0x00,0x00,0x00, -0xb8,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x06,0x02,0x00,0x00,0x0a,0x03,0x00,0x00,0x05,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x07,0x02,0x00,0x00, -0x03,0x02,0x00,0x00,0x06,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x09,0x02,0x00,0x00,0x68,0x00,0x00,0x00, -0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x0a,0x02,0x00,0x00,0x07,0x02,0x00,0x00,0x09,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0c,0x02,0x00,0x00, -0x0a,0x02,0x00,0x00,0x18,0x03,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x0e,0x02,0x00,0x00,0x0c,0x02,0x00,0x00, -0x0d,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x10,0x02,0x00,0x00,0x0e,0x02,0x00,0x00,0x05,0x03,0x00,0x00, -0x41,0x00,0x05,0x00,0x55,0x01,0x00,0x00,0x11,0x02,0x00,0x00, -0x83,0x01,0x00,0x00,0x10,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0x00,0x01,0x00,0x00,0x12,0x02,0x00,0x00,0x11,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0xe4,0x01,0x00,0x00,0x13,0x02,0x00,0x00, -0xfd,0x01,0x00,0x00,0x01,0x02,0x00,0x00,0x3e,0x00,0x03,0x00, -0x13,0x02,0x00,0x00,0x12,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x15,0x02,0x00,0x00,0x18,0x03,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xf3,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xf5,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xee,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xee,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x17,0x02,0x00,0x00, -0x0a,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xeb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xed,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0x19,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x19,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x0b,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0xed,0x01,0x00,0x00, -0x5d,0x02,0x00,0x00,0x1c,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0x1f,0x02,0x00,0x00,0x0b,0x03,0x00,0x00, -0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x1b,0x02,0x00,0x00, -0x1c,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x1f,0x02,0x00,0x00,0x1a,0x02,0x00,0x00,0x1b,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x1a,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x21,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x21,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x0f,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0x1a,0x02,0x00,0x00,0x5b,0x02,0x00,0x00, -0x24,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0x27,0x02,0x00,0x00,0x0f,0x03,0x00,0x00,0x60,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x23,0x02,0x00,0x00,0x24,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x27,0x02,0x00,0x00, -0x22,0x02,0x00,0x00,0x23,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x22,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x29,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x29,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x11,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0x22,0x02,0x00,0x00,0x59,0x02,0x00,0x00,0x2c,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x2f,0x02,0x00,0x00, -0x11,0x03,0x00,0x00,0xbb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x2b,0x02,0x00,0x00,0x2c,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x2f,0x02,0x00,0x00,0x2a,0x02,0x00,0x00, -0x2b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x2a,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x31,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x31,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x13,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0x2a,0x02,0x00,0x00, -0x57,0x02,0x00,0x00,0x32,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0x37,0x02,0x00,0x00,0x13,0x03,0x00,0x00, -0x62,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x33,0x02,0x00,0x00, -0x32,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x37,0x02,0x00,0x00,0x32,0x02,0x00,0x00,0x33,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x32,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x39,0x02,0x00,0x00,0x0b,0x03,0x00,0x00, -0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x3b,0x02,0x00,0x00,0x39,0x02,0x00,0x00,0x11,0x03,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3d,0x02,0x00,0x00, -0x3b,0x02,0x00,0x00,0x3c,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3f,0x02,0x00,0x00,0x0f,0x03,0x00,0x00, -0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x40,0x02,0x00,0x00,0x3d,0x02,0x00,0x00,0x3f,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x42,0x02,0x00,0x00, -0x40,0x02,0x00,0x00,0x13,0x03,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x46,0x02,0x00,0x00,0x3f,0x02,0x00,0x00, -0x13,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0xe4,0x01,0x00,0x00, -0x47,0x02,0x00,0x00,0xcf,0x01,0x00,0x00,0x46,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0x00,0x01,0x00,0x00,0x48,0x02,0x00,0x00, -0x47,0x02,0x00,0x00,0x73,0x00,0x04,0x00,0xc3,0x00,0x00,0x00, -0x49,0x02,0x00,0x00,0x48,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0xe4,0x01,0x00,0x00,0x4e,0x02,0x00,0x00,0xfd,0x01,0x00,0x00, -0x3b,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x00,0x01,0x00,0x00, -0x4f,0x02,0x00,0x00,0x4e,0x02,0x00,0x00,0x73,0x00,0x04,0x00, -0xc3,0x00,0x00,0x00,0x50,0x02,0x00,0x00,0x4f,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,0x52,0x02,0x00,0x00, -0xc9,0x00,0x00,0x00,0x42,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc3,0x00,0x00,0x00,0x53,0x02,0x00,0x00,0x52,0x02,0x00,0x00, -0x0c,0x00,0x08,0x00,0xc3,0x00,0x00,0x00,0x54,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x49,0x02,0x00,0x00, -0x50,0x02,0x00,0x00,0x53,0x02,0x00,0x00,0x3e,0x00,0x03,0x00, -0x52,0x02,0x00,0x00,0x54,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x57,0x02,0x00,0x00,0x13,0x03,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x31,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x33,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x2c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x2c,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x59,0x02,0x00,0x00, -0x11,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x29,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x2b,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x24,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x24,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x5b,0x02,0x00,0x00,0x0f,0x03,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x21,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x23,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x1c,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x1c,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x5d,0x02,0x00,0x00,0x0b,0x03,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x19,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x1b,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0xb8,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xb8,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5f,0x02,0x00,0x00, -0x05,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xb5,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xb7,0x01,0x00,0x00, -0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0xad,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xd6,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xd6,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x61,0x02,0x00,0x00,0xeb,0x02,0x00,0x00, -0x6c,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd3,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xd5,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x66,0x02,0x00,0x00,0x55,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x67,0x02,0x00,0x00,0x95,0x00,0x00,0x00,0x66,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6c,0x02,0x00,0x00, -0x59,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x6d,0x02,0x00,0x00,0xa7,0x00,0x00,0x00, -0x6c,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x72,0x02,0x00,0x00,0x12,0x00,0x00,0x00,0x71,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x73,0x02,0x00,0x00, -0x72,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x74,0x02,0x00,0x00,0x0f,0x00,0x00,0x00,0x73,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x78,0x02,0x00,0x00, -0x47,0x00,0x00,0x00,0x73,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0x7a,0x02,0x00,0x00,0x79,0x02,0x00,0x00, -0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x7b,0x02,0x00,0x00,0x7a,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x7c,0x02,0x00,0x00,0x78,0x02,0x00,0x00, -0x7b,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x7d,0x02,0x00,0x00,0x74,0x02,0x00,0x00,0x7c,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x7f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x7f,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xec,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0xd5,0x00,0x00,0x00, -0xe5,0x02,0x00,0x00,0x82,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0x85,0x02,0x00,0x00,0xec,0x02,0x00,0x00, -0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x81,0x02,0x00,0x00, -0x82,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x85,0x02,0x00,0x00,0x80,0x02,0x00,0x00,0x81,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x80,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x87,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x87,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xed,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0x80,0x02,0x00,0x00,0xe3,0x02,0x00,0x00, -0x8a,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0x8d,0x02,0x00,0x00,0xed,0x02,0x00,0x00,0x60,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x89,0x02,0x00,0x00,0x8a,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x8d,0x02,0x00,0x00, -0x88,0x02,0x00,0x00,0x89,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x88,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x91,0x02,0x00,0x00,0xed,0x02,0x00,0x00,0x61,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x92,0x02,0x00,0x00, -0x67,0x02,0x00,0x00,0x91,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x94,0x02,0x00,0x00,0x64,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x95,0x02,0x00,0x00,0x92,0x02,0x00,0x00,0x94,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x99,0x02,0x00,0x00, -0xec,0x02,0x00,0x00,0x05,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9a,0x02,0x00,0x00,0x6d,0x02,0x00,0x00, -0x99,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9c,0x02,0x00,0x00,0x68,0x00,0x00,0x00,0xbb,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9d,0x02,0x00,0x00, -0x9a,0x02,0x00,0x00,0x9c,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x9f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x9f,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xef,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0x88,0x02,0x00,0x00,0xe1,0x02,0x00,0x00, -0xa2,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0xa5,0x02,0x00,0x00,0xef,0x02,0x00,0x00,0xbb,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xa1,0x02,0x00,0x00,0xa2,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xa5,0x02,0x00,0x00, -0xa0,0x02,0x00,0x00,0xa1,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xa0,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xa7,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xa7,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xf1,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0xa0,0x02,0x00,0x00,0xdf,0x02,0x00,0x00,0xaa,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xad,0x02,0x00,0x00, -0xf1,0x02,0x00,0x00,0x62,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xa9,0x02,0x00,0x00,0xaa,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xad,0x02,0x00,0x00,0xa8,0x02,0x00,0x00, -0xa9,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xa8,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb0,0x02,0x00,0x00, -0x95,0x02,0x00,0x00,0xf1,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0xb3,0x02,0x00,0x00,0xb0,0x02,0x00,0x00, -0x36,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0xb5,0x02,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xb3,0x02,0x00,0x00, -0xb4,0x02,0x00,0x00,0xb5,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xb4,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xb8,0x02,0x00,0x00,0x9d,0x02,0x00,0x00,0xef,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0xb9,0x02,0x00,0x00, -0x12,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xba,0x02,0x00,0x00,0xb9,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xbb,0x02,0x00,0x00, -0xb8,0x02,0x00,0x00,0xba,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0xb5,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xb5,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0xc1,0x00,0x00,0x00,0xbc,0x02,0x00,0x00, -0xb3,0x02,0x00,0x00,0xa8,0x02,0x00,0x00,0xbb,0x02,0x00,0x00, -0xb4,0x02,0x00,0x00,0xf7,0x00,0x03,0x00,0xbe,0x02,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xbc,0x02,0x00,0x00, -0xbd,0x02,0x00,0x00,0xbe,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xbd,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xc6,0x02,0x00,0x00,0x9d,0x02,0x00,0x00,0xef,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0xc8,0x02,0x00,0x00, -0x12,0x00,0x00,0x00,0xc7,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xc9,0x02,0x00,0x00,0xc8,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xca,0x02,0x00,0x00, -0xc6,0x02,0x00,0x00,0xc9,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xcb,0x02,0x00,0x00,0x7d,0x02,0x00,0x00, -0xca,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xcd,0x02,0x00,0x00,0xcb,0x02,0x00,0x00,0x95,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xcf,0x02,0x00,0x00, -0xcd,0x02,0x00,0x00,0xf1,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xd1,0x02,0x00,0x00,0xec,0x02,0x00,0x00, -0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd3,0x02,0x00,0x00,0xd1,0x02,0x00,0x00,0xef,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd5,0x02,0x00,0x00, -0xd3,0x02,0x00,0x00,0xd4,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xd7,0x02,0x00,0x00,0xed,0x02,0x00,0x00, -0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd8,0x02,0x00,0x00,0xd5,0x02,0x00,0x00,0xd7,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xda,0x02,0x00,0x00, -0xd8,0x02,0x00,0x00,0xf1,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0xcc,0x00,0x00,0x00,0xdb,0x02,0x00,0x00,0xc9,0x00,0x00,0x00, -0xda,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00, -0xdc,0x02,0x00,0x00,0xdb,0x02,0x00,0x00,0x41,0x00,0x06,0x00, -0x99,0x01,0x00,0x00,0xdd,0x02,0x00,0x00,0xc2,0x02,0x00,0x00, -0x34,0x00,0x00,0x00,0xcf,0x02,0x00,0x00,0x3e,0x00,0x03,0x00, -0xdd,0x02,0x00,0x00,0xdc,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0xbe,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xbe,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0xaa,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xaa,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xdf,0x02,0x00,0x00,0xf1,0x02,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xa7,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xa9,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xa2,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xa2,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xe1,0x02,0x00,0x00,0xef,0x02,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x9f,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xa1,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x8a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x8a,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe3,0x02,0x00,0x00, -0xed,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x87,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x89,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x82,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x82,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xe5,0x02,0x00,0x00,0xec,0x02,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x7f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x81,0x02,0x00,0x00,0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00, - -}; -const uint64_t matmul_q5_0_f32_len = 11076; - -unsigned char matmul_q5_0_f32_aligned_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0x62,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x09,0x00,0x00,0x00, -0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00, -0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00, -0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30, -0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x0f,0x00,0x0f,0x00,0x05,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x4c,0x00,0x00,0x00,0x0a,0x01,0x00,0x00,0x51,0x01,0x00,0x00, -0x86,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,0x9c,0x02,0x00,0x00, -0xe5,0x02,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x05,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x30,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x0d,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0x10,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x37,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x3d,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x4c,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x4f,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x53,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x60,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x62,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x6c,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xa7,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xb9,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xbc,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x03,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x05,0x01,0x00,0x00,0x06,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x06,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x06,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x06,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x07,0x01,0x00,0x00, -0x06,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0x08,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x08,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x08,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x0a,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x0a,0x01,0x00,0x00,0x21,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x5e,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x5f,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x8b,0x01,0x00,0x00,0x06,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x8c,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0x8c,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x8c,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x8c,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x8c,0x01,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x8e,0x01,0x00,0x00, -0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x8e,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x9c,0x02,0x00,0x00,0x0b,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xe2,0x02,0x00,0x00, -0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0xe3,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0xe3,0x02,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0xe3,0x02,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xe5,0x02,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xe5,0x02,0x00,0x00,0x21,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00, -0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x1e,0x00,0x10,0x00,0x10,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x11,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x11,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x15,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0x0a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x27,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x3e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x61,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x63,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x61,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x67,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x61,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x72,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x78,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x77,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x7d,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x77,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x81,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x97,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0xa2,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0xa9,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xb8,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xb9,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x4f,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbd,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0xbc,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbe,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbf,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0xbe,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc0,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0xbf,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc1,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0xbc,0x00,0x00,0x00, -0x14,0x00,0x02,0x00,0xc2,0x00,0x00,0x00,0x16,0x00,0x03,0x00, -0xc4,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xc5,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xc6,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x1c,0x00,0x04,0x00, -0xc8,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0xc7,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0xc9,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0xc8,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0xcc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0xcd,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xc4,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0xd0,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xf4,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xfa,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x16,0x00,0x03,0x00,0x01,0x01,0x00,0x00,0x10,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x02,0x01,0x00,0x00,0x10,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x03,0x01,0x00,0x00, -0x02,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x15,0x00,0x04,0x00, -0x04,0x01,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x1c,0x00,0x04,0x00,0x05,0x01,0x00,0x00,0x04,0x01,0x00,0x00, -0xfa,0x00,0x00,0x00,0x1e,0x00,0x05,0x00,0x06,0x01,0x00,0x00, -0x01,0x01,0x00,0x00,0x03,0x01,0x00,0x00,0x05,0x01,0x00,0x00, -0x1d,0x00,0x03,0x00,0x07,0x01,0x00,0x00,0x06,0x01,0x00,0x00, -0x1e,0x00,0x03,0x00,0x08,0x01,0x00,0x00,0x07,0x01,0x00,0x00, -0x20,0x00,0x04,0x00,0x09,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x08,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x09,0x01,0x00,0x00, -0x0a,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x0c,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x01,0x01,0x00,0x00, -0x20,0x00,0x04,0x00,0x12,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x02,0x01,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x16,0x01,0x00,0x00,0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x28,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x31,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x04,0x01,0x00,0x00,0x17,0x00,0x04,0x00,0x35,0x01,0x00,0x00, -0xc4,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0x48,0x01,0x00,0x00,0x00,0x00,0x80,0x41, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x4d,0x01,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x4e,0x01,0x00,0x00, -0x84,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x4d,0x01,0x00,0x00, -0x1c,0x00,0x04,0x00,0x4f,0x01,0x00,0x00,0x01,0x01,0x00,0x00, -0x4e,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x50,0x01,0x00,0x00, -0x04,0x00,0x00,0x00,0x4f,0x01,0x00,0x00,0x3b,0x00,0x04,0x00, -0x50,0x01,0x00,0x00,0x51,0x01,0x00,0x00,0x04,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x56,0x01,0x00,0x00,0x04,0x00,0x00,0x00, -0x01,0x01,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x5e,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00, -0x09,0x00,0x00,0x00,0x5f,0x01,0x00,0x00,0x5e,0x01,0x00,0x00, -0x39,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x60,0x01,0x00,0x00,0x51,0x00,0x00,0x00, -0x5f,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x61,0x01,0x00,0x00,0x84,0x00,0x00,0x00, -0x60,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x62,0x01,0x00,0x00,0x86,0x00,0x00,0x00, -0x61,0x01,0x00,0x00,0x6c,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x7d,0x01,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x82,0x01,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x83,0x01,0x00,0x00,0x84,0x00,0x00,0x00, -0xa7,0x00,0x00,0x00,0x82,0x01,0x00,0x00,0x1c,0x00,0x04,0x00, -0x84,0x01,0x00,0x00,0x01,0x01,0x00,0x00,0x83,0x01,0x00,0x00, -0x20,0x00,0x04,0x00,0x85,0x01,0x00,0x00,0x04,0x00,0x00,0x00, -0x84,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x85,0x01,0x00,0x00, -0x86,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x17,0x00,0x04,0x00, -0x89,0x01,0x00,0x00,0xc4,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x18,0x00,0x04,0x00,0x8a,0x01,0x00,0x00,0x89,0x01,0x00,0x00, -0x02,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x8b,0x01,0x00,0x00, -0x8a,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,0x8c,0x01,0x00,0x00, -0x8b,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x8d,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x8c,0x01,0x00,0x00,0x3b,0x00,0x04,0x00, -0x8d,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x90,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0xc4,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xa4,0x01,0x00,0x00,0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xac,0x01,0x00,0x00,0x04,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb4,0x01,0x00,0x00, -0x05,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xbc,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xc4,0x01,0x00,0x00,0x07,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xcb,0x01,0x00,0x00, -0x51,0x00,0x00,0x00,0x5f,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xcc,0x01,0x00,0x00, -0x84,0x00,0x00,0x00,0xcb,0x01,0x00,0x00,0x77,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xcd,0x01,0x00,0x00, -0x86,0x00,0x00,0x00,0xcc,0x01,0x00,0x00,0x6c,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xd0,0x01,0x00,0x00, -0x08,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xd1,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xd4,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x77,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xef,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xf0,0x01,0x00,0x00, -0x01,0x01,0x00,0x00,0xef,0x01,0x00,0x00,0x20,0x00,0x04,0x00, -0xf1,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0xf0,0x01,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x01,0x02,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x07,0x02,0x00,0x00,0x07,0x00,0x00,0x00, -0x01,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x1d,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0xbf,0x00,0x00,0x00, -0xbc,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x1e,0x02,0x00,0x00, -0x01,0x01,0x00,0x00,0x1d,0x02,0x00,0x00,0x20,0x00,0x04,0x00, -0x1f,0x02,0x00,0x00,0x07,0x00,0x00,0x00,0x1e,0x02,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x28,0x02,0x00,0x00, -0x86,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0xbf,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x30,0x02,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x5f,0x02,0x00,0x00, -0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x94,0x02,0x00,0x00, -0x0d,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x9c,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x1d,0x00,0x03,0x00, -0xe2,0x02,0x00,0x00,0xc4,0x00,0x00,0x00,0x1e,0x00,0x03,0x00, -0xe3,0x02,0x00,0x00,0xe2,0x02,0x00,0x00,0x20,0x00,0x04,0x00, -0xe4,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0xe3,0x02,0x00,0x00, -0x3b,0x00,0x04,0x00,0xe4,0x02,0x00,0x00,0xe5,0x02,0x00,0x00, -0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0xea,0x02,0x00,0x00,0x05,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xf7,0x02,0x00,0x00,0x84,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x2c,0x00,0x05,0x00, -0x35,0x01,0x00,0x00,0x61,0x03,0x00,0x00,0x48,0x01,0x00,0x00, -0x48,0x01,0x00,0x00,0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0xc9,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0xf1,0x01,0x00,0x00,0xf2,0x01,0x00,0x00, -0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x1f,0x02,0x00,0x00, -0x20,0x02,0x00,0x00,0x07,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x17,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x17,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x1e,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x17,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x27,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x29,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x1e,0x00,0x00,0x00, -0x29,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x2e,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x2d,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x2f,0x00,0x00,0x00, -0x2e,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x30,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x2f,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x30,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x34,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x36,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x36,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x3a,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00, -0x3a,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x3b,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x47,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x3b,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x49,0x00,0x00,0x00, -0x3d,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x49,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x4d,0x00,0x00,0x00, -0x4c,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x4d,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x50,0x00,0x00,0x00, -0x54,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x59,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x58,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5d,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x5d,0x00,0x00,0x00, -0x63,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x68,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,0x67,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6e,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x72,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x79,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x78,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7e,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x81,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x83,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x47,0x00,0x00,0x00, -0x83,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x87,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x88,0x00,0x00,0x00, -0x87,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x8a,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8d,0x00,0x00,0x00, -0x8a,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x0c,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x26,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x8d,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x92,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x92,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x94,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x42,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x98,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x97,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x99,0x00,0x00,0x00, -0x98,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9a,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x99,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9b,0x00,0x00,0x00, -0x94,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,0x9b,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9e,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0xa3,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0xa3,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa5,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x4a,0x00,0x00,0x00, -0xa7,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0xaa,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0xa9,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xab,0x00,0x00,0x00, -0xaa,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xac,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0xab,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xad,0x00,0x00,0x00, -0xa5,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0xad,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xb0,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0x77,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xb2,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x0d,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0x05,0x00,0x00,0x00, -0xd1,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0x0d,0x03,0x00,0x00, -0xc1,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xb4,0x00,0x00,0x00, -0xb3,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xc3,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0xb4,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xb3,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0xcd,0x00,0x00,0x00,0xce,0x00,0x00,0x00,0xca,0x00,0x00,0x00, -0x0d,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,0xce,0x00,0x00,0x00, -0xcc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd1,0x00,0x00,0x00,0x0d,0x03,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xb4,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd4,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xd4,0x00,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x26,0x03,0x00,0x00,0xb0,0x00,0x00,0x00, -0xb4,0x00,0x00,0x00,0xd6,0x01,0x00,0x00,0xd7,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x22,0x03,0x00,0x00, -0x9e,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0xd3,0x01,0x00,0x00, -0xd7,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x0e,0x03,0x00,0x00,0x84,0x00,0x00,0x00,0xb4,0x00,0x00,0x00, -0x84,0x02,0x00,0x00,0xd7,0x00,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,0x0e,0x03,0x00,0x00, -0x8e,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xd6,0x00,0x00,0x00, -0xd7,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xdb,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0xd6,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xd5,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdd,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x1e,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0x64,0x01,0x00,0x00, -0xde,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0xe3,0x00,0x00,0x00,0x1e,0x03,0x00,0x00,0x37,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xdf,0x00,0x00,0x00,0xde,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xe3,0x00,0x00,0x00, -0xde,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xde,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xe8,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x1e,0x03,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xeb,0x00,0x00,0x00, -0xe8,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xec,0x00,0x00,0x00,0xeb,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xed,0x00,0x00,0x00,0x22,0x03,0x00,0x00,0xec,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xef,0x00,0x00,0x00, -0xed,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,0xe8,0x00,0x00,0x00, -0xf4,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xf7,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,0x6e,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfb,0x00,0x00,0x00, -0xef,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0xc7,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xef,0x00,0x00,0x00, -0xfe,0x00,0x00,0x00,0x41,0x00,0x07,0x00,0x0c,0x01,0x00,0x00, -0x0d,0x01,0x00,0x00,0x0a,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0xfb,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x01,0x01,0x00,0x00,0x0e,0x01,0x00,0x00,0x0d,0x01,0x00,0x00, -0x73,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x0f,0x01,0x00,0x00, -0x0e,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x12,0x01,0x00,0x00, -0x13,0x01,0x00,0x00,0x0a,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0xfb,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0xd0,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x02,0x01,0x00,0x00,0x14,0x01,0x00,0x00, -0x13,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x15,0x01,0x00,0x00,0x14,0x01,0x00,0x00,0xc4,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x17,0x01,0x00,0x00,0x15,0x01,0x00,0x00, -0x16,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x12,0x01,0x00,0x00, -0x19,0x01,0x00,0x00,0x0a,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0xfb,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x02,0x01,0x00,0x00,0x1a,0x01,0x00,0x00, -0x19,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x1b,0x01,0x00,0x00,0x1a,0x01,0x00,0x00,0xc5,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x1c,0x01,0x00,0x00,0x17,0x01,0x00,0x00, -0x1b,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x22,0x01,0x00,0x00,0x1c,0x01,0x00,0x00,0xff,0x00,0x00,0x00, -0xc4,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x23,0x01,0x00,0x00, -0x22,0x01,0x00,0x00,0xa9,0x00,0x00,0x00,0xc7,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x24,0x01,0x00,0x00,0x23,0x01,0x00,0x00, -0xfa,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x25,0x01,0x00,0x00,0x24,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x29,0x01,0x00,0x00,0xff,0x00,0x00,0x00, -0x28,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x2a,0x01,0x00,0x00,0x1c,0x01,0x00,0x00,0x29,0x01,0x00,0x00, -0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2b,0x01,0x00,0x00, -0x2a,0x01,0x00,0x00,0xfa,0x00,0x00,0x00,0x7c,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x2c,0x01,0x00,0x00,0x2b,0x01,0x00,0x00, -0x41,0x00,0x08,0x00,0x31,0x01,0x00,0x00,0x32,0x01,0x00,0x00, -0x0a,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0xfb,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x04,0x01,0x00,0x00,0x33,0x01,0x00,0x00,0x32,0x01,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x34,0x01,0x00,0x00, -0x33,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x39,0x01,0x00,0x00,0x34,0x01,0x00,0x00,0xfe,0x00,0x00,0x00, -0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x3d,0x01,0x00,0x00, -0x25,0x01,0x00,0x00,0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x3e,0x01,0x00,0x00,0x39,0x01,0x00,0x00,0x3d,0x01,0x00,0x00, -0x70,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x3f,0x01,0x00,0x00, -0x3e,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x41,0x01,0x00,0x00,0x34,0x01,0x00,0x00,0xa9,0x00,0x00,0x00, -0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x44,0x01,0x00,0x00, -0x2c,0x01,0x00,0x00,0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x45,0x01,0x00,0x00,0x41,0x01,0x00,0x00,0x44,0x01,0x00,0x00, -0x70,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x46,0x01,0x00,0x00, -0x45,0x01,0x00,0x00,0x50,0x00,0x05,0x00,0x35,0x01,0x00,0x00, -0x47,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,0x46,0x01,0x00,0x00, -0x83,0x00,0x05,0x00,0x35,0x01,0x00,0x00,0x4a,0x01,0x00,0x00, -0x47,0x01,0x00,0x00,0x61,0x03,0x00,0x00,0x8e,0x00,0x05,0x00, -0x35,0x01,0x00,0x00,0x4c,0x01,0x00,0x00,0x4a,0x01,0x00,0x00, -0x0f,0x01,0x00,0x00,0x51,0x00,0x05,0x00,0xc4,0x00,0x00,0x00, -0x54,0x01,0x00,0x00,0x4c,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x73,0x00,0x04,0x00,0x01,0x01,0x00,0x00,0x55,0x01,0x00,0x00, -0x54,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x56,0x01,0x00,0x00, -0x57,0x01,0x00,0x00,0x51,0x01,0x00,0x00,0xf7,0x00,0x00,0x00, -0x3e,0x00,0x03,0x00,0x57,0x01,0x00,0x00,0x55,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x59,0x01,0x00,0x00, -0xf7,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0x51,0x00,0x05,0x00, -0xc4,0x00,0x00,0x00,0x5b,0x01,0x00,0x00,0x4c,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x01,0x01,0x00,0x00, -0x5c,0x01,0x00,0x00,0x5b,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x56,0x01,0x00,0x00,0x5d,0x01,0x00,0x00,0x51,0x01,0x00,0x00, -0x59,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x5d,0x01,0x00,0x00, -0x5c,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x64,0x01,0x00,0x00,0x1e,0x03,0x00,0x00,0x62,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xdf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x66,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x66,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x1f,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0xdf,0x00,0x00,0x00,0xcf,0x01,0x00,0x00,0x67,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x6c,0x01,0x00,0x00, -0x1f,0x03,0x00,0x00,0xa7,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x68,0x01,0x00,0x00,0x67,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x6c,0x01,0x00,0x00,0x67,0x01,0x00,0x00, -0x68,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x67,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x71,0x01,0x00,0x00, -0x7e,0x00,0x00,0x00,0x1f,0x03,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x74,0x01,0x00,0x00,0x71,0x01,0x00,0x00, -0xab,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x75,0x01,0x00,0x00,0x74,0x01,0x00,0x00,0x77,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x76,0x01,0x00,0x00, -0x26,0x03,0x00,0x00,0x75,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x78,0x01,0x00,0x00,0x76,0x01,0x00,0x00, -0x79,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x7e,0x01,0x00,0x00,0x71,0x01,0x00,0x00,0x7d,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x80,0x01,0x00,0x00, -0x79,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x81,0x01,0x00,0x00,0x7e,0x01,0x00,0x00, -0x80,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x90,0x01,0x00,0x00, -0x91,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0x78,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0x3e,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x92,0x01,0x00,0x00, -0x91,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x01,0x01,0x00,0x00, -0x93,0x01,0x00,0x00,0x92,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x56,0x01,0x00,0x00,0x94,0x01,0x00,0x00,0x86,0x01,0x00,0x00, -0x81,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x94,0x01,0x00,0x00, -0x93,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x96,0x01,0x00,0x00,0x81,0x01,0x00,0x00,0x39,0x00,0x00,0x00, -0x41,0x00,0x08,0x00,0x90,0x01,0x00,0x00,0x98,0x01,0x00,0x00, -0x8e,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0x78,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0x99,0x01,0x00,0x00,0x98,0x01,0x00,0x00, -0x73,0x00,0x04,0x00,0x01,0x01,0x00,0x00,0x9a,0x01,0x00,0x00, -0x99,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x56,0x01,0x00,0x00, -0x9b,0x01,0x00,0x00,0x86,0x01,0x00,0x00,0x96,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0x9b,0x01,0x00,0x00,0x9a,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9d,0x01,0x00,0x00, -0x81,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x41,0x00,0x08,0x00, -0x90,0x01,0x00,0x00,0x9f,0x01,0x00,0x00,0x8e,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0x78,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0xa0,0x01,0x00,0x00,0x9f,0x01,0x00,0x00,0x73,0x00,0x04,0x00, -0x01,0x01,0x00,0x00,0xa1,0x01,0x00,0x00,0xa0,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x56,0x01,0x00,0x00,0xa2,0x01,0x00,0x00, -0x86,0x01,0x00,0x00,0x9d,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0xa2,0x01,0x00,0x00,0xa1,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa5,0x01,0x00,0x00,0x81,0x01,0x00,0x00, -0xa4,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x90,0x01,0x00,0x00, -0xa7,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0x78,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0xa4,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0xa8,0x01,0x00,0x00, -0xa7,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x01,0x01,0x00,0x00, -0xa9,0x01,0x00,0x00,0xa8,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x56,0x01,0x00,0x00,0xaa,0x01,0x00,0x00,0x86,0x01,0x00,0x00, -0xa5,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xaa,0x01,0x00,0x00, -0xa9,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xad,0x01,0x00,0x00,0x81,0x01,0x00,0x00,0xac,0x01,0x00,0x00, -0x41,0x00,0x08,0x00,0x90,0x01,0x00,0x00,0xaf,0x01,0x00,0x00, -0x8e,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0x78,0x01,0x00,0x00, -0xd0,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0xb0,0x01,0x00,0x00,0xaf,0x01,0x00,0x00, -0x73,0x00,0x04,0x00,0x01,0x01,0x00,0x00,0xb1,0x01,0x00,0x00, -0xb0,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x56,0x01,0x00,0x00, -0xb2,0x01,0x00,0x00,0x86,0x01,0x00,0x00,0xad,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0xb2,0x01,0x00,0x00,0xb1,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb5,0x01,0x00,0x00, -0x81,0x01,0x00,0x00,0xb4,0x01,0x00,0x00,0x41,0x00,0x08,0x00, -0x90,0x01,0x00,0x00,0xb7,0x01,0x00,0x00,0x8e,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0x78,0x01,0x00,0x00,0xd0,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0xb8,0x01,0x00,0x00,0xb7,0x01,0x00,0x00,0x73,0x00,0x04,0x00, -0x01,0x01,0x00,0x00,0xb9,0x01,0x00,0x00,0xb8,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x56,0x01,0x00,0x00,0xba,0x01,0x00,0x00, -0x86,0x01,0x00,0x00,0xb5,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0xba,0x01,0x00,0x00,0xb9,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xbd,0x01,0x00,0x00,0x81,0x01,0x00,0x00, -0xbc,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x90,0x01,0x00,0x00, -0xbf,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0x78,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0xc0,0x01,0x00,0x00, -0xbf,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x01,0x01,0x00,0x00, -0xc1,0x01,0x00,0x00,0xc0,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x56,0x01,0x00,0x00,0xc2,0x01,0x00,0x00,0x86,0x01,0x00,0x00, -0xbd,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xc2,0x01,0x00,0x00, -0xc1,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xc5,0x01,0x00,0x00,0x81,0x01,0x00,0x00,0xc4,0x01,0x00,0x00, -0x41,0x00,0x08,0x00,0x90,0x01,0x00,0x00,0xc7,0x01,0x00,0x00, -0x8e,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0x78,0x01,0x00,0x00, -0xd0,0x00,0x00,0x00,0xa4,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0xc8,0x01,0x00,0x00,0xc7,0x01,0x00,0x00, -0x73,0x00,0x04,0x00,0x01,0x01,0x00,0x00,0xc9,0x01,0x00,0x00, -0xc8,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x56,0x01,0x00,0x00, -0xca,0x01,0x00,0x00,0x86,0x01,0x00,0x00,0xc5,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0xca,0x01,0x00,0x00,0xc9,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xcf,0x01,0x00,0x00, -0x1f,0x03,0x00,0x00,0xcd,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0x66,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x68,0x01,0x00,0x00, -0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0xd0,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd3,0x01,0x00,0x00,0x22,0x03,0x00,0x00,0xd1,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd6,0x01,0x00,0x00, -0x26,0x03,0x00,0x00,0xd4,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xd8,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xd8,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x28,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0x68,0x01,0x00,0x00,0x82,0x02,0x00,0x00, -0xdb,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0xde,0x01,0x00,0x00,0x28,0x03,0x00,0x00,0x6c,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xda,0x01,0x00,0x00,0xdb,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xde,0x01,0x00,0x00, -0xd9,0x01,0x00,0x00,0xda,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xd9,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xe0,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xe0,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x2c,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0xd9,0x01,0x00,0x00,0x0c,0x02,0x00,0x00,0xe3,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xe6,0x01,0x00,0x00, -0x2c,0x03,0x00,0x00,0x60,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xe2,0x01,0x00,0x00,0xe3,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xe6,0x01,0x00,0x00,0xe1,0x01,0x00,0x00, -0xe2,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xe1,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xe8,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xe8,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x3e,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0xe1,0x01,0x00,0x00, -0x0a,0x02,0x00,0x00,0xe9,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0xee,0x01,0x00,0x00,0x3e,0x03,0x00,0x00, -0x62,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xea,0x01,0x00,0x00, -0xe9,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xee,0x01,0x00,0x00,0xe9,0x01,0x00,0x00,0xea,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xe9,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xf4,0x01,0x00,0x00,0x2c,0x03,0x00,0x00, -0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xf6,0x01,0x00,0x00,0xf4,0x01,0x00,0x00,0x3e,0x03,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf8,0x01,0x00,0x00, -0x55,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xfa,0x01,0x00,0x00,0x2c,0x03,0x00,0x00, -0x61,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xfb,0x01,0x00,0x00,0xf8,0x01,0x00,0x00,0xfa,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfd,0x01,0x00,0x00, -0x64,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xfe,0x01,0x00,0x00,0xfb,0x01,0x00,0x00, -0xfd,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x00,0x02,0x00,0x00,0xfe,0x01,0x00,0x00,0x3e,0x03,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x02,0x02,0x00,0x00, -0x00,0x02,0x00,0x00,0x01,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x04,0x02,0x00,0x00,0x02,0x02,0x00,0x00, -0x28,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x56,0x01,0x00,0x00, -0x05,0x02,0x00,0x00,0x51,0x01,0x00,0x00,0x04,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0x01,0x01,0x00,0x00,0x06,0x02,0x00,0x00, -0x05,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x07,0x02,0x00,0x00, -0x08,0x02,0x00,0x00,0xf2,0x01,0x00,0x00,0xf6,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0x08,0x02,0x00,0x00,0x06,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0a,0x02,0x00,0x00, -0x3e,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xe8,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xea,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xe3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xe3,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x0c,0x02,0x00,0x00,0x2c,0x03,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xe0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xe2,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x0e,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x0e,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x2d,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0xe2,0x01,0x00,0x00,0x3a,0x02,0x00,0x00,0x11,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x14,0x02,0x00,0x00, -0x2d,0x03,0x00,0x00,0xbf,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x10,0x02,0x00,0x00,0x11,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x14,0x02,0x00,0x00,0x0f,0x02,0x00,0x00, -0x10,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x0f,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x16,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x16,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x3b,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0x0f,0x02,0x00,0x00, -0x38,0x02,0x00,0x00,0x17,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0x1c,0x02,0x00,0x00,0x3b,0x03,0x00,0x00, -0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x18,0x02,0x00,0x00, -0x17,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x1c,0x02,0x00,0x00,0x17,0x02,0x00,0x00,0x18,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x17,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x22,0x02,0x00,0x00,0x2d,0x03,0x00,0x00, -0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x24,0x02,0x00,0x00,0x22,0x02,0x00,0x00,0x3b,0x03,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x26,0x02,0x00,0x00, -0x59,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x29,0x02,0x00,0x00,0x2d,0x03,0x00,0x00, -0x28,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x2a,0x02,0x00,0x00,0x26,0x02,0x00,0x00,0x29,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2c,0x02,0x00,0x00, -0x68,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x2d,0x02,0x00,0x00,0x2a,0x02,0x00,0x00, -0x2c,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x2f,0x02,0x00,0x00,0x2d,0x02,0x00,0x00,0x3b,0x03,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x31,0x02,0x00,0x00, -0x2f,0x02,0x00,0x00,0x30,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x33,0x02,0x00,0x00,0x31,0x02,0x00,0x00, -0x28,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x56,0x01,0x00,0x00, -0x34,0x02,0x00,0x00,0x86,0x01,0x00,0x00,0x33,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0x01,0x01,0x00,0x00,0x35,0x02,0x00,0x00, -0x34,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x07,0x02,0x00,0x00, -0x36,0x02,0x00,0x00,0x20,0x02,0x00,0x00,0x24,0x02,0x00,0x00, -0x3e,0x00,0x03,0x00,0x36,0x02,0x00,0x00,0x35,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x38,0x02,0x00,0x00, -0x3b,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x16,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x18,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x11,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x11,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x3a,0x02,0x00,0x00,0x2d,0x03,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x0e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x10,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x3c,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x3c,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x2e,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0x10,0x02,0x00,0x00,0x80,0x02,0x00,0x00,0x3f,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x42,0x02,0x00,0x00, -0x2e,0x03,0x00,0x00,0xbf,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x3e,0x02,0x00,0x00,0x3f,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x42,0x02,0x00,0x00,0x3d,0x02,0x00,0x00, -0x3e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x3d,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x44,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x44,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x32,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0x3d,0x02,0x00,0x00, -0x7e,0x02,0x00,0x00,0x47,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0x4a,0x02,0x00,0x00,0x32,0x03,0x00,0x00, -0x60,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x46,0x02,0x00,0x00, -0x47,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x4a,0x02,0x00,0x00,0x45,0x02,0x00,0x00,0x46,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x45,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x4c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x4c,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x34,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0x45,0x02,0x00,0x00,0x7c,0x02,0x00,0x00, -0x4f,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0x52,0x02,0x00,0x00,0x34,0x03,0x00,0x00,0xbc,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x4e,0x02,0x00,0x00,0x4f,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x52,0x02,0x00,0x00, -0x4d,0x02,0x00,0x00,0x4e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x4d,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x54,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x54,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x36,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0x4d,0x02,0x00,0x00,0x7a,0x02,0x00,0x00,0x55,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x5a,0x02,0x00,0x00, -0x36,0x03,0x00,0x00,0x62,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x56,0x02,0x00,0x00,0x55,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x5a,0x02,0x00,0x00,0x55,0x02,0x00,0x00, -0x56,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x55,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5c,0x02,0x00,0x00, -0x2e,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x5e,0x02,0x00,0x00,0x5c,0x02,0x00,0x00, -0x34,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x60,0x02,0x00,0x00,0x5e,0x02,0x00,0x00,0x5f,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x62,0x02,0x00,0x00, -0x32,0x03,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x63,0x02,0x00,0x00,0x60,0x02,0x00,0x00, -0x62,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x65,0x02,0x00,0x00,0x63,0x02,0x00,0x00,0x36,0x03,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x69,0x02,0x00,0x00, -0x62,0x02,0x00,0x00,0x36,0x03,0x00,0x00,0x41,0x00,0x05,0x00, -0x07,0x02,0x00,0x00,0x6a,0x02,0x00,0x00,0xf2,0x01,0x00,0x00, -0x69,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x01,0x01,0x00,0x00, -0x6b,0x02,0x00,0x00,0x6a,0x02,0x00,0x00,0x73,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0x6c,0x02,0x00,0x00,0x6b,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0x07,0x02,0x00,0x00,0x71,0x02,0x00,0x00, -0x20,0x02,0x00,0x00,0x5e,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0x01,0x01,0x00,0x00,0x72,0x02,0x00,0x00,0x71,0x02,0x00,0x00, -0x73,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x73,0x02,0x00,0x00, -0x72,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00, -0x75,0x02,0x00,0x00,0xca,0x00,0x00,0x00,0x65,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x76,0x02,0x00,0x00, -0x75,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,0xc4,0x00,0x00,0x00, -0x77,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x6c,0x02,0x00,0x00,0x73,0x02,0x00,0x00,0x76,0x02,0x00,0x00, -0x3e,0x00,0x03,0x00,0x75,0x02,0x00,0x00,0x77,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7a,0x02,0x00,0x00, -0x36,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x54,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x56,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x4f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x4f,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x7c,0x02,0x00,0x00,0x34,0x03,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x4c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x4e,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x47,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x47,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x7e,0x02,0x00,0x00,0x32,0x03,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x44,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x46,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x3f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x3f,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x80,0x02,0x00,0x00, -0x2e,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x3c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x3e,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0xdb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xdb,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x82,0x02,0x00,0x00,0x28,0x03,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xd8,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xda,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0xd0,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xd7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd7,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x84,0x02,0x00,0x00, -0x0e,0x03,0x00,0x00,0x6c,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xd4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd6,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x89,0x02,0x00,0x00, -0x55,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x8a,0x02,0x00,0x00,0x96,0x00,0x00,0x00, -0x89,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x8f,0x02,0x00,0x00,0x59,0x00,0x00,0x00,0xb9,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x90,0x02,0x00,0x00, -0xa8,0x00,0x00,0x00,0x8f,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x95,0x02,0x00,0x00,0x12,0x00,0x00,0x00, -0x94,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x96,0x02,0x00,0x00,0x95,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x97,0x02,0x00,0x00,0x0f,0x00,0x00,0x00, -0x96,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9b,0x02,0x00,0x00,0x47,0x00,0x00,0x00,0x96,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x9d,0x02,0x00,0x00, -0x9c,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x9e,0x02,0x00,0x00,0x9d,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9f,0x02,0x00,0x00, -0x9b,0x02,0x00,0x00,0x9e,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa0,0x02,0x00,0x00,0x97,0x02,0x00,0x00, -0x9f,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xa2,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xa2,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x0f,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0xd6,0x00,0x00,0x00,0x08,0x03,0x00,0x00,0xa5,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xa8,0x02,0x00,0x00, -0x0f,0x03,0x00,0x00,0xbf,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xa4,0x02,0x00,0x00,0xa5,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xa8,0x02,0x00,0x00,0xa3,0x02,0x00,0x00, -0xa4,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xa3,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0xaa,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xaa,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x10,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0xa3,0x02,0x00,0x00, -0x06,0x03,0x00,0x00,0xad,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0xb0,0x02,0x00,0x00,0x10,0x03,0x00,0x00, -0x60,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xac,0x02,0x00,0x00, -0xad,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xb0,0x02,0x00,0x00,0xab,0x02,0x00,0x00,0xac,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xab,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xb4,0x02,0x00,0x00,0x10,0x03,0x00,0x00, -0x61,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xb5,0x02,0x00,0x00,0x8a,0x02,0x00,0x00,0xb4,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb7,0x02,0x00,0x00, -0x64,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xb8,0x02,0x00,0x00,0xb5,0x02,0x00,0x00, -0xb7,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xbc,0x02,0x00,0x00,0x0f,0x03,0x00,0x00,0x28,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbd,0x02,0x00,0x00, -0x90,0x02,0x00,0x00,0xbc,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xbf,0x02,0x00,0x00,0x68,0x00,0x00,0x00, -0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xc0,0x02,0x00,0x00,0xbd,0x02,0x00,0x00,0xbf,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0xc2,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xc2,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x12,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0xab,0x02,0x00,0x00, -0x04,0x03,0x00,0x00,0xc5,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0xc8,0x02,0x00,0x00,0x12,0x03,0x00,0x00, -0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xc4,0x02,0x00,0x00, -0xc5,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xc8,0x02,0x00,0x00,0xc3,0x02,0x00,0x00,0xc4,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xc3,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0xca,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xca,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x14,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0xc3,0x02,0x00,0x00,0x02,0x03,0x00,0x00, -0xcd,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0xd0,0x02,0x00,0x00,0x14,0x03,0x00,0x00,0x62,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xcc,0x02,0x00,0x00,0xcd,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xd0,0x02,0x00,0x00, -0xcb,0x02,0x00,0x00,0xcc,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xcb,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd3,0x02,0x00,0x00,0xb8,0x02,0x00,0x00,0x14,0x03,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xd6,0x02,0x00,0x00, -0xd3,0x02,0x00,0x00,0x36,0x00,0x00,0x00,0xf7,0x00,0x03,0x00, -0xd8,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xd6,0x02,0x00,0x00,0xd7,0x02,0x00,0x00,0xd8,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xd7,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xdb,0x02,0x00,0x00,0xc0,0x02,0x00,0x00, -0x12,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0xdc,0x02,0x00,0x00,0x12,0x00,0x00,0x00,0xd0,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xdd,0x02,0x00,0x00, -0xdc,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0xde,0x02,0x00,0x00,0xdb,0x02,0x00,0x00,0xdd,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0xd8,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xd8,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0xc2,0x00,0x00,0x00, -0xdf,0x02,0x00,0x00,0xd6,0x02,0x00,0x00,0xcb,0x02,0x00,0x00, -0xde,0x02,0x00,0x00,0xd7,0x02,0x00,0x00,0xf7,0x00,0x03,0x00, -0xe1,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xdf,0x02,0x00,0x00,0xe0,0x02,0x00,0x00,0xe1,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xe0,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xe9,0x02,0x00,0x00,0xc0,0x02,0x00,0x00, -0x12,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0xeb,0x02,0x00,0x00,0x12,0x00,0x00,0x00,0xea,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xec,0x02,0x00,0x00, -0xeb,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xed,0x02,0x00,0x00,0xe9,0x02,0x00,0x00,0xec,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xee,0x02,0x00,0x00, -0xa0,0x02,0x00,0x00,0xed,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xf0,0x02,0x00,0x00,0xee,0x02,0x00,0x00, -0xb8,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xf2,0x02,0x00,0x00,0xf0,0x02,0x00,0x00,0x14,0x03,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf4,0x02,0x00,0x00, -0x0f,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xf6,0x02,0x00,0x00,0xf4,0x02,0x00,0x00, -0x12,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xf8,0x02,0x00,0x00,0xf6,0x02,0x00,0x00,0xf7,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfa,0x02,0x00,0x00, -0x10,0x03,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xfb,0x02,0x00,0x00,0xf8,0x02,0x00,0x00, -0xfa,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xfd,0x02,0x00,0x00,0xfb,0x02,0x00,0x00,0x14,0x03,0x00,0x00, -0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,0xfe,0x02,0x00,0x00, -0xca,0x00,0x00,0x00,0xfd,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0xff,0x02,0x00,0x00,0xfe,0x02,0x00,0x00, -0x41,0x00,0x06,0x00,0x90,0x01,0x00,0x00,0x00,0x03,0x00,0x00, -0xe5,0x02,0x00,0x00,0x34,0x00,0x00,0x00,0xf2,0x02,0x00,0x00, -0x3e,0x00,0x03,0x00,0x00,0x03,0x00,0x00,0xff,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0xe1,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xe1,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xcd,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xcd,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x02,0x03,0x00,0x00,0x14,0x03,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xca,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xcc,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0xc5,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xc5,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x04,0x03,0x00,0x00, -0x12,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xc2,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xc4,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0xad,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xad,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x06,0x03,0x00,0x00,0x10,0x03,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xaa,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xac,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xa5,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xa5,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x08,0x03,0x00,0x00,0x0f,0x03,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xa2,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xa4,0x02,0x00,0x00,0xfd,0x00,0x01,0x00, -0x38,0x00,0x01,0x00, -}; -const uint64_t matmul_q5_0_f32_aligned_len = 11668; - -unsigned char matmul_q5_0_f32_aligned_fp32_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0x38,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00, -0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00, -0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64, -0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00, -0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0f,0x00,0x0f,0x00, -0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e, -0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x3d,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x0a,0x01,0x00,0x00, -0x51,0x01,0x00,0x00,0x84,0x01,0x00,0x00,0x8b,0x01,0x00,0x00, -0x72,0x02,0x00,0x00,0xbb,0x02,0x00,0x00,0x10,0x00,0x06,0x00, -0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x34,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x10,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x37,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x3d,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x4c,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x4f,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x53,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x60,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x62,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x6c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xa7,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xb9,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xbc,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x03,0x01,0x00,0x00,0x06,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x05,0x01,0x00,0x00, -0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x06,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x06,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x06,0x01,0x00,0x00,0x02,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x07,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x16,0x00,0x00,0x00, -0x48,0x00,0x04,0x00,0x08,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x08,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0x08,0x01,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x0a,0x01,0x00,0x00,0x22,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0a,0x01,0x00,0x00, -0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x5c,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x5d,0x01,0x00,0x00,0x0b,0x00,0x00,0x00, -0x19,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x88,0x01,0x00,0x00, -0x06,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0x89,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x89,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x89,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x8b,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x8b,0x01,0x00,0x00,0x21,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x72,0x02,0x00,0x00, -0x0b,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xb8,0x02,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x04,0x00,0xb9,0x02,0x00,0x00,0x00,0x00,0x00,0x00, -0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0xb9,0x02,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0xb9,0x02,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xbb,0x02,0x00,0x00,0x22,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xbb,0x02,0x00,0x00, -0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00, -0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00, -0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x1e,0x00,0x10,0x00,0x10,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x11,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x11,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x21,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x2d,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x34,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x3d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x4c,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x4f,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x58,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x61,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x61,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x67,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x61,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x6d,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x72,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x77,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x78,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x77,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x7d,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x77,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x81,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x91,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x97,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa7,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0xa9,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xba,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0xb9,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbb,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xbc,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xbd,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xbb,0x00,0x00,0x00, -0xbc,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xbe,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xbd,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xbf,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0xba,0x00,0x00,0x00, -0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xc0,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xb8,0x00,0x00,0x00, -0xbf,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xc1,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc0,0x00,0x00,0x00, -0xbc,0x00,0x00,0x00,0x14,0x00,0x02,0x00,0xc2,0x00,0x00,0x00, -0x16,0x00,0x03,0x00,0xc4,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0xbf,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc7,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0xbc,0x00,0x00,0x00, -0x1c,0x00,0x04,0x00,0xc8,0x00,0x00,0x00,0xc4,0x00,0x00,0x00, -0xc7,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xc9,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0xcd,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0xc4,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0xd0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xfe,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0x01,0x01,0x00,0x00, -0x10,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x02,0x01,0x00,0x00, -0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1c,0x00,0x04,0x00, -0x03,0x01,0x00,0x00,0x02,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x04,0x01,0x00,0x00,0x08,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x05,0x01,0x00,0x00, -0x04,0x01,0x00,0x00,0xfa,0x00,0x00,0x00,0x1e,0x00,0x05,0x00, -0x06,0x01,0x00,0x00,0x01,0x01,0x00,0x00,0x03,0x01,0x00,0x00, -0x05,0x01,0x00,0x00,0x1d,0x00,0x03,0x00,0x07,0x01,0x00,0x00, -0x06,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,0x08,0x01,0x00,0x00, -0x07,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x09,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x08,0x01,0x00,0x00,0x3b,0x00,0x04,0x00, -0x09,0x01,0x00,0x00,0x0a,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x0c,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x01,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x12,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x02,0x01,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x16,0x01,0x00,0x00,0x10,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x28,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x31,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x04,0x01,0x00,0x00,0x17,0x00,0x04,0x00, -0x35,0x01,0x00,0x00,0xc4,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x48,0x01,0x00,0x00, -0x00,0x00,0x80,0x41,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x4d,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x4e,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x4d,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,0x4f,0x01,0x00,0x00, -0xc4,0x00,0x00,0x00,0x4e,0x01,0x00,0x00,0x20,0x00,0x04,0x00, -0x50,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x4f,0x01,0x00,0x00, -0x3b,0x00,0x04,0x00,0x50,0x01,0x00,0x00,0x51,0x01,0x00,0x00, -0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x55,0x01,0x00,0x00, -0x04,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x5c,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0x33,0x00,0x06,0x00,0x09,0x00,0x00,0x00,0x5d,0x01,0x00,0x00, -0x5c,0x01,0x00,0x00,0x39,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x5e,0x01,0x00,0x00, -0x51,0x00,0x00,0x00,0x5d,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x5f,0x01,0x00,0x00, -0x84,0x00,0x00,0x00,0x5e,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x60,0x01,0x00,0x00, -0x86,0x00,0x00,0x00,0x5f,0x01,0x00,0x00,0x6c,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x7b,0x01,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x80,0x01,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x81,0x01,0x00,0x00, -0x84,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0x80,0x01,0x00,0x00, -0x1c,0x00,0x04,0x00,0x82,0x01,0x00,0x00,0xc4,0x00,0x00,0x00, -0x81,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x83,0x01,0x00,0x00, -0x04,0x00,0x00,0x00,0x82,0x01,0x00,0x00,0x3b,0x00,0x04,0x00, -0x83,0x01,0x00,0x00,0x84,0x01,0x00,0x00,0x04,0x00,0x00,0x00, -0x17,0x00,0x04,0x00,0x87,0x01,0x00,0x00,0xc4,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x88,0x01,0x00,0x00, -0x87,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,0x89,0x01,0x00,0x00, -0x88,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x8a,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x89,0x01,0x00,0x00,0x3b,0x00,0x04,0x00, -0x8a,0x01,0x00,0x00,0x8b,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x8d,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0xc4,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x9e,0x01,0x00,0x00,0x03,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xa4,0x01,0x00,0x00,0x51,0x00,0x00,0x00, -0x5d,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xa5,0x01,0x00,0x00,0x84,0x00,0x00,0x00, -0xa4,0x01,0x00,0x00,0x77,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xa6,0x01,0x00,0x00,0x86,0x00,0x00,0x00, -0xa5,0x01,0x00,0x00,0x6c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xa9,0x01,0x00,0x00,0x08,0x01,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xaa,0x01,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xad,0x01,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x77,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc8,0x01,0x00,0x00, -0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x1c,0x00,0x04,0x00,0xc9,0x01,0x00,0x00,0xc4,0x00,0x00,0x00, -0xc8,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0xca,0x01,0x00,0x00, -0x07,0x00,0x00,0x00,0xc9,0x01,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xda,0x01,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xf5,0x01,0x00,0x00,0x84,0x00,0x00,0x00, -0xbf,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x1c,0x00,0x04,0x00, -0xf6,0x01,0x00,0x00,0xc4,0x00,0x00,0x00,0xf5,0x01,0x00,0x00, -0x20,0x00,0x04,0x00,0xf7,0x01,0x00,0x00,0x07,0x00,0x00,0x00, -0xf6,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x00,0x02,0x00,0x00,0x86,0x00,0x00,0x00,0xb9,0x00,0x00,0x00, -0xbf,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x08,0x02,0x00,0x00,0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x37,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x6a,0x02,0x00,0x00,0x0d,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x72,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0x1d,0x00,0x03,0x00,0xb8,0x02,0x00,0x00,0xc4,0x00,0x00,0x00, -0x1e,0x00,0x03,0x00,0xb9,0x02,0x00,0x00,0xb8,0x02,0x00,0x00, -0x20,0x00,0x04,0x00,0xba,0x02,0x00,0x00,0x0c,0x00,0x00,0x00, -0xb9,0x02,0x00,0x00,0x3b,0x00,0x04,0x00,0xba,0x02,0x00,0x00, -0xbb,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0xc0,0x02,0x00,0x00,0x05,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xcd,0x02,0x00,0x00, -0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x2c,0x00,0x05,0x00,0x35,0x01,0x00,0x00,0x37,0x03,0x00,0x00, -0x48,0x01,0x00,0x00,0x48,0x01,0x00,0x00,0x36,0x00,0x05,0x00, -0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0xc9,0x00,0x00,0x00,0xca,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xca,0x01,0x00,0x00, -0xcb,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0xf7,0x01,0x00,0x00,0xf8,0x01,0x00,0x00,0x07,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x16,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x16,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x17,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x24,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2a,0x00,0x00,0x00, -0x1e,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x2d,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x2f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x24,0x00,0x00,0x00, -0x2f,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x2a,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x35,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x35,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x38,0x00,0x00,0x00, -0x36,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x82,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x38,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x3b,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x3f,0x00,0x00,0x00, -0x3d,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x3f,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x42,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x3b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x49,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4a,0x00,0x00,0x00, -0x49,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x4d,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x3e,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x4d,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x50,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00, -0x50,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x50,0x00,0x00,0x00, -0x58,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x5d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x64,0x00,0x00,0x00, -0x5d,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x5d,0x00,0x00,0x00, -0x67,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x6e,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x6d,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x73,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x72,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x78,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x7e,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x7d,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x82,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x82,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x47,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x88,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0x47,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x8d,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0x83,0x00,0x00,0x00, -0x0c,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x8e,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x26,0x00,0x00,0x00,0x88,0x00,0x00,0x00, -0x8d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x92,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x91,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x93,0x00,0x00,0x00, -0x92,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x94,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x93,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x96,0x00,0x00,0x00, -0x42,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x97,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x99,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x96,0x00,0x00,0x00, -0x99,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9b,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x9a,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9d,0x00,0x00,0x00, -0x9b,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,0x9d,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0xa3,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0xa2,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00, -0xa3,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa5,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0xa4,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa8,0x00,0x00,0x00, -0x4a,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0xa9,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xab,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0xa8,0x00,0x00,0x00, -0xab,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xad,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,0xac,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xaf,0x00,0x00,0x00, -0xad,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0xaf,0x00,0x00,0x00, -0x77,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb2,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xe3,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0x05,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0xb3,0x00,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xc3,0x00,0x00,0x00, -0xe3,0x02,0x00,0x00,0xc1,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xb4,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0xb3,0x00,0x00,0x00, -0xb4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb3,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,0xce,0x00,0x00,0x00, -0xca,0x00,0x00,0x00,0xe3,0x02,0x00,0x00,0x3e,0x00,0x03,0x00, -0xce,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0xe3,0x02,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb2,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xb4,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xd4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd4,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xfc,0x02,0x00,0x00, -0xb0,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0xaf,0x01,0x00,0x00, -0xd7,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xf8,0x02,0x00,0x00,0x9e,0x00,0x00,0x00,0xb4,0x00,0x00,0x00, -0xac,0x01,0x00,0x00,0xd7,0x00,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xe4,0x02,0x00,0x00,0x84,0x00,0x00,0x00, -0xb4,0x00,0x00,0x00,0x5a,0x02,0x00,0x00,0xd7,0x00,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xdb,0x00,0x00,0x00, -0xe4,0x02,0x00,0x00,0x8e,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xd6,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xdb,0x00,0x00,0x00,0xd5,0x00,0x00,0x00, -0xd6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd5,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xdd,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xf4,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0xd5,0x00,0x00,0x00, -0x62,0x01,0x00,0x00,0xde,0x00,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0xe3,0x00,0x00,0x00,0xf4,0x02,0x00,0x00, -0x37,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xdf,0x00,0x00,0x00, -0xde,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xe3,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0xdf,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0x73,0x00,0x00,0x00, -0xf4,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xeb,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0x99,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xec,0x00,0x00,0x00, -0xeb,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xed,0x00,0x00,0x00,0xf8,0x02,0x00,0x00, -0xec,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xef,0x00,0x00,0x00,0xed,0x00,0x00,0x00,0x6e,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf5,0x00,0x00,0x00, -0xe8,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,0xf5,0x00,0x00,0x00, -0x6e,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xfb,0x00,0x00,0x00,0xef,0x00,0x00,0x00,0xfa,0x00,0x00,0x00, -0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xff,0x00,0x00,0x00, -0xef,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x41,0x00,0x07,0x00, -0x0c,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,0x0a,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x01,0x01,0x00,0x00,0x0e,0x01,0x00,0x00, -0x0d,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0x0f,0x01,0x00,0x00,0x0e,0x01,0x00,0x00,0x41,0x00,0x08,0x00, -0x12,0x01,0x00,0x00,0x13,0x01,0x00,0x00,0x0a,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0xd0,0x00,0x00,0x00, -0xd0,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x02,0x01,0x00,0x00, -0x14,0x01,0x00,0x00,0x13,0x01,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x15,0x01,0x00,0x00,0x14,0x01,0x00,0x00, -0xc4,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x17,0x01,0x00,0x00, -0x15,0x01,0x00,0x00,0x16,0x01,0x00,0x00,0x41,0x00,0x08,0x00, -0x12,0x01,0x00,0x00,0x19,0x01,0x00,0x00,0x0a,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0xd0,0x00,0x00,0x00, -0x34,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x02,0x01,0x00,0x00, -0x1a,0x01,0x00,0x00,0x19,0x01,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x1b,0x01,0x00,0x00,0x1a,0x01,0x00,0x00, -0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1c,0x01,0x00,0x00, -0x17,0x01,0x00,0x00,0x1b,0x01,0x00,0x00,0xc2,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x22,0x01,0x00,0x00,0x1c,0x01,0x00,0x00, -0xff,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x23,0x01,0x00,0x00,0x22,0x01,0x00,0x00,0xa9,0x00,0x00,0x00, -0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x24,0x01,0x00,0x00, -0x23,0x01,0x00,0x00,0xfa,0x00,0x00,0x00,0x7c,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x25,0x01,0x00,0x00,0x24,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x29,0x01,0x00,0x00, -0xff,0x00,0x00,0x00,0x28,0x01,0x00,0x00,0xc2,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x2a,0x01,0x00,0x00,0x1c,0x01,0x00,0x00, -0x29,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x2b,0x01,0x00,0x00,0x2a,0x01,0x00,0x00,0xfa,0x00,0x00,0x00, -0x7c,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x2c,0x01,0x00,0x00, -0x2b,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x31,0x01,0x00,0x00, -0x32,0x01,0x00,0x00,0x0a,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0xfb,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0xff,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x04,0x01,0x00,0x00,0x33,0x01,0x00,0x00, -0x32,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x34,0x01,0x00,0x00,0x33,0x01,0x00,0x00,0xc7,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x39,0x01,0x00,0x00,0x34,0x01,0x00,0x00, -0xfe,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x3d,0x01,0x00,0x00,0x25,0x01,0x00,0x00,0xc5,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3e,0x01,0x00,0x00,0x39,0x01,0x00,0x00, -0x3d,0x01,0x00,0x00,0x70,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0x3f,0x01,0x00,0x00,0x3e,0x01,0x00,0x00,0xc2,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x41,0x01,0x00,0x00,0x34,0x01,0x00,0x00, -0xa9,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x44,0x01,0x00,0x00,0x2c,0x01,0x00,0x00,0xc5,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x45,0x01,0x00,0x00,0x41,0x01,0x00,0x00, -0x44,0x01,0x00,0x00,0x70,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0x46,0x01,0x00,0x00,0x45,0x01,0x00,0x00,0x50,0x00,0x05,0x00, -0x35,0x01,0x00,0x00,0x47,0x01,0x00,0x00,0x3f,0x01,0x00,0x00, -0x46,0x01,0x00,0x00,0x83,0x00,0x05,0x00,0x35,0x01,0x00,0x00, -0x4a,0x01,0x00,0x00,0x47,0x01,0x00,0x00,0x37,0x03,0x00,0x00, -0x8e,0x00,0x05,0x00,0x35,0x01,0x00,0x00,0x4c,0x01,0x00,0x00, -0x4a,0x01,0x00,0x00,0x0f,0x01,0x00,0x00,0x51,0x00,0x05,0x00, -0xc4,0x00,0x00,0x00,0x54,0x01,0x00,0x00,0x4c,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x55,0x01,0x00,0x00, -0x56,0x01,0x00,0x00,0x51,0x01,0x00,0x00,0xf7,0x00,0x00,0x00, -0x3e,0x00,0x03,0x00,0x56,0x01,0x00,0x00,0x54,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x58,0x01,0x00,0x00, -0xf7,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0x51,0x00,0x05,0x00, -0xc4,0x00,0x00,0x00,0x5a,0x01,0x00,0x00,0x4c,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x55,0x01,0x00,0x00, -0x5b,0x01,0x00,0x00,0x51,0x01,0x00,0x00,0x58,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0x5b,0x01,0x00,0x00,0x5a,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x62,0x01,0x00,0x00, -0xf4,0x02,0x00,0x00,0x60,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x64,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x64,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xf5,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0xdf,0x00,0x00,0x00, -0xa8,0x01,0x00,0x00,0x65,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0x6a,0x01,0x00,0x00,0xf5,0x02,0x00,0x00, -0xa7,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x66,0x01,0x00,0x00, -0x65,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x6a,0x01,0x00,0x00,0x65,0x01,0x00,0x00,0x66,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x65,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x6f,0x01,0x00,0x00,0x7e,0x00,0x00,0x00, -0xf5,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x72,0x01,0x00,0x00,0x6f,0x01,0x00,0x00,0xab,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x73,0x01,0x00,0x00, -0x72,0x01,0x00,0x00,0x77,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x74,0x01,0x00,0x00,0xfc,0x02,0x00,0x00, -0x73,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x76,0x01,0x00,0x00,0x74,0x01,0x00,0x00,0x79,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7c,0x01,0x00,0x00, -0x6f,0x01,0x00,0x00,0x7b,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x7e,0x01,0x00,0x00,0x79,0x00,0x00,0x00, -0x77,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x7f,0x01,0x00,0x00,0x7c,0x01,0x00,0x00,0x7e,0x01,0x00,0x00, -0x41,0x00,0x07,0x00,0x8d,0x01,0x00,0x00,0x8e,0x01,0x00,0x00, -0x8b,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0x76,0x01,0x00,0x00, -0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0x8f,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x55,0x01,0x00,0x00,0x90,0x01,0x00,0x00,0x84,0x01,0x00,0x00, -0x7f,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x90,0x01,0x00,0x00, -0x8f,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x92,0x01,0x00,0x00,0x7f,0x01,0x00,0x00,0x39,0x00,0x00,0x00, -0x41,0x00,0x07,0x00,0x8d,0x01,0x00,0x00,0x94,0x01,0x00,0x00, -0x8b,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0x76,0x01,0x00,0x00, -0x39,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0x95,0x01,0x00,0x00,0x94,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x55,0x01,0x00,0x00,0x96,0x01,0x00,0x00,0x84,0x01,0x00,0x00, -0x92,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x96,0x01,0x00,0x00, -0x95,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x98,0x01,0x00,0x00,0x7f,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x41,0x00,0x07,0x00,0x8d,0x01,0x00,0x00,0x9a,0x01,0x00,0x00, -0x8b,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0x76,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0x9b,0x01,0x00,0x00,0x9a,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x55,0x01,0x00,0x00,0x9c,0x01,0x00,0x00,0x84,0x01,0x00,0x00, -0x98,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x9c,0x01,0x00,0x00, -0x9b,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9f,0x01,0x00,0x00,0x7f,0x01,0x00,0x00,0x9e,0x01,0x00,0x00, -0x41,0x00,0x07,0x00,0x8d,0x01,0x00,0x00,0xa1,0x01,0x00,0x00, -0x8b,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0x76,0x01,0x00,0x00, -0x9e,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0xa2,0x01,0x00,0x00,0xa1,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x55,0x01,0x00,0x00,0xa3,0x01,0x00,0x00,0x84,0x01,0x00,0x00, -0x9f,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xa3,0x01,0x00,0x00, -0xa2,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa8,0x01,0x00,0x00,0xf5,0x02,0x00,0x00,0xa6,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0x64,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x66,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0xa9,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xac,0x01,0x00,0x00,0xf8,0x02,0x00,0x00, -0xaa,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xaf,0x01,0x00,0x00,0xfc,0x02,0x00,0x00,0xad,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xb1,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xb1,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xfe,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0x66,0x01,0x00,0x00, -0x58,0x02,0x00,0x00,0xb4,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0xb7,0x01,0x00,0x00,0xfe,0x02,0x00,0x00, -0x6c,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xb3,0x01,0x00,0x00, -0xb4,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xb7,0x01,0x00,0x00,0xb2,0x01,0x00,0x00,0xb3,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xb2,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xb9,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xb9,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x02,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0xb2,0x01,0x00,0x00,0xe4,0x01,0x00,0x00, -0xbc,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0xbf,0x01,0x00,0x00,0x02,0x03,0x00,0x00,0x60,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xbb,0x01,0x00,0x00,0xbc,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xbf,0x01,0x00,0x00, -0xba,0x01,0x00,0x00,0xbb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xba,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xc1,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xc1,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x14,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0xba,0x01,0x00,0x00,0xe2,0x01,0x00,0x00,0xc2,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xc7,0x01,0x00,0x00, -0x14,0x03,0x00,0x00,0x62,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xc3,0x01,0x00,0x00,0xc2,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xc7,0x01,0x00,0x00,0xc2,0x01,0x00,0x00, -0xc3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xc2,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xcd,0x01,0x00,0x00, -0x02,0x03,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xcf,0x01,0x00,0x00,0xcd,0x01,0x00,0x00, -0x14,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd1,0x01,0x00,0x00,0x55,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd3,0x01,0x00,0x00, -0x02,0x03,0x00,0x00,0x61,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xd4,0x01,0x00,0x00,0xd1,0x01,0x00,0x00, -0xd3,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd6,0x01,0x00,0x00,0x64,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd7,0x01,0x00,0x00, -0xd4,0x01,0x00,0x00,0xd6,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xd9,0x01,0x00,0x00,0xd7,0x01,0x00,0x00, -0x14,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xdb,0x01,0x00,0x00,0xd9,0x01,0x00,0x00,0xda,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdd,0x01,0x00,0x00, -0xdb,0x01,0x00,0x00,0xfe,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0x55,0x01,0x00,0x00,0xde,0x01,0x00,0x00,0x51,0x01,0x00,0x00, -0xdd,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0xdf,0x01,0x00,0x00,0xde,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0xcd,0x00,0x00,0x00,0xe0,0x01,0x00,0x00,0xcb,0x01,0x00,0x00, -0xcf,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xe0,0x01,0x00,0x00, -0xdf,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xe2,0x01,0x00,0x00,0x14,0x03,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xc1,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xc3,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xbc,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xbc,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xe4,0x01,0x00,0x00,0x02,0x03,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb9,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xbb,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xe6,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xe6,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x03,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0xbb,0x01,0x00,0x00,0x12,0x02,0x00,0x00, -0xe9,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0xec,0x01,0x00,0x00,0x03,0x03,0x00,0x00,0xbf,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xe8,0x01,0x00,0x00,0xe9,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xec,0x01,0x00,0x00, -0xe7,0x01,0x00,0x00,0xe8,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xe7,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xee,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xee,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x11,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0xe7,0x01,0x00,0x00,0x10,0x02,0x00,0x00,0xef,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xf4,0x01,0x00,0x00, -0x11,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xf0,0x01,0x00,0x00,0xef,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xf4,0x01,0x00,0x00,0xef,0x01,0x00,0x00, -0xf0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xef,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfa,0x01,0x00,0x00, -0x03,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xfc,0x01,0x00,0x00,0xfa,0x01,0x00,0x00, -0x11,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xfe,0x01,0x00,0x00,0x59,0x00,0x00,0x00,0xb9,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x01,0x02,0x00,0x00, -0x03,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x02,0x02,0x00,0x00,0xfe,0x01,0x00,0x00, -0x01,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x04,0x02,0x00,0x00,0x68,0x00,0x00,0x00,0xbc,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x05,0x02,0x00,0x00, -0x02,0x02,0x00,0x00,0x04,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x07,0x02,0x00,0x00,0x05,0x02,0x00,0x00, -0x11,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x09,0x02,0x00,0x00,0x07,0x02,0x00,0x00,0x08,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0b,0x02,0x00,0x00, -0x09,0x02,0x00,0x00,0xfe,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0x55,0x01,0x00,0x00,0x0c,0x02,0x00,0x00,0x84,0x01,0x00,0x00, -0x0b,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0x0d,0x02,0x00,0x00,0x0c,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0xcd,0x00,0x00,0x00,0x0e,0x02,0x00,0x00,0xf8,0x01,0x00,0x00, -0xfc,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x0e,0x02,0x00,0x00, -0x0d,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x10,0x02,0x00,0x00,0x11,0x03,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xee,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xf0,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xe9,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xe9,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x12,0x02,0x00,0x00,0x03,0x03,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xe6,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xe8,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0x14,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x14,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x04,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0xe8,0x01,0x00,0x00,0x56,0x02,0x00,0x00, -0x17,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0x1a,0x02,0x00,0x00,0x04,0x03,0x00,0x00,0xbf,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x16,0x02,0x00,0x00,0x17,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x1a,0x02,0x00,0x00, -0x15,0x02,0x00,0x00,0x16,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x15,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x1c,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x1c,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x08,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0x15,0x02,0x00,0x00,0x54,0x02,0x00,0x00,0x1f,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x22,0x02,0x00,0x00, -0x08,0x03,0x00,0x00,0x60,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x1e,0x02,0x00,0x00,0x1f,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x22,0x02,0x00,0x00,0x1d,0x02,0x00,0x00, -0x1e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x1d,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x24,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x24,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x0a,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0x1d,0x02,0x00,0x00, -0x52,0x02,0x00,0x00,0x27,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0x2a,0x02,0x00,0x00,0x0a,0x03,0x00,0x00, -0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x26,0x02,0x00,0x00, -0x27,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x2a,0x02,0x00,0x00,0x25,0x02,0x00,0x00,0x26,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x25,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x2c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x2c,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x0c,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0x25,0x02,0x00,0x00,0x50,0x02,0x00,0x00, -0x2d,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0x32,0x02,0x00,0x00,0x0c,0x03,0x00,0x00,0x62,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x2e,0x02,0x00,0x00,0x2d,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x32,0x02,0x00,0x00, -0x2d,0x02,0x00,0x00,0x2e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x2d,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x34,0x02,0x00,0x00,0x04,0x03,0x00,0x00,0xbc,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x36,0x02,0x00,0x00, -0x34,0x02,0x00,0x00,0x0a,0x03,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x38,0x02,0x00,0x00,0x36,0x02,0x00,0x00, -0x37,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x3a,0x02,0x00,0x00,0x08,0x03,0x00,0x00,0x62,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3b,0x02,0x00,0x00, -0x38,0x02,0x00,0x00,0x3a,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3d,0x02,0x00,0x00,0x3b,0x02,0x00,0x00, -0x0c,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x41,0x02,0x00,0x00,0x3a,0x02,0x00,0x00,0x0c,0x03,0x00,0x00, -0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,0x42,0x02,0x00,0x00, -0xcb,0x01,0x00,0x00,0x41,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0x43,0x02,0x00,0x00,0x42,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,0x48,0x02,0x00,0x00, -0xf8,0x01,0x00,0x00,0x36,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0x49,0x02,0x00,0x00,0x48,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,0x4b,0x02,0x00,0x00, -0xca,0x00,0x00,0x00,0x3d,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0x4c,0x02,0x00,0x00,0x4b,0x02,0x00,0x00, -0x0c,0x00,0x08,0x00,0xc4,0x00,0x00,0x00,0x4d,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x43,0x02,0x00,0x00, -0x49,0x02,0x00,0x00,0x4c,0x02,0x00,0x00,0x3e,0x00,0x03,0x00, -0x4b,0x02,0x00,0x00,0x4d,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x50,0x02,0x00,0x00,0x0c,0x03,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x2c,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x2e,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x27,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x27,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x52,0x02,0x00,0x00, -0x0a,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x24,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x26,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x1f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x1f,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x54,0x02,0x00,0x00,0x08,0x03,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x1c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x1e,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x17,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x17,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x56,0x02,0x00,0x00,0x04,0x03,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x14,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x16,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0xb4,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xb4,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x58,0x02,0x00,0x00, -0xfe,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xb1,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xb3,0x01,0x00,0x00, -0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0xa9,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xd7,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xd7,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x5a,0x02,0x00,0x00,0xe4,0x02,0x00,0x00, -0x6c,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd4,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xd6,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x5f,0x02,0x00,0x00,0x55,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x60,0x02,0x00,0x00,0x96,0x00,0x00,0x00,0x5f,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x65,0x02,0x00,0x00, -0x59,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x66,0x02,0x00,0x00,0xa8,0x00,0x00,0x00, -0x65,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x6b,0x02,0x00,0x00,0x12,0x00,0x00,0x00,0x6a,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x6c,0x02,0x00,0x00, -0x6b,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x6d,0x02,0x00,0x00,0x0f,0x00,0x00,0x00,0x6c,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x71,0x02,0x00,0x00, -0x47,0x00,0x00,0x00,0x6c,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0x73,0x02,0x00,0x00,0x72,0x02,0x00,0x00, -0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x74,0x02,0x00,0x00,0x73,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x75,0x02,0x00,0x00,0x71,0x02,0x00,0x00, -0x74,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x76,0x02,0x00,0x00,0x6d,0x02,0x00,0x00,0x75,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x78,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x78,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xe5,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0xd6,0x00,0x00,0x00, -0xde,0x02,0x00,0x00,0x7b,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0x7e,0x02,0x00,0x00,0xe5,0x02,0x00,0x00, -0xbf,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x7a,0x02,0x00,0x00, -0x7b,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x7e,0x02,0x00,0x00,0x79,0x02,0x00,0x00,0x7a,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x79,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x80,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x80,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xe6,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0x79,0x02,0x00,0x00,0xdc,0x02,0x00,0x00, -0x83,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0x86,0x02,0x00,0x00,0xe6,0x02,0x00,0x00,0x60,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x82,0x02,0x00,0x00,0x83,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x86,0x02,0x00,0x00, -0x81,0x02,0x00,0x00,0x82,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x81,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x8a,0x02,0x00,0x00,0xe6,0x02,0x00,0x00,0x61,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8b,0x02,0x00,0x00, -0x60,0x02,0x00,0x00,0x8a,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x8d,0x02,0x00,0x00,0x64,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x8e,0x02,0x00,0x00,0x8b,0x02,0x00,0x00,0x8d,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x92,0x02,0x00,0x00, -0xe5,0x02,0x00,0x00,0x00,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x93,0x02,0x00,0x00,0x66,0x02,0x00,0x00, -0x92,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x95,0x02,0x00,0x00,0x68,0x00,0x00,0x00,0xbc,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x96,0x02,0x00,0x00, -0x93,0x02,0x00,0x00,0x95,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x98,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x98,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xe8,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0x81,0x02,0x00,0x00,0xda,0x02,0x00,0x00, -0x9b,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0x9e,0x02,0x00,0x00,0xe8,0x02,0x00,0x00,0xbc,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x9a,0x02,0x00,0x00,0x9b,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x9e,0x02,0x00,0x00, -0x99,0x02,0x00,0x00,0x9a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x99,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xa0,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xa0,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xea,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0x99,0x02,0x00,0x00,0xd8,0x02,0x00,0x00,0xa3,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xa6,0x02,0x00,0x00, -0xea,0x02,0x00,0x00,0x62,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xa2,0x02,0x00,0x00,0xa3,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xa6,0x02,0x00,0x00,0xa1,0x02,0x00,0x00, -0xa2,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xa1,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa9,0x02,0x00,0x00, -0x8e,0x02,0x00,0x00,0xea,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0xac,0x02,0x00,0x00,0xa9,0x02,0x00,0x00, -0x36,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0xae,0x02,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xac,0x02,0x00,0x00, -0xad,0x02,0x00,0x00,0xae,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xad,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xb1,0x02,0x00,0x00,0x96,0x02,0x00,0x00,0xe8,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0xb2,0x02,0x00,0x00, -0x12,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xb3,0x02,0x00,0x00,0xb2,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xb4,0x02,0x00,0x00, -0xb1,0x02,0x00,0x00,0xb3,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0xae,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xae,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0xc2,0x00,0x00,0x00,0xb5,0x02,0x00,0x00, -0xac,0x02,0x00,0x00,0xa1,0x02,0x00,0x00,0xb4,0x02,0x00,0x00, -0xad,0x02,0x00,0x00,0xf7,0x00,0x03,0x00,0xb7,0x02,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xb5,0x02,0x00,0x00, -0xb6,0x02,0x00,0x00,0xb7,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xb6,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xbf,0x02,0x00,0x00,0x96,0x02,0x00,0x00,0xe8,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0xc1,0x02,0x00,0x00, -0x12,0x00,0x00,0x00,0xc0,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xc2,0x02,0x00,0x00,0xc1,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc3,0x02,0x00,0x00, -0xbf,0x02,0x00,0x00,0xc2,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xc4,0x02,0x00,0x00,0x76,0x02,0x00,0x00, -0xc3,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xc6,0x02,0x00,0x00,0xc4,0x02,0x00,0x00,0x8e,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc8,0x02,0x00,0x00, -0xc6,0x02,0x00,0x00,0xea,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xca,0x02,0x00,0x00,0xe5,0x02,0x00,0x00, -0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xcc,0x02,0x00,0x00,0xca,0x02,0x00,0x00,0xe8,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xce,0x02,0x00,0x00, -0xcc,0x02,0x00,0x00,0xcd,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xd0,0x02,0x00,0x00,0xe6,0x02,0x00,0x00, -0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd1,0x02,0x00,0x00,0xce,0x02,0x00,0x00,0xd0,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd3,0x02,0x00,0x00, -0xd1,0x02,0x00,0x00,0xea,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0xcd,0x00,0x00,0x00,0xd4,0x02,0x00,0x00,0xca,0x00,0x00,0x00, -0xd3,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0xd5,0x02,0x00,0x00,0xd4,0x02,0x00,0x00,0x41,0x00,0x06,0x00, -0x8d,0x01,0x00,0x00,0xd6,0x02,0x00,0x00,0xbb,0x02,0x00,0x00, -0x34,0x00,0x00,0x00,0xc8,0x02,0x00,0x00,0x3e,0x00,0x03,0x00, -0xd6,0x02,0x00,0x00,0xd5,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0xb7,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xb7,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0xa3,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xa3,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd8,0x02,0x00,0x00,0xea,0x02,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xa0,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xa2,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x9b,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x9b,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xda,0x02,0x00,0x00,0xe8,0x02,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x98,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x9a,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x83,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x83,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdc,0x02,0x00,0x00, -0xe6,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x80,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x82,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x7b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x7b,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xde,0x02,0x00,0x00,0xe5,0x02,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x78,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x7a,0x02,0x00,0x00,0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00, - -}; -const uint64_t matmul_q5_0_f32_aligned_fp32_len = 10920; - -unsigned char matmul_q5_0_f32_fp32_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0x40,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00, -0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00, -0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64, -0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00, -0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0f,0x00,0x0f,0x00, -0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e, -0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x3d,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x09,0x01,0x00,0x00, -0x50,0x01,0x00,0x00,0x81,0x01,0x00,0x00,0x8c,0x01,0x00,0x00, -0x72,0x02,0x00,0x00,0xbb,0x02,0x00,0x00,0x10,0x00,0x06,0x00, -0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x34,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x10,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x37,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x3d,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x4c,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x4f,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x53,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x60,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x62,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x6c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xa6,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xb8,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xbb,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x02,0x01,0x00,0x00,0x06,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x04,0x01,0x00,0x00, -0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x05,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x05,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x05,0x01,0x00,0x00,0x02,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x06,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x16,0x00,0x00,0x00, -0x48,0x00,0x04,0x00,0x07,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x07,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0x07,0x01,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x09,0x01,0x00,0x00,0x22,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x09,0x01,0x00,0x00, -0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x5b,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x5c,0x01,0x00,0x00,0x0b,0x00,0x00,0x00, -0x19,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x89,0x01,0x00,0x00, -0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0x8a,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x8a,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x8a,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x8c,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x8c,0x01,0x00,0x00,0x21,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x72,0x02,0x00,0x00, -0x0b,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xb8,0x02,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x04,0x00,0xb9,0x02,0x00,0x00,0x00,0x00,0x00,0x00, -0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0xb9,0x02,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0xb9,0x02,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xbb,0x02,0x00,0x00,0x22,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xbb,0x02,0x00,0x00, -0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00, -0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00, -0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x1e,0x00,0x10,0x00,0x10,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x11,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x11,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x21,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x2d,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x34,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x3d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x4c,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x4f,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x58,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x61,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x61,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x67,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x61,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x6d,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x72,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x77,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x7c,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x80,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x85,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x90,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x96,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0xa1,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0xa8,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xb7,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xb8,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x4f,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbc,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0xbb,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbd,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbe,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0xbd,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbf,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0xbe,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc0,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0xbb,0x00,0x00,0x00, -0x14,0x00,0x02,0x00,0xc1,0x00,0x00,0x00,0x16,0x00,0x03,0x00, -0xc3,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xc4,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xc5,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x1c,0x00,0x04,0x00, -0xc7,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0xc6,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0xc8,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0xc7,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0xc3,0x00,0x00,0x00, -0xcb,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0xcc,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xc3,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0xcf,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xf3,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xf9,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x16,0x00,0x03,0x00,0x00,0x01,0x00,0x00,0x10,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x01,0x01,0x00,0x00,0x10,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x02,0x01,0x00,0x00, -0x01,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x15,0x00,0x04,0x00, -0x03,0x01,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x1c,0x00,0x04,0x00,0x04,0x01,0x00,0x00,0x03,0x01,0x00,0x00, -0xf9,0x00,0x00,0x00,0x1e,0x00,0x05,0x00,0x05,0x01,0x00,0x00, -0x00,0x01,0x00,0x00,0x02,0x01,0x00,0x00,0x04,0x01,0x00,0x00, -0x1d,0x00,0x03,0x00,0x06,0x01,0x00,0x00,0x05,0x01,0x00,0x00, -0x1e,0x00,0x03,0x00,0x07,0x01,0x00,0x00,0x06,0x01,0x00,0x00, -0x20,0x00,0x04,0x00,0x08,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x07,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x08,0x01,0x00,0x00, -0x09,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x0b,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x00,0x01,0x00,0x00, -0x20,0x00,0x04,0x00,0x11,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x01,0x01,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x15,0x01,0x00,0x00,0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x27,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x30,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x03,0x01,0x00,0x00,0x17,0x00,0x04,0x00,0x34,0x01,0x00,0x00, -0xc3,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0xc3,0x00,0x00,0x00,0x47,0x01,0x00,0x00,0x00,0x00,0x80,0x41, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x4c,0x01,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x4d,0x01,0x00,0x00, -0x84,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x4c,0x01,0x00,0x00, -0x1c,0x00,0x04,0x00,0x4e,0x01,0x00,0x00,0xc3,0x00,0x00,0x00, -0x4d,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x4f,0x01,0x00,0x00, -0x04,0x00,0x00,0x00,0x4e,0x01,0x00,0x00,0x3b,0x00,0x04,0x00, -0x4f,0x01,0x00,0x00,0x50,0x01,0x00,0x00,0x04,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x54,0x01,0x00,0x00,0x04,0x00,0x00,0x00, -0xc3,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x5b,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00, -0x09,0x00,0x00,0x00,0x5c,0x01,0x00,0x00,0x5b,0x01,0x00,0x00, -0x39,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x5d,0x01,0x00,0x00,0x51,0x00,0x00,0x00, -0x5c,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x5e,0x01,0x00,0x00,0x84,0x00,0x00,0x00, -0x5d,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x5f,0x01,0x00,0x00,0x86,0x00,0x00,0x00, -0x5e,0x01,0x00,0x00,0x6c,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x7d,0x01,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x7e,0x01,0x00,0x00,0x84,0x00,0x00,0x00, -0xa6,0x00,0x00,0x00,0x7d,0x01,0x00,0x00,0x1c,0x00,0x04,0x00, -0x7f,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,0x7e,0x01,0x00,0x00, -0x20,0x00,0x04,0x00,0x80,0x01,0x00,0x00,0x04,0x00,0x00,0x00, -0x7f,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x80,0x01,0x00,0x00, -0x81,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x85,0x01,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x1d,0x00,0x03,0x00, -0x89,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,0x1e,0x00,0x03,0x00, -0x8a,0x01,0x00,0x00,0x89,0x01,0x00,0x00,0x20,0x00,0x04,0x00, -0x8b,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x8a,0x01,0x00,0x00, -0x3b,0x00,0x04,0x00,0x8b,0x01,0x00,0x00,0x8c,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x97,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x9f,0x01,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xa4,0x01,0x00,0x00,0x51,0x00,0x00,0x00, -0x5c,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xa5,0x01,0x00,0x00,0x84,0x00,0x00,0x00, -0xa4,0x01,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xa6,0x01,0x00,0x00,0x86,0x00,0x00,0x00, -0xa5,0x01,0x00,0x00,0x6c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xa9,0x01,0x00,0x00,0x08,0x01,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xaa,0x01,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xad,0x01,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc8,0x01,0x00,0x00, -0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x1c,0x00,0x04,0x00,0xc9,0x01,0x00,0x00,0xc3,0x00,0x00,0x00, -0xc8,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0xca,0x01,0x00,0x00, -0x07,0x00,0x00,0x00,0xc9,0x01,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xda,0x01,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xf5,0x01,0x00,0x00,0x84,0x00,0x00,0x00, -0xbe,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x1c,0x00,0x04,0x00, -0xf6,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,0xf5,0x01,0x00,0x00, -0x20,0x00,0x04,0x00,0xf7,0x01,0x00,0x00,0x07,0x00,0x00,0x00, -0xf6,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x00,0x02,0x00,0x00,0x86,0x00,0x00,0x00,0xb8,0x00,0x00,0x00, -0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x08,0x02,0x00,0x00,0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x37,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x6a,0x02,0x00,0x00,0x0d,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x72,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0x1d,0x00,0x03,0x00,0xb8,0x02,0x00,0x00,0xc3,0x00,0x00,0x00, -0x1e,0x00,0x03,0x00,0xb9,0x02,0x00,0x00,0xb8,0x02,0x00,0x00, -0x20,0x00,0x04,0x00,0xba,0x02,0x00,0x00,0x0c,0x00,0x00,0x00, -0xb9,0x02,0x00,0x00,0x3b,0x00,0x04,0x00,0xba,0x02,0x00,0x00, -0xbb,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0xc0,0x02,0x00,0x00,0x05,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xcd,0x02,0x00,0x00, -0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x2c,0x00,0x05,0x00,0x34,0x01,0x00,0x00,0x3f,0x03,0x00,0x00, -0x47,0x01,0x00,0x00,0x47,0x01,0x00,0x00,0x36,0x00,0x05,0x00, -0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0xc8,0x00,0x00,0x00,0xc9,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xca,0x01,0x00,0x00, -0xcb,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0xf7,0x01,0x00,0x00,0xf8,0x01,0x00,0x00,0x07,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x16,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x16,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x17,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x24,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2a,0x00,0x00,0x00, -0x1e,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x2d,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x2f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x24,0x00,0x00,0x00, -0x2f,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x2a,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x35,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x35,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x38,0x00,0x00,0x00, -0x36,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x82,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x38,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x3b,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x3f,0x00,0x00,0x00, -0x3d,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x3f,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x42,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x3b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x49,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4a,0x00,0x00,0x00, -0x49,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x4d,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x3e,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x4d,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x50,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00, -0x50,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x50,0x00,0x00,0x00, -0x58,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x5d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x64,0x00,0x00,0x00, -0x5d,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x5d,0x00,0x00,0x00, -0x67,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x6e,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x6d,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x73,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x72,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x77,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x7d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x7c,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x81,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x81,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x83,0x00,0x00,0x00, -0x47,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x85,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x87,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x47,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x8c,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x82,0x00,0x00,0x00, -0x0c,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x8d,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x26,0x00,0x00,0x00,0x87,0x00,0x00,0x00, -0x8c,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x91,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x90,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x92,0x00,0x00,0x00, -0x91,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x93,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x92,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x95,0x00,0x00,0x00, -0x42,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x96,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x98,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x95,0x00,0x00,0x00, -0x98,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9a,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x99,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9c,0x00,0x00,0x00, -0x9a,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,0x9c,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0xa2,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0xa1,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa3,0x00,0x00,0x00, -0xa2,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa4,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0xa3,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa7,0x00,0x00,0x00, -0x4a,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0xa8,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xaa,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0xa7,0x00,0x00,0x00, -0xaa,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xac,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0xab,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xae,0x00,0x00,0x00, -0xac,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0xae,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb1,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xb1,0x00,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xe3,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0x05,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0xb2,0x00,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xc2,0x00,0x00,0x00, -0xe3,0x02,0x00,0x00,0xc0,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xb3,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xc2,0x00,0x00,0x00,0xb2,0x00,0x00,0x00, -0xb3,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb2,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,0xcd,0x00,0x00,0x00, -0xc9,0x00,0x00,0x00,0xe3,0x02,0x00,0x00,0x3e,0x00,0x03,0x00, -0xcd,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0xe3,0x02,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb1,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xb3,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xd3,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd3,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xfc,0x02,0x00,0x00, -0xaf,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0xaf,0x01,0x00,0x00, -0xd6,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xf8,0x02,0x00,0x00,0x9d,0x00,0x00,0x00,0xb3,0x00,0x00,0x00, -0xac,0x01,0x00,0x00,0xd6,0x00,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xe4,0x02,0x00,0x00,0x83,0x00,0x00,0x00, -0xb3,0x00,0x00,0x00,0x5a,0x02,0x00,0x00,0xd6,0x00,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xda,0x00,0x00,0x00, -0xe4,0x02,0x00,0x00,0x8d,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xd5,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xda,0x00,0x00,0x00,0xd4,0x00,0x00,0x00, -0xd5,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd4,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xdc,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xdc,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xf4,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0xd4,0x00,0x00,0x00, -0x61,0x01,0x00,0x00,0xdd,0x00,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0xe2,0x00,0x00,0x00,0xf4,0x02,0x00,0x00, -0x37,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xde,0x00,0x00,0x00, -0xdd,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xe2,0x00,0x00,0x00,0xdd,0x00,0x00,0x00,0xde,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,0x73,0x00,0x00,0x00, -0xf4,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xea,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,0x98,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xeb,0x00,0x00,0x00, -0xea,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xec,0x00,0x00,0x00,0xf8,0x02,0x00,0x00, -0xeb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xee,0x00,0x00,0x00,0xec,0x00,0x00,0x00,0x6e,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf4,0x00,0x00,0x00, -0xe7,0x00,0x00,0x00,0xf3,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,0xf4,0x00,0x00,0x00, -0x6e,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xfa,0x00,0x00,0x00,0xee,0x00,0x00,0x00,0xf9,0x00,0x00,0x00, -0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfe,0x00,0x00,0x00, -0xee,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,0x41,0x00,0x07,0x00, -0x0b,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,0x09,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x00,0x01,0x00,0x00,0x0d,0x01,0x00,0x00, -0x0c,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0xc3,0x00,0x00,0x00, -0x0e,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,0x41,0x00,0x08,0x00, -0x11,0x01,0x00,0x00,0x12,0x01,0x00,0x00,0x09,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0xcf,0x00,0x00,0x00, -0xcf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x01,0x01,0x00,0x00, -0x13,0x01,0x00,0x00,0x12,0x01,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x14,0x01,0x00,0x00,0x13,0x01,0x00,0x00, -0xc4,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x16,0x01,0x00,0x00, -0x14,0x01,0x00,0x00,0x15,0x01,0x00,0x00,0x41,0x00,0x08,0x00, -0x11,0x01,0x00,0x00,0x18,0x01,0x00,0x00,0x09,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0xcf,0x00,0x00,0x00, -0x34,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x01,0x01,0x00,0x00, -0x19,0x01,0x00,0x00,0x18,0x01,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x1a,0x01,0x00,0x00,0x19,0x01,0x00,0x00, -0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1b,0x01,0x00,0x00, -0x16,0x01,0x00,0x00,0x1a,0x01,0x00,0x00,0xc2,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x21,0x01,0x00,0x00,0x1b,0x01,0x00,0x00, -0xfe,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x22,0x01,0x00,0x00,0x21,0x01,0x00,0x00,0xa8,0x00,0x00,0x00, -0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x23,0x01,0x00,0x00, -0x22,0x01,0x00,0x00,0xf9,0x00,0x00,0x00,0x7c,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x24,0x01,0x00,0x00,0x23,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x28,0x01,0x00,0x00, -0xfe,0x00,0x00,0x00,0x27,0x01,0x00,0x00,0xc2,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x29,0x01,0x00,0x00,0x1b,0x01,0x00,0x00, -0x28,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x2a,0x01,0x00,0x00,0x29,0x01,0x00,0x00,0xf9,0x00,0x00,0x00, -0x7c,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x2b,0x01,0x00,0x00, -0x2a,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x30,0x01,0x00,0x00, -0x31,0x01,0x00,0x00,0x09,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0xfa,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0xfe,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x03,0x01,0x00,0x00,0x32,0x01,0x00,0x00, -0x31,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x33,0x01,0x00,0x00,0x32,0x01,0x00,0x00,0xc7,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x38,0x01,0x00,0x00,0x33,0x01,0x00,0x00, -0xfd,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x3c,0x01,0x00,0x00,0x24,0x01,0x00,0x00,0xc5,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3d,0x01,0x00,0x00,0x38,0x01,0x00,0x00, -0x3c,0x01,0x00,0x00,0x70,0x00,0x04,0x00,0xc3,0x00,0x00,0x00, -0x3e,0x01,0x00,0x00,0x3d,0x01,0x00,0x00,0xc2,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x40,0x01,0x00,0x00,0x33,0x01,0x00,0x00, -0xa8,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x43,0x01,0x00,0x00,0x2b,0x01,0x00,0x00,0xc5,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x44,0x01,0x00,0x00,0x40,0x01,0x00,0x00, -0x43,0x01,0x00,0x00,0x70,0x00,0x04,0x00,0xc3,0x00,0x00,0x00, -0x45,0x01,0x00,0x00,0x44,0x01,0x00,0x00,0x50,0x00,0x05,0x00, -0x34,0x01,0x00,0x00,0x46,0x01,0x00,0x00,0x3e,0x01,0x00,0x00, -0x45,0x01,0x00,0x00,0x83,0x00,0x05,0x00,0x34,0x01,0x00,0x00, -0x49,0x01,0x00,0x00,0x46,0x01,0x00,0x00,0x3f,0x03,0x00,0x00, -0x8e,0x00,0x05,0x00,0x34,0x01,0x00,0x00,0x4b,0x01,0x00,0x00, -0x49,0x01,0x00,0x00,0x0e,0x01,0x00,0x00,0x51,0x00,0x05,0x00, -0xc3,0x00,0x00,0x00,0x53,0x01,0x00,0x00,0x4b,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x54,0x01,0x00,0x00, -0x55,0x01,0x00,0x00,0x50,0x01,0x00,0x00,0xf6,0x00,0x00,0x00, -0x3e,0x00,0x03,0x00,0x55,0x01,0x00,0x00,0x53,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x57,0x01,0x00,0x00, -0xf6,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,0x51,0x00,0x05,0x00, -0xc3,0x00,0x00,0x00,0x59,0x01,0x00,0x00,0x4b,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x54,0x01,0x00,0x00, -0x5a,0x01,0x00,0x00,0x50,0x01,0x00,0x00,0x57,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0x5a,0x01,0x00,0x00,0x59,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x61,0x01,0x00,0x00, -0xf4,0x02,0x00,0x00,0x5f,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xdc,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x63,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x63,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xf5,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0xde,0x00,0x00,0x00, -0xa8,0x01,0x00,0x00,0x66,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0x69,0x01,0x00,0x00,0xf5,0x02,0x00,0x00, -0xa6,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x65,0x01,0x00,0x00, -0x66,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x69,0x01,0x00,0x00,0x64,0x01,0x00,0x00,0x65,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x64,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x6d,0x01,0x00,0x00,0xa7,0x00,0x00,0x00, -0x7d,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x6f,0x01,0x00,0x00,0x6d,0x01,0x00,0x00,0xf5,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x70,0x01,0x00,0x00, -0x12,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x71,0x01,0x00,0x00,0x70,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x72,0x01,0x00,0x00, -0x6f,0x01,0x00,0x00,0x71,0x01,0x00,0x00,0xf7,0x00,0x03,0x00, -0x74,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x72,0x01,0x00,0x00,0x73,0x01,0x00,0x00,0x74,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x73,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x77,0x01,0x00,0x00,0xe4,0x02,0x00,0x00, -0x78,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0x79,0x01,0x00,0x00,0x77,0x01,0x00,0x00,0x8d,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x74,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x74,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0xc1,0x00,0x00,0x00, -0x7a,0x01,0x00,0x00,0x72,0x01,0x00,0x00,0x64,0x01,0x00,0x00, -0x79,0x01,0x00,0x00,0x73,0x01,0x00,0x00,0xf7,0x00,0x03,0x00, -0x7c,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x7a,0x01,0x00,0x00,0x7b,0x01,0x00,0x00,0x9b,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x7b,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x84,0x01,0x00,0x00,0x7d,0x00,0x00,0x00, -0xf5,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x86,0x01,0x00,0x00,0x84,0x01,0x00,0x00,0x85,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x88,0x01,0x00,0x00, -0x86,0x01,0x00,0x00,0x78,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x93,0x01,0x00,0x00,0x84,0x01,0x00,0x00, -0xaa,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x94,0x01,0x00,0x00,0xfc,0x02,0x00,0x00,0x93,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x96,0x01,0x00,0x00, -0x94,0x01,0x00,0x00,0x78,0x00,0x00,0x00,0x41,0x00,0x06,0x00, -0x97,0x01,0x00,0x00,0x98,0x01,0x00,0x00,0x8c,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0x96,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc3,0x00,0x00,0x00,0x99,0x01,0x00,0x00,0x98,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x54,0x01,0x00,0x00,0x9a,0x01,0x00,0x00, -0x81,0x01,0x00,0x00,0x88,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0x9a,0x01,0x00,0x00,0x99,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0x7c,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x9b,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9e,0x01,0x00,0x00, -0x7d,0x00,0x00,0x00,0xf5,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa0,0x01,0x00,0x00,0x9e,0x01,0x00,0x00, -0x9f,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa2,0x01,0x00,0x00,0xa0,0x01,0x00,0x00,0x78,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x54,0x01,0x00,0x00,0xa3,0x01,0x00,0x00, -0x81,0x01,0x00,0x00,0xa2,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0xa3,0x01,0x00,0x00,0xcb,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x7c,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x7c,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0x66,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x66,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa8,0x01,0x00,0x00,0xf5,0x02,0x00,0x00,0xa6,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0x63,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x65,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0xa9,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xac,0x01,0x00,0x00,0xf8,0x02,0x00,0x00, -0xaa,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xaf,0x01,0x00,0x00,0xfc,0x02,0x00,0x00,0xad,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xb1,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xb1,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xfe,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0x65,0x01,0x00,0x00, -0x58,0x02,0x00,0x00,0xb4,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0xb7,0x01,0x00,0x00,0xfe,0x02,0x00,0x00, -0x6c,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xb3,0x01,0x00,0x00, -0xb4,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xb7,0x01,0x00,0x00,0xb2,0x01,0x00,0x00,0xb3,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xb2,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xb9,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xb9,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x02,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0xb2,0x01,0x00,0x00,0xe4,0x01,0x00,0x00, -0xbc,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0xbf,0x01,0x00,0x00,0x02,0x03,0x00,0x00,0x60,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xbb,0x01,0x00,0x00,0xbc,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xbf,0x01,0x00,0x00, -0xba,0x01,0x00,0x00,0xbb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xba,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xc1,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xc1,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x14,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0xba,0x01,0x00,0x00,0xe2,0x01,0x00,0x00,0xc2,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xc7,0x01,0x00,0x00, -0x14,0x03,0x00,0x00,0x62,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xc3,0x01,0x00,0x00,0xc2,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xc7,0x01,0x00,0x00,0xc2,0x01,0x00,0x00, -0xc3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xc2,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xcd,0x01,0x00,0x00, -0x02,0x03,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xcf,0x01,0x00,0x00,0xcd,0x01,0x00,0x00, -0x14,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd1,0x01,0x00,0x00,0x55,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd3,0x01,0x00,0x00, -0x02,0x03,0x00,0x00,0x61,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xd4,0x01,0x00,0x00,0xd1,0x01,0x00,0x00, -0xd3,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd6,0x01,0x00,0x00,0x64,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd7,0x01,0x00,0x00, -0xd4,0x01,0x00,0x00,0xd6,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xd9,0x01,0x00,0x00,0xd7,0x01,0x00,0x00, -0x14,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xdb,0x01,0x00,0x00,0xd9,0x01,0x00,0x00,0xda,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdd,0x01,0x00,0x00, -0xdb,0x01,0x00,0x00,0xfe,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0x54,0x01,0x00,0x00,0xde,0x01,0x00,0x00,0x50,0x01,0x00,0x00, -0xdd,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00, -0xdf,0x01,0x00,0x00,0xde,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0xcc,0x00,0x00,0x00,0xe0,0x01,0x00,0x00,0xcb,0x01,0x00,0x00, -0xcf,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xe0,0x01,0x00,0x00, -0xdf,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xe2,0x01,0x00,0x00,0x14,0x03,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xc1,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xc3,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xbc,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xbc,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xe4,0x01,0x00,0x00,0x02,0x03,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb9,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xbb,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xe6,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xe6,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x03,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0xbb,0x01,0x00,0x00,0x12,0x02,0x00,0x00, -0xe9,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0xec,0x01,0x00,0x00,0x03,0x03,0x00,0x00,0xbe,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xe8,0x01,0x00,0x00,0xe9,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xec,0x01,0x00,0x00, -0xe7,0x01,0x00,0x00,0xe8,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xe7,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xee,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xee,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x11,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0xe7,0x01,0x00,0x00,0x10,0x02,0x00,0x00,0xef,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xf4,0x01,0x00,0x00, -0x11,0x03,0x00,0x00,0xbb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xf0,0x01,0x00,0x00,0xef,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xf4,0x01,0x00,0x00,0xef,0x01,0x00,0x00, -0xf0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xef,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfa,0x01,0x00,0x00, -0x03,0x03,0x00,0x00,0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xfc,0x01,0x00,0x00,0xfa,0x01,0x00,0x00, -0x11,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xfe,0x01,0x00,0x00,0x59,0x00,0x00,0x00,0xb8,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x01,0x02,0x00,0x00, -0x03,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x02,0x02,0x00,0x00,0xfe,0x01,0x00,0x00, -0x01,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x04,0x02,0x00,0x00,0x68,0x00,0x00,0x00,0xbb,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x05,0x02,0x00,0x00, -0x02,0x02,0x00,0x00,0x04,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x07,0x02,0x00,0x00,0x05,0x02,0x00,0x00, -0x11,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x09,0x02,0x00,0x00,0x07,0x02,0x00,0x00,0x08,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0b,0x02,0x00,0x00, -0x09,0x02,0x00,0x00,0xfe,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0x54,0x01,0x00,0x00,0x0c,0x02,0x00,0x00,0x81,0x01,0x00,0x00, -0x0b,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00, -0x0d,0x02,0x00,0x00,0x0c,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0xcc,0x00,0x00,0x00,0x0e,0x02,0x00,0x00,0xf8,0x01,0x00,0x00, -0xfc,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x0e,0x02,0x00,0x00, -0x0d,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x10,0x02,0x00,0x00,0x11,0x03,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xee,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xf0,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xe9,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xe9,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x12,0x02,0x00,0x00,0x03,0x03,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xe6,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xe8,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0x14,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x14,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x04,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0xe8,0x01,0x00,0x00,0x56,0x02,0x00,0x00, -0x17,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0x1a,0x02,0x00,0x00,0x04,0x03,0x00,0x00,0xbe,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x16,0x02,0x00,0x00,0x17,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x1a,0x02,0x00,0x00, -0x15,0x02,0x00,0x00,0x16,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x15,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x1c,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x1c,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x08,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0x15,0x02,0x00,0x00,0x54,0x02,0x00,0x00,0x1f,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x22,0x02,0x00,0x00, -0x08,0x03,0x00,0x00,0x60,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x1e,0x02,0x00,0x00,0x1f,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x22,0x02,0x00,0x00,0x1d,0x02,0x00,0x00, -0x1e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x1d,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x24,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x24,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x0a,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0x1d,0x02,0x00,0x00, -0x52,0x02,0x00,0x00,0x27,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0x2a,0x02,0x00,0x00,0x0a,0x03,0x00,0x00, -0xbb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x26,0x02,0x00,0x00, -0x27,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x2a,0x02,0x00,0x00,0x25,0x02,0x00,0x00,0x26,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x25,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x2c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x2c,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x0c,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0x25,0x02,0x00,0x00,0x50,0x02,0x00,0x00, -0x2d,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0x32,0x02,0x00,0x00,0x0c,0x03,0x00,0x00,0x62,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x2e,0x02,0x00,0x00,0x2d,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x32,0x02,0x00,0x00, -0x2d,0x02,0x00,0x00,0x2e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x2d,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x34,0x02,0x00,0x00,0x04,0x03,0x00,0x00,0xbb,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x36,0x02,0x00,0x00, -0x34,0x02,0x00,0x00,0x0a,0x03,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x38,0x02,0x00,0x00,0x36,0x02,0x00,0x00, -0x37,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x3a,0x02,0x00,0x00,0x08,0x03,0x00,0x00,0x62,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3b,0x02,0x00,0x00, -0x38,0x02,0x00,0x00,0x3a,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3d,0x02,0x00,0x00,0x3b,0x02,0x00,0x00, -0x0c,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x41,0x02,0x00,0x00,0x3a,0x02,0x00,0x00,0x0c,0x03,0x00,0x00, -0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,0x42,0x02,0x00,0x00, -0xcb,0x01,0x00,0x00,0x41,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc3,0x00,0x00,0x00,0x43,0x02,0x00,0x00,0x42,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,0x48,0x02,0x00,0x00, -0xf8,0x01,0x00,0x00,0x36,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc3,0x00,0x00,0x00,0x49,0x02,0x00,0x00,0x48,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,0x4b,0x02,0x00,0x00, -0xc9,0x00,0x00,0x00,0x3d,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc3,0x00,0x00,0x00,0x4c,0x02,0x00,0x00,0x4b,0x02,0x00,0x00, -0x0c,0x00,0x08,0x00,0xc3,0x00,0x00,0x00,0x4d,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x43,0x02,0x00,0x00, -0x49,0x02,0x00,0x00,0x4c,0x02,0x00,0x00,0x3e,0x00,0x03,0x00, -0x4b,0x02,0x00,0x00,0x4d,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x50,0x02,0x00,0x00,0x0c,0x03,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x2c,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x2e,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x27,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x27,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x52,0x02,0x00,0x00, -0x0a,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x24,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x26,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x1f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x1f,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x54,0x02,0x00,0x00,0x08,0x03,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x1c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x1e,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x17,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x17,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x56,0x02,0x00,0x00,0x04,0x03,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x14,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x16,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0xb4,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xb4,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x58,0x02,0x00,0x00, -0xfe,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xb1,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xb3,0x01,0x00,0x00, -0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0xa9,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xd6,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xd6,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x5a,0x02,0x00,0x00,0xe4,0x02,0x00,0x00, -0x6c,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd3,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xd5,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x5f,0x02,0x00,0x00,0x55,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x60,0x02,0x00,0x00,0x95,0x00,0x00,0x00,0x5f,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x65,0x02,0x00,0x00, -0x59,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x66,0x02,0x00,0x00,0xa7,0x00,0x00,0x00, -0x65,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x6b,0x02,0x00,0x00,0x12,0x00,0x00,0x00,0x6a,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x6c,0x02,0x00,0x00, -0x6b,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x6d,0x02,0x00,0x00,0x0f,0x00,0x00,0x00,0x6c,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x71,0x02,0x00,0x00, -0x47,0x00,0x00,0x00,0x6c,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0x73,0x02,0x00,0x00,0x72,0x02,0x00,0x00, -0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x74,0x02,0x00,0x00,0x73,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x75,0x02,0x00,0x00,0x71,0x02,0x00,0x00, -0x74,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x76,0x02,0x00,0x00,0x6d,0x02,0x00,0x00,0x75,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x78,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x78,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xe5,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0xd5,0x00,0x00,0x00, -0xde,0x02,0x00,0x00,0x7b,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0x7e,0x02,0x00,0x00,0xe5,0x02,0x00,0x00, -0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x7a,0x02,0x00,0x00, -0x7b,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x7e,0x02,0x00,0x00,0x79,0x02,0x00,0x00,0x7a,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x79,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x80,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x80,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xe6,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0x79,0x02,0x00,0x00,0xdc,0x02,0x00,0x00, -0x83,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0x86,0x02,0x00,0x00,0xe6,0x02,0x00,0x00,0x60,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x82,0x02,0x00,0x00,0x83,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x86,0x02,0x00,0x00, -0x81,0x02,0x00,0x00,0x82,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x81,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x8a,0x02,0x00,0x00,0xe6,0x02,0x00,0x00,0x61,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8b,0x02,0x00,0x00, -0x60,0x02,0x00,0x00,0x8a,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x8d,0x02,0x00,0x00,0x64,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x8e,0x02,0x00,0x00,0x8b,0x02,0x00,0x00,0x8d,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x92,0x02,0x00,0x00, -0xe5,0x02,0x00,0x00,0x00,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x93,0x02,0x00,0x00,0x66,0x02,0x00,0x00, -0x92,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x95,0x02,0x00,0x00,0x68,0x00,0x00,0x00,0xbb,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x96,0x02,0x00,0x00, -0x93,0x02,0x00,0x00,0x95,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x98,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x98,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xe8,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0x81,0x02,0x00,0x00,0xda,0x02,0x00,0x00, -0x9b,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0x9e,0x02,0x00,0x00,0xe8,0x02,0x00,0x00,0xbb,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x9a,0x02,0x00,0x00,0x9b,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x9e,0x02,0x00,0x00, -0x99,0x02,0x00,0x00,0x9a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x99,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xa0,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xa0,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xea,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0x99,0x02,0x00,0x00,0xd8,0x02,0x00,0x00,0xa3,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xa6,0x02,0x00,0x00, -0xea,0x02,0x00,0x00,0x62,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xa2,0x02,0x00,0x00,0xa3,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xa6,0x02,0x00,0x00,0xa1,0x02,0x00,0x00, -0xa2,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xa1,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa9,0x02,0x00,0x00, -0x8e,0x02,0x00,0x00,0xea,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0xac,0x02,0x00,0x00,0xa9,0x02,0x00,0x00, -0x36,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0xae,0x02,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xac,0x02,0x00,0x00, -0xad,0x02,0x00,0x00,0xae,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xad,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xb1,0x02,0x00,0x00,0x96,0x02,0x00,0x00,0xe8,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0xb2,0x02,0x00,0x00, -0x12,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xb3,0x02,0x00,0x00,0xb2,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xb4,0x02,0x00,0x00, -0xb1,0x02,0x00,0x00,0xb3,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0xae,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xae,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0xc1,0x00,0x00,0x00,0xb5,0x02,0x00,0x00, -0xac,0x02,0x00,0x00,0xa1,0x02,0x00,0x00,0xb4,0x02,0x00,0x00, -0xad,0x02,0x00,0x00,0xf7,0x00,0x03,0x00,0xb7,0x02,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xb5,0x02,0x00,0x00, -0xb6,0x02,0x00,0x00,0xb7,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xb6,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xbf,0x02,0x00,0x00,0x96,0x02,0x00,0x00,0xe8,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0xc1,0x02,0x00,0x00, -0x12,0x00,0x00,0x00,0xc0,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xc2,0x02,0x00,0x00,0xc1,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc3,0x02,0x00,0x00, -0xbf,0x02,0x00,0x00,0xc2,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xc4,0x02,0x00,0x00,0x76,0x02,0x00,0x00, -0xc3,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xc6,0x02,0x00,0x00,0xc4,0x02,0x00,0x00,0x8e,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc8,0x02,0x00,0x00, -0xc6,0x02,0x00,0x00,0xea,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xca,0x02,0x00,0x00,0xe5,0x02,0x00,0x00, -0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xcc,0x02,0x00,0x00,0xca,0x02,0x00,0x00,0xe8,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xce,0x02,0x00,0x00, -0xcc,0x02,0x00,0x00,0xcd,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xd0,0x02,0x00,0x00,0xe6,0x02,0x00,0x00, -0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd1,0x02,0x00,0x00,0xce,0x02,0x00,0x00,0xd0,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd3,0x02,0x00,0x00, -0xd1,0x02,0x00,0x00,0xea,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0xcc,0x00,0x00,0x00,0xd4,0x02,0x00,0x00,0xc9,0x00,0x00,0x00, -0xd3,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00, -0xd5,0x02,0x00,0x00,0xd4,0x02,0x00,0x00,0x41,0x00,0x06,0x00, -0x97,0x01,0x00,0x00,0xd6,0x02,0x00,0x00,0xbb,0x02,0x00,0x00, -0x34,0x00,0x00,0x00,0xc8,0x02,0x00,0x00,0x3e,0x00,0x03,0x00, -0xd6,0x02,0x00,0x00,0xd5,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0xb7,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xb7,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0xa3,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xa3,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd8,0x02,0x00,0x00,0xea,0x02,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xa0,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xa2,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x9b,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x9b,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xda,0x02,0x00,0x00,0xe8,0x02,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x98,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x9a,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x83,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x83,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdc,0x02,0x00,0x00, -0xe6,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x80,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x82,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x7b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x7b,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xde,0x02,0x00,0x00,0xe5,0x02,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x78,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x7a,0x02,0x00,0x00,0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00, - -}; -const uint64_t matmul_q5_0_f32_fp32_len = 10956; - -unsigned char matmul_q5_1_f32_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0x17,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x09,0x00,0x00,0x00, -0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00, -0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00, -0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30, -0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x0f,0x00,0x0f,0x00,0x05,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x4c,0x00,0x00,0x00,0x07,0x01,0x00,0x00,0x4b,0x01,0x00,0x00, -0x7e,0x01,0x00,0x00,0x89,0x01,0x00,0x00,0x74,0x02,0x00,0x00, -0xbd,0x02,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x05,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x30,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x0d,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0x10,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x37,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x3d,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x4c,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x4f,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x53,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x60,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x62,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x6c,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xa6,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xb8,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xbb,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x02,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x03,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x03,0x01,0x00,0x00, -0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x03,0x01,0x00,0x00,0x03,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x04,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x48,0x00,0x04,0x00,0x05,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x05,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0x05,0x01,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x07,0x01,0x00,0x00,0x22,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x07,0x01,0x00,0x00, -0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x58,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x59,0x01,0x00,0x00,0x0b,0x00,0x00,0x00, -0x19,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x86,0x01,0x00,0x00, -0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0x87,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x87,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x87,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x89,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x89,0x01,0x00,0x00,0x21,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x74,0x02,0x00,0x00, -0x0b,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xba,0x02,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x04,0x00,0xbb,0x02,0x00,0x00,0x00,0x00,0x00,0x00, -0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0xbb,0x02,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0xbb,0x02,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xbd,0x02,0x00,0x00,0x22,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xbd,0x02,0x00,0x00, -0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00, -0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00, -0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x1e,0x00,0x10,0x00,0x10,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x11,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x11,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x21,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x2d,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x34,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x3d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x4c,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x4f,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x58,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x61,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x61,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x67,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x61,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x6d,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x72,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x77,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x7c,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x80,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x85,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x90,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x96,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0xa1,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0xa8,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xb7,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xb8,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x4f,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbc,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0xbb,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbd,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbe,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0xbd,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbf,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0xbe,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc0,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0xbb,0x00,0x00,0x00, -0x14,0x00,0x02,0x00,0xc1,0x00,0x00,0x00,0x16,0x00,0x03,0x00, -0xc3,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xc4,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xc5,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x1c,0x00,0x04,0x00, -0xc7,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0xc6,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0xc8,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0xc7,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0xc3,0x00,0x00,0x00, -0xcb,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0xcc,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xc3,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0xcf,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xf3,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xf9,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x16,0x00,0x03,0x00,0x00,0x01,0x00,0x00,0x10,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x01,0x01,0x00,0x00,0x08,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x02,0x01,0x00,0x00, -0x01,0x01,0x00,0x00,0xf9,0x00,0x00,0x00,0x1e,0x00,0x06,0x00, -0x03,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00, -0x06,0x00,0x00,0x00,0x02,0x01,0x00,0x00,0x1d,0x00,0x03,0x00, -0x04,0x01,0x00,0x00,0x03,0x01,0x00,0x00,0x1e,0x00,0x03,0x00, -0x05,0x01,0x00,0x00,0x04,0x01,0x00,0x00,0x20,0x00,0x04,0x00, -0x06,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x05,0x01,0x00,0x00, -0x3b,0x00,0x04,0x00,0x06,0x01,0x00,0x00,0x07,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x09,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x20,0x00,0x04,0x00, -0x14,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x22,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x2b,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x17,0x00,0x04,0x00, -0x2f,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x47,0x01,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x48,0x01,0x00,0x00, -0x84,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x47,0x01,0x00,0x00, -0x1c,0x00,0x04,0x00,0x49,0x01,0x00,0x00,0x00,0x01,0x00,0x00, -0x48,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x4a,0x01,0x00,0x00, -0x04,0x00,0x00,0x00,0x49,0x01,0x00,0x00,0x3b,0x00,0x04,0x00, -0x4a,0x01,0x00,0x00,0x4b,0x01,0x00,0x00,0x04,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x50,0x01,0x00,0x00,0x04,0x00,0x00,0x00, -0x00,0x01,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x58,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00, -0x09,0x00,0x00,0x00,0x59,0x01,0x00,0x00,0x58,0x01,0x00,0x00, -0x39,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x5a,0x01,0x00,0x00,0x51,0x00,0x00,0x00, -0x59,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x5b,0x01,0x00,0x00,0x84,0x00,0x00,0x00, -0x5a,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x5c,0x01,0x00,0x00,0x86,0x00,0x00,0x00, -0x5b,0x01,0x00,0x00,0x6c,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x7a,0x01,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x7b,0x01,0x00,0x00,0x84,0x00,0x00,0x00, -0xa6,0x00,0x00,0x00,0x7a,0x01,0x00,0x00,0x1c,0x00,0x04,0x00, -0x7c,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x7b,0x01,0x00,0x00, -0x20,0x00,0x04,0x00,0x7d,0x01,0x00,0x00,0x04,0x00,0x00,0x00, -0x7c,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x7d,0x01,0x00,0x00, -0x7e,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x82,0x01,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x1d,0x00,0x03,0x00, -0x86,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,0x1e,0x00,0x03,0x00, -0x87,0x01,0x00,0x00,0x86,0x01,0x00,0x00,0x20,0x00,0x04,0x00, -0x88,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x87,0x01,0x00,0x00, -0x3b,0x00,0x04,0x00,0x88,0x01,0x00,0x00,0x89,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x94,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x9d,0x01,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x00,0x01,0x00,0x00,0xa1,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xa3,0x01,0x00,0x00, -0x51,0x00,0x00,0x00,0x59,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xa4,0x01,0x00,0x00, -0x84,0x00,0x00,0x00,0xa3,0x01,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xa5,0x01,0x00,0x00, -0x86,0x00,0x00,0x00,0xa4,0x01,0x00,0x00,0x6c,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa8,0x01,0x00,0x00, -0x08,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xa9,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xac,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xc7,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xc8,0x01,0x00,0x00, -0x00,0x01,0x00,0x00,0xc7,0x01,0x00,0x00,0x20,0x00,0x04,0x00, -0xc9,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0xc8,0x01,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xd9,0x01,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0xdf,0x01,0x00,0x00,0x07,0x00,0x00,0x00, -0x00,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xf5,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0xbe,0x00,0x00,0x00, -0xbb,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xf6,0x01,0x00,0x00, -0x00,0x01,0x00,0x00,0xf5,0x01,0x00,0x00,0x20,0x00,0x04,0x00, -0xf7,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0xf6,0x01,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x00,0x02,0x00,0x00, -0x86,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0xbe,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x08,0x02,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x37,0x02,0x00,0x00, -0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x6c,0x02,0x00,0x00, -0x0d,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x74,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x1d,0x00,0x03,0x00, -0xba,0x02,0x00,0x00,0xc3,0x00,0x00,0x00,0x1e,0x00,0x03,0x00, -0xbb,0x02,0x00,0x00,0xba,0x02,0x00,0x00,0x20,0x00,0x04,0x00, -0xbc,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0xbb,0x02,0x00,0x00, -0x3b,0x00,0x04,0x00,0xbc,0x02,0x00,0x00,0xbd,0x02,0x00,0x00, -0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0xc2,0x02,0x00,0x00,0x05,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xcf,0x02,0x00,0x00,0x84,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x36,0x00,0x05,0x00, -0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0xc8,0x00,0x00,0x00,0xc9,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xc9,0x01,0x00,0x00, -0xca,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0xf7,0x01,0x00,0x00,0xf8,0x01,0x00,0x00,0x07,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x16,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x16,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x17,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x24,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2a,0x00,0x00,0x00, -0x1e,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x2d,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x2f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x24,0x00,0x00,0x00, -0x2f,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x2a,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x35,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x35,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x38,0x00,0x00,0x00, -0x36,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x82,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x38,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x3b,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x3f,0x00,0x00,0x00, -0x3d,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x3f,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x42,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x3b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x49,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4a,0x00,0x00,0x00, -0x49,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x4d,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x3e,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x4d,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x50,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00, -0x50,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x50,0x00,0x00,0x00, -0x58,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x5d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x64,0x00,0x00,0x00, -0x5d,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x5d,0x00,0x00,0x00, -0x67,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x6e,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x6d,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x73,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x72,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x77,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x7d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x7c,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x81,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x81,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x83,0x00,0x00,0x00, -0x47,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x85,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x87,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x47,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x8c,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x82,0x00,0x00,0x00, -0x0c,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x8d,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x26,0x00,0x00,0x00,0x87,0x00,0x00,0x00, -0x8c,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x91,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x90,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x92,0x00,0x00,0x00, -0x91,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x93,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x92,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x95,0x00,0x00,0x00, -0x42,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x96,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x98,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x95,0x00,0x00,0x00, -0x98,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9a,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x99,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9c,0x00,0x00,0x00, -0x9a,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,0x9c,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0xa2,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0xa1,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa3,0x00,0x00,0x00, -0xa2,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa4,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0xa3,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa7,0x00,0x00,0x00, -0x4a,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0xa8,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xaa,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0xa7,0x00,0x00,0x00, -0xaa,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xac,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0xab,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xae,0x00,0x00,0x00, -0xac,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0xae,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb1,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xb1,0x00,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xe5,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0x05,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0xb2,0x00,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xc2,0x00,0x00,0x00, -0xe5,0x02,0x00,0x00,0xc0,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xb3,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xc2,0x00,0x00,0x00,0xb2,0x00,0x00,0x00, -0xb3,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb2,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,0xcd,0x00,0x00,0x00, -0xc9,0x00,0x00,0x00,0xe5,0x02,0x00,0x00,0x3e,0x00,0x03,0x00, -0xcd,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0xe5,0x02,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb1,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xb3,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xd3,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd3,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xfe,0x02,0x00,0x00, -0xaf,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0xae,0x01,0x00,0x00, -0xd6,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xfa,0x02,0x00,0x00,0x9d,0x00,0x00,0x00,0xb3,0x00,0x00,0x00, -0xab,0x01,0x00,0x00,0xd6,0x00,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xe6,0x02,0x00,0x00,0x83,0x00,0x00,0x00, -0xb3,0x00,0x00,0x00,0x5c,0x02,0x00,0x00,0xd6,0x00,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xda,0x00,0x00,0x00, -0xe6,0x02,0x00,0x00,0x8d,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xd5,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xda,0x00,0x00,0x00,0xd4,0x00,0x00,0x00, -0xd5,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd4,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xdc,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xdc,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xf6,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0xd4,0x00,0x00,0x00, -0x5e,0x01,0x00,0x00,0xdd,0x00,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0xe2,0x00,0x00,0x00,0xf6,0x02,0x00,0x00, -0x37,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xde,0x00,0x00,0x00, -0xdd,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xe2,0x00,0x00,0x00,0xdd,0x00,0x00,0x00,0xde,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,0x73,0x00,0x00,0x00, -0xf6,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xea,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,0x98,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xeb,0x00,0x00,0x00, -0xea,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xec,0x00,0x00,0x00,0xfa,0x02,0x00,0x00, -0xeb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xee,0x00,0x00,0x00,0xec,0x00,0x00,0x00,0x6e,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf4,0x00,0x00,0x00, -0xe7,0x00,0x00,0x00,0xf3,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,0xf4,0x00,0x00,0x00, -0x6e,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xfa,0x00,0x00,0x00,0xee,0x00,0x00,0x00,0xf9,0x00,0x00,0x00, -0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfe,0x00,0x00,0x00, -0xee,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,0x41,0x00,0x07,0x00, -0x09,0x01,0x00,0x00,0x0a,0x01,0x00,0x00,0x07,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x00,0x01,0x00,0x00,0x0b,0x01,0x00,0x00, -0x0a,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0xc3,0x00,0x00,0x00, -0x0c,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,0x41,0x00,0x07,0x00, -0x09,0x01,0x00,0x00,0x0f,0x01,0x00,0x00,0x07,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0xcf,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x00,0x01,0x00,0x00,0x10,0x01,0x00,0x00, -0x0f,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0xc3,0x00,0x00,0x00, -0x11,0x01,0x00,0x00,0x10,0x01,0x00,0x00,0x41,0x00,0x07,0x00, -0x14,0x01,0x00,0x00,0x15,0x01,0x00,0x00,0x07,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0x85,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x16,0x01,0x00,0x00, -0x15,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x1c,0x01,0x00,0x00,0x16,0x01,0x00,0x00,0xfe,0x00,0x00,0x00, -0xc4,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1d,0x01,0x00,0x00, -0x1c,0x01,0x00,0x00,0xa8,0x00,0x00,0x00,0xc7,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x1e,0x01,0x00,0x00,0x1d,0x01,0x00,0x00, -0xf9,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x1f,0x01,0x00,0x00,0x1e,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x23,0x01,0x00,0x00,0xfe,0x00,0x00,0x00, -0x22,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x24,0x01,0x00,0x00,0x16,0x01,0x00,0x00,0x23,0x01,0x00,0x00, -0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x25,0x01,0x00,0x00, -0x24,0x01,0x00,0x00,0xf9,0x00,0x00,0x00,0x7c,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x26,0x01,0x00,0x00,0x25,0x01,0x00,0x00, -0x41,0x00,0x08,0x00,0x2b,0x01,0x00,0x00,0x2c,0x01,0x00,0x00, -0x07,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0xfa,0x00,0x00,0x00, -0x96,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x01,0x01,0x00,0x00,0x2d,0x01,0x00,0x00,0x2c,0x01,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x2e,0x01,0x00,0x00, -0x2d,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x33,0x01,0x00,0x00,0x2e,0x01,0x00,0x00,0xfd,0x00,0x00,0x00, -0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x37,0x01,0x00,0x00, -0x1f,0x01,0x00,0x00,0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x38,0x01,0x00,0x00,0x33,0x01,0x00,0x00,0x37,0x01,0x00,0x00, -0x70,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x39,0x01,0x00,0x00, -0x38,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x3b,0x01,0x00,0x00,0x2e,0x01,0x00,0x00,0xa8,0x00,0x00,0x00, -0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x3e,0x01,0x00,0x00, -0x26,0x01,0x00,0x00,0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x3f,0x01,0x00,0x00,0x3b,0x01,0x00,0x00,0x3e,0x01,0x00,0x00, -0x70,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x40,0x01,0x00,0x00, -0x3f,0x01,0x00,0x00,0x50,0x00,0x05,0x00,0x2f,0x01,0x00,0x00, -0x41,0x01,0x00,0x00,0x39,0x01,0x00,0x00,0x40,0x01,0x00,0x00, -0x8e,0x00,0x05,0x00,0x2f,0x01,0x00,0x00,0x43,0x01,0x00,0x00, -0x41,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,0x50,0x00,0x05,0x00, -0x2f,0x01,0x00,0x00,0x45,0x01,0x00,0x00,0x11,0x01,0x00,0x00, -0x11,0x01,0x00,0x00,0x81,0x00,0x05,0x00,0x2f,0x01,0x00,0x00, -0x46,0x01,0x00,0x00,0x43,0x01,0x00,0x00,0x45,0x01,0x00,0x00, -0x51,0x00,0x05,0x00,0xc3,0x00,0x00,0x00,0x4e,0x01,0x00,0x00, -0x46,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x73,0x00,0x04,0x00, -0x00,0x01,0x00,0x00,0x4f,0x01,0x00,0x00,0x4e,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x50,0x01,0x00,0x00,0x51,0x01,0x00,0x00, -0x4b,0x01,0x00,0x00,0xf6,0x00,0x00,0x00,0x3e,0x00,0x03,0x00, -0x51,0x01,0x00,0x00,0x4f,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x53,0x01,0x00,0x00,0xf6,0x00,0x00,0x00, -0xf9,0x00,0x00,0x00,0x51,0x00,0x05,0x00,0xc3,0x00,0x00,0x00, -0x55,0x01,0x00,0x00,0x46,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0x73,0x00,0x04,0x00,0x00,0x01,0x00,0x00,0x56,0x01,0x00,0x00, -0x55,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x50,0x01,0x00,0x00, -0x57,0x01,0x00,0x00,0x4b,0x01,0x00,0x00,0x53,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0x57,0x01,0x00,0x00,0x56,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5e,0x01,0x00,0x00, -0xf6,0x02,0x00,0x00,0x5c,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xdc,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x60,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x60,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xf7,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0xde,0x00,0x00,0x00, -0xa7,0x01,0x00,0x00,0x63,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0x66,0x01,0x00,0x00,0xf7,0x02,0x00,0x00, -0xa6,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x62,0x01,0x00,0x00, -0x63,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x66,0x01,0x00,0x00,0x61,0x01,0x00,0x00,0x62,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x61,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x6a,0x01,0x00,0x00,0xa7,0x00,0x00,0x00, -0x7d,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x6c,0x01,0x00,0x00,0x6a,0x01,0x00,0x00,0xf7,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x6d,0x01,0x00,0x00, -0x12,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x6e,0x01,0x00,0x00,0x6d,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x6f,0x01,0x00,0x00, -0x6c,0x01,0x00,0x00,0x6e,0x01,0x00,0x00,0xf7,0x00,0x03,0x00, -0x71,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x6f,0x01,0x00,0x00,0x70,0x01,0x00,0x00,0x71,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x70,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x74,0x01,0x00,0x00,0xe6,0x02,0x00,0x00, -0x78,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0x76,0x01,0x00,0x00,0x74,0x01,0x00,0x00,0x8d,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x71,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x71,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0xc1,0x00,0x00,0x00, -0x77,0x01,0x00,0x00,0x6f,0x01,0x00,0x00,0x61,0x01,0x00,0x00, -0x76,0x01,0x00,0x00,0x70,0x01,0x00,0x00,0xf7,0x00,0x03,0x00, -0x79,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x77,0x01,0x00,0x00,0x78,0x01,0x00,0x00,0x99,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x78,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x81,0x01,0x00,0x00,0x7d,0x00,0x00,0x00, -0xf7,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x83,0x01,0x00,0x00,0x81,0x01,0x00,0x00,0x82,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x85,0x01,0x00,0x00, -0x83,0x01,0x00,0x00,0x78,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x90,0x01,0x00,0x00,0x81,0x01,0x00,0x00, -0xaa,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x91,0x01,0x00,0x00,0xfe,0x02,0x00,0x00,0x90,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x93,0x01,0x00,0x00, -0x91,0x01,0x00,0x00,0x78,0x00,0x00,0x00,0x41,0x00,0x06,0x00, -0x94,0x01,0x00,0x00,0x95,0x01,0x00,0x00,0x89,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0x93,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc3,0x00,0x00,0x00,0x96,0x01,0x00,0x00,0x95,0x01,0x00,0x00, -0x73,0x00,0x04,0x00,0x00,0x01,0x00,0x00,0x97,0x01,0x00,0x00, -0x96,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x50,0x01,0x00,0x00, -0x98,0x01,0x00,0x00,0x7e,0x01,0x00,0x00,0x85,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0x98,0x01,0x00,0x00,0x97,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0x79,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x99,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9c,0x01,0x00,0x00,0x7d,0x00,0x00,0x00,0xf7,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9e,0x01,0x00,0x00, -0x9c,0x01,0x00,0x00,0x9d,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa0,0x01,0x00,0x00,0x9e,0x01,0x00,0x00, -0x78,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x50,0x01,0x00,0x00, -0xa2,0x01,0x00,0x00,0x7e,0x01,0x00,0x00,0xa0,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0xa2,0x01,0x00,0x00,0xa1,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0x79,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x79,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x63,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x63,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa7,0x01,0x00,0x00,0xf7,0x02,0x00,0x00, -0xa5,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x60,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x62,0x01,0x00,0x00,0xe0,0x00,0x04,0x00, -0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xa8,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xab,0x01,0x00,0x00, -0xfa,0x02,0x00,0x00,0xa9,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xae,0x01,0x00,0x00,0xfe,0x02,0x00,0x00, -0xac,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xb0,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xb0,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0x62,0x01,0x00,0x00,0x5a,0x02,0x00,0x00,0xb3,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xb6,0x01,0x00,0x00, -0x00,0x03,0x00,0x00,0x6c,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xb2,0x01,0x00,0x00,0xb3,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xb6,0x01,0x00,0x00,0xb1,0x01,0x00,0x00, -0xb2,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xb1,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xb8,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xb8,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x04,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0xb1,0x01,0x00,0x00, -0xe4,0x01,0x00,0x00,0xbb,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0xbe,0x01,0x00,0x00,0x04,0x03,0x00,0x00, -0x60,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xba,0x01,0x00,0x00, -0xbb,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xbe,0x01,0x00,0x00,0xb9,0x01,0x00,0x00,0xba,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xb9,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xc0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xc0,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x16,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0xb9,0x01,0x00,0x00,0xe2,0x01,0x00,0x00, -0xc1,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0xc6,0x01,0x00,0x00,0x16,0x03,0x00,0x00,0x62,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xc2,0x01,0x00,0x00,0xc1,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xc6,0x01,0x00,0x00, -0xc1,0x01,0x00,0x00,0xc2,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xc1,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xcc,0x01,0x00,0x00,0x04,0x03,0x00,0x00,0x62,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xce,0x01,0x00,0x00, -0xcc,0x01,0x00,0x00,0x16,0x03,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xd0,0x01,0x00,0x00,0x55,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd2,0x01,0x00,0x00,0x04,0x03,0x00,0x00,0x61,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd3,0x01,0x00,0x00, -0xd0,0x01,0x00,0x00,0xd2,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xd5,0x01,0x00,0x00,0x64,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd6,0x01,0x00,0x00,0xd3,0x01,0x00,0x00,0xd5,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd8,0x01,0x00,0x00, -0xd6,0x01,0x00,0x00,0x16,0x03,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xda,0x01,0x00,0x00,0xd8,0x01,0x00,0x00, -0xd9,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xdc,0x01,0x00,0x00,0xda,0x01,0x00,0x00,0x00,0x03,0x00,0x00, -0x41,0x00,0x05,0x00,0x50,0x01,0x00,0x00,0xdd,0x01,0x00,0x00, -0x4b,0x01,0x00,0x00,0xdc,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0x00,0x01,0x00,0x00,0xde,0x01,0x00,0x00,0xdd,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0xdf,0x01,0x00,0x00,0xe0,0x01,0x00,0x00, -0xca,0x01,0x00,0x00,0xce,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0xe0,0x01,0x00,0x00,0xde,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xe2,0x01,0x00,0x00,0x16,0x03,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xc0,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xc2,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xbb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xbb,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe4,0x01,0x00,0x00, -0x04,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xb8,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xba,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xe6,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xe6,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x05,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0xba,0x01,0x00,0x00, -0x12,0x02,0x00,0x00,0xe9,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0xec,0x01,0x00,0x00,0x05,0x03,0x00,0x00, -0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xe8,0x01,0x00,0x00, -0xe9,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xec,0x01,0x00,0x00,0xe7,0x01,0x00,0x00,0xe8,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xe7,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xee,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xee,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x13,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0xe7,0x01,0x00,0x00,0x10,0x02,0x00,0x00, -0xef,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0xf4,0x01,0x00,0x00,0x13,0x03,0x00,0x00,0xbb,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xf0,0x01,0x00,0x00,0xef,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xf4,0x01,0x00,0x00, -0xef,0x01,0x00,0x00,0xf0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xef,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xfa,0x01,0x00,0x00,0x05,0x03,0x00,0x00,0xbb,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfc,0x01,0x00,0x00, -0xfa,0x01,0x00,0x00,0x13,0x03,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xfe,0x01,0x00,0x00,0x59,0x00,0x00,0x00, -0xb8,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x01,0x02,0x00,0x00,0x05,0x03,0x00,0x00,0x00,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x02,0x02,0x00,0x00, -0xfe,0x01,0x00,0x00,0x01,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x04,0x02,0x00,0x00,0x68,0x00,0x00,0x00, -0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x05,0x02,0x00,0x00,0x02,0x02,0x00,0x00,0x04,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x07,0x02,0x00,0x00, -0x05,0x02,0x00,0x00,0x13,0x03,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x09,0x02,0x00,0x00,0x07,0x02,0x00,0x00, -0x08,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x0b,0x02,0x00,0x00,0x09,0x02,0x00,0x00,0x00,0x03,0x00,0x00, -0x41,0x00,0x05,0x00,0x50,0x01,0x00,0x00,0x0c,0x02,0x00,0x00, -0x7e,0x01,0x00,0x00,0x0b,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0x00,0x01,0x00,0x00,0x0d,0x02,0x00,0x00,0x0c,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0xdf,0x01,0x00,0x00,0x0e,0x02,0x00,0x00, -0xf8,0x01,0x00,0x00,0xfc,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0x0e,0x02,0x00,0x00,0x0d,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x10,0x02,0x00,0x00,0x13,0x03,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xee,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xf0,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xe9,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xe9,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x12,0x02,0x00,0x00, -0x05,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xe6,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xe8,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0x14,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x14,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x06,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0xe8,0x01,0x00,0x00, -0x58,0x02,0x00,0x00,0x17,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0x1a,0x02,0x00,0x00,0x06,0x03,0x00,0x00, -0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x16,0x02,0x00,0x00, -0x17,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x1a,0x02,0x00,0x00,0x15,0x02,0x00,0x00,0x16,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x15,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x1c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x1c,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x0a,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0x15,0x02,0x00,0x00,0x56,0x02,0x00,0x00, -0x1f,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0x22,0x02,0x00,0x00,0x0a,0x03,0x00,0x00,0x60,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x1e,0x02,0x00,0x00,0x1f,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x22,0x02,0x00,0x00, -0x1d,0x02,0x00,0x00,0x1e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x1d,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x24,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x24,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x0c,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0x1d,0x02,0x00,0x00,0x54,0x02,0x00,0x00,0x27,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x2a,0x02,0x00,0x00, -0x0c,0x03,0x00,0x00,0xbb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x26,0x02,0x00,0x00,0x27,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x2a,0x02,0x00,0x00,0x25,0x02,0x00,0x00, -0x26,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x25,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x2c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x2c,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x0e,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0x25,0x02,0x00,0x00, -0x52,0x02,0x00,0x00,0x2d,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0x32,0x02,0x00,0x00,0x0e,0x03,0x00,0x00, -0x62,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x2e,0x02,0x00,0x00, -0x2d,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x32,0x02,0x00,0x00,0x2d,0x02,0x00,0x00,0x2e,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x2d,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x34,0x02,0x00,0x00,0x06,0x03,0x00,0x00, -0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x36,0x02,0x00,0x00,0x34,0x02,0x00,0x00,0x0c,0x03,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x38,0x02,0x00,0x00, -0x36,0x02,0x00,0x00,0x37,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3a,0x02,0x00,0x00,0x0a,0x03,0x00,0x00, -0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x3b,0x02,0x00,0x00,0x38,0x02,0x00,0x00,0x3a,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3d,0x02,0x00,0x00, -0x3b,0x02,0x00,0x00,0x0e,0x03,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x41,0x02,0x00,0x00,0x3a,0x02,0x00,0x00, -0x0e,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0xdf,0x01,0x00,0x00, -0x42,0x02,0x00,0x00,0xca,0x01,0x00,0x00,0x41,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0x00,0x01,0x00,0x00,0x43,0x02,0x00,0x00, -0x42,0x02,0x00,0x00,0x73,0x00,0x04,0x00,0xc3,0x00,0x00,0x00, -0x44,0x02,0x00,0x00,0x43,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0xdf,0x01,0x00,0x00,0x49,0x02,0x00,0x00,0xf8,0x01,0x00,0x00, -0x36,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x00,0x01,0x00,0x00, -0x4a,0x02,0x00,0x00,0x49,0x02,0x00,0x00,0x73,0x00,0x04,0x00, -0xc3,0x00,0x00,0x00,0x4b,0x02,0x00,0x00,0x4a,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,0x4d,0x02,0x00,0x00, -0xc9,0x00,0x00,0x00,0x3d,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc3,0x00,0x00,0x00,0x4e,0x02,0x00,0x00,0x4d,0x02,0x00,0x00, -0x0c,0x00,0x08,0x00,0xc3,0x00,0x00,0x00,0x4f,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x44,0x02,0x00,0x00, -0x4b,0x02,0x00,0x00,0x4e,0x02,0x00,0x00,0x3e,0x00,0x03,0x00, -0x4d,0x02,0x00,0x00,0x4f,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x52,0x02,0x00,0x00,0x0e,0x03,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x2c,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x2e,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x27,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x27,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x54,0x02,0x00,0x00, -0x0c,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x24,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x26,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x1f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x1f,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x56,0x02,0x00,0x00,0x0a,0x03,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x1c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x1e,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x17,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x17,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x58,0x02,0x00,0x00,0x06,0x03,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x14,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x16,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0xb3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xb3,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5a,0x02,0x00,0x00, -0x00,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xb0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xb2,0x01,0x00,0x00, -0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0xa8,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xd6,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xd6,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x5c,0x02,0x00,0x00,0xe6,0x02,0x00,0x00, -0x6c,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd3,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xd5,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x61,0x02,0x00,0x00,0x55,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x62,0x02,0x00,0x00,0x95,0x00,0x00,0x00,0x61,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x67,0x02,0x00,0x00, -0x59,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x68,0x02,0x00,0x00,0xa7,0x00,0x00,0x00, -0x67,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x6d,0x02,0x00,0x00,0x12,0x00,0x00,0x00,0x6c,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x6e,0x02,0x00,0x00, -0x6d,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x6f,0x02,0x00,0x00,0x0f,0x00,0x00,0x00,0x6e,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x73,0x02,0x00,0x00, -0x47,0x00,0x00,0x00,0x6e,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0x75,0x02,0x00,0x00,0x74,0x02,0x00,0x00, -0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x76,0x02,0x00,0x00,0x75,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x77,0x02,0x00,0x00,0x73,0x02,0x00,0x00, -0x76,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x78,0x02,0x00,0x00,0x6f,0x02,0x00,0x00,0x77,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x7a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x7a,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xe7,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0xd5,0x00,0x00,0x00, -0xe0,0x02,0x00,0x00,0x7d,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0x80,0x02,0x00,0x00,0xe7,0x02,0x00,0x00, -0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x7c,0x02,0x00,0x00, -0x7d,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x80,0x02,0x00,0x00,0x7b,0x02,0x00,0x00,0x7c,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x7b,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x82,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x82,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xe8,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0x7b,0x02,0x00,0x00,0xde,0x02,0x00,0x00, -0x85,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0x88,0x02,0x00,0x00,0xe8,0x02,0x00,0x00,0x60,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x84,0x02,0x00,0x00,0x85,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x88,0x02,0x00,0x00, -0x83,0x02,0x00,0x00,0x84,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x83,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x8c,0x02,0x00,0x00,0xe8,0x02,0x00,0x00,0x61,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8d,0x02,0x00,0x00, -0x62,0x02,0x00,0x00,0x8c,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x8f,0x02,0x00,0x00,0x64,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x90,0x02,0x00,0x00,0x8d,0x02,0x00,0x00,0x8f,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x94,0x02,0x00,0x00, -0xe7,0x02,0x00,0x00,0x00,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x95,0x02,0x00,0x00,0x68,0x02,0x00,0x00, -0x94,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x97,0x02,0x00,0x00,0x68,0x00,0x00,0x00,0xbb,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x98,0x02,0x00,0x00, -0x95,0x02,0x00,0x00,0x97,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x9a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x9a,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xea,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0x83,0x02,0x00,0x00,0xdc,0x02,0x00,0x00, -0x9d,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0xa0,0x02,0x00,0x00,0xea,0x02,0x00,0x00,0xbb,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x9c,0x02,0x00,0x00,0x9d,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xa0,0x02,0x00,0x00, -0x9b,0x02,0x00,0x00,0x9c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x9b,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xa2,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xa2,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xec,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0x9b,0x02,0x00,0x00,0xda,0x02,0x00,0x00,0xa5,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xa8,0x02,0x00,0x00, -0xec,0x02,0x00,0x00,0x62,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xa4,0x02,0x00,0x00,0xa5,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xa8,0x02,0x00,0x00,0xa3,0x02,0x00,0x00, -0xa4,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xa3,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xab,0x02,0x00,0x00, -0x90,0x02,0x00,0x00,0xec,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0xae,0x02,0x00,0x00,0xab,0x02,0x00,0x00, -0x36,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0xb0,0x02,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xae,0x02,0x00,0x00, -0xaf,0x02,0x00,0x00,0xb0,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xaf,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xb3,0x02,0x00,0x00,0x98,0x02,0x00,0x00,0xea,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0xb4,0x02,0x00,0x00, -0x12,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xb5,0x02,0x00,0x00,0xb4,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xb6,0x02,0x00,0x00, -0xb3,0x02,0x00,0x00,0xb5,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0xb0,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xb0,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0xc1,0x00,0x00,0x00,0xb7,0x02,0x00,0x00, -0xae,0x02,0x00,0x00,0xa3,0x02,0x00,0x00,0xb6,0x02,0x00,0x00, -0xaf,0x02,0x00,0x00,0xf7,0x00,0x03,0x00,0xb9,0x02,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xb7,0x02,0x00,0x00, -0xb8,0x02,0x00,0x00,0xb9,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xb8,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xc1,0x02,0x00,0x00,0x98,0x02,0x00,0x00,0xea,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0xc3,0x02,0x00,0x00, -0x12,0x00,0x00,0x00,0xc2,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xc4,0x02,0x00,0x00,0xc3,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc5,0x02,0x00,0x00, -0xc1,0x02,0x00,0x00,0xc4,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xc6,0x02,0x00,0x00,0x78,0x02,0x00,0x00, -0xc5,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xc8,0x02,0x00,0x00,0xc6,0x02,0x00,0x00,0x90,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xca,0x02,0x00,0x00, -0xc8,0x02,0x00,0x00,0xec,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xcc,0x02,0x00,0x00,0xe7,0x02,0x00,0x00, -0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xce,0x02,0x00,0x00,0xcc,0x02,0x00,0x00,0xea,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd0,0x02,0x00,0x00, -0xce,0x02,0x00,0x00,0xcf,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xd2,0x02,0x00,0x00,0xe8,0x02,0x00,0x00, -0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd3,0x02,0x00,0x00,0xd0,0x02,0x00,0x00,0xd2,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd5,0x02,0x00,0x00, -0xd3,0x02,0x00,0x00,0xec,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0xcc,0x00,0x00,0x00,0xd6,0x02,0x00,0x00,0xc9,0x00,0x00,0x00, -0xd5,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00, -0xd7,0x02,0x00,0x00,0xd6,0x02,0x00,0x00,0x41,0x00,0x06,0x00, -0x94,0x01,0x00,0x00,0xd8,0x02,0x00,0x00,0xbd,0x02,0x00,0x00, -0x34,0x00,0x00,0x00,0xca,0x02,0x00,0x00,0x3e,0x00,0x03,0x00, -0xd8,0x02,0x00,0x00,0xd7,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0xb9,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xb9,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0xa5,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xa5,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xda,0x02,0x00,0x00,0xec,0x02,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xa2,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xa4,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x9d,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x9d,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xdc,0x02,0x00,0x00,0xea,0x02,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x9a,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x9c,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x85,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x85,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xde,0x02,0x00,0x00, -0xe8,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x82,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x84,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x7d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x7d,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xe0,0x02,0x00,0x00,0xe7,0x02,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x7a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x7c,0x02,0x00,0x00,0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00, - -}; -const uint64_t matmul_q5_1_f32_len = 10956; - -unsigned char matmul_q5_1_f32_aligned_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0x3a,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x09,0x00,0x00,0x00, -0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00, -0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00, -0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30, -0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x0f,0x00,0x0f,0x00,0x05,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x4c,0x00,0x00,0x00,0x08,0x01,0x00,0x00,0x4c,0x01,0x00,0x00, -0x81,0x01,0x00,0x00,0x89,0x01,0x00,0x00,0x97,0x02,0x00,0x00, -0xe0,0x02,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x05,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x30,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x0d,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0x10,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x37,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x3d,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x4c,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x4f,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x53,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x60,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x62,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x6c,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xa7,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xb9,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xbc,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x03,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x04,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x04,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x04,0x01,0x00,0x00, -0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x04,0x01,0x00,0x00,0x03,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x05,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x48,0x00,0x04,0x00,0x06,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x06,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0x06,0x01,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x08,0x01,0x00,0x00,0x22,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x08,0x01,0x00,0x00, -0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x59,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x5a,0x01,0x00,0x00,0x0b,0x00,0x00,0x00, -0x19,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x86,0x01,0x00,0x00, -0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0x87,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x00,0x00,0x00, -0x48,0x00,0x04,0x00,0x87,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x87,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x87,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x87,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x89,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x89,0x01,0x00,0x00,0x21,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x97,0x02,0x00,0x00, -0x0b,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xdd,0x02,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x04,0x00,0xde,0x02,0x00,0x00,0x00,0x00,0x00,0x00, -0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0xde,0x02,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0xde,0x02,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xe0,0x02,0x00,0x00,0x22,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xe0,0x02,0x00,0x00, -0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00, -0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00, -0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x1e,0x00,0x10,0x00,0x10,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x11,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x11,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x21,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x2d,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x34,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x3d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x4c,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x4f,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x58,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x61,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x61,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x67,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x61,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x6d,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x72,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x77,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x78,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x77,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x7d,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x77,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x81,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x91,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x97,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa7,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0xa9,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xba,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0xb9,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbb,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xbc,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xbd,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xbb,0x00,0x00,0x00, -0xbc,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xbe,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xbd,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xbf,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0xba,0x00,0x00,0x00, -0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xc0,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xb8,0x00,0x00,0x00, -0xbf,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xc1,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc0,0x00,0x00,0x00, -0xbc,0x00,0x00,0x00,0x14,0x00,0x02,0x00,0xc2,0x00,0x00,0x00, -0x16,0x00,0x03,0x00,0xc4,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0xbf,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc7,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0xbc,0x00,0x00,0x00, -0x1c,0x00,0x04,0x00,0xc8,0x00,0x00,0x00,0xc4,0x00,0x00,0x00, -0xc7,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xc9,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0xcd,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0xc4,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0xd0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xfe,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0x01,0x01,0x00,0x00, -0x10,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x02,0x01,0x00,0x00, -0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1c,0x00,0x04,0x00, -0x03,0x01,0x00,0x00,0x02,0x01,0x00,0x00,0xfa,0x00,0x00,0x00, -0x1e,0x00,0x06,0x00,0x04,0x01,0x00,0x00,0x01,0x01,0x00,0x00, -0x01,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x01,0x00,0x00, -0x1d,0x00,0x03,0x00,0x05,0x01,0x00,0x00,0x04,0x01,0x00,0x00, -0x1e,0x00,0x03,0x00,0x06,0x01,0x00,0x00,0x05,0x01,0x00,0x00, -0x20,0x00,0x04,0x00,0x07,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x06,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x07,0x01,0x00,0x00, -0x08,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x0a,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x01,0x01,0x00,0x00, -0x20,0x00,0x04,0x00,0x15,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x23,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x2c,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x02,0x01,0x00,0x00, -0x17,0x00,0x04,0x00,0x30,0x01,0x00,0x00,0xc4,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x48,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x49,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x48,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,0x4a,0x01,0x00,0x00, -0x01,0x01,0x00,0x00,0x49,0x01,0x00,0x00,0x20,0x00,0x04,0x00, -0x4b,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x4a,0x01,0x00,0x00, -0x3b,0x00,0x04,0x00,0x4b,0x01,0x00,0x00,0x4c,0x01,0x00,0x00, -0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x51,0x01,0x00,0x00, -0x04,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x59,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0x33,0x00,0x06,0x00,0x09,0x00,0x00,0x00,0x5a,0x01,0x00,0x00, -0x59,0x01,0x00,0x00,0x39,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x5b,0x01,0x00,0x00, -0x51,0x00,0x00,0x00,0x5a,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x5c,0x01,0x00,0x00, -0x84,0x00,0x00,0x00,0x5b,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x5d,0x01,0x00,0x00, -0x86,0x00,0x00,0x00,0x5c,0x01,0x00,0x00,0x6c,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x78,0x01,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x7d,0x01,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x7e,0x01,0x00,0x00, -0x84,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0x7d,0x01,0x00,0x00, -0x1c,0x00,0x04,0x00,0x7f,0x01,0x00,0x00,0x01,0x01,0x00,0x00, -0x7e,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x80,0x01,0x00,0x00, -0x04,0x00,0x00,0x00,0x7f,0x01,0x00,0x00,0x3b,0x00,0x04,0x00, -0x80,0x01,0x00,0x00,0x81,0x01,0x00,0x00,0x04,0x00,0x00,0x00, -0x17,0x00,0x04,0x00,0x84,0x01,0x00,0x00,0xc4,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x18,0x00,0x04,0x00,0x85,0x01,0x00,0x00, -0x84,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x1d,0x00,0x03,0x00, -0x86,0x01,0x00,0x00,0x85,0x01,0x00,0x00,0x1e,0x00,0x03,0x00, -0x87,0x01,0x00,0x00,0x86,0x01,0x00,0x00,0x20,0x00,0x04,0x00, -0x88,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x87,0x01,0x00,0x00, -0x3b,0x00,0x04,0x00,0x88,0x01,0x00,0x00,0x89,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x8b,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x9f,0x01,0x00,0x00,0x03,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa7,0x01,0x00,0x00, -0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xaf,0x01,0x00,0x00,0x05,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xb7,0x01,0x00,0x00,0x06,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xbf,0x01,0x00,0x00, -0x07,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xc6,0x01,0x00,0x00,0x51,0x00,0x00,0x00,0x5a,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xc7,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0xc6,0x01,0x00,0x00, -0x77,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xc8,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0xc7,0x01,0x00,0x00, -0x6c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xcb,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xcc,0x01,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xcf,0x01,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xea,0x01,0x00,0x00,0x84,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x1c,0x00,0x04,0x00, -0xeb,0x01,0x00,0x00,0x01,0x01,0x00,0x00,0xea,0x01,0x00,0x00, -0x20,0x00,0x04,0x00,0xec,0x01,0x00,0x00,0x07,0x00,0x00,0x00, -0xeb,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xfc,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x02,0x02,0x00,0x00, -0x07,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x18,0x02,0x00,0x00,0x84,0x00,0x00,0x00, -0xbf,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x1c,0x00,0x04,0x00, -0x19,0x02,0x00,0x00,0x01,0x01,0x00,0x00,0x18,0x02,0x00,0x00, -0x20,0x00,0x04,0x00,0x1a,0x02,0x00,0x00,0x07,0x00,0x00,0x00, -0x19,0x02,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x23,0x02,0x00,0x00,0x86,0x00,0x00,0x00,0xb9,0x00,0x00,0x00, -0xbf,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x2b,0x02,0x00,0x00,0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x5a,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x8f,0x02,0x00,0x00,0x0d,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x97,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0x1d,0x00,0x03,0x00,0xdd,0x02,0x00,0x00,0xc4,0x00,0x00,0x00, -0x1e,0x00,0x03,0x00,0xde,0x02,0x00,0x00,0xdd,0x02,0x00,0x00, -0x20,0x00,0x04,0x00,0xdf,0x02,0x00,0x00,0x0c,0x00,0x00,0x00, -0xde,0x02,0x00,0x00,0x3b,0x00,0x04,0x00,0xdf,0x02,0x00,0x00, -0xe0,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0xe5,0x02,0x00,0x00,0x05,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xf2,0x02,0x00,0x00, -0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x05,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xc9,0x00,0x00,0x00, -0xca,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0xec,0x01,0x00,0x00,0xed,0x01,0x00,0x00,0x07,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x1a,0x02,0x00,0x00,0x1b,0x02,0x00,0x00, -0x07,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x16,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x17,0x00,0x00,0x00, -0x16,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x17,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1e,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x21,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x28,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x27,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x29,0x00,0x00,0x00, -0x28,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x2a,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x29,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x2e,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00, -0x24,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x30,0x00,0x00,0x00, -0x2a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x35,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x36,0x00,0x00,0x00, -0x35,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x38,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00, -0x38,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x3a,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x3f,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x3e,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x3f,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x42,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x3b,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x47,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x4a,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x4c,0x00,0x00,0x00, -0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x4f,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x55,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x54,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00, -0x50,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x4f,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x64,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,0x63,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x68,0x00,0x00,0x00, -0x5d,0x00,0x00,0x00,0x67,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x6d,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x73,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x72,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x79,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x7d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x82,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x81,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x83,0x00,0x00,0x00, -0x82,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0x83,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x87,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x87,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8a,0x00,0x00,0x00, -0x47,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x8a,0x00,0x00,0x00, -0x83,0x00,0x00,0x00,0x0c,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x8e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x26,0x00,0x00,0x00, -0x88,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x91,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x93,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x93,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x96,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x98,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x98,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9a,0x00,0x00,0x00, -0x96,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x94,0x00,0x00,0x00, -0x9a,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9d,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9e,0x00,0x00,0x00, -0x9d,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0xa2,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xa4,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0xa4,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa8,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0xa7,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0xaa,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0xaa,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00, -0xa8,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xad,0x00,0x00,0x00,0xa5,0x00,0x00,0x00, -0xac,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xaf,0x00,0x00,0x00,0xad,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb0,0x00,0x00,0x00, -0xaf,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xb2,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb2,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x08,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0xd1,0x00,0x00,0x00, -0xb3,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0xc3,0x00,0x00,0x00,0x08,0x03,0x00,0x00,0xc1,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xb4,0x00,0x00,0x00,0xb3,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xc3,0x00,0x00,0x00, -0xb3,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xb3,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00, -0xce,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0x08,0x03,0x00,0x00, -0x3e,0x00,0x03,0x00,0xce,0x00,0x00,0x00,0xcc,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd1,0x00,0x00,0x00, -0x08,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xb2,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb4,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xd4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xd4,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x21,0x03,0x00,0x00,0xb0,0x00,0x00,0x00,0xb4,0x00,0x00,0x00, -0xd1,0x01,0x00,0x00,0xd7,0x00,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x1d,0x03,0x00,0x00,0x9e,0x00,0x00,0x00, -0xb4,0x00,0x00,0x00,0xce,0x01,0x00,0x00,0xd7,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x09,0x03,0x00,0x00, -0x84,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0x7f,0x02,0x00,0x00, -0xd7,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0xdb,0x00,0x00,0x00,0x09,0x03,0x00,0x00,0x8e,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xd6,0x00,0x00,0x00,0xd7,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xdb,0x00,0x00,0x00, -0xd5,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xd5,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xdd,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x19,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0xd5,0x00,0x00,0x00,0x5f,0x01,0x00,0x00,0xde,0x00,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xe3,0x00,0x00,0x00, -0x19,0x03,0x00,0x00,0x37,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xdf,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xe3,0x00,0x00,0x00,0xde,0x00,0x00,0x00, -0xdf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe8,0x00,0x00,0x00, -0x73,0x00,0x00,0x00,0x19,0x03,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,0xe8,0x00,0x00,0x00, -0x99,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xec,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xed,0x00,0x00,0x00, -0x1d,0x03,0x00,0x00,0xec,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xef,0x00,0x00,0x00,0xed,0x00,0x00,0x00, -0x6e,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xf5,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0xf4,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf7,0x00,0x00,0x00, -0xf5,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0xef,0x00,0x00,0x00, -0xfa,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xff,0x00,0x00,0x00,0xef,0x00,0x00,0x00,0xfe,0x00,0x00,0x00, -0x41,0x00,0x07,0x00,0x0a,0x01,0x00,0x00,0x0b,0x01,0x00,0x00, -0x08,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0xfb,0x00,0x00,0x00, -0x34,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x01,0x01,0x00,0x00, -0x0c,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,0x73,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0x0d,0x01,0x00,0x00,0x0c,0x01,0x00,0x00, -0x41,0x00,0x07,0x00,0x0a,0x01,0x00,0x00,0x10,0x01,0x00,0x00, -0x08,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0xfb,0x00,0x00,0x00, -0xd0,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x01,0x01,0x00,0x00, -0x11,0x01,0x00,0x00,0x10,0x01,0x00,0x00,0x73,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0x12,0x01,0x00,0x00,0x11,0x01,0x00,0x00, -0x41,0x00,0x07,0x00,0x15,0x01,0x00,0x00,0x16,0x01,0x00,0x00, -0x08,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0xfb,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x17,0x01,0x00,0x00,0x16,0x01,0x00,0x00,0xc2,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x1d,0x01,0x00,0x00,0x17,0x01,0x00,0x00, -0xff,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x1e,0x01,0x00,0x00,0x1d,0x01,0x00,0x00,0xa9,0x00,0x00,0x00, -0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1f,0x01,0x00,0x00, -0x1e,0x01,0x00,0x00,0xfa,0x00,0x00,0x00,0x7c,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x20,0x01,0x00,0x00,0x1f,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x24,0x01,0x00,0x00, -0xff,0x00,0x00,0x00,0x23,0x01,0x00,0x00,0xc2,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x25,0x01,0x00,0x00,0x17,0x01,0x00,0x00, -0x24,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x26,0x01,0x00,0x00,0x25,0x01,0x00,0x00,0xfa,0x00,0x00,0x00, -0x7c,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x27,0x01,0x00,0x00, -0x26,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x2c,0x01,0x00,0x00, -0x2d,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0xfb,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0xff,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x02,0x01,0x00,0x00,0x2e,0x01,0x00,0x00, -0x2d,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x2f,0x01,0x00,0x00,0x2e,0x01,0x00,0x00,0xc7,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x34,0x01,0x00,0x00,0x2f,0x01,0x00,0x00, -0xfe,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x38,0x01,0x00,0x00,0x20,0x01,0x00,0x00,0xc5,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x39,0x01,0x00,0x00,0x34,0x01,0x00,0x00, -0x38,0x01,0x00,0x00,0x70,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0x3a,0x01,0x00,0x00,0x39,0x01,0x00,0x00,0xc2,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3c,0x01,0x00,0x00,0x2f,0x01,0x00,0x00, -0xa9,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x3f,0x01,0x00,0x00,0x27,0x01,0x00,0x00,0xc5,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x40,0x01,0x00,0x00,0x3c,0x01,0x00,0x00, -0x3f,0x01,0x00,0x00,0x70,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0x41,0x01,0x00,0x00,0x40,0x01,0x00,0x00,0x50,0x00,0x05,0x00, -0x30,0x01,0x00,0x00,0x42,0x01,0x00,0x00,0x3a,0x01,0x00,0x00, -0x41,0x01,0x00,0x00,0x8e,0x00,0x05,0x00,0x30,0x01,0x00,0x00, -0x44,0x01,0x00,0x00,0x42,0x01,0x00,0x00,0x0d,0x01,0x00,0x00, -0x50,0x00,0x05,0x00,0x30,0x01,0x00,0x00,0x46,0x01,0x00,0x00, -0x12,0x01,0x00,0x00,0x12,0x01,0x00,0x00,0x81,0x00,0x05,0x00, -0x30,0x01,0x00,0x00,0x47,0x01,0x00,0x00,0x44,0x01,0x00,0x00, -0x46,0x01,0x00,0x00,0x51,0x00,0x05,0x00,0xc4,0x00,0x00,0x00, -0x4f,0x01,0x00,0x00,0x47,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x73,0x00,0x04,0x00,0x01,0x01,0x00,0x00,0x50,0x01,0x00,0x00, -0x4f,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x51,0x01,0x00,0x00, -0x52,0x01,0x00,0x00,0x4c,0x01,0x00,0x00,0xf7,0x00,0x00,0x00, -0x3e,0x00,0x03,0x00,0x52,0x01,0x00,0x00,0x50,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x54,0x01,0x00,0x00, -0xf7,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0x51,0x00,0x05,0x00, -0xc4,0x00,0x00,0x00,0x56,0x01,0x00,0x00,0x47,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x01,0x01,0x00,0x00, -0x57,0x01,0x00,0x00,0x56,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x51,0x01,0x00,0x00,0x58,0x01,0x00,0x00,0x4c,0x01,0x00,0x00, -0x54,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x58,0x01,0x00,0x00, -0x57,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x5f,0x01,0x00,0x00,0x19,0x03,0x00,0x00,0x5d,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xdf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x61,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x61,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x1a,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0xdf,0x00,0x00,0x00,0xca,0x01,0x00,0x00,0x62,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x67,0x01,0x00,0x00, -0x1a,0x03,0x00,0x00,0xa7,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x63,0x01,0x00,0x00,0x62,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x67,0x01,0x00,0x00,0x62,0x01,0x00,0x00, -0x63,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x62,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6c,0x01,0x00,0x00, -0x7e,0x00,0x00,0x00,0x1a,0x03,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x6f,0x01,0x00,0x00,0x6c,0x01,0x00,0x00, -0xab,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x70,0x01,0x00,0x00,0x6f,0x01,0x00,0x00,0x77,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x71,0x01,0x00,0x00, -0x21,0x03,0x00,0x00,0x70,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x73,0x01,0x00,0x00,0x71,0x01,0x00,0x00, -0x79,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x79,0x01,0x00,0x00,0x6c,0x01,0x00,0x00,0x78,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7b,0x01,0x00,0x00, -0x79,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x7c,0x01,0x00,0x00,0x79,0x01,0x00,0x00, -0x7b,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x8b,0x01,0x00,0x00, -0x8c,0x01,0x00,0x00,0x89,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0x73,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0x3e,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x8d,0x01,0x00,0x00, -0x8c,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x01,0x01,0x00,0x00, -0x8e,0x01,0x00,0x00,0x8d,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x51,0x01,0x00,0x00,0x8f,0x01,0x00,0x00,0x81,0x01,0x00,0x00, -0x7c,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x8f,0x01,0x00,0x00, -0x8e,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x91,0x01,0x00,0x00,0x7c,0x01,0x00,0x00,0x39,0x00,0x00,0x00, -0x41,0x00,0x08,0x00,0x8b,0x01,0x00,0x00,0x93,0x01,0x00,0x00, -0x89,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0x73,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0x94,0x01,0x00,0x00,0x93,0x01,0x00,0x00, -0x73,0x00,0x04,0x00,0x01,0x01,0x00,0x00,0x95,0x01,0x00,0x00, -0x94,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x51,0x01,0x00,0x00, -0x96,0x01,0x00,0x00,0x81,0x01,0x00,0x00,0x91,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0x96,0x01,0x00,0x00,0x95,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x98,0x01,0x00,0x00, -0x7c,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x41,0x00,0x08,0x00, -0x8b,0x01,0x00,0x00,0x9a,0x01,0x00,0x00,0x89,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0x73,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0x9b,0x01,0x00,0x00,0x9a,0x01,0x00,0x00,0x73,0x00,0x04,0x00, -0x01,0x01,0x00,0x00,0x9c,0x01,0x00,0x00,0x9b,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x51,0x01,0x00,0x00,0x9d,0x01,0x00,0x00, -0x81,0x01,0x00,0x00,0x98,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0x9d,0x01,0x00,0x00,0x9c,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa0,0x01,0x00,0x00,0x7c,0x01,0x00,0x00, -0x9f,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x8b,0x01,0x00,0x00, -0xa2,0x01,0x00,0x00,0x89,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0x73,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0x9f,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0xa3,0x01,0x00,0x00, -0xa2,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x01,0x01,0x00,0x00, -0xa4,0x01,0x00,0x00,0xa3,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x51,0x01,0x00,0x00,0xa5,0x01,0x00,0x00,0x81,0x01,0x00,0x00, -0xa0,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xa5,0x01,0x00,0x00, -0xa4,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa8,0x01,0x00,0x00,0x7c,0x01,0x00,0x00,0xa7,0x01,0x00,0x00, -0x41,0x00,0x08,0x00,0x8b,0x01,0x00,0x00,0xaa,0x01,0x00,0x00, -0x89,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0x73,0x01,0x00,0x00, -0xd0,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0xab,0x01,0x00,0x00,0xaa,0x01,0x00,0x00, -0x73,0x00,0x04,0x00,0x01,0x01,0x00,0x00,0xac,0x01,0x00,0x00, -0xab,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x51,0x01,0x00,0x00, -0xad,0x01,0x00,0x00,0x81,0x01,0x00,0x00,0xa8,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0xad,0x01,0x00,0x00,0xac,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb0,0x01,0x00,0x00, -0x7c,0x01,0x00,0x00,0xaf,0x01,0x00,0x00,0x41,0x00,0x08,0x00, -0x8b,0x01,0x00,0x00,0xb2,0x01,0x00,0x00,0x89,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0x73,0x01,0x00,0x00,0xd0,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0xb3,0x01,0x00,0x00,0xb2,0x01,0x00,0x00,0x73,0x00,0x04,0x00, -0x01,0x01,0x00,0x00,0xb4,0x01,0x00,0x00,0xb3,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x51,0x01,0x00,0x00,0xb5,0x01,0x00,0x00, -0x81,0x01,0x00,0x00,0xb0,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0xb5,0x01,0x00,0x00,0xb4,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xb8,0x01,0x00,0x00,0x7c,0x01,0x00,0x00, -0xb7,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x8b,0x01,0x00,0x00, -0xba,0x01,0x00,0x00,0x89,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0x73,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0xbb,0x01,0x00,0x00, -0xba,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x01,0x01,0x00,0x00, -0xbc,0x01,0x00,0x00,0xbb,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x51,0x01,0x00,0x00,0xbd,0x01,0x00,0x00,0x81,0x01,0x00,0x00, -0xb8,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xbd,0x01,0x00,0x00, -0xbc,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xc0,0x01,0x00,0x00,0x7c,0x01,0x00,0x00,0xbf,0x01,0x00,0x00, -0x41,0x00,0x08,0x00,0x8b,0x01,0x00,0x00,0xc2,0x01,0x00,0x00, -0x89,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0x73,0x01,0x00,0x00, -0xd0,0x00,0x00,0x00,0x9f,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0xc3,0x01,0x00,0x00,0xc2,0x01,0x00,0x00, -0x73,0x00,0x04,0x00,0x01,0x01,0x00,0x00,0xc4,0x01,0x00,0x00, -0xc3,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x51,0x01,0x00,0x00, -0xc5,0x01,0x00,0x00,0x81,0x01,0x00,0x00,0xc0,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0xc5,0x01,0x00,0x00,0xc4,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xca,0x01,0x00,0x00, -0x1a,0x03,0x00,0x00,0xc8,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0x61,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x63,0x01,0x00,0x00, -0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0xcb,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xce,0x01,0x00,0x00,0x1d,0x03,0x00,0x00,0xcc,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd1,0x01,0x00,0x00, -0x21,0x03,0x00,0x00,0xcf,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xd3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xd3,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x23,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0x63,0x01,0x00,0x00,0x7d,0x02,0x00,0x00, -0xd6,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0xd9,0x01,0x00,0x00,0x23,0x03,0x00,0x00,0x6c,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xd5,0x01,0x00,0x00,0xd6,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xd9,0x01,0x00,0x00, -0xd4,0x01,0x00,0x00,0xd5,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xd4,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xdb,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xdb,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x27,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0xd4,0x01,0x00,0x00,0x07,0x02,0x00,0x00,0xde,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xe1,0x01,0x00,0x00, -0x27,0x03,0x00,0x00,0x60,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xdd,0x01,0x00,0x00,0xde,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xe1,0x01,0x00,0x00,0xdc,0x01,0x00,0x00, -0xdd,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xdc,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xe3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xe3,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x39,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0xdc,0x01,0x00,0x00, -0x05,0x02,0x00,0x00,0xe4,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0xe9,0x01,0x00,0x00,0x39,0x03,0x00,0x00, -0x62,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xe5,0x01,0x00,0x00, -0xe4,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xe9,0x01,0x00,0x00,0xe4,0x01,0x00,0x00,0xe5,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xe4,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xef,0x01,0x00,0x00,0x27,0x03,0x00,0x00, -0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xf1,0x01,0x00,0x00,0xef,0x01,0x00,0x00,0x39,0x03,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf3,0x01,0x00,0x00, -0x55,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xf5,0x01,0x00,0x00,0x27,0x03,0x00,0x00, -0x61,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xf6,0x01,0x00,0x00,0xf3,0x01,0x00,0x00,0xf5,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf8,0x01,0x00,0x00, -0x64,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xf9,0x01,0x00,0x00,0xf6,0x01,0x00,0x00, -0xf8,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xfb,0x01,0x00,0x00,0xf9,0x01,0x00,0x00,0x39,0x03,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfd,0x01,0x00,0x00, -0xfb,0x01,0x00,0x00,0xfc,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xff,0x01,0x00,0x00,0xfd,0x01,0x00,0x00, -0x23,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x51,0x01,0x00,0x00, -0x00,0x02,0x00,0x00,0x4c,0x01,0x00,0x00,0xff,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0x01,0x01,0x00,0x00,0x01,0x02,0x00,0x00, -0x00,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x02,0x02,0x00,0x00, -0x03,0x02,0x00,0x00,0xed,0x01,0x00,0x00,0xf1,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0x03,0x02,0x00,0x00,0x01,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x05,0x02,0x00,0x00, -0x39,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xe3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xe5,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xde,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xde,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x07,0x02,0x00,0x00,0x27,0x03,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xdb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xdd,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x09,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x09,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x28,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0xdd,0x01,0x00,0x00,0x35,0x02,0x00,0x00,0x0c,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x0f,0x02,0x00,0x00, -0x28,0x03,0x00,0x00,0xbf,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x0b,0x02,0x00,0x00,0x0c,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x0f,0x02,0x00,0x00,0x0a,0x02,0x00,0x00, -0x0b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x0a,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x11,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x11,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x36,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0x0a,0x02,0x00,0x00, -0x33,0x02,0x00,0x00,0x12,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0x17,0x02,0x00,0x00,0x36,0x03,0x00,0x00, -0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x13,0x02,0x00,0x00, -0x12,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x17,0x02,0x00,0x00,0x12,0x02,0x00,0x00,0x13,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x12,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x1d,0x02,0x00,0x00,0x28,0x03,0x00,0x00, -0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x1f,0x02,0x00,0x00,0x1d,0x02,0x00,0x00,0x36,0x03,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x21,0x02,0x00,0x00, -0x59,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x24,0x02,0x00,0x00,0x28,0x03,0x00,0x00, -0x23,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x25,0x02,0x00,0x00,0x21,0x02,0x00,0x00,0x24,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x27,0x02,0x00,0x00, -0x68,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x28,0x02,0x00,0x00,0x25,0x02,0x00,0x00, -0x27,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x2a,0x02,0x00,0x00,0x28,0x02,0x00,0x00,0x36,0x03,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2c,0x02,0x00,0x00, -0x2a,0x02,0x00,0x00,0x2b,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x2e,0x02,0x00,0x00,0x2c,0x02,0x00,0x00, -0x23,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x51,0x01,0x00,0x00, -0x2f,0x02,0x00,0x00,0x81,0x01,0x00,0x00,0x2e,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0x01,0x01,0x00,0x00,0x30,0x02,0x00,0x00, -0x2f,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x02,0x02,0x00,0x00, -0x31,0x02,0x00,0x00,0x1b,0x02,0x00,0x00,0x1f,0x02,0x00,0x00, -0x3e,0x00,0x03,0x00,0x31,0x02,0x00,0x00,0x30,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x33,0x02,0x00,0x00, -0x36,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x11,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x13,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x0c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x0c,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x35,0x02,0x00,0x00,0x28,0x03,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x09,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x0b,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x37,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x37,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x29,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0x0b,0x02,0x00,0x00,0x7b,0x02,0x00,0x00,0x3a,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x3d,0x02,0x00,0x00, -0x29,0x03,0x00,0x00,0xbf,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x39,0x02,0x00,0x00,0x3a,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x3d,0x02,0x00,0x00,0x38,0x02,0x00,0x00, -0x39,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x38,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x3f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x3f,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x2d,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0x38,0x02,0x00,0x00, -0x79,0x02,0x00,0x00,0x42,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0x45,0x02,0x00,0x00,0x2d,0x03,0x00,0x00, -0x60,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x41,0x02,0x00,0x00, -0x42,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x45,0x02,0x00,0x00,0x40,0x02,0x00,0x00,0x41,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x40,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x47,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x47,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x2f,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0x40,0x02,0x00,0x00,0x77,0x02,0x00,0x00, -0x4a,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0x4d,0x02,0x00,0x00,0x2f,0x03,0x00,0x00,0xbc,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x49,0x02,0x00,0x00,0x4a,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x4d,0x02,0x00,0x00, -0x48,0x02,0x00,0x00,0x49,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x48,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x4f,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x4f,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x31,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0x48,0x02,0x00,0x00,0x75,0x02,0x00,0x00,0x50,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x55,0x02,0x00,0x00, -0x31,0x03,0x00,0x00,0x62,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x51,0x02,0x00,0x00,0x50,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x55,0x02,0x00,0x00,0x50,0x02,0x00,0x00, -0x51,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x50,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x57,0x02,0x00,0x00, -0x29,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x59,0x02,0x00,0x00,0x57,0x02,0x00,0x00, -0x2f,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x5b,0x02,0x00,0x00,0x59,0x02,0x00,0x00,0x5a,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5d,0x02,0x00,0x00, -0x2d,0x03,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x5e,0x02,0x00,0x00,0x5b,0x02,0x00,0x00, -0x5d,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x60,0x02,0x00,0x00,0x5e,0x02,0x00,0x00,0x31,0x03,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x64,0x02,0x00,0x00, -0x5d,0x02,0x00,0x00,0x31,0x03,0x00,0x00,0x41,0x00,0x05,0x00, -0x02,0x02,0x00,0x00,0x65,0x02,0x00,0x00,0xed,0x01,0x00,0x00, -0x64,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x01,0x01,0x00,0x00, -0x66,0x02,0x00,0x00,0x65,0x02,0x00,0x00,0x73,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0x67,0x02,0x00,0x00,0x66,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0x02,0x02,0x00,0x00,0x6c,0x02,0x00,0x00, -0x1b,0x02,0x00,0x00,0x59,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0x01,0x01,0x00,0x00,0x6d,0x02,0x00,0x00,0x6c,0x02,0x00,0x00, -0x73,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x6e,0x02,0x00,0x00, -0x6d,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00, -0x70,0x02,0x00,0x00,0xca,0x00,0x00,0x00,0x60,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x71,0x02,0x00,0x00, -0x70,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,0xc4,0x00,0x00,0x00, -0x72,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x67,0x02,0x00,0x00,0x6e,0x02,0x00,0x00,0x71,0x02,0x00,0x00, -0x3e,0x00,0x03,0x00,0x70,0x02,0x00,0x00,0x72,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x75,0x02,0x00,0x00, -0x31,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x4f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x51,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x4a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x4a,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x77,0x02,0x00,0x00,0x2f,0x03,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x47,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x49,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x42,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x42,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x79,0x02,0x00,0x00,0x2d,0x03,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x3f,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x41,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x3a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x3a,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7b,0x02,0x00,0x00, -0x29,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x37,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x39,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0xd6,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xd6,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x7d,0x02,0x00,0x00,0x23,0x03,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xd3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xd5,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0xcb,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xd7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd7,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7f,0x02,0x00,0x00, -0x09,0x03,0x00,0x00,0x6c,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xd4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd6,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x84,0x02,0x00,0x00, -0x55,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x85,0x02,0x00,0x00,0x96,0x00,0x00,0x00, -0x84,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x8a,0x02,0x00,0x00,0x59,0x00,0x00,0x00,0xb9,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8b,0x02,0x00,0x00, -0xa8,0x00,0x00,0x00,0x8a,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x90,0x02,0x00,0x00,0x12,0x00,0x00,0x00, -0x8f,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x91,0x02,0x00,0x00,0x90,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x92,0x02,0x00,0x00,0x0f,0x00,0x00,0x00, -0x91,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x96,0x02,0x00,0x00,0x47,0x00,0x00,0x00,0x91,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x98,0x02,0x00,0x00, -0x97,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x99,0x02,0x00,0x00,0x98,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9a,0x02,0x00,0x00, -0x96,0x02,0x00,0x00,0x99,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9b,0x02,0x00,0x00,0x92,0x02,0x00,0x00, -0x9a,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x9d,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x9d,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x0a,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0xd6,0x00,0x00,0x00,0x03,0x03,0x00,0x00,0xa0,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xa3,0x02,0x00,0x00, -0x0a,0x03,0x00,0x00,0xbf,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x9f,0x02,0x00,0x00,0xa0,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xa3,0x02,0x00,0x00,0x9e,0x02,0x00,0x00, -0x9f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x9e,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0xa5,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xa5,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x0b,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0x9e,0x02,0x00,0x00, -0x01,0x03,0x00,0x00,0xa8,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0xab,0x02,0x00,0x00,0x0b,0x03,0x00,0x00, -0x60,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xa7,0x02,0x00,0x00, -0xa8,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xab,0x02,0x00,0x00,0xa6,0x02,0x00,0x00,0xa7,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xa6,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xaf,0x02,0x00,0x00,0x0b,0x03,0x00,0x00, -0x61,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xb0,0x02,0x00,0x00,0x85,0x02,0x00,0x00,0xaf,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb2,0x02,0x00,0x00, -0x64,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xb3,0x02,0x00,0x00,0xb0,0x02,0x00,0x00, -0xb2,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xb7,0x02,0x00,0x00,0x0a,0x03,0x00,0x00,0x23,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb8,0x02,0x00,0x00, -0x8b,0x02,0x00,0x00,0xb7,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xba,0x02,0x00,0x00,0x68,0x00,0x00,0x00, -0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xbb,0x02,0x00,0x00,0xb8,0x02,0x00,0x00,0xba,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0xbd,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xbd,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x0d,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0xa6,0x02,0x00,0x00, -0xff,0x02,0x00,0x00,0xc0,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0xc3,0x02,0x00,0x00,0x0d,0x03,0x00,0x00, -0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xbf,0x02,0x00,0x00, -0xc0,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xc3,0x02,0x00,0x00,0xbe,0x02,0x00,0x00,0xbf,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xbe,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0xc5,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xc5,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x0f,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0xbe,0x02,0x00,0x00,0xfd,0x02,0x00,0x00, -0xc8,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0xcb,0x02,0x00,0x00,0x0f,0x03,0x00,0x00,0x62,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xc7,0x02,0x00,0x00,0xc8,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xcb,0x02,0x00,0x00, -0xc6,0x02,0x00,0x00,0xc7,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xc6,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xce,0x02,0x00,0x00,0xb3,0x02,0x00,0x00,0x0f,0x03,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xd1,0x02,0x00,0x00, -0xce,0x02,0x00,0x00,0x36,0x00,0x00,0x00,0xf7,0x00,0x03,0x00, -0xd3,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xd1,0x02,0x00,0x00,0xd2,0x02,0x00,0x00,0xd3,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xd2,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xd6,0x02,0x00,0x00,0xbb,0x02,0x00,0x00, -0x0d,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0xd7,0x02,0x00,0x00,0x12,0x00,0x00,0x00,0xd0,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xd8,0x02,0x00,0x00, -0xd7,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0xd9,0x02,0x00,0x00,0xd6,0x02,0x00,0x00,0xd8,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0xd3,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xd3,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0xc2,0x00,0x00,0x00, -0xda,0x02,0x00,0x00,0xd1,0x02,0x00,0x00,0xc6,0x02,0x00,0x00, -0xd9,0x02,0x00,0x00,0xd2,0x02,0x00,0x00,0xf7,0x00,0x03,0x00, -0xdc,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xda,0x02,0x00,0x00,0xdb,0x02,0x00,0x00,0xdc,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xdb,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xe4,0x02,0x00,0x00,0xbb,0x02,0x00,0x00, -0x0d,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0xe6,0x02,0x00,0x00,0x12,0x00,0x00,0x00,0xe5,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xe7,0x02,0x00,0x00, -0xe6,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xe8,0x02,0x00,0x00,0xe4,0x02,0x00,0x00,0xe7,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe9,0x02,0x00,0x00, -0x9b,0x02,0x00,0x00,0xe8,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xeb,0x02,0x00,0x00,0xe9,0x02,0x00,0x00, -0xb3,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xed,0x02,0x00,0x00,0xeb,0x02,0x00,0x00,0x0f,0x03,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xef,0x02,0x00,0x00, -0x0a,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xf1,0x02,0x00,0x00,0xef,0x02,0x00,0x00, -0x0d,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xf3,0x02,0x00,0x00,0xf1,0x02,0x00,0x00,0xf2,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf5,0x02,0x00,0x00, -0x0b,0x03,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xf6,0x02,0x00,0x00,0xf3,0x02,0x00,0x00, -0xf5,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xf8,0x02,0x00,0x00,0xf6,0x02,0x00,0x00,0x0f,0x03,0x00,0x00, -0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,0xf9,0x02,0x00,0x00, -0xca,0x00,0x00,0x00,0xf8,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0xfa,0x02,0x00,0x00,0xf9,0x02,0x00,0x00, -0x41,0x00,0x06,0x00,0x8b,0x01,0x00,0x00,0xfb,0x02,0x00,0x00, -0xe0,0x02,0x00,0x00,0x34,0x00,0x00,0x00,0xed,0x02,0x00,0x00, -0x3e,0x00,0x03,0x00,0xfb,0x02,0x00,0x00,0xfa,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0xdc,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xdc,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xc8,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xc8,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xfd,0x02,0x00,0x00,0x0f,0x03,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xc5,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xc7,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0xc0,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xc0,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xff,0x02,0x00,0x00, -0x0d,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xbd,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xbf,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0xa8,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xa8,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x01,0x03,0x00,0x00,0x0b,0x03,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xa5,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xa7,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xa0,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xa0,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x03,0x03,0x00,0x00,0x0a,0x03,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x9d,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x9f,0x02,0x00,0x00,0xfd,0x00,0x01,0x00, -0x38,0x00,0x01,0x00, -}; -const uint64_t matmul_q5_1_f32_aligned_len = 11548; - -unsigned char matmul_q5_1_f32_aligned_fp32_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0x10,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00, -0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00, -0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64, -0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00, -0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0f,0x00,0x0f,0x00, -0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e, -0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x3d,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x08,0x01,0x00,0x00, -0x4c,0x01,0x00,0x00,0x7f,0x01,0x00,0x00,0x86,0x01,0x00,0x00, -0x6d,0x02,0x00,0x00,0xb6,0x02,0x00,0x00,0x10,0x00,0x06,0x00, -0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x34,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x10,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x37,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x3d,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x4c,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x4f,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x53,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x60,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x62,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x6c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xa7,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xb9,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xbc,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x03,0x01,0x00,0x00,0x06,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x04,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x04,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x04,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x04,0x01,0x00,0x00, -0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x05,0x01,0x00,0x00,0x06,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x06,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x06,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x06,0x01,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x08,0x01,0x00,0x00, -0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x08,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x57,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x58,0x01,0x00,0x00, -0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x83,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x48,0x00,0x04,0x00,0x84,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x84,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0x84,0x01,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x86,0x01,0x00,0x00,0x22,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x86,0x01,0x00,0x00, -0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x6d,0x02,0x00,0x00,0x0b,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xb3,0x02,0x00,0x00,0x06,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0xb4,0x02,0x00,0x00, -0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0xb4,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0xb4,0x02,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xb6,0x02,0x00,0x00, -0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xb6,0x02,0x00,0x00,0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00, -0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x1e,0x00,0x10,0x00, -0x10,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x11,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x11,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x15,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x0a,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x27,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x2d,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x3e,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x4c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x54,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x58,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x63,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x67,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x6d,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x72,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x77,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x91,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0xa2,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xa7,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xba,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0xb9,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xbb,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x4f,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xbc,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xbb,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xbd,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0xba,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xb8,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xc0,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x14,0x00,0x02,0x00, -0xc2,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0xc4,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xc5,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xc6,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc5,0x00,0x00,0x00, -0xbf,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xc7,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc6,0x00,0x00,0x00, -0xbc,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xc8,0x00,0x00,0x00, -0xc4,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0xc9,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xc8,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0xcc,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xcd,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xf4,0x00,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xfa,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xfe,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x16,0x00,0x03,0x00, -0x01,0x01,0x00,0x00,0x10,0x00,0x00,0x00,0x15,0x00,0x04,0x00, -0x02,0x01,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x1c,0x00,0x04,0x00,0x03,0x01,0x00,0x00,0x02,0x01,0x00,0x00, -0xfa,0x00,0x00,0x00,0x1e,0x00,0x06,0x00,0x04,0x01,0x00,0x00, -0x01,0x01,0x00,0x00,0x01,0x01,0x00,0x00,0x06,0x00,0x00,0x00, -0x03,0x01,0x00,0x00,0x1d,0x00,0x03,0x00,0x05,0x01,0x00,0x00, -0x04,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,0x06,0x01,0x00,0x00, -0x05,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x07,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x06,0x01,0x00,0x00,0x3b,0x00,0x04,0x00, -0x07,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x0a,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x01,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x15,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x23,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x2c,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x02,0x01,0x00,0x00,0x17,0x00,0x04,0x00,0x30,0x01,0x00,0x00, -0xc4,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x48,0x01,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x49,0x01,0x00,0x00,0x84,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x48,0x01,0x00,0x00,0x1c,0x00,0x04,0x00, -0x4a,0x01,0x00,0x00,0xc4,0x00,0x00,0x00,0x49,0x01,0x00,0x00, -0x20,0x00,0x04,0x00,0x4b,0x01,0x00,0x00,0x04,0x00,0x00,0x00, -0x4a,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x4b,0x01,0x00,0x00, -0x4c,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x50,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0xc4,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x57,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00,0x09,0x00,0x00,0x00, -0x58,0x01,0x00,0x00,0x57,0x01,0x00,0x00,0x39,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x59,0x01,0x00,0x00,0x51,0x00,0x00,0x00,0x58,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x5a,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x59,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x5b,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x5a,0x01,0x00,0x00, -0x6c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x76,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x7b,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x7c,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0xa7,0x00,0x00,0x00, -0x7b,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,0x7d,0x01,0x00,0x00, -0xc4,0x00,0x00,0x00,0x7c,0x01,0x00,0x00,0x20,0x00,0x04,0x00, -0x7e,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x7d,0x01,0x00,0x00, -0x3b,0x00,0x04,0x00,0x7e,0x01,0x00,0x00,0x7f,0x01,0x00,0x00, -0x04,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x82,0x01,0x00,0x00, -0xc4,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x1d,0x00,0x03,0x00, -0x83,0x01,0x00,0x00,0x82,0x01,0x00,0x00,0x1e,0x00,0x03,0x00, -0x84,0x01,0x00,0x00,0x83,0x01,0x00,0x00,0x20,0x00,0x04,0x00, -0x85,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x84,0x01,0x00,0x00, -0x3b,0x00,0x04,0x00,0x85,0x01,0x00,0x00,0x86,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x88,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x99,0x01,0x00,0x00,0x03,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x9f,0x01,0x00,0x00, -0x51,0x00,0x00,0x00,0x58,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xa0,0x01,0x00,0x00, -0x84,0x00,0x00,0x00,0x9f,0x01,0x00,0x00,0x77,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xa1,0x01,0x00,0x00, -0x86,0x00,0x00,0x00,0xa0,0x01,0x00,0x00,0x6c,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa4,0x01,0x00,0x00, -0x08,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xa5,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xa8,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x77,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xc3,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xc4,0x01,0x00,0x00, -0xc4,0x00,0x00,0x00,0xc3,0x01,0x00,0x00,0x20,0x00,0x04,0x00, -0xc5,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0xc4,0x01,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xd5,0x01,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xf0,0x01,0x00,0x00, -0x84,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0xbc,0x00,0x00,0x00, -0x1c,0x00,0x04,0x00,0xf1,0x01,0x00,0x00,0xc4,0x00,0x00,0x00, -0xf0,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0xf2,0x01,0x00,0x00, -0x07,0x00,0x00,0x00,0xf1,0x01,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xfb,0x01,0x00,0x00,0x86,0x00,0x00,0x00, -0xb9,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x03,0x02,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x32,0x02,0x00,0x00,0x84,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x65,0x02,0x00,0x00,0x0d,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x6d,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0xb3,0x02,0x00,0x00, -0xc4,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0xb4,0x02,0x00,0x00, -0xb3,0x02,0x00,0x00,0x20,0x00,0x04,0x00,0xb5,0x02,0x00,0x00, -0x0c,0x00,0x00,0x00,0xb4,0x02,0x00,0x00,0x3b,0x00,0x04,0x00, -0xb5,0x02,0x00,0x00,0xb6,0x02,0x00,0x00,0x0c,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0xbb,0x02,0x00,0x00, -0x05,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xc8,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0xc9,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0xc5,0x01,0x00,0x00,0xc6,0x01,0x00,0x00, -0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xf2,0x01,0x00,0x00, -0xf3,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x17,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x17,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x1e,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x17,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x27,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x29,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x1e,0x00,0x00,0x00, -0x29,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x2e,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x2d,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x2f,0x00,0x00,0x00, -0x2e,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x30,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x2f,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x30,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x34,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x36,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x36,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x3a,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00, -0x3a,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x3b,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x47,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x3b,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x49,0x00,0x00,0x00, -0x3d,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x49,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x4d,0x00,0x00,0x00, -0x4c,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x4d,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x50,0x00,0x00,0x00, -0x54,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x59,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x58,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5d,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x5d,0x00,0x00,0x00, -0x63,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x68,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,0x67,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6e,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x72,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x79,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x78,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7e,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x81,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x83,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x47,0x00,0x00,0x00, -0x83,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x87,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x88,0x00,0x00,0x00, -0x87,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x8a,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8d,0x00,0x00,0x00, -0x8a,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x0c,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x26,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x8d,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x92,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x92,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x94,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x42,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x98,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x97,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x99,0x00,0x00,0x00, -0x98,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9a,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x99,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9b,0x00,0x00,0x00, -0x94,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,0x9b,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9e,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0xa3,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0xa3,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa5,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x4a,0x00,0x00,0x00, -0xa7,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0xaa,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0xa9,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xab,0x00,0x00,0x00, -0xaa,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xac,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0xab,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xad,0x00,0x00,0x00, -0xa5,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0xad,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xb0,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0x77,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xb2,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xde,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0x05,0x00,0x00,0x00, -0xd1,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0xde,0x02,0x00,0x00, -0xc1,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xb4,0x00,0x00,0x00, -0xb3,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xc3,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0xb4,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xb3,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0xcd,0x00,0x00,0x00,0xce,0x00,0x00,0x00,0xca,0x00,0x00,0x00, -0xde,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0xce,0x00,0x00,0x00, -0xcc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd1,0x00,0x00,0x00,0xde,0x02,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xb4,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd4,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xd4,0x00,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xf7,0x02,0x00,0x00,0xb0,0x00,0x00,0x00, -0xb4,0x00,0x00,0x00,0xaa,0x01,0x00,0x00,0xd7,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xf3,0x02,0x00,0x00, -0x9e,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0xa7,0x01,0x00,0x00, -0xd7,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xdf,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0xb4,0x00,0x00,0x00, -0x55,0x02,0x00,0x00,0xd7,0x00,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,0xdf,0x02,0x00,0x00, -0x8e,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xd6,0x00,0x00,0x00, -0xd7,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xdb,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0xd6,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xd5,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdd,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xef,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0x5d,0x01,0x00,0x00, -0xde,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0xe3,0x00,0x00,0x00,0xef,0x02,0x00,0x00,0x37,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xdf,0x00,0x00,0x00,0xde,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xe3,0x00,0x00,0x00, -0xde,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xde,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xe8,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0xef,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xeb,0x00,0x00,0x00, -0xe8,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xec,0x00,0x00,0x00,0xeb,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xed,0x00,0x00,0x00,0xf3,0x02,0x00,0x00,0xec,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xef,0x00,0x00,0x00, -0xed,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,0xe8,0x00,0x00,0x00, -0xf4,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xf7,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,0x6e,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfb,0x00,0x00,0x00, -0xef,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0xc7,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xef,0x00,0x00,0x00, -0xfe,0x00,0x00,0x00,0x41,0x00,0x07,0x00,0x0a,0x01,0x00,0x00, -0x0b,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0xfb,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x01,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,0x0b,0x01,0x00,0x00, -0x73,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x0d,0x01,0x00,0x00, -0x0c,0x01,0x00,0x00,0x41,0x00,0x07,0x00,0x0a,0x01,0x00,0x00, -0x10,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0xfb,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x01,0x01,0x00,0x00,0x11,0x01,0x00,0x00,0x10,0x01,0x00,0x00, -0x73,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x12,0x01,0x00,0x00, -0x11,0x01,0x00,0x00,0x41,0x00,0x07,0x00,0x15,0x01,0x00,0x00, -0x16,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0xfb,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x17,0x01,0x00,0x00,0x16,0x01,0x00,0x00, -0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1d,0x01,0x00,0x00, -0x17,0x01,0x00,0x00,0xff,0x00,0x00,0x00,0xc4,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x1e,0x01,0x00,0x00,0x1d,0x01,0x00,0x00, -0xa9,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x1f,0x01,0x00,0x00,0x1e,0x01,0x00,0x00,0xfa,0x00,0x00,0x00, -0x7c,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x20,0x01,0x00,0x00, -0x1f,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x24,0x01,0x00,0x00,0xff,0x00,0x00,0x00,0x23,0x01,0x00,0x00, -0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x25,0x01,0x00,0x00, -0x17,0x01,0x00,0x00,0x24,0x01,0x00,0x00,0xc7,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x26,0x01,0x00,0x00,0x25,0x01,0x00,0x00, -0xfa,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x27,0x01,0x00,0x00,0x26,0x01,0x00,0x00,0x41,0x00,0x08,0x00, -0x2c,0x01,0x00,0x00,0x2d,0x01,0x00,0x00,0x08,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0x97,0x00,0x00,0x00, -0xff,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x02,0x01,0x00,0x00, -0x2e,0x01,0x00,0x00,0x2d,0x01,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x2f,0x01,0x00,0x00,0x2e,0x01,0x00,0x00, -0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x34,0x01,0x00,0x00, -0x2f,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,0x7c,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x38,0x01,0x00,0x00,0x20,0x01,0x00,0x00, -0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x39,0x01,0x00,0x00, -0x34,0x01,0x00,0x00,0x38,0x01,0x00,0x00,0x70,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0x3a,0x01,0x00,0x00,0x39,0x01,0x00,0x00, -0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3c,0x01,0x00,0x00, -0x2f,0x01,0x00,0x00,0xa9,0x00,0x00,0x00,0x7c,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x3f,0x01,0x00,0x00,0x27,0x01,0x00,0x00, -0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x40,0x01,0x00,0x00, -0x3c,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,0x70,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0x41,0x01,0x00,0x00,0x40,0x01,0x00,0x00, -0x50,0x00,0x05,0x00,0x30,0x01,0x00,0x00,0x42,0x01,0x00,0x00, -0x3a,0x01,0x00,0x00,0x41,0x01,0x00,0x00,0x8e,0x00,0x05,0x00, -0x30,0x01,0x00,0x00,0x44,0x01,0x00,0x00,0x42,0x01,0x00,0x00, -0x0d,0x01,0x00,0x00,0x50,0x00,0x05,0x00,0x30,0x01,0x00,0x00, -0x46,0x01,0x00,0x00,0x12,0x01,0x00,0x00,0x12,0x01,0x00,0x00, -0x81,0x00,0x05,0x00,0x30,0x01,0x00,0x00,0x47,0x01,0x00,0x00, -0x44,0x01,0x00,0x00,0x46,0x01,0x00,0x00,0x51,0x00,0x05,0x00, -0xc4,0x00,0x00,0x00,0x4f,0x01,0x00,0x00,0x47,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x50,0x01,0x00,0x00, -0x51,0x01,0x00,0x00,0x4c,0x01,0x00,0x00,0xf7,0x00,0x00,0x00, -0x3e,0x00,0x03,0x00,0x51,0x01,0x00,0x00,0x4f,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x53,0x01,0x00,0x00, -0xf7,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0x51,0x00,0x05,0x00, -0xc4,0x00,0x00,0x00,0x55,0x01,0x00,0x00,0x47,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x50,0x01,0x00,0x00, -0x56,0x01,0x00,0x00,0x4c,0x01,0x00,0x00,0x53,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0x56,0x01,0x00,0x00,0x55,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5d,0x01,0x00,0x00, -0xef,0x02,0x00,0x00,0x5b,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x5f,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x5f,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xf0,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0xdf,0x00,0x00,0x00, -0xa3,0x01,0x00,0x00,0x60,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0x65,0x01,0x00,0x00,0xf0,0x02,0x00,0x00, -0xa7,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x61,0x01,0x00,0x00, -0x60,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x65,0x01,0x00,0x00,0x60,0x01,0x00,0x00,0x61,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x60,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x6a,0x01,0x00,0x00,0x7e,0x00,0x00,0x00, -0xf0,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x6d,0x01,0x00,0x00,0x6a,0x01,0x00,0x00,0xab,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6e,0x01,0x00,0x00, -0x6d,0x01,0x00,0x00,0x77,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x6f,0x01,0x00,0x00,0xf7,0x02,0x00,0x00, -0x6e,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x71,0x01,0x00,0x00,0x6f,0x01,0x00,0x00,0x79,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x77,0x01,0x00,0x00, -0x6a,0x01,0x00,0x00,0x76,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x79,0x01,0x00,0x00,0x79,0x00,0x00,0x00, -0x77,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x7a,0x01,0x00,0x00,0x77,0x01,0x00,0x00,0x79,0x01,0x00,0x00, -0x41,0x00,0x07,0x00,0x88,0x01,0x00,0x00,0x89,0x01,0x00,0x00, -0x86,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0x71,0x01,0x00,0x00, -0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0x8a,0x01,0x00,0x00,0x89,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x50,0x01,0x00,0x00,0x8b,0x01,0x00,0x00,0x7f,0x01,0x00,0x00, -0x7a,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x8b,0x01,0x00,0x00, -0x8a,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x8d,0x01,0x00,0x00,0x7a,0x01,0x00,0x00,0x39,0x00,0x00,0x00, -0x41,0x00,0x07,0x00,0x88,0x01,0x00,0x00,0x8f,0x01,0x00,0x00, -0x86,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0x71,0x01,0x00,0x00, -0x39,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0x90,0x01,0x00,0x00,0x8f,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x50,0x01,0x00,0x00,0x91,0x01,0x00,0x00,0x7f,0x01,0x00,0x00, -0x8d,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x91,0x01,0x00,0x00, -0x90,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x93,0x01,0x00,0x00,0x7a,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x41,0x00,0x07,0x00,0x88,0x01,0x00,0x00,0x95,0x01,0x00,0x00, -0x86,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0x71,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0x96,0x01,0x00,0x00,0x95,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x50,0x01,0x00,0x00,0x97,0x01,0x00,0x00,0x7f,0x01,0x00,0x00, -0x93,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x97,0x01,0x00,0x00, -0x96,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9a,0x01,0x00,0x00,0x7a,0x01,0x00,0x00,0x99,0x01,0x00,0x00, -0x41,0x00,0x07,0x00,0x88,0x01,0x00,0x00,0x9c,0x01,0x00,0x00, -0x86,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0x71,0x01,0x00,0x00, -0x99,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0x9d,0x01,0x00,0x00,0x9c,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x50,0x01,0x00,0x00,0x9e,0x01,0x00,0x00,0x7f,0x01,0x00,0x00, -0x9a,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x9e,0x01,0x00,0x00, -0x9d,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa3,0x01,0x00,0x00,0xf0,0x02,0x00,0x00,0xa1,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0x5f,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x61,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0xa4,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa7,0x01,0x00,0x00,0xf3,0x02,0x00,0x00, -0xa5,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xaa,0x01,0x00,0x00,0xf7,0x02,0x00,0x00,0xa8,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xac,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xac,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xf9,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0x61,0x01,0x00,0x00, -0x53,0x02,0x00,0x00,0xaf,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0xb2,0x01,0x00,0x00,0xf9,0x02,0x00,0x00, -0x6c,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xae,0x01,0x00,0x00, -0xaf,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xb2,0x01,0x00,0x00,0xad,0x01,0x00,0x00,0xae,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xad,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xb4,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xb4,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xfd,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0xad,0x01,0x00,0x00,0xdf,0x01,0x00,0x00, -0xb7,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0xba,0x01,0x00,0x00,0xfd,0x02,0x00,0x00,0x60,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xb6,0x01,0x00,0x00,0xb7,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xba,0x01,0x00,0x00, -0xb5,0x01,0x00,0x00,0xb6,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xb5,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xbc,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xbc,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x0f,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0xb5,0x01,0x00,0x00,0xdd,0x01,0x00,0x00,0xbd,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xc2,0x01,0x00,0x00, -0x0f,0x03,0x00,0x00,0x62,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xbe,0x01,0x00,0x00,0xbd,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xc2,0x01,0x00,0x00,0xbd,0x01,0x00,0x00, -0xbe,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xbd,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc8,0x01,0x00,0x00, -0xfd,0x02,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xca,0x01,0x00,0x00,0xc8,0x01,0x00,0x00, -0x0f,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xcc,0x01,0x00,0x00,0x55,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xce,0x01,0x00,0x00, -0xfd,0x02,0x00,0x00,0x61,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xcf,0x01,0x00,0x00,0xcc,0x01,0x00,0x00, -0xce,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd1,0x01,0x00,0x00,0x64,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd2,0x01,0x00,0x00, -0xcf,0x01,0x00,0x00,0xd1,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xd4,0x01,0x00,0x00,0xd2,0x01,0x00,0x00, -0x0f,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd6,0x01,0x00,0x00,0xd4,0x01,0x00,0x00,0xd5,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd8,0x01,0x00,0x00, -0xd6,0x01,0x00,0x00,0xf9,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0x50,0x01,0x00,0x00,0xd9,0x01,0x00,0x00,0x4c,0x01,0x00,0x00, -0xd8,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0xda,0x01,0x00,0x00,0xd9,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0xcd,0x00,0x00,0x00,0xdb,0x01,0x00,0x00,0xc6,0x01,0x00,0x00, -0xca,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xdb,0x01,0x00,0x00, -0xda,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xdd,0x01,0x00,0x00,0x0f,0x03,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xbc,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xbe,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xb7,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xb7,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xdf,0x01,0x00,0x00,0xfd,0x02,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb4,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xb6,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xe1,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xe1,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xfe,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0xb6,0x01,0x00,0x00,0x0d,0x02,0x00,0x00, -0xe4,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0xe7,0x01,0x00,0x00,0xfe,0x02,0x00,0x00,0xbf,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xe3,0x01,0x00,0x00,0xe4,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xe7,0x01,0x00,0x00, -0xe2,0x01,0x00,0x00,0xe3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xe2,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xe9,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xe9,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x0c,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0xe2,0x01,0x00,0x00,0x0b,0x02,0x00,0x00,0xea,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xef,0x01,0x00,0x00, -0x0c,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xeb,0x01,0x00,0x00,0xea,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xef,0x01,0x00,0x00,0xea,0x01,0x00,0x00, -0xeb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xea,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf5,0x01,0x00,0x00, -0xfe,0x02,0x00,0x00,0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xf7,0x01,0x00,0x00,0xf5,0x01,0x00,0x00, -0x0c,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xf9,0x01,0x00,0x00,0x59,0x00,0x00,0x00,0xb9,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfc,0x01,0x00,0x00, -0xfe,0x02,0x00,0x00,0xfb,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xfd,0x01,0x00,0x00,0xf9,0x01,0x00,0x00, -0xfc,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xff,0x01,0x00,0x00,0x68,0x00,0x00,0x00,0xbc,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x00,0x02,0x00,0x00, -0xfd,0x01,0x00,0x00,0xff,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x02,0x02,0x00,0x00,0x00,0x02,0x00,0x00, -0x0c,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x04,0x02,0x00,0x00,0x02,0x02,0x00,0x00,0x03,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x06,0x02,0x00,0x00, -0x04,0x02,0x00,0x00,0xf9,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0x50,0x01,0x00,0x00,0x07,0x02,0x00,0x00,0x7f,0x01,0x00,0x00, -0x06,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0x08,0x02,0x00,0x00,0x07,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0xcd,0x00,0x00,0x00,0x09,0x02,0x00,0x00,0xf3,0x01,0x00,0x00, -0xf7,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x09,0x02,0x00,0x00, -0x08,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x0b,0x02,0x00,0x00,0x0c,0x03,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xe9,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xeb,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xe4,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xe4,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x0d,0x02,0x00,0x00,0xfe,0x02,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xe1,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xe3,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0x0f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x0f,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xff,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0xe3,0x01,0x00,0x00,0x51,0x02,0x00,0x00, -0x12,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0x15,0x02,0x00,0x00,0xff,0x02,0x00,0x00,0xbf,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x11,0x02,0x00,0x00,0x12,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x15,0x02,0x00,0x00, -0x10,0x02,0x00,0x00,0x11,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x10,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x17,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x17,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x03,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0x10,0x02,0x00,0x00,0x4f,0x02,0x00,0x00,0x1a,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x1d,0x02,0x00,0x00, -0x03,0x03,0x00,0x00,0x60,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x19,0x02,0x00,0x00,0x1a,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x1d,0x02,0x00,0x00,0x18,0x02,0x00,0x00, -0x19,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x18,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x1f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x1f,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x05,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0x18,0x02,0x00,0x00, -0x4d,0x02,0x00,0x00,0x22,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0x25,0x02,0x00,0x00,0x05,0x03,0x00,0x00, -0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x21,0x02,0x00,0x00, -0x22,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x25,0x02,0x00,0x00,0x20,0x02,0x00,0x00,0x21,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x20,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x27,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x27,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x07,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0x20,0x02,0x00,0x00,0x4b,0x02,0x00,0x00, -0x28,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0x2d,0x02,0x00,0x00,0x07,0x03,0x00,0x00,0x62,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x29,0x02,0x00,0x00,0x28,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x2d,0x02,0x00,0x00, -0x28,0x02,0x00,0x00,0x29,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x28,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x2f,0x02,0x00,0x00,0xff,0x02,0x00,0x00,0xbc,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x31,0x02,0x00,0x00, -0x2f,0x02,0x00,0x00,0x05,0x03,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x33,0x02,0x00,0x00,0x31,0x02,0x00,0x00, -0x32,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x35,0x02,0x00,0x00,0x03,0x03,0x00,0x00,0x62,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x36,0x02,0x00,0x00, -0x33,0x02,0x00,0x00,0x35,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x38,0x02,0x00,0x00,0x36,0x02,0x00,0x00, -0x07,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x3c,0x02,0x00,0x00,0x35,0x02,0x00,0x00,0x07,0x03,0x00,0x00, -0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,0x3d,0x02,0x00,0x00, -0xc6,0x01,0x00,0x00,0x3c,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0x3e,0x02,0x00,0x00,0x3d,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,0x43,0x02,0x00,0x00, -0xf3,0x01,0x00,0x00,0x31,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0x44,0x02,0x00,0x00,0x43,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,0x46,0x02,0x00,0x00, -0xca,0x00,0x00,0x00,0x38,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0x47,0x02,0x00,0x00,0x46,0x02,0x00,0x00, -0x0c,0x00,0x08,0x00,0xc4,0x00,0x00,0x00,0x48,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x3e,0x02,0x00,0x00, -0x44,0x02,0x00,0x00,0x47,0x02,0x00,0x00,0x3e,0x00,0x03,0x00, -0x46,0x02,0x00,0x00,0x48,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x4b,0x02,0x00,0x00,0x07,0x03,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x27,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x29,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x22,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x22,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4d,0x02,0x00,0x00, -0x05,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x1f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x21,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x1a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x1a,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x4f,0x02,0x00,0x00,0x03,0x03,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x17,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x19,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x12,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x12,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x51,0x02,0x00,0x00,0xff,0x02,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x0f,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x11,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0xaf,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xaf,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x53,0x02,0x00,0x00, -0xf9,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xac,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xae,0x01,0x00,0x00, -0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0xa4,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xd7,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xd7,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x55,0x02,0x00,0x00,0xdf,0x02,0x00,0x00, -0x6c,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd4,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xd6,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x5a,0x02,0x00,0x00,0x55,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x5b,0x02,0x00,0x00,0x96,0x00,0x00,0x00,0x5a,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x60,0x02,0x00,0x00, -0x59,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x61,0x02,0x00,0x00,0xa8,0x00,0x00,0x00, -0x60,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x66,0x02,0x00,0x00,0x12,0x00,0x00,0x00,0x65,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x67,0x02,0x00,0x00, -0x66,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x68,0x02,0x00,0x00,0x0f,0x00,0x00,0x00,0x67,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6c,0x02,0x00,0x00, -0x47,0x00,0x00,0x00,0x67,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0x6e,0x02,0x00,0x00,0x6d,0x02,0x00,0x00, -0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x6f,0x02,0x00,0x00,0x6e,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x70,0x02,0x00,0x00,0x6c,0x02,0x00,0x00, -0x6f,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x71,0x02,0x00,0x00,0x68,0x02,0x00,0x00,0x70,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x73,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x73,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xe0,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0xd6,0x00,0x00,0x00, -0xd9,0x02,0x00,0x00,0x76,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0x79,0x02,0x00,0x00,0xe0,0x02,0x00,0x00, -0xbf,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x75,0x02,0x00,0x00, -0x76,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x79,0x02,0x00,0x00,0x74,0x02,0x00,0x00,0x75,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x74,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x7b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x7b,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xe1,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0x74,0x02,0x00,0x00,0xd7,0x02,0x00,0x00, -0x7e,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0x81,0x02,0x00,0x00,0xe1,0x02,0x00,0x00,0x60,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x7d,0x02,0x00,0x00,0x7e,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x81,0x02,0x00,0x00, -0x7c,0x02,0x00,0x00,0x7d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x7c,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x85,0x02,0x00,0x00,0xe1,0x02,0x00,0x00,0x61,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x86,0x02,0x00,0x00, -0x5b,0x02,0x00,0x00,0x85,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x88,0x02,0x00,0x00,0x64,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x89,0x02,0x00,0x00,0x86,0x02,0x00,0x00,0x88,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8d,0x02,0x00,0x00, -0xe0,0x02,0x00,0x00,0xfb,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x8e,0x02,0x00,0x00,0x61,0x02,0x00,0x00, -0x8d,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x90,0x02,0x00,0x00,0x68,0x00,0x00,0x00,0xbc,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x91,0x02,0x00,0x00, -0x8e,0x02,0x00,0x00,0x90,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x93,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x93,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xe3,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0x7c,0x02,0x00,0x00,0xd5,0x02,0x00,0x00, -0x96,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0x99,0x02,0x00,0x00,0xe3,0x02,0x00,0x00,0xbc,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x95,0x02,0x00,0x00,0x96,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x99,0x02,0x00,0x00, -0x94,0x02,0x00,0x00,0x95,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x94,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x9b,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x9b,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xe5,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0x94,0x02,0x00,0x00,0xd3,0x02,0x00,0x00,0x9e,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xa1,0x02,0x00,0x00, -0xe5,0x02,0x00,0x00,0x62,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x9d,0x02,0x00,0x00,0x9e,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xa1,0x02,0x00,0x00,0x9c,0x02,0x00,0x00, -0x9d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x9c,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa4,0x02,0x00,0x00, -0x89,0x02,0x00,0x00,0xe5,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0xa7,0x02,0x00,0x00,0xa4,0x02,0x00,0x00, -0x36,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0xa9,0x02,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xa7,0x02,0x00,0x00, -0xa8,0x02,0x00,0x00,0xa9,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xa8,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xac,0x02,0x00,0x00,0x91,0x02,0x00,0x00,0xe3,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0xad,0x02,0x00,0x00, -0x12,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xae,0x02,0x00,0x00,0xad,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xaf,0x02,0x00,0x00, -0xac,0x02,0x00,0x00,0xae,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0xa9,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xa9,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0xc2,0x00,0x00,0x00,0xb0,0x02,0x00,0x00, -0xa7,0x02,0x00,0x00,0x9c,0x02,0x00,0x00,0xaf,0x02,0x00,0x00, -0xa8,0x02,0x00,0x00,0xf7,0x00,0x03,0x00,0xb2,0x02,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xb0,0x02,0x00,0x00, -0xb1,0x02,0x00,0x00,0xb2,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xb1,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xba,0x02,0x00,0x00,0x91,0x02,0x00,0x00,0xe3,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0xbc,0x02,0x00,0x00, -0x12,0x00,0x00,0x00,0xbb,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xbd,0x02,0x00,0x00,0xbc,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbe,0x02,0x00,0x00, -0xba,0x02,0x00,0x00,0xbd,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xbf,0x02,0x00,0x00,0x71,0x02,0x00,0x00, -0xbe,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xc1,0x02,0x00,0x00,0xbf,0x02,0x00,0x00,0x89,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc3,0x02,0x00,0x00, -0xc1,0x02,0x00,0x00,0xe5,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xc5,0x02,0x00,0x00,0xe0,0x02,0x00,0x00, -0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xc7,0x02,0x00,0x00,0xc5,0x02,0x00,0x00,0xe3,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc9,0x02,0x00,0x00, -0xc7,0x02,0x00,0x00,0xc8,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xcb,0x02,0x00,0x00,0xe1,0x02,0x00,0x00, -0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xcc,0x02,0x00,0x00,0xc9,0x02,0x00,0x00,0xcb,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xce,0x02,0x00,0x00, -0xcc,0x02,0x00,0x00,0xe5,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0xcd,0x00,0x00,0x00,0xcf,0x02,0x00,0x00,0xca,0x00,0x00,0x00, -0xce,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0xd0,0x02,0x00,0x00,0xcf,0x02,0x00,0x00,0x41,0x00,0x06,0x00, -0x88,0x01,0x00,0x00,0xd1,0x02,0x00,0x00,0xb6,0x02,0x00,0x00, -0x34,0x00,0x00,0x00,0xc3,0x02,0x00,0x00,0x3e,0x00,0x03,0x00, -0xd1,0x02,0x00,0x00,0xd0,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0xb2,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xb2,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x9e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x9e,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd3,0x02,0x00,0x00,0xe5,0x02,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x9b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x9d,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x96,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x96,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xd5,0x02,0x00,0x00,0xe3,0x02,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x93,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x95,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x7e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x7e,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd7,0x02,0x00,0x00, -0xe1,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x7b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x7d,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x76,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x76,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd9,0x02,0x00,0x00,0xe0,0x02,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x73,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x75,0x02,0x00,0x00,0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00, - -}; -const uint64_t matmul_q5_1_f32_aligned_fp32_len = 10800; - -unsigned char matmul_q5_1_f32_fp32_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0x10,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00, -0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00, -0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64, -0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00, -0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0f,0x00,0x0f,0x00, -0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e, -0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x3d,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x07,0x01,0x00,0x00, -0x4b,0x01,0x00,0x00,0x7c,0x01,0x00,0x00,0x87,0x01,0x00,0x00, -0x6d,0x02,0x00,0x00,0xb6,0x02,0x00,0x00,0x10,0x00,0x06,0x00, -0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x34,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x10,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x37,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x3d,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x4c,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x4f,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x53,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x60,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x62,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x6c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xa6,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xb8,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xbb,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x02,0x01,0x00,0x00,0x06,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x03,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x03,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x03,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x03,0x01,0x00,0x00, -0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x04,0x01,0x00,0x00,0x06,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x05,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x05,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x05,0x01,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x07,0x01,0x00,0x00, -0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x07,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x56,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x57,0x01,0x00,0x00, -0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x84,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x04,0x00,0x85,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x85,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0x85,0x01,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x87,0x01,0x00,0x00,0x22,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x87,0x01,0x00,0x00, -0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x6d,0x02,0x00,0x00,0x0b,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xb3,0x02,0x00,0x00,0x06,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0xb4,0x02,0x00,0x00, -0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0xb4,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0xb4,0x02,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xb6,0x02,0x00,0x00, -0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xb6,0x02,0x00,0x00,0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00, -0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x1e,0x00,0x10,0x00, -0x10,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x11,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x11,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x15,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x0a,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x27,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x2d,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x3e,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x4c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x54,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x58,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x63,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x67,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x6d,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x72,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x77,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x7c,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x80,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x90,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x96,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa6,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0xa8,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0xb8,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xba,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xbb,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xbc,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xba,0x00,0x00,0x00, -0xbb,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xbd,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xbc,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xbe,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0xb9,0x00,0x00,0x00, -0xbd,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xbf,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xb7,0x00,0x00,0x00, -0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xc0,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xbf,0x00,0x00,0x00, -0xbb,0x00,0x00,0x00,0x14,0x00,0x02,0x00,0xc1,0x00,0x00,0x00, -0x16,0x00,0x03,0x00,0xc3,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc4,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0xbe,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0xbb,0x00,0x00,0x00, -0x1c,0x00,0x04,0x00,0xc7,0x00,0x00,0x00,0xc3,0x00,0x00,0x00, -0xc6,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xc8,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0xc3,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0xcc,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0xc3,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0xcf,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xf3,0x00,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xfd,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0x00,0x01,0x00,0x00, -0x10,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x01,0x01,0x00,0x00, -0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1c,0x00,0x04,0x00, -0x02,0x01,0x00,0x00,0x01,0x01,0x00,0x00,0xf9,0x00,0x00,0x00, -0x1e,0x00,0x06,0x00,0x03,0x01,0x00,0x00,0x00,0x01,0x00,0x00, -0x00,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x02,0x01,0x00,0x00, -0x1d,0x00,0x03,0x00,0x04,0x01,0x00,0x00,0x03,0x01,0x00,0x00, -0x1e,0x00,0x03,0x00,0x05,0x01,0x00,0x00,0x04,0x01,0x00,0x00, -0x20,0x00,0x04,0x00,0x06,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x05,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x06,0x01,0x00,0x00, -0x07,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x09,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x00,0x01,0x00,0x00, -0x20,0x00,0x04,0x00,0x14,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x22,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x2b,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x01,0x01,0x00,0x00, -0x17,0x00,0x04,0x00,0x2f,0x01,0x00,0x00,0xc3,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x47,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x48,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x47,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,0x49,0x01,0x00,0x00, -0xc3,0x00,0x00,0x00,0x48,0x01,0x00,0x00,0x20,0x00,0x04,0x00, -0x4a,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x49,0x01,0x00,0x00, -0x3b,0x00,0x04,0x00,0x4a,0x01,0x00,0x00,0x4b,0x01,0x00,0x00, -0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x4f,0x01,0x00,0x00, -0x04,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x56,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0x33,0x00,0x06,0x00,0x09,0x00,0x00,0x00,0x57,0x01,0x00,0x00, -0x56,0x01,0x00,0x00,0x39,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x58,0x01,0x00,0x00, -0x51,0x00,0x00,0x00,0x57,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x59,0x01,0x00,0x00, -0x84,0x00,0x00,0x00,0x58,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x5a,0x01,0x00,0x00, -0x86,0x00,0x00,0x00,0x59,0x01,0x00,0x00,0x6c,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x78,0x01,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x79,0x01,0x00,0x00, -0x84,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,0x78,0x01,0x00,0x00, -0x1c,0x00,0x04,0x00,0x7a,0x01,0x00,0x00,0xc3,0x00,0x00,0x00, -0x79,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x7b,0x01,0x00,0x00, -0x04,0x00,0x00,0x00,0x7a,0x01,0x00,0x00,0x3b,0x00,0x04,0x00, -0x7b,0x01,0x00,0x00,0x7c,0x01,0x00,0x00,0x04,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x80,0x01,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x1d,0x00,0x03,0x00,0x84,0x01,0x00,0x00,0xc3,0x00,0x00,0x00, -0x1e,0x00,0x03,0x00,0x85,0x01,0x00,0x00,0x84,0x01,0x00,0x00, -0x20,0x00,0x04,0x00,0x86,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x85,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x86,0x01,0x00,0x00, -0x87,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x92,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0xc3,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x9a,0x01,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x9f,0x01,0x00,0x00, -0x51,0x00,0x00,0x00,0x57,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xa0,0x01,0x00,0x00, -0x84,0x00,0x00,0x00,0x9f,0x01,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xa1,0x01,0x00,0x00, -0x86,0x00,0x00,0x00,0xa0,0x01,0x00,0x00,0x6c,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa4,0x01,0x00,0x00, -0x08,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xa5,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xa8,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xc3,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xc4,0x01,0x00,0x00, -0xc3,0x00,0x00,0x00,0xc3,0x01,0x00,0x00,0x20,0x00,0x04,0x00, -0xc5,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0xc4,0x01,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xd5,0x01,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xf0,0x01,0x00,0x00, -0x84,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0xbb,0x00,0x00,0x00, -0x1c,0x00,0x04,0x00,0xf1,0x01,0x00,0x00,0xc3,0x00,0x00,0x00, -0xf0,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0xf2,0x01,0x00,0x00, -0x07,0x00,0x00,0x00,0xf1,0x01,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xfb,0x01,0x00,0x00,0x86,0x00,0x00,0x00, -0xb8,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x03,0x02,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x32,0x02,0x00,0x00,0x84,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x65,0x02,0x00,0x00,0x0d,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x6d,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0xb3,0x02,0x00,0x00, -0xc3,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0xb4,0x02,0x00,0x00, -0xb3,0x02,0x00,0x00,0x20,0x00,0x04,0x00,0xb5,0x02,0x00,0x00, -0x0c,0x00,0x00,0x00,0xb4,0x02,0x00,0x00,0x3b,0x00,0x04,0x00, -0xb5,0x02,0x00,0x00,0xb6,0x02,0x00,0x00,0x0c,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0xbb,0x02,0x00,0x00, -0x05,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xc8,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0xc8,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0xc5,0x01,0x00,0x00,0xc6,0x01,0x00,0x00, -0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xf2,0x01,0x00,0x00, -0xf3,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x17,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x17,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x1e,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x17,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x27,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x29,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x1e,0x00,0x00,0x00, -0x29,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x2e,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x2d,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x2f,0x00,0x00,0x00, -0x2e,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x30,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x2f,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x30,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x34,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x36,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x36,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x3a,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00, -0x3a,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x3b,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x47,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x3b,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x49,0x00,0x00,0x00, -0x3d,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x49,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x4d,0x00,0x00,0x00, -0x4c,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x4d,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x50,0x00,0x00,0x00, -0x54,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x59,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x58,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5d,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x5d,0x00,0x00,0x00, -0x63,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x68,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,0x67,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6e,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x72,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x78,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x77,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7d,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x80,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x82,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x47,0x00,0x00,0x00, -0x82,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x85,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x87,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x89,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8c,0x00,0x00,0x00, -0x89,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x0c,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x26,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x8c,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x91,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x90,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x91,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x93,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0x42,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x97,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x96,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x98,0x00,0x00,0x00, -0x97,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x99,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0x98,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9a,0x00,0x00,0x00, -0x93,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0x9a,0x00,0x00,0x00, -0x83,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9d,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0xa2,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0xa2,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0x4a,0x00,0x00,0x00, -0xa6,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0xa9,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0xa8,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xaa,0x00,0x00,0x00, -0xa9,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xab,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0xaa,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00, -0xa4,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0xac,0x00,0x00,0x00, -0x83,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xaf,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xb1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xb1,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xde,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0x05,0x00,0x00,0x00, -0xd0,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,0xde,0x02,0x00,0x00, -0xc0,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xb3,0x00,0x00,0x00, -0xb2,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xc2,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0xb3,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0xcc,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,0xc9,0x00,0x00,0x00, -0xde,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0xcd,0x00,0x00,0x00, -0xcb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd0,0x00,0x00,0x00,0xde,0x02,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xb1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xb3,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd3,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xd3,0x00,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xf7,0x02,0x00,0x00,0xaf,0x00,0x00,0x00, -0xb3,0x00,0x00,0x00,0xaa,0x01,0x00,0x00,0xd6,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xf3,0x02,0x00,0x00, -0x9d,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0xa7,0x01,0x00,0x00, -0xd6,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xdf,0x02,0x00,0x00,0x83,0x00,0x00,0x00,0xb3,0x00,0x00,0x00, -0x55,0x02,0x00,0x00,0xd6,0x00,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0xda,0x00,0x00,0x00,0xdf,0x02,0x00,0x00, -0x8d,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xd5,0x00,0x00,0x00, -0xd6,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xda,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,0xd5,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xd4,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xdc,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdc,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xef,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,0x5c,0x01,0x00,0x00, -0xdd,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0xe2,0x00,0x00,0x00,0xef,0x02,0x00,0x00,0x37,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xde,0x00,0x00,0x00,0xdd,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xe2,0x00,0x00,0x00, -0xdd,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xdd,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xe7,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0xef,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xea,0x00,0x00,0x00, -0xe7,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,0xea,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xec,0x00,0x00,0x00,0xf3,0x02,0x00,0x00,0xeb,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xee,0x00,0x00,0x00, -0xec,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,0xe7,0x00,0x00,0x00, -0xf3,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xf6,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,0x6e,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfa,0x00,0x00,0x00, -0xee,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,0xc7,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0xee,0x00,0x00,0x00, -0xfd,0x00,0x00,0x00,0x41,0x00,0x07,0x00,0x09,0x01,0x00,0x00, -0x0a,0x01,0x00,0x00,0x07,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0xfa,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x00,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,0x0a,0x01,0x00,0x00, -0x73,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x0c,0x01,0x00,0x00, -0x0b,0x01,0x00,0x00,0x41,0x00,0x07,0x00,0x09,0x01,0x00,0x00, -0x0f,0x01,0x00,0x00,0x07,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0xfa,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x00,0x01,0x00,0x00,0x10,0x01,0x00,0x00,0x0f,0x01,0x00,0x00, -0x73,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x11,0x01,0x00,0x00, -0x10,0x01,0x00,0x00,0x41,0x00,0x07,0x00,0x14,0x01,0x00,0x00, -0x15,0x01,0x00,0x00,0x07,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0xfa,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x16,0x01,0x00,0x00,0x15,0x01,0x00,0x00, -0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1c,0x01,0x00,0x00, -0x16,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,0xc4,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x1d,0x01,0x00,0x00,0x1c,0x01,0x00,0x00, -0xa8,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x1e,0x01,0x00,0x00,0x1d,0x01,0x00,0x00,0xf9,0x00,0x00,0x00, -0x7c,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x1f,0x01,0x00,0x00, -0x1e,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x23,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,0x22,0x01,0x00,0x00, -0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x24,0x01,0x00,0x00, -0x16,0x01,0x00,0x00,0x23,0x01,0x00,0x00,0xc7,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x25,0x01,0x00,0x00,0x24,0x01,0x00,0x00, -0xf9,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x26,0x01,0x00,0x00,0x25,0x01,0x00,0x00,0x41,0x00,0x08,0x00, -0x2b,0x01,0x00,0x00,0x2c,0x01,0x00,0x00,0x07,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0x96,0x00,0x00,0x00, -0xfe,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x01,0x01,0x00,0x00, -0x2d,0x01,0x00,0x00,0x2c,0x01,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x2e,0x01,0x00,0x00,0x2d,0x01,0x00,0x00, -0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x33,0x01,0x00,0x00, -0x2e,0x01,0x00,0x00,0xfd,0x00,0x00,0x00,0x7c,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x37,0x01,0x00,0x00,0x1f,0x01,0x00,0x00, -0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x38,0x01,0x00,0x00, -0x33,0x01,0x00,0x00,0x37,0x01,0x00,0x00,0x70,0x00,0x04,0x00, -0xc3,0x00,0x00,0x00,0x39,0x01,0x00,0x00,0x38,0x01,0x00,0x00, -0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3b,0x01,0x00,0x00, -0x2e,0x01,0x00,0x00,0xa8,0x00,0x00,0x00,0x7c,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x3e,0x01,0x00,0x00,0x26,0x01,0x00,0x00, -0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3f,0x01,0x00,0x00, -0x3b,0x01,0x00,0x00,0x3e,0x01,0x00,0x00,0x70,0x00,0x04,0x00, -0xc3,0x00,0x00,0x00,0x40,0x01,0x00,0x00,0x3f,0x01,0x00,0x00, -0x50,0x00,0x05,0x00,0x2f,0x01,0x00,0x00,0x41,0x01,0x00,0x00, -0x39,0x01,0x00,0x00,0x40,0x01,0x00,0x00,0x8e,0x00,0x05,0x00, -0x2f,0x01,0x00,0x00,0x43,0x01,0x00,0x00,0x41,0x01,0x00,0x00, -0x0c,0x01,0x00,0x00,0x50,0x00,0x05,0x00,0x2f,0x01,0x00,0x00, -0x45,0x01,0x00,0x00,0x11,0x01,0x00,0x00,0x11,0x01,0x00,0x00, -0x81,0x00,0x05,0x00,0x2f,0x01,0x00,0x00,0x46,0x01,0x00,0x00, -0x43,0x01,0x00,0x00,0x45,0x01,0x00,0x00,0x51,0x00,0x05,0x00, -0xc3,0x00,0x00,0x00,0x4e,0x01,0x00,0x00,0x46,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x4f,0x01,0x00,0x00, -0x50,0x01,0x00,0x00,0x4b,0x01,0x00,0x00,0xf6,0x00,0x00,0x00, -0x3e,0x00,0x03,0x00,0x50,0x01,0x00,0x00,0x4e,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x52,0x01,0x00,0x00, -0xf6,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,0x51,0x00,0x05,0x00, -0xc3,0x00,0x00,0x00,0x54,0x01,0x00,0x00,0x46,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x4f,0x01,0x00,0x00, -0x55,0x01,0x00,0x00,0x4b,0x01,0x00,0x00,0x52,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0x55,0x01,0x00,0x00,0x54,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5c,0x01,0x00,0x00, -0xef,0x02,0x00,0x00,0x5a,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xdc,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x5e,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x5e,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xf0,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0xde,0x00,0x00,0x00, -0xa3,0x01,0x00,0x00,0x61,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0x64,0x01,0x00,0x00,0xf0,0x02,0x00,0x00, -0xa6,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x60,0x01,0x00,0x00, -0x61,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x64,0x01,0x00,0x00,0x5f,0x01,0x00,0x00,0x60,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x5f,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x68,0x01,0x00,0x00,0xa7,0x00,0x00,0x00, -0x7d,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x6a,0x01,0x00,0x00,0x68,0x01,0x00,0x00,0xf0,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x6b,0x01,0x00,0x00, -0x12,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x6c,0x01,0x00,0x00,0x6b,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x6d,0x01,0x00,0x00, -0x6a,0x01,0x00,0x00,0x6c,0x01,0x00,0x00,0xf7,0x00,0x03,0x00, -0x6f,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x6d,0x01,0x00,0x00,0x6e,0x01,0x00,0x00,0x6f,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x6e,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x72,0x01,0x00,0x00,0xdf,0x02,0x00,0x00, -0x78,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0x74,0x01,0x00,0x00,0x72,0x01,0x00,0x00,0x8d,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x6f,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x6f,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0xc1,0x00,0x00,0x00, -0x75,0x01,0x00,0x00,0x6d,0x01,0x00,0x00,0x5f,0x01,0x00,0x00, -0x74,0x01,0x00,0x00,0x6e,0x01,0x00,0x00,0xf7,0x00,0x03,0x00, -0x77,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x75,0x01,0x00,0x00,0x76,0x01,0x00,0x00,0x96,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x76,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x7f,0x01,0x00,0x00,0x7d,0x00,0x00,0x00, -0xf0,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x81,0x01,0x00,0x00,0x7f,0x01,0x00,0x00,0x80,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x83,0x01,0x00,0x00, -0x81,0x01,0x00,0x00,0x78,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x8e,0x01,0x00,0x00,0x7f,0x01,0x00,0x00, -0xaa,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x8f,0x01,0x00,0x00,0xf7,0x02,0x00,0x00,0x8e,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x91,0x01,0x00,0x00, -0x8f,0x01,0x00,0x00,0x78,0x00,0x00,0x00,0x41,0x00,0x06,0x00, -0x92,0x01,0x00,0x00,0x93,0x01,0x00,0x00,0x87,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0x91,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc3,0x00,0x00,0x00,0x94,0x01,0x00,0x00,0x93,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x4f,0x01,0x00,0x00,0x95,0x01,0x00,0x00, -0x7c,0x01,0x00,0x00,0x83,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0x95,0x01,0x00,0x00,0x94,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0x77,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x96,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x99,0x01,0x00,0x00, -0x7d,0x00,0x00,0x00,0xf0,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9b,0x01,0x00,0x00,0x99,0x01,0x00,0x00, -0x9a,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9d,0x01,0x00,0x00,0x9b,0x01,0x00,0x00,0x78,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x4f,0x01,0x00,0x00,0x9e,0x01,0x00,0x00, -0x7c,0x01,0x00,0x00,0x9d,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0x9e,0x01,0x00,0x00,0xcb,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x77,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x77,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0x61,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x61,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa3,0x01,0x00,0x00,0xf0,0x02,0x00,0x00,0xa1,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0x5e,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x60,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0xa4,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa7,0x01,0x00,0x00,0xf3,0x02,0x00,0x00, -0xa5,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xaa,0x01,0x00,0x00,0xf7,0x02,0x00,0x00,0xa8,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xac,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xac,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xf9,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0x60,0x01,0x00,0x00, -0x53,0x02,0x00,0x00,0xaf,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0xb2,0x01,0x00,0x00,0xf9,0x02,0x00,0x00, -0x6c,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xae,0x01,0x00,0x00, -0xaf,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xb2,0x01,0x00,0x00,0xad,0x01,0x00,0x00,0xae,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xad,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xb4,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xb4,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xfd,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0xad,0x01,0x00,0x00,0xdf,0x01,0x00,0x00, -0xb7,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0xba,0x01,0x00,0x00,0xfd,0x02,0x00,0x00,0x60,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xb6,0x01,0x00,0x00,0xb7,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xba,0x01,0x00,0x00, -0xb5,0x01,0x00,0x00,0xb6,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xb5,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xbc,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xbc,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x0f,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0xb5,0x01,0x00,0x00,0xdd,0x01,0x00,0x00,0xbd,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xc2,0x01,0x00,0x00, -0x0f,0x03,0x00,0x00,0x62,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xbe,0x01,0x00,0x00,0xbd,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xc2,0x01,0x00,0x00,0xbd,0x01,0x00,0x00, -0xbe,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xbd,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc8,0x01,0x00,0x00, -0xfd,0x02,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xca,0x01,0x00,0x00,0xc8,0x01,0x00,0x00, -0x0f,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xcc,0x01,0x00,0x00,0x55,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xce,0x01,0x00,0x00, -0xfd,0x02,0x00,0x00,0x61,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xcf,0x01,0x00,0x00,0xcc,0x01,0x00,0x00, -0xce,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd1,0x01,0x00,0x00,0x64,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd2,0x01,0x00,0x00, -0xcf,0x01,0x00,0x00,0xd1,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xd4,0x01,0x00,0x00,0xd2,0x01,0x00,0x00, -0x0f,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd6,0x01,0x00,0x00,0xd4,0x01,0x00,0x00,0xd5,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd8,0x01,0x00,0x00, -0xd6,0x01,0x00,0x00,0xf9,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0x4f,0x01,0x00,0x00,0xd9,0x01,0x00,0x00,0x4b,0x01,0x00,0x00, -0xd8,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00, -0xda,0x01,0x00,0x00,0xd9,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0xcc,0x00,0x00,0x00,0xdb,0x01,0x00,0x00,0xc6,0x01,0x00,0x00, -0xca,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xdb,0x01,0x00,0x00, -0xda,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xdd,0x01,0x00,0x00,0x0f,0x03,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xbc,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xbe,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xb7,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xb7,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xdf,0x01,0x00,0x00,0xfd,0x02,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb4,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xb6,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xe1,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xe1,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xfe,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0xb6,0x01,0x00,0x00,0x0d,0x02,0x00,0x00, -0xe4,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0xe7,0x01,0x00,0x00,0xfe,0x02,0x00,0x00,0xbe,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xe3,0x01,0x00,0x00,0xe4,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xe7,0x01,0x00,0x00, -0xe2,0x01,0x00,0x00,0xe3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xe2,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xe9,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xe9,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x0c,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0xe2,0x01,0x00,0x00,0x0b,0x02,0x00,0x00,0xea,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xef,0x01,0x00,0x00, -0x0c,0x03,0x00,0x00,0xbb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xeb,0x01,0x00,0x00,0xea,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xef,0x01,0x00,0x00,0xea,0x01,0x00,0x00, -0xeb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xea,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf5,0x01,0x00,0x00, -0xfe,0x02,0x00,0x00,0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xf7,0x01,0x00,0x00,0xf5,0x01,0x00,0x00, -0x0c,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xf9,0x01,0x00,0x00,0x59,0x00,0x00,0x00,0xb8,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfc,0x01,0x00,0x00, -0xfe,0x02,0x00,0x00,0xfb,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xfd,0x01,0x00,0x00,0xf9,0x01,0x00,0x00, -0xfc,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xff,0x01,0x00,0x00,0x68,0x00,0x00,0x00,0xbb,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x00,0x02,0x00,0x00, -0xfd,0x01,0x00,0x00,0xff,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x02,0x02,0x00,0x00,0x00,0x02,0x00,0x00, -0x0c,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x04,0x02,0x00,0x00,0x02,0x02,0x00,0x00,0x03,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x06,0x02,0x00,0x00, -0x04,0x02,0x00,0x00,0xf9,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0x4f,0x01,0x00,0x00,0x07,0x02,0x00,0x00,0x7c,0x01,0x00,0x00, -0x06,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00, -0x08,0x02,0x00,0x00,0x07,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0xcc,0x00,0x00,0x00,0x09,0x02,0x00,0x00,0xf3,0x01,0x00,0x00, -0xf7,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x09,0x02,0x00,0x00, -0x08,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x0b,0x02,0x00,0x00,0x0c,0x03,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xe9,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xeb,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xe4,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xe4,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x0d,0x02,0x00,0x00,0xfe,0x02,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xe1,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xe3,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0x0f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x0f,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xff,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0xe3,0x01,0x00,0x00,0x51,0x02,0x00,0x00, -0x12,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0x15,0x02,0x00,0x00,0xff,0x02,0x00,0x00,0xbe,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x11,0x02,0x00,0x00,0x12,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x15,0x02,0x00,0x00, -0x10,0x02,0x00,0x00,0x11,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x10,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x17,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x17,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x03,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0x10,0x02,0x00,0x00,0x4f,0x02,0x00,0x00,0x1a,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x1d,0x02,0x00,0x00, -0x03,0x03,0x00,0x00,0x60,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x19,0x02,0x00,0x00,0x1a,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x1d,0x02,0x00,0x00,0x18,0x02,0x00,0x00, -0x19,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x18,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x1f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x1f,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x05,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0x18,0x02,0x00,0x00, -0x4d,0x02,0x00,0x00,0x22,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0x25,0x02,0x00,0x00,0x05,0x03,0x00,0x00, -0xbb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x21,0x02,0x00,0x00, -0x22,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x25,0x02,0x00,0x00,0x20,0x02,0x00,0x00,0x21,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x20,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x27,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x27,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x07,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0x20,0x02,0x00,0x00,0x4b,0x02,0x00,0x00, -0x28,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0x2d,0x02,0x00,0x00,0x07,0x03,0x00,0x00,0x62,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x29,0x02,0x00,0x00,0x28,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x2d,0x02,0x00,0x00, -0x28,0x02,0x00,0x00,0x29,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x28,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x2f,0x02,0x00,0x00,0xff,0x02,0x00,0x00,0xbb,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x31,0x02,0x00,0x00, -0x2f,0x02,0x00,0x00,0x05,0x03,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x33,0x02,0x00,0x00,0x31,0x02,0x00,0x00, -0x32,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x35,0x02,0x00,0x00,0x03,0x03,0x00,0x00,0x62,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x36,0x02,0x00,0x00, -0x33,0x02,0x00,0x00,0x35,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x38,0x02,0x00,0x00,0x36,0x02,0x00,0x00, -0x07,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x3c,0x02,0x00,0x00,0x35,0x02,0x00,0x00,0x07,0x03,0x00,0x00, -0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,0x3d,0x02,0x00,0x00, -0xc6,0x01,0x00,0x00,0x3c,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc3,0x00,0x00,0x00,0x3e,0x02,0x00,0x00,0x3d,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,0x43,0x02,0x00,0x00, -0xf3,0x01,0x00,0x00,0x31,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc3,0x00,0x00,0x00,0x44,0x02,0x00,0x00,0x43,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,0x46,0x02,0x00,0x00, -0xc9,0x00,0x00,0x00,0x38,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc3,0x00,0x00,0x00,0x47,0x02,0x00,0x00,0x46,0x02,0x00,0x00, -0x0c,0x00,0x08,0x00,0xc3,0x00,0x00,0x00,0x48,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x3e,0x02,0x00,0x00, -0x44,0x02,0x00,0x00,0x47,0x02,0x00,0x00,0x3e,0x00,0x03,0x00, -0x46,0x02,0x00,0x00,0x48,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x4b,0x02,0x00,0x00,0x07,0x03,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x27,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x29,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x22,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x22,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4d,0x02,0x00,0x00, -0x05,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x1f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x21,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x1a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x1a,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x4f,0x02,0x00,0x00,0x03,0x03,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x17,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x19,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x12,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x12,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x51,0x02,0x00,0x00,0xff,0x02,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x0f,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x11,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0xaf,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xaf,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x53,0x02,0x00,0x00, -0xf9,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xac,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xae,0x01,0x00,0x00, -0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0xa4,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xd6,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xd6,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x55,0x02,0x00,0x00,0xdf,0x02,0x00,0x00, -0x6c,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd3,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xd5,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x5a,0x02,0x00,0x00,0x55,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x5b,0x02,0x00,0x00,0x95,0x00,0x00,0x00,0x5a,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x60,0x02,0x00,0x00, -0x59,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x61,0x02,0x00,0x00,0xa7,0x00,0x00,0x00, -0x60,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x66,0x02,0x00,0x00,0x12,0x00,0x00,0x00,0x65,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x67,0x02,0x00,0x00, -0x66,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x68,0x02,0x00,0x00,0x0f,0x00,0x00,0x00,0x67,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6c,0x02,0x00,0x00, -0x47,0x00,0x00,0x00,0x67,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0x6e,0x02,0x00,0x00,0x6d,0x02,0x00,0x00, -0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x6f,0x02,0x00,0x00,0x6e,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x70,0x02,0x00,0x00,0x6c,0x02,0x00,0x00, -0x6f,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x71,0x02,0x00,0x00,0x68,0x02,0x00,0x00,0x70,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x73,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x73,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xe0,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0xd5,0x00,0x00,0x00, -0xd9,0x02,0x00,0x00,0x76,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0x79,0x02,0x00,0x00,0xe0,0x02,0x00,0x00, -0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x75,0x02,0x00,0x00, -0x76,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x79,0x02,0x00,0x00,0x74,0x02,0x00,0x00,0x75,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x74,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x7b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x7b,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xe1,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0x74,0x02,0x00,0x00,0xd7,0x02,0x00,0x00, -0x7e,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0x81,0x02,0x00,0x00,0xe1,0x02,0x00,0x00,0x60,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x7d,0x02,0x00,0x00,0x7e,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x81,0x02,0x00,0x00, -0x7c,0x02,0x00,0x00,0x7d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x7c,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x85,0x02,0x00,0x00,0xe1,0x02,0x00,0x00,0x61,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x86,0x02,0x00,0x00, -0x5b,0x02,0x00,0x00,0x85,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x88,0x02,0x00,0x00,0x64,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x89,0x02,0x00,0x00,0x86,0x02,0x00,0x00,0x88,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8d,0x02,0x00,0x00, -0xe0,0x02,0x00,0x00,0xfb,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x8e,0x02,0x00,0x00,0x61,0x02,0x00,0x00, -0x8d,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x90,0x02,0x00,0x00,0x68,0x00,0x00,0x00,0xbb,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x91,0x02,0x00,0x00, -0x8e,0x02,0x00,0x00,0x90,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x93,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x93,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xe3,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0x7c,0x02,0x00,0x00,0xd5,0x02,0x00,0x00, -0x96,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0x99,0x02,0x00,0x00,0xe3,0x02,0x00,0x00,0xbb,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x95,0x02,0x00,0x00,0x96,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x99,0x02,0x00,0x00, -0x94,0x02,0x00,0x00,0x95,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x94,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x9b,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x9b,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xe5,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0x94,0x02,0x00,0x00,0xd3,0x02,0x00,0x00,0x9e,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xa1,0x02,0x00,0x00, -0xe5,0x02,0x00,0x00,0x62,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x9d,0x02,0x00,0x00,0x9e,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xa1,0x02,0x00,0x00,0x9c,0x02,0x00,0x00, -0x9d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x9c,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa4,0x02,0x00,0x00, -0x89,0x02,0x00,0x00,0xe5,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0xa7,0x02,0x00,0x00,0xa4,0x02,0x00,0x00, -0x36,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0xa9,0x02,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xa7,0x02,0x00,0x00, -0xa8,0x02,0x00,0x00,0xa9,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xa8,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xac,0x02,0x00,0x00,0x91,0x02,0x00,0x00,0xe3,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0xad,0x02,0x00,0x00, -0x12,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xae,0x02,0x00,0x00,0xad,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xaf,0x02,0x00,0x00, -0xac,0x02,0x00,0x00,0xae,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0xa9,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xa9,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0xc1,0x00,0x00,0x00,0xb0,0x02,0x00,0x00, -0xa7,0x02,0x00,0x00,0x9c,0x02,0x00,0x00,0xaf,0x02,0x00,0x00, -0xa8,0x02,0x00,0x00,0xf7,0x00,0x03,0x00,0xb2,0x02,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xb0,0x02,0x00,0x00, -0xb1,0x02,0x00,0x00,0xb2,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xb1,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xba,0x02,0x00,0x00,0x91,0x02,0x00,0x00,0xe3,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0xbc,0x02,0x00,0x00, -0x12,0x00,0x00,0x00,0xbb,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xbd,0x02,0x00,0x00,0xbc,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbe,0x02,0x00,0x00, -0xba,0x02,0x00,0x00,0xbd,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xbf,0x02,0x00,0x00,0x71,0x02,0x00,0x00, -0xbe,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xc1,0x02,0x00,0x00,0xbf,0x02,0x00,0x00,0x89,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc3,0x02,0x00,0x00, -0xc1,0x02,0x00,0x00,0xe5,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xc5,0x02,0x00,0x00,0xe0,0x02,0x00,0x00, -0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xc7,0x02,0x00,0x00,0xc5,0x02,0x00,0x00,0xe3,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc9,0x02,0x00,0x00, -0xc7,0x02,0x00,0x00,0xc8,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xcb,0x02,0x00,0x00,0xe1,0x02,0x00,0x00, -0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xcc,0x02,0x00,0x00,0xc9,0x02,0x00,0x00,0xcb,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xce,0x02,0x00,0x00, -0xcc,0x02,0x00,0x00,0xe5,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0xcc,0x00,0x00,0x00,0xcf,0x02,0x00,0x00,0xc9,0x00,0x00,0x00, -0xce,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00, -0xd0,0x02,0x00,0x00,0xcf,0x02,0x00,0x00,0x41,0x00,0x06,0x00, -0x92,0x01,0x00,0x00,0xd1,0x02,0x00,0x00,0xb6,0x02,0x00,0x00, -0x34,0x00,0x00,0x00,0xc3,0x02,0x00,0x00,0x3e,0x00,0x03,0x00, -0xd1,0x02,0x00,0x00,0xd0,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0xb2,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xb2,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x9e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x9e,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd3,0x02,0x00,0x00,0xe5,0x02,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x9b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x9d,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x96,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x96,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xd5,0x02,0x00,0x00,0xe3,0x02,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x93,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x95,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x7e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x7e,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd7,0x02,0x00,0x00, -0xe1,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x7b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x7d,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x76,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x76,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd9,0x02,0x00,0x00,0xe0,0x02,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x73,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x75,0x02,0x00,0x00,0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00, - -}; -const uint64_t matmul_q5_1_f32_fp32_len = 10836; - -unsigned char matmul_q5_k_f32_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0xb3,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x09,0x00,0x00,0x00, -0x11,0x00,0x02,0x00,0x27,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00, -0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c, -0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00, -0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x0f,0x00,0x0f,0x00,0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x4c,0x00,0x00,0x00, -0x2e,0x01,0x00,0x00,0x83,0x01,0x00,0x00,0xeb,0x01,0x00,0x00, -0xf6,0x01,0x00,0x00,0xe1,0x02,0x00,0x00,0x2a,0x03,0x00,0x00, -0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x0a,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x0d,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x10,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x37,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x3d,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x4c,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x4f,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x53,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x60,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x62,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x6c,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xa6,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xb8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x27,0x01,0x00,0x00, -0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x28,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x29,0x01,0x00,0x00,0x06,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x2a,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x2a,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x2a,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x2a,0x01,0x00,0x00, -0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x2b,0x01,0x00,0x00,0x06,0x00,0x00,0x00, -0xb0,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x2c,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x2c,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x2c,0x01,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x2e,0x01,0x00,0x00, -0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x2e,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xc5,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xc6,0x01,0x00,0x00, -0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xf3,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x04,0x00,0xf4,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0xf4,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0xf4,0x01,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xf6,0x01,0x00,0x00,0x22,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xf6,0x01,0x00,0x00, -0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xe1,0x02,0x00,0x00,0x0b,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x27,0x03,0x00,0x00,0x06,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x28,0x03,0x00,0x00, -0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x28,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x28,0x03,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x2a,0x03,0x00,0x00, -0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x2a,0x03,0x00,0x00,0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00, -0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x1e,0x00,0x10,0x00, -0x10,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x11,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x11,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x15,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x0a,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x27,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x2d,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x3e,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x4c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x54,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x58,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x63,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x67,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x6d,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x72,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x77,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x7c,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x80,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x90,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x96,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa6,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0xa8,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0xb8,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xba,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xbb,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xbc,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xba,0x00,0x00,0x00, -0xbb,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xbd,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xbc,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xbe,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0xb9,0x00,0x00,0x00, -0xbd,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xbf,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xb7,0x00,0x00,0x00, -0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xc0,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xbf,0x00,0x00,0x00, -0xbb,0x00,0x00,0x00,0x14,0x00,0x02,0x00,0xc1,0x00,0x00,0x00, -0x16,0x00,0x03,0x00,0xc3,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc4,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0xbe,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0xbb,0x00,0x00,0x00, -0x1c,0x00,0x04,0x00,0xc7,0x00,0x00,0x00,0xc3,0x00,0x00,0x00, -0xc6,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xc8,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0xc3,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0xcc,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0xc3,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0xcf,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xf3,0x00,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0x80,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x01,0x01,0x00,0x00, -0x20,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x06,0x01,0x00,0x00,0x10,0x00,0x00,0x00,0x15,0x00,0x04,0x00, -0x18,0x01,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x1e,0x01,0x00,0x00,0x08,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x21,0x01,0x00,0x00, -0xc3,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x16,0x00,0x03,0x00, -0x24,0x01,0x00,0x00,0x10,0x00,0x00,0x00,0x17,0x00,0x04,0x00, -0x25,0x01,0x00,0x00,0x24,0x01,0x00,0x00,0x02,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x26,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x27,0x01,0x00,0x00, -0x18,0x01,0x00,0x00,0x26,0x01,0x00,0x00,0x1c,0x00,0x04,0x00, -0x28,0x01,0x00,0x00,0x18,0x01,0x00,0x00,0x01,0x01,0x00,0x00, -0x1c,0x00,0x04,0x00,0x29,0x01,0x00,0x00,0x18,0x01,0x00,0x00, -0xfa,0x00,0x00,0x00,0x1e,0x00,0x06,0x00,0x2a,0x01,0x00,0x00, -0x25,0x01,0x00,0x00,0x27,0x01,0x00,0x00,0x28,0x01,0x00,0x00, -0x29,0x01,0x00,0x00,0x1d,0x00,0x03,0x00,0x2b,0x01,0x00,0x00, -0x2a,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,0x2c,0x01,0x00,0x00, -0x2b,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x2d,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x2c,0x01,0x00,0x00,0x3b,0x00,0x04,0x00, -0x2d,0x01,0x00,0x00,0x2e,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x30,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x25,0x01,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x35,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x3c,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x18,0x01,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x41,0x01,0x00,0x00, -0x3f,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x58,0x01,0x00,0x00,0x0f,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x7f,0x01,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x84,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x7f,0x01,0x00,0x00,0x1c,0x00,0x04,0x00, -0x81,0x01,0x00,0x00,0x24,0x01,0x00,0x00,0x80,0x01,0x00,0x00, -0x20,0x00,0x04,0x00,0x82,0x01,0x00,0x00,0x04,0x00,0x00,0x00, -0x81,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x82,0x01,0x00,0x00, -0x83,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x9a,0x01,0x00,0x00,0x10,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0xa2,0x01,0x00,0x00,0x04,0x00,0x00,0x00, -0x24,0x01,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xc5,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00, -0x09,0x00,0x00,0x00,0xc6,0x01,0x00,0x00,0xc5,0x01,0x00,0x00, -0x39,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xc7,0x01,0x00,0x00,0x51,0x00,0x00,0x00, -0xc6,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xc8,0x01,0x00,0x00,0x84,0x00,0x00,0x00, -0xc7,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xc9,0x01,0x00,0x00,0x86,0x00,0x00,0x00, -0xc8,0x01,0x00,0x00,0x6c,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xe7,0x01,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xe8,0x01,0x00,0x00,0x84,0x00,0x00,0x00, -0xa6,0x00,0x00,0x00,0xe7,0x01,0x00,0x00,0x1c,0x00,0x04,0x00, -0xe9,0x01,0x00,0x00,0x24,0x01,0x00,0x00,0xe8,0x01,0x00,0x00, -0x20,0x00,0x04,0x00,0xea,0x01,0x00,0x00,0x04,0x00,0x00,0x00, -0xe9,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0xea,0x01,0x00,0x00, -0xeb,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xef,0x01,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x1d,0x00,0x03,0x00, -0xf3,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,0x1e,0x00,0x03,0x00, -0xf4,0x01,0x00,0x00,0xf3,0x01,0x00,0x00,0x20,0x00,0x04,0x00, -0xf5,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0xf4,0x01,0x00,0x00, -0x3b,0x00,0x04,0x00,0xf5,0x01,0x00,0x00,0xf6,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x01,0x02,0x00,0x00, -0x0c,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x0a,0x02,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x24,0x01,0x00,0x00,0x0e,0x02,0x00,0x00,0x00,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x10,0x02,0x00,0x00, -0x51,0x00,0x00,0x00,0xc6,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x11,0x02,0x00,0x00, -0x84,0x00,0x00,0x00,0x10,0x02,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x12,0x02,0x00,0x00, -0x86,0x00,0x00,0x00,0x11,0x02,0x00,0x00,0x6c,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x15,0x02,0x00,0x00, -0x08,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x16,0x02,0x00,0x00,0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x19,0x02,0x00,0x00,0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x34,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x35,0x02,0x00,0x00, -0x24,0x01,0x00,0x00,0x34,0x02,0x00,0x00,0x20,0x00,0x04,0x00, -0x36,0x02,0x00,0x00,0x07,0x00,0x00,0x00,0x35,0x02,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x46,0x02,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x4c,0x02,0x00,0x00,0x07,0x00,0x00,0x00, -0x24,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x62,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0xbe,0x00,0x00,0x00, -0xbb,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x63,0x02,0x00,0x00, -0x24,0x01,0x00,0x00,0x62,0x02,0x00,0x00,0x20,0x00,0x04,0x00, -0x64,0x02,0x00,0x00,0x07,0x00,0x00,0x00,0x63,0x02,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x6d,0x02,0x00,0x00, -0x86,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0xbe,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x75,0x02,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xa4,0x02,0x00,0x00, -0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0xd9,0x02,0x00,0x00, -0x0d,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0xe1,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x1d,0x00,0x03,0x00, -0x27,0x03,0x00,0x00,0xc3,0x00,0x00,0x00,0x1e,0x00,0x03,0x00, -0x28,0x03,0x00,0x00,0x27,0x03,0x00,0x00,0x20,0x00,0x04,0x00, -0x29,0x03,0x00,0x00,0x0c,0x00,0x00,0x00,0x28,0x03,0x00,0x00, -0x3b,0x00,0x04,0x00,0x29,0x03,0x00,0x00,0x2a,0x03,0x00,0x00, -0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x2f,0x03,0x00,0x00,0x05,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x3c,0x03,0x00,0x00,0x84,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x36,0x00,0x05,0x00, -0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0xc8,0x00,0x00,0x00,0xc9,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x36,0x02,0x00,0x00, -0x37,0x02,0x00,0x00,0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x64,0x02,0x00,0x00,0x65,0x02,0x00,0x00,0x07,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x16,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x16,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x17,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x24,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2a,0x00,0x00,0x00, -0x1e,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x2d,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x2f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x24,0x00,0x00,0x00, -0x2f,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x2a,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x35,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x35,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x38,0x00,0x00,0x00, -0x36,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x82,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x38,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x3b,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x3f,0x00,0x00,0x00, -0x3d,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x3f,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x42,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x3b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x49,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4a,0x00,0x00,0x00, -0x49,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x4d,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x3e,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x4d,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x50,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00, -0x50,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x50,0x00,0x00,0x00, -0x58,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x5d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x64,0x00,0x00,0x00, -0x5d,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x5d,0x00,0x00,0x00, -0x67,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x6e,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x6d,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x73,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x72,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x77,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x7d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x7c,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x81,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x81,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x83,0x00,0x00,0x00, -0x47,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x85,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x87,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x47,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x8c,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x82,0x00,0x00,0x00, -0x0c,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x8d,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x26,0x00,0x00,0x00,0x87,0x00,0x00,0x00, -0x8c,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x91,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x90,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x92,0x00,0x00,0x00, -0x91,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x93,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x92,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x95,0x00,0x00,0x00, -0x42,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x96,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x98,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x95,0x00,0x00,0x00, -0x98,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9a,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x99,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9c,0x00,0x00,0x00, -0x9a,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,0x9c,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0xa2,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0xa1,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa3,0x00,0x00,0x00, -0xa2,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa4,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0xa3,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa7,0x00,0x00,0x00, -0x4a,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0xa8,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xaa,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0xa7,0x00,0x00,0x00, -0xaa,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xac,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0xab,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xae,0x00,0x00,0x00, -0xac,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0xae,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb1,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xb1,0x00,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x50,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0x05,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0xb2,0x00,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xc2,0x00,0x00,0x00, -0x50,0x03,0x00,0x00,0xc0,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xb3,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xc2,0x00,0x00,0x00,0xb2,0x00,0x00,0x00, -0xb3,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb2,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,0xcd,0x00,0x00,0x00, -0xc9,0x00,0x00,0x00,0x50,0x03,0x00,0x00,0x3e,0x00,0x03,0x00, -0xcd,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x50,0x03,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb1,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xb3,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xd3,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd3,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x69,0x03,0x00,0x00, -0xaf,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0x1b,0x02,0x00,0x00, -0xd6,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x65,0x03,0x00,0x00,0x9d,0x00,0x00,0x00,0xb3,0x00,0x00,0x00, -0x18,0x02,0x00,0x00,0xd6,0x00,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x51,0x03,0x00,0x00,0x83,0x00,0x00,0x00, -0xb3,0x00,0x00,0x00,0xc9,0x02,0x00,0x00,0xd6,0x00,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xda,0x00,0x00,0x00, -0x51,0x03,0x00,0x00,0x8d,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xd5,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xda,0x00,0x00,0x00,0xd4,0x00,0x00,0x00, -0xd5,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd4,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xdc,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xdc,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x61,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0xd4,0x00,0x00,0x00, -0xcb,0x01,0x00,0x00,0xdf,0x00,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0xe2,0x00,0x00,0x00,0x61,0x03,0x00,0x00, -0x37,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xde,0x00,0x00,0x00, -0xdf,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xe2,0x00,0x00,0x00,0xdd,0x00,0x00,0x00,0xde,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,0x73,0x00,0x00,0x00, -0x61,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xea,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,0x98,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xeb,0x00,0x00,0x00, -0xea,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xec,0x00,0x00,0x00,0x65,0x03,0x00,0x00, -0xeb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xee,0x00,0x00,0x00,0xec,0x00,0x00,0x00,0x6e,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf4,0x00,0x00,0x00, -0xe7,0x00,0x00,0x00,0xf3,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,0x6e,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xf7,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,0xf6,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfb,0x00,0x00,0x00, -0xee,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0xee,0x00,0x00,0x00, -0xfa,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x02,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,0x01,0x01,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x05,0x01,0x00,0x00, -0xfe,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x07,0x01,0x00,0x00,0x05,0x01,0x00,0x00, -0x06,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x0a,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x02,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0c,0x01,0x00,0x00, -0x0a,0x01,0x00,0x00,0x07,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x0f,0x01,0x00,0x00,0x02,0x01,0x00,0x00, -0x01,0x01,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x11,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,0x06,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x12,0x01,0x00,0x00, -0x11,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x13,0x01,0x00,0x00,0x0f,0x01,0x00,0x00, -0x12,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x1c,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,0x06,0x01,0x00,0x00, -0xc4,0x00,0x05,0x00,0x13,0x00,0x00,0x00,0x1d,0x01,0x00,0x00, -0xcf,0x00,0x00,0x00,0x1c,0x01,0x00,0x00,0x72,0x00,0x04,0x00, -0x1e,0x01,0x00,0x00,0x1f,0x01,0x00,0x00,0x1d,0x01,0x00,0x00, -0x7c,0x00,0x04,0x00,0x18,0x01,0x00,0x00,0x20,0x01,0x00,0x00, -0x1f,0x01,0x00,0x00,0x41,0x00,0x07,0x00,0x30,0x01,0x00,0x00, -0x31,0x01,0x00,0x00,0x2e,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0xfb,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x25,0x01,0x00,0x00,0x32,0x01,0x00,0x00,0x31,0x01,0x00,0x00, -0x73,0x00,0x04,0x00,0x21,0x01,0x00,0x00,0x33,0x01,0x00,0x00, -0x32,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0x36,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,0x35,0x01,0x00,0x00, -0xf7,0x00,0x03,0x00,0x38,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x36,0x01,0x00,0x00,0x37,0x01,0x00,0x00, -0x50,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x37,0x01,0x00,0x00, -0x41,0x00,0x08,0x00,0x3c,0x01,0x00,0x00,0x3d,0x01,0x00,0x00, -0x2e,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0xfb,0x00,0x00,0x00, -0xcf,0x00,0x00,0x00,0x0c,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0x18,0x01,0x00,0x00,0x3e,0x01,0x00,0x00,0x3d,0x01,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x3f,0x01,0x00,0x00, -0x3e,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x40,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,0xc7,0x00,0x05,0x00, -0x13,0x00,0x00,0x00,0x42,0x01,0x00,0x00,0x40,0x01,0x00,0x00, -0x41,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0x1e,0x01,0x00,0x00, -0x43,0x01,0x00,0x00,0x42,0x01,0x00,0x00,0x7c,0x00,0x04,0x00, -0x18,0x01,0x00,0x00,0x44,0x01,0x00,0x00,0x43,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x48,0x01,0x00,0x00, -0x0c,0x01,0x00,0x00,0x35,0x01,0x00,0x00,0x41,0x00,0x08,0x00, -0x3c,0x01,0x00,0x00,0x49,0x01,0x00,0x00,0x2e,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0xcf,0x00,0x00,0x00, -0x48,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x18,0x01,0x00,0x00, -0x4a,0x01,0x00,0x00,0x49,0x01,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x4b,0x01,0x00,0x00,0x4a,0x01,0x00,0x00, -0x7c,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x4c,0x01,0x00,0x00, -0x4b,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x13,0x00,0x00,0x00, -0x4d,0x01,0x00,0x00,0x4c,0x01,0x00,0x00,0x41,0x01,0x00,0x00, -0x72,0x00,0x04,0x00,0x1e,0x01,0x00,0x00,0x4e,0x01,0x00,0x00, -0x4d,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x18,0x01,0x00,0x00, -0x4f,0x01,0x00,0x00,0x4e,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0x38,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x50,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x53,0x01,0x00,0x00, -0x0c,0x01,0x00,0x00,0x35,0x01,0x00,0x00,0x41,0x00,0x08,0x00, -0x3c,0x01,0x00,0x00,0x54,0x01,0x00,0x00,0x2e,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0xcf,0x00,0x00,0x00, -0x53,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x18,0x01,0x00,0x00, -0x55,0x01,0x00,0x00,0x54,0x01,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x56,0x01,0x00,0x00,0x55,0x01,0x00,0x00, -0x7c,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x57,0x01,0x00,0x00, -0x56,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x13,0x00,0x00,0x00, -0x59,0x01,0x00,0x00,0x57,0x01,0x00,0x00,0x58,0x01,0x00,0x00, -0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5c,0x01,0x00,0x00, -0x0c,0x01,0x00,0x00,0x35,0x01,0x00,0x00,0x41,0x00,0x08,0x00, -0x3c,0x01,0x00,0x00,0x5d,0x01,0x00,0x00,0x2e,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0xcf,0x00,0x00,0x00, -0x5c,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x18,0x01,0x00,0x00, -0x5e,0x01,0x00,0x00,0x5d,0x01,0x00,0x00,0xc2,0x00,0x05,0x00, -0x18,0x01,0x00,0x00,0x5f,0x01,0x00,0x00,0x5e,0x01,0x00,0x00, -0x80,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,0x18,0x01,0x00,0x00, -0x60,0x01,0x00,0x00,0x5f,0x01,0x00,0x00,0xa8,0x00,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x61,0x01,0x00,0x00, -0x60,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x62,0x01,0x00,0x00,0x61,0x01,0x00,0x00,0xc5,0x00,0x05,0x00, -0x13,0x00,0x00,0x00,0x63,0x01,0x00,0x00,0x59,0x01,0x00,0x00, -0x62,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0x1e,0x01,0x00,0x00, -0x64,0x01,0x00,0x00,0x63,0x01,0x00,0x00,0x7c,0x00,0x04,0x00, -0x18,0x01,0x00,0x00,0x65,0x01,0x00,0x00,0x64,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0x18,0x01,0x00,0x00,0x6a,0x01,0x00,0x00, -0x54,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x18,0x01,0x00,0x00, -0x6b,0x01,0x00,0x00,0x6a,0x01,0x00,0x00,0xa8,0x00,0x00,0x00, -0x41,0x00,0x08,0x00,0x3c,0x01,0x00,0x00,0x6e,0x01,0x00,0x00, -0x2e,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0xfb,0x00,0x00,0x00, -0xcf,0x00,0x00,0x00,0x0c,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0x18,0x01,0x00,0x00,0x6f,0x01,0x00,0x00,0x6e,0x01,0x00,0x00, -0xc2,0x00,0x05,0x00,0x18,0x01,0x00,0x00,0x70,0x01,0x00,0x00, -0x6f,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0xc4,0x00,0x05,0x00, -0x18,0x01,0x00,0x00,0x71,0x01,0x00,0x00,0x70,0x01,0x00,0x00, -0xa8,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,0x18,0x01,0x00,0x00, -0x72,0x01,0x00,0x00,0x6b,0x01,0x00,0x00,0x71,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0x38,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x38,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x18,0x01,0x00,0x00, -0x88,0x03,0x00,0x00,0x4f,0x01,0x00,0x00,0x37,0x01,0x00,0x00, -0x72,0x01,0x00,0x00,0x50,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x18,0x01,0x00,0x00,0x87,0x03,0x00,0x00,0x44,0x01,0x00,0x00, -0x37,0x01,0x00,0x00,0x65,0x01,0x00,0x00,0x50,0x01,0x00,0x00, -0x51,0x00,0x05,0x00,0xc3,0x00,0x00,0x00,0x75,0x01,0x00,0x00, -0x33,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0x04,0x00, -0xc3,0x00,0x00,0x00,0x77,0x01,0x00,0x00,0x87,0x03,0x00,0x00, -0x85,0x00,0x05,0x00,0xc3,0x00,0x00,0x00,0x78,0x01,0x00,0x00, -0x75,0x01,0x00,0x00,0x77,0x01,0x00,0x00,0x51,0x00,0x05,0x00, -0xc3,0x00,0x00,0x00,0x7b,0x01,0x00,0x00,0x33,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0x70,0x00,0x04,0x00,0xc3,0x00,0x00,0x00, -0x7d,0x01,0x00,0x00,0x88,0x03,0x00,0x00,0x85,0x00,0x05,0x00, -0xc3,0x00,0x00,0x00,0x7e,0x01,0x00,0x00,0x7b,0x01,0x00,0x00, -0x7d,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x3c,0x01,0x00,0x00, -0x88,0x01,0x00,0x00,0x2e,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0xfb,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x13,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0x18,0x01,0x00,0x00,0x89,0x01,0x00,0x00, -0x88,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x8b,0x01,0x00,0x00,0x07,0x01,0x00,0x00,0x35,0x01,0x00,0x00, -0xc2,0x00,0x05,0x00,0x18,0x01,0x00,0x00,0x8c,0x01,0x00,0x00, -0x89,0x01,0x00,0x00,0x8b,0x01,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x8d,0x01,0x00,0x00,0x8c,0x01,0x00,0x00, -0x7c,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x8e,0x01,0x00,0x00, -0x8d,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x13,0x00,0x00,0x00, -0x8f,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,0x58,0x01,0x00,0x00, -0x6f,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x90,0x01,0x00,0x00, -0x8f,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x3c,0x01,0x00,0x00, -0x93,0x01,0x00,0x00,0x2e,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0xfb,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x12,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0x18,0x01,0x00,0x00,0x94,0x01,0x00,0x00, -0x93,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x18,0x01,0x00,0x00, -0x96,0x01,0x00,0x00,0x94,0x01,0x00,0x00,0x20,0x01,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x97,0x01,0x00,0x00, -0x96,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x98,0x01,0x00,0x00,0x97,0x01,0x00,0x00,0xab,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0x99,0x01,0x00,0x00,0x98,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xa9,0x00,0x06,0x00,0x13,0x00,0x00,0x00, -0x9b,0x01,0x00,0x00,0x99,0x01,0x00,0x00,0x9a,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,0xc3,0x00,0x00,0x00, -0x9c,0x01,0x00,0x00,0x9b,0x01,0x00,0x00,0x81,0x00,0x05,0x00, -0xc3,0x00,0x00,0x00,0x9d,0x01,0x00,0x00,0x90,0x01,0x00,0x00, -0x9c,0x01,0x00,0x00,0x7f,0x00,0x04,0x00,0xc3,0x00,0x00,0x00, -0xb2,0x03,0x00,0x00,0x7e,0x01,0x00,0x00,0x0c,0x00,0x08,0x00, -0xc3,0x00,0x00,0x00,0xa0,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0x78,0x01,0x00,0x00,0x9d,0x01,0x00,0x00, -0xb2,0x03,0x00,0x00,0x73,0x00,0x04,0x00,0x24,0x01,0x00,0x00, -0xa1,0x01,0x00,0x00,0xa0,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0xa2,0x01,0x00,0x00,0xa3,0x01,0x00,0x00,0x83,0x01,0x00,0x00, -0xf7,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0xa3,0x01,0x00,0x00, -0xa1,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa5,0x01,0x00,0x00,0xf7,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa9,0x01,0x00,0x00, -0x13,0x01,0x00,0x00,0x39,0x00,0x00,0x00,0x41,0x00,0x08,0x00, -0x3c,0x01,0x00,0x00,0xaa,0x01,0x00,0x00,0x2e,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0x96,0x00,0x00,0x00, -0xa9,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x18,0x01,0x00,0x00, -0xab,0x01,0x00,0x00,0xaa,0x01,0x00,0x00,0xc2,0x00,0x05,0x00, -0x18,0x01,0x00,0x00,0xae,0x01,0x00,0x00,0xab,0x01,0x00,0x00, -0x8b,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xaf,0x01,0x00,0x00,0xae,0x01,0x00,0x00,0x7c,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0xb0,0x01,0x00,0x00,0xaf,0x01,0x00,0x00, -0xc7,0x00,0x05,0x00,0x13,0x00,0x00,0x00,0xb1,0x01,0x00,0x00, -0xb0,0x01,0x00,0x00,0x58,0x01,0x00,0x00,0x6f,0x00,0x04,0x00, -0xc3,0x00,0x00,0x00,0xb2,0x01,0x00,0x00,0xb1,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb5,0x01,0x00,0x00, -0x12,0x01,0x00,0x00,0x39,0x00,0x00,0x00,0x41,0x00,0x08,0x00, -0x3c,0x01,0x00,0x00,0xb6,0x01,0x00,0x00,0x2e,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0x85,0x00,0x00,0x00, -0xb5,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x18,0x01,0x00,0x00, -0xb7,0x01,0x00,0x00,0xb6,0x01,0x00,0x00,0xc7,0x00,0x05,0x00, -0x18,0x01,0x00,0x00,0xb9,0x01,0x00,0x00,0xb7,0x01,0x00,0x00, -0x20,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xba,0x01,0x00,0x00,0xb9,0x01,0x00,0x00,0x7c,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0xbb,0x01,0x00,0x00,0xba,0x01,0x00,0x00, -0xab,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xbc,0x01,0x00,0x00, -0xbb,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0xa9,0x00,0x06,0x00, -0x13,0x00,0x00,0x00,0xbd,0x01,0x00,0x00,0xbc,0x01,0x00,0x00, -0x9a,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0x6f,0x00,0x04,0x00, -0xc3,0x00,0x00,0x00,0xbe,0x01,0x00,0x00,0xbd,0x01,0x00,0x00, -0x81,0x00,0x05,0x00,0xc3,0x00,0x00,0x00,0xbf,0x01,0x00,0x00, -0xb2,0x01,0x00,0x00,0xbe,0x01,0x00,0x00,0x0c,0x00,0x08,0x00, -0xc3,0x00,0x00,0x00,0xc2,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0x78,0x01,0x00,0x00,0xbf,0x01,0x00,0x00, -0xb2,0x03,0x00,0x00,0x73,0x00,0x04,0x00,0x24,0x01,0x00,0x00, -0xc3,0x01,0x00,0x00,0xc2,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0xa2,0x01,0x00,0x00,0xc4,0x01,0x00,0x00,0x83,0x01,0x00,0x00, -0xa5,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xc4,0x01,0x00,0x00, -0xc3,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xdf,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xdf,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xcb,0x01,0x00,0x00,0x61,0x03,0x00,0x00, -0xc9,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xdc,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xcd,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xcd,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x62,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0x14,0x02,0x00,0x00, -0xd0,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0xd3,0x01,0x00,0x00,0x62,0x03,0x00,0x00,0xa6,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xcf,0x01,0x00,0x00,0xd0,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xd3,0x01,0x00,0x00, -0xce,0x01,0x00,0x00,0xcf,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xce,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd7,0x01,0x00,0x00,0xa7,0x00,0x00,0x00,0x7d,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd9,0x01,0x00,0x00, -0xd7,0x01,0x00,0x00,0x62,0x03,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0xda,0x01,0x00,0x00,0x12,0x00,0x00,0x00, -0xcf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xdb,0x01,0x00,0x00,0xda,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0xdc,0x01,0x00,0x00,0xd9,0x01,0x00,0x00, -0xdb,0x01,0x00,0x00,0xf7,0x00,0x03,0x00,0xde,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xdc,0x01,0x00,0x00, -0xdd,0x01,0x00,0x00,0xde,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xdd,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xe1,0x01,0x00,0x00,0x51,0x03,0x00,0x00,0x78,0x00,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xe3,0x01,0x00,0x00, -0xe1,0x01,0x00,0x00,0x8d,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xde,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xde,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0xc1,0x00,0x00,0x00,0xe4,0x01,0x00,0x00, -0xdc,0x01,0x00,0x00,0xce,0x01,0x00,0x00,0xe3,0x01,0x00,0x00, -0xdd,0x01,0x00,0x00,0xf7,0x00,0x03,0x00,0xe6,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xe4,0x01,0x00,0x00, -0xe5,0x01,0x00,0x00,0x06,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xe5,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xee,0x01,0x00,0x00,0x7d,0x00,0x00,0x00,0x62,0x03,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf0,0x01,0x00,0x00, -0xee,0x01,0x00,0x00,0xef,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xf2,0x01,0x00,0x00,0xf0,0x01,0x00,0x00, -0x78,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xfd,0x01,0x00,0x00,0xee,0x01,0x00,0x00,0xaa,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfe,0x01,0x00,0x00, -0x69,0x03,0x00,0x00,0xfd,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0xfe,0x01,0x00,0x00, -0x78,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x01,0x02,0x00,0x00, -0x02,0x02,0x00,0x00,0xf6,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0x00,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00, -0x03,0x02,0x00,0x00,0x02,0x02,0x00,0x00,0x73,0x00,0x04,0x00, -0x24,0x01,0x00,0x00,0x04,0x02,0x00,0x00,0x03,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0xa2,0x01,0x00,0x00,0x05,0x02,0x00,0x00, -0xeb,0x01,0x00,0x00,0xf2,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0x05,0x02,0x00,0x00,0x04,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0xe6,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x06,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x09,0x02,0x00,0x00, -0x7d,0x00,0x00,0x00,0x62,0x03,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x0b,0x02,0x00,0x00,0x09,0x02,0x00,0x00, -0x0a,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x0d,0x02,0x00,0x00,0x0b,0x02,0x00,0x00,0x78,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0xa2,0x01,0x00,0x00,0x0f,0x02,0x00,0x00, -0xeb,0x01,0x00,0x00,0x0d,0x02,0x00,0x00,0x3e,0x00,0x03,0x00, -0x0f,0x02,0x00,0x00,0x0e,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0xe6,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xe6,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xd0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xd0,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x14,0x02,0x00,0x00,0x62,0x03,0x00,0x00,0x12,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0xcd,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xcf,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x15,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x18,0x02,0x00,0x00,0x65,0x03,0x00,0x00, -0x16,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x1b,0x02,0x00,0x00,0x69,0x03,0x00,0x00,0x19,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x1d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x1d,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x6b,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0xcf,0x01,0x00,0x00, -0xc7,0x02,0x00,0x00,0x20,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0x23,0x02,0x00,0x00,0x6b,0x03,0x00,0x00, -0x6c,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x1f,0x02,0x00,0x00, -0x20,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x23,0x02,0x00,0x00,0x1e,0x02,0x00,0x00,0x1f,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x1e,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x25,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x25,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x6f,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0x1e,0x02,0x00,0x00,0x51,0x02,0x00,0x00, -0x28,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0x2b,0x02,0x00,0x00,0x6f,0x03,0x00,0x00,0x60,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x27,0x02,0x00,0x00,0x28,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x2b,0x02,0x00,0x00, -0x26,0x02,0x00,0x00,0x27,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x26,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x2d,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x2d,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x81,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0x26,0x02,0x00,0x00,0x4f,0x02,0x00,0x00,0x2e,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x33,0x02,0x00,0x00, -0x81,0x03,0x00,0x00,0x62,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x2f,0x02,0x00,0x00,0x2e,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x33,0x02,0x00,0x00,0x2e,0x02,0x00,0x00, -0x2f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x2e,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x39,0x02,0x00,0x00, -0x6f,0x03,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3b,0x02,0x00,0x00,0x39,0x02,0x00,0x00, -0x81,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x3d,0x02,0x00,0x00,0x55,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3f,0x02,0x00,0x00, -0x6f,0x03,0x00,0x00,0x61,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x40,0x02,0x00,0x00,0x3d,0x02,0x00,0x00, -0x3f,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x42,0x02,0x00,0x00,0x64,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x43,0x02,0x00,0x00, -0x40,0x02,0x00,0x00,0x42,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x45,0x02,0x00,0x00,0x43,0x02,0x00,0x00, -0x81,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x47,0x02,0x00,0x00,0x45,0x02,0x00,0x00,0x46,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x49,0x02,0x00,0x00, -0x47,0x02,0x00,0x00,0x6b,0x03,0x00,0x00,0x41,0x00,0x05,0x00, -0xa2,0x01,0x00,0x00,0x4a,0x02,0x00,0x00,0x83,0x01,0x00,0x00, -0x49,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x24,0x01,0x00,0x00, -0x4b,0x02,0x00,0x00,0x4a,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0x4c,0x02,0x00,0x00,0x4d,0x02,0x00,0x00,0x37,0x02,0x00,0x00, -0x3b,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x4d,0x02,0x00,0x00, -0x4b,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x4f,0x02,0x00,0x00,0x81,0x03,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x2d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x2f,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x28,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x28,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x51,0x02,0x00,0x00,0x6f,0x03,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x25,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x27,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x53,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x53,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x70,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0x27,0x02,0x00,0x00,0x7f,0x02,0x00,0x00, -0x56,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0x59,0x02,0x00,0x00,0x70,0x03,0x00,0x00,0xbe,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x55,0x02,0x00,0x00,0x56,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x59,0x02,0x00,0x00, -0x54,0x02,0x00,0x00,0x55,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x54,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x5b,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x5b,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x7e,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0x54,0x02,0x00,0x00,0x7d,0x02,0x00,0x00,0x5c,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x61,0x02,0x00,0x00, -0x7e,0x03,0x00,0x00,0xbb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x5d,0x02,0x00,0x00,0x5c,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x61,0x02,0x00,0x00,0x5c,0x02,0x00,0x00, -0x5d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x5c,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x67,0x02,0x00,0x00, -0x70,0x03,0x00,0x00,0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x69,0x02,0x00,0x00,0x67,0x02,0x00,0x00, -0x7e,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x6b,0x02,0x00,0x00,0x59,0x00,0x00,0x00,0xb8,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6e,0x02,0x00,0x00, -0x70,0x03,0x00,0x00,0x6d,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x6f,0x02,0x00,0x00,0x6b,0x02,0x00,0x00, -0x6e,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x71,0x02,0x00,0x00,0x68,0x00,0x00,0x00,0xbb,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x72,0x02,0x00,0x00, -0x6f,0x02,0x00,0x00,0x71,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x74,0x02,0x00,0x00,0x72,0x02,0x00,0x00, -0x7e,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x76,0x02,0x00,0x00,0x74,0x02,0x00,0x00,0x75,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x78,0x02,0x00,0x00, -0x76,0x02,0x00,0x00,0x6b,0x03,0x00,0x00,0x41,0x00,0x05,0x00, -0xa2,0x01,0x00,0x00,0x79,0x02,0x00,0x00,0xeb,0x01,0x00,0x00, -0x78,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x24,0x01,0x00,0x00, -0x7a,0x02,0x00,0x00,0x79,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0x4c,0x02,0x00,0x00,0x7b,0x02,0x00,0x00,0x65,0x02,0x00,0x00, -0x69,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x7b,0x02,0x00,0x00, -0x7a,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x7d,0x02,0x00,0x00,0x7e,0x03,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x5b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x5d,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x56,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x56,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x7f,0x02,0x00,0x00,0x70,0x03,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x53,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x55,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x81,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x81,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x71,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0x55,0x02,0x00,0x00,0xc5,0x02,0x00,0x00, -0x84,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0x87,0x02,0x00,0x00,0x71,0x03,0x00,0x00,0xbe,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x83,0x02,0x00,0x00,0x84,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x87,0x02,0x00,0x00, -0x82,0x02,0x00,0x00,0x83,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x82,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x89,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x89,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x75,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0x82,0x02,0x00,0x00,0xc3,0x02,0x00,0x00,0x8c,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x8f,0x02,0x00,0x00, -0x75,0x03,0x00,0x00,0x60,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x8b,0x02,0x00,0x00,0x8c,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x8f,0x02,0x00,0x00,0x8a,0x02,0x00,0x00, -0x8b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x8a,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x91,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x91,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x77,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0x8a,0x02,0x00,0x00, -0xc1,0x02,0x00,0x00,0x94,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0x97,0x02,0x00,0x00,0x77,0x03,0x00,0x00, -0xbb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x93,0x02,0x00,0x00, -0x94,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x97,0x02,0x00,0x00,0x92,0x02,0x00,0x00,0x93,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x92,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x99,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x99,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x79,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0x92,0x02,0x00,0x00,0xbf,0x02,0x00,0x00, -0x9a,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0x9f,0x02,0x00,0x00,0x79,0x03,0x00,0x00,0x62,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x9b,0x02,0x00,0x00,0x9a,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x9f,0x02,0x00,0x00, -0x9a,0x02,0x00,0x00,0x9b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x9a,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa1,0x02,0x00,0x00,0x71,0x03,0x00,0x00,0xbb,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa3,0x02,0x00,0x00, -0xa1,0x02,0x00,0x00,0x77,0x03,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa5,0x02,0x00,0x00,0xa3,0x02,0x00,0x00, -0xa4,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa7,0x02,0x00,0x00,0x75,0x03,0x00,0x00,0x62,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa8,0x02,0x00,0x00, -0xa5,0x02,0x00,0x00,0xa7,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xaa,0x02,0x00,0x00,0xa8,0x02,0x00,0x00, -0x79,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xae,0x02,0x00,0x00,0xa7,0x02,0x00,0x00,0x79,0x03,0x00,0x00, -0x41,0x00,0x05,0x00,0x4c,0x02,0x00,0x00,0xaf,0x02,0x00,0x00, -0x37,0x02,0x00,0x00,0xae,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0x24,0x01,0x00,0x00,0xb0,0x02,0x00,0x00,0xaf,0x02,0x00,0x00, -0x73,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0xb1,0x02,0x00,0x00, -0xb0,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x4c,0x02,0x00,0x00, -0xb6,0x02,0x00,0x00,0x65,0x02,0x00,0x00,0xa3,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0x24,0x01,0x00,0x00,0xb7,0x02,0x00,0x00, -0xb6,0x02,0x00,0x00,0x73,0x00,0x04,0x00,0xc3,0x00,0x00,0x00, -0xb8,0x02,0x00,0x00,0xb7,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0xcc,0x00,0x00,0x00,0xba,0x02,0x00,0x00,0xc9,0x00,0x00,0x00, -0xaa,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00, -0xbb,0x02,0x00,0x00,0xba,0x02,0x00,0x00,0x0c,0x00,0x08,0x00, -0xc3,0x00,0x00,0x00,0xbc,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0xb1,0x02,0x00,0x00,0xb8,0x02,0x00,0x00, -0xbb,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0xba,0x02,0x00,0x00, -0xbc,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xbf,0x02,0x00,0x00,0x79,0x03,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x99,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x9b,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x94,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x94,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xc1,0x02,0x00,0x00,0x77,0x03,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x91,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x93,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x8c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x8c,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc3,0x02,0x00,0x00, -0x75,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x89,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x8b,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x84,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x84,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xc5,0x02,0x00,0x00,0x71,0x03,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x81,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x83,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x20,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x20,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xc7,0x02,0x00,0x00,0x6b,0x03,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x1d,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x1f,0x02,0x00,0x00,0xe0,0x00,0x04,0x00, -0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x15,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0xd6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xd6,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xc9,0x02,0x00,0x00,0x51,0x03,0x00,0x00,0x6c,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xd3,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xd5,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xce,0x02,0x00,0x00,0x55,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xcf,0x02,0x00,0x00, -0x95,0x00,0x00,0x00,0xce,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xd4,0x02,0x00,0x00,0x59,0x00,0x00,0x00, -0xb8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd5,0x02,0x00,0x00,0xa7,0x00,0x00,0x00,0xd4,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0xda,0x02,0x00,0x00, -0x12,0x00,0x00,0x00,0xd9,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xdb,0x02,0x00,0x00,0xda,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdc,0x02,0x00,0x00, -0x0f,0x00,0x00,0x00,0xdb,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xe0,0x02,0x00,0x00,0x47,0x00,0x00,0x00, -0xdb,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0xe2,0x02,0x00,0x00,0xe1,0x02,0x00,0x00,0x0c,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xe3,0x02,0x00,0x00, -0xe2,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xe4,0x02,0x00,0x00,0xe0,0x02,0x00,0x00,0xe3,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe5,0x02,0x00,0x00, -0xdc,0x02,0x00,0x00,0xe4,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0xe7,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xe7,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x52,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0x4d,0x03,0x00,0x00, -0xea,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0xed,0x02,0x00,0x00,0x52,0x03,0x00,0x00,0xbe,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xe9,0x02,0x00,0x00,0xea,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xed,0x02,0x00,0x00, -0xe8,0x02,0x00,0x00,0xe9,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xe8,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xef,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xef,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x53,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0xe8,0x02,0x00,0x00,0x4b,0x03,0x00,0x00,0xf2,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xf5,0x02,0x00,0x00, -0x53,0x03,0x00,0x00,0x60,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xf1,0x02,0x00,0x00,0xf2,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xf5,0x02,0x00,0x00,0xf0,0x02,0x00,0x00, -0xf1,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xf0,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf9,0x02,0x00,0x00, -0x53,0x03,0x00,0x00,0x61,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xfa,0x02,0x00,0x00,0xcf,0x02,0x00,0x00, -0xf9,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xfc,0x02,0x00,0x00,0x64,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfd,0x02,0x00,0x00, -0xfa,0x02,0x00,0x00,0xfc,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x01,0x03,0x00,0x00,0x52,0x03,0x00,0x00, -0x6d,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x02,0x03,0x00,0x00,0xd5,0x02,0x00,0x00,0x01,0x03,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x04,0x03,0x00,0x00, -0x68,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x05,0x03,0x00,0x00,0x02,0x03,0x00,0x00, -0x04,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,0x07,0x03,0x00,0x00, -0xf8,0x00,0x02,0x00,0x07,0x03,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x55,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0xf0,0x02,0x00,0x00,0x49,0x03,0x00,0x00,0x0a,0x03,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x0d,0x03,0x00,0x00, -0x55,0x03,0x00,0x00,0xbb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x09,0x03,0x00,0x00,0x0a,0x03,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x0d,0x03,0x00,0x00,0x08,0x03,0x00,0x00, -0x09,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x08,0x03,0x00,0x00, -0xf9,0x00,0x02,0x00,0x0f,0x03,0x00,0x00,0xf8,0x00,0x02,0x00, -0x0f,0x03,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x57,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0x08,0x03,0x00,0x00, -0x47,0x03,0x00,0x00,0x12,0x03,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0x15,0x03,0x00,0x00,0x57,0x03,0x00,0x00, -0x62,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x11,0x03,0x00,0x00, -0x12,0x03,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x15,0x03,0x00,0x00,0x10,0x03,0x00,0x00,0x11,0x03,0x00,0x00, -0xf8,0x00,0x02,0x00,0x10,0x03,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x18,0x03,0x00,0x00,0xfd,0x02,0x00,0x00, -0x57,0x03,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0x1b,0x03,0x00,0x00,0x18,0x03,0x00,0x00,0x36,0x00,0x00,0x00, -0xf7,0x00,0x03,0x00,0x1d,0x03,0x00,0x00,0x00,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x1b,0x03,0x00,0x00,0x1c,0x03,0x00,0x00, -0x1d,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x1c,0x03,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x20,0x03,0x00,0x00, -0x05,0x03,0x00,0x00,0x55,0x03,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x21,0x03,0x00,0x00,0x12,0x00,0x00,0x00, -0xcf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x22,0x03,0x00,0x00,0x21,0x03,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0x23,0x03,0x00,0x00,0x20,0x03,0x00,0x00, -0x22,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,0x1d,0x03,0x00,0x00, -0xf8,0x00,0x02,0x00,0x1d,0x03,0x00,0x00,0xf5,0x00,0x07,0x00, -0xc1,0x00,0x00,0x00,0x24,0x03,0x00,0x00,0x1b,0x03,0x00,0x00, -0x10,0x03,0x00,0x00,0x23,0x03,0x00,0x00,0x1c,0x03,0x00,0x00, -0xf7,0x00,0x03,0x00,0x26,0x03,0x00,0x00,0x00,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x24,0x03,0x00,0x00,0x25,0x03,0x00,0x00, -0x26,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x25,0x03,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2e,0x03,0x00,0x00, -0x05,0x03,0x00,0x00,0x55,0x03,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x30,0x03,0x00,0x00,0x12,0x00,0x00,0x00, -0x2f,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x31,0x03,0x00,0x00,0x30,0x03,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x32,0x03,0x00,0x00,0x2e,0x03,0x00,0x00, -0x31,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x33,0x03,0x00,0x00,0xe5,0x02,0x00,0x00,0x32,0x03,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x35,0x03,0x00,0x00, -0x33,0x03,0x00,0x00,0xfd,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x37,0x03,0x00,0x00,0x35,0x03,0x00,0x00, -0x57,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x39,0x03,0x00,0x00,0x52,0x03,0x00,0x00,0xbb,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3b,0x03,0x00,0x00, -0x39,0x03,0x00,0x00,0x55,0x03,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3d,0x03,0x00,0x00,0x3b,0x03,0x00,0x00, -0x3c,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x3f,0x03,0x00,0x00,0x53,0x03,0x00,0x00,0x62,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x40,0x03,0x00,0x00, -0x3d,0x03,0x00,0x00,0x3f,0x03,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x42,0x03,0x00,0x00,0x40,0x03,0x00,0x00, -0x57,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00, -0x43,0x03,0x00,0x00,0xc9,0x00,0x00,0x00,0x42,0x03,0x00,0x00, -0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x44,0x03,0x00,0x00, -0x43,0x03,0x00,0x00,0x41,0x00,0x06,0x00,0x01,0x02,0x00,0x00, -0x45,0x03,0x00,0x00,0x2a,0x03,0x00,0x00,0x34,0x00,0x00,0x00, -0x37,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,0x45,0x03,0x00,0x00, -0x44,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,0x26,0x03,0x00,0x00, -0xf8,0x00,0x02,0x00,0x26,0x03,0x00,0x00,0xf9,0x00,0x02,0x00, -0x12,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x12,0x03,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x47,0x03,0x00,0x00, -0x57,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x0f,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x11,0x03,0x00,0x00, -0xf9,0x00,0x02,0x00,0x0a,0x03,0x00,0x00,0xf8,0x00,0x02,0x00, -0x0a,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x49,0x03,0x00,0x00,0x55,0x03,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x07,0x03,0x00,0x00,0xf8,0x00,0x02,0x00, -0x09,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,0xf2,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xf2,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x4b,0x03,0x00,0x00,0x53,0x03,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xef,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xf1,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0xea,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xea,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4d,0x03,0x00,0x00, -0x52,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xe7,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xe9,0x02,0x00,0x00, -0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00, -}; -const uint64_t matmul_q5_k_f32_len = 12596; - -unsigned char matmul_q5_k_f32_aligned_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0xcd,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x09,0x00,0x00,0x00, -0x11,0x00,0x02,0x00,0x27,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00, -0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c, -0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00, -0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x0f,0x00,0x0f,0x00,0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x4c,0x00,0x00,0x00, -0x2f,0x01,0x00,0x00,0x84,0x01,0x00,0x00,0xee,0x01,0x00,0x00, -0xf6,0x01,0x00,0x00,0x03,0x03,0x00,0x00,0x4c,0x03,0x00,0x00, -0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x0a,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x0d,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x10,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x37,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x3d,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x4c,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x4f,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x53,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x60,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x62,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x6c,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xa7,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xb9,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xbc,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x28,0x01,0x00,0x00, -0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x29,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x2a,0x01,0x00,0x00,0x06,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x2b,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x2b,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x2b,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x2b,0x01,0x00,0x00, -0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x2c,0x01,0x00,0x00,0x06,0x00,0x00,0x00, -0xb0,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x2d,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x2d,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x2d,0x01,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x2f,0x01,0x00,0x00, -0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x2f,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xc6,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xc7,0x01,0x00,0x00, -0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xf3,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x48,0x00,0x04,0x00,0xf4,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x05,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0xf4,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0xf4,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0xf4,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0xf4,0x01,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xf6,0x01,0x00,0x00,0x22,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xf6,0x01,0x00,0x00, -0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x03,0x03,0x00,0x00,0x0b,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x49,0x03,0x00,0x00,0x06,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x4a,0x03,0x00,0x00, -0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x4a,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x4a,0x03,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x4c,0x03,0x00,0x00, -0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x4c,0x03,0x00,0x00,0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00, -0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x1e,0x00,0x10,0x00, -0x10,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x11,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x11,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x15,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x0a,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x27,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x2d,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x3e,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x4c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x54,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x58,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x63,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x67,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x6d,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x72,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x77,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x91,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0xa2,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xa7,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xba,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0xb9,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xbb,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x4f,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xbc,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xbb,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xbd,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0xba,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xb8,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xc0,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x14,0x00,0x02,0x00, -0xc2,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0xc4,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xc5,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xc6,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc5,0x00,0x00,0x00, -0xbf,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xc7,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc6,0x00,0x00,0x00, -0xbc,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xc8,0x00,0x00,0x00, -0xc4,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0xc9,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xc8,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0xcc,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xcd,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xf4,0x00,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xfb,0x00,0x00,0x00, -0x80,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x02,0x01,0x00,0x00,0x20,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x07,0x01,0x00,0x00,0x10,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x19,0x01,0x00,0x00,0x08,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x1f,0x01,0x00,0x00, -0x08,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x17,0x00,0x04,0x00, -0x22,0x01,0x00,0x00,0xc4,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x16,0x00,0x03,0x00,0x25,0x01,0x00,0x00,0x10,0x00,0x00,0x00, -0x17,0x00,0x04,0x00,0x26,0x01,0x00,0x00,0x25,0x01,0x00,0x00, -0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x27,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x1c,0x00,0x04,0x00, -0x28,0x01,0x00,0x00,0x19,0x01,0x00,0x00,0x27,0x01,0x00,0x00, -0x1c,0x00,0x04,0x00,0x29,0x01,0x00,0x00,0x19,0x01,0x00,0x00, -0x02,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,0x2a,0x01,0x00,0x00, -0x19,0x01,0x00,0x00,0xfb,0x00,0x00,0x00,0x1e,0x00,0x06,0x00, -0x2b,0x01,0x00,0x00,0x26,0x01,0x00,0x00,0x28,0x01,0x00,0x00, -0x29,0x01,0x00,0x00,0x2a,0x01,0x00,0x00,0x1d,0x00,0x03,0x00, -0x2c,0x01,0x00,0x00,0x2b,0x01,0x00,0x00,0x1e,0x00,0x03,0x00, -0x2d,0x01,0x00,0x00,0x2c,0x01,0x00,0x00,0x20,0x00,0x04,0x00, -0x2e,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x2d,0x01,0x00,0x00, -0x3b,0x00,0x04,0x00,0x2e,0x01,0x00,0x00,0x2f,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x31,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x26,0x01,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x36,0x01,0x00,0x00,0x04,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x3d,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x19,0x01,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x42,0x01,0x00,0x00,0x3f,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x59,0x01,0x00,0x00,0x0f,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x80,0x01,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x81,0x01,0x00,0x00, -0x84,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x80,0x01,0x00,0x00, -0x1c,0x00,0x04,0x00,0x82,0x01,0x00,0x00,0x25,0x01,0x00,0x00, -0x81,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x83,0x01,0x00,0x00, -0x04,0x00,0x00,0x00,0x82,0x01,0x00,0x00,0x3b,0x00,0x04,0x00, -0x83,0x01,0x00,0x00,0x84,0x01,0x00,0x00,0x04,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x9b,0x01,0x00,0x00, -0x10,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xa3,0x01,0x00,0x00, -0x04,0x00,0x00,0x00,0x25,0x01,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xc6,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0x33,0x00,0x06,0x00,0x09,0x00,0x00,0x00,0xc7,0x01,0x00,0x00, -0xc6,0x01,0x00,0x00,0x39,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc8,0x01,0x00,0x00, -0x51,0x00,0x00,0x00,0xc7,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc9,0x01,0x00,0x00, -0x84,0x00,0x00,0x00,0xc8,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xca,0x01,0x00,0x00, -0x86,0x00,0x00,0x00,0xc9,0x01,0x00,0x00,0x6c,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xe5,0x01,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xea,0x01,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xeb,0x01,0x00,0x00, -0x84,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0xea,0x01,0x00,0x00, -0x1c,0x00,0x04,0x00,0xec,0x01,0x00,0x00,0x25,0x01,0x00,0x00, -0xeb,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0xed,0x01,0x00,0x00, -0x04,0x00,0x00,0x00,0xec,0x01,0x00,0x00,0x3b,0x00,0x04,0x00, -0xed,0x01,0x00,0x00,0xee,0x01,0x00,0x00,0x04,0x00,0x00,0x00, -0x17,0x00,0x04,0x00,0xf1,0x01,0x00,0x00,0xc4,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x18,0x00,0x04,0x00,0xf2,0x01,0x00,0x00, -0xf1,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x1d,0x00,0x03,0x00, -0xf3,0x01,0x00,0x00,0xf2,0x01,0x00,0x00,0x1e,0x00,0x03,0x00, -0xf4,0x01,0x00,0x00,0xf3,0x01,0x00,0x00,0x20,0x00,0x04,0x00, -0xf5,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0xf4,0x01,0x00,0x00, -0x3b,0x00,0x04,0x00,0xf5,0x01,0x00,0x00,0xf6,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xf8,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x0c,0x02,0x00,0x00,0x03,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x1b,0x02,0x00,0x00, -0x05,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x23,0x02,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x2b,0x02,0x00,0x00,0x07,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x32,0x02,0x00,0x00, -0x51,0x00,0x00,0x00,0xc7,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x33,0x02,0x00,0x00, -0x84,0x00,0x00,0x00,0x32,0x02,0x00,0x00,0x77,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x34,0x02,0x00,0x00, -0x86,0x00,0x00,0x00,0x33,0x02,0x00,0x00,0x6c,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x37,0x02,0x00,0x00, -0x08,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x38,0x02,0x00,0x00,0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x3b,0x02,0x00,0x00,0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x77,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x56,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x57,0x02,0x00,0x00, -0x25,0x01,0x00,0x00,0x56,0x02,0x00,0x00,0x20,0x00,0x04,0x00, -0x58,0x02,0x00,0x00,0x07,0x00,0x00,0x00,0x57,0x02,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x68,0x02,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x6e,0x02,0x00,0x00,0x07,0x00,0x00,0x00, -0x25,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x84,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0xbf,0x00,0x00,0x00, -0xbc,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x85,0x02,0x00,0x00, -0x25,0x01,0x00,0x00,0x84,0x02,0x00,0x00,0x20,0x00,0x04,0x00, -0x86,0x02,0x00,0x00,0x07,0x00,0x00,0x00,0x85,0x02,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x8f,0x02,0x00,0x00, -0x86,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0xbf,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x97,0x02,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc6,0x02,0x00,0x00, -0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0xfb,0x02,0x00,0x00, -0x0d,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x03,0x03,0x00,0x00,0x01,0x00,0x00,0x00,0x1d,0x00,0x03,0x00, -0x49,0x03,0x00,0x00,0xc4,0x00,0x00,0x00,0x1e,0x00,0x03,0x00, -0x4a,0x03,0x00,0x00,0x49,0x03,0x00,0x00,0x20,0x00,0x04,0x00, -0x4b,0x03,0x00,0x00,0x0c,0x00,0x00,0x00,0x4a,0x03,0x00,0x00, -0x3b,0x00,0x04,0x00,0x4b,0x03,0x00,0x00,0x4c,0x03,0x00,0x00, -0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x51,0x03,0x00,0x00,0x05,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x5e,0x03,0x00,0x00,0x84,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x36,0x00,0x05,0x00, -0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0xc9,0x00,0x00,0x00,0xca,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x58,0x02,0x00,0x00, -0x59,0x02,0x00,0x00,0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x86,0x02,0x00,0x00,0x87,0x02,0x00,0x00,0x07,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x16,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x16,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x17,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x24,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2a,0x00,0x00,0x00, -0x1e,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x2d,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x2f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x24,0x00,0x00,0x00, -0x2f,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x2a,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x35,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x35,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x38,0x00,0x00,0x00, -0x36,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x82,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x38,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x3b,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x3f,0x00,0x00,0x00, -0x3d,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x3f,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x42,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x3b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x49,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4a,0x00,0x00,0x00, -0x49,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x4d,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x3e,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x4d,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x50,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00, -0x50,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x50,0x00,0x00,0x00, -0x58,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x5d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x64,0x00,0x00,0x00, -0x5d,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x5d,0x00,0x00,0x00, -0x67,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x6e,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x6d,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x73,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x72,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x78,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x7e,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x7d,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x82,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x82,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x47,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x88,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0x47,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x8d,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0x83,0x00,0x00,0x00, -0x0c,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x8e,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x26,0x00,0x00,0x00,0x88,0x00,0x00,0x00, -0x8d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x92,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x91,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x93,0x00,0x00,0x00, -0x92,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x94,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x93,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x96,0x00,0x00,0x00, -0x42,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x97,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x99,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x96,0x00,0x00,0x00, -0x99,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9b,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x9a,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9d,0x00,0x00,0x00, -0x9b,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,0x9d,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0xa3,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0xa2,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00, -0xa3,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa5,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0xa4,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa8,0x00,0x00,0x00, -0x4a,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0xa9,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xab,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0xa8,0x00,0x00,0x00, -0xab,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xad,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,0xac,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xaf,0x00,0x00,0x00, -0xad,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0xaf,0x00,0x00,0x00, -0x77,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb2,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x72,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0x05,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0xb3,0x00,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xc3,0x00,0x00,0x00, -0x72,0x03,0x00,0x00,0xc1,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xb4,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0xb3,0x00,0x00,0x00, -0xb4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb3,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,0xce,0x00,0x00,0x00, -0xca,0x00,0x00,0x00,0x72,0x03,0x00,0x00,0x3e,0x00,0x03,0x00, -0xce,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0x72,0x03,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb2,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xb4,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xd4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd4,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x8b,0x03,0x00,0x00, -0xb0,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0x3d,0x02,0x00,0x00, -0xd7,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x87,0x03,0x00,0x00,0x9e,0x00,0x00,0x00,0xb4,0x00,0x00,0x00, -0x3a,0x02,0x00,0x00,0xd7,0x00,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x73,0x03,0x00,0x00,0x84,0x00,0x00,0x00, -0xb4,0x00,0x00,0x00,0xeb,0x02,0x00,0x00,0xd7,0x00,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xdb,0x00,0x00,0x00, -0x73,0x03,0x00,0x00,0x8e,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xd6,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xdb,0x00,0x00,0x00,0xd5,0x00,0x00,0x00, -0xd6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd5,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xdd,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x83,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0xd5,0x00,0x00,0x00, -0xcc,0x01,0x00,0x00,0xe0,0x00,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0xe3,0x00,0x00,0x00,0x83,0x03,0x00,0x00, -0x37,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xdf,0x00,0x00,0x00, -0xe0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xe3,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0xdf,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0x73,0x00,0x00,0x00, -0x83,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xeb,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0x99,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xec,0x00,0x00,0x00, -0xeb,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xed,0x00,0x00,0x00,0x87,0x03,0x00,0x00, -0xec,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xef,0x00,0x00,0x00,0xed,0x00,0x00,0x00,0x6e,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf5,0x00,0x00,0x00, -0xe8,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,0x6e,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xf8,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,0xf7,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfc,0x00,0x00,0x00, -0xef,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xef,0x00,0x00,0x00, -0xfb,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x03,0x01,0x00,0x00,0xff,0x00,0x00,0x00,0x02,0x01,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x06,0x01,0x00,0x00, -0xff,0x00,0x00,0x00,0x02,0x01,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x08,0x01,0x00,0x00,0x06,0x01,0x00,0x00, -0x07,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x0b,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x03,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0d,0x01,0x00,0x00, -0x0b,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x10,0x01,0x00,0x00,0x03,0x01,0x00,0x00, -0x02,0x01,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x12,0x01,0x00,0x00,0xff,0x00,0x00,0x00,0x07,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x13,0x01,0x00,0x00, -0x12,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x14,0x01,0x00,0x00,0x10,0x01,0x00,0x00, -0x13,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x1d,0x01,0x00,0x00,0xff,0x00,0x00,0x00,0x07,0x01,0x00,0x00, -0xc4,0x00,0x05,0x00,0x13,0x00,0x00,0x00,0x1e,0x01,0x00,0x00, -0xd0,0x00,0x00,0x00,0x1d,0x01,0x00,0x00,0x72,0x00,0x04,0x00, -0x1f,0x01,0x00,0x00,0x20,0x01,0x00,0x00,0x1e,0x01,0x00,0x00, -0x7c,0x00,0x04,0x00,0x19,0x01,0x00,0x00,0x21,0x01,0x00,0x00, -0x20,0x01,0x00,0x00,0x41,0x00,0x07,0x00,0x31,0x01,0x00,0x00, -0x32,0x01,0x00,0x00,0x2f,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0xfc,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x26,0x01,0x00,0x00,0x33,0x01,0x00,0x00,0x32,0x01,0x00,0x00, -0x73,0x00,0x04,0x00,0x22,0x01,0x00,0x00,0x34,0x01,0x00,0x00, -0x33,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0x37,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,0x36,0x01,0x00,0x00, -0xf7,0x00,0x03,0x00,0x39,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x37,0x01,0x00,0x00,0x38,0x01,0x00,0x00, -0x51,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x38,0x01,0x00,0x00, -0x41,0x00,0x08,0x00,0x3d,0x01,0x00,0x00,0x3e,0x01,0x00,0x00, -0x2f,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0xfc,0x00,0x00,0x00, -0xd0,0x00,0x00,0x00,0x0d,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0x19,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,0x3e,0x01,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x40,0x01,0x00,0x00, -0x3f,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x41,0x01,0x00,0x00,0x40,0x01,0x00,0x00,0xc7,0x00,0x05,0x00, -0x13,0x00,0x00,0x00,0x43,0x01,0x00,0x00,0x41,0x01,0x00,0x00, -0x42,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0x1f,0x01,0x00,0x00, -0x44,0x01,0x00,0x00,0x43,0x01,0x00,0x00,0x7c,0x00,0x04,0x00, -0x19,0x01,0x00,0x00,0x45,0x01,0x00,0x00,0x44,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x49,0x01,0x00,0x00, -0x0d,0x01,0x00,0x00,0x36,0x01,0x00,0x00,0x41,0x00,0x08,0x00, -0x3d,0x01,0x00,0x00,0x4a,0x01,0x00,0x00,0x2f,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0xd0,0x00,0x00,0x00, -0x49,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x19,0x01,0x00,0x00, -0x4b,0x01,0x00,0x00,0x4a,0x01,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x4c,0x01,0x00,0x00,0x4b,0x01,0x00,0x00, -0x7c,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x4d,0x01,0x00,0x00, -0x4c,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x13,0x00,0x00,0x00, -0x4e,0x01,0x00,0x00,0x4d,0x01,0x00,0x00,0x42,0x01,0x00,0x00, -0x72,0x00,0x04,0x00,0x1f,0x01,0x00,0x00,0x4f,0x01,0x00,0x00, -0x4e,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x19,0x01,0x00,0x00, -0x50,0x01,0x00,0x00,0x4f,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0x39,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x51,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x54,0x01,0x00,0x00, -0x0d,0x01,0x00,0x00,0x36,0x01,0x00,0x00,0x41,0x00,0x08,0x00, -0x3d,0x01,0x00,0x00,0x55,0x01,0x00,0x00,0x2f,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0xd0,0x00,0x00,0x00, -0x54,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x19,0x01,0x00,0x00, -0x56,0x01,0x00,0x00,0x55,0x01,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x57,0x01,0x00,0x00,0x56,0x01,0x00,0x00, -0x7c,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x58,0x01,0x00,0x00, -0x57,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x13,0x00,0x00,0x00, -0x5a,0x01,0x00,0x00,0x58,0x01,0x00,0x00,0x59,0x01,0x00,0x00, -0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5d,0x01,0x00,0x00, -0x0d,0x01,0x00,0x00,0x36,0x01,0x00,0x00,0x41,0x00,0x08,0x00, -0x3d,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,0x2f,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0xd0,0x00,0x00,0x00, -0x5d,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x19,0x01,0x00,0x00, -0x5f,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,0xc2,0x00,0x05,0x00, -0x19,0x01,0x00,0x00,0x60,0x01,0x00,0x00,0x5f,0x01,0x00,0x00, -0x81,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,0x19,0x01,0x00,0x00, -0x61,0x01,0x00,0x00,0x60,0x01,0x00,0x00,0xa9,0x00,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x62,0x01,0x00,0x00, -0x61,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x63,0x01,0x00,0x00,0x62,0x01,0x00,0x00,0xc5,0x00,0x05,0x00, -0x13,0x00,0x00,0x00,0x64,0x01,0x00,0x00,0x5a,0x01,0x00,0x00, -0x63,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0x1f,0x01,0x00,0x00, -0x65,0x01,0x00,0x00,0x64,0x01,0x00,0x00,0x7c,0x00,0x04,0x00, -0x19,0x01,0x00,0x00,0x66,0x01,0x00,0x00,0x65,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0x19,0x01,0x00,0x00,0x6b,0x01,0x00,0x00, -0x55,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x19,0x01,0x00,0x00, -0x6c,0x01,0x00,0x00,0x6b,0x01,0x00,0x00,0xa9,0x00,0x00,0x00, -0x41,0x00,0x08,0x00,0x3d,0x01,0x00,0x00,0x6f,0x01,0x00,0x00, -0x2f,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0xfc,0x00,0x00,0x00, -0xd0,0x00,0x00,0x00,0x0d,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0x19,0x01,0x00,0x00,0x70,0x01,0x00,0x00,0x6f,0x01,0x00,0x00, -0xc2,0x00,0x05,0x00,0x19,0x01,0x00,0x00,0x71,0x01,0x00,0x00, -0x70,0x01,0x00,0x00,0x81,0x00,0x00,0x00,0xc4,0x00,0x05,0x00, -0x19,0x01,0x00,0x00,0x72,0x01,0x00,0x00,0x71,0x01,0x00,0x00, -0xa9,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,0x19,0x01,0x00,0x00, -0x73,0x01,0x00,0x00,0x6c,0x01,0x00,0x00,0x72,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0x39,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x39,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x19,0x01,0x00,0x00, -0xa7,0x03,0x00,0x00,0x50,0x01,0x00,0x00,0x38,0x01,0x00,0x00, -0x73,0x01,0x00,0x00,0x51,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x19,0x01,0x00,0x00,0xa6,0x03,0x00,0x00,0x45,0x01,0x00,0x00, -0x38,0x01,0x00,0x00,0x66,0x01,0x00,0x00,0x51,0x01,0x00,0x00, -0x51,0x00,0x05,0x00,0xc4,0x00,0x00,0x00,0x76,0x01,0x00,0x00, -0x34,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0x78,0x01,0x00,0x00,0xa6,0x03,0x00,0x00, -0x85,0x00,0x05,0x00,0xc4,0x00,0x00,0x00,0x79,0x01,0x00,0x00, -0x76,0x01,0x00,0x00,0x78,0x01,0x00,0x00,0x51,0x00,0x05,0x00, -0xc4,0x00,0x00,0x00,0x7c,0x01,0x00,0x00,0x34,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0x70,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0x7e,0x01,0x00,0x00,0xa7,0x03,0x00,0x00,0x85,0x00,0x05,0x00, -0xc4,0x00,0x00,0x00,0x7f,0x01,0x00,0x00,0x7c,0x01,0x00,0x00, -0x7e,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x3d,0x01,0x00,0x00, -0x89,0x01,0x00,0x00,0x2f,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0xfc,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x14,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0x19,0x01,0x00,0x00,0x8a,0x01,0x00,0x00, -0x89,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x8c,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x36,0x01,0x00,0x00, -0xc2,0x00,0x05,0x00,0x19,0x01,0x00,0x00,0x8d,0x01,0x00,0x00, -0x8a,0x01,0x00,0x00,0x8c,0x01,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x8e,0x01,0x00,0x00,0x8d,0x01,0x00,0x00, -0x7c,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x8f,0x01,0x00,0x00, -0x8e,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x13,0x00,0x00,0x00, -0x90,0x01,0x00,0x00,0x8f,0x01,0x00,0x00,0x59,0x01,0x00,0x00, -0x6f,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x91,0x01,0x00,0x00, -0x90,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x3d,0x01,0x00,0x00, -0x94,0x01,0x00,0x00,0x2f,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0xfc,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x13,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0x19,0x01,0x00,0x00,0x95,0x01,0x00,0x00, -0x94,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x19,0x01,0x00,0x00, -0x97,0x01,0x00,0x00,0x95,0x01,0x00,0x00,0x21,0x01,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x98,0x01,0x00,0x00, -0x97,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x99,0x01,0x00,0x00,0x98,0x01,0x00,0x00,0xab,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0x9a,0x01,0x00,0x00,0x99,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xa9,0x00,0x06,0x00,0x13,0x00,0x00,0x00, -0x9c,0x01,0x00,0x00,0x9a,0x01,0x00,0x00,0x9b,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0x9d,0x01,0x00,0x00,0x9c,0x01,0x00,0x00,0x81,0x00,0x05,0x00, -0xc4,0x00,0x00,0x00,0x9e,0x01,0x00,0x00,0x91,0x01,0x00,0x00, -0x9d,0x01,0x00,0x00,0x7f,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0xcc,0x03,0x00,0x00,0x7f,0x01,0x00,0x00,0x0c,0x00,0x08,0x00, -0xc4,0x00,0x00,0x00,0xa1,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0x79,0x01,0x00,0x00,0x9e,0x01,0x00,0x00, -0xcc,0x03,0x00,0x00,0x73,0x00,0x04,0x00,0x25,0x01,0x00,0x00, -0xa2,0x01,0x00,0x00,0xa1,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0xa3,0x01,0x00,0x00,0xa4,0x01,0x00,0x00,0x84,0x01,0x00,0x00, -0xf8,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0xa4,0x01,0x00,0x00, -0xa2,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa6,0x01,0x00,0x00,0xf8,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xaa,0x01,0x00,0x00, -0x14,0x01,0x00,0x00,0x39,0x00,0x00,0x00,0x41,0x00,0x08,0x00, -0x3d,0x01,0x00,0x00,0xab,0x01,0x00,0x00,0x2f,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x97,0x00,0x00,0x00, -0xaa,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x19,0x01,0x00,0x00, -0xac,0x01,0x00,0x00,0xab,0x01,0x00,0x00,0xc2,0x00,0x05,0x00, -0x19,0x01,0x00,0x00,0xaf,0x01,0x00,0x00,0xac,0x01,0x00,0x00, -0x8c,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xb0,0x01,0x00,0x00,0xaf,0x01,0x00,0x00,0x7c,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0xb1,0x01,0x00,0x00,0xb0,0x01,0x00,0x00, -0xc7,0x00,0x05,0x00,0x13,0x00,0x00,0x00,0xb2,0x01,0x00,0x00, -0xb1,0x01,0x00,0x00,0x59,0x01,0x00,0x00,0x6f,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0xb3,0x01,0x00,0x00,0xb2,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb6,0x01,0x00,0x00, -0x13,0x01,0x00,0x00,0x39,0x00,0x00,0x00,0x41,0x00,0x08,0x00, -0x3d,0x01,0x00,0x00,0xb7,0x01,0x00,0x00,0x2f,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0xb6,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x19,0x01,0x00,0x00, -0xb8,0x01,0x00,0x00,0xb7,0x01,0x00,0x00,0xc7,0x00,0x05,0x00, -0x19,0x01,0x00,0x00,0xba,0x01,0x00,0x00,0xb8,0x01,0x00,0x00, -0x21,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xbb,0x01,0x00,0x00,0xba,0x01,0x00,0x00,0x7c,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0xbc,0x01,0x00,0x00,0xbb,0x01,0x00,0x00, -0xab,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xbd,0x01,0x00,0x00, -0xbc,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0xa9,0x00,0x06,0x00, -0x13,0x00,0x00,0x00,0xbe,0x01,0x00,0x00,0xbd,0x01,0x00,0x00, -0x9b,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0x6f,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0xbf,0x01,0x00,0x00,0xbe,0x01,0x00,0x00, -0x81,0x00,0x05,0x00,0xc4,0x00,0x00,0x00,0xc0,0x01,0x00,0x00, -0xb3,0x01,0x00,0x00,0xbf,0x01,0x00,0x00,0x0c,0x00,0x08,0x00, -0xc4,0x00,0x00,0x00,0xc3,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0x79,0x01,0x00,0x00,0xc0,0x01,0x00,0x00, -0xcc,0x03,0x00,0x00,0x73,0x00,0x04,0x00,0x25,0x01,0x00,0x00, -0xc4,0x01,0x00,0x00,0xc3,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0xa3,0x01,0x00,0x00,0xc5,0x01,0x00,0x00,0x84,0x01,0x00,0x00, -0xa6,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xc5,0x01,0x00,0x00, -0xc4,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xe0,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xe0,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xcc,0x01,0x00,0x00,0x83,0x03,0x00,0x00, -0xca,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xdd,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xdf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xce,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xce,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x84,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0x36,0x02,0x00,0x00, -0xcf,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0xd4,0x01,0x00,0x00,0x84,0x03,0x00,0x00,0xa7,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xd0,0x01,0x00,0x00,0xcf,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xd4,0x01,0x00,0x00, -0xcf,0x01,0x00,0x00,0xd0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xcf,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd9,0x01,0x00,0x00,0x7e,0x00,0x00,0x00,0x84,0x03,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdc,0x01,0x00,0x00, -0xd9,0x01,0x00,0x00,0xab,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xdd,0x01,0x00,0x00,0xdc,0x01,0x00,0x00, -0x77,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xde,0x01,0x00,0x00,0x8b,0x03,0x00,0x00,0xdd,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe0,0x01,0x00,0x00, -0xde,0x01,0x00,0x00,0x79,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xe6,0x01,0x00,0x00,0xd9,0x01,0x00,0x00, -0xe5,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xe8,0x01,0x00,0x00,0x79,0x00,0x00,0x00,0x77,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe9,0x01,0x00,0x00, -0xe6,0x01,0x00,0x00,0xe8,0x01,0x00,0x00,0x41,0x00,0x08,0x00, -0xf8,0x01,0x00,0x00,0xf9,0x01,0x00,0x00,0xf6,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xe0,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0xfa,0x01,0x00,0x00,0xf9,0x01,0x00,0x00,0x73,0x00,0x04,0x00, -0x25,0x01,0x00,0x00,0xfb,0x01,0x00,0x00,0xfa,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0xa3,0x01,0x00,0x00,0xfc,0x01,0x00,0x00, -0xee,0x01,0x00,0x00,0xe9,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0xfc,0x01,0x00,0x00,0xfb,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xfe,0x01,0x00,0x00,0xe9,0x01,0x00,0x00, -0x39,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0xf8,0x01,0x00,0x00, -0x00,0x02,0x00,0x00,0xf6,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0xe0,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x01,0x02,0x00,0x00, -0x00,0x02,0x00,0x00,0x73,0x00,0x04,0x00,0x25,0x01,0x00,0x00, -0x02,0x02,0x00,0x00,0x01,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0xa3,0x01,0x00,0x00,0x03,0x02,0x00,0x00,0xee,0x01,0x00,0x00, -0xfe,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x03,0x02,0x00,0x00, -0x02,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x05,0x02,0x00,0x00,0xe9,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x41,0x00,0x08,0x00,0xf8,0x01,0x00,0x00,0x07,0x02,0x00,0x00, -0xf6,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0xe0,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0x08,0x02,0x00,0x00,0x07,0x02,0x00,0x00, -0x73,0x00,0x04,0x00,0x25,0x01,0x00,0x00,0x09,0x02,0x00,0x00, -0x08,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xa3,0x01,0x00,0x00, -0x0a,0x02,0x00,0x00,0xee,0x01,0x00,0x00,0x05,0x02,0x00,0x00, -0x3e,0x00,0x03,0x00,0x0a,0x02,0x00,0x00,0x09,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0d,0x02,0x00,0x00, -0xe9,0x01,0x00,0x00,0x0c,0x02,0x00,0x00,0x41,0x00,0x08,0x00, -0xf8,0x01,0x00,0x00,0x0f,0x02,0x00,0x00,0xf6,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xe0,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0x0c,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0x10,0x02,0x00,0x00,0x0f,0x02,0x00,0x00,0x73,0x00,0x04,0x00, -0x25,0x01,0x00,0x00,0x11,0x02,0x00,0x00,0x10,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0xa3,0x01,0x00,0x00,0x12,0x02,0x00,0x00, -0xee,0x01,0x00,0x00,0x0d,0x02,0x00,0x00,0x3e,0x00,0x03,0x00, -0x12,0x02,0x00,0x00,0x11,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x14,0x02,0x00,0x00,0xe9,0x01,0x00,0x00, -0x36,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0xf8,0x01,0x00,0x00, -0x16,0x02,0x00,0x00,0xf6,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0xe0,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,0x3e,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x17,0x02,0x00,0x00, -0x16,0x02,0x00,0x00,0x73,0x00,0x04,0x00,0x25,0x01,0x00,0x00, -0x18,0x02,0x00,0x00,0x17,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0xa3,0x01,0x00,0x00,0x19,0x02,0x00,0x00,0xee,0x01,0x00,0x00, -0x14,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x19,0x02,0x00,0x00, -0x18,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x1c,0x02,0x00,0x00,0xe9,0x01,0x00,0x00,0x1b,0x02,0x00,0x00, -0x41,0x00,0x08,0x00,0xf8,0x01,0x00,0x00,0x1e,0x02,0x00,0x00, -0xf6,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0xe0,0x01,0x00,0x00, -0xd0,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0x1f,0x02,0x00,0x00,0x1e,0x02,0x00,0x00, -0x73,0x00,0x04,0x00,0x25,0x01,0x00,0x00,0x20,0x02,0x00,0x00, -0x1f,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xa3,0x01,0x00,0x00, -0x21,0x02,0x00,0x00,0xee,0x01,0x00,0x00,0x1c,0x02,0x00,0x00, -0x3e,0x00,0x03,0x00,0x21,0x02,0x00,0x00,0x20,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x24,0x02,0x00,0x00, -0xe9,0x01,0x00,0x00,0x23,0x02,0x00,0x00,0x41,0x00,0x08,0x00, -0xf8,0x01,0x00,0x00,0x26,0x02,0x00,0x00,0xf6,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xe0,0x01,0x00,0x00,0xd0,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0x27,0x02,0x00,0x00,0x26,0x02,0x00,0x00,0x73,0x00,0x04,0x00, -0x25,0x01,0x00,0x00,0x28,0x02,0x00,0x00,0x27,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0xa3,0x01,0x00,0x00,0x29,0x02,0x00,0x00, -0xee,0x01,0x00,0x00,0x24,0x02,0x00,0x00,0x3e,0x00,0x03,0x00, -0x29,0x02,0x00,0x00,0x28,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x2c,0x02,0x00,0x00,0xe9,0x01,0x00,0x00, -0x2b,0x02,0x00,0x00,0x41,0x00,0x08,0x00,0xf8,0x01,0x00,0x00, -0x2e,0x02,0x00,0x00,0xf6,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0xe0,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,0x0c,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x2f,0x02,0x00,0x00, -0x2e,0x02,0x00,0x00,0x73,0x00,0x04,0x00,0x25,0x01,0x00,0x00, -0x30,0x02,0x00,0x00,0x2f,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0xa3,0x01,0x00,0x00,0x31,0x02,0x00,0x00,0xee,0x01,0x00,0x00, -0x2c,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x31,0x02,0x00,0x00, -0x30,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x36,0x02,0x00,0x00,0x84,0x03,0x00,0x00,0x34,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0xce,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xd0,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x37,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3a,0x02,0x00,0x00,0x87,0x03,0x00,0x00, -0x38,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x3d,0x02,0x00,0x00,0x8b,0x03,0x00,0x00,0x3b,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x3f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x3f,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x8d,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0xd0,0x01,0x00,0x00, -0xe9,0x02,0x00,0x00,0x42,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0x45,0x02,0x00,0x00,0x8d,0x03,0x00,0x00, -0x6c,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x41,0x02,0x00,0x00, -0x42,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x45,0x02,0x00,0x00,0x40,0x02,0x00,0x00,0x41,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x40,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x47,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x47,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x91,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0x40,0x02,0x00,0x00,0x73,0x02,0x00,0x00, -0x4a,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0x4d,0x02,0x00,0x00,0x91,0x03,0x00,0x00,0x60,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x49,0x02,0x00,0x00,0x4a,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x4d,0x02,0x00,0x00, -0x48,0x02,0x00,0x00,0x49,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x48,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x4f,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x4f,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xa3,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0x48,0x02,0x00,0x00,0x71,0x02,0x00,0x00,0x50,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x55,0x02,0x00,0x00, -0xa3,0x03,0x00,0x00,0x62,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x51,0x02,0x00,0x00,0x50,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x55,0x02,0x00,0x00,0x50,0x02,0x00,0x00, -0x51,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x50,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5b,0x02,0x00,0x00, -0x91,0x03,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x5d,0x02,0x00,0x00,0x5b,0x02,0x00,0x00, -0xa3,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x5f,0x02,0x00,0x00,0x55,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x61,0x02,0x00,0x00, -0x91,0x03,0x00,0x00,0x61,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x62,0x02,0x00,0x00,0x5f,0x02,0x00,0x00, -0x61,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x64,0x02,0x00,0x00,0x64,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x65,0x02,0x00,0x00, -0x62,0x02,0x00,0x00,0x64,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x67,0x02,0x00,0x00,0x65,0x02,0x00,0x00, -0xa3,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x69,0x02,0x00,0x00,0x67,0x02,0x00,0x00,0x68,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6b,0x02,0x00,0x00, -0x69,0x02,0x00,0x00,0x8d,0x03,0x00,0x00,0x41,0x00,0x05,0x00, -0xa3,0x01,0x00,0x00,0x6c,0x02,0x00,0x00,0x84,0x01,0x00,0x00, -0x6b,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x25,0x01,0x00,0x00, -0x6d,0x02,0x00,0x00,0x6c,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0x6e,0x02,0x00,0x00,0x6f,0x02,0x00,0x00,0x59,0x02,0x00,0x00, -0x5d,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x6f,0x02,0x00,0x00, -0x6d,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x71,0x02,0x00,0x00,0xa3,0x03,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x4f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x51,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x4a,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x4a,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x73,0x02,0x00,0x00,0x91,0x03,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x47,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x49,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x75,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x75,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x92,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0x49,0x02,0x00,0x00,0xa1,0x02,0x00,0x00, -0x78,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0x7b,0x02,0x00,0x00,0x92,0x03,0x00,0x00,0xbf,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x77,0x02,0x00,0x00,0x78,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x7b,0x02,0x00,0x00, -0x76,0x02,0x00,0x00,0x77,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x76,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x7d,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x7d,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xa0,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0x76,0x02,0x00,0x00,0x9f,0x02,0x00,0x00,0x7e,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x83,0x02,0x00,0x00, -0xa0,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x7f,0x02,0x00,0x00,0x7e,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x83,0x02,0x00,0x00,0x7e,0x02,0x00,0x00, -0x7f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x7e,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x89,0x02,0x00,0x00, -0x92,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x8b,0x02,0x00,0x00,0x89,0x02,0x00,0x00, -0xa0,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x8d,0x02,0x00,0x00,0x59,0x00,0x00,0x00,0xb9,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x90,0x02,0x00,0x00, -0x92,0x03,0x00,0x00,0x8f,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x91,0x02,0x00,0x00,0x8d,0x02,0x00,0x00, -0x90,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x93,0x02,0x00,0x00,0x68,0x00,0x00,0x00,0xbc,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x94,0x02,0x00,0x00, -0x91,0x02,0x00,0x00,0x93,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x96,0x02,0x00,0x00,0x94,0x02,0x00,0x00, -0xa0,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x98,0x02,0x00,0x00,0x96,0x02,0x00,0x00,0x97,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9a,0x02,0x00,0x00, -0x98,0x02,0x00,0x00,0x8d,0x03,0x00,0x00,0x41,0x00,0x05,0x00, -0xa3,0x01,0x00,0x00,0x9b,0x02,0x00,0x00,0xee,0x01,0x00,0x00, -0x9a,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x25,0x01,0x00,0x00, -0x9c,0x02,0x00,0x00,0x9b,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0x6e,0x02,0x00,0x00,0x9d,0x02,0x00,0x00,0x87,0x02,0x00,0x00, -0x8b,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x9d,0x02,0x00,0x00, -0x9c,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9f,0x02,0x00,0x00,0xa0,0x03,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x7d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x7f,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x78,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x78,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa1,0x02,0x00,0x00,0x92,0x03,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x75,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x77,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0xa3,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xa3,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x93,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0x77,0x02,0x00,0x00,0xe7,0x02,0x00,0x00, -0xa6,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0xa9,0x02,0x00,0x00,0x93,0x03,0x00,0x00,0xbf,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xa5,0x02,0x00,0x00,0xa6,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xa9,0x02,0x00,0x00, -0xa4,0x02,0x00,0x00,0xa5,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xa4,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xab,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xab,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x97,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0xa4,0x02,0x00,0x00,0xe5,0x02,0x00,0x00,0xae,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xb1,0x02,0x00,0x00, -0x97,0x03,0x00,0x00,0x60,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xad,0x02,0x00,0x00,0xae,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xb1,0x02,0x00,0x00,0xac,0x02,0x00,0x00, -0xad,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xac,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0xb3,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xb3,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x99,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0xac,0x02,0x00,0x00, -0xe3,0x02,0x00,0x00,0xb6,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0xb9,0x02,0x00,0x00,0x99,0x03,0x00,0x00, -0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xb5,0x02,0x00,0x00, -0xb6,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xb9,0x02,0x00,0x00,0xb4,0x02,0x00,0x00,0xb5,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xb4,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0xbb,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xbb,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x9b,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0xb4,0x02,0x00,0x00,0xe1,0x02,0x00,0x00, -0xbc,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0xc1,0x02,0x00,0x00,0x9b,0x03,0x00,0x00,0x62,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xbd,0x02,0x00,0x00,0xbc,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xc1,0x02,0x00,0x00, -0xbc,0x02,0x00,0x00,0xbd,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xbc,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xc3,0x02,0x00,0x00,0x93,0x03,0x00,0x00,0xbc,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc5,0x02,0x00,0x00, -0xc3,0x02,0x00,0x00,0x99,0x03,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xc7,0x02,0x00,0x00,0xc5,0x02,0x00,0x00, -0xc6,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xc9,0x02,0x00,0x00,0x97,0x03,0x00,0x00,0x62,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xca,0x02,0x00,0x00, -0xc7,0x02,0x00,0x00,0xc9,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xcc,0x02,0x00,0x00,0xca,0x02,0x00,0x00, -0x9b,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd0,0x02,0x00,0x00,0xc9,0x02,0x00,0x00,0x9b,0x03,0x00,0x00, -0x41,0x00,0x05,0x00,0x6e,0x02,0x00,0x00,0xd1,0x02,0x00,0x00, -0x59,0x02,0x00,0x00,0xd0,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0x25,0x01,0x00,0x00,0xd2,0x02,0x00,0x00,0xd1,0x02,0x00,0x00, -0x73,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0xd3,0x02,0x00,0x00, -0xd2,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x6e,0x02,0x00,0x00, -0xd8,0x02,0x00,0x00,0x87,0x02,0x00,0x00,0xc5,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0x25,0x01,0x00,0x00,0xd9,0x02,0x00,0x00, -0xd8,0x02,0x00,0x00,0x73,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0xda,0x02,0x00,0x00,0xd9,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0xcd,0x00,0x00,0x00,0xdc,0x02,0x00,0x00,0xca,0x00,0x00,0x00, -0xcc,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0xdd,0x02,0x00,0x00,0xdc,0x02,0x00,0x00,0x0c,0x00,0x08,0x00, -0xc4,0x00,0x00,0x00,0xde,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0xd3,0x02,0x00,0x00,0xda,0x02,0x00,0x00, -0xdd,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0xdc,0x02,0x00,0x00, -0xde,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xe1,0x02,0x00,0x00,0x9b,0x03,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xbb,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xbd,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xb6,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xb6,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xe3,0x02,0x00,0x00,0x99,0x03,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb3,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xb5,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0xae,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xae,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe5,0x02,0x00,0x00, -0x97,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xab,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xad,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0xa6,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xa6,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xe7,0x02,0x00,0x00,0x93,0x03,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xa3,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xa5,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x42,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x42,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xe9,0x02,0x00,0x00,0x8d,0x03,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x3f,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x41,0x02,0x00,0x00,0xe0,0x00,0x04,0x00, -0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x37,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0xd7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xd7,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xeb,0x02,0x00,0x00,0x73,0x03,0x00,0x00,0x6c,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xd4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xd6,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xf0,0x02,0x00,0x00,0x55,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf1,0x02,0x00,0x00, -0x96,0x00,0x00,0x00,0xf0,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xf6,0x02,0x00,0x00,0x59,0x00,0x00,0x00, -0xb9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xf7,0x02,0x00,0x00,0xa8,0x00,0x00,0x00,0xf6,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0xfc,0x02,0x00,0x00, -0x12,0x00,0x00,0x00,0xfb,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xfd,0x02,0x00,0x00,0xfc,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfe,0x02,0x00,0x00, -0x0f,0x00,0x00,0x00,0xfd,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x02,0x03,0x00,0x00,0x47,0x00,0x00,0x00, -0xfd,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x04,0x03,0x00,0x00,0x03,0x03,0x00,0x00,0x0c,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x05,0x03,0x00,0x00, -0x04,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x06,0x03,0x00,0x00,0x02,0x03,0x00,0x00,0x05,0x03,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x07,0x03,0x00,0x00, -0xfe,0x02,0x00,0x00,0x06,0x03,0x00,0x00,0xf9,0x00,0x02,0x00, -0x09,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x09,0x03,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x74,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0x6f,0x03,0x00,0x00, -0x0c,0x03,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0x0f,0x03,0x00,0x00,0x74,0x03,0x00,0x00,0xbf,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x0b,0x03,0x00,0x00,0x0c,0x03,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x0f,0x03,0x00,0x00, -0x0a,0x03,0x00,0x00,0x0b,0x03,0x00,0x00,0xf8,0x00,0x02,0x00, -0x0a,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,0x11,0x03,0x00,0x00, -0xf8,0x00,0x02,0x00,0x11,0x03,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x75,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0x0a,0x03,0x00,0x00,0x6d,0x03,0x00,0x00,0x14,0x03,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x17,0x03,0x00,0x00, -0x75,0x03,0x00,0x00,0x60,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x13,0x03,0x00,0x00,0x14,0x03,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x17,0x03,0x00,0x00,0x12,0x03,0x00,0x00, -0x13,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x12,0x03,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1b,0x03,0x00,0x00, -0x75,0x03,0x00,0x00,0x61,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x1c,0x03,0x00,0x00,0xf1,0x02,0x00,0x00, -0x1b,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x1e,0x03,0x00,0x00,0x64,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1f,0x03,0x00,0x00, -0x1c,0x03,0x00,0x00,0x1e,0x03,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x23,0x03,0x00,0x00,0x74,0x03,0x00,0x00, -0x8f,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x24,0x03,0x00,0x00,0xf7,0x02,0x00,0x00,0x23,0x03,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x26,0x03,0x00,0x00, -0x68,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x27,0x03,0x00,0x00,0x24,0x03,0x00,0x00, -0x26,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,0x29,0x03,0x00,0x00, -0xf8,0x00,0x02,0x00,0x29,0x03,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x77,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0x12,0x03,0x00,0x00,0x6b,0x03,0x00,0x00,0x2c,0x03,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x2f,0x03,0x00,0x00, -0x77,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x2b,0x03,0x00,0x00,0x2c,0x03,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x2f,0x03,0x00,0x00,0x2a,0x03,0x00,0x00, -0x2b,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x2a,0x03,0x00,0x00, -0xf9,0x00,0x02,0x00,0x31,0x03,0x00,0x00,0xf8,0x00,0x02,0x00, -0x31,0x03,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x79,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0x2a,0x03,0x00,0x00, -0x69,0x03,0x00,0x00,0x34,0x03,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0x37,0x03,0x00,0x00,0x79,0x03,0x00,0x00, -0x62,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x33,0x03,0x00,0x00, -0x34,0x03,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x37,0x03,0x00,0x00,0x32,0x03,0x00,0x00,0x33,0x03,0x00,0x00, -0xf8,0x00,0x02,0x00,0x32,0x03,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3a,0x03,0x00,0x00,0x1f,0x03,0x00,0x00, -0x79,0x03,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0x3d,0x03,0x00,0x00,0x3a,0x03,0x00,0x00,0x36,0x00,0x00,0x00, -0xf7,0x00,0x03,0x00,0x3f,0x03,0x00,0x00,0x00,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x3d,0x03,0x00,0x00,0x3e,0x03,0x00,0x00, -0x3f,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x3e,0x03,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x42,0x03,0x00,0x00, -0x27,0x03,0x00,0x00,0x77,0x03,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x43,0x03,0x00,0x00,0x12,0x00,0x00,0x00, -0xd0,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x44,0x03,0x00,0x00,0x43,0x03,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0x45,0x03,0x00,0x00,0x42,0x03,0x00,0x00, -0x44,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,0x3f,0x03,0x00,0x00, -0xf8,0x00,0x02,0x00,0x3f,0x03,0x00,0x00,0xf5,0x00,0x07,0x00, -0xc2,0x00,0x00,0x00,0x46,0x03,0x00,0x00,0x3d,0x03,0x00,0x00, -0x32,0x03,0x00,0x00,0x45,0x03,0x00,0x00,0x3e,0x03,0x00,0x00, -0xf7,0x00,0x03,0x00,0x48,0x03,0x00,0x00,0x00,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x46,0x03,0x00,0x00,0x47,0x03,0x00,0x00, -0x48,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x47,0x03,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x50,0x03,0x00,0x00, -0x27,0x03,0x00,0x00,0x77,0x03,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x52,0x03,0x00,0x00,0x12,0x00,0x00,0x00, -0x51,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x53,0x03,0x00,0x00,0x52,0x03,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x54,0x03,0x00,0x00,0x50,0x03,0x00,0x00, -0x53,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x55,0x03,0x00,0x00,0x07,0x03,0x00,0x00,0x54,0x03,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x57,0x03,0x00,0x00, -0x55,0x03,0x00,0x00,0x1f,0x03,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x59,0x03,0x00,0x00,0x57,0x03,0x00,0x00, -0x79,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x5b,0x03,0x00,0x00,0x74,0x03,0x00,0x00,0xbc,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5d,0x03,0x00,0x00, -0x5b,0x03,0x00,0x00,0x77,0x03,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x5f,0x03,0x00,0x00,0x5d,0x03,0x00,0x00, -0x5e,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x61,0x03,0x00,0x00,0x75,0x03,0x00,0x00,0x62,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x62,0x03,0x00,0x00, -0x5f,0x03,0x00,0x00,0x61,0x03,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x64,0x03,0x00,0x00,0x62,0x03,0x00,0x00, -0x79,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00, -0x65,0x03,0x00,0x00,0xca,0x00,0x00,0x00,0x64,0x03,0x00,0x00, -0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x66,0x03,0x00,0x00, -0x65,0x03,0x00,0x00,0x41,0x00,0x06,0x00,0xf8,0x01,0x00,0x00, -0x67,0x03,0x00,0x00,0x4c,0x03,0x00,0x00,0x34,0x00,0x00,0x00, -0x59,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,0x67,0x03,0x00,0x00, -0x66,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,0x48,0x03,0x00,0x00, -0xf8,0x00,0x02,0x00,0x48,0x03,0x00,0x00,0xf9,0x00,0x02,0x00, -0x34,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x34,0x03,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x69,0x03,0x00,0x00, -0x79,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x31,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x33,0x03,0x00,0x00, -0xf9,0x00,0x02,0x00,0x2c,0x03,0x00,0x00,0xf8,0x00,0x02,0x00, -0x2c,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x6b,0x03,0x00,0x00,0x77,0x03,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x29,0x03,0x00,0x00,0xf8,0x00,0x02,0x00, -0x2b,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,0x14,0x03,0x00,0x00, -0xf8,0x00,0x02,0x00,0x14,0x03,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x6d,0x03,0x00,0x00,0x75,0x03,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x11,0x03,0x00,0x00, -0xf8,0x00,0x02,0x00,0x13,0x03,0x00,0x00,0xf9,0x00,0x02,0x00, -0x0c,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x0c,0x03,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6f,0x03,0x00,0x00, -0x74,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x09,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x0b,0x03,0x00,0x00, -0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00, -}; -const uint64_t matmul_q5_k_f32_aligned_len = 13172; - -unsigned char matmul_q5_k_f32_aligned_fp32_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0xa3,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x27,0x00,0x00,0x00, -0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00, -0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00, -0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30, -0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x0f,0x00,0x0f,0x00,0x05,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x4c,0x00,0x00,0x00,0x2f,0x01,0x00,0x00,0x83,0x01,0x00,0x00, -0xeb,0x01,0x00,0x00,0xf2,0x01,0x00,0x00,0xd9,0x02,0x00,0x00, -0x22,0x03,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x05,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x30,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x0d,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0x10,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x37,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x3d,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x4c,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x4f,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x53,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x60,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x62,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x6c,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xa7,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xb9,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xbc,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x28,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x29,0x01,0x00,0x00,0x06,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x2a,0x01,0x00,0x00, -0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x2b,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x2b,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x2b,0x01,0x00,0x00,0x02,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x2b,0x01,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x30,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x2c,0x01,0x00,0x00, -0x06,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0x2d,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x2d,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x2d,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x2f,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x2f,0x01,0x00,0x00,0x21,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xc3,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xc4,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xef,0x01,0x00,0x00,0x06,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0xf0,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0xf0,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0xf0,0x01,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xf2,0x01,0x00,0x00, -0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xf2,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xd9,0x02,0x00,0x00,0x0b,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x1f,0x03,0x00,0x00, -0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0x20,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x20,0x03,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x20,0x03,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x22,0x03,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x22,0x03,0x00,0x00,0x21,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00, -0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x1e,0x00,0x10,0x00,0x10,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x11,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x11,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x15,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0x0a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x27,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x3e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x61,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x63,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x61,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x67,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x61,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x72,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x78,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x77,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x7d,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x77,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x81,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x97,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0xa2,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0xa9,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xb8,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xb9,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x4f,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbd,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0xbc,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbe,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbf,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0xbe,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc0,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0xbf,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc1,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0xbc,0x00,0x00,0x00, -0x14,0x00,0x02,0x00,0xc2,0x00,0x00,0x00,0x16,0x00,0x03,0x00, -0xc4,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xc5,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xc6,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x1c,0x00,0x04,0x00, -0xc8,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0xc7,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0xc9,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0xc8,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0xcc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0xcd,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xc4,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0xd0,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xf4,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xfb,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x02,0x01,0x00,0x00,0x20,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x07,0x01,0x00,0x00, -0x10,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x19,0x01,0x00,0x00, -0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x15,0x00,0x04,0x00, -0x1f,0x01,0x00,0x00,0x08,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x17,0x00,0x04,0x00,0x22,0x01,0x00,0x00,0xc4,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0x25,0x01,0x00,0x00, -0x10,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x26,0x01,0x00,0x00, -0x25,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x27,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x1c,0x00,0x04,0x00,0x28,0x01,0x00,0x00,0x19,0x01,0x00,0x00, -0x27,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,0x29,0x01,0x00,0x00, -0x19,0x01,0x00,0x00,0x02,0x01,0x00,0x00,0x1c,0x00,0x04,0x00, -0x2a,0x01,0x00,0x00,0x19,0x01,0x00,0x00,0xfb,0x00,0x00,0x00, -0x1e,0x00,0x06,0x00,0x2b,0x01,0x00,0x00,0x26,0x01,0x00,0x00, -0x28,0x01,0x00,0x00,0x29,0x01,0x00,0x00,0x2a,0x01,0x00,0x00, -0x1d,0x00,0x03,0x00,0x2c,0x01,0x00,0x00,0x2b,0x01,0x00,0x00, -0x1e,0x00,0x03,0x00,0x2d,0x01,0x00,0x00,0x2c,0x01,0x00,0x00, -0x20,0x00,0x04,0x00,0x2e,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x2d,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x2e,0x01,0x00,0x00, -0x2f,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x31,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x26,0x01,0x00,0x00, -0x20,0x00,0x04,0x00,0x3c,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x19,0x01,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x41,0x01,0x00,0x00,0x3f,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x58,0x01,0x00,0x00,0x0f,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x7f,0x01,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x80,0x01,0x00,0x00, -0x84,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x7f,0x01,0x00,0x00, -0x1c,0x00,0x04,0x00,0x81,0x01,0x00,0x00,0xc4,0x00,0x00,0x00, -0x80,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x82,0x01,0x00,0x00, -0x04,0x00,0x00,0x00,0x81,0x01,0x00,0x00,0x3b,0x00,0x04,0x00, -0x82,0x01,0x00,0x00,0x83,0x01,0x00,0x00,0x04,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x9a,0x01,0x00,0x00, -0x10,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xa1,0x01,0x00,0x00, -0x04,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xc3,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0x33,0x00,0x06,0x00,0x09,0x00,0x00,0x00,0xc4,0x01,0x00,0x00, -0xc3,0x01,0x00,0x00,0x39,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc5,0x01,0x00,0x00, -0x51,0x00,0x00,0x00,0xc4,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc6,0x01,0x00,0x00, -0x84,0x00,0x00,0x00,0xc5,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc7,0x01,0x00,0x00, -0x86,0x00,0x00,0x00,0xc6,0x01,0x00,0x00,0x6c,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xe2,0x01,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xe7,0x01,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xe8,0x01,0x00,0x00, -0x84,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0xe7,0x01,0x00,0x00, -0x1c,0x00,0x04,0x00,0xe9,0x01,0x00,0x00,0xc4,0x00,0x00,0x00, -0xe8,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0xea,0x01,0x00,0x00, -0x04,0x00,0x00,0x00,0xe9,0x01,0x00,0x00,0x3b,0x00,0x04,0x00, -0xea,0x01,0x00,0x00,0xeb,0x01,0x00,0x00,0x04,0x00,0x00,0x00, -0x17,0x00,0x04,0x00,0xee,0x01,0x00,0x00,0xc4,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0xef,0x01,0x00,0x00, -0xee,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,0xf0,0x01,0x00,0x00, -0xef,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0xf1,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0xf0,0x01,0x00,0x00,0x3b,0x00,0x04,0x00, -0xf1,0x01,0x00,0x00,0xf2,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0xf4,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0xc4,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x05,0x02,0x00,0x00,0x03,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x0b,0x02,0x00,0x00,0x51,0x00,0x00,0x00, -0xc4,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x0c,0x02,0x00,0x00,0x84,0x00,0x00,0x00, -0x0b,0x02,0x00,0x00,0x77,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x0d,0x02,0x00,0x00,0x86,0x00,0x00,0x00, -0x0c,0x02,0x00,0x00,0x6c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x10,0x02,0x00,0x00,0x08,0x01,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x11,0x02,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x14,0x02,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x77,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x2f,0x02,0x00,0x00, -0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x1c,0x00,0x04,0x00,0x30,0x02,0x00,0x00,0xc4,0x00,0x00,0x00, -0x2f,0x02,0x00,0x00,0x20,0x00,0x04,0x00,0x31,0x02,0x00,0x00, -0x07,0x00,0x00,0x00,0x30,0x02,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x41,0x02,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x5c,0x02,0x00,0x00,0x84,0x00,0x00,0x00, -0xbf,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x1c,0x00,0x04,0x00, -0x5d,0x02,0x00,0x00,0xc4,0x00,0x00,0x00,0x5c,0x02,0x00,0x00, -0x20,0x00,0x04,0x00,0x5e,0x02,0x00,0x00,0x07,0x00,0x00,0x00, -0x5d,0x02,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x67,0x02,0x00,0x00,0x86,0x00,0x00,0x00,0xb9,0x00,0x00,0x00, -0xbf,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x6f,0x02,0x00,0x00,0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x9e,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0xd1,0x02,0x00,0x00,0x0d,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0xd9,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0x1d,0x00,0x03,0x00,0x1f,0x03,0x00,0x00,0xc4,0x00,0x00,0x00, -0x1e,0x00,0x03,0x00,0x20,0x03,0x00,0x00,0x1f,0x03,0x00,0x00, -0x20,0x00,0x04,0x00,0x21,0x03,0x00,0x00,0x0c,0x00,0x00,0x00, -0x20,0x03,0x00,0x00,0x3b,0x00,0x04,0x00,0x21,0x03,0x00,0x00, -0x22,0x03,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x27,0x03,0x00,0x00,0x05,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x34,0x03,0x00,0x00, -0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x05,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xc9,0x00,0x00,0x00, -0xca,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x31,0x02,0x00,0x00,0x32,0x02,0x00,0x00,0x07,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x5e,0x02,0x00,0x00,0x5f,0x02,0x00,0x00, -0x07,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x16,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x17,0x00,0x00,0x00, -0x16,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x17,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1e,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x21,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x28,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x27,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x29,0x00,0x00,0x00, -0x28,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x2a,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x29,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x2e,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00, -0x24,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x30,0x00,0x00,0x00, -0x2a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x35,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x36,0x00,0x00,0x00, -0x35,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x38,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00, -0x38,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x3a,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x3f,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x3e,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x3f,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x42,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x3b,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x47,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x4a,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x4c,0x00,0x00,0x00, -0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x4f,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x55,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x54,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00, -0x50,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x4f,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x64,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,0x63,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x68,0x00,0x00,0x00, -0x5d,0x00,0x00,0x00,0x67,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x6d,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x73,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x72,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x79,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x7d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x82,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x81,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x83,0x00,0x00,0x00, -0x82,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0x83,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x87,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x87,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8a,0x00,0x00,0x00, -0x47,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x8a,0x00,0x00,0x00, -0x83,0x00,0x00,0x00,0x0c,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x8e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x26,0x00,0x00,0x00, -0x88,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x91,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x93,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x93,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x96,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x98,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x98,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9a,0x00,0x00,0x00, -0x96,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x94,0x00,0x00,0x00, -0x9a,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9d,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9e,0x00,0x00,0x00, -0x9d,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0xa2,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xa4,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0xa4,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa8,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0xa7,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0xaa,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0xaa,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00, -0xa8,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xad,0x00,0x00,0x00,0xa5,0x00,0x00,0x00, -0xac,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xaf,0x00,0x00,0x00,0xad,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb0,0x00,0x00,0x00, -0xaf,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xb2,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb2,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x48,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0xd1,0x00,0x00,0x00, -0xb3,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0xc3,0x00,0x00,0x00,0x48,0x03,0x00,0x00,0xc1,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xb4,0x00,0x00,0x00,0xb3,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xc3,0x00,0x00,0x00, -0xb3,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xb3,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00, -0xce,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0x48,0x03,0x00,0x00, -0x3e,0x00,0x03,0x00,0xce,0x00,0x00,0x00,0xcc,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd1,0x00,0x00,0x00, -0x48,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xb2,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb4,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xd4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xd4,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x61,0x03,0x00,0x00,0xb0,0x00,0x00,0x00,0xb4,0x00,0x00,0x00, -0x16,0x02,0x00,0x00,0xd7,0x00,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x5d,0x03,0x00,0x00,0x9e,0x00,0x00,0x00, -0xb4,0x00,0x00,0x00,0x13,0x02,0x00,0x00,0xd7,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x49,0x03,0x00,0x00, -0x84,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0xc1,0x02,0x00,0x00, -0xd7,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0xdb,0x00,0x00,0x00,0x49,0x03,0x00,0x00,0x8e,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xd6,0x00,0x00,0x00,0xd7,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xdb,0x00,0x00,0x00, -0xd5,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xd5,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xdd,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x59,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0xd5,0x00,0x00,0x00,0xc9,0x01,0x00,0x00,0xe0,0x00,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xe3,0x00,0x00,0x00, -0x59,0x03,0x00,0x00,0x37,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xdf,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xe3,0x00,0x00,0x00,0xde,0x00,0x00,0x00, -0xdf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe8,0x00,0x00,0x00, -0x73,0x00,0x00,0x00,0x59,0x03,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,0xe8,0x00,0x00,0x00, -0x99,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xec,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xed,0x00,0x00,0x00, -0x5d,0x03,0x00,0x00,0xec,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xef,0x00,0x00,0x00,0xed,0x00,0x00,0x00, -0x6e,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xf5,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0xf4,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf7,0x00,0x00,0x00, -0x6e,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,0xf5,0x00,0x00,0x00, -0xf7,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xfc,0x00,0x00,0x00,0xef,0x00,0x00,0x00,0xfb,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xff,0x00,0x00,0x00, -0xef,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x03,0x01,0x00,0x00,0xff,0x00,0x00,0x00, -0x02,0x01,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x06,0x01,0x00,0x00,0xff,0x00,0x00,0x00,0x02,0x01,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x08,0x01,0x00,0x00, -0x06,0x01,0x00,0x00,0x07,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x0b,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x03,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x0d,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,0x08,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x10,0x01,0x00,0x00, -0x03,0x01,0x00,0x00,0x02,0x01,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x12,0x01,0x00,0x00,0xff,0x00,0x00,0x00, -0x07,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x13,0x01,0x00,0x00,0x12,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x14,0x01,0x00,0x00, -0x10,0x01,0x00,0x00,0x13,0x01,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x1d,0x01,0x00,0x00,0xff,0x00,0x00,0x00, -0x07,0x01,0x00,0x00,0xc4,0x00,0x05,0x00,0x13,0x00,0x00,0x00, -0x1e,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,0x1d,0x01,0x00,0x00, -0x72,0x00,0x04,0x00,0x1f,0x01,0x00,0x00,0x20,0x01,0x00,0x00, -0x1e,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x19,0x01,0x00,0x00, -0x21,0x01,0x00,0x00,0x20,0x01,0x00,0x00,0x41,0x00,0x07,0x00, -0x31,0x01,0x00,0x00,0x32,0x01,0x00,0x00,0x2f,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x26,0x01,0x00,0x00,0x33,0x01,0x00,0x00, -0x32,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x22,0x01,0x00,0x00, -0x34,0x01,0x00,0x00,0x33,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0x36,0x01,0x00,0x00,0x0d,0x01,0x00,0x00, -0x77,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x38,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x36,0x01,0x00,0x00, -0x37,0x01,0x00,0x00,0x50,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x37,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x3c,0x01,0x00,0x00, -0x3d,0x01,0x00,0x00,0x2f,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0xfc,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x0d,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0x19,0x01,0x00,0x00,0x3e,0x01,0x00,0x00, -0x3d,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x3f,0x01,0x00,0x00,0x3e,0x01,0x00,0x00,0x7c,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x40,0x01,0x00,0x00,0x3f,0x01,0x00,0x00, -0xc7,0x00,0x05,0x00,0x13,0x00,0x00,0x00,0x42,0x01,0x00,0x00, -0x40,0x01,0x00,0x00,0x41,0x01,0x00,0x00,0x72,0x00,0x04,0x00, -0x1f,0x01,0x00,0x00,0x43,0x01,0x00,0x00,0x42,0x01,0x00,0x00, -0x7c,0x00,0x04,0x00,0x19,0x01,0x00,0x00,0x44,0x01,0x00,0x00, -0x43,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x48,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,0x77,0x00,0x00,0x00, -0x41,0x00,0x08,0x00,0x3c,0x01,0x00,0x00,0x49,0x01,0x00,0x00, -0x2f,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0xfc,0x00,0x00,0x00, -0xd0,0x00,0x00,0x00,0x48,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0x19,0x01,0x00,0x00,0x4a,0x01,0x00,0x00,0x49,0x01,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4b,0x01,0x00,0x00, -0x4a,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x4c,0x01,0x00,0x00,0x4b,0x01,0x00,0x00,0xc7,0x00,0x05,0x00, -0x13,0x00,0x00,0x00,0x4d,0x01,0x00,0x00,0x4c,0x01,0x00,0x00, -0x41,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0x1f,0x01,0x00,0x00, -0x4e,0x01,0x00,0x00,0x4d,0x01,0x00,0x00,0x7c,0x00,0x04,0x00, -0x19,0x01,0x00,0x00,0x4f,0x01,0x00,0x00,0x4e,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0x38,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x50,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x53,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,0x77,0x00,0x00,0x00, -0x41,0x00,0x08,0x00,0x3c,0x01,0x00,0x00,0x54,0x01,0x00,0x00, -0x2f,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0xfc,0x00,0x00,0x00, -0xd0,0x00,0x00,0x00,0x53,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0x19,0x01,0x00,0x00,0x55,0x01,0x00,0x00,0x54,0x01,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x56,0x01,0x00,0x00, -0x55,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x57,0x01,0x00,0x00,0x56,0x01,0x00,0x00,0xc7,0x00,0x05,0x00, -0x13,0x00,0x00,0x00,0x59,0x01,0x00,0x00,0x57,0x01,0x00,0x00, -0x58,0x01,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x5c,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,0x77,0x00,0x00,0x00, -0x41,0x00,0x08,0x00,0x3c,0x01,0x00,0x00,0x5d,0x01,0x00,0x00, -0x2f,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0xfc,0x00,0x00,0x00, -0xd0,0x00,0x00,0x00,0x5c,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0x19,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,0x5d,0x01,0x00,0x00, -0xc2,0x00,0x05,0x00,0x19,0x01,0x00,0x00,0x5f,0x01,0x00,0x00, -0x5e,0x01,0x00,0x00,0x81,0x00,0x00,0x00,0xc4,0x00,0x05,0x00, -0x19,0x01,0x00,0x00,0x60,0x01,0x00,0x00,0x5f,0x01,0x00,0x00, -0xa9,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x61,0x01,0x00,0x00,0x60,0x01,0x00,0x00,0x7c,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x62,0x01,0x00,0x00,0x61,0x01,0x00,0x00, -0xc5,0x00,0x05,0x00,0x13,0x00,0x00,0x00,0x63,0x01,0x00,0x00, -0x59,0x01,0x00,0x00,0x62,0x01,0x00,0x00,0x72,0x00,0x04,0x00, -0x1f,0x01,0x00,0x00,0x64,0x01,0x00,0x00,0x63,0x01,0x00,0x00, -0x7c,0x00,0x04,0x00,0x19,0x01,0x00,0x00,0x65,0x01,0x00,0x00, -0x64,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x19,0x01,0x00,0x00, -0x6a,0x01,0x00,0x00,0x54,0x01,0x00,0x00,0xc2,0x00,0x05,0x00, -0x19,0x01,0x00,0x00,0x6b,0x01,0x00,0x00,0x6a,0x01,0x00,0x00, -0xa9,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x3c,0x01,0x00,0x00, -0x6e,0x01,0x00,0x00,0x2f,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0xfc,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x0d,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0x19,0x01,0x00,0x00,0x6f,0x01,0x00,0x00, -0x6e,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x19,0x01,0x00,0x00, -0x70,0x01,0x00,0x00,0x6f,0x01,0x00,0x00,0x81,0x00,0x00,0x00, -0xc4,0x00,0x05,0x00,0x19,0x01,0x00,0x00,0x71,0x01,0x00,0x00, -0x70,0x01,0x00,0x00,0xa9,0x00,0x00,0x00,0xc5,0x00,0x05,0x00, -0x19,0x01,0x00,0x00,0x72,0x01,0x00,0x00,0x6b,0x01,0x00,0x00, -0x71,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x38,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x38,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x19,0x01,0x00,0x00,0x7d,0x03,0x00,0x00,0x4f,0x01,0x00,0x00, -0x37,0x01,0x00,0x00,0x72,0x01,0x00,0x00,0x50,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0x19,0x01,0x00,0x00,0x7c,0x03,0x00,0x00, -0x44,0x01,0x00,0x00,0x37,0x01,0x00,0x00,0x65,0x01,0x00,0x00, -0x50,0x01,0x00,0x00,0x51,0x00,0x05,0x00,0xc4,0x00,0x00,0x00, -0x75,0x01,0x00,0x00,0x34,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x70,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x77,0x01,0x00,0x00, -0x7c,0x03,0x00,0x00,0x85,0x00,0x05,0x00,0xc4,0x00,0x00,0x00, -0x78,0x01,0x00,0x00,0x75,0x01,0x00,0x00,0x77,0x01,0x00,0x00, -0x51,0x00,0x05,0x00,0xc4,0x00,0x00,0x00,0x7b,0x01,0x00,0x00, -0x34,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x70,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0x7d,0x01,0x00,0x00,0x7d,0x03,0x00,0x00, -0x85,0x00,0x05,0x00,0xc4,0x00,0x00,0x00,0x7e,0x01,0x00,0x00, -0x7b,0x01,0x00,0x00,0x7d,0x01,0x00,0x00,0x41,0x00,0x08,0x00, -0x3c,0x01,0x00,0x00,0x88,0x01,0x00,0x00,0x2f,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x97,0x00,0x00,0x00, -0x14,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x19,0x01,0x00,0x00, -0x89,0x01,0x00,0x00,0x88,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x8b,0x01,0x00,0x00,0x08,0x01,0x00,0x00, -0x77,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,0x19,0x01,0x00,0x00, -0x8c,0x01,0x00,0x00,0x89,0x01,0x00,0x00,0x8b,0x01,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x8d,0x01,0x00,0x00, -0x8c,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x8e,0x01,0x00,0x00,0x8d,0x01,0x00,0x00,0xc7,0x00,0x05,0x00, -0x13,0x00,0x00,0x00,0x8f,0x01,0x00,0x00,0x8e,0x01,0x00,0x00, -0x58,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0x90,0x01,0x00,0x00,0x8f,0x01,0x00,0x00,0x41,0x00,0x08,0x00, -0x3c,0x01,0x00,0x00,0x93,0x01,0x00,0x00,0x2f,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x13,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x19,0x01,0x00,0x00, -0x94,0x01,0x00,0x00,0x93,0x01,0x00,0x00,0xc7,0x00,0x05,0x00, -0x19,0x01,0x00,0x00,0x96,0x01,0x00,0x00,0x94,0x01,0x00,0x00, -0x21,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x97,0x01,0x00,0x00,0x96,0x01,0x00,0x00,0x7c,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x98,0x01,0x00,0x00,0x97,0x01,0x00,0x00, -0xab,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x99,0x01,0x00,0x00, -0x98,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0xa9,0x00,0x06,0x00, -0x13,0x00,0x00,0x00,0x9b,0x01,0x00,0x00,0x99,0x01,0x00,0x00, -0x9a,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0x6f,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0x9c,0x01,0x00,0x00,0x9b,0x01,0x00,0x00, -0x81,0x00,0x05,0x00,0xc4,0x00,0x00,0x00,0x9d,0x01,0x00,0x00, -0x90,0x01,0x00,0x00,0x9c,0x01,0x00,0x00,0x7f,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0xa2,0x03,0x00,0x00,0x7e,0x01,0x00,0x00, -0x0c,0x00,0x08,0x00,0xc4,0x00,0x00,0x00,0xa0,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x78,0x01,0x00,0x00, -0x9d,0x01,0x00,0x00,0xa2,0x03,0x00,0x00,0x41,0x00,0x05,0x00, -0xa1,0x01,0x00,0x00,0xa2,0x01,0x00,0x00,0x83,0x01,0x00,0x00, -0xf8,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0xa2,0x01,0x00,0x00, -0xa0,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa4,0x01,0x00,0x00,0xf8,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa8,0x01,0x00,0x00, -0x14,0x01,0x00,0x00,0x39,0x00,0x00,0x00,0x41,0x00,0x08,0x00, -0x3c,0x01,0x00,0x00,0xa9,0x01,0x00,0x00,0x2f,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x97,0x00,0x00,0x00, -0xa8,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x19,0x01,0x00,0x00, -0xaa,0x01,0x00,0x00,0xa9,0x01,0x00,0x00,0xc2,0x00,0x05,0x00, -0x19,0x01,0x00,0x00,0xad,0x01,0x00,0x00,0xaa,0x01,0x00,0x00, -0x8b,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xae,0x01,0x00,0x00,0xad,0x01,0x00,0x00,0x7c,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0xaf,0x01,0x00,0x00,0xae,0x01,0x00,0x00, -0xc7,0x00,0x05,0x00,0x13,0x00,0x00,0x00,0xb0,0x01,0x00,0x00, -0xaf,0x01,0x00,0x00,0x58,0x01,0x00,0x00,0x6f,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0xb1,0x01,0x00,0x00,0xb0,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb4,0x01,0x00,0x00, -0x13,0x01,0x00,0x00,0x39,0x00,0x00,0x00,0x41,0x00,0x08,0x00, -0x3c,0x01,0x00,0x00,0xb5,0x01,0x00,0x00,0x2f,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0xb4,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x19,0x01,0x00,0x00, -0xb6,0x01,0x00,0x00,0xb5,0x01,0x00,0x00,0xc7,0x00,0x05,0x00, -0x19,0x01,0x00,0x00,0xb8,0x01,0x00,0x00,0xb6,0x01,0x00,0x00, -0x21,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xb9,0x01,0x00,0x00,0xb8,0x01,0x00,0x00,0x7c,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0xba,0x01,0x00,0x00,0xb9,0x01,0x00,0x00, -0xab,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xbb,0x01,0x00,0x00, -0xba,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0xa9,0x00,0x06,0x00, -0x13,0x00,0x00,0x00,0xbc,0x01,0x00,0x00,0xbb,0x01,0x00,0x00, -0x9a,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0x6f,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0xbd,0x01,0x00,0x00,0xbc,0x01,0x00,0x00, -0x81,0x00,0x05,0x00,0xc4,0x00,0x00,0x00,0xbe,0x01,0x00,0x00, -0xb1,0x01,0x00,0x00,0xbd,0x01,0x00,0x00,0x0c,0x00,0x08,0x00, -0xc4,0x00,0x00,0x00,0xc1,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0x78,0x01,0x00,0x00,0xbe,0x01,0x00,0x00, -0xa2,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0xa1,0x01,0x00,0x00, -0xc2,0x01,0x00,0x00,0x83,0x01,0x00,0x00,0xa4,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0xc2,0x01,0x00,0x00,0xc1,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xe0,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xe0,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xc9,0x01,0x00,0x00,0x59,0x03,0x00,0x00,0xc7,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xdf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xcb,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xcb,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x5a,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0xdf,0x00,0x00,0x00,0x0f,0x02,0x00,0x00,0xcc,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xd1,0x01,0x00,0x00, -0x5a,0x03,0x00,0x00,0xa7,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xcd,0x01,0x00,0x00,0xcc,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xd1,0x01,0x00,0x00,0xcc,0x01,0x00,0x00, -0xcd,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xcc,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd6,0x01,0x00,0x00, -0x7e,0x00,0x00,0x00,0x5a,0x03,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xd9,0x01,0x00,0x00,0xd6,0x01,0x00,0x00, -0xab,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xda,0x01,0x00,0x00,0xd9,0x01,0x00,0x00,0x77,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdb,0x01,0x00,0x00, -0x61,0x03,0x00,0x00,0xda,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xdd,0x01,0x00,0x00,0xdb,0x01,0x00,0x00, -0x79,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xe3,0x01,0x00,0x00,0xd6,0x01,0x00,0x00,0xe2,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe5,0x01,0x00,0x00, -0x79,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xe6,0x01,0x00,0x00,0xe3,0x01,0x00,0x00, -0xe5,0x01,0x00,0x00,0x41,0x00,0x07,0x00,0xf4,0x01,0x00,0x00, -0xf5,0x01,0x00,0x00,0xf2,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0xdd,0x01,0x00,0x00,0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0xf6,0x01,0x00,0x00,0xf5,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0xa1,0x01,0x00,0x00,0xf7,0x01,0x00,0x00, -0xeb,0x01,0x00,0x00,0xe6,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0xf7,0x01,0x00,0x00,0xf6,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xf9,0x01,0x00,0x00,0xe6,0x01,0x00,0x00, -0x39,0x00,0x00,0x00,0x41,0x00,0x07,0x00,0xf4,0x01,0x00,0x00, -0xfb,0x01,0x00,0x00,0xf2,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0xdd,0x01,0x00,0x00,0x39,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0xfc,0x01,0x00,0x00,0xfb,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0xa1,0x01,0x00,0x00,0xfd,0x01,0x00,0x00, -0xeb,0x01,0x00,0x00,0xf9,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0xfd,0x01,0x00,0x00,0xfc,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xff,0x01,0x00,0x00,0xe6,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x41,0x00,0x07,0x00,0xf4,0x01,0x00,0x00, -0x01,0x02,0x00,0x00,0xf2,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0xdd,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0x02,0x02,0x00,0x00,0x01,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0xa1,0x01,0x00,0x00,0x03,0x02,0x00,0x00, -0xeb,0x01,0x00,0x00,0xff,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0x03,0x02,0x00,0x00,0x02,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x06,0x02,0x00,0x00,0xe6,0x01,0x00,0x00, -0x05,0x02,0x00,0x00,0x41,0x00,0x07,0x00,0xf4,0x01,0x00,0x00, -0x08,0x02,0x00,0x00,0xf2,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0xdd,0x01,0x00,0x00,0x05,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0x09,0x02,0x00,0x00,0x08,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0xa1,0x01,0x00,0x00,0x0a,0x02,0x00,0x00, -0xeb,0x01,0x00,0x00,0x06,0x02,0x00,0x00,0x3e,0x00,0x03,0x00, -0x0a,0x02,0x00,0x00,0x09,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x0f,0x02,0x00,0x00,0x5a,0x03,0x00,0x00, -0x0d,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xcb,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xcd,0x01,0x00,0x00,0xe0,0x00,0x04,0x00, -0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x10,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x13,0x02,0x00,0x00, -0x5d,0x03,0x00,0x00,0x11,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x16,0x02,0x00,0x00,0x61,0x03,0x00,0x00, -0x14,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x18,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x18,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x63,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0xcd,0x01,0x00,0x00,0xbf,0x02,0x00,0x00,0x1b,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x1e,0x02,0x00,0x00, -0x63,0x03,0x00,0x00,0x6c,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x1a,0x02,0x00,0x00,0x1b,0x02,0x00,0x00,0x00,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x1e,0x02,0x00,0x00,0x19,0x02,0x00,0x00, -0x1a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x19,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x20,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x20,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x67,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0x19,0x02,0x00,0x00, -0x4b,0x02,0x00,0x00,0x23,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0x26,0x02,0x00,0x00,0x67,0x03,0x00,0x00, -0x60,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x22,0x02,0x00,0x00, -0x23,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x26,0x02,0x00,0x00,0x21,0x02,0x00,0x00,0x22,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x21,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x28,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x28,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x79,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0x21,0x02,0x00,0x00,0x49,0x02,0x00,0x00, -0x29,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0x2e,0x02,0x00,0x00,0x79,0x03,0x00,0x00,0x62,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x2a,0x02,0x00,0x00,0x29,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x2e,0x02,0x00,0x00, -0x29,0x02,0x00,0x00,0x2a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x29,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x34,0x02,0x00,0x00,0x67,0x03,0x00,0x00,0x62,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x36,0x02,0x00,0x00, -0x34,0x02,0x00,0x00,0x79,0x03,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x38,0x02,0x00,0x00,0x55,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x3a,0x02,0x00,0x00,0x67,0x03,0x00,0x00,0x61,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3b,0x02,0x00,0x00, -0x38,0x02,0x00,0x00,0x3a,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3d,0x02,0x00,0x00,0x64,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x3e,0x02,0x00,0x00,0x3b,0x02,0x00,0x00,0x3d,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x40,0x02,0x00,0x00, -0x3e,0x02,0x00,0x00,0x79,0x03,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x42,0x02,0x00,0x00,0x40,0x02,0x00,0x00, -0x41,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x44,0x02,0x00,0x00,0x42,0x02,0x00,0x00,0x63,0x03,0x00,0x00, -0x41,0x00,0x05,0x00,0xa1,0x01,0x00,0x00,0x45,0x02,0x00,0x00, -0x83,0x01,0x00,0x00,0x44,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0x46,0x02,0x00,0x00,0x45,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,0x47,0x02,0x00,0x00, -0x32,0x02,0x00,0x00,0x36,0x02,0x00,0x00,0x3e,0x00,0x03,0x00, -0x47,0x02,0x00,0x00,0x46,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x49,0x02,0x00,0x00,0x79,0x03,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x28,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x2a,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x23,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x23,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4b,0x02,0x00,0x00, -0x67,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x20,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x22,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x4d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x4d,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x68,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0x22,0x02,0x00,0x00, -0x79,0x02,0x00,0x00,0x50,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0x53,0x02,0x00,0x00,0x68,0x03,0x00,0x00, -0xbf,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x4f,0x02,0x00,0x00, -0x50,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x53,0x02,0x00,0x00,0x4e,0x02,0x00,0x00,0x4f,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x4e,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x55,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x55,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x76,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0x4e,0x02,0x00,0x00,0x77,0x02,0x00,0x00, -0x56,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0x5b,0x02,0x00,0x00,0x76,0x03,0x00,0x00,0xbc,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x57,0x02,0x00,0x00,0x56,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x5b,0x02,0x00,0x00, -0x56,0x02,0x00,0x00,0x57,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x56,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x61,0x02,0x00,0x00,0x68,0x03,0x00,0x00,0xbc,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x63,0x02,0x00,0x00, -0x61,0x02,0x00,0x00,0x76,0x03,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x65,0x02,0x00,0x00,0x59,0x00,0x00,0x00, -0xb9,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x68,0x02,0x00,0x00,0x68,0x03,0x00,0x00,0x67,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x69,0x02,0x00,0x00, -0x65,0x02,0x00,0x00,0x68,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x6b,0x02,0x00,0x00,0x68,0x00,0x00,0x00, -0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x6c,0x02,0x00,0x00,0x69,0x02,0x00,0x00,0x6b,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6e,0x02,0x00,0x00, -0x6c,0x02,0x00,0x00,0x76,0x03,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x70,0x02,0x00,0x00,0x6e,0x02,0x00,0x00, -0x6f,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x72,0x02,0x00,0x00,0x70,0x02,0x00,0x00,0x63,0x03,0x00,0x00, -0x41,0x00,0x05,0x00,0xa1,0x01,0x00,0x00,0x73,0x02,0x00,0x00, -0xeb,0x01,0x00,0x00,0x72,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0x74,0x02,0x00,0x00,0x73,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,0x75,0x02,0x00,0x00, -0x5f,0x02,0x00,0x00,0x63,0x02,0x00,0x00,0x3e,0x00,0x03,0x00, -0x75,0x02,0x00,0x00,0x74,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x77,0x02,0x00,0x00,0x76,0x03,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x55,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x57,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x50,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x50,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x79,0x02,0x00,0x00, -0x68,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x4d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x4f,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x7b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x7b,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x69,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0x4f,0x02,0x00,0x00, -0xbd,0x02,0x00,0x00,0x7e,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0x81,0x02,0x00,0x00,0x69,0x03,0x00,0x00, -0xbf,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x7d,0x02,0x00,0x00, -0x7e,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x81,0x02,0x00,0x00,0x7c,0x02,0x00,0x00,0x7d,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x7c,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x83,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x83,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x6d,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0x7c,0x02,0x00,0x00,0xbb,0x02,0x00,0x00, -0x86,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0x89,0x02,0x00,0x00,0x6d,0x03,0x00,0x00,0x60,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x85,0x02,0x00,0x00,0x86,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x89,0x02,0x00,0x00, -0x84,0x02,0x00,0x00,0x85,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x84,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x8b,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x8b,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x6f,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0x84,0x02,0x00,0x00,0xb9,0x02,0x00,0x00,0x8e,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x91,0x02,0x00,0x00, -0x6f,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x8d,0x02,0x00,0x00,0x8e,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x91,0x02,0x00,0x00,0x8c,0x02,0x00,0x00, -0x8d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x8c,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x93,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x93,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x71,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0x8c,0x02,0x00,0x00, -0xb7,0x02,0x00,0x00,0x94,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0x99,0x02,0x00,0x00,0x71,0x03,0x00,0x00, -0x62,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x95,0x02,0x00,0x00, -0x94,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x99,0x02,0x00,0x00,0x94,0x02,0x00,0x00,0x95,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x94,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9b,0x02,0x00,0x00,0x69,0x03,0x00,0x00, -0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9d,0x02,0x00,0x00,0x9b,0x02,0x00,0x00,0x6f,0x03,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9f,0x02,0x00,0x00, -0x9d,0x02,0x00,0x00,0x9e,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa1,0x02,0x00,0x00,0x6d,0x03,0x00,0x00, -0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa2,0x02,0x00,0x00,0x9f,0x02,0x00,0x00,0xa1,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa4,0x02,0x00,0x00, -0xa2,0x02,0x00,0x00,0x71,0x03,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa8,0x02,0x00,0x00,0xa1,0x02,0x00,0x00, -0x71,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00, -0xa9,0x02,0x00,0x00,0x32,0x02,0x00,0x00,0xa8,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0xaa,0x02,0x00,0x00, -0xa9,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00, -0xaf,0x02,0x00,0x00,0x5f,0x02,0x00,0x00,0x9d,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0xb0,0x02,0x00,0x00, -0xaf,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00, -0xb2,0x02,0x00,0x00,0xca,0x00,0x00,0x00,0xa4,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0xb3,0x02,0x00,0x00, -0xb2,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,0xc4,0x00,0x00,0x00, -0xb4,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0xaa,0x02,0x00,0x00,0xb0,0x02,0x00,0x00,0xb3,0x02,0x00,0x00, -0x3e,0x00,0x03,0x00,0xb2,0x02,0x00,0x00,0xb4,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb7,0x02,0x00,0x00, -0x71,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x93,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x95,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x8e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x8e,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xb9,0x02,0x00,0x00,0x6f,0x03,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x8b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x8d,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x86,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x86,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xbb,0x02,0x00,0x00,0x6d,0x03,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x83,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x85,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x7e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x7e,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbd,0x02,0x00,0x00, -0x69,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x7b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x7d,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x1b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x1b,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xbf,0x02,0x00,0x00,0x63,0x03,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x18,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x1a,0x02,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x10,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0xd7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd7,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc1,0x02,0x00,0x00, -0x49,0x03,0x00,0x00,0x6c,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xd4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd6,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc6,0x02,0x00,0x00, -0x55,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xc7,0x02,0x00,0x00,0x96,0x00,0x00,0x00, -0xc6,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xcc,0x02,0x00,0x00,0x59,0x00,0x00,0x00,0xb9,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xcd,0x02,0x00,0x00, -0xa8,0x00,0x00,0x00,0xcc,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0xd2,0x02,0x00,0x00,0x12,0x00,0x00,0x00, -0xd1,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xd3,0x02,0x00,0x00,0xd2,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xd4,0x02,0x00,0x00,0x0f,0x00,0x00,0x00, -0xd3,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd8,0x02,0x00,0x00,0x47,0x00,0x00,0x00,0xd3,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0xda,0x02,0x00,0x00, -0xd9,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xdb,0x02,0x00,0x00,0xda,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdc,0x02,0x00,0x00, -0xd8,0x02,0x00,0x00,0xdb,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xdd,0x02,0x00,0x00,0xd4,0x02,0x00,0x00, -0xdc,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xdf,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xdf,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x4a,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0xd6,0x00,0x00,0x00,0x45,0x03,0x00,0x00,0xe2,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xe5,0x02,0x00,0x00, -0x4a,0x03,0x00,0x00,0xbf,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xe1,0x02,0x00,0x00,0xe2,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xe5,0x02,0x00,0x00,0xe0,0x02,0x00,0x00, -0xe1,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xe0,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0xe7,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xe7,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x4b,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0xe0,0x02,0x00,0x00, -0x43,0x03,0x00,0x00,0xea,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0xed,0x02,0x00,0x00,0x4b,0x03,0x00,0x00, -0x60,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xe9,0x02,0x00,0x00, -0xea,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xed,0x02,0x00,0x00,0xe8,0x02,0x00,0x00,0xe9,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xe8,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xf1,0x02,0x00,0x00,0x4b,0x03,0x00,0x00, -0x61,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xf2,0x02,0x00,0x00,0xc7,0x02,0x00,0x00,0xf1,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf4,0x02,0x00,0x00, -0x64,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xf5,0x02,0x00,0x00,0xf2,0x02,0x00,0x00, -0xf4,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xf9,0x02,0x00,0x00,0x4a,0x03,0x00,0x00,0x67,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfa,0x02,0x00,0x00, -0xcd,0x02,0x00,0x00,0xf9,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xfc,0x02,0x00,0x00,0x68,0x00,0x00,0x00, -0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xfd,0x02,0x00,0x00,0xfa,0x02,0x00,0x00,0xfc,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0xff,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xff,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x4d,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0xe8,0x02,0x00,0x00, -0x41,0x03,0x00,0x00,0x02,0x03,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0x05,0x03,0x00,0x00,0x4d,0x03,0x00,0x00, -0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x01,0x03,0x00,0x00, -0x02,0x03,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x05,0x03,0x00,0x00,0x00,0x03,0x00,0x00,0x01,0x03,0x00,0x00, -0xf8,0x00,0x02,0x00,0x00,0x03,0x00,0x00,0xf9,0x00,0x02,0x00, -0x07,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x07,0x03,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x4f,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x3f,0x03,0x00,0x00, -0x0a,0x03,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0x0d,0x03,0x00,0x00,0x4f,0x03,0x00,0x00,0x62,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x09,0x03,0x00,0x00,0x0a,0x03,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x0d,0x03,0x00,0x00, -0x08,0x03,0x00,0x00,0x09,0x03,0x00,0x00,0xf8,0x00,0x02,0x00, -0x08,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x10,0x03,0x00,0x00,0xf5,0x02,0x00,0x00,0x4f,0x03,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x13,0x03,0x00,0x00, -0x10,0x03,0x00,0x00,0x36,0x00,0x00,0x00,0xf7,0x00,0x03,0x00, -0x15,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x13,0x03,0x00,0x00,0x14,0x03,0x00,0x00,0x15,0x03,0x00,0x00, -0xf8,0x00,0x02,0x00,0x14,0x03,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x18,0x03,0x00,0x00,0xfd,0x02,0x00,0x00, -0x4d,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x19,0x03,0x00,0x00,0x12,0x00,0x00,0x00,0xd0,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x1a,0x03,0x00,0x00, -0x19,0x03,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0x1b,0x03,0x00,0x00,0x18,0x03,0x00,0x00,0x1a,0x03,0x00,0x00, -0xf9,0x00,0x02,0x00,0x15,0x03,0x00,0x00,0xf8,0x00,0x02,0x00, -0x15,0x03,0x00,0x00,0xf5,0x00,0x07,0x00,0xc2,0x00,0x00,0x00, -0x1c,0x03,0x00,0x00,0x13,0x03,0x00,0x00,0x08,0x03,0x00,0x00, -0x1b,0x03,0x00,0x00,0x14,0x03,0x00,0x00,0xf7,0x00,0x03,0x00, -0x1e,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x1c,0x03,0x00,0x00,0x1d,0x03,0x00,0x00,0x1e,0x03,0x00,0x00, -0xf8,0x00,0x02,0x00,0x1d,0x03,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x26,0x03,0x00,0x00,0xfd,0x02,0x00,0x00, -0x4d,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x28,0x03,0x00,0x00,0x12,0x00,0x00,0x00,0x27,0x03,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x29,0x03,0x00,0x00, -0x28,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x2a,0x03,0x00,0x00,0x26,0x03,0x00,0x00,0x29,0x03,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2b,0x03,0x00,0x00, -0xdd,0x02,0x00,0x00,0x2a,0x03,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x2d,0x03,0x00,0x00,0x2b,0x03,0x00,0x00, -0xf5,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x2f,0x03,0x00,0x00,0x2d,0x03,0x00,0x00,0x4f,0x03,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x31,0x03,0x00,0x00, -0x4a,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x33,0x03,0x00,0x00,0x31,0x03,0x00,0x00, -0x4d,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x35,0x03,0x00,0x00,0x33,0x03,0x00,0x00,0x34,0x03,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x37,0x03,0x00,0x00, -0x4b,0x03,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x38,0x03,0x00,0x00,0x35,0x03,0x00,0x00, -0x37,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x3a,0x03,0x00,0x00,0x38,0x03,0x00,0x00,0x4f,0x03,0x00,0x00, -0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,0x3b,0x03,0x00,0x00, -0xca,0x00,0x00,0x00,0x3a,0x03,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0x3c,0x03,0x00,0x00,0x3b,0x03,0x00,0x00, -0x41,0x00,0x06,0x00,0xf4,0x01,0x00,0x00,0x3d,0x03,0x00,0x00, -0x22,0x03,0x00,0x00,0x34,0x00,0x00,0x00,0x2f,0x03,0x00,0x00, -0x3e,0x00,0x03,0x00,0x3d,0x03,0x00,0x00,0x3c,0x03,0x00,0x00, -0xf9,0x00,0x02,0x00,0x1e,0x03,0x00,0x00,0xf8,0x00,0x02,0x00, -0x1e,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,0x0a,0x03,0x00,0x00, -0xf8,0x00,0x02,0x00,0x0a,0x03,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3f,0x03,0x00,0x00,0x4f,0x03,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x07,0x03,0x00,0x00, -0xf8,0x00,0x02,0x00,0x09,0x03,0x00,0x00,0xf9,0x00,0x02,0x00, -0x02,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x02,0x03,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x41,0x03,0x00,0x00, -0x4d,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xff,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x01,0x03,0x00,0x00, -0xf9,0x00,0x02,0x00,0xea,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xea,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x43,0x03,0x00,0x00,0x4b,0x03,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xe7,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xe9,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xe2,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xe2,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x45,0x03,0x00,0x00,0x4a,0x03,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xdf,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xe1,0x02,0x00,0x00,0xfd,0x00,0x01,0x00, -0x38,0x00,0x01,0x00, -}; -const uint64_t matmul_q5_k_f32_aligned_fp32_len = 12424; - -unsigned char matmul_q5_k_f32_fp32_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0xac,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x27,0x00,0x00,0x00, -0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00, -0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00, -0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30, -0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x0f,0x00,0x0f,0x00,0x05,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x4c,0x00,0x00,0x00,0x2e,0x01,0x00,0x00,0x83,0x01,0x00,0x00, -0xe9,0x01,0x00,0x00,0xf4,0x01,0x00,0x00,0xda,0x02,0x00,0x00, -0x23,0x03,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x05,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x30,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x0d,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0x10,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x37,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x3d,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x4c,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x4f,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x53,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x60,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x62,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x6c,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xa6,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xb8,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xbb,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x27,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x28,0x01,0x00,0x00,0x06,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x29,0x01,0x00,0x00, -0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x2a,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x2a,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x2a,0x01,0x00,0x00,0x02,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x2a,0x01,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x30,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x2b,0x01,0x00,0x00, -0x06,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0x2c,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x2c,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x2c,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x2e,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x2e,0x01,0x00,0x00,0x21,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xc3,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xc4,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xf1,0x01,0x00,0x00,0x06,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0xf2,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0xf2,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0xf2,0x01,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xf4,0x01,0x00,0x00, -0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xf4,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xda,0x02,0x00,0x00,0x0b,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x20,0x03,0x00,0x00, -0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0x21,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x21,0x03,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x21,0x03,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x23,0x03,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x23,0x03,0x00,0x00,0x21,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00, -0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x1e,0x00,0x10,0x00,0x10,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x11,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x11,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x15,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0x0a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x27,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x3e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x61,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x63,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x61,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x67,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x61,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x72,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x85,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x90,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0xa1,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xa6,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xb7,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xb9,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0xb8,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xba,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x4f,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xbb,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xba,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xbc,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0xb9,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xb7,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xbf,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x14,0x00,0x02,0x00, -0xc1,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0xc3,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xc4,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xc5,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc4,0x00,0x00,0x00, -0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xc6,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc5,0x00,0x00,0x00, -0xbb,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xc7,0x00,0x00,0x00, -0xc3,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0xc8,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xc7,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0xcb,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xcc,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xf3,0x00,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xfa,0x00,0x00,0x00, -0x80,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x01,0x01,0x00,0x00,0x20,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x06,0x01,0x00,0x00,0x10,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x18,0x01,0x00,0x00,0x08,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x1e,0x01,0x00,0x00, -0x08,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x17,0x00,0x04,0x00, -0x21,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x16,0x00,0x03,0x00,0x24,0x01,0x00,0x00,0x10,0x00,0x00,0x00, -0x17,0x00,0x04,0x00,0x25,0x01,0x00,0x00,0x24,0x01,0x00,0x00, -0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x26,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x1c,0x00,0x04,0x00, -0x27,0x01,0x00,0x00,0x18,0x01,0x00,0x00,0x26,0x01,0x00,0x00, -0x1c,0x00,0x04,0x00,0x28,0x01,0x00,0x00,0x18,0x01,0x00,0x00, -0x01,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,0x29,0x01,0x00,0x00, -0x18,0x01,0x00,0x00,0xfa,0x00,0x00,0x00,0x1e,0x00,0x06,0x00, -0x2a,0x01,0x00,0x00,0x25,0x01,0x00,0x00,0x27,0x01,0x00,0x00, -0x28,0x01,0x00,0x00,0x29,0x01,0x00,0x00,0x1d,0x00,0x03,0x00, -0x2b,0x01,0x00,0x00,0x2a,0x01,0x00,0x00,0x1e,0x00,0x03,0x00, -0x2c,0x01,0x00,0x00,0x2b,0x01,0x00,0x00,0x20,0x00,0x04,0x00, -0x2d,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x2c,0x01,0x00,0x00, -0x3b,0x00,0x04,0x00,0x2d,0x01,0x00,0x00,0x2e,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x30,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x25,0x01,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x35,0x01,0x00,0x00,0x04,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x3c,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x18,0x01,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x41,0x01,0x00,0x00,0x3f,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x58,0x01,0x00,0x00,0x0f,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x7f,0x01,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x80,0x01,0x00,0x00, -0x84,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x7f,0x01,0x00,0x00, -0x1c,0x00,0x04,0x00,0x81,0x01,0x00,0x00,0xc3,0x00,0x00,0x00, -0x80,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x82,0x01,0x00,0x00, -0x04,0x00,0x00,0x00,0x81,0x01,0x00,0x00,0x3b,0x00,0x04,0x00, -0x82,0x01,0x00,0x00,0x83,0x01,0x00,0x00,0x04,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x9a,0x01,0x00,0x00, -0x10,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xa1,0x01,0x00,0x00, -0x04,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xc3,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0x33,0x00,0x06,0x00,0x09,0x00,0x00,0x00,0xc4,0x01,0x00,0x00, -0xc3,0x01,0x00,0x00,0x39,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc5,0x01,0x00,0x00, -0x51,0x00,0x00,0x00,0xc4,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc6,0x01,0x00,0x00, -0x84,0x00,0x00,0x00,0xc5,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc7,0x01,0x00,0x00, -0x86,0x00,0x00,0x00,0xc6,0x01,0x00,0x00,0x6c,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xe5,0x01,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xe6,0x01,0x00,0x00, -0x84,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,0xe5,0x01,0x00,0x00, -0x1c,0x00,0x04,0x00,0xe7,0x01,0x00,0x00,0xc3,0x00,0x00,0x00, -0xe6,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0xe8,0x01,0x00,0x00, -0x04,0x00,0x00,0x00,0xe7,0x01,0x00,0x00,0x3b,0x00,0x04,0x00, -0xe8,0x01,0x00,0x00,0xe9,0x01,0x00,0x00,0x04,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xed,0x01,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x1d,0x00,0x03,0x00,0xf1,0x01,0x00,0x00,0xc3,0x00,0x00,0x00, -0x1e,0x00,0x03,0x00,0xf2,0x01,0x00,0x00,0xf1,0x01,0x00,0x00, -0x20,0x00,0x04,0x00,0xf3,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0xf2,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0xf3,0x01,0x00,0x00, -0xf4,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0xff,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0xc3,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x07,0x02,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x0c,0x02,0x00,0x00, -0x51,0x00,0x00,0x00,0xc4,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x0d,0x02,0x00,0x00, -0x84,0x00,0x00,0x00,0x0c,0x02,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x0e,0x02,0x00,0x00, -0x86,0x00,0x00,0x00,0x0d,0x02,0x00,0x00,0x6c,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x11,0x02,0x00,0x00, -0x08,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x12,0x02,0x00,0x00,0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x15,0x02,0x00,0x00,0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x30,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x31,0x02,0x00,0x00, -0xc3,0x00,0x00,0x00,0x30,0x02,0x00,0x00,0x20,0x00,0x04,0x00, -0x32,0x02,0x00,0x00,0x07,0x00,0x00,0x00,0x31,0x02,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x42,0x02,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x5d,0x02,0x00,0x00, -0x84,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0xbb,0x00,0x00,0x00, -0x1c,0x00,0x04,0x00,0x5e,0x02,0x00,0x00,0xc3,0x00,0x00,0x00, -0x5d,0x02,0x00,0x00,0x20,0x00,0x04,0x00,0x5f,0x02,0x00,0x00, -0x07,0x00,0x00,0x00,0x5e,0x02,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x68,0x02,0x00,0x00,0x86,0x00,0x00,0x00, -0xb8,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x70,0x02,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x9f,0x02,0x00,0x00,0x84,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0xd2,0x02,0x00,0x00,0x0d,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0xda,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x20,0x03,0x00,0x00, -0xc3,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x21,0x03,0x00,0x00, -0x20,0x03,0x00,0x00,0x20,0x00,0x04,0x00,0x22,0x03,0x00,0x00, -0x0c,0x00,0x00,0x00,0x21,0x03,0x00,0x00,0x3b,0x00,0x04,0x00, -0x22,0x03,0x00,0x00,0x23,0x03,0x00,0x00,0x0c,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x28,0x03,0x00,0x00, -0x05,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x35,0x03,0x00,0x00,0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0xc8,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x32,0x02,0x00,0x00,0x33,0x02,0x00,0x00, -0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x5f,0x02,0x00,0x00, -0x60,0x02,0x00,0x00,0x07,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x17,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x17,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x1e,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x17,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x27,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x29,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x1e,0x00,0x00,0x00, -0x29,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x2e,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x2d,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x2f,0x00,0x00,0x00, -0x2e,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x30,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x2f,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x30,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x34,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x36,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x36,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x3a,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00, -0x3a,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x3b,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x47,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x3b,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x49,0x00,0x00,0x00, -0x3d,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x49,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x4d,0x00,0x00,0x00, -0x4c,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x4d,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x50,0x00,0x00,0x00, -0x54,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x59,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x58,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5d,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x5d,0x00,0x00,0x00, -0x63,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x68,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,0x67,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6e,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x72,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x78,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x77,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7d,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x80,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x82,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x47,0x00,0x00,0x00, -0x82,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x85,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x87,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x89,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8c,0x00,0x00,0x00, -0x89,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x0c,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x26,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x8c,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x91,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x90,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x91,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x93,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0x42,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x97,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x96,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x98,0x00,0x00,0x00, -0x97,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x99,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0x98,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9a,0x00,0x00,0x00, -0x93,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0x9a,0x00,0x00,0x00, -0x83,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9d,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0xa2,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0xa2,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0x4a,0x00,0x00,0x00, -0xa6,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0xa9,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0xa8,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xaa,0x00,0x00,0x00, -0xa9,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xab,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0xaa,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00, -0xa4,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0xac,0x00,0x00,0x00, -0x83,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xaf,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xb1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xb1,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x49,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0x05,0x00,0x00,0x00, -0xd0,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,0x49,0x03,0x00,0x00, -0xc0,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xb3,0x00,0x00,0x00, -0xb2,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xc2,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0xb3,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0xcc,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,0xc9,0x00,0x00,0x00, -0x49,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,0xcd,0x00,0x00,0x00, -0xcb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd0,0x00,0x00,0x00,0x49,0x03,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xb1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xb3,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd3,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xd3,0x00,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x62,0x03,0x00,0x00,0xaf,0x00,0x00,0x00, -0xb3,0x00,0x00,0x00,0x17,0x02,0x00,0x00,0xd6,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x5e,0x03,0x00,0x00, -0x9d,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0x14,0x02,0x00,0x00, -0xd6,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x4a,0x03,0x00,0x00,0x83,0x00,0x00,0x00,0xb3,0x00,0x00,0x00, -0xc2,0x02,0x00,0x00,0xd6,0x00,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0xda,0x00,0x00,0x00,0x4a,0x03,0x00,0x00, -0x8d,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xd5,0x00,0x00,0x00, -0xd6,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xda,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,0xd5,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xd4,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xdc,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdc,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x5a,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,0xc9,0x01,0x00,0x00, -0xdf,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0xe2,0x00,0x00,0x00,0x5a,0x03,0x00,0x00,0x37,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xde,0x00,0x00,0x00,0xdf,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xe2,0x00,0x00,0x00, -0xdd,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xdd,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xe7,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x5a,0x03,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xea,0x00,0x00,0x00, -0xe7,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,0xea,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xec,0x00,0x00,0x00,0x5e,0x03,0x00,0x00,0xeb,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xee,0x00,0x00,0x00, -0xec,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,0xe7,0x00,0x00,0x00, -0xf3,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xf6,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf7,0x00,0x00,0x00, -0xf4,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0xee,0x00,0x00,0x00, -0xfa,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xfe,0x00,0x00,0x00,0xee,0x00,0x00,0x00,0xfa,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x02,0x01,0x00,0x00, -0xfe,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x05,0x01,0x00,0x00,0xfe,0x00,0x00,0x00, -0x01,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x07,0x01,0x00,0x00,0x05,0x01,0x00,0x00,0x06,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0a,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x02,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x0c,0x01,0x00,0x00,0x0a,0x01,0x00,0x00, -0x07,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x0f,0x01,0x00,0x00,0x02,0x01,0x00,0x00,0x01,0x01,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x11,0x01,0x00,0x00, -0xfe,0x00,0x00,0x00,0x06,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x12,0x01,0x00,0x00,0x11,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x13,0x01,0x00,0x00,0x0f,0x01,0x00,0x00,0x12,0x01,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1c,0x01,0x00,0x00, -0xfe,0x00,0x00,0x00,0x06,0x01,0x00,0x00,0xc4,0x00,0x05,0x00, -0x13,0x00,0x00,0x00,0x1d,0x01,0x00,0x00,0xcf,0x00,0x00,0x00, -0x1c,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0x1e,0x01,0x00,0x00, -0x1f,0x01,0x00,0x00,0x1d,0x01,0x00,0x00,0x7c,0x00,0x04,0x00, -0x18,0x01,0x00,0x00,0x20,0x01,0x00,0x00,0x1f,0x01,0x00,0x00, -0x41,0x00,0x07,0x00,0x30,0x01,0x00,0x00,0x31,0x01,0x00,0x00, -0x2e,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0xfb,0x00,0x00,0x00, -0x34,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x25,0x01,0x00,0x00, -0x32,0x01,0x00,0x00,0x31,0x01,0x00,0x00,0x73,0x00,0x04,0x00, -0x21,0x01,0x00,0x00,0x33,0x01,0x00,0x00,0x32,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x36,0x01,0x00,0x00, -0x0c,0x01,0x00,0x00,0x35,0x01,0x00,0x00,0xf7,0x00,0x03,0x00, -0x38,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x36,0x01,0x00,0x00,0x37,0x01,0x00,0x00,0x50,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x37,0x01,0x00,0x00,0x41,0x00,0x08,0x00, -0x3c,0x01,0x00,0x00,0x3d,0x01,0x00,0x00,0x2e,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0xcf,0x00,0x00,0x00, -0x0c,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x18,0x01,0x00,0x00, -0x3e,0x01,0x00,0x00,0x3d,0x01,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x3f,0x01,0x00,0x00,0x3e,0x01,0x00,0x00, -0x7c,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x40,0x01,0x00,0x00, -0x3f,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x13,0x00,0x00,0x00, -0x42,0x01,0x00,0x00,0x40,0x01,0x00,0x00,0x41,0x01,0x00,0x00, -0x72,0x00,0x04,0x00,0x1e,0x01,0x00,0x00,0x43,0x01,0x00,0x00, -0x42,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x18,0x01,0x00,0x00, -0x44,0x01,0x00,0x00,0x43,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x48,0x01,0x00,0x00,0x0c,0x01,0x00,0x00, -0x35,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x3c,0x01,0x00,0x00, -0x49,0x01,0x00,0x00,0x2e,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0xfb,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x48,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0x18,0x01,0x00,0x00,0x4a,0x01,0x00,0x00, -0x49,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x4b,0x01,0x00,0x00,0x4a,0x01,0x00,0x00,0x7c,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x4c,0x01,0x00,0x00,0x4b,0x01,0x00,0x00, -0xc7,0x00,0x05,0x00,0x13,0x00,0x00,0x00,0x4d,0x01,0x00,0x00, -0x4c,0x01,0x00,0x00,0x41,0x01,0x00,0x00,0x72,0x00,0x04,0x00, -0x1e,0x01,0x00,0x00,0x4e,0x01,0x00,0x00,0x4d,0x01,0x00,0x00, -0x7c,0x00,0x04,0x00,0x18,0x01,0x00,0x00,0x4f,0x01,0x00,0x00, -0x4e,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x38,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x50,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x53,0x01,0x00,0x00,0x0c,0x01,0x00,0x00, -0x35,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x3c,0x01,0x00,0x00, -0x54,0x01,0x00,0x00,0x2e,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0xfb,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x53,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0x18,0x01,0x00,0x00,0x55,0x01,0x00,0x00, -0x54,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x56,0x01,0x00,0x00,0x55,0x01,0x00,0x00,0x7c,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x57,0x01,0x00,0x00,0x56,0x01,0x00,0x00, -0xc7,0x00,0x05,0x00,0x13,0x00,0x00,0x00,0x59,0x01,0x00,0x00, -0x57,0x01,0x00,0x00,0x58,0x01,0x00,0x00,0x82,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x5c,0x01,0x00,0x00,0x0c,0x01,0x00,0x00, -0x35,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x3c,0x01,0x00,0x00, -0x5d,0x01,0x00,0x00,0x2e,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0xfb,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x5c,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0x18,0x01,0x00,0x00,0x5e,0x01,0x00,0x00, -0x5d,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x18,0x01,0x00,0x00, -0x5f,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,0x80,0x00,0x00,0x00, -0xc4,0x00,0x05,0x00,0x18,0x01,0x00,0x00,0x60,0x01,0x00,0x00, -0x5f,0x01,0x00,0x00,0xa8,0x00,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x61,0x01,0x00,0x00,0x60,0x01,0x00,0x00, -0x7c,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x62,0x01,0x00,0x00, -0x61,0x01,0x00,0x00,0xc5,0x00,0x05,0x00,0x13,0x00,0x00,0x00, -0x63,0x01,0x00,0x00,0x59,0x01,0x00,0x00,0x62,0x01,0x00,0x00, -0x72,0x00,0x04,0x00,0x1e,0x01,0x00,0x00,0x64,0x01,0x00,0x00, -0x63,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x18,0x01,0x00,0x00, -0x65,0x01,0x00,0x00,0x64,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0x18,0x01,0x00,0x00,0x6a,0x01,0x00,0x00,0x54,0x01,0x00,0x00, -0xc2,0x00,0x05,0x00,0x18,0x01,0x00,0x00,0x6b,0x01,0x00,0x00, -0x6a,0x01,0x00,0x00,0xa8,0x00,0x00,0x00,0x41,0x00,0x08,0x00, -0x3c,0x01,0x00,0x00,0x6e,0x01,0x00,0x00,0x2e,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0xcf,0x00,0x00,0x00, -0x0c,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x18,0x01,0x00,0x00, -0x6f,0x01,0x00,0x00,0x6e,0x01,0x00,0x00,0xc2,0x00,0x05,0x00, -0x18,0x01,0x00,0x00,0x70,0x01,0x00,0x00,0x6f,0x01,0x00,0x00, -0x80,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,0x18,0x01,0x00,0x00, -0x71,0x01,0x00,0x00,0x70,0x01,0x00,0x00,0xa8,0x00,0x00,0x00, -0xc5,0x00,0x05,0x00,0x18,0x01,0x00,0x00,0x72,0x01,0x00,0x00, -0x6b,0x01,0x00,0x00,0x71,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0x38,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x38,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0x18,0x01,0x00,0x00,0x81,0x03,0x00,0x00, -0x4f,0x01,0x00,0x00,0x37,0x01,0x00,0x00,0x72,0x01,0x00,0x00, -0x50,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x18,0x01,0x00,0x00, -0x80,0x03,0x00,0x00,0x44,0x01,0x00,0x00,0x37,0x01,0x00,0x00, -0x65,0x01,0x00,0x00,0x50,0x01,0x00,0x00,0x51,0x00,0x05,0x00, -0xc3,0x00,0x00,0x00,0x75,0x01,0x00,0x00,0x33,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x70,0x00,0x04,0x00,0xc3,0x00,0x00,0x00, -0x77,0x01,0x00,0x00,0x80,0x03,0x00,0x00,0x85,0x00,0x05,0x00, -0xc3,0x00,0x00,0x00,0x78,0x01,0x00,0x00,0x75,0x01,0x00,0x00, -0x77,0x01,0x00,0x00,0x51,0x00,0x05,0x00,0xc3,0x00,0x00,0x00, -0x7b,0x01,0x00,0x00,0x33,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0x70,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x7d,0x01,0x00,0x00, -0x81,0x03,0x00,0x00,0x85,0x00,0x05,0x00,0xc3,0x00,0x00,0x00, -0x7e,0x01,0x00,0x00,0x7b,0x01,0x00,0x00,0x7d,0x01,0x00,0x00, -0x41,0x00,0x08,0x00,0x3c,0x01,0x00,0x00,0x88,0x01,0x00,0x00, -0x2e,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0xfb,0x00,0x00,0x00, -0x96,0x00,0x00,0x00,0x13,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0x18,0x01,0x00,0x00,0x89,0x01,0x00,0x00,0x88,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8b,0x01,0x00,0x00, -0x07,0x01,0x00,0x00,0x35,0x01,0x00,0x00,0xc2,0x00,0x05,0x00, -0x18,0x01,0x00,0x00,0x8c,0x01,0x00,0x00,0x89,0x01,0x00,0x00, -0x8b,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x8d,0x01,0x00,0x00,0x8c,0x01,0x00,0x00,0x7c,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x8e,0x01,0x00,0x00,0x8d,0x01,0x00,0x00, -0xc7,0x00,0x05,0x00,0x13,0x00,0x00,0x00,0x8f,0x01,0x00,0x00, -0x8e,0x01,0x00,0x00,0x58,0x01,0x00,0x00,0x6f,0x00,0x04,0x00, -0xc3,0x00,0x00,0x00,0x90,0x01,0x00,0x00,0x8f,0x01,0x00,0x00, -0x41,0x00,0x08,0x00,0x3c,0x01,0x00,0x00,0x93,0x01,0x00,0x00, -0x2e,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0xfb,0x00,0x00,0x00, -0x85,0x00,0x00,0x00,0x12,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0x18,0x01,0x00,0x00,0x94,0x01,0x00,0x00,0x93,0x01,0x00,0x00, -0xc7,0x00,0x05,0x00,0x18,0x01,0x00,0x00,0x96,0x01,0x00,0x00, -0x94,0x01,0x00,0x00,0x20,0x01,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x97,0x01,0x00,0x00,0x96,0x01,0x00,0x00, -0x7c,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x98,0x01,0x00,0x00, -0x97,0x01,0x00,0x00,0xab,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0x99,0x01,0x00,0x00,0x98,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0xa9,0x00,0x06,0x00,0x13,0x00,0x00,0x00,0x9b,0x01,0x00,0x00, -0x99,0x01,0x00,0x00,0x9a,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0x6f,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x9c,0x01,0x00,0x00, -0x9b,0x01,0x00,0x00,0x81,0x00,0x05,0x00,0xc3,0x00,0x00,0x00, -0x9d,0x01,0x00,0x00,0x90,0x01,0x00,0x00,0x9c,0x01,0x00,0x00, -0x7f,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0xab,0x03,0x00,0x00, -0x7e,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,0xc3,0x00,0x00,0x00, -0xa0,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x78,0x01,0x00,0x00,0x9d,0x01,0x00,0x00,0xab,0x03,0x00,0x00, -0x41,0x00,0x05,0x00,0xa1,0x01,0x00,0x00,0xa2,0x01,0x00,0x00, -0x83,0x01,0x00,0x00,0xf7,0x00,0x00,0x00,0x3e,0x00,0x03,0x00, -0xa2,0x01,0x00,0x00,0xa0,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa4,0x01,0x00,0x00,0xf7,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa8,0x01,0x00,0x00,0x13,0x01,0x00,0x00,0x39,0x00,0x00,0x00, -0x41,0x00,0x08,0x00,0x3c,0x01,0x00,0x00,0xa9,0x01,0x00,0x00, -0x2e,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0xfb,0x00,0x00,0x00, -0x96,0x00,0x00,0x00,0xa8,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0x18,0x01,0x00,0x00,0xaa,0x01,0x00,0x00,0xa9,0x01,0x00,0x00, -0xc2,0x00,0x05,0x00,0x18,0x01,0x00,0x00,0xad,0x01,0x00,0x00, -0xaa,0x01,0x00,0x00,0x8b,0x01,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xae,0x01,0x00,0x00,0xad,0x01,0x00,0x00, -0x7c,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0xaf,0x01,0x00,0x00, -0xae,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x13,0x00,0x00,0x00, -0xb0,0x01,0x00,0x00,0xaf,0x01,0x00,0x00,0x58,0x01,0x00,0x00, -0x6f,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0xb1,0x01,0x00,0x00, -0xb0,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xb4,0x01,0x00,0x00,0x12,0x01,0x00,0x00,0x39,0x00,0x00,0x00, -0x41,0x00,0x08,0x00,0x3c,0x01,0x00,0x00,0xb5,0x01,0x00,0x00, -0x2e,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0xfb,0x00,0x00,0x00, -0x85,0x00,0x00,0x00,0xb4,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0x18,0x01,0x00,0x00,0xb6,0x01,0x00,0x00,0xb5,0x01,0x00,0x00, -0xc7,0x00,0x05,0x00,0x18,0x01,0x00,0x00,0xb8,0x01,0x00,0x00, -0xb6,0x01,0x00,0x00,0x20,0x01,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xb9,0x01,0x00,0x00,0xb8,0x01,0x00,0x00, -0x7c,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0xba,0x01,0x00,0x00, -0xb9,0x01,0x00,0x00,0xab,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0xbb,0x01,0x00,0x00,0xba,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0xa9,0x00,0x06,0x00,0x13,0x00,0x00,0x00,0xbc,0x01,0x00,0x00, -0xbb,0x01,0x00,0x00,0x9a,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0x6f,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0xbd,0x01,0x00,0x00, -0xbc,0x01,0x00,0x00,0x81,0x00,0x05,0x00,0xc3,0x00,0x00,0x00, -0xbe,0x01,0x00,0x00,0xb1,0x01,0x00,0x00,0xbd,0x01,0x00,0x00, -0x0c,0x00,0x08,0x00,0xc3,0x00,0x00,0x00,0xc1,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x78,0x01,0x00,0x00, -0xbe,0x01,0x00,0x00,0xab,0x03,0x00,0x00,0x41,0x00,0x05,0x00, -0xa1,0x01,0x00,0x00,0xc2,0x01,0x00,0x00,0x83,0x01,0x00,0x00, -0xa4,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xc2,0x01,0x00,0x00, -0xc1,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xdf,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xdf,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xc9,0x01,0x00,0x00,0x5a,0x03,0x00,0x00, -0xc7,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xdc,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xcb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xcb,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x5b,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0x10,0x02,0x00,0x00, -0xce,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0xd1,0x01,0x00,0x00,0x5b,0x03,0x00,0x00,0xa6,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xcd,0x01,0x00,0x00,0xce,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xd1,0x01,0x00,0x00, -0xcc,0x01,0x00,0x00,0xcd,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xcc,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd5,0x01,0x00,0x00,0xa7,0x00,0x00,0x00,0x7d,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd7,0x01,0x00,0x00, -0xd5,0x01,0x00,0x00,0x5b,0x03,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0xd8,0x01,0x00,0x00,0x12,0x00,0x00,0x00, -0xcf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xd9,0x01,0x00,0x00,0xd8,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0xda,0x01,0x00,0x00,0xd7,0x01,0x00,0x00, -0xd9,0x01,0x00,0x00,0xf7,0x00,0x03,0x00,0xdc,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xda,0x01,0x00,0x00, -0xdb,0x01,0x00,0x00,0xdc,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xdb,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xdf,0x01,0x00,0x00,0x4a,0x03,0x00,0x00,0x78,0x00,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xe1,0x01,0x00,0x00, -0xdf,0x01,0x00,0x00,0x8d,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xdc,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xdc,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0xc1,0x00,0x00,0x00,0xe2,0x01,0x00,0x00, -0xda,0x01,0x00,0x00,0xcc,0x01,0x00,0x00,0xe1,0x01,0x00,0x00, -0xdb,0x01,0x00,0x00,0xf7,0x00,0x03,0x00,0xe4,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xe2,0x01,0x00,0x00, -0xe3,0x01,0x00,0x00,0x03,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xe3,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xec,0x01,0x00,0x00,0x7d,0x00,0x00,0x00,0x5b,0x03,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xee,0x01,0x00,0x00, -0xec,0x01,0x00,0x00,0xed,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xf0,0x01,0x00,0x00,0xee,0x01,0x00,0x00, -0x78,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xfb,0x01,0x00,0x00,0xec,0x01,0x00,0x00,0xaa,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfc,0x01,0x00,0x00, -0x62,0x03,0x00,0x00,0xfb,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xfe,0x01,0x00,0x00,0xfc,0x01,0x00,0x00, -0x78,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0xff,0x01,0x00,0x00, -0x00,0x02,0x00,0x00,0xf4,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0xfe,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00, -0x01,0x02,0x00,0x00,0x00,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0xa1,0x01,0x00,0x00,0x02,0x02,0x00,0x00,0xe9,0x01,0x00,0x00, -0xf0,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x02,0x02,0x00,0x00, -0x01,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xe4,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x03,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x06,0x02,0x00,0x00,0x7d,0x00,0x00,0x00, -0x5b,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x08,0x02,0x00,0x00,0x06,0x02,0x00,0x00,0x07,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0a,0x02,0x00,0x00, -0x08,0x02,0x00,0x00,0x78,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0xa1,0x01,0x00,0x00,0x0b,0x02,0x00,0x00,0xe9,0x01,0x00,0x00, -0x0a,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x0b,0x02,0x00,0x00, -0xcb,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xe4,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xe4,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xce,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xce,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x10,0x02,0x00,0x00, -0x5b,0x03,0x00,0x00,0x0e,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0xcb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xcd,0x01,0x00,0x00, -0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x11,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x14,0x02,0x00,0x00,0x5e,0x03,0x00,0x00,0x12,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x17,0x02,0x00,0x00, -0x62,0x03,0x00,0x00,0x15,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x19,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x19,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x64,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0xcd,0x01,0x00,0x00,0xc0,0x02,0x00,0x00, -0x1c,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0x1f,0x02,0x00,0x00,0x64,0x03,0x00,0x00,0x6c,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x1b,0x02,0x00,0x00,0x1c,0x02,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x1f,0x02,0x00,0x00, -0x1a,0x02,0x00,0x00,0x1b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x1a,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x21,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x21,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x68,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0x1a,0x02,0x00,0x00,0x4c,0x02,0x00,0x00,0x24,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x27,0x02,0x00,0x00, -0x68,0x03,0x00,0x00,0x60,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x23,0x02,0x00,0x00,0x24,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x27,0x02,0x00,0x00,0x22,0x02,0x00,0x00, -0x23,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x22,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x29,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x29,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x7a,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0x22,0x02,0x00,0x00, -0x4a,0x02,0x00,0x00,0x2a,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0x2f,0x02,0x00,0x00,0x7a,0x03,0x00,0x00, -0x62,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x2b,0x02,0x00,0x00, -0x2a,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x2f,0x02,0x00,0x00,0x2a,0x02,0x00,0x00,0x2b,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x2a,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x35,0x02,0x00,0x00,0x68,0x03,0x00,0x00, -0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x37,0x02,0x00,0x00,0x35,0x02,0x00,0x00,0x7a,0x03,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x39,0x02,0x00,0x00, -0x55,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3b,0x02,0x00,0x00,0x68,0x03,0x00,0x00, -0x61,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x3c,0x02,0x00,0x00,0x39,0x02,0x00,0x00,0x3b,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3e,0x02,0x00,0x00, -0x64,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3f,0x02,0x00,0x00,0x3c,0x02,0x00,0x00, -0x3e,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x41,0x02,0x00,0x00,0x3f,0x02,0x00,0x00,0x7a,0x03,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x43,0x02,0x00,0x00, -0x41,0x02,0x00,0x00,0x42,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x45,0x02,0x00,0x00,0x43,0x02,0x00,0x00, -0x64,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0xa1,0x01,0x00,0x00, -0x46,0x02,0x00,0x00,0x83,0x01,0x00,0x00,0x45,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x47,0x02,0x00,0x00, -0x46,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00, -0x48,0x02,0x00,0x00,0x33,0x02,0x00,0x00,0x37,0x02,0x00,0x00, -0x3e,0x00,0x03,0x00,0x48,0x02,0x00,0x00,0x47,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4a,0x02,0x00,0x00, -0x7a,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x29,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x2b,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x24,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x24,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x4c,0x02,0x00,0x00,0x68,0x03,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x21,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x23,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x4e,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x4e,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x69,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0x23,0x02,0x00,0x00,0x7a,0x02,0x00,0x00,0x51,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x54,0x02,0x00,0x00, -0x69,0x03,0x00,0x00,0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x50,0x02,0x00,0x00,0x51,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x54,0x02,0x00,0x00,0x4f,0x02,0x00,0x00, -0x50,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x4f,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x56,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x56,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x77,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0x4f,0x02,0x00,0x00, -0x78,0x02,0x00,0x00,0x57,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0x5c,0x02,0x00,0x00,0x77,0x03,0x00,0x00, -0xbb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x58,0x02,0x00,0x00, -0x57,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x5c,0x02,0x00,0x00,0x57,0x02,0x00,0x00,0x58,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x57,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x62,0x02,0x00,0x00,0x69,0x03,0x00,0x00, -0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x64,0x02,0x00,0x00,0x62,0x02,0x00,0x00,0x77,0x03,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x66,0x02,0x00,0x00, -0x59,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x69,0x02,0x00,0x00,0x69,0x03,0x00,0x00, -0x68,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x6a,0x02,0x00,0x00,0x66,0x02,0x00,0x00,0x69,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6c,0x02,0x00,0x00, -0x68,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x6d,0x02,0x00,0x00,0x6a,0x02,0x00,0x00, -0x6c,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x6f,0x02,0x00,0x00,0x6d,0x02,0x00,0x00,0x77,0x03,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x71,0x02,0x00,0x00, -0x6f,0x02,0x00,0x00,0x70,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x73,0x02,0x00,0x00,0x71,0x02,0x00,0x00, -0x64,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0xa1,0x01,0x00,0x00, -0x74,0x02,0x00,0x00,0xe9,0x01,0x00,0x00,0x73,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x75,0x02,0x00,0x00, -0x74,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00, -0x76,0x02,0x00,0x00,0x60,0x02,0x00,0x00,0x64,0x02,0x00,0x00, -0x3e,0x00,0x03,0x00,0x76,0x02,0x00,0x00,0x75,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x78,0x02,0x00,0x00, -0x77,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x56,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x58,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x51,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x51,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x7a,0x02,0x00,0x00,0x69,0x03,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x4e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x50,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x7c,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x7c,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x6a,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0x50,0x02,0x00,0x00,0xbe,0x02,0x00,0x00,0x7f,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x82,0x02,0x00,0x00, -0x6a,0x03,0x00,0x00,0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x7e,0x02,0x00,0x00,0x7f,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x82,0x02,0x00,0x00,0x7d,0x02,0x00,0x00, -0x7e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x7d,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x84,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x84,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x6e,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0x7d,0x02,0x00,0x00, -0xbc,0x02,0x00,0x00,0x87,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0x8a,0x02,0x00,0x00,0x6e,0x03,0x00,0x00, -0x60,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x86,0x02,0x00,0x00, -0x87,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x8a,0x02,0x00,0x00,0x85,0x02,0x00,0x00,0x86,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x85,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x8c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x8c,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x70,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0x85,0x02,0x00,0x00,0xba,0x02,0x00,0x00, -0x8f,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0x92,0x02,0x00,0x00,0x70,0x03,0x00,0x00,0xbb,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x8e,0x02,0x00,0x00,0x8f,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x92,0x02,0x00,0x00, -0x8d,0x02,0x00,0x00,0x8e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x8d,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x94,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x94,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x72,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0x8d,0x02,0x00,0x00,0xb8,0x02,0x00,0x00,0x95,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x9a,0x02,0x00,0x00, -0x72,0x03,0x00,0x00,0x62,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x96,0x02,0x00,0x00,0x95,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x9a,0x02,0x00,0x00,0x95,0x02,0x00,0x00, -0x96,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x95,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9c,0x02,0x00,0x00, -0x6a,0x03,0x00,0x00,0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9e,0x02,0x00,0x00,0x9c,0x02,0x00,0x00, -0x70,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa0,0x02,0x00,0x00,0x9e,0x02,0x00,0x00,0x9f,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa2,0x02,0x00,0x00, -0x6e,0x03,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa3,0x02,0x00,0x00,0xa0,0x02,0x00,0x00, -0xa2,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa5,0x02,0x00,0x00,0xa3,0x02,0x00,0x00,0x72,0x03,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa9,0x02,0x00,0x00, -0xa2,0x02,0x00,0x00,0x72,0x03,0x00,0x00,0x41,0x00,0x05,0x00, -0xcc,0x00,0x00,0x00,0xaa,0x02,0x00,0x00,0x33,0x02,0x00,0x00, -0xa9,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00, -0xab,0x02,0x00,0x00,0xaa,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0xcc,0x00,0x00,0x00,0xb0,0x02,0x00,0x00,0x60,0x02,0x00,0x00, -0x9e,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00, -0xb1,0x02,0x00,0x00,0xb0,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0xcc,0x00,0x00,0x00,0xb3,0x02,0x00,0x00,0xc9,0x00,0x00,0x00, -0xa5,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00, -0xb4,0x02,0x00,0x00,0xb3,0x02,0x00,0x00,0x0c,0x00,0x08,0x00, -0xc3,0x00,0x00,0x00,0xb5,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0xab,0x02,0x00,0x00,0xb1,0x02,0x00,0x00, -0xb4,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0xb3,0x02,0x00,0x00, -0xb5,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xb8,0x02,0x00,0x00,0x72,0x03,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x94,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x96,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x8f,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x8f,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xba,0x02,0x00,0x00,0x70,0x03,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x8c,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x8e,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x87,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x87,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbc,0x02,0x00,0x00, -0x6e,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x84,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x86,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x7f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x7f,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xbe,0x02,0x00,0x00,0x6a,0x03,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x7c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x7e,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x1c,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x1c,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xc0,0x02,0x00,0x00,0x64,0x03,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x19,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x1b,0x02,0x00,0x00,0xe0,0x00,0x04,0x00, -0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x11,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0xd6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xd6,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xc2,0x02,0x00,0x00,0x4a,0x03,0x00,0x00,0x6c,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xd3,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xd5,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xc7,0x02,0x00,0x00,0x55,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc8,0x02,0x00,0x00, -0x95,0x00,0x00,0x00,0xc7,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xcd,0x02,0x00,0x00,0x59,0x00,0x00,0x00, -0xb8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xce,0x02,0x00,0x00,0xa7,0x00,0x00,0x00,0xcd,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0xd3,0x02,0x00,0x00, -0x12,0x00,0x00,0x00,0xd2,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xd4,0x02,0x00,0x00,0xd3,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd5,0x02,0x00,0x00, -0x0f,0x00,0x00,0x00,0xd4,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xd9,0x02,0x00,0x00,0x47,0x00,0x00,0x00, -0xd4,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0xdb,0x02,0x00,0x00,0xda,0x02,0x00,0x00,0x0c,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xdc,0x02,0x00,0x00, -0xdb,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xdd,0x02,0x00,0x00,0xd9,0x02,0x00,0x00,0xdc,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xde,0x02,0x00,0x00, -0xd5,0x02,0x00,0x00,0xdd,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0xe0,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xe0,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x4b,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0x46,0x03,0x00,0x00, -0xe3,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0xe6,0x02,0x00,0x00,0x4b,0x03,0x00,0x00,0xbe,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xe2,0x02,0x00,0x00,0xe3,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xe6,0x02,0x00,0x00, -0xe1,0x02,0x00,0x00,0xe2,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xe1,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xe8,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xe8,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x4c,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0xe1,0x02,0x00,0x00,0x44,0x03,0x00,0x00,0xeb,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xee,0x02,0x00,0x00, -0x4c,0x03,0x00,0x00,0x60,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xea,0x02,0x00,0x00,0xeb,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xee,0x02,0x00,0x00,0xe9,0x02,0x00,0x00, -0xea,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xe9,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf2,0x02,0x00,0x00, -0x4c,0x03,0x00,0x00,0x61,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xf3,0x02,0x00,0x00,0xc8,0x02,0x00,0x00, -0xf2,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xf5,0x02,0x00,0x00,0x64,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf6,0x02,0x00,0x00, -0xf3,0x02,0x00,0x00,0xf5,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xfa,0x02,0x00,0x00,0x4b,0x03,0x00,0x00, -0x68,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xfb,0x02,0x00,0x00,0xce,0x02,0x00,0x00,0xfa,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfd,0x02,0x00,0x00, -0x68,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xfe,0x02,0x00,0x00,0xfb,0x02,0x00,0x00, -0xfd,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x00,0x03,0x00,0x00, -0xf8,0x00,0x02,0x00,0x00,0x03,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x4e,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0xe9,0x02,0x00,0x00,0x42,0x03,0x00,0x00,0x03,0x03,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x06,0x03,0x00,0x00, -0x4e,0x03,0x00,0x00,0xbb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x02,0x03,0x00,0x00,0x03,0x03,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x06,0x03,0x00,0x00,0x01,0x03,0x00,0x00, -0x02,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x01,0x03,0x00,0x00, -0xf9,0x00,0x02,0x00,0x08,0x03,0x00,0x00,0xf8,0x00,0x02,0x00, -0x08,0x03,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x50,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0x01,0x03,0x00,0x00, -0x40,0x03,0x00,0x00,0x0b,0x03,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0x0e,0x03,0x00,0x00,0x50,0x03,0x00,0x00, -0x62,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x0a,0x03,0x00,0x00, -0x0b,0x03,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x0e,0x03,0x00,0x00,0x09,0x03,0x00,0x00,0x0a,0x03,0x00,0x00, -0xf8,0x00,0x02,0x00,0x09,0x03,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x11,0x03,0x00,0x00,0xf6,0x02,0x00,0x00, -0x50,0x03,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0x14,0x03,0x00,0x00,0x11,0x03,0x00,0x00,0x36,0x00,0x00,0x00, -0xf7,0x00,0x03,0x00,0x16,0x03,0x00,0x00,0x00,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x14,0x03,0x00,0x00,0x15,0x03,0x00,0x00, -0x16,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x15,0x03,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x19,0x03,0x00,0x00, -0xfe,0x02,0x00,0x00,0x4e,0x03,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x1a,0x03,0x00,0x00,0x12,0x00,0x00,0x00, -0xcf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x1b,0x03,0x00,0x00,0x1a,0x03,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0x1c,0x03,0x00,0x00,0x19,0x03,0x00,0x00, -0x1b,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,0x16,0x03,0x00,0x00, -0xf8,0x00,0x02,0x00,0x16,0x03,0x00,0x00,0xf5,0x00,0x07,0x00, -0xc1,0x00,0x00,0x00,0x1d,0x03,0x00,0x00,0x14,0x03,0x00,0x00, -0x09,0x03,0x00,0x00,0x1c,0x03,0x00,0x00,0x15,0x03,0x00,0x00, -0xf7,0x00,0x03,0x00,0x1f,0x03,0x00,0x00,0x00,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x1d,0x03,0x00,0x00,0x1e,0x03,0x00,0x00, -0x1f,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x1e,0x03,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x27,0x03,0x00,0x00, -0xfe,0x02,0x00,0x00,0x4e,0x03,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x29,0x03,0x00,0x00,0x12,0x00,0x00,0x00, -0x28,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x2a,0x03,0x00,0x00,0x29,0x03,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x2b,0x03,0x00,0x00,0x27,0x03,0x00,0x00, -0x2a,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x2c,0x03,0x00,0x00,0xde,0x02,0x00,0x00,0x2b,0x03,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2e,0x03,0x00,0x00, -0x2c,0x03,0x00,0x00,0xf6,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x30,0x03,0x00,0x00,0x2e,0x03,0x00,0x00, -0x50,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x32,0x03,0x00,0x00,0x4b,0x03,0x00,0x00,0xbb,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x34,0x03,0x00,0x00, -0x32,0x03,0x00,0x00,0x4e,0x03,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x36,0x03,0x00,0x00,0x34,0x03,0x00,0x00, -0x35,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x38,0x03,0x00,0x00,0x4c,0x03,0x00,0x00,0x62,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x39,0x03,0x00,0x00, -0x36,0x03,0x00,0x00,0x38,0x03,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3b,0x03,0x00,0x00,0x39,0x03,0x00,0x00, -0x50,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00, -0x3c,0x03,0x00,0x00,0xc9,0x00,0x00,0x00,0x3b,0x03,0x00,0x00, -0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x3d,0x03,0x00,0x00, -0x3c,0x03,0x00,0x00,0x41,0x00,0x06,0x00,0xff,0x01,0x00,0x00, -0x3e,0x03,0x00,0x00,0x23,0x03,0x00,0x00,0x34,0x00,0x00,0x00, -0x30,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,0x3e,0x03,0x00,0x00, -0x3d,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,0x1f,0x03,0x00,0x00, -0xf8,0x00,0x02,0x00,0x1f,0x03,0x00,0x00,0xf9,0x00,0x02,0x00, -0x0b,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x0b,0x03,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x40,0x03,0x00,0x00, -0x50,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x08,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x0a,0x03,0x00,0x00, -0xf9,0x00,0x02,0x00,0x03,0x03,0x00,0x00,0xf8,0x00,0x02,0x00, -0x03,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x42,0x03,0x00,0x00,0x4e,0x03,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x00,0x03,0x00,0x00,0xf8,0x00,0x02,0x00, -0x02,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,0xeb,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xeb,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x44,0x03,0x00,0x00,0x4c,0x03,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xe8,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xea,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0xe3,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xe3,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x46,0x03,0x00,0x00, -0x4b,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xe0,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xe2,0x02,0x00,0x00, -0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00, -}; -const uint64_t matmul_q5_k_f32_fp32_len = 12476; - -unsigned char matmul_q6_k_f32_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0x44,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x09,0x00,0x00,0x00, -0x11,0x00,0x02,0x00,0x27,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00, -0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c, -0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00, -0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x0f,0x00,0x0f,0x00,0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x4c,0x00,0x00,0x00, -0x33,0x01,0x00,0x00,0x44,0x01,0x00,0x00,0xaf,0x01,0x00,0x00, -0xba,0x01,0x00,0x00,0xa5,0x02,0x00,0x00,0xee,0x02,0x00,0x00, -0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x0a,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x0d,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x10,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x37,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x3d,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x4c,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x4f,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x53,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x60,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x62,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x6c,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xa6,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xb8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x2a,0x01,0x00,0x00, -0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x2b,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x2d,0x01,0x00,0x00,0x06,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x2f,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x2f,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x2f,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0xc0,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x2f,0x01,0x00,0x00, -0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0xd0,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x30,0x01,0x00,0x00,0x06,0x00,0x00,0x00, -0xd2,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x31,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x31,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x31,0x01,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x33,0x01,0x00,0x00, -0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x33,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x89,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x8a,0x01,0x00,0x00, -0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xb7,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x04,0x00,0xb8,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0xb8,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0xb8,0x01,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xba,0x01,0x00,0x00,0x22,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xba,0x01,0x00,0x00, -0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xa5,0x02,0x00,0x00,0x0b,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xeb,0x02,0x00,0x00,0x06,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0xec,0x02,0x00,0x00, -0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0xec,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0xec,0x02,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xee,0x02,0x00,0x00, -0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xee,0x02,0x00,0x00,0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00, -0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x1e,0x00,0x10,0x00, -0x10,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x11,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x11,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x15,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x0a,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x27,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x2d,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x3e,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x4c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x54,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x58,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x63,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x67,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x6d,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x72,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x77,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x7c,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x80,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x90,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x96,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa6,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0xa8,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0xb8,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xba,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xbb,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xbc,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xba,0x00,0x00,0x00, -0xbb,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xbd,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xbc,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xbe,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0xb9,0x00,0x00,0x00, -0xbd,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xbf,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xb7,0x00,0x00,0x00, -0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xc0,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xbf,0x00,0x00,0x00, -0xbb,0x00,0x00,0x00,0x14,0x00,0x02,0x00,0xc1,0x00,0x00,0x00, -0x16,0x00,0x03,0x00,0xc3,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc4,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0xbe,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0xbb,0x00,0x00,0x00, -0x1c,0x00,0x04,0x00,0xc7,0x00,0x00,0x00,0xc3,0x00,0x00,0x00, -0xc6,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xc8,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0xc3,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0xcc,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0xc3,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0xcf,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xf3,0x00,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0x80,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x01,0x01,0x00,0x00, -0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x06,0x01,0x00,0x00,0x20,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x0a,0x01,0x00,0x00,0x10,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0c,0x01,0x00,0x00, -0x08,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x29,0x01,0x00,0x00, -0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1c,0x00,0x04,0x00, -0x2a,0x01,0x00,0x00,0x29,0x01,0x00,0x00,0xfa,0x00,0x00,0x00, -0x1c,0x00,0x04,0x00,0x2b,0x01,0x00,0x00,0x29,0x01,0x00,0x00, -0x01,0x01,0x00,0x00,0x15,0x00,0x04,0x00,0x2c,0x01,0x00,0x00, -0x08,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x1c,0x00,0x04,0x00, -0x2d,0x01,0x00,0x00,0x2c,0x01,0x00,0x00,0x0a,0x01,0x00,0x00, -0x16,0x00,0x03,0x00,0x2e,0x01,0x00,0x00,0x10,0x00,0x00,0x00, -0x1e,0x00,0x06,0x00,0x2f,0x01,0x00,0x00,0x2a,0x01,0x00,0x00, -0x2b,0x01,0x00,0x00,0x2d,0x01,0x00,0x00,0x2e,0x01,0x00,0x00, -0x1d,0x00,0x03,0x00,0x30,0x01,0x00,0x00,0x2f,0x01,0x00,0x00, -0x1e,0x00,0x03,0x00,0x31,0x01,0x00,0x00,0x30,0x01,0x00,0x00, -0x20,0x00,0x04,0x00,0x32,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x31,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x32,0x01,0x00,0x00, -0x33,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x35,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x2e,0x01,0x00,0x00, -0x20,0x00,0x04,0x00,0x3b,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x2c,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x40,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x41,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x40,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,0x42,0x01,0x00,0x00, -0x2e,0x01,0x00,0x00,0x41,0x01,0x00,0x00,0x20,0x00,0x04,0x00, -0x43,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x42,0x01,0x00,0x00, -0x3b,0x00,0x04,0x00,0x43,0x01,0x00,0x00,0x44,0x01,0x00,0x00, -0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x49,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x29,0x01,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x4d,0x01,0x00,0x00,0x04,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x52,0x01,0x00,0x00, -0x0f,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x61,0x01,0x00,0x00,0x20,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x66,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x2e,0x01,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x89,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00,0x09,0x00,0x00,0x00, -0x8a,0x01,0x00,0x00,0x89,0x01,0x00,0x00,0x39,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x8b,0x01,0x00,0x00,0x51,0x00,0x00,0x00,0x8a,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x8c,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x8b,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x8d,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x8c,0x01,0x00,0x00, -0x6c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xab,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xac,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0xa6,0x00,0x00,0x00, -0xab,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,0xad,0x01,0x00,0x00, -0x2e,0x01,0x00,0x00,0xac,0x01,0x00,0x00,0x20,0x00,0x04,0x00, -0xae,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0xad,0x01,0x00,0x00, -0x3b,0x00,0x04,0x00,0xae,0x01,0x00,0x00,0xaf,0x01,0x00,0x00, -0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xb3,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0xb7,0x01,0x00,0x00, -0xc3,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0xb8,0x01,0x00,0x00, -0xb7,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0xb9,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0xb8,0x01,0x00,0x00,0x3b,0x00,0x04,0x00, -0xb9,0x01,0x00,0x00,0xba,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0xc5,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0xc3,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xce,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x2e,0x01,0x00,0x00, -0xd2,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xd4,0x01,0x00,0x00,0x51,0x00,0x00,0x00, -0x8a,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xd5,0x01,0x00,0x00,0x84,0x00,0x00,0x00, -0xd4,0x01,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xd6,0x01,0x00,0x00,0x86,0x00,0x00,0x00, -0xd5,0x01,0x00,0x00,0x6c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xd9,0x01,0x00,0x00,0x08,0x01,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xda,0x01,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xdd,0x01,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xf8,0x01,0x00,0x00, -0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x1c,0x00,0x04,0x00,0xf9,0x01,0x00,0x00,0x2e,0x01,0x00,0x00, -0xf8,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0xfa,0x01,0x00,0x00, -0x07,0x00,0x00,0x00,0xf9,0x01,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x0a,0x02,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x10,0x02,0x00,0x00,0x07,0x00,0x00,0x00,0x2e,0x01,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x26,0x02,0x00,0x00, -0x84,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0xbb,0x00,0x00,0x00, -0x1c,0x00,0x04,0x00,0x27,0x02,0x00,0x00,0x2e,0x01,0x00,0x00, -0x26,0x02,0x00,0x00,0x20,0x00,0x04,0x00,0x28,0x02,0x00,0x00, -0x07,0x00,0x00,0x00,0x27,0x02,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x31,0x02,0x00,0x00,0x86,0x00,0x00,0x00, -0xb8,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x39,0x02,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x68,0x02,0x00,0x00,0x84,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x9d,0x02,0x00,0x00,0x0d,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0xa5,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0xeb,0x02,0x00,0x00, -0xc3,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0xec,0x02,0x00,0x00, -0xeb,0x02,0x00,0x00,0x20,0x00,0x04,0x00,0xed,0x02,0x00,0x00, -0x0c,0x00,0x00,0x00,0xec,0x02,0x00,0x00,0x3b,0x00,0x04,0x00, -0xed,0x02,0x00,0x00,0xee,0x02,0x00,0x00,0x0c,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0xf3,0x02,0x00,0x00, -0x05,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x00,0x03,0x00,0x00,0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0xc8,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0xfa,0x01,0x00,0x00,0xfb,0x01,0x00,0x00, -0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x28,0x02,0x00,0x00, -0x29,0x02,0x00,0x00,0x07,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x17,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x17,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x1e,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x17,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x27,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x29,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x1e,0x00,0x00,0x00, -0x29,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x2e,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x2d,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x2f,0x00,0x00,0x00, -0x2e,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x30,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x2f,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x30,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x34,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x36,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x36,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x3a,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00, -0x3a,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x3b,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x47,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x3b,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x49,0x00,0x00,0x00, -0x3d,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x49,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x4d,0x00,0x00,0x00, -0x4c,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x4d,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x50,0x00,0x00,0x00, -0x54,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x59,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x58,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5d,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x5d,0x00,0x00,0x00, -0x63,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x68,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,0x67,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6e,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x72,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x78,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x77,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7d,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x80,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x82,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x47,0x00,0x00,0x00, -0x82,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x85,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x87,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x89,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8c,0x00,0x00,0x00, -0x89,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x0c,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x26,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x8c,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x91,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x90,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x91,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x93,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0x42,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x97,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x96,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x98,0x00,0x00,0x00, -0x97,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x99,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0x98,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9a,0x00,0x00,0x00, -0x93,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0x9a,0x00,0x00,0x00, -0x83,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9d,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0xa2,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0xa2,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0x4a,0x00,0x00,0x00, -0xa6,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0xa9,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0xa8,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xaa,0x00,0x00,0x00, -0xa9,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xab,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0xaa,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00, -0xa4,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0xac,0x00,0x00,0x00, -0x83,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xaf,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xb1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xb1,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x12,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0x05,0x00,0x00,0x00, -0xd0,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,0x12,0x03,0x00,0x00, -0xc0,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xb3,0x00,0x00,0x00, -0xb2,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xc2,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0xb3,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0xcc,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,0xc9,0x00,0x00,0x00, -0x12,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,0xcd,0x00,0x00,0x00, -0xcb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd0,0x00,0x00,0x00,0x12,0x03,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xb1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xb3,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd3,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xd3,0x00,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x2b,0x03,0x00,0x00,0xaf,0x00,0x00,0x00, -0xb3,0x00,0x00,0x00,0xdf,0x01,0x00,0x00,0xd6,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x27,0x03,0x00,0x00, -0x9d,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0xdc,0x01,0x00,0x00, -0xd6,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x13,0x03,0x00,0x00,0x83,0x00,0x00,0x00,0xb3,0x00,0x00,0x00, -0x8d,0x02,0x00,0x00,0xd6,0x00,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0xda,0x00,0x00,0x00,0x13,0x03,0x00,0x00, -0x8d,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xd5,0x00,0x00,0x00, -0xd6,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xda,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,0xd5,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xd4,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xdc,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdc,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x23,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,0x8f,0x01,0x00,0x00, -0xdd,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0xe2,0x00,0x00,0x00,0x23,0x03,0x00,0x00,0x37,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xde,0x00,0x00,0x00,0xdd,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xe2,0x00,0x00,0x00, -0xdd,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xdd,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xe7,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x23,0x03,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xea,0x00,0x00,0x00, -0xe7,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,0xea,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xec,0x00,0x00,0x00,0x27,0x03,0x00,0x00,0xeb,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xee,0x00,0x00,0x00, -0xec,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,0xe7,0x00,0x00,0x00, -0xf3,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xf6,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf7,0x00,0x00,0x00, -0xf4,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0xee,0x00,0x00,0x00, -0xfa,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xfe,0x00,0x00,0x00,0xee,0x00,0x00,0x00,0xfa,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x02,0x01,0x00,0x00, -0xfe,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x05,0x01,0x00,0x00,0xfe,0x00,0x00,0x00, -0x01,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x07,0x01,0x00,0x00,0x05,0x01,0x00,0x00,0x06,0x01,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0b,0x01,0x00,0x00, -0xfe,0x00,0x00,0x00,0x0a,0x01,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x0d,0x01,0x00,0x00,0x0b,0x01,0x00,0x00, -0x0c,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x11,0x01,0x00,0x00,0x05,0x01,0x00,0x00,0x0a,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x12,0x01,0x00,0x00, -0x11,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x15,0x01,0x00,0x00,0x0c,0x01,0x00,0x00, -0x02,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x17,0x01,0x00,0x00,0x15,0x01,0x00,0x00,0x12,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x19,0x01,0x00,0x00, -0x17,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x1c,0x01,0x00,0x00,0x02,0x01,0x00,0x00, -0x01,0x01,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x1e,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,0x06,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1f,0x01,0x00,0x00, -0x1e,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x20,0x01,0x00,0x00,0x1c,0x01,0x00,0x00, -0x1f,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x23,0x01,0x00,0x00,0x02,0x01,0x00,0x00,0x06,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x26,0x01,0x00,0x00, -0x0b,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x27,0x01,0x00,0x00,0x23,0x01,0x00,0x00, -0x26,0x01,0x00,0x00,0x41,0x00,0x07,0x00,0x35,0x01,0x00,0x00, -0x36,0x01,0x00,0x00,0x33,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0xfb,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x2e,0x01,0x00,0x00,0x37,0x01,0x00,0x00,0x36,0x01,0x00,0x00, -0x73,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x38,0x01,0x00,0x00, -0x37,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x3b,0x01,0x00,0x00, -0x3c,0x01,0x00,0x00,0x33,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0xfb,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x19,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0x2c,0x01,0x00,0x00,0x3d,0x01,0x00,0x00, -0x3c,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,0xc3,0x00,0x00,0x00, -0x3e,0x01,0x00,0x00,0x3d,0x01,0x00,0x00,0x85,0x00,0x05,0x00, -0xc3,0x00,0x00,0x00,0x3f,0x01,0x00,0x00,0x38,0x01,0x00,0x00, -0x3e,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x49,0x01,0x00,0x00, -0x4a,0x01,0x00,0x00,0x33,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0xfb,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x20,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0x29,0x01,0x00,0x00,0x4b,0x01,0x00,0x00, -0x4a,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x4e,0x01,0x00,0x00,0x07,0x01,0x00,0x00,0x4d,0x01,0x00,0x00, -0xc2,0x00,0x05,0x00,0x29,0x01,0x00,0x00,0x4f,0x01,0x00,0x00, -0x4b,0x01,0x00,0x00,0x4e,0x01,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x50,0x01,0x00,0x00,0x4f,0x01,0x00,0x00, -0x7c,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x51,0x01,0x00,0x00, -0x50,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x13,0x00,0x00,0x00, -0x53,0x01,0x00,0x00,0x51,0x01,0x00,0x00,0x52,0x01,0x00,0x00, -0x41,0x00,0x08,0x00,0x49,0x01,0x00,0x00,0x56,0x01,0x00,0x00, -0x33,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0xfb,0x00,0x00,0x00, -0xcf,0x00,0x00,0x00,0x27,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0x29,0x01,0x00,0x00,0x57,0x01,0x00,0x00,0x56,0x01,0x00,0x00, -0xc2,0x00,0x05,0x00,0x29,0x01,0x00,0x00,0x59,0x01,0x00,0x00, -0x57,0x01,0x00,0x00,0x12,0x01,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x5a,0x01,0x00,0x00,0x59,0x01,0x00,0x00, -0x7c,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x5b,0x01,0x00,0x00, -0x5a,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x13,0x00,0x00,0x00, -0x5c,0x01,0x00,0x00,0x5b,0x01,0x00,0x00,0x96,0x00,0x00,0x00, -0xc4,0x00,0x05,0x00,0x13,0x00,0x00,0x00,0x5d,0x01,0x00,0x00, -0x5c,0x01,0x00,0x00,0xa8,0x00,0x00,0x00,0xc5,0x00,0x05,0x00, -0x13,0x00,0x00,0x00,0x5e,0x01,0x00,0x00,0x53,0x01,0x00,0x00, -0x5d,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0x2c,0x01,0x00,0x00, -0x5f,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,0x72,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x60,0x01,0x00,0x00,0x5f,0x01,0x00,0x00, -0x82,0x00,0x05,0x00,0x13,0x00,0x00,0x00,0x62,0x01,0x00,0x00, -0x60,0x01,0x00,0x00,0x61,0x01,0x00,0x00,0x6f,0x00,0x04,0x00, -0xc3,0x00,0x00,0x00,0x63,0x01,0x00,0x00,0x62,0x01,0x00,0x00, -0x85,0x00,0x05,0x00,0xc3,0x00,0x00,0x00,0x64,0x01,0x00,0x00, -0x3f,0x01,0x00,0x00,0x63,0x01,0x00,0x00,0x73,0x00,0x04,0x00, -0x2e,0x01,0x00,0x00,0x65,0x01,0x00,0x00,0x64,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x66,0x01,0x00,0x00,0x67,0x01,0x00,0x00, -0x44,0x01,0x00,0x00,0xf7,0x00,0x00,0x00,0x3e,0x00,0x03,0x00, -0x67,0x01,0x00,0x00,0x65,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x69,0x01,0x00,0x00,0xf7,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x6d,0x01,0x00,0x00,0x20,0x01,0x00,0x00,0x39,0x00,0x00,0x00, -0x41,0x00,0x08,0x00,0x49,0x01,0x00,0x00,0x6e,0x01,0x00,0x00, -0x33,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0xfb,0x00,0x00,0x00, -0x34,0x00,0x00,0x00,0x6d,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0x29,0x01,0x00,0x00,0x6f,0x01,0x00,0x00,0x6e,0x01,0x00,0x00, -0xc2,0x00,0x05,0x00,0x29,0x01,0x00,0x00,0x72,0x01,0x00,0x00, -0x6f,0x01,0x00,0x00,0x4e,0x01,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x73,0x01,0x00,0x00,0x72,0x01,0x00,0x00, -0x7c,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x74,0x01,0x00,0x00, -0x73,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x13,0x00,0x00,0x00, -0x75,0x01,0x00,0x00,0x74,0x01,0x00,0x00,0x52,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x78,0x01,0x00,0x00, -0x27,0x01,0x00,0x00,0x39,0x00,0x00,0x00,0x41,0x00,0x08,0x00, -0x49,0x01,0x00,0x00,0x79,0x01,0x00,0x00,0x33,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0xcf,0x00,0x00,0x00, -0x78,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x29,0x01,0x00,0x00, -0x7a,0x01,0x00,0x00,0x79,0x01,0x00,0x00,0xc2,0x00,0x05,0x00, -0x29,0x01,0x00,0x00,0x7c,0x01,0x00,0x00,0x7a,0x01,0x00,0x00, -0x12,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x7d,0x01,0x00,0x00,0x7c,0x01,0x00,0x00,0x7c,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x7e,0x01,0x00,0x00,0x7d,0x01,0x00,0x00, -0xc7,0x00,0x05,0x00,0x13,0x00,0x00,0x00,0x7f,0x01,0x00,0x00, -0x7e,0x01,0x00,0x00,0x96,0x00,0x00,0x00,0xc4,0x00,0x05,0x00, -0x13,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x7f,0x01,0x00,0x00, -0xa8,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,0x13,0x00,0x00,0x00, -0x81,0x01,0x00,0x00,0x75,0x01,0x00,0x00,0x80,0x01,0x00,0x00, -0x72,0x00,0x04,0x00,0x2c,0x01,0x00,0x00,0x82,0x01,0x00,0x00, -0x81,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x83,0x01,0x00,0x00,0x82,0x01,0x00,0x00,0x82,0x00,0x05,0x00, -0x13,0x00,0x00,0x00,0x84,0x01,0x00,0x00,0x83,0x01,0x00,0x00, -0x61,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,0xc3,0x00,0x00,0x00, -0x85,0x01,0x00,0x00,0x84,0x01,0x00,0x00,0x85,0x00,0x05,0x00, -0xc3,0x00,0x00,0x00,0x86,0x01,0x00,0x00,0x3f,0x01,0x00,0x00, -0x85,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x2e,0x01,0x00,0x00, -0x87,0x01,0x00,0x00,0x86,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x66,0x01,0x00,0x00,0x88,0x01,0x00,0x00,0x44,0x01,0x00,0x00, -0x69,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x88,0x01,0x00,0x00, -0x87,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x8f,0x01,0x00,0x00,0x23,0x03,0x00,0x00,0x8d,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xdc,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xde,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x91,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x91,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x24,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0xde,0x00,0x00,0x00,0xd8,0x01,0x00,0x00,0x94,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x97,0x01,0x00,0x00, -0x24,0x03,0x00,0x00,0xa6,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x93,0x01,0x00,0x00,0x94,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x97,0x01,0x00,0x00,0x92,0x01,0x00,0x00, -0x93,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x92,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9b,0x01,0x00,0x00, -0xa7,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9d,0x01,0x00,0x00,0x9b,0x01,0x00,0x00, -0x24,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x9e,0x01,0x00,0x00,0x12,0x00,0x00,0x00,0xcf,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x9f,0x01,0x00,0x00, -0x9e,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0xa0,0x01,0x00,0x00,0x9d,0x01,0x00,0x00,0x9f,0x01,0x00,0x00, -0xf7,0x00,0x03,0x00,0xa2,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xa0,0x01,0x00,0x00,0xa1,0x01,0x00,0x00, -0xa2,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xa1,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa5,0x01,0x00,0x00, -0x13,0x03,0x00,0x00,0x78,0x00,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0xa7,0x01,0x00,0x00,0xa5,0x01,0x00,0x00, -0x8d,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xa2,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xa2,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0xc1,0x00,0x00,0x00,0xa8,0x01,0x00,0x00,0xa0,0x01,0x00,0x00, -0x92,0x01,0x00,0x00,0xa7,0x01,0x00,0x00,0xa1,0x01,0x00,0x00, -0xf7,0x00,0x03,0x00,0xaa,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xa8,0x01,0x00,0x00,0xa9,0x01,0x00,0x00, -0xca,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xa9,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb2,0x01,0x00,0x00, -0x7d,0x00,0x00,0x00,0x24,0x03,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xb4,0x01,0x00,0x00,0xb2,0x01,0x00,0x00, -0xb3,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xb6,0x01,0x00,0x00,0xb4,0x01,0x00,0x00,0x78,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc1,0x01,0x00,0x00, -0xb2,0x01,0x00,0x00,0xaa,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xc2,0x01,0x00,0x00,0x2b,0x03,0x00,0x00, -0xc1,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xc4,0x01,0x00,0x00,0xc2,0x01,0x00,0x00,0x78,0x00,0x00,0x00, -0x41,0x00,0x06,0x00,0xc5,0x01,0x00,0x00,0xc6,0x01,0x00,0x00, -0xba,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0xc4,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0xc7,0x01,0x00,0x00, -0xc6,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x2e,0x01,0x00,0x00, -0xc8,0x01,0x00,0x00,0xc7,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x66,0x01,0x00,0x00,0xc9,0x01,0x00,0x00,0xaf,0x01,0x00,0x00, -0xb6,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xc9,0x01,0x00,0x00, -0xc8,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xaa,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xca,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xcd,0x01,0x00,0x00,0x7d,0x00,0x00,0x00, -0x24,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xcf,0x01,0x00,0x00,0xcd,0x01,0x00,0x00,0xce,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd1,0x01,0x00,0x00, -0xcf,0x01,0x00,0x00,0x78,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x66,0x01,0x00,0x00,0xd3,0x01,0x00,0x00,0xaf,0x01,0x00,0x00, -0xd1,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xd3,0x01,0x00,0x00, -0xd2,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xaa,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xaa,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0x94,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x94,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd8,0x01,0x00,0x00, -0x24,0x03,0x00,0x00,0xd6,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0x91,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x93,0x01,0x00,0x00, -0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0xd9,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xdc,0x01,0x00,0x00,0x27,0x03,0x00,0x00,0xda,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdf,0x01,0x00,0x00, -0x2b,0x03,0x00,0x00,0xdd,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xe1,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xe1,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x2d,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0x93,0x01,0x00,0x00,0x8b,0x02,0x00,0x00, -0xe4,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0xe7,0x01,0x00,0x00,0x2d,0x03,0x00,0x00,0x6c,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xe3,0x01,0x00,0x00,0xe4,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xe7,0x01,0x00,0x00, -0xe2,0x01,0x00,0x00,0xe3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xe2,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xe9,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xe9,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x31,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0xe2,0x01,0x00,0x00,0x15,0x02,0x00,0x00,0xec,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xef,0x01,0x00,0x00, -0x31,0x03,0x00,0x00,0x60,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xeb,0x01,0x00,0x00,0xec,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xef,0x01,0x00,0x00,0xea,0x01,0x00,0x00, -0xeb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xea,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xf1,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xf1,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x43,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0xea,0x01,0x00,0x00, -0x13,0x02,0x00,0x00,0xf2,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0xf7,0x01,0x00,0x00,0x43,0x03,0x00,0x00, -0x62,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xf3,0x01,0x00,0x00, -0xf2,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xf7,0x01,0x00,0x00,0xf2,0x01,0x00,0x00,0xf3,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xf2,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xfd,0x01,0x00,0x00,0x31,0x03,0x00,0x00, -0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xff,0x01,0x00,0x00,0xfd,0x01,0x00,0x00,0x43,0x03,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x01,0x02,0x00,0x00, -0x55,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x03,0x02,0x00,0x00,0x31,0x03,0x00,0x00, -0x61,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x04,0x02,0x00,0x00,0x01,0x02,0x00,0x00,0x03,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x06,0x02,0x00,0x00, -0x64,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x07,0x02,0x00,0x00,0x04,0x02,0x00,0x00, -0x06,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x09,0x02,0x00,0x00,0x07,0x02,0x00,0x00,0x43,0x03,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0b,0x02,0x00,0x00, -0x09,0x02,0x00,0x00,0x0a,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x0d,0x02,0x00,0x00,0x0b,0x02,0x00,0x00, -0x2d,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x66,0x01,0x00,0x00, -0x0e,0x02,0x00,0x00,0x44,0x01,0x00,0x00,0x0d,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0x2e,0x01,0x00,0x00,0x0f,0x02,0x00,0x00, -0x0e,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x10,0x02,0x00,0x00, -0x11,0x02,0x00,0x00,0xfb,0x01,0x00,0x00,0xff,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0x11,0x02,0x00,0x00,0x0f,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x13,0x02,0x00,0x00, -0x43,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xf1,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xf3,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xec,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xec,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x15,0x02,0x00,0x00,0x31,0x03,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xe9,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xeb,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x17,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x17,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x32,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0xeb,0x01,0x00,0x00,0x43,0x02,0x00,0x00,0x1a,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x1d,0x02,0x00,0x00, -0x32,0x03,0x00,0x00,0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x19,0x02,0x00,0x00,0x1a,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x1d,0x02,0x00,0x00,0x18,0x02,0x00,0x00, -0x19,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x18,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x1f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x1f,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x40,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0x18,0x02,0x00,0x00, -0x41,0x02,0x00,0x00,0x20,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0x25,0x02,0x00,0x00,0x40,0x03,0x00,0x00, -0xbb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x21,0x02,0x00,0x00, -0x20,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x25,0x02,0x00,0x00,0x20,0x02,0x00,0x00,0x21,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x20,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x2b,0x02,0x00,0x00,0x32,0x03,0x00,0x00, -0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x2d,0x02,0x00,0x00,0x2b,0x02,0x00,0x00,0x40,0x03,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2f,0x02,0x00,0x00, -0x59,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x32,0x02,0x00,0x00,0x32,0x03,0x00,0x00, -0x31,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x33,0x02,0x00,0x00,0x2f,0x02,0x00,0x00,0x32,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x35,0x02,0x00,0x00, -0x68,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x36,0x02,0x00,0x00,0x33,0x02,0x00,0x00, -0x35,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x38,0x02,0x00,0x00,0x36,0x02,0x00,0x00,0x40,0x03,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3a,0x02,0x00,0x00, -0x38,0x02,0x00,0x00,0x39,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3c,0x02,0x00,0x00,0x3a,0x02,0x00,0x00, -0x2d,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x66,0x01,0x00,0x00, -0x3d,0x02,0x00,0x00,0xaf,0x01,0x00,0x00,0x3c,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0x2e,0x01,0x00,0x00,0x3e,0x02,0x00,0x00, -0x3d,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x10,0x02,0x00,0x00, -0x3f,0x02,0x00,0x00,0x29,0x02,0x00,0x00,0x2d,0x02,0x00,0x00, -0x3e,0x00,0x03,0x00,0x3f,0x02,0x00,0x00,0x3e,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x41,0x02,0x00,0x00, -0x40,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x1f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x21,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x1a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x1a,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x43,0x02,0x00,0x00,0x32,0x03,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x17,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x19,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x45,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x45,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x33,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0x19,0x02,0x00,0x00,0x89,0x02,0x00,0x00,0x48,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x4b,0x02,0x00,0x00, -0x33,0x03,0x00,0x00,0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x47,0x02,0x00,0x00,0x48,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x4b,0x02,0x00,0x00,0x46,0x02,0x00,0x00, -0x47,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x46,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x4d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x4d,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x37,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0x46,0x02,0x00,0x00, -0x87,0x02,0x00,0x00,0x50,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0x53,0x02,0x00,0x00,0x37,0x03,0x00,0x00, -0x60,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x4f,0x02,0x00,0x00, -0x50,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x53,0x02,0x00,0x00,0x4e,0x02,0x00,0x00,0x4f,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x4e,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x55,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x55,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x39,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0x4e,0x02,0x00,0x00,0x85,0x02,0x00,0x00, -0x58,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0x5b,0x02,0x00,0x00,0x39,0x03,0x00,0x00,0xbb,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x57,0x02,0x00,0x00,0x58,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x5b,0x02,0x00,0x00, -0x56,0x02,0x00,0x00,0x57,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x56,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x5d,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x5d,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x3b,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0x56,0x02,0x00,0x00,0x83,0x02,0x00,0x00,0x5e,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x63,0x02,0x00,0x00, -0x3b,0x03,0x00,0x00,0x62,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x5f,0x02,0x00,0x00,0x5e,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x63,0x02,0x00,0x00,0x5e,0x02,0x00,0x00, -0x5f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x5e,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x65,0x02,0x00,0x00, -0x33,0x03,0x00,0x00,0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x67,0x02,0x00,0x00,0x65,0x02,0x00,0x00, -0x39,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x69,0x02,0x00,0x00,0x67,0x02,0x00,0x00,0x68,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6b,0x02,0x00,0x00, -0x37,0x03,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x6c,0x02,0x00,0x00,0x69,0x02,0x00,0x00, -0x6b,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x6e,0x02,0x00,0x00,0x6c,0x02,0x00,0x00,0x3b,0x03,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x72,0x02,0x00,0x00, -0x6b,0x02,0x00,0x00,0x3b,0x03,0x00,0x00,0x41,0x00,0x05,0x00, -0x10,0x02,0x00,0x00,0x73,0x02,0x00,0x00,0xfb,0x01,0x00,0x00, -0x72,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x2e,0x01,0x00,0x00, -0x74,0x02,0x00,0x00,0x73,0x02,0x00,0x00,0x73,0x00,0x04,0x00, -0xc3,0x00,0x00,0x00,0x75,0x02,0x00,0x00,0x74,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0x10,0x02,0x00,0x00,0x7a,0x02,0x00,0x00, -0x29,0x02,0x00,0x00,0x67,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0x2e,0x01,0x00,0x00,0x7b,0x02,0x00,0x00,0x7a,0x02,0x00,0x00, -0x73,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x7c,0x02,0x00,0x00, -0x7b,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00, -0x7e,0x02,0x00,0x00,0xc9,0x00,0x00,0x00,0x6e,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x7f,0x02,0x00,0x00, -0x7e,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,0xc3,0x00,0x00,0x00, -0x80,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x75,0x02,0x00,0x00,0x7c,0x02,0x00,0x00,0x7f,0x02,0x00,0x00, -0x3e,0x00,0x03,0x00,0x7e,0x02,0x00,0x00,0x80,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x83,0x02,0x00,0x00, -0x3b,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x5d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x5f,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x58,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x58,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x85,0x02,0x00,0x00,0x39,0x03,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x55,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x57,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x50,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x50,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x87,0x02,0x00,0x00,0x37,0x03,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x4d,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x4f,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x48,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x48,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x89,0x02,0x00,0x00, -0x33,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x45,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x47,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0xe4,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xe4,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x8b,0x02,0x00,0x00,0x2d,0x03,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xe1,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xe3,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0xd9,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xd6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd6,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8d,0x02,0x00,0x00, -0x13,0x03,0x00,0x00,0x6c,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xd3,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd5,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x92,0x02,0x00,0x00, -0x55,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x93,0x02,0x00,0x00,0x95,0x00,0x00,0x00, -0x92,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x98,0x02,0x00,0x00,0x59,0x00,0x00,0x00,0xb8,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x99,0x02,0x00,0x00, -0xa7,0x00,0x00,0x00,0x98,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x9e,0x02,0x00,0x00,0x12,0x00,0x00,0x00, -0x9d,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x9f,0x02,0x00,0x00,0x9e,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa0,0x02,0x00,0x00,0x0f,0x00,0x00,0x00, -0x9f,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa4,0x02,0x00,0x00,0x47,0x00,0x00,0x00,0x9f,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0xa6,0x02,0x00,0x00, -0xa5,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xa7,0x02,0x00,0x00,0xa6,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa8,0x02,0x00,0x00, -0xa4,0x02,0x00,0x00,0xa7,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa9,0x02,0x00,0x00,0xa0,0x02,0x00,0x00, -0xa8,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xab,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xab,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x14,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0xd5,0x00,0x00,0x00,0x11,0x03,0x00,0x00,0xae,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xb1,0x02,0x00,0x00, -0x14,0x03,0x00,0x00,0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xad,0x02,0x00,0x00,0xae,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xb1,0x02,0x00,0x00,0xac,0x02,0x00,0x00, -0xad,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xac,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0xb3,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xb3,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x15,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0xac,0x02,0x00,0x00, -0x0f,0x03,0x00,0x00,0xb6,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0xb9,0x02,0x00,0x00,0x15,0x03,0x00,0x00, -0x60,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xb5,0x02,0x00,0x00, -0xb6,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xb9,0x02,0x00,0x00,0xb4,0x02,0x00,0x00,0xb5,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xb4,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xbd,0x02,0x00,0x00,0x15,0x03,0x00,0x00, -0x61,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xbe,0x02,0x00,0x00,0x93,0x02,0x00,0x00,0xbd,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc0,0x02,0x00,0x00, -0x64,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xc1,0x02,0x00,0x00,0xbe,0x02,0x00,0x00, -0xc0,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xc5,0x02,0x00,0x00,0x14,0x03,0x00,0x00,0x31,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc6,0x02,0x00,0x00, -0x99,0x02,0x00,0x00,0xc5,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xc8,0x02,0x00,0x00,0x68,0x00,0x00,0x00, -0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xc9,0x02,0x00,0x00,0xc6,0x02,0x00,0x00,0xc8,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0xcb,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xcb,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x17,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0xb4,0x02,0x00,0x00, -0x0d,0x03,0x00,0x00,0xce,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0xd1,0x02,0x00,0x00,0x17,0x03,0x00,0x00, -0xbb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xcd,0x02,0x00,0x00, -0xce,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xd1,0x02,0x00,0x00,0xcc,0x02,0x00,0x00,0xcd,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xcc,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0xd3,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xd3,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x19,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0xcc,0x02,0x00,0x00,0x0b,0x03,0x00,0x00, -0xd6,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0xd9,0x02,0x00,0x00,0x19,0x03,0x00,0x00,0x62,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xd5,0x02,0x00,0x00,0xd6,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xd9,0x02,0x00,0x00, -0xd4,0x02,0x00,0x00,0xd5,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xd4,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xdc,0x02,0x00,0x00,0xc1,0x02,0x00,0x00,0x19,0x03,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xdf,0x02,0x00,0x00, -0xdc,0x02,0x00,0x00,0x36,0x00,0x00,0x00,0xf7,0x00,0x03,0x00, -0xe1,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xdf,0x02,0x00,0x00,0xe0,0x02,0x00,0x00,0xe1,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xe0,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xe4,0x02,0x00,0x00,0xc9,0x02,0x00,0x00, -0x17,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0xe5,0x02,0x00,0x00,0x12,0x00,0x00,0x00,0xcf,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xe6,0x02,0x00,0x00, -0xe5,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0xe7,0x02,0x00,0x00,0xe4,0x02,0x00,0x00,0xe6,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0xe1,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xe1,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0xc1,0x00,0x00,0x00, -0xe8,0x02,0x00,0x00,0xdf,0x02,0x00,0x00,0xd4,0x02,0x00,0x00, -0xe7,0x02,0x00,0x00,0xe0,0x02,0x00,0x00,0xf7,0x00,0x03,0x00, -0xea,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xe8,0x02,0x00,0x00,0xe9,0x02,0x00,0x00,0xea,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xe9,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xf2,0x02,0x00,0x00,0xc9,0x02,0x00,0x00, -0x17,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0xf4,0x02,0x00,0x00,0x12,0x00,0x00,0x00,0xf3,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xf5,0x02,0x00,0x00, -0xf4,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xf6,0x02,0x00,0x00,0xf2,0x02,0x00,0x00,0xf5,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf7,0x02,0x00,0x00, -0xa9,0x02,0x00,0x00,0xf6,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xf9,0x02,0x00,0x00,0xf7,0x02,0x00,0x00, -0xc1,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xfb,0x02,0x00,0x00,0xf9,0x02,0x00,0x00,0x19,0x03,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfd,0x02,0x00,0x00, -0x14,0x03,0x00,0x00,0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xff,0x02,0x00,0x00,0xfd,0x02,0x00,0x00, -0x17,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x01,0x03,0x00,0x00,0xff,0x02,0x00,0x00,0x00,0x03,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x03,0x03,0x00,0x00, -0x15,0x03,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x04,0x03,0x00,0x00,0x01,0x03,0x00,0x00, -0x03,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x06,0x03,0x00,0x00,0x04,0x03,0x00,0x00,0x19,0x03,0x00,0x00, -0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,0x07,0x03,0x00,0x00, -0xc9,0x00,0x00,0x00,0x06,0x03,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc3,0x00,0x00,0x00,0x08,0x03,0x00,0x00,0x07,0x03,0x00,0x00, -0x41,0x00,0x06,0x00,0xc5,0x01,0x00,0x00,0x09,0x03,0x00,0x00, -0xee,0x02,0x00,0x00,0x34,0x00,0x00,0x00,0xfb,0x02,0x00,0x00, -0x3e,0x00,0x03,0x00,0x09,0x03,0x00,0x00,0x08,0x03,0x00,0x00, -0xf9,0x00,0x02,0x00,0xea,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xea,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xd6,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xd6,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x0b,0x03,0x00,0x00,0x19,0x03,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd3,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xd5,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0xce,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xce,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0d,0x03,0x00,0x00, -0x17,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xcb,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xcd,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0xb6,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xb6,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x0f,0x03,0x00,0x00,0x15,0x03,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xb3,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xb5,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xae,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xae,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x11,0x03,0x00,0x00,0x14,0x03,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xab,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xad,0x02,0x00,0x00,0xfd,0x00,0x01,0x00, -0x38,0x00,0x01,0x00, -}; -const uint64_t matmul_q6_k_f32_len = 11764; - -unsigned char matmul_q6_k_f32_aligned_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0x65,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x09,0x00,0x00,0x00, -0x11,0x00,0x02,0x00,0x27,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00, -0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c, -0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00, -0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x0f,0x00,0x0f,0x00,0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x4c,0x00,0x00,0x00, -0x33,0x01,0x00,0x00,0x44,0x01,0x00,0x00,0xb1,0x01,0x00,0x00, -0xb9,0x01,0x00,0x00,0xc6,0x02,0x00,0x00,0x0f,0x03,0x00,0x00, -0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x0a,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x0d,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x10,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x37,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x3d,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x4c,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x4f,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x53,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x60,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x62,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x6c,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xa7,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xb9,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xbc,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x2a,0x01,0x00,0x00, -0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x2b,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x2d,0x01,0x00,0x00,0x06,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x2f,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x2f,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x2f,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0xc0,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x2f,0x01,0x00,0x00, -0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0xd0,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x30,0x01,0x00,0x00,0x06,0x00,0x00,0x00, -0xd2,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x31,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x31,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x31,0x01,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x33,0x01,0x00,0x00, -0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x33,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x89,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x8a,0x01,0x00,0x00, -0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xb6,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x48,0x00,0x04,0x00,0xb7,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x05,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0xb7,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0xb7,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0xb7,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0xb7,0x01,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xb9,0x01,0x00,0x00,0x22,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xb9,0x01,0x00,0x00, -0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xc6,0x02,0x00,0x00,0x0b,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x0c,0x03,0x00,0x00,0x06,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x0d,0x03,0x00,0x00, -0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x0d,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x0d,0x03,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0f,0x03,0x00,0x00, -0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x0f,0x03,0x00,0x00,0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00, -0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x1e,0x00,0x10,0x00, -0x10,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x11,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x11,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x15,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x0a,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x27,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x2d,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x3e,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x4c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x54,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x58,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x63,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x67,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x6d,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x72,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x77,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x91,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0xa2,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xa7,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xba,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0xb9,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xbb,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x4f,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xbc,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xbb,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xbd,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0xba,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xb8,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xc0,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x14,0x00,0x02,0x00, -0xc2,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0xc4,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xc5,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xc6,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc5,0x00,0x00,0x00, -0xbf,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xc7,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc6,0x00,0x00,0x00, -0xbc,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xc8,0x00,0x00,0x00, -0xc4,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0xc9,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xc8,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0xcc,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xcd,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xf4,0x00,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xfb,0x00,0x00,0x00, -0x80,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x02,0x01,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x07,0x01,0x00,0x00,0x20,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0b,0x01,0x00,0x00, -0x10,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x29,0x01,0x00,0x00, -0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1c,0x00,0x04,0x00, -0x2a,0x01,0x00,0x00,0x29,0x01,0x00,0x00,0xfb,0x00,0x00,0x00, -0x1c,0x00,0x04,0x00,0x2b,0x01,0x00,0x00,0x29,0x01,0x00,0x00, -0x02,0x01,0x00,0x00,0x15,0x00,0x04,0x00,0x2c,0x01,0x00,0x00, -0x08,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x1c,0x00,0x04,0x00, -0x2d,0x01,0x00,0x00,0x2c,0x01,0x00,0x00,0x0b,0x01,0x00,0x00, -0x16,0x00,0x03,0x00,0x2e,0x01,0x00,0x00,0x10,0x00,0x00,0x00, -0x1e,0x00,0x06,0x00,0x2f,0x01,0x00,0x00,0x2a,0x01,0x00,0x00, -0x2b,0x01,0x00,0x00,0x2d,0x01,0x00,0x00,0x2e,0x01,0x00,0x00, -0x1d,0x00,0x03,0x00,0x30,0x01,0x00,0x00,0x2f,0x01,0x00,0x00, -0x1e,0x00,0x03,0x00,0x31,0x01,0x00,0x00,0x30,0x01,0x00,0x00, -0x20,0x00,0x04,0x00,0x32,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x31,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x32,0x01,0x00,0x00, -0x33,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x35,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x2e,0x01,0x00,0x00, -0x20,0x00,0x04,0x00,0x3b,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x2c,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x40,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x41,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x40,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,0x42,0x01,0x00,0x00, -0x2e,0x01,0x00,0x00,0x41,0x01,0x00,0x00,0x20,0x00,0x04,0x00, -0x43,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x42,0x01,0x00,0x00, -0x3b,0x00,0x04,0x00,0x43,0x01,0x00,0x00,0x44,0x01,0x00,0x00, -0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x49,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x29,0x01,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x4d,0x01,0x00,0x00,0x04,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x52,0x01,0x00,0x00, -0x0f,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x61,0x01,0x00,0x00,0x20,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x66,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x2e,0x01,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x89,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00,0x09,0x00,0x00,0x00, -0x8a,0x01,0x00,0x00,0x89,0x01,0x00,0x00,0x39,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x8b,0x01,0x00,0x00,0x51,0x00,0x00,0x00,0x8a,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x8c,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x8b,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x8d,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x8c,0x01,0x00,0x00, -0x6c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xa8,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xad,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xae,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0xa7,0x00,0x00,0x00, -0xad,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,0xaf,0x01,0x00,0x00, -0x2e,0x01,0x00,0x00,0xae,0x01,0x00,0x00,0x20,0x00,0x04,0x00, -0xb0,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0xaf,0x01,0x00,0x00, -0x3b,0x00,0x04,0x00,0xb0,0x01,0x00,0x00,0xb1,0x01,0x00,0x00, -0x04,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0xb4,0x01,0x00,0x00, -0xc4,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x18,0x00,0x04,0x00, -0xb5,0x01,0x00,0x00,0xb4,0x01,0x00,0x00,0x02,0x00,0x00,0x00, -0x1d,0x00,0x03,0x00,0xb6,0x01,0x00,0x00,0xb5,0x01,0x00,0x00, -0x1e,0x00,0x03,0x00,0xb7,0x01,0x00,0x00,0xb6,0x01,0x00,0x00, -0x20,0x00,0x04,0x00,0xb8,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0xb7,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0xb8,0x01,0x00,0x00, -0xb9,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0xbb,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0xc4,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xcf,0x01,0x00,0x00, -0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xde,0x01,0x00,0x00,0x05,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xe6,0x01,0x00,0x00,0x06,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xee,0x01,0x00,0x00, -0x07,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xf5,0x01,0x00,0x00,0x51,0x00,0x00,0x00,0x8a,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xf6,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0xf5,0x01,0x00,0x00, -0x77,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xf7,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0xf6,0x01,0x00,0x00, -0x6c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xfa,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xfb,0x01,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xfe,0x01,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x19,0x02,0x00,0x00,0x84,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x1c,0x00,0x04,0x00, -0x1a,0x02,0x00,0x00,0x2e,0x01,0x00,0x00,0x19,0x02,0x00,0x00, -0x20,0x00,0x04,0x00,0x1b,0x02,0x00,0x00,0x07,0x00,0x00,0x00, -0x1a,0x02,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x2b,0x02,0x00,0x00,0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x31,0x02,0x00,0x00, -0x07,0x00,0x00,0x00,0x2e,0x01,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x47,0x02,0x00,0x00,0x84,0x00,0x00,0x00, -0xbf,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x1c,0x00,0x04,0x00, -0x48,0x02,0x00,0x00,0x2e,0x01,0x00,0x00,0x47,0x02,0x00,0x00, -0x20,0x00,0x04,0x00,0x49,0x02,0x00,0x00,0x07,0x00,0x00,0x00, -0x48,0x02,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x52,0x02,0x00,0x00,0x86,0x00,0x00,0x00,0xb9,0x00,0x00,0x00, -0xbf,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x5a,0x02,0x00,0x00,0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x89,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0xbe,0x02,0x00,0x00,0x0d,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0xc6,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0x1d,0x00,0x03,0x00,0x0c,0x03,0x00,0x00,0xc4,0x00,0x00,0x00, -0x1e,0x00,0x03,0x00,0x0d,0x03,0x00,0x00,0x0c,0x03,0x00,0x00, -0x20,0x00,0x04,0x00,0x0e,0x03,0x00,0x00,0x0c,0x00,0x00,0x00, -0x0d,0x03,0x00,0x00,0x3b,0x00,0x04,0x00,0x0e,0x03,0x00,0x00, -0x0f,0x03,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x14,0x03,0x00,0x00,0x05,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x21,0x03,0x00,0x00, -0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x05,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xc9,0x00,0x00,0x00, -0xca,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x1b,0x02,0x00,0x00,0x1c,0x02,0x00,0x00,0x07,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x49,0x02,0x00,0x00,0x4a,0x02,0x00,0x00, -0x07,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x16,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x17,0x00,0x00,0x00, -0x16,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x17,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1e,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x21,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x28,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x27,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x29,0x00,0x00,0x00, -0x28,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x2a,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x29,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x2e,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00, -0x24,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x30,0x00,0x00,0x00, -0x2a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x35,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x36,0x00,0x00,0x00, -0x35,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x38,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00, -0x38,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x3a,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x3f,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x3e,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x3f,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x42,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x3b,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x47,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x4a,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x4c,0x00,0x00,0x00, -0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x4f,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x55,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x54,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00, -0x50,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x4f,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x64,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,0x63,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x68,0x00,0x00,0x00, -0x5d,0x00,0x00,0x00,0x67,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x6d,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x73,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x72,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x79,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x7d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x82,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x81,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x83,0x00,0x00,0x00, -0x82,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0x83,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x87,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x87,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8a,0x00,0x00,0x00, -0x47,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x8a,0x00,0x00,0x00, -0x83,0x00,0x00,0x00,0x0c,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x8e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x26,0x00,0x00,0x00, -0x88,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x91,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x93,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x93,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x96,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x98,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x98,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9a,0x00,0x00,0x00, -0x96,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x94,0x00,0x00,0x00, -0x9a,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9d,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9e,0x00,0x00,0x00, -0x9d,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0xa2,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xa4,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0xa4,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa8,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0xa7,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0xaa,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0xaa,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00, -0xa8,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xad,0x00,0x00,0x00,0xa5,0x00,0x00,0x00, -0xac,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xaf,0x00,0x00,0x00,0xad,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb0,0x00,0x00,0x00, -0xaf,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xb2,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb2,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x33,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0xd1,0x00,0x00,0x00, -0xb3,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0xc3,0x00,0x00,0x00,0x33,0x03,0x00,0x00,0xc1,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xb4,0x00,0x00,0x00,0xb3,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xc3,0x00,0x00,0x00, -0xb3,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xb3,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00, -0xce,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0x33,0x03,0x00,0x00, -0x3e,0x00,0x03,0x00,0xce,0x00,0x00,0x00,0xcc,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd1,0x00,0x00,0x00, -0x33,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xb2,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb4,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xd4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xd4,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x4c,0x03,0x00,0x00,0xb0,0x00,0x00,0x00,0xb4,0x00,0x00,0x00, -0x00,0x02,0x00,0x00,0xd7,0x00,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x48,0x03,0x00,0x00,0x9e,0x00,0x00,0x00, -0xb4,0x00,0x00,0x00,0xfd,0x01,0x00,0x00,0xd7,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x34,0x03,0x00,0x00, -0x84,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0xae,0x02,0x00,0x00, -0xd7,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0xdb,0x00,0x00,0x00,0x34,0x03,0x00,0x00,0x8e,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xd6,0x00,0x00,0x00,0xd7,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xdb,0x00,0x00,0x00, -0xd5,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xd5,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xdd,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x44,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0xd5,0x00,0x00,0x00,0x8f,0x01,0x00,0x00,0xde,0x00,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xe3,0x00,0x00,0x00, -0x44,0x03,0x00,0x00,0x37,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xdf,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xe3,0x00,0x00,0x00,0xde,0x00,0x00,0x00, -0xdf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe8,0x00,0x00,0x00, -0x73,0x00,0x00,0x00,0x44,0x03,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,0xe8,0x00,0x00,0x00, -0x99,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xec,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xed,0x00,0x00,0x00, -0x48,0x03,0x00,0x00,0xec,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xef,0x00,0x00,0x00,0xed,0x00,0x00,0x00, -0x6e,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xf5,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0xf4,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf7,0x00,0x00,0x00, -0x6e,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,0xf5,0x00,0x00,0x00, -0xf7,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xfc,0x00,0x00,0x00,0xef,0x00,0x00,0x00,0xfb,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xff,0x00,0x00,0x00, -0xef,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x03,0x01,0x00,0x00,0xff,0x00,0x00,0x00, -0x02,0x01,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x06,0x01,0x00,0x00,0xff,0x00,0x00,0x00,0x02,0x01,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x08,0x01,0x00,0x00, -0x06,0x01,0x00,0x00,0x07,0x01,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x0c,0x01,0x00,0x00,0xff,0x00,0x00,0x00, -0x0b,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x0d,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,0x77,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x11,0x01,0x00,0x00, -0x06,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x12,0x01,0x00,0x00,0x11,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x15,0x01,0x00,0x00,0x77,0x00,0x00,0x00,0x03,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x17,0x01,0x00,0x00, -0x15,0x01,0x00,0x00,0x12,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x19,0x01,0x00,0x00,0x17,0x01,0x00,0x00, -0x0d,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x1c,0x01,0x00,0x00,0x03,0x01,0x00,0x00,0x02,0x01,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1e,0x01,0x00,0x00, -0xff,0x00,0x00,0x00,0x07,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x1f,0x01,0x00,0x00,0x1e,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x20,0x01,0x00,0x00,0x1c,0x01,0x00,0x00,0x1f,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x23,0x01,0x00,0x00, -0x03,0x01,0x00,0x00,0x07,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x26,0x01,0x00,0x00,0x0c,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x27,0x01,0x00,0x00,0x23,0x01,0x00,0x00,0x26,0x01,0x00,0x00, -0x41,0x00,0x07,0x00,0x35,0x01,0x00,0x00,0x36,0x01,0x00,0x00, -0x33,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0xfc,0x00,0x00,0x00, -0x97,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x2e,0x01,0x00,0x00, -0x37,0x01,0x00,0x00,0x36,0x01,0x00,0x00,0x73,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0x38,0x01,0x00,0x00,0x37,0x01,0x00,0x00, -0x41,0x00,0x08,0x00,0x3b,0x01,0x00,0x00,0x3c,0x01,0x00,0x00, -0x33,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0xfc,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x19,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0x2c,0x01,0x00,0x00,0x3d,0x01,0x00,0x00,0x3c,0x01,0x00,0x00, -0x6f,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x3e,0x01,0x00,0x00, -0x3d,0x01,0x00,0x00,0x85,0x00,0x05,0x00,0xc4,0x00,0x00,0x00, -0x3f,0x01,0x00,0x00,0x38,0x01,0x00,0x00,0x3e,0x01,0x00,0x00, -0x41,0x00,0x08,0x00,0x49,0x01,0x00,0x00,0x4a,0x01,0x00,0x00, -0x33,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0xfc,0x00,0x00,0x00, -0x34,0x00,0x00,0x00,0x20,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0x29,0x01,0x00,0x00,0x4b,0x01,0x00,0x00,0x4a,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4e,0x01,0x00,0x00, -0x08,0x01,0x00,0x00,0x4d,0x01,0x00,0x00,0xc2,0x00,0x05,0x00, -0x29,0x01,0x00,0x00,0x4f,0x01,0x00,0x00,0x4b,0x01,0x00,0x00, -0x4e,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x50,0x01,0x00,0x00,0x4f,0x01,0x00,0x00,0x7c,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x51,0x01,0x00,0x00,0x50,0x01,0x00,0x00, -0xc7,0x00,0x05,0x00,0x13,0x00,0x00,0x00,0x53,0x01,0x00,0x00, -0x51,0x01,0x00,0x00,0x52,0x01,0x00,0x00,0x41,0x00,0x08,0x00, -0x49,0x01,0x00,0x00,0x56,0x01,0x00,0x00,0x33,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0xd0,0x00,0x00,0x00, -0x27,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x29,0x01,0x00,0x00, -0x57,0x01,0x00,0x00,0x56,0x01,0x00,0x00,0xc2,0x00,0x05,0x00, -0x29,0x01,0x00,0x00,0x59,0x01,0x00,0x00,0x57,0x01,0x00,0x00, -0x12,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x5a,0x01,0x00,0x00,0x59,0x01,0x00,0x00,0x7c,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x5b,0x01,0x00,0x00,0x5a,0x01,0x00,0x00, -0xc7,0x00,0x05,0x00,0x13,0x00,0x00,0x00,0x5c,0x01,0x00,0x00, -0x5b,0x01,0x00,0x00,0x97,0x00,0x00,0x00,0xc4,0x00,0x05,0x00, -0x13,0x00,0x00,0x00,0x5d,0x01,0x00,0x00,0x5c,0x01,0x00,0x00, -0xa9,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,0x13,0x00,0x00,0x00, -0x5e,0x01,0x00,0x00,0x53,0x01,0x00,0x00,0x5d,0x01,0x00,0x00, -0x72,0x00,0x04,0x00,0x2c,0x01,0x00,0x00,0x5f,0x01,0x00,0x00, -0x5e,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x60,0x01,0x00,0x00,0x5f,0x01,0x00,0x00,0x82,0x00,0x05,0x00, -0x13,0x00,0x00,0x00,0x62,0x01,0x00,0x00,0x60,0x01,0x00,0x00, -0x61,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0x63,0x01,0x00,0x00,0x62,0x01,0x00,0x00,0x85,0x00,0x05,0x00, -0xc4,0x00,0x00,0x00,0x64,0x01,0x00,0x00,0x3f,0x01,0x00,0x00, -0x63,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x2e,0x01,0x00,0x00, -0x65,0x01,0x00,0x00,0x64,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x66,0x01,0x00,0x00,0x67,0x01,0x00,0x00,0x44,0x01,0x00,0x00, -0xf8,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0x67,0x01,0x00,0x00, -0x65,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x69,0x01,0x00,0x00,0xf8,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6d,0x01,0x00,0x00, -0x20,0x01,0x00,0x00,0x39,0x00,0x00,0x00,0x41,0x00,0x08,0x00, -0x49,0x01,0x00,0x00,0x6e,0x01,0x00,0x00,0x33,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x6d,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x29,0x01,0x00,0x00, -0x6f,0x01,0x00,0x00,0x6e,0x01,0x00,0x00,0xc2,0x00,0x05,0x00, -0x29,0x01,0x00,0x00,0x72,0x01,0x00,0x00,0x6f,0x01,0x00,0x00, -0x4e,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x73,0x01,0x00,0x00,0x72,0x01,0x00,0x00,0x7c,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x74,0x01,0x00,0x00,0x73,0x01,0x00,0x00, -0xc7,0x00,0x05,0x00,0x13,0x00,0x00,0x00,0x75,0x01,0x00,0x00, -0x74,0x01,0x00,0x00,0x52,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x78,0x01,0x00,0x00,0x27,0x01,0x00,0x00, -0x39,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x49,0x01,0x00,0x00, -0x79,0x01,0x00,0x00,0x33,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0xfc,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x78,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0x29,0x01,0x00,0x00,0x7a,0x01,0x00,0x00, -0x79,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x29,0x01,0x00,0x00, -0x7c,0x01,0x00,0x00,0x7a,0x01,0x00,0x00,0x12,0x01,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x7d,0x01,0x00,0x00, -0x7c,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x7e,0x01,0x00,0x00,0x7d,0x01,0x00,0x00,0xc7,0x00,0x05,0x00, -0x13,0x00,0x00,0x00,0x7f,0x01,0x00,0x00,0x7e,0x01,0x00,0x00, -0x97,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,0x13,0x00,0x00,0x00, -0x80,0x01,0x00,0x00,0x7f,0x01,0x00,0x00,0xa9,0x00,0x00,0x00, -0xc5,0x00,0x05,0x00,0x13,0x00,0x00,0x00,0x81,0x01,0x00,0x00, -0x75,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0x72,0x00,0x04,0x00, -0x2c,0x01,0x00,0x00,0x82,0x01,0x00,0x00,0x81,0x01,0x00,0x00, -0x72,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x83,0x01,0x00,0x00, -0x82,0x01,0x00,0x00,0x82,0x00,0x05,0x00,0x13,0x00,0x00,0x00, -0x84,0x01,0x00,0x00,0x83,0x01,0x00,0x00,0x61,0x01,0x00,0x00, -0x6f,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x85,0x01,0x00,0x00, -0x84,0x01,0x00,0x00,0x85,0x00,0x05,0x00,0xc4,0x00,0x00,0x00, -0x86,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,0x85,0x01,0x00,0x00, -0x73,0x00,0x04,0x00,0x2e,0x01,0x00,0x00,0x87,0x01,0x00,0x00, -0x86,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x66,0x01,0x00,0x00, -0x88,0x01,0x00,0x00,0x44,0x01,0x00,0x00,0x69,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0x88,0x01,0x00,0x00,0x87,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8f,0x01,0x00,0x00, -0x44,0x03,0x00,0x00,0x8d,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x91,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x91,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x45,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0xdf,0x00,0x00,0x00, -0xf9,0x01,0x00,0x00,0x92,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0x97,0x01,0x00,0x00,0x45,0x03,0x00,0x00, -0xa7,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x93,0x01,0x00,0x00, -0x92,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x97,0x01,0x00,0x00,0x92,0x01,0x00,0x00,0x93,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x92,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9c,0x01,0x00,0x00,0x7e,0x00,0x00,0x00, -0x45,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9f,0x01,0x00,0x00,0x9c,0x01,0x00,0x00,0xab,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa0,0x01,0x00,0x00, -0x9f,0x01,0x00,0x00,0x77,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa1,0x01,0x00,0x00,0x4c,0x03,0x00,0x00, -0xa0,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa3,0x01,0x00,0x00,0xa1,0x01,0x00,0x00,0x79,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa9,0x01,0x00,0x00, -0x9c,0x01,0x00,0x00,0xa8,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xab,0x01,0x00,0x00,0x79,0x00,0x00,0x00, -0x77,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xac,0x01,0x00,0x00,0xa9,0x01,0x00,0x00,0xab,0x01,0x00,0x00, -0x41,0x00,0x08,0x00,0xbb,0x01,0x00,0x00,0xbc,0x01,0x00,0x00, -0xb9,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0xa3,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0xbd,0x01,0x00,0x00,0xbc,0x01,0x00,0x00, -0x73,0x00,0x04,0x00,0x2e,0x01,0x00,0x00,0xbe,0x01,0x00,0x00, -0xbd,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x66,0x01,0x00,0x00, -0xbf,0x01,0x00,0x00,0xb1,0x01,0x00,0x00,0xac,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0xbf,0x01,0x00,0x00,0xbe,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc1,0x01,0x00,0x00, -0xac,0x01,0x00,0x00,0x39,0x00,0x00,0x00,0x41,0x00,0x08,0x00, -0xbb,0x01,0x00,0x00,0xc3,0x01,0x00,0x00,0xb9,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xa3,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0xc4,0x01,0x00,0x00,0xc3,0x01,0x00,0x00,0x73,0x00,0x04,0x00, -0x2e,0x01,0x00,0x00,0xc5,0x01,0x00,0x00,0xc4,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x66,0x01,0x00,0x00,0xc6,0x01,0x00,0x00, -0xb1,0x01,0x00,0x00,0xc1,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0xc6,0x01,0x00,0x00,0xc5,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xc8,0x01,0x00,0x00,0xac,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0xbb,0x01,0x00,0x00, -0xca,0x01,0x00,0x00,0xb9,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0xa3,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0xcb,0x01,0x00,0x00, -0xca,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x2e,0x01,0x00,0x00, -0xcc,0x01,0x00,0x00,0xcb,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x66,0x01,0x00,0x00,0xcd,0x01,0x00,0x00,0xb1,0x01,0x00,0x00, -0xc8,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xcd,0x01,0x00,0x00, -0xcc,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd0,0x01,0x00,0x00,0xac,0x01,0x00,0x00,0xcf,0x01,0x00,0x00, -0x41,0x00,0x08,0x00,0xbb,0x01,0x00,0x00,0xd2,0x01,0x00,0x00, -0xb9,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0xa3,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xcf,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0xd3,0x01,0x00,0x00,0xd2,0x01,0x00,0x00, -0x73,0x00,0x04,0x00,0x2e,0x01,0x00,0x00,0xd4,0x01,0x00,0x00, -0xd3,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x66,0x01,0x00,0x00, -0xd5,0x01,0x00,0x00,0xb1,0x01,0x00,0x00,0xd0,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0xd5,0x01,0x00,0x00,0xd4,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd7,0x01,0x00,0x00, -0xac,0x01,0x00,0x00,0x4d,0x01,0x00,0x00,0x41,0x00,0x08,0x00, -0xbb,0x01,0x00,0x00,0xd9,0x01,0x00,0x00,0xb9,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xa3,0x01,0x00,0x00,0xd0,0x00,0x00,0x00, -0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0xda,0x01,0x00,0x00,0xd9,0x01,0x00,0x00,0x73,0x00,0x04,0x00, -0x2e,0x01,0x00,0x00,0xdb,0x01,0x00,0x00,0xda,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x66,0x01,0x00,0x00,0xdc,0x01,0x00,0x00, -0xb1,0x01,0x00,0x00,0xd7,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0xdc,0x01,0x00,0x00,0xdb,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xdf,0x01,0x00,0x00,0xac,0x01,0x00,0x00, -0xde,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0xbb,0x01,0x00,0x00, -0xe1,0x01,0x00,0x00,0xb9,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0xa3,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0xe2,0x01,0x00,0x00, -0xe1,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x2e,0x01,0x00,0x00, -0xe3,0x01,0x00,0x00,0xe2,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x66,0x01,0x00,0x00,0xe4,0x01,0x00,0x00,0xb1,0x01,0x00,0x00, -0xdf,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xe4,0x01,0x00,0x00, -0xe3,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xe7,0x01,0x00,0x00,0xac,0x01,0x00,0x00,0xe6,0x01,0x00,0x00, -0x41,0x00,0x08,0x00,0xbb,0x01,0x00,0x00,0xe9,0x01,0x00,0x00, -0xb9,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0xa3,0x01,0x00,0x00, -0xd0,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0xea,0x01,0x00,0x00,0xe9,0x01,0x00,0x00, -0x73,0x00,0x04,0x00,0x2e,0x01,0x00,0x00,0xeb,0x01,0x00,0x00, -0xea,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x66,0x01,0x00,0x00, -0xec,0x01,0x00,0x00,0xb1,0x01,0x00,0x00,0xe7,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0xec,0x01,0x00,0x00,0xeb,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xef,0x01,0x00,0x00, -0xac,0x01,0x00,0x00,0xee,0x01,0x00,0x00,0x41,0x00,0x08,0x00, -0xbb,0x01,0x00,0x00,0xf1,0x01,0x00,0x00,0xb9,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xa3,0x01,0x00,0x00,0xd0,0x00,0x00,0x00, -0xcf,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0xf2,0x01,0x00,0x00,0xf1,0x01,0x00,0x00,0x73,0x00,0x04,0x00, -0x2e,0x01,0x00,0x00,0xf3,0x01,0x00,0x00,0xf2,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x66,0x01,0x00,0x00,0xf4,0x01,0x00,0x00, -0xb1,0x01,0x00,0x00,0xef,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0xf4,0x01,0x00,0x00,0xf3,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xf9,0x01,0x00,0x00,0x45,0x03,0x00,0x00, -0xf7,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x91,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x93,0x01,0x00,0x00,0xe0,0x00,0x04,0x00, -0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xfa,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfd,0x01,0x00,0x00, -0x48,0x03,0x00,0x00,0xfb,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x4c,0x03,0x00,0x00, -0xfe,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x02,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x02,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x4e,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0x93,0x01,0x00,0x00,0xac,0x02,0x00,0x00,0x05,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x08,0x02,0x00,0x00, -0x4e,0x03,0x00,0x00,0x6c,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x04,0x02,0x00,0x00,0x05,0x02,0x00,0x00,0x00,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x08,0x02,0x00,0x00,0x03,0x02,0x00,0x00, -0x04,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x03,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x0a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x0a,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x52,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0x03,0x02,0x00,0x00, -0x36,0x02,0x00,0x00,0x0d,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0x10,0x02,0x00,0x00,0x52,0x03,0x00,0x00, -0x60,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x0c,0x02,0x00,0x00, -0x0d,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x10,0x02,0x00,0x00,0x0b,0x02,0x00,0x00,0x0c,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x0b,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x12,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x12,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x64,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0x0b,0x02,0x00,0x00,0x34,0x02,0x00,0x00, -0x13,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0x18,0x02,0x00,0x00,0x64,0x03,0x00,0x00,0x62,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x14,0x02,0x00,0x00,0x13,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x18,0x02,0x00,0x00, -0x13,0x02,0x00,0x00,0x14,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x13,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x1e,0x02,0x00,0x00,0x52,0x03,0x00,0x00,0x62,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x20,0x02,0x00,0x00, -0x1e,0x02,0x00,0x00,0x64,0x03,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x22,0x02,0x00,0x00,0x55,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x24,0x02,0x00,0x00,0x52,0x03,0x00,0x00,0x61,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x25,0x02,0x00,0x00, -0x22,0x02,0x00,0x00,0x24,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x27,0x02,0x00,0x00,0x64,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x28,0x02,0x00,0x00,0x25,0x02,0x00,0x00,0x27,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2a,0x02,0x00,0x00, -0x28,0x02,0x00,0x00,0x64,0x03,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x2c,0x02,0x00,0x00,0x2a,0x02,0x00,0x00, -0x2b,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x2e,0x02,0x00,0x00,0x2c,0x02,0x00,0x00,0x4e,0x03,0x00,0x00, -0x41,0x00,0x05,0x00,0x66,0x01,0x00,0x00,0x2f,0x02,0x00,0x00, -0x44,0x01,0x00,0x00,0x2e,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0x2e,0x01,0x00,0x00,0x30,0x02,0x00,0x00,0x2f,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0x31,0x02,0x00,0x00,0x32,0x02,0x00,0x00, -0x1c,0x02,0x00,0x00,0x20,0x02,0x00,0x00,0x3e,0x00,0x03,0x00, -0x32,0x02,0x00,0x00,0x30,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x34,0x02,0x00,0x00,0x64,0x03,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x12,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x14,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x0d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x0d,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x36,0x02,0x00,0x00, -0x52,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x0a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x0c,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x38,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x38,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x53,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0x0c,0x02,0x00,0x00, -0x64,0x02,0x00,0x00,0x3b,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0x3e,0x02,0x00,0x00,0x53,0x03,0x00,0x00, -0xbf,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x3a,0x02,0x00,0x00, -0x3b,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x3e,0x02,0x00,0x00,0x39,0x02,0x00,0x00,0x3a,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x39,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x40,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x40,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x61,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0x39,0x02,0x00,0x00,0x62,0x02,0x00,0x00, -0x41,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0x46,0x02,0x00,0x00,0x61,0x03,0x00,0x00,0xbc,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x42,0x02,0x00,0x00,0x41,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x46,0x02,0x00,0x00, -0x41,0x02,0x00,0x00,0x42,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x41,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x4c,0x02,0x00,0x00,0x53,0x03,0x00,0x00,0xbc,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4e,0x02,0x00,0x00, -0x4c,0x02,0x00,0x00,0x61,0x03,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x50,0x02,0x00,0x00,0x59,0x00,0x00,0x00, -0xb9,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x53,0x02,0x00,0x00,0x53,0x03,0x00,0x00,0x52,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x54,0x02,0x00,0x00, -0x50,0x02,0x00,0x00,0x53,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x56,0x02,0x00,0x00,0x68,0x00,0x00,0x00, -0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x57,0x02,0x00,0x00,0x54,0x02,0x00,0x00,0x56,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x59,0x02,0x00,0x00, -0x57,0x02,0x00,0x00,0x61,0x03,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x5b,0x02,0x00,0x00,0x59,0x02,0x00,0x00, -0x5a,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x5d,0x02,0x00,0x00,0x5b,0x02,0x00,0x00,0x4e,0x03,0x00,0x00, -0x41,0x00,0x05,0x00,0x66,0x01,0x00,0x00,0x5e,0x02,0x00,0x00, -0xb1,0x01,0x00,0x00,0x5d,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0x2e,0x01,0x00,0x00,0x5f,0x02,0x00,0x00,0x5e,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0x31,0x02,0x00,0x00,0x60,0x02,0x00,0x00, -0x4a,0x02,0x00,0x00,0x4e,0x02,0x00,0x00,0x3e,0x00,0x03,0x00, -0x60,0x02,0x00,0x00,0x5f,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x62,0x02,0x00,0x00,0x61,0x03,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x40,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x42,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x3b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x3b,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x64,0x02,0x00,0x00, -0x53,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x38,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x3a,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x66,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x66,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x54,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0x3a,0x02,0x00,0x00, -0xaa,0x02,0x00,0x00,0x69,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0x6c,0x02,0x00,0x00,0x54,0x03,0x00,0x00, -0xbf,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x68,0x02,0x00,0x00, -0x69,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x6c,0x02,0x00,0x00,0x67,0x02,0x00,0x00,0x68,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x67,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x6e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x6e,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x58,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0x67,0x02,0x00,0x00,0xa8,0x02,0x00,0x00, -0x71,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0x74,0x02,0x00,0x00,0x58,0x03,0x00,0x00,0x60,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x70,0x02,0x00,0x00,0x71,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x74,0x02,0x00,0x00, -0x6f,0x02,0x00,0x00,0x70,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x6f,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x76,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x76,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x5a,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0x6f,0x02,0x00,0x00,0xa6,0x02,0x00,0x00,0x79,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x7c,0x02,0x00,0x00, -0x5a,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x78,0x02,0x00,0x00,0x79,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x7c,0x02,0x00,0x00,0x77,0x02,0x00,0x00, -0x78,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x77,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x7e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x7e,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x5c,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0x77,0x02,0x00,0x00, -0xa4,0x02,0x00,0x00,0x7f,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0x84,0x02,0x00,0x00,0x5c,0x03,0x00,0x00, -0x62,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x80,0x02,0x00,0x00, -0x7f,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x84,0x02,0x00,0x00,0x7f,0x02,0x00,0x00,0x80,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x7f,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x86,0x02,0x00,0x00,0x54,0x03,0x00,0x00, -0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x88,0x02,0x00,0x00,0x86,0x02,0x00,0x00,0x5a,0x03,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8a,0x02,0x00,0x00, -0x88,0x02,0x00,0x00,0x89,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x8c,0x02,0x00,0x00,0x58,0x03,0x00,0x00, -0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x8d,0x02,0x00,0x00,0x8a,0x02,0x00,0x00,0x8c,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8f,0x02,0x00,0x00, -0x8d,0x02,0x00,0x00,0x5c,0x03,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x93,0x02,0x00,0x00,0x8c,0x02,0x00,0x00, -0x5c,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x31,0x02,0x00,0x00, -0x94,0x02,0x00,0x00,0x1c,0x02,0x00,0x00,0x93,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0x2e,0x01,0x00,0x00,0x95,0x02,0x00,0x00, -0x94,0x02,0x00,0x00,0x73,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0x96,0x02,0x00,0x00,0x95,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0x31,0x02,0x00,0x00,0x9b,0x02,0x00,0x00,0x4a,0x02,0x00,0x00, -0x88,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x2e,0x01,0x00,0x00, -0x9c,0x02,0x00,0x00,0x9b,0x02,0x00,0x00,0x73,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0x9d,0x02,0x00,0x00,0x9c,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,0x9f,0x02,0x00,0x00, -0xca,0x00,0x00,0x00,0x8f,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0xa0,0x02,0x00,0x00,0x9f,0x02,0x00,0x00, -0x0c,0x00,0x08,0x00,0xc4,0x00,0x00,0x00,0xa1,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x96,0x02,0x00,0x00, -0x9d,0x02,0x00,0x00,0xa0,0x02,0x00,0x00,0x3e,0x00,0x03,0x00, -0x9f,0x02,0x00,0x00,0xa1,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa4,0x02,0x00,0x00,0x5c,0x03,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x7e,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x80,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x79,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x79,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa6,0x02,0x00,0x00, -0x5a,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x76,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x78,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x71,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x71,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa8,0x02,0x00,0x00,0x58,0x03,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x6e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x70,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x69,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x69,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xaa,0x02,0x00,0x00,0x54,0x03,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x66,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x68,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x05,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xac,0x02,0x00,0x00, -0x4e,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x02,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x04,0x02,0x00,0x00, -0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0xfa,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xd7,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xd7,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xae,0x02,0x00,0x00,0x34,0x03,0x00,0x00, -0x6c,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd4,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xd6,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xb3,0x02,0x00,0x00,0x55,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xb4,0x02,0x00,0x00,0x96,0x00,0x00,0x00,0xb3,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb9,0x02,0x00,0x00, -0x59,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xba,0x02,0x00,0x00,0xa8,0x00,0x00,0x00, -0xb9,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0xbf,0x02,0x00,0x00,0x12,0x00,0x00,0x00,0xbe,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xc0,0x02,0x00,0x00, -0xbf,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xc1,0x02,0x00,0x00,0x0f,0x00,0x00,0x00,0xc0,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc5,0x02,0x00,0x00, -0x47,0x00,0x00,0x00,0xc0,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0xc7,0x02,0x00,0x00,0xc6,0x02,0x00,0x00, -0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xc8,0x02,0x00,0x00,0xc7,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xc9,0x02,0x00,0x00,0xc5,0x02,0x00,0x00, -0xc8,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xca,0x02,0x00,0x00,0xc1,0x02,0x00,0x00,0xc9,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0xcc,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xcc,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x35,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0xd6,0x00,0x00,0x00, -0x32,0x03,0x00,0x00,0xcf,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0xd2,0x02,0x00,0x00,0x35,0x03,0x00,0x00, -0xbf,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xce,0x02,0x00,0x00, -0xcf,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xd2,0x02,0x00,0x00,0xcd,0x02,0x00,0x00,0xce,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xcd,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0xd4,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xd4,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x36,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0xcd,0x02,0x00,0x00,0x30,0x03,0x00,0x00, -0xd7,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0xda,0x02,0x00,0x00,0x36,0x03,0x00,0x00,0x60,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xd6,0x02,0x00,0x00,0xd7,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xda,0x02,0x00,0x00, -0xd5,0x02,0x00,0x00,0xd6,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xd5,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xde,0x02,0x00,0x00,0x36,0x03,0x00,0x00,0x61,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdf,0x02,0x00,0x00, -0xb4,0x02,0x00,0x00,0xde,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xe1,0x02,0x00,0x00,0x64,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xe2,0x02,0x00,0x00,0xdf,0x02,0x00,0x00,0xe1,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe6,0x02,0x00,0x00, -0x35,0x03,0x00,0x00,0x52,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xe7,0x02,0x00,0x00,0xba,0x02,0x00,0x00, -0xe6,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xe9,0x02,0x00,0x00,0x68,0x00,0x00,0x00,0xbc,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xea,0x02,0x00,0x00, -0xe7,0x02,0x00,0x00,0xe9,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0xec,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xec,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x38,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0xd5,0x02,0x00,0x00,0x2e,0x03,0x00,0x00, -0xef,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0xf2,0x02,0x00,0x00,0x38,0x03,0x00,0x00,0xbc,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xee,0x02,0x00,0x00,0xef,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xf2,0x02,0x00,0x00, -0xed,0x02,0x00,0x00,0xee,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xed,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xf4,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xf4,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x3a,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0xed,0x02,0x00,0x00,0x2c,0x03,0x00,0x00,0xf7,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xfa,0x02,0x00,0x00, -0x3a,0x03,0x00,0x00,0x62,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xf6,0x02,0x00,0x00,0xf7,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xfa,0x02,0x00,0x00,0xf5,0x02,0x00,0x00, -0xf6,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xf5,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfd,0x02,0x00,0x00, -0xe2,0x02,0x00,0x00,0x3a,0x03,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0xfd,0x02,0x00,0x00, -0x36,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x02,0x03,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x00,0x03,0x00,0x00, -0x01,0x03,0x00,0x00,0x02,0x03,0x00,0x00,0xf8,0x00,0x02,0x00, -0x01,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x05,0x03,0x00,0x00,0xea,0x02,0x00,0x00,0x38,0x03,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x06,0x03,0x00,0x00, -0x12,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x07,0x03,0x00,0x00,0x06,0x03,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x08,0x03,0x00,0x00, -0x05,0x03,0x00,0x00,0x07,0x03,0x00,0x00,0xf9,0x00,0x02,0x00, -0x02,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x02,0x03,0x00,0x00, -0xf5,0x00,0x07,0x00,0xc2,0x00,0x00,0x00,0x09,0x03,0x00,0x00, -0x00,0x03,0x00,0x00,0xf5,0x02,0x00,0x00,0x08,0x03,0x00,0x00, -0x01,0x03,0x00,0x00,0xf7,0x00,0x03,0x00,0x0b,0x03,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x09,0x03,0x00,0x00, -0x0a,0x03,0x00,0x00,0x0b,0x03,0x00,0x00,0xf8,0x00,0x02,0x00, -0x0a,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x13,0x03,0x00,0x00,0xea,0x02,0x00,0x00,0x38,0x03,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x15,0x03,0x00,0x00, -0x12,0x00,0x00,0x00,0x14,0x03,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x16,0x03,0x00,0x00,0x15,0x03,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x17,0x03,0x00,0x00, -0x13,0x03,0x00,0x00,0x16,0x03,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x18,0x03,0x00,0x00,0xca,0x02,0x00,0x00, -0x17,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x1a,0x03,0x00,0x00,0x18,0x03,0x00,0x00,0xe2,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1c,0x03,0x00,0x00, -0x1a,0x03,0x00,0x00,0x3a,0x03,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x1e,0x03,0x00,0x00,0x35,0x03,0x00,0x00, -0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x20,0x03,0x00,0x00,0x1e,0x03,0x00,0x00,0x38,0x03,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x22,0x03,0x00,0x00, -0x20,0x03,0x00,0x00,0x21,0x03,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x24,0x03,0x00,0x00,0x36,0x03,0x00,0x00, -0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x25,0x03,0x00,0x00,0x22,0x03,0x00,0x00,0x24,0x03,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x27,0x03,0x00,0x00, -0x25,0x03,0x00,0x00,0x3a,0x03,0x00,0x00,0x41,0x00,0x05,0x00, -0xcd,0x00,0x00,0x00,0x28,0x03,0x00,0x00,0xca,0x00,0x00,0x00, -0x27,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0x29,0x03,0x00,0x00,0x28,0x03,0x00,0x00,0x41,0x00,0x06,0x00, -0xbb,0x01,0x00,0x00,0x2a,0x03,0x00,0x00,0x0f,0x03,0x00,0x00, -0x34,0x00,0x00,0x00,0x1c,0x03,0x00,0x00,0x3e,0x00,0x03,0x00, -0x2a,0x03,0x00,0x00,0x29,0x03,0x00,0x00,0xf9,0x00,0x02,0x00, -0x0b,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x0b,0x03,0x00,0x00, -0xf9,0x00,0x02,0x00,0xf7,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xf7,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x2c,0x03,0x00,0x00,0x3a,0x03,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xf4,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xf6,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xef,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xef,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x2e,0x03,0x00,0x00,0x38,0x03,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xec,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xee,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0xd7,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xd7,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x30,0x03,0x00,0x00, -0x36,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xd4,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xd6,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0xcf,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xcf,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x32,0x03,0x00,0x00,0x35,0x03,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xcc,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xce,0x02,0x00,0x00,0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00, - -}; -const uint64_t matmul_q6_k_f32_aligned_len = 12324; - -unsigned char matmul_q6_k_f32_aligned_fp32_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0x3c,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x27,0x00,0x00,0x00, -0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00, -0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00, -0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30, -0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x0f,0x00,0x0f,0x00,0x05,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x4c,0x00,0x00,0x00,0x34,0x01,0x00,0x00,0x45,0x01,0x00,0x00, -0xaf,0x01,0x00,0x00,0xb6,0x01,0x00,0x00,0x9d,0x02,0x00,0x00, -0xe6,0x02,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x05,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x30,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x0d,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0x10,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x37,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x3d,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x4c,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x4f,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x53,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x60,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x62,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x6c,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xa7,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xb9,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xbc,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x2b,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x2c,0x01,0x00,0x00,0x06,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x2e,0x01,0x00,0x00, -0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x30,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x30,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x80,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x30,0x01,0x00,0x00,0x02,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x30,0x01,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0xd0,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x31,0x01,0x00,0x00, -0x06,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0x32,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x32,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x32,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x34,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x34,0x01,0x00,0x00,0x21,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x87,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x88,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xb3,0x01,0x00,0x00,0x06,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0xb4,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0xb4,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0xb4,0x01,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xb6,0x01,0x00,0x00, -0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xb6,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x9d,0x02,0x00,0x00,0x0b,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xe3,0x02,0x00,0x00, -0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0xe4,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0xe4,0x02,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0xe4,0x02,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xe6,0x02,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xe6,0x02,0x00,0x00,0x21,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00, -0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x1e,0x00,0x10,0x00,0x10,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x11,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x11,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x15,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0x0a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x27,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x3e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x61,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x63,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x61,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x67,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x61,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x72,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x78,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x77,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x7d,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x77,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x81,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x97,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0xa2,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0xa9,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xb8,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xb9,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x4f,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbd,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0xbc,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbe,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbf,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0xbe,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc0,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0xbf,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc1,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0xbc,0x00,0x00,0x00, -0x14,0x00,0x02,0x00,0xc2,0x00,0x00,0x00,0x16,0x00,0x03,0x00, -0xc4,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xc5,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xc6,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x1c,0x00,0x04,0x00, -0xc8,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0xc7,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0xc9,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0xc8,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0xcc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0xcd,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xc4,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0xd0,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xf4,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xfb,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x02,0x01,0x00,0x00,0x40,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x07,0x01,0x00,0x00, -0x20,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x0b,0x01,0x00,0x00,0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x0d,0x01,0x00,0x00,0x08,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x2a,0x01,0x00,0x00,0x08,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x2b,0x01,0x00,0x00, -0x2a,0x01,0x00,0x00,0xfb,0x00,0x00,0x00,0x1c,0x00,0x04,0x00, -0x2c,0x01,0x00,0x00,0x2a,0x01,0x00,0x00,0x02,0x01,0x00,0x00, -0x15,0x00,0x04,0x00,0x2d,0x01,0x00,0x00,0x08,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x2e,0x01,0x00,0x00, -0x2d,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,0x16,0x00,0x03,0x00, -0x2f,0x01,0x00,0x00,0x10,0x00,0x00,0x00,0x1e,0x00,0x06,0x00, -0x30,0x01,0x00,0x00,0x2b,0x01,0x00,0x00,0x2c,0x01,0x00,0x00, -0x2e,0x01,0x00,0x00,0x2f,0x01,0x00,0x00,0x1d,0x00,0x03,0x00, -0x31,0x01,0x00,0x00,0x30,0x01,0x00,0x00,0x1e,0x00,0x03,0x00, -0x32,0x01,0x00,0x00,0x31,0x01,0x00,0x00,0x20,0x00,0x04,0x00, -0x33,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x32,0x01,0x00,0x00, -0x3b,0x00,0x04,0x00,0x33,0x01,0x00,0x00,0x34,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x36,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x2f,0x01,0x00,0x00,0x20,0x00,0x04,0x00, -0x3c,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x2d,0x01,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x41,0x01,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x42,0x01,0x00,0x00, -0x84,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x41,0x01,0x00,0x00, -0x1c,0x00,0x04,0x00,0x43,0x01,0x00,0x00,0xc4,0x00,0x00,0x00, -0x42,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x44,0x01,0x00,0x00, -0x04,0x00,0x00,0x00,0x43,0x01,0x00,0x00,0x3b,0x00,0x04,0x00, -0x44,0x01,0x00,0x00,0x45,0x01,0x00,0x00,0x04,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x4a,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x2a,0x01,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x52,0x01,0x00,0x00,0x0f,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x61,0x01,0x00,0x00,0x20,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x65,0x01,0x00,0x00,0x04,0x00,0x00,0x00, -0xc4,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x87,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00, -0x09,0x00,0x00,0x00,0x88,0x01,0x00,0x00,0x87,0x01,0x00,0x00, -0x39,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x89,0x01,0x00,0x00,0x51,0x00,0x00,0x00, -0x88,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x8a,0x01,0x00,0x00,0x84,0x00,0x00,0x00, -0x89,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x8b,0x01,0x00,0x00,0x86,0x00,0x00,0x00, -0x8a,0x01,0x00,0x00,0x6c,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xa6,0x01,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xab,0x01,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xac,0x01,0x00,0x00,0x84,0x00,0x00,0x00, -0xa7,0x00,0x00,0x00,0xab,0x01,0x00,0x00,0x1c,0x00,0x04,0x00, -0xad,0x01,0x00,0x00,0xc4,0x00,0x00,0x00,0xac,0x01,0x00,0x00, -0x20,0x00,0x04,0x00,0xae,0x01,0x00,0x00,0x04,0x00,0x00,0x00, -0xad,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0xae,0x01,0x00,0x00, -0xaf,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x17,0x00,0x04,0x00, -0xb2,0x01,0x00,0x00,0xc4,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x1d,0x00,0x03,0x00,0xb3,0x01,0x00,0x00,0xb2,0x01,0x00,0x00, -0x1e,0x00,0x03,0x00,0xb4,0x01,0x00,0x00,0xb3,0x01,0x00,0x00, -0x20,0x00,0x04,0x00,0xb5,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0xb4,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0xb5,0x01,0x00,0x00, -0xb6,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0xb8,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0xc4,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xc9,0x01,0x00,0x00, -0x03,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xcf,0x01,0x00,0x00,0x51,0x00,0x00,0x00,0x88,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xd0,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0xcf,0x01,0x00,0x00, -0x77,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xd1,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0xd0,0x01,0x00,0x00, -0x6c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xd4,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xd5,0x01,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xd8,0x01,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xf3,0x01,0x00,0x00,0x84,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x1c,0x00,0x04,0x00, -0xf4,0x01,0x00,0x00,0xc4,0x00,0x00,0x00,0xf3,0x01,0x00,0x00, -0x20,0x00,0x04,0x00,0xf5,0x01,0x00,0x00,0x07,0x00,0x00,0x00, -0xf4,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x05,0x02,0x00,0x00,0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x20,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0xbf,0x00,0x00,0x00, -0xbc,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x21,0x02,0x00,0x00, -0xc4,0x00,0x00,0x00,0x20,0x02,0x00,0x00,0x20,0x00,0x04,0x00, -0x22,0x02,0x00,0x00,0x07,0x00,0x00,0x00,0x21,0x02,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x2b,0x02,0x00,0x00, -0x86,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0xbf,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x33,0x02,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x62,0x02,0x00,0x00, -0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x95,0x02,0x00,0x00, -0x0d,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x9d,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x1d,0x00,0x03,0x00, -0xe3,0x02,0x00,0x00,0xc4,0x00,0x00,0x00,0x1e,0x00,0x03,0x00, -0xe4,0x02,0x00,0x00,0xe3,0x02,0x00,0x00,0x20,0x00,0x04,0x00, -0xe5,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0xe4,0x02,0x00,0x00, -0x3b,0x00,0x04,0x00,0xe5,0x02,0x00,0x00,0xe6,0x02,0x00,0x00, -0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0xeb,0x02,0x00,0x00,0x05,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xf8,0x02,0x00,0x00,0x84,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x36,0x00,0x05,0x00, -0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0xc9,0x00,0x00,0x00,0xca,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xf5,0x01,0x00,0x00, -0xf6,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x22,0x02,0x00,0x00,0x23,0x02,0x00,0x00,0x07,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x16,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x16,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x17,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x24,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2a,0x00,0x00,0x00, -0x1e,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x2d,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x2f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x24,0x00,0x00,0x00, -0x2f,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x2a,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x35,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x35,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x38,0x00,0x00,0x00, -0x36,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x82,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x38,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x3b,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x3f,0x00,0x00,0x00, -0x3d,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x3f,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x42,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x3b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x49,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4a,0x00,0x00,0x00, -0x49,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x4d,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x3e,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x4d,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x50,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00, -0x50,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x50,0x00,0x00,0x00, -0x58,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x5d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x64,0x00,0x00,0x00, -0x5d,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x5d,0x00,0x00,0x00, -0x67,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x6e,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x6d,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x73,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x72,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x78,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x7e,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x7d,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x82,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x82,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x47,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x88,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0x47,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x8d,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0x83,0x00,0x00,0x00, -0x0c,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x8e,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x26,0x00,0x00,0x00,0x88,0x00,0x00,0x00, -0x8d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x92,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x91,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x93,0x00,0x00,0x00, -0x92,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x94,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x93,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x96,0x00,0x00,0x00, -0x42,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x97,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x99,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x96,0x00,0x00,0x00, -0x99,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9b,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x9a,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9d,0x00,0x00,0x00, -0x9b,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,0x9d,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0xa3,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0xa2,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00, -0xa3,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa5,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0xa4,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa8,0x00,0x00,0x00, -0x4a,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0xa9,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xab,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0xa8,0x00,0x00,0x00, -0xab,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xad,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,0xac,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xaf,0x00,0x00,0x00, -0xad,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0xaf,0x00,0x00,0x00, -0x77,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb2,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x0a,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0x05,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0xb3,0x00,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xc3,0x00,0x00,0x00, -0x0a,0x03,0x00,0x00,0xc1,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xb4,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0xb3,0x00,0x00,0x00, -0xb4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb3,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,0xce,0x00,0x00,0x00, -0xca,0x00,0x00,0x00,0x0a,0x03,0x00,0x00,0x3e,0x00,0x03,0x00, -0xce,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0x0a,0x03,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb2,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xb4,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xd4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd4,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x23,0x03,0x00,0x00, -0xb0,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0xda,0x01,0x00,0x00, -0xd7,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x1f,0x03,0x00,0x00,0x9e,0x00,0x00,0x00,0xb4,0x00,0x00,0x00, -0xd7,0x01,0x00,0x00,0xd7,0x00,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x0b,0x03,0x00,0x00,0x84,0x00,0x00,0x00, -0xb4,0x00,0x00,0x00,0x85,0x02,0x00,0x00,0xd7,0x00,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xdb,0x00,0x00,0x00, -0x0b,0x03,0x00,0x00,0x8e,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xd6,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xdb,0x00,0x00,0x00,0xd5,0x00,0x00,0x00, -0xd6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd5,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xdd,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x1b,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0xd5,0x00,0x00,0x00, -0x8d,0x01,0x00,0x00,0xde,0x00,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0xe3,0x00,0x00,0x00,0x1b,0x03,0x00,0x00, -0x37,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xdf,0x00,0x00,0x00, -0xde,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xe3,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0xdf,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0x73,0x00,0x00,0x00, -0x1b,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xeb,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0x99,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xec,0x00,0x00,0x00, -0xeb,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xed,0x00,0x00,0x00,0x1f,0x03,0x00,0x00, -0xec,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xef,0x00,0x00,0x00,0xed,0x00,0x00,0x00,0x6e,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf5,0x00,0x00,0x00, -0xe8,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,0x6e,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xf8,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,0xf7,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfc,0x00,0x00,0x00, -0xef,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xef,0x00,0x00,0x00, -0xfb,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x03,0x01,0x00,0x00,0xff,0x00,0x00,0x00,0x02,0x01,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x06,0x01,0x00,0x00, -0xff,0x00,0x00,0x00,0x02,0x01,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x08,0x01,0x00,0x00,0x06,0x01,0x00,0x00, -0x07,0x01,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x0c,0x01,0x00,0x00,0xff,0x00,0x00,0x00,0x0b,0x01,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0e,0x01,0x00,0x00, -0x0c,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x12,0x01,0x00,0x00,0x06,0x01,0x00,0x00, -0x0b,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x13,0x01,0x00,0x00,0x12,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x16,0x01,0x00,0x00, -0x0d,0x01,0x00,0x00,0x03,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x18,0x01,0x00,0x00,0x16,0x01,0x00,0x00, -0x13,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x1a,0x01,0x00,0x00,0x18,0x01,0x00,0x00,0x0e,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1d,0x01,0x00,0x00, -0x03,0x01,0x00,0x00,0x02,0x01,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x1f,0x01,0x00,0x00,0xff,0x00,0x00,0x00, -0x07,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x20,0x01,0x00,0x00,0x1f,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x21,0x01,0x00,0x00, -0x1d,0x01,0x00,0x00,0x20,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x24,0x01,0x00,0x00,0x03,0x01,0x00,0x00, -0x07,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x27,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x28,0x01,0x00,0x00, -0x24,0x01,0x00,0x00,0x27,0x01,0x00,0x00,0x41,0x00,0x07,0x00, -0x36,0x01,0x00,0x00,0x37,0x01,0x00,0x00,0x34,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x97,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x2f,0x01,0x00,0x00,0x38,0x01,0x00,0x00, -0x37,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0x39,0x01,0x00,0x00,0x38,0x01,0x00,0x00,0x41,0x00,0x08,0x00, -0x3c,0x01,0x00,0x00,0x3d,0x01,0x00,0x00,0x34,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x1a,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x2d,0x01,0x00,0x00, -0x3e,0x01,0x00,0x00,0x3d,0x01,0x00,0x00,0x6f,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0x3f,0x01,0x00,0x00,0x3e,0x01,0x00,0x00, -0x85,0x00,0x05,0x00,0xc4,0x00,0x00,0x00,0x40,0x01,0x00,0x00, -0x39,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,0x41,0x00,0x08,0x00, -0x4a,0x01,0x00,0x00,0x4b,0x01,0x00,0x00,0x34,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x21,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x2a,0x01,0x00,0x00, -0x4c,0x01,0x00,0x00,0x4b,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x4e,0x01,0x00,0x00,0x08,0x01,0x00,0x00, -0x77,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,0x2a,0x01,0x00,0x00, -0x4f,0x01,0x00,0x00,0x4c,0x01,0x00,0x00,0x4e,0x01,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x50,0x01,0x00,0x00, -0x4f,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x51,0x01,0x00,0x00,0x50,0x01,0x00,0x00,0xc7,0x00,0x05,0x00, -0x13,0x00,0x00,0x00,0x53,0x01,0x00,0x00,0x51,0x01,0x00,0x00, -0x52,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x4a,0x01,0x00,0x00, -0x56,0x01,0x00,0x00,0x34,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0xfc,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x28,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0x2a,0x01,0x00,0x00,0x57,0x01,0x00,0x00, -0x56,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x2a,0x01,0x00,0x00, -0x59,0x01,0x00,0x00,0x57,0x01,0x00,0x00,0x13,0x01,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x5a,0x01,0x00,0x00, -0x59,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x5b,0x01,0x00,0x00,0x5a,0x01,0x00,0x00,0xc7,0x00,0x05,0x00, -0x13,0x00,0x00,0x00,0x5c,0x01,0x00,0x00,0x5b,0x01,0x00,0x00, -0x97,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,0x13,0x00,0x00,0x00, -0x5d,0x01,0x00,0x00,0x5c,0x01,0x00,0x00,0xa9,0x00,0x00,0x00, -0xc5,0x00,0x05,0x00,0x13,0x00,0x00,0x00,0x5e,0x01,0x00,0x00, -0x53,0x01,0x00,0x00,0x5d,0x01,0x00,0x00,0x72,0x00,0x04,0x00, -0x2d,0x01,0x00,0x00,0x5f,0x01,0x00,0x00,0x5e,0x01,0x00,0x00, -0x72,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x60,0x01,0x00,0x00, -0x5f,0x01,0x00,0x00,0x82,0x00,0x05,0x00,0x13,0x00,0x00,0x00, -0x62,0x01,0x00,0x00,0x60,0x01,0x00,0x00,0x61,0x01,0x00,0x00, -0x6f,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x63,0x01,0x00,0x00, -0x62,0x01,0x00,0x00,0x85,0x00,0x05,0x00,0xc4,0x00,0x00,0x00, -0x64,0x01,0x00,0x00,0x40,0x01,0x00,0x00,0x63,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x65,0x01,0x00,0x00,0x66,0x01,0x00,0x00, -0x45,0x01,0x00,0x00,0xf8,0x00,0x00,0x00,0x3e,0x00,0x03,0x00, -0x66,0x01,0x00,0x00,0x64,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x68,0x01,0x00,0x00,0xf8,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x6c,0x01,0x00,0x00,0x21,0x01,0x00,0x00,0x39,0x00,0x00,0x00, -0x41,0x00,0x08,0x00,0x4a,0x01,0x00,0x00,0x6d,0x01,0x00,0x00, -0x34,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0xfc,0x00,0x00,0x00, -0x34,0x00,0x00,0x00,0x6c,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0x2a,0x01,0x00,0x00,0x6e,0x01,0x00,0x00,0x6d,0x01,0x00,0x00, -0xc2,0x00,0x05,0x00,0x2a,0x01,0x00,0x00,0x71,0x01,0x00,0x00, -0x6e,0x01,0x00,0x00,0x4e,0x01,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x72,0x01,0x00,0x00,0x71,0x01,0x00,0x00, -0x7c,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x73,0x01,0x00,0x00, -0x72,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x13,0x00,0x00,0x00, -0x74,0x01,0x00,0x00,0x73,0x01,0x00,0x00,0x52,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x77,0x01,0x00,0x00, -0x28,0x01,0x00,0x00,0x39,0x00,0x00,0x00,0x41,0x00,0x08,0x00, -0x4a,0x01,0x00,0x00,0x78,0x01,0x00,0x00,0x34,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0xd0,0x00,0x00,0x00, -0x77,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x2a,0x01,0x00,0x00, -0x79,0x01,0x00,0x00,0x78,0x01,0x00,0x00,0xc2,0x00,0x05,0x00, -0x2a,0x01,0x00,0x00,0x7b,0x01,0x00,0x00,0x79,0x01,0x00,0x00, -0x13,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x7c,0x01,0x00,0x00,0x7b,0x01,0x00,0x00,0x7c,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x7d,0x01,0x00,0x00,0x7c,0x01,0x00,0x00, -0xc7,0x00,0x05,0x00,0x13,0x00,0x00,0x00,0x7e,0x01,0x00,0x00, -0x7d,0x01,0x00,0x00,0x97,0x00,0x00,0x00,0xc4,0x00,0x05,0x00, -0x13,0x00,0x00,0x00,0x7f,0x01,0x00,0x00,0x7e,0x01,0x00,0x00, -0xa9,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,0x13,0x00,0x00,0x00, -0x80,0x01,0x00,0x00,0x74,0x01,0x00,0x00,0x7f,0x01,0x00,0x00, -0x72,0x00,0x04,0x00,0x2d,0x01,0x00,0x00,0x81,0x01,0x00,0x00, -0x80,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x82,0x01,0x00,0x00,0x81,0x01,0x00,0x00,0x82,0x00,0x05,0x00, -0x13,0x00,0x00,0x00,0x83,0x01,0x00,0x00,0x82,0x01,0x00,0x00, -0x61,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0x84,0x01,0x00,0x00,0x83,0x01,0x00,0x00,0x85,0x00,0x05,0x00, -0xc4,0x00,0x00,0x00,0x85,0x01,0x00,0x00,0x40,0x01,0x00,0x00, -0x84,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x65,0x01,0x00,0x00, -0x86,0x01,0x00,0x00,0x45,0x01,0x00,0x00,0x68,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0x86,0x01,0x00,0x00,0x85,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8d,0x01,0x00,0x00, -0x1b,0x03,0x00,0x00,0x8b,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x8f,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x8f,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x1c,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0xdf,0x00,0x00,0x00, -0xd3,0x01,0x00,0x00,0x90,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0x95,0x01,0x00,0x00,0x1c,0x03,0x00,0x00, -0xa7,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x91,0x01,0x00,0x00, -0x90,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x95,0x01,0x00,0x00,0x90,0x01,0x00,0x00,0x91,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x90,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9a,0x01,0x00,0x00,0x7e,0x00,0x00,0x00, -0x1c,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9d,0x01,0x00,0x00,0x9a,0x01,0x00,0x00,0xab,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9e,0x01,0x00,0x00, -0x9d,0x01,0x00,0x00,0x77,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9f,0x01,0x00,0x00,0x23,0x03,0x00,0x00, -0x9e,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa1,0x01,0x00,0x00,0x9f,0x01,0x00,0x00,0x79,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa7,0x01,0x00,0x00, -0x9a,0x01,0x00,0x00,0xa6,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa9,0x01,0x00,0x00,0x79,0x00,0x00,0x00, -0x77,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xaa,0x01,0x00,0x00,0xa7,0x01,0x00,0x00,0xa9,0x01,0x00,0x00, -0x41,0x00,0x07,0x00,0xb8,0x01,0x00,0x00,0xb9,0x01,0x00,0x00, -0xb6,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0xa1,0x01,0x00,0x00, -0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0xba,0x01,0x00,0x00,0xb9,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x65,0x01,0x00,0x00,0xbb,0x01,0x00,0x00,0xaf,0x01,0x00,0x00, -0xaa,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xbb,0x01,0x00,0x00, -0xba,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xbd,0x01,0x00,0x00,0xaa,0x01,0x00,0x00,0x39,0x00,0x00,0x00, -0x41,0x00,0x07,0x00,0xb8,0x01,0x00,0x00,0xbf,0x01,0x00,0x00, -0xb6,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0xa1,0x01,0x00,0x00, -0x39,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0xc0,0x01,0x00,0x00,0xbf,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x65,0x01,0x00,0x00,0xc1,0x01,0x00,0x00,0xaf,0x01,0x00,0x00, -0xbd,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xc1,0x01,0x00,0x00, -0xc0,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xc3,0x01,0x00,0x00,0xaa,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x41,0x00,0x07,0x00,0xb8,0x01,0x00,0x00,0xc5,0x01,0x00,0x00, -0xb6,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0xa1,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0xc6,0x01,0x00,0x00,0xc5,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x65,0x01,0x00,0x00,0xc7,0x01,0x00,0x00,0xaf,0x01,0x00,0x00, -0xc3,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xc7,0x01,0x00,0x00, -0xc6,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xca,0x01,0x00,0x00,0xaa,0x01,0x00,0x00,0xc9,0x01,0x00,0x00, -0x41,0x00,0x07,0x00,0xb8,0x01,0x00,0x00,0xcc,0x01,0x00,0x00, -0xb6,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0xa1,0x01,0x00,0x00, -0xc9,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0xcd,0x01,0x00,0x00,0xcc,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x65,0x01,0x00,0x00,0xce,0x01,0x00,0x00,0xaf,0x01,0x00,0x00, -0xca,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xce,0x01,0x00,0x00, -0xcd,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd3,0x01,0x00,0x00,0x1c,0x03,0x00,0x00,0xd1,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0x8f,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x91,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0xd4,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xd7,0x01,0x00,0x00,0x1f,0x03,0x00,0x00, -0xd5,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xda,0x01,0x00,0x00,0x23,0x03,0x00,0x00,0xd8,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xdc,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xdc,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x25,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0x91,0x01,0x00,0x00, -0x83,0x02,0x00,0x00,0xdf,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0xe2,0x01,0x00,0x00,0x25,0x03,0x00,0x00, -0x6c,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xde,0x01,0x00,0x00, -0xdf,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xe2,0x01,0x00,0x00,0xdd,0x01,0x00,0x00,0xde,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xdd,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xe4,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xe4,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x29,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0xdd,0x01,0x00,0x00,0x0f,0x02,0x00,0x00, -0xe7,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0xea,0x01,0x00,0x00,0x29,0x03,0x00,0x00,0x60,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xe6,0x01,0x00,0x00,0xe7,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xea,0x01,0x00,0x00, -0xe5,0x01,0x00,0x00,0xe6,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xe5,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xec,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xec,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x3b,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0xe5,0x01,0x00,0x00,0x0d,0x02,0x00,0x00,0xed,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xf2,0x01,0x00,0x00, -0x3b,0x03,0x00,0x00,0x62,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xee,0x01,0x00,0x00,0xed,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xf2,0x01,0x00,0x00,0xed,0x01,0x00,0x00, -0xee,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xed,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf8,0x01,0x00,0x00, -0x29,0x03,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xfa,0x01,0x00,0x00,0xf8,0x01,0x00,0x00, -0x3b,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xfc,0x01,0x00,0x00,0x55,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfe,0x01,0x00,0x00, -0x29,0x03,0x00,0x00,0x61,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xff,0x01,0x00,0x00,0xfc,0x01,0x00,0x00, -0xfe,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x01,0x02,0x00,0x00,0x64,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x02,0x02,0x00,0x00, -0xff,0x01,0x00,0x00,0x01,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x04,0x02,0x00,0x00,0x02,0x02,0x00,0x00, -0x3b,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x06,0x02,0x00,0x00,0x04,0x02,0x00,0x00,0x05,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x08,0x02,0x00,0x00, -0x06,0x02,0x00,0x00,0x25,0x03,0x00,0x00,0x41,0x00,0x05,0x00, -0x65,0x01,0x00,0x00,0x09,0x02,0x00,0x00,0x45,0x01,0x00,0x00, -0x08,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0x0a,0x02,0x00,0x00,0x09,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0xcd,0x00,0x00,0x00,0x0b,0x02,0x00,0x00,0xf6,0x01,0x00,0x00, -0xfa,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x0b,0x02,0x00,0x00, -0x0a,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x0d,0x02,0x00,0x00,0x3b,0x03,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xec,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xee,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xe7,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xe7,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x0f,0x02,0x00,0x00,0x29,0x03,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xe4,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xe6,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0x11,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x11,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x2a,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0xe6,0x01,0x00,0x00,0x3d,0x02,0x00,0x00, -0x14,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0x17,0x02,0x00,0x00,0x2a,0x03,0x00,0x00,0xbf,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x13,0x02,0x00,0x00,0x14,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x17,0x02,0x00,0x00, -0x12,0x02,0x00,0x00,0x13,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x12,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x19,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x19,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x38,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0x12,0x02,0x00,0x00,0x3b,0x02,0x00,0x00,0x1a,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x1f,0x02,0x00,0x00, -0x38,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x1b,0x02,0x00,0x00,0x1a,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x1f,0x02,0x00,0x00,0x1a,0x02,0x00,0x00, -0x1b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x1a,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x25,0x02,0x00,0x00, -0x2a,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x27,0x02,0x00,0x00,0x25,0x02,0x00,0x00, -0x38,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x29,0x02,0x00,0x00,0x59,0x00,0x00,0x00,0xb9,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2c,0x02,0x00,0x00, -0x2a,0x03,0x00,0x00,0x2b,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x2d,0x02,0x00,0x00,0x29,0x02,0x00,0x00, -0x2c,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x2f,0x02,0x00,0x00,0x68,0x00,0x00,0x00,0xbc,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x30,0x02,0x00,0x00, -0x2d,0x02,0x00,0x00,0x2f,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x32,0x02,0x00,0x00,0x30,0x02,0x00,0x00, -0x38,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x34,0x02,0x00,0x00,0x32,0x02,0x00,0x00,0x33,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x36,0x02,0x00,0x00, -0x34,0x02,0x00,0x00,0x25,0x03,0x00,0x00,0x41,0x00,0x05,0x00, -0x65,0x01,0x00,0x00,0x37,0x02,0x00,0x00,0xaf,0x01,0x00,0x00, -0x36,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0x38,0x02,0x00,0x00,0x37,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0xcd,0x00,0x00,0x00,0x39,0x02,0x00,0x00,0x23,0x02,0x00,0x00, -0x27,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x39,0x02,0x00,0x00, -0x38,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x3b,0x02,0x00,0x00,0x38,0x03,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x19,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x1b,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x14,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x14,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3d,0x02,0x00,0x00,0x2a,0x03,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x11,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x13,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x3f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x3f,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x2b,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0x13,0x02,0x00,0x00,0x81,0x02,0x00,0x00, -0x42,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0x45,0x02,0x00,0x00,0x2b,0x03,0x00,0x00,0xbf,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x41,0x02,0x00,0x00,0x42,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x45,0x02,0x00,0x00, -0x40,0x02,0x00,0x00,0x41,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x40,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x47,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x47,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x2f,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0x40,0x02,0x00,0x00,0x7f,0x02,0x00,0x00,0x4a,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x4d,0x02,0x00,0x00, -0x2f,0x03,0x00,0x00,0x60,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x49,0x02,0x00,0x00,0x4a,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x4d,0x02,0x00,0x00,0x48,0x02,0x00,0x00, -0x49,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x48,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x4f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x4f,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x31,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0x48,0x02,0x00,0x00, -0x7d,0x02,0x00,0x00,0x52,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0x55,0x02,0x00,0x00,0x31,0x03,0x00,0x00, -0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x51,0x02,0x00,0x00, -0x52,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x55,0x02,0x00,0x00,0x50,0x02,0x00,0x00,0x51,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x50,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x57,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x57,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x33,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0x50,0x02,0x00,0x00,0x7b,0x02,0x00,0x00, -0x58,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0x5d,0x02,0x00,0x00,0x33,0x03,0x00,0x00,0x62,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x59,0x02,0x00,0x00,0x58,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x5d,0x02,0x00,0x00, -0x58,0x02,0x00,0x00,0x59,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x58,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x5f,0x02,0x00,0x00,0x2b,0x03,0x00,0x00,0xbc,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x61,0x02,0x00,0x00, -0x5f,0x02,0x00,0x00,0x31,0x03,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x63,0x02,0x00,0x00,0x61,0x02,0x00,0x00, -0x62,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x65,0x02,0x00,0x00,0x2f,0x03,0x00,0x00,0x62,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x66,0x02,0x00,0x00, -0x63,0x02,0x00,0x00,0x65,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x68,0x02,0x00,0x00,0x66,0x02,0x00,0x00, -0x33,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x6c,0x02,0x00,0x00,0x65,0x02,0x00,0x00,0x33,0x03,0x00,0x00, -0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,0x6d,0x02,0x00,0x00, -0xf6,0x01,0x00,0x00,0x6c,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0x6e,0x02,0x00,0x00,0x6d,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,0x73,0x02,0x00,0x00, -0x23,0x02,0x00,0x00,0x61,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0x74,0x02,0x00,0x00,0x73,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,0x76,0x02,0x00,0x00, -0xca,0x00,0x00,0x00,0x68,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0x77,0x02,0x00,0x00,0x76,0x02,0x00,0x00, -0x0c,0x00,0x08,0x00,0xc4,0x00,0x00,0x00,0x78,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x6e,0x02,0x00,0x00, -0x74,0x02,0x00,0x00,0x77,0x02,0x00,0x00,0x3e,0x00,0x03,0x00, -0x76,0x02,0x00,0x00,0x78,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x7b,0x02,0x00,0x00,0x33,0x03,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x57,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x59,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x52,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x52,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7d,0x02,0x00,0x00, -0x31,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x4f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x51,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x4a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x4a,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x7f,0x02,0x00,0x00,0x2f,0x03,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x47,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x49,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x42,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x42,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x81,0x02,0x00,0x00,0x2b,0x03,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x3f,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x41,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0xdf,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xdf,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x83,0x02,0x00,0x00, -0x25,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xdc,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xde,0x01,0x00,0x00, -0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0xd4,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xd7,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xd7,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x85,0x02,0x00,0x00,0x0b,0x03,0x00,0x00, -0x6c,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd4,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xd6,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x8a,0x02,0x00,0x00,0x55,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x8b,0x02,0x00,0x00,0x96,0x00,0x00,0x00,0x8a,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x90,0x02,0x00,0x00, -0x59,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x91,0x02,0x00,0x00,0xa8,0x00,0x00,0x00, -0x90,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x96,0x02,0x00,0x00,0x12,0x00,0x00,0x00,0x95,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x97,0x02,0x00,0x00, -0x96,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x98,0x02,0x00,0x00,0x0f,0x00,0x00,0x00,0x97,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9c,0x02,0x00,0x00, -0x47,0x00,0x00,0x00,0x97,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0x9e,0x02,0x00,0x00,0x9d,0x02,0x00,0x00, -0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x9f,0x02,0x00,0x00,0x9e,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa0,0x02,0x00,0x00,0x9c,0x02,0x00,0x00, -0x9f,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa1,0x02,0x00,0x00,0x98,0x02,0x00,0x00,0xa0,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0xa3,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xa3,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x0c,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0xd6,0x00,0x00,0x00, -0x09,0x03,0x00,0x00,0xa6,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0xa9,0x02,0x00,0x00,0x0c,0x03,0x00,0x00, -0xbf,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xa5,0x02,0x00,0x00, -0xa6,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xa9,0x02,0x00,0x00,0xa4,0x02,0x00,0x00,0xa5,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xa4,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0xab,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xab,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x0d,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0xa4,0x02,0x00,0x00,0x07,0x03,0x00,0x00, -0xae,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0xb1,0x02,0x00,0x00,0x0d,0x03,0x00,0x00,0x60,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xad,0x02,0x00,0x00,0xae,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xb1,0x02,0x00,0x00, -0xac,0x02,0x00,0x00,0xad,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xac,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xb5,0x02,0x00,0x00,0x0d,0x03,0x00,0x00,0x61,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb6,0x02,0x00,0x00, -0x8b,0x02,0x00,0x00,0xb5,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xb8,0x02,0x00,0x00,0x64,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xb9,0x02,0x00,0x00,0xb6,0x02,0x00,0x00,0xb8,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbd,0x02,0x00,0x00, -0x0c,0x03,0x00,0x00,0x2b,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xbe,0x02,0x00,0x00,0x91,0x02,0x00,0x00, -0xbd,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xc0,0x02,0x00,0x00,0x68,0x00,0x00,0x00,0xbc,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc1,0x02,0x00,0x00, -0xbe,0x02,0x00,0x00,0xc0,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0xc3,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xc3,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x0f,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0xac,0x02,0x00,0x00,0x05,0x03,0x00,0x00, -0xc6,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0xc9,0x02,0x00,0x00,0x0f,0x03,0x00,0x00,0xbc,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xc5,0x02,0x00,0x00,0xc6,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xc9,0x02,0x00,0x00, -0xc4,0x02,0x00,0x00,0xc5,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xc4,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xcb,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xcb,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x11,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0xc4,0x02,0x00,0x00,0x03,0x03,0x00,0x00,0xce,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xd1,0x02,0x00,0x00, -0x11,0x03,0x00,0x00,0x62,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xcd,0x02,0x00,0x00,0xce,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xd1,0x02,0x00,0x00,0xcc,0x02,0x00,0x00, -0xcd,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xcc,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd4,0x02,0x00,0x00, -0xb9,0x02,0x00,0x00,0x11,0x03,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0xd7,0x02,0x00,0x00,0xd4,0x02,0x00,0x00, -0x36,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0xd9,0x02,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xd7,0x02,0x00,0x00, -0xd8,0x02,0x00,0x00,0xd9,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xd8,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xdc,0x02,0x00,0x00,0xc1,0x02,0x00,0x00,0x0f,0x03,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0xdd,0x02,0x00,0x00, -0x12,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xde,0x02,0x00,0x00,0xdd,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xdf,0x02,0x00,0x00, -0xdc,0x02,0x00,0x00,0xde,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0xd9,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xd9,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0xc2,0x00,0x00,0x00,0xe0,0x02,0x00,0x00, -0xd7,0x02,0x00,0x00,0xcc,0x02,0x00,0x00,0xdf,0x02,0x00,0x00, -0xd8,0x02,0x00,0x00,0xf7,0x00,0x03,0x00,0xe2,0x02,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xe0,0x02,0x00,0x00, -0xe1,0x02,0x00,0x00,0xe2,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xe1,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xea,0x02,0x00,0x00,0xc1,0x02,0x00,0x00,0x0f,0x03,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0xec,0x02,0x00,0x00, -0x12,0x00,0x00,0x00,0xeb,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xed,0x02,0x00,0x00,0xec,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xee,0x02,0x00,0x00, -0xea,0x02,0x00,0x00,0xed,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xef,0x02,0x00,0x00,0xa1,0x02,0x00,0x00, -0xee,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xf1,0x02,0x00,0x00,0xef,0x02,0x00,0x00,0xb9,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf3,0x02,0x00,0x00, -0xf1,0x02,0x00,0x00,0x11,0x03,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xf5,0x02,0x00,0x00,0x0c,0x03,0x00,0x00, -0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xf7,0x02,0x00,0x00,0xf5,0x02,0x00,0x00,0x0f,0x03,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf9,0x02,0x00,0x00, -0xf7,0x02,0x00,0x00,0xf8,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xfb,0x02,0x00,0x00,0x0d,0x03,0x00,0x00, -0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xfc,0x02,0x00,0x00,0xf9,0x02,0x00,0x00,0xfb,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfe,0x02,0x00,0x00, -0xfc,0x02,0x00,0x00,0x11,0x03,0x00,0x00,0x41,0x00,0x05,0x00, -0xcd,0x00,0x00,0x00,0xff,0x02,0x00,0x00,0xca,0x00,0x00,0x00, -0xfe,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0x00,0x03,0x00,0x00,0xff,0x02,0x00,0x00,0x41,0x00,0x06,0x00, -0xb8,0x01,0x00,0x00,0x01,0x03,0x00,0x00,0xe6,0x02,0x00,0x00, -0x34,0x00,0x00,0x00,0xf3,0x02,0x00,0x00,0x3e,0x00,0x03,0x00, -0x01,0x03,0x00,0x00,0x00,0x03,0x00,0x00,0xf9,0x00,0x02,0x00, -0xe2,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xe2,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0xce,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xce,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x03,0x03,0x00,0x00,0x11,0x03,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xcb,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xcd,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xc6,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xc6,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x05,0x03,0x00,0x00,0x0f,0x03,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xc3,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xc5,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0xae,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xae,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x07,0x03,0x00,0x00, -0x0d,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xab,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xad,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0xa6,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xa6,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x09,0x03,0x00,0x00,0x0c,0x03,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xa3,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xa5,0x02,0x00,0x00,0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00, - -}; -const uint64_t matmul_q6_k_f32_aligned_fp32_len = 11592; - -unsigned char matmul_q6_k_f32_fp32_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0x3d,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x27,0x00,0x00,0x00, -0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00, -0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00, -0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30, -0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x0f,0x00,0x0f,0x00,0x05,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x4c,0x00,0x00,0x00,0x33,0x01,0x00,0x00,0x44,0x01,0x00,0x00, -0xad,0x01,0x00,0x00,0xb8,0x01,0x00,0x00,0x9e,0x02,0x00,0x00, -0xe7,0x02,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x05,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x30,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x0d,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0x10,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x37,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x3d,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x4c,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x4f,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x53,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x60,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x62,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x6c,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xa6,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xb8,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xbb,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x2a,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x2b,0x01,0x00,0x00,0x06,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x2d,0x01,0x00,0x00, -0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x2f,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x2f,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x80,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x2f,0x01,0x00,0x00,0x02,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x2f,0x01,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0xd0,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x30,0x01,0x00,0x00, -0x06,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0x31,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x31,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x31,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x33,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x33,0x01,0x00,0x00,0x21,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x87,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x88,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xb5,0x01,0x00,0x00,0x06,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0xb6,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0xb6,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0xb6,0x01,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xb8,0x01,0x00,0x00, -0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xb8,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x9e,0x02,0x00,0x00,0x0b,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xe4,0x02,0x00,0x00, -0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0xe5,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0xe5,0x02,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0xe5,0x02,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xe7,0x02,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xe7,0x02,0x00,0x00,0x21,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00, -0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x1e,0x00,0x10,0x00,0x10,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x11,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x11,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x15,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0x0a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x27,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x3e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x61,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x63,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x61,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x67,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x61,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x72,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x85,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x90,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0xa1,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xa6,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xb7,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xb9,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0xb8,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xba,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x4f,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xbb,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xba,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xbc,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0xb9,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xb7,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xbf,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x14,0x00,0x02,0x00, -0xc1,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0xc3,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xc4,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xc5,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc4,0x00,0x00,0x00, -0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xc6,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc5,0x00,0x00,0x00, -0xbb,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xc7,0x00,0x00,0x00, -0xc3,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0xc8,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xc7,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0xcb,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xcc,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xf3,0x00,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xfa,0x00,0x00,0x00, -0x80,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x01,0x01,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x06,0x01,0x00,0x00,0x20,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0a,0x01,0x00,0x00, -0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x0c,0x01,0x00,0x00,0x08,0x00,0x00,0x00,0x15,0x00,0x04,0x00, -0x29,0x01,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x1c,0x00,0x04,0x00,0x2a,0x01,0x00,0x00,0x29,0x01,0x00,0x00, -0xfa,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x2b,0x01,0x00,0x00, -0x29,0x01,0x00,0x00,0x01,0x01,0x00,0x00,0x15,0x00,0x04,0x00, -0x2c,0x01,0x00,0x00,0x08,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x1c,0x00,0x04,0x00,0x2d,0x01,0x00,0x00,0x2c,0x01,0x00,0x00, -0x0a,0x01,0x00,0x00,0x16,0x00,0x03,0x00,0x2e,0x01,0x00,0x00, -0x10,0x00,0x00,0x00,0x1e,0x00,0x06,0x00,0x2f,0x01,0x00,0x00, -0x2a,0x01,0x00,0x00,0x2b,0x01,0x00,0x00,0x2d,0x01,0x00,0x00, -0x2e,0x01,0x00,0x00,0x1d,0x00,0x03,0x00,0x30,0x01,0x00,0x00, -0x2f,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,0x31,0x01,0x00,0x00, -0x30,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x32,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x31,0x01,0x00,0x00,0x3b,0x00,0x04,0x00, -0x32,0x01,0x00,0x00,0x33,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x35,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x2e,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x3b,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x2c,0x01,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x40,0x01,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x41,0x01,0x00,0x00,0x84,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x40,0x01,0x00,0x00,0x1c,0x00,0x04,0x00, -0x42,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,0x41,0x01,0x00,0x00, -0x20,0x00,0x04,0x00,0x43,0x01,0x00,0x00,0x04,0x00,0x00,0x00, -0x42,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x43,0x01,0x00,0x00, -0x44,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x49,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x29,0x01,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4d,0x01,0x00,0x00, -0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x52,0x01,0x00,0x00,0x0f,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x61,0x01,0x00,0x00,0x20,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x65,0x01,0x00,0x00,0x04,0x00,0x00,0x00, -0xc3,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x87,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00, -0x09,0x00,0x00,0x00,0x88,0x01,0x00,0x00,0x87,0x01,0x00,0x00, -0x39,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x89,0x01,0x00,0x00,0x51,0x00,0x00,0x00, -0x88,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x8a,0x01,0x00,0x00,0x84,0x00,0x00,0x00, -0x89,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x8b,0x01,0x00,0x00,0x86,0x00,0x00,0x00, -0x8a,0x01,0x00,0x00,0x6c,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xa9,0x01,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xaa,0x01,0x00,0x00,0x84,0x00,0x00,0x00, -0xa6,0x00,0x00,0x00,0xa9,0x01,0x00,0x00,0x1c,0x00,0x04,0x00, -0xab,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,0xaa,0x01,0x00,0x00, -0x20,0x00,0x04,0x00,0xac,0x01,0x00,0x00,0x04,0x00,0x00,0x00, -0xab,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0xac,0x01,0x00,0x00, -0xad,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xb1,0x01,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x1d,0x00,0x03,0x00, -0xb5,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,0x1e,0x00,0x03,0x00, -0xb6,0x01,0x00,0x00,0xb5,0x01,0x00,0x00,0x20,0x00,0x04,0x00, -0xb7,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0xb6,0x01,0x00,0x00, -0x3b,0x00,0x04,0x00,0xb7,0x01,0x00,0x00,0xb8,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xc3,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xcb,0x01,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xd0,0x01,0x00,0x00,0x51,0x00,0x00,0x00, -0x88,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xd1,0x01,0x00,0x00,0x84,0x00,0x00,0x00, -0xd0,0x01,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xd2,0x01,0x00,0x00,0x86,0x00,0x00,0x00, -0xd1,0x01,0x00,0x00,0x6c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xd5,0x01,0x00,0x00,0x08,0x01,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xd6,0x01,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xd9,0x01,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xf4,0x01,0x00,0x00, -0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x1c,0x00,0x04,0x00,0xf5,0x01,0x00,0x00,0xc3,0x00,0x00,0x00, -0xf4,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0xf6,0x01,0x00,0x00, -0x07,0x00,0x00,0x00,0xf5,0x01,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x06,0x02,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x21,0x02,0x00,0x00,0x84,0x00,0x00,0x00, -0xbe,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x1c,0x00,0x04,0x00, -0x22,0x02,0x00,0x00,0xc3,0x00,0x00,0x00,0x21,0x02,0x00,0x00, -0x20,0x00,0x04,0x00,0x23,0x02,0x00,0x00,0x07,0x00,0x00,0x00, -0x22,0x02,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x2c,0x02,0x00,0x00,0x86,0x00,0x00,0x00,0xb8,0x00,0x00,0x00, -0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x34,0x02,0x00,0x00,0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x63,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x96,0x02,0x00,0x00,0x0d,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x9e,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0x1d,0x00,0x03,0x00,0xe4,0x02,0x00,0x00,0xc3,0x00,0x00,0x00, -0x1e,0x00,0x03,0x00,0xe5,0x02,0x00,0x00,0xe4,0x02,0x00,0x00, -0x20,0x00,0x04,0x00,0xe6,0x02,0x00,0x00,0x0c,0x00,0x00,0x00, -0xe5,0x02,0x00,0x00,0x3b,0x00,0x04,0x00,0xe6,0x02,0x00,0x00, -0xe7,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0xec,0x02,0x00,0x00,0x05,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xf9,0x02,0x00,0x00, -0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x05,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xc8,0x00,0x00,0x00, -0xc9,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0xf6,0x01,0x00,0x00,0xf7,0x01,0x00,0x00,0x07,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x23,0x02,0x00,0x00,0x24,0x02,0x00,0x00, -0x07,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x16,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x17,0x00,0x00,0x00, -0x16,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x17,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1e,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x21,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x28,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x27,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x29,0x00,0x00,0x00, -0x28,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x2a,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x29,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x2e,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00, -0x24,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x30,0x00,0x00,0x00, -0x2a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x35,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x36,0x00,0x00,0x00, -0x35,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x38,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00, -0x38,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x3a,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x3f,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x3e,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x3f,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x42,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x3b,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x47,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x4a,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x4c,0x00,0x00,0x00, -0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x4f,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x55,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x54,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00, -0x50,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x4f,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x64,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,0x63,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x68,0x00,0x00,0x00, -0x5d,0x00,0x00,0x00,0x67,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x6d,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x73,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x72,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x78,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x7c,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x81,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x80,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x82,0x00,0x00,0x00, -0x81,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x83,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0x82,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x89,0x00,0x00,0x00, -0x47,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,0x89,0x00,0x00,0x00, -0x82,0x00,0x00,0x00,0x0c,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x8d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x26,0x00,0x00,0x00, -0x87,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x90,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x92,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x92,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x95,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x97,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x97,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x99,0x00,0x00,0x00, -0x95,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x93,0x00,0x00,0x00, -0x99,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9c,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x83,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9d,0x00,0x00,0x00, -0x9c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0xa1,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xa3,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0xa3,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa7,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0xa6,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0xa9,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0xa9,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xab,0x00,0x00,0x00, -0xa7,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0xa4,0x00,0x00,0x00, -0xab,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xae,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0x83,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xaf,0x00,0x00,0x00, -0xae,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xb1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb1,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x0b,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0xd0,0x00,0x00,0x00, -0xb2,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0xc2,0x00,0x00,0x00,0x0b,0x03,0x00,0x00,0xc0,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xb3,0x00,0x00,0x00,0xb2,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xc2,0x00,0x00,0x00, -0xb2,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xb2,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00, -0xcd,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x0b,0x03,0x00,0x00, -0x3e,0x00,0x03,0x00,0xcd,0x00,0x00,0x00,0xcb,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd0,0x00,0x00,0x00, -0x0b,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xb1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb3,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xd3,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xd3,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x24,0x03,0x00,0x00,0xaf,0x00,0x00,0x00,0xb3,0x00,0x00,0x00, -0xdb,0x01,0x00,0x00,0xd6,0x00,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x20,0x03,0x00,0x00,0x9d,0x00,0x00,0x00, -0xb3,0x00,0x00,0x00,0xd8,0x01,0x00,0x00,0xd6,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x0c,0x03,0x00,0x00, -0x83,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0x86,0x02,0x00,0x00, -0xd6,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0xda,0x00,0x00,0x00,0x0c,0x03,0x00,0x00,0x8d,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xd5,0x00,0x00,0x00,0xd6,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xda,0x00,0x00,0x00, -0xd4,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xd4,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xdc,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xdc,0x00,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x1c,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0xd4,0x00,0x00,0x00,0x8d,0x01,0x00,0x00,0xdd,0x00,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xe2,0x00,0x00,0x00, -0x1c,0x03,0x00,0x00,0x37,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xde,0x00,0x00,0x00,0xdd,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xe2,0x00,0x00,0x00,0xdd,0x00,0x00,0x00, -0xde,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdd,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe7,0x00,0x00,0x00, -0x73,0x00,0x00,0x00,0x1c,0x03,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xea,0x00,0x00,0x00,0xe7,0x00,0x00,0x00, -0x98,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xeb,0x00,0x00,0x00,0xea,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xec,0x00,0x00,0x00, -0x20,0x03,0x00,0x00,0xeb,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xee,0x00,0x00,0x00,0xec,0x00,0x00,0x00, -0x6e,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xf4,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,0xf3,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf6,0x00,0x00,0x00, -0x6e,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,0xf4,0x00,0x00,0x00, -0xf6,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xfb,0x00,0x00,0x00,0xee,0x00,0x00,0x00,0xfa,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfe,0x00,0x00,0x00, -0xee,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x02,0x01,0x00,0x00,0xfe,0x00,0x00,0x00, -0x01,0x01,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x05,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,0x01,0x01,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x07,0x01,0x00,0x00, -0x05,0x01,0x00,0x00,0x06,0x01,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x0b,0x01,0x00,0x00,0xfe,0x00,0x00,0x00, -0x0a,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x0d,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,0x0c,0x01,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x11,0x01,0x00,0x00, -0x05,0x01,0x00,0x00,0x0a,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x12,0x01,0x00,0x00,0x11,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x15,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,0x02,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x17,0x01,0x00,0x00, -0x15,0x01,0x00,0x00,0x12,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x19,0x01,0x00,0x00,0x17,0x01,0x00,0x00, -0x0d,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x1c,0x01,0x00,0x00,0x02,0x01,0x00,0x00,0x01,0x01,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1e,0x01,0x00,0x00, -0xfe,0x00,0x00,0x00,0x06,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x1f,0x01,0x00,0x00,0x1e,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x20,0x01,0x00,0x00,0x1c,0x01,0x00,0x00,0x1f,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x23,0x01,0x00,0x00, -0x02,0x01,0x00,0x00,0x06,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x26,0x01,0x00,0x00,0x0b,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x27,0x01,0x00,0x00,0x23,0x01,0x00,0x00,0x26,0x01,0x00,0x00, -0x41,0x00,0x07,0x00,0x35,0x01,0x00,0x00,0x36,0x01,0x00,0x00, -0x33,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0xfb,0x00,0x00,0x00, -0x96,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x2e,0x01,0x00,0x00, -0x37,0x01,0x00,0x00,0x36,0x01,0x00,0x00,0x73,0x00,0x04,0x00, -0xc3,0x00,0x00,0x00,0x38,0x01,0x00,0x00,0x37,0x01,0x00,0x00, -0x41,0x00,0x08,0x00,0x3b,0x01,0x00,0x00,0x3c,0x01,0x00,0x00, -0x33,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0xfb,0x00,0x00,0x00, -0x85,0x00,0x00,0x00,0x19,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0x2c,0x01,0x00,0x00,0x3d,0x01,0x00,0x00,0x3c,0x01,0x00,0x00, -0x6f,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x3e,0x01,0x00,0x00, -0x3d,0x01,0x00,0x00,0x85,0x00,0x05,0x00,0xc3,0x00,0x00,0x00, -0x3f,0x01,0x00,0x00,0x38,0x01,0x00,0x00,0x3e,0x01,0x00,0x00, -0x41,0x00,0x08,0x00,0x49,0x01,0x00,0x00,0x4a,0x01,0x00,0x00, -0x33,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0xfb,0x00,0x00,0x00, -0x34,0x00,0x00,0x00,0x20,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0x29,0x01,0x00,0x00,0x4b,0x01,0x00,0x00,0x4a,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4e,0x01,0x00,0x00, -0x07,0x01,0x00,0x00,0x4d,0x01,0x00,0x00,0xc2,0x00,0x05,0x00, -0x29,0x01,0x00,0x00,0x4f,0x01,0x00,0x00,0x4b,0x01,0x00,0x00, -0x4e,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x50,0x01,0x00,0x00,0x4f,0x01,0x00,0x00,0x7c,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x51,0x01,0x00,0x00,0x50,0x01,0x00,0x00, -0xc7,0x00,0x05,0x00,0x13,0x00,0x00,0x00,0x53,0x01,0x00,0x00, -0x51,0x01,0x00,0x00,0x52,0x01,0x00,0x00,0x41,0x00,0x08,0x00, -0x49,0x01,0x00,0x00,0x56,0x01,0x00,0x00,0x33,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0xcf,0x00,0x00,0x00, -0x27,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x29,0x01,0x00,0x00, -0x57,0x01,0x00,0x00,0x56,0x01,0x00,0x00,0xc2,0x00,0x05,0x00, -0x29,0x01,0x00,0x00,0x59,0x01,0x00,0x00,0x57,0x01,0x00,0x00, -0x12,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x5a,0x01,0x00,0x00,0x59,0x01,0x00,0x00,0x7c,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x5b,0x01,0x00,0x00,0x5a,0x01,0x00,0x00, -0xc7,0x00,0x05,0x00,0x13,0x00,0x00,0x00,0x5c,0x01,0x00,0x00, -0x5b,0x01,0x00,0x00,0x96,0x00,0x00,0x00,0xc4,0x00,0x05,0x00, -0x13,0x00,0x00,0x00,0x5d,0x01,0x00,0x00,0x5c,0x01,0x00,0x00, -0xa8,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,0x13,0x00,0x00,0x00, -0x5e,0x01,0x00,0x00,0x53,0x01,0x00,0x00,0x5d,0x01,0x00,0x00, -0x72,0x00,0x04,0x00,0x2c,0x01,0x00,0x00,0x5f,0x01,0x00,0x00, -0x5e,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x60,0x01,0x00,0x00,0x5f,0x01,0x00,0x00,0x82,0x00,0x05,0x00, -0x13,0x00,0x00,0x00,0x62,0x01,0x00,0x00,0x60,0x01,0x00,0x00, -0x61,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,0xc3,0x00,0x00,0x00, -0x63,0x01,0x00,0x00,0x62,0x01,0x00,0x00,0x85,0x00,0x05,0x00, -0xc3,0x00,0x00,0x00,0x64,0x01,0x00,0x00,0x3f,0x01,0x00,0x00, -0x63,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x65,0x01,0x00,0x00, -0x66,0x01,0x00,0x00,0x44,0x01,0x00,0x00,0xf7,0x00,0x00,0x00, -0x3e,0x00,0x03,0x00,0x66,0x01,0x00,0x00,0x64,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x68,0x01,0x00,0x00, -0xf7,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x6c,0x01,0x00,0x00,0x20,0x01,0x00,0x00, -0x39,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x49,0x01,0x00,0x00, -0x6d,0x01,0x00,0x00,0x33,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0xfb,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x6c,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0x29,0x01,0x00,0x00,0x6e,0x01,0x00,0x00, -0x6d,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x29,0x01,0x00,0x00, -0x71,0x01,0x00,0x00,0x6e,0x01,0x00,0x00,0x4e,0x01,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x72,0x01,0x00,0x00, -0x71,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x73,0x01,0x00,0x00,0x72,0x01,0x00,0x00,0xc7,0x00,0x05,0x00, -0x13,0x00,0x00,0x00,0x74,0x01,0x00,0x00,0x73,0x01,0x00,0x00, -0x52,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x77,0x01,0x00,0x00,0x27,0x01,0x00,0x00,0x39,0x00,0x00,0x00, -0x41,0x00,0x08,0x00,0x49,0x01,0x00,0x00,0x78,0x01,0x00,0x00, -0x33,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0xfb,0x00,0x00,0x00, -0xcf,0x00,0x00,0x00,0x77,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0x29,0x01,0x00,0x00,0x79,0x01,0x00,0x00,0x78,0x01,0x00,0x00, -0xc2,0x00,0x05,0x00,0x29,0x01,0x00,0x00,0x7b,0x01,0x00,0x00, -0x79,0x01,0x00,0x00,0x12,0x01,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x7c,0x01,0x00,0x00,0x7b,0x01,0x00,0x00, -0x7c,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x7d,0x01,0x00,0x00, -0x7c,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x13,0x00,0x00,0x00, -0x7e,0x01,0x00,0x00,0x7d,0x01,0x00,0x00,0x96,0x00,0x00,0x00, -0xc4,0x00,0x05,0x00,0x13,0x00,0x00,0x00,0x7f,0x01,0x00,0x00, -0x7e,0x01,0x00,0x00,0xa8,0x00,0x00,0x00,0xc5,0x00,0x05,0x00, -0x13,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x74,0x01,0x00,0x00, -0x7f,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0x2c,0x01,0x00,0x00, -0x81,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0x72,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x82,0x01,0x00,0x00,0x81,0x01,0x00,0x00, -0x82,0x00,0x05,0x00,0x13,0x00,0x00,0x00,0x83,0x01,0x00,0x00, -0x82,0x01,0x00,0x00,0x61,0x01,0x00,0x00,0x6f,0x00,0x04,0x00, -0xc3,0x00,0x00,0x00,0x84,0x01,0x00,0x00,0x83,0x01,0x00,0x00, -0x85,0x00,0x05,0x00,0xc3,0x00,0x00,0x00,0x85,0x01,0x00,0x00, -0x3f,0x01,0x00,0x00,0x84,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x65,0x01,0x00,0x00,0x86,0x01,0x00,0x00,0x44,0x01,0x00,0x00, -0x68,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x86,0x01,0x00,0x00, -0x85,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x8d,0x01,0x00,0x00,0x1c,0x03,0x00,0x00,0x8b,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xdc,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xde,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x8f,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x8f,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x1d,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0xde,0x00,0x00,0x00,0xd4,0x01,0x00,0x00,0x92,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x95,0x01,0x00,0x00, -0x1d,0x03,0x00,0x00,0xa6,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x91,0x01,0x00,0x00,0x92,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x95,0x01,0x00,0x00,0x90,0x01,0x00,0x00, -0x91,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x90,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x99,0x01,0x00,0x00, -0xa7,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9b,0x01,0x00,0x00,0x99,0x01,0x00,0x00, -0x1d,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x9c,0x01,0x00,0x00,0x12,0x00,0x00,0x00,0xcf,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x9d,0x01,0x00,0x00, -0x9c,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0x9e,0x01,0x00,0x00,0x9b,0x01,0x00,0x00,0x9d,0x01,0x00,0x00, -0xf7,0x00,0x03,0x00,0xa0,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x9e,0x01,0x00,0x00,0x9f,0x01,0x00,0x00, -0xa0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x9f,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa3,0x01,0x00,0x00, -0x0c,0x03,0x00,0x00,0x78,0x00,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0xa5,0x01,0x00,0x00,0xa3,0x01,0x00,0x00, -0x8d,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xa0,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xa0,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0xc1,0x00,0x00,0x00,0xa6,0x01,0x00,0x00,0x9e,0x01,0x00,0x00, -0x90,0x01,0x00,0x00,0xa5,0x01,0x00,0x00,0x9f,0x01,0x00,0x00, -0xf7,0x00,0x03,0x00,0xa8,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xa6,0x01,0x00,0x00,0xa7,0x01,0x00,0x00, -0xc7,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xa7,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb0,0x01,0x00,0x00, -0x7d,0x00,0x00,0x00,0x1d,0x03,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xb2,0x01,0x00,0x00,0xb0,0x01,0x00,0x00, -0xb1,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xb4,0x01,0x00,0x00,0xb2,0x01,0x00,0x00,0x78,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbf,0x01,0x00,0x00, -0xb0,0x01,0x00,0x00,0xaa,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xc0,0x01,0x00,0x00,0x24,0x03,0x00,0x00, -0xbf,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xc2,0x01,0x00,0x00,0xc0,0x01,0x00,0x00,0x78,0x00,0x00,0x00, -0x41,0x00,0x06,0x00,0xc3,0x01,0x00,0x00,0xc4,0x01,0x00,0x00, -0xb8,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0xc2,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0xc5,0x01,0x00,0x00, -0xc4,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x65,0x01,0x00,0x00, -0xc6,0x01,0x00,0x00,0xad,0x01,0x00,0x00,0xb4,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0xc6,0x01,0x00,0x00,0xc5,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xa8,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xc7,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xca,0x01,0x00,0x00,0x7d,0x00,0x00,0x00,0x1d,0x03,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xcc,0x01,0x00,0x00, -0xca,0x01,0x00,0x00,0xcb,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xce,0x01,0x00,0x00,0xcc,0x01,0x00,0x00, -0x78,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x65,0x01,0x00,0x00, -0xcf,0x01,0x00,0x00,0xad,0x01,0x00,0x00,0xce,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0xcf,0x01,0x00,0x00,0xcb,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xa8,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xa8,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x92,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x92,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xd4,0x01,0x00,0x00,0x1d,0x03,0x00,0x00, -0xd2,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x8f,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x91,0x01,0x00,0x00,0xe0,0x00,0x04,0x00, -0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xd5,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd8,0x01,0x00,0x00, -0x20,0x03,0x00,0x00,0xd6,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xdb,0x01,0x00,0x00,0x24,0x03,0x00,0x00, -0xd9,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xdd,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xdd,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x26,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0x91,0x01,0x00,0x00,0x84,0x02,0x00,0x00,0xe0,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xe3,0x01,0x00,0x00, -0x26,0x03,0x00,0x00,0x6c,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xdf,0x01,0x00,0x00,0xe0,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xe3,0x01,0x00,0x00,0xde,0x01,0x00,0x00, -0xdf,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xde,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xe5,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xe5,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x2a,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0xde,0x01,0x00,0x00, -0x10,0x02,0x00,0x00,0xe8,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0xeb,0x01,0x00,0x00,0x2a,0x03,0x00,0x00, -0x60,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xe7,0x01,0x00,0x00, -0xe8,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xeb,0x01,0x00,0x00,0xe6,0x01,0x00,0x00,0xe7,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xe6,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xed,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xed,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x3c,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0xe6,0x01,0x00,0x00,0x0e,0x02,0x00,0x00, -0xee,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0xf3,0x01,0x00,0x00,0x3c,0x03,0x00,0x00,0x62,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xef,0x01,0x00,0x00,0xee,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xf3,0x01,0x00,0x00, -0xee,0x01,0x00,0x00,0xef,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xee,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xf9,0x01,0x00,0x00,0x2a,0x03,0x00,0x00,0x62,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfb,0x01,0x00,0x00, -0xf9,0x01,0x00,0x00,0x3c,0x03,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xfd,0x01,0x00,0x00,0x55,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xff,0x01,0x00,0x00,0x2a,0x03,0x00,0x00,0x61,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x00,0x02,0x00,0x00, -0xfd,0x01,0x00,0x00,0xff,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x02,0x02,0x00,0x00,0x64,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x03,0x02,0x00,0x00,0x00,0x02,0x00,0x00,0x02,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x05,0x02,0x00,0x00, -0x03,0x02,0x00,0x00,0x3c,0x03,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x07,0x02,0x00,0x00,0x05,0x02,0x00,0x00, -0x06,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x09,0x02,0x00,0x00,0x07,0x02,0x00,0x00,0x26,0x03,0x00,0x00, -0x41,0x00,0x05,0x00,0x65,0x01,0x00,0x00,0x0a,0x02,0x00,0x00, -0x44,0x01,0x00,0x00,0x09,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc3,0x00,0x00,0x00,0x0b,0x02,0x00,0x00,0x0a,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,0x0c,0x02,0x00,0x00, -0xf7,0x01,0x00,0x00,0xfb,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0x0c,0x02,0x00,0x00,0x0b,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x0e,0x02,0x00,0x00,0x3c,0x03,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xed,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xef,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xe8,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xe8,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x10,0x02,0x00,0x00, -0x2a,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xe5,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xe7,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0x12,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x12,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x2b,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0xe7,0x01,0x00,0x00, -0x3e,0x02,0x00,0x00,0x15,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0x18,0x02,0x00,0x00,0x2b,0x03,0x00,0x00, -0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x14,0x02,0x00,0x00, -0x15,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x18,0x02,0x00,0x00,0x13,0x02,0x00,0x00,0x14,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x13,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x1a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x1a,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x39,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0x13,0x02,0x00,0x00,0x3c,0x02,0x00,0x00, -0x1b,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0x20,0x02,0x00,0x00,0x39,0x03,0x00,0x00,0xbb,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x1c,0x02,0x00,0x00,0x1b,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x20,0x02,0x00,0x00, -0x1b,0x02,0x00,0x00,0x1c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x1b,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x26,0x02,0x00,0x00,0x2b,0x03,0x00,0x00,0xbb,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x28,0x02,0x00,0x00, -0x26,0x02,0x00,0x00,0x39,0x03,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x2a,0x02,0x00,0x00,0x59,0x00,0x00,0x00, -0xb8,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x2d,0x02,0x00,0x00,0x2b,0x03,0x00,0x00,0x2c,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2e,0x02,0x00,0x00, -0x2a,0x02,0x00,0x00,0x2d,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x30,0x02,0x00,0x00,0x68,0x00,0x00,0x00, -0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x31,0x02,0x00,0x00,0x2e,0x02,0x00,0x00,0x30,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x33,0x02,0x00,0x00, -0x31,0x02,0x00,0x00,0x39,0x03,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x35,0x02,0x00,0x00,0x33,0x02,0x00,0x00, -0x34,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x37,0x02,0x00,0x00,0x35,0x02,0x00,0x00,0x26,0x03,0x00,0x00, -0x41,0x00,0x05,0x00,0x65,0x01,0x00,0x00,0x38,0x02,0x00,0x00, -0xad,0x01,0x00,0x00,0x37,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc3,0x00,0x00,0x00,0x39,0x02,0x00,0x00,0x38,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,0x3a,0x02,0x00,0x00, -0x24,0x02,0x00,0x00,0x28,0x02,0x00,0x00,0x3e,0x00,0x03,0x00, -0x3a,0x02,0x00,0x00,0x39,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3c,0x02,0x00,0x00,0x39,0x03,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x1a,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x1c,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x15,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x15,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3e,0x02,0x00,0x00, -0x2b,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x12,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x14,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x40,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x40,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x2c,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0x14,0x02,0x00,0x00, -0x82,0x02,0x00,0x00,0x43,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0x46,0x02,0x00,0x00,0x2c,0x03,0x00,0x00, -0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x42,0x02,0x00,0x00, -0x43,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x46,0x02,0x00,0x00,0x41,0x02,0x00,0x00,0x42,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x41,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x48,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x48,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x30,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0x41,0x02,0x00,0x00,0x80,0x02,0x00,0x00, -0x4b,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0x4e,0x02,0x00,0x00,0x30,0x03,0x00,0x00,0x60,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x4a,0x02,0x00,0x00,0x4b,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x4e,0x02,0x00,0x00, -0x49,0x02,0x00,0x00,0x4a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x49,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x50,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x50,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x32,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0x49,0x02,0x00,0x00,0x7e,0x02,0x00,0x00,0x53,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x56,0x02,0x00,0x00, -0x32,0x03,0x00,0x00,0xbb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x52,0x02,0x00,0x00,0x53,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x56,0x02,0x00,0x00,0x51,0x02,0x00,0x00, -0x52,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x51,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x58,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x58,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x34,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0x51,0x02,0x00,0x00, -0x7c,0x02,0x00,0x00,0x59,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0x5e,0x02,0x00,0x00,0x34,0x03,0x00,0x00, -0x62,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x5a,0x02,0x00,0x00, -0x59,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x5e,0x02,0x00,0x00,0x59,0x02,0x00,0x00,0x5a,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x59,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x60,0x02,0x00,0x00,0x2c,0x03,0x00,0x00, -0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x62,0x02,0x00,0x00,0x60,0x02,0x00,0x00,0x32,0x03,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x64,0x02,0x00,0x00, -0x62,0x02,0x00,0x00,0x63,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x66,0x02,0x00,0x00,0x30,0x03,0x00,0x00, -0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x67,0x02,0x00,0x00,0x64,0x02,0x00,0x00,0x66,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x69,0x02,0x00,0x00, -0x67,0x02,0x00,0x00,0x34,0x03,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x6d,0x02,0x00,0x00,0x66,0x02,0x00,0x00, -0x34,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00, -0x6e,0x02,0x00,0x00,0xf7,0x01,0x00,0x00,0x6d,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x6f,0x02,0x00,0x00, -0x6e,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00, -0x74,0x02,0x00,0x00,0x24,0x02,0x00,0x00,0x62,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x75,0x02,0x00,0x00, -0x74,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00, -0x77,0x02,0x00,0x00,0xc9,0x00,0x00,0x00,0x69,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x78,0x02,0x00,0x00, -0x77,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,0xc3,0x00,0x00,0x00, -0x79,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x6f,0x02,0x00,0x00,0x75,0x02,0x00,0x00,0x78,0x02,0x00,0x00, -0x3e,0x00,0x03,0x00,0x77,0x02,0x00,0x00,0x79,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7c,0x02,0x00,0x00, -0x34,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x58,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x5a,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x53,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x53,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x7e,0x02,0x00,0x00,0x32,0x03,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x50,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x52,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x4b,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x4b,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x80,0x02,0x00,0x00,0x30,0x03,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x48,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x4a,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x43,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x43,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x82,0x02,0x00,0x00, -0x2c,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x40,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x42,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0xe0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xe0,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x84,0x02,0x00,0x00,0x26,0x03,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xdd,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xdf,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0xd5,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xd6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd6,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x86,0x02,0x00,0x00, -0x0c,0x03,0x00,0x00,0x6c,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xd3,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd5,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8b,0x02,0x00,0x00, -0x55,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x8c,0x02,0x00,0x00,0x95,0x00,0x00,0x00, -0x8b,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x91,0x02,0x00,0x00,0x59,0x00,0x00,0x00,0xb8,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x92,0x02,0x00,0x00, -0xa7,0x00,0x00,0x00,0x91,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x97,0x02,0x00,0x00,0x12,0x00,0x00,0x00, -0x96,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x98,0x02,0x00,0x00,0x97,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x99,0x02,0x00,0x00,0x0f,0x00,0x00,0x00, -0x98,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9d,0x02,0x00,0x00,0x47,0x00,0x00,0x00,0x98,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x9f,0x02,0x00,0x00, -0x9e,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xa0,0x02,0x00,0x00,0x9f,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa1,0x02,0x00,0x00, -0x9d,0x02,0x00,0x00,0xa0,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa2,0x02,0x00,0x00,0x99,0x02,0x00,0x00, -0xa1,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xa4,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xa4,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x0d,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0xd5,0x00,0x00,0x00,0x0a,0x03,0x00,0x00,0xa7,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xaa,0x02,0x00,0x00, -0x0d,0x03,0x00,0x00,0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xa6,0x02,0x00,0x00,0xa7,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xaa,0x02,0x00,0x00,0xa5,0x02,0x00,0x00, -0xa6,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xa5,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0xac,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xac,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x0e,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0xa5,0x02,0x00,0x00, -0x08,0x03,0x00,0x00,0xaf,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0xb2,0x02,0x00,0x00,0x0e,0x03,0x00,0x00, -0x60,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xae,0x02,0x00,0x00, -0xaf,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xb2,0x02,0x00,0x00,0xad,0x02,0x00,0x00,0xae,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xad,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xb6,0x02,0x00,0x00,0x0e,0x03,0x00,0x00, -0x61,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xb7,0x02,0x00,0x00,0x8c,0x02,0x00,0x00,0xb6,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb9,0x02,0x00,0x00, -0x64,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xba,0x02,0x00,0x00,0xb7,0x02,0x00,0x00, -0xb9,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xbe,0x02,0x00,0x00,0x0d,0x03,0x00,0x00,0x2c,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbf,0x02,0x00,0x00, -0x92,0x02,0x00,0x00,0xbe,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xc1,0x02,0x00,0x00,0x68,0x00,0x00,0x00, -0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xc2,0x02,0x00,0x00,0xbf,0x02,0x00,0x00,0xc1,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0xc4,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xc4,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x10,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0xad,0x02,0x00,0x00, -0x06,0x03,0x00,0x00,0xc7,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0xca,0x02,0x00,0x00,0x10,0x03,0x00,0x00, -0xbb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xc6,0x02,0x00,0x00, -0xc7,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xca,0x02,0x00,0x00,0xc5,0x02,0x00,0x00,0xc6,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xc5,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0xcc,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xcc,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x12,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0xc5,0x02,0x00,0x00,0x04,0x03,0x00,0x00, -0xcf,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0xd2,0x02,0x00,0x00,0x12,0x03,0x00,0x00,0x62,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xce,0x02,0x00,0x00,0xcf,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xd2,0x02,0x00,0x00, -0xcd,0x02,0x00,0x00,0xce,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xcd,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd5,0x02,0x00,0x00,0xba,0x02,0x00,0x00,0x12,0x03,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xd8,0x02,0x00,0x00, -0xd5,0x02,0x00,0x00,0x36,0x00,0x00,0x00,0xf7,0x00,0x03,0x00, -0xda,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xd8,0x02,0x00,0x00,0xd9,0x02,0x00,0x00,0xda,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xd9,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xdd,0x02,0x00,0x00,0xc2,0x02,0x00,0x00, -0x10,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0xde,0x02,0x00,0x00,0x12,0x00,0x00,0x00,0xcf,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xdf,0x02,0x00,0x00, -0xde,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0xe0,0x02,0x00,0x00,0xdd,0x02,0x00,0x00,0xdf,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0xda,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xda,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0xc1,0x00,0x00,0x00, -0xe1,0x02,0x00,0x00,0xd8,0x02,0x00,0x00,0xcd,0x02,0x00,0x00, -0xe0,0x02,0x00,0x00,0xd9,0x02,0x00,0x00,0xf7,0x00,0x03,0x00, -0xe3,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xe1,0x02,0x00,0x00,0xe2,0x02,0x00,0x00,0xe3,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xe2,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xeb,0x02,0x00,0x00,0xc2,0x02,0x00,0x00, -0x10,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0xed,0x02,0x00,0x00,0x12,0x00,0x00,0x00,0xec,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xee,0x02,0x00,0x00, -0xed,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xef,0x02,0x00,0x00,0xeb,0x02,0x00,0x00,0xee,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf0,0x02,0x00,0x00, -0xa2,0x02,0x00,0x00,0xef,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xf2,0x02,0x00,0x00,0xf0,0x02,0x00,0x00, -0xba,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xf4,0x02,0x00,0x00,0xf2,0x02,0x00,0x00,0x12,0x03,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf6,0x02,0x00,0x00, -0x0d,0x03,0x00,0x00,0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xf8,0x02,0x00,0x00,0xf6,0x02,0x00,0x00, -0x10,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xfa,0x02,0x00,0x00,0xf8,0x02,0x00,0x00,0xf9,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfc,0x02,0x00,0x00, -0x0e,0x03,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xfd,0x02,0x00,0x00,0xfa,0x02,0x00,0x00, -0xfc,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xff,0x02,0x00,0x00,0xfd,0x02,0x00,0x00,0x12,0x03,0x00,0x00, -0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,0x00,0x03,0x00,0x00, -0xc9,0x00,0x00,0x00,0xff,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc3,0x00,0x00,0x00,0x01,0x03,0x00,0x00,0x00,0x03,0x00,0x00, -0x41,0x00,0x06,0x00,0xc3,0x01,0x00,0x00,0x02,0x03,0x00,0x00, -0xe7,0x02,0x00,0x00,0x34,0x00,0x00,0x00,0xf4,0x02,0x00,0x00, -0x3e,0x00,0x03,0x00,0x02,0x03,0x00,0x00,0x01,0x03,0x00,0x00, -0xf9,0x00,0x02,0x00,0xe3,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xe3,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xcf,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xcf,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x04,0x03,0x00,0x00,0x12,0x03,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xcc,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xce,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0xc7,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xc7,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x06,0x03,0x00,0x00, -0x10,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xc4,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xc6,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0xaf,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xaf,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x08,0x03,0x00,0x00,0x0e,0x03,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xac,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xae,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xa7,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xa7,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x0a,0x03,0x00,0x00,0x0d,0x03,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xa4,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xa6,0x02,0x00,0x00,0xfd,0x00,0x01,0x00, -0x38,0x00,0x01,0x00, -}; -const uint64_t matmul_q6_k_f32_fp32_len = 11644; - -unsigned char matmul_q8_0_f32_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0xf2,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x09,0x00,0x00,0x00, -0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00, -0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00, -0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30, -0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x0f,0x00,0x0f,0x00,0x05,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x4c,0x00,0x00,0x00,0x0a,0x01,0x00,0x00,0x28,0x01,0x00,0x00, -0x5b,0x01,0x00,0x00,0x66,0x01,0x00,0x00,0x51,0x02,0x00,0x00, -0x9a,0x02,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x05,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x30,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x0d,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0x10,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x37,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x3d,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x4c,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x4f,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x53,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x60,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x62,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x6c,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xa6,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xb8,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xbb,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x05,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x06,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x06,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x07,0x01,0x00,0x00, -0x06,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0x08,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x08,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x08,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x0a,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x0a,0x01,0x00,0x00,0x21,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x35,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x36,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x63,0x01,0x00,0x00,0x06,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x64,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x64,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x64,0x01,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x66,0x01,0x00,0x00, -0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x66,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x51,0x02,0x00,0x00,0x0b,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x97,0x02,0x00,0x00, -0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0x98,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x98,0x02,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x98,0x02,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x9a,0x02,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x9a,0x02,0x00,0x00,0x21,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00, -0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x1e,0x00,0x10,0x00,0x10,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x11,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x11,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x15,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0x0a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x27,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x3e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x61,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x63,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x61,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x67,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x61,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x72,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x85,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x90,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0xa1,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xa6,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xb7,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xb9,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0xb8,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xba,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x4f,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xbb,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xba,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xbc,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0xb9,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xb7,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xbf,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x14,0x00,0x02,0x00, -0xc1,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0xc3,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xc4,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xc5,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc4,0x00,0x00,0x00, -0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xc6,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc5,0x00,0x00,0x00, -0xbb,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xc7,0x00,0x00,0x00, -0xc3,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0xc8,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xc7,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0xcb,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xcc,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xf3,0x00,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xfa,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xfe,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x16,0x00,0x03,0x00, -0x02,0x01,0x00,0x00,0x10,0x00,0x00,0x00,0x15,0x00,0x04,0x00, -0x03,0x01,0x00,0x00,0x08,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x04,0x01,0x00,0x00, -0x20,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x05,0x01,0x00,0x00, -0x03,0x01,0x00,0x00,0x04,0x01,0x00,0x00,0x1e,0x00,0x04,0x00, -0x06,0x01,0x00,0x00,0x02,0x01,0x00,0x00,0x05,0x01,0x00,0x00, -0x1d,0x00,0x03,0x00,0x07,0x01,0x00,0x00,0x06,0x01,0x00,0x00, -0x1e,0x00,0x03,0x00,0x08,0x01,0x00,0x00,0x07,0x01,0x00,0x00, -0x20,0x00,0x04,0x00,0x09,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x08,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x09,0x01,0x00,0x00, -0x0a,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x0c,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x02,0x01,0x00,0x00, -0x17,0x00,0x04,0x00,0x10,0x01,0x00,0x00,0xc3,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x15,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x03,0x01,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x24,0x01,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x25,0x01,0x00,0x00,0x84,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x24,0x01,0x00,0x00,0x1c,0x00,0x04,0x00, -0x26,0x01,0x00,0x00,0x02,0x01,0x00,0x00,0x25,0x01,0x00,0x00, -0x20,0x00,0x04,0x00,0x27,0x01,0x00,0x00,0x04,0x00,0x00,0x00, -0x26,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x27,0x01,0x00,0x00, -0x28,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x2d,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x02,0x01,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x35,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00,0x09,0x00,0x00,0x00, -0x36,0x01,0x00,0x00,0x35,0x01,0x00,0x00,0x39,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x37,0x01,0x00,0x00,0x51,0x00,0x00,0x00,0x36,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x38,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x37,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x39,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x38,0x01,0x00,0x00, -0x6c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x57,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x58,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0xa6,0x00,0x00,0x00, -0x57,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,0x59,0x01,0x00,0x00, -0x02,0x01,0x00,0x00,0x58,0x01,0x00,0x00,0x20,0x00,0x04,0x00, -0x5a,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x59,0x01,0x00,0x00, -0x3b,0x00,0x04,0x00,0x5a,0x01,0x00,0x00,0x5b,0x01,0x00,0x00, -0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x5f,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x63,0x01,0x00,0x00, -0xc3,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x64,0x01,0x00,0x00, -0x63,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x65,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x64,0x01,0x00,0x00,0x3b,0x00,0x04,0x00, -0x65,0x01,0x00,0x00,0x66,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x71,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0xc3,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x7a,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x02,0x01,0x00,0x00, -0x7e,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x51,0x00,0x00,0x00, -0x36,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x81,0x01,0x00,0x00,0x84,0x00,0x00,0x00, -0x80,0x01,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x82,0x01,0x00,0x00,0x86,0x00,0x00,0x00, -0x81,0x01,0x00,0x00,0x6c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x85,0x01,0x00,0x00,0x08,0x01,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x86,0x01,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x89,0x01,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xa4,0x01,0x00,0x00, -0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x1c,0x00,0x04,0x00,0xa5,0x01,0x00,0x00,0x02,0x01,0x00,0x00, -0xa4,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0xa6,0x01,0x00,0x00, -0x07,0x00,0x00,0x00,0xa5,0x01,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xb6,0x01,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0xbc,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x02,0x01,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xd2,0x01,0x00,0x00, -0x84,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0xbb,0x00,0x00,0x00, -0x1c,0x00,0x04,0x00,0xd3,0x01,0x00,0x00,0x02,0x01,0x00,0x00, -0xd2,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0xd4,0x01,0x00,0x00, -0x07,0x00,0x00,0x00,0xd3,0x01,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xdd,0x01,0x00,0x00,0x86,0x00,0x00,0x00, -0xb8,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xe5,0x01,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x14,0x02,0x00,0x00,0x84,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x49,0x02,0x00,0x00,0x0d,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x51,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x97,0x02,0x00,0x00, -0xc3,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x98,0x02,0x00,0x00, -0x97,0x02,0x00,0x00,0x20,0x00,0x04,0x00,0x99,0x02,0x00,0x00, -0x0c,0x00,0x00,0x00,0x98,0x02,0x00,0x00,0x3b,0x00,0x04,0x00, -0x99,0x02,0x00,0x00,0x9a,0x02,0x00,0x00,0x0c,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x9f,0x02,0x00,0x00, -0x05,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xac,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0xc8,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0xa6,0x01,0x00,0x00,0xa7,0x01,0x00,0x00, -0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xd4,0x01,0x00,0x00, -0xd5,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x17,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x17,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x1e,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x17,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x27,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x29,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x1e,0x00,0x00,0x00, -0x29,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x2e,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x2d,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x2f,0x00,0x00,0x00, -0x2e,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x30,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x2f,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x30,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x34,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x36,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x36,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x3a,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00, -0x3a,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x3b,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x47,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x3b,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x49,0x00,0x00,0x00, -0x3d,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x49,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x4d,0x00,0x00,0x00, -0x4c,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x4d,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x50,0x00,0x00,0x00, -0x54,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x59,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x58,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5d,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x5d,0x00,0x00,0x00, -0x63,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x68,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,0x67,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6e,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x72,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x78,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x77,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7d,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x80,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x82,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x47,0x00,0x00,0x00, -0x82,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x85,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x87,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x89,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8c,0x00,0x00,0x00, -0x89,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x0c,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x26,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x8c,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x91,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x90,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x91,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x93,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0x42,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x97,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x96,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x98,0x00,0x00,0x00, -0x97,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x99,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0x98,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9a,0x00,0x00,0x00, -0x93,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0x9a,0x00,0x00,0x00, -0x83,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9d,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0xa2,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0xa2,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0x4a,0x00,0x00,0x00, -0xa6,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0xa9,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0xa8,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xaa,0x00,0x00,0x00, -0xa9,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xab,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0xaa,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00, -0xa4,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0xac,0x00,0x00,0x00, -0x83,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xaf,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xb1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xb1,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xc0,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0x05,0x00,0x00,0x00, -0xd0,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,0xc0,0x02,0x00,0x00, -0xc0,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xb3,0x00,0x00,0x00, -0xb2,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xc2,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0xb3,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0xcc,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,0xc9,0x00,0x00,0x00, -0xc0,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0xcd,0x00,0x00,0x00, -0xcb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd0,0x00,0x00,0x00,0xc0,0x02,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xb1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xb3,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd3,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xd3,0x00,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xd9,0x02,0x00,0x00,0xaf,0x00,0x00,0x00, -0xb3,0x00,0x00,0x00,0x8b,0x01,0x00,0x00,0xd6,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xd5,0x02,0x00,0x00, -0x9d,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0x88,0x01,0x00,0x00, -0xd6,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xc1,0x02,0x00,0x00,0x83,0x00,0x00,0x00,0xb3,0x00,0x00,0x00, -0x39,0x02,0x00,0x00,0xd6,0x00,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0xda,0x00,0x00,0x00,0xc1,0x02,0x00,0x00, -0x8d,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xd5,0x00,0x00,0x00, -0xd6,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xda,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,0xd5,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xd4,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xdc,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdc,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xd1,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,0x3b,0x01,0x00,0x00, -0xdd,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0xe2,0x00,0x00,0x00,0xd1,0x02,0x00,0x00,0x37,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xde,0x00,0x00,0x00,0xdd,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xe2,0x00,0x00,0x00, -0xdd,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xdd,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xe7,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0xd1,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xea,0x00,0x00,0x00, -0xe7,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,0xea,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xec,0x00,0x00,0x00,0xd5,0x02,0x00,0x00,0xeb,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xee,0x00,0x00,0x00, -0xec,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,0xe7,0x00,0x00,0x00, -0xf3,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xf6,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf7,0x00,0x00,0x00, -0xf4,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0xee,0x00,0x00,0x00, -0xfa,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xff,0x00,0x00,0x00,0xee,0x00,0x00,0x00,0xfe,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x00,0x01,0x00,0x00, -0xff,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x41,0x00,0x07,0x00, -0x0c,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,0x0a,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x02,0x01,0x00,0x00,0x0e,0x01,0x00,0x00, -0x0d,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0xc3,0x00,0x00,0x00, -0x0f,0x01,0x00,0x00,0x0e,0x01,0x00,0x00,0x41,0x00,0x08,0x00, -0x15,0x01,0x00,0x00,0x16,0x01,0x00,0x00,0x0a,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0xcf,0x00,0x00,0x00, -0x00,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x03,0x01,0x00,0x00, -0x17,0x01,0x00,0x00,0x16,0x01,0x00,0x00,0x72,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x18,0x01,0x00,0x00,0x17,0x01,0x00,0x00, -0x6f,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x19,0x01,0x00,0x00, -0x18,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x1c,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x39,0x00,0x00,0x00, -0x41,0x00,0x08,0x00,0x15,0x01,0x00,0x00,0x1d,0x01,0x00,0x00, -0x0a,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0xfb,0x00,0x00,0x00, -0xcf,0x00,0x00,0x00,0x1c,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0x03,0x01,0x00,0x00,0x1e,0x01,0x00,0x00,0x1d,0x01,0x00,0x00, -0x72,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x1f,0x01,0x00,0x00, -0x1e,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,0xc3,0x00,0x00,0x00, -0x20,0x01,0x00,0x00,0x1f,0x01,0x00,0x00,0x50,0x00,0x05,0x00, -0x10,0x01,0x00,0x00,0x21,0x01,0x00,0x00,0x19,0x01,0x00,0x00, -0x20,0x01,0x00,0x00,0x8e,0x00,0x05,0x00,0x10,0x01,0x00,0x00, -0x23,0x01,0x00,0x00,0x21,0x01,0x00,0x00,0x0f,0x01,0x00,0x00, -0x51,0x00,0x05,0x00,0xc3,0x00,0x00,0x00,0x2b,0x01,0x00,0x00, -0x23,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x73,0x00,0x04,0x00, -0x02,0x01,0x00,0x00,0x2c,0x01,0x00,0x00,0x2b,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x2d,0x01,0x00,0x00,0x2e,0x01,0x00,0x00, -0x28,0x01,0x00,0x00,0xf7,0x00,0x00,0x00,0x3e,0x00,0x03,0x00, -0x2e,0x01,0x00,0x00,0x2c,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x30,0x01,0x00,0x00,0xf7,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x51,0x00,0x05,0x00,0xc3,0x00,0x00,0x00, -0x32,0x01,0x00,0x00,0x23,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0x73,0x00,0x04,0x00,0x02,0x01,0x00,0x00,0x33,0x01,0x00,0x00, -0x32,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x2d,0x01,0x00,0x00, -0x34,0x01,0x00,0x00,0x28,0x01,0x00,0x00,0x30,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0x34,0x01,0x00,0x00,0x33,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3b,0x01,0x00,0x00, -0xd1,0x02,0x00,0x00,0x39,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xdc,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x3d,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x3d,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xd2,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0xde,0x00,0x00,0x00, -0x84,0x01,0x00,0x00,0x40,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0x43,0x01,0x00,0x00,0xd2,0x02,0x00,0x00, -0xa6,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x3f,0x01,0x00,0x00, -0x40,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x43,0x01,0x00,0x00,0x3e,0x01,0x00,0x00,0x3f,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x3e,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x47,0x01,0x00,0x00,0xa7,0x00,0x00,0x00, -0x7d,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x49,0x01,0x00,0x00,0x47,0x01,0x00,0x00,0xd2,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x4a,0x01,0x00,0x00, -0x12,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x4b,0x01,0x00,0x00,0x4a,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x4c,0x01,0x00,0x00, -0x49,0x01,0x00,0x00,0x4b,0x01,0x00,0x00,0xf7,0x00,0x03,0x00, -0x4e,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x4c,0x01,0x00,0x00,0x4d,0x01,0x00,0x00,0x4e,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x4d,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x51,0x01,0x00,0x00,0xc1,0x02,0x00,0x00, -0x78,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0x53,0x01,0x00,0x00,0x51,0x01,0x00,0x00,0x8d,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x4e,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x4e,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0xc1,0x00,0x00,0x00, -0x54,0x01,0x00,0x00,0x4c,0x01,0x00,0x00,0x3e,0x01,0x00,0x00, -0x53,0x01,0x00,0x00,0x4d,0x01,0x00,0x00,0xf7,0x00,0x03,0x00, -0x56,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x54,0x01,0x00,0x00,0x55,0x01,0x00,0x00,0x76,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x55,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x5e,0x01,0x00,0x00,0x7d,0x00,0x00,0x00, -0xd2,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x60,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,0x5f,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x62,0x01,0x00,0x00, -0x60,0x01,0x00,0x00,0x78,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x6d,0x01,0x00,0x00,0x5e,0x01,0x00,0x00, -0xaa,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x6e,0x01,0x00,0x00,0xd9,0x02,0x00,0x00,0x6d,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x70,0x01,0x00,0x00, -0x6e,0x01,0x00,0x00,0x78,0x00,0x00,0x00,0x41,0x00,0x06,0x00, -0x71,0x01,0x00,0x00,0x72,0x01,0x00,0x00,0x66,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0x70,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc3,0x00,0x00,0x00,0x73,0x01,0x00,0x00,0x72,0x01,0x00,0x00, -0x73,0x00,0x04,0x00,0x02,0x01,0x00,0x00,0x74,0x01,0x00,0x00, -0x73,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x2d,0x01,0x00,0x00, -0x75,0x01,0x00,0x00,0x5b,0x01,0x00,0x00,0x62,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0x75,0x01,0x00,0x00,0x74,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0x56,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x76,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x79,0x01,0x00,0x00,0x7d,0x00,0x00,0x00,0xd2,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7b,0x01,0x00,0x00, -0x79,0x01,0x00,0x00,0x7a,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x7d,0x01,0x00,0x00,0x7b,0x01,0x00,0x00, -0x78,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x2d,0x01,0x00,0x00, -0x7f,0x01,0x00,0x00,0x5b,0x01,0x00,0x00,0x7d,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0x7f,0x01,0x00,0x00,0x7e,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0x56,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x56,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x40,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x40,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x84,0x01,0x00,0x00,0xd2,0x02,0x00,0x00, -0x82,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x3d,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x3f,0x01,0x00,0x00,0xe0,0x00,0x04,0x00, -0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x85,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x88,0x01,0x00,0x00, -0xd5,0x02,0x00,0x00,0x86,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x8b,0x01,0x00,0x00,0xd9,0x02,0x00,0x00, -0x89,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x8d,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x8d,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xdb,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0x3f,0x01,0x00,0x00,0x37,0x02,0x00,0x00,0x90,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x93,0x01,0x00,0x00, -0xdb,0x02,0x00,0x00,0x6c,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x8f,0x01,0x00,0x00,0x90,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x93,0x01,0x00,0x00,0x8e,0x01,0x00,0x00, -0x8f,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x8e,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0x95,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x95,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xdf,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0x8e,0x01,0x00,0x00, -0xc1,0x01,0x00,0x00,0x98,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0x9b,0x01,0x00,0x00,0xdf,0x02,0x00,0x00, -0x60,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x97,0x01,0x00,0x00, -0x98,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x9b,0x01,0x00,0x00,0x96,0x01,0x00,0x00,0x97,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x96,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0x9d,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x9d,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xf1,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0x96,0x01,0x00,0x00,0xbf,0x01,0x00,0x00, -0x9e,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0xa3,0x01,0x00,0x00,0xf1,0x02,0x00,0x00,0x62,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x9f,0x01,0x00,0x00,0x9e,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xa3,0x01,0x00,0x00, -0x9e,0x01,0x00,0x00,0x9f,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x9e,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa9,0x01,0x00,0x00,0xdf,0x02,0x00,0x00,0x62,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xab,0x01,0x00,0x00, -0xa9,0x01,0x00,0x00,0xf1,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xad,0x01,0x00,0x00,0x55,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xaf,0x01,0x00,0x00,0xdf,0x02,0x00,0x00,0x61,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb0,0x01,0x00,0x00, -0xad,0x01,0x00,0x00,0xaf,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xb2,0x01,0x00,0x00,0x64,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xb3,0x01,0x00,0x00,0xb0,0x01,0x00,0x00,0xb2,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb5,0x01,0x00,0x00, -0xb3,0x01,0x00,0x00,0xf1,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xb7,0x01,0x00,0x00,0xb5,0x01,0x00,0x00, -0xb6,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xb9,0x01,0x00,0x00,0xb7,0x01,0x00,0x00,0xdb,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0x2d,0x01,0x00,0x00,0xba,0x01,0x00,0x00, -0x28,0x01,0x00,0x00,0xb9,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0x02,0x01,0x00,0x00,0xbb,0x01,0x00,0x00,0xba,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0xbc,0x01,0x00,0x00,0xbd,0x01,0x00,0x00, -0xa7,0x01,0x00,0x00,0xab,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0xbd,0x01,0x00,0x00,0xbb,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xbf,0x01,0x00,0x00,0xf1,0x02,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x9d,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x9f,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0x98,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x98,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc1,0x01,0x00,0x00, -0xdf,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x95,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x97,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xc3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xc3,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xe0,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0x97,0x01,0x00,0x00, -0xef,0x01,0x00,0x00,0xc6,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0xc9,0x01,0x00,0x00,0xe0,0x02,0x00,0x00, -0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xc5,0x01,0x00,0x00, -0xc6,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xc9,0x01,0x00,0x00,0xc4,0x01,0x00,0x00,0xc5,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xc4,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xcb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xcb,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xee,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0xc4,0x01,0x00,0x00,0xed,0x01,0x00,0x00, -0xcc,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0xd1,0x01,0x00,0x00,0xee,0x02,0x00,0x00,0xbb,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xcd,0x01,0x00,0x00,0xcc,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xd1,0x01,0x00,0x00, -0xcc,0x01,0x00,0x00,0xcd,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xcc,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd7,0x01,0x00,0x00,0xe0,0x02,0x00,0x00,0xbb,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd9,0x01,0x00,0x00, -0xd7,0x01,0x00,0x00,0xee,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xdb,0x01,0x00,0x00,0x59,0x00,0x00,0x00, -0xb8,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xde,0x01,0x00,0x00,0xe0,0x02,0x00,0x00,0xdd,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdf,0x01,0x00,0x00, -0xdb,0x01,0x00,0x00,0xde,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xe1,0x01,0x00,0x00,0x68,0x00,0x00,0x00, -0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xe2,0x01,0x00,0x00,0xdf,0x01,0x00,0x00,0xe1,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe4,0x01,0x00,0x00, -0xe2,0x01,0x00,0x00,0xee,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xe6,0x01,0x00,0x00,0xe4,0x01,0x00,0x00, -0xe5,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xe8,0x01,0x00,0x00,0xe6,0x01,0x00,0x00,0xdb,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0x2d,0x01,0x00,0x00,0xe9,0x01,0x00,0x00, -0x5b,0x01,0x00,0x00,0xe8,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0x02,0x01,0x00,0x00,0xea,0x01,0x00,0x00,0xe9,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0xbc,0x01,0x00,0x00,0xeb,0x01,0x00,0x00, -0xd5,0x01,0x00,0x00,0xd9,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0xeb,0x01,0x00,0x00,0xea,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xed,0x01,0x00,0x00,0xee,0x02,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xcb,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xcd,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xc6,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xc6,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xef,0x01,0x00,0x00, -0xe0,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xc3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xc5,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xf1,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xf1,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xe1,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0xc5,0x01,0x00,0x00, -0x35,0x02,0x00,0x00,0xf4,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0xf7,0x01,0x00,0x00,0xe1,0x02,0x00,0x00, -0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xf3,0x01,0x00,0x00, -0xf4,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xf7,0x01,0x00,0x00,0xf2,0x01,0x00,0x00,0xf3,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xf2,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xf9,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xf9,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xe5,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0xf2,0x01,0x00,0x00,0x33,0x02,0x00,0x00, -0xfc,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0xff,0x01,0x00,0x00,0xe5,0x02,0x00,0x00,0x60,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xfb,0x01,0x00,0x00,0xfc,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xff,0x01,0x00,0x00, -0xfa,0x01,0x00,0x00,0xfb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xfa,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x01,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x01,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xe7,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0xfa,0x01,0x00,0x00,0x31,0x02,0x00,0x00,0x04,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x07,0x02,0x00,0x00, -0xe7,0x02,0x00,0x00,0xbb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x03,0x02,0x00,0x00,0x04,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x07,0x02,0x00,0x00,0x02,0x02,0x00,0x00, -0x03,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x02,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x09,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x09,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xe9,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0x02,0x02,0x00,0x00, -0x2f,0x02,0x00,0x00,0x0a,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0x0f,0x02,0x00,0x00,0xe9,0x02,0x00,0x00, -0x62,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x0b,0x02,0x00,0x00, -0x0a,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x0f,0x02,0x00,0x00,0x0a,0x02,0x00,0x00,0x0b,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x0a,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x11,0x02,0x00,0x00,0xe1,0x02,0x00,0x00, -0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x13,0x02,0x00,0x00,0x11,0x02,0x00,0x00,0xe7,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x15,0x02,0x00,0x00, -0x13,0x02,0x00,0x00,0x14,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x17,0x02,0x00,0x00,0xe5,0x02,0x00,0x00, -0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x18,0x02,0x00,0x00,0x15,0x02,0x00,0x00,0x17,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1a,0x02,0x00,0x00, -0x18,0x02,0x00,0x00,0xe9,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x1e,0x02,0x00,0x00,0x17,0x02,0x00,0x00, -0xe9,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xbc,0x01,0x00,0x00, -0x1f,0x02,0x00,0x00,0xa7,0x01,0x00,0x00,0x1e,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0x02,0x01,0x00,0x00,0x20,0x02,0x00,0x00, -0x1f,0x02,0x00,0x00,0x73,0x00,0x04,0x00,0xc3,0x00,0x00,0x00, -0x21,0x02,0x00,0x00,0x20,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0xbc,0x01,0x00,0x00,0x26,0x02,0x00,0x00,0xd5,0x01,0x00,0x00, -0x13,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x02,0x01,0x00,0x00, -0x27,0x02,0x00,0x00,0x26,0x02,0x00,0x00,0x73,0x00,0x04,0x00, -0xc3,0x00,0x00,0x00,0x28,0x02,0x00,0x00,0x27,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,0x2a,0x02,0x00,0x00, -0xc9,0x00,0x00,0x00,0x1a,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc3,0x00,0x00,0x00,0x2b,0x02,0x00,0x00,0x2a,0x02,0x00,0x00, -0x0c,0x00,0x08,0x00,0xc3,0x00,0x00,0x00,0x2c,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x21,0x02,0x00,0x00, -0x28,0x02,0x00,0x00,0x2b,0x02,0x00,0x00,0x3e,0x00,0x03,0x00, -0x2a,0x02,0x00,0x00,0x2c,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x2f,0x02,0x00,0x00,0xe9,0x02,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x09,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x0b,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x04,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x04,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x31,0x02,0x00,0x00, -0xe7,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x01,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x03,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0xfc,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xfc,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x33,0x02,0x00,0x00,0xe5,0x02,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xf9,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xfb,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xf4,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xf4,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x35,0x02,0x00,0x00,0xe1,0x02,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xf1,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xf3,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0x90,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x90,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x37,0x02,0x00,0x00, -0xdb,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x8d,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x8f,0x01,0x00,0x00, -0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x85,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xd6,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xd6,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x39,0x02,0x00,0x00,0xc1,0x02,0x00,0x00, -0x6c,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd3,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xd5,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3e,0x02,0x00,0x00,0x55,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x3f,0x02,0x00,0x00,0x95,0x00,0x00,0x00,0x3e,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x44,0x02,0x00,0x00, -0x59,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x45,0x02,0x00,0x00,0xa7,0x00,0x00,0x00, -0x44,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x4a,0x02,0x00,0x00,0x12,0x00,0x00,0x00,0x49,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4b,0x02,0x00,0x00, -0x4a,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x4c,0x02,0x00,0x00,0x0f,0x00,0x00,0x00,0x4b,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x50,0x02,0x00,0x00, -0x47,0x00,0x00,0x00,0x4b,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0x52,0x02,0x00,0x00,0x51,0x02,0x00,0x00, -0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x53,0x02,0x00,0x00,0x52,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x54,0x02,0x00,0x00,0x50,0x02,0x00,0x00, -0x53,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x55,0x02,0x00,0x00,0x4c,0x02,0x00,0x00,0x54,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x57,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x57,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xc2,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0xd5,0x00,0x00,0x00, -0xbd,0x02,0x00,0x00,0x5a,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0x5d,0x02,0x00,0x00,0xc2,0x02,0x00,0x00, -0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x59,0x02,0x00,0x00, -0x5a,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x5d,0x02,0x00,0x00,0x58,0x02,0x00,0x00,0x59,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x58,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x5f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x5f,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xc3,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0x58,0x02,0x00,0x00,0xbb,0x02,0x00,0x00, -0x62,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0x65,0x02,0x00,0x00,0xc3,0x02,0x00,0x00,0x60,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x61,0x02,0x00,0x00,0x62,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x65,0x02,0x00,0x00, -0x60,0x02,0x00,0x00,0x61,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x60,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x69,0x02,0x00,0x00,0xc3,0x02,0x00,0x00,0x61,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6a,0x02,0x00,0x00, -0x3f,0x02,0x00,0x00,0x69,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x6c,0x02,0x00,0x00,0x64,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x6d,0x02,0x00,0x00,0x6a,0x02,0x00,0x00,0x6c,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x71,0x02,0x00,0x00, -0xc2,0x02,0x00,0x00,0xdd,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x72,0x02,0x00,0x00,0x45,0x02,0x00,0x00, -0x71,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x74,0x02,0x00,0x00,0x68,0x00,0x00,0x00,0xbb,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x75,0x02,0x00,0x00, -0x72,0x02,0x00,0x00,0x74,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x77,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x77,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xc5,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0x60,0x02,0x00,0x00,0xb9,0x02,0x00,0x00, -0x7a,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0x7d,0x02,0x00,0x00,0xc5,0x02,0x00,0x00,0xbb,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x79,0x02,0x00,0x00,0x7a,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x7d,0x02,0x00,0x00, -0x78,0x02,0x00,0x00,0x79,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x78,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x7f,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x7f,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xc7,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0x78,0x02,0x00,0x00,0xb7,0x02,0x00,0x00,0x82,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x85,0x02,0x00,0x00, -0xc7,0x02,0x00,0x00,0x62,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x81,0x02,0x00,0x00,0x82,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x85,0x02,0x00,0x00,0x80,0x02,0x00,0x00, -0x81,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x80,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x88,0x02,0x00,0x00, -0x6d,0x02,0x00,0x00,0xc7,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0x8b,0x02,0x00,0x00,0x88,0x02,0x00,0x00, -0x36,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x8d,0x02,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x8b,0x02,0x00,0x00, -0x8c,0x02,0x00,0x00,0x8d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x8c,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x90,0x02,0x00,0x00,0x75,0x02,0x00,0x00,0xc5,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x91,0x02,0x00,0x00, -0x12,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x92,0x02,0x00,0x00,0x91,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x93,0x02,0x00,0x00, -0x90,0x02,0x00,0x00,0x92,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x8d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x8d,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0xc1,0x00,0x00,0x00,0x94,0x02,0x00,0x00, -0x8b,0x02,0x00,0x00,0x80,0x02,0x00,0x00,0x93,0x02,0x00,0x00, -0x8c,0x02,0x00,0x00,0xf7,0x00,0x03,0x00,0x96,0x02,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x94,0x02,0x00,0x00, -0x95,0x02,0x00,0x00,0x96,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x95,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9e,0x02,0x00,0x00,0x75,0x02,0x00,0x00,0xc5,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0xa0,0x02,0x00,0x00, -0x12,0x00,0x00,0x00,0x9f,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xa1,0x02,0x00,0x00,0xa0,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa2,0x02,0x00,0x00, -0x9e,0x02,0x00,0x00,0xa1,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa3,0x02,0x00,0x00,0x55,0x02,0x00,0x00, -0xa2,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa5,0x02,0x00,0x00,0xa3,0x02,0x00,0x00,0x6d,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa7,0x02,0x00,0x00, -0xa5,0x02,0x00,0x00,0xc7,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa9,0x02,0x00,0x00,0xc2,0x02,0x00,0x00, -0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xab,0x02,0x00,0x00,0xa9,0x02,0x00,0x00,0xc5,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xad,0x02,0x00,0x00, -0xab,0x02,0x00,0x00,0xac,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xaf,0x02,0x00,0x00,0xc3,0x02,0x00,0x00, -0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xb0,0x02,0x00,0x00,0xad,0x02,0x00,0x00,0xaf,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb2,0x02,0x00,0x00, -0xb0,0x02,0x00,0x00,0xc7,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0xcc,0x00,0x00,0x00,0xb3,0x02,0x00,0x00,0xc9,0x00,0x00,0x00, -0xb2,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00, -0xb4,0x02,0x00,0x00,0xb3,0x02,0x00,0x00,0x41,0x00,0x06,0x00, -0x71,0x01,0x00,0x00,0xb5,0x02,0x00,0x00,0x9a,0x02,0x00,0x00, -0x34,0x00,0x00,0x00,0xa7,0x02,0x00,0x00,0x3e,0x00,0x03,0x00, -0xb5,0x02,0x00,0x00,0xb4,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x96,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x96,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x82,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x82,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xb7,0x02,0x00,0x00,0xc7,0x02,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x7f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x81,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x7a,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x7a,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xb9,0x02,0x00,0x00,0xc5,0x02,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x77,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x79,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x62,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x62,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbb,0x02,0x00,0x00, -0xc3,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x5f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x61,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x5a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x5a,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xbd,0x02,0x00,0x00,0xc2,0x02,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x57,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x59,0x02,0x00,0x00,0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00, - -}; -const uint64_t matmul_q8_0_f32_len = 10608; - -unsigned char matmul_q8_0_f32_aligned_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0x15,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x09,0x00,0x00,0x00, -0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00, -0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00, -0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30, -0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x0f,0x00,0x0f,0x00,0x05,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x4c,0x00,0x00,0x00,0x0b,0x01,0x00,0x00,0x29,0x01,0x00,0x00, -0x5e,0x01,0x00,0x00,0x66,0x01,0x00,0x00,0x74,0x02,0x00,0x00, -0xbd,0x02,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x05,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x30,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x0d,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0x10,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x37,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x3d,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x4c,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x4f,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x53,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x60,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x62,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x6c,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xa7,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xb9,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xbc,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x06,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x07,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x07,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x08,0x01,0x00,0x00, -0x06,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0x09,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x09,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x09,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x0b,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x0b,0x01,0x00,0x00,0x21,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x36,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x37,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x63,0x01,0x00,0x00,0x06,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x64,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0x64,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x64,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x64,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x64,0x01,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x66,0x01,0x00,0x00, -0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x66,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x74,0x02,0x00,0x00,0x0b,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xba,0x02,0x00,0x00, -0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0xbb,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0xbb,0x02,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0xbb,0x02,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xbd,0x02,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xbd,0x02,0x00,0x00,0x21,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00, -0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x1e,0x00,0x10,0x00,0x10,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x11,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x11,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x15,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0x0a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x27,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x3e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x61,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x63,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x61,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x67,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x61,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x72,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x78,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x77,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x7d,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x77,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x81,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x97,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0xa2,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0xa9,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xb8,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xb9,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x4f,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbd,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0xbc,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbe,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbf,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0xbe,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc0,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0xbf,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc1,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0xbc,0x00,0x00,0x00, -0x14,0x00,0x02,0x00,0xc2,0x00,0x00,0x00,0x16,0x00,0x03,0x00, -0xc4,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xc5,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xc6,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x1c,0x00,0x04,0x00, -0xc8,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0xc7,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0xc9,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0xc8,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0xcc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0xcd,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xc4,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0xd0,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xf4,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xfb,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x16,0x00,0x03,0x00,0x03,0x01,0x00,0x00,0x10,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x04,0x01,0x00,0x00,0x08,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x05,0x01,0x00,0x00,0x20,0x00,0x00,0x00,0x1c,0x00,0x04,0x00, -0x06,0x01,0x00,0x00,0x04,0x01,0x00,0x00,0x05,0x01,0x00,0x00, -0x1e,0x00,0x04,0x00,0x07,0x01,0x00,0x00,0x03,0x01,0x00,0x00, -0x06,0x01,0x00,0x00,0x1d,0x00,0x03,0x00,0x08,0x01,0x00,0x00, -0x07,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,0x09,0x01,0x00,0x00, -0x08,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x0a,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x09,0x01,0x00,0x00,0x3b,0x00,0x04,0x00, -0x0a,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x0d,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x03,0x01,0x00,0x00,0x17,0x00,0x04,0x00,0x11,0x01,0x00,0x00, -0xc4,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x16,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x04,0x01,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x25,0x01,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x26,0x01,0x00,0x00, -0x84,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x25,0x01,0x00,0x00, -0x1c,0x00,0x04,0x00,0x27,0x01,0x00,0x00,0x03,0x01,0x00,0x00, -0x26,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x28,0x01,0x00,0x00, -0x04,0x00,0x00,0x00,0x27,0x01,0x00,0x00,0x3b,0x00,0x04,0x00, -0x28,0x01,0x00,0x00,0x29,0x01,0x00,0x00,0x04,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x2e,0x01,0x00,0x00,0x04,0x00,0x00,0x00, -0x03,0x01,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x36,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00, -0x09,0x00,0x00,0x00,0x37,0x01,0x00,0x00,0x36,0x01,0x00,0x00, -0x39,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x38,0x01,0x00,0x00,0x51,0x00,0x00,0x00, -0x37,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x39,0x01,0x00,0x00,0x84,0x00,0x00,0x00, -0x38,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x3a,0x01,0x00,0x00,0x86,0x00,0x00,0x00, -0x39,0x01,0x00,0x00,0x6c,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x55,0x01,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x5a,0x01,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x5b,0x01,0x00,0x00,0x84,0x00,0x00,0x00, -0xa7,0x00,0x00,0x00,0x5a,0x01,0x00,0x00,0x1c,0x00,0x04,0x00, -0x5c,0x01,0x00,0x00,0x03,0x01,0x00,0x00,0x5b,0x01,0x00,0x00, -0x20,0x00,0x04,0x00,0x5d,0x01,0x00,0x00,0x04,0x00,0x00,0x00, -0x5c,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x5d,0x01,0x00,0x00, -0x5e,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x17,0x00,0x04,0x00, -0x61,0x01,0x00,0x00,0xc4,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x18,0x00,0x04,0x00,0x62,0x01,0x00,0x00,0x61,0x01,0x00,0x00, -0x02,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x63,0x01,0x00,0x00, -0x62,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,0x64,0x01,0x00,0x00, -0x63,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x65,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x64,0x01,0x00,0x00,0x3b,0x00,0x04,0x00, -0x65,0x01,0x00,0x00,0x66,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x68,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0xc4,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x7c,0x01,0x00,0x00,0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x84,0x01,0x00,0x00,0x04,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x8c,0x01,0x00,0x00, -0x05,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x94,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x9c,0x01,0x00,0x00,0x07,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xa3,0x01,0x00,0x00, -0x51,0x00,0x00,0x00,0x37,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xa4,0x01,0x00,0x00, -0x84,0x00,0x00,0x00,0xa3,0x01,0x00,0x00,0x77,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xa5,0x01,0x00,0x00, -0x86,0x00,0x00,0x00,0xa4,0x01,0x00,0x00,0x6c,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa8,0x01,0x00,0x00, -0x08,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xa9,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xac,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x77,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xc7,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xc8,0x01,0x00,0x00, -0x03,0x01,0x00,0x00,0xc7,0x01,0x00,0x00,0x20,0x00,0x04,0x00, -0xc9,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0xc8,0x01,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xd9,0x01,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0xdf,0x01,0x00,0x00,0x07,0x00,0x00,0x00, -0x03,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xf5,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0xbf,0x00,0x00,0x00, -0xbc,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xf6,0x01,0x00,0x00, -0x03,0x01,0x00,0x00,0xf5,0x01,0x00,0x00,0x20,0x00,0x04,0x00, -0xf7,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0xf6,0x01,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x00,0x02,0x00,0x00, -0x86,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0xbf,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x08,0x02,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x37,0x02,0x00,0x00, -0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x6c,0x02,0x00,0x00, -0x0d,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x74,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x1d,0x00,0x03,0x00, -0xba,0x02,0x00,0x00,0xc4,0x00,0x00,0x00,0x1e,0x00,0x03,0x00, -0xbb,0x02,0x00,0x00,0xba,0x02,0x00,0x00,0x20,0x00,0x04,0x00, -0xbc,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0xbb,0x02,0x00,0x00, -0x3b,0x00,0x04,0x00,0xbc,0x02,0x00,0x00,0xbd,0x02,0x00,0x00, -0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0xc2,0x02,0x00,0x00,0x05,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xcf,0x02,0x00,0x00,0x84,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x36,0x00,0x05,0x00, -0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0xc9,0x00,0x00,0x00,0xca,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xc9,0x01,0x00,0x00, -0xca,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0xf7,0x01,0x00,0x00,0xf8,0x01,0x00,0x00,0x07,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x16,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x16,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x17,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x24,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2a,0x00,0x00,0x00, -0x1e,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x2d,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x2f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x24,0x00,0x00,0x00, -0x2f,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x2a,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x35,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x35,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x38,0x00,0x00,0x00, -0x36,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x82,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x38,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x3b,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x3f,0x00,0x00,0x00, -0x3d,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x3f,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x42,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x3b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x49,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4a,0x00,0x00,0x00, -0x49,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x4d,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x3e,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x4d,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x50,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00, -0x50,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x50,0x00,0x00,0x00, -0x58,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x5d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x64,0x00,0x00,0x00, -0x5d,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x5d,0x00,0x00,0x00, -0x67,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x6e,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x6d,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x73,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x72,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x78,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x7e,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x7d,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x82,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x82,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x47,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x88,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0x47,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x8d,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0x83,0x00,0x00,0x00, -0x0c,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x8e,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x26,0x00,0x00,0x00,0x88,0x00,0x00,0x00, -0x8d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x92,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x91,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x93,0x00,0x00,0x00, -0x92,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x94,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x93,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x96,0x00,0x00,0x00, -0x42,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x97,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x99,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x96,0x00,0x00,0x00, -0x99,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9b,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x9a,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9d,0x00,0x00,0x00, -0x9b,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,0x9d,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0xa3,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0xa2,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00, -0xa3,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa5,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0xa4,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa8,0x00,0x00,0x00, -0x4a,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0xa9,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xab,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0xa8,0x00,0x00,0x00, -0xab,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xad,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,0xac,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xaf,0x00,0x00,0x00, -0xad,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0xaf,0x00,0x00,0x00, -0x77,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb2,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xe3,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0x05,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0xb3,0x00,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xc3,0x00,0x00,0x00, -0xe3,0x02,0x00,0x00,0xc1,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xb4,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0xb3,0x00,0x00,0x00, -0xb4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb3,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,0xce,0x00,0x00,0x00, -0xca,0x00,0x00,0x00,0xe3,0x02,0x00,0x00,0x3e,0x00,0x03,0x00, -0xce,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0xe3,0x02,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb2,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xb4,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xd4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd4,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xfc,0x02,0x00,0x00, -0xb0,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0xae,0x01,0x00,0x00, -0xd7,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xf8,0x02,0x00,0x00,0x9e,0x00,0x00,0x00,0xb4,0x00,0x00,0x00, -0xab,0x01,0x00,0x00,0xd7,0x00,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xe4,0x02,0x00,0x00,0x84,0x00,0x00,0x00, -0xb4,0x00,0x00,0x00,0x5c,0x02,0x00,0x00,0xd7,0x00,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xdb,0x00,0x00,0x00, -0xe4,0x02,0x00,0x00,0x8e,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xd6,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xdb,0x00,0x00,0x00,0xd5,0x00,0x00,0x00, -0xd6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd5,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xdd,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xf4,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0xd5,0x00,0x00,0x00, -0x3c,0x01,0x00,0x00,0xde,0x00,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0xe3,0x00,0x00,0x00,0xf4,0x02,0x00,0x00, -0x37,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xdf,0x00,0x00,0x00, -0xde,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xe3,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0xdf,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0x73,0x00,0x00,0x00, -0xf4,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xeb,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0x99,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xec,0x00,0x00,0x00, -0xeb,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xed,0x00,0x00,0x00,0xf8,0x02,0x00,0x00, -0xec,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xef,0x00,0x00,0x00,0xed,0x00,0x00,0x00,0x6e,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf5,0x00,0x00,0x00, -0xe8,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,0x6e,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xf8,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,0xf7,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfc,0x00,0x00,0x00, -0xef,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0xc7,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0xef,0x00,0x00,0x00, -0xff,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x01,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x41,0x00,0x07,0x00,0x0d,0x01,0x00,0x00,0x0e,0x01,0x00,0x00, -0x0b,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0xfc,0x00,0x00,0x00, -0x34,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x03,0x01,0x00,0x00, -0x0f,0x01,0x00,0x00,0x0e,0x01,0x00,0x00,0x73,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0x10,0x01,0x00,0x00,0x0f,0x01,0x00,0x00, -0x41,0x00,0x08,0x00,0x16,0x01,0x00,0x00,0x17,0x01,0x00,0x00, -0x0b,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0xfc,0x00,0x00,0x00, -0xd0,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0x04,0x01,0x00,0x00,0x18,0x01,0x00,0x00,0x17,0x01,0x00,0x00, -0x72,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x19,0x01,0x00,0x00, -0x18,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0x1a,0x01,0x00,0x00,0x19,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x1d,0x01,0x00,0x00,0x01,0x01,0x00,0x00, -0x39,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x16,0x01,0x00,0x00, -0x1e,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0xfc,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x1d,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0x04,0x01,0x00,0x00,0x1f,0x01,0x00,0x00, -0x1e,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x20,0x01,0x00,0x00,0x1f,0x01,0x00,0x00,0x6f,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0x21,0x01,0x00,0x00,0x20,0x01,0x00,0x00, -0x50,0x00,0x05,0x00,0x11,0x01,0x00,0x00,0x22,0x01,0x00,0x00, -0x1a,0x01,0x00,0x00,0x21,0x01,0x00,0x00,0x8e,0x00,0x05,0x00, -0x11,0x01,0x00,0x00,0x24,0x01,0x00,0x00,0x22,0x01,0x00,0x00, -0x10,0x01,0x00,0x00,0x51,0x00,0x05,0x00,0xc4,0x00,0x00,0x00, -0x2c,0x01,0x00,0x00,0x24,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x73,0x00,0x04,0x00,0x03,0x01,0x00,0x00,0x2d,0x01,0x00,0x00, -0x2c,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x2e,0x01,0x00,0x00, -0x2f,0x01,0x00,0x00,0x29,0x01,0x00,0x00,0xf8,0x00,0x00,0x00, -0x3e,0x00,0x03,0x00,0x2f,0x01,0x00,0x00,0x2d,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x31,0x01,0x00,0x00, -0xf8,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x51,0x00,0x05,0x00, -0xc4,0x00,0x00,0x00,0x33,0x01,0x00,0x00,0x24,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x03,0x01,0x00,0x00, -0x34,0x01,0x00,0x00,0x33,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x2e,0x01,0x00,0x00,0x35,0x01,0x00,0x00,0x29,0x01,0x00,0x00, -0x31,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x35,0x01,0x00,0x00, -0x34,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x3c,0x01,0x00,0x00,0xf4,0x02,0x00,0x00,0x3a,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xdf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x3e,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x3e,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xf5,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0xdf,0x00,0x00,0x00,0xa7,0x01,0x00,0x00,0x3f,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x44,0x01,0x00,0x00, -0xf5,0x02,0x00,0x00,0xa7,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x40,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x44,0x01,0x00,0x00,0x3f,0x01,0x00,0x00, -0x40,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x3f,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x49,0x01,0x00,0x00, -0x7e,0x00,0x00,0x00,0xf5,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x4c,0x01,0x00,0x00,0x49,0x01,0x00,0x00, -0xab,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x4d,0x01,0x00,0x00,0x4c,0x01,0x00,0x00,0x77,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4e,0x01,0x00,0x00, -0xfc,0x02,0x00,0x00,0x4d,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x50,0x01,0x00,0x00,0x4e,0x01,0x00,0x00, -0x79,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x56,0x01,0x00,0x00,0x49,0x01,0x00,0x00,0x55,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x58,0x01,0x00,0x00, -0x79,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x59,0x01,0x00,0x00,0x56,0x01,0x00,0x00, -0x58,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x68,0x01,0x00,0x00, -0x69,0x01,0x00,0x00,0x66,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0x50,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0x3e,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x6a,0x01,0x00,0x00, -0x69,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x03,0x01,0x00,0x00, -0x6b,0x01,0x00,0x00,0x6a,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x2e,0x01,0x00,0x00,0x6c,0x01,0x00,0x00,0x5e,0x01,0x00,0x00, -0x59,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x6c,0x01,0x00,0x00, -0x6b,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x6e,0x01,0x00,0x00,0x59,0x01,0x00,0x00,0x39,0x00,0x00,0x00, -0x41,0x00,0x08,0x00,0x68,0x01,0x00,0x00,0x70,0x01,0x00,0x00, -0x66,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0x50,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0x71,0x01,0x00,0x00,0x70,0x01,0x00,0x00, -0x73,0x00,0x04,0x00,0x03,0x01,0x00,0x00,0x72,0x01,0x00,0x00, -0x71,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x2e,0x01,0x00,0x00, -0x73,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,0x6e,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0x73,0x01,0x00,0x00,0x72,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x75,0x01,0x00,0x00, -0x59,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x41,0x00,0x08,0x00, -0x68,0x01,0x00,0x00,0x77,0x01,0x00,0x00,0x66,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0x50,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0x78,0x01,0x00,0x00,0x77,0x01,0x00,0x00,0x73,0x00,0x04,0x00, -0x03,0x01,0x00,0x00,0x79,0x01,0x00,0x00,0x78,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x2e,0x01,0x00,0x00,0x7a,0x01,0x00,0x00, -0x5e,0x01,0x00,0x00,0x75,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0x7a,0x01,0x00,0x00,0x79,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x7d,0x01,0x00,0x00,0x59,0x01,0x00,0x00, -0x7c,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x68,0x01,0x00,0x00, -0x7f,0x01,0x00,0x00,0x66,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0x50,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0x7c,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x80,0x01,0x00,0x00, -0x7f,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x03,0x01,0x00,0x00, -0x81,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x2e,0x01,0x00,0x00,0x82,0x01,0x00,0x00,0x5e,0x01,0x00,0x00, -0x7d,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x82,0x01,0x00,0x00, -0x81,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x85,0x01,0x00,0x00,0x59,0x01,0x00,0x00,0x84,0x01,0x00,0x00, -0x41,0x00,0x08,0x00,0x68,0x01,0x00,0x00,0x87,0x01,0x00,0x00, -0x66,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0x50,0x01,0x00,0x00, -0xd0,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0x88,0x01,0x00,0x00,0x87,0x01,0x00,0x00, -0x73,0x00,0x04,0x00,0x03,0x01,0x00,0x00,0x89,0x01,0x00,0x00, -0x88,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x2e,0x01,0x00,0x00, -0x8a,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,0x85,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0x8a,0x01,0x00,0x00,0x89,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8d,0x01,0x00,0x00, -0x59,0x01,0x00,0x00,0x8c,0x01,0x00,0x00,0x41,0x00,0x08,0x00, -0x68,0x01,0x00,0x00,0x8f,0x01,0x00,0x00,0x66,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0x50,0x01,0x00,0x00,0xd0,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0x90,0x01,0x00,0x00,0x8f,0x01,0x00,0x00,0x73,0x00,0x04,0x00, -0x03,0x01,0x00,0x00,0x91,0x01,0x00,0x00,0x90,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x2e,0x01,0x00,0x00,0x92,0x01,0x00,0x00, -0x5e,0x01,0x00,0x00,0x8d,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0x92,0x01,0x00,0x00,0x91,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x95,0x01,0x00,0x00,0x59,0x01,0x00,0x00, -0x94,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x68,0x01,0x00,0x00, -0x97,0x01,0x00,0x00,0x66,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0x50,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x98,0x01,0x00,0x00, -0x97,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x03,0x01,0x00,0x00, -0x99,0x01,0x00,0x00,0x98,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x2e,0x01,0x00,0x00,0x9a,0x01,0x00,0x00,0x5e,0x01,0x00,0x00, -0x95,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x9a,0x01,0x00,0x00, -0x99,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9d,0x01,0x00,0x00,0x59,0x01,0x00,0x00,0x9c,0x01,0x00,0x00, -0x41,0x00,0x08,0x00,0x68,0x01,0x00,0x00,0x9f,0x01,0x00,0x00, -0x66,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0x50,0x01,0x00,0x00, -0xd0,0x00,0x00,0x00,0x7c,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0xa0,0x01,0x00,0x00,0x9f,0x01,0x00,0x00, -0x73,0x00,0x04,0x00,0x03,0x01,0x00,0x00,0xa1,0x01,0x00,0x00, -0xa0,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x2e,0x01,0x00,0x00, -0xa2,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,0x9d,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0xa2,0x01,0x00,0x00,0xa1,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa7,0x01,0x00,0x00, -0xf5,0x02,0x00,0x00,0xa5,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0x3e,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x40,0x01,0x00,0x00, -0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0xa8,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xab,0x01,0x00,0x00,0xf8,0x02,0x00,0x00,0xa9,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xae,0x01,0x00,0x00, -0xfc,0x02,0x00,0x00,0xac,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xb0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xb0,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xfe,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0x40,0x01,0x00,0x00,0x5a,0x02,0x00,0x00, -0xb3,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0xb6,0x01,0x00,0x00,0xfe,0x02,0x00,0x00,0x6c,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xb2,0x01,0x00,0x00,0xb3,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xb6,0x01,0x00,0x00, -0xb1,0x01,0x00,0x00,0xb2,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xb1,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xb8,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xb8,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x02,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0xb1,0x01,0x00,0x00,0xe4,0x01,0x00,0x00,0xbb,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xbe,0x01,0x00,0x00, -0x02,0x03,0x00,0x00,0x60,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xba,0x01,0x00,0x00,0xbb,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xbe,0x01,0x00,0x00,0xb9,0x01,0x00,0x00, -0xba,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xb9,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xc0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xc0,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x14,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0xb9,0x01,0x00,0x00, -0xe2,0x01,0x00,0x00,0xc1,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0xc6,0x01,0x00,0x00,0x14,0x03,0x00,0x00, -0x62,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xc2,0x01,0x00,0x00, -0xc1,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xc6,0x01,0x00,0x00,0xc1,0x01,0x00,0x00,0xc2,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xc1,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xcc,0x01,0x00,0x00,0x02,0x03,0x00,0x00, -0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xce,0x01,0x00,0x00,0xcc,0x01,0x00,0x00,0x14,0x03,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd0,0x01,0x00,0x00, -0x55,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xd2,0x01,0x00,0x00,0x02,0x03,0x00,0x00, -0x61,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd3,0x01,0x00,0x00,0xd0,0x01,0x00,0x00,0xd2,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd5,0x01,0x00,0x00, -0x64,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xd6,0x01,0x00,0x00,0xd3,0x01,0x00,0x00, -0xd5,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd8,0x01,0x00,0x00,0xd6,0x01,0x00,0x00,0x14,0x03,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xda,0x01,0x00,0x00, -0xd8,0x01,0x00,0x00,0xd9,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xdc,0x01,0x00,0x00,0xda,0x01,0x00,0x00, -0xfe,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x2e,0x01,0x00,0x00, -0xdd,0x01,0x00,0x00,0x29,0x01,0x00,0x00,0xdc,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0x03,0x01,0x00,0x00,0xde,0x01,0x00,0x00, -0xdd,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0xdf,0x01,0x00,0x00, -0xe0,0x01,0x00,0x00,0xca,0x01,0x00,0x00,0xce,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0xe0,0x01,0x00,0x00,0xde,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe2,0x01,0x00,0x00, -0x14,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xc0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xc2,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xbb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xbb,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xe4,0x01,0x00,0x00,0x02,0x03,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xb8,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xba,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xe6,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xe6,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x03,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0xba,0x01,0x00,0x00,0x12,0x02,0x00,0x00,0xe9,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xec,0x01,0x00,0x00, -0x03,0x03,0x00,0x00,0xbf,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xe8,0x01,0x00,0x00,0xe9,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xec,0x01,0x00,0x00,0xe7,0x01,0x00,0x00, -0xe8,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xe7,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xee,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xee,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x11,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0xe7,0x01,0x00,0x00, -0x10,0x02,0x00,0x00,0xef,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0xf4,0x01,0x00,0x00,0x11,0x03,0x00,0x00, -0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xf0,0x01,0x00,0x00, -0xef,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xf4,0x01,0x00,0x00,0xef,0x01,0x00,0x00,0xf0,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xef,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xfa,0x01,0x00,0x00,0x03,0x03,0x00,0x00, -0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xfc,0x01,0x00,0x00,0xfa,0x01,0x00,0x00,0x11,0x03,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfe,0x01,0x00,0x00, -0x59,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x01,0x02,0x00,0x00,0x03,0x03,0x00,0x00, -0x00,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x02,0x02,0x00,0x00,0xfe,0x01,0x00,0x00,0x01,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x04,0x02,0x00,0x00, -0x68,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x05,0x02,0x00,0x00,0x02,0x02,0x00,0x00, -0x04,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x07,0x02,0x00,0x00,0x05,0x02,0x00,0x00,0x11,0x03,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x09,0x02,0x00,0x00, -0x07,0x02,0x00,0x00,0x08,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x0b,0x02,0x00,0x00,0x09,0x02,0x00,0x00, -0xfe,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x2e,0x01,0x00,0x00, -0x0c,0x02,0x00,0x00,0x5e,0x01,0x00,0x00,0x0b,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0x03,0x01,0x00,0x00,0x0d,0x02,0x00,0x00, -0x0c,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xdf,0x01,0x00,0x00, -0x0e,0x02,0x00,0x00,0xf8,0x01,0x00,0x00,0xfc,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0x0e,0x02,0x00,0x00,0x0d,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x10,0x02,0x00,0x00, -0x11,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xee,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xf0,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xe9,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xe9,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x12,0x02,0x00,0x00,0x03,0x03,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xe6,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xe8,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x14,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x14,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x04,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0xe8,0x01,0x00,0x00,0x58,0x02,0x00,0x00,0x17,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x1a,0x02,0x00,0x00, -0x04,0x03,0x00,0x00,0xbf,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x16,0x02,0x00,0x00,0x17,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x1a,0x02,0x00,0x00,0x15,0x02,0x00,0x00, -0x16,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x15,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x1c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x1c,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x08,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0x15,0x02,0x00,0x00, -0x56,0x02,0x00,0x00,0x1f,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0x22,0x02,0x00,0x00,0x08,0x03,0x00,0x00, -0x60,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x1e,0x02,0x00,0x00, -0x1f,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x22,0x02,0x00,0x00,0x1d,0x02,0x00,0x00,0x1e,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x1d,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x24,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x24,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x0a,0x03,0x00,0x00, -0x3e,0x00,0x00,0x00,0x1d,0x02,0x00,0x00,0x54,0x02,0x00,0x00, -0x27,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0x2a,0x02,0x00,0x00,0x0a,0x03,0x00,0x00,0xbc,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x26,0x02,0x00,0x00,0x27,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x2a,0x02,0x00,0x00, -0x25,0x02,0x00,0x00,0x26,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x25,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x2c,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x2c,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x0c,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0x25,0x02,0x00,0x00,0x52,0x02,0x00,0x00,0x2d,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x32,0x02,0x00,0x00, -0x0c,0x03,0x00,0x00,0x62,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x2e,0x02,0x00,0x00,0x2d,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x32,0x02,0x00,0x00,0x2d,0x02,0x00,0x00, -0x2e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x2d,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x34,0x02,0x00,0x00, -0x04,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x36,0x02,0x00,0x00,0x34,0x02,0x00,0x00, -0x0a,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x38,0x02,0x00,0x00,0x36,0x02,0x00,0x00,0x37,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3a,0x02,0x00,0x00, -0x08,0x03,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3b,0x02,0x00,0x00,0x38,0x02,0x00,0x00, -0x3a,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x3d,0x02,0x00,0x00,0x3b,0x02,0x00,0x00,0x0c,0x03,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x41,0x02,0x00,0x00, -0x3a,0x02,0x00,0x00,0x0c,0x03,0x00,0x00,0x41,0x00,0x05,0x00, -0xdf,0x01,0x00,0x00,0x42,0x02,0x00,0x00,0xca,0x01,0x00,0x00, -0x41,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x03,0x01,0x00,0x00, -0x43,0x02,0x00,0x00,0x42,0x02,0x00,0x00,0x73,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0x44,0x02,0x00,0x00,0x43,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0xdf,0x01,0x00,0x00,0x49,0x02,0x00,0x00, -0xf8,0x01,0x00,0x00,0x36,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0x03,0x01,0x00,0x00,0x4a,0x02,0x00,0x00,0x49,0x02,0x00,0x00, -0x73,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x4b,0x02,0x00,0x00, -0x4a,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00, -0x4d,0x02,0x00,0x00,0xca,0x00,0x00,0x00,0x3d,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x4e,0x02,0x00,0x00, -0x4d,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,0xc4,0x00,0x00,0x00, -0x4f,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x44,0x02,0x00,0x00,0x4b,0x02,0x00,0x00,0x4e,0x02,0x00,0x00, -0x3e,0x00,0x03,0x00,0x4d,0x02,0x00,0x00,0x4f,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x52,0x02,0x00,0x00, -0x0c,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x2c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x2e,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x27,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x27,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x54,0x02,0x00,0x00,0x0a,0x03,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x24,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x26,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x1f,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x1f,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x56,0x02,0x00,0x00,0x08,0x03,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x1c,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x1e,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x17,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x17,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x58,0x02,0x00,0x00, -0x04,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x14,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x16,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0xb3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xb3,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x5a,0x02,0x00,0x00,0xfe,0x02,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xb0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xb2,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0xa8,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xd7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd7,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5c,0x02,0x00,0x00, -0xe4,0x02,0x00,0x00,0x6c,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xd4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd6,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x61,0x02,0x00,0x00, -0x55,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x62,0x02,0x00,0x00,0x96,0x00,0x00,0x00, -0x61,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x67,0x02,0x00,0x00,0x59,0x00,0x00,0x00,0xb9,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x68,0x02,0x00,0x00, -0xa8,0x00,0x00,0x00,0x67,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x6d,0x02,0x00,0x00,0x12,0x00,0x00,0x00, -0x6c,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x6e,0x02,0x00,0x00,0x6d,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x6f,0x02,0x00,0x00,0x0f,0x00,0x00,0x00, -0x6e,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x73,0x02,0x00,0x00,0x47,0x00,0x00,0x00,0x6e,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x75,0x02,0x00,0x00, -0x74,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x76,0x02,0x00,0x00,0x75,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x77,0x02,0x00,0x00, -0x73,0x02,0x00,0x00,0x76,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x78,0x02,0x00,0x00,0x6f,0x02,0x00,0x00, -0x77,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x7a,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x7a,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xe5,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0xd6,0x00,0x00,0x00,0xe0,0x02,0x00,0x00,0x7d,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x80,0x02,0x00,0x00, -0xe5,0x02,0x00,0x00,0xbf,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x7c,0x02,0x00,0x00,0x7d,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x80,0x02,0x00,0x00,0x7b,0x02,0x00,0x00, -0x7c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x7b,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x82,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x82,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xe6,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0x7b,0x02,0x00,0x00, -0xde,0x02,0x00,0x00,0x85,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0x88,0x02,0x00,0x00,0xe6,0x02,0x00,0x00, -0x60,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x84,0x02,0x00,0x00, -0x85,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x88,0x02,0x00,0x00,0x83,0x02,0x00,0x00,0x84,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x83,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x8c,0x02,0x00,0x00,0xe6,0x02,0x00,0x00, -0x61,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x8d,0x02,0x00,0x00,0x62,0x02,0x00,0x00,0x8c,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8f,0x02,0x00,0x00, -0x64,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x90,0x02,0x00,0x00,0x8d,0x02,0x00,0x00, -0x8f,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x94,0x02,0x00,0x00,0xe5,0x02,0x00,0x00,0x00,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x95,0x02,0x00,0x00, -0x68,0x02,0x00,0x00,0x94,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x97,0x02,0x00,0x00,0x68,0x00,0x00,0x00, -0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x98,0x02,0x00,0x00,0x95,0x02,0x00,0x00,0x97,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x9a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x9a,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xe8,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0x83,0x02,0x00,0x00, -0xdc,0x02,0x00,0x00,0x9d,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0xa0,0x02,0x00,0x00,0xe8,0x02,0x00,0x00, -0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x9c,0x02,0x00,0x00, -0x9d,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xa0,0x02,0x00,0x00,0x9b,0x02,0x00,0x00,0x9c,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x9b,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0xa2,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xa2,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xea,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0x9b,0x02,0x00,0x00,0xda,0x02,0x00,0x00, -0xa5,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0xa8,0x02,0x00,0x00,0xea,0x02,0x00,0x00,0x62,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xa4,0x02,0x00,0x00,0xa5,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xa8,0x02,0x00,0x00, -0xa3,0x02,0x00,0x00,0xa4,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xa3,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xab,0x02,0x00,0x00,0x90,0x02,0x00,0x00,0xea,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xae,0x02,0x00,0x00, -0xab,0x02,0x00,0x00,0x36,0x00,0x00,0x00,0xf7,0x00,0x03,0x00, -0xb0,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xae,0x02,0x00,0x00,0xaf,0x02,0x00,0x00,0xb0,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xaf,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xb3,0x02,0x00,0x00,0x98,0x02,0x00,0x00, -0xe8,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0xb4,0x02,0x00,0x00,0x12,0x00,0x00,0x00,0xd0,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb5,0x02,0x00,0x00, -0xb4,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0xb6,0x02,0x00,0x00,0xb3,0x02,0x00,0x00,0xb5,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0xb0,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xb0,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0xc2,0x00,0x00,0x00, -0xb7,0x02,0x00,0x00,0xae,0x02,0x00,0x00,0xa3,0x02,0x00,0x00, -0xb6,0x02,0x00,0x00,0xaf,0x02,0x00,0x00,0xf7,0x00,0x03,0x00, -0xb9,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xb7,0x02,0x00,0x00,0xb8,0x02,0x00,0x00,0xb9,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xb8,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xc1,0x02,0x00,0x00,0x98,0x02,0x00,0x00, -0xe8,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0xc3,0x02,0x00,0x00,0x12,0x00,0x00,0x00,0xc2,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xc4,0x02,0x00,0x00, -0xc3,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xc5,0x02,0x00,0x00,0xc1,0x02,0x00,0x00,0xc4,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc6,0x02,0x00,0x00, -0x78,0x02,0x00,0x00,0xc5,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xc8,0x02,0x00,0x00,0xc6,0x02,0x00,0x00, -0x90,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xca,0x02,0x00,0x00,0xc8,0x02,0x00,0x00,0xea,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xcc,0x02,0x00,0x00, -0xe5,0x02,0x00,0x00,0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xce,0x02,0x00,0x00,0xcc,0x02,0x00,0x00, -0xe8,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd0,0x02,0x00,0x00,0xce,0x02,0x00,0x00,0xcf,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd2,0x02,0x00,0x00, -0xe6,0x02,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xd3,0x02,0x00,0x00,0xd0,0x02,0x00,0x00, -0xd2,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd5,0x02,0x00,0x00,0xd3,0x02,0x00,0x00,0xea,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,0xd6,0x02,0x00,0x00, -0xca,0x00,0x00,0x00,0xd5,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0xd7,0x02,0x00,0x00,0xd6,0x02,0x00,0x00, -0x41,0x00,0x06,0x00,0x68,0x01,0x00,0x00,0xd8,0x02,0x00,0x00, -0xbd,0x02,0x00,0x00,0x34,0x00,0x00,0x00,0xca,0x02,0x00,0x00, -0x3e,0x00,0x03,0x00,0xd8,0x02,0x00,0x00,0xd7,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0xb9,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xb9,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xa5,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xa5,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xda,0x02,0x00,0x00,0xea,0x02,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xa2,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xa4,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x9d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x9d,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdc,0x02,0x00,0x00, -0xe8,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x9a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x9c,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x85,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x85,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xde,0x02,0x00,0x00,0xe6,0x02,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x82,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x84,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x7d,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x7d,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xe0,0x02,0x00,0x00,0xe5,0x02,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x7a,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x7c,0x02,0x00,0x00,0xfd,0x00,0x01,0x00, -0x38,0x00,0x01,0x00, -}; -const uint64_t matmul_q8_0_f32_aligned_len = 11200; - -unsigned char matmul_q8_0_f32_aligned_fp32_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0xeb,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00, -0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00, -0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64, -0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00, -0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0f,0x00,0x0f,0x00, -0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e, -0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x3d,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x0b,0x01,0x00,0x00, -0x29,0x01,0x00,0x00,0x5c,0x01,0x00,0x00,0x63,0x01,0x00,0x00, -0x4a,0x02,0x00,0x00,0x93,0x02,0x00,0x00,0x10,0x00,0x06,0x00, -0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x34,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x10,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x37,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x3d,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x4c,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x4f,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x53,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x60,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x62,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x6c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xa7,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xb9,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xbc,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x06,0x01,0x00,0x00,0x06,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x07,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x07,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x08,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x48,0x00,0x04,0x00,0x09,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x09,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0x09,0x01,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x0b,0x01,0x00,0x00,0x22,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0b,0x01,0x00,0x00, -0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x34,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x35,0x01,0x00,0x00,0x0b,0x00,0x00,0x00, -0x19,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x60,0x01,0x00,0x00, -0x06,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0x61,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x61,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x61,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x63,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x63,0x01,0x00,0x00,0x21,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x4a,0x02,0x00,0x00, -0x0b,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x90,0x02,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x04,0x00,0x91,0x02,0x00,0x00,0x00,0x00,0x00,0x00, -0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x91,0x02,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0x91,0x02,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x93,0x02,0x00,0x00,0x22,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x93,0x02,0x00,0x00, -0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00, -0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00, -0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x1e,0x00,0x10,0x00,0x10,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x11,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x11,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x21,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x2d,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x34,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x3d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x4c,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x4f,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x58,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x61,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x61,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x67,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x61,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x6d,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x72,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x77,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x78,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x77,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x7d,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x77,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x81,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x91,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x97,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa7,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0xa9,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xba,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0xb9,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbb,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xbc,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xbd,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xbb,0x00,0x00,0x00, -0xbc,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xbe,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xbd,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xbf,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0xba,0x00,0x00,0x00, -0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xc0,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xb8,0x00,0x00,0x00, -0xbf,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xc1,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc0,0x00,0x00,0x00, -0xbc,0x00,0x00,0x00,0x14,0x00,0x02,0x00,0xc2,0x00,0x00,0x00, -0x16,0x00,0x03,0x00,0xc4,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0xbf,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc7,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0xbc,0x00,0x00,0x00, -0x1c,0x00,0x04,0x00,0xc8,0x00,0x00,0x00,0xc4,0x00,0x00,0x00, -0xc7,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xc9,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0xcd,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0xc4,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0xd0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xff,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0x03,0x01,0x00,0x00, -0x10,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x04,0x01,0x00,0x00, -0x08,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x05,0x01,0x00,0x00,0x20,0x00,0x00,0x00, -0x1c,0x00,0x04,0x00,0x06,0x01,0x00,0x00,0x04,0x01,0x00,0x00, -0x05,0x01,0x00,0x00,0x1e,0x00,0x04,0x00,0x07,0x01,0x00,0x00, -0x03,0x01,0x00,0x00,0x06,0x01,0x00,0x00,0x1d,0x00,0x03,0x00, -0x08,0x01,0x00,0x00,0x07,0x01,0x00,0x00,0x1e,0x00,0x03,0x00, -0x09,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x20,0x00,0x04,0x00, -0x0a,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x09,0x01,0x00,0x00, -0x3b,0x00,0x04,0x00,0x0a,0x01,0x00,0x00,0x0b,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0d,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x03,0x01,0x00,0x00,0x17,0x00,0x04,0x00, -0x11,0x01,0x00,0x00,0xc4,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x16,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x04,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x25,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x26,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x25,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,0x27,0x01,0x00,0x00, -0xc4,0x00,0x00,0x00,0x26,0x01,0x00,0x00,0x20,0x00,0x04,0x00, -0x28,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x27,0x01,0x00,0x00, -0x3b,0x00,0x04,0x00,0x28,0x01,0x00,0x00,0x29,0x01,0x00,0x00, -0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x2d,0x01,0x00,0x00, -0x04,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x34,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0x33,0x00,0x06,0x00,0x09,0x00,0x00,0x00,0x35,0x01,0x00,0x00, -0x34,0x01,0x00,0x00,0x39,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x36,0x01,0x00,0x00, -0x51,0x00,0x00,0x00,0x35,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x37,0x01,0x00,0x00, -0x84,0x00,0x00,0x00,0x36,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x38,0x01,0x00,0x00, -0x86,0x00,0x00,0x00,0x37,0x01,0x00,0x00,0x6c,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x53,0x01,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x58,0x01,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x59,0x01,0x00,0x00, -0x84,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0x58,0x01,0x00,0x00, -0x1c,0x00,0x04,0x00,0x5a,0x01,0x00,0x00,0xc4,0x00,0x00,0x00, -0x59,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x5b,0x01,0x00,0x00, -0x04,0x00,0x00,0x00,0x5a,0x01,0x00,0x00,0x3b,0x00,0x04,0x00, -0x5b,0x01,0x00,0x00,0x5c,0x01,0x00,0x00,0x04,0x00,0x00,0x00, -0x17,0x00,0x04,0x00,0x5f,0x01,0x00,0x00,0xc4,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x60,0x01,0x00,0x00, -0x5f,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,0x61,0x01,0x00,0x00, -0x60,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x62,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x61,0x01,0x00,0x00,0x3b,0x00,0x04,0x00, -0x62,0x01,0x00,0x00,0x63,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x65,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0xc4,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x76,0x01,0x00,0x00,0x03,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x7c,0x01,0x00,0x00,0x51,0x00,0x00,0x00, -0x35,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x7d,0x01,0x00,0x00,0x84,0x00,0x00,0x00, -0x7c,0x01,0x00,0x00,0x77,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x7e,0x01,0x00,0x00,0x86,0x00,0x00,0x00, -0x7d,0x01,0x00,0x00,0x6c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x81,0x01,0x00,0x00,0x08,0x01,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x82,0x01,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x85,0x01,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x77,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xa0,0x01,0x00,0x00, -0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x1c,0x00,0x04,0x00,0xa1,0x01,0x00,0x00,0xc4,0x00,0x00,0x00, -0xa0,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0xa2,0x01,0x00,0x00, -0x07,0x00,0x00,0x00,0xa1,0x01,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xb2,0x01,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xcd,0x01,0x00,0x00,0x84,0x00,0x00,0x00, -0xbf,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x1c,0x00,0x04,0x00, -0xce,0x01,0x00,0x00,0xc4,0x00,0x00,0x00,0xcd,0x01,0x00,0x00, -0x20,0x00,0x04,0x00,0xcf,0x01,0x00,0x00,0x07,0x00,0x00,0x00, -0xce,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xd8,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0xb9,0x00,0x00,0x00, -0xbf,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xe0,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x0f,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x42,0x02,0x00,0x00,0x0d,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x4a,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0x1d,0x00,0x03,0x00,0x90,0x02,0x00,0x00,0xc4,0x00,0x00,0x00, -0x1e,0x00,0x03,0x00,0x91,0x02,0x00,0x00,0x90,0x02,0x00,0x00, -0x20,0x00,0x04,0x00,0x92,0x02,0x00,0x00,0x0c,0x00,0x00,0x00, -0x91,0x02,0x00,0x00,0x3b,0x00,0x04,0x00,0x92,0x02,0x00,0x00, -0x93,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x98,0x02,0x00,0x00,0x05,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xa5,0x02,0x00,0x00, -0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x05,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xc9,0x00,0x00,0x00, -0xca,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0xa2,0x01,0x00,0x00,0xa3,0x01,0x00,0x00,0x07,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0xcf,0x01,0x00,0x00,0xd0,0x01,0x00,0x00, -0x07,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x16,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x17,0x00,0x00,0x00, -0x16,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x17,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1e,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x21,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x28,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x27,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x29,0x00,0x00,0x00, -0x28,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x2a,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x29,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x2e,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00, -0x24,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x30,0x00,0x00,0x00, -0x2a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x35,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x36,0x00,0x00,0x00, -0x35,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x38,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00, -0x38,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x3a,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x3f,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x3e,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x3f,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x42,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x3b,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x47,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x4a,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x4c,0x00,0x00,0x00, -0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x4f,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x55,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x54,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00, -0x50,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x4f,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x64,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,0x63,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x68,0x00,0x00,0x00, -0x5d,0x00,0x00,0x00,0x67,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x6d,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x73,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x72,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x79,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x7d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x82,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x81,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x83,0x00,0x00,0x00, -0x82,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0x83,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x87,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x87,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8a,0x00,0x00,0x00, -0x47,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x8a,0x00,0x00,0x00, -0x83,0x00,0x00,0x00,0x0c,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x8e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x26,0x00,0x00,0x00, -0x88,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x91,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x93,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x93,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x96,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x98,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x98,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9a,0x00,0x00,0x00, -0x96,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x94,0x00,0x00,0x00, -0x9a,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9d,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9e,0x00,0x00,0x00, -0x9d,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0xa2,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xa4,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0xa4,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa8,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0xa7,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0xaa,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0xaa,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00, -0xa8,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xad,0x00,0x00,0x00,0xa5,0x00,0x00,0x00, -0xac,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xaf,0x00,0x00,0x00,0xad,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb0,0x00,0x00,0x00, -0xaf,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xb2,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb2,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xb9,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0xd1,0x00,0x00,0x00, -0xb3,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0xc3,0x00,0x00,0x00,0xb9,0x02,0x00,0x00,0xc1,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xb4,0x00,0x00,0x00,0xb3,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xc3,0x00,0x00,0x00, -0xb3,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xb3,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00, -0xce,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0xb9,0x02,0x00,0x00, -0x3e,0x00,0x03,0x00,0xce,0x00,0x00,0x00,0xcc,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd1,0x00,0x00,0x00, -0xb9,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xb2,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb4,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xd4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xd4,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xd2,0x02,0x00,0x00,0xb0,0x00,0x00,0x00,0xb4,0x00,0x00,0x00, -0x87,0x01,0x00,0x00,0xd7,0x00,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xce,0x02,0x00,0x00,0x9e,0x00,0x00,0x00, -0xb4,0x00,0x00,0x00,0x84,0x01,0x00,0x00,0xd7,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xba,0x02,0x00,0x00, -0x84,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0x32,0x02,0x00,0x00, -0xd7,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0xdb,0x00,0x00,0x00,0xba,0x02,0x00,0x00,0x8e,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xd6,0x00,0x00,0x00,0xd7,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xdb,0x00,0x00,0x00, -0xd5,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xd5,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xdd,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xca,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0xd5,0x00,0x00,0x00,0x3a,0x01,0x00,0x00,0xde,0x00,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xe3,0x00,0x00,0x00, -0xca,0x02,0x00,0x00,0x37,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xdf,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xe3,0x00,0x00,0x00,0xde,0x00,0x00,0x00, -0xdf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe8,0x00,0x00,0x00, -0x73,0x00,0x00,0x00,0xca,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,0xe8,0x00,0x00,0x00, -0x99,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xec,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xed,0x00,0x00,0x00, -0xce,0x02,0x00,0x00,0xec,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xef,0x00,0x00,0x00,0xed,0x00,0x00,0x00, -0x6e,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xf5,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0xf4,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf7,0x00,0x00,0x00, -0x6e,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,0xf5,0x00,0x00,0x00, -0xf7,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xfc,0x00,0x00,0x00,0xef,0x00,0x00,0x00,0xfb,0x00,0x00,0x00, -0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x00,0x01,0x00,0x00, -0xef,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x41,0x00,0x07,0x00,0x0d,0x01,0x00,0x00, -0x0e,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0xfc,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x03,0x01,0x00,0x00,0x0f,0x01,0x00,0x00,0x0e,0x01,0x00,0x00, -0x73,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x10,0x01,0x00,0x00, -0x0f,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x16,0x01,0x00,0x00, -0x17,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0xfc,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x01,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0x04,0x01,0x00,0x00,0x18,0x01,0x00,0x00, -0x17,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x19,0x01,0x00,0x00,0x18,0x01,0x00,0x00,0x6f,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0x1a,0x01,0x00,0x00,0x19,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1d,0x01,0x00,0x00, -0x01,0x01,0x00,0x00,0x39,0x00,0x00,0x00,0x41,0x00,0x08,0x00, -0x16,0x01,0x00,0x00,0x1e,0x01,0x00,0x00,0x0b,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0xd0,0x00,0x00,0x00, -0x1d,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x04,0x01,0x00,0x00, -0x1f,0x01,0x00,0x00,0x1e,0x01,0x00,0x00,0x72,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x20,0x01,0x00,0x00,0x1f,0x01,0x00,0x00, -0x6f,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x21,0x01,0x00,0x00, -0x20,0x01,0x00,0x00,0x50,0x00,0x05,0x00,0x11,0x01,0x00,0x00, -0x22,0x01,0x00,0x00,0x1a,0x01,0x00,0x00,0x21,0x01,0x00,0x00, -0x8e,0x00,0x05,0x00,0x11,0x01,0x00,0x00,0x24,0x01,0x00,0x00, -0x22,0x01,0x00,0x00,0x10,0x01,0x00,0x00,0x51,0x00,0x05,0x00, -0xc4,0x00,0x00,0x00,0x2c,0x01,0x00,0x00,0x24,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x2d,0x01,0x00,0x00, -0x2e,0x01,0x00,0x00,0x29,0x01,0x00,0x00,0xf8,0x00,0x00,0x00, -0x3e,0x00,0x03,0x00,0x2e,0x01,0x00,0x00,0x2c,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x30,0x01,0x00,0x00, -0xf8,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x51,0x00,0x05,0x00, -0xc4,0x00,0x00,0x00,0x32,0x01,0x00,0x00,0x24,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x2d,0x01,0x00,0x00, -0x33,0x01,0x00,0x00,0x29,0x01,0x00,0x00,0x30,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0x33,0x01,0x00,0x00,0x32,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3a,0x01,0x00,0x00, -0xca,0x02,0x00,0x00,0x38,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x3c,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x3c,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xcb,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0xdf,0x00,0x00,0x00, -0x80,0x01,0x00,0x00,0x3d,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0x42,0x01,0x00,0x00,0xcb,0x02,0x00,0x00, -0xa7,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x3e,0x01,0x00,0x00, -0x3d,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x42,0x01,0x00,0x00,0x3d,0x01,0x00,0x00,0x3e,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x3d,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x47,0x01,0x00,0x00,0x7e,0x00,0x00,0x00, -0xcb,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x4a,0x01,0x00,0x00,0x47,0x01,0x00,0x00,0xab,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4b,0x01,0x00,0x00, -0x4a,0x01,0x00,0x00,0x77,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x4c,0x01,0x00,0x00,0xd2,0x02,0x00,0x00, -0x4b,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x4e,0x01,0x00,0x00,0x4c,0x01,0x00,0x00,0x79,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x54,0x01,0x00,0x00, -0x47,0x01,0x00,0x00,0x53,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x56,0x01,0x00,0x00,0x79,0x00,0x00,0x00, -0x77,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x57,0x01,0x00,0x00,0x54,0x01,0x00,0x00,0x56,0x01,0x00,0x00, -0x41,0x00,0x07,0x00,0x65,0x01,0x00,0x00,0x66,0x01,0x00,0x00, -0x63,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0x4e,0x01,0x00,0x00, -0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0x67,0x01,0x00,0x00,0x66,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x2d,0x01,0x00,0x00,0x68,0x01,0x00,0x00,0x5c,0x01,0x00,0x00, -0x57,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x68,0x01,0x00,0x00, -0x67,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x6a,0x01,0x00,0x00,0x57,0x01,0x00,0x00,0x39,0x00,0x00,0x00, -0x41,0x00,0x07,0x00,0x65,0x01,0x00,0x00,0x6c,0x01,0x00,0x00, -0x63,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0x4e,0x01,0x00,0x00, -0x39,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0x6d,0x01,0x00,0x00,0x6c,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x2d,0x01,0x00,0x00,0x6e,0x01,0x00,0x00,0x5c,0x01,0x00,0x00, -0x6a,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x6e,0x01,0x00,0x00, -0x6d,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x70,0x01,0x00,0x00,0x57,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x41,0x00,0x07,0x00,0x65,0x01,0x00,0x00,0x72,0x01,0x00,0x00, -0x63,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0x4e,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0x73,0x01,0x00,0x00,0x72,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x2d,0x01,0x00,0x00,0x74,0x01,0x00,0x00,0x5c,0x01,0x00,0x00, -0x70,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x74,0x01,0x00,0x00, -0x73,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x77,0x01,0x00,0x00,0x57,0x01,0x00,0x00,0x76,0x01,0x00,0x00, -0x41,0x00,0x07,0x00,0x65,0x01,0x00,0x00,0x79,0x01,0x00,0x00, -0x63,0x01,0x00,0x00,0x34,0x00,0x00,0x00,0x4e,0x01,0x00,0x00, -0x76,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0x7a,0x01,0x00,0x00,0x79,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x2d,0x01,0x00,0x00,0x7b,0x01,0x00,0x00,0x5c,0x01,0x00,0x00, -0x77,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x7b,0x01,0x00,0x00, -0x7a,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x80,0x01,0x00,0x00,0xcb,0x02,0x00,0x00,0x7e,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0x3c,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x3e,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x81,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x84,0x01,0x00,0x00,0xce,0x02,0x00,0x00, -0x82,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x87,0x01,0x00,0x00,0xd2,0x02,0x00,0x00,0x85,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0x89,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x89,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xd4,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0x3e,0x01,0x00,0x00, -0x30,0x02,0x00,0x00,0x8c,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0x8f,0x01,0x00,0x00,0xd4,0x02,0x00,0x00, -0x6c,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x8b,0x01,0x00,0x00, -0x8c,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x8f,0x01,0x00,0x00,0x8a,0x01,0x00,0x00,0x8b,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x8a,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0x91,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x91,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xd8,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0x8a,0x01,0x00,0x00,0xbc,0x01,0x00,0x00, -0x94,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0x97,0x01,0x00,0x00,0xd8,0x02,0x00,0x00,0x60,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x93,0x01,0x00,0x00,0x94,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x97,0x01,0x00,0x00, -0x92,0x01,0x00,0x00,0x93,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x92,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x99,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x99,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xea,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0x92,0x01,0x00,0x00,0xba,0x01,0x00,0x00,0x9a,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x9f,0x01,0x00,0x00, -0xea,0x02,0x00,0x00,0x62,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x9b,0x01,0x00,0x00,0x9a,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x9f,0x01,0x00,0x00,0x9a,0x01,0x00,0x00, -0x9b,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x9a,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa5,0x01,0x00,0x00, -0xd8,0x02,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa7,0x01,0x00,0x00,0xa5,0x01,0x00,0x00, -0xea,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa9,0x01,0x00,0x00,0x55,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xab,0x01,0x00,0x00, -0xd8,0x02,0x00,0x00,0x61,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xac,0x01,0x00,0x00,0xa9,0x01,0x00,0x00, -0xab,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xae,0x01,0x00,0x00,0x64,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xaf,0x01,0x00,0x00, -0xac,0x01,0x00,0x00,0xae,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xb1,0x01,0x00,0x00,0xaf,0x01,0x00,0x00, -0xea,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xb3,0x01,0x00,0x00,0xb1,0x01,0x00,0x00,0xb2,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb5,0x01,0x00,0x00, -0xb3,0x01,0x00,0x00,0xd4,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0x2d,0x01,0x00,0x00,0xb6,0x01,0x00,0x00,0x29,0x01,0x00,0x00, -0xb5,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0xb7,0x01,0x00,0x00,0xb6,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0xcd,0x00,0x00,0x00,0xb8,0x01,0x00,0x00,0xa3,0x01,0x00,0x00, -0xa7,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xb8,0x01,0x00,0x00, -0xb7,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xba,0x01,0x00,0x00,0xea,0x02,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x99,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x9b,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x94,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x94,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xbc,0x01,0x00,0x00,0xd8,0x02,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x91,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x93,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xbe,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xbe,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xd9,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0x93,0x01,0x00,0x00,0xea,0x01,0x00,0x00, -0xc1,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0xc4,0x01,0x00,0x00,0xd9,0x02,0x00,0x00,0xbf,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xc0,0x01,0x00,0x00,0xc1,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xc4,0x01,0x00,0x00, -0xbf,0x01,0x00,0x00,0xc0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xbf,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xc6,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xc6,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xe7,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0xbf,0x01,0x00,0x00,0xe8,0x01,0x00,0x00,0xc7,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xcc,0x01,0x00,0x00, -0xe7,0x02,0x00,0x00,0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xc8,0x01,0x00,0x00,0xc7,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xcc,0x01,0x00,0x00,0xc7,0x01,0x00,0x00, -0xc8,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xc7,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd2,0x01,0x00,0x00, -0xd9,0x02,0x00,0x00,0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xd4,0x01,0x00,0x00,0xd2,0x01,0x00,0x00, -0xe7,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd6,0x01,0x00,0x00,0x59,0x00,0x00,0x00,0xb9,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd9,0x01,0x00,0x00, -0xd9,0x02,0x00,0x00,0xd8,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xda,0x01,0x00,0x00,0xd6,0x01,0x00,0x00, -0xd9,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xdc,0x01,0x00,0x00,0x68,0x00,0x00,0x00,0xbc,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdd,0x01,0x00,0x00, -0xda,0x01,0x00,0x00,0xdc,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xdf,0x01,0x00,0x00,0xdd,0x01,0x00,0x00, -0xe7,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xe1,0x01,0x00,0x00,0xdf,0x01,0x00,0x00,0xe0,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe3,0x01,0x00,0x00, -0xe1,0x01,0x00,0x00,0xd4,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0x2d,0x01,0x00,0x00,0xe4,0x01,0x00,0x00,0x5c,0x01,0x00,0x00, -0xe3,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0xe5,0x01,0x00,0x00,0xe4,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0xcd,0x00,0x00,0x00,0xe6,0x01,0x00,0x00,0xd0,0x01,0x00,0x00, -0xd4,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xe6,0x01,0x00,0x00, -0xe5,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xe8,0x01,0x00,0x00,0xe7,0x02,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xc6,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xc8,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xc1,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xc1,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xea,0x01,0x00,0x00,0xd9,0x02,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xbe,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xc0,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xec,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xec,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xda,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0xc0,0x01,0x00,0x00,0x2e,0x02,0x00,0x00, -0xef,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0xf2,0x01,0x00,0x00,0xda,0x02,0x00,0x00,0xbf,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xee,0x01,0x00,0x00,0xef,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xf2,0x01,0x00,0x00, -0xed,0x01,0x00,0x00,0xee,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xed,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xf4,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xf4,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xde,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0xed,0x01,0x00,0x00,0x2c,0x02,0x00,0x00,0xf7,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xfa,0x01,0x00,0x00, -0xde,0x02,0x00,0x00,0x60,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xf6,0x01,0x00,0x00,0xf7,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xfa,0x01,0x00,0x00,0xf5,0x01,0x00,0x00, -0xf6,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xf5,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xfc,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xfc,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xe0,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0xf5,0x01,0x00,0x00, -0x2a,0x02,0x00,0x00,0xff,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0x02,0x02,0x00,0x00,0xe0,0x02,0x00,0x00, -0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xfe,0x01,0x00,0x00, -0xff,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x02,0x02,0x00,0x00,0xfd,0x01,0x00,0x00,0xfe,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xfd,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0x04,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x04,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xe2,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0xfd,0x01,0x00,0x00,0x28,0x02,0x00,0x00, -0x05,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0x0a,0x02,0x00,0x00,0xe2,0x02,0x00,0x00,0x62,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x06,0x02,0x00,0x00,0x05,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x0a,0x02,0x00,0x00, -0x05,0x02,0x00,0x00,0x06,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x05,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x0c,0x02,0x00,0x00,0xda,0x02,0x00,0x00,0xbc,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0e,0x02,0x00,0x00, -0x0c,0x02,0x00,0x00,0xe0,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x10,0x02,0x00,0x00,0x0e,0x02,0x00,0x00, -0x0f,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x12,0x02,0x00,0x00,0xde,0x02,0x00,0x00,0x62,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x13,0x02,0x00,0x00, -0x10,0x02,0x00,0x00,0x12,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x15,0x02,0x00,0x00,0x13,0x02,0x00,0x00, -0xe2,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x19,0x02,0x00,0x00,0x12,0x02,0x00,0x00,0xe2,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,0x1a,0x02,0x00,0x00, -0xa3,0x01,0x00,0x00,0x19,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0x1b,0x02,0x00,0x00,0x1a,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,0x20,0x02,0x00,0x00, -0xd0,0x01,0x00,0x00,0x0e,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0x21,0x02,0x00,0x00,0x20,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,0x23,0x02,0x00,0x00, -0xca,0x00,0x00,0x00,0x15,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0x24,0x02,0x00,0x00,0x23,0x02,0x00,0x00, -0x0c,0x00,0x08,0x00,0xc4,0x00,0x00,0x00,0x25,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x1b,0x02,0x00,0x00, -0x21,0x02,0x00,0x00,0x24,0x02,0x00,0x00,0x3e,0x00,0x03,0x00, -0x23,0x02,0x00,0x00,0x25,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x28,0x02,0x00,0x00,0xe2,0x02,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x04,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x06,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0xff,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xff,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2a,0x02,0x00,0x00, -0xe0,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xfc,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xfe,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xf7,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xf7,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x2c,0x02,0x00,0x00,0xde,0x02,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xf4,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xf6,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xef,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xef,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x2e,0x02,0x00,0x00,0xda,0x02,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xec,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xee,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0x8c,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x8c,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x30,0x02,0x00,0x00, -0xd4,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x89,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x8b,0x01,0x00,0x00, -0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x81,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xd7,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xd7,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x32,0x02,0x00,0x00,0xba,0x02,0x00,0x00, -0x6c,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd4,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xd6,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x37,0x02,0x00,0x00,0x55,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x38,0x02,0x00,0x00,0x96,0x00,0x00,0x00,0x37,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3d,0x02,0x00,0x00, -0x59,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3e,0x02,0x00,0x00,0xa8,0x00,0x00,0x00, -0x3d,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x43,0x02,0x00,0x00,0x12,0x00,0x00,0x00,0x42,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x44,0x02,0x00,0x00, -0x43,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x45,0x02,0x00,0x00,0x0f,0x00,0x00,0x00,0x44,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x49,0x02,0x00,0x00, -0x47,0x00,0x00,0x00,0x44,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0x4b,0x02,0x00,0x00,0x4a,0x02,0x00,0x00, -0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x4c,0x02,0x00,0x00,0x4b,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x4d,0x02,0x00,0x00,0x49,0x02,0x00,0x00, -0x4c,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x4e,0x02,0x00,0x00,0x45,0x02,0x00,0x00,0x4d,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x50,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x50,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xbb,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0xd6,0x00,0x00,0x00, -0xb6,0x02,0x00,0x00,0x53,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0x56,0x02,0x00,0x00,0xbb,0x02,0x00,0x00, -0xbf,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x52,0x02,0x00,0x00, -0x53,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x56,0x02,0x00,0x00,0x51,0x02,0x00,0x00,0x52,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x51,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x58,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x58,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xbc,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0x51,0x02,0x00,0x00,0xb4,0x02,0x00,0x00, -0x5b,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0x5e,0x02,0x00,0x00,0xbc,0x02,0x00,0x00,0x60,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x5a,0x02,0x00,0x00,0x5b,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x5e,0x02,0x00,0x00, -0x59,0x02,0x00,0x00,0x5a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x59,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x62,0x02,0x00,0x00,0xbc,0x02,0x00,0x00,0x61,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x63,0x02,0x00,0x00, -0x38,0x02,0x00,0x00,0x62,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x65,0x02,0x00,0x00,0x64,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x66,0x02,0x00,0x00,0x63,0x02,0x00,0x00,0x65,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6a,0x02,0x00,0x00, -0xbb,0x02,0x00,0x00,0xd8,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x6b,0x02,0x00,0x00,0x3e,0x02,0x00,0x00, -0x6a,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x6d,0x02,0x00,0x00,0x68,0x00,0x00,0x00,0xbc,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6e,0x02,0x00,0x00, -0x6b,0x02,0x00,0x00,0x6d,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x70,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x70,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xbe,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0x59,0x02,0x00,0x00,0xb2,0x02,0x00,0x00, -0x73,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00, -0x76,0x02,0x00,0x00,0xbe,0x02,0x00,0x00,0xbc,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x72,0x02,0x00,0x00,0x73,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x76,0x02,0x00,0x00, -0x71,0x02,0x00,0x00,0x72,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x71,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x78,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x78,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xc0,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0x71,0x02,0x00,0x00,0xb0,0x02,0x00,0x00,0x7b,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x7e,0x02,0x00,0x00, -0xc0,0x02,0x00,0x00,0x62,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x7a,0x02,0x00,0x00,0x7b,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x7e,0x02,0x00,0x00,0x79,0x02,0x00,0x00, -0x7a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x79,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x81,0x02,0x00,0x00, -0x66,0x02,0x00,0x00,0xc0,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc2,0x00,0x00,0x00,0x84,0x02,0x00,0x00,0x81,0x02,0x00,0x00, -0x36,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x86,0x02,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x84,0x02,0x00,0x00, -0x85,0x02,0x00,0x00,0x86,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x85,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x89,0x02,0x00,0x00,0x6e,0x02,0x00,0x00,0xbe,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x8a,0x02,0x00,0x00, -0x12,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x8b,0x02,0x00,0x00,0x8a,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x8c,0x02,0x00,0x00, -0x89,0x02,0x00,0x00,0x8b,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x86,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x86,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0xc2,0x00,0x00,0x00,0x8d,0x02,0x00,0x00, -0x84,0x02,0x00,0x00,0x79,0x02,0x00,0x00,0x8c,0x02,0x00,0x00, -0x85,0x02,0x00,0x00,0xf7,0x00,0x03,0x00,0x8f,0x02,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x8d,0x02,0x00,0x00, -0x8e,0x02,0x00,0x00,0x8f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x8e,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x97,0x02,0x00,0x00,0x6e,0x02,0x00,0x00,0xbe,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x99,0x02,0x00,0x00, -0x12,0x00,0x00,0x00,0x98,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x9a,0x02,0x00,0x00,0x99,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9b,0x02,0x00,0x00, -0x97,0x02,0x00,0x00,0x9a,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9c,0x02,0x00,0x00,0x4e,0x02,0x00,0x00, -0x9b,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9e,0x02,0x00,0x00,0x9c,0x02,0x00,0x00,0x66,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa0,0x02,0x00,0x00, -0x9e,0x02,0x00,0x00,0xc0,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa2,0x02,0x00,0x00,0xbb,0x02,0x00,0x00, -0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa4,0x02,0x00,0x00,0xa2,0x02,0x00,0x00,0xbe,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa6,0x02,0x00,0x00, -0xa4,0x02,0x00,0x00,0xa5,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa8,0x02,0x00,0x00,0xbc,0x02,0x00,0x00, -0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa9,0x02,0x00,0x00,0xa6,0x02,0x00,0x00,0xa8,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xab,0x02,0x00,0x00, -0xa9,0x02,0x00,0x00,0xc0,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0xcd,0x00,0x00,0x00,0xac,0x02,0x00,0x00,0xca,0x00,0x00,0x00, -0xab,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00, -0xad,0x02,0x00,0x00,0xac,0x02,0x00,0x00,0x41,0x00,0x06,0x00, -0x65,0x01,0x00,0x00,0xae,0x02,0x00,0x00,0x93,0x02,0x00,0x00, -0x34,0x00,0x00,0x00,0xa0,0x02,0x00,0x00,0x3e,0x00,0x03,0x00, -0xae,0x02,0x00,0x00,0xad,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x8f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x8f,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x7b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x7b,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xb0,0x02,0x00,0x00,0xc0,0x02,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x78,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x7a,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x73,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x73,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xb2,0x02,0x00,0x00,0xbe,0x02,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x70,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x72,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x5b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x5b,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb4,0x02,0x00,0x00, -0xbc,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x58,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x5a,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x53,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x53,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xb6,0x02,0x00,0x00,0xbb,0x02,0x00,0x00,0xd0,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x50,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x52,0x02,0x00,0x00,0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00, - -}; -const uint64_t matmul_q8_0_f32_aligned_fp32_len = 10452; - -unsigned char matmul_q8_0_f32_fp32_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0xeb,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00, -0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00, -0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64, -0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00, -0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0f,0x00,0x0f,0x00, -0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e, -0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x3d,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x0a,0x01,0x00,0x00, -0x28,0x01,0x00,0x00,0x59,0x01,0x00,0x00,0x64,0x01,0x00,0x00, -0x4a,0x02,0x00,0x00,0x93,0x02,0x00,0x00,0x10,0x00,0x06,0x00, -0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x10,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x10,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x34,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x10,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x37,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x3d,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x4c,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x4f,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x53,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x60,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x62,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x6c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xa6,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xb8,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xbb,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x05,0x01,0x00,0x00,0x06,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x06,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x06,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x07,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x48,0x00,0x04,0x00,0x08,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x08,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0x08,0x01,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x0a,0x01,0x00,0x00,0x22,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0a,0x01,0x00,0x00, -0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x33,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x34,0x01,0x00,0x00,0x0b,0x00,0x00,0x00, -0x19,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x61,0x01,0x00,0x00, -0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0x62,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x62,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x62,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x64,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x64,0x01,0x00,0x00,0x21,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x4a,0x02,0x00,0x00, -0x0b,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x90,0x02,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x04,0x00,0x91,0x02,0x00,0x00,0x00,0x00,0x00,0x00, -0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x91,0x02,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0x91,0x02,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x93,0x02,0x00,0x00,0x22,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x93,0x02,0x00,0x00, -0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00, -0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00, -0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x1e,0x00,0x10,0x00,0x10,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x11,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x11,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x21,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x2d,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x34,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x3d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x4c,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x4f,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x58,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x61,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x61,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x67,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x61,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x6d,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x72,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x77,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x7c,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x80,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x85,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x90,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x96,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0xa1,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0xa8,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xb7,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xb8,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x4f,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbc,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0xbb,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbd,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbe,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0xbd,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbf,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0xbe,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc0,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0xbb,0x00,0x00,0x00, -0x14,0x00,0x02,0x00,0xc1,0x00,0x00,0x00,0x16,0x00,0x03,0x00, -0xc3,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xc4,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xc5,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x1c,0x00,0x04,0x00, -0xc7,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0xc6,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0xc8,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0xc7,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0xc3,0x00,0x00,0x00, -0xcb,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0xcc,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xc3,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0xcf,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xf3,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xfa,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x16,0x00,0x03,0x00,0x02,0x01,0x00,0x00,0x10,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x03,0x01,0x00,0x00,0x08,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x04,0x01,0x00,0x00,0x20,0x00,0x00,0x00,0x1c,0x00,0x04,0x00, -0x05,0x01,0x00,0x00,0x03,0x01,0x00,0x00,0x04,0x01,0x00,0x00, -0x1e,0x00,0x04,0x00,0x06,0x01,0x00,0x00,0x02,0x01,0x00,0x00, -0x05,0x01,0x00,0x00,0x1d,0x00,0x03,0x00,0x07,0x01,0x00,0x00, -0x06,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,0x08,0x01,0x00,0x00, -0x07,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x09,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x08,0x01,0x00,0x00,0x3b,0x00,0x04,0x00, -0x09,0x01,0x00,0x00,0x0a,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x0c,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x02,0x01,0x00,0x00,0x17,0x00,0x04,0x00,0x10,0x01,0x00,0x00, -0xc3,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x15,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x03,0x01,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x24,0x01,0x00,0x00, -0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x25,0x01,0x00,0x00, -0x84,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x24,0x01,0x00,0x00, -0x1c,0x00,0x04,0x00,0x26,0x01,0x00,0x00,0xc3,0x00,0x00,0x00, -0x25,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x27,0x01,0x00,0x00, -0x04,0x00,0x00,0x00,0x26,0x01,0x00,0x00,0x3b,0x00,0x04,0x00, -0x27,0x01,0x00,0x00,0x28,0x01,0x00,0x00,0x04,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x2c,0x01,0x00,0x00,0x04,0x00,0x00,0x00, -0xc3,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x33,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00, -0x09,0x00,0x00,0x00,0x34,0x01,0x00,0x00,0x33,0x01,0x00,0x00, -0x39,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x35,0x01,0x00,0x00,0x51,0x00,0x00,0x00, -0x34,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x36,0x01,0x00,0x00,0x84,0x00,0x00,0x00, -0x35,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x37,0x01,0x00,0x00,0x86,0x00,0x00,0x00, -0x36,0x01,0x00,0x00,0x6c,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x55,0x01,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x56,0x01,0x00,0x00,0x84,0x00,0x00,0x00, -0xa6,0x00,0x00,0x00,0x55,0x01,0x00,0x00,0x1c,0x00,0x04,0x00, -0x57,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,0x56,0x01,0x00,0x00, -0x20,0x00,0x04,0x00,0x58,0x01,0x00,0x00,0x04,0x00,0x00,0x00, -0x57,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x58,0x01,0x00,0x00, -0x59,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x5d,0x01,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x1d,0x00,0x03,0x00, -0x61,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,0x1e,0x00,0x03,0x00, -0x62,0x01,0x00,0x00,0x61,0x01,0x00,0x00,0x20,0x00,0x04,0x00, -0x63,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x62,0x01,0x00,0x00, -0x3b,0x00,0x04,0x00,0x63,0x01,0x00,0x00,0x64,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x6f,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x77,0x01,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x7c,0x01,0x00,0x00,0x51,0x00,0x00,0x00, -0x34,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x7d,0x01,0x00,0x00,0x84,0x00,0x00,0x00, -0x7c,0x01,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x7e,0x01,0x00,0x00,0x86,0x00,0x00,0x00, -0x7d,0x01,0x00,0x00,0x6c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x81,0x01,0x00,0x00,0x08,0x01,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x82,0x01,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x85,0x01,0x00,0x00, -0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xa0,0x01,0x00,0x00, -0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x1c,0x00,0x04,0x00,0xa1,0x01,0x00,0x00,0xc3,0x00,0x00,0x00, -0xa0,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0xa2,0x01,0x00,0x00, -0x07,0x00,0x00,0x00,0xa1,0x01,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xb2,0x01,0x00,0x00,0x80,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xcd,0x01,0x00,0x00,0x84,0x00,0x00,0x00, -0xbe,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x1c,0x00,0x04,0x00, -0xce,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,0xcd,0x01,0x00,0x00, -0x20,0x00,0x04,0x00,0xcf,0x01,0x00,0x00,0x07,0x00,0x00,0x00, -0xce,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xd8,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0xb8,0x00,0x00,0x00, -0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xe0,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x0f,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x42,0x02,0x00,0x00,0x0d,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x4a,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0x1d,0x00,0x03,0x00,0x90,0x02,0x00,0x00,0xc3,0x00,0x00,0x00, -0x1e,0x00,0x03,0x00,0x91,0x02,0x00,0x00,0x90,0x02,0x00,0x00, -0x20,0x00,0x04,0x00,0x92,0x02,0x00,0x00,0x0c,0x00,0x00,0x00, -0x91,0x02,0x00,0x00,0x3b,0x00,0x04,0x00,0x92,0x02,0x00,0x00, -0x93,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x98,0x02,0x00,0x00,0x05,0x00,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xa5,0x02,0x00,0x00, -0x84,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x05,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xc8,0x00,0x00,0x00, -0xc9,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0xa2,0x01,0x00,0x00,0xa3,0x01,0x00,0x00,0x07,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0xcf,0x01,0x00,0x00,0xd0,0x01,0x00,0x00, -0x07,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x16,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x17,0x00,0x00,0x00, -0x16,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x17,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1e,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x21,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x28,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x27,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x29,0x00,0x00,0x00, -0x28,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x2a,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x29,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x2e,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00, -0x24,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x30,0x00,0x00,0x00, -0x2a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x35,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x36,0x00,0x00,0x00, -0x35,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x38,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00, -0x38,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x3a,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x3f,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x3e,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x3f,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x42,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x3b,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x47,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x4a,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x4c,0x00,0x00,0x00, -0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x4f,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x55,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x54,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00, -0x50,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x4f,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x64,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,0x63,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x68,0x00,0x00,0x00, -0x5d,0x00,0x00,0x00,0x67,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x6d,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x73,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x72,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x78,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x7c,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x81,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x80,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x82,0x00,0x00,0x00, -0x81,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x83,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0x82,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x89,0x00,0x00,0x00, -0x47,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,0x89,0x00,0x00,0x00, -0x82,0x00,0x00,0x00,0x0c,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x8d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x26,0x00,0x00,0x00, -0x87,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x90,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x92,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x92,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x95,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x97,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x97,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x99,0x00,0x00,0x00, -0x95,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x93,0x00,0x00,0x00, -0x99,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9c,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x83,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9d,0x00,0x00,0x00, -0x9c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0xa1,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xa3,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0xa3,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa7,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0xa6,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0xa9,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0xa9,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xab,0x00,0x00,0x00, -0xa7,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0xa4,0x00,0x00,0x00, -0xab,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xae,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0x83,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xaf,0x00,0x00,0x00, -0xae,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xb1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb1,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xb9,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0xd0,0x00,0x00,0x00, -0xb2,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0xc2,0x00,0x00,0x00,0xb9,0x02,0x00,0x00,0xc0,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xb3,0x00,0x00,0x00,0xb2,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xc2,0x00,0x00,0x00, -0xb2,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xb2,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00, -0xcd,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0xb9,0x02,0x00,0x00, -0x3e,0x00,0x03,0x00,0xcd,0x00,0x00,0x00,0xcb,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd0,0x00,0x00,0x00, -0xb9,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xb1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb3,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xd3,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xd3,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xd2,0x02,0x00,0x00,0xaf,0x00,0x00,0x00,0xb3,0x00,0x00,0x00, -0x87,0x01,0x00,0x00,0xd6,0x00,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xce,0x02,0x00,0x00,0x9d,0x00,0x00,0x00, -0xb3,0x00,0x00,0x00,0x84,0x01,0x00,0x00,0xd6,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xba,0x02,0x00,0x00, -0x83,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0x32,0x02,0x00,0x00, -0xd6,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0xda,0x00,0x00,0x00,0xba,0x02,0x00,0x00,0x8d,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xd5,0x00,0x00,0x00,0xd6,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xda,0x00,0x00,0x00, -0xd4,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xd4,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xdc,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xdc,0x00,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xca,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0xd4,0x00,0x00,0x00,0x39,0x01,0x00,0x00,0xdd,0x00,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xe2,0x00,0x00,0x00, -0xca,0x02,0x00,0x00,0x37,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xde,0x00,0x00,0x00,0xdd,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xe2,0x00,0x00,0x00,0xdd,0x00,0x00,0x00, -0xde,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdd,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe7,0x00,0x00,0x00, -0x73,0x00,0x00,0x00,0xca,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xea,0x00,0x00,0x00,0xe7,0x00,0x00,0x00, -0x98,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xeb,0x00,0x00,0x00,0xea,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xec,0x00,0x00,0x00, -0xce,0x02,0x00,0x00,0xeb,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xee,0x00,0x00,0x00,0xec,0x00,0x00,0x00, -0x6e,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xf4,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,0xf3,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf6,0x00,0x00,0x00, -0x6e,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,0xf4,0x00,0x00,0x00, -0xf6,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xfb,0x00,0x00,0x00,0xee,0x00,0x00,0x00,0xfa,0x00,0x00,0x00, -0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xff,0x00,0x00,0x00, -0xee,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0xff,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x41,0x00,0x07,0x00,0x0c,0x01,0x00,0x00, -0x0d,0x01,0x00,0x00,0x0a,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0xfb,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x02,0x01,0x00,0x00,0x0e,0x01,0x00,0x00,0x0d,0x01,0x00,0x00, -0x73,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x0f,0x01,0x00,0x00, -0x0e,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x15,0x01,0x00,0x00, -0x16,0x01,0x00,0x00,0x0a,0x01,0x00,0x00,0x34,0x00,0x00,0x00, -0xfb,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x00,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0x03,0x01,0x00,0x00,0x17,0x01,0x00,0x00, -0x16,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x18,0x01,0x00,0x00,0x17,0x01,0x00,0x00,0x6f,0x00,0x04,0x00, -0xc3,0x00,0x00,0x00,0x19,0x01,0x00,0x00,0x18,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1c,0x01,0x00,0x00, -0x00,0x01,0x00,0x00,0x39,0x00,0x00,0x00,0x41,0x00,0x08,0x00, -0x15,0x01,0x00,0x00,0x1d,0x01,0x00,0x00,0x0a,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0xcf,0x00,0x00,0x00, -0x1c,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x03,0x01,0x00,0x00, -0x1e,0x01,0x00,0x00,0x1d,0x01,0x00,0x00,0x72,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x1f,0x01,0x00,0x00,0x1e,0x01,0x00,0x00, -0x6f,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x20,0x01,0x00,0x00, -0x1f,0x01,0x00,0x00,0x50,0x00,0x05,0x00,0x10,0x01,0x00,0x00, -0x21,0x01,0x00,0x00,0x19,0x01,0x00,0x00,0x20,0x01,0x00,0x00, -0x8e,0x00,0x05,0x00,0x10,0x01,0x00,0x00,0x23,0x01,0x00,0x00, -0x21,0x01,0x00,0x00,0x0f,0x01,0x00,0x00,0x51,0x00,0x05,0x00, -0xc3,0x00,0x00,0x00,0x2b,0x01,0x00,0x00,0x23,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x2c,0x01,0x00,0x00, -0x2d,0x01,0x00,0x00,0x28,0x01,0x00,0x00,0xf7,0x00,0x00,0x00, -0x3e,0x00,0x03,0x00,0x2d,0x01,0x00,0x00,0x2b,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2f,0x01,0x00,0x00, -0xf7,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x51,0x00,0x05,0x00, -0xc3,0x00,0x00,0x00,0x31,0x01,0x00,0x00,0x23,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x2c,0x01,0x00,0x00, -0x32,0x01,0x00,0x00,0x28,0x01,0x00,0x00,0x2f,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0x32,0x01,0x00,0x00,0x31,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x39,0x01,0x00,0x00, -0xca,0x02,0x00,0x00,0x37,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xdc,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x3b,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x3b,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xcb,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0xde,0x00,0x00,0x00, -0x80,0x01,0x00,0x00,0x3e,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0x41,0x01,0x00,0x00,0xcb,0x02,0x00,0x00, -0xa6,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x3d,0x01,0x00,0x00, -0x3e,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x41,0x01,0x00,0x00,0x3c,0x01,0x00,0x00,0x3d,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x3c,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x45,0x01,0x00,0x00,0xa7,0x00,0x00,0x00, -0x7d,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x47,0x01,0x00,0x00,0x45,0x01,0x00,0x00,0xcb,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x48,0x01,0x00,0x00, -0x12,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x49,0x01,0x00,0x00,0x48,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x4a,0x01,0x00,0x00, -0x47,0x01,0x00,0x00,0x49,0x01,0x00,0x00,0xf7,0x00,0x03,0x00, -0x4c,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x4a,0x01,0x00,0x00,0x4b,0x01,0x00,0x00,0x4c,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x4b,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x4f,0x01,0x00,0x00,0xba,0x02,0x00,0x00, -0x78,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0x51,0x01,0x00,0x00,0x4f,0x01,0x00,0x00,0x8d,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x4c,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x4c,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0xc1,0x00,0x00,0x00, -0x52,0x01,0x00,0x00,0x4a,0x01,0x00,0x00,0x3c,0x01,0x00,0x00, -0x51,0x01,0x00,0x00,0x4b,0x01,0x00,0x00,0xf7,0x00,0x03,0x00, -0x54,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x52,0x01,0x00,0x00,0x53,0x01,0x00,0x00,0x73,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x53,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x5c,0x01,0x00,0x00,0x7d,0x00,0x00,0x00, -0xcb,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x5e,0x01,0x00,0x00,0x5c,0x01,0x00,0x00,0x5d,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x60,0x01,0x00,0x00, -0x5e,0x01,0x00,0x00,0x78,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x6b,0x01,0x00,0x00,0x5c,0x01,0x00,0x00, -0xaa,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x6c,0x01,0x00,0x00,0xd2,0x02,0x00,0x00,0x6b,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6e,0x01,0x00,0x00, -0x6c,0x01,0x00,0x00,0x78,0x00,0x00,0x00,0x41,0x00,0x06,0x00, -0x6f,0x01,0x00,0x00,0x70,0x01,0x00,0x00,0x64,0x01,0x00,0x00, -0x34,0x00,0x00,0x00,0x6e,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc3,0x00,0x00,0x00,0x71,0x01,0x00,0x00,0x70,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x2c,0x01,0x00,0x00,0x72,0x01,0x00,0x00, -0x59,0x01,0x00,0x00,0x60,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0x72,0x01,0x00,0x00,0x71,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0x54,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x73,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x76,0x01,0x00,0x00, -0x7d,0x00,0x00,0x00,0xcb,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x78,0x01,0x00,0x00,0x76,0x01,0x00,0x00, -0x77,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x7a,0x01,0x00,0x00,0x78,0x01,0x00,0x00,0x78,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x2c,0x01,0x00,0x00,0x7b,0x01,0x00,0x00, -0x59,0x01,0x00,0x00,0x7a,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0x7b,0x01,0x00,0x00,0xcb,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x54,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x54,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0x3e,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x3e,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x80,0x01,0x00,0x00,0xcb,0x02,0x00,0x00,0x7e,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0x3b,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x3d,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x81,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x84,0x01,0x00,0x00,0xce,0x02,0x00,0x00, -0x82,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x87,0x01,0x00,0x00,0xd2,0x02,0x00,0x00,0x85,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0x89,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x89,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xd4,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0x3d,0x01,0x00,0x00, -0x30,0x02,0x00,0x00,0x8c,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0x8f,0x01,0x00,0x00,0xd4,0x02,0x00,0x00, -0x6c,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x8b,0x01,0x00,0x00, -0x8c,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x8f,0x01,0x00,0x00,0x8a,0x01,0x00,0x00,0x8b,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x8a,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0x91,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x91,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xd8,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0x8a,0x01,0x00,0x00,0xbc,0x01,0x00,0x00, -0x94,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0x97,0x01,0x00,0x00,0xd8,0x02,0x00,0x00,0x60,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x93,0x01,0x00,0x00,0x94,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x97,0x01,0x00,0x00, -0x92,0x01,0x00,0x00,0x93,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x92,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x99,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x99,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xea,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0x92,0x01,0x00,0x00,0xba,0x01,0x00,0x00,0x9a,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x9f,0x01,0x00,0x00, -0xea,0x02,0x00,0x00,0x62,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x9b,0x01,0x00,0x00,0x9a,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x9f,0x01,0x00,0x00,0x9a,0x01,0x00,0x00, -0x9b,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x9a,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa5,0x01,0x00,0x00, -0xd8,0x02,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa7,0x01,0x00,0x00,0xa5,0x01,0x00,0x00, -0xea,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa9,0x01,0x00,0x00,0x55,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xab,0x01,0x00,0x00, -0xd8,0x02,0x00,0x00,0x61,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xac,0x01,0x00,0x00,0xa9,0x01,0x00,0x00, -0xab,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xae,0x01,0x00,0x00,0x64,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xaf,0x01,0x00,0x00, -0xac,0x01,0x00,0x00,0xae,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xb1,0x01,0x00,0x00,0xaf,0x01,0x00,0x00, -0xea,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xb3,0x01,0x00,0x00,0xb1,0x01,0x00,0x00,0xb2,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb5,0x01,0x00,0x00, -0xb3,0x01,0x00,0x00,0xd4,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0x2c,0x01,0x00,0x00,0xb6,0x01,0x00,0x00,0x28,0x01,0x00,0x00, -0xb5,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00, -0xb7,0x01,0x00,0x00,0xb6,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0xcc,0x00,0x00,0x00,0xb8,0x01,0x00,0x00,0xa3,0x01,0x00,0x00, -0xa7,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xb8,0x01,0x00,0x00, -0xb7,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xba,0x01,0x00,0x00,0xea,0x02,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x99,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x9b,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x94,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x94,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xbc,0x01,0x00,0x00,0xd8,0x02,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x91,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x93,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xbe,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xbe,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xd9,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0x93,0x01,0x00,0x00,0xea,0x01,0x00,0x00, -0xc1,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0xc4,0x01,0x00,0x00,0xd9,0x02,0x00,0x00,0xbe,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xc0,0x01,0x00,0x00,0xc1,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xc4,0x01,0x00,0x00, -0xbf,0x01,0x00,0x00,0xc0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xbf,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xc6,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xc6,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xe7,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0xbf,0x01,0x00,0x00,0xe8,0x01,0x00,0x00,0xc7,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xcc,0x01,0x00,0x00, -0xe7,0x02,0x00,0x00,0xbb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xc8,0x01,0x00,0x00,0xc7,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xcc,0x01,0x00,0x00,0xc7,0x01,0x00,0x00, -0xc8,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xc7,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd2,0x01,0x00,0x00, -0xd9,0x02,0x00,0x00,0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xd4,0x01,0x00,0x00,0xd2,0x01,0x00,0x00, -0xe7,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd6,0x01,0x00,0x00,0x59,0x00,0x00,0x00,0xb8,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd9,0x01,0x00,0x00, -0xd9,0x02,0x00,0x00,0xd8,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xda,0x01,0x00,0x00,0xd6,0x01,0x00,0x00, -0xd9,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xdc,0x01,0x00,0x00,0x68,0x00,0x00,0x00,0xbb,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdd,0x01,0x00,0x00, -0xda,0x01,0x00,0x00,0xdc,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xdf,0x01,0x00,0x00,0xdd,0x01,0x00,0x00, -0xe7,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xe1,0x01,0x00,0x00,0xdf,0x01,0x00,0x00,0xe0,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe3,0x01,0x00,0x00, -0xe1,0x01,0x00,0x00,0xd4,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0x2c,0x01,0x00,0x00,0xe4,0x01,0x00,0x00,0x59,0x01,0x00,0x00, -0xe3,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00, -0xe5,0x01,0x00,0x00,0xe4,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0xcc,0x00,0x00,0x00,0xe6,0x01,0x00,0x00,0xd0,0x01,0x00,0x00, -0xd4,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xe6,0x01,0x00,0x00, -0xe5,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xe8,0x01,0x00,0x00,0xe7,0x02,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xc6,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xc8,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xc1,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xc1,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xea,0x01,0x00,0x00,0xd9,0x02,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xbe,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xc0,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0xec,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xec,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xda,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0xc0,0x01,0x00,0x00,0x2e,0x02,0x00,0x00, -0xef,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0xf2,0x01,0x00,0x00,0xda,0x02,0x00,0x00,0xbe,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xee,0x01,0x00,0x00,0xef,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xf2,0x01,0x00,0x00, -0xed,0x01,0x00,0x00,0xee,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xed,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xf4,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xf4,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xde,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0xed,0x01,0x00,0x00,0x2c,0x02,0x00,0x00,0xf7,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xfa,0x01,0x00,0x00, -0xde,0x02,0x00,0x00,0x60,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xf6,0x01,0x00,0x00,0xf7,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xfa,0x01,0x00,0x00,0xf5,0x01,0x00,0x00, -0xf6,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xf5,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xfc,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xfc,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xe0,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0xf5,0x01,0x00,0x00, -0x2a,0x02,0x00,0x00,0xff,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0x02,0x02,0x00,0x00,0xe0,0x02,0x00,0x00, -0xbb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xfe,0x01,0x00,0x00, -0xff,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x02,0x02,0x00,0x00,0xfd,0x01,0x00,0x00,0xfe,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xfd,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0x04,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x04,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xe2,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0xfd,0x01,0x00,0x00,0x28,0x02,0x00,0x00, -0x05,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0x0a,0x02,0x00,0x00,0xe2,0x02,0x00,0x00,0x62,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x06,0x02,0x00,0x00,0x05,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x0a,0x02,0x00,0x00, -0x05,0x02,0x00,0x00,0x06,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x05,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x0c,0x02,0x00,0x00,0xda,0x02,0x00,0x00,0xbb,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0e,0x02,0x00,0x00, -0x0c,0x02,0x00,0x00,0xe0,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x10,0x02,0x00,0x00,0x0e,0x02,0x00,0x00, -0x0f,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x12,0x02,0x00,0x00,0xde,0x02,0x00,0x00,0x62,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x13,0x02,0x00,0x00, -0x10,0x02,0x00,0x00,0x12,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x15,0x02,0x00,0x00,0x13,0x02,0x00,0x00, -0xe2,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x19,0x02,0x00,0x00,0x12,0x02,0x00,0x00,0xe2,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,0x1a,0x02,0x00,0x00, -0xa3,0x01,0x00,0x00,0x19,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc3,0x00,0x00,0x00,0x1b,0x02,0x00,0x00,0x1a,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,0x20,0x02,0x00,0x00, -0xd0,0x01,0x00,0x00,0x0e,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc3,0x00,0x00,0x00,0x21,0x02,0x00,0x00,0x20,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,0x23,0x02,0x00,0x00, -0xc9,0x00,0x00,0x00,0x15,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0xc3,0x00,0x00,0x00,0x24,0x02,0x00,0x00,0x23,0x02,0x00,0x00, -0x0c,0x00,0x08,0x00,0xc3,0x00,0x00,0x00,0x25,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x1b,0x02,0x00,0x00, -0x21,0x02,0x00,0x00,0x24,0x02,0x00,0x00,0x3e,0x00,0x03,0x00, -0x23,0x02,0x00,0x00,0x25,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x28,0x02,0x00,0x00,0xe2,0x02,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x04,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x06,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0xff,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xff,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2a,0x02,0x00,0x00, -0xe0,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xfc,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xfe,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0xf7,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xf7,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x2c,0x02,0x00,0x00,0xde,0x02,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xf4,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xf6,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xef,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xef,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x2e,0x02,0x00,0x00,0xda,0x02,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xec,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xee,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0x8c,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x8c,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x30,0x02,0x00,0x00, -0xd4,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x89,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x8b,0x01,0x00,0x00, -0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x81,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xd6,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xd6,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x32,0x02,0x00,0x00,0xba,0x02,0x00,0x00, -0x6c,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd3,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xd5,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x37,0x02,0x00,0x00,0x55,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x38,0x02,0x00,0x00,0x95,0x00,0x00,0x00,0x37,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3d,0x02,0x00,0x00, -0x59,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3e,0x02,0x00,0x00,0xa7,0x00,0x00,0x00, -0x3d,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x43,0x02,0x00,0x00,0x12,0x00,0x00,0x00,0x42,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x44,0x02,0x00,0x00, -0x43,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x45,0x02,0x00,0x00,0x0f,0x00,0x00,0x00,0x44,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x49,0x02,0x00,0x00, -0x47,0x00,0x00,0x00,0x44,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0x4b,0x02,0x00,0x00,0x4a,0x02,0x00,0x00, -0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x4c,0x02,0x00,0x00,0x4b,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x4d,0x02,0x00,0x00,0x49,0x02,0x00,0x00, -0x4c,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x4e,0x02,0x00,0x00,0x45,0x02,0x00,0x00,0x4d,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x50,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x50,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xbb,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0xd5,0x00,0x00,0x00, -0xb6,0x02,0x00,0x00,0x53,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0x56,0x02,0x00,0x00,0xbb,0x02,0x00,0x00, -0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x52,0x02,0x00,0x00, -0x53,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x56,0x02,0x00,0x00,0x51,0x02,0x00,0x00,0x52,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x51,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x58,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x58,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xbc,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0x51,0x02,0x00,0x00,0xb4,0x02,0x00,0x00, -0x5b,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0x5e,0x02,0x00,0x00,0xbc,0x02,0x00,0x00,0x60,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x5a,0x02,0x00,0x00,0x5b,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x5e,0x02,0x00,0x00, -0x59,0x02,0x00,0x00,0x5a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x59,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x62,0x02,0x00,0x00,0xbc,0x02,0x00,0x00,0x61,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x63,0x02,0x00,0x00, -0x38,0x02,0x00,0x00,0x62,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x65,0x02,0x00,0x00,0x64,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x66,0x02,0x00,0x00,0x63,0x02,0x00,0x00,0x65,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6a,0x02,0x00,0x00, -0xbb,0x02,0x00,0x00,0xd8,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x6b,0x02,0x00,0x00,0x3e,0x02,0x00,0x00, -0x6a,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x6d,0x02,0x00,0x00,0x68,0x00,0x00,0x00,0xbb,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6e,0x02,0x00,0x00, -0x6b,0x02,0x00,0x00,0x6d,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x70,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x70,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xbe,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0x59,0x02,0x00,0x00,0xb2,0x02,0x00,0x00, -0x73,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00, -0x76,0x02,0x00,0x00,0xbe,0x02,0x00,0x00,0xbb,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x72,0x02,0x00,0x00,0x73,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x76,0x02,0x00,0x00, -0x71,0x02,0x00,0x00,0x72,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x71,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x78,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x78,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xc0,0x02,0x00,0x00,0x3e,0x00,0x00,0x00, -0x71,0x02,0x00,0x00,0xb0,0x02,0x00,0x00,0x7b,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x7e,0x02,0x00,0x00, -0xc0,0x02,0x00,0x00,0x62,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x7a,0x02,0x00,0x00,0x7b,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x7e,0x02,0x00,0x00,0x79,0x02,0x00,0x00, -0x7a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x79,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x81,0x02,0x00,0x00, -0x66,0x02,0x00,0x00,0xc0,0x02,0x00,0x00,0xb0,0x00,0x05,0x00, -0xc1,0x00,0x00,0x00,0x84,0x02,0x00,0x00,0x81,0x02,0x00,0x00, -0x36,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x86,0x02,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x84,0x02,0x00,0x00, -0x85,0x02,0x00,0x00,0x86,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x85,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x89,0x02,0x00,0x00,0x6e,0x02,0x00,0x00,0xbe,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x8a,0x02,0x00,0x00, -0x12,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x8b,0x02,0x00,0x00,0x8a,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x8c,0x02,0x00,0x00, -0x89,0x02,0x00,0x00,0x8b,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x86,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x86,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0xc1,0x00,0x00,0x00,0x8d,0x02,0x00,0x00, -0x84,0x02,0x00,0x00,0x79,0x02,0x00,0x00,0x8c,0x02,0x00,0x00, -0x85,0x02,0x00,0x00,0xf7,0x00,0x03,0x00,0x8f,0x02,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x8d,0x02,0x00,0x00, -0x8e,0x02,0x00,0x00,0x8f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x8e,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x97,0x02,0x00,0x00,0x6e,0x02,0x00,0x00,0xbe,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x99,0x02,0x00,0x00, -0x12,0x00,0x00,0x00,0x98,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x9a,0x02,0x00,0x00,0x99,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9b,0x02,0x00,0x00, -0x97,0x02,0x00,0x00,0x9a,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9c,0x02,0x00,0x00,0x4e,0x02,0x00,0x00, -0x9b,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9e,0x02,0x00,0x00,0x9c,0x02,0x00,0x00,0x66,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa0,0x02,0x00,0x00, -0x9e,0x02,0x00,0x00,0xc0,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa2,0x02,0x00,0x00,0xbb,0x02,0x00,0x00, -0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa4,0x02,0x00,0x00,0xa2,0x02,0x00,0x00,0xbe,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa6,0x02,0x00,0x00, -0xa4,0x02,0x00,0x00,0xa5,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa8,0x02,0x00,0x00,0xbc,0x02,0x00,0x00, -0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa9,0x02,0x00,0x00,0xa6,0x02,0x00,0x00,0xa8,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xab,0x02,0x00,0x00, -0xa9,0x02,0x00,0x00,0xc0,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0xcc,0x00,0x00,0x00,0xac,0x02,0x00,0x00,0xc9,0x00,0x00,0x00, -0xab,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00, -0xad,0x02,0x00,0x00,0xac,0x02,0x00,0x00,0x41,0x00,0x06,0x00, -0x6f,0x01,0x00,0x00,0xae,0x02,0x00,0x00,0x93,0x02,0x00,0x00, -0x34,0x00,0x00,0x00,0xa0,0x02,0x00,0x00,0x3e,0x00,0x03,0x00, -0xae,0x02,0x00,0x00,0xad,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x8f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x8f,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x7b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x7b,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xb0,0x02,0x00,0x00,0xc0,0x02,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x78,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x7a,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x73,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x73,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xb2,0x02,0x00,0x00,0xbe,0x02,0x00,0x00, -0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x70,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0x72,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x5b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x5b,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb4,0x02,0x00,0x00, -0xbc,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x58,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x5a,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x53,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x53,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xb6,0x02,0x00,0x00,0xbb,0x02,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x50,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0x52,0x02,0x00,0x00,0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00, - -}; -const uint64_t matmul_q8_0_f32_fp32_len = 10488; - -unsigned char mul_f32_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0x67,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00, -0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30, -0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x0f,0x00,0x0a,0x00,0x05,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00, -0x17,0x00,0x00,0x00,0x2f,0x01,0x00,0x00,0x3f,0x01,0x00,0x00, -0x4b,0x01,0x00,0x00,0x56,0x01,0x00,0x00,0x10,0x00,0x06,0x00, -0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x00,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x05,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x30,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x0d,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x0e,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x3c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x11,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x48,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x13,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x4c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x54,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x16,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x58,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x17,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x5c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x19,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x64,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x1a,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x15,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x2f,0x01,0x00,0x00, -0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x3c,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x04,0x00,0x3d,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x3d,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0x3d,0x01,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x3f,0x01,0x00,0x00,0x22,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x3f,0x01,0x00,0x00, -0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x48,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x04,0x00,0x49,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x49,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0x49,0x01,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x4b,0x01,0x00,0x00,0x22,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x4b,0x01,0x00,0x00, -0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x53,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x04,0x00,0x54,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x54,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0x54,0x01,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x56,0x01,0x00,0x00,0x22,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x56,0x01,0x00,0x00, -0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x61,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00, -0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x16,0x00,0x03,0x00,0x14,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x1e,0x00,0x1e,0x00,0x15,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x16,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x16,0x00,0x00,0x00, -0x17,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00, -0x18,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x18,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x1a,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x18,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x18,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x18,0x00,0x00,0x00, -0x58,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x18,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x18,0x00,0x00,0x00,0x63,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x18,0x00,0x00,0x00, -0x69,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x18,0x00,0x00,0x00,0xad,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x18,0x00,0x00,0x00,0xb1,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x18,0x00,0x00,0x00, -0xb6,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x18,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x18,0x00,0x00,0x00,0xc0,0x00,0x00,0x00, -0x0a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x18,0x00,0x00,0x00, -0xc4,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x18,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x18,0x00,0x00,0x00,0xce,0x00,0x00,0x00, -0x0d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x18,0x00,0x00,0x00, -0xd7,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x18,0x00,0x00,0x00,0xda,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x18,0x00,0x00,0x00,0xde,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x18,0x00,0x00,0x00, -0x15,0x01,0x00,0x00,0x18,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x18,0x00,0x00,0x00,0x1a,0x01,0x00,0x00,0x17,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x18,0x00,0x00,0x00,0x20,0x01,0x00,0x00, -0x16,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x18,0x00,0x00,0x00, -0x26,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x17,0x00,0x04,0x00, -0x2d,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x2e,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0x2d,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x2e,0x01,0x00,0x00, -0x2f,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x30,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x31,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x18,0x00,0x00,0x00, -0x34,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x14,0x00,0x02,0x00, -0x37,0x01,0x00,0x00,0x1d,0x00,0x03,0x00,0x3c,0x01,0x00,0x00, -0x14,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x3d,0x01,0x00,0x00, -0x3c,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x3e,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x3d,0x01,0x00,0x00,0x3b,0x00,0x04,0x00, -0x3e,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x18,0x00,0x00,0x00,0x40,0x01,0x00,0x00, -0x19,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x48,0x01,0x00,0x00, -0x14,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x49,0x01,0x00,0x00, -0x48,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x4a,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x49,0x01,0x00,0x00,0x3b,0x00,0x04,0x00, -0x4a,0x01,0x00,0x00,0x4b,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x50,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x53,0x01,0x00,0x00, -0x14,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x54,0x01,0x00,0x00, -0x53,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x55,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x54,0x01,0x00,0x00,0x3b,0x00,0x04,0x00, -0x55,0x01,0x00,0x00,0x56,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x5f,0x01,0x00,0x00, -0x00,0x02,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x60,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x2c,0x00,0x06,0x00, -0x2d,0x01,0x00,0x00,0x61,0x01,0x00,0x00,0x5f,0x01,0x00,0x00, -0x60,0x01,0x00,0x00,0x60,0x01,0x00,0x00,0x36,0x00,0x05,0x00, -0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00, -0xf7,0x00,0x03,0x00,0x62,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0xfb,0x00,0x03,0x00,0x30,0x01,0x00,0x00,0x63,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x63,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x31,0x01,0x00,0x00,0x32,0x01,0x00,0x00,0x2f,0x01,0x00,0x00, -0x30,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x33,0x01,0x00,0x00,0x32,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0x35,0x01,0x00,0x00,0x17,0x00,0x00,0x00, -0x34,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x36,0x01,0x00,0x00,0x35,0x01,0x00,0x00,0xae,0x00,0x05,0x00, -0x37,0x01,0x00,0x00,0x38,0x01,0x00,0x00,0x33,0x01,0x00,0x00, -0x36,0x01,0x00,0x00,0xf7,0x00,0x03,0x00,0x3a,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x38,0x01,0x00,0x00, -0x39,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x39,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x62,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x3a,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0x41,0x01,0x00,0x00,0x17,0x00,0x00,0x00, -0x40,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x42,0x01,0x00,0x00,0x41,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0x71,0x01,0x00,0x00,0x17,0x00,0x00,0x00, -0xd7,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x72,0x01,0x00,0x00,0x71,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0x73,0x01,0x00,0x00,0x17,0x00,0x00,0x00, -0xda,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x74,0x01,0x00,0x00,0x73,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x75,0x01,0x00,0x00,0x72,0x01,0x00,0x00, -0x74,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x76,0x01,0x00,0x00,0x17,0x00,0x00,0x00,0xde,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x77,0x01,0x00,0x00, -0x76,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x78,0x01,0x00,0x00,0x75,0x01,0x00,0x00,0x77,0x01,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x79,0x01,0x00,0x00, -0x33,0x01,0x00,0x00,0x78,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x7d,0x01,0x00,0x00,0x79,0x01,0x00,0x00, -0x72,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x80,0x01,0x00,0x00,0x7d,0x01,0x00,0x00,0x74,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x83,0x01,0x00,0x00, -0x80,0x01,0x00,0x00,0x77,0x01,0x00,0x00,0x82,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x86,0x01,0x00,0x00,0x33,0x01,0x00,0x00, -0x83,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x8b,0x01,0x00,0x00,0x74,0x01,0x00,0x00,0x77,0x01,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8c,0x01,0x00,0x00, -0x86,0x01,0x00,0x00,0x8b,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x90,0x01,0x00,0x00,0x8c,0x01,0x00,0x00, -0x74,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x93,0x01,0x00,0x00,0x90,0x01,0x00,0x00,0x77,0x01,0x00,0x00, -0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x98,0x01,0x00,0x00, -0x86,0x01,0x00,0x00,0x93,0x01,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9b,0x01,0x00,0x00,0x98,0x01,0x00,0x00, -0x77,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa4,0x01,0x00,0x00,0x9b,0x01,0x00,0x00,0x77,0x01,0x00,0x00, -0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa5,0x01,0x00,0x00, -0x98,0x01,0x00,0x00,0xa4,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0xa7,0x01,0x00,0x00,0x17,0x00,0x00,0x00, -0x15,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xa8,0x01,0x00,0x00,0xa7,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa9,0x01,0x00,0x00,0x79,0x01,0x00,0x00, -0xa8,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0xab,0x01,0x00,0x00,0x17,0x00,0x00,0x00,0x1a,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xac,0x01,0x00,0x00, -0xab,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xad,0x01,0x00,0x00,0x8c,0x01,0x00,0x00,0xac,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xae,0x01,0x00,0x00, -0xa9,0x01,0x00,0x00,0xad,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0xb0,0x01,0x00,0x00,0x17,0x00,0x00,0x00, -0x20,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xb1,0x01,0x00,0x00,0xb0,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xb2,0x01,0x00,0x00,0x9b,0x01,0x00,0x00, -0xb1,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xb3,0x01,0x00,0x00,0xae,0x01,0x00,0x00,0xb2,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0xb5,0x01,0x00,0x00, -0x17,0x00,0x00,0x00,0x26,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xb6,0x01,0x00,0x00,0xb5,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb7,0x01,0x00,0x00, -0xa5,0x01,0x00,0x00,0xb6,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xb8,0x01,0x00,0x00,0xb3,0x01,0x00,0x00, -0xb7,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x47,0x01,0x00,0x00,0x42,0x01,0x00,0x00,0xb8,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0xc2,0x01,0x00,0x00, -0x17,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xc3,0x01,0x00,0x00,0xc2,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0xc4,0x01,0x00,0x00, -0x17,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xc5,0x01,0x00,0x00,0xc4,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc6,0x01,0x00,0x00, -0xc3,0x01,0x00,0x00,0xc5,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0xc7,0x01,0x00,0x00,0x17,0x00,0x00,0x00, -0x21,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xc8,0x01,0x00,0x00,0xc7,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xc9,0x01,0x00,0x00,0xc6,0x01,0x00,0x00, -0xc8,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xca,0x01,0x00,0x00,0x33,0x01,0x00,0x00,0xc9,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xce,0x01,0x00,0x00, -0xca,0x01,0x00,0x00,0xc3,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xd1,0x01,0x00,0x00,0xce,0x01,0x00,0x00, -0xc5,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd4,0x01,0x00,0x00,0xd1,0x01,0x00,0x00,0xc8,0x01,0x00,0x00, -0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd7,0x01,0x00,0x00, -0x33,0x01,0x00,0x00,0xd4,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xdc,0x01,0x00,0x00,0xc5,0x01,0x00,0x00, -0xc8,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xdd,0x01,0x00,0x00,0xd7,0x01,0x00,0x00,0xdc,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe1,0x01,0x00,0x00, -0xdd,0x01,0x00,0x00,0xc5,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xe4,0x01,0x00,0x00,0xe1,0x01,0x00,0x00, -0xc8,0x01,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xe9,0x01,0x00,0x00,0xd7,0x01,0x00,0x00,0xe4,0x01,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xec,0x01,0x00,0x00, -0xe9,0x01,0x00,0x00,0xc8,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xf5,0x01,0x00,0x00,0xec,0x01,0x00,0x00, -0xc8,0x01,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xf6,0x01,0x00,0x00,0xe9,0x01,0x00,0x00,0xf5,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0xf8,0x01,0x00,0x00, -0x17,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xf9,0x01,0x00,0x00,0xf8,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfa,0x01,0x00,0x00, -0xca,0x01,0x00,0x00,0xf9,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0xfc,0x01,0x00,0x00,0x17,0x00,0x00,0x00, -0x5d,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xfd,0x01,0x00,0x00,0xfc,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xfe,0x01,0x00,0x00,0xdd,0x01,0x00,0x00, -0xfd,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xff,0x01,0x00,0x00,0xfa,0x01,0x00,0x00,0xfe,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x01,0x02,0x00,0x00, -0x17,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x02,0x02,0x00,0x00,0x01,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x03,0x02,0x00,0x00, -0xec,0x01,0x00,0x00,0x02,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x04,0x02,0x00,0x00,0xff,0x01,0x00,0x00, -0x03,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x06,0x02,0x00,0x00,0x17,0x00,0x00,0x00,0x69,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x07,0x02,0x00,0x00, -0x06,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x08,0x02,0x00,0x00,0xf6,0x01,0x00,0x00,0x07,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x09,0x02,0x00,0x00, -0x04,0x02,0x00,0x00,0x08,0x02,0x00,0x00,0x41,0x00,0x06,0x00, -0x50,0x01,0x00,0x00,0x51,0x01,0x00,0x00,0x4b,0x01,0x00,0x00, -0x34,0x01,0x00,0x00,0x09,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0x52,0x01,0x00,0x00,0x51,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x49,0x02,0x00,0x00, -0x17,0x00,0x00,0x00,0xad,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x4a,0x02,0x00,0x00,0x49,0x02,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4b,0x02,0x00,0x00, -0xca,0x01,0x00,0x00,0x4a,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0x4c,0x02,0x00,0x00,0x17,0x00,0x00,0x00, -0xb1,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x4d,0x02,0x00,0x00,0x4c,0x02,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x4e,0x02,0x00,0x00,0x4b,0x02,0x00,0x00, -0x4d,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x50,0x02,0x00,0x00,0x17,0x00,0x00,0x00,0xb6,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x51,0x02,0x00,0x00, -0x50,0x02,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x52,0x02,0x00,0x00,0xdd,0x01,0x00,0x00,0x51,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x53,0x02,0x00,0x00, -0x17,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x54,0x02,0x00,0x00,0x53,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x55,0x02,0x00,0x00, -0x52,0x02,0x00,0x00,0x54,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x56,0x02,0x00,0x00,0x4e,0x02,0x00,0x00, -0x55,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x58,0x02,0x00,0x00,0x17,0x00,0x00,0x00,0xc0,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x59,0x02,0x00,0x00, -0x58,0x02,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x5a,0x02,0x00,0x00,0xec,0x01,0x00,0x00,0x59,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x5b,0x02,0x00,0x00, -0x17,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x5c,0x02,0x00,0x00,0x5b,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5d,0x02,0x00,0x00, -0x5a,0x02,0x00,0x00,0x5c,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x5e,0x02,0x00,0x00,0x56,0x02,0x00,0x00, -0x5d,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x60,0x02,0x00,0x00,0x17,0x00,0x00,0x00,0xca,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x61,0x02,0x00,0x00, -0x60,0x02,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x62,0x02,0x00,0x00,0xf6,0x01,0x00,0x00,0x61,0x02,0x00,0x00, -0x41,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x63,0x02,0x00,0x00, -0x17,0x00,0x00,0x00,0xce,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x64,0x02,0x00,0x00,0x63,0x02,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x65,0x02,0x00,0x00, -0x62,0x02,0x00,0x00,0x64,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x66,0x02,0x00,0x00,0x5e,0x02,0x00,0x00, -0x65,0x02,0x00,0x00,0x41,0x00,0x06,0x00,0x50,0x01,0x00,0x00, -0x5b,0x01,0x00,0x00,0x56,0x01,0x00,0x00,0x34,0x01,0x00,0x00, -0x66,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x14,0x00,0x00,0x00, -0x5c,0x01,0x00,0x00,0x5b,0x01,0x00,0x00,0x85,0x00,0x05,0x00, -0x14,0x00,0x00,0x00,0x5d,0x01,0x00,0x00,0x52,0x01,0x00,0x00, -0x5c,0x01,0x00,0x00,0x41,0x00,0x06,0x00,0x50,0x01,0x00,0x00, -0x5e,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,0x34,0x01,0x00,0x00, -0x47,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x5e,0x01,0x00,0x00, -0x5d,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x62,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x62,0x01,0x00,0x00,0xfd,0x00,0x01,0x00, -0x38,0x00,0x01,0x00, -}; -const uint64_t mul_f32_len = 4276; - -unsigned char mul_mat_vec_f16_f32_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0xaf,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00, -0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c, -0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00, -0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x0f,0x00,0x0b,0x00,0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x26,0x00,0x00,0x00, -0x57,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x10,0x00,0x06,0x00, -0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x11,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x15,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x24,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x24,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x24,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x24,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x54,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x04,0x00,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x55,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0x55,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x57,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x57,0x00,0x00,0x00, -0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x96,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x04,0x00,0x97,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x97,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0x97,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x99,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x99,0x00,0x00,0x00, -0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xa2,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xa3,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x19,0x00,0x00,0x00,0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00, -0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x11,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0x14,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x1c,0x00,0x04,0x00, -0x16,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x15,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x16,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x17,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0x1e,0x00,0x05,0x00,0x24,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x25,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x24,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x25,0x00,0x00,0x00, -0x26,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00, -0x27,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x27,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x29,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x14,0x00,0x02,0x00, -0x2d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x1d,0x00,0x03,0x00,0x54,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0x1e,0x00,0x03,0x00,0x55,0x00,0x00,0x00,0x54,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x56,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x55,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x56,0x00,0x00,0x00, -0x57,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x27,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x60,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x77,0x00,0x00,0x00,0x08,0x01,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x1d,0x00,0x03,0x00, -0x96,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x1e,0x00,0x03,0x00, -0x97,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x98,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x97,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x98,0x00,0x00,0x00,0x99,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x27,0x00,0x00,0x00, -0x9a,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x33,0x00,0x06,0x00,0x09,0x00,0x00,0x00,0xa3,0x00,0x00,0x00, -0xa2,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x05,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x13,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x1b,0x00,0x00,0x00, -0x1c,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x13,0x00,0x00,0x00, -0x3e,0x00,0x03,0x00,0x1c,0x00,0x00,0x00,0x1a,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x1e,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x1e,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xab,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x05,0x00,0x00,0x00, -0x76,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x29,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x26,0x00,0x00,0x00, -0x28,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x2b,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x2b,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x2d,0x00,0x00,0x00, -0x2e,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0x2c,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x20,0x00,0x00,0x00,0x1f,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x2e,0x00,0x00,0x00, -0x1f,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x1f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x31,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0x15,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x31,0x00,0x00,0x00, -0x34,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x3a,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x2b,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3c,0x00,0x00,0x00, -0x3a,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x3c,0x00,0x00,0x00, -0x3d,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x41,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x42,0x00,0x00,0x00, -0x41,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x82,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0x35,0x00,0x00,0x00, -0x41,0x00,0x00,0x00,0x70,0x00,0x04,0x00,0x14,0x00,0x00,0x00, -0x4c,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x29,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x26,0x00,0x00,0x00, -0x58,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x5a,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x5c,0x00,0x00,0x00,0x5a,0x00,0x00,0x00, -0x47,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x5e,0x00,0x00,0x00,0x5c,0x00,0x00,0x00,0x42,0x00,0x00,0x00, -0x41,0x00,0x06,0x00,0x60,0x00,0x00,0x00,0x61,0x00,0x00,0x00, -0x57,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x5e,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x61,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x41,0x00,0x06,0x00,0x60,0x00,0x00,0x00,0x6d,0x00,0x00,0x00, -0x57,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x6e,0x00,0x00,0x00, -0x6d,0x00,0x00,0x00,0x81,0x00,0x05,0x00,0x14,0x00,0x00,0x00, -0xae,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x6e,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x72,0x00,0x00,0x00, -0x1c,0x00,0x00,0x00,0x0c,0x00,0x08,0x00,0x14,0x00,0x00,0x00, -0x73,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x4c,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0x72,0x00,0x00,0x00, -0x3e,0x00,0x03,0x00,0x1c,0x00,0x00,0x00,0x73,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x76,0x00,0x00,0x00, -0xab,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x1e,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x20,0x00,0x00,0x00, -0xe0,0x00,0x04,0x00,0x32,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x77,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x7a,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x7a,0x00,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0x79,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x7d,0x00,0x00,0x00, -0xac,0x00,0x05,0x00,0x2d,0x00,0x00,0x00,0x80,0x00,0x00,0x00, -0xac,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x7c,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x80,0x00,0x00,0x00,0x7b,0x00,0x00,0x00, -0x7c,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x7b,0x00,0x00,0x00, -0xb0,0x00,0x05,0x00,0x2d,0x00,0x00,0x00,0x83,0x00,0x00,0x00, -0x13,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0xf7,0x00,0x03,0x00, -0x85,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x83,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x85,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x84,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x13,0x00,0x00,0x00, -0xac,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x1b,0x00,0x00,0x00, -0x8a,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x89,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x8b,0x00,0x00,0x00, -0x8a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x14,0x00,0x00,0x00, -0x8d,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x81,0x00,0x05,0x00, -0x14,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0x8d,0x00,0x00,0x00, -0x8b,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0x1c,0x00,0x00,0x00, -0x8e,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x85,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x85,0x00,0x00,0x00,0xe0,0x00,0x04,0x00, -0x32,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x77,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x7d,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x7d,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x91,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0x58,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x7a,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x7c,0x00,0x00,0x00,0xaa,0x00,0x05,0x00,0x2d,0x00,0x00,0x00, -0x93,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0xf7,0x00,0x03,0x00,0x95,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x93,0x00,0x00,0x00,0x94,0x00,0x00,0x00, -0x95,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x94,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x29,0x00,0x00,0x00,0x9b,0x00,0x00,0x00, -0x26,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0x9b,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9e,0x00,0x00,0x00, -0x9c,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x1b,0x00,0x00,0x00,0x9f,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x28,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x14,0x00,0x00,0x00, -0xa0,0x00,0x00,0x00,0x9f,0x00,0x00,0x00,0x41,0x00,0x06,0x00, -0x60,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0x99,0x00,0x00,0x00, -0x28,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,0x3e,0x00,0x03,0x00, -0xa1,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x95,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x95,0x00,0x00,0x00, -0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00, -}; -const uint64_t mul_mat_vec_f16_f32_len = 2456; - -unsigned char mul_mat_vec_nc_f16_f32_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0xb3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00, -0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c, -0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00, -0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x0f,0x00,0x0c,0x00,0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,0x38,0x00,0x00,0x00, -0x6f,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,0xab,0x00,0x00,0x00, -0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x11,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1b,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1b,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1b,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x05,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1b,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x1b,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x6c,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0x6d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x6d,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x6d,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x6f,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x6f,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x77,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x78,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x7a,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x7a,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xa8,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0xa9,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0xa9,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0xa9,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xab,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xab,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xb0,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x13,0x00,0x02,0x00, -0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00, -0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x16,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x1e,0x00,0x09,0x00,0x1b,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x1c,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x1c,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x1e,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1e,0x00,0x00,0x00, -0x1f,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x20,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x1e,0x00,0x00,0x00,0x25,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1e,0x00,0x00,0x00, -0x29,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x16,0x00,0x03,0x00, -0x34,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x1c,0x00,0x04,0x00,0x36,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x35,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x37,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x37,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x34,0x00,0x00,0x00,0x3a,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x3b,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x14,0x00,0x02,0x00, -0x46,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1e,0x00,0x00,0x00, -0x57,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x1e,0x00,0x00,0x00,0x5c,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x16,0x00,0x03,0x00,0x6b,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x1d,0x00,0x03,0x00,0x6c,0x00,0x00,0x00,0x6b,0x00,0x00,0x00, -0x1e,0x00,0x03,0x00,0x6d,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x6e,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x6d,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x6e,0x00,0x00,0x00, -0x6f,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x71,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x6b,0x00,0x00,0x00, -0x1d,0x00,0x03,0x00,0x77,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x1e,0x00,0x03,0x00,0x78,0x00,0x00,0x00,0x77,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x79,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x78,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x79,0x00,0x00,0x00, -0x7a,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x7c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x08,0x01,0x00,0x00,0x2b,0x00,0x04,0x00,0x1e,0x00,0x00,0x00, -0x89,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x1d,0x00,0x03,0x00, -0xa8,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x1e,0x00,0x03,0x00, -0xa9,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0xaa,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xa9,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0xaa,0x00,0x00,0x00,0xab,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x2c,0x00,0x06,0x00,0x09,0x00,0x00,0x00, -0xb0,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x11,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x11,0x00,0x00,0x00, -0x16,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x20,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x1d,0x00,0x00,0x00, -0x1f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x20,0x00,0x00,0x00, -0x26,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,0x25,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x27,0x00,0x00,0x00, -0x26,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x20,0x00,0x00,0x00, -0x2a,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,0x29,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x00,0x00, -0x2a,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x31,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x2b,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x33,0x00,0x00,0x00, -0x31,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x3b,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x38,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0x3c,0x00,0x00,0x00, -0x3a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x3e,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x3e,0x00,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x05,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x41,0x00,0x00,0x00, -0xb0,0x00,0x05,0x00,0x46,0x00,0x00,0x00,0x47,0x00,0x00,0x00, -0xb1,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x40,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x47,0x00,0x00,0x00,0x3f,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x3f,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4b,0x00,0x00,0x00, -0xb1,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0xae,0x00,0x05,0x00, -0x46,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x4b,0x00,0x00,0x00, -0x27,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x51,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x4f,0x00,0x00,0x00, -0x50,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x50,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x40,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x51,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x20,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x1d,0x00,0x00,0x00, -0x57,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x59,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x59,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x20,0x00,0x00,0x00, -0x5d,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,0x5c,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x5e,0x00,0x00,0x00, -0x5d,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x5f,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x5e,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x5a,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x4b,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x66,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x27,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x68,0x00,0x00,0x00, -0x66,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0x41,0x00,0x06,0x00, -0x71,0x00,0x00,0x00,0x72,0x00,0x00,0x00,0x6f,0x00,0x00,0x00, -0x25,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x6b,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x72,0x00,0x00,0x00, -0x73,0x00,0x04,0x00,0x34,0x00,0x00,0x00,0x74,0x00,0x00,0x00, -0x73,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x7c,0x00,0x00,0x00, -0x7d,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,0x25,0x00,0x00,0x00, -0x68,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x34,0x00,0x00,0x00, -0x7e,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x34,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x3c,0x00,0x00,0x00, -0x0c,0x00,0x08,0x00,0x34,0x00,0x00,0x00,0x82,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x74,0x00,0x00,0x00, -0x7e,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x3e,0x00,0x03,0x00, -0x3c,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x41,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x41,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x85,0x00,0x00,0x00, -0xb1,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x3e,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x40,0x00,0x00,0x00, -0xe0,0x00,0x04,0x00,0x16,0x00,0x00,0x00,0x16,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x8a,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x8a,0x00,0x00,0x00,0xf5,0x00,0x07,0x00, -0x1e,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0x89,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0x8d,0x00,0x00,0x00, -0xad,0x00,0x05,0x00,0x46,0x00,0x00,0x00,0x90,0x00,0x00,0x00, -0xb2,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x8c,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x90,0x00,0x00,0x00,0x8b,0x00,0x00,0x00, -0x8c,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x8b,0x00,0x00,0x00, -0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x93,0x00,0x00,0x00, -0xb2,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x46,0x00,0x00,0x00, -0x94,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x93,0x00,0x00,0x00, -0xf7,0x00,0x03,0x00,0x96,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x94,0x00,0x00,0x00,0x95,0x00,0x00,0x00, -0x96,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x95,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9b,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x3b,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0x38,0x00,0x00,0x00, -0x9b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x34,0x00,0x00,0x00, -0x9d,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x34,0x00,0x00,0x00,0x9f,0x00,0x00,0x00,0x3c,0x00,0x00,0x00, -0x81,0x00,0x05,0x00,0x34,0x00,0x00,0x00,0xa0,0x00,0x00,0x00, -0x9f,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,0x3e,0x00,0x03,0x00, -0x3c,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x96,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x96,0x00,0x00,0x00, -0xe0,0x00,0x04,0x00,0x16,0x00,0x00,0x00,0x16,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x8d,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x8d,0x00,0x00,0x00,0xc3,0x00,0x05,0x00, -0x1e,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0xb2,0x00,0x00,0x00, -0x29,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x8a,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x8c,0x00,0x00,0x00,0xaa,0x00,0x05,0x00, -0x46,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0xa7,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xa5,0x00,0x00,0x00, -0xa6,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xa6,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x3b,0x00,0x00,0x00, -0xad,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x25,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x34,0x00,0x00,0x00,0xae,0x00,0x00,0x00, -0xad,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x7c,0x00,0x00,0x00, -0xaf,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0x25,0x00,0x00,0x00, -0x33,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0xaf,0x00,0x00,0x00, -0xae,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xa7,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xa7,0x00,0x00,0x00,0xfd,0x00,0x01,0x00, -0x38,0x00,0x01,0x00, -}; -const uint64_t mul_mat_vec_nc_f16_f32_len = 2824; - -unsigned char mul_mat_vec_p021_f16_f32_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0xbc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00, -0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c, -0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00, -0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x0f,0x00,0x0c,0x00,0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,0x36,0x00,0x00,0x00, -0x66,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0xb0,0x00,0x00,0x00, -0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x11,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1b,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x1b,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1b,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x05,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x1b,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x63,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x48,0x00,0x04,0x00,0x64,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x64,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0x64,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x66,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x66,0x00,0x00,0x00, -0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x76,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x04,0x00,0x77,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x77,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0x77,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x79,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x79,0x00,0x00,0x00, -0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xad,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x04,0x00,0xae,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0xae,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0xae,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xb0,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xb0,0x00,0x00,0x00, -0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xb5,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00, -0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x16,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x1e,0x00,0x08,0x00, -0x1b,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x1c,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x1c,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x1e,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1e,0x00,0x00,0x00, -0x1f,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x20,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x1e,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1e,0x00,0x00,0x00, -0x29,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x1e,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x16,0x00,0x03,0x00,0x32,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x33,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x34,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0x33,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x35,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x35,0x00,0x00,0x00,0x36,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x32,0x00,0x00,0x00, -0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x39,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x14,0x00,0x02,0x00,0x44,0x00,0x00,0x00,0x16,0x00,0x03,0x00, -0x62,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x1d,0x00,0x03,0x00, -0x63,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x1e,0x00,0x03,0x00, -0x64,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x65,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x64,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x65,0x00,0x00,0x00,0x66,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x68,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x1d,0x00,0x03,0x00, -0x76,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x1e,0x00,0x03,0x00, -0x77,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x78,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x77,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x78,0x00,0x00,0x00,0x79,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x7b,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,0x08,0x01,0x00,0x00, -0x2b,0x00,0x04,0x00,0x1e,0x00,0x00,0x00,0x8e,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0xad,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0xae,0x00,0x00,0x00, -0xad,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xaf,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0xaf,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x2c,0x00,0x06,0x00,0x09,0x00,0x00,0x00,0xb5,0x00,0x00,0x00, -0x33,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x05,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x13,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0x13,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x17,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x16,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x17,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x20,0x00,0x00,0x00, -0x21,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,0x1f,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x21,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x20,0x00,0x00,0x00, -0x24,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x25,0x00,0x00,0x00, -0x24,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x26,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x25,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x27,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x26,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x20,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x1d,0x00,0x00,0x00, -0x29,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x2b,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x20,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x1d,0x00,0x00,0x00, -0x2d,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x2f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x39,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x36,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0x3a,0x00,0x00,0x00, -0x38,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x3c,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x3c,0x00,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x05,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x3f,0x00,0x00,0x00, -0xb0,0x00,0x05,0x00,0x44,0x00,0x00,0x00,0x45,0x00,0x00,0x00, -0xb6,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x3e,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x45,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x3e,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x3d,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x49,0x00,0x00,0x00, -0xb6,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0xae,0x00,0x05,0x00, -0x44,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x49,0x00,0x00,0x00, -0x2b,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x4f,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x4d,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x4e,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x3e,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x4f,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0x25,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xbb,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x27,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5d,0x00,0x00,0x00, -0x2b,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,0x5d,0x00,0x00,0x00, -0x49,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x68,0x00,0x00,0x00, -0x69,0x00,0x00,0x00,0x66,0x00,0x00,0x00,0x29,0x00,0x00,0x00, -0x5f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x62,0x00,0x00,0x00, -0x6a,0x00,0x00,0x00,0x69,0x00,0x00,0x00,0x73,0x00,0x04,0x00, -0x32,0x00,0x00,0x00,0x6b,0x00,0x00,0x00,0x6a,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x71,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x71,0x00,0x00,0x00, -0x49,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x7b,0x00,0x00,0x00, -0x7c,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x29,0x00,0x00,0x00, -0x73,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x32,0x00,0x00,0x00, -0x7d,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x32,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x3a,0x00,0x00,0x00, -0x0c,0x00,0x08,0x00,0x32,0x00,0x00,0x00,0x81,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x6b,0x00,0x00,0x00, -0x7d,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x3e,0x00,0x03,0x00, -0x3a,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x3f,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x3f,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0xb6,0x00,0x00,0x00,0x33,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x3c,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x3e,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x88,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0x88,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0xe0,0x00,0x04,0x00,0x16,0x00,0x00,0x00, -0x16,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x8f,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x8f,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x1e,0x00,0x00,0x00,0xb7,0x00,0x00,0x00, -0x8e,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0xa8,0x00,0x00,0x00, -0x92,0x00,0x00,0x00,0xad,0x00,0x05,0x00,0x44,0x00,0x00,0x00, -0x95,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0x29,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x91,0x00,0x00,0x00,0x92,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x95,0x00,0x00,0x00, -0x90,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x90,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x98,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0xb0,0x00,0x05,0x00, -0x44,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x98,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x9b,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x99,0x00,0x00,0x00, -0x9a,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x9a,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa0,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x98,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x39,0x00,0x00,0x00,0xa1,0x00,0x00,0x00, -0x36,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x32,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0xa1,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x32,0x00,0x00,0x00,0xa4,0x00,0x00,0x00, -0x3a,0x00,0x00,0x00,0x81,0x00,0x05,0x00,0x32,0x00,0x00,0x00, -0xa5,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0xa2,0x00,0x00,0x00, -0x3e,0x00,0x03,0x00,0x3a,0x00,0x00,0x00,0xa5,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x9b,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x9b,0x00,0x00,0x00,0xe0,0x00,0x04,0x00,0x16,0x00,0x00,0x00, -0x16,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x92,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x92,0x00,0x00,0x00, -0xc3,0x00,0x05,0x00,0x1e,0x00,0x00,0x00,0xa8,0x00,0x00,0x00, -0xb7,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x8f,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x91,0x00,0x00,0x00, -0xaa,0x00,0x05,0x00,0x44,0x00,0x00,0x00,0xaa,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xf7,0x00,0x03,0x00, -0xac,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xaa,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0xac,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xab,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x39,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0x36,0x00,0x00,0x00, -0x29,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x32,0x00,0x00,0x00, -0xb3,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0x41,0x00,0x06,0x00, -0x7b,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0xb0,0x00,0x00,0x00, -0x29,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0x3e,0x00,0x03,0x00, -0xb4,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xac,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xac,0x00,0x00,0x00, -0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00, -}; -const uint64_t mul_mat_vec_p021_f16_f32_len = 2768; - -unsigned char mul_mat_vec_q2_K_f32_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0xdc,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x27,0x00,0x00,0x00, -0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00, -0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00, -0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30, -0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x0f,0x00,0x0c,0x00,0x05,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x47,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x8b,0x00,0x00,0x00, -0xca,0x02,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x11,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x20,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x63,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x65,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x68,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x68,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x68,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x69,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00, -0x48,0x00,0x04,0x00,0x6a,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x6a,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0x6a,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x6c,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x6c,0x00,0x00,0x00, -0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x88,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x04,0x00,0x89,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x89,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0x89,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x8b,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x8b,0x00,0x00,0x00, -0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xc7,0x02,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x04,0x00,0xc8,0x02,0x00,0x00,0x00,0x00,0x00,0x00, -0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0xc8,0x02,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0xc8,0x02,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xca,0x02,0x00,0x00,0x22,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xca,0x02,0x00,0x00, -0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xd2,0x02,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00, -0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x1e,0x00,0x05,0x00, -0x11,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x12,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x12,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x16,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x00,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x36,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x80,0x00,0x00,0x00, -0x16,0x00,0x03,0x00,0x44,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x1c,0x00,0x04,0x00,0x45,0x00,0x00,0x00,0x44,0x00,0x00,0x00, -0x36,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x46,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x46,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x48,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x44,0x00,0x00,0x00, -0x4d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x4e,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x44,0x00,0x00,0x00, -0x14,0x00,0x02,0x00,0x59,0x00,0x00,0x00,0x15,0x00,0x04,0x00, -0x62,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x1c,0x00,0x04,0x00,0x63,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x48,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x64,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x1c,0x00,0x04,0x00, -0x65,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x64,0x00,0x00,0x00, -0x16,0x00,0x03,0x00,0x66,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x17,0x00,0x04,0x00,0x67,0x00,0x00,0x00,0x66,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x1e,0x00,0x05,0x00,0x68,0x00,0x00,0x00, -0x63,0x00,0x00,0x00,0x65,0x00,0x00,0x00,0x67,0x00,0x00,0x00, -0x1d,0x00,0x03,0x00,0x69,0x00,0x00,0x00,0x68,0x00,0x00,0x00, -0x1e,0x00,0x03,0x00,0x6a,0x00,0x00,0x00,0x69,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x6b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x6a,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x6b,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x71,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x66,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x79,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x1d,0x00,0x03,0x00, -0x88,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x1e,0x00,0x03,0x00, -0x89,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x8a,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x89,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x8a,0x00,0x00,0x00,0x8b,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00, -0x8c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x95,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x44,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x9d,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00, -0xa2,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0c,0x01,0x00,0x00, -0x30,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x14,0x01,0x00,0x00,0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x3c,0x01,0x00,0x00,0x04,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x4f,0x01,0x00,0x00, -0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x5e,0x01,0x00,0x00,0x50,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x66,0x01,0x00,0x00,0x05,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x87,0x01,0x00,0x00, -0x60,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x8f,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0xa2,0x01,0x00,0x00,0x06,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb1,0x01,0x00,0x00, -0x70,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xb9,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xa9,0x02,0x00,0x00,0x08,0x01,0x00,0x00, -0x1d,0x00,0x03,0x00,0xc7,0x02,0x00,0x00,0x44,0x00,0x00,0x00, -0x1e,0x00,0x03,0x00,0xc8,0x02,0x00,0x00,0xc7,0x02,0x00,0x00, -0x20,0x00,0x04,0x00,0xc9,0x02,0x00,0x00,0x0c,0x00,0x00,0x00, -0xc8,0x02,0x00,0x00,0x3b,0x00,0x04,0x00,0xc9,0x02,0x00,0x00, -0xca,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x2c,0x00,0x06,0x00, -0x09,0x00,0x00,0x00,0xd2,0x02,0x00,0x00,0x36,0x00,0x00,0x00, -0x79,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x36,0x00,0x05,0x00, -0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x17,0x00,0x00,0x00, -0x13,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x17,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1a,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x1a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x21,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x21,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x24,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x24,0x00,0x00,0x00, -0x2b,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x30,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x2c,0x00,0x00,0x00, -0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x31,0x00,0x00,0x00, -0x24,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x31,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x38,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x2c,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00, -0x38,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x3f,0x00,0x00,0x00, -0x2c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x43,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4a,0x00,0x00,0x00, -0x48,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x4a,0x00,0x00,0x00, -0x24,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x4e,0x00,0x00,0x00, -0x4f,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0x4c,0x00,0x00,0x00, -0x3e,0x00,0x03,0x00,0x4f,0x00,0x00,0x00,0x4d,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x52,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x52,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xd3,0x02,0x00,0x00,0x28,0x00,0x00,0x00,0x05,0x00,0x00,0x00, -0xa8,0x02,0x00,0x00,0x55,0x00,0x00,0x00,0xb0,0x00,0x05,0x00, -0x59,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,0xd3,0x02,0x00,0x00, -0x1a,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x54,0x00,0x00,0x00, -0x55,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x5a,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x54,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x53,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,0xd3,0x02,0x00,0x00, -0x19,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x5f,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,0x43,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6f,0x00,0x00,0x00, -0x1e,0x00,0x00,0x00,0xd3,0x02,0x00,0x00,0x41,0x00,0x08,0x00, -0x71,0x00,0x00,0x00,0x72,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x70,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x66,0x00,0x00,0x00, -0x73,0x00,0x00,0x00,0x72,0x00,0x00,0x00,0x73,0x00,0x04,0x00, -0x44,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x73,0x00,0x00,0x00, -0x41,0x00,0x08,0x00,0x71,0x00,0x00,0x00,0x7a,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x6f,0x00,0x00,0x00, -0x70,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x66,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,0x7a,0x00,0x00,0x00, -0x73,0x00,0x04,0x00,0x44,0x00,0x00,0x00,0x7c,0x00,0x00,0x00, -0x7b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x81,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x81,0x00,0x00,0x00,0xf5,0x00,0x07,0x00, -0x44,0x00,0x00,0x00,0xd8,0x02,0x00,0x00,0x4d,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x95,0x02,0x00,0x00,0x82,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x44,0x00,0x00,0x00,0xd7,0x02,0x00,0x00, -0x4d,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0xd4,0x01,0x00,0x00, -0x82,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x14,0x00,0x00,0x00, -0xd6,0x02,0x00,0x00,0x15,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0x97,0x02,0x00,0x00,0x82,0x00,0x00,0x00,0xb1,0x00,0x05,0x00, -0x59,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0xd6,0x02,0x00,0x00, -0x70,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x83,0x00,0x00,0x00, -0x82,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x87,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x83,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x82,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x16,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x13,0x00,0x00,0x00, -0x8c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x8e,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x90,0x00,0x00,0x00,0x8e,0x00,0x00,0x00, -0x5f,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x92,0x00,0x00,0x00,0xd6,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x90,0x00,0x00,0x00, -0x92,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x95,0x00,0x00,0x00, -0x96,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,0x15,0x00,0x00,0x00, -0x93,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x44,0x00,0x00,0x00, -0x97,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x41,0x00,0x08,0x00, -0x9d,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x15,0x00,0x00,0x00, -0x30,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x62,0x00,0x00,0x00, -0x9f,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0x9f,0x00,0x00,0x00, -0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xa1,0x00,0x00,0x00, -0xa0,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00, -0xa3,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0xa2,0x00,0x00,0x00, -0x6f,0x00,0x04,0x00,0x44,0x00,0x00,0x00,0xa4,0x00,0x00,0x00, -0xa3,0x00,0x00,0x00,0x85,0x00,0x05,0x00,0x44,0x00,0x00,0x00, -0xa5,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0xa4,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00, -0x3a,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x41,0x00,0x08,0x00, -0x9d,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x8c,0x00,0x00,0x00, -0xac,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x62,0x00,0x00,0x00, -0xaf,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0xc2,0x00,0x05,0x00, -0x62,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0xaf,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xb1,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0x7c,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0xb1,0x00,0x00,0x00, -0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0xb4,0x00,0x00,0x00, -0xb2,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0x6f,0x00,0x04,0x00, -0x44,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,0xb4,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbe,0x00,0x00,0x00, -0x93,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x41,0x00,0x06,0x00, -0x95,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x8b,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x44,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0xbf,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00, -0x30,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x41,0x00,0x08,0x00, -0x9d,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x15,0x00,0x00,0x00, -0xc5,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x62,0x00,0x00,0x00, -0xc7,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0xc7,0x00,0x00,0x00, -0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xc9,0x00,0x00,0x00, -0xc8,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00, -0xca,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0xa2,0x00,0x00,0x00, -0x6f,0x00,0x04,0x00,0x44,0x00,0x00,0x00,0xcb,0x00,0x00,0x00, -0xca,0x00,0x00,0x00,0x85,0x00,0x05,0x00,0x44,0x00,0x00,0x00, -0xcc,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0xcb,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd4,0x00,0x00,0x00, -0xac,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x41,0x00,0x08,0x00, -0x9d,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x8c,0x00,0x00,0x00, -0xd4,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x62,0x00,0x00,0x00, -0xd6,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0xc2,0x00,0x05,0x00, -0x62,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,0xd6,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xd8,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,0x7c,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0xd9,0x00,0x00,0x00,0xd8,0x00,0x00,0x00, -0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0xda,0x00,0x00,0x00, -0xd9,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0x6f,0x00,0x04,0x00, -0x44,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,0xda,0x00,0x00,0x00, -0x85,0x00,0x05,0x00,0x44,0x00,0x00,0x00,0xdc,0x00,0x00,0x00, -0xcc,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,0x0c,0x00,0x08,0x00, -0x44,0x00,0x00,0x00,0xdd,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,0xb5,0x00,0x00,0x00, -0xdc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xe5,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x36,0x00,0x00,0x00, -0x41,0x00,0x06,0x00,0x95,0x00,0x00,0x00,0xe6,0x00,0x00,0x00, -0x8b,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0xe5,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x44,0x00,0x00,0x00,0xe7,0x00,0x00,0x00, -0xe6,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xec,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x41,0x00,0x08,0x00,0x9d,0x00,0x00,0x00,0xed,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x6f,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0xec,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x62,0x00,0x00,0x00,0xee,0x00,0x00,0x00,0xed,0x00,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xef,0x00,0x00,0x00, -0xee,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00, -0xf0,0x00,0x00,0x00,0xef,0x00,0x00,0x00,0xc7,0x00,0x05,0x00, -0x14,0x00,0x00,0x00,0xf1,0x00,0x00,0x00,0xf0,0x00,0x00,0x00, -0xa2,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,0x44,0x00,0x00,0x00, -0xf2,0x00,0x00,0x00,0xf1,0x00,0x00,0x00,0x85,0x00,0x05,0x00, -0x44,0x00,0x00,0x00,0xf3,0x00,0x00,0x00,0xe7,0x00,0x00,0x00, -0xf2,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x62,0x00,0x00,0x00, -0xfd,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0xc2,0x00,0x05,0x00, -0x62,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0xfd,0x00,0x00,0x00, -0x70,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xff,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x7c,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0xff,0x00,0x00,0x00, -0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0x01,0x01,0x00,0x00, -0x00,0x01,0x00,0x00,0xb3,0x00,0x00,0x00,0x6f,0x00,0x04,0x00, -0x44,0x00,0x00,0x00,0x02,0x01,0x00,0x00,0x01,0x01,0x00,0x00, -0x0c,0x00,0x08,0x00,0x44,0x00,0x00,0x00,0x04,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0xf3,0x00,0x00,0x00, -0x02,0x01,0x00,0x00,0xdd,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x0d,0x01,0x00,0x00,0x93,0x00,0x00,0x00, -0x0c,0x01,0x00,0x00,0x41,0x00,0x06,0x00,0x95,0x00,0x00,0x00, -0x0e,0x01,0x00,0x00,0x8b,0x00,0x00,0x00,0x15,0x00,0x00,0x00, -0x0d,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x44,0x00,0x00,0x00, -0x0f,0x01,0x00,0x00,0x0e,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x15,0x01,0x00,0x00,0x30,0x00,0x00,0x00, -0x14,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x9d,0x00,0x00,0x00, -0x16,0x01,0x00,0x00,0x6c,0x00,0x00,0x00,0x15,0x00,0x00,0x00, -0x6f,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x15,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0x62,0x00,0x00,0x00,0x17,0x01,0x00,0x00, -0x16,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x18,0x01,0x00,0x00,0x17,0x01,0x00,0x00,0x7c,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0x19,0x01,0x00,0x00,0x18,0x01,0x00,0x00, -0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0x1a,0x01,0x00,0x00, -0x19,0x01,0x00,0x00,0xa2,0x00,0x00,0x00,0x6f,0x00,0x04,0x00, -0x44,0x00,0x00,0x00,0x1b,0x01,0x00,0x00,0x1a,0x01,0x00,0x00, -0x85,0x00,0x05,0x00,0x44,0x00,0x00,0x00,0x1c,0x01,0x00,0x00, -0x0f,0x01,0x00,0x00,0x1b,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0x62,0x00,0x00,0x00,0x26,0x01,0x00,0x00,0xd5,0x00,0x00,0x00, -0xc2,0x00,0x05,0x00,0x62,0x00,0x00,0x00,0x27,0x01,0x00,0x00, -0x26,0x01,0x00,0x00,0x70,0x00,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x28,0x01,0x00,0x00,0x27,0x01,0x00,0x00, -0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x29,0x01,0x00,0x00, -0x28,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00, -0x2a,0x01,0x00,0x00,0x29,0x01,0x00,0x00,0xb3,0x00,0x00,0x00, -0x6f,0x00,0x04,0x00,0x44,0x00,0x00,0x00,0x2b,0x01,0x00,0x00, -0x2a,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,0x44,0x00,0x00,0x00, -0x2d,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x1c,0x01,0x00,0x00,0x2b,0x01,0x00,0x00,0x04,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x35,0x01,0x00,0x00, -0x93,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x41,0x00,0x06,0x00, -0x95,0x00,0x00,0x00,0x36,0x01,0x00,0x00,0x8b,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0x35,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0x44,0x00,0x00,0x00,0x37,0x01,0x00,0x00,0x36,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3d,0x01,0x00,0x00, -0x30,0x00,0x00,0x00,0x3c,0x01,0x00,0x00,0x41,0x00,0x08,0x00, -0x9d,0x00,0x00,0x00,0x3e,0x01,0x00,0x00,0x6c,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x15,0x00,0x00,0x00, -0x3d,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x62,0x00,0x00,0x00, -0x3f,0x01,0x00,0x00,0x3e,0x01,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x40,0x01,0x00,0x00,0x3f,0x01,0x00,0x00, -0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x41,0x01,0x00,0x00, -0x40,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00, -0x42,0x01,0x00,0x00,0x41,0x01,0x00,0x00,0xa2,0x00,0x00,0x00, -0x6f,0x00,0x04,0x00,0x44,0x00,0x00,0x00,0x43,0x01,0x00,0x00, -0x42,0x01,0x00,0x00,0x85,0x00,0x05,0x00,0x44,0x00,0x00,0x00, -0x44,0x01,0x00,0x00,0x37,0x01,0x00,0x00,0x43,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0x62,0x00,0x00,0x00,0x4e,0x01,0x00,0x00, -0xae,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,0x62,0x00,0x00,0x00, -0x50,0x01,0x00,0x00,0x4e,0x01,0x00,0x00,0x4f,0x01,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x51,0x01,0x00,0x00, -0x50,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00, -0x52,0x01,0x00,0x00,0x51,0x01,0x00,0x00,0xc7,0x00,0x05,0x00, -0x14,0x00,0x00,0x00,0x53,0x01,0x00,0x00,0x52,0x01,0x00,0x00, -0xb3,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,0x44,0x00,0x00,0x00, -0x54,0x01,0x00,0x00,0x53,0x01,0x00,0x00,0x0c,0x00,0x08,0x00, -0x44,0x00,0x00,0x00,0x56,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0x44,0x01,0x00,0x00,0x54,0x01,0x00,0x00, -0x2d,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x5f,0x01,0x00,0x00,0x93,0x00,0x00,0x00,0x5e,0x01,0x00,0x00, -0x41,0x00,0x06,0x00,0x95,0x00,0x00,0x00,0x60,0x01,0x00,0x00, -0x8b,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x5f,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0x44,0x00,0x00,0x00,0x61,0x01,0x00,0x00, -0x60,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x67,0x01,0x00,0x00,0x30,0x00,0x00,0x00,0x66,0x01,0x00,0x00, -0x41,0x00,0x08,0x00,0x9d,0x00,0x00,0x00,0x68,0x01,0x00,0x00, -0x6c,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x6f,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0x67,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0x62,0x00,0x00,0x00,0x69,0x01,0x00,0x00,0x68,0x01,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x6a,0x01,0x00,0x00, -0x69,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00, -0x6b,0x01,0x00,0x00,0x6a,0x01,0x00,0x00,0xc7,0x00,0x05,0x00, -0x14,0x00,0x00,0x00,0x6c,0x01,0x00,0x00,0x6b,0x01,0x00,0x00, -0xa2,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,0x44,0x00,0x00,0x00, -0x6d,0x01,0x00,0x00,0x6c,0x01,0x00,0x00,0x85,0x00,0x05,0x00, -0x44,0x00,0x00,0x00,0x6e,0x01,0x00,0x00,0x61,0x01,0x00,0x00, -0x6d,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x62,0x00,0x00,0x00, -0x78,0x01,0x00,0x00,0xd5,0x00,0x00,0x00,0xc2,0x00,0x05,0x00, -0x62,0x00,0x00,0x00,0x79,0x01,0x00,0x00,0x78,0x01,0x00,0x00, -0x4f,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x7a,0x01,0x00,0x00,0x79,0x01,0x00,0x00,0x7c,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0x7b,0x01,0x00,0x00,0x7a,0x01,0x00,0x00, -0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0x7c,0x01,0x00,0x00, -0x7b,0x01,0x00,0x00,0xb3,0x00,0x00,0x00,0x6f,0x00,0x04,0x00, -0x44,0x00,0x00,0x00,0x7d,0x01,0x00,0x00,0x7c,0x01,0x00,0x00, -0x0c,0x00,0x08,0x00,0x44,0x00,0x00,0x00,0x7f,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x6e,0x01,0x00,0x00, -0x7d,0x01,0x00,0x00,0x56,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x88,0x01,0x00,0x00,0x93,0x00,0x00,0x00, -0x87,0x01,0x00,0x00,0x41,0x00,0x06,0x00,0x95,0x00,0x00,0x00, -0x89,0x01,0x00,0x00,0x8b,0x00,0x00,0x00,0x15,0x00,0x00,0x00, -0x88,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x44,0x00,0x00,0x00, -0x8a,0x01,0x00,0x00,0x89,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x90,0x01,0x00,0x00,0x30,0x00,0x00,0x00, -0x8f,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x9d,0x00,0x00,0x00, -0x91,0x01,0x00,0x00,0x6c,0x00,0x00,0x00,0x15,0x00,0x00,0x00, -0x6f,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x90,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0x62,0x00,0x00,0x00,0x92,0x01,0x00,0x00, -0x91,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x93,0x01,0x00,0x00,0x92,0x01,0x00,0x00,0x7c,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0x94,0x01,0x00,0x00,0x93,0x01,0x00,0x00, -0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0x95,0x01,0x00,0x00, -0x94,0x01,0x00,0x00,0xa2,0x00,0x00,0x00,0x6f,0x00,0x04,0x00, -0x44,0x00,0x00,0x00,0x96,0x01,0x00,0x00,0x95,0x01,0x00,0x00, -0x85,0x00,0x05,0x00,0x44,0x00,0x00,0x00,0x97,0x01,0x00,0x00, -0x8a,0x01,0x00,0x00,0x96,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0x62,0x00,0x00,0x00,0xa1,0x01,0x00,0x00,0xae,0x00,0x00,0x00, -0xc2,0x00,0x05,0x00,0x62,0x00,0x00,0x00,0xa3,0x01,0x00,0x00, -0xa1,0x01,0x00,0x00,0xa2,0x01,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xa4,0x01,0x00,0x00,0xa3,0x01,0x00,0x00, -0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xa5,0x01,0x00,0x00, -0xa4,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00, -0xa6,0x01,0x00,0x00,0xa5,0x01,0x00,0x00,0xb3,0x00,0x00,0x00, -0x6f,0x00,0x04,0x00,0x44,0x00,0x00,0x00,0xa7,0x01,0x00,0x00, -0xa6,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,0x44,0x00,0x00,0x00, -0xa9,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x97,0x01,0x00,0x00,0xa7,0x01,0x00,0x00,0x7f,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb2,0x01,0x00,0x00, -0x93,0x00,0x00,0x00,0xb1,0x01,0x00,0x00,0x41,0x00,0x06,0x00, -0x95,0x00,0x00,0x00,0xb3,0x01,0x00,0x00,0x8b,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0xb2,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0x44,0x00,0x00,0x00,0xb4,0x01,0x00,0x00,0xb3,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xba,0x01,0x00,0x00, -0x30,0x00,0x00,0x00,0xb9,0x01,0x00,0x00,0x41,0x00,0x08,0x00, -0x9d,0x00,0x00,0x00,0xbb,0x01,0x00,0x00,0x6c,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x15,0x00,0x00,0x00, -0xba,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x62,0x00,0x00,0x00, -0xbc,0x01,0x00,0x00,0xbb,0x01,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xbd,0x01,0x00,0x00,0xbc,0x01,0x00,0x00, -0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xbe,0x01,0x00,0x00, -0xbd,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00, -0xbf,0x01,0x00,0x00,0xbe,0x01,0x00,0x00,0xa2,0x00,0x00,0x00, -0x6f,0x00,0x04,0x00,0x44,0x00,0x00,0x00,0xc0,0x01,0x00,0x00, -0xbf,0x01,0x00,0x00,0x85,0x00,0x05,0x00,0x44,0x00,0x00,0x00, -0xc1,0x01,0x00,0x00,0xb4,0x01,0x00,0x00,0xc0,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0x62,0x00,0x00,0x00,0xcb,0x01,0x00,0x00, -0xd5,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,0x62,0x00,0x00,0x00, -0xcc,0x01,0x00,0x00,0xcb,0x01,0x00,0x00,0xa2,0x01,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xcd,0x01,0x00,0x00, -0xcc,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00, -0xce,0x01,0x00,0x00,0xcd,0x01,0x00,0x00,0xc7,0x00,0x05,0x00, -0x14,0x00,0x00,0x00,0xcf,0x01,0x00,0x00,0xce,0x01,0x00,0x00, -0xb3,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,0x44,0x00,0x00,0x00, -0xd0,0x01,0x00,0x00,0xcf,0x01,0x00,0x00,0x0c,0x00,0x08,0x00, -0x44,0x00,0x00,0x00,0xd2,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0xc1,0x01,0x00,0x00,0xd0,0x01,0x00,0x00, -0xa9,0x01,0x00,0x00,0x81,0x00,0x05,0x00,0x44,0x00,0x00,0x00, -0xd4,0x01,0x00,0x00,0xd7,0x02,0x00,0x00,0xd2,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0x44,0x00,0x00,0x00,0xde,0x01,0x00,0x00, -0x96,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x62,0x00,0x00,0x00, -0xe5,0x01,0x00,0x00,0x9e,0x00,0x00,0x00,0xc2,0x00,0x05,0x00, -0x62,0x00,0x00,0x00,0xe6,0x01,0x00,0x00,0xe5,0x01,0x00,0x00, -0x4f,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xe7,0x01,0x00,0x00,0xe6,0x01,0x00,0x00,0x7c,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0xe8,0x01,0x00,0x00,0xe7,0x01,0x00,0x00, -0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0xe9,0x01,0x00,0x00, -0xe8,0x01,0x00,0x00,0xa2,0x00,0x00,0x00,0x6f,0x00,0x04,0x00, -0x44,0x00,0x00,0x00,0xea,0x01,0x00,0x00,0xe9,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0x44,0x00,0x00,0x00,0xf5,0x01,0x00,0x00, -0xbf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x62,0x00,0x00,0x00, -0xfc,0x01,0x00,0x00,0xc6,0x00,0x00,0x00,0xc2,0x00,0x05,0x00, -0x62,0x00,0x00,0x00,0xfd,0x01,0x00,0x00,0xfc,0x01,0x00,0x00, -0x4f,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xfe,0x01,0x00,0x00,0xfd,0x01,0x00,0x00,0x7c,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0xff,0x01,0x00,0x00,0xfe,0x01,0x00,0x00, -0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0x00,0x02,0x00,0x00, -0xff,0x01,0x00,0x00,0xa2,0x00,0x00,0x00,0x6f,0x00,0x04,0x00, -0x44,0x00,0x00,0x00,0x01,0x02,0x00,0x00,0x00,0x02,0x00,0x00, -0x85,0x00,0x05,0x00,0x44,0x00,0x00,0x00,0x02,0x02,0x00,0x00, -0xf5,0x01,0x00,0x00,0x01,0x02,0x00,0x00,0x0c,0x00,0x08,0x00, -0x44,0x00,0x00,0x00,0x03,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0xde,0x01,0x00,0x00,0xea,0x01,0x00,0x00, -0x02,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x44,0x00,0x00,0x00, -0x0d,0x02,0x00,0x00,0xe6,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x62,0x00,0x00,0x00,0x14,0x02,0x00,0x00,0xed,0x00,0x00,0x00, -0xc2,0x00,0x05,0x00,0x62,0x00,0x00,0x00,0x15,0x02,0x00,0x00, -0x14,0x02,0x00,0x00,0x4f,0x01,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x16,0x02,0x00,0x00,0x15,0x02,0x00,0x00, -0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x17,0x02,0x00,0x00, -0x16,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00, -0x18,0x02,0x00,0x00,0x17,0x02,0x00,0x00,0xa2,0x00,0x00,0x00, -0x6f,0x00,0x04,0x00,0x44,0x00,0x00,0x00,0x19,0x02,0x00,0x00, -0x18,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,0x44,0x00,0x00,0x00, -0x1b,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x0d,0x02,0x00,0x00,0x19,0x02,0x00,0x00,0x03,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0x44,0x00,0x00,0x00,0x25,0x02,0x00,0x00, -0x0e,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x62,0x00,0x00,0x00, -0x2c,0x02,0x00,0x00,0x16,0x01,0x00,0x00,0xc2,0x00,0x05,0x00, -0x62,0x00,0x00,0x00,0x2d,0x02,0x00,0x00,0x2c,0x02,0x00,0x00, -0x4f,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x2e,0x02,0x00,0x00,0x2d,0x02,0x00,0x00,0x7c,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0x2f,0x02,0x00,0x00,0x2e,0x02,0x00,0x00, -0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0x30,0x02,0x00,0x00, -0x2f,0x02,0x00,0x00,0xa2,0x00,0x00,0x00,0x6f,0x00,0x04,0x00, -0x44,0x00,0x00,0x00,0x31,0x02,0x00,0x00,0x30,0x02,0x00,0x00, -0x0c,0x00,0x08,0x00,0x44,0x00,0x00,0x00,0x33,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x25,0x02,0x00,0x00, -0x31,0x02,0x00,0x00,0x1b,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0x44,0x00,0x00,0x00,0x3d,0x02,0x00,0x00,0x36,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0x62,0x00,0x00,0x00,0x44,0x02,0x00,0x00, -0x3e,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x62,0x00,0x00,0x00, -0x45,0x02,0x00,0x00,0x44,0x02,0x00,0x00,0x4f,0x01,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x46,0x02,0x00,0x00, -0x45,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00, -0x47,0x02,0x00,0x00,0x46,0x02,0x00,0x00,0xc7,0x00,0x05,0x00, -0x14,0x00,0x00,0x00,0x48,0x02,0x00,0x00,0x47,0x02,0x00,0x00, -0xa2,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,0x44,0x00,0x00,0x00, -0x49,0x02,0x00,0x00,0x48,0x02,0x00,0x00,0x0c,0x00,0x08,0x00, -0x44,0x00,0x00,0x00,0x4b,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0x3d,0x02,0x00,0x00,0x49,0x02,0x00,0x00, -0x33,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x44,0x00,0x00,0x00, -0x55,0x02,0x00,0x00,0x60,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0x62,0x00,0x00,0x00,0x5c,0x02,0x00,0x00,0x68,0x01,0x00,0x00, -0xc2,0x00,0x05,0x00,0x62,0x00,0x00,0x00,0x5d,0x02,0x00,0x00, -0x5c,0x02,0x00,0x00,0x4f,0x01,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x5e,0x02,0x00,0x00,0x5d,0x02,0x00,0x00, -0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x5f,0x02,0x00,0x00, -0x5e,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00, -0x60,0x02,0x00,0x00,0x5f,0x02,0x00,0x00,0xa2,0x00,0x00,0x00, -0x6f,0x00,0x04,0x00,0x44,0x00,0x00,0x00,0x61,0x02,0x00,0x00, -0x60,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,0x44,0x00,0x00,0x00, -0x63,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x55,0x02,0x00,0x00,0x61,0x02,0x00,0x00,0x4b,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0x44,0x00,0x00,0x00,0x6d,0x02,0x00,0x00, -0x89,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x62,0x00,0x00,0x00, -0x74,0x02,0x00,0x00,0x91,0x01,0x00,0x00,0xc2,0x00,0x05,0x00, -0x62,0x00,0x00,0x00,0x75,0x02,0x00,0x00,0x74,0x02,0x00,0x00, -0x4f,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x76,0x02,0x00,0x00,0x75,0x02,0x00,0x00,0x7c,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0x77,0x02,0x00,0x00,0x76,0x02,0x00,0x00, -0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0x78,0x02,0x00,0x00, -0x77,0x02,0x00,0x00,0xa2,0x00,0x00,0x00,0x6f,0x00,0x04,0x00, -0x44,0x00,0x00,0x00,0x79,0x02,0x00,0x00,0x78,0x02,0x00,0x00, -0x0c,0x00,0x08,0x00,0x44,0x00,0x00,0x00,0x7b,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x6d,0x02,0x00,0x00, -0x79,0x02,0x00,0x00,0x63,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0x44,0x00,0x00,0x00,0x85,0x02,0x00,0x00,0xb3,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0x62,0x00,0x00,0x00,0x8c,0x02,0x00,0x00, -0xbb,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x62,0x00,0x00,0x00, -0x8d,0x02,0x00,0x00,0x8c,0x02,0x00,0x00,0x4f,0x01,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x8e,0x02,0x00,0x00, -0x8d,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00, -0x8f,0x02,0x00,0x00,0x8e,0x02,0x00,0x00,0xc7,0x00,0x05,0x00, -0x14,0x00,0x00,0x00,0x90,0x02,0x00,0x00,0x8f,0x02,0x00,0x00, -0xa2,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,0x44,0x00,0x00,0x00, -0x91,0x02,0x00,0x00,0x90,0x02,0x00,0x00,0x0c,0x00,0x08,0x00, -0x44,0x00,0x00,0x00,0x93,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0x85,0x02,0x00,0x00,0x91,0x02,0x00,0x00, -0x7b,0x02,0x00,0x00,0x81,0x00,0x05,0x00,0x44,0x00,0x00,0x00, -0x95,0x02,0x00,0x00,0xd8,0x02,0x00,0x00,0x93,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0x97,0x02,0x00,0x00, -0xd6,0x02,0x00,0x00,0x8c,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x81,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x83,0x00,0x00,0x00, -0x85,0x00,0x05,0x00,0x44,0x00,0x00,0x00,0xa1,0x02,0x00,0x00, -0x7c,0x00,0x00,0x00,0xd8,0x02,0x00,0x00,0x7f,0x00,0x04,0x00, -0x44,0x00,0x00,0x00,0xdb,0x02,0x00,0x00,0xa1,0x02,0x00,0x00, -0x0c,0x00,0x08,0x00,0x44,0x00,0x00,0x00,0xa2,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x74,0x00,0x00,0x00, -0xd7,0x02,0x00,0x00,0xdb,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0x44,0x00,0x00,0x00,0xa4,0x02,0x00,0x00,0x4f,0x00,0x00,0x00, -0x81,0x00,0x05,0x00,0x44,0x00,0x00,0x00,0xa5,0x02,0x00,0x00, -0xa4,0x02,0x00,0x00,0xa2,0x02,0x00,0x00,0x3e,0x00,0x03,0x00, -0x4f,0x00,0x00,0x00,0xa5,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0x55,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x55,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa8,0x02,0x00,0x00, -0xd3,0x02,0x00,0x00,0x23,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x52,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x54,0x00,0x00,0x00, -0xe0,0x00,0x04,0x00,0x23,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0xa9,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xab,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xab,0x02,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xd4,0x02,0x00,0x00,0x48,0x00,0x00,0x00, -0x54,0x00,0x00,0x00,0xc2,0x02,0x00,0x00,0xae,0x02,0x00,0x00, -0xac,0x00,0x05,0x00,0x59,0x00,0x00,0x00,0xb1,0x02,0x00,0x00, -0xd4,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xad,0x02,0x00,0x00,0xae,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xb1,0x02,0x00,0x00,0xac,0x02,0x00,0x00, -0xad,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xac,0x02,0x00,0x00, -0xb0,0x00,0x05,0x00,0x59,0x00,0x00,0x00,0xb4,0x02,0x00,0x00, -0x24,0x00,0x00,0x00,0xd4,0x02,0x00,0x00,0xf7,0x00,0x03,0x00, -0xb6,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xb4,0x02,0x00,0x00,0xb5,0x02,0x00,0x00,0xb6,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xb5,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xba,0x02,0x00,0x00,0x24,0x00,0x00,0x00, -0xd4,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x4e,0x00,0x00,0x00, -0xbb,0x02,0x00,0x00,0x47,0x00,0x00,0x00,0xba,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0x44,0x00,0x00,0x00,0xbc,0x02,0x00,0x00, -0xbb,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x4e,0x00,0x00,0x00, -0xbd,0x02,0x00,0x00,0x47,0x00,0x00,0x00,0x24,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x44,0x00,0x00,0x00,0xbe,0x02,0x00,0x00, -0xbd,0x02,0x00,0x00,0x81,0x00,0x05,0x00,0x44,0x00,0x00,0x00, -0xbf,0x02,0x00,0x00,0xbe,0x02,0x00,0x00,0xbc,0x02,0x00,0x00, -0x3e,0x00,0x03,0x00,0xbd,0x02,0x00,0x00,0xbf,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0xb6,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xb6,0x02,0x00,0x00,0xe0,0x00,0x04,0x00,0x23,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0xa9,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0xae,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xae,0x02,0x00,0x00, -0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc2,0x02,0x00,0x00, -0xd4,0x02,0x00,0x00,0x8c,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xab,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xad,0x02,0x00,0x00, -0xaa,0x00,0x05,0x00,0x59,0x00,0x00,0x00,0xc4,0x02,0x00,0x00, -0x24,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xf7,0x00,0x03,0x00, -0xc6,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xc4,0x02,0x00,0x00,0xc5,0x02,0x00,0x00,0xc6,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xc5,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0x16,0x00,0x00,0x00,0xcb,0x02,0x00,0x00,0x13,0x00,0x00,0x00, -0x70,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xcc,0x02,0x00,0x00,0xcb,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xce,0x02,0x00,0x00,0xcc,0x02,0x00,0x00, -0x0f,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x4e,0x00,0x00,0x00, -0xcf,0x02,0x00,0x00,0x47,0x00,0x00,0x00,0x15,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x44,0x00,0x00,0x00,0xd0,0x02,0x00,0x00, -0xcf,0x02,0x00,0x00,0x41,0x00,0x06,0x00,0x95,0x00,0x00,0x00, -0xd1,0x02,0x00,0x00,0xca,0x02,0x00,0x00,0x15,0x00,0x00,0x00, -0xce,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0xd1,0x02,0x00,0x00, -0xd0,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xc6,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xc6,0x02,0x00,0x00,0xfd,0x00,0x01,0x00, -0x38,0x00,0x01,0x00, -}; -const uint64_t mul_mat_vec_q2_K_f32_len = 7612; - -unsigned char mul_mat_vec_q3_K_f32_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0x1d,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x27,0x00,0x00,0x00, -0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00, -0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00, -0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30, -0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x0f,0x00,0x0c,0x00,0x05,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x4f,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x8e,0x00,0x00,0x00, -0x0e,0x03,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x11,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x20,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x6d,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x6f,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x71,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x73,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x73,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x73,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x73,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x74,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x6e,0x00,0x00,0x00, -0x48,0x00,0x04,0x00,0x75,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x75,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0x75,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x77,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x77,0x00,0x00,0x00, -0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x8b,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x8c,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0x8c,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x8e,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x8e,0x00,0x00,0x00, -0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x0b,0x03,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x04,0x00,0x0c,0x03,0x00,0x00,0x00,0x00,0x00,0x00, -0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x0c,0x03,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0x0c,0x03,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x0e,0x03,0x00,0x00,0x22,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0e,0x03,0x00,0x00, -0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x17,0x03,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00, -0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x1e,0x00,0x05,0x00, -0x11,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x12,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x12,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x16,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x00,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x32,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x36,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x3a,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x47,0x00,0x00,0x00, -0x80,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0x4c,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x4d,0x00,0x00,0x00, -0x4c,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x4e,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x4d,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x4e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x50,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x4c,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x56,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x4c,0x00,0x00,0x00,0x14,0x00,0x02,0x00,0x64,0x00,0x00,0x00, -0x1c,0x00,0x04,0x00,0x6d,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x41,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x6e,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x1c,0x00,0x04,0x00, -0x6f,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x6e,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x70,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x71,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x16,0x00,0x03,0x00, -0x72,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x1e,0x00,0x06,0x00, -0x73,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x6f,0x00,0x00,0x00, -0x71,0x00,0x00,0x00,0x72,0x00,0x00,0x00,0x1d,0x00,0x03,0x00, -0x74,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x1e,0x00,0x03,0x00, -0x75,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x76,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x75,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x76,0x00,0x00,0x00,0x77,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00, -0x7b,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x7c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x72,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x89,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x8b,0x00,0x00,0x00, -0x4c,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x8c,0x00,0x00,0x00, -0x8b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x8d,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x8d,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x97,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x4c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x9d,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xa9,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00, -0xb2,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xf1,0x00,0x00,0x00, -0x0a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x70,0x01,0x00,0x00,0x60,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0x77,0x01,0x00,0x00,0x06,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xc9,0x01,0x00,0x00, -0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x02,0x02,0x00,0x00,0x30,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0x13,0x02,0x00,0x00,0x0b,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4d,0x02,0x00,0x00, -0x50,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00, -0x54,0x02,0x00,0x00,0x05,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x98,0x02,0x00,0x00,0x70,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x9f,0x02,0x00,0x00, -0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xed,0x02,0x00,0x00,0x08,0x01,0x00,0x00,0x1d,0x00,0x03,0x00, -0x0b,0x03,0x00,0x00,0x4c,0x00,0x00,0x00,0x1e,0x00,0x03,0x00, -0x0c,0x03,0x00,0x00,0x0b,0x03,0x00,0x00,0x20,0x00,0x04,0x00, -0x0d,0x03,0x00,0x00,0x0c,0x00,0x00,0x00,0x0c,0x03,0x00,0x00, -0x3b,0x00,0x04,0x00,0x0d,0x03,0x00,0x00,0x0e,0x03,0x00,0x00, -0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x16,0x03,0x00,0x00,0x01,0x00,0x00,0x00,0x2c,0x00,0x06,0x00, -0x09,0x00,0x00,0x00,0x17,0x03,0x00,0x00,0x41,0x00,0x00,0x00, -0x16,0x03,0x00,0x00,0x16,0x03,0x00,0x00,0x36,0x00,0x05,0x00, -0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x17,0x00,0x00,0x00, -0x13,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x17,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1a,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x1a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x21,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x21,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x24,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x24,0x00,0x00,0x00, -0x2b,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x30,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x2c,0x00,0x00,0x00, -0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x31,0x00,0x00,0x00, -0x24,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x36,0x00,0x00,0x00, -0x2c,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,0x14,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x38,0x00,0x00,0x00, -0x72,0x00,0x04,0x00,0x3a,0x00,0x00,0x00,0x3b,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x32,0x00,0x00,0x00, -0x3c,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x31,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x43,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x2c,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x45,0x00,0x00,0x00, -0x43,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x47,0x00,0x00,0x00, -0x2c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x4b,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x3f,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x52,0x00,0x00,0x00, -0x50,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x52,0x00,0x00,0x00, -0x24,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x56,0x00,0x00,0x00, -0x57,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x54,0x00,0x00,0x00, -0x3e,0x00,0x03,0x00,0x57,0x00,0x00,0x00,0x55,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x5d,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x5d,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x18,0x03,0x00,0x00,0x28,0x00,0x00,0x00,0x05,0x00,0x00,0x00, -0xec,0x02,0x00,0x00,0x60,0x00,0x00,0x00,0xb0,0x00,0x05,0x00, -0x64,0x00,0x00,0x00,0x65,0x00,0x00,0x00,0x18,0x03,0x00,0x00, -0x1a,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x5f,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x65,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x5f,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x5e,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x18,0x03,0x00,0x00, -0x19,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x6a,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x4b,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7a,0x00,0x00,0x00, -0x1e,0x00,0x00,0x00,0x18,0x03,0x00,0x00,0x41,0x00,0x07,0x00, -0x7c,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x77,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,0x7b,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x72,0x00,0x00,0x00,0x7e,0x00,0x00,0x00, -0x7d,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x4c,0x00,0x00,0x00, -0x7f,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x83,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x83,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x4c,0x00,0x00,0x00,0x1c,0x03,0x00,0x00, -0x55,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0xdd,0x02,0x00,0x00, -0x84,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x14,0x00,0x00,0x00, -0x1b,0x03,0x00,0x00,0x15,0x00,0x00,0x00,0x5e,0x00,0x00,0x00, -0xdf,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0xb1,0x00,0x05,0x00, -0x64,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0x1b,0x03,0x00,0x00, -0x89,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x85,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x8a,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x85,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x84,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x16,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,0x13,0x00,0x00,0x00, -0x35,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x90,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x90,0x00,0x00,0x00, -0x6a,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x94,0x00,0x00,0x00,0x1b,0x03,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0x92,0x00,0x00,0x00, -0x94,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x97,0x00,0x00,0x00, -0x98,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0x15,0x00,0x00,0x00, -0x95,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x4c,0x00,0x00,0x00, -0x99,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x41,0x00,0x08,0x00, -0x9d,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,0x77,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,0x89,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x32,0x00,0x00,0x00, -0x9f,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,0xc2,0x00,0x05,0x00, -0x32,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0x9f,0x00,0x00,0x00, -0x38,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xa2,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0x7c,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0xa2,0x00,0x00,0x00, -0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0xa5,0x00,0x00,0x00, -0xa3,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0x41,0x00,0x08,0x00, -0x9d,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0x77,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,0x89,0x00,0x00,0x00, -0xa9,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x32,0x00,0x00,0x00, -0xab,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0xc2,0x00,0x05,0x00, -0x32,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0xab,0x00,0x00,0x00, -0x38,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xaf,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0x7c,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0xaf,0x00,0x00,0x00, -0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0xb1,0x00,0x00,0x00, -0xb0,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,0xc4,0x00,0x05,0x00, -0x14,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0xb1,0x00,0x00,0x00, -0xb2,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,0x14,0x00,0x00,0x00, -0xb4,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,0xb3,0x00,0x00,0x00, -0x72,0x00,0x04,0x00,0x3a,0x00,0x00,0x00,0xb5,0x00,0x00,0x00, -0xb4,0x00,0x00,0x00,0x72,0x00,0x04,0x00,0x14,0x00,0x00,0x00, -0xb6,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,0x82,0x00,0x05,0x00, -0x14,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0xb6,0x00,0x00,0x00, -0xb7,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,0x4c,0x00,0x00,0x00, -0xb9,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x85,0x00,0x05,0x00, -0x4c,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0x99,0x00,0x00,0x00, -0xb9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xc1,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x94,0x00,0x00,0x00, -0x41,0x00,0x08,0x00,0x9d,0x00,0x00,0x00,0xc2,0x00,0x00,0x00, -0x77,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x7a,0x00,0x00,0x00, -0x35,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x32,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0xc2,0x00,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xc4,0x00,0x00,0x00, -0xc3,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00, -0xc5,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0xc7,0x00,0x05,0x00, -0x14,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0xc5,0x00,0x00,0x00, -0x7b,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xcd,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x94,0x00,0x00,0x00, -0x41,0x00,0x08,0x00,0x9d,0x00,0x00,0x00,0xce,0x00,0x00,0x00, -0x77,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x7a,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x32,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0xce,0x00,0x00,0x00, -0xc4,0x00,0x05,0x00,0x32,0x00,0x00,0x00,0xd1,0x00,0x00,0x00, -0x3c,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0xc7,0x00,0x05,0x00, -0x32,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0xcf,0x00,0x00,0x00, -0xd1,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xd3,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0x7c,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,0xd3,0x00,0x00,0x00, -0xab,0x00,0x05,0x00,0x64,0x00,0x00,0x00,0xd5,0x00,0x00,0x00, -0xd4,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0xa9,0x00,0x06,0x00, -0x14,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0xd5,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0x82,0x00,0x05,0x00, -0x14,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,0xc6,0x00,0x00,0x00, -0xd6,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,0x4c,0x00,0x00,0x00, -0xd8,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xe1,0x00,0x00,0x00,0x95,0x00,0x00,0x00, -0x41,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x97,0x00,0x00,0x00, -0xe2,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0x15,0x00,0x00,0x00, -0xe1,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x4c,0x00,0x00,0x00, -0xe3,0x00,0x00,0x00,0xe2,0x00,0x00,0x00,0x41,0x00,0x08,0x00, -0x9d,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,0x77,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,0x89,0x00,0x00,0x00, -0x89,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x32,0x00,0x00,0x00, -0xe8,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,0xc2,0x00,0x05,0x00, -0x32,0x00,0x00,0x00,0xea,0x00,0x00,0x00,0xe8,0x00,0x00,0x00, -0x38,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xeb,0x00,0x00,0x00,0xea,0x00,0x00,0x00,0x7c,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0xec,0x00,0x00,0x00,0xeb,0x00,0x00,0x00, -0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0xed,0x00,0x00,0x00, -0xec,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0x41,0x00,0x08,0x00, -0x9d,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,0x77,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,0x89,0x00,0x00,0x00, -0xf1,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x32,0x00,0x00,0x00, -0xf3,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,0xc2,0x00,0x05,0x00, -0x32,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,0xf3,0x00,0x00,0x00, -0x38,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xf7,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,0x7c,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,0xf7,0x00,0x00,0x00, -0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0xf9,0x00,0x00,0x00, -0xf8,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,0xc4,0x00,0x05,0x00, -0x14,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0xf9,0x00,0x00,0x00, -0xb2,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,0x14,0x00,0x00,0x00, -0xfb,0x00,0x00,0x00,0xed,0x00,0x00,0x00,0xfa,0x00,0x00,0x00, -0x72,0x00,0x04,0x00,0x3a,0x00,0x00,0x00,0xfc,0x00,0x00,0x00, -0xfb,0x00,0x00,0x00,0x72,0x00,0x04,0x00,0x14,0x00,0x00,0x00, -0xfd,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x82,0x00,0x05,0x00, -0x14,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0xfd,0x00,0x00,0x00, -0xb7,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,0x4c,0x00,0x00,0x00, -0xff,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x85,0x00,0x05,0x00, -0x4c,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0xe3,0x00,0x00,0x00, -0xff,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x32,0x00,0x00,0x00, -0x09,0x01,0x00,0x00,0xc2,0x00,0x00,0x00,0xc2,0x00,0x05,0x00, -0x32,0x00,0x00,0x00,0x0a,0x01,0x00,0x00,0x09,0x01,0x00,0x00, -0x89,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x0b,0x01,0x00,0x00,0x0a,0x01,0x00,0x00,0x7c,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0x0c,0x01,0x00,0x00,0x0b,0x01,0x00,0x00, -0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0x0d,0x01,0x00,0x00, -0x0c,0x01,0x00,0x00,0x7b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x32,0x00,0x00,0x00,0x16,0x01,0x00,0x00,0xce,0x00,0x00,0x00, -0xc4,0x00,0x05,0x00,0x32,0x00,0x00,0x00,0x18,0x01,0x00,0x00, -0x3c,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0xc7,0x00,0x05,0x00, -0x32,0x00,0x00,0x00,0x19,0x01,0x00,0x00,0x16,0x01,0x00,0x00, -0x18,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x1a,0x01,0x00,0x00,0x19,0x01,0x00,0x00,0x7c,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0x1b,0x01,0x00,0x00,0x1a,0x01,0x00,0x00, -0xab,0x00,0x05,0x00,0x64,0x00,0x00,0x00,0x1c,0x01,0x00,0x00, -0x1b,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0xa9,0x00,0x06,0x00, -0x14,0x00,0x00,0x00,0x1d,0x01,0x00,0x00,0x1c,0x01,0x00,0x00, -0x15,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0x82,0x00,0x05,0x00, -0x14,0x00,0x00,0x00,0x1e,0x01,0x00,0x00,0x0d,0x01,0x00,0x00, -0x1d,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,0x4c,0x00,0x00,0x00, -0x1f,0x01,0x00,0x00,0x1e,0x01,0x00,0x00,0x85,0x00,0x05,0x00, -0x4c,0x00,0x00,0x00,0x20,0x01,0x00,0x00,0x00,0x01,0x00,0x00, -0x1f,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,0x4c,0x00,0x00,0x00, -0x21,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0xba,0x00,0x00,0x00,0xd8,0x00,0x00,0x00,0x20,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x29,0x01,0x00,0x00, -0x95,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x41,0x00,0x06,0x00, -0x97,0x00,0x00,0x00,0x2a,0x01,0x00,0x00,0x8e,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0x29,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0x4c,0x00,0x00,0x00,0x2b,0x01,0x00,0x00,0x2a,0x01,0x00,0x00, -0x41,0x00,0x08,0x00,0x9d,0x00,0x00,0x00,0x2f,0x01,0x00,0x00, -0x77,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x7a,0x00,0x00,0x00, -0x89,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x32,0x00,0x00,0x00,0x30,0x01,0x00,0x00,0x2f,0x01,0x00,0x00, -0xc2,0x00,0x05,0x00,0x32,0x00,0x00,0x00,0x32,0x01,0x00,0x00, -0x30,0x01,0x00,0x00,0x38,0x00,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x33,0x01,0x00,0x00,0x32,0x01,0x00,0x00, -0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x34,0x01,0x00,0x00, -0x33,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00, -0x35,0x01,0x00,0x00,0x34,0x01,0x00,0x00,0xa4,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x32,0x00,0x00,0x00,0x3a,0x01,0x00,0x00, -0xaa,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x3c,0x01,0x00,0x00,0x38,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0xc2,0x00,0x05,0x00,0x32,0x00,0x00,0x00,0x3d,0x01,0x00,0x00, -0x3a,0x01,0x00,0x00,0x3c,0x01,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x3e,0x01,0x00,0x00,0x3d,0x01,0x00,0x00, -0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x3f,0x01,0x00,0x00, -0x3e,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00, -0x40,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,0x7b,0x00,0x00,0x00, -0xc4,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0x41,0x01,0x00,0x00, -0x40,0x01,0x00,0x00,0xb2,0x00,0x00,0x00,0xc5,0x00,0x05,0x00, -0x14,0x00,0x00,0x00,0x42,0x01,0x00,0x00,0x35,0x01,0x00,0x00, -0x41,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0x3a,0x00,0x00,0x00, -0x43,0x01,0x00,0x00,0x42,0x01,0x00,0x00,0x72,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0x44,0x01,0x00,0x00,0x43,0x01,0x00,0x00, -0x82,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0x45,0x01,0x00,0x00, -0x44,0x01,0x00,0x00,0xb7,0x00,0x00,0x00,0x6f,0x00,0x04,0x00, -0x4c,0x00,0x00,0x00,0x46,0x01,0x00,0x00,0x45,0x01,0x00,0x00, -0x85,0x00,0x05,0x00,0x4c,0x00,0x00,0x00,0x47,0x01,0x00,0x00, -0x2b,0x01,0x00,0x00,0x46,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0x32,0x00,0x00,0x00,0x50,0x01,0x00,0x00,0xc2,0x00,0x00,0x00, -0xc2,0x00,0x05,0x00,0x32,0x00,0x00,0x00,0x51,0x01,0x00,0x00, -0x50,0x01,0x00,0x00,0xb2,0x00,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x52,0x01,0x00,0x00,0x51,0x01,0x00,0x00, -0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x53,0x01,0x00,0x00, -0x52,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00, -0x54,0x01,0x00,0x00,0x53,0x01,0x00,0x00,0x7b,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x32,0x00,0x00,0x00,0x5d,0x01,0x00,0x00, -0xce,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,0x32,0x00,0x00,0x00, -0x5f,0x01,0x00,0x00,0x3c,0x00,0x00,0x00,0x89,0x00,0x00,0x00, -0xc7,0x00,0x05,0x00,0x32,0x00,0x00,0x00,0x60,0x01,0x00,0x00, -0x5d,0x01,0x00,0x00,0x5f,0x01,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x61,0x01,0x00,0x00,0x60,0x01,0x00,0x00, -0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x62,0x01,0x00,0x00, -0x61,0x01,0x00,0x00,0xab,0x00,0x05,0x00,0x64,0x00,0x00,0x00, -0x63,0x01,0x00,0x00,0x62,0x01,0x00,0x00,0x15,0x00,0x00,0x00, -0xa9,0x00,0x06,0x00,0x14,0x00,0x00,0x00,0x64,0x01,0x00,0x00, -0x63,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0xb2,0x00,0x00,0x00, -0x82,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0x65,0x01,0x00,0x00, -0x54,0x01,0x00,0x00,0x64,0x01,0x00,0x00,0x6f,0x00,0x04,0x00, -0x4c,0x00,0x00,0x00,0x66,0x01,0x00,0x00,0x65,0x01,0x00,0x00, -0x0c,0x00,0x08,0x00,0x4c,0x00,0x00,0x00,0x68,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x47,0x01,0x00,0x00, -0x66,0x01,0x00,0x00,0x21,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x71,0x01,0x00,0x00,0x95,0x00,0x00,0x00, -0x70,0x01,0x00,0x00,0x41,0x00,0x06,0x00,0x97,0x00,0x00,0x00, -0x72,0x01,0x00,0x00,0x8e,0x00,0x00,0x00,0x15,0x00,0x00,0x00, -0x71,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x4c,0x00,0x00,0x00, -0x73,0x01,0x00,0x00,0x72,0x01,0x00,0x00,0x41,0x00,0x08,0x00, -0x9d,0x00,0x00,0x00,0x78,0x01,0x00,0x00,0x77,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,0x89,0x00,0x00,0x00, -0x77,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x32,0x00,0x00,0x00, -0x79,0x01,0x00,0x00,0x78,0x01,0x00,0x00,0xc2,0x00,0x05,0x00, -0x32,0x00,0x00,0x00,0x7b,0x01,0x00,0x00,0x79,0x01,0x00,0x00, -0x38,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x7c,0x01,0x00,0x00,0x7b,0x01,0x00,0x00,0x7c,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0x7d,0x01,0x00,0x00,0x7c,0x01,0x00,0x00, -0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0x7e,0x01,0x00,0x00, -0x7d,0x01,0x00,0x00,0xa4,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x32,0x00,0x00,0x00,0x83,0x01,0x00,0x00,0xf2,0x00,0x00,0x00, -0xc2,0x00,0x05,0x00,0x32,0x00,0x00,0x00,0x86,0x01,0x00,0x00, -0x83,0x01,0x00,0x00,0x3c,0x01,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x87,0x01,0x00,0x00,0x86,0x01,0x00,0x00, -0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x88,0x01,0x00,0x00, -0x87,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00, -0x89,0x01,0x00,0x00,0x88,0x01,0x00,0x00,0x7b,0x00,0x00,0x00, -0xc4,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0x8a,0x01,0x00,0x00, -0x89,0x01,0x00,0x00,0xb2,0x00,0x00,0x00,0xc5,0x00,0x05,0x00, -0x14,0x00,0x00,0x00,0x8b,0x01,0x00,0x00,0x7e,0x01,0x00,0x00, -0x8a,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0x3a,0x00,0x00,0x00, -0x8c,0x01,0x00,0x00,0x8b,0x01,0x00,0x00,0x72,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0x8d,0x01,0x00,0x00,0x8c,0x01,0x00,0x00, -0x82,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0x8e,0x01,0x00,0x00, -0x8d,0x01,0x00,0x00,0xb7,0x00,0x00,0x00,0x6f,0x00,0x04,0x00, -0x4c,0x00,0x00,0x00,0x8f,0x01,0x00,0x00,0x8e,0x01,0x00,0x00, -0x85,0x00,0x05,0x00,0x4c,0x00,0x00,0x00,0x90,0x01,0x00,0x00, -0x73,0x01,0x00,0x00,0x8f,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0x32,0x00,0x00,0x00,0x99,0x01,0x00,0x00,0xc2,0x00,0x00,0x00, -0xc2,0x00,0x05,0x00,0x32,0x00,0x00,0x00,0x9a,0x01,0x00,0x00, -0x99,0x01,0x00,0x00,0x77,0x01,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x9b,0x01,0x00,0x00,0x9a,0x01,0x00,0x00, -0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x9c,0x01,0x00,0x00, -0x9b,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00, -0x9d,0x01,0x00,0x00,0x9c,0x01,0x00,0x00,0x7b,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x32,0x00,0x00,0x00,0xa6,0x01,0x00,0x00, -0xce,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,0x32,0x00,0x00,0x00, -0xa8,0x01,0x00,0x00,0x3c,0x00,0x00,0x00,0x7b,0x00,0x00,0x00, -0xc7,0x00,0x05,0x00,0x32,0x00,0x00,0x00,0xa9,0x01,0x00,0x00, -0xa6,0x01,0x00,0x00,0xa8,0x01,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xaa,0x01,0x00,0x00,0xa9,0x01,0x00,0x00, -0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xab,0x01,0x00,0x00, -0xaa,0x01,0x00,0x00,0xab,0x00,0x05,0x00,0x64,0x00,0x00,0x00, -0xac,0x01,0x00,0x00,0xab,0x01,0x00,0x00,0x15,0x00,0x00,0x00, -0xa9,0x00,0x06,0x00,0x14,0x00,0x00,0x00,0xad,0x01,0x00,0x00, -0xac,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0xb2,0x00,0x00,0x00, -0x82,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0xae,0x01,0x00,0x00, -0x9d,0x01,0x00,0x00,0xad,0x01,0x00,0x00,0x6f,0x00,0x04,0x00, -0x4c,0x00,0x00,0x00,0xaf,0x01,0x00,0x00,0xae,0x01,0x00,0x00, -0x0c,0x00,0x08,0x00,0x4c,0x00,0x00,0x00,0xb1,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x90,0x01,0x00,0x00, -0xaf,0x01,0x00,0x00,0x68,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xb9,0x01,0x00,0x00,0x95,0x00,0x00,0x00, -0x50,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x97,0x00,0x00,0x00, -0xba,0x01,0x00,0x00,0x8e,0x00,0x00,0x00,0x15,0x00,0x00,0x00, -0xb9,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x4c,0x00,0x00,0x00, -0xbb,0x01,0x00,0x00,0xba,0x01,0x00,0x00,0x41,0x00,0x08,0x00, -0x9d,0x00,0x00,0x00,0xbf,0x01,0x00,0x00,0x77,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,0x89,0x00,0x00,0x00, -0x35,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x32,0x00,0x00,0x00, -0xc0,0x01,0x00,0x00,0xbf,0x01,0x00,0x00,0xc2,0x00,0x05,0x00, -0x32,0x00,0x00,0x00,0xc2,0x01,0x00,0x00,0xc0,0x01,0x00,0x00, -0x38,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xc3,0x01,0x00,0x00,0xc2,0x01,0x00,0x00,0x7c,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0xc4,0x01,0x00,0x00,0xc3,0x01,0x00,0x00, -0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0xc5,0x01,0x00,0x00, -0xc4,0x01,0x00,0x00,0xa4,0x00,0x00,0x00,0x41,0x00,0x08,0x00, -0x9d,0x00,0x00,0x00,0xca,0x01,0x00,0x00,0x77,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,0x89,0x00,0x00,0x00, -0xc9,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x32,0x00,0x00,0x00, -0xcb,0x01,0x00,0x00,0xca,0x01,0x00,0x00,0xc2,0x00,0x05,0x00, -0x32,0x00,0x00,0x00,0xce,0x01,0x00,0x00,0xcb,0x01,0x00,0x00, -0x38,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xcf,0x01,0x00,0x00,0xce,0x01,0x00,0x00,0x7c,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0xd0,0x01,0x00,0x00,0xcf,0x01,0x00,0x00, -0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0xd1,0x01,0x00,0x00, -0xd0,0x01,0x00,0x00,0x7b,0x00,0x00,0x00,0xc4,0x00,0x05,0x00, -0x14,0x00,0x00,0x00,0xd2,0x01,0x00,0x00,0xd1,0x01,0x00,0x00, -0xb2,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,0x14,0x00,0x00,0x00, -0xd3,0x01,0x00,0x00,0xc5,0x01,0x00,0x00,0xd2,0x01,0x00,0x00, -0x72,0x00,0x04,0x00,0x3a,0x00,0x00,0x00,0xd4,0x01,0x00,0x00, -0xd3,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0x14,0x00,0x00,0x00, -0xd5,0x01,0x00,0x00,0xd4,0x01,0x00,0x00,0x82,0x00,0x05,0x00, -0x14,0x00,0x00,0x00,0xd6,0x01,0x00,0x00,0xd5,0x01,0x00,0x00, -0xb7,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,0x4c,0x00,0x00,0x00, -0xd7,0x01,0x00,0x00,0xd6,0x01,0x00,0x00,0x85,0x00,0x05,0x00, -0x4c,0x00,0x00,0x00,0xd8,0x01,0x00,0x00,0xbb,0x01,0x00,0x00, -0xd7,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xe0,0x01,0x00,0x00,0xc1,0x00,0x00,0x00,0x50,0x00,0x00,0x00, -0x41,0x00,0x08,0x00,0x9d,0x00,0x00,0x00,0xe1,0x01,0x00,0x00, -0x77,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x7a,0x00,0x00,0x00, -0x35,0x00,0x00,0x00,0xe0,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0x32,0x00,0x00,0x00,0xe2,0x01,0x00,0x00,0xe1,0x01,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xe3,0x01,0x00,0x00, -0xe2,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00, -0xe4,0x01,0x00,0x00,0xe3,0x01,0x00,0x00,0xc7,0x00,0x05,0x00, -0x14,0x00,0x00,0x00,0xe5,0x01,0x00,0x00,0xe4,0x01,0x00,0x00, -0x7b,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xed,0x01,0x00,0x00,0xcd,0x00,0x00,0x00,0x50,0x00,0x00,0x00, -0x41,0x00,0x08,0x00,0x9d,0x00,0x00,0x00,0xee,0x01,0x00,0x00, -0x77,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x7a,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0xed,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0x32,0x00,0x00,0x00,0xef,0x01,0x00,0x00,0xee,0x01,0x00,0x00, -0xc7,0x00,0x05,0x00,0x32,0x00,0x00,0x00,0xf2,0x01,0x00,0x00, -0xef,0x01,0x00,0x00,0xd1,0x00,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xf3,0x01,0x00,0x00,0xf2,0x01,0x00,0x00, -0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xf4,0x01,0x00,0x00, -0xf3,0x01,0x00,0x00,0xab,0x00,0x05,0x00,0x64,0x00,0x00,0x00, -0xf5,0x01,0x00,0x00,0xf4,0x01,0x00,0x00,0x15,0x00,0x00,0x00, -0xa9,0x00,0x06,0x00,0x14,0x00,0x00,0x00,0xf6,0x01,0x00,0x00, -0xf5,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0xb2,0x00,0x00,0x00, -0x82,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0xf7,0x01,0x00,0x00, -0xe5,0x01,0x00,0x00,0xf6,0x01,0x00,0x00,0x6f,0x00,0x04,0x00, -0x4c,0x00,0x00,0x00,0xf8,0x01,0x00,0x00,0xf7,0x01,0x00,0x00, -0x0c,0x00,0x08,0x00,0x4c,0x00,0x00,0x00,0xfa,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0xd8,0x01,0x00,0x00, -0xf8,0x01,0x00,0x00,0xb1,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x03,0x02,0x00,0x00,0x95,0x00,0x00,0x00, -0x02,0x02,0x00,0x00,0x41,0x00,0x06,0x00,0x97,0x00,0x00,0x00, -0x04,0x02,0x00,0x00,0x8e,0x00,0x00,0x00,0x15,0x00,0x00,0x00, -0x03,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x4c,0x00,0x00,0x00, -0x05,0x02,0x00,0x00,0x04,0x02,0x00,0x00,0x41,0x00,0x08,0x00, -0x9d,0x00,0x00,0x00,0x09,0x02,0x00,0x00,0x77,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,0x89,0x00,0x00,0x00, -0x7b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x32,0x00,0x00,0x00, -0x0a,0x02,0x00,0x00,0x09,0x02,0x00,0x00,0xc2,0x00,0x05,0x00, -0x32,0x00,0x00,0x00,0x0c,0x02,0x00,0x00,0x0a,0x02,0x00,0x00, -0x38,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x0d,0x02,0x00,0x00,0x0c,0x02,0x00,0x00,0x7c,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0x0e,0x02,0x00,0x00,0x0d,0x02,0x00,0x00, -0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0x0f,0x02,0x00,0x00, -0x0e,0x02,0x00,0x00,0xa4,0x00,0x00,0x00,0x41,0x00,0x08,0x00, -0x9d,0x00,0x00,0x00,0x14,0x02,0x00,0x00,0x77,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,0x89,0x00,0x00,0x00, -0x13,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x32,0x00,0x00,0x00, -0x15,0x02,0x00,0x00,0x14,0x02,0x00,0x00,0xc2,0x00,0x05,0x00, -0x32,0x00,0x00,0x00,0x18,0x02,0x00,0x00,0x15,0x02,0x00,0x00, -0x38,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x19,0x02,0x00,0x00,0x18,0x02,0x00,0x00,0x7c,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0x1a,0x02,0x00,0x00,0x19,0x02,0x00,0x00, -0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0x1b,0x02,0x00,0x00, -0x1a,0x02,0x00,0x00,0x7b,0x00,0x00,0x00,0xc4,0x00,0x05,0x00, -0x14,0x00,0x00,0x00,0x1c,0x02,0x00,0x00,0x1b,0x02,0x00,0x00, -0xb2,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,0x14,0x00,0x00,0x00, -0x1d,0x02,0x00,0x00,0x0f,0x02,0x00,0x00,0x1c,0x02,0x00,0x00, -0x72,0x00,0x04,0x00,0x3a,0x00,0x00,0x00,0x1e,0x02,0x00,0x00, -0x1d,0x02,0x00,0x00,0x72,0x00,0x04,0x00,0x14,0x00,0x00,0x00, -0x1f,0x02,0x00,0x00,0x1e,0x02,0x00,0x00,0x82,0x00,0x05,0x00, -0x14,0x00,0x00,0x00,0x20,0x02,0x00,0x00,0x1f,0x02,0x00,0x00, -0xb7,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,0x4c,0x00,0x00,0x00, -0x21,0x02,0x00,0x00,0x20,0x02,0x00,0x00,0x85,0x00,0x05,0x00, -0x4c,0x00,0x00,0x00,0x22,0x02,0x00,0x00,0x05,0x02,0x00,0x00, -0x21,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x32,0x00,0x00,0x00, -0x2c,0x02,0x00,0x00,0xe1,0x01,0x00,0x00,0xc2,0x00,0x05,0x00, -0x32,0x00,0x00,0x00,0x2d,0x02,0x00,0x00,0x2c,0x02,0x00,0x00, -0x89,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x2e,0x02,0x00,0x00,0x2d,0x02,0x00,0x00,0x7c,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0x2f,0x02,0x00,0x00,0x2e,0x02,0x00,0x00, -0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0x30,0x02,0x00,0x00, -0x2f,0x02,0x00,0x00,0x7b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x32,0x00,0x00,0x00,0x3a,0x02,0x00,0x00,0xee,0x01,0x00,0x00, -0xc7,0x00,0x05,0x00,0x32,0x00,0x00,0x00,0x3d,0x02,0x00,0x00, -0x3a,0x02,0x00,0x00,0x18,0x01,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x3e,0x02,0x00,0x00,0x3d,0x02,0x00,0x00, -0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x3f,0x02,0x00,0x00, -0x3e,0x02,0x00,0x00,0xab,0x00,0x05,0x00,0x64,0x00,0x00,0x00, -0x40,0x02,0x00,0x00,0x3f,0x02,0x00,0x00,0x15,0x00,0x00,0x00, -0xa9,0x00,0x06,0x00,0x14,0x00,0x00,0x00,0x41,0x02,0x00,0x00, -0x40,0x02,0x00,0x00,0x15,0x00,0x00,0x00,0xb2,0x00,0x00,0x00, -0x82,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0x42,0x02,0x00,0x00, -0x30,0x02,0x00,0x00,0x41,0x02,0x00,0x00,0x6f,0x00,0x04,0x00, -0x4c,0x00,0x00,0x00,0x43,0x02,0x00,0x00,0x42,0x02,0x00,0x00, -0x0c,0x00,0x08,0x00,0x4c,0x00,0x00,0x00,0x45,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x22,0x02,0x00,0x00, -0x43,0x02,0x00,0x00,0xfa,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x4e,0x02,0x00,0x00,0x95,0x00,0x00,0x00, -0x4d,0x02,0x00,0x00,0x41,0x00,0x06,0x00,0x97,0x00,0x00,0x00, -0x4f,0x02,0x00,0x00,0x8e,0x00,0x00,0x00,0x15,0x00,0x00,0x00, -0x4e,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x4c,0x00,0x00,0x00, -0x50,0x02,0x00,0x00,0x4f,0x02,0x00,0x00,0x41,0x00,0x08,0x00, -0x9d,0x00,0x00,0x00,0x55,0x02,0x00,0x00,0x77,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,0x89,0x00,0x00,0x00, -0x54,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x32,0x00,0x00,0x00, -0x56,0x02,0x00,0x00,0x55,0x02,0x00,0x00,0xc2,0x00,0x05,0x00, -0x32,0x00,0x00,0x00,0x58,0x02,0x00,0x00,0x56,0x02,0x00,0x00, -0x38,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x59,0x02,0x00,0x00,0x58,0x02,0x00,0x00,0x7c,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0x5a,0x02,0x00,0x00,0x59,0x02,0x00,0x00, -0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0x5b,0x02,0x00,0x00, -0x5a,0x02,0x00,0x00,0xa4,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x32,0x00,0x00,0x00,0x60,0x02,0x00,0x00,0xca,0x01,0x00,0x00, -0xc2,0x00,0x05,0x00,0x32,0x00,0x00,0x00,0x63,0x02,0x00,0x00, -0x60,0x02,0x00,0x00,0x3c,0x01,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x64,0x02,0x00,0x00,0x63,0x02,0x00,0x00, -0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x65,0x02,0x00,0x00, -0x64,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00, -0x66,0x02,0x00,0x00,0x65,0x02,0x00,0x00,0x7b,0x00,0x00,0x00, -0xc4,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0x67,0x02,0x00,0x00, -0x66,0x02,0x00,0x00,0xb2,0x00,0x00,0x00,0xc5,0x00,0x05,0x00, -0x14,0x00,0x00,0x00,0x68,0x02,0x00,0x00,0x5b,0x02,0x00,0x00, -0x67,0x02,0x00,0x00,0x72,0x00,0x04,0x00,0x3a,0x00,0x00,0x00, -0x69,0x02,0x00,0x00,0x68,0x02,0x00,0x00,0x72,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0x6a,0x02,0x00,0x00,0x69,0x02,0x00,0x00, -0x82,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0x6b,0x02,0x00,0x00, -0x6a,0x02,0x00,0x00,0xb7,0x00,0x00,0x00,0x6f,0x00,0x04,0x00, -0x4c,0x00,0x00,0x00,0x6c,0x02,0x00,0x00,0x6b,0x02,0x00,0x00, -0x85,0x00,0x05,0x00,0x4c,0x00,0x00,0x00,0x6d,0x02,0x00,0x00, -0x50,0x02,0x00,0x00,0x6c,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0x32,0x00,0x00,0x00,0x77,0x02,0x00,0x00,0xe1,0x01,0x00,0x00, -0xc2,0x00,0x05,0x00,0x32,0x00,0x00,0x00,0x78,0x02,0x00,0x00, -0x77,0x02,0x00,0x00,0xb2,0x00,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x79,0x02,0x00,0x00,0x78,0x02,0x00,0x00, -0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x7a,0x02,0x00,0x00, -0x79,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00, -0x7b,0x02,0x00,0x00,0x7a,0x02,0x00,0x00,0x7b,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x32,0x00,0x00,0x00,0x85,0x02,0x00,0x00, -0xee,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x32,0x00,0x00,0x00, -0x88,0x02,0x00,0x00,0x85,0x02,0x00,0x00,0x5f,0x01,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x89,0x02,0x00,0x00, -0x88,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00, -0x8a,0x02,0x00,0x00,0x89,0x02,0x00,0x00,0xab,0x00,0x05,0x00, -0x64,0x00,0x00,0x00,0x8b,0x02,0x00,0x00,0x8a,0x02,0x00,0x00, -0x15,0x00,0x00,0x00,0xa9,0x00,0x06,0x00,0x14,0x00,0x00,0x00, -0x8c,0x02,0x00,0x00,0x8b,0x02,0x00,0x00,0x15,0x00,0x00,0x00, -0xb2,0x00,0x00,0x00,0x82,0x00,0x05,0x00,0x14,0x00,0x00,0x00, -0x8d,0x02,0x00,0x00,0x7b,0x02,0x00,0x00,0x8c,0x02,0x00,0x00, -0x6f,0x00,0x04,0x00,0x4c,0x00,0x00,0x00,0x8e,0x02,0x00,0x00, -0x8d,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,0x4c,0x00,0x00,0x00, -0x90,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x6d,0x02,0x00,0x00,0x8e,0x02,0x00,0x00,0x45,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x99,0x02,0x00,0x00, -0x95,0x00,0x00,0x00,0x98,0x02,0x00,0x00,0x41,0x00,0x06,0x00, -0x97,0x00,0x00,0x00,0x9a,0x02,0x00,0x00,0x8e,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0x99,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0x4c,0x00,0x00,0x00,0x9b,0x02,0x00,0x00,0x9a,0x02,0x00,0x00, -0x41,0x00,0x08,0x00,0x9d,0x00,0x00,0x00,0xa0,0x02,0x00,0x00, -0x77,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x7a,0x00,0x00,0x00, -0x89,0x00,0x00,0x00,0x9f,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0x32,0x00,0x00,0x00,0xa1,0x02,0x00,0x00,0xa0,0x02,0x00,0x00, -0xc2,0x00,0x05,0x00,0x32,0x00,0x00,0x00,0xa3,0x02,0x00,0x00, -0xa1,0x02,0x00,0x00,0x38,0x00,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xa4,0x02,0x00,0x00,0xa3,0x02,0x00,0x00, -0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xa5,0x02,0x00,0x00, -0xa4,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00, -0xa6,0x02,0x00,0x00,0xa5,0x02,0x00,0x00,0xa4,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x32,0x00,0x00,0x00,0xab,0x02,0x00,0x00, -0x14,0x02,0x00,0x00,0xc2,0x00,0x05,0x00,0x32,0x00,0x00,0x00, -0xae,0x02,0x00,0x00,0xab,0x02,0x00,0x00,0x3c,0x01,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xaf,0x02,0x00,0x00, -0xae,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00, -0xb0,0x02,0x00,0x00,0xaf,0x02,0x00,0x00,0xc7,0x00,0x05,0x00, -0x14,0x00,0x00,0x00,0xb1,0x02,0x00,0x00,0xb0,0x02,0x00,0x00, -0x7b,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,0x14,0x00,0x00,0x00, -0xb2,0x02,0x00,0x00,0xb1,0x02,0x00,0x00,0xb2,0x00,0x00,0x00, -0xc5,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0xb3,0x02,0x00,0x00, -0xa6,0x02,0x00,0x00,0xb2,0x02,0x00,0x00,0x72,0x00,0x04,0x00, -0x3a,0x00,0x00,0x00,0xb4,0x02,0x00,0x00,0xb3,0x02,0x00,0x00, -0x72,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xb5,0x02,0x00,0x00, -0xb4,0x02,0x00,0x00,0x82,0x00,0x05,0x00,0x14,0x00,0x00,0x00, -0xb6,0x02,0x00,0x00,0xb5,0x02,0x00,0x00,0xb7,0x00,0x00,0x00, -0x6f,0x00,0x04,0x00,0x4c,0x00,0x00,0x00,0xb7,0x02,0x00,0x00, -0xb6,0x02,0x00,0x00,0x85,0x00,0x05,0x00,0x4c,0x00,0x00,0x00, -0xb8,0x02,0x00,0x00,0x9b,0x02,0x00,0x00,0xb7,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0x32,0x00,0x00,0x00,0xc2,0x02,0x00,0x00, -0xe1,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x32,0x00,0x00,0x00, -0xc3,0x02,0x00,0x00,0xc2,0x02,0x00,0x00,0x77,0x01,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xc4,0x02,0x00,0x00, -0xc3,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00, -0xc5,0x02,0x00,0x00,0xc4,0x02,0x00,0x00,0xc7,0x00,0x05,0x00, -0x14,0x00,0x00,0x00,0xc6,0x02,0x00,0x00,0xc5,0x02,0x00,0x00, -0x7b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x32,0x00,0x00,0x00, -0xd0,0x02,0x00,0x00,0xee,0x01,0x00,0x00,0xc7,0x00,0x05,0x00, -0x32,0x00,0x00,0x00,0xd3,0x02,0x00,0x00,0xd0,0x02,0x00,0x00, -0xa8,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xd4,0x02,0x00,0x00,0xd3,0x02,0x00,0x00,0x7c,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0xd5,0x02,0x00,0x00,0xd4,0x02,0x00,0x00, -0xab,0x00,0x05,0x00,0x64,0x00,0x00,0x00,0xd6,0x02,0x00,0x00, -0xd5,0x02,0x00,0x00,0x15,0x00,0x00,0x00,0xa9,0x00,0x06,0x00, -0x14,0x00,0x00,0x00,0xd7,0x02,0x00,0x00,0xd6,0x02,0x00,0x00, -0x15,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0x82,0x00,0x05,0x00, -0x14,0x00,0x00,0x00,0xd8,0x02,0x00,0x00,0xc6,0x02,0x00,0x00, -0xd7,0x02,0x00,0x00,0x6f,0x00,0x04,0x00,0x4c,0x00,0x00,0x00, -0xd9,0x02,0x00,0x00,0xd8,0x02,0x00,0x00,0x0c,0x00,0x08,0x00, -0x4c,0x00,0x00,0x00,0xdb,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0xb8,0x02,0x00,0x00,0xd9,0x02,0x00,0x00, -0x90,0x02,0x00,0x00,0x81,0x00,0x05,0x00,0x4c,0x00,0x00,0x00, -0xdd,0x02,0x00,0x00,0x1c,0x03,0x00,0x00,0xdb,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0xdf,0x02,0x00,0x00, -0x1b,0x03,0x00,0x00,0x35,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x83,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x85,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x4c,0x00,0x00,0x00,0xe8,0x02,0x00,0x00, -0x57,0x00,0x00,0x00,0x0c,0x00,0x08,0x00,0x4c,0x00,0x00,0x00, -0xe9,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x7f,0x00,0x00,0x00,0x1c,0x03,0x00,0x00,0xe8,0x02,0x00,0x00, -0x3e,0x00,0x03,0x00,0x57,0x00,0x00,0x00,0xe9,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0x60,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x60,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xec,0x02,0x00,0x00,0x18,0x03,0x00,0x00,0x23,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x5d,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x5f,0x00,0x00,0x00,0xe0,0x00,0x04,0x00,0x23,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0xed,0x02,0x00,0x00,0xf9,0x00,0x02,0x00, -0xef,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xef,0x02,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x19,0x03,0x00,0x00, -0x50,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,0x06,0x03,0x00,0x00, -0xf2,0x02,0x00,0x00,0xac,0x00,0x05,0x00,0x64,0x00,0x00,0x00, -0xf5,0x02,0x00,0x00,0x19,0x03,0x00,0x00,0x0c,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xf1,0x02,0x00,0x00,0xf2,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xf5,0x02,0x00,0x00, -0xf0,0x02,0x00,0x00,0xf1,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xf0,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x64,0x00,0x00,0x00, -0xf8,0x02,0x00,0x00,0x24,0x00,0x00,0x00,0x19,0x03,0x00,0x00, -0xf7,0x00,0x03,0x00,0xfa,0x02,0x00,0x00,0x00,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xf8,0x02,0x00,0x00,0xf9,0x02,0x00,0x00, -0xfa,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xf9,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfe,0x02,0x00,0x00, -0x24,0x00,0x00,0x00,0x19,0x03,0x00,0x00,0x41,0x00,0x05,0x00, -0x56,0x00,0x00,0x00,0xff,0x02,0x00,0x00,0x4f,0x00,0x00,0x00, -0xfe,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x4c,0x00,0x00,0x00, -0x00,0x03,0x00,0x00,0xff,0x02,0x00,0x00,0x41,0x00,0x05,0x00, -0x56,0x00,0x00,0x00,0x01,0x03,0x00,0x00,0x4f,0x00,0x00,0x00, -0x24,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x4c,0x00,0x00,0x00, -0x02,0x03,0x00,0x00,0x01,0x03,0x00,0x00,0x81,0x00,0x05,0x00, -0x4c,0x00,0x00,0x00,0x03,0x03,0x00,0x00,0x02,0x03,0x00,0x00, -0x00,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,0x01,0x03,0x00,0x00, -0x03,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,0xfa,0x02,0x00,0x00, -0xf8,0x00,0x02,0x00,0xfa,0x02,0x00,0x00,0xe0,0x00,0x04,0x00, -0x23,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0xed,0x02,0x00,0x00, -0xf9,0x00,0x02,0x00,0xf2,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xf2,0x02,0x00,0x00,0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x06,0x03,0x00,0x00,0x19,0x03,0x00,0x00,0x35,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xef,0x02,0x00,0x00,0xf8,0x00,0x02,0x00, -0xf1,0x02,0x00,0x00,0xaa,0x00,0x05,0x00,0x64,0x00,0x00,0x00, -0x08,0x03,0x00,0x00,0x24,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0xf7,0x00,0x03,0x00,0x0a,0x03,0x00,0x00,0x00,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x08,0x03,0x00,0x00,0x09,0x03,0x00,0x00, -0x0a,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x09,0x03,0x00,0x00, -0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x0f,0x03,0x00,0x00, -0x13,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x10,0x03,0x00,0x00,0x0f,0x03,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x12,0x03,0x00,0x00, -0x10,0x03,0x00,0x00,0x0f,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x56,0x00,0x00,0x00,0x13,0x03,0x00,0x00,0x4f,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x4c,0x00,0x00,0x00, -0x14,0x03,0x00,0x00,0x13,0x03,0x00,0x00,0x41,0x00,0x06,0x00, -0x97,0x00,0x00,0x00,0x15,0x03,0x00,0x00,0x0e,0x03,0x00,0x00, -0x15,0x00,0x00,0x00,0x12,0x03,0x00,0x00,0x3e,0x00,0x03,0x00, -0x15,0x03,0x00,0x00,0x14,0x03,0x00,0x00,0xf9,0x00,0x02,0x00, -0x0a,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x0a,0x03,0x00,0x00, -0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00, -}; -const uint64_t mul_mat_vec_q3_K_f32_len = 9236; - -unsigned char mul_mat_vec_q4_0_f32_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0xcb,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00, -0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00, -0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64, -0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00, -0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0f,0x00,0x0c,0x00, -0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e, -0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x11,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x26,0x00,0x00,0x00,0x52,0x00,0x00,0x00, -0x78,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0x10,0x00,0x06,0x00, -0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x11,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x15,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x24,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x24,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x24,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x24,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x4d,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x4e,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x4e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x4f,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0x50,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x50,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x50,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x52,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x52,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x75,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0x76,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x76,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x76,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x78,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x78,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xb7,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0xb8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0xb8,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0xb8,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xba,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xba,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xc3,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xc4,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00, -0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x16,0x00,0x03,0x00,0x14,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x15,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x16,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x17,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x16,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00, -0x1a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x1b,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0x1e,0x00,0x05,0x00,0x24,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x25,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x24,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x25,0x00,0x00,0x00,0x26,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x27,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x27,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x29,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x14,0x00,0x02,0x00,0x2d,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x3d,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x16,0x00,0x03,0x00, -0x4a,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x15,0x00,0x04,0x00, -0x4b,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4c,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x4d,0x00,0x00,0x00, -0x4b,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x1e,0x00,0x04,0x00, -0x4e,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x4d,0x00,0x00,0x00, -0x1d,0x00,0x03,0x00,0x4f,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x1e,0x00,0x03,0x00,0x50,0x00,0x00,0x00,0x4f,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x51,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x50,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x51,0x00,0x00,0x00, -0x52,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x54,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x4a,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x27,0x00,0x00,0x00,0x5a,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x5c,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0x17,0x00,0x04,0x00, -0x60,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x64,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x27,0x00,0x00,0x00, -0x68,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x00,0x00,0x00,0x41, -0x1d,0x00,0x03,0x00,0x75,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0x1e,0x00,0x03,0x00,0x76,0x00,0x00,0x00,0x75,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x77,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x76,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x77,0x00,0x00,0x00, -0x78,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x80,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x98,0x00,0x00,0x00,0x08,0x01,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x1d,0x00,0x03,0x00, -0xb7,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x1e,0x00,0x03,0x00, -0xb8,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0xb9,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xb8,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0xb9,0x00,0x00,0x00,0xba,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x27,0x00,0x00,0x00, -0xbb,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x33,0x00,0x06,0x00,0x09,0x00,0x00,0x00,0xc4,0x00,0x00,0x00, -0xc3,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x2c,0x00,0x05,0x00,0x60,0x00,0x00,0x00,0xca,0x00,0x00,0x00, -0x6d,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x36,0x00,0x05,0x00, -0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x3e,0x00,0x03,0x00, -0x1c,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x1e,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x1e,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xc7,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x97,0x00,0x00,0x00, -0x1f,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x29,0x00,0x00,0x00, -0x2a,0x00,0x00,0x00,0x26,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x00,0x00, -0x2a,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x2c,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x15,0x00,0x00,0x00, -0xb0,0x00,0x05,0x00,0x2d,0x00,0x00,0x00,0x2e,0x00,0x00,0x00, -0xc7,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x20,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x2e,0x00,0x00,0x00,0x1f,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x1f,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x31,0x00,0x00,0x00, -0xc7,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x13,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x35,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x3a,0x00,0x00,0x00, -0x35,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x3e,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x41,0x00,0x00,0x00, -0x35,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x41,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x47,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x41,0x00,0x00,0x00, -0x41,0x00,0x07,0x00,0x54,0x00,0x00,0x00,0x55,0x00,0x00,0x00, -0x52,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x3e,0x00,0x00,0x00, -0x28,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x4a,0x00,0x00,0x00, -0x56,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x73,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0x57,0x00,0x00,0x00,0x56,0x00,0x00,0x00, -0x41,0x00,0x08,0x00,0x5c,0x00,0x00,0x00,0x5d,0x00,0x00,0x00, -0x52,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x3e,0x00,0x00,0x00, -0x5a,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x4b,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x5d,0x00,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x5f,0x00,0x00,0x00, -0x5e,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x65,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,0x64,0x00,0x00,0x00, -0x70,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x66,0x00,0x00,0x00, -0x65,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x69,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,0x68,0x00,0x00,0x00, -0x70,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x6a,0x00,0x00,0x00, -0x69,0x00,0x00,0x00,0x50,0x00,0x05,0x00,0x60,0x00,0x00,0x00, -0x6b,0x00,0x00,0x00,0x66,0x00,0x00,0x00,0x6a,0x00,0x00,0x00, -0x83,0x00,0x05,0x00,0x60,0x00,0x00,0x00,0x6f,0x00,0x00,0x00, -0x6b,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0x8e,0x00,0x05,0x00, -0x60,0x00,0x00,0x00,0x71,0x00,0x00,0x00,0x6f,0x00,0x00,0x00, -0x57,0x00,0x00,0x00,0x51,0x00,0x05,0x00,0x14,0x00,0x00,0x00, -0x74,0x00,0x00,0x00,0x71,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x29,0x00,0x00,0x00,0x79,0x00,0x00,0x00, -0x26,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,0x79,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7c,0x00,0x00,0x00, -0x7a,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x7c,0x00,0x00,0x00, -0x42,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x80,0x00,0x00,0x00, -0x81,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0x7e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x14,0x00,0x00,0x00, -0x82,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x51,0x00,0x05,0x00, -0x14,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x71,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x8d,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x4c,0x00,0x00,0x00, -0x41,0x00,0x06,0x00,0x80,0x00,0x00,0x00,0x8e,0x00,0x00,0x00, -0x78,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x8d,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x8f,0x00,0x00,0x00, -0x8e,0x00,0x00,0x00,0x85,0x00,0x05,0x00,0x14,0x00,0x00,0x00, -0x90,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x8f,0x00,0x00,0x00, -0x0c,0x00,0x08,0x00,0x14,0x00,0x00,0x00,0x91,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x74,0x00,0x00,0x00, -0x82,0x00,0x00,0x00,0x90,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x81,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0x94,0x00,0x00,0x00, -0x93,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x3e,0x00,0x03,0x00, -0x1c,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0xc7,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x1e,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x20,0x00,0x00,0x00,0xe0,0x00,0x04,0x00, -0x32,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x98,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x9b,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x9b,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xc8,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0xb2,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,0xac,0x00,0x05,0x00, -0x2d,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0xc8,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x9d,0x00,0x00,0x00, -0x9e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xa1,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0x9d,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x9c,0x00,0x00,0x00,0xb0,0x00,0x05,0x00, -0x2d,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0x13,0x00,0x00,0x00, -0xc8,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0xa6,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xa4,0x00,0x00,0x00, -0xa5,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xa5,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xaa,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0xc8,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0xab,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0xab,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xae,0x00,0x00,0x00, -0x1c,0x00,0x00,0x00,0x81,0x00,0x05,0x00,0x14,0x00,0x00,0x00, -0xaf,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0xac,0x00,0x00,0x00, -0x3e,0x00,0x03,0x00,0x1c,0x00,0x00,0x00,0xaf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xa6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xa6,0x00,0x00,0x00,0xe0,0x00,0x04,0x00,0x32,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x9e,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x9e,0x00,0x00,0x00, -0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb2,0x00,0x00,0x00, -0xc8,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x9b,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x9d,0x00,0x00,0x00, -0xaa,0x00,0x05,0x00,0x2d,0x00,0x00,0x00,0xb4,0x00,0x00,0x00, -0x13,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xf7,0x00,0x03,0x00, -0xb6,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xb4,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,0xb6,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xb5,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x29,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x26,0x00,0x00,0x00, -0xbb,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xbd,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0xbd,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x1b,0x00,0x00,0x00, -0xc0,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xc1,0x00,0x00,0x00, -0xc0,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x80,0x00,0x00,0x00, -0xc2,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0xbf,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0xc2,0x00,0x00,0x00, -0xc1,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb6,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xb6,0x00,0x00,0x00,0xfd,0x00,0x01,0x00, -0x38,0x00,0x01,0x00, -}; -const uint64_t mul_mat_vec_q4_0_f32_len = 3184; - -unsigned char mul_mat_vec_q4_1_f32_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0xce,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00, -0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00, -0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64, -0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00, -0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0f,0x00,0x0c,0x00, -0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e, -0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x11,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x26,0x00,0x00,0x00,0x52,0x00,0x00,0x00, -0x7e,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x10,0x00,0x06,0x00, -0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x11,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x15,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x24,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x24,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x24,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x24,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x4d,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x4e,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x4e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x4e,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x4f,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x50,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x50,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x50,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x52,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x52,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x7b,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x7c,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x7c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x7c,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x7e,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x7e,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xbd,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0xbe,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0xbe,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0xbe,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xc0,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xc0,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xc8,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xc9,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x13,0x00,0x02,0x00, -0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00, -0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x16,0x00,0x03,0x00, -0x14,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x1c,0x00,0x04,0x00,0x16,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x17,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x17,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x1a,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x1b,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x1e,0x00,0x05,0x00, -0x24,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x25,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x25,0x00,0x00,0x00,0x26,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x27,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x27,0x00,0x00,0x00, -0x28,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x29,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x14,0x00,0x02,0x00,0x2d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0x4a,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x4b,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x1c,0x00,0x04,0x00,0x4d,0x00,0x00,0x00,0x4b,0x00,0x00,0x00, -0x4c,0x00,0x00,0x00,0x1e,0x00,0x05,0x00,0x4e,0x00,0x00,0x00, -0x4a,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x4d,0x00,0x00,0x00, -0x1d,0x00,0x03,0x00,0x4f,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x1e,0x00,0x03,0x00,0x50,0x00,0x00,0x00,0x4f,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x51,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x50,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x51,0x00,0x00,0x00, -0x52,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x54,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x4a,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x27,0x00,0x00,0x00,0x5a,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x27,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x62,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x4b,0x00,0x00,0x00, -0x17,0x00,0x04,0x00,0x66,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x6a,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x27,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x1d,0x00,0x03,0x00,0x7b,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0x1e,0x00,0x03,0x00,0x7c,0x00,0x00,0x00,0x7b,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x7d,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x7c,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x7d,0x00,0x00,0x00, -0x7e,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x86,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x8a,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x9e,0x00,0x00,0x00,0x08,0x01,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x1d,0x00,0x03,0x00, -0xbd,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x1e,0x00,0x03,0x00, -0xbe,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0xbf,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xbe,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0xbf,0x00,0x00,0x00,0xc0,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xc8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00, -0x09,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0xc8,0x00,0x00,0x00, -0x8a,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0x36,0x00,0x05,0x00, -0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x3e,0x00,0x03,0x00, -0x1c,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x1e,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x1e,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xcc,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x9d,0x00,0x00,0x00, -0x1f,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x29,0x00,0x00,0x00, -0x2a,0x00,0x00,0x00,0x26,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x00,0x00, -0x2a,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x2c,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x15,0x00,0x00,0x00, -0xb0,0x00,0x05,0x00,0x2d,0x00,0x00,0x00,0x2e,0x00,0x00,0x00, -0xcc,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x20,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x2e,0x00,0x00,0x00,0x1f,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x1f,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x31,0x00,0x00,0x00, -0xcc,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x13,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x35,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x3a,0x00,0x00,0x00, -0x35,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x3e,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x41,0x00,0x00,0x00, -0x35,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x41,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x47,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x41,0x00,0x00,0x00, -0x41,0x00,0x07,0x00,0x54,0x00,0x00,0x00,0x55,0x00,0x00,0x00, -0x52,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x3e,0x00,0x00,0x00, -0x28,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x4a,0x00,0x00,0x00, -0x56,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x73,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0x57,0x00,0x00,0x00,0x56,0x00,0x00,0x00, -0x41,0x00,0x07,0x00,0x54,0x00,0x00,0x00,0x5b,0x00,0x00,0x00, -0x52,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x3e,0x00,0x00,0x00, -0x5a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x4a,0x00,0x00,0x00, -0x5c,0x00,0x00,0x00,0x5b,0x00,0x00,0x00,0x73,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,0x5c,0x00,0x00,0x00, -0x41,0x00,0x08,0x00,0x62,0x00,0x00,0x00,0x63,0x00,0x00,0x00, -0x52,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x3e,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x4b,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x63,0x00,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x65,0x00,0x00,0x00, -0x64,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x6b,0x00,0x00,0x00,0x65,0x00,0x00,0x00,0x6a,0x00,0x00,0x00, -0x70,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x6b,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x6f,0x00,0x00,0x00,0x65,0x00,0x00,0x00,0x6e,0x00,0x00,0x00, -0x70,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x70,0x00,0x00,0x00, -0x6f,0x00,0x00,0x00,0x50,0x00,0x05,0x00,0x66,0x00,0x00,0x00, -0x71,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x70,0x00,0x00,0x00, -0x8e,0x00,0x05,0x00,0x66,0x00,0x00,0x00,0x74,0x00,0x00,0x00, -0x71,0x00,0x00,0x00,0x57,0x00,0x00,0x00,0x50,0x00,0x05,0x00, -0x66,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x5d,0x00,0x00,0x00, -0x5d,0x00,0x00,0x00,0x81,0x00,0x05,0x00,0x66,0x00,0x00,0x00, -0x77,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x76,0x00,0x00,0x00, -0x51,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0x7a,0x00,0x00,0x00, -0x77,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x29,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x26,0x00,0x00,0x00, -0x5a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x80,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x80,0x00,0x00,0x00, -0x47,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x42,0x00,0x00,0x00, -0x41,0x00,0x06,0x00,0x86,0x00,0x00,0x00,0x87,0x00,0x00,0x00, -0x7e,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x88,0x00,0x00,0x00, -0x87,0x00,0x00,0x00,0x51,0x00,0x05,0x00,0x14,0x00,0x00,0x00, -0x8c,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x93,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x41,0x00,0x06,0x00, -0x86,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x7e,0x00,0x00,0x00, -0x28,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0x94,0x00,0x00,0x00, -0x85,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0x96,0x00,0x00,0x00, -0x8c,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0x0c,0x00,0x08,0x00, -0x14,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,0x88,0x00,0x00,0x00, -0x96,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x14,0x00,0x00,0x00, -0x99,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x81,0x00,0x05,0x00, -0x14,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x99,0x00,0x00,0x00, -0x97,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0x1c,0x00,0x00,0x00, -0x9a,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9d,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x1e,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x20,0x00,0x00,0x00,0xe0,0x00,0x04,0x00,0x32,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xa1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xa1,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xcd,0x00,0x00,0x00, -0xa0,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0xb8,0x00,0x00,0x00, -0xa4,0x00,0x00,0x00,0xac,0x00,0x05,0x00,0x2d,0x00,0x00,0x00, -0xa7,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xa3,0x00,0x00,0x00,0xa4,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xa7,0x00,0x00,0x00, -0xa2,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xa2,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x2d,0x00,0x00,0x00, -0xaa,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0xcd,0x00,0x00,0x00, -0xf7,0x00,0x03,0x00,0xac,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xaa,0x00,0x00,0x00,0xab,0x00,0x00,0x00, -0xac,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xab,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb0,0x00,0x00,0x00, -0x13,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x1b,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0xb0,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x14,0x00,0x00,0x00, -0xb2,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x81,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0xb5,0x00,0x00,0x00, -0xb4,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0x3e,0x00,0x03,0x00, -0x1c,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xac,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xac,0x00,0x00,0x00, -0xe0,0x00,0x04,0x00,0x32,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x9e,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xa4,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xa4,0x00,0x00,0x00,0xc2,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0xcd,0x00,0x00,0x00, -0x5a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xa1,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xa3,0x00,0x00,0x00,0xaa,0x00,0x05,0x00, -0x2d,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0x13,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0xbc,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xba,0x00,0x00,0x00, -0xbb,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xbb,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x29,0x00,0x00,0x00, -0xc1,0x00,0x00,0x00,0x26,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xc2,0x00,0x00,0x00, -0xc1,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xc4,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0xc5,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0xc5,0x00,0x00,0x00, -0x41,0x00,0x06,0x00,0x86,0x00,0x00,0x00,0xc7,0x00,0x00,0x00, -0xc0,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0xc4,0x00,0x00,0x00, -0x3e,0x00,0x03,0x00,0xc7,0x00,0x00,0x00,0xc6,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xbc,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xbc,0x00,0x00,0x00,0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00, - -}; -const uint64_t mul_mat_vec_q4_1_f32_len = 3252; - -unsigned char mul_mat_vec_q4_K_f32_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0x9e,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x27,0x00,0x00,0x00, -0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00, -0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00, -0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30, -0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x0f,0x00,0x0c,0x00,0x05,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x4d,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0xec,0x01,0x00,0x00, -0x90,0x03,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x11,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x20,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x70,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x71,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x72,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x72,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x72,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x73,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x90,0x00,0x00,0x00, -0x48,0x00,0x04,0x00,0x74,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x74,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0x74,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x76,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x76,0x00,0x00,0x00, -0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xe9,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x04,0x00,0xea,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0xea,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0xea,0x01,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xec,0x01,0x00,0x00,0x22,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xec,0x01,0x00,0x00, -0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x8d,0x03,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x04,0x00,0x8e,0x03,0x00,0x00,0x00,0x00,0x00,0x00, -0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x8e,0x03,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0x8e,0x03,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x90,0x03,0x00,0x00,0x22,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x90,0x03,0x00,0x00, -0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x98,0x03,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00, -0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x1e,0x00,0x05,0x00, -0x11,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x12,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x12,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x16,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x00,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x3f,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x16,0x00,0x03,0x00,0x4a,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x1c,0x00,0x04,0x00,0x4b,0x00,0x00,0x00,0x4a,0x00,0x00,0x00, -0x3f,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x4c,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x4c,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x4a,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x54,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x4a,0x00,0x00,0x00, -0x14,0x00,0x02,0x00,0x5f,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x80,0x00,0x00,0x00, -0x16,0x00,0x03,0x00,0x6c,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x17,0x00,0x04,0x00,0x6d,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x6e,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x1c,0x00,0x04,0x00,0x70,0x00,0x00,0x00,0x6e,0x00,0x00,0x00, -0x6f,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x71,0x00,0x00,0x00, -0x6e,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x1e,0x00,0x05,0x00, -0x72,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x70,0x00,0x00,0x00, -0x71,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x73,0x00,0x00,0x00, -0x72,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x74,0x00,0x00,0x00, -0x73,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x75,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x75,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x7a,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x82,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x8e,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x6e,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00, -0x93,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x15,0x00,0x04,0x00, -0x95,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xba,0x00,0x00,0x00, -0x05,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xc9,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xda,0x00,0x00,0x00, -0xc0,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00, -0xdc,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x06,0x01,0x00,0x00, -0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x61,0x01,0x00,0x00,0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x9f,0x01,0x00,0x00,0x41,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xad,0x01,0x00,0x00, -0x42,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xbb,0x01,0x00,0x00,0x43,0x00,0x00,0x00,0x1d,0x00,0x03,0x00, -0xe9,0x01,0x00,0x00,0x4a,0x00,0x00,0x00,0x1e,0x00,0x03,0x00, -0xea,0x01,0x00,0x00,0xe9,0x01,0x00,0x00,0x20,0x00,0x04,0x00, -0xeb,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0xea,0x01,0x00,0x00, -0x3b,0x00,0x04,0x00,0xeb,0x01,0x00,0x00,0xec,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xf1,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x27,0x02,0x00,0x00,0x21,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x33,0x02,0x00,0x00, -0x22,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x3f,0x02,0x00,0x00,0x23,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x6f,0x03,0x00,0x00,0x08,0x01,0x00,0x00, -0x1d,0x00,0x03,0x00,0x8d,0x03,0x00,0x00,0x4a,0x00,0x00,0x00, -0x1e,0x00,0x03,0x00,0x8e,0x03,0x00,0x00,0x8d,0x03,0x00,0x00, -0x20,0x00,0x04,0x00,0x8f,0x03,0x00,0x00,0x0c,0x00,0x00,0x00, -0x8e,0x03,0x00,0x00,0x3b,0x00,0x04,0x00,0x8f,0x03,0x00,0x00, -0x90,0x03,0x00,0x00,0x0c,0x00,0x00,0x00,0x2c,0x00,0x06,0x00, -0x09,0x00,0x00,0x00,0x98,0x03,0x00,0x00,0x3f,0x00,0x00,0x00, -0x82,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x36,0x00,0x05,0x00, -0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x17,0x00,0x00,0x00, -0x13,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x17,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1a,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x1a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x21,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x21,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x24,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x24,0x00,0x00,0x00, -0x2b,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x30,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x2c,0x00,0x00,0x00, -0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x31,0x00,0x00,0x00, -0x24,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x2c,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x3a,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x3d,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x3c,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x41,0x00,0x00,0x00, -0x3f,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x41,0x00,0x00,0x00, -0x3d,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x47,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x49,0x00,0x00,0x00, -0x47,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x28,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x52,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x24,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x54,0x00,0x00,0x00,0x55,0x00,0x00,0x00, -0x4d,0x00,0x00,0x00,0x52,0x00,0x00,0x00,0x3e,0x00,0x03,0x00, -0x55,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x58,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x58,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x99,0x03,0x00,0x00, -0x28,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x6e,0x03,0x00,0x00, -0x59,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x5f,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x99,0x03,0x00,0x00,0x1a,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x5a,0x00,0x00,0x00,0x59,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x60,0x00,0x00,0x00, -0x59,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x59,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x63,0x00,0x00,0x00,0x99,0x03,0x00,0x00,0x19,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x65,0x00,0x00,0x00, -0x63,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x69,0x00,0x00,0x00,0x65,0x00,0x00,0x00, -0x68,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x79,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x99,0x03,0x00,0x00, -0x41,0x00,0x08,0x00,0x7a,0x00,0x00,0x00,0x7b,0x00,0x00,0x00, -0x76,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x79,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x6c,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x7b,0x00,0x00,0x00, -0x73,0x00,0x04,0x00,0x4a,0x00,0x00,0x00,0x7d,0x00,0x00,0x00, -0x7c,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x7a,0x00,0x00,0x00, -0x83,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x15,0x00,0x00,0x00, -0x79,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x82,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x6c,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x83,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x4a,0x00,0x00,0x00, -0x85,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x8e,0x00,0x00,0x00, -0x8f,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x15,0x00,0x00,0x00, -0x79,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,0x8d,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x6e,0x00,0x00,0x00,0x90,0x00,0x00,0x00, -0x8f,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x91,0x00,0x00,0x00,0x90,0x00,0x00,0x00,0x7c,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x91,0x00,0x00,0x00, -0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0x94,0x00,0x00,0x00, -0x92,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x72,0x00,0x04,0x00, -0x95,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x94,0x00,0x00,0x00, -0x7c,0x00,0x04,0x00,0x6e,0x00,0x00,0x00,0x97,0x00,0x00,0x00, -0x96,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9e,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x82,0x00,0x00,0x00, -0x41,0x00,0x08,0x00,0x8e,0x00,0x00,0x00,0x9f,0x00,0x00,0x00, -0x76,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x79,0x00,0x00,0x00, -0x8b,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x6e,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0x9f,0x00,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa1,0x00,0x00,0x00, -0xa0,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00, -0xa2,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0xc7,0x00,0x05,0x00, -0x14,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0xa2,0x00,0x00,0x00, -0x93,0x00,0x00,0x00,0x72,0x00,0x04,0x00,0x95,0x00,0x00,0x00, -0xa4,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0x7c,0x00,0x04,0x00, -0x6e,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,0xa4,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00, -0x8d,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x41,0x00,0x08,0x00, -0x8e,0x00,0x00,0x00,0xad,0x00,0x00,0x00,0x76,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x8b,0x00,0x00,0x00, -0xac,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x6e,0x00,0x00,0x00, -0xae,0x00,0x00,0x00,0xad,0x00,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0xae,0x00,0x00,0x00, -0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xb0,0x00,0x00,0x00, -0xaf,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00, -0xb1,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0x93,0x00,0x00,0x00, -0x72,0x00,0x04,0x00,0x95,0x00,0x00,0x00,0xb2,0x00,0x00,0x00, -0xb1,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x6e,0x00,0x00,0x00, -0xb3,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x8d,0x00,0x00,0x00, -0xba,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x8e,0x00,0x00,0x00, -0xbc,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x15,0x00,0x00,0x00, -0x79,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,0xbb,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x6e,0x00,0x00,0x00,0xbd,0x00,0x00,0x00, -0xbc,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xbe,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x7c,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0xbe,0x00,0x00,0x00, -0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0xc0,0x00,0x00,0x00, -0xbf,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x72,0x00,0x04,0x00, -0x95,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,0xc0,0x00,0x00,0x00, -0x7c,0x00,0x04,0x00,0x6e,0x00,0x00,0x00,0xc2,0x00,0x00,0x00, -0xc1,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xca,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0xc9,0x00,0x00,0x00, -0x41,0x00,0x08,0x00,0x8e,0x00,0x00,0x00,0xcb,0x00,0x00,0x00, -0x76,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x79,0x00,0x00,0x00, -0x8b,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x6e,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0xcb,0x00,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xcd,0x00,0x00,0x00, -0xcc,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00, -0xce,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,0xc7,0x00,0x05,0x00, -0x14,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0xce,0x00,0x00,0x00, -0xcf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x6e,0x00,0x00,0x00, -0xd7,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xd8,0x00,0x00,0x00,0xd7,0x00,0x00,0x00, -0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xd9,0x00,0x00,0x00, -0xd8,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00, -0xdb,0x00,0x00,0x00,0xd9,0x00,0x00,0x00,0xda,0x00,0x00,0x00, -0xc3,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0xdd,0x00,0x00,0x00, -0xdb,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,0xc5,0x00,0x05,0x00, -0x14,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0xd0,0x00,0x00,0x00, -0xdd,0x00,0x00,0x00,0x72,0x00,0x04,0x00,0x95,0x00,0x00,0x00, -0xdf,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0x7c,0x00,0x04,0x00, -0x6e,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,0xdf,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe8,0x00,0x00,0x00, -0x8d,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,0x41,0x00,0x08,0x00, -0x8e,0x00,0x00,0x00,0xe9,0x00,0x00,0x00,0x76,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x8b,0x00,0x00,0x00, -0xe8,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x6e,0x00,0x00,0x00, -0xea,0x00,0x00,0x00,0xe9,0x00,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,0xea,0x00,0x00,0x00, -0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xec,0x00,0x00,0x00, -0xeb,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00, -0xed,0x00,0x00,0x00,0xec,0x00,0x00,0x00,0xcf,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x6e,0x00,0x00,0x00,0xf5,0x00,0x00,0x00, -0x9f,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xf6,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,0x7c,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,0xf6,0x00,0x00,0x00, -0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0xf8,0x00,0x00,0x00, -0xf7,0x00,0x00,0x00,0xda,0x00,0x00,0x00,0xc3,0x00,0x05,0x00, -0x14,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,0xf8,0x00,0x00,0x00, -0xdc,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,0x14,0x00,0x00,0x00, -0xfa,0x00,0x00,0x00,0xed,0x00,0x00,0x00,0xf9,0x00,0x00,0x00, -0x72,0x00,0x04,0x00,0x95,0x00,0x00,0x00,0xfb,0x00,0x00,0x00, -0xfa,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x6e,0x00,0x00,0x00, -0xfc,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x6e,0x00,0x00,0x00,0x05,0x01,0x00,0x00,0xcb,0x00,0x00,0x00, -0xc2,0x00,0x05,0x00,0x6e,0x00,0x00,0x00,0x07,0x01,0x00,0x00, -0x05,0x01,0x00,0x00,0x06,0x01,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x08,0x01,0x00,0x00,0x07,0x01,0x00,0x00, -0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x09,0x01,0x00,0x00, -0x08,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00, -0x0a,0x01,0x00,0x00,0x09,0x01,0x00,0x00,0xcf,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x6e,0x00,0x00,0x00,0x12,0x01,0x00,0x00, -0xad,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x13,0x01,0x00,0x00,0x12,0x01,0x00,0x00,0x7c,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0x14,0x01,0x00,0x00,0x13,0x01,0x00,0x00, -0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0x15,0x01,0x00,0x00, -0x14,0x01,0x00,0x00,0xda,0x00,0x00,0x00,0xc3,0x00,0x05,0x00, -0x14,0x00,0x00,0x00,0x16,0x01,0x00,0x00,0x15,0x01,0x00,0x00, -0xdc,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,0x14,0x00,0x00,0x00, -0x17,0x01,0x00,0x00,0x0a,0x01,0x00,0x00,0x16,0x01,0x00,0x00, -0x72,0x00,0x04,0x00,0x95,0x00,0x00,0x00,0x18,0x01,0x00,0x00, -0x17,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x6e,0x00,0x00,0x00, -0x19,0x01,0x00,0x00,0x18,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0x6e,0x00,0x00,0x00,0x22,0x01,0x00,0x00,0xe9,0x00,0x00,0x00, -0xc2,0x00,0x05,0x00,0x6e,0x00,0x00,0x00,0x23,0x01,0x00,0x00, -0x22,0x01,0x00,0x00,0x06,0x01,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x24,0x01,0x00,0x00,0x23,0x01,0x00,0x00, -0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x25,0x01,0x00,0x00, -0x24,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00, -0x26,0x01,0x00,0x00,0x25,0x01,0x00,0x00,0xcf,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x6e,0x00,0x00,0x00,0x2e,0x01,0x00,0x00, -0xbc,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x2f,0x01,0x00,0x00,0x2e,0x01,0x00,0x00,0x7c,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0x30,0x01,0x00,0x00,0x2f,0x01,0x00,0x00, -0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0x31,0x01,0x00,0x00, -0x30,0x01,0x00,0x00,0xda,0x00,0x00,0x00,0xc3,0x00,0x05,0x00, -0x14,0x00,0x00,0x00,0x32,0x01,0x00,0x00,0x31,0x01,0x00,0x00, -0xdc,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,0x14,0x00,0x00,0x00, -0x33,0x01,0x00,0x00,0x26,0x01,0x00,0x00,0x32,0x01,0x00,0x00, -0x72,0x00,0x04,0x00,0x95,0x00,0x00,0x00,0x34,0x01,0x00,0x00, -0x33,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x6e,0x00,0x00,0x00, -0x35,0x01,0x00,0x00,0x34,0x01,0x00,0x00,0x41,0x00,0x08,0x00, -0x8e,0x00,0x00,0x00,0x3b,0x01,0x00,0x00,0x76,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0xdc,0x00,0x00,0x00, -0x43,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x6e,0x00,0x00,0x00, -0x3c,0x01,0x00,0x00,0x3b,0x01,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x3d,0x01,0x00,0x00,0x3c,0x01,0x00,0x00, -0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x3e,0x01,0x00,0x00, -0x3d,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00, -0x3f,0x01,0x00,0x00,0x3e,0x01,0x00,0x00,0xcf,0x00,0x00,0x00, -0x72,0x00,0x04,0x00,0x95,0x00,0x00,0x00,0x40,0x01,0x00,0x00, -0x3f,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x6e,0x00,0x00,0x00, -0x41,0x01,0x00,0x00,0x40,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x47,0x01,0x00,0x00,0x43,0x00,0x00,0x00, -0x82,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x8e,0x00,0x00,0x00, -0x48,0x01,0x00,0x00,0x76,0x00,0x00,0x00,0x15,0x00,0x00,0x00, -0x79,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,0x47,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0x6e,0x00,0x00,0x00,0x49,0x01,0x00,0x00, -0x48,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x4a,0x01,0x00,0x00,0x49,0x01,0x00,0x00,0x7c,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0x4b,0x01,0x00,0x00,0x4a,0x01,0x00,0x00, -0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0x4c,0x01,0x00,0x00, -0x4b,0x01,0x00,0x00,0xcf,0x00,0x00,0x00,0x72,0x00,0x04,0x00, -0x95,0x00,0x00,0x00,0x4d,0x01,0x00,0x00,0x4c,0x01,0x00,0x00, -0x7c,0x00,0x04,0x00,0x6e,0x00,0x00,0x00,0x4e,0x01,0x00,0x00, -0x4d,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x54,0x01,0x00,0x00,0x43,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x41,0x00,0x08,0x00,0x8e,0x00,0x00,0x00,0x55,0x01,0x00,0x00, -0x76,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x79,0x00,0x00,0x00, -0xdc,0x00,0x00,0x00,0x54,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0x6e,0x00,0x00,0x00,0x56,0x01,0x00,0x00,0x55,0x01,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x57,0x01,0x00,0x00, -0x56,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00, -0x58,0x01,0x00,0x00,0x57,0x01,0x00,0x00,0xc7,0x00,0x05,0x00, -0x14,0x00,0x00,0x00,0x59,0x01,0x00,0x00,0x58,0x01,0x00,0x00, -0xcf,0x00,0x00,0x00,0x72,0x00,0x04,0x00,0x95,0x00,0x00,0x00, -0x5a,0x01,0x00,0x00,0x59,0x01,0x00,0x00,0x7c,0x00,0x04,0x00, -0x6e,0x00,0x00,0x00,0x5b,0x01,0x00,0x00,0x5a,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x62,0x01,0x00,0x00, -0x43,0x00,0x00,0x00,0x61,0x01,0x00,0x00,0x41,0x00,0x08,0x00, -0x8e,0x00,0x00,0x00,0x63,0x01,0x00,0x00,0x76,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0xdc,0x00,0x00,0x00, -0x62,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x6e,0x00,0x00,0x00, -0x64,0x01,0x00,0x00,0x63,0x01,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x65,0x01,0x00,0x00,0x64,0x01,0x00,0x00, -0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x66,0x01,0x00,0x00, -0x65,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00, -0x67,0x01,0x00,0x00,0x66,0x01,0x00,0x00,0xcf,0x00,0x00,0x00, -0x72,0x00,0x04,0x00,0x95,0x00,0x00,0x00,0x68,0x01,0x00,0x00, -0x67,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x6e,0x00,0x00,0x00, -0x69,0x01,0x00,0x00,0x68,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0x6e,0x00,0x00,0x00,0x70,0x01,0x00,0x00,0x3b,0x01,0x00,0x00, -0xc2,0x00,0x05,0x00,0x6e,0x00,0x00,0x00,0x71,0x01,0x00,0x00, -0x70,0x01,0x00,0x00,0x06,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0x6e,0x00,0x00,0x00,0x79,0x01,0x00,0x00,0x48,0x01,0x00,0x00, -0xc2,0x00,0x05,0x00,0x6e,0x00,0x00,0x00,0x7a,0x01,0x00,0x00, -0x79,0x01,0x00,0x00,0x06,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0x6e,0x00,0x00,0x00,0x82,0x01,0x00,0x00,0x55,0x01,0x00,0x00, -0xc2,0x00,0x05,0x00,0x6e,0x00,0x00,0x00,0x83,0x01,0x00,0x00, -0x82,0x01,0x00,0x00,0x06,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0x6e,0x00,0x00,0x00,0x8b,0x01,0x00,0x00,0x63,0x01,0x00,0x00, -0xc2,0x00,0x05,0x00,0x6e,0x00,0x00,0x00,0x8c,0x01,0x00,0x00, -0x8b,0x01,0x00,0x00,0x06,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x92,0x01,0x00,0x00,0x43,0x00,0x00,0x00, -0x45,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x8e,0x00,0x00,0x00, -0x93,0x01,0x00,0x00,0x76,0x00,0x00,0x00,0x15,0x00,0x00,0x00, -0x79,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,0x92,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0x6e,0x00,0x00,0x00,0x94,0x01,0x00,0x00, -0x93,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x95,0x01,0x00,0x00,0x94,0x01,0x00,0x00,0x7c,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0x96,0x01,0x00,0x00,0x95,0x01,0x00,0x00, -0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0x97,0x01,0x00,0x00, -0x96,0x01,0x00,0x00,0xcf,0x00,0x00,0x00,0x72,0x00,0x04,0x00, -0x95,0x00,0x00,0x00,0x98,0x01,0x00,0x00,0x97,0x01,0x00,0x00, -0x7c,0x00,0x04,0x00,0x6e,0x00,0x00,0x00,0x99,0x01,0x00,0x00, -0x98,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa0,0x01,0x00,0x00,0x43,0x00,0x00,0x00,0x9f,0x01,0x00,0x00, -0x41,0x00,0x08,0x00,0x8e,0x00,0x00,0x00,0xa1,0x01,0x00,0x00, -0x76,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x79,0x00,0x00,0x00, -0xdc,0x00,0x00,0x00,0xa0,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0x6e,0x00,0x00,0x00,0xa2,0x01,0x00,0x00,0xa1,0x01,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa3,0x01,0x00,0x00, -0xa2,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00, -0xa4,0x01,0x00,0x00,0xa3,0x01,0x00,0x00,0xc7,0x00,0x05,0x00, -0x14,0x00,0x00,0x00,0xa5,0x01,0x00,0x00,0xa4,0x01,0x00,0x00, -0xcf,0x00,0x00,0x00,0x72,0x00,0x04,0x00,0x95,0x00,0x00,0x00, -0xa6,0x01,0x00,0x00,0xa5,0x01,0x00,0x00,0x7c,0x00,0x04,0x00, -0x6e,0x00,0x00,0x00,0xa7,0x01,0x00,0x00,0xa6,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xae,0x01,0x00,0x00, -0x43,0x00,0x00,0x00,0xad,0x01,0x00,0x00,0x41,0x00,0x08,0x00, -0x8e,0x00,0x00,0x00,0xaf,0x01,0x00,0x00,0x76,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0xdc,0x00,0x00,0x00, -0xae,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x6e,0x00,0x00,0x00, -0xb0,0x01,0x00,0x00,0xaf,0x01,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xb1,0x01,0x00,0x00,0xb0,0x01,0x00,0x00, -0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xb2,0x01,0x00,0x00, -0xb1,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00, -0xb3,0x01,0x00,0x00,0xb2,0x01,0x00,0x00,0xcf,0x00,0x00,0x00, -0x72,0x00,0x04,0x00,0x95,0x00,0x00,0x00,0xb4,0x01,0x00,0x00, -0xb3,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x6e,0x00,0x00,0x00, -0xb5,0x01,0x00,0x00,0xb4,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xbc,0x01,0x00,0x00,0x43,0x00,0x00,0x00, -0xbb,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x8e,0x00,0x00,0x00, -0xbd,0x01,0x00,0x00,0x76,0x00,0x00,0x00,0x15,0x00,0x00,0x00, -0x79,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,0xbc,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0x6e,0x00,0x00,0x00,0xbe,0x01,0x00,0x00, -0xbd,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xbf,0x01,0x00,0x00,0xbe,0x01,0x00,0x00,0x7c,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0xc0,0x01,0x00,0x00,0xbf,0x01,0x00,0x00, -0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0xc1,0x01,0x00,0x00, -0xc0,0x01,0x00,0x00,0xcf,0x00,0x00,0x00,0x72,0x00,0x04,0x00, -0x95,0x00,0x00,0x00,0xc2,0x01,0x00,0x00,0xc1,0x01,0x00,0x00, -0x7c,0x00,0x04,0x00,0x6e,0x00,0x00,0x00,0xc3,0x01,0x00,0x00, -0xc2,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x6e,0x00,0x00,0x00, -0xcb,0x01,0x00,0x00,0x93,0x01,0x00,0x00,0xc2,0x00,0x05,0x00, -0x6e,0x00,0x00,0x00,0xcc,0x01,0x00,0x00,0xcb,0x01,0x00,0x00, -0x06,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x6e,0x00,0x00,0x00, -0xd4,0x01,0x00,0x00,0xa1,0x01,0x00,0x00,0xc2,0x00,0x05,0x00, -0x6e,0x00,0x00,0x00,0xd5,0x01,0x00,0x00,0xd4,0x01,0x00,0x00, -0x06,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x6e,0x00,0x00,0x00, -0xdd,0x01,0x00,0x00,0xaf,0x01,0x00,0x00,0xc2,0x00,0x05,0x00, -0x6e,0x00,0x00,0x00,0xde,0x01,0x00,0x00,0xdd,0x01,0x00,0x00, -0x06,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x6e,0x00,0x00,0x00, -0xe6,0x01,0x00,0x00,0xbd,0x01,0x00,0x00,0xc2,0x00,0x05,0x00, -0x6e,0x00,0x00,0x00,0xe7,0x01,0x00,0x00,0xe6,0x01,0x00,0x00, -0x06,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00, -0xed,0x01,0x00,0x00,0x13,0x00,0x00,0x00,0x8b,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xee,0x01,0x00,0x00, -0xed,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xf0,0x01,0x00,0x00,0xee,0x01,0x00,0x00,0x65,0x00,0x00,0x00, -0x41,0x00,0x06,0x00,0xf1,0x01,0x00,0x00,0xf2,0x01,0x00,0x00, -0xec,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0xf0,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0x4a,0x00,0x00,0x00,0xf3,0x01,0x00,0x00, -0xf2,0x01,0x00,0x00,0x70,0x00,0x04,0x00,0x4a,0x00,0x00,0x00, -0xf5,0x01,0x00,0x00,0x41,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xfb,0x01,0x00,0x00,0xf0,0x01,0x00,0x00, -0x82,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0xf1,0x01,0x00,0x00, -0xfc,0x01,0x00,0x00,0xec,0x01,0x00,0x00,0x15,0x00,0x00,0x00, -0xfb,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x4a,0x00,0x00,0x00, -0xfd,0x01,0x00,0x00,0xfc,0x01,0x00,0x00,0x70,0x00,0x04,0x00, -0x4a,0x00,0x00,0x00,0xff,0x01,0x00,0x00,0x4e,0x01,0x00,0x00, -0x85,0x00,0x05,0x00,0x4a,0x00,0x00,0x00,0x00,0x02,0x00,0x00, -0xfd,0x01,0x00,0x00,0xff,0x01,0x00,0x00,0x0c,0x00,0x08,0x00, -0x4a,0x00,0x00,0x00,0x01,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0xf3,0x01,0x00,0x00,0xf5,0x01,0x00,0x00, -0x00,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x06,0x02,0x00,0x00,0xf0,0x01,0x00,0x00,0x23,0x00,0x00,0x00, -0x41,0x00,0x06,0x00,0xf1,0x01,0x00,0x00,0x07,0x02,0x00,0x00, -0xec,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x06,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0x4a,0x00,0x00,0x00,0x08,0x02,0x00,0x00, -0x07,0x02,0x00,0x00,0x70,0x00,0x04,0x00,0x4a,0x00,0x00,0x00, -0x0a,0x02,0x00,0x00,0x5b,0x01,0x00,0x00,0x0c,0x00,0x08,0x00, -0x4a,0x00,0x00,0x00,0x0c,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0x08,0x02,0x00,0x00,0x0a,0x02,0x00,0x00, -0x01,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x11,0x02,0x00,0x00,0xf0,0x01,0x00,0x00,0x61,0x01,0x00,0x00, -0x41,0x00,0x06,0x00,0xf1,0x01,0x00,0x00,0x12,0x02,0x00,0x00, -0xec,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x11,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0x4a,0x00,0x00,0x00,0x13,0x02,0x00,0x00, -0x12,0x02,0x00,0x00,0x70,0x00,0x04,0x00,0x4a,0x00,0x00,0x00, -0x15,0x02,0x00,0x00,0x69,0x01,0x00,0x00,0x0c,0x00,0x08,0x00, -0x4a,0x00,0x00,0x00,0x17,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0x13,0x02,0x00,0x00,0x15,0x02,0x00,0x00, -0x0c,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x1d,0x02,0x00,0x00,0xf0,0x01,0x00,0x00,0x3f,0x00,0x00,0x00, -0x41,0x00,0x06,0x00,0xf1,0x01,0x00,0x00,0x1e,0x02,0x00,0x00, -0xec,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x1d,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0x4a,0x00,0x00,0x00,0x1f,0x02,0x00,0x00, -0x1e,0x02,0x00,0x00,0x70,0x00,0x04,0x00,0x4a,0x00,0x00,0x00, -0x21,0x02,0x00,0x00,0x71,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x28,0x02,0x00,0x00,0xf0,0x01,0x00,0x00, -0x27,0x02,0x00,0x00,0x41,0x00,0x06,0x00,0xf1,0x01,0x00,0x00, -0x29,0x02,0x00,0x00,0xec,0x01,0x00,0x00,0x15,0x00,0x00,0x00, -0x28,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x4a,0x00,0x00,0x00, -0x2a,0x02,0x00,0x00,0x29,0x02,0x00,0x00,0x70,0x00,0x04,0x00, -0x4a,0x00,0x00,0x00,0x2c,0x02,0x00,0x00,0x7a,0x01,0x00,0x00, -0x85,0x00,0x05,0x00,0x4a,0x00,0x00,0x00,0x2d,0x02,0x00,0x00, -0x2a,0x02,0x00,0x00,0x2c,0x02,0x00,0x00,0x0c,0x00,0x08,0x00, -0x4a,0x00,0x00,0x00,0x2e,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0x1f,0x02,0x00,0x00,0x21,0x02,0x00,0x00, -0x2d,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x34,0x02,0x00,0x00,0xf0,0x01,0x00,0x00,0x33,0x02,0x00,0x00, -0x41,0x00,0x06,0x00,0xf1,0x01,0x00,0x00,0x35,0x02,0x00,0x00, -0xec,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x34,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0x4a,0x00,0x00,0x00,0x36,0x02,0x00,0x00, -0x35,0x02,0x00,0x00,0x70,0x00,0x04,0x00,0x4a,0x00,0x00,0x00, -0x38,0x02,0x00,0x00,0x83,0x01,0x00,0x00,0x0c,0x00,0x08,0x00, -0x4a,0x00,0x00,0x00,0x3a,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0x36,0x02,0x00,0x00,0x38,0x02,0x00,0x00, -0x2e,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x40,0x02,0x00,0x00,0xf0,0x01,0x00,0x00,0x3f,0x02,0x00,0x00, -0x41,0x00,0x06,0x00,0xf1,0x01,0x00,0x00,0x41,0x02,0x00,0x00, -0xec,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x40,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0x4a,0x00,0x00,0x00,0x42,0x02,0x00,0x00, -0x41,0x02,0x00,0x00,0x70,0x00,0x04,0x00,0x4a,0x00,0x00,0x00, -0x44,0x02,0x00,0x00,0x8c,0x01,0x00,0x00,0x0c,0x00,0x08,0x00, -0x4a,0x00,0x00,0x00,0x46,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0x42,0x02,0x00,0x00,0x44,0x02,0x00,0x00, -0x3a,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x4b,0x02,0x00,0x00,0xee,0x01,0x00,0x00,0x69,0x00,0x00,0x00, -0x41,0x00,0x06,0x00,0xf1,0x01,0x00,0x00,0x4c,0x02,0x00,0x00, -0xec,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x4b,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0x4a,0x00,0x00,0x00,0x4d,0x02,0x00,0x00, -0x4c,0x02,0x00,0x00,0x70,0x00,0x04,0x00,0x4a,0x00,0x00,0x00, -0x4f,0x02,0x00,0x00,0x99,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x55,0x02,0x00,0x00,0x4b,0x02,0x00,0x00, -0x82,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0xf1,0x01,0x00,0x00, -0x56,0x02,0x00,0x00,0xec,0x01,0x00,0x00,0x15,0x00,0x00,0x00, -0x55,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x4a,0x00,0x00,0x00, -0x57,0x02,0x00,0x00,0x56,0x02,0x00,0x00,0x70,0x00,0x04,0x00, -0x4a,0x00,0x00,0x00,0x59,0x02,0x00,0x00,0xa7,0x01,0x00,0x00, -0x85,0x00,0x05,0x00,0x4a,0x00,0x00,0x00,0x5a,0x02,0x00,0x00, -0x57,0x02,0x00,0x00,0x59,0x02,0x00,0x00,0x0c,0x00,0x08,0x00, -0x4a,0x00,0x00,0x00,0x5b,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0x4d,0x02,0x00,0x00,0x4f,0x02,0x00,0x00, -0x5a,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x60,0x02,0x00,0x00,0x4b,0x02,0x00,0x00,0x23,0x00,0x00,0x00, -0x41,0x00,0x06,0x00,0xf1,0x01,0x00,0x00,0x61,0x02,0x00,0x00, -0xec,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x60,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0x4a,0x00,0x00,0x00,0x62,0x02,0x00,0x00, -0x61,0x02,0x00,0x00,0x70,0x00,0x04,0x00,0x4a,0x00,0x00,0x00, -0x64,0x02,0x00,0x00,0xb5,0x01,0x00,0x00,0x0c,0x00,0x08,0x00, -0x4a,0x00,0x00,0x00,0x66,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0x62,0x02,0x00,0x00,0x64,0x02,0x00,0x00, -0x5b,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x6b,0x02,0x00,0x00,0x4b,0x02,0x00,0x00,0x61,0x01,0x00,0x00, -0x41,0x00,0x06,0x00,0xf1,0x01,0x00,0x00,0x6c,0x02,0x00,0x00, -0xec,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x6b,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0x4a,0x00,0x00,0x00,0x6d,0x02,0x00,0x00, -0x6c,0x02,0x00,0x00,0x70,0x00,0x04,0x00,0x4a,0x00,0x00,0x00, -0x6f,0x02,0x00,0x00,0xc3,0x01,0x00,0x00,0x0c,0x00,0x08,0x00, -0x4a,0x00,0x00,0x00,0x71,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0x6d,0x02,0x00,0x00,0x6f,0x02,0x00,0x00, -0x66,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x77,0x02,0x00,0x00,0x4b,0x02,0x00,0x00,0x3f,0x00,0x00,0x00, -0x41,0x00,0x06,0x00,0xf1,0x01,0x00,0x00,0x78,0x02,0x00,0x00, -0xec,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x77,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0x4a,0x00,0x00,0x00,0x79,0x02,0x00,0x00, -0x78,0x02,0x00,0x00,0x70,0x00,0x04,0x00,0x4a,0x00,0x00,0x00, -0x7b,0x02,0x00,0x00,0xcc,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x81,0x02,0x00,0x00,0x4b,0x02,0x00,0x00, -0x27,0x02,0x00,0x00,0x41,0x00,0x06,0x00,0xf1,0x01,0x00,0x00, -0x82,0x02,0x00,0x00,0xec,0x01,0x00,0x00,0x15,0x00,0x00,0x00, -0x81,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x4a,0x00,0x00,0x00, -0x83,0x02,0x00,0x00,0x82,0x02,0x00,0x00,0x70,0x00,0x04,0x00, -0x4a,0x00,0x00,0x00,0x85,0x02,0x00,0x00,0xd5,0x01,0x00,0x00, -0x85,0x00,0x05,0x00,0x4a,0x00,0x00,0x00,0x86,0x02,0x00,0x00, -0x83,0x02,0x00,0x00,0x85,0x02,0x00,0x00,0x0c,0x00,0x08,0x00, -0x4a,0x00,0x00,0x00,0x87,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0x79,0x02,0x00,0x00,0x7b,0x02,0x00,0x00, -0x86,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x8c,0x02,0x00,0x00,0x4b,0x02,0x00,0x00,0x33,0x02,0x00,0x00, -0x41,0x00,0x06,0x00,0xf1,0x01,0x00,0x00,0x8d,0x02,0x00,0x00, -0xec,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x8c,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0x4a,0x00,0x00,0x00,0x8e,0x02,0x00,0x00, -0x8d,0x02,0x00,0x00,0x70,0x00,0x04,0x00,0x4a,0x00,0x00,0x00, -0x90,0x02,0x00,0x00,0xde,0x01,0x00,0x00,0x0c,0x00,0x08,0x00, -0x4a,0x00,0x00,0x00,0x92,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0x8e,0x02,0x00,0x00,0x90,0x02,0x00,0x00, -0x87,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x97,0x02,0x00,0x00,0x4b,0x02,0x00,0x00,0x3f,0x02,0x00,0x00, -0x41,0x00,0x06,0x00,0xf1,0x01,0x00,0x00,0x98,0x02,0x00,0x00, -0xec,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x97,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0x4a,0x00,0x00,0x00,0x99,0x02,0x00,0x00, -0x98,0x02,0x00,0x00,0x70,0x00,0x04,0x00,0x4a,0x00,0x00,0x00, -0x9b,0x02,0x00,0x00,0xe7,0x01,0x00,0x00,0x0c,0x00,0x08,0x00, -0x4a,0x00,0x00,0x00,0x9d,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0x99,0x02,0x00,0x00,0x9b,0x02,0x00,0x00, -0x92,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x4a,0x00,0x00,0x00, -0xa4,0x02,0x00,0x00,0xf2,0x01,0x00,0x00,0x70,0x00,0x04,0x00, -0x4a,0x00,0x00,0x00,0xa6,0x02,0x00,0x00,0xb3,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x4a,0x00,0x00,0x00,0xae,0x02,0x00,0x00, -0x1e,0x02,0x00,0x00,0x70,0x00,0x04,0x00,0x4a,0x00,0x00,0x00, -0xb0,0x02,0x00,0x00,0xc2,0x00,0x00,0x00,0x85,0x00,0x05,0x00, -0x4a,0x00,0x00,0x00,0xb1,0x02,0x00,0x00,0xae,0x02,0x00,0x00, -0xb0,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,0x4a,0x00,0x00,0x00, -0xb2,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0xa4,0x02,0x00,0x00,0xa6,0x02,0x00,0x00,0xb1,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0x4a,0x00,0x00,0x00,0xb8,0x02,0x00,0x00, -0x4c,0x02,0x00,0x00,0x70,0x00,0x04,0x00,0x4a,0x00,0x00,0x00, -0xba,0x02,0x00,0x00,0x19,0x01,0x00,0x00,0x0c,0x00,0x08,0x00, -0x4a,0x00,0x00,0x00,0xbc,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0xb8,0x02,0x00,0x00,0xba,0x02,0x00,0x00, -0xb2,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x4a,0x00,0x00,0x00, -0xc3,0x02,0x00,0x00,0x78,0x02,0x00,0x00,0x70,0x00,0x04,0x00, -0x4a,0x00,0x00,0x00,0xc5,0x02,0x00,0x00,0x35,0x01,0x00,0x00, -0x0c,0x00,0x08,0x00,0x4a,0x00,0x00,0x00,0xc7,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0xc3,0x02,0x00,0x00, -0xc5,0x02,0x00,0x00,0xbc,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0x4a,0x00,0x00,0x00,0xce,0x02,0x00,0x00,0xfc,0x01,0x00,0x00, -0x0c,0x00,0x08,0x00,0x4a,0x00,0x00,0x00,0xd2,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0xce,0x02,0x00,0x00, -0xa6,0x02,0x00,0x00,0xc7,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0x4a,0x00,0x00,0x00,0xd9,0x02,0x00,0x00,0x29,0x02,0x00,0x00, -0x0c,0x00,0x08,0x00,0x4a,0x00,0x00,0x00,0xdd,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0xd9,0x02,0x00,0x00, -0xb0,0x02,0x00,0x00,0xd2,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0x4a,0x00,0x00,0x00,0xe4,0x02,0x00,0x00,0x56,0x02,0x00,0x00, -0x0c,0x00,0x08,0x00,0x4a,0x00,0x00,0x00,0xe8,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0xe4,0x02,0x00,0x00, -0xba,0x02,0x00,0x00,0xdd,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0x4a,0x00,0x00,0x00,0xef,0x02,0x00,0x00,0x82,0x02,0x00,0x00, -0x0c,0x00,0x08,0x00,0x4a,0x00,0x00,0x00,0xf3,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0xef,0x02,0x00,0x00, -0xc5,0x02,0x00,0x00,0xe8,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0x4a,0x00,0x00,0x00,0xfa,0x02,0x00,0x00,0x07,0x02,0x00,0x00, -0x0c,0x00,0x08,0x00,0x4a,0x00,0x00,0x00,0xfe,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0xfa,0x02,0x00,0x00, -0xa6,0x02,0x00,0x00,0xf3,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0x4a,0x00,0x00,0x00,0x05,0x03,0x00,0x00,0x35,0x02,0x00,0x00, -0x0c,0x00,0x08,0x00,0x4a,0x00,0x00,0x00,0x09,0x03,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x05,0x03,0x00,0x00, -0xb0,0x02,0x00,0x00,0xfe,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0x4a,0x00,0x00,0x00,0x10,0x03,0x00,0x00,0x61,0x02,0x00,0x00, -0x0c,0x00,0x08,0x00,0x4a,0x00,0x00,0x00,0x14,0x03,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x10,0x03,0x00,0x00, -0xba,0x02,0x00,0x00,0x09,0x03,0x00,0x00,0x3d,0x00,0x04,0x00, -0x4a,0x00,0x00,0x00,0x1b,0x03,0x00,0x00,0x8d,0x02,0x00,0x00, -0x0c,0x00,0x08,0x00,0x4a,0x00,0x00,0x00,0x1f,0x03,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x1b,0x03,0x00,0x00, -0xc5,0x02,0x00,0x00,0x14,0x03,0x00,0x00,0x3d,0x00,0x04,0x00, -0x4a,0x00,0x00,0x00,0x26,0x03,0x00,0x00,0x12,0x02,0x00,0x00, -0x0c,0x00,0x08,0x00,0x4a,0x00,0x00,0x00,0x2a,0x03,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x26,0x03,0x00,0x00, -0xa6,0x02,0x00,0x00,0x1f,0x03,0x00,0x00,0x3d,0x00,0x04,0x00, -0x4a,0x00,0x00,0x00,0x31,0x03,0x00,0x00,0x41,0x02,0x00,0x00, -0x0c,0x00,0x08,0x00,0x4a,0x00,0x00,0x00,0x35,0x03,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x31,0x03,0x00,0x00, -0xb0,0x02,0x00,0x00,0x2a,0x03,0x00,0x00,0x3d,0x00,0x04,0x00, -0x4a,0x00,0x00,0x00,0x3c,0x03,0x00,0x00,0x6c,0x02,0x00,0x00, -0x0c,0x00,0x08,0x00,0x4a,0x00,0x00,0x00,0x40,0x03,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x3c,0x03,0x00,0x00, -0xba,0x02,0x00,0x00,0x35,0x03,0x00,0x00,0x3d,0x00,0x04,0x00, -0x4a,0x00,0x00,0x00,0x47,0x03,0x00,0x00,0x98,0x02,0x00,0x00, -0x0c,0x00,0x08,0x00,0x4a,0x00,0x00,0x00,0x4b,0x03,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x47,0x03,0x00,0x00, -0xc5,0x02,0x00,0x00,0x40,0x03,0x00,0x00,0x70,0x00,0x04,0x00, -0x4a,0x00,0x00,0x00,0x53,0x03,0x00,0x00,0x97,0x00,0x00,0x00, -0x70,0x00,0x04,0x00,0x4a,0x00,0x00,0x00,0x57,0x03,0x00,0x00, -0xa5,0x00,0x00,0x00,0x85,0x00,0x05,0x00,0x4a,0x00,0x00,0x00, -0x58,0x03,0x00,0x00,0x46,0x02,0x00,0x00,0x57,0x03,0x00,0x00, -0x0c,0x00,0x08,0x00,0x4a,0x00,0x00,0x00,0x59,0x03,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x17,0x02,0x00,0x00, -0x53,0x03,0x00,0x00,0x58,0x03,0x00,0x00,0x70,0x00,0x04,0x00, -0x4a,0x00,0x00,0x00,0x5c,0x03,0x00,0x00,0xe0,0x00,0x00,0x00, -0x0c,0x00,0x08,0x00,0x4a,0x00,0x00,0x00,0x5e,0x03,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x71,0x02,0x00,0x00, -0x5c,0x03,0x00,0x00,0x59,0x03,0x00,0x00,0x70,0x00,0x04,0x00, -0x4a,0x00,0x00,0x00,0x61,0x03,0x00,0x00,0xfc,0x00,0x00,0x00, -0x0c,0x00,0x08,0x00,0x4a,0x00,0x00,0x00,0x63,0x03,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x9d,0x02,0x00,0x00, -0x61,0x03,0x00,0x00,0x5e,0x03,0x00,0x00,0x85,0x00,0x05,0x00, -0x4a,0x00,0x00,0x00,0x67,0x03,0x00,0x00,0x85,0x00,0x00,0x00, -0x4b,0x03,0x00,0x00,0x7f,0x00,0x04,0x00,0x4a,0x00,0x00,0x00, -0x9d,0x03,0x00,0x00,0x67,0x03,0x00,0x00,0x0c,0x00,0x08,0x00, -0x4a,0x00,0x00,0x00,0x68,0x03,0x00,0x00,0x01,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x63,0x03,0x00,0x00, -0x9d,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,0x4a,0x00,0x00,0x00, -0x6a,0x03,0x00,0x00,0x55,0x00,0x00,0x00,0x81,0x00,0x05,0x00, -0x4a,0x00,0x00,0x00,0x6b,0x03,0x00,0x00,0x6a,0x03,0x00,0x00, -0x68,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,0x55,0x00,0x00,0x00, -0x6b,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x6e,0x03,0x00,0x00,0x99,0x03,0x00,0x00,0x23,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x58,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x5a,0x00,0x00,0x00,0xe0,0x00,0x04,0x00,0x23,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x6f,0x03,0x00,0x00,0xf9,0x00,0x02,0x00, -0x71,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x71,0x03,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x9a,0x03,0x00,0x00, -0x4e,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,0x88,0x03,0x00,0x00, -0x74,0x03,0x00,0x00,0xac,0x00,0x05,0x00,0x5f,0x00,0x00,0x00, -0x77,0x03,0x00,0x00,0x9a,0x03,0x00,0x00,0x0c,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x73,0x03,0x00,0x00,0x74,0x03,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x77,0x03,0x00,0x00, -0x72,0x03,0x00,0x00,0x73,0x03,0x00,0x00,0xf8,0x00,0x02,0x00, -0x72,0x03,0x00,0x00,0xb0,0x00,0x05,0x00,0x5f,0x00,0x00,0x00, -0x7a,0x03,0x00,0x00,0x24,0x00,0x00,0x00,0x9a,0x03,0x00,0x00, -0xf7,0x00,0x03,0x00,0x7c,0x03,0x00,0x00,0x00,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x7a,0x03,0x00,0x00,0x7b,0x03,0x00,0x00, -0x7c,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x7b,0x03,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x80,0x03,0x00,0x00, -0x24,0x00,0x00,0x00,0x9a,0x03,0x00,0x00,0x41,0x00,0x05,0x00, -0x54,0x00,0x00,0x00,0x81,0x03,0x00,0x00,0x4d,0x00,0x00,0x00, -0x80,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,0x4a,0x00,0x00,0x00, -0x82,0x03,0x00,0x00,0x81,0x03,0x00,0x00,0x41,0x00,0x05,0x00, -0x54,0x00,0x00,0x00,0x83,0x03,0x00,0x00,0x4d,0x00,0x00,0x00, -0x24,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x4a,0x00,0x00,0x00, -0x84,0x03,0x00,0x00,0x83,0x03,0x00,0x00,0x81,0x00,0x05,0x00, -0x4a,0x00,0x00,0x00,0x85,0x03,0x00,0x00,0x84,0x03,0x00,0x00, -0x82,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,0x83,0x03,0x00,0x00, -0x85,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,0x7c,0x03,0x00,0x00, -0xf8,0x00,0x02,0x00,0x7c,0x03,0x00,0x00,0xe0,0x00,0x04,0x00, -0x23,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x6f,0x03,0x00,0x00, -0xf9,0x00,0x02,0x00,0x74,0x03,0x00,0x00,0xf8,0x00,0x02,0x00, -0x74,0x03,0x00,0x00,0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x88,0x03,0x00,0x00,0x9a,0x03,0x00,0x00,0x8b,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x71,0x03,0x00,0x00,0xf8,0x00,0x02,0x00, -0x73,0x03,0x00,0x00,0xaa,0x00,0x05,0x00,0x5f,0x00,0x00,0x00, -0x8a,0x03,0x00,0x00,0x24,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0xf7,0x00,0x03,0x00,0x8c,0x03,0x00,0x00,0x00,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x8a,0x03,0x00,0x00,0x8b,0x03,0x00,0x00, -0x8c,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x8b,0x03,0x00,0x00, -0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x91,0x03,0x00,0x00, -0x13,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x92,0x03,0x00,0x00,0x91,0x03,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x94,0x03,0x00,0x00, -0x92,0x03,0x00,0x00,0x0f,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x54,0x00,0x00,0x00,0x95,0x03,0x00,0x00,0x4d,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x4a,0x00,0x00,0x00, -0x96,0x03,0x00,0x00,0x95,0x03,0x00,0x00,0x41,0x00,0x06,0x00, -0xf1,0x01,0x00,0x00,0x97,0x03,0x00,0x00,0x90,0x03,0x00,0x00, -0x15,0x00,0x00,0x00,0x94,0x03,0x00,0x00,0x3e,0x00,0x03,0x00, -0x97,0x03,0x00,0x00,0x96,0x03,0x00,0x00,0xf9,0x00,0x02,0x00, -0x8c,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x8c,0x03,0x00,0x00, -0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00, -}; -const uint64_t mul_mat_vec_q4_K_f32_len = 9128; - -unsigned char mul_mat_vec_q5_0_f32_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0xf6,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00, -0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00, -0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64, -0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00, -0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0f,0x00,0x0c,0x00, -0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e, -0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x11,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x26,0x00,0x00,0x00,0x54,0x00,0x00,0x00, -0xa3,0x00,0x00,0x00,0xe4,0x00,0x00,0x00,0x10,0x00,0x06,0x00, -0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x11,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x15,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x24,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x24,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x24,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x24,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x4c,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x4f,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x50,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x50,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x50,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x51,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0x52,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x52,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x52,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x54,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x54,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xa0,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0xa1,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0xa1,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0xa1,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xa3,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xa3,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xe1,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0xe2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0xe2,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0xe2,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xe4,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xe4,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xec,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xed,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00, -0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x16,0x00,0x03,0x00,0x14,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x15,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x16,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x17,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x16,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00, -0x1a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x1b,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0x1e,0x00,0x05,0x00,0x24,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x25,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x24,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x25,0x00,0x00,0x00,0x26,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x27,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x27,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x29,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x14,0x00,0x02,0x00,0x2d,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x3d,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x16,0x00,0x03,0x00, -0x4a,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x15,0x00,0x04,0x00, -0x4b,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x1c,0x00,0x04,0x00,0x4c,0x00,0x00,0x00,0x4b,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x4d,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x1c,0x00,0x04,0x00,0x4f,0x00,0x00,0x00,0x4d,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x1e,0x00,0x05,0x00,0x50,0x00,0x00,0x00, -0x4a,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x4f,0x00,0x00,0x00, -0x1d,0x00,0x03,0x00,0x51,0x00,0x00,0x00,0x50,0x00,0x00,0x00, -0x1e,0x00,0x03,0x00,0x52,0x00,0x00,0x00,0x51,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x53,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x52,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x53,0x00,0x00,0x00, -0x54,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x56,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x4a,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x27,0x00,0x00,0x00,0x5c,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x5d,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x27,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x27,0x00,0x00,0x00,0x6e,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x74,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x27,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x7e,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x4d,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x82,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x90,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00, -0x98,0x00,0x00,0x00,0x00,0x00,0x80,0x41,0x1d,0x00,0x03,0x00, -0xa0,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x1e,0x00,0x03,0x00, -0xa1,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0xa2,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xa1,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0xa2,0x00,0x00,0x00,0xa3,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xab,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,0x08,0x01,0x00,0x00, -0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc4,0x00,0x00,0x00, -0x86,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x1d,0x00,0x03,0x00,0xe1,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0x1e,0x00,0x03,0x00,0xe2,0x00,0x00,0x00,0xe1,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0xe3,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0xe2,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xe3,0x00,0x00,0x00, -0xe4,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x32,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xec,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x33,0x00,0x06,0x00,0x09,0x00,0x00,0x00,0xed,0x00,0x00,0x00, -0xec,0x00,0x00,0x00,0x90,0x00,0x00,0x00,0x90,0x00,0x00,0x00, -0x2c,0x00,0x05,0x00,0x82,0x00,0x00,0x00,0xf5,0x00,0x00,0x00, -0x98,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x36,0x00,0x05,0x00, -0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x3e,0x00,0x03,0x00, -0x1c,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x1e,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x1e,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xf2,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0xc1,0x00,0x00,0x00, -0x1f,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x29,0x00,0x00,0x00, -0x2a,0x00,0x00,0x00,0x26,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x00,0x00, -0x2a,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x2c,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x15,0x00,0x00,0x00, -0xb0,0x00,0x05,0x00,0x2d,0x00,0x00,0x00,0x2e,0x00,0x00,0x00, -0xf2,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x20,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x2e,0x00,0x00,0x00,0x1f,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x1f,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x31,0x00,0x00,0x00, -0xf2,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x13,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x35,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x3a,0x00,0x00,0x00, -0x35,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x3e,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x41,0x00,0x00,0x00, -0x35,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x41,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x47,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x41,0x00,0x00,0x00, -0x41,0x00,0x07,0x00,0x56,0x00,0x00,0x00,0x57,0x00,0x00,0x00, -0x54,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x3e,0x00,0x00,0x00, -0x28,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x4a,0x00,0x00,0x00, -0x58,0x00,0x00,0x00,0x57,0x00,0x00,0x00,0x73,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x58,0x00,0x00,0x00, -0x41,0x00,0x08,0x00,0x5d,0x00,0x00,0x00,0x5e,0x00,0x00,0x00, -0x54,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x3e,0x00,0x00,0x00, -0x5c,0x00,0x00,0x00,0x5c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x4b,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,0x5e,0x00,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x5f,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x61,0x00,0x00,0x00, -0x41,0x00,0x08,0x00,0x5d,0x00,0x00,0x00,0x64,0x00,0x00,0x00, -0x54,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x3e,0x00,0x00,0x00, -0x5c,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x4b,0x00,0x00,0x00,0x65,0x00,0x00,0x00,0x64,0x00,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x66,0x00,0x00,0x00, -0x65,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x67,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x66,0x00,0x00,0x00, -0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6d,0x00,0x00,0x00, -0x67,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0xc4,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x6d,0x00,0x00,0x00, -0x6e,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x70,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x7c,0x00,0x04,0x00,0x27,0x00,0x00,0x00,0x71,0x00,0x00,0x00, -0x70,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x75,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x74,0x00,0x00,0x00, -0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x76,0x00,0x00,0x00, -0x67,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0xc7,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x76,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x27,0x00,0x00,0x00, -0x78,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x41,0x00,0x08,0x00, -0x7e,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x54,0x00,0x00,0x00, -0x28,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x7c,0x00,0x00,0x00, -0x42,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x4d,0x00,0x00,0x00, -0x80,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x80,0x00,0x00,0x00, -0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x87,0x00,0x00,0x00, -0x81,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x7c,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,0x71,0x00,0x00,0x00, -0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8c,0x00,0x00,0x00, -0x87,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,0x70,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x8c,0x00,0x00,0x00, -0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8f,0x00,0x00,0x00, -0x81,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x7c,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x78,0x00,0x00,0x00, -0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x94,0x00,0x00,0x00, -0x8f,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x70,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0x94,0x00,0x00,0x00, -0x50,0x00,0x05,0x00,0x82,0x00,0x00,0x00,0x96,0x00,0x00,0x00, -0x8d,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0x83,0x00,0x05,0x00, -0x82,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x96,0x00,0x00,0x00, -0xf5,0x00,0x00,0x00,0x8e,0x00,0x05,0x00,0x82,0x00,0x00,0x00, -0x9c,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x59,0x00,0x00,0x00, -0x51,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0x9f,0x00,0x00,0x00, -0x9c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x29,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0x26,0x00,0x00,0x00, -0x5c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xa5,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0xa5,0x00,0x00,0x00, -0x47,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa9,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0x42,0x00,0x00,0x00, -0x41,0x00,0x06,0x00,0xab,0x00,0x00,0x00,0xac,0x00,0x00,0x00, -0xa3,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0xa9,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xad,0x00,0x00,0x00, -0xac,0x00,0x00,0x00,0x51,0x00,0x05,0x00,0x14,0x00,0x00,0x00, -0xb0,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb7,0x00,0x00,0x00, -0xa9,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x41,0x00,0x06,0x00, -0xab,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0xa3,0x00,0x00,0x00, -0x28,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0xb8,0x00,0x00,0x00, -0x85,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0xba,0x00,0x00,0x00, -0xb0,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x0c,0x00,0x08,0x00, -0x14,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0x9f,0x00,0x00,0x00,0xad,0x00,0x00,0x00, -0xba,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x14,0x00,0x00,0x00, -0xbd,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x81,0x00,0x05,0x00, -0x14,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0xbd,0x00,0x00,0x00, -0xbb,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0x1c,0x00,0x00,0x00, -0xbe,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xc1,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x1e,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x20,0x00,0x00,0x00,0xe0,0x00,0x04,0x00,0x32,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xc5,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xc5,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xf3,0x00,0x00,0x00, -0xc4,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0xdc,0x00,0x00,0x00, -0xc8,0x00,0x00,0x00,0xac,0x00,0x05,0x00,0x2d,0x00,0x00,0x00, -0xcb,0x00,0x00,0x00,0xf3,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xc7,0x00,0x00,0x00,0xc8,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xcb,0x00,0x00,0x00, -0xc6,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xc6,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x2d,0x00,0x00,0x00, -0xce,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0xf3,0x00,0x00,0x00, -0xf7,0x00,0x03,0x00,0xd0,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xce,0x00,0x00,0x00,0xcf,0x00,0x00,0x00, -0xd0,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xcf,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd4,0x00,0x00,0x00, -0x13,0x00,0x00,0x00,0xf3,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x1b,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0xd4,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x14,0x00,0x00,0x00, -0xd6,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0xd8,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x81,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0xd9,0x00,0x00,0x00, -0xd8,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0x3e,0x00,0x03,0x00, -0x1c,0x00,0x00,0x00,0xd9,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xd0,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd0,0x00,0x00,0x00, -0xe0,0x00,0x04,0x00,0x32,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0xc2,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xc8,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xc8,0x00,0x00,0x00,0xc2,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,0xf3,0x00,0x00,0x00, -0x5c,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xc5,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xc7,0x00,0x00,0x00,0xaa,0x00,0x05,0x00, -0x2d,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0x13,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0xe0,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xde,0x00,0x00,0x00, -0xdf,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xdf,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x29,0x00,0x00,0x00, -0xe5,0x00,0x00,0x00,0x26,0x00,0x00,0x00,0x7c,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xe6,0x00,0x00,0x00, -0xe5,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xe8,0x00,0x00,0x00,0xe6,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0xe9,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0xea,0x00,0x00,0x00,0xe9,0x00,0x00,0x00, -0x41,0x00,0x06,0x00,0xab,0x00,0x00,0x00,0xeb,0x00,0x00,0x00, -0xe4,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0xe8,0x00,0x00,0x00, -0x3e,0x00,0x03,0x00,0xeb,0x00,0x00,0x00,0xea,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xe0,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xe0,0x00,0x00,0x00,0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00, - -}; -const uint64_t mul_mat_vec_q5_0_f32_len = 3696; - -unsigned char mul_mat_vec_q5_1_f32_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00, -0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00, -0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64, -0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00, -0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0f,0x00,0x0c,0x00, -0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e, -0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x11,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x26,0x00,0x00,0x00,0x52,0x00,0x00,0x00, -0x9f,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,0x10,0x00,0x06,0x00, -0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x11,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x15,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x24,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x24,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x24,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x24,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x4d,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x4e,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x4e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x4e,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x4e,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x4f,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x48,0x00,0x04,0x00,0x50,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x50,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0x50,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x52,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x52,0x00,0x00,0x00, -0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x9c,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x04,0x00,0x9d,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x9d,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0x9d,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x9f,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x9f,0x00,0x00,0x00, -0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xdd,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x04,0x00,0xde,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0xde,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0xde,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xe0,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xe0,0x00,0x00,0x00, -0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xe8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xe9,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x19,0x00,0x00,0x00,0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00, -0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x11,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0x14,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x1c,0x00,0x04,0x00, -0x16,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x15,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x16,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x17,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0x1e,0x00,0x05,0x00,0x24,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x25,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x24,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x25,0x00,0x00,0x00, -0x26,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00, -0x27,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x27,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x29,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x14,0x00,0x02,0x00, -0x2d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x16,0x00,0x03,0x00,0x4a,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x4b,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x4c,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x1c,0x00,0x04,0x00, -0x4d,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0x4c,0x00,0x00,0x00, -0x1e,0x00,0x06,0x00,0x4e,0x00,0x00,0x00,0x4a,0x00,0x00,0x00, -0x4a,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x4d,0x00,0x00,0x00, -0x1d,0x00,0x03,0x00,0x4f,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x1e,0x00,0x03,0x00,0x50,0x00,0x00,0x00,0x4f,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x51,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x50,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x51,0x00,0x00,0x00, -0x52,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x54,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x4a,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x27,0x00,0x00,0x00,0x5a,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x27,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x61,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x27,0x00,0x00,0x00,0x6a,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x70,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x27,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x7a,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x4b,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x7e,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x8c,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x9c,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x9d,0x00,0x00,0x00, -0x9c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x9e,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x9e,0x00,0x00,0x00,0x9f,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0xa7,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xbe,0x00,0x00,0x00,0x08,0x01,0x00,0x00,0x34,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x1d,0x00,0x03,0x00, -0xdd,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x1e,0x00,0x03,0x00, -0xde,0x00,0x00,0x00,0xdd,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0xdf,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xde,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0xdf,0x00,0x00,0x00,0xe0,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xe8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00, -0x09,0x00,0x00,0x00,0xe9,0x00,0x00,0x00,0xe8,0x00,0x00,0x00, -0x8c,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,0x36,0x00,0x05,0x00, -0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x3e,0x00,0x03,0x00, -0x1c,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x1e,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x1e,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xee,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0xbd,0x00,0x00,0x00, -0x1f,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x29,0x00,0x00,0x00, -0x2a,0x00,0x00,0x00,0x26,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x00,0x00, -0x2a,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x2c,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x15,0x00,0x00,0x00, -0xb0,0x00,0x05,0x00,0x2d,0x00,0x00,0x00,0x2e,0x00,0x00,0x00, -0xee,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x20,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x2e,0x00,0x00,0x00,0x1f,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x1f,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x31,0x00,0x00,0x00, -0xee,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x13,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x35,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x3a,0x00,0x00,0x00, -0x35,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x3e,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x41,0x00,0x00,0x00, -0x35,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x41,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x47,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x41,0x00,0x00,0x00, -0x41,0x00,0x07,0x00,0x54,0x00,0x00,0x00,0x55,0x00,0x00,0x00, -0x52,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x3e,0x00,0x00,0x00, -0x28,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x4a,0x00,0x00,0x00, -0x56,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x73,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0x57,0x00,0x00,0x00,0x56,0x00,0x00,0x00, -0x41,0x00,0x07,0x00,0x54,0x00,0x00,0x00,0x5b,0x00,0x00,0x00, -0x52,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x3e,0x00,0x00,0x00, -0x5a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x4a,0x00,0x00,0x00, -0x5c,0x00,0x00,0x00,0x5b,0x00,0x00,0x00,0x73,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,0x5c,0x00,0x00,0x00, -0x41,0x00,0x07,0x00,0x61,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x52,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x3e,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x63,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0xc2,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x69,0x00,0x00,0x00,0x63,0x00,0x00,0x00, -0x42,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x6b,0x00,0x00,0x00,0x69,0x00,0x00,0x00,0x6a,0x00,0x00,0x00, -0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x6b,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x7c,0x00,0x04,0x00, -0x27,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x71,0x00,0x00,0x00, -0x42,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0xc2,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x72,0x00,0x00,0x00,0x63,0x00,0x00,0x00, -0x71,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x73,0x00,0x00,0x00,0x72,0x00,0x00,0x00,0x4c,0x00,0x00,0x00, -0x7c,0x00,0x04,0x00,0x27,0x00,0x00,0x00,0x74,0x00,0x00,0x00, -0x73,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x7a,0x00,0x00,0x00, -0x7b,0x00,0x00,0x00,0x52,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0x3e,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x42,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x4b,0x00,0x00,0x00,0x7c,0x00,0x00,0x00, -0x7b,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x7d,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0xc7,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x7d,0x00,0x00,0x00, -0x82,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x87,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0xc5,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x83,0x00,0x00,0x00, -0x87,0x00,0x00,0x00,0x70,0x00,0x04,0x00,0x14,0x00,0x00,0x00, -0x89,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0xc2,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,0x7d,0x00,0x00,0x00, -0x6a,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x8f,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0xc5,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x90,0x00,0x00,0x00,0x8b,0x00,0x00,0x00, -0x8f,0x00,0x00,0x00,0x70,0x00,0x04,0x00,0x14,0x00,0x00,0x00, -0x91,0x00,0x00,0x00,0x90,0x00,0x00,0x00,0x50,0x00,0x05,0x00, -0x7e,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x89,0x00,0x00,0x00, -0x91,0x00,0x00,0x00,0x8e,0x00,0x05,0x00,0x7e,0x00,0x00,0x00, -0x95,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x57,0x00,0x00,0x00, -0x50,0x00,0x05,0x00,0x7e,0x00,0x00,0x00,0x97,0x00,0x00,0x00, -0x5d,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,0x81,0x00,0x05,0x00, -0x7e,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x95,0x00,0x00,0x00, -0x97,0x00,0x00,0x00,0x51,0x00,0x05,0x00,0x14,0x00,0x00,0x00, -0x9b,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x29,0x00,0x00,0x00,0xa0,0x00,0x00,0x00, -0x26,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0xa0,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa3,0x00,0x00,0x00, -0xa1,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,0xa3,0x00,0x00,0x00, -0x42,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0xa7,0x00,0x00,0x00, -0xa8,0x00,0x00,0x00,0x9f,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0xa5,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x14,0x00,0x00,0x00, -0xa9,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x51,0x00,0x05,0x00, -0x14,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0x98,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xb3,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,0x4c,0x00,0x00,0x00, -0x41,0x00,0x06,0x00,0xa7,0x00,0x00,0x00,0xb4,0x00,0x00,0x00, -0x9f,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0xb3,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xb5,0x00,0x00,0x00, -0xb4,0x00,0x00,0x00,0x85,0x00,0x05,0x00,0x14,0x00,0x00,0x00, -0xb6,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0xb5,0x00,0x00,0x00, -0x0c,0x00,0x08,0x00,0x14,0x00,0x00,0x00,0xb7,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x9b,0x00,0x00,0x00, -0xa9,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x81,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0xba,0x00,0x00,0x00, -0xb9,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0x3e,0x00,0x03,0x00, -0x1c,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0xee,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x1e,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x20,0x00,0x00,0x00,0xe0,0x00,0x04,0x00, -0x32,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0xbe,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xc1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xc1,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xef,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0xd8,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0xac,0x00,0x05,0x00, -0x2d,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0xef,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xc3,0x00,0x00,0x00, -0xc4,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xc7,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,0xc3,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xc2,0x00,0x00,0x00,0xb0,0x00,0x05,0x00, -0x2d,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0x13,0x00,0x00,0x00, -0xef,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0xcc,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xca,0x00,0x00,0x00, -0xcb,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xcb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd0,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0xef,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0xd1,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0xd1,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xd4,0x00,0x00,0x00, -0x1c,0x00,0x00,0x00,0x81,0x00,0x05,0x00,0x14,0x00,0x00,0x00, -0xd5,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,0xd2,0x00,0x00,0x00, -0x3e,0x00,0x03,0x00,0x1c,0x00,0x00,0x00,0xd5,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xcc,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xcc,0x00,0x00,0x00,0xe0,0x00,0x04,0x00,0x32,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xc4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xc4,0x00,0x00,0x00, -0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd8,0x00,0x00,0x00, -0xef,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xc1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xc3,0x00,0x00,0x00, -0xaa,0x00,0x05,0x00,0x2d,0x00,0x00,0x00,0xda,0x00,0x00,0x00, -0x13,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xf7,0x00,0x03,0x00, -0xdc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xda,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,0xdc,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xdb,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x29,0x00,0x00,0x00,0xe1,0x00,0x00,0x00,0x26,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xe2,0x00,0x00,0x00,0xe1,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xe4,0x00,0x00,0x00,0xe2,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x1b,0x00,0x00,0x00, -0xe5,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xe6,0x00,0x00,0x00, -0xe5,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0xa7,0x00,0x00,0x00, -0xe7,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0xe4,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0xe7,0x00,0x00,0x00, -0xe6,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xdc,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xdc,0x00,0x00,0x00,0xfd,0x00,0x01,0x00, -0x38,0x00,0x01,0x00, -}; -const uint64_t mul_mat_vec_q5_1_f32_len = 3592; - -unsigned char mul_mat_vec_q5_K_f32_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0x8a,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x27,0x00,0x00,0x00, -0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00, -0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00, -0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30, -0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x0f,0x00,0x0c,0x00,0x05,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x5b,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xf7,0x01,0x00,0x00, -0x7c,0x04,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x11,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x20,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x7d,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x7e,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x7f,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x80,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x80,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x80,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x81,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0xb0,0x00,0x00,0x00, -0x48,0x00,0x04,0x00,0x82,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x82,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0x82,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x84,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x84,0x00,0x00,0x00, -0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xf4,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x04,0x00,0xf5,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0xf5,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0xf5,0x01,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xf7,0x01,0x00,0x00,0x22,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xf7,0x01,0x00,0x00, -0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x79,0x04,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x04,0x00,0x7a,0x04,0x00,0x00,0x00,0x00,0x00,0x00, -0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x7a,0x04,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0x7a,0x04,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x7c,0x04,0x00,0x00,0x22,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x7c,0x04,0x00,0x00, -0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x84,0x04,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00, -0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x1e,0x00,0x05,0x00, -0x11,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x12,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x12,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x16,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x00,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x3f,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x4a,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00, -0x4d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x15,0x00,0x04,0x00, -0x51,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x56,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0x58,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x59,0x00,0x00,0x00, -0x58,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x5a,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x59,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x5a,0x00,0x00,0x00,0x5b,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x5c,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x58,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x62,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x58,0x00,0x00,0x00,0x14,0x00,0x02,0x00,0x6d,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x76,0x00,0x00,0x00, -0x80,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0x7a,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x7b,0x00,0x00,0x00, -0x7a,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x1c,0x00,0x04,0x00,0x7d,0x00,0x00,0x00,0x4a,0x00,0x00,0x00, -0x7c,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x7e,0x00,0x00,0x00, -0x4a,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x1c,0x00,0x04,0x00, -0x7f,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x76,0x00,0x00,0x00, -0x1e,0x00,0x06,0x00,0x80,0x00,0x00,0x00,0x7b,0x00,0x00,0x00, -0x7d,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x7f,0x00,0x00,0x00, -0x1d,0x00,0x03,0x00,0x81,0x00,0x00,0x00,0x80,0x00,0x00,0x00, -0x1e,0x00,0x03,0x00,0x82,0x00,0x00,0x00,0x81,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x83,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x82,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x83,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x88,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x7a,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x90,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x9a,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0x9f,0x00,0x00,0x00,0x3f,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00, -0x05,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xd4,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0xda,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xe5,0x00,0x00,0x00, -0xc0,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00, -0xe7,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x44,0x01,0x00,0x00, -0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x6c,0x01,0x00,0x00,0x11,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xaa,0x01,0x00,0x00,0x41,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb8,0x01,0x00,0x00, -0x50,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xc6,0x01,0x00,0x00,0x51,0x00,0x00,0x00,0x1d,0x00,0x03,0x00, -0xf4,0x01,0x00,0x00,0x58,0x00,0x00,0x00,0x1e,0x00,0x03,0x00, -0xf5,0x01,0x00,0x00,0xf4,0x01,0x00,0x00,0x20,0x00,0x04,0x00, -0xf6,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0xf5,0x01,0x00,0x00, -0x3b,0x00,0x04,0x00,0xf6,0x01,0x00,0x00,0xf7,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xfc,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0x0d,0x02,0x00,0x00,0x10,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x82,0x02,0x00,0x00, -0x21,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x9f,0x02,0x00,0x00,0x30,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xbc,0x02,0x00,0x00,0x31,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x5b,0x04,0x00,0x00, -0x08,0x01,0x00,0x00,0x1d,0x00,0x03,0x00,0x79,0x04,0x00,0x00, -0x58,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x7a,0x04,0x00,0x00, -0x79,0x04,0x00,0x00,0x20,0x00,0x04,0x00,0x7b,0x04,0x00,0x00, -0x0c,0x00,0x00,0x00,0x7a,0x04,0x00,0x00,0x3b,0x00,0x04,0x00, -0x7b,0x04,0x00,0x00,0x7c,0x04,0x00,0x00,0x0c,0x00,0x00,0x00, -0x2c,0x00,0x06,0x00,0x09,0x00,0x00,0x00,0x84,0x04,0x00,0x00, -0x3f,0x00,0x00,0x00,0x90,0x00,0x00,0x00,0x90,0x00,0x00,0x00, -0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x05,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00, -0x17,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x15,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x17,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x1a,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1e,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x28,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2c,0x00,0x00,0x00, -0x24,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x2b,0x00,0x00,0x00, -0x2c,0x00,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x31,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x30,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x2c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x2c,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x3a,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x31,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3c,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00, -0x3c,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x41,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x43,0x00,0x00,0x00, -0x41,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0x45,0x00,0x00,0x00, -0x34,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x49,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0xc4,0x00,0x05,0x00, -0x14,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x4d,0x00,0x00,0x00, -0x4f,0x00,0x00,0x00,0x72,0x00,0x04,0x00,0x51,0x00,0x00,0x00, -0x52,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x7c,0x00,0x04,0x00, -0x4a,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x52,0x00,0x00,0x00, -0xc4,0x00,0x05,0x00,0x4a,0x00,0x00,0x00,0x57,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x56,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x5c,0x00,0x00,0x00, -0x28,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x24,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x62,0x00,0x00,0x00,0x63,0x00,0x00,0x00, -0x5b,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x3e,0x00,0x03,0x00, -0x63,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x66,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x66,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x85,0x04,0x00,0x00, -0x28,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x5a,0x04,0x00,0x00, -0x67,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x6d,0x00,0x00,0x00, -0x6e,0x00,0x00,0x00,0x85,0x04,0x00,0x00,0x1a,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x68,0x00,0x00,0x00,0x67,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x6e,0x00,0x00,0x00, -0x67,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x67,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x71,0x00,0x00,0x00,0x85,0x04,0x00,0x00,0x19,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x73,0x00,0x00,0x00, -0x71,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x73,0x00,0x00,0x00, -0x76,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x87,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x85,0x04,0x00,0x00, -0x41,0x00,0x08,0x00,0x88,0x00,0x00,0x00,0x89,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x87,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x7a,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0x89,0x00,0x00,0x00, -0x73,0x00,0x04,0x00,0x58,0x00,0x00,0x00,0x8b,0x00,0x00,0x00, -0x8a,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x88,0x00,0x00,0x00, -0x91,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x15,0x00,0x00,0x00, -0x87,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x90,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x7a,0x00,0x00,0x00,0x92,0x00,0x00,0x00, -0x91,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x58,0x00,0x00,0x00, -0x93,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x9a,0x00,0x00,0x00, -0x9b,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x15,0x00,0x00,0x00, -0x87,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x99,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x4a,0x00,0x00,0x00,0x9c,0x00,0x00,0x00, -0x9b,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x9d,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0x7c,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,0x9d,0x00,0x00,0x00, -0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0xa0,0x00,0x00,0x00, -0x9e,0x00,0x00,0x00,0x9f,0x00,0x00,0x00,0x72,0x00,0x04,0x00, -0x51,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0xa0,0x00,0x00,0x00, -0x7c,0x00,0x04,0x00,0x4a,0x00,0x00,0x00,0xa2,0x00,0x00,0x00, -0xa1,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa9,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x90,0x00,0x00,0x00, -0x41,0x00,0x08,0x00,0x9a,0x00,0x00,0x00,0xaa,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x87,0x00,0x00,0x00, -0x4d,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x4a,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0xaa,0x00,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00, -0xab,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00, -0xad,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0xc7,0x00,0x05,0x00, -0x14,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0xad,0x00,0x00,0x00, -0x9f,0x00,0x00,0x00,0x72,0x00,0x04,0x00,0x51,0x00,0x00,0x00, -0xaf,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0x7c,0x00,0x04,0x00, -0x4a,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0xaf,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb7,0x00,0x00,0x00, -0x99,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x41,0x00,0x08,0x00, -0x9a,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x4d,0x00,0x00,0x00, -0xb7,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x4a,0x00,0x00,0x00, -0xb9,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0xb9,0x00,0x00,0x00, -0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xbb,0x00,0x00,0x00, -0xba,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00, -0xbc,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x9f,0x00,0x00,0x00, -0x72,0x00,0x04,0x00,0x51,0x00,0x00,0x00,0xbd,0x00,0x00,0x00, -0xbc,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x4a,0x00,0x00,0x00, -0xbe,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x99,0x00,0x00,0x00, -0xc5,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x9a,0x00,0x00,0x00, -0xc7,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x15,0x00,0x00,0x00, -0x87,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0xc6,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x4a,0x00,0x00,0x00,0xc8,0x00,0x00,0x00, -0xc7,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xc9,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x7c,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0xc9,0x00,0x00,0x00, -0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0xcb,0x00,0x00,0x00, -0xca,0x00,0x00,0x00,0x9f,0x00,0x00,0x00,0x72,0x00,0x04,0x00, -0x51,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0xcb,0x00,0x00,0x00, -0x7c,0x00,0x04,0x00,0x4a,0x00,0x00,0x00,0xcd,0x00,0x00,0x00, -0xcc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd5,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0xd4,0x00,0x00,0x00, -0x41,0x00,0x08,0x00,0x9a,0x00,0x00,0x00,0xd6,0x00,0x00,0x00, -0x84,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x87,0x00,0x00,0x00, -0x4d,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x4a,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,0xd6,0x00,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xd8,0x00,0x00,0x00, -0xd7,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00, -0xd9,0x00,0x00,0x00,0xd8,0x00,0x00,0x00,0xc7,0x00,0x05,0x00, -0x14,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,0xd9,0x00,0x00,0x00, -0xda,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x4a,0x00,0x00,0x00, -0xe2,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xe3,0x00,0x00,0x00,0xe2,0x00,0x00,0x00, -0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xe4,0x00,0x00,0x00, -0xe3,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00, -0xe6,0x00,0x00,0x00,0xe4,0x00,0x00,0x00,0xe5,0x00,0x00,0x00, -0xc3,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0xe8,0x00,0x00,0x00, -0xe6,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,0xc5,0x00,0x05,0x00, -0x14,0x00,0x00,0x00,0xe9,0x00,0x00,0x00,0xdb,0x00,0x00,0x00, -0xe8,0x00,0x00,0x00,0x72,0x00,0x04,0x00,0x51,0x00,0x00,0x00, -0xea,0x00,0x00,0x00,0xe9,0x00,0x00,0x00,0x7c,0x00,0x04,0x00, -0x4a,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,0xea,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf3,0x00,0x00,0x00, -0x99,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,0x41,0x00,0x08,0x00, -0x9a,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x4d,0x00,0x00,0x00, -0xf3,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x4a,0x00,0x00,0x00, -0xf5,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,0xf5,0x00,0x00,0x00, -0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xf7,0x00,0x00,0x00, -0xf6,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00, -0xf8,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,0xda,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x4a,0x00,0x00,0x00,0x00,0x01,0x00,0x00, -0xaa,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x01,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x7c,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0x02,0x01,0x00,0x00,0x01,0x01,0x00,0x00, -0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0x03,0x01,0x00,0x00, -0x02,0x01,0x00,0x00,0xe5,0x00,0x00,0x00,0xc3,0x00,0x05,0x00, -0x14,0x00,0x00,0x00,0x04,0x01,0x00,0x00,0x03,0x01,0x00,0x00, -0xe7,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,0x14,0x00,0x00,0x00, -0x05,0x01,0x00,0x00,0xf8,0x00,0x00,0x00,0x04,0x01,0x00,0x00, -0x72,0x00,0x04,0x00,0x51,0x00,0x00,0x00,0x06,0x01,0x00,0x00, -0x05,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x4a,0x00,0x00,0x00, -0x07,0x01,0x00,0x00,0x06,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0x4a,0x00,0x00,0x00,0x10,0x01,0x00,0x00,0xd6,0x00,0x00,0x00, -0xc2,0x00,0x05,0x00,0x4a,0x00,0x00,0x00,0x11,0x01,0x00,0x00, -0x10,0x01,0x00,0x00,0x56,0x00,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x12,0x01,0x00,0x00,0x11,0x01,0x00,0x00, -0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x13,0x01,0x00,0x00, -0x12,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00, -0x14,0x01,0x00,0x00,0x13,0x01,0x00,0x00,0xda,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x4a,0x00,0x00,0x00,0x1c,0x01,0x00,0x00, -0xb8,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x1d,0x01,0x00,0x00,0x1c,0x01,0x00,0x00,0x7c,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0x1e,0x01,0x00,0x00,0x1d,0x01,0x00,0x00, -0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0x1f,0x01,0x00,0x00, -0x1e,0x01,0x00,0x00,0xe5,0x00,0x00,0x00,0xc3,0x00,0x05,0x00, -0x14,0x00,0x00,0x00,0x20,0x01,0x00,0x00,0x1f,0x01,0x00,0x00, -0xe7,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,0x14,0x00,0x00,0x00, -0x21,0x01,0x00,0x00,0x14,0x01,0x00,0x00,0x20,0x01,0x00,0x00, -0x72,0x00,0x04,0x00,0x51,0x00,0x00,0x00,0x22,0x01,0x00,0x00, -0x21,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x4a,0x00,0x00,0x00, -0x23,0x01,0x00,0x00,0x22,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0x4a,0x00,0x00,0x00,0x2c,0x01,0x00,0x00,0xf4,0x00,0x00,0x00, -0xc2,0x00,0x05,0x00,0x4a,0x00,0x00,0x00,0x2d,0x01,0x00,0x00, -0x2c,0x01,0x00,0x00,0x56,0x00,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x2e,0x01,0x00,0x00,0x2d,0x01,0x00,0x00, -0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x2f,0x01,0x00,0x00, -0x2e,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00, -0x30,0x01,0x00,0x00,0x2f,0x01,0x00,0x00,0xda,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x4a,0x00,0x00,0x00,0x38,0x01,0x00,0x00, -0xc7,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x39,0x01,0x00,0x00,0x38,0x01,0x00,0x00,0x7c,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0x3a,0x01,0x00,0x00,0x39,0x01,0x00,0x00, -0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0x3b,0x01,0x00,0x00, -0x3a,0x01,0x00,0x00,0xe5,0x00,0x00,0x00,0xc3,0x00,0x05,0x00, -0x14,0x00,0x00,0x00,0x3c,0x01,0x00,0x00,0x3b,0x01,0x00,0x00, -0xe7,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,0x14,0x00,0x00,0x00, -0x3d,0x01,0x00,0x00,0x30,0x01,0x00,0x00,0x3c,0x01,0x00,0x00, -0x72,0x00,0x04,0x00,0x51,0x00,0x00,0x00,0x3e,0x01,0x00,0x00, -0x3d,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x4a,0x00,0x00,0x00, -0x3f,0x01,0x00,0x00,0x3e,0x01,0x00,0x00,0x41,0x00,0x08,0x00, -0x9a,0x00,0x00,0x00,0x46,0x01,0x00,0x00,0x84,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x44,0x01,0x00,0x00, -0x43,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x4a,0x00,0x00,0x00, -0x47,0x01,0x00,0x00,0x46,0x01,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x48,0x01,0x00,0x00,0x47,0x01,0x00,0x00, -0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x49,0x01,0x00,0x00, -0x48,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00, -0x4a,0x01,0x00,0x00,0x49,0x01,0x00,0x00,0xda,0x00,0x00,0x00, -0x72,0x00,0x04,0x00,0x51,0x00,0x00,0x00,0x4b,0x01,0x00,0x00, -0x4a,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x4a,0x00,0x00,0x00, -0x4c,0x01,0x00,0x00,0x4b,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x52,0x01,0x00,0x00,0x43,0x00,0x00,0x00, -0x90,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x9a,0x00,0x00,0x00, -0x53,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x15,0x00,0x00,0x00, -0x87,0x00,0x00,0x00,0x44,0x01,0x00,0x00,0x52,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0x4a,0x00,0x00,0x00,0x54,0x01,0x00,0x00, -0x53,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x55,0x01,0x00,0x00,0x54,0x01,0x00,0x00,0x7c,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0x56,0x01,0x00,0x00,0x55,0x01,0x00,0x00, -0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0x57,0x01,0x00,0x00, -0x56,0x01,0x00,0x00,0xda,0x00,0x00,0x00,0x72,0x00,0x04,0x00, -0x51,0x00,0x00,0x00,0x58,0x01,0x00,0x00,0x57,0x01,0x00,0x00, -0x7c,0x00,0x04,0x00,0x4a,0x00,0x00,0x00,0x59,0x01,0x00,0x00, -0x58,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x5f,0x01,0x00,0x00,0x43,0x00,0x00,0x00,0x5c,0x00,0x00,0x00, -0x41,0x00,0x08,0x00,0x9a,0x00,0x00,0x00,0x60,0x01,0x00,0x00, -0x84,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x87,0x00,0x00,0x00, -0x44,0x01,0x00,0x00,0x5f,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0x4a,0x00,0x00,0x00,0x61,0x01,0x00,0x00,0x60,0x01,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x62,0x01,0x00,0x00, -0x61,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00, -0x63,0x01,0x00,0x00,0x62,0x01,0x00,0x00,0xc7,0x00,0x05,0x00, -0x14,0x00,0x00,0x00,0x64,0x01,0x00,0x00,0x63,0x01,0x00,0x00, -0xda,0x00,0x00,0x00,0x72,0x00,0x04,0x00,0x51,0x00,0x00,0x00, -0x65,0x01,0x00,0x00,0x64,0x01,0x00,0x00,0x7c,0x00,0x04,0x00, -0x4a,0x00,0x00,0x00,0x66,0x01,0x00,0x00,0x65,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6d,0x01,0x00,0x00, -0x43,0x00,0x00,0x00,0x6c,0x01,0x00,0x00,0x41,0x00,0x08,0x00, -0x9a,0x00,0x00,0x00,0x6e,0x01,0x00,0x00,0x84,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x44,0x01,0x00,0x00, -0x6d,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x4a,0x00,0x00,0x00, -0x6f,0x01,0x00,0x00,0x6e,0x01,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x70,0x01,0x00,0x00,0x6f,0x01,0x00,0x00, -0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x71,0x01,0x00,0x00, -0x70,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00, -0x72,0x01,0x00,0x00,0x71,0x01,0x00,0x00,0xda,0x00,0x00,0x00, -0x72,0x00,0x04,0x00,0x51,0x00,0x00,0x00,0x73,0x01,0x00,0x00, -0x72,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x4a,0x00,0x00,0x00, -0x74,0x01,0x00,0x00,0x73,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0x4a,0x00,0x00,0x00,0x7b,0x01,0x00,0x00,0x46,0x01,0x00,0x00, -0xc2,0x00,0x05,0x00,0x4a,0x00,0x00,0x00,0x7c,0x01,0x00,0x00, -0x7b,0x01,0x00,0x00,0x56,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x4a,0x00,0x00,0x00,0x84,0x01,0x00,0x00,0x53,0x01,0x00,0x00, -0xc2,0x00,0x05,0x00,0x4a,0x00,0x00,0x00,0x85,0x01,0x00,0x00, -0x84,0x01,0x00,0x00,0x56,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x4a,0x00,0x00,0x00,0x8d,0x01,0x00,0x00,0x60,0x01,0x00,0x00, -0xc2,0x00,0x05,0x00,0x4a,0x00,0x00,0x00,0x8e,0x01,0x00,0x00, -0x8d,0x01,0x00,0x00,0x56,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x4a,0x00,0x00,0x00,0x96,0x01,0x00,0x00,0x6e,0x01,0x00,0x00, -0xc2,0x00,0x05,0x00,0x4a,0x00,0x00,0x00,0x97,0x01,0x00,0x00, -0x96,0x01,0x00,0x00,0x56,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9d,0x01,0x00,0x00,0x43,0x00,0x00,0x00, -0x45,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x9a,0x00,0x00,0x00, -0x9e,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x15,0x00,0x00,0x00, -0x87,0x00,0x00,0x00,0x44,0x01,0x00,0x00,0x9d,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0x4a,0x00,0x00,0x00,0x9f,0x01,0x00,0x00, -0x9e,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xa0,0x01,0x00,0x00,0x9f,0x01,0x00,0x00,0x7c,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0xa1,0x01,0x00,0x00,0xa0,0x01,0x00,0x00, -0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0xa2,0x01,0x00,0x00, -0xa1,0x01,0x00,0x00,0xda,0x00,0x00,0x00,0x72,0x00,0x04,0x00, -0x51,0x00,0x00,0x00,0xa3,0x01,0x00,0x00,0xa2,0x01,0x00,0x00, -0x7c,0x00,0x04,0x00,0x4a,0x00,0x00,0x00,0xa4,0x01,0x00,0x00, -0xa3,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xab,0x01,0x00,0x00,0x43,0x00,0x00,0x00,0xaa,0x01,0x00,0x00, -0x41,0x00,0x08,0x00,0x9a,0x00,0x00,0x00,0xac,0x01,0x00,0x00, -0x84,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x87,0x00,0x00,0x00, -0x44,0x01,0x00,0x00,0xab,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0x4a,0x00,0x00,0x00,0xad,0x01,0x00,0x00,0xac,0x01,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xae,0x01,0x00,0x00, -0xad,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00, -0xaf,0x01,0x00,0x00,0xae,0x01,0x00,0x00,0xc7,0x00,0x05,0x00, -0x14,0x00,0x00,0x00,0xb0,0x01,0x00,0x00,0xaf,0x01,0x00,0x00, -0xda,0x00,0x00,0x00,0x72,0x00,0x04,0x00,0x51,0x00,0x00,0x00, -0xb1,0x01,0x00,0x00,0xb0,0x01,0x00,0x00,0x7c,0x00,0x04,0x00, -0x4a,0x00,0x00,0x00,0xb2,0x01,0x00,0x00,0xb1,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb9,0x01,0x00,0x00, -0x43,0x00,0x00,0x00,0xb8,0x01,0x00,0x00,0x41,0x00,0x08,0x00, -0x9a,0x00,0x00,0x00,0xba,0x01,0x00,0x00,0x84,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x44,0x01,0x00,0x00, -0xb9,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x4a,0x00,0x00,0x00, -0xbb,0x01,0x00,0x00,0xba,0x01,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xbc,0x01,0x00,0x00,0xbb,0x01,0x00,0x00, -0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xbd,0x01,0x00,0x00, -0xbc,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00, -0xbe,0x01,0x00,0x00,0xbd,0x01,0x00,0x00,0xda,0x00,0x00,0x00, -0x72,0x00,0x04,0x00,0x51,0x00,0x00,0x00,0xbf,0x01,0x00,0x00, -0xbe,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x4a,0x00,0x00,0x00, -0xc0,0x01,0x00,0x00,0xbf,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xc7,0x01,0x00,0x00,0x43,0x00,0x00,0x00, -0xc6,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x9a,0x00,0x00,0x00, -0xc8,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x15,0x00,0x00,0x00, -0x87,0x00,0x00,0x00,0x44,0x01,0x00,0x00,0xc7,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0x4a,0x00,0x00,0x00,0xc9,0x01,0x00,0x00, -0xc8,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xca,0x01,0x00,0x00,0xc9,0x01,0x00,0x00,0x7c,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0xcb,0x01,0x00,0x00,0xca,0x01,0x00,0x00, -0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0xcc,0x01,0x00,0x00, -0xcb,0x01,0x00,0x00,0xda,0x00,0x00,0x00,0x72,0x00,0x04,0x00, -0x51,0x00,0x00,0x00,0xcd,0x01,0x00,0x00,0xcc,0x01,0x00,0x00, -0x7c,0x00,0x04,0x00,0x4a,0x00,0x00,0x00,0xce,0x01,0x00,0x00, -0xcd,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x4a,0x00,0x00,0x00, -0xd6,0x01,0x00,0x00,0x9e,0x01,0x00,0x00,0xc2,0x00,0x05,0x00, -0x4a,0x00,0x00,0x00,0xd7,0x01,0x00,0x00,0xd6,0x01,0x00,0x00, -0x56,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x4a,0x00,0x00,0x00, -0xdf,0x01,0x00,0x00,0xac,0x01,0x00,0x00,0xc2,0x00,0x05,0x00, -0x4a,0x00,0x00,0x00,0xe0,0x01,0x00,0x00,0xdf,0x01,0x00,0x00, -0x56,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x4a,0x00,0x00,0x00, -0xe8,0x01,0x00,0x00,0xba,0x01,0x00,0x00,0xc2,0x00,0x05,0x00, -0x4a,0x00,0x00,0x00,0xe9,0x01,0x00,0x00,0xe8,0x01,0x00,0x00, -0x56,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x4a,0x00,0x00,0x00, -0xf1,0x01,0x00,0x00,0xc8,0x01,0x00,0x00,0xc2,0x00,0x05,0x00, -0x4a,0x00,0x00,0x00,0xf2,0x01,0x00,0x00,0xf1,0x01,0x00,0x00, -0x56,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00, -0xf8,0x01,0x00,0x00,0x13,0x00,0x00,0x00,0x4d,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xf9,0x01,0x00,0x00, -0xf8,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xfb,0x01,0x00,0x00,0xf9,0x01,0x00,0x00,0x73,0x00,0x00,0x00, -0x41,0x00,0x06,0x00,0xfc,0x01,0x00,0x00,0xfd,0x01,0x00,0x00, -0xf7,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0xfb,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0x58,0x00,0x00,0x00,0xfe,0x01,0x00,0x00, -0xfd,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x00,0x02,0x00,0x00,0x4c,0x01,0x00,0x00,0x7c,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0x01,0x02,0x00,0x00,0x00,0x02,0x00,0x00, -0x41,0x00,0x08,0x00,0x9a,0x00,0x00,0x00,0x06,0x02,0x00,0x00, -0x84,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x87,0x00,0x00,0x00, -0xe7,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x4a,0x00,0x00,0x00,0x07,0x02,0x00,0x00,0x06,0x02,0x00,0x00, -0xc7,0x00,0x05,0x00,0x4a,0x00,0x00,0x00,0x09,0x02,0x00,0x00, -0x07,0x02,0x00,0x00,0x53,0x00,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x0a,0x02,0x00,0x00,0x09,0x02,0x00,0x00, -0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x0b,0x02,0x00,0x00, -0x0a,0x02,0x00,0x00,0xab,0x00,0x05,0x00,0x6d,0x00,0x00,0x00, -0x0c,0x02,0x00,0x00,0x0b,0x02,0x00,0x00,0x15,0x00,0x00,0x00, -0xa9,0x00,0x06,0x00,0x14,0x00,0x00,0x00,0x0e,0x02,0x00,0x00, -0x0c,0x02,0x00,0x00,0x0d,0x02,0x00,0x00,0x15,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0x0f,0x02,0x00,0x00, -0x01,0x02,0x00,0x00,0x0e,0x02,0x00,0x00,0x6f,0x00,0x04,0x00, -0x58,0x00,0x00,0x00,0x10,0x02,0x00,0x00,0x0f,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x16,0x02,0x00,0x00, -0xfb,0x01,0x00,0x00,0x90,0x00,0x00,0x00,0x41,0x00,0x06,0x00, -0xfc,0x01,0x00,0x00,0x17,0x02,0x00,0x00,0xf7,0x01,0x00,0x00, -0x15,0x00,0x00,0x00,0x16,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0x58,0x00,0x00,0x00,0x18,0x02,0x00,0x00,0x17,0x02,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x1a,0x02,0x00,0x00, -0x59,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00, -0x1b,0x02,0x00,0x00,0x1a,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x20,0x02,0x00,0x00,0x3d,0x00,0x00,0x00, -0x90,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x9a,0x00,0x00,0x00, -0x21,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x15,0x00,0x00,0x00, -0x87,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,0x20,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0x4a,0x00,0x00,0x00,0x22,0x02,0x00,0x00, -0x21,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,0x4a,0x00,0x00,0x00, -0x24,0x02,0x00,0x00,0x22,0x02,0x00,0x00,0x53,0x00,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x25,0x02,0x00,0x00, -0x24,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00, -0x26,0x02,0x00,0x00,0x25,0x02,0x00,0x00,0xab,0x00,0x05,0x00, -0x6d,0x00,0x00,0x00,0x27,0x02,0x00,0x00,0x26,0x02,0x00,0x00, -0x15,0x00,0x00,0x00,0xa9,0x00,0x06,0x00,0x14,0x00,0x00,0x00, -0x28,0x02,0x00,0x00,0x27,0x02,0x00,0x00,0x0d,0x02,0x00,0x00, -0x15,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x14,0x00,0x00,0x00, -0x29,0x02,0x00,0x00,0x1b,0x02,0x00,0x00,0x28,0x02,0x00,0x00, -0x6f,0x00,0x04,0x00,0x58,0x00,0x00,0x00,0x2a,0x02,0x00,0x00, -0x29,0x02,0x00,0x00,0x85,0x00,0x05,0x00,0x58,0x00,0x00,0x00, -0x2b,0x02,0x00,0x00,0x18,0x02,0x00,0x00,0x2a,0x02,0x00,0x00, -0x0c,0x00,0x08,0x00,0x58,0x00,0x00,0x00,0x2c,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0xfe,0x01,0x00,0x00, -0x10,0x02,0x00,0x00,0x2b,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x31,0x02,0x00,0x00,0xfb,0x01,0x00,0x00, -0x5c,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0xfc,0x01,0x00,0x00, -0x32,0x02,0x00,0x00,0xf7,0x01,0x00,0x00,0x15,0x00,0x00,0x00, -0x31,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x58,0x00,0x00,0x00, -0x33,0x02,0x00,0x00,0x32,0x02,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x35,0x02,0x00,0x00,0x66,0x01,0x00,0x00, -0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x36,0x02,0x00,0x00, -0x35,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x3b,0x02,0x00,0x00,0x3d,0x00,0x00,0x00,0x5c,0x00,0x00,0x00, -0x41,0x00,0x08,0x00,0x9a,0x00,0x00,0x00,0x3c,0x02,0x00,0x00, -0x84,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x87,0x00,0x00,0x00, -0xe7,0x00,0x00,0x00,0x3b,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0x4a,0x00,0x00,0x00,0x3d,0x02,0x00,0x00,0x3c,0x02,0x00,0x00, -0xc7,0x00,0x05,0x00,0x4a,0x00,0x00,0x00,0x3f,0x02,0x00,0x00, -0x3d,0x02,0x00,0x00,0x53,0x00,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x40,0x02,0x00,0x00,0x3f,0x02,0x00,0x00, -0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x41,0x02,0x00,0x00, -0x40,0x02,0x00,0x00,0xab,0x00,0x05,0x00,0x6d,0x00,0x00,0x00, -0x42,0x02,0x00,0x00,0x41,0x02,0x00,0x00,0x15,0x00,0x00,0x00, -0xa9,0x00,0x06,0x00,0x14,0x00,0x00,0x00,0x43,0x02,0x00,0x00, -0x42,0x02,0x00,0x00,0x0d,0x02,0x00,0x00,0x15,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0x44,0x02,0x00,0x00, -0x36,0x02,0x00,0x00,0x43,0x02,0x00,0x00,0x6f,0x00,0x04,0x00, -0x58,0x00,0x00,0x00,0x45,0x02,0x00,0x00,0x44,0x02,0x00,0x00, -0x0c,0x00,0x08,0x00,0x58,0x00,0x00,0x00,0x47,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x33,0x02,0x00,0x00, -0x45,0x02,0x00,0x00,0x2c,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x4c,0x02,0x00,0x00,0xfb,0x01,0x00,0x00, -0x6c,0x01,0x00,0x00,0x41,0x00,0x06,0x00,0xfc,0x01,0x00,0x00, -0x4d,0x02,0x00,0x00,0xf7,0x01,0x00,0x00,0x15,0x00,0x00,0x00, -0x4c,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x58,0x00,0x00,0x00, -0x4e,0x02,0x00,0x00,0x4d,0x02,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x50,0x02,0x00,0x00,0x74,0x01,0x00,0x00, -0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x51,0x02,0x00,0x00, -0x50,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x56,0x02,0x00,0x00,0x3d,0x00,0x00,0x00,0x6c,0x01,0x00,0x00, -0x41,0x00,0x08,0x00,0x9a,0x00,0x00,0x00,0x57,0x02,0x00,0x00, -0x84,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x87,0x00,0x00,0x00, -0xe7,0x00,0x00,0x00,0x56,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0x4a,0x00,0x00,0x00,0x58,0x02,0x00,0x00,0x57,0x02,0x00,0x00, -0xc7,0x00,0x05,0x00,0x4a,0x00,0x00,0x00,0x5a,0x02,0x00,0x00, -0x58,0x02,0x00,0x00,0x53,0x00,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x5b,0x02,0x00,0x00,0x5a,0x02,0x00,0x00, -0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x5c,0x02,0x00,0x00, -0x5b,0x02,0x00,0x00,0xab,0x00,0x05,0x00,0x6d,0x00,0x00,0x00, -0x5d,0x02,0x00,0x00,0x5c,0x02,0x00,0x00,0x15,0x00,0x00,0x00, -0xa9,0x00,0x06,0x00,0x14,0x00,0x00,0x00,0x5e,0x02,0x00,0x00, -0x5d,0x02,0x00,0x00,0x0d,0x02,0x00,0x00,0x15,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0x5f,0x02,0x00,0x00, -0x51,0x02,0x00,0x00,0x5e,0x02,0x00,0x00,0x6f,0x00,0x04,0x00, -0x58,0x00,0x00,0x00,0x60,0x02,0x00,0x00,0x5f,0x02,0x00,0x00, -0x0c,0x00,0x08,0x00,0x58,0x00,0x00,0x00,0x62,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x4e,0x02,0x00,0x00, -0x60,0x02,0x00,0x00,0x47,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x68,0x02,0x00,0x00,0xfb,0x01,0x00,0x00, -0x3f,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0xfc,0x01,0x00,0x00, -0x69,0x02,0x00,0x00,0xf7,0x01,0x00,0x00,0x15,0x00,0x00,0x00, -0x68,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x58,0x00,0x00,0x00, -0x6a,0x02,0x00,0x00,0x69,0x02,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x6c,0x02,0x00,0x00,0x7c,0x01,0x00,0x00, -0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x6d,0x02,0x00,0x00, -0x6c,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x4a,0x00,0x00,0x00, -0x73,0x02,0x00,0x00,0x06,0x02,0x00,0x00,0xc4,0x00,0x05,0x00, -0x4a,0x00,0x00,0x00,0x75,0x02,0x00,0x00,0x53,0x00,0x00,0x00, -0x4d,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x4a,0x00,0x00,0x00, -0x76,0x02,0x00,0x00,0x73,0x02,0x00,0x00,0x75,0x02,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x77,0x02,0x00,0x00, -0x76,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00, -0x78,0x02,0x00,0x00,0x77,0x02,0x00,0x00,0xab,0x00,0x05,0x00, -0x6d,0x00,0x00,0x00,0x79,0x02,0x00,0x00,0x78,0x02,0x00,0x00, -0x15,0x00,0x00,0x00,0xa9,0x00,0x06,0x00,0x14,0x00,0x00,0x00, -0x7a,0x02,0x00,0x00,0x79,0x02,0x00,0x00,0x0d,0x02,0x00,0x00, -0x15,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x14,0x00,0x00,0x00, -0x7b,0x02,0x00,0x00,0x6d,0x02,0x00,0x00,0x7a,0x02,0x00,0x00, -0x6f,0x00,0x04,0x00,0x58,0x00,0x00,0x00,0x7c,0x02,0x00,0x00, -0x7b,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x83,0x02,0x00,0x00,0xfb,0x01,0x00,0x00,0x82,0x02,0x00,0x00, -0x41,0x00,0x06,0x00,0xfc,0x01,0x00,0x00,0x84,0x02,0x00,0x00, -0xf7,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x83,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0x58,0x00,0x00,0x00,0x85,0x02,0x00,0x00, -0x84,0x02,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x87,0x02,0x00,0x00,0x85,0x01,0x00,0x00,0x7c,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0x88,0x02,0x00,0x00,0x87,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0x4a,0x00,0x00,0x00,0x8f,0x02,0x00,0x00, -0x21,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,0x4a,0x00,0x00,0x00, -0x92,0x02,0x00,0x00,0x8f,0x02,0x00,0x00,0x75,0x02,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x93,0x02,0x00,0x00, -0x92,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00, -0x94,0x02,0x00,0x00,0x93,0x02,0x00,0x00,0xab,0x00,0x05,0x00, -0x6d,0x00,0x00,0x00,0x95,0x02,0x00,0x00,0x94,0x02,0x00,0x00, -0x15,0x00,0x00,0x00,0xa9,0x00,0x06,0x00,0x14,0x00,0x00,0x00, -0x96,0x02,0x00,0x00,0x95,0x02,0x00,0x00,0x0d,0x02,0x00,0x00, -0x15,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x14,0x00,0x00,0x00, -0x97,0x02,0x00,0x00,0x88,0x02,0x00,0x00,0x96,0x02,0x00,0x00, -0x6f,0x00,0x04,0x00,0x58,0x00,0x00,0x00,0x98,0x02,0x00,0x00, -0x97,0x02,0x00,0x00,0x85,0x00,0x05,0x00,0x58,0x00,0x00,0x00, -0x99,0x02,0x00,0x00,0x85,0x02,0x00,0x00,0x98,0x02,0x00,0x00, -0x0c,0x00,0x08,0x00,0x58,0x00,0x00,0x00,0x9a,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x6a,0x02,0x00,0x00, -0x7c,0x02,0x00,0x00,0x99,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa0,0x02,0x00,0x00,0xfb,0x01,0x00,0x00, -0x9f,0x02,0x00,0x00,0x41,0x00,0x06,0x00,0xfc,0x01,0x00,0x00, -0xa1,0x02,0x00,0x00,0xf7,0x01,0x00,0x00,0x15,0x00,0x00,0x00, -0xa0,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x58,0x00,0x00,0x00, -0xa2,0x02,0x00,0x00,0xa1,0x02,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xa4,0x02,0x00,0x00,0x8e,0x01,0x00,0x00, -0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xa5,0x02,0x00,0x00, -0xa4,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x4a,0x00,0x00,0x00, -0xac,0x02,0x00,0x00,0x3c,0x02,0x00,0x00,0xc7,0x00,0x05,0x00, -0x4a,0x00,0x00,0x00,0xaf,0x02,0x00,0x00,0xac,0x02,0x00,0x00, -0x75,0x02,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xb0,0x02,0x00,0x00,0xaf,0x02,0x00,0x00,0x7c,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0xb1,0x02,0x00,0x00,0xb0,0x02,0x00,0x00, -0xab,0x00,0x05,0x00,0x6d,0x00,0x00,0x00,0xb2,0x02,0x00,0x00, -0xb1,0x02,0x00,0x00,0x15,0x00,0x00,0x00,0xa9,0x00,0x06,0x00, -0x14,0x00,0x00,0x00,0xb3,0x02,0x00,0x00,0xb2,0x02,0x00,0x00, -0x0d,0x02,0x00,0x00,0x15,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x14,0x00,0x00,0x00,0xb4,0x02,0x00,0x00,0xa5,0x02,0x00,0x00, -0xb3,0x02,0x00,0x00,0x6f,0x00,0x04,0x00,0x58,0x00,0x00,0x00, -0xb5,0x02,0x00,0x00,0xb4,0x02,0x00,0x00,0x0c,0x00,0x08,0x00, -0x58,0x00,0x00,0x00,0xb7,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0xa2,0x02,0x00,0x00,0xb5,0x02,0x00,0x00, -0x9a,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xbd,0x02,0x00,0x00,0xfb,0x01,0x00,0x00,0xbc,0x02,0x00,0x00, -0x41,0x00,0x06,0x00,0xfc,0x01,0x00,0x00,0xbe,0x02,0x00,0x00, -0xf7,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0xbd,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0x58,0x00,0x00,0x00,0xbf,0x02,0x00,0x00, -0xbe,0x02,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xc1,0x02,0x00,0x00,0x97,0x01,0x00,0x00,0x7c,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0xc2,0x02,0x00,0x00,0xc1,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0x4a,0x00,0x00,0x00,0xc9,0x02,0x00,0x00, -0x57,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,0x4a,0x00,0x00,0x00, -0xcc,0x02,0x00,0x00,0xc9,0x02,0x00,0x00,0x75,0x02,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xcd,0x02,0x00,0x00, -0xcc,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00, -0xce,0x02,0x00,0x00,0xcd,0x02,0x00,0x00,0xab,0x00,0x05,0x00, -0x6d,0x00,0x00,0x00,0xcf,0x02,0x00,0x00,0xce,0x02,0x00,0x00, -0x15,0x00,0x00,0x00,0xa9,0x00,0x06,0x00,0x14,0x00,0x00,0x00, -0xd0,0x02,0x00,0x00,0xcf,0x02,0x00,0x00,0x0d,0x02,0x00,0x00, -0x15,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x14,0x00,0x00,0x00, -0xd1,0x02,0x00,0x00,0xc2,0x02,0x00,0x00,0xd0,0x02,0x00,0x00, -0x6f,0x00,0x04,0x00,0x58,0x00,0x00,0x00,0xd2,0x02,0x00,0x00, -0xd1,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,0x58,0x00,0x00,0x00, -0xd4,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0xbf,0x02,0x00,0x00,0xd2,0x02,0x00,0x00,0xb7,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd9,0x02,0x00,0x00, -0xf9,0x01,0x00,0x00,0x77,0x00,0x00,0x00,0x41,0x00,0x06,0x00, -0xfc,0x01,0x00,0x00,0xda,0x02,0x00,0x00,0xf7,0x01,0x00,0x00, -0x15,0x00,0x00,0x00,0xd9,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0x58,0x00,0x00,0x00,0xdb,0x02,0x00,0x00,0xda,0x02,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xdd,0x02,0x00,0x00, -0xa4,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00, -0xde,0x02,0x00,0x00,0xdd,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0x4a,0x00,0x00,0x00,0xe4,0x02,0x00,0x00,0x06,0x02,0x00,0x00, -0xc7,0x00,0x05,0x00,0x4a,0x00,0x00,0x00,0xe6,0x02,0x00,0x00, -0xe4,0x02,0x00,0x00,0x57,0x00,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xe7,0x02,0x00,0x00,0xe6,0x02,0x00,0x00, -0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xe8,0x02,0x00,0x00, -0xe7,0x02,0x00,0x00,0xab,0x00,0x05,0x00,0x6d,0x00,0x00,0x00, -0xe9,0x02,0x00,0x00,0xe8,0x02,0x00,0x00,0x15,0x00,0x00,0x00, -0xa9,0x00,0x06,0x00,0x14,0x00,0x00,0x00,0xea,0x02,0x00,0x00, -0xe9,0x02,0x00,0x00,0x0d,0x02,0x00,0x00,0x15,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0xeb,0x02,0x00,0x00, -0xde,0x02,0x00,0x00,0xea,0x02,0x00,0x00,0x6f,0x00,0x04,0x00, -0x58,0x00,0x00,0x00,0xec,0x02,0x00,0x00,0xeb,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf2,0x02,0x00,0x00, -0xd9,0x02,0x00,0x00,0x90,0x00,0x00,0x00,0x41,0x00,0x06,0x00, -0xfc,0x01,0x00,0x00,0xf3,0x02,0x00,0x00,0xf7,0x01,0x00,0x00, -0x15,0x00,0x00,0x00,0xf2,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0x58,0x00,0x00,0x00,0xf4,0x02,0x00,0x00,0xf3,0x02,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xf6,0x02,0x00,0x00, -0xb2,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00, -0xf7,0x02,0x00,0x00,0xf6,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0x4a,0x00,0x00,0x00,0xfe,0x02,0x00,0x00,0x21,0x02,0x00,0x00, -0xc7,0x00,0x05,0x00,0x4a,0x00,0x00,0x00,0x00,0x03,0x00,0x00, -0xfe,0x02,0x00,0x00,0x57,0x00,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x01,0x03,0x00,0x00,0x00,0x03,0x00,0x00, -0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x02,0x03,0x00,0x00, -0x01,0x03,0x00,0x00,0xab,0x00,0x05,0x00,0x6d,0x00,0x00,0x00, -0x03,0x03,0x00,0x00,0x02,0x03,0x00,0x00,0x15,0x00,0x00,0x00, -0xa9,0x00,0x06,0x00,0x14,0x00,0x00,0x00,0x04,0x03,0x00,0x00, -0x03,0x03,0x00,0x00,0x0d,0x02,0x00,0x00,0x15,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0x05,0x03,0x00,0x00, -0xf7,0x02,0x00,0x00,0x04,0x03,0x00,0x00,0x6f,0x00,0x04,0x00, -0x58,0x00,0x00,0x00,0x06,0x03,0x00,0x00,0x05,0x03,0x00,0x00, -0x85,0x00,0x05,0x00,0x58,0x00,0x00,0x00,0x07,0x03,0x00,0x00, -0xf4,0x02,0x00,0x00,0x06,0x03,0x00,0x00,0x0c,0x00,0x08,0x00, -0x58,0x00,0x00,0x00,0x08,0x03,0x00,0x00,0x01,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0xdb,0x02,0x00,0x00,0xec,0x02,0x00,0x00, -0x07,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x0d,0x03,0x00,0x00,0xd9,0x02,0x00,0x00,0x5c,0x00,0x00,0x00, -0x41,0x00,0x06,0x00,0xfc,0x01,0x00,0x00,0x0e,0x03,0x00,0x00, -0xf7,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x0d,0x03,0x00,0x00, -0x3d,0x00,0x04,0x00,0x58,0x00,0x00,0x00,0x0f,0x03,0x00,0x00, -0x0e,0x03,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x11,0x03,0x00,0x00,0xc0,0x01,0x00,0x00,0x7c,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0x12,0x03,0x00,0x00,0x11,0x03,0x00,0x00, -0x3d,0x00,0x04,0x00,0x4a,0x00,0x00,0x00,0x19,0x03,0x00,0x00, -0x3c,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,0x4a,0x00,0x00,0x00, -0x1b,0x03,0x00,0x00,0x19,0x03,0x00,0x00,0x57,0x00,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x1c,0x03,0x00,0x00, -0x1b,0x03,0x00,0x00,0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00, -0x1d,0x03,0x00,0x00,0x1c,0x03,0x00,0x00,0xab,0x00,0x05,0x00, -0x6d,0x00,0x00,0x00,0x1e,0x03,0x00,0x00,0x1d,0x03,0x00,0x00, -0x15,0x00,0x00,0x00,0xa9,0x00,0x06,0x00,0x14,0x00,0x00,0x00, -0x1f,0x03,0x00,0x00,0x1e,0x03,0x00,0x00,0x0d,0x02,0x00,0x00, -0x15,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x14,0x00,0x00,0x00, -0x20,0x03,0x00,0x00,0x12,0x03,0x00,0x00,0x1f,0x03,0x00,0x00, -0x6f,0x00,0x04,0x00,0x58,0x00,0x00,0x00,0x21,0x03,0x00,0x00, -0x20,0x03,0x00,0x00,0x0c,0x00,0x08,0x00,0x58,0x00,0x00,0x00, -0x23,0x03,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x0f,0x03,0x00,0x00,0x21,0x03,0x00,0x00,0x08,0x03,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x28,0x03,0x00,0x00, -0xd9,0x02,0x00,0x00,0x6c,0x01,0x00,0x00,0x41,0x00,0x06,0x00, -0xfc,0x01,0x00,0x00,0x29,0x03,0x00,0x00,0xf7,0x01,0x00,0x00, -0x15,0x00,0x00,0x00,0x28,0x03,0x00,0x00,0x3d,0x00,0x04,0x00, -0x58,0x00,0x00,0x00,0x2a,0x03,0x00,0x00,0x29,0x03,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x2c,0x03,0x00,0x00, -0xce,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00, -0x2d,0x03,0x00,0x00,0x2c,0x03,0x00,0x00,0x3d,0x00,0x04,0x00, -0x4a,0x00,0x00,0x00,0x34,0x03,0x00,0x00,0x57,0x02,0x00,0x00, -0xc7,0x00,0x05,0x00,0x4a,0x00,0x00,0x00,0x36,0x03,0x00,0x00, -0x34,0x03,0x00,0x00,0x57,0x00,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x37,0x03,0x00,0x00,0x36,0x03,0x00,0x00, -0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x38,0x03,0x00,0x00, -0x37,0x03,0x00,0x00,0xab,0x00,0x05,0x00,0x6d,0x00,0x00,0x00, -0x39,0x03,0x00,0x00,0x38,0x03,0x00,0x00,0x15,0x00,0x00,0x00, -0xa9,0x00,0x06,0x00,0x14,0x00,0x00,0x00,0x3a,0x03,0x00,0x00, -0x39,0x03,0x00,0x00,0x0d,0x02,0x00,0x00,0x15,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0x3b,0x03,0x00,0x00, -0x2d,0x03,0x00,0x00,0x3a,0x03,0x00,0x00,0x6f,0x00,0x04,0x00, -0x58,0x00,0x00,0x00,0x3c,0x03,0x00,0x00,0x3b,0x03,0x00,0x00, -0x0c,0x00,0x08,0x00,0x58,0x00,0x00,0x00,0x3e,0x03,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x2a,0x03,0x00,0x00, -0x3c,0x03,0x00,0x00,0x23,0x03,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x44,0x03,0x00,0x00,0xd9,0x02,0x00,0x00, -0x3f,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0xfc,0x01,0x00,0x00, -0x45,0x03,0x00,0x00,0xf7,0x01,0x00,0x00,0x15,0x00,0x00,0x00, -0x44,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,0x58,0x00,0x00,0x00, -0x46,0x03,0x00,0x00,0x45,0x03,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x48,0x03,0x00,0x00,0xd7,0x01,0x00,0x00, -0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x49,0x03,0x00,0x00, -0x48,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,0x4a,0x00,0x00,0x00, -0x4f,0x03,0x00,0x00,0x06,0x02,0x00,0x00,0xc4,0x00,0x05,0x00, -0x4a,0x00,0x00,0x00,0x51,0x03,0x00,0x00,0x57,0x00,0x00,0x00, -0x4d,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x4a,0x00,0x00,0x00, -0x52,0x03,0x00,0x00,0x4f,0x03,0x00,0x00,0x51,0x03,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x53,0x03,0x00,0x00, -0x52,0x03,0x00,0x00,0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00, -0x54,0x03,0x00,0x00,0x53,0x03,0x00,0x00,0xab,0x00,0x05,0x00, -0x6d,0x00,0x00,0x00,0x55,0x03,0x00,0x00,0x54,0x03,0x00,0x00, -0x15,0x00,0x00,0x00,0xa9,0x00,0x06,0x00,0x14,0x00,0x00,0x00, -0x56,0x03,0x00,0x00,0x55,0x03,0x00,0x00,0x0d,0x02,0x00,0x00, -0x15,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x14,0x00,0x00,0x00, -0x57,0x03,0x00,0x00,0x49,0x03,0x00,0x00,0x56,0x03,0x00,0x00, -0x6f,0x00,0x04,0x00,0x58,0x00,0x00,0x00,0x58,0x03,0x00,0x00, -0x57,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x5e,0x03,0x00,0x00,0xd9,0x02,0x00,0x00,0x82,0x02,0x00,0x00, -0x41,0x00,0x06,0x00,0xfc,0x01,0x00,0x00,0x5f,0x03,0x00,0x00, -0xf7,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x5e,0x03,0x00,0x00, -0x3d,0x00,0x04,0x00,0x58,0x00,0x00,0x00,0x60,0x03,0x00,0x00, -0x5f,0x03,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x62,0x03,0x00,0x00,0xe0,0x01,0x00,0x00,0x7c,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0x63,0x03,0x00,0x00,0x62,0x03,0x00,0x00, -0x3d,0x00,0x04,0x00,0x4a,0x00,0x00,0x00,0x6a,0x03,0x00,0x00, -0x21,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,0x4a,0x00,0x00,0x00, -0x6d,0x03,0x00,0x00,0x6a,0x03,0x00,0x00,0x51,0x03,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x6e,0x03,0x00,0x00, -0x6d,0x03,0x00,0x00,0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00, -0x6f,0x03,0x00,0x00,0x6e,0x03,0x00,0x00,0xab,0x00,0x05,0x00, -0x6d,0x00,0x00,0x00,0x70,0x03,0x00,0x00,0x6f,0x03,0x00,0x00, -0x15,0x00,0x00,0x00,0xa9,0x00,0x06,0x00,0x14,0x00,0x00,0x00, -0x71,0x03,0x00,0x00,0x70,0x03,0x00,0x00,0x0d,0x02,0x00,0x00, -0x15,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x14,0x00,0x00,0x00, -0x72,0x03,0x00,0x00,0x63,0x03,0x00,0x00,0x71,0x03,0x00,0x00, -0x6f,0x00,0x04,0x00,0x58,0x00,0x00,0x00,0x73,0x03,0x00,0x00, -0x72,0x03,0x00,0x00,0x85,0x00,0x05,0x00,0x58,0x00,0x00,0x00, -0x74,0x03,0x00,0x00,0x60,0x03,0x00,0x00,0x73,0x03,0x00,0x00, -0x0c,0x00,0x08,0x00,0x58,0x00,0x00,0x00,0x75,0x03,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x46,0x03,0x00,0x00, -0x58,0x03,0x00,0x00,0x74,0x03,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x7a,0x03,0x00,0x00,0xd9,0x02,0x00,0x00, -0x9f,0x02,0x00,0x00,0x41,0x00,0x06,0x00,0xfc,0x01,0x00,0x00, -0x7b,0x03,0x00,0x00,0xf7,0x01,0x00,0x00,0x15,0x00,0x00,0x00, -0x7a,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,0x58,0x00,0x00,0x00, -0x7c,0x03,0x00,0x00,0x7b,0x03,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x7e,0x03,0x00,0x00,0xe9,0x01,0x00,0x00, -0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x7f,0x03,0x00,0x00, -0x7e,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,0x4a,0x00,0x00,0x00, -0x86,0x03,0x00,0x00,0x3c,0x02,0x00,0x00,0xc7,0x00,0x05,0x00, -0x4a,0x00,0x00,0x00,0x89,0x03,0x00,0x00,0x86,0x03,0x00,0x00, -0x51,0x03,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x8a,0x03,0x00,0x00,0x89,0x03,0x00,0x00,0x7c,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0x8b,0x03,0x00,0x00,0x8a,0x03,0x00,0x00, -0xab,0x00,0x05,0x00,0x6d,0x00,0x00,0x00,0x8c,0x03,0x00,0x00, -0x8b,0x03,0x00,0x00,0x15,0x00,0x00,0x00,0xa9,0x00,0x06,0x00, -0x14,0x00,0x00,0x00,0x8d,0x03,0x00,0x00,0x8c,0x03,0x00,0x00, -0x0d,0x02,0x00,0x00,0x15,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x14,0x00,0x00,0x00,0x8e,0x03,0x00,0x00,0x7f,0x03,0x00,0x00, -0x8d,0x03,0x00,0x00,0x6f,0x00,0x04,0x00,0x58,0x00,0x00,0x00, -0x8f,0x03,0x00,0x00,0x8e,0x03,0x00,0x00,0x0c,0x00,0x08,0x00, -0x58,0x00,0x00,0x00,0x91,0x03,0x00,0x00,0x01,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0x7c,0x03,0x00,0x00,0x8f,0x03,0x00,0x00, -0x75,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x96,0x03,0x00,0x00,0xd9,0x02,0x00,0x00,0xbc,0x02,0x00,0x00, -0x41,0x00,0x06,0x00,0xfc,0x01,0x00,0x00,0x97,0x03,0x00,0x00, -0xf7,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x96,0x03,0x00,0x00, -0x3d,0x00,0x04,0x00,0x58,0x00,0x00,0x00,0x98,0x03,0x00,0x00, -0x97,0x03,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x9a,0x03,0x00,0x00,0xf2,0x01,0x00,0x00,0x7c,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0x9b,0x03,0x00,0x00,0x9a,0x03,0x00,0x00, -0x3d,0x00,0x04,0x00,0x4a,0x00,0x00,0x00,0xa2,0x03,0x00,0x00, -0x57,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,0x4a,0x00,0x00,0x00, -0xa5,0x03,0x00,0x00,0xa2,0x03,0x00,0x00,0x51,0x03,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa6,0x03,0x00,0x00, -0xa5,0x03,0x00,0x00,0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00, -0xa7,0x03,0x00,0x00,0xa6,0x03,0x00,0x00,0xab,0x00,0x05,0x00, -0x6d,0x00,0x00,0x00,0xa8,0x03,0x00,0x00,0xa7,0x03,0x00,0x00, -0x15,0x00,0x00,0x00,0xa9,0x00,0x06,0x00,0x14,0x00,0x00,0x00, -0xa9,0x03,0x00,0x00,0xa8,0x03,0x00,0x00,0x0d,0x02,0x00,0x00, -0x15,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x14,0x00,0x00,0x00, -0xaa,0x03,0x00,0x00,0x9b,0x03,0x00,0x00,0xa9,0x03,0x00,0x00, -0x6f,0x00,0x04,0x00,0x58,0x00,0x00,0x00,0xab,0x03,0x00,0x00, -0xaa,0x03,0x00,0x00,0x0c,0x00,0x08,0x00,0x58,0x00,0x00,0x00, -0xad,0x03,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x98,0x03,0x00,0x00,0xab,0x03,0x00,0x00,0x91,0x03,0x00,0x00, -0x3d,0x00,0x04,0x00,0x58,0x00,0x00,0x00,0xb4,0x03,0x00,0x00, -0xfd,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x58,0x00,0x00,0x00, -0xbb,0x03,0x00,0x00,0x17,0x02,0x00,0x00,0x81,0x00,0x05,0x00, -0x58,0x00,0x00,0x00,0xbc,0x03,0x00,0x00,0xb4,0x03,0x00,0x00, -0xbb,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,0x58,0x00,0x00,0x00, -0xc3,0x03,0x00,0x00,0x32,0x02,0x00,0x00,0x81,0x00,0x05,0x00, -0x58,0x00,0x00,0x00,0xc4,0x03,0x00,0x00,0xbc,0x03,0x00,0x00, -0xc3,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,0x58,0x00,0x00,0x00, -0xcb,0x03,0x00,0x00,0x4d,0x02,0x00,0x00,0x81,0x00,0x05,0x00, -0x58,0x00,0x00,0x00,0xcc,0x03,0x00,0x00,0xc4,0x03,0x00,0x00, -0xcb,0x03,0x00,0x00,0x70,0x00,0x04,0x00,0x58,0x00,0x00,0x00, -0xce,0x03,0x00,0x00,0xbe,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x58,0x00,0x00,0x00,0xd6,0x03,0x00,0x00,0x69,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0x58,0x00,0x00,0x00,0xdd,0x03,0x00,0x00, -0x84,0x02,0x00,0x00,0x81,0x00,0x05,0x00,0x58,0x00,0x00,0x00, -0xde,0x03,0x00,0x00,0xd6,0x03,0x00,0x00,0xdd,0x03,0x00,0x00, -0x3d,0x00,0x04,0x00,0x58,0x00,0x00,0x00,0xe5,0x03,0x00,0x00, -0xa1,0x02,0x00,0x00,0x81,0x00,0x05,0x00,0x58,0x00,0x00,0x00, -0xe6,0x03,0x00,0x00,0xde,0x03,0x00,0x00,0xe5,0x03,0x00,0x00, -0x3d,0x00,0x04,0x00,0x58,0x00,0x00,0x00,0xed,0x03,0x00,0x00, -0xbe,0x02,0x00,0x00,0x81,0x00,0x05,0x00,0x58,0x00,0x00,0x00, -0xee,0x03,0x00,0x00,0xe6,0x03,0x00,0x00,0xed,0x03,0x00,0x00, -0x70,0x00,0x04,0x00,0x58,0x00,0x00,0x00,0xf0,0x03,0x00,0x00, -0xcd,0x00,0x00,0x00,0x85,0x00,0x05,0x00,0x58,0x00,0x00,0x00, -0xf1,0x03,0x00,0x00,0xee,0x03,0x00,0x00,0xf0,0x03,0x00,0x00, -0x0c,0x00,0x08,0x00,0x58,0x00,0x00,0x00,0xf2,0x03,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0xcc,0x03,0x00,0x00, -0xce,0x03,0x00,0x00,0xf1,0x03,0x00,0x00,0x3d,0x00,0x04,0x00, -0x58,0x00,0x00,0x00,0xf8,0x03,0x00,0x00,0xda,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0x58,0x00,0x00,0x00,0xff,0x03,0x00,0x00, -0xf3,0x02,0x00,0x00,0x81,0x00,0x05,0x00,0x58,0x00,0x00,0x00, -0x00,0x04,0x00,0x00,0xf8,0x03,0x00,0x00,0xff,0x03,0x00,0x00, -0x3d,0x00,0x04,0x00,0x58,0x00,0x00,0x00,0x07,0x04,0x00,0x00, -0x0e,0x03,0x00,0x00,0x81,0x00,0x05,0x00,0x58,0x00,0x00,0x00, -0x08,0x04,0x00,0x00,0x00,0x04,0x00,0x00,0x07,0x04,0x00,0x00, -0x3d,0x00,0x04,0x00,0x58,0x00,0x00,0x00,0x0f,0x04,0x00,0x00, -0x29,0x03,0x00,0x00,0x81,0x00,0x05,0x00,0x58,0x00,0x00,0x00, -0x10,0x04,0x00,0x00,0x08,0x04,0x00,0x00,0x0f,0x04,0x00,0x00, -0x70,0x00,0x04,0x00,0x58,0x00,0x00,0x00,0x12,0x04,0x00,0x00, -0x23,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,0x58,0x00,0x00,0x00, -0x14,0x04,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x10,0x04,0x00,0x00,0x12,0x04,0x00,0x00,0xf2,0x03,0x00,0x00, -0x3d,0x00,0x04,0x00,0x58,0x00,0x00,0x00,0x1b,0x04,0x00,0x00, -0x45,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,0x58,0x00,0x00,0x00, -0x22,0x04,0x00,0x00,0x5f,0x03,0x00,0x00,0x81,0x00,0x05,0x00, -0x58,0x00,0x00,0x00,0x23,0x04,0x00,0x00,0x1b,0x04,0x00,0x00, -0x22,0x04,0x00,0x00,0x3d,0x00,0x04,0x00,0x58,0x00,0x00,0x00, -0x2a,0x04,0x00,0x00,0x7b,0x03,0x00,0x00,0x81,0x00,0x05,0x00, -0x58,0x00,0x00,0x00,0x2b,0x04,0x00,0x00,0x23,0x04,0x00,0x00, -0x2a,0x04,0x00,0x00,0x3d,0x00,0x04,0x00,0x58,0x00,0x00,0x00, -0x32,0x04,0x00,0x00,0x97,0x03,0x00,0x00,0x81,0x00,0x05,0x00, -0x58,0x00,0x00,0x00,0x33,0x04,0x00,0x00,0x2b,0x04,0x00,0x00, -0x32,0x04,0x00,0x00,0x70,0x00,0x04,0x00,0x58,0x00,0x00,0x00, -0x35,0x04,0x00,0x00,0x3f,0x01,0x00,0x00,0x0c,0x00,0x08,0x00, -0x58,0x00,0x00,0x00,0x37,0x04,0x00,0x00,0x01,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0x33,0x04,0x00,0x00,0x35,0x04,0x00,0x00, -0x14,0x04,0x00,0x00,0x70,0x00,0x04,0x00,0x58,0x00,0x00,0x00, -0x3f,0x04,0x00,0x00,0xa2,0x00,0x00,0x00,0x70,0x00,0x04,0x00, -0x58,0x00,0x00,0x00,0x43,0x04,0x00,0x00,0xb0,0x00,0x00,0x00, -0x85,0x00,0x05,0x00,0x58,0x00,0x00,0x00,0x44,0x04,0x00,0x00, -0xd4,0x02,0x00,0x00,0x43,0x04,0x00,0x00,0x0c,0x00,0x08,0x00, -0x58,0x00,0x00,0x00,0x45,0x04,0x00,0x00,0x01,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0x62,0x02,0x00,0x00,0x3f,0x04,0x00,0x00, -0x44,0x04,0x00,0x00,0x70,0x00,0x04,0x00,0x58,0x00,0x00,0x00, -0x48,0x04,0x00,0x00,0xeb,0x00,0x00,0x00,0x0c,0x00,0x08,0x00, -0x58,0x00,0x00,0x00,0x4a,0x04,0x00,0x00,0x01,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0x3e,0x03,0x00,0x00,0x48,0x04,0x00,0x00, -0x45,0x04,0x00,0x00,0x70,0x00,0x04,0x00,0x58,0x00,0x00,0x00, -0x4d,0x04,0x00,0x00,0x07,0x01,0x00,0x00,0x0c,0x00,0x08,0x00, -0x58,0x00,0x00,0x00,0x4f,0x04,0x00,0x00,0x01,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0xad,0x03,0x00,0x00,0x4d,0x04,0x00,0x00, -0x4a,0x04,0x00,0x00,0x85,0x00,0x05,0x00,0x58,0x00,0x00,0x00, -0x53,0x04,0x00,0x00,0x93,0x00,0x00,0x00,0x37,0x04,0x00,0x00, -0x7f,0x00,0x04,0x00,0x58,0x00,0x00,0x00,0x89,0x04,0x00,0x00, -0x53,0x04,0x00,0x00,0x0c,0x00,0x08,0x00,0x58,0x00,0x00,0x00, -0x54,0x04,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x8b,0x00,0x00,0x00,0x4f,0x04,0x00,0x00,0x89,0x04,0x00,0x00, -0x3d,0x00,0x04,0x00,0x58,0x00,0x00,0x00,0x56,0x04,0x00,0x00, -0x63,0x00,0x00,0x00,0x81,0x00,0x05,0x00,0x58,0x00,0x00,0x00, -0x57,0x04,0x00,0x00,0x56,0x04,0x00,0x00,0x54,0x04,0x00,0x00, -0x3e,0x00,0x03,0x00,0x63,0x00,0x00,0x00,0x57,0x04,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5a,0x04,0x00,0x00, -0x85,0x04,0x00,0x00,0x23,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x66,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x68,0x00,0x00,0x00, -0xe0,0x00,0x04,0x00,0x23,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x5b,0x04,0x00,0x00,0xf9,0x00,0x02,0x00,0x5d,0x04,0x00,0x00, -0xf8,0x00,0x02,0x00,0x5d,0x04,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x86,0x04,0x00,0x00,0x5c,0x00,0x00,0x00, -0x68,0x00,0x00,0x00,0x74,0x04,0x00,0x00,0x60,0x04,0x00,0x00, -0xac,0x00,0x05,0x00,0x6d,0x00,0x00,0x00,0x63,0x04,0x00,0x00, -0x86,0x04,0x00,0x00,0x0c,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x5f,0x04,0x00,0x00,0x60,0x04,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x63,0x04,0x00,0x00,0x5e,0x04,0x00,0x00, -0x5f,0x04,0x00,0x00,0xf8,0x00,0x02,0x00,0x5e,0x04,0x00,0x00, -0xb0,0x00,0x05,0x00,0x6d,0x00,0x00,0x00,0x66,0x04,0x00,0x00, -0x24,0x00,0x00,0x00,0x86,0x04,0x00,0x00,0xf7,0x00,0x03,0x00, -0x68,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x66,0x04,0x00,0x00,0x67,0x04,0x00,0x00,0x68,0x04,0x00,0x00, -0xf8,0x00,0x02,0x00,0x67,0x04,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x6c,0x04,0x00,0x00,0x24,0x00,0x00,0x00, -0x86,0x04,0x00,0x00,0x41,0x00,0x05,0x00,0x62,0x00,0x00,0x00, -0x6d,0x04,0x00,0x00,0x5b,0x00,0x00,0x00,0x6c,0x04,0x00,0x00, -0x3d,0x00,0x04,0x00,0x58,0x00,0x00,0x00,0x6e,0x04,0x00,0x00, -0x6d,0x04,0x00,0x00,0x41,0x00,0x05,0x00,0x62,0x00,0x00,0x00, -0x6f,0x04,0x00,0x00,0x5b,0x00,0x00,0x00,0x24,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x58,0x00,0x00,0x00,0x70,0x04,0x00,0x00, -0x6f,0x04,0x00,0x00,0x81,0x00,0x05,0x00,0x58,0x00,0x00,0x00, -0x71,0x04,0x00,0x00,0x70,0x04,0x00,0x00,0x6e,0x04,0x00,0x00, -0x3e,0x00,0x03,0x00,0x6f,0x04,0x00,0x00,0x71,0x04,0x00,0x00, -0xf9,0x00,0x02,0x00,0x68,0x04,0x00,0x00,0xf8,0x00,0x02,0x00, -0x68,0x04,0x00,0x00,0xe0,0x00,0x04,0x00,0x23,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x5b,0x04,0x00,0x00,0xf9,0x00,0x02,0x00, -0x60,0x04,0x00,0x00,0xf8,0x00,0x02,0x00,0x60,0x04,0x00,0x00, -0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x74,0x04,0x00,0x00, -0x86,0x04,0x00,0x00,0x4d,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x5d,0x04,0x00,0x00,0xf8,0x00,0x02,0x00,0x5f,0x04,0x00,0x00, -0xaa,0x00,0x05,0x00,0x6d,0x00,0x00,0x00,0x76,0x04,0x00,0x00, -0x24,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xf7,0x00,0x03,0x00, -0x78,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x76,0x04,0x00,0x00,0x77,0x04,0x00,0x00,0x78,0x04,0x00,0x00, -0xf8,0x00,0x02,0x00,0x77,0x04,0x00,0x00,0x41,0x00,0x05,0x00, -0x16,0x00,0x00,0x00,0x7d,0x04,0x00,0x00,0x13,0x00,0x00,0x00, -0xe7,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x7e,0x04,0x00,0x00,0x7d,0x04,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x80,0x04,0x00,0x00,0x7e,0x04,0x00,0x00, -0x0f,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x62,0x00,0x00,0x00, -0x81,0x04,0x00,0x00,0x5b,0x00,0x00,0x00,0x15,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x58,0x00,0x00,0x00,0x82,0x04,0x00,0x00, -0x81,0x04,0x00,0x00,0x41,0x00,0x06,0x00,0xfc,0x01,0x00,0x00, -0x83,0x04,0x00,0x00,0x7c,0x04,0x00,0x00,0x15,0x00,0x00,0x00, -0x80,0x04,0x00,0x00,0x3e,0x00,0x03,0x00,0x83,0x04,0x00,0x00, -0x82,0x04,0x00,0x00,0xf9,0x00,0x02,0x00,0x78,0x04,0x00,0x00, -0xf8,0x00,0x02,0x00,0x78,0x04,0x00,0x00,0xfd,0x00,0x01,0x00, -0x38,0x00,0x01,0x00, -}; -const uint64_t mul_mat_vec_q5_K_f32_len = 12016; - -unsigned char mul_mat_vec_q6_K_f32_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0xc5,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x27,0x00,0x00,0x00, -0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00, -0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00, -0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30, -0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x0f,0x00,0x0c,0x00,0x05,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x8f,0x00,0x00,0x00, -0xa5,0x01,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x11,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x20,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x6f,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x70,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x72,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x74,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x74,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x80,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x74,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0xc0,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x74,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x75,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0xd2,0x00,0x00,0x00, -0x48,0x00,0x04,0x00,0x76,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x76,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0x76,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x78,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x78,0x00,0x00,0x00, -0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x8c,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x04,0x00,0x8d,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x8d,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0x8d,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x8f,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x8f,0x00,0x00,0x00, -0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xa2,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x04,0x00,0xa3,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0xa3,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0xa3,0x01,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xa5,0x01,0x00,0x00,0x22,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xa5,0x01,0x00,0x00, -0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xae,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00, -0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x1e,0x00,0x05,0x00, -0x11,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x12,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x12,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x16,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x00,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x33,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x4b,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x16,0x00,0x03,0x00, -0x50,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x1c,0x00,0x04,0x00, -0x51,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x52,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x51,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x52,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x50,0x00,0x00,0x00,0x59,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x5a,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x14,0x00,0x02,0x00, -0x65,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x6e,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1c,0x00,0x04,0x00, -0x6f,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x4b,0x00,0x00,0x00, -0x1c,0x00,0x04,0x00,0x70,0x00,0x00,0x00,0x6e,0x00,0x00,0x00, -0x3a,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x71,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x1c,0x00,0x04,0x00, -0x72,0x00,0x00,0x00,0x71,0x00,0x00,0x00,0x54,0x00,0x00,0x00, -0x16,0x00,0x03,0x00,0x73,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x1e,0x00,0x06,0x00,0x74,0x00,0x00,0x00,0x6f,0x00,0x00,0x00, -0x70,0x00,0x00,0x00,0x72,0x00,0x00,0x00,0x73,0x00,0x00,0x00, -0x1d,0x00,0x03,0x00,0x75,0x00,0x00,0x00,0x74,0x00,0x00,0x00, -0x1e,0x00,0x03,0x00,0x76,0x00,0x00,0x00,0x75,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x77,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x76,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x77,0x00,0x00,0x00, -0x78,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x7d,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x73,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00, -0x8a,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x1d,0x00,0x03,0x00, -0x8c,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x1e,0x00,0x03,0x00, -0x8d,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x8e,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x8d,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x8e,0x00,0x00,0x00,0x8f,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00, -0x90,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x99,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x50,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x9f,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xa2,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x71,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0xb1,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x6e,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xb6,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00, -0xc9,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x42,0x01,0x00,0x00,0x60,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4a,0x01,0x00,0x00, -0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00, -0x68,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x84,0x01,0x00,0x00,0x08,0x01,0x00,0x00, -0x1d,0x00,0x03,0x00,0xa2,0x01,0x00,0x00,0x50,0x00,0x00,0x00, -0x1e,0x00,0x03,0x00,0xa3,0x01,0x00,0x00,0xa2,0x01,0x00,0x00, -0x20,0x00,0x04,0x00,0xa4,0x01,0x00,0x00,0x0c,0x00,0x00,0x00, -0xa3,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0xa4,0x01,0x00,0x00, -0xa5,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xad,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0x2c,0x00,0x06,0x00,0x09,0x00,0x00,0x00,0xae,0x01,0x00,0x00, -0x40,0x00,0x00,0x00,0xad,0x01,0x00,0x00,0xad,0x01,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xbb,0x03,0x00,0x00, -0x21,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xbc,0x03,0x00,0x00,0x41,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xbd,0x03,0x00,0x00,0x61,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xbe,0x03,0x00,0x00, -0x22,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xbf,0x03,0x00,0x00,0x42,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xc0,0x03,0x00,0x00,0x62,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xc1,0x03,0x00,0x00, -0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xc2,0x03,0x00,0x00,0x23,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xc3,0x03,0x00,0x00,0x43,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xc4,0x03,0x00,0x00, -0x63,0x00,0x00,0x00,0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x16,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x13,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x19,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x1e,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x1a,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x2c,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x2b,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00, -0x2b,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x82,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x24,0x00,0x00,0x00, -0x30,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x35,0x00,0x00,0x00,0x33,0x00,0x00,0x00,0x31,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x38,0x00,0x00,0x00, -0x31,0x00,0x00,0x00,0x33,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x3a,0x00,0x00,0x00, -0x2c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x3e,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x35,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x42,0x00,0x00,0x00, -0x40,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x42,0x00,0x00,0x00, -0x35,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x49,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x38,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4d,0x00,0x00,0x00, -0x4b,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x4d,0x00,0x00,0x00, -0x35,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x56,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x58,0x00,0x00,0x00, -0x56,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x5a,0x00,0x00,0x00,0x5b,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0x58,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0x5b,0x00,0x00,0x00, -0x59,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x5e,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x5e,0x00,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xaf,0x01,0x00,0x00,0x28,0x00,0x00,0x00, -0x05,0x00,0x00,0x00,0x83,0x01,0x00,0x00,0x5f,0x00,0x00,0x00, -0xb0,0x00,0x05,0x00,0x65,0x00,0x00,0x00,0x66,0x00,0x00,0x00, -0xaf,0x01,0x00,0x00,0x1a,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x60,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x66,0x00,0x00,0x00,0x5f,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x5f,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x69,0x00,0x00,0x00, -0xaf,0x01,0x00,0x00,0x19,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x6b,0x00,0x00,0x00,0x69,0x00,0x00,0x00, -0x4f,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x7b,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0xaf,0x01,0x00,0x00, -0x41,0x00,0x07,0x00,0x7d,0x00,0x00,0x00,0x7e,0x00,0x00,0x00, -0x78,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x7b,0x00,0x00,0x00, -0x7c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x73,0x00,0x00,0x00, -0x7f,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x73,0x00,0x04,0x00, -0x50,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x7f,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x91,0x00,0x00,0x00, -0x13,0x00,0x00,0x00,0x90,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x91,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x94,0x00,0x00,0x00, -0x92,0x00,0x00,0x00,0x6b,0x00,0x00,0x00,0x41,0x00,0x06,0x00, -0x99,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x8f,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x50,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x9a,0x00,0x00,0x00, -0x41,0x00,0x08,0x00,0xa2,0x00,0x00,0x00,0xa3,0x00,0x00,0x00, -0x78,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x7b,0x00,0x00,0x00, -0x9f,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x71,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0xa3,0x00,0x00,0x00, -0x6f,0x00,0x04,0x00,0x50,0x00,0x00,0x00,0xa5,0x00,0x00,0x00, -0xa4,0x00,0x00,0x00,0x85,0x00,0x05,0x00,0x50,0x00,0x00,0x00, -0xa6,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0xa5,0x00,0x00,0x00, -0x85,0x00,0x05,0x00,0x50,0x00,0x00,0x00,0xa8,0x00,0x00,0x00, -0xa6,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x41,0x00,0x08,0x00, -0xb1,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0x78,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,0x15,0x00,0x00,0x00, -0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x6e,0x00,0x00,0x00, -0xb3,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0xb3,0x00,0x00,0x00, -0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xb5,0x00,0x00,0x00, -0xb4,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00, -0xb7,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,0xb6,0x00,0x00,0x00, -0x41,0x00,0x08,0x00,0xb1,0x00,0x00,0x00,0xbf,0x00,0x00,0x00, -0x78,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x7b,0x00,0x00,0x00, -0x90,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x6e,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0xbf,0x00,0x00,0x00, -0xc2,0x00,0x05,0x00,0x6e,0x00,0x00,0x00,0xc1,0x00,0x00,0x00, -0xc0,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,0xc1,0x00,0x00,0x00, -0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xc3,0x00,0x00,0x00, -0xc2,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00, -0xc4,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0x7c,0x00,0x00,0x00, -0xc4,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0xc5,0x00,0x00,0x00, -0xc4,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0xc5,0x00,0x05,0x00, -0x14,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0xb7,0x00,0x00,0x00, -0xc5,0x00,0x00,0x00,0x72,0x00,0x04,0x00,0x71,0x00,0x00,0x00, -0xc7,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x72,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0xc7,0x00,0x00,0x00, -0x82,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0xca,0x00,0x00,0x00, -0xc8,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x6f,0x00,0x04,0x00, -0x50,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0xca,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd4,0x00,0x00,0x00, -0x94,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x41,0x00,0x06,0x00, -0x99,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0x8f,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x50,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0xd5,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdb,0x00,0x00,0x00, -0x49,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x41,0x00,0x08,0x00, -0xa2,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,0x78,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,0x9f,0x00,0x00,0x00, -0xdb,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x71,0x00,0x00,0x00, -0xdd,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,0x6f,0x00,0x04,0x00, -0x50,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0xdd,0x00,0x00,0x00, -0x85,0x00,0x05,0x00,0x50,0x00,0x00,0x00,0xdf,0x00,0x00,0x00, -0xd6,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0x85,0x00,0x05,0x00, -0x50,0x00,0x00,0x00,0xe1,0x00,0x00,0x00,0xdf,0x00,0x00,0x00, -0x80,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xe9,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x40,0x00,0x00,0x00, -0x41,0x00,0x08,0x00,0xb1,0x00,0x00,0x00,0xea,0x00,0x00,0x00, -0x78,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x7b,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0xe9,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x6e,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,0xea,0x00,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xec,0x00,0x00,0x00, -0xeb,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00, -0xed,0x00,0x00,0x00,0xec,0x00,0x00,0x00,0xc7,0x00,0x05,0x00, -0x14,0x00,0x00,0x00,0xee,0x00,0x00,0x00,0xed,0x00,0x00,0x00, -0xb6,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x6e,0x00,0x00,0x00, -0xf7,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0xc2,0x00,0x05,0x00, -0x6e,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,0xf7,0x00,0x00,0x00, -0x9f,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xf9,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,0x7c,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0xf9,0x00,0x00,0x00, -0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0xfb,0x00,0x00,0x00, -0xfa,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0xc4,0x00,0x05,0x00, -0x14,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0xfb,0x00,0x00,0x00, -0x8a,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,0x14,0x00,0x00,0x00, -0xfd,0x00,0x00,0x00,0xee,0x00,0x00,0x00,0xfc,0x00,0x00,0x00, -0x72,0x00,0x04,0x00,0x71,0x00,0x00,0x00,0xfe,0x00,0x00,0x00, -0xfd,0x00,0x00,0x00,0x72,0x00,0x04,0x00,0x14,0x00,0x00,0x00, -0xff,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x82,0x00,0x05,0x00, -0x14,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0xff,0x00,0x00,0x00, -0xc9,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,0x50,0x00,0x00,0x00, -0x01,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x85,0x00,0x05,0x00, -0x50,0x00,0x00,0x00,0x02,0x01,0x00,0x00,0xe1,0x00,0x00,0x00, -0x01,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,0x50,0x00,0x00,0x00, -0x03,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0xa8,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0x02,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0b,0x01,0x00,0x00, -0x94,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x41,0x00,0x06,0x00, -0x99,0x00,0x00,0x00,0x0c,0x01,0x00,0x00,0x8f,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0x0b,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0x50,0x00,0x00,0x00,0x0d,0x01,0x00,0x00,0x0c,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x12,0x01,0x00,0x00, -0x49,0x00,0x00,0x00,0x33,0x00,0x00,0x00,0x41,0x00,0x08,0x00, -0xa2,0x00,0x00,0x00,0x13,0x01,0x00,0x00,0x78,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,0x9f,0x00,0x00,0x00, -0x12,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x71,0x00,0x00,0x00, -0x14,0x01,0x00,0x00,0x13,0x01,0x00,0x00,0x6f,0x00,0x04,0x00, -0x50,0x00,0x00,0x00,0x15,0x01,0x00,0x00,0x14,0x01,0x00,0x00, -0x85,0x00,0x05,0x00,0x50,0x00,0x00,0x00,0x16,0x01,0x00,0x00, -0x0d,0x01,0x00,0x00,0x15,0x01,0x00,0x00,0x85,0x00,0x05,0x00, -0x50,0x00,0x00,0x00,0x18,0x01,0x00,0x00,0x16,0x01,0x00,0x00, -0x80,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x6e,0x00,0x00,0x00, -0x22,0x01,0x00,0x00,0xb2,0x00,0x00,0x00,0xc2,0x00,0x05,0x00, -0x6e,0x00,0x00,0x00,0x23,0x01,0x00,0x00,0x22,0x01,0x00,0x00, -0x8a,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x24,0x01,0x00,0x00,0x23,0x01,0x00,0x00,0x7c,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0x25,0x01,0x00,0x00,0x24,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0x6e,0x00,0x00,0x00,0x2e,0x01,0x00,0x00, -0xbf,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,0x6e,0x00,0x00,0x00, -0x2f,0x01,0x00,0x00,0x2e,0x01,0x00,0x00,0x8a,0x00,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x30,0x01,0x00,0x00, -0x2f,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00, -0x31,0x01,0x00,0x00,0x30,0x01,0x00,0x00,0xc7,0x00,0x05,0x00, -0x14,0x00,0x00,0x00,0x32,0x01,0x00,0x00,0x31,0x01,0x00,0x00, -0x7c,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,0x14,0x00,0x00,0x00, -0x33,0x01,0x00,0x00,0x32,0x01,0x00,0x00,0x8a,0x00,0x00,0x00, -0xc5,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0x34,0x01,0x00,0x00, -0x25,0x01,0x00,0x00,0x33,0x01,0x00,0x00,0x72,0x00,0x04,0x00, -0x71,0x00,0x00,0x00,0x35,0x01,0x00,0x00,0x34,0x01,0x00,0x00, -0x72,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x36,0x01,0x00,0x00, -0x35,0x01,0x00,0x00,0x82,0x00,0x05,0x00,0x14,0x00,0x00,0x00, -0x37,0x01,0x00,0x00,0x36,0x01,0x00,0x00,0xc9,0x00,0x00,0x00, -0x6f,0x00,0x04,0x00,0x50,0x00,0x00,0x00,0x38,0x01,0x00,0x00, -0x37,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,0x50,0x00,0x00,0x00, -0x3a,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x18,0x01,0x00,0x00,0x38,0x01,0x00,0x00,0x03,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x43,0x01,0x00,0x00, -0x94,0x00,0x00,0x00,0x42,0x01,0x00,0x00,0x41,0x00,0x06,0x00, -0x99,0x00,0x00,0x00,0x44,0x01,0x00,0x00,0x8f,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0x43,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0x50,0x00,0x00,0x00,0x45,0x01,0x00,0x00,0x44,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4b,0x01,0x00,0x00, -0x49,0x00,0x00,0x00,0x4a,0x01,0x00,0x00,0x41,0x00,0x08,0x00, -0xa2,0x00,0x00,0x00,0x4c,0x01,0x00,0x00,0x78,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,0x9f,0x00,0x00,0x00, -0x4b,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x71,0x00,0x00,0x00, -0x4d,0x01,0x00,0x00,0x4c,0x01,0x00,0x00,0x6f,0x00,0x04,0x00, -0x50,0x00,0x00,0x00,0x4e,0x01,0x00,0x00,0x4d,0x01,0x00,0x00, -0x85,0x00,0x05,0x00,0x50,0x00,0x00,0x00,0x4f,0x01,0x00,0x00, -0x45,0x01,0x00,0x00,0x4e,0x01,0x00,0x00,0x85,0x00,0x05,0x00, -0x50,0x00,0x00,0x00,0x51,0x01,0x00,0x00,0x4f,0x01,0x00,0x00, -0x80,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x6e,0x00,0x00,0x00, -0x5b,0x01,0x00,0x00,0xea,0x00,0x00,0x00,0xc2,0x00,0x05,0x00, -0x6e,0x00,0x00,0x00,0x5c,0x01,0x00,0x00,0x5b,0x01,0x00,0x00, -0x8a,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x5d,0x01,0x00,0x00,0x5c,0x01,0x00,0x00,0x7c,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0x5e,0x01,0x00,0x00,0x5d,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0x6e,0x00,0x00,0x00,0x67,0x01,0x00,0x00, -0xbf,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,0x6e,0x00,0x00,0x00, -0x69,0x01,0x00,0x00,0x67,0x01,0x00,0x00,0x68,0x01,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x6a,0x01,0x00,0x00, -0x69,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00, -0x6b,0x01,0x00,0x00,0x6a,0x01,0x00,0x00,0xc7,0x00,0x05,0x00, -0x14,0x00,0x00,0x00,0x6c,0x01,0x00,0x00,0x6b,0x01,0x00,0x00, -0x7c,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,0x14,0x00,0x00,0x00, -0x6d,0x01,0x00,0x00,0x6c,0x01,0x00,0x00,0x8a,0x00,0x00,0x00, -0xc5,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0x6e,0x01,0x00,0x00, -0x5e,0x01,0x00,0x00,0x6d,0x01,0x00,0x00,0x72,0x00,0x04,0x00, -0x71,0x00,0x00,0x00,0x6f,0x01,0x00,0x00,0x6e,0x01,0x00,0x00, -0x72,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x70,0x01,0x00,0x00, -0x6f,0x01,0x00,0x00,0x82,0x00,0x05,0x00,0x14,0x00,0x00,0x00, -0x71,0x01,0x00,0x00,0x70,0x01,0x00,0x00,0xc9,0x00,0x00,0x00, -0x6f,0x00,0x04,0x00,0x50,0x00,0x00,0x00,0x72,0x01,0x00,0x00, -0x71,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,0x50,0x00,0x00,0x00, -0x74,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x51,0x01,0x00,0x00,0x72,0x01,0x00,0x00,0x3a,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc0,0x01,0x00,0x00, -0x94,0x00,0x00,0x00,0xad,0x01,0x00,0x00,0x41,0x00,0x06,0x00, -0x99,0x00,0x00,0x00,0xc2,0x01,0x00,0x00,0x8f,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0xc0,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0x50,0x00,0x00,0x00,0xc3,0x01,0x00,0x00,0xc2,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0x71,0x00,0x00,0x00,0xc7,0x01,0x00,0x00, -0xa3,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,0x50,0x00,0x00,0x00, -0xc8,0x01,0x00,0x00,0xc7,0x01,0x00,0x00,0x85,0x00,0x05,0x00, -0x50,0x00,0x00,0x00,0xc9,0x01,0x00,0x00,0xc3,0x01,0x00,0x00, -0xc8,0x01,0x00,0x00,0x85,0x00,0x05,0x00,0x50,0x00,0x00,0x00, -0xca,0x01,0x00,0x00,0xc9,0x01,0x00,0x00,0x80,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xcd,0x01,0x00,0x00, -0x3e,0x00,0x00,0x00,0xad,0x01,0x00,0x00,0x41,0x00,0x08,0x00, -0xb1,0x00,0x00,0x00,0xcf,0x01,0x00,0x00,0x78,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,0x15,0x00,0x00,0x00, -0xcd,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x6e,0x00,0x00,0x00, -0xd0,0x01,0x00,0x00,0xcf,0x01,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xd1,0x01,0x00,0x00,0xd0,0x01,0x00,0x00, -0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xd2,0x01,0x00,0x00, -0xd1,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00, -0xd3,0x01,0x00,0x00,0xd2,0x01,0x00,0x00,0xb6,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd6,0x01,0x00,0x00, -0x44,0x00,0x00,0x00,0xad,0x01,0x00,0x00,0x41,0x00,0x08,0x00, -0xb1,0x00,0x00,0x00,0xd7,0x01,0x00,0x00,0x78,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,0x90,0x00,0x00,0x00, -0xd6,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x6e,0x00,0x00,0x00, -0xd8,0x01,0x00,0x00,0xd7,0x01,0x00,0x00,0xc2,0x00,0x05,0x00, -0x6e,0x00,0x00,0x00,0xd9,0x01,0x00,0x00,0xd8,0x01,0x00,0x00, -0x15,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xda,0x01,0x00,0x00,0xd9,0x01,0x00,0x00,0x7c,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0xdb,0x01,0x00,0x00,0xda,0x01,0x00,0x00, -0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0xdc,0x01,0x00,0x00, -0xdb,0x01,0x00,0x00,0x7c,0x00,0x00,0x00,0xc4,0x00,0x05,0x00, -0x14,0x00,0x00,0x00,0xdd,0x01,0x00,0x00,0xdc,0x01,0x00,0x00, -0x8a,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,0x14,0x00,0x00,0x00, -0xde,0x01,0x00,0x00,0xd3,0x01,0x00,0x00,0xdd,0x01,0x00,0x00, -0x72,0x00,0x04,0x00,0x71,0x00,0x00,0x00,0xdf,0x01,0x00,0x00, -0xde,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0x14,0x00,0x00,0x00, -0xe0,0x01,0x00,0x00,0xdf,0x01,0x00,0x00,0x82,0x00,0x05,0x00, -0x14,0x00,0x00,0x00,0xe1,0x01,0x00,0x00,0xe0,0x01,0x00,0x00, -0xc9,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,0x50,0x00,0x00,0x00, -0xe2,0x01,0x00,0x00,0xe1,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xe9,0x01,0x00,0x00,0x94,0x00,0x00,0x00, -0xbb,0x03,0x00,0x00,0x41,0x00,0x06,0x00,0x99,0x00,0x00,0x00, -0xea,0x01,0x00,0x00,0x8f,0x00,0x00,0x00,0x15,0x00,0x00,0x00, -0xe9,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x50,0x00,0x00,0x00, -0xeb,0x01,0x00,0x00,0xea,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0x71,0x00,0x00,0x00,0xef,0x01,0x00,0x00,0xdc,0x00,0x00,0x00, -0x6f,0x00,0x04,0x00,0x50,0x00,0x00,0x00,0xf0,0x01,0x00,0x00, -0xef,0x01,0x00,0x00,0x85,0x00,0x05,0x00,0x50,0x00,0x00,0x00, -0xf1,0x01,0x00,0x00,0xeb,0x01,0x00,0x00,0xf0,0x01,0x00,0x00, -0x85,0x00,0x05,0x00,0x50,0x00,0x00,0x00,0xf2,0x01,0x00,0x00, -0xf1,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xf6,0x01,0x00,0x00,0x3e,0x00,0x00,0x00, -0xbb,0x03,0x00,0x00,0x41,0x00,0x08,0x00,0xb1,0x00,0x00,0x00, -0xf7,0x01,0x00,0x00,0x78,0x00,0x00,0x00,0x15,0x00,0x00,0x00, -0x7b,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0xf6,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0x6e,0x00,0x00,0x00,0xf8,0x01,0x00,0x00, -0xf7,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xf9,0x01,0x00,0x00,0xf8,0x01,0x00,0x00,0x7c,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0xfa,0x01,0x00,0x00,0xf9,0x01,0x00,0x00, -0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0xfb,0x01,0x00,0x00, -0xfa,0x01,0x00,0x00,0xb6,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x6e,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0xd7,0x01,0x00,0x00, -0xc2,0x00,0x05,0x00,0x6e,0x00,0x00,0x00,0x01,0x02,0x00,0x00, -0x00,0x02,0x00,0x00,0x9f,0x00,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x02,0x02,0x00,0x00,0x01,0x02,0x00,0x00, -0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x03,0x02,0x00,0x00, -0x02,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00, -0x04,0x02,0x00,0x00,0x03,0x02,0x00,0x00,0x7c,0x00,0x00,0x00, -0xc4,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0x05,0x02,0x00,0x00, -0x04,0x02,0x00,0x00,0x8a,0x00,0x00,0x00,0xc5,0x00,0x05,0x00, -0x14,0x00,0x00,0x00,0x06,0x02,0x00,0x00,0xfb,0x01,0x00,0x00, -0x05,0x02,0x00,0x00,0x72,0x00,0x04,0x00,0x71,0x00,0x00,0x00, -0x07,0x02,0x00,0x00,0x06,0x02,0x00,0x00,0x72,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0x08,0x02,0x00,0x00,0x07,0x02,0x00,0x00, -0x82,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0x09,0x02,0x00,0x00, -0x08,0x02,0x00,0x00,0xc9,0x00,0x00,0x00,0x6f,0x00,0x04,0x00, -0x50,0x00,0x00,0x00,0x0a,0x02,0x00,0x00,0x09,0x02,0x00,0x00, -0x85,0x00,0x05,0x00,0x50,0x00,0x00,0x00,0x0b,0x02,0x00,0x00, -0xf2,0x01,0x00,0x00,0x0a,0x02,0x00,0x00,0x0c,0x00,0x08,0x00, -0x50,0x00,0x00,0x00,0x0c,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0xca,0x01,0x00,0x00,0xe2,0x01,0x00,0x00, -0x0b,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x12,0x02,0x00,0x00,0x94,0x00,0x00,0x00,0xbc,0x03,0x00,0x00, -0x41,0x00,0x06,0x00,0x99,0x00,0x00,0x00,0x13,0x02,0x00,0x00, -0x8f,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x12,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0x50,0x00,0x00,0x00,0x14,0x02,0x00,0x00, -0x13,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x71,0x00,0x00,0x00, -0x18,0x02,0x00,0x00,0x13,0x01,0x00,0x00,0x6f,0x00,0x04,0x00, -0x50,0x00,0x00,0x00,0x19,0x02,0x00,0x00,0x18,0x02,0x00,0x00, -0x85,0x00,0x05,0x00,0x50,0x00,0x00,0x00,0x1a,0x02,0x00,0x00, -0x14,0x02,0x00,0x00,0x19,0x02,0x00,0x00,0x85,0x00,0x05,0x00, -0x50,0x00,0x00,0x00,0x1b,0x02,0x00,0x00,0x1a,0x02,0x00,0x00, -0x80,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x6e,0x00,0x00,0x00, -0x21,0x02,0x00,0x00,0xcf,0x01,0x00,0x00,0xc2,0x00,0x05,0x00, -0x6e,0x00,0x00,0x00,0x22,0x02,0x00,0x00,0x21,0x02,0x00,0x00, -0x8a,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x23,0x02,0x00,0x00,0x22,0x02,0x00,0x00,0x7c,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0x24,0x02,0x00,0x00,0x23,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0x6e,0x00,0x00,0x00,0x29,0x02,0x00,0x00, -0xd7,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x6e,0x00,0x00,0x00, -0x2a,0x02,0x00,0x00,0x29,0x02,0x00,0x00,0x8a,0x00,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x2b,0x02,0x00,0x00, -0x2a,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00, -0x2c,0x02,0x00,0x00,0x2b,0x02,0x00,0x00,0xc7,0x00,0x05,0x00, -0x14,0x00,0x00,0x00,0x2d,0x02,0x00,0x00,0x2c,0x02,0x00,0x00, -0x7c,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,0x14,0x00,0x00,0x00, -0x2e,0x02,0x00,0x00,0x2d,0x02,0x00,0x00,0x8a,0x00,0x00,0x00, -0xc5,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0x2f,0x02,0x00,0x00, -0x24,0x02,0x00,0x00,0x2e,0x02,0x00,0x00,0x72,0x00,0x04,0x00, -0x71,0x00,0x00,0x00,0x30,0x02,0x00,0x00,0x2f,0x02,0x00,0x00, -0x72,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x31,0x02,0x00,0x00, -0x30,0x02,0x00,0x00,0x82,0x00,0x05,0x00,0x14,0x00,0x00,0x00, -0x32,0x02,0x00,0x00,0x31,0x02,0x00,0x00,0xc9,0x00,0x00,0x00, -0x6f,0x00,0x04,0x00,0x50,0x00,0x00,0x00,0x33,0x02,0x00,0x00, -0x32,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,0x50,0x00,0x00,0x00, -0x35,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x1b,0x02,0x00,0x00,0x33,0x02,0x00,0x00,0x0c,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3b,0x02,0x00,0x00, -0x94,0x00,0x00,0x00,0xbd,0x03,0x00,0x00,0x41,0x00,0x06,0x00, -0x99,0x00,0x00,0x00,0x3c,0x02,0x00,0x00,0x8f,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0x3b,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0x50,0x00,0x00,0x00,0x3d,0x02,0x00,0x00,0x3c,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0x71,0x00,0x00,0x00,0x41,0x02,0x00,0x00, -0x4c,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,0x50,0x00,0x00,0x00, -0x42,0x02,0x00,0x00,0x41,0x02,0x00,0x00,0x85,0x00,0x05,0x00, -0x50,0x00,0x00,0x00,0x43,0x02,0x00,0x00,0x3d,0x02,0x00,0x00, -0x42,0x02,0x00,0x00,0x85,0x00,0x05,0x00,0x50,0x00,0x00,0x00, -0x44,0x02,0x00,0x00,0x43,0x02,0x00,0x00,0x80,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x6e,0x00,0x00,0x00,0x4a,0x02,0x00,0x00, -0xf7,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x6e,0x00,0x00,0x00, -0x4b,0x02,0x00,0x00,0x4a,0x02,0x00,0x00,0x8a,0x00,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4c,0x02,0x00,0x00, -0x4b,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00, -0x4d,0x02,0x00,0x00,0x4c,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0x6e,0x00,0x00,0x00,0x52,0x02,0x00,0x00,0xd7,0x01,0x00,0x00, -0xc2,0x00,0x05,0x00,0x6e,0x00,0x00,0x00,0x53,0x02,0x00,0x00, -0x52,0x02,0x00,0x00,0x68,0x01,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x54,0x02,0x00,0x00,0x53,0x02,0x00,0x00, -0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x55,0x02,0x00,0x00, -0x54,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00, -0x56,0x02,0x00,0x00,0x55,0x02,0x00,0x00,0x7c,0x00,0x00,0x00, -0xc4,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0x57,0x02,0x00,0x00, -0x56,0x02,0x00,0x00,0x8a,0x00,0x00,0x00,0xc5,0x00,0x05,0x00, -0x14,0x00,0x00,0x00,0x58,0x02,0x00,0x00,0x4d,0x02,0x00,0x00, -0x57,0x02,0x00,0x00,0x72,0x00,0x04,0x00,0x71,0x00,0x00,0x00, -0x59,0x02,0x00,0x00,0x58,0x02,0x00,0x00,0x72,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0x5a,0x02,0x00,0x00,0x59,0x02,0x00,0x00, -0x82,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0x5b,0x02,0x00,0x00, -0x5a,0x02,0x00,0x00,0xc9,0x00,0x00,0x00,0x6f,0x00,0x04,0x00, -0x50,0x00,0x00,0x00,0x5c,0x02,0x00,0x00,0x5b,0x02,0x00,0x00, -0x0c,0x00,0x08,0x00,0x50,0x00,0x00,0x00,0x5e,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x44,0x02,0x00,0x00, -0x5c,0x02,0x00,0x00,0x35,0x02,0x00,0x00,0x81,0x00,0x05,0x00, -0x50,0x00,0x00,0x00,0x5f,0x02,0x00,0x00,0x74,0x01,0x00,0x00, -0x5e,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x6c,0x02,0x00,0x00,0x94,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x41,0x00,0x06,0x00,0x99,0x00,0x00,0x00,0x6e,0x02,0x00,0x00, -0x8f,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x6c,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0x50,0x00,0x00,0x00,0x6f,0x02,0x00,0x00, -0x6e,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x71,0x00,0x00,0x00, -0x73,0x02,0x00,0x00,0xa3,0x00,0x00,0x00,0x6f,0x00,0x04,0x00, -0x50,0x00,0x00,0x00,0x74,0x02,0x00,0x00,0x73,0x02,0x00,0x00, -0x85,0x00,0x05,0x00,0x50,0x00,0x00,0x00,0x75,0x02,0x00,0x00, -0x6f,0x02,0x00,0x00,0x74,0x02,0x00,0x00,0x85,0x00,0x05,0x00, -0x50,0x00,0x00,0x00,0x76,0x02,0x00,0x00,0x75,0x02,0x00,0x00, -0x80,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x79,0x02,0x00,0x00,0x3e,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x41,0x00,0x08,0x00,0xb1,0x00,0x00,0x00,0x7b,0x02,0x00,0x00, -0x78,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x7b,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0x79,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0x6e,0x00,0x00,0x00,0x7c,0x02,0x00,0x00,0x7b,0x02,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x7d,0x02,0x00,0x00, -0x7c,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00, -0x7e,0x02,0x00,0x00,0x7d,0x02,0x00,0x00,0xc7,0x00,0x05,0x00, -0x14,0x00,0x00,0x00,0x7f,0x02,0x00,0x00,0x7e,0x02,0x00,0x00, -0xb6,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x82,0x02,0x00,0x00,0x44,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x41,0x00,0x08,0x00,0xb1,0x00,0x00,0x00,0x83,0x02,0x00,0x00, -0x78,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x7b,0x00,0x00,0x00, -0x90,0x00,0x00,0x00,0x82,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0x6e,0x00,0x00,0x00,0x84,0x02,0x00,0x00,0x83,0x02,0x00,0x00, -0xc2,0x00,0x05,0x00,0x6e,0x00,0x00,0x00,0x85,0x02,0x00,0x00, -0x84,0x02,0x00,0x00,0x15,0x00,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x86,0x02,0x00,0x00,0x85,0x02,0x00,0x00, -0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x87,0x02,0x00,0x00, -0x86,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00, -0x88,0x02,0x00,0x00,0x87,0x02,0x00,0x00,0x7c,0x00,0x00,0x00, -0xc4,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0x89,0x02,0x00,0x00, -0x88,0x02,0x00,0x00,0x8a,0x00,0x00,0x00,0xc5,0x00,0x05,0x00, -0x14,0x00,0x00,0x00,0x8a,0x02,0x00,0x00,0x7f,0x02,0x00,0x00, -0x89,0x02,0x00,0x00,0x72,0x00,0x04,0x00,0x71,0x00,0x00,0x00, -0x8b,0x02,0x00,0x00,0x8a,0x02,0x00,0x00,0x72,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0x8c,0x02,0x00,0x00,0x8b,0x02,0x00,0x00, -0x82,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0x8d,0x02,0x00,0x00, -0x8c,0x02,0x00,0x00,0xc9,0x00,0x00,0x00,0x6f,0x00,0x04,0x00, -0x50,0x00,0x00,0x00,0x8e,0x02,0x00,0x00,0x8d,0x02,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x95,0x02,0x00,0x00, -0x94,0x00,0x00,0x00,0xbe,0x03,0x00,0x00,0x41,0x00,0x06,0x00, -0x99,0x00,0x00,0x00,0x96,0x02,0x00,0x00,0x8f,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0x95,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0x50,0x00,0x00,0x00,0x97,0x02,0x00,0x00,0x96,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0x71,0x00,0x00,0x00,0x9b,0x02,0x00,0x00, -0xdc,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,0x50,0x00,0x00,0x00, -0x9c,0x02,0x00,0x00,0x9b,0x02,0x00,0x00,0x85,0x00,0x05,0x00, -0x50,0x00,0x00,0x00,0x9d,0x02,0x00,0x00,0x97,0x02,0x00,0x00, -0x9c,0x02,0x00,0x00,0x85,0x00,0x05,0x00,0x50,0x00,0x00,0x00, -0x9e,0x02,0x00,0x00,0x9d,0x02,0x00,0x00,0x80,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa2,0x02,0x00,0x00, -0x3e,0x00,0x00,0x00,0xbe,0x03,0x00,0x00,0x41,0x00,0x08,0x00, -0xb1,0x00,0x00,0x00,0xa3,0x02,0x00,0x00,0x78,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,0x15,0x00,0x00,0x00, -0xa2,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x6e,0x00,0x00,0x00, -0xa4,0x02,0x00,0x00,0xa3,0x02,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xa5,0x02,0x00,0x00,0xa4,0x02,0x00,0x00, -0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xa6,0x02,0x00,0x00, -0xa5,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00, -0xa7,0x02,0x00,0x00,0xa6,0x02,0x00,0x00,0xb6,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x6e,0x00,0x00,0x00,0xac,0x02,0x00,0x00, -0x83,0x02,0x00,0x00,0xc2,0x00,0x05,0x00,0x6e,0x00,0x00,0x00, -0xad,0x02,0x00,0x00,0xac,0x02,0x00,0x00,0x9f,0x00,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xae,0x02,0x00,0x00, -0xad,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00, -0xaf,0x02,0x00,0x00,0xae,0x02,0x00,0x00,0xc7,0x00,0x05,0x00, -0x14,0x00,0x00,0x00,0xb0,0x02,0x00,0x00,0xaf,0x02,0x00,0x00, -0x7c,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,0x14,0x00,0x00,0x00, -0xb1,0x02,0x00,0x00,0xb0,0x02,0x00,0x00,0x8a,0x00,0x00,0x00, -0xc5,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0xb2,0x02,0x00,0x00, -0xa7,0x02,0x00,0x00,0xb1,0x02,0x00,0x00,0x72,0x00,0x04,0x00, -0x71,0x00,0x00,0x00,0xb3,0x02,0x00,0x00,0xb2,0x02,0x00,0x00, -0x72,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xb4,0x02,0x00,0x00, -0xb3,0x02,0x00,0x00,0x82,0x00,0x05,0x00,0x14,0x00,0x00,0x00, -0xb5,0x02,0x00,0x00,0xb4,0x02,0x00,0x00,0xc9,0x00,0x00,0x00, -0x6f,0x00,0x04,0x00,0x50,0x00,0x00,0x00,0xb6,0x02,0x00,0x00, -0xb5,0x02,0x00,0x00,0x85,0x00,0x05,0x00,0x50,0x00,0x00,0x00, -0xb7,0x02,0x00,0x00,0x9e,0x02,0x00,0x00,0xb6,0x02,0x00,0x00, -0x0c,0x00,0x08,0x00,0x50,0x00,0x00,0x00,0xb8,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x76,0x02,0x00,0x00, -0x8e,0x02,0x00,0x00,0xb7,0x02,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xbe,0x02,0x00,0x00,0x94,0x00,0x00,0x00, -0xbf,0x03,0x00,0x00,0x41,0x00,0x06,0x00,0x99,0x00,0x00,0x00, -0xbf,0x02,0x00,0x00,0x8f,0x00,0x00,0x00,0x15,0x00,0x00,0x00, -0xbe,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x50,0x00,0x00,0x00, -0xc0,0x02,0x00,0x00,0xbf,0x02,0x00,0x00,0x3d,0x00,0x04,0x00, -0x71,0x00,0x00,0x00,0xc4,0x02,0x00,0x00,0x13,0x01,0x00,0x00, -0x6f,0x00,0x04,0x00,0x50,0x00,0x00,0x00,0xc5,0x02,0x00,0x00, -0xc4,0x02,0x00,0x00,0x85,0x00,0x05,0x00,0x50,0x00,0x00,0x00, -0xc6,0x02,0x00,0x00,0xc0,0x02,0x00,0x00,0xc5,0x02,0x00,0x00, -0x85,0x00,0x05,0x00,0x50,0x00,0x00,0x00,0xc7,0x02,0x00,0x00, -0xc6,0x02,0x00,0x00,0x80,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x6e,0x00,0x00,0x00,0xcd,0x02,0x00,0x00,0x7b,0x02,0x00,0x00, -0xc2,0x00,0x05,0x00,0x6e,0x00,0x00,0x00,0xce,0x02,0x00,0x00, -0xcd,0x02,0x00,0x00,0x8a,0x00,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xcf,0x02,0x00,0x00,0xce,0x02,0x00,0x00, -0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xd0,0x02,0x00,0x00, -0xcf,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x6e,0x00,0x00,0x00, -0xd5,0x02,0x00,0x00,0x83,0x02,0x00,0x00,0xc2,0x00,0x05,0x00, -0x6e,0x00,0x00,0x00,0xd6,0x02,0x00,0x00,0xd5,0x02,0x00,0x00, -0x8a,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xd7,0x02,0x00,0x00,0xd6,0x02,0x00,0x00,0x7c,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0xd8,0x02,0x00,0x00,0xd7,0x02,0x00,0x00, -0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0xd9,0x02,0x00,0x00, -0xd8,0x02,0x00,0x00,0x7c,0x00,0x00,0x00,0xc4,0x00,0x05,0x00, -0x14,0x00,0x00,0x00,0xda,0x02,0x00,0x00,0xd9,0x02,0x00,0x00, -0x8a,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,0x14,0x00,0x00,0x00, -0xdb,0x02,0x00,0x00,0xd0,0x02,0x00,0x00,0xda,0x02,0x00,0x00, -0x72,0x00,0x04,0x00,0x71,0x00,0x00,0x00,0xdc,0x02,0x00,0x00, -0xdb,0x02,0x00,0x00,0x72,0x00,0x04,0x00,0x14,0x00,0x00,0x00, -0xdd,0x02,0x00,0x00,0xdc,0x02,0x00,0x00,0x82,0x00,0x05,0x00, -0x14,0x00,0x00,0x00,0xde,0x02,0x00,0x00,0xdd,0x02,0x00,0x00, -0xc9,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,0x50,0x00,0x00,0x00, -0xdf,0x02,0x00,0x00,0xde,0x02,0x00,0x00,0x0c,0x00,0x08,0x00, -0x50,0x00,0x00,0x00,0xe1,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0xc7,0x02,0x00,0x00,0xdf,0x02,0x00,0x00, -0xb8,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xe7,0x02,0x00,0x00,0x94,0x00,0x00,0x00,0xc0,0x03,0x00,0x00, -0x41,0x00,0x06,0x00,0x99,0x00,0x00,0x00,0xe8,0x02,0x00,0x00, -0x8f,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0xe7,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0x50,0x00,0x00,0x00,0xe9,0x02,0x00,0x00, -0xe8,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x71,0x00,0x00,0x00, -0xed,0x02,0x00,0x00,0x4c,0x01,0x00,0x00,0x6f,0x00,0x04,0x00, -0x50,0x00,0x00,0x00,0xee,0x02,0x00,0x00,0xed,0x02,0x00,0x00, -0x85,0x00,0x05,0x00,0x50,0x00,0x00,0x00,0xef,0x02,0x00,0x00, -0xe9,0x02,0x00,0x00,0xee,0x02,0x00,0x00,0x85,0x00,0x05,0x00, -0x50,0x00,0x00,0x00,0xf0,0x02,0x00,0x00,0xef,0x02,0x00,0x00, -0x80,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x6e,0x00,0x00,0x00, -0xf6,0x02,0x00,0x00,0xa3,0x02,0x00,0x00,0xc2,0x00,0x05,0x00, -0x6e,0x00,0x00,0x00,0xf7,0x02,0x00,0x00,0xf6,0x02,0x00,0x00, -0x8a,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xf8,0x02,0x00,0x00,0xf7,0x02,0x00,0x00,0x7c,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0xf9,0x02,0x00,0x00,0xf8,0x02,0x00,0x00, -0x3d,0x00,0x04,0x00,0x6e,0x00,0x00,0x00,0xfe,0x02,0x00,0x00, -0x83,0x02,0x00,0x00,0xc2,0x00,0x05,0x00,0x6e,0x00,0x00,0x00, -0xff,0x02,0x00,0x00,0xfe,0x02,0x00,0x00,0x68,0x01,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x00,0x03,0x00,0x00, -0xff,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00, -0x01,0x03,0x00,0x00,0x00,0x03,0x00,0x00,0xc7,0x00,0x05,0x00, -0x14,0x00,0x00,0x00,0x02,0x03,0x00,0x00,0x01,0x03,0x00,0x00, -0x7c,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,0x14,0x00,0x00,0x00, -0x03,0x03,0x00,0x00,0x02,0x03,0x00,0x00,0x8a,0x00,0x00,0x00, -0xc5,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0x04,0x03,0x00,0x00, -0xf9,0x02,0x00,0x00,0x03,0x03,0x00,0x00,0x72,0x00,0x04,0x00, -0x71,0x00,0x00,0x00,0x05,0x03,0x00,0x00,0x04,0x03,0x00,0x00, -0x72,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x06,0x03,0x00,0x00, -0x05,0x03,0x00,0x00,0x82,0x00,0x05,0x00,0x14,0x00,0x00,0x00, -0x07,0x03,0x00,0x00,0x06,0x03,0x00,0x00,0xc9,0x00,0x00,0x00, -0x6f,0x00,0x04,0x00,0x50,0x00,0x00,0x00,0x08,0x03,0x00,0x00, -0x07,0x03,0x00,0x00,0x0c,0x00,0x08,0x00,0x50,0x00,0x00,0x00, -0x0a,0x03,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0xf0,0x02,0x00,0x00,0x08,0x03,0x00,0x00,0xe1,0x02,0x00,0x00, -0x81,0x00,0x05,0x00,0x50,0x00,0x00,0x00,0x0b,0x03,0x00,0x00, -0x5f,0x02,0x00,0x00,0x0a,0x03,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x18,0x03,0x00,0x00,0x94,0x00,0x00,0x00, -0xc1,0x03,0x00,0x00,0x41,0x00,0x06,0x00,0x99,0x00,0x00,0x00, -0x1a,0x03,0x00,0x00,0x8f,0x00,0x00,0x00,0x15,0x00,0x00,0x00, -0x18,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,0x50,0x00,0x00,0x00, -0x1b,0x03,0x00,0x00,0x1a,0x03,0x00,0x00,0x3d,0x00,0x04,0x00, -0x71,0x00,0x00,0x00,0x1f,0x03,0x00,0x00,0xa3,0x00,0x00,0x00, -0x6f,0x00,0x04,0x00,0x50,0x00,0x00,0x00,0x20,0x03,0x00,0x00, -0x1f,0x03,0x00,0x00,0x85,0x00,0x05,0x00,0x50,0x00,0x00,0x00, -0x21,0x03,0x00,0x00,0x1b,0x03,0x00,0x00,0x20,0x03,0x00,0x00, -0x85,0x00,0x05,0x00,0x50,0x00,0x00,0x00,0x22,0x03,0x00,0x00, -0x21,0x03,0x00,0x00,0x80,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x25,0x03,0x00,0x00,0x3e,0x00,0x00,0x00, -0xc1,0x03,0x00,0x00,0x41,0x00,0x08,0x00,0xb1,0x00,0x00,0x00, -0x27,0x03,0x00,0x00,0x78,0x00,0x00,0x00,0x15,0x00,0x00,0x00, -0x7b,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x25,0x03,0x00,0x00, -0x3d,0x00,0x04,0x00,0x6e,0x00,0x00,0x00,0x28,0x03,0x00,0x00, -0x27,0x03,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x29,0x03,0x00,0x00,0x28,0x03,0x00,0x00,0x7c,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0x2a,0x03,0x00,0x00,0x29,0x03,0x00,0x00, -0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0x2b,0x03,0x00,0x00, -0x2a,0x03,0x00,0x00,0xb6,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x2e,0x03,0x00,0x00,0x44,0x00,0x00,0x00, -0xc1,0x03,0x00,0x00,0x41,0x00,0x08,0x00,0xb1,0x00,0x00,0x00, -0x2f,0x03,0x00,0x00,0x78,0x00,0x00,0x00,0x15,0x00,0x00,0x00, -0x7b,0x00,0x00,0x00,0x90,0x00,0x00,0x00,0x2e,0x03,0x00,0x00, -0x3d,0x00,0x04,0x00,0x6e,0x00,0x00,0x00,0x30,0x03,0x00,0x00, -0x2f,0x03,0x00,0x00,0xc2,0x00,0x05,0x00,0x6e,0x00,0x00,0x00, -0x31,0x03,0x00,0x00,0x30,0x03,0x00,0x00,0x15,0x00,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x32,0x03,0x00,0x00, -0x31,0x03,0x00,0x00,0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00, -0x33,0x03,0x00,0x00,0x32,0x03,0x00,0x00,0xc7,0x00,0x05,0x00, -0x14,0x00,0x00,0x00,0x34,0x03,0x00,0x00,0x33,0x03,0x00,0x00, -0x7c,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,0x14,0x00,0x00,0x00, -0x35,0x03,0x00,0x00,0x34,0x03,0x00,0x00,0x8a,0x00,0x00,0x00, -0xc5,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0x36,0x03,0x00,0x00, -0x2b,0x03,0x00,0x00,0x35,0x03,0x00,0x00,0x72,0x00,0x04,0x00, -0x71,0x00,0x00,0x00,0x37,0x03,0x00,0x00,0x36,0x03,0x00,0x00, -0x72,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x38,0x03,0x00,0x00, -0x37,0x03,0x00,0x00,0x82,0x00,0x05,0x00,0x14,0x00,0x00,0x00, -0x39,0x03,0x00,0x00,0x38,0x03,0x00,0x00,0xc9,0x00,0x00,0x00, -0x6f,0x00,0x04,0x00,0x50,0x00,0x00,0x00,0x3a,0x03,0x00,0x00, -0x39,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x41,0x03,0x00,0x00,0x94,0x00,0x00,0x00,0xc2,0x03,0x00,0x00, -0x41,0x00,0x06,0x00,0x99,0x00,0x00,0x00,0x42,0x03,0x00,0x00, -0x8f,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x41,0x03,0x00,0x00, -0x3d,0x00,0x04,0x00,0x50,0x00,0x00,0x00,0x43,0x03,0x00,0x00, -0x42,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,0x71,0x00,0x00,0x00, -0x47,0x03,0x00,0x00,0xdc,0x00,0x00,0x00,0x6f,0x00,0x04,0x00, -0x50,0x00,0x00,0x00,0x48,0x03,0x00,0x00,0x47,0x03,0x00,0x00, -0x85,0x00,0x05,0x00,0x50,0x00,0x00,0x00,0x49,0x03,0x00,0x00, -0x43,0x03,0x00,0x00,0x48,0x03,0x00,0x00,0x85,0x00,0x05,0x00, -0x50,0x00,0x00,0x00,0x4a,0x03,0x00,0x00,0x49,0x03,0x00,0x00, -0x80,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x4e,0x03,0x00,0x00,0x3e,0x00,0x00,0x00,0xc2,0x03,0x00,0x00, -0x41,0x00,0x08,0x00,0xb1,0x00,0x00,0x00,0x4f,0x03,0x00,0x00, -0x78,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x7b,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0x4e,0x03,0x00,0x00,0x3d,0x00,0x04,0x00, -0x6e,0x00,0x00,0x00,0x50,0x03,0x00,0x00,0x4f,0x03,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x51,0x03,0x00,0x00, -0x50,0x03,0x00,0x00,0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00, -0x52,0x03,0x00,0x00,0x51,0x03,0x00,0x00,0xc7,0x00,0x05,0x00, -0x14,0x00,0x00,0x00,0x53,0x03,0x00,0x00,0x52,0x03,0x00,0x00, -0xb6,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x6e,0x00,0x00,0x00, -0x58,0x03,0x00,0x00,0x2f,0x03,0x00,0x00,0xc2,0x00,0x05,0x00, -0x6e,0x00,0x00,0x00,0x59,0x03,0x00,0x00,0x58,0x03,0x00,0x00, -0x9f,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x5a,0x03,0x00,0x00,0x59,0x03,0x00,0x00,0x7c,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0x5b,0x03,0x00,0x00,0x5a,0x03,0x00,0x00, -0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0x5c,0x03,0x00,0x00, -0x5b,0x03,0x00,0x00,0x7c,0x00,0x00,0x00,0xc4,0x00,0x05,0x00, -0x14,0x00,0x00,0x00,0x5d,0x03,0x00,0x00,0x5c,0x03,0x00,0x00, -0x8a,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,0x14,0x00,0x00,0x00, -0x5e,0x03,0x00,0x00,0x53,0x03,0x00,0x00,0x5d,0x03,0x00,0x00, -0x72,0x00,0x04,0x00,0x71,0x00,0x00,0x00,0x5f,0x03,0x00,0x00, -0x5e,0x03,0x00,0x00,0x72,0x00,0x04,0x00,0x14,0x00,0x00,0x00, -0x60,0x03,0x00,0x00,0x5f,0x03,0x00,0x00,0x82,0x00,0x05,0x00, -0x14,0x00,0x00,0x00,0x61,0x03,0x00,0x00,0x60,0x03,0x00,0x00, -0xc9,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,0x50,0x00,0x00,0x00, -0x62,0x03,0x00,0x00,0x61,0x03,0x00,0x00,0x85,0x00,0x05,0x00, -0x50,0x00,0x00,0x00,0x63,0x03,0x00,0x00,0x4a,0x03,0x00,0x00, -0x62,0x03,0x00,0x00,0x0c,0x00,0x08,0x00,0x50,0x00,0x00,0x00, -0x64,0x03,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x22,0x03,0x00,0x00,0x3a,0x03,0x00,0x00,0x63,0x03,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6a,0x03,0x00,0x00, -0x94,0x00,0x00,0x00,0xc3,0x03,0x00,0x00,0x41,0x00,0x06,0x00, -0x99,0x00,0x00,0x00,0x6b,0x03,0x00,0x00,0x8f,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0x6a,0x03,0x00,0x00,0x3d,0x00,0x04,0x00, -0x50,0x00,0x00,0x00,0x6c,0x03,0x00,0x00,0x6b,0x03,0x00,0x00, -0x3d,0x00,0x04,0x00,0x71,0x00,0x00,0x00,0x70,0x03,0x00,0x00, -0x13,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,0x50,0x00,0x00,0x00, -0x71,0x03,0x00,0x00,0x70,0x03,0x00,0x00,0x85,0x00,0x05,0x00, -0x50,0x00,0x00,0x00,0x72,0x03,0x00,0x00,0x6c,0x03,0x00,0x00, -0x71,0x03,0x00,0x00,0x85,0x00,0x05,0x00,0x50,0x00,0x00,0x00, -0x73,0x03,0x00,0x00,0x72,0x03,0x00,0x00,0x80,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x6e,0x00,0x00,0x00,0x79,0x03,0x00,0x00, -0x27,0x03,0x00,0x00,0xc2,0x00,0x05,0x00,0x6e,0x00,0x00,0x00, -0x7a,0x03,0x00,0x00,0x79,0x03,0x00,0x00,0x8a,0x00,0x00,0x00, -0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x7b,0x03,0x00,0x00, -0x7a,0x03,0x00,0x00,0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00, -0x7c,0x03,0x00,0x00,0x7b,0x03,0x00,0x00,0x3d,0x00,0x04,0x00, -0x6e,0x00,0x00,0x00,0x81,0x03,0x00,0x00,0x2f,0x03,0x00,0x00, -0xc2,0x00,0x05,0x00,0x6e,0x00,0x00,0x00,0x82,0x03,0x00,0x00, -0x81,0x03,0x00,0x00,0x8a,0x00,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x83,0x03,0x00,0x00,0x82,0x03,0x00,0x00, -0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x84,0x03,0x00,0x00, -0x83,0x03,0x00,0x00,0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00, -0x85,0x03,0x00,0x00,0x84,0x03,0x00,0x00,0x7c,0x00,0x00,0x00, -0xc4,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0x86,0x03,0x00,0x00, -0x85,0x03,0x00,0x00,0x8a,0x00,0x00,0x00,0xc5,0x00,0x05,0x00, -0x14,0x00,0x00,0x00,0x87,0x03,0x00,0x00,0x7c,0x03,0x00,0x00, -0x86,0x03,0x00,0x00,0x72,0x00,0x04,0x00,0x71,0x00,0x00,0x00, -0x88,0x03,0x00,0x00,0x87,0x03,0x00,0x00,0x72,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0x89,0x03,0x00,0x00,0x88,0x03,0x00,0x00, -0x82,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0x8a,0x03,0x00,0x00, -0x89,0x03,0x00,0x00,0xc9,0x00,0x00,0x00,0x6f,0x00,0x04,0x00, -0x50,0x00,0x00,0x00,0x8b,0x03,0x00,0x00,0x8a,0x03,0x00,0x00, -0x0c,0x00,0x08,0x00,0x50,0x00,0x00,0x00,0x8d,0x03,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x73,0x03,0x00,0x00, -0x8b,0x03,0x00,0x00,0x64,0x03,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x93,0x03,0x00,0x00,0x94,0x00,0x00,0x00, -0xc4,0x03,0x00,0x00,0x41,0x00,0x06,0x00,0x99,0x00,0x00,0x00, -0x94,0x03,0x00,0x00,0x8f,0x00,0x00,0x00,0x15,0x00,0x00,0x00, -0x93,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,0x50,0x00,0x00,0x00, -0x95,0x03,0x00,0x00,0x94,0x03,0x00,0x00,0x3d,0x00,0x04,0x00, -0x71,0x00,0x00,0x00,0x99,0x03,0x00,0x00,0x4c,0x01,0x00,0x00, -0x6f,0x00,0x04,0x00,0x50,0x00,0x00,0x00,0x9a,0x03,0x00,0x00, -0x99,0x03,0x00,0x00,0x85,0x00,0x05,0x00,0x50,0x00,0x00,0x00, -0x9b,0x03,0x00,0x00,0x95,0x03,0x00,0x00,0x9a,0x03,0x00,0x00, -0x85,0x00,0x05,0x00,0x50,0x00,0x00,0x00,0x9c,0x03,0x00,0x00, -0x9b,0x03,0x00,0x00,0x80,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x6e,0x00,0x00,0x00,0xa2,0x03,0x00,0x00,0x4f,0x03,0x00,0x00, -0xc2,0x00,0x05,0x00,0x6e,0x00,0x00,0x00,0xa3,0x03,0x00,0x00, -0xa2,0x03,0x00,0x00,0x8a,0x00,0x00,0x00,0x71,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xa4,0x03,0x00,0x00,0xa3,0x03,0x00,0x00, -0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xa5,0x03,0x00,0x00, -0xa4,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,0x6e,0x00,0x00,0x00, -0xaa,0x03,0x00,0x00,0x2f,0x03,0x00,0x00,0xc2,0x00,0x05,0x00, -0x6e,0x00,0x00,0x00,0xab,0x03,0x00,0x00,0xaa,0x03,0x00,0x00, -0x68,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xac,0x03,0x00,0x00,0xab,0x03,0x00,0x00,0x7c,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0xad,0x03,0x00,0x00,0xac,0x03,0x00,0x00, -0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0xae,0x03,0x00,0x00, -0xad,0x03,0x00,0x00,0x7c,0x00,0x00,0x00,0xc4,0x00,0x05,0x00, -0x14,0x00,0x00,0x00,0xaf,0x03,0x00,0x00,0xae,0x03,0x00,0x00, -0x8a,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,0x14,0x00,0x00,0x00, -0xb0,0x03,0x00,0x00,0xa5,0x03,0x00,0x00,0xaf,0x03,0x00,0x00, -0x72,0x00,0x04,0x00,0x71,0x00,0x00,0x00,0xb1,0x03,0x00,0x00, -0xb0,0x03,0x00,0x00,0x72,0x00,0x04,0x00,0x14,0x00,0x00,0x00, -0xb2,0x03,0x00,0x00,0xb1,0x03,0x00,0x00,0x82,0x00,0x05,0x00, -0x14,0x00,0x00,0x00,0xb3,0x03,0x00,0x00,0xb2,0x03,0x00,0x00, -0xc9,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,0x50,0x00,0x00,0x00, -0xb4,0x03,0x00,0x00,0xb3,0x03,0x00,0x00,0x0c,0x00,0x08,0x00, -0x50,0x00,0x00,0x00,0xb6,0x03,0x00,0x00,0x01,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0x9c,0x03,0x00,0x00,0xb4,0x03,0x00,0x00, -0x8d,0x03,0x00,0x00,0x81,0x00,0x05,0x00,0x50,0x00,0x00,0x00, -0xb7,0x03,0x00,0x00,0x0b,0x03,0x00,0x00,0xb6,0x03,0x00,0x00, -0x3d,0x00,0x04,0x00,0x50,0x00,0x00,0x00,0x7f,0x01,0x00,0x00, -0x5b,0x00,0x00,0x00,0x81,0x00,0x05,0x00,0x50,0x00,0x00,0x00, -0x80,0x01,0x00,0x00,0x7f,0x01,0x00,0x00,0xb7,0x03,0x00,0x00, -0x3e,0x00,0x03,0x00,0x5b,0x00,0x00,0x00,0x80,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x83,0x01,0x00,0x00, -0xaf,0x01,0x00,0x00,0x23,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x5e,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x60,0x00,0x00,0x00, -0xe0,0x00,0x04,0x00,0x23,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x84,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x86,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x86,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0xb0,0x01,0x00,0x00,0x54,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x9d,0x01,0x00,0x00,0x89,0x01,0x00,0x00, -0xac,0x00,0x05,0x00,0x65,0x00,0x00,0x00,0x8c,0x01,0x00,0x00, -0xb0,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x88,0x01,0x00,0x00,0x89,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x8c,0x01,0x00,0x00,0x87,0x01,0x00,0x00, -0x88,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x87,0x01,0x00,0x00, -0xb0,0x00,0x05,0x00,0x65,0x00,0x00,0x00,0x8f,0x01,0x00,0x00, -0x24,0x00,0x00,0x00,0xb0,0x01,0x00,0x00,0xf7,0x00,0x03,0x00, -0x91,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x8f,0x01,0x00,0x00,0x90,0x01,0x00,0x00,0x91,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x90,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x95,0x01,0x00,0x00,0x24,0x00,0x00,0x00, -0xb0,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x5a,0x00,0x00,0x00, -0x96,0x01,0x00,0x00,0x53,0x00,0x00,0x00,0x95,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0x50,0x00,0x00,0x00,0x97,0x01,0x00,0x00, -0x96,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x5a,0x00,0x00,0x00, -0x98,0x01,0x00,0x00,0x53,0x00,0x00,0x00,0x24,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x50,0x00,0x00,0x00,0x99,0x01,0x00,0x00, -0x98,0x01,0x00,0x00,0x81,0x00,0x05,0x00,0x50,0x00,0x00,0x00, -0x9a,0x01,0x00,0x00,0x99,0x01,0x00,0x00,0x97,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0x98,0x01,0x00,0x00,0x9a,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0x91,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x91,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x23,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x84,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0x89,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x89,0x01,0x00,0x00, -0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9d,0x01,0x00,0x00, -0xb0,0x01,0x00,0x00,0x90,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x86,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x88,0x01,0x00,0x00, -0xaa,0x00,0x05,0x00,0x65,0x00,0x00,0x00,0x9f,0x01,0x00,0x00, -0x24,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xf7,0x00,0x03,0x00, -0xa1,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x9f,0x01,0x00,0x00,0xa0,0x01,0x00,0x00,0xa1,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xa0,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x16,0x00,0x00,0x00,0xa6,0x01,0x00,0x00,0x13,0x00,0x00,0x00, -0x9f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xa7,0x01,0x00,0x00,0xa6,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xa9,0x01,0x00,0x00,0xa7,0x01,0x00,0x00, -0x0f,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x5a,0x00,0x00,0x00, -0xaa,0x01,0x00,0x00,0x53,0x00,0x00,0x00,0x15,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x50,0x00,0x00,0x00,0xab,0x01,0x00,0x00, -0xaa,0x01,0x00,0x00,0x41,0x00,0x06,0x00,0x99,0x00,0x00,0x00, -0xac,0x01,0x00,0x00,0xa5,0x01,0x00,0x00,0x15,0x00,0x00,0x00, -0xa9,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xac,0x01,0x00,0x00, -0xab,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xa1,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0xa1,0x01,0x00,0x00,0xfd,0x00,0x01,0x00, -0x38,0x00,0x01,0x00, -}; -const uint64_t mul_mat_vec_q6_K_f32_len = 10960; - -unsigned char mul_mat_vec_q8_0_f32_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0xc4,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00, -0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00, -0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64, -0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00, -0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0f,0x00,0x0c,0x00, -0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e, -0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x11,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x26,0x00,0x00,0x00,0x52,0x00,0x00,0x00, -0x74,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,0x10,0x00,0x06,0x00, -0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x11,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x15,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x24,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x24,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x24,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x24,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x4d,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x4e,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x4e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x4f,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0x50,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x50,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x50,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x52,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x52,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x71,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0x72,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x72,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x72,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x74,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x74,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xb2,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0xb3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0xb3,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0xb3,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xb5,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xb5,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xbe,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xbf,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00, -0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x16,0x00,0x03,0x00,0x14,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x15,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x16,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x17,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x16,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00, -0x1a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x1b,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0x1e,0x00,0x05,0x00,0x24,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x25,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x24,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x25,0x00,0x00,0x00,0x26,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x27,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x27,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x29,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x14,0x00,0x02,0x00,0x2d,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x3d,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x16,0x00,0x03,0x00,0x4b,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x4c,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x4d,0x00,0x00,0x00, -0x4c,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x1e,0x00,0x04,0x00, -0x4e,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0x4d,0x00,0x00,0x00, -0x1d,0x00,0x03,0x00,0x4f,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x1e,0x00,0x03,0x00,0x50,0x00,0x00,0x00,0x4f,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x51,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x50,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x51,0x00,0x00,0x00, -0x52,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x54,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x4b,0x00,0x00,0x00, -0x17,0x00,0x04,0x00,0x58,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x27,0x00,0x00,0x00, -0x5c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x5e,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x4c,0x00,0x00,0x00, -0x1d,0x00,0x03,0x00,0x71,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0x1e,0x00,0x03,0x00,0x72,0x00,0x00,0x00,0x71,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x73,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x72,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x73,0x00,0x00,0x00, -0x74,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x7c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x93,0x00,0x00,0x00, -0x08,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x95,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x15,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0xb2,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0xb3,0x00,0x00,0x00, -0xb2,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xb4,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0xb4,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x27,0x00,0x00,0x00,0xb6,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xbe,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00, -0x09,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0xbe,0x00,0x00,0x00, -0x42,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x36,0x00,0x05,0x00, -0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x3e,0x00,0x03,0x00, -0x1c,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x1e,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x1e,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xc2,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x92,0x00,0x00,0x00, -0x1f,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x29,0x00,0x00,0x00, -0x2a,0x00,0x00,0x00,0x26,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x00,0x00, -0x2a,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x2c,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x15,0x00,0x00,0x00, -0xb0,0x00,0x05,0x00,0x2d,0x00,0x00,0x00,0x2e,0x00,0x00,0x00, -0xc2,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x20,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x2e,0x00,0x00,0x00,0x1f,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x1f,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x31,0x00,0x00,0x00, -0xc2,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x13,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x35,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x3a,0x00,0x00,0x00, -0x35,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x3e,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x41,0x00,0x00,0x00, -0x35,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x41,0x00,0x00,0x00, -0x42,0x00,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x48,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x41,0x00,0x00,0x00, -0x41,0x00,0x07,0x00,0x54,0x00,0x00,0x00,0x55,0x00,0x00,0x00, -0x52,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x3e,0x00,0x00,0x00, -0x28,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x4b,0x00,0x00,0x00, -0x56,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x73,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0x57,0x00,0x00,0x00,0x56,0x00,0x00,0x00, -0x41,0x00,0x08,0x00,0x5e,0x00,0x00,0x00,0x5f,0x00,0x00,0x00, -0x52,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x3e,0x00,0x00,0x00, -0x5c,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x4c,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x5f,0x00,0x00,0x00, -0x72,0x00,0x04,0x00,0x27,0x00,0x00,0x00,0x61,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,0x14,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x65,0x00,0x00,0x00,0x43,0x00,0x00,0x00, -0x42,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x5e,0x00,0x00,0x00, -0x66,0x00,0x00,0x00,0x52,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0x3e,0x00,0x00,0x00,0x5c,0x00,0x00,0x00,0x65,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x4c,0x00,0x00,0x00,0x67,0x00,0x00,0x00, -0x66,0x00,0x00,0x00,0x72,0x00,0x04,0x00,0x27,0x00,0x00,0x00, -0x68,0x00,0x00,0x00,0x67,0x00,0x00,0x00,0x6f,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0x69,0x00,0x00,0x00,0x68,0x00,0x00,0x00, -0x50,0x00,0x05,0x00,0x58,0x00,0x00,0x00,0x6a,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x69,0x00,0x00,0x00,0x8e,0x00,0x05,0x00, -0x58,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x6a,0x00,0x00,0x00, -0x57,0x00,0x00,0x00,0x51,0x00,0x05,0x00,0x14,0x00,0x00,0x00, -0x70,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x29,0x00,0x00,0x00,0x75,0x00,0x00,0x00, -0x26,0x00,0x00,0x00,0x5c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x75,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x78,0x00,0x00,0x00, -0x76,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,0x78,0x00,0x00,0x00, -0x43,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x7c,0x00,0x00,0x00, -0x7d,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0x7a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x14,0x00,0x00,0x00, -0x7e,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x51,0x00,0x05,0x00, -0x14,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x6d,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x88,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,0x42,0x00,0x00,0x00, -0x41,0x00,0x06,0x00,0x7c,0x00,0x00,0x00,0x89,0x00,0x00,0x00, -0x74,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x88,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x8a,0x00,0x00,0x00, -0x89,0x00,0x00,0x00,0x85,0x00,0x05,0x00,0x14,0x00,0x00,0x00, -0x8b,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x8a,0x00,0x00,0x00, -0x0c,0x00,0x08,0x00,0x14,0x00,0x00,0x00,0x8c,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x70,0x00,0x00,0x00, -0x7e,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x81,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0x8f,0x00,0x00,0x00, -0x8e,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,0x3e,0x00,0x03,0x00, -0x1c,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0xc2,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x1e,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x20,0x00,0x00,0x00,0xe0,0x00,0x04,0x00, -0x32,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x93,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x96,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x96,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xc3,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0xad,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0xac,0x00,0x05,0x00, -0x2d,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0xc3,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x98,0x00,0x00,0x00, -0x99,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x9c,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x98,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x97,0x00,0x00,0x00,0xb0,0x00,0x05,0x00, -0x2d,0x00,0x00,0x00,0x9f,0x00,0x00,0x00,0x13,0x00,0x00,0x00, -0xc3,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0xa1,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x9f,0x00,0x00,0x00, -0xa0,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xa0,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xa5,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0xc3,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0xa6,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0xa6,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xa9,0x00,0x00,0x00, -0x1c,0x00,0x00,0x00,0x81,0x00,0x05,0x00,0x14,0x00,0x00,0x00, -0xaa,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,0xa7,0x00,0x00,0x00, -0x3e,0x00,0x03,0x00,0x1c,0x00,0x00,0x00,0xaa,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xa1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xa1,0x00,0x00,0x00,0xe0,0x00,0x04,0x00,0x32,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x99,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x99,0x00,0x00,0x00, -0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xad,0x00,0x00,0x00, -0xc3,0x00,0x00,0x00,0x5c,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x96,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x98,0x00,0x00,0x00, -0xaa,0x00,0x05,0x00,0x2d,0x00,0x00,0x00,0xaf,0x00,0x00,0x00, -0x13,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xf7,0x00,0x03,0x00, -0xb1,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xaf,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0xb1,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xb0,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x29,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0x26,0x00,0x00,0x00, -0xb6,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xb8,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0xb8,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x1b,0x00,0x00,0x00, -0xbb,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xbc,0x00,0x00,0x00, -0xbb,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x7c,0x00,0x00,0x00, -0xbd,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0xba,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0xbd,0x00,0x00,0x00, -0xbc,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb1,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xb1,0x00,0x00,0x00,0xfd,0x00,0x01,0x00, -0x38,0x00,0x01,0x00, -}; -const uint64_t mul_mat_vec_q8_0_f32_len = 3124; - -unsigned char norm_f32_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0xb5,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00, -0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30, -0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x0f,0x00,0x0b,0x00,0x05,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x29,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x97,0x00,0x00,0x00, -0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00, -0x00,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x11,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x27,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x27,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x27,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x27,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x27,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x33,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0x34,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x34,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x34,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x36,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x36,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x94,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0x95,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x95,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x95,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x97,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x97,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xad,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x13,0x00,0x02,0x00, -0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00, -0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x16,0x00,0x03,0x00, -0x14,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x17,0x00,0x04,0x00, -0x15,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x16,0x00,0x00,0x00, -0x00,0x02,0x00,0x00,0x1c,0x00,0x04,0x00,0x17,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x18,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x17,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x18,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00, -0x1b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2c,0x00,0x05,0x00, -0x15,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x1b,0x00,0x00,0x00, -0x1b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x1d,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x1e,0x00,0x06,0x00, -0x27,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x28,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x27,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x28,0x00,0x00,0x00,0x29,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x2a,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x2a,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x2c,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x14,0x00,0x02,0x00,0x2f,0x00,0x00,0x00, -0x1d,0x00,0x03,0x00,0x33,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0x1e,0x00,0x03,0x00,0x34,0x00,0x00,0x00,0x33,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x35,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x34,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x35,0x00,0x00,0x00, -0x36,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x3d,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x42,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x4b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x52,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0x08,0x01,0x00,0x00,0x2b,0x00,0x04,0x00,0x2a,0x00,0x00,0x00, -0x56,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x2b,0x00,0x04,0x00, -0x2a,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0xac,0xc5,0x27,0x37,0x1d,0x00,0x03,0x00,0x94,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x95,0x00,0x00,0x00, -0x94,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x96,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x96,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x2c,0x00,0x06,0x00,0x09,0x00,0x00,0x00,0xad,0x00,0x00,0x00, -0x16,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0x4b,0x00,0x00,0x00, -0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x05,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x13,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x1d,0x00,0x00,0x00, -0x1e,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x13,0x00,0x00,0x00, -0x3e,0x00,0x03,0x00,0x1e,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x21,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x21,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xae,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x05,0x00,0x00,0x00, -0x51,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x2c,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0x29,0x00,0x00,0x00, -0x2b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x2e,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0xb0,0x00,0x05,0x00, -0x2f,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0xae,0x00,0x00,0x00, -0x2e,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x23,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x30,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x22,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x2e,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x3c,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0xae,0x00,0x00,0x00, -0x41,0x00,0x06,0x00,0x3d,0x00,0x00,0x00,0x3e,0x00,0x00,0x00, -0x36,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x3c,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x3f,0x00,0x00,0x00, -0x3e,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x42,0x00,0x00,0x00, -0x43,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x13,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x14,0x00,0x00,0x00, -0x44,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x81,0x00,0x05,0x00, -0x14,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x44,0x00,0x00,0x00, -0x3f,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0x43,0x00,0x00,0x00, -0x45,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x42,0x00,0x00,0x00, -0x4c,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x13,0x00,0x00,0x00, -0x4b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x14,0x00,0x00,0x00, -0x4d,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x0c,0x00,0x08,0x00, -0x14,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x3f,0x00,0x00,0x00, -0x4d,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0x4c,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x51,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0x16,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x21,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x23,0x00,0x00,0x00,0xe0,0x00,0x04,0x00,0x52,0x00,0x00,0x00, -0x52,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x57,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x57,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x2a,0x00,0x00,0x00,0xaf,0x00,0x00,0x00, -0x56,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x71,0x00,0x00,0x00, -0x5a,0x00,0x00,0x00,0xad,0x00,0x05,0x00,0x2f,0x00,0x00,0x00, -0x5d,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0x2b,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x59,0x00,0x00,0x00,0x5a,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x5d,0x00,0x00,0x00, -0x58,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x58,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0xb0,0x00,0x05,0x00, -0x2f,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x13,0x00,0x00,0x00, -0x60,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x63,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x61,0x00,0x00,0x00, -0x62,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x68,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x1d,0x00,0x00,0x00,0x69,0x00,0x00,0x00, -0x19,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x15,0x00,0x00,0x00,0x6a,0x00,0x00,0x00,0x69,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x1e,0x00,0x00,0x00,0x81,0x00,0x05,0x00,0x15,0x00,0x00,0x00, -0x6d,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x6a,0x00,0x00,0x00, -0x3e,0x00,0x03,0x00,0x1e,0x00,0x00,0x00,0x6d,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x63,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x63,0x00,0x00,0x00,0xe0,0x00,0x04,0x00,0x52,0x00,0x00,0x00, -0x52,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x5a,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x5a,0x00,0x00,0x00, -0xc3,0x00,0x05,0x00,0x2a,0x00,0x00,0x00,0x71,0x00,0x00,0x00, -0xaf,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x57,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x59,0x00,0x00,0x00, -0x41,0x00,0x06,0x00,0x42,0x00,0x00,0x00,0x73,0x00,0x00,0x00, -0x19,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x74,0x00,0x00,0x00, -0x73,0x00,0x00,0x00,0x70,0x00,0x04,0x00,0x14,0x00,0x00,0x00, -0x77,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x88,0x00,0x05,0x00, -0x14,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x74,0x00,0x00,0x00, -0x77,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x42,0x00,0x00,0x00, -0x7a,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x2b,0x00,0x00,0x00, -0x4b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x14,0x00,0x00,0x00, -0x7b,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,0x88,0x00,0x05,0x00, -0x14,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x7b,0x00,0x00,0x00, -0x77,0x00,0x00,0x00,0x7f,0x00,0x04,0x00,0x14,0x00,0x00,0x00, -0xb4,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x0c,0x00,0x08,0x00, -0x14,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0x78,0x00,0x00,0x00, -0x7f,0x00,0x00,0x00,0x81,0x00,0x05,0x00,0x14,0x00,0x00,0x00, -0x87,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x0c,0x00,0x06,0x00,0x14,0x00,0x00,0x00,0x88,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x87,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x8b,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x8b,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xb0,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x59,0x00,0x00,0x00, -0xac,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,0xb0,0x00,0x05,0x00, -0x2f,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0xb0,0x00,0x00,0x00, -0x2e,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x8d,0x00,0x00,0x00, -0x8c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x93,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,0x8d,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x8c,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x2e,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9d,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0xb0,0x00,0x00,0x00, -0x41,0x00,0x06,0x00,0x3d,0x00,0x00,0x00,0xa4,0x00,0x00,0x00, -0x36,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x9d,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xa5,0x00,0x00,0x00, -0xa4,0x00,0x00,0x00,0x83,0x00,0x05,0x00,0x14,0x00,0x00,0x00, -0xa7,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,0x78,0x00,0x00,0x00, -0x85,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0xa9,0x00,0x00,0x00, -0xa7,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x41,0x00,0x06,0x00, -0x3d,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0x97,0x00,0x00,0x00, -0x2b,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,0x3e,0x00,0x03,0x00, -0xaa,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0xb0,0x00,0x00,0x00, -0x16,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x8b,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x8d,0x00,0x00,0x00,0xfd,0x00,0x01,0x00, -0x38,0x00,0x01,0x00, -}; -const uint64_t norm_f32_len = 2572; - -unsigned char relu_f32_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0x34,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00, -0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30, -0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x0f,0x00,0x09,0x00,0x05,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x27,0x00,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x12,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x12,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x1f,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x20,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x22,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x22,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x24,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0x25,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x25,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x25,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x27,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x27,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x31,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x13,0x00,0x02,0x00, -0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00, -0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0x11,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x1e,0x00,0x06,0x00,0x12,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x11,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00, -0x16,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x17,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x14,0x00,0x02,0x00,0x1a,0x00,0x00,0x00,0x1d,0x00,0x03,0x00, -0x1f,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x1e,0x00,0x03,0x00, -0x20,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x21,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x24,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x25,0x00,0x00,0x00, -0x24,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x26,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x26,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x29,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x11,0x00,0x00,0x00, -0x2c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x00,0x02,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2c,0x00,0x06,0x00,0x09,0x00,0x00,0x00, -0x31,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x30,0x00,0x00,0x00, -0x30,0x00,0x00,0x00,0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,0xf7,0x00,0x03,0x00, -0x32,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfb,0x00,0x03,0x00, -0x0c,0x00,0x00,0x00,0x33,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x33,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x16,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0xae,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x1b,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0xf7,0x00,0x03,0x00,0x1d,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x1d,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x1c,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x32,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x1d,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x29,0x00,0x00,0x00, -0x2a,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x16,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x11,0x00,0x00,0x00, -0x2b,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x0c,0x00,0x07,0x00, -0x11,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x28,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x2c,0x00,0x00,0x00, -0x41,0x00,0x06,0x00,0x29,0x00,0x00,0x00,0x2e,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x3e,0x00,0x03,0x00,0x2e,0x00,0x00,0x00,0x2d,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x32,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x32,0x00,0x00,0x00,0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00, - -}; -const uint64_t relu_f32_len = 1212; - -unsigned char rms_norm_f32_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0x9e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00, -0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30, -0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x0f,0x00,0x0b,0x00,0x05,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x27,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x85,0x00,0x00,0x00, -0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00, -0x00,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x11,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x25,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x25,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x25,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x25,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x25,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x31,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0x32,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x32,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x32,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x34,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x34,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x82,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0x83,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x83,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x83,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x85,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x85,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x9a,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x13,0x00,0x02,0x00, -0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00, -0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x16,0x00,0x03,0x00, -0x14,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x00,0x02,0x00,0x00, -0x1c,0x00,0x04,0x00,0x16,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x17,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x17,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x1a,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x1b,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x1e,0x00,0x06,0x00, -0x25,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x26,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x25,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x26,0x00,0x00,0x00,0x27,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x28,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x28,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x2a,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x14,0x00,0x02,0x00,0x2d,0x00,0x00,0x00, -0x1d,0x00,0x03,0x00,0x31,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0x1e,0x00,0x03,0x00,0x32,0x00,0x00,0x00,0x31,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x33,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x33,0x00,0x00,0x00, -0x34,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x3b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x48,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x49,0x00,0x00,0x00,0x08,0x01,0x00,0x00,0x2b,0x00,0x04,0x00, -0x28,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x00,0x01,0x00,0x00, -0x2b,0x00,0x04,0x00,0x28,0x00,0x00,0x00,0x65,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x28,0x00,0x00,0x00, -0x71,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x72,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0x1d,0x00,0x03,0x00,0x82,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0x1e,0x00,0x03,0x00,0x83,0x00,0x00,0x00,0x82,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x84,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x83,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x84,0x00,0x00,0x00, -0x85,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2c,0x00,0x06,0x00,0x09,0x00,0x00,0x00,0x9a,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x99,0x00,0x00,0x00, -0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x05,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x13,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x1b,0x00,0x00,0x00, -0x1c,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x13,0x00,0x00,0x00, -0x3e,0x00,0x03,0x00,0x1c,0x00,0x00,0x00,0x1a,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x1f,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x1f,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x9b,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x05,0x00,0x00,0x00, -0x47,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x2a,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x27,0x00,0x00,0x00, -0x29,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x2c,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0xb0,0x00,0x05,0x00, -0x2d,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x9b,0x00,0x00,0x00, -0x2c,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x21,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x2e,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x20,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x2c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x3a,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x9b,0x00,0x00,0x00, -0x41,0x00,0x06,0x00,0x3b,0x00,0x00,0x00,0x3c,0x00,0x00,0x00, -0x34,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x3a,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x3c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x14,0x00,0x00,0x00, -0x43,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x0c,0x00,0x08,0x00, -0x14,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x43,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0x1c,0x00,0x00,0x00, -0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x47,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x15,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x1f,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x21,0x00,0x00,0x00,0xe0,0x00,0x04,0x00,0x48,0x00,0x00,0x00, -0x48,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x4d,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x4d,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x28,0x00,0x00,0x00,0x9c,0x00,0x00,0x00, -0x4c,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x67,0x00,0x00,0x00, -0x50,0x00,0x00,0x00,0xad,0x00,0x05,0x00,0x2d,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0x29,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x4f,0x00,0x00,0x00,0x50,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x53,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x4e,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x56,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0xb0,0x00,0x05,0x00, -0x2d,0x00,0x00,0x00,0x57,0x00,0x00,0x00,0x13,0x00,0x00,0x00, -0x56,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x59,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x57,0x00,0x00,0x00, -0x58,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x58,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x5e,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x56,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x5f,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x5f,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x62,0x00,0x00,0x00, -0x1c,0x00,0x00,0x00,0x81,0x00,0x05,0x00,0x14,0x00,0x00,0x00, -0x63,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x60,0x00,0x00,0x00, -0x3e,0x00,0x03,0x00,0x1c,0x00,0x00,0x00,0x63,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x59,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x59,0x00,0x00,0x00,0xe0,0x00,0x04,0x00,0x48,0x00,0x00,0x00, -0x48,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x50,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x50,0x00,0x00,0x00, -0xc3,0x00,0x05,0x00,0x28,0x00,0x00,0x00,0x67,0x00,0x00,0x00, -0x9c,0x00,0x00,0x00,0x65,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x4d,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x4f,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x69,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0x6a,0x00,0x00,0x00,0x69,0x00,0x00,0x00, -0x70,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x6d,0x00,0x00,0x00, -0x2c,0x00,0x00,0x00,0x88,0x00,0x05,0x00,0x14,0x00,0x00,0x00, -0x6e,0x00,0x00,0x00,0x6a,0x00,0x00,0x00,0x6d,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x72,0x00,0x00,0x00,0x73,0x00,0x00,0x00, -0x27,0x00,0x00,0x00,0x71,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x73,0x00,0x00,0x00, -0x81,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0x75,0x00,0x00,0x00, -0x6e,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x0c,0x00,0x06,0x00, -0x14,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x79,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x79,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x9d,0x00,0x00,0x00, -0x13,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x98,0x00,0x00,0x00, -0x7a,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x2d,0x00,0x00,0x00, -0x81,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,0x2c,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0x7b,0x00,0x00,0x00,0x7a,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x81,0x00,0x00,0x00, -0x7a,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x7a,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x89,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x2c,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8b,0x00,0x00,0x00, -0x89,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,0x41,0x00,0x06,0x00, -0x3b,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x34,0x00,0x00,0x00, -0x29,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x14,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x93,0x00,0x00,0x00, -0x85,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0x95,0x00,0x00,0x00, -0x76,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x41,0x00,0x06,0x00, -0x3b,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x85,0x00,0x00,0x00, -0x29,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,0x3e,0x00,0x03,0x00, -0x96,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x9d,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x79,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x7b,0x00,0x00,0x00,0xfd,0x00,0x01,0x00, -0x38,0x00,0x01,0x00, -}; -const uint64_t rms_norm_f32_len = 2344; - -unsigned char rope_f16_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0x1c,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00, -0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c, -0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00, -0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x0f,0x00,0x0a,0x00,0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,0x2c,0x00,0x00,0x00, -0x67,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,0xad,0x00,0x00,0x00, -0xbd,0x00,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x29,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x2a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x2a,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x2a,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x2a,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x2a,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x2a,0x00,0x00,0x00,0x05,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x2a,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x2a,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x67,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x88,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x04,0x00,0x89,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x89,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0x89,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x8b,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x8b,0x00,0x00,0x00, -0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xaa,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x48,0x00,0x04,0x00,0xab,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0xab,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0xab,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xad,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xad,0x00,0x00,0x00, -0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xba,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x48,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0xbb,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0xbb,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xbd,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xbd,0x00,0x00,0x00, -0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xd5,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00, -0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x16,0x00,0x03,0x00, -0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x15,0x00,0x04,0x00, -0x07,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x07,0x00,0x00,0x00,0x17,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x1b,0x00,0x00,0x00,0x6f,0x12,0x83,0x3a,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x00,0x00,0x80,0x3f, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x07,0x00,0x00,0x00, -0x28,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x1c,0x00,0x04,0x00, -0x29,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0x1e,0x00,0x09,0x00,0x2a,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x29,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x2b,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x2a,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x2b,0x00,0x00,0x00, -0x2c,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00, -0x2d,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x2d,0x00,0x00,0x00,0x2e,0x00,0x00,0x00, -0x05,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x2f,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x2d,0x00,0x00,0x00,0x33,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x2d,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x14,0x00,0x02,0x00,0x3c,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x2d,0x00,0x00,0x00,0x41,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x2d,0x00,0x00,0x00, -0x42,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x52,0x00,0x00,0x00,0xcd,0xcc,0xcc,0x3d, -0x17,0x00,0x04,0x00,0x65,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x66,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x65,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x66,0x00,0x00,0x00,0x67,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x07,0x00,0x00,0x00,0x68,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x69,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x07,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x72,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x2d,0x00,0x00,0x00, -0x82,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x1d,0x00,0x03,0x00, -0x88,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0x1e,0x00,0x03,0x00, -0x89,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x8a,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x89,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x8a,0x00,0x00,0x00,0x8b,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x8d,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x2d,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x16,0x00,0x03,0x00,0xa9,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x1d,0x00,0x03,0x00,0xaa,0x00,0x00,0x00,0xa9,0x00,0x00,0x00, -0x1e,0x00,0x03,0x00,0xab,0x00,0x00,0x00,0xaa,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0xac,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0xab,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xac,0x00,0x00,0x00, -0xad,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0xb0,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xa9,0x00,0x00,0x00, -0x1d,0x00,0x03,0x00,0xba,0x00,0x00,0x00,0xa9,0x00,0x00,0x00, -0x1e,0x00,0x03,0x00,0xbb,0x00,0x00,0x00,0xba,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0xbc,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0xbb,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xbc,0x00,0x00,0x00, -0xbd,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x07,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,0x00,0x01,0x00,0x00, -0x2c,0x00,0x06,0x00,0x65,0x00,0x00,0x00,0xd5,0x00,0x00,0x00, -0x68,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,0x68,0x00,0x00,0x00, -0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x05,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0xd6,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0xfb,0x00,0x03,0x00,0x6e,0x00,0x00,0x00, -0xd7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd7,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x69,0x00,0x00,0x00,0x6a,0x00,0x00,0x00, -0x67,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x07,0x00,0x00,0x00,0x6b,0x00,0x00,0x00,0x6a,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x07,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x6b,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x69,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x67,0x00,0x00,0x00, -0x6e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x07,0x00,0x00,0x00, -0x70,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x72,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x2c,0x00,0x00,0x00, -0x42,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x07,0x00,0x00,0x00, -0x74,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0xae,0x00,0x05,0x00, -0x3c,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x74,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x77,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x75,0x00,0x00,0x00, -0x76,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x76,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd6,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x77,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x07,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x70,0x00,0x00,0x00, -0x74,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x07,0x00,0x00,0x00, -0x7f,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x72,0x00,0x00,0x00,0x83,0x00,0x00,0x00, -0x2c,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x07,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x83,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x07,0x00,0x00,0x00,0x85,0x00,0x00,0x00, -0x70,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x41,0x00,0x06,0x00, -0x8d,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0x8b,0x00,0x00,0x00, -0x42,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x2d,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,0x8e,0x00,0x00,0x00, -0x6f,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x92,0x00,0x00,0x00, -0x8f,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x2f,0x00,0x00,0x00, -0x94,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x93,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x95,0x00,0x00,0x00, -0x94,0x00,0x00,0x00,0x70,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x97,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x7f,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x97,0x00,0x00,0x00, -0x70,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x9b,0x00,0x00,0x00, -0x74,0x00,0x00,0x00,0x88,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9c,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x9b,0x00,0x00,0x00, -0x0c,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x9d,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x95,0x00,0x00,0x00, -0x9c,0x00,0x00,0x00,0x85,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9e,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x9d,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x2f,0x00,0x00,0x00,0xe1,0x00,0x00,0x00, -0x2c,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xe2,0x00,0x00,0x00,0xe1,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x2f,0x00,0x00,0x00,0xe3,0x00,0x00,0x00, -0x2c,0x00,0x00,0x00,0x33,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xe4,0x00,0x00,0x00,0xe3,0x00,0x00,0x00, -0x85,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe5,0x00,0x00,0x00, -0xe4,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x2f,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,0x2c,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xe8,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,0xb7,0x00,0x05,0x00, -0x3c,0x00,0x00,0x00,0xe9,0x00,0x00,0x00,0xe8,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x02,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xe9,0x00,0x00,0x00, -0xea,0x00,0x00,0x00,0x02,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0xea,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x2f,0x00,0x00,0x00, -0xeb,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x41,0x00,0x00,0x00, -0x42,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xec,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,0x41,0x00,0x06,0x00, -0x2f,0x00,0x00,0x00,0xed,0x00,0x00,0x00,0x2c,0x00,0x00,0x00, -0x41,0x00,0x00,0x00,0x33,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xee,0x00,0x00,0x00,0xed,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x07,0x00,0x00,0x00,0x0e,0x01,0x00,0x00, -0x6c,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x70,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x0f,0x01,0x00,0x00,0x0e,0x01,0x00,0x00, -0x83,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x10,0x01,0x00,0x00, -0x0f,0x01,0x00,0x00,0xec,0x00,0x00,0x00,0x83,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x11,0x01,0x00,0x00,0xee,0x00,0x00,0x00, -0xec,0x00,0x00,0x00,0x0c,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x12,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0x1b,0x00,0x00,0x00,0x11,0x01,0x00,0x00,0x88,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x13,0x01,0x00,0x00,0x10,0x01,0x00,0x00, -0x12,0x01,0x00,0x00,0x0c,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x15,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x13,0x01,0x00,0x00,0x0c,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x16,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0x25,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x15,0x01,0x00,0x00, -0x83,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x17,0x01,0x00,0x00, -0x1f,0x00,0x00,0x00,0x16,0x01,0x00,0x00,0x85,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,0x17,0x01,0x00,0x00, -0xe8,0x00,0x00,0x00,0x83,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x1a,0x01,0x00,0x00,0x16,0x01,0x00,0x00,0x1f,0x00,0x00,0x00, -0x0c,0x00,0x08,0x00,0x06,0x00,0x00,0x00,0xf5,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x1a,0x01,0x00,0x00, -0xe8,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x85,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,0x9e,0x00,0x00,0x00, -0xf2,0x00,0x00,0x00,0x0c,0x00,0x08,0x00,0x06,0x00,0x00,0x00, -0xf9,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0xe5,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,0xf8,0x00,0x00,0x00, -0x88,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfc,0x00,0x00,0x00, -0x1f,0x00,0x00,0x00,0xe4,0x00,0x00,0x00,0x0c,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x1c,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x0c,0x00,0x08,0x00, -0x06,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0x52,0x00,0x00,0x00,0xfd,0x00,0x00,0x00, -0x1f,0x00,0x00,0x00,0x85,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x01,0x01,0x00,0x00,0xe2,0x00,0x00,0x00,0xff,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x02,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x02,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x19,0x01,0x00,0x00,0xe2,0x00,0x00,0x00,0x77,0x00,0x00,0x00, -0x01,0x01,0x00,0x00,0xea,0x00,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x18,0x01,0x00,0x00,0xe5,0x00,0x00,0x00, -0x77,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,0xea,0x00,0x00,0x00, -0x0c,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x04,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x18,0x01,0x00,0x00, -0x85,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x06,0x01,0x00,0x00, -0x04,0x01,0x00,0x00,0x19,0x01,0x00,0x00,0x0c,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x08,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0x0d,0x00,0x00,0x00,0x18,0x01,0x00,0x00,0x85,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x0a,0x01,0x00,0x00,0x08,0x01,0x00,0x00, -0x19,0x01,0x00,0x00,0x41,0x00,0x06,0x00,0xb0,0x00,0x00,0x00, -0xb1,0x00,0x00,0x00,0xad,0x00,0x00,0x00,0x42,0x00,0x00,0x00, -0x7f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xa9,0x00,0x00,0x00, -0xb2,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,0x73,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0xb2,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x07,0x00,0x00,0x00,0xb6,0x00,0x00,0x00, -0x7f,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x41,0x00,0x06,0x00, -0xb0,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0xad,0x00,0x00,0x00, -0x42,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0xa9,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0xb7,0x00,0x00,0x00, -0x73,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00, -0xb8,0x00,0x00,0x00,0x85,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xc5,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x0a,0x01,0x00,0x00, -0x7f,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x1b,0x01,0x00,0x00, -0xc5,0x00,0x00,0x00,0x0c,0x00,0x08,0x00,0x06,0x00,0x00,0x00, -0xc6,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0xb3,0x00,0x00,0x00,0x06,0x01,0x00,0x00,0x1b,0x01,0x00,0x00, -0x73,0x00,0x04,0x00,0xa9,0x00,0x00,0x00,0xc7,0x00,0x00,0x00, -0xc6,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0xb0,0x00,0x00,0x00, -0xc8,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x42,0x00,0x00,0x00, -0x7f,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0xc8,0x00,0x00,0x00, -0xc7,0x00,0x00,0x00,0x85,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd0,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x06,0x01,0x00,0x00, -0x0c,0x00,0x08,0x00,0x06,0x00,0x00,0x00,0xd1,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0xb3,0x00,0x00,0x00, -0x0a,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,0x73,0x00,0x04,0x00, -0xa9,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0xd1,0x00,0x00,0x00, -0x41,0x00,0x06,0x00,0xb0,0x00,0x00,0x00,0xd3,0x00,0x00,0x00, -0xbd,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0xb6,0x00,0x00,0x00, -0x3e,0x00,0x03,0x00,0xd3,0x00,0x00,0x00,0xd2,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xd6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xd6,0x00,0x00,0x00,0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00, - -}; -const uint64_t rope_f16_len = 3156; - -unsigned char rope_f32_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0x17,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00, -0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30, -0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x0f,0x00,0x0a,0x00,0x05,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00, -0x2c,0x00,0x00,0x00,0x67,0x00,0x00,0x00,0x8b,0x00,0x00,0x00, -0xac,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0x10,0x00,0x06,0x00, -0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x00,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x29,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x2a,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x2a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x2a,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x2a,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x2a,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x2a,0x00,0x00,0x00, -0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x2a,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x2a,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x67,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x88,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x89,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x89,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x89,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x8b,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x8b,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xa9,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0xaa,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0xaa,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0xaa,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xac,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xac,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xb7,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0xb8,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0xb8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0xb8,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xba,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xba,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x19,0x00,0x00,0x00,0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00, -0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x16,0x00,0x03,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x07,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x07,0x00,0x00,0x00, -0x17,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x6f,0x12,0x83,0x3a, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x1f,0x00,0x00,0x00, -0x00,0x00,0x80,0x3f,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x07,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x1c,0x00,0x04,0x00,0x29,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x28,0x00,0x00,0x00,0x1e,0x00,0x09,0x00,0x2a,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x29,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x2b,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x2b,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x2d,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x2d,0x00,0x00,0x00, -0x2e,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x2f,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x2d,0x00,0x00,0x00,0x33,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x2d,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x14,0x00,0x02,0x00, -0x3c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x2d,0x00,0x00,0x00, -0x41,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x2d,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x52,0x00,0x00,0x00, -0xcd,0xcc,0xcc,0x3d,0x17,0x00,0x04,0x00,0x65,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x66,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x65,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x66,0x00,0x00,0x00,0x67,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x07,0x00,0x00,0x00, -0x68,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x69,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x07,0x00,0x00,0x00,0x6e,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x72,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x2d,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x1d,0x00,0x03,0x00,0x88,0x00,0x00,0x00,0x2d,0x00,0x00,0x00, -0x1e,0x00,0x03,0x00,0x89,0x00,0x00,0x00,0x88,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x8a,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x89,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x8a,0x00,0x00,0x00, -0x8b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x8d,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2d,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x2d,0x00,0x00,0x00,0x93,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0xa9,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0xaa,0x00,0x00,0x00, -0xa9,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xab,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0xab,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0xaf,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0xb7,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0xb8,0x00,0x00,0x00, -0xb7,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xb9,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0xb9,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x07,0x00,0x00,0x00,0xcf,0x00,0x00,0x00, -0x00,0x01,0x00,0x00,0x2c,0x00,0x06,0x00,0x65,0x00,0x00,0x00, -0xd0,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0xcf,0x00,0x00,0x00, -0x68,0x00,0x00,0x00,0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,0xf7,0x00,0x03,0x00, -0xd1,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfb,0x00,0x03,0x00, -0x6e,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xd2,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x69,0x00,0x00,0x00, -0x6a,0x00,0x00,0x00,0x67,0x00,0x00,0x00,0x68,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x07,0x00,0x00,0x00,0x6b,0x00,0x00,0x00, -0x6a,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x07,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x6b,0x00,0x00,0x00,0x17,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x69,0x00,0x00,0x00,0x6f,0x00,0x00,0x00, -0x67,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x07,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x6f,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x72,0x00,0x00,0x00,0x73,0x00,0x00,0x00, -0x2c,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x07,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x73,0x00,0x00,0x00, -0xae,0x00,0x05,0x00,0x3c,0x00,0x00,0x00,0x75,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0xf7,0x00,0x03,0x00, -0x77,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x75,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x77,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x76,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xd1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x77,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x07,0x00,0x00,0x00,0x7d,0x00,0x00,0x00, -0x70,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x07,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x7d,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x72,0x00,0x00,0x00, -0x83,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x82,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x07,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x83,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x07,0x00,0x00,0x00, -0x85,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x84,0x00,0x00,0x00, -0x41,0x00,0x06,0x00,0x8d,0x00,0x00,0x00,0x8e,0x00,0x00,0x00, -0x8b,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x85,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x2d,0x00,0x00,0x00,0x8f,0x00,0x00,0x00, -0x8e,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x92,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x2f,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x2c,0x00,0x00,0x00, -0x93,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x95,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x70,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x7f,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x98,0x00,0x00,0x00, -0x97,0x00,0x00,0x00,0x70,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x9b,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x88,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0x98,0x00,0x00,0x00, -0x9b,0x00,0x00,0x00,0x0c,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x9d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x1a,0x00,0x00,0x00, -0x95,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0x85,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,0x92,0x00,0x00,0x00, -0x9d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x2f,0x00,0x00,0x00, -0xdc,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x2e,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xdd,0x00,0x00,0x00, -0xdc,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x2f,0x00,0x00,0x00, -0xde,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x33,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xdf,0x00,0x00,0x00, -0xde,0x00,0x00,0x00,0x85,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xe0,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0x9e,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x2f,0x00,0x00,0x00,0xe2,0x00,0x00,0x00, -0x2c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xe3,0x00,0x00,0x00,0xe2,0x00,0x00,0x00, -0xb7,0x00,0x05,0x00,0x3c,0x00,0x00,0x00,0xe4,0x00,0x00,0x00, -0xe3,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0xf7,0x00,0x03,0x00, -0xfd,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xe4,0x00,0x00,0x00,0xe5,0x00,0x00,0x00,0xfd,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xe5,0x00,0x00,0x00,0x41,0x00,0x06,0x00, -0x2f,0x00,0x00,0x00,0xe6,0x00,0x00,0x00,0x2c,0x00,0x00,0x00, -0x41,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,0xe6,0x00,0x00,0x00, -0x41,0x00,0x06,0x00,0x2f,0x00,0x00,0x00,0xe8,0x00,0x00,0x00, -0x2c,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x33,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xe9,0x00,0x00,0x00, -0xe8,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x07,0x00,0x00,0x00, -0x09,0x01,0x00,0x00,0x6c,0x00,0x00,0x00,0x17,0x00,0x00,0x00, -0x70,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0a,0x01,0x00,0x00, -0x09,0x01,0x00,0x00,0x83,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x0b,0x01,0x00,0x00,0x0a,0x01,0x00,0x00,0xe7,0x00,0x00,0x00, -0x83,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0c,0x01,0x00,0x00, -0xe9,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,0x0c,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x0d,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0x28,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x0c,0x01,0x00,0x00, -0x88,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0e,0x01,0x00,0x00, -0x0b,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,0x0c,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x10,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0x28,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x0e,0x01,0x00,0x00, -0x0c,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x11,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0x1f,0x00,0x00,0x00, -0x10,0x01,0x00,0x00,0x83,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x12,0x01,0x00,0x00,0x1f,0x00,0x00,0x00,0x11,0x01,0x00,0x00, -0x85,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xed,0x00,0x00,0x00, -0x12,0x01,0x00,0x00,0xe3,0x00,0x00,0x00,0x83,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x15,0x01,0x00,0x00,0x11,0x01,0x00,0x00, -0x1f,0x00,0x00,0x00,0x0c,0x00,0x08,0x00,0x06,0x00,0x00,0x00, -0xf0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x15,0x01,0x00,0x00,0xe3,0x00,0x00,0x00,0x1f,0x00,0x00,0x00, -0x85,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf3,0x00,0x00,0x00, -0x9e,0x00,0x00,0x00,0xed,0x00,0x00,0x00,0x0c,0x00,0x08,0x00, -0x06,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,0xf0,0x00,0x00,0x00, -0xf3,0x00,0x00,0x00,0x88,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xf7,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0xdf,0x00,0x00,0x00, -0x0c,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xf8,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0xf7,0x00,0x00,0x00, -0x0c,0x00,0x08,0x00,0x06,0x00,0x00,0x00,0xfa,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x52,0x00,0x00,0x00, -0xf8,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x85,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0xdd,0x00,0x00,0x00, -0xfa,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xfd,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xfd,0x00,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x14,0x01,0x00,0x00,0xdd,0x00,0x00,0x00, -0x77,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0xe5,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x13,0x01,0x00,0x00, -0xe0,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0xf4,0x00,0x00,0x00, -0xe5,0x00,0x00,0x00,0x0c,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0xff,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0e,0x00,0x00,0x00, -0x13,0x01,0x00,0x00,0x85,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x01,0x01,0x00,0x00,0xff,0x00,0x00,0x00,0x14,0x01,0x00,0x00, -0x0c,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x03,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x13,0x01,0x00,0x00, -0x85,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x05,0x01,0x00,0x00, -0x03,0x01,0x00,0x00,0x14,0x01,0x00,0x00,0x41,0x00,0x06,0x00, -0xaf,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0xac,0x00,0x00,0x00, -0x42,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,0xb0,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x07,0x00,0x00,0x00,0xb4,0x00,0x00,0x00, -0x7f,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x41,0x00,0x06,0x00, -0xaf,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,0xac,0x00,0x00,0x00, -0x42,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,0xb5,0x00,0x00,0x00, -0x85,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc2,0x00,0x00,0x00, -0xb6,0x00,0x00,0x00,0x05,0x01,0x00,0x00,0x7f,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x16,0x01,0x00,0x00,0xc2,0x00,0x00,0x00, -0x0c,0x00,0x08,0x00,0x06,0x00,0x00,0x00,0xc3,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0xb1,0x00,0x00,0x00, -0x01,0x01,0x00,0x00,0x16,0x01,0x00,0x00,0x41,0x00,0x06,0x00, -0xaf,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0xba,0x00,0x00,0x00, -0x42,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x3e,0x00,0x03,0x00, -0xc4,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0x85,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0xb6,0x00,0x00,0x00, -0x01,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,0x06,0x00,0x00,0x00, -0xcd,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0xb1,0x00,0x00,0x00,0x05,0x01,0x00,0x00,0xcc,0x00,0x00,0x00, -0x41,0x00,0x06,0x00,0xaf,0x00,0x00,0x00,0xce,0x00,0x00,0x00, -0xba,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0xb4,0x00,0x00,0x00, -0x3e,0x00,0x03,0x00,0xce,0x00,0x00,0x00,0xcd,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xd1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xd1,0x00,0x00,0x00,0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00, - -}; -const uint64_t rope_f32_len = 3072; - -unsigned char rope_neox_f16_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0x5f,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00, -0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c, -0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00, -0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x0f,0x00,0x0a,0x00,0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,0x2c,0x00,0x00,0x00, -0x68,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x9e,0x00,0x00,0x00, -0xcf,0x00,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x29,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x2a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x2a,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x2a,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x2a,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x2a,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x2a,0x00,0x00,0x00,0x05,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x2a,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x2a,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x2a,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x2a,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x30,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x2a,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x68,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x95,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x48,0x00,0x04,0x00,0x96,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x96,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0x96,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x98,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x98,0x00,0x00,0x00, -0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x9b,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x48,0x00,0x04,0x00,0x9c,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x9c,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0x9c,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x9e,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x9e,0x00,0x00,0x00, -0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xcc,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x04,0x00,0xcd,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0xcd,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0xcd,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xcf,0x00,0x00,0x00, -0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x16,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00, -0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x16,0x00,0x03,0x00, -0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x15,0x00,0x04,0x00, -0x07,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x07,0x00,0x00,0x00,0x17,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x1b,0x00,0x00,0x00,0x6f,0x12,0x83,0x3a,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x00,0x00,0x80,0x3f, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x07,0x00,0x00,0x00, -0x28,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x1c,0x00,0x04,0x00, -0x29,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0x1e,0x00,0x0c,0x00,0x2a,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x29,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x2b,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x2a,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x2b,0x00,0x00,0x00, -0x2c,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00, -0x2d,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x2d,0x00,0x00,0x00,0x2e,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x2f,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x2d,0x00,0x00,0x00,0x33,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x2d,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x05,0x00,0x00,0x00,0x14,0x00,0x02,0x00,0x3c,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x2d,0x00,0x00,0x00,0x41,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x2d,0x00,0x00,0x00, -0x42,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x2d,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0xcd,0xcc,0xcc,0x3d,0x17,0x00,0x04,0x00,0x66,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x67,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x66,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x67,0x00,0x00,0x00,0x68,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x07,0x00,0x00,0x00, -0x69,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x6a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x07,0x00,0x00,0x00,0x6f,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x73,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x16,0x00,0x03,0x00, -0x94,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x1d,0x00,0x03,0x00, -0x95,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x1e,0x00,0x03,0x00, -0x96,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x97,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x96,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x97,0x00,0x00,0x00,0x98,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x9b,0x00,0x00,0x00, -0x94,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x9c,0x00,0x00,0x00, -0x9b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x9d,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x9d,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0xa1,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x94,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x2d,0x00,0x00,0x00, -0xbc,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x2d,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x1d,0x00,0x03,0x00,0xcc,0x00,0x00,0x00,0x2d,0x00,0x00,0x00, -0x1e,0x00,0x03,0x00,0xcd,0x00,0x00,0x00,0xcc,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0xce,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0xcd,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xce,0x00,0x00,0x00, -0xcf,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0xd1,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2d,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x2d,0x00,0x00,0x00,0xda,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x07,0x00,0x00,0x00, -0x15,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x2c,0x00,0x06,0x00, -0x66,0x00,0x00,0x00,0x16,0x01,0x00,0x00,0x69,0x00,0x00,0x00, -0x15,0x01,0x00,0x00,0x69,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x5c,0x01,0x00,0x00,0x00,0x00,0x00,0x3f, -0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x05,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x17,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0xfb,0x00,0x03,0x00,0x6f,0x00,0x00,0x00, -0x18,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x18,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x6a,0x00,0x00,0x00,0x6b,0x00,0x00,0x00, -0x68,0x00,0x00,0x00,0x69,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x07,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x6b,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x07,0x00,0x00,0x00,0x6d,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x6a,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x68,0x00,0x00,0x00, -0x6f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x07,0x00,0x00,0x00, -0x71,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x73,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x2c,0x00,0x00,0x00, -0x42,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x07,0x00,0x00,0x00, -0x75,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0xae,0x00,0x05,0x00, -0x3c,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x6d,0x00,0x00,0x00, -0x75,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x78,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x76,0x00,0x00,0x00, -0x77,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x77,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x17,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x78,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x73,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x2c,0x00,0x00,0x00, -0x45,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x07,0x00,0x00,0x00, -0x7d,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x07,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x6d,0x00,0x00,0x00, -0x7d,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x07,0x00,0x00,0x00, -0x83,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x7d,0x00,0x00,0x00, -0xac,0x00,0x05,0x00,0x3c,0x00,0x00,0x00,0x85,0x00,0x00,0x00, -0x7e,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0xf7,0x00,0x03,0x00, -0x87,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x85,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x87,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x86,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x07,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,0x71,0x00,0x00,0x00, -0x75,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x07,0x00,0x00,0x00, -0x90,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x7d,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x07,0x00,0x00,0x00,0x91,0x00,0x00,0x00, -0x8c,0x00,0x00,0x00,0x90,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x07,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x91,0x00,0x00,0x00, -0x83,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0xa1,0x00,0x00,0x00, -0xa2,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,0x42,0x00,0x00,0x00, -0x93,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x94,0x00,0x00,0x00, -0xa3,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x41,0x00,0x06,0x00, -0xa1,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0x98,0x00,0x00,0x00, -0x42,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x3e,0x00,0x03,0x00, -0xa4,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x07,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,0x93,0x00,0x00,0x00, -0x69,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0xa1,0x00,0x00,0x00, -0xa9,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,0x42,0x00,0x00,0x00, -0xa6,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x94,0x00,0x00,0x00, -0xaa,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,0x41,0x00,0x06,0x00, -0xa1,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0x98,0x00,0x00,0x00, -0x42,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,0x3e,0x00,0x03,0x00, -0xab,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x17,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x87,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x07,0x00,0x00,0x00,0xb1,0x00,0x00,0x00, -0x71,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x07,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,0x7e,0x00,0x00,0x00, -0x7d,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x07,0x00,0x00,0x00, -0xb6,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,0xb5,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x07,0x00,0x00,0x00,0xb8,0x00,0x00,0x00, -0x83,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x07,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0xb6,0x00,0x00,0x00, -0xb8,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x73,0x00,0x00,0x00, -0xbd,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0xbc,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x07,0x00,0x00,0x00,0xbe,0x00,0x00,0x00, -0xbd,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x07,0x00,0x00,0x00, -0xbf,0x00,0x00,0x00,0x71,0x00,0x00,0x00,0xbe,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x2f,0x00,0x00,0x00,0xc2,0x00,0x00,0x00, -0x2c,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0xc2,0x00,0x00,0x00, -0x70,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00, -0x83,0x00,0x00,0x00,0x70,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xc8,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x7f,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x5b,0x01,0x00,0x00,0xc8,0x00,0x00,0x00, -0x0c,0x00,0x08,0x00,0x06,0x00,0x00,0x00,0xc9,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0xc3,0x00,0x00,0x00, -0xc5,0x00,0x00,0x00,0x5b,0x01,0x00,0x00,0x41,0x00,0x06,0x00, -0xd1,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0xcf,0x00,0x00,0x00, -0x42,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x2d,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,0xd2,0x00,0x00,0x00, -0x6f,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xd6,0x00,0x00,0x00, -0xd3,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x2f,0x00,0x00,0x00, -0xd7,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x33,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xd8,0x00,0x00,0x00, -0xd7,0x00,0x00,0x00,0x85,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xd9,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0xd8,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x2f,0x00,0x00,0x00,0xdb,0x00,0x00,0x00, -0x2c,0x00,0x00,0x00,0xda,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,0xdb,0x00,0x00,0x00, -0x70,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xde,0x00,0x00,0x00, -0x6d,0x00,0x00,0x00,0x85,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xe0,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0x5c,0x01,0x00,0x00, -0x0c,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xe1,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0xdc,0x00,0x00,0x00, -0xe0,0x00,0x00,0x00,0x85,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xe2,0x00,0x00,0x00,0xd9,0x00,0x00,0x00,0xe1,0x00,0x00,0x00, -0x6d,0x00,0x04,0x00,0x07,0x00,0x00,0x00,0xe5,0x00,0x00,0x00, -0xc9,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x2f,0x00,0x00,0x00, -0x22,0x01,0x00,0x00,0x2c,0x00,0x00,0x00,0x2e,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x23,0x01,0x00,0x00, -0x22,0x01,0x00,0x00,0x85,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x26,0x01,0x00,0x00,0xd8,0x00,0x00,0x00,0xe2,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x2f,0x00,0x00,0x00,0x28,0x01,0x00,0x00, -0x2c,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x29,0x01,0x00,0x00,0x28,0x01,0x00,0x00, -0xb7,0x00,0x05,0x00,0x3c,0x00,0x00,0x00,0x2a,0x01,0x00,0x00, -0x29,0x01,0x00,0x00,0x20,0x00,0x00,0x00,0xf7,0x00,0x03,0x00, -0x43,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x2a,0x01,0x00,0x00,0x2b,0x01,0x00,0x00,0x43,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x2b,0x01,0x00,0x00,0x41,0x00,0x06,0x00, -0x2f,0x00,0x00,0x00,0x2c,0x01,0x00,0x00,0x2c,0x00,0x00,0x00, -0x41,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x2d,0x01,0x00,0x00,0x2c,0x01,0x00,0x00, -0x41,0x00,0x06,0x00,0x2f,0x00,0x00,0x00,0x2e,0x01,0x00,0x00, -0x2c,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x45,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x2f,0x01,0x00,0x00, -0x2e,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x07,0x00,0x00,0x00, -0x4f,0x01,0x00,0x00,0xe5,0x00,0x00,0x00,0x17,0x00,0x00,0x00, -0x70,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x50,0x01,0x00,0x00, -0x4f,0x01,0x00,0x00,0x83,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x51,0x01,0x00,0x00,0x50,0x01,0x00,0x00,0x2d,0x01,0x00,0x00, -0x83,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x52,0x01,0x00,0x00, -0x2f,0x01,0x00,0x00,0x2d,0x01,0x00,0x00,0x0c,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x53,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0x28,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x52,0x01,0x00,0x00, -0x88,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x54,0x01,0x00,0x00, -0x51,0x01,0x00,0x00,0x53,0x01,0x00,0x00,0x0c,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x56,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0x28,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x54,0x01,0x00,0x00, -0x0c,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x57,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0x1f,0x00,0x00,0x00, -0x56,0x01,0x00,0x00,0x83,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x58,0x01,0x00,0x00,0x1f,0x00,0x00,0x00,0x57,0x01,0x00,0x00, -0x85,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x33,0x01,0x00,0x00, -0x58,0x01,0x00,0x00,0x29,0x01,0x00,0x00,0x83,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x5d,0x01,0x00,0x00,0x57,0x01,0x00,0x00, -0x1f,0x00,0x00,0x00,0x0c,0x00,0x08,0x00,0x06,0x00,0x00,0x00, -0x36,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x5d,0x01,0x00,0x00,0x29,0x01,0x00,0x00,0x1f,0x00,0x00,0x00, -0x85,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x39,0x01,0x00,0x00, -0xe2,0x00,0x00,0x00,0x33,0x01,0x00,0x00,0x0c,0x00,0x08,0x00, -0x06,0x00,0x00,0x00,0x3a,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0x26,0x01,0x00,0x00,0x36,0x01,0x00,0x00, -0x39,0x01,0x00,0x00,0x88,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x3d,0x01,0x00,0x00,0x1f,0x00,0x00,0x00,0xd8,0x00,0x00,0x00, -0x0c,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x3e,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x3d,0x01,0x00,0x00, -0x0c,0x00,0x08,0x00,0x06,0x00,0x00,0x00,0x40,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0x3e,0x01,0x00,0x00,0x1f,0x00,0x00,0x00,0x85,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x42,0x01,0x00,0x00,0x23,0x01,0x00,0x00, -0x40,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x43,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x43,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x5a,0x01,0x00,0x00,0x23,0x01,0x00,0x00, -0x87,0x00,0x00,0x00,0x42,0x01,0x00,0x00,0x2b,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x59,0x01,0x00,0x00, -0x26,0x01,0x00,0x00,0x87,0x00,0x00,0x00,0x3a,0x01,0x00,0x00, -0x2b,0x01,0x00,0x00,0x0c,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x45,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x0e,0x00,0x00,0x00, -0x59,0x01,0x00,0x00,0x85,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x47,0x01,0x00,0x00,0x45,0x01,0x00,0x00,0x5a,0x01,0x00,0x00, -0x0c,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x49,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x59,0x01,0x00,0x00, -0x85,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4b,0x01,0x00,0x00, -0x49,0x01,0x00,0x00,0x5a,0x01,0x00,0x00,0x41,0x00,0x06,0x00, -0xa1,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x9e,0x00,0x00,0x00, -0x42,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x94,0x00,0x00,0x00,0xf1,0x00,0x00,0x00,0xf0,0x00,0x00,0x00, -0x73,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xf2,0x00,0x00,0x00, -0xf1,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x07,0x00,0x00,0x00, -0xf7,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x17,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x07,0x00,0x00,0x00,0xf8,0x00,0x00,0x00, -0xb9,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,0x41,0x00,0x06,0x00, -0xa1,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,0x9e,0x00,0x00,0x00, -0x42,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x94,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0xf9,0x00,0x00,0x00, -0x73,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xfb,0x00,0x00,0x00, -0xfa,0x00,0x00,0x00,0x85,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x03,0x01,0x00,0x00,0xfb,0x00,0x00,0x00,0x4b,0x01,0x00,0x00, -0x7f,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x5e,0x01,0x00,0x00, -0x03,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,0x06,0x00,0x00,0x00, -0x04,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0xf2,0x00,0x00,0x00,0x47,0x01,0x00,0x00,0x5e,0x01,0x00,0x00, -0x73,0x00,0x04,0x00,0x94,0x00,0x00,0x00,0x05,0x01,0x00,0x00, -0x04,0x01,0x00,0x00,0x41,0x00,0x06,0x00,0xa1,0x00,0x00,0x00, -0x06,0x01,0x00,0x00,0x98,0x00,0x00,0x00,0x42,0x00,0x00,0x00, -0xb9,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0x06,0x01,0x00,0x00, -0x05,0x01,0x00,0x00,0x85,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x11,0x01,0x00,0x00,0xfb,0x00,0x00,0x00,0x47,0x01,0x00,0x00, -0x0c,0x00,0x08,0x00,0x06,0x00,0x00,0x00,0x12,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0xf2,0x00,0x00,0x00, -0x4b,0x01,0x00,0x00,0x11,0x01,0x00,0x00,0x73,0x00,0x04,0x00, -0x94,0x00,0x00,0x00,0x13,0x01,0x00,0x00,0x12,0x01,0x00,0x00, -0x41,0x00,0x06,0x00,0xa1,0x00,0x00,0x00,0x14,0x01,0x00,0x00, -0x98,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0xf8,0x00,0x00,0x00, -0x3e,0x00,0x03,0x00,0x14,0x01,0x00,0x00,0x13,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0x17,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x17,0x01,0x00,0x00,0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00, - -}; -const uint64_t rope_neox_f16_len = 3876; - -unsigned char rope_neox_f32_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0x5a,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00, -0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30, -0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x0f,0x00,0x0a,0x00,0x05,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00, -0x2c,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x97,0x00,0x00,0x00, -0x9d,0x00,0x00,0x00,0xce,0x00,0x00,0x00,0x10,0x00,0x06,0x00, -0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x00,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x29,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x2a,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x2a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x2a,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x2a,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x2a,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x2a,0x00,0x00,0x00, -0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x2a,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x2a,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x2a,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x2a,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x2a,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x68,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x94,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x95,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x95,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x95,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x97,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x97,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x9a,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x9b,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x9b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x9b,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x9d,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x9d,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xcb,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0xcc,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0xcc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0xcc,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xce,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xce,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x11,0x01,0x00,0x00,0x0b,0x00,0x00,0x00, -0x19,0x00,0x00,0x00,0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00, -0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x16,0x00,0x03,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x07,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x07,0x00,0x00,0x00, -0x17,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x6f,0x12,0x83,0x3a, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x1f,0x00,0x00,0x00, -0x00,0x00,0x80,0x3f,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x07,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x1c,0x00,0x04,0x00,0x29,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x28,0x00,0x00,0x00,0x1e,0x00,0x0c,0x00,0x2a,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x2b,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x2b,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x2d,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x2d,0x00,0x00,0x00, -0x2e,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x2f,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x2d,0x00,0x00,0x00,0x33,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x2d,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x14,0x00,0x02,0x00, -0x3c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x2d,0x00,0x00,0x00, -0x41,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x2d,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x2d,0x00,0x00,0x00,0x45,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0xcd,0xcc,0xcc,0x3d,0x17,0x00,0x04,0x00, -0x66,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x67,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x66,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x67,0x00,0x00,0x00, -0x68,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x07,0x00,0x00,0x00,0x69,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x6a,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x07,0x00,0x00,0x00, -0x6f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x73,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0x1d,0x00,0x03,0x00,0x94,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x1e,0x00,0x03,0x00,0x95,0x00,0x00,0x00,0x94,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x96,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x95,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x96,0x00,0x00,0x00, -0x97,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x1d,0x00,0x03,0x00, -0x9a,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x1e,0x00,0x03,0x00, -0x9b,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x9c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x9b,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x9c,0x00,0x00,0x00,0x9d,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xa0,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x2d,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x2d,0x00,0x00,0x00,0xc0,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0xcb,0x00,0x00,0x00, -0x2d,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0xcc,0x00,0x00,0x00, -0xcb,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xcd,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0xcd,0x00,0x00,0x00,0xce,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x2d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x2d,0x00,0x00,0x00, -0xd9,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x07,0x00,0x00,0x00,0x10,0x01,0x00,0x00,0x00,0x01,0x00,0x00, -0x2c,0x00,0x06,0x00,0x66,0x00,0x00,0x00,0x11,0x01,0x00,0x00, -0x69,0x00,0x00,0x00,0x10,0x01,0x00,0x00,0x69,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x57,0x01,0x00,0x00, -0x00,0x00,0x00,0x3f,0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,0xf7,0x00,0x03,0x00, -0x12,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfb,0x00,0x03,0x00, -0x6f,0x00,0x00,0x00,0x13,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x13,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x6a,0x00,0x00,0x00, -0x6b,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x69,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x07,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x6b,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x07,0x00,0x00,0x00, -0x6d,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x17,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x6a,0x00,0x00,0x00,0x70,0x00,0x00,0x00, -0x68,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x07,0x00,0x00,0x00,0x71,0x00,0x00,0x00,0x70,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x73,0x00,0x00,0x00,0x74,0x00,0x00,0x00, -0x2c,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x07,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0x74,0x00,0x00,0x00, -0xae,0x00,0x05,0x00,0x3c,0x00,0x00,0x00,0x76,0x00,0x00,0x00, -0x6d,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0xf7,0x00,0x03,0x00, -0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x76,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x78,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x77,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x12,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x78,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x73,0x00,0x00,0x00,0x7c,0x00,0x00,0x00, -0x2c,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x07,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x7c,0x00,0x00,0x00, -0x86,0x00,0x05,0x00,0x07,0x00,0x00,0x00,0x7e,0x00,0x00,0x00, -0x6d,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x89,0x00,0x05,0x00, -0x07,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x6d,0x00,0x00,0x00, -0x7d,0x00,0x00,0x00,0xac,0x00,0x05,0x00,0x3c,0x00,0x00,0x00, -0x85,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x6f,0x00,0x00,0x00, -0xf7,0x00,0x03,0x00,0x87,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x85,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x87,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x86,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x07,0x00,0x00,0x00,0x8c,0x00,0x00,0x00, -0x71,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x07,0x00,0x00,0x00,0x90,0x00,0x00,0x00,0x7e,0x00,0x00,0x00, -0x7d,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x07,0x00,0x00,0x00, -0x91,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,0x90,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x07,0x00,0x00,0x00,0x93,0x00,0x00,0x00, -0x91,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x41,0x00,0x06,0x00, -0xa0,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0x9d,0x00,0x00,0x00, -0x42,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0xa1,0x00,0x00,0x00, -0x41,0x00,0x06,0x00,0xa0,0x00,0x00,0x00,0xa3,0x00,0x00,0x00, -0x97,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x93,0x00,0x00,0x00, -0x3e,0x00,0x03,0x00,0xa3,0x00,0x00,0x00,0xa2,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x07,0x00,0x00,0x00,0xa5,0x00,0x00,0x00, -0x93,0x00,0x00,0x00,0x69,0x00,0x00,0x00,0x41,0x00,0x06,0x00, -0xa0,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x9d,0x00,0x00,0x00, -0x42,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,0xa8,0x00,0x00,0x00, -0x41,0x00,0x06,0x00,0xa0,0x00,0x00,0x00,0xaa,0x00,0x00,0x00, -0x97,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0xa5,0x00,0x00,0x00, -0x3e,0x00,0x03,0x00,0xaa,0x00,0x00,0x00,0xa9,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x12,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x87,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x07,0x00,0x00,0x00, -0xb0,0x00,0x00,0x00,0x71,0x00,0x00,0x00,0x75,0x00,0x00,0x00, -0x84,0x00,0x05,0x00,0x07,0x00,0x00,0x00,0xb4,0x00,0x00,0x00, -0x7e,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x07,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,0xb0,0x00,0x00,0x00, -0xb4,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x07,0x00,0x00,0x00, -0xb7,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x17,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x07,0x00,0x00,0x00,0xb8,0x00,0x00,0x00, -0xb5,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x73,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x2c,0x00,0x00,0x00, -0xbb,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x07,0x00,0x00,0x00, -0xbd,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x86,0x00,0x05,0x00, -0x07,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x71,0x00,0x00,0x00, -0xbd,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x2f,0x00,0x00,0x00, -0xc1,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0xc0,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xc2,0x00,0x00,0x00, -0xc1,0x00,0x00,0x00,0x70,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xc4,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x70,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0x7e,0x00,0x00,0x00, -0x7f,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x56,0x01,0x00,0x00, -0xc7,0x00,0x00,0x00,0x0c,0x00,0x08,0x00,0x06,0x00,0x00,0x00, -0xc8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0xc2,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0x56,0x01,0x00,0x00, -0x41,0x00,0x06,0x00,0xd0,0x00,0x00,0x00,0xd1,0x00,0x00,0x00, -0xce,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0xbe,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x2d,0x00,0x00,0x00,0xd2,0x00,0x00,0x00, -0xd1,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xd5,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x2f,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0x2c,0x00,0x00,0x00, -0x33,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xd7,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0x85,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xd8,0x00,0x00,0x00,0xd5,0x00,0x00,0x00, -0xd7,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x2f,0x00,0x00,0x00, -0xda,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0xd9,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xdb,0x00,0x00,0x00, -0xda,0x00,0x00,0x00,0x70,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xdd,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x85,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0xdd,0x00,0x00,0x00, -0x57,0x01,0x00,0x00,0x0c,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0xe0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x1a,0x00,0x00,0x00, -0xdb,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0x85,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xe1,0x00,0x00,0x00,0xd8,0x00,0x00,0x00, -0xe0,0x00,0x00,0x00,0x6d,0x00,0x04,0x00,0x07,0x00,0x00,0x00, -0xe4,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x2f,0x00,0x00,0x00,0x1d,0x01,0x00,0x00,0x2c,0x00,0x00,0x00, -0x2e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x1e,0x01,0x00,0x00,0x1d,0x01,0x00,0x00,0x85,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x21,0x01,0x00,0x00,0xd7,0x00,0x00,0x00, -0xe1,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x2f,0x00,0x00,0x00, -0x23,0x01,0x00,0x00,0x2c,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x24,0x01,0x00,0x00, -0x23,0x01,0x00,0x00,0xb7,0x00,0x05,0x00,0x3c,0x00,0x00,0x00, -0x25,0x01,0x00,0x00,0x24,0x01,0x00,0x00,0x20,0x00,0x00,0x00, -0xf7,0x00,0x03,0x00,0x3e,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x25,0x01,0x00,0x00,0x26,0x01,0x00,0x00, -0x3e,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x26,0x01,0x00,0x00, -0x41,0x00,0x06,0x00,0x2f,0x00,0x00,0x00,0x27,0x01,0x00,0x00, -0x2c,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x42,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x28,0x01,0x00,0x00, -0x27,0x01,0x00,0x00,0x41,0x00,0x06,0x00,0x2f,0x00,0x00,0x00, -0x29,0x01,0x00,0x00,0x2c,0x00,0x00,0x00,0x41,0x00,0x00,0x00, -0x45,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x2a,0x01,0x00,0x00,0x29,0x01,0x00,0x00,0x86,0x00,0x05,0x00, -0x07,0x00,0x00,0x00,0x4a,0x01,0x00,0x00,0xe4,0x00,0x00,0x00, -0x17,0x00,0x00,0x00,0x70,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x4b,0x01,0x00,0x00,0x4a,0x01,0x00,0x00,0x83,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x4c,0x01,0x00,0x00,0x4b,0x01,0x00,0x00, -0x28,0x01,0x00,0x00,0x83,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x4d,0x01,0x00,0x00,0x2a,0x01,0x00,0x00,0x28,0x01,0x00,0x00, -0x0c,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x4e,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x1b,0x00,0x00,0x00, -0x4d,0x01,0x00,0x00,0x88,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x4f,0x01,0x00,0x00,0x4c,0x01,0x00,0x00,0x4e,0x01,0x00,0x00, -0x0c,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x51,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x4f,0x01,0x00,0x00,0x0c,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x52,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x25,0x00,0x00,0x00, -0x1f,0x00,0x00,0x00,0x51,0x01,0x00,0x00,0x83,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x53,0x01,0x00,0x00,0x1f,0x00,0x00,0x00, -0x52,0x01,0x00,0x00,0x85,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x2e,0x01,0x00,0x00,0x53,0x01,0x00,0x00,0x24,0x01,0x00,0x00, -0x83,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x58,0x01,0x00,0x00, -0x52,0x01,0x00,0x00,0x1f,0x00,0x00,0x00,0x0c,0x00,0x08,0x00, -0x06,0x00,0x00,0x00,0x31,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0x58,0x01,0x00,0x00,0x24,0x01,0x00,0x00, -0x1f,0x00,0x00,0x00,0x85,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x34,0x01,0x00,0x00,0xe1,0x00,0x00,0x00,0x2e,0x01,0x00,0x00, -0x0c,0x00,0x08,0x00,0x06,0x00,0x00,0x00,0x35,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x21,0x01,0x00,0x00, -0x31,0x01,0x00,0x00,0x34,0x01,0x00,0x00,0x88,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x38,0x01,0x00,0x00,0x1f,0x00,0x00,0x00, -0xd7,0x00,0x00,0x00,0x0c,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x39,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x38,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,0x06,0x00,0x00,0x00, -0x3b,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x53,0x00,0x00,0x00,0x39,0x01,0x00,0x00,0x1f,0x00,0x00,0x00, -0x85,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3d,0x01,0x00,0x00, -0x1e,0x01,0x00,0x00,0x3b,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0x3e,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x3e,0x01,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x55,0x01,0x00,0x00, -0x1e,0x01,0x00,0x00,0x87,0x00,0x00,0x00,0x3d,0x01,0x00,0x00, -0x26,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x54,0x01,0x00,0x00,0x21,0x01,0x00,0x00,0x87,0x00,0x00,0x00, -0x35,0x01,0x00,0x00,0x26,0x01,0x00,0x00,0x0c,0x00,0x06,0x00, -0x06,0x00,0x00,0x00,0x40,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0x0e,0x00,0x00,0x00,0x54,0x01,0x00,0x00,0x85,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x42,0x01,0x00,0x00,0x40,0x01,0x00,0x00, -0x55,0x01,0x00,0x00,0x0c,0x00,0x06,0x00,0x06,0x00,0x00,0x00, -0x44,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x0d,0x00,0x00,0x00, -0x54,0x01,0x00,0x00,0x85,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x46,0x01,0x00,0x00,0x44,0x01,0x00,0x00,0x55,0x01,0x00,0x00, -0x41,0x00,0x06,0x00,0xa0,0x00,0x00,0x00,0xef,0x00,0x00,0x00, -0x9d,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0xb8,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xf0,0x00,0x00,0x00, -0xef,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x07,0x00,0x00,0x00, -0xf5,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x17,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x07,0x00,0x00,0x00,0xf6,0x00,0x00,0x00, -0xb8,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,0x41,0x00,0x06,0x00, -0xa0,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,0x9d,0x00,0x00,0x00, -0x42,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,0xf7,0x00,0x00,0x00, -0x85,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x00,0x01,0x00,0x00, -0xf8,0x00,0x00,0x00,0x46,0x01,0x00,0x00,0x7f,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x59,0x01,0x00,0x00,0x00,0x01,0x00,0x00, -0x0c,0x00,0x08,0x00,0x06,0x00,0x00,0x00,0x01,0x01,0x00,0x00, -0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0xf0,0x00,0x00,0x00, -0x42,0x01,0x00,0x00,0x59,0x01,0x00,0x00,0x41,0x00,0x06,0x00, -0xa0,0x00,0x00,0x00,0x02,0x01,0x00,0x00,0x97,0x00,0x00,0x00, -0x42,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x3e,0x00,0x03,0x00, -0x02,0x01,0x00,0x00,0x01,0x01,0x00,0x00,0x85,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x0d,0x01,0x00,0x00,0xf8,0x00,0x00,0x00, -0x42,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,0x06,0x00,0x00,0x00, -0x0e,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0xf0,0x00,0x00,0x00,0x46,0x01,0x00,0x00,0x0d,0x01,0x00,0x00, -0x41,0x00,0x06,0x00,0xa0,0x00,0x00,0x00,0x0f,0x01,0x00,0x00, -0x97,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0xf6,0x00,0x00,0x00, -0x3e,0x00,0x03,0x00,0x0f,0x01,0x00,0x00,0x0e,0x01,0x00,0x00, -0xf9,0x00,0x02,0x00,0x12,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x12,0x01,0x00,0x00,0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00, - -}; -const uint64_t rope_neox_f32_len = 3792; - -unsigned char scale_f32_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0x9c,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00, -0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30, -0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x0f,0x00,0x09,0x00,0x05,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0xd7,0x00,0x00,0x00, -0xe3,0x00,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x12,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x12,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x12,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x0a,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x12,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x0d,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x12,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x38,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x3c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x12,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x44,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x48,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x13,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x12,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xc7,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xd4,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0xd5,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0xd5,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0xd5,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xd7,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xd7,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xe0,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0xe1,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0xe1,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0xe1,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xe3,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xe3,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xf3,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x19,0x00,0x00,0x00,0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00, -0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0x11,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x1e,0x00,0x16,0x00,0x12,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x15,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x15,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00, -0x1a,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x15,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x55,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00, -0x5a,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x15,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x66,0x00,0x00,0x00, -0x05,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00, -0x6f,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x15,0x00,0x00,0x00,0x72,0x00,0x00,0x00,0x0a,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x76,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00, -0xad,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x15,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xb8,0x00,0x00,0x00, -0x0e,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00, -0xbe,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x17,0x00,0x04,0x00, -0xc5,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0xc6,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0xc5,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xc6,0x00,0x00,0x00, -0xc7,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0xc9,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00, -0xcc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x14,0x00,0x02,0x00, -0xcf,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0xd4,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0xd5,0x00,0x00,0x00, -0xd4,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xd6,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0xd6,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xd8,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0xe0,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0xe1,0x00,0x00,0x00, -0xe0,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xe2,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0xe1,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0xe2,0x00,0x00,0x00,0xe3,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0xe8,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00, -0xeb,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0xec,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x11,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xf1,0x00,0x00,0x00, -0x00,0x02,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xf2,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2c,0x00,0x06,0x00, -0xc5,0x00,0x00,0x00,0xf3,0x00,0x00,0x00,0xf1,0x00,0x00,0x00, -0xf2,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,0x36,0x00,0x05,0x00, -0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00, -0xf7,0x00,0x03,0x00,0xf4,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0xfb,0x00,0x03,0x00,0xc8,0x00,0x00,0x00,0xf5,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xf5,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0xc9,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0xc7,0x00,0x00,0x00, -0xc8,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xcb,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x17,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0xcc,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xce,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,0xae,0x00,0x05,0x00, -0xcf,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0xcb,0x00,0x00,0x00, -0xce,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0xd2,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xd0,0x00,0x00,0x00, -0xd1,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xd1,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xf4,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xd2,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x17,0x00,0x00,0x00,0xd9,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0xd8,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xda,0x00,0x00,0x00,0xd9,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x17,0x00,0x00,0x00,0x03,0x01,0x00,0x00,0x14,0x00,0x00,0x00, -0x6f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x04,0x01,0x00,0x00,0x03,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x17,0x00,0x00,0x00,0x05,0x01,0x00,0x00,0x14,0x00,0x00,0x00, -0x72,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x06,0x01,0x00,0x00,0x05,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x07,0x01,0x00,0x00,0x04,0x01,0x00,0x00, -0x06,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00, -0x08,0x01,0x00,0x00,0x14,0x00,0x00,0x00,0x76,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x09,0x01,0x00,0x00, -0x08,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x0a,0x01,0x00,0x00,0x07,0x01,0x00,0x00,0x09,0x01,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0b,0x01,0x00,0x00, -0xcb,0x00,0x00,0x00,0x0a,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x0f,0x01,0x00,0x00,0x0b,0x01,0x00,0x00, -0x04,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x12,0x01,0x00,0x00,0x0f,0x01,0x00,0x00,0x06,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x15,0x01,0x00,0x00, -0x12,0x01,0x00,0x00,0x09,0x01,0x00,0x00,0x82,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x18,0x01,0x00,0x00,0xcb,0x00,0x00,0x00, -0x15,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x1d,0x01,0x00,0x00,0x06,0x01,0x00,0x00,0x09,0x01,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1e,0x01,0x00,0x00, -0x18,0x01,0x00,0x00,0x1d,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x22,0x01,0x00,0x00,0x1e,0x01,0x00,0x00, -0x06,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x25,0x01,0x00,0x00,0x22,0x01,0x00,0x00,0x09,0x01,0x00,0x00, -0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2a,0x01,0x00,0x00, -0x18,0x01,0x00,0x00,0x25,0x01,0x00,0x00,0x86,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x2d,0x01,0x00,0x00,0x2a,0x01,0x00,0x00, -0x09,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x36,0x01,0x00,0x00,0x2d,0x01,0x00,0x00,0x09,0x01,0x00,0x00, -0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x37,0x01,0x00,0x00, -0x2a,0x01,0x00,0x00,0x36,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x17,0x00,0x00,0x00,0x39,0x01,0x00,0x00,0x14,0x00,0x00,0x00, -0xad,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x3a,0x01,0x00,0x00,0x39,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3b,0x01,0x00,0x00,0x0b,0x01,0x00,0x00, -0x3a,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00, -0x3d,0x01,0x00,0x00,0x14,0x00,0x00,0x00,0xb2,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x3e,0x01,0x00,0x00, -0x3d,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x3f,0x01,0x00,0x00,0x1e,0x01,0x00,0x00,0x3e,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x40,0x01,0x00,0x00, -0x3b,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x17,0x00,0x00,0x00,0x42,0x01,0x00,0x00,0x14,0x00,0x00,0x00, -0xb8,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x43,0x01,0x00,0x00,0x42,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x44,0x01,0x00,0x00,0x2d,0x01,0x00,0x00, -0x43,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x45,0x01,0x00,0x00,0x40,0x01,0x00,0x00,0x44,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x47,0x01,0x00,0x00, -0x14,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x48,0x01,0x00,0x00,0x47,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x49,0x01,0x00,0x00, -0x37,0x01,0x00,0x00,0x48,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x4a,0x01,0x00,0x00,0x45,0x01,0x00,0x00, -0x49,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xdf,0x00,0x00,0x00,0xda,0x00,0x00,0x00,0x4a,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x54,0x01,0x00,0x00, -0x14,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x55,0x01,0x00,0x00,0x54,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x56,0x01,0x00,0x00, -0x14,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x57,0x01,0x00,0x00,0x56,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x58,0x01,0x00,0x00, -0x55,0x01,0x00,0x00,0x57,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x17,0x00,0x00,0x00,0x59,0x01,0x00,0x00,0x14,0x00,0x00,0x00, -0x1e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x5a,0x01,0x00,0x00,0x59,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x5b,0x01,0x00,0x00,0x58,0x01,0x00,0x00, -0x5a,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x5c,0x01,0x00,0x00,0xcb,0x00,0x00,0x00,0x5b,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x60,0x01,0x00,0x00, -0x5c,0x01,0x00,0x00,0x55,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x63,0x01,0x00,0x00,0x60,0x01,0x00,0x00, -0x57,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x66,0x01,0x00,0x00,0x63,0x01,0x00,0x00,0x5a,0x01,0x00,0x00, -0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x69,0x01,0x00,0x00, -0xcb,0x00,0x00,0x00,0x66,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x6e,0x01,0x00,0x00,0x57,0x01,0x00,0x00, -0x5a,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x6f,0x01,0x00,0x00,0x69,0x01,0x00,0x00,0x6e,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x73,0x01,0x00,0x00, -0x6f,0x01,0x00,0x00,0x57,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x76,0x01,0x00,0x00,0x73,0x01,0x00,0x00, -0x5a,0x01,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x7b,0x01,0x00,0x00,0x69,0x01,0x00,0x00,0x76,0x01,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7e,0x01,0x00,0x00, -0x7b,0x01,0x00,0x00,0x5a,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x87,0x01,0x00,0x00,0x7e,0x01,0x00,0x00, -0x5a,0x01,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x88,0x01,0x00,0x00,0x7b,0x01,0x00,0x00,0x87,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x8a,0x01,0x00,0x00, -0x14,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x8b,0x01,0x00,0x00,0x8a,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8c,0x01,0x00,0x00, -0x5c,0x01,0x00,0x00,0x8b,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x17,0x00,0x00,0x00,0x8e,0x01,0x00,0x00,0x14,0x00,0x00,0x00, -0x5a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x8f,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x90,0x01,0x00,0x00,0x6f,0x01,0x00,0x00, -0x8f,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x91,0x01,0x00,0x00,0x8c,0x01,0x00,0x00,0x90,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x93,0x01,0x00,0x00, -0x14,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x94,0x01,0x00,0x00,0x93,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x95,0x01,0x00,0x00, -0x7e,0x01,0x00,0x00,0x94,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x96,0x01,0x00,0x00,0x91,0x01,0x00,0x00, -0x95,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00, -0x98,0x01,0x00,0x00,0x14,0x00,0x00,0x00,0x66,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x99,0x01,0x00,0x00, -0x98,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9a,0x01,0x00,0x00,0x88,0x01,0x00,0x00,0x99,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9b,0x01,0x00,0x00, -0x96,0x01,0x00,0x00,0x9a,0x01,0x00,0x00,0x41,0x00,0x06,0x00, -0xe8,0x00,0x00,0x00,0xe9,0x00,0x00,0x00,0xe3,0x00,0x00,0x00, -0xcc,0x00,0x00,0x00,0x9b,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0x11,0x00,0x00,0x00,0xea,0x00,0x00,0x00,0xe9,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0xec,0x00,0x00,0x00,0xed,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x11,0x00,0x00,0x00,0xee,0x00,0x00,0x00,0xed,0x00,0x00,0x00, -0x81,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0xef,0x00,0x00,0x00, -0xea,0x00,0x00,0x00,0xee,0x00,0x00,0x00,0x41,0x00,0x06,0x00, -0xe8,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0xd7,0x00,0x00,0x00, -0xcc,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0x3e,0x00,0x03,0x00, -0xf0,0x00,0x00,0x00,0xef,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xf4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xf4,0x00,0x00,0x00, -0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00, -}; -const uint64_t scale_f32_len = 3320; - -unsigned char silu_f32_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0x3b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00, -0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30, -0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x0f,0x00,0x09,0x00,0x05,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x24,0x00,0x00,0x00, -0x2c,0x00,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x12,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x12,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x21,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x22,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x24,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x24,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x29,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00, -0x2a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x2a,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x2a,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x2c,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x2c,0x00,0x00,0x00,0x21,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x38,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x13,0x00,0x02,0x00, -0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00, -0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0x11,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x1e,0x00,0x06,0x00,0x12,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x11,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x13,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00, -0x16,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x17,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x14,0x00,0x02,0x00,0x1a,0x00,0x00,0x00,0x1d,0x00,0x03,0x00, -0x21,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x1e,0x00,0x03,0x00, -0x22,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x26,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x1d,0x00,0x03,0x00, -0x29,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x1e,0x00,0x03,0x00, -0x2a,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x2b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2a,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x2b,0x00,0x00,0x00,0x2c,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x11,0x00,0x00,0x00, -0x2f,0x00,0x00,0x00,0x00,0x00,0x80,0x3f,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x00,0x02,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2c,0x00,0x06,0x00,0x09,0x00,0x00,0x00, -0x38,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x37,0x00,0x00,0x00,0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,0xf7,0x00,0x03,0x00, -0x39,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfb,0x00,0x03,0x00, -0x0c,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x3a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00, -0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x16,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0xae,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0x1b,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0xf7,0x00,0x03,0x00,0x1d,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x1d,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x1c,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x39,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x1d,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x26,0x00,0x00,0x00, -0x27,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x16,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x11,0x00,0x00,0x00, -0x28,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x7f,0x00,0x04,0x00, -0x11,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0x0c,0x00,0x06,0x00,0x11,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x31,0x00,0x00,0x00, -0x81,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x33,0x00,0x00,0x00, -0x2f,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x88,0x00,0x05,0x00, -0x11,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0x33,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x26,0x00,0x00,0x00, -0x35,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x16,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0x35,0x00,0x00,0x00, -0x34,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x39,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x39,0x00,0x00,0x00,0xfd,0x00,0x01,0x00, -0x38,0x00,0x01,0x00, -}; -const uint64_t silu_f32_len = 1264; - -unsigned char soft_max_f32_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0x5c,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00, -0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30, -0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x0f,0x00,0x0d,0x00,0x05,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x5c,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0x8c,0x00,0x00,0x00, -0xa3,0x00,0x00,0x00,0x09,0x01,0x00,0x00,0x10,0x00,0x06,0x00, -0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x00,0x02,0x00,0x00, -0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x11,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x1a,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x17,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x17,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x17,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x17,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x17,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x17,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x72,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x04,0x00,0x73,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x73,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0x73,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x75,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x75,0x00,0x00,0x00, -0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x89,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x04,0x00,0x8a,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x8a,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0x8a,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x8c,0x00,0x00,0x00, -0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xa0,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x04,0x00,0xa1,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0xa1,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0xa1,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xa3,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xa3,0x00,0x00,0x00, -0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x06,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x07,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x07,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x09,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x09,0x01,0x00,0x00,0x21,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x45,0x01,0x00,0x00, -0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x13,0x00,0x02,0x00, -0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00, -0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x16,0x00,0x03,0x00, -0x16,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x1e,0x00,0x0a,0x00, -0x17,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x16,0x00,0x00,0x00, -0x16,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x18,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x17,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x18,0x00,0x00,0x00, -0x19,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00, -0x1a,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x1a,0x00,0x00,0x00,0x1b,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x1c,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x16,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x1a,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x24,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x14,0x00,0x02,0x00, -0x27,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1a,0x00,0x00,0x00, -0x32,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x1a,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x05,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x1a,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x4a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00, -0x00,0x02,0x00,0x00,0x1c,0x00,0x04,0x00,0x5a,0x00,0x00,0x00, -0x16,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x5b,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x5a,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x5b,0x00,0x00,0x00,0x5c,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x60,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x1a,0x00,0x00,0x00,0x6a,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x1d,0x00,0x03,0x00,0x72,0x00,0x00,0x00,0x16,0x00,0x00,0x00, -0x1e,0x00,0x03,0x00,0x73,0x00,0x00,0x00,0x72,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x74,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x73,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x74,0x00,0x00,0x00, -0x75,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x7c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x16,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x1a,0x00,0x00,0x00,0x7f,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x89,0x00,0x00,0x00, -0x16,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x8a,0x00,0x00,0x00, -0x89,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x8b,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x8b,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x1a,0x00,0x00,0x00,0x98,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0xa0,0x00,0x00,0x00, -0x16,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0xa1,0x00,0x00,0x00, -0xa0,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xa2,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0xa2,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xaf,0x00,0x00,0x00, -0x08,0x01,0x00,0x00,0x2b,0x00,0x04,0x00,0x1a,0x00,0x00,0x00, -0xb2,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x1d,0x00,0x03,0x00, -0x06,0x01,0x00,0x00,0x16,0x00,0x00,0x00,0x1e,0x00,0x03,0x00, -0x07,0x01,0x00,0x00,0x06,0x01,0x00,0x00,0x20,0x00,0x04,0x00, -0x08,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x07,0x01,0x00,0x00, -0x3b,0x00,0x04,0x00,0x08,0x01,0x00,0x00,0x09,0x01,0x00,0x00, -0x0c,0x00,0x00,0x00,0x2c,0x00,0x06,0x00,0x09,0x00,0x00,0x00, -0x45,0x01,0x00,0x00,0x59,0x00,0x00,0x00,0x4a,0x00,0x00,0x00, -0x4a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x16,0x00,0x00,0x00, -0x5b,0x01,0x00,0x00,0x00,0x00,0x80,0xff,0x36,0x00,0x05,0x00, -0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x1c,0x00,0x00,0x00,0x1d,0x00,0x00,0x00, -0x19,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x1d,0x00,0x00,0x00, -0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1f,0x00,0x00,0x00, -0x13,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x24,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x16,0x00,0x00,0x00, -0x26,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0xba,0x00,0x05,0x00, -0x27,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x26,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x2a,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x28,0x00,0x00,0x00, -0x29,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x29,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x2f,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x1e,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x1c,0x00,0x00,0x00,0x33,0x00,0x00,0x00, -0x19,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x33,0x00,0x00,0x00, -0xb0,0x00,0x05,0x00,0x27,0x00,0x00,0x00,0x35,0x00,0x00,0x00, -0x2f,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0xf7,0x00,0x03,0x00, -0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x35,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x3c,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x37,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x24,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x19,0x00,0x00,0x00, -0x39,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x16,0x00,0x00,0x00, -0x3b,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x38,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x3c,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x24,0x00,0x00,0x00,0x3e,0x00,0x00,0x00, -0x19,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x16,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x3e,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x38,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x38,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x16,0x00,0x00,0x00, -0x46,0x01,0x00,0x00,0x3b,0x00,0x00,0x00,0x37,0x00,0x00,0x00, -0x3f,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0xf7,0x00,0x03,0x00, -0x48,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x35,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0x4c,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x47,0x00,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0x2f,0x00,0x00,0x00, -0x4a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x48,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x4c,0x00,0x00,0x00,0x82,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x2f,0x00,0x00,0x00, -0x34,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x52,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x51,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0x52,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x48,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x48,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x47,0x01,0x00,0x00, -0x4b,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0x53,0x00,0x00,0x00, -0x4c,0x00,0x00,0x00,0x70,0x00,0x04,0x00,0x16,0x00,0x00,0x00, -0x57,0x00,0x00,0x00,0x47,0x01,0x00,0x00,0x0c,0x00,0x07,0x00, -0x16,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x1a,0x00,0x00,0x00,0x46,0x01,0x00,0x00,0x57,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x2a,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x2a,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x16,0x00,0x00,0x00, -0x54,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x05,0x00,0x00,0x00, -0x58,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x60,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x5c,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0x61,0x00,0x00,0x00, -0x5b,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x64,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x64,0x00,0x00,0x00,0xf5,0x00,0x07,0x00, -0x06,0x00,0x00,0x00,0x48,0x01,0x00,0x00,0x0f,0x00,0x00,0x00, -0x2a,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0x67,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x1c,0x00,0x00,0x00,0x6b,0x00,0x00,0x00, -0x19,0x00,0x00,0x00,0x6a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x6b,0x00,0x00,0x00, -0xb0,0x00,0x05,0x00,0x27,0x00,0x00,0x00,0x6d,0x00,0x00,0x00, -0x48,0x01,0x00,0x00,0x6c,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x66,0x00,0x00,0x00,0x67,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x6d,0x00,0x00,0x00,0x65,0x00,0x00,0x00, -0x66,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x65,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x16,0x00,0x00,0x00,0x71,0x00,0x00,0x00, -0x61,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x79,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7b,0x00,0x00,0x00, -0x79,0x00,0x00,0x00,0x48,0x01,0x00,0x00,0x41,0x00,0x06,0x00, -0x7c,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x75,0x00,0x00,0x00, -0x6a,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x16,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x7d,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x24,0x00,0x00,0x00,0x80,0x00,0x00,0x00, -0x19,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x16,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x80,0x00,0x00,0x00, -0xac,0x00,0x05,0x00,0x27,0x00,0x00,0x00,0x85,0x00,0x00,0x00, -0x1e,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xf7,0x00,0x03,0x00, -0x88,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x85,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x95,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x87,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x90,0x00,0x00,0x00,0x1f,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x92,0x00,0x00,0x00,0x90,0x00,0x00,0x00,0x48,0x01,0x00,0x00, -0x41,0x00,0x06,0x00,0x7c,0x00,0x00,0x00,0x93,0x00,0x00,0x00, -0x8c,0x00,0x00,0x00,0x6a,0x00,0x00,0x00,0x92,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x16,0x00,0x00,0x00,0x94,0x00,0x00,0x00, -0x93,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x88,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x95,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x88,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x88,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x16,0x00,0x00,0x00,0x51,0x01,0x00,0x00, -0x94,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0x95,0x00,0x00,0x00,0x0c,0x00,0x08,0x00,0x16,0x00,0x00,0x00, -0x97,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0x7e,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x51,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x1c,0x00,0x00,0x00,0x99,0x00,0x00,0x00, -0x19,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x99,0x00,0x00,0x00, -0xac,0x00,0x05,0x00,0x27,0x00,0x00,0x00,0x9b,0x00,0x00,0x00, -0x9a,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xf7,0x00,0x03,0x00, -0x9e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x9b,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,0xa8,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x9d,0x00,0x00,0x00,0x41,0x00,0x06,0x00, -0x7c,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,0xa3,0x00,0x00,0x00, -0x6a,0x00,0x00,0x00,0x48,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0x16,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,0xa5,0x00,0x00,0x00, -0x85,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0xa7,0x00,0x00,0x00, -0x54,0x01,0x00,0x00,0xa6,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x9e,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xa8,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x9e,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x9e,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x16,0x00,0x00,0x00, -0x56,0x01,0x00,0x00,0xa7,0x00,0x00,0x00,0x9d,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x81,0x00,0x05,0x00, -0x16,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0x97,0x00,0x00,0x00, -0x56,0x01,0x00,0x00,0x0c,0x00,0x07,0x00,0x16,0x00,0x00,0x00, -0xab,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x28,0x00,0x00,0x00, -0x71,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0x3e,0x00,0x03,0x00, -0x61,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x67,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x67,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xae,0x00,0x00,0x00, -0x48,0x01,0x00,0x00,0x59,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x64,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x66,0x00,0x00,0x00, -0xe0,0x00,0x04,0x00,0x4d,0x00,0x00,0x00,0x4d,0x00,0x00,0x00, -0xaf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb3,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xb3,0x00,0x00,0x00,0xf5,0x00,0x07,0x00, -0x1a,0x00,0x00,0x00,0x49,0x01,0x00,0x00,0xb2,0x00,0x00,0x00, -0x66,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,0xb6,0x00,0x00,0x00, -0xad,0x00,0x05,0x00,0x27,0x00,0x00,0x00,0xb9,0x00,0x00,0x00, -0x49,0x01,0x00,0x00,0x6a,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0xb5,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xb9,0x00,0x00,0x00,0xb4,0x00,0x00,0x00, -0xb5,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb4,0x00,0x00,0x00, -0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xbc,0x00,0x00,0x00, -0x49,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0x27,0x00,0x00,0x00, -0xbd,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0xbc,0x00,0x00,0x00, -0xf7,0x00,0x03,0x00,0xbf,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0xbd,0x00,0x00,0x00,0xbe,0x00,0x00,0x00, -0xbf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xbe,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x16,0x00,0x00,0x00,0xc3,0x00,0x00,0x00, -0x61,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xc7,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0xbc,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x60,0x00,0x00,0x00,0xc8,0x00,0x00,0x00, -0x5c,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x16,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0xc8,0x00,0x00,0x00, -0x0c,0x00,0x07,0x00,0x16,0x00,0x00,0x00,0xca,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0xc3,0x00,0x00,0x00, -0xc9,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0x61,0x00,0x00,0x00, -0xca,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xbf,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xbf,0x00,0x00,0x00,0xe0,0x00,0x04,0x00, -0x4d,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0xaf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xb6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xb6,0x00,0x00,0x00,0xc3,0x00,0x05,0x00,0x1a,0x00,0x00,0x00, -0xcd,0x00,0x00,0x00,0x49,0x01,0x00,0x00,0x1b,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xb3,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xb5,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x60,0x00,0x00,0x00, -0xcf,0x00,0x00,0x00,0x5c,0x00,0x00,0x00,0x6a,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x16,0x00,0x00,0x00,0xd0,0x00,0x00,0x00, -0xcf,0x00,0x00,0x00,0xe0,0x00,0x04,0x00,0x4d,0x00,0x00,0x00, -0x4d,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0x3e,0x00,0x03,0x00, -0x61,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xd5,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd5,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x4a,0x01,0x00,0x00, -0x0f,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,0x0e,0x01,0x00,0x00, -0xd8,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x27,0x00,0x00,0x00, -0xdd,0x00,0x00,0x00,0x4a,0x01,0x00,0x00,0x6c,0x00,0x00,0x00, -0xf6,0x00,0x04,0x00,0xd7,0x00,0x00,0x00,0xd8,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xdd,0x00,0x00,0x00, -0xd6,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xd6,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xe2,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x6c,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe4,0x00,0x00,0x00, -0xe2,0x00,0x00,0x00,0x4a,0x01,0x00,0x00,0x41,0x00,0x06,0x00, -0x7c,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,0x75,0x00,0x00,0x00, -0x6a,0x00,0x00,0x00,0xe4,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x16,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0xe7,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x24,0x00,0x00,0x00,0xe9,0x00,0x00,0x00, -0x19,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x16,0x00,0x00,0x00,0xea,0x00,0x00,0x00,0xe9,0x00,0x00,0x00, -0xac,0x00,0x05,0x00,0x27,0x00,0x00,0x00,0xee,0x00,0x00,0x00, -0x1e,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xf7,0x00,0x03,0x00, -0xf1,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xee,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0xfa,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xf0,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,0x1f,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0xf7,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,0x4a,0x01,0x00,0x00, -0x41,0x00,0x06,0x00,0x7c,0x00,0x00,0x00,0xf8,0x00,0x00,0x00, -0x8c,0x00,0x00,0x00,0x6a,0x00,0x00,0x00,0xf7,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x16,0x00,0x00,0x00,0xf9,0x00,0x00,0x00, -0xf8,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xf1,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xfa,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xf1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xf1,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x16,0x00,0x00,0x00,0x4e,0x01,0x00,0x00, -0xf9,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x22,0x00,0x00,0x00, -0xfa,0x00,0x00,0x00,0x0c,0x00,0x08,0x00,0x16,0x00,0x00,0x00, -0xfc,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00, -0xe8,0x00,0x00,0x00,0xea,0x00,0x00,0x00,0x4e,0x01,0x00,0x00, -0x83,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0xfe,0x00,0x00,0x00, -0xfc,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x0c,0x00,0x06,0x00, -0x16,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x1b,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x16,0x00,0x00,0x00,0x03,0x01,0x00,0x00,0x61,0x00,0x00,0x00, -0x81,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x04,0x01,0x00,0x00, -0x03,0x01,0x00,0x00,0xff,0x00,0x00,0x00,0x3e,0x00,0x03,0x00, -0x61,0x00,0x00,0x00,0x04,0x01,0x00,0x00,0x41,0x00,0x06,0x00, -0x7c,0x00,0x00,0x00,0x0c,0x01,0x00,0x00,0x09,0x01,0x00,0x00, -0x6a,0x00,0x00,0x00,0xe4,0x00,0x00,0x00,0x3e,0x00,0x03,0x00, -0x0c,0x01,0x00,0x00,0xff,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xd8,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd8,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0e,0x01,0x00,0x00, -0x4a,0x01,0x00,0x00,0x59,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xd5,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd7,0x00,0x00,0x00, -0xe0,0x00,0x04,0x00,0x4d,0x00,0x00,0x00,0x4d,0x00,0x00,0x00, -0xaf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x10,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x10,0x01,0x00,0x00,0xf5,0x00,0x07,0x00, -0x1a,0x00,0x00,0x00,0x4b,0x01,0x00,0x00,0xb2,0x00,0x00,0x00, -0xd7,0x00,0x00,0x00,0x29,0x01,0x00,0x00,0x13,0x01,0x00,0x00, -0xad,0x00,0x05,0x00,0x27,0x00,0x00,0x00,0x16,0x01,0x00,0x00, -0x4b,0x01,0x00,0x00,0x6a,0x00,0x00,0x00,0xf6,0x00,0x04,0x00, -0x12,0x01,0x00,0x00,0x13,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x16,0x01,0x00,0x00,0x11,0x01,0x00,0x00, -0x12,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x11,0x01,0x00,0x00, -0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x19,0x01,0x00,0x00, -0x4b,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0x27,0x00,0x00,0x00, -0x1a,0x01,0x00,0x00,0x0f,0x00,0x00,0x00,0x19,0x01,0x00,0x00, -0xf7,0x00,0x03,0x00,0x1c,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0xfa,0x00,0x04,0x00,0x1a,0x01,0x00,0x00,0x1b,0x01,0x00,0x00, -0x1c,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x1b,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x21,0x01,0x00,0x00, -0x0f,0x00,0x00,0x00,0x19,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x60,0x00,0x00,0x00,0x22,0x01,0x00,0x00,0x5c,0x00,0x00,0x00, -0x21,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x16,0x00,0x00,0x00, -0x23,0x01,0x00,0x00,0x22,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0x16,0x00,0x00,0x00,0x25,0x01,0x00,0x00,0x61,0x00,0x00,0x00, -0x81,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x26,0x01,0x00,0x00, -0x25,0x01,0x00,0x00,0x23,0x01,0x00,0x00,0x3e,0x00,0x03,0x00, -0x61,0x00,0x00,0x00,0x26,0x01,0x00,0x00,0xf9,0x00,0x02,0x00, -0x1c,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x1c,0x01,0x00,0x00, -0xe0,0x00,0x04,0x00,0x4d,0x00,0x00,0x00,0x4d,0x00,0x00,0x00, -0xaf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x13,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x13,0x01,0x00,0x00,0xc3,0x00,0x05,0x00, -0x1a,0x00,0x00,0x00,0x29,0x01,0x00,0x00,0x4b,0x01,0x00,0x00, -0x1b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x10,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x12,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0x16,0x00,0x00,0x00,0x2c,0x01,0x00,0x00,0xcf,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x2f,0x01,0x00,0x00,0xf8,0x00,0x02,0x00, -0x2f,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x4c,0x01,0x00,0x00,0x0f,0x00,0x00,0x00,0x12,0x01,0x00,0x00, -0x44,0x01,0x00,0x00,0x30,0x01,0x00,0x00,0xb0,0x00,0x05,0x00, -0x27,0x00,0x00,0x00,0x37,0x01,0x00,0x00,0x4c,0x01,0x00,0x00, -0x6c,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x31,0x01,0x00,0x00, -0x30,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x37,0x01,0x00,0x00,0x30,0x01,0x00,0x00,0x31,0x01,0x00,0x00, -0xf8,0x00,0x02,0x00,0x30,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3b,0x01,0x00,0x00,0x13,0x00,0x00,0x00, -0x6c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x3d,0x01,0x00,0x00,0x3b,0x01,0x00,0x00,0x4c,0x01,0x00,0x00, -0x41,0x00,0x06,0x00,0x7c,0x00,0x00,0x00,0x3f,0x01,0x00,0x00, -0x09,0x01,0x00,0x00,0x6a,0x00,0x00,0x00,0x3d,0x01,0x00,0x00, -0x3d,0x00,0x04,0x00,0x16,0x00,0x00,0x00,0x40,0x01,0x00,0x00, -0x3f,0x01,0x00,0x00,0x88,0x00,0x05,0x00,0x16,0x00,0x00,0x00, -0x41,0x01,0x00,0x00,0x40,0x01,0x00,0x00,0x2c,0x01,0x00,0x00, -0x3e,0x00,0x03,0x00,0x3f,0x01,0x00,0x00,0x41,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x44,0x01,0x00,0x00, -0x4c,0x01,0x00,0x00,0x59,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x2f,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x31,0x01,0x00,0x00, -0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00, -}; -const uint64_t soft_max_f32_len = 4916; - -unsigned char split_k_reduce_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0x50,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00, -0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30, -0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x0f,0x00,0x09,0x00,0x05,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x30,0x00,0x00,0x00, -0x41,0x00,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x01,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x47,0x00,0x03,0x00,0x11,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x2d,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x2e,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x2e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x2e,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x30,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x30,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x3e,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x3f,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x3f,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x41,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0x41,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0x47,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x19,0x00,0x00,0x00,0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00, -0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x1e,0x00,0x04,0x00,0x11,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x12,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x12,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x16,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x14,0x00,0x02,0x00,0x19,0x00,0x00,0x00,0x16,0x00,0x03,0x00, -0x1e,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x1e,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x29,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x2d,0x00,0x00,0x00, -0x1e,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x2e,0x00,0x00,0x00, -0x2d,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x2f,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x2f,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x37,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x1e,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x3e,0x00,0x00,0x00, -0x1e,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x3f,0x00,0x00,0x00, -0x3e,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x40,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0x40,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x45,0x00,0x00,0x00, -0x00,0x01,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x46,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2c,0x00,0x06,0x00, -0x09,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0x45,0x00,0x00,0x00, -0x46,0x00,0x00,0x00,0x46,0x00,0x00,0x00,0x36,0x00,0x05,0x00, -0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00, -0xf7,0x00,0x03,0x00,0x48,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0xfb,0x00,0x03,0x00,0x0c,0x00,0x00,0x00,0x49,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x49,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x16,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x13,0x00,0x00,0x00, -0x15,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0xae,0x00,0x05,0x00, -0x19,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x1c,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x1a,0x00,0x00,0x00, -0x1b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x1b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x48,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x1c,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x23,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x23,0x00,0x00,0x00, -0xf5,0x00,0x07,0x00,0x1e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00, -0x21,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x3b,0x00,0x00,0x00, -0x24,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x3d,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x41,0x00,0x05,0x00, -0x16,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x13,0x00,0x00,0x00, -0x29,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x2b,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0xb0,0x00,0x05,0x00, -0x19,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x2b,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x25,0x00,0x00,0x00, -0x24,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0x2c,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x25,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0x24,0x00,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x4e,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x36,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x41,0x00,0x06,0x00,0x37,0x00,0x00,0x00,0x38,0x00,0x00,0x00, -0x30,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x36,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x1e,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x38,0x00,0x00,0x00,0x81,0x00,0x05,0x00,0x1e,0x00,0x00,0x00, -0x3b,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x39,0x00,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3d,0x00,0x00,0x00, -0x4e,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0x23,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x25,0x00,0x00,0x00, -0x41,0x00,0x06,0x00,0x37,0x00,0x00,0x00,0x44,0x00,0x00,0x00, -0x41,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x3e,0x00,0x03,0x00,0x44,0x00,0x00,0x00,0x4f,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0x48,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x48,0x00,0x00,0x00,0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00, - -}; -const uint64_t split_k_reduce_len = 1416; - -unsigned char sqr_f32_data[] = { -0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00, -0x9c,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00, -0x01,0x00,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00, -0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30, -0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x0f,0x00,0x09,0x00,0x05,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0xd9,0x00,0x00,0x00, -0xe4,0x00,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x01,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x12,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x12,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x07,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x12,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x0a,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x12,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x0d,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x12,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x38,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00, -0x0f,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x3c,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x10,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0x12,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x44,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x48,0x00,0x00,0x00, -0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x13,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x47,0x00,0x03,0x00, -0x12,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xc7,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xd6,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0xd7,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0xd7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0xd7,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xd9,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xd9,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xe1,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0xe2,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00, -0xe2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0xe2,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xe4,0x00,0x00,0x00, -0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00, -0xe4,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x47,0x00,0x04,0x00,0xf3,0x00,0x00,0x00,0x0b,0x00,0x00,0x00, -0x19,0x00,0x00,0x00,0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00, -0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00, -0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0x11,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x1e,0x00,0x16,0x00,0x12,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x20,0x00,0x04,0x00, -0x13,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x12,0x00,0x00,0x00, -0x3b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x14,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x15,0x00,0x00,0x00, -0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x15,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0x09,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00, -0x1a,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x15,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x55,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00, -0x5a,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x15,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x06,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x66,0x00,0x00,0x00, -0x05,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00, -0x6f,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x15,0x00,0x00,0x00,0x72,0x00,0x00,0x00,0x0a,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x76,0x00,0x00,0x00, -0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00, -0xad,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x15,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xb8,0x00,0x00,0x00, -0x0e,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00, -0xbe,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x17,0x00,0x04,0x00, -0xc5,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0xc6,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0xc5,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xc6,0x00,0x00,0x00, -0xc7,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0xc9,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00, -0xcc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x14,0x00,0x02,0x00, -0xcf,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0xd6,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0xd7,0x00,0x00,0x00, -0xd6,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xd8,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0xd8,0x00,0x00,0x00,0xd9,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x20,0x00,0x04,0x00,0xde,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0xe1,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0xe2,0x00,0x00,0x00, -0xe1,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xe3,0x00,0x00,0x00, -0x0c,0x00,0x00,0x00,0xe2,0x00,0x00,0x00,0x3b,0x00,0x04,0x00, -0xe3,0x00,0x00,0x00,0xe4,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, -0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xe5,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0xf1,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x2b,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,0x01,0x00,0x00,0x00, -0x2c,0x00,0x06,0x00,0xc5,0x00,0x00,0x00,0xf3,0x00,0x00,0x00, -0xf1,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,0xf2,0x00,0x00,0x00, -0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0x05,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0xf4,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0xfb,0x00,0x03,0x00,0xc8,0x00,0x00,0x00, -0xf5,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xf5,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0xc9,0x00,0x00,0x00,0xca,0x00,0x00,0x00, -0xc7,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0xca,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xcd,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xce,0x00,0x00,0x00,0xcd,0x00,0x00,0x00, -0xae,0x00,0x05,0x00,0xcf,0x00,0x00,0x00,0xd0,0x00,0x00,0x00, -0xcb,0x00,0x00,0x00,0xce,0x00,0x00,0x00,0xf7,0x00,0x03,0x00, -0xd2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00, -0xd0,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0xd2,0x00,0x00,0x00, -0xf8,0x00,0x02,0x00,0xd1,0x00,0x00,0x00,0xf9,0x00,0x02,0x00, -0xf4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd2,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x03,0x01,0x00,0x00, -0x14,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x04,0x01,0x00,0x00,0x03,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x05,0x01,0x00,0x00, -0x14,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x06,0x01,0x00,0x00,0x05,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x07,0x01,0x00,0x00, -0x04,0x01,0x00,0x00,0x06,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x17,0x00,0x00,0x00,0x08,0x01,0x00,0x00,0x14,0x00,0x00,0x00, -0x1e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x09,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x0a,0x01,0x00,0x00,0x07,0x01,0x00,0x00, -0x09,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x0b,0x01,0x00,0x00,0xcb,0x00,0x00,0x00,0x0a,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0f,0x01,0x00,0x00, -0x0b,0x01,0x00,0x00,0x04,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x12,0x01,0x00,0x00,0x0f,0x01,0x00,0x00, -0x06,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x15,0x01,0x00,0x00,0x12,0x01,0x00,0x00,0x09,0x01,0x00,0x00, -0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x18,0x01,0x00,0x00, -0xcb,0x00,0x00,0x00,0x15,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x1d,0x01,0x00,0x00,0x06,0x01,0x00,0x00, -0x09,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x1e,0x01,0x00,0x00,0x18,0x01,0x00,0x00,0x1d,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x22,0x01,0x00,0x00, -0x1e,0x01,0x00,0x00,0x06,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x25,0x01,0x00,0x00,0x22,0x01,0x00,0x00, -0x09,0x01,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x2a,0x01,0x00,0x00,0x18,0x01,0x00,0x00,0x25,0x01,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2d,0x01,0x00,0x00, -0x2a,0x01,0x00,0x00,0x09,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x36,0x01,0x00,0x00,0x2d,0x01,0x00,0x00, -0x09,0x01,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x37,0x01,0x00,0x00,0x2a,0x01,0x00,0x00,0x36,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x39,0x01,0x00,0x00, -0x14,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x3a,0x01,0x00,0x00,0x39,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3b,0x01,0x00,0x00, -0x0b,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x17,0x00,0x00,0x00,0x3d,0x01,0x00,0x00,0x14,0x00,0x00,0x00, -0x5a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x3e,0x01,0x00,0x00,0x3d,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x3f,0x01,0x00,0x00,0x1e,0x01,0x00,0x00, -0x3e,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x40,0x01,0x00,0x00,0x3b,0x01,0x00,0x00,0x3f,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x42,0x01,0x00,0x00, -0x14,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x43,0x01,0x00,0x00,0x42,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x44,0x01,0x00,0x00, -0x2d,0x01,0x00,0x00,0x43,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x45,0x01,0x00,0x00,0x40,0x01,0x00,0x00, -0x44,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00, -0x47,0x01,0x00,0x00,0x14,0x00,0x00,0x00,0x66,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x48,0x01,0x00,0x00, -0x47,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x49,0x01,0x00,0x00,0x37,0x01,0x00,0x00,0x48,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4a,0x01,0x00,0x00, -0x45,0x01,0x00,0x00,0x49,0x01,0x00,0x00,0x41,0x00,0x06,0x00, -0xde,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0xd9,0x00,0x00,0x00, -0xcc,0x00,0x00,0x00,0x4a,0x01,0x00,0x00,0x3d,0x00,0x04,0x00, -0x11,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,0xdf,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xe6,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0xe5,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,0xe6,0x00,0x00,0x00, -0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x54,0x01,0x00,0x00, -0x14,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x55,0x01,0x00,0x00,0x54,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x56,0x01,0x00,0x00, -0x14,0x00,0x00,0x00,0x72,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x57,0x01,0x00,0x00,0x56,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x58,0x01,0x00,0x00, -0x55,0x01,0x00,0x00,0x57,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x17,0x00,0x00,0x00,0x59,0x01,0x00,0x00,0x14,0x00,0x00,0x00, -0x76,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x5a,0x01,0x00,0x00,0x59,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x5b,0x01,0x00,0x00,0x58,0x01,0x00,0x00, -0x5a,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x5c,0x01,0x00,0x00,0xcb,0x00,0x00,0x00,0x5b,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x60,0x01,0x00,0x00, -0x5c,0x01,0x00,0x00,0x55,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x63,0x01,0x00,0x00,0x60,0x01,0x00,0x00, -0x57,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x66,0x01,0x00,0x00,0x63,0x01,0x00,0x00,0x5a,0x01,0x00,0x00, -0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x69,0x01,0x00,0x00, -0xcb,0x00,0x00,0x00,0x66,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x6e,0x01,0x00,0x00,0x57,0x01,0x00,0x00, -0x5a,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x6f,0x01,0x00,0x00,0x69,0x01,0x00,0x00,0x6e,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x73,0x01,0x00,0x00, -0x6f,0x01,0x00,0x00,0x57,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x76,0x01,0x00,0x00,0x73,0x01,0x00,0x00, -0x5a,0x01,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x7b,0x01,0x00,0x00,0x69,0x01,0x00,0x00,0x76,0x01,0x00,0x00, -0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7e,0x01,0x00,0x00, -0x7b,0x01,0x00,0x00,0x5a,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x87,0x01,0x00,0x00,0x7e,0x01,0x00,0x00, -0x5a,0x01,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x88,0x01,0x00,0x00,0x7b,0x01,0x00,0x00,0x87,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x8a,0x01,0x00,0x00, -0x14,0x00,0x00,0x00,0xad,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x8b,0x01,0x00,0x00,0x8a,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8c,0x01,0x00,0x00, -0x5c,0x01,0x00,0x00,0x8b,0x01,0x00,0x00,0x41,0x00,0x05,0x00, -0x17,0x00,0x00,0x00,0x8e,0x01,0x00,0x00,0x14,0x00,0x00,0x00, -0xb2,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00, -0x8f,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,0x84,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x90,0x01,0x00,0x00,0x6f,0x01,0x00,0x00, -0x8f,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x91,0x01,0x00,0x00,0x8c,0x01,0x00,0x00,0x90,0x01,0x00,0x00, -0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x93,0x01,0x00,0x00, -0x14,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x3d,0x00,0x04,0x00, -0x06,0x00,0x00,0x00,0x94,0x01,0x00,0x00,0x93,0x01,0x00,0x00, -0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x95,0x01,0x00,0x00, -0x7e,0x01,0x00,0x00,0x94,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0x96,0x01,0x00,0x00,0x91,0x01,0x00,0x00, -0x95,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00, -0x98,0x01,0x00,0x00,0x14,0x00,0x00,0x00,0xbe,0x00,0x00,0x00, -0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x99,0x01,0x00,0x00, -0x98,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00, -0x9a,0x01,0x00,0x00,0x88,0x01,0x00,0x00,0x99,0x01,0x00,0x00, -0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9b,0x01,0x00,0x00, -0x96,0x01,0x00,0x00,0x9a,0x01,0x00,0x00,0x80,0x00,0x05,0x00, -0x06,0x00,0x00,0x00,0xec,0x00,0x00,0x00,0xe7,0x00,0x00,0x00, -0x9b,0x01,0x00,0x00,0x85,0x00,0x05,0x00,0x11,0x00,0x00,0x00, -0xef,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,0xe0,0x00,0x00,0x00, -0x41,0x00,0x06,0x00,0xde,0x00,0x00,0x00,0xf0,0x00,0x00,0x00, -0xe4,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0xec,0x00,0x00,0x00, -0x3e,0x00,0x03,0x00,0xf0,0x00,0x00,0x00,0xef,0x00,0x00,0x00, -0xf9,0x00,0x02,0x00,0xf4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00, -0xf4,0x00,0x00,0x00,0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00, - -}; -const uint64_t sqr_f32_len = 3252; - diff --git a/ggml-vulkan.cpp b/ggml-vulkan.cpp deleted file mode 100644 index 1736ab7361c..00000000000 --- a/ggml-vulkan.cpp +++ /dev/null @@ -1,6442 +0,0 @@ -#include "ggml-vulkan.h" - -#ifdef GGML_VULKAN_RUN_TESTS -#include -#endif - -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "ggml.h" -#include "ggml-backend-impl.h" - -#include "ggml-vulkan-shaders.hpp" - -#define VK_API_VERSION VK_API_VERSION_1_2 - -#define CEIL_DIV(M, N) (((M) + (N)-1) / (N)) - -#define VK_VENDOR_ID_AMD 0x1002 -#define VK_VENDOR_ID_APPLE 0x106b -#define VK_VENDOR_ID_INTEL 0x8086 -#define VK_VENDOR_ID_NVIDIA 0x10de - -#define VK_DEVICE_DESCRIPTOR_POOL_MODE_UNKNOWN 0 -#define VK_DEVICE_DESCRIPTOR_POOL_MODE_MULTI 1 -#define VK_DEVICE_DESCRIPTOR_POOL_MODE_SINGLE 2 - -#define VK_NUM_TYPES 16 - -#define GGML_VK_MAX_NODES 8192 - -#define MAX_VK_BUFFERS 256 - -#ifndef K_QUANTS_PER_ITERATION -#define K_QUANTS_PER_ITERATION 1 -#else -static_assert(K_QUANTS_PER_ITERATION == 1 || K_QUANTS_PER_ITERATION == 2, "K_QUANTS_PER_ITERATION must be 1 or 2"); -#endif - -#define VK_CHECK(err, msg) \ - do { \ - vk::Result err_ = (err); \ - if (err_ != vk::Result::eSuccess) { \ - fprintf(stderr, "ggml_vulkan: %s error %s at %s:%d\n", \ - #err, to_string(err_).c_str(), __FILE__, __LINE__); \ - exit(1); \ - } \ - } while (0) - -struct ggml_backend_vk_context; - -struct vk_queue { - uint32_t queue_family_index; - vk::Queue queue; - vk::CommandPool pool; - uint32_t cmd_buffer_idx; - std::vector cmd_buffers; - - vk::PipelineStageFlags stage_flags; -}; - -struct vk_pipeline_struct { - std::string name; - vk::ShaderModule shader_module; - vk::DescriptorSetLayout dsl; - std::vector descriptor_pools; - std::vector descriptor_sets; - uint32_t descriptor_set_idx; - vk::PipelineLayout layout; - vk::Pipeline pipeline; - uint32_t push_constant_size; - uint32_t parameter_count; - std::array wg_denoms; - uint32_t align; -}; - -typedef std::shared_ptr vk_pipeline; -typedef std::weak_ptr vk_pipeline_ref; - -static void ggml_vk_destroy_pipeline(vk::Device& device, vk_pipeline& pipeline); - -struct vk_matmul_pipeline_struct { - vk_pipeline l, m, s; - vk_pipeline a_l, a_m, a_s; -}; - -typedef std::shared_ptr vk_matmul_pipeline; - -struct vk_device { - vk::PhysicalDevice physical_device; - vk::PhysicalDeviceProperties properties; - std::string name; - uint64_t max_memory_allocation_size; - bool fp16; - vk::Device device; - uint32_t vendor_id; - vk_queue compute_queue; - vk_queue transfer_queue; - bool single_queue; - uint32_t descriptor_set_mode; - uint32_t subgroup_size; - bool uma; - - bool initialized; - size_t idx; - - vk_matmul_pipeline pipeline_matmul_f32; - vk_matmul_pipeline pipeline_matmul_f16; - vk_matmul_pipeline pipeline_matmul_f16_f32; - vk_pipeline pipeline_matmul_split_k_reduce; - - vk_matmul_pipeline pipeline_dequant_mul_mat_mat[VK_NUM_TYPES]; - - vk_pipeline pipeline_dequant[VK_NUM_TYPES]; - vk_pipeline pipeline_dequant_mul_mat_vec_f32[VK_NUM_TYPES]; - - vk_pipeline pipeline_mul_mat_vec_p021_f16_f32; - vk_pipeline pipeline_mul_mat_vec_nc_f16_f32; - vk_pipeline pipeline_get_rows[VK_NUM_TYPES]; - vk_pipeline pipeline_get_rows_f32[VK_NUM_TYPES]; - vk_pipeline pipeline_mul_f32; - vk_pipeline pipeline_add_f32; - vk_pipeline pipeline_scale_f32; - vk_pipeline pipeline_sqr_f32; - vk_pipeline pipeline_clamp_f32; - vk_pipeline pipeline_cpy_f32_f32, pipeline_cpy_f32_f16, pipeline_cpy_f16_f16; - vk_pipeline pipeline_norm_f32; - vk_pipeline pipeline_rms_norm_f32; - vk_pipeline pipeline_gelu_f32; - vk_pipeline pipeline_silu_f32; - vk_pipeline pipeline_relu_f32; - vk_pipeline pipeline_diag_mask_inf_f32; - vk_pipeline pipeline_soft_max_f32; - vk_pipeline pipeline_rope_f32, pipeline_rope_f16; - vk_pipeline pipeline_rope_neox_f32, pipeline_rope_neox_f16; - vk_pipeline pipeline_argsort_f32; - - std::vector pipelines; - - ~vk_device() { -#ifdef GGML_VULKAN_DEBUG - std::cerr << "destroy device " << name << std::endl; -#endif - device.destroyCommandPool(compute_queue.pool); - if (!single_queue) { - device.destroyCommandPool(transfer_queue.pool); - } - - for (auto& pipeline : pipelines) { - if (pipeline.expired()) { - continue; - } - - vk_pipeline pl = pipeline.lock(); - ggml_vk_destroy_pipeline(device, pl); - } - pipelines.clear(); - - device.destroy(); - } -}; - -struct vk_buffer_struct { - vk::Buffer buffer; - vk::DeviceMemory device_memory; - vk::MemoryPropertyFlags memory_property_flags; - void * ptr; - size_t size = 0; - - ggml_backend_vk_context * ctx; - - std::shared_ptr device; - - ~vk_buffer_struct() { - if (size == 0) { - return; - } -#ifdef GGML_VULKAN_DEBUG - std::cerr << "~vk_buffer_struct(" << buffer << ", " << size << ")" << std::endl; -#endif - - device->device.freeMemory(device_memory); - device->device.destroyBuffer(buffer); - } -}; - -typedef std::shared_ptr vk_buffer; -typedef std::weak_ptr vk_buffer_ref; - -struct vk_subbuffer { - vk_buffer buffer; - uint64_t offset; - uint64_t size; -}; - -struct vk_semaphore { - vk::Semaphore s; - uint64_t value; -}; - -struct vk_submission { - vk::CommandBuffer buffer; - std::vector wait_semaphores; - std::vector signal_semaphores; -}; - -typedef std::vector vk_sequence; - -struct vk_op_push_constants { - uint32_t KX; - uint32_t KY; - float param1; - float param2; -}; - -struct vk_op_unary_push_constants { - uint32_t ne; - uint32_t ne00; uint32_t ne01; uint32_t ne02; uint32_t ne03; uint32_t nb00; uint32_t nb01; uint32_t nb02; uint32_t nb03; - uint32_t ne10; uint32_t ne11; uint32_t ne12; uint32_t ne13; uint32_t nb10; uint32_t nb11; uint32_t nb12; uint32_t nb13; - uint32_t d_offset; - float param1; float param2; -}; - -struct vk_op_binary_push_constants { - uint32_t ne; - uint32_t ne00; uint32_t ne01; uint32_t ne02; uint32_t ne03; uint32_t nb00; uint32_t nb01; uint32_t nb02; uint32_t nb03; - uint32_t ne10; uint32_t ne11; uint32_t ne12; uint32_t ne13; uint32_t nb10; uint32_t nb11; uint32_t nb12; uint32_t nb13; - uint32_t ne20; uint32_t ne21; uint32_t ne22; uint32_t ne23; uint32_t nb20; uint32_t nb21; uint32_t nb22; uint32_t nb23; - uint32_t d_offset; - float param1; float param2; -}; - -struct vk_op_diag_mask_push_constants { - uint32_t ncols; - uint32_t rows_per_channel; - int32_t n_past; -}; - -struct vk_op_rope_push_constants { - uint32_t ncols; - float freq_scale; - uint32_t p_delta_rows; - float freq_base; - float ext_factor; - float attn_factor; - float corr_dims[4]; -}; - -struct vk_op_rope_neox_push_constants { - uint32_t ncols; - uint32_t ndims; - float freq_scale; - uint32_t p_delta_rows; - float freq_base; - float ext_factor; - float attn_factor; - float corr_dims[4]; - float theta_scale; - float inv_ndims; -}; - -struct vk_op_soft_max_push_constants { - uint32_t KX; - uint32_t KY; - uint32_t KZ; - float scale; - float max_bias; - float m0; - float m1; - uint32_t n_head_log2; -}; - -struct vk_op_argsort_push_constants { - uint32_t ncols; - bool ascending; -}; - -// Allow pre-recording command buffers -struct vk_staging_memcpy { - vk_staging_memcpy(void * _dst, const void * _src, size_t _n) : dst(_dst), src(_src), n(_n) {} - - void * dst; - const void * src; - size_t n; -}; - -struct vk_context { - size_t idx; - - vk_submission * s; - std::vector seqs; - - ggml_tensor * exit_tensor; - - std::vector in_memcpys; - std::vector out_memcpys; - - vk_queue * q; -}; - -struct ggml_tensor_extra_gpu { - bool ready; - - size_t ctx_idx; - - vk_buffer_ref buffer_gpu; - uint64_t offset; - - void reset() { - ready = false; - ctx_idx = 0; - buffer_gpu.reset(); - offset = 0; - } -}; - -struct ggml_vk_garbage_collector { - std::vector tl_semaphores; - std::vector semaphores; - std::vector events; - std::vector temp_buffers; - std::vector contexts; -}; - -struct ggml_backend_vk_context { - std::string name; - - std::shared_ptr device; - - size_t semaphore_idx, event_idx; - ggml_vk_garbage_collector gc; - std::vector> pinned_memory; - size_t prealloc_size_x, prealloc_size_y, prealloc_size_split_k; - vk_buffer prealloc_x, prealloc_y, prealloc_split_k; - vk::Fence fence; - vk_buffer staging; - size_t staging_size; - size_t staging_offset; - vk_buffer sync_staging; - - vk_buffer buffer_pool[MAX_VK_BUFFERS]; - - vk_context * compute_ctx; - vk_context * transfer_ctx; - - bool disable; - bool initialized; - - size_t idx; -}; - -struct vk_instance { - vk::Instance instance; - - std::vector device_indices; - - ggml_backend_t backends[GGML_VK_MAX_DEVICES]; - ggml_backend_vk_context contexts[GGML_VK_MAX_DEVICES]; - ggml_backend_buffer_type buffer_types[GGML_VK_MAX_DEVICES]; - bool initialized[GGML_VK_MAX_DEVICES]; -}; - -static std::shared_ptr ggml_vk_get_device(size_t idx) { -#ifdef GGML_VULKAN_DEBUG - std::cerr << "ggml_vk_get_device(" << idx << ")" << std::endl; -#endif - static std::weak_ptr devices[GGML_VK_MAX_DEVICES]; - - if (devices[idx].expired()) { -#ifdef GGML_VULKAN_DEBUG - std::cerr << "Initializing new vk_device" << std::endl; -#endif - std::shared_ptr device = std::make_shared(); - device->initialized = false; - devices[idx] = device; - return device; - } - - return devices[idx].lock(); -} - -#ifdef GGML_VULKAN_CHECK_RESULTS -static size_t vk_skip_checks; -static size_t vk_output_tensor; - -static void ggml_vk_print_tensor(ggml_backend * ctx, const ggml_tensor * tensor, const char * name); -static void ggml_vk_check_results_0(ggml_backend_vk_context * ctx, ggml_compute_params * params, ggml_tensor * tensor); -static void ggml_vk_check_results_1(ggml_backend_vk_context * ctx, ggml_compute_params * params, ggml_tensor * tensor); -#endif - -typedef void (*ggml_vk_func_t)(ggml_backend_vk_context * ctx, vk_context * subctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst); - -static bool vk_instance_initialized = false; -static vk_instance vk_instance; - -GGML_CALL static void ggml_backend_vk_free(ggml_backend_t backend); - -static void ggml_vk_create_pipeline(ggml_backend_vk_context * ctx, vk_pipeline& pipeline, const std::string& name, size_t spv_size, const void* spv_data, const std::string& entrypoint, uint32_t parameter_count, uint32_t push_constant_size, std::array wg_denoms, std::vector&& specialization_constants, uint32_t align) { -#ifdef GGML_VULKAN_DEBUG - std::cerr << "ggml_vk_create_pipeline(" << name << ", " << entrypoint << ", " << parameter_count << ", " << push_constant_size << ", (" << wg_denoms[0] << "," << wg_denoms[1] << "," << wg_denoms[2] << "), specialization_constants, " << align << ")" << std::endl; -#endif - GGML_ASSERT(parameter_count > 0); - GGML_ASSERT(wg_denoms[0] > 0 && wg_denoms[1] > 0 && wg_denoms[2] > 0); // NOLINT - - pipeline = std::make_shared(); - pipeline->name = name; - pipeline->parameter_count = parameter_count; - pipeline->push_constant_size = push_constant_size; - pipeline->wg_denoms = wg_denoms; - pipeline->align = align; - - vk::ShaderModuleCreateInfo shader_module_create_info({}, spv_size, reinterpret_cast(spv_data)); - pipeline->shader_module = ctx->device->device.createShaderModule(shader_module_create_info); - - std::vector dsl_binding; - std::vector dsl_binding_flags; - for (uint32_t i = 0; i < parameter_count; i++) { - dsl_binding.push_back({i, vk::DescriptorType::eStorageBuffer, 1, vk::ShaderStageFlagBits::eCompute}); - dsl_binding_flags.push_back({}); - } - - vk::DescriptorSetLayoutBindingFlagsCreateInfo dslbfci = { dsl_binding_flags }; - - vk::PushConstantRange pcr( - vk::ShaderStageFlagBits::eCompute, - 0, - pipeline->push_constant_size - ); - - vk::DescriptorSetLayoutCreateInfo descriptor_set_layout_create_info( - {}, - dsl_binding); - descriptor_set_layout_create_info.setPNext(&dslbfci); - pipeline->dsl = ctx->device->device.createDescriptorSetLayout(descriptor_set_layout_create_info); - - // Check if device supports multiple descriptors per pool - if (ctx->device->descriptor_set_mode == VK_DEVICE_DESCRIPTOR_POOL_MODE_UNKNOWN) { - const uint32_t alloc_count = 2; - - // Try allocating multiple sets from one pool - // This fails on AMD for some reason, so add a fall back to allocating one pool per set - vk::DescriptorPoolSize descriptor_pool_size(vk::DescriptorType::eStorageBuffer, pipeline->parameter_count); - vk::DescriptorPoolCreateInfo descriptor_pool_create_info({}, alloc_count, descriptor_pool_size); - vk::DescriptorPool pool = ctx->device->device.createDescriptorPool(descriptor_pool_create_info); - - std::vector layouts(alloc_count); - for (uint32_t i = 0; i < alloc_count; i++) { - layouts[i] = pipeline->dsl; - } - try { - vk::DescriptorSetAllocateInfo descriptor_set_alloc_info(pool, alloc_count, layouts.data()); - std::vector sets = ctx->device->device.allocateDescriptorSets(descriptor_set_alloc_info); - } catch(vk::OutOfPoolMemoryError const&) { - ctx->device->descriptor_set_mode = VK_DEVICE_DESCRIPTOR_POOL_MODE_SINGLE; - } - - ctx->device->device.destroyDescriptorPool(pool); - } - - if (ctx->device->descriptor_set_mode == VK_DEVICE_DESCRIPTOR_POOL_MODE_MULTI) { - vk::DescriptorPoolSize descriptor_pool_size(vk::DescriptorType::eStorageBuffer, pipeline->parameter_count); - vk::DescriptorPoolCreateInfo descriptor_pool_create_info({}, 128, descriptor_pool_size); - pipeline->descriptor_pools.push_back(ctx->device->device.createDescriptorPool(descriptor_pool_create_info)); - } - - pipeline->descriptor_set_idx = 0; - - vk::PipelineLayoutCreateInfo pipeline_layout_create_info(vk::PipelineLayoutCreateFlags(), pipeline->dsl, pcr); - pipeline->layout = ctx->device->device.createPipelineLayout(pipeline_layout_create_info); - - std::vector specialization_entries(specialization_constants.size()); - - for (size_t i = 0; i < specialization_constants.size(); i++) { - specialization_entries[i].constantID = i; - specialization_entries[i].offset = i * sizeof(uint32_t); - specialization_entries[i].size = sizeof(uint32_t); - } - - vk::SpecializationInfo specialization_info( - specialization_entries.size(), - specialization_entries.data(), - specialization_constants.size() * sizeof(uint32_t), - specialization_constants.data() - ); - - vk::PipelineShaderStageCreateInfo pipeline_shader_create_info( - vk::PipelineShaderStageCreateFlags(), - vk::ShaderStageFlagBits::eCompute, - pipeline->shader_module, - entrypoint.c_str(), - &specialization_info); - vk::ComputePipelineCreateInfo compute_pipeline_create_info( - vk::PipelineCreateFlags(), - pipeline_shader_create_info, - pipeline->layout); - pipeline->pipeline = ctx->device->device.createComputePipeline(VK_NULL_HANDLE, compute_pipeline_create_info).value; - - ctx->device->pipelines.push_back(pipeline); -} - -static void ggml_vk_destroy_pipeline(vk::Device& device, vk_pipeline& pipeline) { -#ifdef GGML_VULKAN_DEBUG - std::cerr << "ggml_pipeline_destroy_pipeline(" << pipeline->name << ")" << std::endl; -#endif - for (auto& pool : pipeline->descriptor_pools) { - device.destroyDescriptorPool(pool); - } - pipeline->descriptor_pools.clear(); - pipeline->descriptor_sets.clear(); - pipeline->descriptor_set_idx = 0; - - device.destroyDescriptorSetLayout(pipeline->dsl); - - device.destroyPipelineLayout(pipeline->layout); - - device.destroyShaderModule(pipeline->shader_module); - - device.destroyPipeline(pipeline->pipeline); -} - -static void ggml_pipeline_allocate_descriptor_sets(ggml_backend_vk_context * ctx, vk_pipeline& pipeline, uint32_t n) { -#ifdef GGML_VULKAN_DEBUG - std::cerr << "ggml_pipeline_allocate_descriptor_sets(" << pipeline->name << ", " << n << ")" << std::endl; -#endif - if (pipeline->descriptor_sets.size() >= pipeline->descriptor_set_idx + n) { - // Enough descriptors are available - return; - } - - if (ctx->device->descriptor_set_mode == VK_DEVICE_DESCRIPTOR_POOL_MODE_MULTI) { - const uint32_t alloc_count = pipeline->descriptor_set_idx + n - pipeline->descriptor_sets.size(); - - std::vector layouts(alloc_count); - for (uint32_t i = 0; i < alloc_count; i++) { - layouts[i] = pipeline->dsl; - } - vk::DescriptorSetAllocateInfo descriptor_set_alloc_info(pipeline->descriptor_pools[0], alloc_count, layouts.data()); - std::vector sets = ctx->device->device.allocateDescriptorSets(descriptor_set_alloc_info); - pipeline->descriptor_sets.insert(pipeline->descriptor_sets.end(), sets.begin(), sets.end()); - } else { - for (uint32_t i = pipeline->descriptor_sets.size(); i < pipeline->descriptor_set_idx + n; i++) { - vk::DescriptorPoolSize descriptor_pool_size(vk::DescriptorType::eStorageBuffer, pipeline->parameter_count); - vk::DescriptorPoolCreateInfo descriptor_pool_create_info({}, 1, descriptor_pool_size); - pipeline->descriptor_pools.push_back(ctx->device->device.createDescriptorPool(descriptor_pool_create_info)); - - vk::DescriptorSetAllocateInfo descriptor_set_alloc_info(pipeline->descriptor_pools[i], 1, &pipeline->dsl); - std::vector sets = ctx->device->device.allocateDescriptorSets(descriptor_set_alloc_info); - pipeline->descriptor_sets.push_back(sets[0]); - } - } -} - -static void ggml_pipeline_cleanup(vk_pipeline& pipeline) { -#ifdef GGML_VULKAN_DEBUG - std::cerr << "ggml_pipeline_cleanup(" << pipeline->name << ")" << std::endl; -#endif - pipeline->descriptor_set_idx = 0; -} - -static vk::CommandBuffer ggml_vk_create_cmd_buffer(ggml_backend_vk_context * ctx, vk_queue& q) { -#ifdef GGML_VULKAN_DEBUG - std::cerr << "ggml_vk_create_cmd_buffer()" << std::endl; -#endif - if (q.cmd_buffers.size() > q.cmd_buffer_idx) { - // Reuse command buffer - return q.cmd_buffers[q.cmd_buffer_idx++]; - } - - vk::CommandBufferAllocateInfo command_buffer_alloc_info( - q.pool, - vk::CommandBufferLevel::ePrimary, - 1); - const std::vector cmd_buffers = ctx->device->device.allocateCommandBuffers(command_buffer_alloc_info); - auto buf = cmd_buffers.front(); - - q.cmd_buffers.push_back(buf); - q.cmd_buffer_idx++; - - return buf; -} - -static vk_submission ggml_vk_create_submission(ggml_backend_vk_context * ctx, vk_queue& q, std::vector wait_semaphores, std::vector signal_semaphores) { -#ifdef GGML_VULKAN_DEBUG - std::cerr << "ggml_vk_create_submission()" << std::endl; -#endif - vk_submission s; - s.buffer = ggml_vk_create_cmd_buffer(ctx, q); - s.wait_semaphores = std::move(wait_semaphores); - s.signal_semaphores = std::move(signal_semaphores); - return s; -} - -static void ggml_vk_submit(vk_context * ctx, vk::Fence fence) { -#ifdef GGML_VULKAN_DEBUG - std::cerr << "ggml_vk_submit(" << ctx->seqs.size() << ", " << fence << ")" << std::endl; -#endif - if (ctx->seqs.empty()) { - return; - } - - std::vector> tl_wait_vals; - std::vector> tl_signal_vals; - std::vector> tl_wait_semaphores; - std::vector> tl_signal_semaphores; - std::vector tl_submit_infos; - std::vector submit_infos; - int idx = -1; - std::vector> stage_flags; - - size_t reserve = 0; - - for (const auto& sequence : ctx->seqs) { - reserve += sequence.size(); - } - - // Pre-reserve vectors to prevent reallocation, which invalidates pointers - tl_wait_semaphores.reserve(reserve); - tl_wait_vals.reserve(reserve); - tl_signal_semaphores.reserve(reserve); - tl_signal_vals.reserve(reserve); - tl_submit_infos.reserve(reserve); - submit_infos.reserve(reserve); - stage_flags.reserve(reserve); - - for (const auto& sequence : ctx->seqs) { - for (const auto& submission : sequence) { - stage_flags.push_back({}); - idx++; - tl_wait_vals.push_back({}); - tl_wait_semaphores.push_back({}); - tl_signal_vals.push_back({}); - tl_signal_semaphores.push_back({}); - for (size_t i = 0; i < submission.wait_semaphores.size(); i++) { - stage_flags[idx].push_back(ctx->q->stage_flags); - tl_wait_vals[idx].push_back(submission.wait_semaphores[i].value); - tl_wait_semaphores[idx].push_back(submission.wait_semaphores[i].s); - } - for (size_t i = 0; i < submission.signal_semaphores.size(); i++) { - tl_signal_vals[idx].push_back(submission.signal_semaphores[i].value); - tl_signal_semaphores[idx].push_back(submission.signal_semaphores[i].s); - } - tl_submit_infos.push_back({ - (uint32_t) submission.wait_semaphores.size(), - tl_wait_vals[idx].data(), - (uint32_t) submission.signal_semaphores.size(), - tl_signal_vals[idx].data(), - }); - tl_submit_infos[idx].sType = vk::StructureType::eTimelineSemaphoreSubmitInfo; - tl_submit_infos[idx].pNext = nullptr; - vk::SubmitInfo si{ - (uint32_t) submission.wait_semaphores.size(), - tl_wait_semaphores[idx].data(), - stage_flags[idx].data(), - 1, - &submission.buffer, - (uint32_t) submission.signal_semaphores.size(), - tl_signal_semaphores[idx].data(), - }; - si.setPNext(&tl_submit_infos[idx]); - submit_infos.push_back(si); - } - } - - ctx->q->queue.submit(submit_infos, fence); - - ctx->seqs.clear(); -} - -static uint32_t ggml_vk_find_queue_family_index(std::vector& queue_family_props, const vk::QueueFlags& required, const vk::QueueFlags& avoid, int32_t compute_index, uint32_t min_num_queues) { -#ifdef GGML_VULKAN_DEBUG - std::cerr << "ggml_vk_find_queue_family_index()" << std::endl; -#endif - const uint32_t qfsize = queue_family_props.size(); - - // Try with avoid preferences first - for (uint32_t i = 0; i < qfsize; i++) { - if (queue_family_props[i].queueCount >= min_num_queues && (compute_index < 0 || i != (uint32_t) compute_index) && queue_family_props[i].queueFlags & required && !(queue_family_props[i].queueFlags & avoid)) { - return i; - } - } - - // Fall back to only required - for (size_t i = 0; i < qfsize; i++) { - if (queue_family_props[i].queueCount >= min_num_queues && (compute_index < 0 || i != (uint32_t) compute_index) && queue_family_props[i].queueFlags & required) { - return i; - } - } - - // Fall back to reusing compute queue - for (size_t i = 0; i < qfsize; i++) { - if (queue_family_props[i].queueCount >= min_num_queues && queue_family_props[i].queueFlags & required) { - return i; - } - } - - // Fall back to ignoring min_num_queries - for (size_t i = 0; i < qfsize; i++) { - if (queue_family_props[i].queueFlags & required) { - return i; - } - } - - // All commands that are allowed on a queue that supports transfer operations are also allowed on a queue that supports either graphics or compute operations. - // Thus, if the capabilities of a queue family include VK_QUEUE_GRAPHICS_BIT or VK_QUEUE_COMPUTE_BIT, then reporting the VK_QUEUE_TRANSFER_BIT capability separately for that queue family is optional. - if (compute_index >= 0) { - return compute_index; - } - - std::cerr << "ggml_vulkan: No suitable queue family index found." << std::endl; - - for(auto &q_family : queue_family_props) { - std::cerr << "Queue number: " + std::to_string(q_family.queueCount) << " flags: " + to_string(q_family.queueFlags) << std::endl; - } - abort(); -} - -static void ggml_vk_create_queue(ggml_backend_vk_context * ctx, vk_queue& q, uint32_t queue_family_index, uint32_t queue_index, vk::PipelineStageFlags&& stage_flags) { -#ifdef GGML_VULKAN_DEBUG - std::cerr << "ggml_vk_create_queue()" << std::endl; -#endif - q.queue_family_index = queue_family_index; - - vk::CommandPoolCreateInfo command_pool_create_info_compute(vk::CommandPoolCreateFlags(VK_COMMAND_POOL_CREATE_TRANSIENT_BIT), queue_family_index); - q.pool = ctx->device->device.createCommandPool(command_pool_create_info_compute); - - q.cmd_buffer_idx = 0; - - q.queue = ctx->device->device.getQueue(queue_family_index, queue_index); - - q.stage_flags = stage_flags; -} - -static vk_context * ggml_vk_create_context(ggml_backend_vk_context * ctx, vk_queue& q) { -#ifdef GGML_VULKAN_DEBUG - std::cerr << "ggml_vk_create_context()" << std::endl; -#endif - ctx->gc.contexts.emplace_back(); - vk_context * result = &ctx->gc.contexts[ctx->gc.contexts.size() - 1]; - memset((void *) result, 0, sizeof(vk_context)); - result->idx = ctx->gc.contexts.size() - 1; - result->q = &q; - return result; -} - -static vk_semaphore * ggml_vk_create_binary_semaphore(ggml_backend_vk_context * ctx) { -#ifdef GGML_VULKAN_DEBUG - std::cerr << "ggml_vk_create_timeline_semaphore()" << std::endl; -#endif - vk::SemaphoreTypeCreateInfo tci{ vk::SemaphoreType::eBinary, 0 }; - vk::SemaphoreCreateInfo ci{}; - ci.setPNext(&tci); - vk::Semaphore semaphore = ctx->device->device.createSemaphore(ci); - ctx->gc.semaphores.push_back({ semaphore, 0 }); - return &ctx->gc.semaphores[ctx->gc.semaphores.size() - 1]; -} - -static vk_semaphore * ggml_vk_create_timeline_semaphore(ggml_backend_vk_context * ctx) { -#ifdef GGML_VULKAN_DEBUG - std::cerr << "ggml_vk_create_timeline_semaphore()" << std::endl; -#endif - if (ctx->semaphore_idx >= ctx->gc.tl_semaphores.size()) { - vk::SemaphoreTypeCreateInfo tci{ vk::SemaphoreType::eTimeline, 0 }; - vk::SemaphoreCreateInfo ci{}; - ci.setPNext(&tci); - vk::Semaphore semaphore = ctx->device->device.createSemaphore(ci); - ctx->gc.tl_semaphores.push_back({ semaphore, 0 }); - } - return &ctx->gc.tl_semaphores[ctx->semaphore_idx++]; -} - -static vk::Event ggml_vk_create_event(ggml_backend_vk_context * ctx) { - if (ctx->event_idx >= ctx->gc.events.size()) { - ctx->gc.events.push_back(ctx->device->device.createEvent({})); - } - return ctx->gc.events[ctx->event_idx++]; -} - -static void ggml_vk_queue_cleanup(ggml_backend_vk_context * ctx, vk_queue& q) { -#ifdef GGML_VULKAN_DEBUG - std::cerr << "ggml_vk_queue_cleanup()" << std::endl; -#endif - // Requires command buffers to be done - - ctx->device->device.resetCommandPool(q.pool); - q.cmd_buffer_idx = 0; -} - -static uint32_t find_properties(const vk::PhysicalDeviceMemoryProperties* mem_props, vk::MemoryRequirements* mem_req, vk::MemoryPropertyFlags flags) { - for (uint32_t i = 0; i < mem_props->memoryTypeCount; ++i) { - vk::MemoryType memory_type = mem_props->memoryTypes[i]; - if ((mem_req->memoryTypeBits & ((uint64_t)1 << i)) && - (flags & memory_type.propertyFlags) == flags && - mem_props->memoryHeaps[memory_type.heapIndex].size >= mem_req->size) { - return static_cast(i); - } - } - return UINT32_MAX; -} - -static vk_buffer ggml_vk_create_buffer(ggml_backend_vk_context * ctx, size_t size, vk::MemoryPropertyFlags req_flags, vk::MemoryPropertyFlags fallback_flags = vk::MemoryPropertyFlags(0)) { -#ifdef GGML_VULKAN_DEBUG - std::cerr << "ggml_vk_create_buffer(device " << ctx->idx << ", " << size << ", " << to_string(req_flags) << ", " << to_string(fallback_flags) << ")" << std::endl; -#endif - vk_buffer buf = std::make_shared(); - - if (size == 0) { - buf->size = 0; - return buf; - } - - buf->size = size; - vk::BufferCreateInfo buffer_create_info{ - vk::BufferCreateFlags(), - size, - vk::BufferUsageFlagBits::eStorageBuffer | vk::BufferUsageFlagBits::eTransferSrc | vk::BufferUsageFlagBits::eTransferDst, - vk::SharingMode::eExclusive, - 0, - nullptr, - }; - - buf->buffer = ctx->device->device.createBuffer(buffer_create_info); - - vk::MemoryRequirements mem_req = ctx->device->device.getBufferMemoryRequirements(buf->buffer); - - vk::PhysicalDeviceMemoryProperties mem_props = ctx->device->physical_device.getMemoryProperties(); - - uint32_t memory_type_index = UINT32_MAX; - - memory_type_index = find_properties(&mem_props, &mem_req, req_flags); - buf->memory_property_flags = req_flags; - - if (memory_type_index == UINT32_MAX && fallback_flags) { - memory_type_index = find_properties(&mem_props, &mem_req, fallback_flags); - buf->memory_property_flags = fallback_flags; - } - - if (memory_type_index == UINT32_MAX) { - ctx->device->device.destroyBuffer(buf->buffer); - buf->size = 0; - throw vk::OutOfDeviceMemoryError("No suitable memory type found"); - } - - try { - buf->device_memory = ctx->device->device.allocateMemory({ mem_req.size, memory_type_index }); - } catch (const vk::SystemError& e) { - // Out of Host/Device memory, clean up buffer - ctx->device->device.destroyBuffer(buf->buffer); - buf->size = 0; - throw e; - } - buf->ptr = nullptr; - - if (buf->memory_property_flags & vk::MemoryPropertyFlagBits::eHostVisible) { - buf->ptr = ctx->device->device.mapMemory(buf->device_memory, 0, VK_WHOLE_SIZE); - } - - ctx->device->device.bindBufferMemory(buf->buffer, buf->device_memory, 0); - - buf->ctx = ctx; - - buf->device = ctx->device; - -#ifdef GGML_VULKAN_DEBUG - std::cerr << "Created buffer " << buf->buffer << std::endl; -#endif - - return buf; -} - -static vk_buffer ggml_vk_create_buffer_check(ggml_backend_vk_context * ctx, size_t size, vk::MemoryPropertyFlags req_flags, vk::MemoryPropertyFlags fallback_flags = vk::MemoryPropertyFlags(0)) { - try { - return ggml_vk_create_buffer(ctx, size, req_flags, fallback_flags); - } catch (const vk::SystemError& e) { - std::cerr << "ggml_vulkan: Memory allocation of size " << size << " failed." << std::endl; - std::cerr << "ggml_vulkan: " << e.what() << std::endl; - throw e; - } -} - -static vk_buffer ggml_vk_create_buffer_device(ggml_backend_vk_context * ctx, size_t size) { - vk_buffer buf; - try { - if (ctx->device->uma) { - // Fall back to host memory type - buf = ggml_vk_create_buffer(ctx, size, vk::MemoryPropertyFlagBits::eDeviceLocal, vk::MemoryPropertyFlagBits::eHostVisible | vk::MemoryPropertyFlagBits::eHostCoherent); - } else { - buf = ggml_vk_create_buffer(ctx, size, vk::MemoryPropertyFlagBits::eDeviceLocal); - } - } catch (const vk::SystemError& e) { - std::cerr << "ggml_vulkan: Device memory allocation of size " << size << " failed." << std::endl; - std::cerr << "ggml_vulkan: " << e.what() << std::endl; - throw e; - } - - return buf; -} - -static void ggml_vk_destroy_buffer(vk_buffer& buf) { - buf.reset(); -} - -static vk_subbuffer ggml_vk_subbuffer(vk_buffer& buf) { - return { buf, 0, VK_WHOLE_SIZE }; -} - -static void ggml_vk_sync_buffers(vk_context * ctx) { -#ifdef GGML_VULKAN_DEBUG - std::cerr << "ggml_vk_sync_buffers()" << std::endl; -#endif - const std::vector mem_barriers{ { { vk::AccessFlagBits::eMemoryRead | vk::AccessFlagBits::eMemoryWrite }, { vk::AccessFlagBits::eMemoryRead | vk::AccessFlagBits::eMemoryWrite } } }; - - ctx->s->buffer.pipelineBarrier( - ctx->q->stage_flags, - ctx->q->stage_flags, - {}, - mem_barriers, - {}, - {} - ); -} - -static void ggml_vk_wait_events(vk_context * ctx, std::vector&& events) { -#ifdef GGML_VULKAN_DEBUG - std::cerr << "ggml_vk_wait_events()" << std::endl; -#endif - if (events.empty()) { - return; - } - - ctx->s->buffer.waitEvents( - events, - ctx->q->stage_flags, - ctx->q->stage_flags, - {}, - {}, - {} - ); -} - -static bool ggml_vk_build_shader(ggml_type type) { - switch(type) { - case GGML_TYPE_F16: - case GGML_TYPE_Q4_0: - case GGML_TYPE_Q4_1: - case GGML_TYPE_Q5_0: - case GGML_TYPE_Q5_1: - case GGML_TYPE_Q8_0: - case GGML_TYPE_Q2_K: - case GGML_TYPE_Q3_K: - case GGML_TYPE_Q4_K: - case GGML_TYPE_Q5_K: - case GGML_TYPE_Q6_K: - return true; - default: - return false; - } -} - -static void ggml_vk_load_shaders(ggml_backend_vk_context * ctx) { -#ifdef GGML_VULKAN_DEBUG - std::cerr << "ggml_vk_load_shaders(" << ctx->name << ")" << std::endl; -#endif - - const std::shared_ptr device = ctx->device; - - // mulmat - std::initializer_list warptile_l = { 128, 128, 128, 16, device->subgroup_size * 2, 64, 2, 4, 4, device->subgroup_size }; - std::initializer_list warptile_m = { 128, 64, 64, 16, device->subgroup_size, 32, 2, 4, 2, device->subgroup_size }; - std::initializer_list warptile_s = { device->subgroup_size, 32, 32, 16, 32, 32, 2, 2, 2, device->subgroup_size }; - - std::initializer_list warptile_mmq_l = { 128, 128, 128, 32, device->subgroup_size * 2, 64, 2, 4, 4, device->subgroup_size }; - std::initializer_list warptile_mmq_m = { 128, 64, 64, 32, device->subgroup_size, 32, 2, 4, 2, device->subgroup_size }; - std::initializer_list warptile_mmq_s = { device->subgroup_size, 32, 32, 32, 32, 32, 2, 2, 2, device->subgroup_size }; - - std::array l_wg_denoms = {128, 128, 1 }; - std::array m_wg_denoms = { 64, 64, 1 }; - std::array s_wg_denoms = { 32, 32, 1 }; - - uint32_t l_align = 128; - uint32_t m_align = 64; - uint32_t s_align = 32; - - ctx->device->pipeline_matmul_f32 = std::make_shared(); - ctx->device->pipeline_matmul_f16_f32 = std::make_shared(); - ctx->device->pipeline_matmul_f16 = std::make_shared(); - ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_0] = std::make_shared(); - ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_1] = std::make_shared(); - ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_0] = std::make_shared(); - ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_1] = std::make_shared(); - ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q8_0] = std::make_shared(); - ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q2_K] = std::make_shared(); - ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q3_K] = std::make_shared(); - ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_K] = std::make_shared(); - ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_K] = std::make_shared(); - ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q6_K] = std::make_shared(); - - if (device->fp16) { - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_f32->l, "matmul_f32_l", matmul_f32_len, matmul_f32_data, "main", 3, 14 * sizeof(uint32_t), l_wg_denoms, warptile_l, 1); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_f32->m, "matmul_f32_m", matmul_f32_len, matmul_f32_data, "main", 3, 14 * sizeof(uint32_t), m_wg_denoms, warptile_m, 1); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_f32->s, "matmul_f32_s", matmul_f32_len, matmul_f32_data, "main", 3, 14 * sizeof(uint32_t), s_wg_denoms, warptile_s, 1); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_f32->a_l, "matmul_f32_aligned_l", matmul_f32_aligned_len, matmul_f32_aligned_data, "main", 3, 14 * sizeof(uint32_t), l_wg_denoms, warptile_l, l_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_f32->a_m, "matmul_f32_aligned_m", matmul_f32_aligned_len, matmul_f32_aligned_data, "main", 3, 14 * sizeof(uint32_t), m_wg_denoms, warptile_m, m_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_f32->a_s, "matmul_f32_aligned_s", matmul_f32_aligned_len, matmul_f32_aligned_data, "main", 3, 14 * sizeof(uint32_t), s_wg_denoms, warptile_s, s_align); - - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_f16->l, "matmul_f16_l", matmul_f16_len, matmul_f16_data, "main", 3, 14 * sizeof(uint32_t), l_wg_denoms, warptile_l, 1); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_f16->m, "matmul_f16_m", matmul_f16_len, matmul_f16_data, "main", 3, 14 * sizeof(uint32_t), m_wg_denoms, warptile_m, 1); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_f16->s, "matmul_f16_s", matmul_f16_len, matmul_f16_data, "main", 3, 14 * sizeof(uint32_t), s_wg_denoms, warptile_s, 1); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_f16->a_l, "matmul_f16_aligned_l", matmul_f16_aligned_len, matmul_f16_aligned_data, "main", 3, 14 * sizeof(uint32_t), l_wg_denoms, warptile_l, l_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_f16->a_m, "matmul_f16_aligned_m", matmul_f16_aligned_len, matmul_f16_aligned_data, "main", 3, 14 * sizeof(uint32_t), m_wg_denoms, warptile_m, m_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_f16->a_s, "matmul_f16_aligned_s", matmul_f16_aligned_len, matmul_f16_aligned_data, "main", 3, 14 * sizeof(uint32_t), s_wg_denoms, warptile_s, s_align); - - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_f16_f32->l, "matmul_f16_f32_l", matmul_f16_f32_len, matmul_f16_f32_data, "main", 3, 14 * sizeof(uint32_t), l_wg_denoms, warptile_l, 1); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_f16_f32->m, "matmul_f16_f32_m", matmul_f16_f32_len, matmul_f16_f32_data, "main", 3, 14 * sizeof(uint32_t), m_wg_denoms, warptile_m, 1); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_f16_f32->s, "matmul_f16_f32_s", matmul_f16_f32_len, matmul_f16_f32_data, "main", 3, 14 * sizeof(uint32_t), s_wg_denoms, warptile_s, 1); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_f16_f32->a_l, "matmul_f16_f32_aligned_l", matmul_f16_f32_aligned_len, matmul_f16_f32_aligned_data, "main", 3, 14 * sizeof(uint32_t), l_wg_denoms, warptile_l, l_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_f16_f32->a_m, "matmul_f16_f32_aligned_m", matmul_f16_f32_aligned_len, matmul_f16_f32_aligned_data, "main", 3, 14 * sizeof(uint32_t), m_wg_denoms, warptile_m, m_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_f16_f32->a_s, "matmul_f16_f32_aligned_s", matmul_f16_f32_aligned_len, matmul_f16_f32_aligned_data, "main", 3, 14 * sizeof(uint32_t), s_wg_denoms, warptile_s, s_align); - - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_0]->l, "matmul_q4_0_f32_l", matmul_q4_0_f32_len, matmul_q4_0_f32_data, "main", 3, 14 * sizeof(uint32_t), l_wg_denoms, warptile_mmq_l, l_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_0]->m, "matmul_q4_0_f32_m", matmul_q4_0_f32_len, matmul_q4_0_f32_data, "main", 3, 14 * sizeof(uint32_t), m_wg_denoms, warptile_mmq_m, m_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_0]->s, "matmul_q4_0_f32_s", matmul_q4_0_f32_len, matmul_q4_0_f32_data, "main", 3, 14 * sizeof(uint32_t), s_wg_denoms, warptile_mmq_s, s_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_0]->a_l, "matmul_q4_0_f32_aligned_l", matmul_q4_0_f32_aligned_len, matmul_q4_0_f32_aligned_data, "main", 3, 14 * sizeof(uint32_t), l_wg_denoms, warptile_mmq_l, l_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_0]->a_m, "matmul_q4_0_f32_aligned_m", matmul_q4_0_f32_aligned_len, matmul_q4_0_f32_aligned_data, "main", 3, 14 * sizeof(uint32_t), m_wg_denoms, warptile_mmq_m, m_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_0]->a_s, "matmul_q4_0_f32_aligned_s", matmul_q4_0_f32_aligned_len, matmul_q4_0_f32_aligned_data, "main", 3, 14 * sizeof(uint32_t), s_wg_denoms, warptile_mmq_s, s_align); - - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_1]->l, "matmul_q4_0_f32_l", matmul_q4_1_f32_len, matmul_q4_1_f32_data, "main", 3, 14 * sizeof(uint32_t), l_wg_denoms, warptile_mmq_l, l_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_1]->m, "matmul_q4_0_f32_m", matmul_q4_1_f32_len, matmul_q4_1_f32_data, "main", 3, 14 * sizeof(uint32_t), m_wg_denoms, warptile_mmq_m, m_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_1]->s, "matmul_q4_0_f32_s", matmul_q4_1_f32_len, matmul_q4_1_f32_data, "main", 3, 14 * sizeof(uint32_t), s_wg_denoms, warptile_mmq_s, s_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_1]->a_l, "matmul_q4_0_f32_aligned_l", matmul_q4_1_f32_aligned_len, matmul_q4_1_f32_aligned_data, "main", 3, 14 * sizeof(uint32_t), l_wg_denoms, warptile_mmq_l, l_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_1]->a_m, "matmul_q4_0_f32_aligned_m", matmul_q4_1_f32_aligned_len, matmul_q4_1_f32_aligned_data, "main", 3, 14 * sizeof(uint32_t), m_wg_denoms, warptile_mmq_m, m_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_1]->a_s, "matmul_q4_0_f32_aligned_s", matmul_q4_1_f32_aligned_len, matmul_q4_1_f32_aligned_data, "main", 3, 14 * sizeof(uint32_t), s_wg_denoms, warptile_mmq_s, s_align); - - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_0]->l, "matmul_q5_0_f32_l", matmul_q5_0_f32_len, matmul_q5_0_f32_data, "main", 3, 14 * sizeof(uint32_t), l_wg_denoms, warptile_mmq_l, l_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_0]->m, "matmul_q5_0_f32_m", matmul_q5_0_f32_len, matmul_q5_0_f32_data, "main", 3, 14 * sizeof(uint32_t), m_wg_denoms, warptile_mmq_m, m_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_0]->s, "matmul_q5_0_f32_s", matmul_q5_0_f32_len, matmul_q5_0_f32_data, "main", 3, 14 * sizeof(uint32_t), s_wg_denoms, warptile_mmq_s, s_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_0]->a_l, "matmul_q5_0_f32_aligned_l", matmul_q5_0_f32_aligned_len, matmul_q5_0_f32_aligned_data, "main", 3, 14 * sizeof(uint32_t), l_wg_denoms, warptile_mmq_l, l_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_0]->a_m, "matmul_q5_0_f32_aligned_m", matmul_q5_0_f32_aligned_len, matmul_q5_0_f32_aligned_data, "main", 3, 14 * sizeof(uint32_t), m_wg_denoms, warptile_mmq_m, m_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_0]->a_s, "matmul_q5_0_f32_aligned_s", matmul_q5_0_f32_aligned_len, matmul_q5_0_f32_aligned_data, "main", 3, 14 * sizeof(uint32_t), s_wg_denoms, warptile_mmq_s, s_align); - - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_1]->l, "matmul_q5_1_f32_l", matmul_q5_1_f32_len, matmul_q5_1_f32_data, "main", 3, 14 * sizeof(uint32_t), l_wg_denoms, warptile_mmq_l, l_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_1]->m, "matmul_q5_1_f32_m", matmul_q5_1_f32_len, matmul_q5_1_f32_data, "main", 3, 14 * sizeof(uint32_t), m_wg_denoms, warptile_mmq_m, m_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_1]->s, "matmul_q5_1_f32_s", matmul_q5_1_f32_len, matmul_q5_1_f32_data, "main", 3, 14 * sizeof(uint32_t), s_wg_denoms, warptile_mmq_s, s_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_1]->a_l, "matmul_q5_1_f32_aligned_l", matmul_q5_1_f32_aligned_len, matmul_q5_1_f32_aligned_data, "main", 3, 14 * sizeof(uint32_t), l_wg_denoms, warptile_mmq_l, l_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_1]->a_m, "matmul_q5_1_f32_aligned_m", matmul_q5_1_f32_aligned_len, matmul_q5_1_f32_aligned_data, "main", 3, 14 * sizeof(uint32_t), m_wg_denoms, warptile_mmq_m, m_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_1]->a_s, "matmul_q5_1_f32_aligned_s", matmul_q5_1_f32_aligned_len, matmul_q5_1_f32_aligned_data, "main", 3, 14 * sizeof(uint32_t), s_wg_denoms, warptile_mmq_s, s_align); - - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q8_0]->l, "matmul_q8_0_f32_l", matmul_q8_0_f32_len, matmul_q8_0_f32_data, "main", 3, 14 * sizeof(uint32_t), l_wg_denoms, warptile_mmq_l, l_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q8_0]->m, "matmul_q8_0_f32_m", matmul_q8_0_f32_len, matmul_q8_0_f32_data, "main", 3, 14 * sizeof(uint32_t), m_wg_denoms, warptile_mmq_m, m_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q8_0]->s, "matmul_q8_0_f32_s", matmul_q8_0_f32_len, matmul_q8_0_f32_data, "main", 3, 14 * sizeof(uint32_t), s_wg_denoms, warptile_mmq_s, s_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q8_0]->a_l, "matmul_q8_0_f32_aligned_l", matmul_q8_0_f32_aligned_len, matmul_q8_0_f32_aligned_data, "main", 3, 14 * sizeof(uint32_t), l_wg_denoms, warptile_mmq_l, l_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q8_0]->a_m, "matmul_q8_0_f32_aligned_m", matmul_q8_0_f32_aligned_len, matmul_q8_0_f32_aligned_data, "main", 3, 14 * sizeof(uint32_t), m_wg_denoms, warptile_mmq_m, m_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q8_0]->a_s, "matmul_q8_0_f32_aligned_s", matmul_q8_0_f32_aligned_len, matmul_q8_0_f32_aligned_data, "main", 3, 14 * sizeof(uint32_t), s_wg_denoms, warptile_mmq_s, s_align); - - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q2_K]->l, "matmul_q2_k_f32_l", matmul_q2_k_f32_len, matmul_q2_k_f32_data, "main", 3, 14 * sizeof(uint32_t), l_wg_denoms, warptile_mmq_l, l_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q2_K]->m, "matmul_q2_k_f32_m", matmul_q2_k_f32_len, matmul_q2_k_f32_data, "main", 3, 14 * sizeof(uint32_t), m_wg_denoms, warptile_mmq_m, m_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q2_K]->s, "matmul_q2_k_f32_s", matmul_q2_k_f32_len, matmul_q2_k_f32_data, "main", 3, 14 * sizeof(uint32_t), s_wg_denoms, warptile_mmq_s, s_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q2_K]->a_l, "matmul_q2_k_f32_aligned_l", matmul_q2_k_f32_aligned_len, matmul_q2_k_f32_aligned_data, "main", 3, 14 * sizeof(uint32_t), l_wg_denoms, warptile_mmq_l, l_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q2_K]->a_m, "matmul_q2_k_f32_aligned_m", matmul_q2_k_f32_aligned_len, matmul_q2_k_f32_aligned_data, "main", 3, 14 * sizeof(uint32_t), m_wg_denoms, warptile_mmq_m, m_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q2_K]->a_s, "matmul_q2_k_f32_aligned_s", matmul_q2_k_f32_aligned_len, matmul_q2_k_f32_aligned_data, "main", 3, 14 * sizeof(uint32_t), s_wg_denoms, warptile_mmq_s, s_align); - - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q3_K]->l, "matmul_q3_k_f32_l", matmul_q3_k_f32_len, matmul_q3_k_f32_data, "main", 3, 14 * sizeof(uint32_t), l_wg_denoms, warptile_mmq_l, l_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q3_K]->m, "matmul_q3_k_f32_m", matmul_q3_k_f32_len, matmul_q3_k_f32_data, "main", 3, 14 * sizeof(uint32_t), m_wg_denoms, warptile_mmq_m, m_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q3_K]->s, "matmul_q3_k_f32_s", matmul_q3_k_f32_len, matmul_q3_k_f32_data, "main", 3, 14 * sizeof(uint32_t), s_wg_denoms, warptile_mmq_s, s_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q3_K]->a_l, "matmul_q3_k_f32_aligned_l", matmul_q3_k_f32_aligned_len, matmul_q3_k_f32_aligned_data, "main", 3, 14 * sizeof(uint32_t), l_wg_denoms, warptile_mmq_l, l_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q3_K]->a_m, "matmul_q3_k_f32_aligned_m", matmul_q3_k_f32_aligned_len, matmul_q3_k_f32_aligned_data, "main", 3, 14 * sizeof(uint32_t), m_wg_denoms, warptile_mmq_m, m_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q3_K]->a_s, "matmul_q3_k_f32_aligned_s", matmul_q3_k_f32_aligned_len, matmul_q3_k_f32_aligned_data, "main", 3, 14 * sizeof(uint32_t), s_wg_denoms, warptile_mmq_s, s_align); - - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_K]->l, "matmul_q4_k_f32_l", matmul_q4_k_f32_len, matmul_q4_k_f32_data, "main", 3, 14 * sizeof(uint32_t), l_wg_denoms, warptile_mmq_l, l_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_K]->m, "matmul_q4_k_f32_m", matmul_q4_k_f32_len, matmul_q4_k_f32_data, "main", 3, 14 * sizeof(uint32_t), m_wg_denoms, warptile_mmq_m, m_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_K]->s, "matmul_q4_k_f32_s", matmul_q4_k_f32_len, matmul_q4_k_f32_data, "main", 3, 14 * sizeof(uint32_t), s_wg_denoms, warptile_mmq_s, s_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_K]->a_l, "matmul_q4_k_f32_aligned_l", matmul_q4_k_f32_aligned_len, matmul_q4_k_f32_aligned_data, "main", 3, 14 * sizeof(uint32_t), l_wg_denoms, warptile_mmq_l, l_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_K]->a_m, "matmul_q4_k_f32_aligned_m", matmul_q4_k_f32_aligned_len, matmul_q4_k_f32_aligned_data, "main", 3, 14 * sizeof(uint32_t), m_wg_denoms, warptile_mmq_m, m_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_K]->a_s, "matmul_q4_k_f32_aligned_s", matmul_q4_k_f32_aligned_len, matmul_q4_k_f32_aligned_data, "main", 3, 14 * sizeof(uint32_t), s_wg_denoms, warptile_mmq_s, s_align); - - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_K]->l, "matmul_q5_k_f32_l", matmul_q5_k_f32_len, matmul_q5_k_f32_data, "main", 3, 14 * sizeof(uint32_t), l_wg_denoms, warptile_mmq_l, l_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_K]->m, "matmul_q5_k_f32_m", matmul_q5_k_f32_len, matmul_q5_k_f32_data, "main", 3, 14 * sizeof(uint32_t), m_wg_denoms, warptile_mmq_m, m_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_K]->s, "matmul_q5_k_f32_s", matmul_q5_k_f32_len, matmul_q5_k_f32_data, "main", 3, 14 * sizeof(uint32_t), s_wg_denoms, warptile_mmq_s, s_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_K]->a_l, "matmul_q5_k_f32_aligned_l", matmul_q5_k_f32_aligned_len, matmul_q5_k_f32_aligned_data, "main", 3, 14 * sizeof(uint32_t), l_wg_denoms, warptile_mmq_l, l_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_K]->a_m, "matmul_q5_k_f32_aligned_m", matmul_q5_k_f32_aligned_len, matmul_q5_k_f32_aligned_data, "main", 3, 14 * sizeof(uint32_t), m_wg_denoms, warptile_mmq_m, m_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_K]->a_s, "matmul_q5_k_f32_aligned_s", matmul_q5_k_f32_aligned_len, matmul_q5_k_f32_aligned_data, "main", 3, 14 * sizeof(uint32_t), s_wg_denoms, warptile_mmq_s, s_align); - - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q6_K]->l, "matmul_q6_k_f32_l", matmul_q6_k_f32_len, matmul_q6_k_f32_data, "main", 3, 14 * sizeof(uint32_t), l_wg_denoms, warptile_mmq_l, l_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q6_K]->m, "matmul_q6_k_f32_m", matmul_q6_k_f32_len, matmul_q6_k_f32_data, "main", 3, 14 * sizeof(uint32_t), m_wg_denoms, warptile_mmq_m, m_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q6_K]->s, "matmul_q6_k_f32_s", matmul_q6_k_f32_len, matmul_q6_k_f32_data, "main", 3, 14 * sizeof(uint32_t), s_wg_denoms, warptile_mmq_s, s_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q6_K]->a_l, "matmul_q6_k_f32_aligned_l", matmul_q6_k_f32_aligned_len, matmul_q6_k_f32_aligned_data, "main", 3, 14 * sizeof(uint32_t), l_wg_denoms, warptile_mmq_l, l_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q6_K]->a_m, "matmul_q6_k_f32_aligned_m", matmul_q6_k_f32_aligned_len, matmul_q6_k_f32_aligned_data, "main", 3, 14 * sizeof(uint32_t), m_wg_denoms, warptile_mmq_m, m_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q6_K]->a_s, "matmul_q6_k_f32_aligned_s", matmul_q6_k_f32_aligned_len, matmul_q6_k_f32_aligned_data, "main", 3, 14 * sizeof(uint32_t), s_wg_denoms, warptile_mmq_s, s_align); - } else { - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_f32->l, "matmul_f32_l", matmul_f32_fp32_len, matmul_f32_fp32_data, "main", 3, 14 * sizeof(uint32_t), l_wg_denoms, warptile_l, 1); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_f32->m, "matmul_f32_m", matmul_f32_fp32_len, matmul_f32_fp32_data, "main", 3, 14 * sizeof(uint32_t), m_wg_denoms, warptile_m, 1); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_f32->s, "matmul_f32_s", matmul_f32_fp32_len, matmul_f32_fp32_data, "main", 3, 14 * sizeof(uint32_t), s_wg_denoms, warptile_s, 1); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_f32->a_l, "matmul_f32_aligned_l", matmul_f32_aligned_fp32_len, matmul_f32_aligned_fp32_data, "main", 3, 14 * sizeof(uint32_t), l_wg_denoms, warptile_l, l_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_f32->a_m, "matmul_f32_aligned_m", matmul_f32_aligned_fp32_len, matmul_f32_aligned_fp32_data, "main", 3, 14 * sizeof(uint32_t), m_wg_denoms, warptile_m, m_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_f32->a_s, "matmul_f32_aligned_s", matmul_f32_aligned_fp32_len, matmul_f32_aligned_fp32_data, "main", 3, 14 * sizeof(uint32_t), s_wg_denoms, warptile_s, s_align); - - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_f16->l, "matmul_f16_l", matmul_f16_fp32_len, matmul_f16_fp32_data, "main", 3, 14 * sizeof(uint32_t), l_wg_denoms, warptile_l, 1); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_f16->m, "matmul_f16_m", matmul_f16_fp32_len, matmul_f16_fp32_data, "main", 3, 14 * sizeof(uint32_t), m_wg_denoms, warptile_m, 1); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_f16->s, "matmul_f16_s", matmul_f16_fp32_len, matmul_f16_fp32_data, "main", 3, 14 * sizeof(uint32_t), s_wg_denoms, warptile_s, 1); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_f16->a_l, "matmul_f16_aligned_l", matmul_f16_aligned_fp32_len, matmul_f16_aligned_fp32_data, "main", 3, 14 * sizeof(uint32_t), l_wg_denoms, warptile_l, l_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_f16->a_m, "matmul_f16_aligned_m", matmul_f16_aligned_fp32_len, matmul_f16_aligned_fp32_data, "main", 3, 14 * sizeof(uint32_t), m_wg_denoms, warptile_m, m_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_f16->a_s, "matmul_f16_aligned_s", matmul_f16_aligned_fp32_len, matmul_f16_aligned_fp32_data, "main", 3, 14 * sizeof(uint32_t), s_wg_denoms, warptile_s, s_align); - - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_f16_f32->l, "matmul_f16_f32_l", matmul_f16_f32_fp32_len, matmul_f16_f32_fp32_data, "main", 3, 14 * sizeof(uint32_t), l_wg_denoms, warptile_l, 1); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_f16_f32->m, "matmul_f16_f32_m", matmul_f16_f32_fp32_len, matmul_f16_f32_fp32_data, "main", 3, 14 * sizeof(uint32_t), m_wg_denoms, warptile_m, 1); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_f16_f32->s, "matmul_f16_f32_s", matmul_f16_f32_fp32_len, matmul_f16_f32_fp32_data, "main", 3, 14 * sizeof(uint32_t), s_wg_denoms, warptile_s, 1); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_f16_f32->a_l, "matmul_f16_f32_aligned_l", matmul_f16_f32_aligned_fp32_len, matmul_f16_f32_aligned_fp32_data, "main", 3, 14 * sizeof(uint32_t), l_wg_denoms, warptile_l, l_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_f16_f32->a_m, "matmul_f16_f32_aligned_m", matmul_f16_f32_aligned_fp32_len, matmul_f16_f32_aligned_fp32_data, "main", 3, 14 * sizeof(uint32_t), m_wg_denoms, warptile_m, m_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_f16_f32->a_s, "matmul_f16_f32_aligned_s", matmul_f16_f32_aligned_fp32_len, matmul_f16_f32_aligned_fp32_data, "main", 3, 14 * sizeof(uint32_t), s_wg_denoms, warptile_s, s_align); - - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_0]->l, "matmul_q4_0_f32_l", matmul_q4_0_f32_fp32_len, matmul_q4_0_f32_fp32_data, "main", 3, 14 * sizeof(uint32_t), l_wg_denoms, warptile_mmq_l, l_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_0]->m, "matmul_q4_0_f32_m", matmul_q4_0_f32_fp32_len, matmul_q4_0_f32_fp32_data, "main", 3, 14 * sizeof(uint32_t), m_wg_denoms, warptile_mmq_m, m_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_0]->s, "matmul_q4_0_f32_s", matmul_q4_0_f32_fp32_len, matmul_q4_0_f32_fp32_data, "main", 3, 14 * sizeof(uint32_t), s_wg_denoms, warptile_mmq_s, s_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_0]->a_l, "matmul_q4_0_f32_aligned_l", matmul_q4_0_f32_aligned_fp32_len, matmul_q4_0_f32_aligned_fp32_data, "main", 3, 14 * sizeof(uint32_t), l_wg_denoms, warptile_mmq_l, l_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_0]->a_m, "matmul_q4_0_f32_aligned_m", matmul_q4_0_f32_aligned_fp32_len, matmul_q4_0_f32_aligned_fp32_data, "main", 3, 14 * sizeof(uint32_t), m_wg_denoms, warptile_mmq_m, m_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_0]->a_s, "matmul_q4_0_f32_aligned_s", matmul_q4_0_f32_aligned_fp32_len, matmul_q4_0_f32_aligned_fp32_data, "main", 3, 14 * sizeof(uint32_t), s_wg_denoms, warptile_mmq_s, s_align); - - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_1]->l, "matmul_q4_1_f32_l", matmul_q4_1_f32_fp32_len, matmul_q4_1_f32_fp32_data, "main", 3, 14 * sizeof(uint32_t), l_wg_denoms, warptile_mmq_l, l_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_1]->m, "matmul_q4_1_f32_m", matmul_q4_1_f32_fp32_len, matmul_q4_1_f32_fp32_data, "main", 3, 14 * sizeof(uint32_t), m_wg_denoms, warptile_mmq_m, m_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_1]->s, "matmul_q4_1_f32_s", matmul_q4_1_f32_fp32_len, matmul_q4_1_f32_fp32_data, "main", 3, 14 * sizeof(uint32_t), s_wg_denoms, warptile_mmq_s, s_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_1]->a_l, "matmul_q4_1_f32_aligned_l", matmul_q4_1_f32_aligned_fp32_len, matmul_q4_1_f32_aligned_fp32_data, "main", 3, 14 * sizeof(uint32_t), l_wg_denoms, warptile_mmq_l, l_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_1]->a_m, "matmul_q4_1_f32_aligned_m", matmul_q4_1_f32_aligned_fp32_len, matmul_q4_1_f32_aligned_fp32_data, "main", 3, 14 * sizeof(uint32_t), m_wg_denoms, warptile_mmq_m, m_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_1]->a_s, "matmul_q4_1_f32_aligned_s", matmul_q4_1_f32_aligned_fp32_len, matmul_q4_1_f32_aligned_fp32_data, "main", 3, 14 * sizeof(uint32_t), s_wg_denoms, warptile_mmq_s, s_align); - - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_0]->l, "matmul_q5_0_f32_l", matmul_q5_0_f32_fp32_len, matmul_q5_0_f32_fp32_data, "main", 3, 14 * sizeof(uint32_t), l_wg_denoms, warptile_mmq_l, l_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_0]->m, "matmul_q5_0_f32_m", matmul_q5_0_f32_fp32_len, matmul_q5_0_f32_fp32_data, "main", 3, 14 * sizeof(uint32_t), m_wg_denoms, warptile_mmq_m, m_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_0]->s, "matmul_q5_0_f32_s", matmul_q5_0_f32_fp32_len, matmul_q5_0_f32_fp32_data, "main", 3, 14 * sizeof(uint32_t), s_wg_denoms, warptile_mmq_s, s_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_0]->a_l, "matmul_q5_0_f32_aligned_l", matmul_q5_0_f32_aligned_fp32_len, matmul_q5_0_f32_aligned_fp32_data, "main", 3, 14 * sizeof(uint32_t), l_wg_denoms, warptile_mmq_l, l_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_0]->a_m, "matmul_q5_0_f32_aligned_m", matmul_q5_0_f32_aligned_fp32_len, matmul_q5_0_f32_aligned_fp32_data, "main", 3, 14 * sizeof(uint32_t), m_wg_denoms, warptile_mmq_m, m_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_0]->a_s, "matmul_q5_0_f32_aligned_s", matmul_q5_0_f32_aligned_fp32_len, matmul_q5_0_f32_aligned_fp32_data, "main", 3, 14 * sizeof(uint32_t), s_wg_denoms, warptile_mmq_s, s_align); - - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_1]->l, "matmul_q5_1_f32_l", matmul_q5_1_f32_fp32_len, matmul_q5_1_f32_fp32_data, "main", 3, 14 * sizeof(uint32_t), l_wg_denoms, warptile_mmq_l, l_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_1]->m, "matmul_q5_1_f32_m", matmul_q5_1_f32_fp32_len, matmul_q5_1_f32_fp32_data, "main", 3, 14 * sizeof(uint32_t), m_wg_denoms, warptile_mmq_m, m_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_1]->s, "matmul_q5_1_f32_s", matmul_q5_1_f32_fp32_len, matmul_q5_1_f32_fp32_data, "main", 3, 14 * sizeof(uint32_t), s_wg_denoms, warptile_mmq_s, s_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_1]->a_l, "matmul_q5_1_f32_aligned_l", matmul_q5_1_f32_aligned_fp32_len, matmul_q5_1_f32_aligned_fp32_data, "main", 3, 14 * sizeof(uint32_t), l_wg_denoms, warptile_mmq_l, l_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_1]->a_m, "matmul_q5_1_f32_aligned_m", matmul_q5_1_f32_aligned_fp32_len, matmul_q5_1_f32_aligned_fp32_data, "main", 3, 14 * sizeof(uint32_t), m_wg_denoms, warptile_mmq_m, m_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_1]->a_s, "matmul_q5_1_f32_aligned_s", matmul_q5_1_f32_aligned_fp32_len, matmul_q5_1_f32_aligned_fp32_data, "main", 3, 14 * sizeof(uint32_t), s_wg_denoms, warptile_mmq_s, s_align); - - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q8_0]->l, "matmul_q8_0_f32_l", matmul_q8_0_f32_fp32_len, matmul_q8_0_f32_fp32_data, "main", 3, 14 * sizeof(uint32_t), l_wg_denoms, warptile_mmq_l, l_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q8_0]->m, "matmul_q8_0_f32_m", matmul_q8_0_f32_fp32_len, matmul_q8_0_f32_fp32_data, "main", 3, 14 * sizeof(uint32_t), m_wg_denoms, warptile_mmq_m, m_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q8_0]->s, "matmul_q8_0_f32_s", matmul_q8_0_f32_fp32_len, matmul_q8_0_f32_fp32_data, "main", 3, 14 * sizeof(uint32_t), s_wg_denoms, warptile_mmq_s, s_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q8_0]->a_l, "matmul_q8_0_f32_aligned_l", matmul_q8_0_f32_aligned_fp32_len, matmul_q8_0_f32_aligned_fp32_data, "main", 3, 14 * sizeof(uint32_t), l_wg_denoms, warptile_mmq_l, l_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q8_0]->a_m, "matmul_q8_0_f32_aligned_m", matmul_q8_0_f32_aligned_fp32_len, matmul_q8_0_f32_aligned_fp32_data, "main", 3, 14 * sizeof(uint32_t), m_wg_denoms, warptile_mmq_m, m_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q8_0]->a_s, "matmul_q8_0_f32_aligned_s", matmul_q8_0_f32_aligned_fp32_len, matmul_q8_0_f32_aligned_fp32_data, "main", 3, 14 * sizeof(uint32_t), s_wg_denoms, warptile_mmq_s, s_align); - - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q2_K]->l, "matmul_q2_k_f32_l", matmul_q2_k_f32_fp32_len, matmul_q2_k_f32_fp32_data, "main", 3, 14 * sizeof(uint32_t), l_wg_denoms, warptile_mmq_l, l_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q2_K]->m, "matmul_q2_k_f32_m", matmul_q2_k_f32_fp32_len, matmul_q2_k_f32_fp32_data, "main", 3, 14 * sizeof(uint32_t), m_wg_denoms, warptile_mmq_m, m_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q2_K]->s, "matmul_q2_k_f32_s", matmul_q2_k_f32_fp32_len, matmul_q2_k_f32_fp32_data, "main", 3, 14 * sizeof(uint32_t), s_wg_denoms, warptile_mmq_s, s_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q2_K]->a_l, "matmul_q2_k_f32_aligned_l", matmul_q2_k_f32_aligned_fp32_len, matmul_q2_k_f32_aligned_fp32_data, "main", 3, 14 * sizeof(uint32_t), l_wg_denoms, warptile_mmq_l, l_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q2_K]->a_m, "matmul_q2_k_f32_aligned_m", matmul_q2_k_f32_aligned_fp32_len, matmul_q2_k_f32_aligned_fp32_data, "main", 3, 14 * sizeof(uint32_t), m_wg_denoms, warptile_mmq_m, m_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q2_K]->a_s, "matmul_q2_k_f32_aligned_s", matmul_q2_k_f32_aligned_fp32_len, matmul_q2_k_f32_aligned_fp32_data, "main", 3, 14 * sizeof(uint32_t), s_wg_denoms, warptile_mmq_s, s_align); - - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q3_K]->l, "matmul_q3_k_f32_l", matmul_q3_k_f32_fp32_len, matmul_q3_k_f32_fp32_data, "main", 3, 14 * sizeof(uint32_t), l_wg_denoms, warptile_mmq_l, l_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q3_K]->m, "matmul_q3_k_f32_m", matmul_q3_k_f32_fp32_len, matmul_q3_k_f32_fp32_data, "main", 3, 14 * sizeof(uint32_t), m_wg_denoms, warptile_mmq_m, m_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q3_K]->s, "matmul_q3_k_f32_s", matmul_q3_k_f32_fp32_len, matmul_q3_k_f32_fp32_data, "main", 3, 14 * sizeof(uint32_t), s_wg_denoms, warptile_mmq_s, s_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q3_K]->a_l, "matmul_q3_k_f32_aligned_l", matmul_q3_k_f32_aligned_fp32_len, matmul_q3_k_f32_aligned_fp32_data, "main", 3, 14 * sizeof(uint32_t), l_wg_denoms, warptile_mmq_l, l_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q3_K]->a_m, "matmul_q3_k_f32_aligned_m", matmul_q3_k_f32_aligned_fp32_len, matmul_q3_k_f32_aligned_fp32_data, "main", 3, 14 * sizeof(uint32_t), m_wg_denoms, warptile_mmq_m, m_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q3_K]->a_s, "matmul_q3_k_f32_aligned_s", matmul_q3_k_f32_aligned_fp32_len, matmul_q3_k_f32_aligned_fp32_data, "main", 3, 14 * sizeof(uint32_t), s_wg_denoms, warptile_mmq_s, s_align); - - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_K]->l, "matmul_q4_k_f32_l", matmul_q4_k_f32_fp32_len, matmul_q4_k_f32_fp32_data, "main", 3, 14 * sizeof(uint32_t), l_wg_denoms, warptile_mmq_l, l_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_K]->m, "matmul_q4_k_f32_m", matmul_q4_k_f32_fp32_len, matmul_q4_k_f32_fp32_data, "main", 3, 14 * sizeof(uint32_t), m_wg_denoms, warptile_mmq_m, m_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_K]->s, "matmul_q4_k_f32_s", matmul_q4_k_f32_fp32_len, matmul_q4_k_f32_fp32_data, "main", 3, 14 * sizeof(uint32_t), s_wg_denoms, warptile_mmq_s, s_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_K]->a_l, "matmul_q4_k_f32_aligned_l", matmul_q4_k_f32_aligned_fp32_len, matmul_q4_k_f32_aligned_fp32_data, "main", 3, 14 * sizeof(uint32_t), l_wg_denoms, warptile_mmq_l, l_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_K]->a_m, "matmul_q4_k_f32_aligned_m", matmul_q4_k_f32_aligned_fp32_len, matmul_q4_k_f32_aligned_fp32_data, "main", 3, 14 * sizeof(uint32_t), m_wg_denoms, warptile_mmq_m, m_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_K]->a_s, "matmul_q4_k_f32_aligned_s", matmul_q4_k_f32_aligned_fp32_len, matmul_q4_k_f32_aligned_fp32_data, "main", 3, 14 * sizeof(uint32_t), s_wg_denoms, warptile_mmq_s, s_align); - - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_K]->l, "matmul_q5_k_f32_l", matmul_q5_k_f32_fp32_len, matmul_q5_k_f32_fp32_data, "main", 3, 14 * sizeof(uint32_t), l_wg_denoms, warptile_mmq_l, l_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_K]->m, "matmul_q5_k_f32_m", matmul_q5_k_f32_fp32_len, matmul_q5_k_f32_fp32_data, "main", 3, 14 * sizeof(uint32_t), m_wg_denoms, warptile_mmq_m, m_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_K]->s, "matmul_q5_k_f32_s", matmul_q5_k_f32_fp32_len, matmul_q5_k_f32_fp32_data, "main", 3, 14 * sizeof(uint32_t), s_wg_denoms, warptile_mmq_s, s_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_K]->a_l, "matmul_q5_k_f32_aligned_l", matmul_q5_k_f32_aligned_fp32_len, matmul_q5_k_f32_aligned_fp32_data, "main", 3, 14 * sizeof(uint32_t), l_wg_denoms, warptile_mmq_l, l_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_K]->a_m, "matmul_q5_k_f32_aligned_m", matmul_q5_k_f32_aligned_fp32_len, matmul_q5_k_f32_aligned_fp32_data, "main", 3, 14 * sizeof(uint32_t), m_wg_denoms, warptile_mmq_m, m_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_K]->a_s, "matmul_q5_k_f32_aligned_s", matmul_q5_k_f32_aligned_fp32_len, matmul_q5_k_f32_aligned_fp32_data, "main", 3, 14 * sizeof(uint32_t), s_wg_denoms, warptile_mmq_s, s_align); - - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q6_K]->l, "matmul_q6_k_f32_l", matmul_q6_k_f32_fp32_len, matmul_q6_k_f32_fp32_data, "main", 3, 14 * sizeof(uint32_t), l_wg_denoms, warptile_mmq_l, l_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q6_K]->m, "matmul_q6_k_f32_m", matmul_q6_k_f32_fp32_len, matmul_q6_k_f32_fp32_data, "main", 3, 14 * sizeof(uint32_t), m_wg_denoms, warptile_mmq_m, m_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q6_K]->s, "matmul_q6_k_f32_s", matmul_q6_k_f32_fp32_len, matmul_q6_k_f32_fp32_data, "main", 3, 14 * sizeof(uint32_t), s_wg_denoms, warptile_mmq_s, s_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q6_K]->a_l, "matmul_q6_k_f32_aligned_l", matmul_q6_k_f32_aligned_fp32_len, matmul_q6_k_f32_aligned_fp32_data, "main", 3, 14 * sizeof(uint32_t), l_wg_denoms, warptile_mmq_l, l_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q6_K]->a_m, "matmul_q6_k_f32_aligned_m", matmul_q6_k_f32_aligned_fp32_len, matmul_q6_k_f32_aligned_fp32_data, "main", 3, 14 * sizeof(uint32_t), m_wg_denoms, warptile_mmq_m, m_align); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q6_K]->a_s, "matmul_q6_k_f32_aligned_s", matmul_q6_k_f32_aligned_fp32_len, matmul_q6_k_f32_aligned_fp32_data, "main", 3, 14 * sizeof(uint32_t), s_wg_denoms, warptile_mmq_s, s_align); - } - - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_vec_f32[GGML_TYPE_F16 ], "mul_mat_vec_f16_f32", mul_mat_vec_f16_f32_len, mul_mat_vec_f16_f32_data, "main", 3, 3 * sizeof(uint32_t), {1, 1, 1}, { device->subgroup_size }, 1); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_vec_f32[GGML_TYPE_Q4_0], "mul_mat_vec_q4_0_f32", mul_mat_vec_q4_0_f32_len, mul_mat_vec_q4_0_f32_data, "main", 3, 3 * sizeof(uint32_t), {1, 1, 1}, { device->subgroup_size }, 1); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_vec_f32[GGML_TYPE_Q4_1], "mul_mat_vec_q4_1_f32", mul_mat_vec_q4_1_f32_len, mul_mat_vec_q4_1_f32_data, "main", 3, 3 * sizeof(uint32_t), {1, 1, 1}, { device->subgroup_size }, 1); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_vec_f32[GGML_TYPE_Q5_0], "mul_mat_vec_q5_0_f32", mul_mat_vec_q5_0_f32_len, mul_mat_vec_q5_0_f32_data, "main", 3, 3 * sizeof(uint32_t), {1, 1, 1}, { device->subgroup_size }, 1); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_vec_f32[GGML_TYPE_Q5_1], "mul_mat_vec_q5_1_f32", mul_mat_vec_q5_1_f32_len, mul_mat_vec_q5_1_f32_data, "main", 3, 3 * sizeof(uint32_t), {1, 1, 1}, { device->subgroup_size }, 1); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_vec_f32[GGML_TYPE_Q8_0], "mul_mat_vec_q8_0_f32", mul_mat_vec_q8_0_f32_len, mul_mat_vec_q8_0_f32_data, "main", 3, 3 * sizeof(uint32_t), {1, 1, 1}, { device->subgroup_size }, 1); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_vec_f32[GGML_TYPE_Q2_K], "mul_mat_vec_q2_K_f32", mul_mat_vec_q2_K_f32_len, mul_mat_vec_q2_K_f32_data, "main", 3, 3 * sizeof(uint32_t), {1, 1, 1}, { device->subgroup_size }, 1); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_vec_f32[GGML_TYPE_Q3_K], "mul_mat_vec_q3_K_f32", mul_mat_vec_q3_K_f32_len, mul_mat_vec_q3_K_f32_data, "main", 3, 3 * sizeof(uint32_t), {1, 1, 1}, { device->subgroup_size }, 1); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_vec_f32[GGML_TYPE_Q4_K], "mul_mat_vec_q4_K_f32", mul_mat_vec_q4_K_f32_len, mul_mat_vec_q4_K_f32_data, "main", 3, 3 * sizeof(uint32_t), {1, 1, 1}, { device->subgroup_size }, 1); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_vec_f32[GGML_TYPE_Q5_K], "mul_mat_vec_q5_K_f32", mul_mat_vec_q5_K_f32_len, mul_mat_vec_q5_K_f32_data, "main", 3, 3 * sizeof(uint32_t), {1, 1, 1}, { device->subgroup_size }, 1); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_vec_f32[GGML_TYPE_Q6_K], "mul_mat_vec_q6_K_f32", mul_mat_vec_q6_K_f32_len, mul_mat_vec_q6_K_f32_data, "main", 3, 3 * sizeof(uint32_t), {1, 1, 1}, { device->subgroup_size }, 1); - - // dequant shaders - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant[GGML_TYPE_F32 ], "f32_to_f16", dequant_f32_len, dequant_f32_data, "main", 2, 5 * sizeof(uint32_t), {256 * 16, 1, 1}, {}, 1); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant[GGML_TYPE_Q4_0], "dequant_q4_0", dequant_q4_0_len, dequant_q4_0_data, "main", 2, 5 * sizeof(uint32_t), {256 * 16, 1, 1}, {}, 1); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant[GGML_TYPE_Q4_1], "dequant_q4_1", dequant_q4_1_len, dequant_q4_1_data, "main", 2, 5 * sizeof(uint32_t), {256 * 16, 1, 1}, {}, 1); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant[GGML_TYPE_Q5_0], "dequant_q5_0", dequant_q5_0_len, dequant_q5_0_data, "main", 2, 5 * sizeof(uint32_t), {256 * 16, 1, 1}, {}, 1); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant[GGML_TYPE_Q5_1], "dequant_q5_1", dequant_q5_1_len, dequant_q5_1_data, "main", 2, 5 * sizeof(uint32_t), {256 * 16, 1, 1}, {}, 1); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant[GGML_TYPE_Q8_0], "dequant_q8_0", dequant_q8_0_len, dequant_q8_0_data, "main", 2, 5 * sizeof(uint32_t), {256 * 16, 1, 1}, {}, 1); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant[GGML_TYPE_Q2_K], "dequant_q2_K", dequant_q2_K_len, dequant_q2_K_data, "main", 2, 5 * sizeof(uint32_t), {256 * 64, 1, 1}, {}, 1); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant[GGML_TYPE_Q3_K], "dequant_q3_K", dequant_q3_K_len, dequant_q3_K_data, "main", 2, 5 * sizeof(uint32_t), {256 * 64, 1, 1}, {}, 1); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant[GGML_TYPE_Q4_K], "dequant_q4_K", dequant_q4_K_len, dequant_q4_K_data, "main", 2, 5 * sizeof(uint32_t), {256 * 32, 1, 1}, {}, 1); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant[GGML_TYPE_Q5_K], "dequant_q5_K", dequant_q5_K_len, dequant_q5_K_data, "main", 2, 5 * sizeof(uint32_t), {256 * 64, 1, 1}, {}, 1); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant[GGML_TYPE_Q6_K], "dequant_q6_K", dequant_q6_K_len, dequant_q6_K_data, "main", 2, 5 * sizeof(uint32_t), {256 * 64, 1, 1}, {}, 1); - - // get_rows - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_get_rows[GGML_TYPE_F32 ], "get_rows_f32", get_rows_f32_len, get_rows_f32_data, "main", 3, sizeof(vk_op_binary_push_constants), { 512, 1, 1}, {}, 1); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_get_rows[GGML_TYPE_F16 ], "get_rows_f16", get_rows_f16_len, get_rows_f16_data, "main", 3, sizeof(vk_op_binary_push_constants), { 512, 1, 1}, {}, 1); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_get_rows[GGML_TYPE_Q4_0], "get_rows_q4_0", get_rows_q4_0_len, get_rows_q4_0_data, "main", 3, sizeof(vk_op_binary_push_constants), {1024, 1, 1}, {}, 1); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_get_rows[GGML_TYPE_Q4_1], "get_rows_q4_1", get_rows_q4_1_len, get_rows_q4_1_data, "main", 3, sizeof(vk_op_binary_push_constants), {1024, 1, 1}, {}, 1); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_get_rows[GGML_TYPE_Q5_0], "get_rows_q5_0", get_rows_q5_0_len, get_rows_q5_0_data, "main", 3, sizeof(vk_op_binary_push_constants), {1024, 1, 1}, {}, 1); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_get_rows[GGML_TYPE_Q5_1], "get_rows_q5_1", get_rows_q5_1_len, get_rows_q5_1_data, "main", 3, sizeof(vk_op_binary_push_constants), {1024, 1, 1}, {}, 1); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_get_rows[GGML_TYPE_Q8_0], "get_rows_q8_0", get_rows_q8_0_len, get_rows_q8_0_data, "main", 3, sizeof(vk_op_binary_push_constants), {1024, 1, 1}, {}, 1); - - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_get_rows_f32[GGML_TYPE_F32 ], "get_rows_f32_f32", get_rows_f32_f32_len, get_rows_f32_f32_data, "main", 3, sizeof(vk_op_binary_push_constants), { 512, 1, 1}, {}, 1); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_get_rows_f32[GGML_TYPE_F16 ], "get_rows_f16_f32", get_rows_f16_f32_len, get_rows_f16_f32_data, "main", 3, sizeof(vk_op_binary_push_constants), { 512, 1, 1}, {}, 1); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_get_rows_f32[GGML_TYPE_Q4_0], "get_rows_q4_0_f32", get_rows_q4_0_f32_len, get_rows_q4_0_f32_data, "main", 3, sizeof(vk_op_binary_push_constants), {1024, 1, 1}, {}, 1); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_get_rows_f32[GGML_TYPE_Q4_1], "get_rows_q4_1_f32", get_rows_q4_1_f32_len, get_rows_q4_1_f32_data, "main", 3, sizeof(vk_op_binary_push_constants), {1024, 1, 1}, {}, 1); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_get_rows_f32[GGML_TYPE_Q5_0], "get_rows_q5_0_f32", get_rows_q5_0_f32_len, get_rows_q5_0_f32_data, "main", 3, sizeof(vk_op_binary_push_constants), {1024, 1, 1}, {}, 1); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_get_rows_f32[GGML_TYPE_Q5_1], "get_rows_q5_1_f32", get_rows_q5_1_f32_len, get_rows_q5_1_f32_data, "main", 3, sizeof(vk_op_binary_push_constants), {1024, 1, 1}, {}, 1); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_get_rows_f32[GGML_TYPE_Q8_0], "get_rows_q8_0_f32", get_rows_q8_0_f32_len, get_rows_q8_0_f32_data, "main", 3, sizeof(vk_op_binary_push_constants), {1024, 1, 1}, {}, 1); - - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_split_k_reduce, "split_k_reduce", split_k_reduce_len, split_k_reduce_data, "main", 2, 2 * sizeof(uint32_t), {256, 1, 1}, {}, 1); - - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_mul_mat_vec_p021_f16_f32, "mul_mat_vec_p021_f16_f32", mul_mat_vec_p021_f16_f32_len, mul_mat_vec_p021_f16_f32_data, "main", 3, 6 * sizeof(uint32_t), {1, 1, 1}, {}, 1); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_mul_mat_vec_nc_f16_f32, "mul_mat_vec_nc_f16_f32", mul_mat_vec_nc_f16_f32_len, mul_mat_vec_nc_f16_f32_data, "main", 3, 7 * sizeof(uint32_t), {1, 1, 1}, {}, 1); - - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_norm_f32, "norm_f32", norm_f32_len, norm_f32_data, "main", 2, sizeof(vk_op_push_constants), {1, 1, 1}, {}, 1); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_rms_norm_f32, "rms_norm_f32", rms_norm_f32_len, rms_norm_f32_data, "main", 2, sizeof(vk_op_push_constants), {1, 1, 1}, {}, 1); - - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_cpy_f32_f32, "cpy_f32_f32", cpy_f32_f32_len, cpy_f32_f32_data, "main", 2, sizeof(vk_op_unary_push_constants), {512, 1, 1}, {}, 1); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_cpy_f32_f16, "cpy_f32_f16", cpy_f32_f16_len, cpy_f32_f16_data, "main", 2, sizeof(vk_op_unary_push_constants), {512, 1, 1}, {}, 1); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_cpy_f16_f16, "cpy_f16_f16", cpy_f16_f16_len, cpy_f16_f16_data, "main", 2, sizeof(vk_op_unary_push_constants), {512, 1, 1}, {}, 1); - - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_add_f32, "add_f32", add_f32_len, add_f32_data, "main", 3, sizeof(vk_op_binary_push_constants), {512, 1, 1}, {}, 1); - - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_mul_f32, "mul_f32", mul_f32_len, mul_f32_data, "main", 3, sizeof(vk_op_binary_push_constants), {512, 1, 1}, {}, 1); - - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_scale_f32, "scale_f32", scale_f32_len, scale_f32_data, "main", 2, sizeof(vk_op_unary_push_constants), {512, 1, 1}, {}, 1); - - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_sqr_f32, "sqr_f32", sqr_f32_len, sqr_f32_data, "main", 2, sizeof(vk_op_unary_push_constants), {512, 1, 1}, {}, 1); - - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_clamp_f32, "clamp_f32", clamp_f32_len, clamp_f32_data, "main", 2, sizeof(vk_op_unary_push_constants), {512, 1, 1}, {}, 1); - - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_gelu_f32, "gelu_f32", gelu_f32_len, gelu_f32_data, "main", 2, sizeof(vk_op_push_constants), {512, 1, 1}, {}, 1); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_silu_f32, "silu_f32", silu_f32_len, silu_f32_data, "main", 2, sizeof(vk_op_push_constants), {512, 1, 1}, {}, 1); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_relu_f32, "relu_f32", relu_f32_len, relu_f32_data, "main", 2, sizeof(vk_op_push_constants), {512, 1, 1}, {}, 1); - - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_diag_mask_inf_f32, "diag_mask_inf_f32", diag_mask_inf_f32_len, diag_mask_inf_f32_data, "main", 2, sizeof(vk_op_diag_mask_push_constants), {512, 1, 1}, {}, 1); - - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_soft_max_f32, "soft_max_f32", soft_max_f32_len, soft_max_f32_data, "main", 4, sizeof(vk_op_soft_max_push_constants), {1, 1, 1}, {}, 1); - - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_rope_f32, "rope_f32", rope_f32_len, rope_f32_data, "main", 3, sizeof(vk_op_rope_push_constants), {1, 512, 1}, {}, 1); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_rope_f16, "rope_f16", rope_f16_len, rope_f16_data, "main", 3, sizeof(vk_op_rope_push_constants), {1, 512, 1}, {}, 1); - - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_rope_neox_f32, "rope_neox_f32", rope_neox_f32_len, rope_neox_f32_data, "main", 3, sizeof(vk_op_rope_neox_push_constants), {1, 512, 1}, {}, 1); - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_rope_neox_f16, "rope_neox_f16", rope_neox_f16_len, rope_neox_f16_data, "main", 3, sizeof(vk_op_rope_neox_push_constants), {1, 512, 1}, {}, 1); - - ggml_vk_create_pipeline(ctx, ctx->device->pipeline_argsort_f32, "argsort_f32", argsort_f32_len, argsort_f32_data, "main", 2, sizeof(vk_op_argsort_push_constants), {1024, 1, 1}, {}, 1); -} - -static void ggml_vk_print_gpu_info(size_t idx) { - GGML_ASSERT(idx < vk_instance.device_indices.size()); - size_t dev_num = vk_instance.device_indices[idx]; -#ifdef GGML_VULKAN_DEBUG - std::cerr << "ggml_vk_print_gpu_info(" << dev_num << ")" << std::endl; -#endif - GGML_ASSERT(vk_instance.initialized); - - std::vector devices = vk_instance.instance.enumeratePhysicalDevices(); - - if (dev_num >= devices.size()) { - std::cerr << "ggml_vulkan: Device with index " << dev_num << " does not exist." << std::endl; - throw std::runtime_error("Device not found"); - } - - vk::PhysicalDevice physical_device = devices[dev_num]; - std::vector ext_props = physical_device.enumerateDeviceExtensionProperties(); - - vk::PhysicalDeviceProperties2 props2; - vk::PhysicalDeviceMaintenance3Properties props3; - vk::PhysicalDeviceSubgroupProperties subgroup_props; - props2.pNext = &props3; - props3.pNext = &subgroup_props; - physical_device.getProperties2(&props2); - - const size_t subgroup_size = subgroup_props.subgroupSize; - const bool uma = props2.properties.deviceType == vk::PhysicalDeviceType::eIntegratedGpu; - - bool fp16_storage = false; - bool fp16_compute = false; - - for (auto properties : ext_props) { - if (strcmp("VK_KHR_16bit_storage", properties.extensionName) == 0) { - fp16_storage = true; - } else if (strcmp("VK_KHR_shader_float16_int8", properties.extensionName) == 0) { - fp16_compute = true; - } - } - - const char* GGML_VK_DISABLE_F16 = getenv("GGML_VK_DISABLE_F16"); - bool force_disable_f16 = GGML_VK_DISABLE_F16 != nullptr; - - bool fp16 = !force_disable_f16 && fp16_storage && fp16_compute; - - vk::PhysicalDeviceFeatures device_features = physical_device.getFeatures(); - - VkPhysicalDeviceFeatures2 device_features2; - device_features2.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; - device_features2.pNext = nullptr; - device_features2.features = (VkPhysicalDeviceFeatures)device_features; - - VkPhysicalDeviceVulkan11Features vk11_features; - vk11_features.pNext = nullptr; - vk11_features.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES; - device_features2.pNext = &vk11_features; - - VkPhysicalDeviceVulkan12Features vk12_features; - vk12_features.pNext = nullptr; - vk12_features.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES; - vk11_features.pNext = &vk12_features; - - vkGetPhysicalDeviceFeatures2(physical_device, &device_features2); - - fp16 = fp16 && vk12_features.shaderFloat16; - - std::string device_name = props2.properties.deviceName.data(); - std::cerr << GGML_VK_NAME << idx << ": " << device_name << " | uma: " << uma << " | fp16: " << fp16 << " | warp size: " << subgroup_size << std::endl; - - if (props2.properties.deviceType == vk::PhysicalDeviceType::eCpu) { - std::cerr << "ggml_vulkan: Warning: Device type is CPU. This is probably not the device you want." << std::endl; - } -} - -static bool ggml_vk_instance_validation_ext_available(const std::vector& instance_extensions); -static bool ggml_vk_instance_portability_enumeration_ext_available(const std::vector& instance_extensions); - -void ggml_vk_instance_init() { - if (vk_instance_initialized) { - return; - } -#ifdef GGML_VULKAN_DEBUG - std::cerr << "ggml_vk_instance_init()" << std::endl; -#endif - - vk::ApplicationInfo app_info{ "ggml-vulkan", 1, nullptr, 0, VK_API_VERSION }; - - const std::vector instance_extensions = vk::enumerateInstanceExtensionProperties(); - const bool validation_ext = ggml_vk_instance_validation_ext_available(instance_extensions); -#ifdef __APPLE__ - const bool portability_enumeration_ext = ggml_vk_instance_portability_enumeration_ext_available(instance_extensions); -#endif - - std::vector layers; - - if (validation_ext) { - layers.push_back("VK_LAYER_KHRONOS_validation"); - } - std::vector extensions; - if (validation_ext) { - extensions.push_back("VK_EXT_validation_features"); - } -#ifdef __APPLE__ - if (portability_enumeration_ext) { - extensions.push_back("VK_KHR_portability_enumeration"); - } -#endif - vk::InstanceCreateInfo instance_create_info(vk::InstanceCreateFlags{}, &app_info, layers, extensions); -#ifdef __APPLE__ - if (portability_enumeration_ext) { - instance_create_info.flags |= vk::InstanceCreateFlagBits::eEnumeratePortabilityKHR; - } -#endif - - std::vector features_enable; - vk::ValidationFeaturesEXT validation_features; - - if (validation_ext) { - features_enable = { vk::ValidationFeatureEnableEXT::eBestPractices }; - validation_features = { - features_enable, - {}, - }; - validation_features.setPNext(nullptr); - instance_create_info.setPNext(&validation_features); - - std::cerr << "ggml_vulkan: Validation layers enabled" << std::endl; - } - vk_instance.instance = vk::createInstance(instance_create_info); - - memset(vk_instance.initialized, 0, sizeof(bool) * GGML_VK_MAX_DEVICES); - - size_t num_available_devices = vk_instance.instance.enumeratePhysicalDevices().size(); - - // Emulate behavior of CUDA_VISIBLE_DEVICES for Vulkan - char * devices_env = getenv("GGML_VK_VISIBLE_DEVICES"); - if (devices_env != nullptr) { - std::string devices(devices_env); - std::replace(devices.begin(), devices.end(), ',', ' '); - - std::stringstream ss(devices); - size_t tmp; - while (ss >> tmp) { - if(tmp >= num_available_devices) { - std::cerr << "ggml_vulkan: Invalid device index " << tmp << " in GGML_VK_VISIBLE_DEVICES." << std::endl; - throw std::runtime_error("Invalid Vulkan device index"); - } - vk_instance.device_indices.push_back(tmp); - } - } else { - std::vector devices = vk_instance.instance.enumeratePhysicalDevices(); - - // Make sure at least one device exists - if (devices.empty()) { - std::cerr << "ggml_vulkan: Error: No devices found." << std::endl; - GGML_ASSERT(false); - } - - // Default to using all dedicated GPUs - for (size_t i = 0; i < devices.size(); i++) { - vk::PhysicalDeviceProperties props = devices[i].getProperties(); - - if (props.deviceType == vk::PhysicalDeviceType::eDiscreteGpu) { - vk_instance.device_indices.push_back(i); - } - } - - // If no dedicated GPUs found, fall back to GPU 0 - if (vk_instance.device_indices.empty()) { - vk_instance.device_indices.push_back(0); - } - } - - std::cerr << "ggml_vulkan: Found " << vk_instance.device_indices.size() << " Vulkan devices:" << std::endl; - - for (size_t i = 0; i < vk_instance.device_indices.size(); i++) { - ggml_vk_print_gpu_info(i); - } - - vk_instance_initialized = true; -} - -static void ggml_vk_init(ggml_backend_vk_context * ctx, size_t idx) { - GGML_ASSERT(idx < vk_instance.device_indices.size()); - size_t dev_num = vk_instance.device_indices[idx]; -#ifdef GGML_VULKAN_DEBUG - std::cerr << "ggml_vk_init(" << ctx->name << ", " << dev_num << ")" << std::endl; -#endif - ggml_vk_instance_init(); - - std::vector devices = vk_instance.instance.enumeratePhysicalDevices(); - - if (dev_num >= devices.size()) { - std::cerr << "ggml_vulkan: Device with index " << dev_num << " does not exist." << std::endl; - throw std::runtime_error("Device not found"); - } - - ctx->device = ggml_vk_get_device(idx); - if (!ctx->device->initialized) { - ctx->device->physical_device = devices[dev_num]; - const std::vector ext_props = ctx->device->physical_device.enumerateDeviceExtensionProperties(); - - bool maintenance4_support = false; - - // Check if maintenance4 is supported - for (const auto& properties : ext_props) { - if (strcmp("VK_KHR_maintenance4", properties.extensionName) == 0) { - maintenance4_support = true; - } - } - - vk::PhysicalDeviceProperties2 props2; - vk::PhysicalDeviceMaintenance3Properties props3; - vk::PhysicalDeviceMaintenance4Properties props4; - vk::PhysicalDeviceSubgroupProperties subgroup_props; - props2.pNext = &props3; - props3.pNext = &subgroup_props; - if (maintenance4_support) { - subgroup_props.pNext = &props4; - } - ctx->device->physical_device.getProperties2(&props2); - ctx->device->properties = props2.properties; - - const char* GGML_VK_FORCE_MAX_ALLOCATION_SIZE = getenv("GGML_VK_FORCE_MAX_ALLOCATION_SIZE"); - - if (GGML_VK_FORCE_MAX_ALLOCATION_SIZE != nullptr) { - ctx->device->max_memory_allocation_size = std::stoi(GGML_VK_FORCE_MAX_ALLOCATION_SIZE); - } else if (maintenance4_support) { - ctx->device->max_memory_allocation_size = std::min(props3.maxMemoryAllocationSize, props4.maxBufferSize); - } else { - ctx->device->max_memory_allocation_size = props3.maxMemoryAllocationSize; - } - - ctx->device->vendor_id = ctx->device->properties.vendorID; - ctx->device->subgroup_size = subgroup_props.subgroupSize; - ctx->device->uma = ctx->device->properties.deviceType == vk::PhysicalDeviceType::eIntegratedGpu; - - bool fp16_storage = false; - bool fp16_compute = false; - - for (const auto& properties : ext_props) { - if (strcmp("VK_KHR_16bit_storage", properties.extensionName) == 0) { - fp16_storage = true; - } else if (strcmp("VK_KHR_shader_float16_int8", properties.extensionName) == 0) { - fp16_compute = true; - } - } - - const char* GGML_VK_DISABLE_F16 = getenv("GGML_VK_DISABLE_F16"); - const bool force_disable_f16 = GGML_VK_DISABLE_F16 != nullptr; - - ctx->device->fp16 = !force_disable_f16 && fp16_storage && fp16_compute; - - std::vector queue_family_props = ctx->device->physical_device.getQueueFamilyProperties(); - - // Try to find a non-graphics compute queue and transfer-focused queues - const uint32_t compute_queue_family_index = ggml_vk_find_queue_family_index(queue_family_props, vk::QueueFlagBits::eCompute, vk::QueueFlagBits::eGraphics, -1, 1); - const uint32_t transfer_queue_family_index = ggml_vk_find_queue_family_index(queue_family_props, vk::QueueFlagBits::eTransfer, vk::QueueFlagBits::eCompute | vk::QueueFlagBits::eGraphics, compute_queue_family_index, 1); - - const float priorities[] = { 1.0f, 1.0f }; - ctx->device->single_queue = compute_queue_family_index == transfer_queue_family_index && queue_family_props[compute_queue_family_index].queueCount == 1; - - std::vector device_queue_create_infos; - if (compute_queue_family_index != transfer_queue_family_index) { - device_queue_create_infos.push_back({vk::DeviceQueueCreateFlags(), compute_queue_family_index, 1, priorities}); - device_queue_create_infos.push_back({vk::DeviceQueueCreateFlags(), transfer_queue_family_index, 1, priorities + 1}); - } else if(!ctx->device->single_queue) { - device_queue_create_infos.push_back({vk::DeviceQueueCreateFlags(), compute_queue_family_index, 2, priorities}); - } else { - device_queue_create_infos.push_back({vk::DeviceQueueCreateFlags(), compute_queue_family_index, 1, priorities}); - } - vk::DeviceCreateInfo device_create_info; - std::vector device_extensions; - vk::PhysicalDeviceFeatures device_features = ctx->device->physical_device.getFeatures(); - - VkPhysicalDeviceFeatures2 device_features2; - device_features2.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; - device_features2.pNext = nullptr; - device_features2.features = (VkPhysicalDeviceFeatures)device_features; - - VkPhysicalDeviceVulkan11Features vk11_features; - vk11_features.pNext = nullptr; - vk11_features.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES; - device_features2.pNext = &vk11_features; - - VkPhysicalDeviceVulkan12Features vk12_features; - vk12_features.pNext = nullptr; - vk12_features.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES; - vk11_features.pNext = &vk12_features; - - vkGetPhysicalDeviceFeatures2(ctx->device->physical_device, &device_features2); - - ctx->device->fp16 = ctx->device->fp16 && vk12_features.shaderFloat16; - - if (!vk11_features.storageBuffer16BitAccess) { - std::cerr << "ggml_vulkan: device " << GGML_VK_NAME << idx << " does not support 16-bit storage." << std::endl; - throw std::runtime_error("Unsupported device"); - } - - device_extensions.push_back("VK_KHR_16bit_storage"); - -#ifdef GGML_VULKAN_VALIDATE - device_extensions.push_back("VK_KHR_shader_non_semantic_info"); -#endif - - if (ctx->device->fp16) { - device_extensions.push_back("VK_KHR_shader_float16_int8"); - } - ctx->device->name = ctx->device->properties.deviceName.data(); - - device_create_info = { - vk::DeviceCreateFlags(), - device_queue_create_infos, - {}, - device_extensions - }; - device_create_info.setPNext(&device_features2); - ctx->device->device = ctx->device->physical_device.createDevice(device_create_info); - - ctx->device->descriptor_set_mode = VK_DEVICE_DESCRIPTOR_POOL_MODE_UNKNOWN; - - // Queues - ggml_vk_create_queue(ctx, ctx->device->compute_queue, compute_queue_family_index, 0, { vk::PipelineStageFlagBits::eComputeShader | vk::PipelineStageFlagBits::eTransfer }); - - // Shaders - ggml_vk_load_shaders(ctx); - - if (!ctx->device->single_queue) { - const uint32_t transfer_queue_index = compute_queue_family_index == transfer_queue_family_index ? 1 : 0; - ggml_vk_create_queue(ctx, ctx->device->transfer_queue, transfer_queue_family_index, transfer_queue_index, { vk::PipelineStageFlagBits::eTransfer }); - } else { - // TODO: Use pointer or reference to avoid copy - ctx->device->transfer_queue = ctx->device->compute_queue; - } - - ctx->device->idx = dev_num; - ctx->device->initialized = true; - } else if (ctx->device->idx != dev_num) { - std::cerr << "ggml_vulkan: Device " << ctx->device->name << " already initialized with index " << ctx->device->idx << ", but trying to reinitialize with index " << dev_num << std::endl; - throw std::runtime_error("Device already initialized"); - } - - ctx->fence = ctx->device->device.createFence({}); - - ctx->compute_ctx = nullptr; - ctx->transfer_ctx = nullptr; - - ctx->disable = false; - ctx->initialized = true; - - ctx->idx = idx; - -#ifdef GGML_VULKAN_CHECK_RESULTS - const char* skip_checks = getenv("GGML_VULKAN_SKIP_CHECKS"); - vk_skip_checks = (skip_checks == NULL ? 0 : atoi(skip_checks)); - const char* output_tensor = getenv("GGML_VULKAN_OUTPUT_TENSOR"); - vk_output_tensor = (output_tensor == NULL ? 0 : atoi(output_tensor)); -#endif -} - -static vk_pipeline ggml_vk_get_to_fp16(ggml_backend_vk_context * ctx, ggml_type type) { -#ifdef GGML_VULKAN_DEBUG - std::cerr << "ggml_vk_get_to_fp16()" << std::endl; -#endif - switch (type) { - case GGML_TYPE_F32: - case GGML_TYPE_Q4_0: - case GGML_TYPE_Q4_1: - case GGML_TYPE_Q5_0: - case GGML_TYPE_Q5_1: - case GGML_TYPE_Q8_0: - case GGML_TYPE_Q2_K: - case GGML_TYPE_Q3_K: - case GGML_TYPE_Q4_K: - case GGML_TYPE_Q5_K: - case GGML_TYPE_Q6_K: - break; - default: - return nullptr; - } - - return ctx->device->pipeline_dequant[type]; -} - -static vk_matmul_pipeline ggml_vk_get_mul_mat_mat_pipeline(ggml_backend_vk_context * ctx, ggml_type src0_type, ggml_type src1_type) { -#ifdef GGML_VULKAN_DEBUG - std::cerr << "ggml_vk_get_mul_mat_mat_pipeline()" << std::endl; -#endif - if (src0_type == GGML_TYPE_F32 && src1_type == GGML_TYPE_F32) { - return ctx->device->pipeline_matmul_f32; - } - if (src0_type == GGML_TYPE_F16 && src1_type == GGML_TYPE_F32) { - return ctx->device->pipeline_matmul_f16_f32; - } - if (src0_type == GGML_TYPE_F16 && src1_type == GGML_TYPE_F16) { - return ctx->device->pipeline_matmul_f16; - } - - GGML_ASSERT(src1_type == GGML_TYPE_F32); - - switch (src0_type) { - case GGML_TYPE_Q4_0: - case GGML_TYPE_Q4_1: - case GGML_TYPE_Q5_0: - case GGML_TYPE_Q5_1: - case GGML_TYPE_Q8_0: - case GGML_TYPE_Q2_K: - case GGML_TYPE_Q3_K: - case GGML_TYPE_Q4_K: - case GGML_TYPE_Q5_K: - case GGML_TYPE_Q6_K: - break; - default: - return nullptr; - } - - return ctx->device->pipeline_dequant_mul_mat_mat[src0_type]; -} - -static vk_pipeline ggml_vk_get_dequantize_mul_mat_vec(ggml_backend_vk_context * ctx, ggml_type type) { -#ifdef GGML_VULKAN_DEBUG - std::cerr << "ggml_vk_get_dequantize_mul_mat_vec()" << std::endl; -#endif - switch (type) { - case GGML_TYPE_F16: - case GGML_TYPE_Q4_0: - case GGML_TYPE_Q4_1: - case GGML_TYPE_Q5_0: - case GGML_TYPE_Q5_1: - case GGML_TYPE_Q8_0: - case GGML_TYPE_Q2_K: - case GGML_TYPE_Q3_K: - case GGML_TYPE_Q4_K: - case GGML_TYPE_Q5_K: - case GGML_TYPE_Q6_K: - break; - default: - return nullptr; - } - - return ctx->device->pipeline_dequant_mul_mat_vec_f32[type]; -} - -static vk_buffer ggml_vk_pool_malloc(ggml_backend_vk_context * ctx, size_t size) { -#ifdef GGML_VULKAN_DEBUG - std::cerr << "ggml_vk_pool_malloc(" << size << ")" << std::endl; -#endif - int best_i = -1; - size_t best_size = std::numeric_limits::max(); //smallest unused buffer that fits our needs - int worst_i = -1; - size_t worst_size = 0; //largest unused buffer seen so far - for (int i = 0; i < MAX_VK_BUFFERS; ++i) { - vk_buffer &b = ctx->buffer_pool[i]; - if (b != nullptr && b->size >= size && b->size < best_size) { - best_i = i; - best_size = b->size; - } - if (b != nullptr && b->size > worst_size) { - worst_i = i; - worst_size = b->size; - } - } - if(best_i != -1) { - //found the smallest buffer that fits our needs - vk_buffer b = ctx->buffer_pool[best_i]; - ctx->buffer_pool[best_i].reset(); - return b; - } - if(worst_i != -1) { - //no buffer that fits our needs, resize largest one to save memory - vk_buffer& b = ctx->buffer_pool[worst_i]; - ggml_vk_destroy_buffer(b); - } - - return ggml_vk_create_buffer_check(ctx, size, vk::MemoryPropertyFlagBits::eDeviceLocal); -} - -static void ggml_vk_pool_free(ggml_backend_vk_context * ctx, vk_buffer& buffer) { -#ifdef GGML_VULKAN_DEBUG - std::cerr << "ggml_vk_pool_free(" << buffer->size << ")" << std::endl; -#endif - for (int i = 0; i < MAX_VK_BUFFERS; ++i) { - vk_buffer& b = ctx->buffer_pool[i]; - if (b == nullptr) { - b = buffer; - return; - } - } - std::cerr << "ggml_vulkan: WARNING: vk buffer pool full, increase MAX_VK_BUFFERS" << std::endl; - ggml_vk_destroy_buffer(buffer); -} - -// Returns an available temporary buffer that may only be used temporarily, it will be reused -static vk_buffer ggml_vk_create_buffer_temp(ggml_backend_vk_context * ctx, size_t size) { - // Try to find existing temp buffer with enough capacity - for (auto& buffer : ctx->gc.temp_buffers) { - if (buffer->size >= size) { - return buffer; - } - } - - // Otherwise create new buffer - vk_buffer buf = ggml_vk_pool_malloc(ctx, size); - ctx->gc.temp_buffers.push_back(buf); - - return buf; -} - -static void * ggml_vk_host_malloc(ggml_backend_vk_context * ctx, size_t size) { -#ifdef GGML_VULKAN_DEBUG - std::cerr << "ggml_vk_host_malloc(" << size << ")" << std::endl; -#endif - vk_buffer buf = ggml_vk_create_buffer(ctx, size, - vk::MemoryPropertyFlagBits::eHostVisible | vk::MemoryPropertyFlagBits::eHostCoherent | vk::MemoryPropertyFlagBits::eHostCached, - vk::MemoryPropertyFlagBits::eHostVisible | vk::MemoryPropertyFlagBits::eHostCoherent); - - if(!(buf->memory_property_flags & vk::MemoryPropertyFlagBits::eHostVisible)) { - fprintf(stderr, "WARNING: failed to allocate %.2f MB of pinned memory\n", - size/1024.0/1024.0); - ctx->device->device.freeMemory(buf->device_memory); - ctx->device->device.destroyBuffer(buf->buffer); - return nullptr; - } - - ctx->pinned_memory.push_back(std::make_tuple(buf->ptr, size, buf)); - - return buf->ptr; -} - -static void ggml_vk_host_free(ggml_backend_vk_context * ctx, void* ptr) { - if (ptr == nullptr) { - return; - } -#ifdef GGML_VULKAN_DEBUG - std::cerr << "ggml_vk_host_free(" << ptr << ")" << std::endl; -#endif - vk_buffer buf; - size_t index; - for (size_t i = 0; i < ctx->pinned_memory.size(); i++) { - const uint8_t* addr = (const uint8_t*) std::get<0>(ctx->pinned_memory[i]); - const uint8_t* endr = addr + std::get<1>(ctx->pinned_memory[i]); - if (ptr >= addr && ptr < endr) { - buf = std::get<2>(ctx->pinned_memory[i]); - index = i; - break; - } - } - if (buf == nullptr) { - fprintf(stderr, "WARNING: failed to free pinned memory: memory not in map\n"); - return; - } - - ggml_vk_destroy_buffer(buf); - - ctx->pinned_memory.erase(ctx->pinned_memory.begin() + index); -} - -static void ggml_vk_host_get(ggml_backend_vk_context * ctx, const void * ptr, vk_buffer& buf, size_t& buf_offset) { - buf = nullptr; - buf_offset = 0; - for (size_t i = 0; i < ctx->pinned_memory.size(); i++) { - const uint8_t* addr = (const uint8_t*) std::get<0>(ctx->pinned_memory[i]); - const uint8_t* endr = addr + std::get<1>(ctx->pinned_memory[i]); - if (ptr >= addr && ptr < endr) { - buf = std::get<2>(ctx->pinned_memory[i]); - buf_offset = ((const uint8_t *)ptr) - addr; - break; - } - } -} - -static vk_submission ggml_vk_begin_submission(ggml_backend_vk_context * ctx, vk_queue& q, bool one_time = true) { - vk_submission s; - s.buffer = ggml_vk_create_cmd_buffer(ctx, q); - if (one_time) { - s.buffer.begin({ vk::CommandBufferUsageFlagBits::eOneTimeSubmit }); - } else { - s.buffer.begin({ vk::CommandBufferUsageFlags{} }); - } - - return s; -} - -static void ggml_vk_dispatch_pipeline(ggml_backend_vk_context * ctx, vk_context * subctx, vk_pipeline& pipeline, std::vector&& buffers, size_t push_constant_size, const void* push_constants, std::array elements) { - const uint32_t wg0 = CEIL_DIV(elements[0], pipeline->wg_denoms[0]); - const uint32_t wg1 = CEIL_DIV(elements[1], pipeline->wg_denoms[1]); - const uint32_t wg2 = CEIL_DIV(elements[2], pipeline->wg_denoms[2]); -#ifdef GGML_VULKAN_DEBUG - std::cerr << "ggml_vk_dispatch_pipeline(" << pipeline->name << ", (" << wg0 << "," << wg1 << "," << wg2 << "))" << std::endl; -#endif - std::vector descriptor_buffer_infos; - std::vector write_descriptor_sets; - GGML_ASSERT(pipeline->descriptor_set_idx < pipeline->descriptor_sets.size()); - GGML_ASSERT(buffers.size() == pipeline->parameter_count); - vk::DescriptorSet& descriptor_set = pipeline->descriptor_sets[pipeline->descriptor_set_idx++]; - for (uint32_t i = 0; i < pipeline->parameter_count; i++) { - descriptor_buffer_infos.push_back({buffers[i].buffer->buffer, buffers[i].offset, buffers[i].size}); - } - for (uint32_t i = 0; i < pipeline->parameter_count; i++) { - write_descriptor_sets.push_back({descriptor_set, i, 0, 1, vk::DescriptorType::eStorageBuffer, nullptr, &descriptor_buffer_infos[i]}); - } - - ctx->device->device.updateDescriptorSets(write_descriptor_sets, {}); - - subctx->s->buffer.pushConstants(pipeline->layout, vk::ShaderStageFlagBits::eCompute, 0, push_constant_size, push_constants); - subctx->s->buffer.bindPipeline(vk::PipelineBindPoint::eCompute, pipeline->pipeline); - subctx->s->buffer.bindDescriptorSets(vk::PipelineBindPoint::eCompute, - pipeline->layout, - 0, - { descriptor_set }, - {}); - subctx->s->buffer.dispatch(wg0, wg1, wg2); -} - -static void ggml_vk_end_submission(vk_submission& s, std::vector wait_semaphores, std::vector signal_semaphores) { - s.buffer.end(); - - s.wait_semaphores = std::move(wait_semaphores); - s.signal_semaphores = std::move(signal_semaphores); -} - -static void ggml_vk_ctx_end(vk_context * ctx) { -#ifdef GGML_VULKAN_DEBUG - std::cerr << "ggml_vk_ctx_end(" << ctx << ", " << ctx->seqs.size() << ")" << std::endl; -#endif - if (ctx->s == nullptr) { - return; - } - - ctx->s->buffer.end(); - ctx->s = nullptr; -} - -static void ggml_vk_ctx_begin(ggml_backend_vk_context * ctx, vk_context * subctx) { -#ifdef GGML_VULKAN_DEBUG - std::cerr << "ggml_vk_ctx_begin(" << ctx << ")" << std::endl; -#endif - if (subctx->s != nullptr) { - ggml_vk_ctx_end(subctx); - } - - subctx->seqs.push_back({ ggml_vk_begin_submission(ctx, *subctx->q) }); - subctx->s = subctx->seqs[subctx->seqs.size() - 1].data(); -} - -static size_t ggml_vk_align_size(size_t width, size_t align) { - return CEIL_DIV(width, align) * align; -} - -static void deferred_memcpy(void * dst, const void * src, size_t size, std::vector* memcpys = nullptr) { - if (memcpys == nullptr) { - memcpy(dst, src, size); - } else { - memcpys->emplace_back(dst, src, size); - } -} - -static void ggml_vk_ensure_sync_staging_buffer(ggml_backend_vk_context * ctx, size_t size) { - if (ctx->sync_staging == nullptr || ctx->sync_staging->size < size) { - ggml_vk_destroy_buffer(ctx->sync_staging); - ctx->sync_staging = ggml_vk_create_buffer_check(ctx, size, - vk::MemoryPropertyFlagBits::eHostVisible | vk::MemoryPropertyFlagBits::eHostCoherent | vk::MemoryPropertyFlagBits::eHostCached, - vk::MemoryPropertyFlagBits::eHostVisible | vk::MemoryPropertyFlagBits::eHostCoherent); - } -} - -static void ggml_vk_buffer_write_nc_async(ggml_backend_vk_context * ctx, vk_context * subctx, vk_buffer& dst, size_t offset, const ggml_tensor * tensor, bool sync_staging = false) { -#ifdef GGML_VULKAN_DEBUG - std::cerr << "ggml_vk_buffer_write_nc_async(" << tensor << ")" << std::endl; -#endif - GGML_ASSERT(!ggml_is_contiguous(tensor)); - // Buffer is already mapped - if(dst->memory_property_flags & vk::MemoryPropertyFlagBits::eHostVisible) { - std::cerr << "ggml_vulkan: buffer_write_nc_async dst buffer is host_visible. Use synchronous write." << std::endl; - GGML_ASSERT(false); - } - // Check if src is pinned memory - vk_buffer buf; - size_t buf_offset; - ggml_vk_host_get(ctx, tensor->data, buf, buf_offset); - - const uint64_t ne0 = tensor->ne[0]; - const uint64_t ne1 = tensor->ne[1]; - const uint64_t ne2 = tensor->ne[2]; - const uint64_t ne3 = tensor->ne[3]; - const uint64_t nb0 = tensor->nb[0]; - const uint64_t nb1 = tensor->nb[1]; - const uint64_t nb2 = tensor->nb[2]; - const uint64_t nb3 = tensor->nb[3]; - const ggml_type type = tensor->type; - const uint64_t ts = ggml_type_size(type); - const uint64_t bs = ggml_blck_size(type); - - const uint64_t dstnb0 = ts; - const uint64_t dstnb1 = dstnb0*(ne0/bs); - const uint64_t dstnb2 = dstnb1*ne1; - const uint64_t dstnb3 = dstnb2*ne2; - - const uint64_t ne = ggml_nelements(tensor); - - if (buf != nullptr) { - // Memory is pinned, use as staging buffer - std::vector slices; - - for (uint64_t i3 = 0; i3 < ne3; i3++) { - for (uint64_t i2 = 0; i2 < ne2; i2++) { - // Find longest contiguous slice - if (ne1*nb1 == dstnb2) { - slices.push_back({ buf_offset + i3*nb3 + i2*nb2, offset + i3*dstnb3 + i2*dstnb2, dstnb2 }); - } else { - for (uint64_t i1 = 0; i1 < ne1; i1++) { - if (ne0*nb0/bs == dstnb1) { - slices.push_back({ buf_offset + i3*nb3 + i2*nb2 + i1*nb1, offset + i3*dstnb3 + i2*dstnb2 + i1*dstnb1, dstnb1 }); - } else { - const uint64_t s_off = buf_offset + i3*nb3 + i2*nb2 + i1*nb1; - const uint64_t d_off = offset + i3*dstnb3 + i2*dstnb2 + i1*dstnb1; - for (uint64_t i0 = 0; i0 < ne0; i0++) { - slices.push_back({ s_off + i1*nb0, d_off + i0*dstnb0, dstnb0 }); - } - } - } - } - } - } - - ggml_vk_sync_buffers(subctx); - subctx->s->buffer.copyBuffer(buf->buffer, dst->buffer, slices); - return; - } - - // Staging buffer required - vk_buffer staging = ctx->staging; - size_t staging_offset = ctx->staging_offset; - const size_t copy_size = ts*ne/bs; - if (ctx->staging->size < ctx->staging_offset + copy_size) { - if (sync_staging) { - // Create temporary larger buffer - ggml_vk_ensure_sync_staging_buffer(ctx, copy_size); - - staging = ctx->sync_staging; - staging_offset = 0; - } else { - GGML_ASSERT(false); - } - } - - VkBufferCopy buf_copy{ staging_offset, offset, copy_size }; - - ggml_vk_sync_buffers(subctx); - vkCmdCopyBuffer(subctx->s->buffer, staging->buffer, dst->buffer, 1, &buf_copy); - - for (uint64_t i3 = 0; i3 < ne3; i3++) { - for (uint64_t i2 = 0; i2 < ne2; i2++) { - // Find longest contiguous slice - if (ne1*nb1 == dstnb2) { - deferred_memcpy((uint8_t *)staging->ptr + staging_offset + i3*dstnb3 + i2*dstnb2, (const uint8_t *) tensor->data + buf_offset + i3*nb3 + i2*nb2, dstnb2, &subctx->in_memcpys); - } else { - for (uint64_t i1 = 0; i1 < ne1; i1++) { - if (ne0*nb0/bs == dstnb1) { - deferred_memcpy((uint8_t *)staging->ptr + staging_offset + i3*dstnb3 + i2*dstnb2 + i1*dstnb1, (const uint8_t *) tensor->data + buf_offset + i3*nb3 + i2*nb2 + i1*nb1, dstnb1, &subctx->in_memcpys); - } else { - const uint64_t s_off = buf_offset + i3*nb3 + i2*nb2 + i1*nb1; - const uint64_t d_off = staging_offset + i3*dstnb3 + i2*dstnb2 + i1*dstnb1; - for (uint64_t i0 = 0; i0 < ne0; i0++) { - deferred_memcpy((uint8_t *)staging->ptr + d_off + i0*dstnb0, (const uint8_t *) tensor->data + s_off + i0*nb0, dstnb0, &subctx->in_memcpys); - } - } - } - } - } - } -} - -static void ggml_vk_buffer_write_2d_async(ggml_backend_vk_context * ctx, vk_context * subctx, vk_buffer& dst, size_t offset, const void * src, size_t spitch, size_t width, size_t height, bool sync_staging = false) { -#ifdef GGML_VULKAN_DEBUG - std::cerr << "ggml_vk_buffer_write_2d_async(" << width << ", " << height << ")" << std::endl; -#endif - // Make sure ctx owns the buffer - GGML_ASSERT(dst->ctx == ctx); - - // Buffer is already mapped - if(dst->memory_property_flags & vk::MemoryPropertyFlagBits::eHostVisible) { - std::cerr << "ggml_vulkan: buffer_write_async dst buffer is host_visible. Use synchronous write." << std::endl; - GGML_ASSERT(false); - } - // Check if src is pinned memory - vk_buffer buf = nullptr; - size_t buf_offset; - ggml_vk_host_get(ctx, src, buf, buf_offset); - - if (buf != nullptr) { - // Memory is pinned, use as staging buffer - std::vector slices(1); - if (width == spitch) { - // Only do single write if stride is equal - slices[0].srcOffset = buf_offset; - slices[0].dstOffset = offset; - slices[0].size = width * height; - } else { - slices.resize(height); - for (size_t i = 0; i < height; i++) { - slices[i].srcOffset = buf_offset + i * spitch; - slices[i].dstOffset = offset + i * width; - slices[i].size = width; - } - } - - ggml_vk_sync_buffers(subctx); - subctx->s->buffer.copyBuffer(buf->buffer, dst->buffer, slices); - return; - } -#ifdef GGML_VULKAN_DEBUG - std::cerr << "STAGING" << std::endl; -#endif - - // Staging buffer required - vk_buffer staging = ctx->staging; - size_t staging_offset = ctx->staging_offset; - const size_t copy_size = width*height; - if (ctx->staging == nullptr || ctx->staging->size < ctx->staging_offset + copy_size) { - if (sync_staging) { - ggml_vk_ensure_sync_staging_buffer(ctx, copy_size); - - staging = ctx->sync_staging; - staging_offset = 0; - } else { - GGML_ASSERT(false); - } - } - - VkBufferCopy buf_copy = { - staging_offset, - offset, - copy_size}; - - ggml_vk_sync_buffers(subctx); - vkCmdCopyBuffer(subctx->s->buffer, staging->buffer, dst->buffer, 1, &buf_copy); - - if (width == spitch) { - deferred_memcpy((uint8_t *)staging->ptr + staging_offset, src, width * height, &subctx->in_memcpys); - } else { - for (size_t i = 0; i < height; i++) { - deferred_memcpy((uint8_t *)staging->ptr + staging_offset + i * width, (const uint8_t *) src + i * spitch, width, &subctx->in_memcpys); - } - } -} - -static void ggml_vk_buffer_write_async(ggml_backend_vk_context * ctx, vk_context * subctx, vk_buffer& dst, size_t offset, const void * src, size_t size, bool sync_staging = false) { -#ifdef GGML_VULKAN_DEBUG - std::cerr << "ggml_vk_buffer_write_async(" << size << ")" << std::endl; -#endif - return ggml_vk_buffer_write_2d_async(ctx, subctx, dst, offset, src, size, size, 1, sync_staging); -} - -static void ggml_vk_buffer_write_2d(ggml_backend_vk_context * ctx, vk_buffer& dst, size_t offset, const void * src, size_t spitch, size_t width, size_t height) { -#ifdef GGML_VULKAN_DEBUG - std::cerr << "ggml_vk_buffer_write_2d(" << width << ", " << height << ")" << std::endl; -#endif - // Buffer is already mapped - if(dst->memory_property_flags & vk::MemoryPropertyFlagBits::eHostVisible) { - GGML_ASSERT(dst->memory_property_flags & vk::MemoryPropertyFlagBits::eHostCoherent); - - for (size_t i = 0; i < height; i++) { - memcpy((uint8_t *)dst->ptr + offset + i * width, (const uint8_t *) src + i * spitch, width); - } - } else { - vk_context * subctx = ggml_vk_create_context(ctx, ctx->device->transfer_queue); - ggml_vk_ctx_begin(ctx, subctx); - ggml_vk_buffer_write_2d_async(ctx, subctx, dst, offset, src, spitch, width, height, true); - ggml_vk_ctx_end(subctx); - - for (auto& cpy : subctx->in_memcpys) { - memcpy(cpy.dst, cpy.src, cpy.n); - } - - ggml_vk_submit(subctx, ctx->fence); - VK_CHECK(ctx->device->device.waitForFences({ ctx->fence }, true, UINT64_MAX), "vk_buffer_write_2d waitForFences"); - ctx->device->device.resetFences({ ctx->fence }); - } -} - -static void ggml_vk_buffer_write(ggml_backend_vk_context * ctx, vk_buffer& dst, size_t offset, const void * src, size_t size) { -#ifdef GGML_VULKAN_DEBUG - std::cerr << "ggml_vk_buffer_write(" << size << ")" << std::endl; -#endif - ggml_vk_buffer_write_2d(ctx, dst, offset, src, 0, size, 1); -} - -static void ggml_vk_buffer_read_2d_async(ggml_backend_vk_context * ctx, vk_context * subctx, vk_buffer& src, size_t offset, void * dst, size_t spitch, size_t dpitch, size_t width, size_t height, bool sync_staging = false) { -#ifdef GGML_VULKAN_DEBUG - std::cerr << "ggml_vk_buffer_read_2d_async(offset=" << offset << ", width=" << width << ", height=" << height << ")" << std::endl; -#endif - GGML_ASSERT(width > 0); - GGML_ASSERT(height > 0); - GGML_ASSERT(src != nullptr); - // Make sure ctx owns the buffer - GGML_ASSERT(src->ctx == ctx); - - // Check if dst is pinned memory - vk_buffer buf = nullptr; - size_t buf_offset; - ggml_vk_host_get(ctx, dst, buf, buf_offset); - - std::vector slices(1); - if (width == spitch && width == dpitch) { - // Only do single write if stride is equal - slices[0].srcOffset = offset; - slices[0].dstOffset = buf_offset; - slices[0].size = width * height; - } else { - slices.resize(height); - for (size_t i = 0; i < height; i++) { - slices[i].srcOffset = offset + i * spitch; - slices[i].dstOffset = buf_offset + i * dpitch; - slices[i].size = width; - } - } - - if (buf != nullptr) { - // Memory is pinned, use as staging buffer - ggml_vk_sync_buffers(subctx); - subctx->s->buffer.copyBuffer(src->buffer, buf->buffer, slices); - - return; - } -#ifdef GGML_VULKAN_DEBUG - std::cerr << "STAGING" << std::endl; -#endif - - // Fall back to staging buffer - vk_buffer staging = ctx->staging; - const size_t copy_size = dpitch * height; - if (ctx->staging == nullptr || ctx->staging->size < ctx->staging_offset + copy_size) { - if (sync_staging) { - // Create temporary larger buffer - ggml_vk_ensure_sync_staging_buffer(ctx, copy_size); - - staging = ctx->sync_staging; - } else { - GGML_ASSERT(false); - } - } - - ggml_vk_sync_buffers(subctx); - subctx->s->buffer.copyBuffer(src->buffer, staging->buffer, slices); - - deferred_memcpy(dst, staging->ptr, copy_size, &subctx->out_memcpys); -} - -static void ggml_vk_buffer_read_async(ggml_backend_vk_context * ctx, vk_context * subctx, vk_buffer& src, size_t offset, void * dst, size_t size, bool sync_staging = false) { - return ggml_vk_buffer_read_2d_async(ctx, subctx, src, offset, dst, size, size, size, 1, sync_staging); -} - -static void ggml_vk_buffer_read(ggml_backend_vk_context * ctx, vk_buffer& src, size_t offset, void * dst, size_t size) { -#ifdef GGML_VULKAN_DEBUG - std::cerr << "ggml_vk_buffer_read(" << offset << ", " << size << ")" << std::endl; -#endif - if(src->memory_property_flags & vk::MemoryPropertyFlagBits::eHostVisible) { - GGML_ASSERT(src->memory_property_flags & vk::MemoryPropertyFlagBits::eHostCoherent); - - memcpy(dst, (uint8_t *) src->ptr + offset, size); - } else { - vk_context * subctx = ggml_vk_create_context(ctx, ctx->device->transfer_queue); - ggml_vk_ctx_begin(ctx, subctx); - ggml_vk_buffer_read_async(ctx, subctx, src, offset, dst, size, true); - ggml_vk_ctx_end(subctx); - - ggml_vk_submit(subctx, ctx->fence); - VK_CHECK(ctx->device->device.waitForFences({ ctx->fence }, true, UINT64_MAX), "vk_buffer_read waitForFences"); - ctx->device->device.resetFences({ ctx->fence }); - - for (auto& cpy : subctx->out_memcpys) { - memcpy(cpy.dst, cpy.src, cpy.n); - } - } -} - -static void ggml_vk_buffer_copy_async(vk_context * ctx, vk_buffer& dst, size_t dst_offset, vk_buffer& src, size_t src_offset, size_t size) { -#ifdef GGML_VULKAN_DEBUG - std::cerr << "ggml_vk_buffer_copy_async(" << size << ")" << std::endl; -#endif - // Make sure both buffers are on same ctx - GGML_ASSERT(src->ctx == dst->ctx); - - VkBufferCopy bc{ src_offset, dst_offset, size }; - - vkCmdCopyBuffer(ctx->s->buffer, src->buffer, dst->buffer, 1, &bc); -} - -static void ggml_vk_buffer_copy(vk_buffer& dst, size_t dst_offset, vk_buffer& src, size_t src_offset, size_t size) { - if (src->ctx == dst->ctx) { -#ifdef GGML_VULKAN_DEBUG - std::cerr << "ggml_vk_buffer_copy(SINGLE_DEVICE, " << size << ")" << std::endl; -#endif - // Copy within the device - ggml_backend_vk_context * ctx = src->ctx; - - vk_context * subctx = ggml_vk_create_context(ctx, ctx->device->transfer_queue); - ggml_vk_ctx_begin(ctx, subctx); - ggml_vk_buffer_copy_async(subctx, dst, dst_offset, src, src_offset, size); - ggml_vk_ctx_end(subctx); - ggml_vk_submit(subctx, ctx->fence); - VK_CHECK(ctx->device->device.waitForFences({ ctx->fence }, true, UINT64_MAX), "vk_buffer_copy waitForFences"); - ctx->device->device.resetFences({ ctx->fence }); - } else { -#ifdef GGML_VULKAN_DEBUG - std::cerr << "ggml_vk_buffer_copy(MULTI_DEVICE, " << size << ")" << std::endl; -#endif - // Copy device to device - ggml_backend_vk_context * src_ctx = src->ctx; - ggml_backend_vk_context * dst_ctx = dst->ctx; - - ggml_vk_ensure_sync_staging_buffer(src_ctx, size); - ggml_vk_ensure_sync_staging_buffer(dst_ctx, size); - - // Copy to src staging buffer - ggml_vk_buffer_copy(src_ctx->sync_staging, 0, src, src_offset, size); - // memcpy to dst staging buffer - memcpy(dst_ctx->sync_staging->ptr, src_ctx->sync_staging->ptr, size); - // Copy to dst buffer - ggml_vk_buffer_copy(dst, dst_offset, dst_ctx->sync_staging, 0, size); - } -} - -static void ggml_vk_buffer_memset(ggml_backend_vk_context * ctx, vk_buffer& dst, size_t offset, uint32_t c, size_t size) { -#ifdef GGML_VULKAN_DEBUG - std::cerr << "ggml_vk_buffer_memset(" << offset << ", " << c << ", " << size << ")" << std::endl; -#endif - // Make sure ctx owns the buffer - GGML_ASSERT(dst->ctx == ctx); - - vk_context * subctx = ggml_vk_create_context(ctx, ctx->device->transfer_queue); - ggml_vk_ctx_begin(ctx, subctx); - subctx->s->buffer.fillBuffer(dst->buffer, offset, size, c); - ggml_vk_ctx_end(subctx); - - ggml_vk_submit(subctx, ctx->fence); - VK_CHECK(ctx->device->device.waitForFences({ ctx->fence }, true, UINT64_MAX), "vk_memset waitForFences"); - ctx->device->device.resetFences({ ctx->fence }); -} - -static void ggml_vk_h2d_tensor_2d(ggml_backend_vk_context * ctx, vk_context * subctx, vk_buffer& dst, size_t offset, const ggml_tensor * src, uint64_t i3, uint64_t i2, uint64_t i1) { -#ifdef GGML_VULKAN_DEBUG - std::cerr << "ggml_vk_h2d_tensor_2d(dst=" << dst << ", offset=" << offset << ", src=" << src << ", i3=" << i3 << ", i2=" << i2 << ", i1=" << i1 << ")" << std::endl; -#endif - const uint64_t ne0 = src->ne[0]; - const uint64_t ne1 = src->ne[1]; - const uint64_t nb0 = src->nb[0]; - const uint64_t nb1 = src->nb[1]; - const uint64_t nb2 = src->nb[2]; - const uint64_t nb3 = src->nb[3]; - const enum ggml_type type = src->type; - const size_t ts = ggml_type_size(type); - const size_t bs = ggml_blck_size(type); - const size_t row_length = ts*ne0/bs; - - const void * x = (const void *) ((const char *) src->data + i2*nb2 + i3*nb3); - if (nb0 == ts && nb1 == row_length) { - return ggml_vk_buffer_write_async(ctx, subctx, dst, offset, x, i1*nb1); - } - if (nb0 == ts && (i1 == ne1 || !ggml_is_permuted(src))) { - return ggml_vk_buffer_write_2d_async(ctx, subctx, dst, offset, x, nb1, row_length, i1); - } - - GGML_ASSERT(i3 == 0); - GGML_ASSERT(i2 == 0); - GGML_ASSERT(i1 == (uint64_t) ggml_nrows(src)); - - return ggml_vk_buffer_write_nc_async(ctx, subctx, dst, offset, src); -} - -static void ggml_vk_d2h_tensor_2d(ggml_backend_vk_context * ctx, vk_context * subctx, vk_buffer& src, size_t offset, const ggml_tensor * dst) { -#ifdef GGML_VULKAN_DEBUG - std::cerr << "ggml_vk_d2h_tensor_2d()" << std::endl; -#endif - const uint64_t ne0 = dst->ne[0]; - const uint64_t ne1 = dst->ne[1]; - const uint64_t ne2 = dst->ne[2]; - const uint64_t ne3 = dst->ne[3]; - const uint64_t nb0 = dst->nb[0]; - const uint64_t nb1 = dst->nb[1]; - // const uint64_t nb2 = dst->nb[2]; - // const uint64_t nb3 = dst->nb[3]; - const enum ggml_type type = dst->type; - const size_t ts = ggml_type_size(type); - const size_t bs = ggml_blck_size(type); - const size_t row_length = ts*ne0/bs; - - if (ggml_is_contiguous(dst)) { - return ggml_vk_buffer_read_async(ctx, subctx, src, offset, dst->data, ne1*nb1*ne2*ne3); - } - if (nb0 == ts) { - return ggml_vk_buffer_read_2d_async(ctx, subctx, src, offset, dst->data, nb1, nb1, row_length, ne1*ne2*ne3); - } - GGML_ASSERT(false); -} - -static uint32_t ggml_vk_guess_split_k(int m, int n, int k) { -#ifdef GGML_VULKAN_DEBUG - std::cerr << "ggml_vk_guess_split_k(" << m << ", " << n << ", " << k << ")" << std::endl; -#endif - if (k > 128 && (m < 128 || n < 128) && m > 2 && n > 2) { - return 4; - } - - return 1; -} - -static vk_pipeline ggml_vk_guess_matmul_pipeline_amd(ggml_backend_vk_context * ctx, vk_matmul_pipeline& mmp, int m, int n, bool aligned) { - if (m <= 32 || n <= 32) { - return aligned ? mmp->a_s : mmp->s; - } - return aligned ? mmp->a_m : mmp->m; - - GGML_UNUSED(ctx); -} - -static vk_pipeline ggml_vk_guess_matmul_pipeline_apple(ggml_backend_vk_context * ctx, vk_matmul_pipeline& mmp, bool aligned) { - return aligned ? mmp->a_m : mmp->m; - - GGML_UNUSED(ctx); -} - -static vk_pipeline ggml_vk_guess_matmul_pipeline_intel(ggml_backend_vk_context * ctx, vk_matmul_pipeline& mmp, bool aligned) { - return aligned ? mmp->a_s : mmp->s; - - GGML_UNUSED(ctx); -} - -static vk_pipeline ggml_vk_guess_matmul_pipeline(ggml_backend_vk_context * ctx, vk_matmul_pipeline& mmp, int m, int n, bool aligned) { -#ifdef GGML_VULKAN_DEBUG - std::cerr << "ggml_vk_guess_matmul_pipeline(" << m << ", " << n << ", " << aligned << ")" << std::endl; -#endif - switch (ctx->device->vendor_id) { - case VK_VENDOR_ID_AMD: - return ggml_vk_guess_matmul_pipeline_amd(ctx, mmp, m, n, aligned); - case VK_VENDOR_ID_APPLE: - return ggml_vk_guess_matmul_pipeline_apple(ctx, mmp, aligned); - case VK_VENDOR_ID_INTEL: - return ggml_vk_guess_matmul_pipeline_intel(ctx, mmp, aligned); - default: - break; - } - - if (m <= 32 || n <= 32) { - return aligned ? mmp->a_s : mmp->s; - } - if (m <= 64 || n <= 64) { - return aligned ? mmp->a_m : mmp->m; - } - return aligned ? mmp->a_l : mmp->l; -} - -static uint32_t ggml_vk_guess_matmul_pipeline_align(ggml_backend_vk_context * ctx, vk_matmul_pipeline& mmp, int m, int n) { -#ifdef GGML_VULKAN_DEBUG - std::cerr << "ggml_vk_guess_matmul_pipeline_align(" << m << ", " << n << ")" << std::endl; -#endif - return ggml_vk_guess_matmul_pipeline(ctx, mmp, m, n, false)->align; -} - -static void ggml_vk_matmul(ggml_backend_vk_context * ctx, vk_context * subctx, vk_pipeline& pipeline, vk_subbuffer&& a, vk_subbuffer&& b, vk_subbuffer&& d, vk_subbuffer&& split_k_buffer, uint32_t m, uint32_t n, uint32_t k, uint32_t stride_a, uint32_t stride_b, uint32_t stride_d, uint32_t split_k, uint32_t batch, uint32_t ne02, uint32_t ne12, uint32_t broadcast2, uint32_t broadcast3, uint32_t batch_stride_a, uint32_t batch_stride_b, uint32_t batch_stride_d) { -#ifdef GGML_VULKAN_DEBUG - std::cerr << "ggml_vk_matmul(a: (" << a.buffer->buffer << ", " << a.offset << ", " << a.size << "), b: (" << b.buffer->buffer << ", " << b.offset << ", " << b.size << "), c: (" << d.buffer->buffer << ", " << d.offset << ", " << d.size << "), split_k: (" << split_k_buffer.buffer->buffer << ", " << split_k_buffer.offset << ", " << split_k_buffer.size << "), m: " << m << ", n: " << n << ", k: " << k << ", stride_a: " << stride_a << ", stride_b: " << stride_b << ", stride_d: " << stride_d << ", split_k: " << split_k << ", batch: " << batch << ", ne02: " << ne02 << ", ne12: " << ne12 << ", broadcast2: " << broadcast2 << ", broadcast3: " << broadcast3 << ", batch_stride_a: " << batch_stride_a << ", batch_stride_b: " << batch_stride_b << ", batch_stride_d: " << batch_stride_d << ")" << std::endl; -#endif - ggml_vk_sync_buffers(subctx); - if (split_k == 1) { - const std::array pc = { m, n, k, stride_a, stride_b, stride_d, k, ne02, ne12, broadcast2, broadcast3, batch_stride_a, batch_stride_b, batch_stride_d }; - ggml_vk_dispatch_pipeline(ctx, subctx, pipeline, { a, b, d }, pc.size() * sizeof(uint32_t), pc.data(), { m, n, batch }); - return; - } - - GGML_ASSERT(batch_stride_d == m * n); - - const std::array pc1 = { m, n, k, stride_a, stride_b, stride_d, CEIL_DIV(k, split_k), ne02, ne12, broadcast2, broadcast3, batch_stride_a, batch_stride_b, batch_stride_d }; - // Make sure enough workgroups get assigned for split k to work - ggml_vk_dispatch_pipeline(ctx, subctx, pipeline, { a, b, split_k_buffer }, pc1.size() * sizeof(uint32_t), pc1.data(), { (CEIL_DIV(m, pipeline->wg_denoms[0]) * pipeline->wg_denoms[0]) * split_k, n, batch }); - ggml_vk_sync_buffers(subctx); - const std::array pc2 = { (uint32_t)(m * n * batch), split_k }; - ggml_vk_dispatch_pipeline(ctx, subctx, ctx->device->pipeline_matmul_split_k_reduce, { split_k_buffer, d }, pc2.size() * sizeof(uint32_t), pc2.data(), { m * n * batch, 1, 1 }); -} - -static bool ggml_vk_dim01_contiguous(const ggml_tensor * tensor) { - return - tensor->nb[0] == ggml_type_size(tensor->type) && - tensor->nb[1] == (tensor->nb[0]*tensor->ne[0])/ggml_blck_size(tensor->type) && - tensor->nb[3] == tensor->nb[2]*tensor->ne[2]; -} - -static vk_pipeline ggml_vk_get_cpy_pipeline(ggml_backend_vk_context * ctx, ggml_type from, ggml_type to) { - if (from == GGML_TYPE_F32 && to == GGML_TYPE_F32) { - return ctx->device->pipeline_cpy_f32_f32; - } - if (from == GGML_TYPE_F32 && to == GGML_TYPE_F16) { - return ctx->device->pipeline_cpy_f32_f16; - } - if (from == GGML_TYPE_F16 && to == GGML_TYPE_F16) { - return ctx->device->pipeline_cpy_f16_f16; - } - - std::cerr << "Missing CPY op for types: " << ggml_type_name(from) << " " << ggml_type_name(to) << std::endl; - GGML_ASSERT(false); -} - -static void ggml_vk_cpy_to_contiguous(ggml_backend_vk_context * ctx, vk_context * subctx, vk_pipeline pipeline, const ggml_tensor * tensor, vk_subbuffer&& in, vk_subbuffer&& out) { -#ifdef GGML_VULKAN_DEBUG - std::cerr << "ggml_vk_cpy_to_contiguous((" << tensor << ", type=" << tensor->type << ", backend=" << tensor->backend << ", ne0=" << tensor->ne[0] << ", ne1=" << tensor->ne[1] << ", ne2=" << tensor->ne[2] << ", ne3=" << tensor->ne[3] << ", nb0=" << tensor->nb[0] << ", nb1=" << tensor->nb[1] << ", nb2=" << tensor->nb[2] << ", nb3=" << tensor->nb[3] << "), "; - std::cerr << "buffer in size=" << in.buffer->size << ", buffer out size=" << out.buffer->size << ")" << std::endl; -#endif - const int tensor_type_size = ggml_type_size(tensor->type); - - const uint32_t ne = ggml_nelements(tensor); - - const vk_op_unary_push_constants pc = { - (uint32_t)ne, - (uint32_t)tensor->ne[0], (uint32_t)tensor->ne[1], (uint32_t)tensor->ne[2], (uint32_t)tensor->ne[3], (uint32_t)tensor->nb[0] / tensor_type_size, (uint32_t)tensor->nb[1] / tensor_type_size, (uint32_t)tensor->nb[2] / tensor_type_size, (uint32_t)tensor->nb[3] / tensor_type_size, - (uint32_t)tensor->ne[0], (uint32_t)tensor->ne[1], (uint32_t)tensor->ne[2], (uint32_t)tensor->ne[3], 1 , (uint32_t)tensor->ne[0] , (uint32_t)(tensor->ne[0] * tensor->ne[1]) , (uint32_t)(tensor->ne[0] * tensor->ne[1] * tensor->ne[2]), - 0, - 0.0f, 0.0f, - }; - ggml_vk_sync_buffers(subctx); - ggml_vk_dispatch_pipeline(ctx, subctx, pipeline, { in, out }, sizeof(vk_op_unary_push_constants), &pc, { ne, 1, 1 }); -} - -static void ggml_vk_mul_mat_q_f16(ggml_backend_vk_context * ctx, vk_context * subctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) { -#ifdef GGML_VULKAN_DEBUG - std::cerr << "ggml_vk_mul_mat_q_f16((" << src0 << ", name=" << src0->name << ", type=" << src0->type << ", backend=" << src0->backend << ", ne0=" << src0->ne[0] << ", ne1=" << src0->ne[1] << ", ne2=" << src0->ne[2] << ", ne3=" << src0->ne[3] << ", nb0=" << src0->nb[0] << ", nb1=" << src0->nb[1] << ", nb2=" << src0->nb[2] << ", nb3=" << src0->nb[3]; - std::cerr << "), (" << src1 << ", name=" << src1->name << ", type=" << src1->type << ", backend=" << src1->backend << ", ne0=" << src1->ne[0] << ", ne1=" << src1->ne[1] << ", ne2=" << src1->ne[2] << ", ne3=" << src1->ne[3] << ", nb0=" << src1->nb[0] << ", nb1=" << src1->nb[1] << ", nb2=" << src1->nb[2] << ", nb3=" << src1->nb[3]; - std::cerr << "), (" << dst << ", name=" << dst->name << ", type=" << dst->type << ", backend=" << dst->backend << ", ne0=" << dst->ne[0] << ", ne1=" << dst->ne[1] << ", ne2=" << dst->ne[2] << ", ne3=" << dst->ne[3] << ", nb0=" << dst->nb[0] << ", nb1=" << dst->nb[1] << ", nb2=" << dst->nb[2] << ", nb3=" << dst->nb[3] << "),)" << std::endl; -#endif - GGML_ASSERT(ggml_vk_dim01_contiguous(src0) || src0->type == GGML_TYPE_F32 || src0->type == GGML_TYPE_F16); // NOLINT - GGML_ASSERT(ggml_vk_dim01_contiguous(src1) || src1->type == GGML_TYPE_F32 || src1->type == GGML_TYPE_F16); // NOLINT - - const uint64_t ne00 = src0->ne[0]; - const uint64_t ne01 = src0->ne[1]; - const uint64_t ne02 = src0->ne[2]; - const uint64_t ne03 = src0->ne[3]; - - const uint64_t ne10 = src1->ne[0]; - const uint64_t ne11 = src1->ne[1]; - const uint64_t ne12 = src1->ne[2]; - const uint64_t ne13 = src1->ne[3]; - - const uint64_t ne20 = dst->ne[0]; - const uint64_t ne21 = dst->ne[1]; - - const uint64_t r2 = ne12 / ne02; - const uint64_t r3 = ne13 / ne03; - - ggml_tensor_extra_gpu * extra = (ggml_tensor_extra_gpu *) dst->extra; - ggml_tensor_extra_gpu * extra_src0 = (ggml_tensor_extra_gpu *) src0->extra; - ggml_tensor_extra_gpu * extra_src1 = (ggml_tensor_extra_gpu *) src1->extra; - - vk_buffer d_Qx; - size_t qx_buf_offset = 0; - vk_buffer d_Qy; - size_t qy_buf_offset = 0; - - bool src0_uma = false; - bool src1_uma = false; - - if (ctx->device->uma) { - ggml_vk_host_get(ctx, src0->data, d_Qx, qx_buf_offset); - ggml_vk_host_get(ctx, src1->data, d_Qy, qy_buf_offset); - src0_uma = d_Qx != nullptr; - src1_uma = d_Qy != nullptr; - } - - const bool x_non_contig = !ggml_vk_dim01_contiguous(src0); - const bool y_non_contig = !ggml_vk_dim01_contiguous(src1); - - const bool y_f32_kernel = src1->type == GGML_TYPE_F32 && !y_non_contig; - - vk_matmul_pipeline mmp = ggml_vk_get_mul_mat_mat_pipeline(ctx, src0->type, y_non_contig ? GGML_TYPE_F16 : src1->type); - - const bool qx_needs_dequant = mmp == nullptr || x_non_contig; - const bool qy_needs_dequant = (src1->type != GGML_TYPE_F16 && !y_f32_kernel) || y_non_contig; - - if (mmp == nullptr) { - // Fall back to dequant + f16 mulmat - mmp = ggml_vk_get_mul_mat_mat_pipeline(ctx, GGML_TYPE_F16, y_f32_kernel ? GGML_TYPE_F32 : GGML_TYPE_F16); - } - - // Not implemented - GGML_ASSERT(y_non_contig || !qy_needs_dequant); // NOLINT - - const int x_ne = ne01 * ne00; - const int y_ne = ne11 * ne10; - const int d_ne = ne11 * ne01; - - const uint32_t kpad = ggml_vk_align_size(ne10, ggml_vk_guess_matmul_pipeline_align(ctx, mmp, ne01, ne11)); - const bool aligned = ne10 == kpad; - - const uint32_t split_k = ggml_vk_guess_split_k(ne01, ne11, ne10); - - vk_pipeline pipeline = ggml_vk_guess_matmul_pipeline(ctx, mmp, ne01, ne11, aligned); - - const uint64_t qx_sz = ggml_type_size(src0->type) * x_ne / ggml_blck_size(src0->type); - const uint64_t qy_sz = ggml_type_size(src1->type) * y_ne / ggml_blck_size(src1->type); - const uint64_t x_sz = !qx_needs_dequant ? qx_sz : sizeof(ggml_fp16_t) * x_ne; - const uint64_t y_sz = y_f32_kernel ? sizeof(float) * y_ne : sizeof(ggml_fp16_t) * y_ne; - const uint64_t d_sz = sizeof(float) * d_ne; - - vk_buffer d_D = extra->buffer_gpu.lock(); - const uint64_t d_buf_offset = extra->offset; - GGML_ASSERT(d_D != nullptr); - GGML_ASSERT(d_D->size >= d_buf_offset + d_sz * ne02 * ne03); - vk_buffer d_X; - uint64_t x_buf_offset = 0; - vk_buffer d_Y; - uint64_t y_buf_offset = 0; - if (!src0_uma) { - d_Qx = extra_src0->buffer_gpu.lock(); - qx_buf_offset = extra_src0->offset; - GGML_ASSERT(d_Qx != nullptr); - } - if (!src1_uma) { - d_Qy = extra_src1->buffer_gpu.lock(); - qy_buf_offset = extra_src1->offset; - GGML_ASSERT(d_Qy != nullptr); - } - if (qx_needs_dequant) { - d_X = ctx->prealloc_x; - GGML_ASSERT(d_X->size >= x_sz * ne02 * ne03); - } else { - d_X = d_Qx; - x_buf_offset = qx_buf_offset; - GGML_ASSERT(qx_sz == x_sz); - } - if (qy_needs_dequant) { - d_Y = ctx->prealloc_y; - GGML_ASSERT(d_Y->size >= y_sz * ne02 * ne03); - } else { - d_Y = d_Qy; - y_buf_offset = qy_buf_offset; - GGML_ASSERT(qy_sz == y_sz); - } - - vk_pipeline to_fp16_vk_0 = nullptr; - vk_pipeline to_fp16_vk_1 = nullptr; - - if (x_non_contig) { - to_fp16_vk_0 = ggml_vk_get_cpy_pipeline(ctx, src0->type, GGML_TYPE_F16); - } else { - to_fp16_vk_0 = ggml_vk_get_to_fp16(ctx, src0->type); - } - if (y_non_contig) { - to_fp16_vk_1 = ggml_vk_get_cpy_pipeline(ctx, src1->type, GGML_TYPE_F16); - } else { - to_fp16_vk_1 = ggml_vk_get_to_fp16(ctx, src1->type); - } - GGML_ASSERT(!qx_needs_dequant || to_fp16_vk_0 != nullptr); // NOLINT - GGML_ASSERT(!qy_needs_dequant || to_fp16_vk_1 != nullptr); // NOLINT - - // Allocate descriptor sets - ggml_pipeline_allocate_descriptor_sets(ctx, pipeline, 1); - if (qx_needs_dequant) { - ggml_pipeline_allocate_descriptor_sets(ctx, to_fp16_vk_0, 1); - } - if (qy_needs_dequant) { - ggml_pipeline_allocate_descriptor_sets(ctx, to_fp16_vk_1, 1); - } - if (split_k > 1) { - ggml_pipeline_allocate_descriptor_sets(ctx, ctx->device->pipeline_matmul_split_k_reduce, 1); - } - - if (x_non_contig) { - ggml_vk_cpy_to_contiguous(ctx, subctx, to_fp16_vk_0, src0, { d_Qx, qx_buf_offset, VK_WHOLE_SIZE }, { d_X, 0, VK_WHOLE_SIZE }); - } else if (qx_needs_dequant) { - const std::vector pc = { (uint32_t)ne01, (uint32_t)ne10, (uint32_t)ne10, (uint32_t)ne10, (uint32_t)(ggml_nelements(src0)) }; - ggml_vk_sync_buffers(subctx); - ggml_vk_dispatch_pipeline(ctx, subctx, to_fp16_vk_0, { { d_Qx, qx_buf_offset, qx_sz * ne02 * ne03 }, { d_X, 0, x_sz * ne02 * ne03 } }, pc.size() * sizeof(uint32_t), pc.data(), { (uint32_t)(x_ne * ne02 * ne03), 1, 1}); - } - if (y_non_contig) { - ggml_vk_cpy_to_contiguous(ctx, subctx, to_fp16_vk_1, src1, { d_Qy, qy_buf_offset, VK_WHOLE_SIZE }, { d_Y, 0, VK_WHOLE_SIZE }); - } - - uint32_t stride_batch_x = ne00*ne01; - uint32_t stride_batch_y = ne10*ne11; - - if (!ggml_vk_dim01_contiguous(src0) && !qx_needs_dequant) { - stride_batch_x = src0->nb[0] / ggml_type_size(src0->type); - } - - if (!ggml_vk_dim01_contiguous(src1) && !qy_needs_dequant) { - stride_batch_y = src1->nb[0] / ggml_type_size(src1->type); - } - - // compute - ggml_vk_matmul(ctx, subctx, pipeline, { d_X, x_buf_offset, x_sz * ne02 * ne03 }, { d_Y, y_buf_offset, y_sz * ne12 * ne13 }, { d_D, d_buf_offset, d_sz * ne12 * ne13 }, { ctx->prealloc_split_k, 0, d_sz * ne12 * ne13 * split_k }, ne01, ne11, ne10, ne10, ne10, ne01, split_k, ne12*ne13, ne02, ne12, r2, r3, stride_batch_x, stride_batch_y, ne20*ne21); // NOLINT - - if (dst->backend == GGML_BACKEND_TYPE_CPU) { - // copy dst to host - float * d = (float *) ((char *) dst->data); - ggml_vk_buffer_read_async(ctx, subctx, d_D, 0, d, sizeof(float) * d_ne * ne12 * ne13); - } -} - -static void ggml_vk_mul_mat_vec_q_f16(ggml_backend_vk_context * ctx, vk_context * subctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) { -#ifdef GGML_VULKAN_DEBUG - std::cerr << "ggml_vk_mul_mat_vec_q_f16((" << src0 << ", name=" << src0->name << ", type=" << src0->type << ", backend=" << src0->backend << ", ne0=" << src0->ne[0] << ", ne1=" << src0->ne[1] << ", ne2=" << src0->ne[2] << ", ne3=" << src0->ne[3] << ", nb0=" << src0->nb[0] << ", nb1=" << src0->nb[1] << ", nb2=" << src0->nb[2] << ", nb3=" << src0->nb[3]; - std::cerr << "), (" << src1 << ", name=" << src1->name << ", type=" << src1->type << ", backend=" << src1->backend << ", ne0=" << src1->ne[0] << ", ne1=" << src1->ne[1] << ", ne2=" << src1->ne[2] << ", ne3=" << src1->ne[3] << ", nb0=" << src1->nb[0] << ", nb1=" << src1->nb[1] << ", nb2=" << src1->nb[2] << ", nb3=" << src1->nb[3]; - std::cerr << "), (" << dst << ", name=" << dst->name << ", type=" << dst->type << ", backend=" << dst->backend << ", ne0=" << dst->ne[0] << ", ne1=" << dst->ne[1] << ", ne2=" << dst->ne[2] << ", ne3=" << dst->ne[3] << ", nb0=" << dst->nb[0] << ", nb1=" << dst->nb[1] << ", nb2=" << dst->nb[2] << ", nb3=" << dst->nb[3] << "),)" << std::endl; -#endif - GGML_ASSERT(ggml_vk_dim01_contiguous(src0) || src0->type == GGML_TYPE_F32 || src0->type == GGML_TYPE_F16); // NOLINT - GGML_ASSERT(ggml_vk_dim01_contiguous(src1) || src1->type == GGML_TYPE_F32 || src1->type == GGML_TYPE_F16); // NOLINT - - const uint64_t ne00 = src0->ne[0]; - const uint64_t ne01 = src0->ne[1]; - const uint64_t ne02 = src0->ne[2]; - const uint64_t ne03 = src0->ne[3]; - - const uint64_t ne10 = src1->ne[0]; - const uint64_t ne11 = src1->ne[1]; - const uint64_t ne12 = src1->ne[2]; - const uint64_t ne13 = src1->ne[3]; - - GGML_ASSERT(ne11 == 1); - - const uint64_t nb2 = dst->nb[2]; - const uint64_t nb3 = dst->nb[3]; - - const uint64_t r2 = ne12 / ne02; - const uint64_t r3 = ne13 / ne03; - - ggml_tensor_extra_gpu * extra = (ggml_tensor_extra_gpu *) dst->extra; - ggml_tensor_extra_gpu * extra_src0 = (ggml_tensor_extra_gpu *) src0->extra; - ggml_tensor_extra_gpu * extra_src1 = (ggml_tensor_extra_gpu *) src1->extra; - - vk_buffer d_Qx; - size_t qx_buf_offset = 0; - vk_buffer d_Qy; - size_t qy_buf_offset = 0; - - bool src0_uma = false; - bool src1_uma = false; - - if (ctx->device->uma) { - ggml_vk_host_get(ctx, src0->data, d_Qx, qx_buf_offset); - ggml_vk_host_get(ctx, src1->data, d_Qy, qy_buf_offset); - src0_uma = d_Qx != nullptr; - src1_uma = d_Qy != nullptr; - } - - const bool x_non_contig = !ggml_vk_dim01_contiguous(src0); - const bool y_non_contig = !ggml_vk_dim01_contiguous(src1); - - const bool f16_f32_kernel = src1->type == GGML_TYPE_F32; - - const bool qx_needs_dequant = x_non_contig; - const bool qy_needs_dequant = (src1->type != GGML_TYPE_F16 && !f16_f32_kernel) || y_non_contig; - - const uint64_t x_ne = ne01 * ne00; - const uint64_t y_ne = ne11 * ne10; - const uint64_t d_ne = ne11 * ne01; - - const uint64_t qx_sz = ggml_vk_align_size(ggml_type_size(src0->type) * x_ne / ggml_blck_size(src0->type), ctx->device->properties.limits.minStorageBufferOffsetAlignment); - const uint64_t qy_sz = ggml_type_size(src1->type) * y_ne / ggml_blck_size(src1->type); - const uint64_t x_sz = x_non_contig ? ggml_vk_align_size(ggml_type_size(src0->type) * x_ne, ctx->device->properties.limits.minStorageBufferOffsetAlignment) : qx_sz; - const uint64_t y_sz = f16_f32_kernel ? sizeof(float) * y_ne : sizeof(ggml_fp16_t) * y_ne; - const uint64_t d_sz = sizeof(float) * d_ne; - - vk_buffer d_D = extra->buffer_gpu.lock(); - const uint64_t d_buf_offset = extra->offset; - GGML_ASSERT(d_D != nullptr); - vk_buffer d_X; - uint64_t x_buf_offset = 0; - vk_buffer d_Y; - uint64_t y_buf_offset = 0; - if(!src0_uma) { - d_Qx = extra_src0->buffer_gpu.lock(); - qx_buf_offset = extra_src0->offset; - GGML_ASSERT(d_Qx != nullptr); - } - if(!src1_uma) { - d_Qy = extra_src1->buffer_gpu.lock(); - qy_buf_offset = extra_src1->offset; - GGML_ASSERT(d_Qy != nullptr); - } - if (qx_needs_dequant) { - d_X = ctx->prealloc_x; - } else { - d_X = d_Qx; - x_buf_offset = qx_buf_offset; - GGML_ASSERT(qx_sz == x_sz); - } - if (qy_needs_dequant) { - d_Y = ctx->prealloc_y; - } else { - d_Y = d_Qy; - y_buf_offset = qy_buf_offset; - GGML_ASSERT(qy_sz == y_sz); - } - - vk_pipeline to_fp16_vk_0 = nullptr; - vk_pipeline to_fp16_vk_1 = nullptr; - if (x_non_contig) { - to_fp16_vk_0 = ggml_vk_get_cpy_pipeline(ctx, src0->type, src0->type); - } - if (y_non_contig) { - to_fp16_vk_1 = ggml_vk_get_cpy_pipeline(ctx, src1->type, src1->type); - } else { - to_fp16_vk_1 = ggml_vk_get_to_fp16(ctx, src1->type); - } - vk_pipeline dmmv = ggml_vk_get_dequantize_mul_mat_vec(ctx, src0->type); - GGML_ASSERT(!qx_needs_dequant || to_fp16_vk_0 != nullptr); // NOLINT - GGML_ASSERT(!qy_needs_dequant || to_fp16_vk_1 != nullptr); // NOLINT - GGML_ASSERT(dmmv != nullptr); - - // Allocate descriptor sets - if (qx_needs_dequant) { - ggml_pipeline_allocate_descriptor_sets(ctx, to_fp16_vk_0, 1); - } - if (qy_needs_dequant) { - ggml_pipeline_allocate_descriptor_sets(ctx, to_fp16_vk_1, y_non_contig ? 1 : ne12 * ne13); - } - ggml_pipeline_allocate_descriptor_sets(ctx, dmmv, ne12 * ne13); - - if (x_non_contig) { - GGML_ASSERT(x_sz == ggml_vk_align_size(ggml_type_size(src0->type) * x_ne, ctx->device->properties.limits.minStorageBufferOffsetAlignment)); - ggml_vk_cpy_to_contiguous(ctx, subctx, to_fp16_vk_0, src0, { d_Qx, qx_buf_offset, VK_WHOLE_SIZE }, { d_X, 0, VK_WHOLE_SIZE }); - } - if (y_non_contig) { - GGML_ASSERT(y_sz == ggml_type_size(src1->type) * y_ne); - ggml_vk_cpy_to_contiguous(ctx, subctx, to_fp16_vk_1, src1, { d_Qy, qy_buf_offset, VK_WHOLE_SIZE }, { d_Y, 0, VK_WHOLE_SIZE }); - } - - for (uint64_t i13 = 0; i13 < ne13; i13++) { - const uint64_t i03 = i13 / r3; - for (uint64_t i12 = 0; i12 < ne12; i12++) { - const uint64_t i02 = i12 / r2; - - const uint64_t it_idx0 = (i03 * ne02 + i02); - const uint64_t it_idx1 = (i13 * ne12 + i12); - const uint64_t x_offset = x_buf_offset + x_sz * it_idx0; - const uint64_t qy_offset = qy_buf_offset + qy_sz * it_idx1; - const uint64_t y_offset = y_buf_offset + y_sz * it_idx1; - const uint64_t d_offset = d_buf_offset + d_sz * it_idx1; - - const uint64_t y_buffer_offset = (y_offset / ctx->device->properties.limits.minStorageBufferOffsetAlignment) * ctx->device->properties.limits.minStorageBufferOffsetAlignment; - const uint64_t y_shader_offset = y_offset - y_buffer_offset; - - const uint64_t d_buffer_offset = (d_offset / ctx->device->properties.limits.minStorageBufferOffsetAlignment) * ctx->device->properties.limits.minStorageBufferOffsetAlignment; - const uint64_t d_shader_offset = d_offset - d_buffer_offset; - - if (!y_non_contig && qy_needs_dequant) { - const std::vector pc = { (uint32_t)ne11, (uint32_t)ne10, (uint32_t)ne10, (uint32_t)ne10, (uint32_t)(y_ne / 32) }; - ggml_vk_sync_buffers(subctx); - ggml_vk_dispatch_pipeline(ctx, subctx, to_fp16_vk_1, { { d_Qy, qy_offset, qy_sz }, { d_Y, y_offset, y_sz } }, pc.size() * sizeof(uint32_t), pc.data(), { (uint32_t)y_ne, 1, 1}); - } - - // compute - const std::array pc = { (uint32_t)ne00, (uint32_t)(y_shader_offset / ggml_type_size(src1->type)), (uint32_t)(d_shader_offset / ggml_type_size(dst->type))}; - ggml_vk_sync_buffers(subctx); - ggml_vk_dispatch_pipeline(ctx, subctx, dmmv, { { d_X, x_offset, x_sz }, { d_Y, y_buffer_offset, y_sz + y_shader_offset }, { d_D, d_buffer_offset, d_sz + d_shader_offset } }, 3 * sizeof(int), &pc, { (uint32_t)ne01, 1, 1}); - - if (dst->backend == GGML_BACKEND_TYPE_CPU) { - // copy dst to host - float * d = (float *) ((char *) dst->data + i12*nb2 + i13*nb3); - ggml_vk_sync_buffers(subctx); - ggml_vk_buffer_read_async(ctx, subctx, d_D, d_offset, d, sizeof(float) * d_ne); - } - } - } -} - -static void ggml_vk_mul_mat_vec_p021_f16_f32(ggml_backend_vk_context * ctx, vk_context * subctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) { -#ifdef GGML_VULKAN_DEBUG - std::cerr << "ggml_vk_mul_mat_p021_f16_f32((" << src0 << ", name=" << src0->name << ", type=" << src0->type << ", backend=" << src0->backend << ", ne0=" << src0->ne[0] << ", ne1=" << src0->ne[1] << ", ne2=" << src0->ne[2] << ", ne3=" << src0->ne[3] << ", nb0=" << src0->nb[0] << ", nb1=" << src0->nb[1] << ", nb2=" << src0->nb[2] << ", nb3=" << src0->nb[3]; - std::cerr << "), (" << src1 << ", name=" << src1->name << ", type=" << src1->type << ", backend=" << src1->backend << ", ne0=" << src1->ne[0] << ", ne1=" << src1->ne[1] << ", ne2=" << src1->ne[2] << ", ne3=" << src1->ne[3] << ", nb0=" << src1->nb[0] << ", nb1=" << src1->nb[1] << ", nb2=" << src1->nb[2] << ", nb3=" << src1->nb[3]; - std::cerr << "), (" << dst << ", name=" << dst->name << ", type=" << dst->type << ", backend=" << dst->backend << ", ne0=" << dst->ne[0] << ", ne1=" << dst->ne[1] << ", ne2=" << dst->ne[2] << ", ne3=" << dst->ne[3] << ", nb0=" << dst->nb[0] << ", nb1=" << dst->nb[1] << ", nb2=" << dst->nb[2] << ", nb3=" << dst->nb[3] << "),)" << std::endl; -#endif - GGML_ASSERT(ggml_is_permuted(src0) && ggml_is_permuted(src1)); - GGML_ASSERT(src0->backend == GGML_BACKEND_TYPE_GPU); - GGML_ASSERT(src0->nb[0] <= src0->nb[1] && src0->nb[2] <= src0->nb[3]); // NOLINT - GGML_ASSERT(src1->nb[0] <= src1->nb[1] && src1->nb[2] <= src1->nb[3]); // NOLINT - GGML_ASSERT(src0->type == GGML_TYPE_F16); - GGML_ASSERT(src1->type == GGML_TYPE_F32); - - const uint64_t ne00 = src0->ne[0]; - const uint64_t ne01 = src0->ne[1]; - const uint64_t ne02 = src0->ne[2]; - // const uint64_t ne03 = src0->ne[3]; - - const uint64_t ne10 = src1->ne[0]; - const uint64_t ne11 = src1->ne[1]; - const uint64_t ne12 = src1->ne[2]; - // const uint64_t ne13 = src1->ne[3]; - - GGML_ASSERT(ne11 == 1); - - ggml_tensor_extra_gpu * extra = (ggml_tensor_extra_gpu *) dst->extra; - ggml_tensor_extra_gpu * extra_src0 = (ggml_tensor_extra_gpu *) src0->extra; - ggml_tensor_extra_gpu * extra_src1 = (ggml_tensor_extra_gpu *) src1->extra; - - vk_buffer d_Qy; - size_t qy_buf_offset = 0; - - bool src1_uma = false; - - if (ctx->device->uma) { - ggml_vk_host_get(ctx, src1->data, d_Qy, qy_buf_offset); - src1_uma = d_Qy != nullptr; - } - - const uint64_t x_ne = ne00 * ne01 * ne02; - const uint64_t y_ne = ne10 * ne11 * ne12; - const uint64_t d_ne = ne01 * ne11 * ne12; - - const uint64_t qx_sz = ggml_vk_align_size(ggml_type_size(src0->type) * x_ne / ggml_blck_size(src0->type), ctx->device->properties.limits.minStorageBufferOffsetAlignment); - const uint64_t qy_sz = ggml_type_size(src1->type) * y_ne / ggml_blck_size(src1->type); - const uint64_t d_sz = sizeof(float) * d_ne; - - vk_buffer d_D = extra->buffer_gpu.lock(); - const uint64_t d_buf_offset = extra->offset; - GGML_ASSERT(d_D != nullptr); - vk_buffer d_Qx = extra_src0->buffer_gpu.lock(); - const uint64_t qx_buf_offset = extra_src0->offset; - GGML_ASSERT(d_Qx != nullptr); - if (!src1_uma) { - d_Qy = extra_src1->buffer_gpu.lock(); - qy_buf_offset = extra_src1->offset; - GGML_ASSERT(d_Qx != nullptr); - } - - // Allocate descriptor sets - ggml_pipeline_allocate_descriptor_sets(ctx, ctx->device->pipeline_mul_mat_vec_p021_f16_f32, 1); - - const uint64_t qy_buffer_offset = (qy_buf_offset / ctx->device->properties.limits.minStorageBufferOffsetAlignment) * ctx->device->properties.limits.minStorageBufferOffsetAlignment; - const uint64_t qy_shader_offset = qy_buf_offset - qy_buffer_offset; - - const uint64_t d_buffer_offset = (d_buf_offset / ctx->device->properties.limits.minStorageBufferOffsetAlignment) * ctx->device->properties.limits.minStorageBufferOffsetAlignment; - const uint64_t d_shader_offset = d_buf_offset - d_buffer_offset; - - // compute - const std::array pc = { (uint32_t)ne00, (uint32_t)ne01, (uint32_t)ne02, (uint32_t)ne12, (uint32_t)(qy_shader_offset / ggml_type_size(src1->type)), (uint32_t)(d_shader_offset / ggml_type_size(dst->type)) }; - ggml_vk_sync_buffers(subctx); - ggml_vk_dispatch_pipeline(ctx, subctx, ctx->device->pipeline_mul_mat_vec_p021_f16_f32, { { d_Qx, qx_buf_offset, qx_sz }, { d_Qy, qy_buffer_offset, qy_sz + qy_shader_offset }, { d_D, d_buffer_offset, d_sz + d_shader_offset } }, 6 * sizeof(uint32_t), &pc, { 1, (uint32_t)ne01, (uint32_t)ne12 }); - - if (dst->backend == GGML_BACKEND_TYPE_CPU) { - // copy dst to host - float * d = (float *) dst->data; - ggml_vk_sync_buffers(subctx); - ggml_vk_buffer_read_async(ctx, subctx, d_D, d_buf_offset, d, sizeof(float) * d_ne); - } -} - -static void ggml_vk_mul_mat_vec_nc_f16_f32(ggml_backend_vk_context * ctx, vk_context * subctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) { -#ifdef GGML_VULKAN_DEBUG - std::cerr << "ggml_vk_mul_mat_nc_f16_f32((" << src0 << ", name=" << src0->name << ", type=" << src0->type << ", backend=" << src0->backend << ", ne0=" << src0->ne[0] << ", ne1=" << src0->ne[1] << ", ne2=" << src0->ne[2] << ", ne3=" << src0->ne[3] << ", nb0=" << src0->nb[0] << ", nb1=" << src0->nb[1] << ", nb2=" << src0->nb[2] << ", nb3=" << src0->nb[3]; - std::cerr << "), (" << src1 << ", name=" << src1->name << ", type=" << src1->type << ", backend=" << src1->backend << ", ne0=" << src1->ne[0] << ", ne1=" << src1->ne[1] << ", ne2=" << src1->ne[2] << ", ne3=" << src1->ne[3] << ", nb0=" << src1->nb[0] << ", nb1=" << src1->nb[1] << ", nb2=" << src1->nb[2] << ", nb3=" << src1->nb[3]; - std::cerr << "), (" << dst << ", name=" << dst->name << ", type=" << dst->type << ", backend=" << dst->backend << ", ne0=" << dst->ne[0] << ", ne1=" << dst->ne[1] << ", ne2=" << dst->ne[2] << ", ne3=" << dst->ne[3] << ", nb0=" << dst->nb[0] << ", nb1=" << dst->nb[1] << ", nb2=" << dst->nb[2] << ", nb3=" << dst->nb[3] << "),)" << std::endl; -#endif - GGML_ASSERT(!ggml_is_transposed(src0)); - GGML_ASSERT(!ggml_is_transposed(src1)); - GGML_ASSERT(!ggml_is_permuted(src0)); - GGML_ASSERT(src0->backend == GGML_BACKEND_TYPE_GPU); - GGML_ASSERT(src0->type == GGML_TYPE_F16); - GGML_ASSERT(src1->type == GGML_TYPE_F32); - - const uint64_t ne00 = src0->ne[0]; - const uint64_t ne01 = src0->ne[1]; - const uint64_t ne02 = src0->ne[2]; - // const uint64_t ne03 = src0->ne[3]; - - const uint64_t nb01 = src0->nb[1]; - const uint64_t nb02 = src0->nb[2]; - - // const uint64_t ne10 = src1->ne[0]; - const uint64_t ne11 = src1->ne[1]; - const uint64_t ne12 = src1->ne[2]; - // const uint64_t ne13 = src1->ne[3]; - - GGML_ASSERT(ne11 == 1); - - ggml_tensor_extra_gpu * extra = (ggml_tensor_extra_gpu *) dst->extra; - ggml_tensor_extra_gpu * extra_src0 = (ggml_tensor_extra_gpu *) src0->extra; - ggml_tensor_extra_gpu * extra_src1 = (ggml_tensor_extra_gpu *) src1->extra; - - vk_buffer d_Qy = nullptr; - size_t qy_buf_offset = 0; - - bool src1_uma = false; - - if (ctx->device->uma) { - ggml_vk_host_get(ctx, src1->data, d_Qy, qy_buf_offset); - src1_uma = d_Qy != nullptr; - } - - const uint64_t d_ne = ne01 * ne11 * ne12; - - const uint32_t row_stride_x = nb01 / sizeof(ggml_fp16_t); - const uint32_t channel_stride_x = nb02 / sizeof(ggml_fp16_t); - - const uint64_t qx_sz = ggml_nbytes(src0); - const uint64_t qy_sz = ggml_nbytes(src1); - const uint64_t d_sz = sizeof(float) * d_ne; - - vk_buffer d_D = extra->buffer_gpu.lock(); - const uint64_t d_buf_offset = extra->offset; - GGML_ASSERT(d_D != nullptr); - vk_buffer d_Qx = extra_src0->buffer_gpu.lock(); - const uint64_t qx_buf_offset = extra_src0->offset; - GGML_ASSERT(d_Qx != nullptr); - if (!src1_uma) { - d_Qy = extra_src1->buffer_gpu.lock(); - qy_buf_offset = extra_src1->offset; - GGML_ASSERT(d_Qx != nullptr); - } - - // Allocate descriptor sets - ggml_pipeline_allocate_descriptor_sets(ctx, ctx->device->pipeline_mul_mat_vec_nc_f16_f32, 1); - - const uint64_t qy_buffer_offset = (qy_buf_offset / ctx->device->properties.limits.minStorageBufferOffsetAlignment) * ctx->device->properties.limits.minStorageBufferOffsetAlignment; - const uint64_t qy_shader_offset = qy_buf_offset - qy_buffer_offset; - - const uint64_t d_buffer_offset = (d_buf_offset / ctx->device->properties.limits.minStorageBufferOffsetAlignment) * ctx->device->properties.limits.minStorageBufferOffsetAlignment; - const uint64_t d_shader_offset = d_buf_offset - d_buffer_offset; - - // compute - const std::array pc = { (uint32_t)ne00, (uint32_t)ne01, row_stride_x, channel_stride_x, (uint32_t)(ne12 / ne02), (uint32_t)(qy_shader_offset / ggml_type_size(src1->type)), (uint32_t)(d_shader_offset / ggml_type_size(dst->type)) }; - ggml_vk_sync_buffers(subctx); - ggml_vk_dispatch_pipeline(ctx, subctx, ctx->device->pipeline_mul_mat_vec_nc_f16_f32, { { d_Qx, qx_buf_offset, qx_sz }, { d_Qy, qy_buffer_offset, qy_sz + qy_shader_offset }, { d_D, d_buffer_offset, d_sz + d_shader_offset } }, 7 * sizeof(uint32_t), &pc, { 1, (uint32_t)ne01, (uint32_t)ne12 }); - - if (dst->backend == GGML_BACKEND_TYPE_CPU) { - // copy dst to host - float * d = (float *) dst->data; - ggml_vk_sync_buffers(subctx); - ggml_vk_buffer_read_async(ctx, subctx, d_D, d_buf_offset, d, sizeof(float) * d_ne); - } -} - -static bool ggml_vk_can_mul_mat(const ggml_tensor * src0, const ggml_tensor * src1, const ggml_tensor * dst) { - const uint64_t ne10 = src1->ne[0]; - - const uint64_t ne0 = dst->ne[0]; - const uint64_t ne1 = dst->ne[1]; - - // TODO: find the optimal values for these - return (src0->type == GGML_TYPE_F32 || src0->type == GGML_TYPE_F16 || ggml_is_quantized(src0->type)) && - (src1->type == GGML_TYPE_F32 || src1->type == GGML_TYPE_F16 || ggml_is_quantized(src1->type)) && - dst->type == GGML_TYPE_F32 && - ((ne0 >= 32 && ne1 >= 32 && ne10 >= 32) || src0->backend == GGML_BACKEND_TYPE_GPU); -} - -static void ggml_vk_mul_mat(ggml_backend_vk_context * ctx, vk_context * subctx, const struct ggml_tensor * src0, const struct ggml_tensor * src1, struct ggml_tensor * dst) { -#ifdef GGML_VULKAN_DEBUG - std::cerr << "ggml_vk_mul_mat(" << src0 << ", " << src1 << ", " << dst << ")" << std::endl; -#endif - if (src0->type == GGML_TYPE_F16 && ggml_is_permuted(src0) && ggml_is_permuted(src1) && src1->ne[1] == 1) { - ggml_vk_mul_mat_vec_p021_f16_f32(ctx, subctx, src0, src1, dst); - } else if (src0->type == GGML_TYPE_F16 && !ggml_is_contiguous(src0) && !ggml_is_transposed(src1) && src1->ne[1] == 1) { - ggml_vk_mul_mat_vec_nc_f16_f32(ctx, subctx, src0, src1, dst); - } else if (src1->ne[1] == 1 && (src0->type == GGML_TYPE_F16 || ggml_is_quantized(src0->type))) { - ggml_vk_mul_mat_vec_q_f16(ctx, subctx, src0, src1, dst); - } else { - ggml_vk_mul_mat_q_f16(ctx, subctx, src0, src1, dst); - } -} - -// static void ggml_vk_mul_mat_id(ggml_backend_vk_context * ctx, vk_context * subctx, const struct ggml_tensor * src0, const struct ggml_tensor * src1, struct ggml_tensor * dst) { -// -// } - -static void ggml_vk_op_repeat(ggml_backend_vk_context * ctx, vk_context * subctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) { - // guaranteed to be an integer due to the check in ggml_can_repeat - const uint64_t ne0 = dst->ne[0]; - const uint64_t ne1 = dst->ne[1]; - const uint64_t ne2 = dst->ne[2]; - const uint64_t ne3 = dst->ne[3]; - - const uint64_t ne00 = src0->ne[0]; - const uint64_t ne01 = src0->ne[1]; - const uint64_t ne02 = src0->ne[2]; - const uint64_t ne03 = src0->ne[3]; - - const uint64_t nb0 = dst->nb[0]; - const uint64_t nb1 = dst->nb[1]; - const uint64_t nb2 = dst->nb[2]; - const uint64_t nb3 = dst->nb[3]; - - const uint64_t nb00 = src0->nb[0]; - const uint64_t nb01 = src0->nb[1]; - const uint64_t nb02 = src0->nb[2]; - const uint64_t nb03 = src0->nb[3]; - - const uint64_t nr0 = ne0/ne00; - const uint64_t nr1 = ne1/ne01; - const uint64_t nr2 = ne2/ne02; - const uint64_t nr3 = ne3/ne03; - - // TODO: support for transposed / permuted tensors - GGML_ASSERT(nb0 == sizeof(float)); - GGML_ASSERT(nb00 == sizeof(float)); - GGML_ASSERT(src0->backend == GGML_BACKEND_TYPE_GPU); - GGML_ASSERT(dst->backend == GGML_BACKEND_TYPE_GPU); - - ggml_tensor_extra_gpu * extra = (ggml_tensor_extra_gpu *) dst->extra; - ggml_tensor_extra_gpu * extra_src0 = (ggml_tensor_extra_gpu *) src0->extra; - - const vk_buffer src_buf = extra_src0->buffer_gpu.lock(); - const uint64_t src_offset = extra_src0->offset; - vk_buffer dst_buf = extra->buffer_gpu.lock(); - const uint64_t dst_offset = extra->offset; - - std::vector copies; - - for (uint64_t i3 = 0; i3 < nr3; i3++) { - for (uint64_t k3 = 0; k3 < ne03; k3++) { - for (uint64_t i2 = 0; i2 < nr2; i2++) { - for (uint64_t k2 = 0; k2 < ne02; k2++) { - for (uint64_t i1 = 0; i1 < nr1; i1++) { - for (uint64_t k1 = 0; k1 < ne01; k1++) { - for (uint64_t i0 = 0; i0 < nr0; i0++) { - copies.push_back({ - src_offset + (i3*ne03 + k3)*nb3 + (i2*ne02 + k2)*nb2 + (i1*ne01 + k1)*nb1 + (i0*ne00)*nb0, - dst_offset + ( k3)*nb03 + ( k2)*nb02 + ( k1)*nb01, - ne00*nb0, - }); - } - } - } - } - } - } - } - - ggml_vk_sync_buffers(subctx); - subctx->s->buffer.copyBuffer(src_buf->buffer, dst_buf->buffer, copies); - - GGML_UNUSED(ctx); - GGML_UNUSED(src1); -} - - -static vk_pipeline ggml_vk_op_get_pipeline(ggml_backend_vk_context * ctx, const ggml_tensor * src0, const ggml_tensor * src1, const ggml_tensor * src2, ggml_tensor * dst, ggml_op op) { - switch (op) { - case GGML_OP_ADD: - if (src0->type == GGML_TYPE_F32 && src1->type == GGML_TYPE_F32 && dst->type == GGML_TYPE_F32) { - return ctx->device->pipeline_add_f32; - } - return nullptr; - case GGML_OP_GET_ROWS: - GGML_ASSERT(src1->type == GGML_TYPE_I32); - if (dst->type == GGML_TYPE_F16) { - return ctx->device->pipeline_get_rows[src0->type]; - } - if (dst->type == GGML_TYPE_F32) { - return ctx->device->pipeline_get_rows_f32[src0->type]; - } - return nullptr; - case GGML_OP_MUL: - if (src0->type == GGML_TYPE_F32 && src1->type == GGML_TYPE_F32 && dst->type == GGML_TYPE_F32) { - return ctx->device->pipeline_mul_f32; - } - return nullptr; - case GGML_OP_SCALE: - if (src0->type == GGML_TYPE_F32 && dst->type == GGML_TYPE_F32) { - return ctx->device->pipeline_scale_f32; - } - return nullptr; - case GGML_OP_SQR: - if (src0->type == GGML_TYPE_F32 && dst->type == GGML_TYPE_F32) { - return ctx->device->pipeline_sqr_f32; - } - return nullptr; - case GGML_OP_CLAMP: - if (src0->type == GGML_TYPE_F32 && dst->type == GGML_TYPE_F32) { - return ctx->device->pipeline_clamp_f32; - } - return nullptr; - case GGML_OP_CPY: - case GGML_OP_CONT: - case GGML_OP_DUP: - return ggml_vk_get_cpy_pipeline(ctx, src0->type, dst->type); - case GGML_OP_NORM: - if (src0->type == GGML_TYPE_F32 && dst->type == GGML_TYPE_F32) { - return ctx->device->pipeline_norm_f32; - } - return nullptr; - case GGML_OP_RMS_NORM: - if (src0->type == GGML_TYPE_F32 && dst->type == GGML_TYPE_F32) { - return ctx->device->pipeline_rms_norm_f32; - } - return nullptr; - case GGML_OP_UNARY: - switch (ggml_get_unary_op(dst)) { - case GGML_UNARY_OP_SILU: - if (src0->type == GGML_TYPE_F32 && dst->type == GGML_TYPE_F32) { - return ctx->device->pipeline_silu_f32; - } - break; - case GGML_UNARY_OP_GELU: - if (src0->type == GGML_TYPE_F32 && dst->type == GGML_TYPE_F32) { - return ctx->device->pipeline_gelu_f32; - } - break; - case GGML_UNARY_OP_RELU: - if (src0->type == GGML_TYPE_F32 && dst->type == GGML_TYPE_F32) { - return ctx->device->pipeline_relu_f32; - } - break; - default: - break; - } - return nullptr; - case GGML_OP_DIAG_MASK_INF: - if (src0->type == GGML_TYPE_F32 && dst->type == GGML_TYPE_F32) { - return ctx->device->pipeline_diag_mask_inf_f32; - } - return nullptr; - case GGML_OP_SOFT_MAX: - if (src0->type == GGML_TYPE_F32 && (src1 == nullptr || src1->type == GGML_TYPE_F32) && (src2 == nullptr || src2->type == GGML_TYPE_F32) && dst->type == GGML_TYPE_F32) { - return ctx->device->pipeline_soft_max_f32; - } - return nullptr; - case GGML_OP_ROPE: - { - const int mode = ((const int32_t *) dst->op_params)[2]; - const bool is_neox = mode & 2; - const bool is_glm = mode & 4; - - if (is_glm) { - return nullptr; - } - - if (is_neox) { - if (src0->type == GGML_TYPE_F32 && dst->type == GGML_TYPE_F32) { - return ctx->device->pipeline_rope_neox_f32; - } - if (src0->type == GGML_TYPE_F16 && dst->type == GGML_TYPE_F16) { - return ctx->device->pipeline_rope_neox_f16; - } - } else { - if (src0->type == GGML_TYPE_F32 && dst->type == GGML_TYPE_F32) { - return ctx->device->pipeline_rope_f32; - } - if (src0->type == GGML_TYPE_F16 && dst->type == GGML_TYPE_F16) { - return ctx->device->pipeline_rope_f16; - } - } - return nullptr; - } - case GGML_OP_ARGSORT: - if (src0->type == GGML_TYPE_F32 && dst->type == GGML_TYPE_I32) { - return ctx->device->pipeline_argsort_f32; - } - return nullptr; - default: - return nullptr; - } -} - -static ggml_vk_func_t ggml_vk_op_get_func(ggml_op op) { - switch(op) { - case GGML_OP_REPEAT: - return ggml_vk_op_repeat; - default: - return nullptr; - } -} - -template -static void ggml_vk_op_f32(ggml_backend_vk_context * ctx, vk_context * subctx, const ggml_tensor * src0, const ggml_tensor * src1, const ggml_tensor * src2, ggml_tensor * dst, ggml_op op, const PC&& pc) { -#ifdef GGML_VULKAN_DEBUG - std::cerr << "ggml_vk_op_f32((" << src0 << ", name=" << src0->name << ", type=" << src0->type << ", backend=" << src0->backend << ", ne0=" << src0->ne[0] << ", ne1=" << src0->ne[1] << ", ne2=" << src0->ne[2] << ", ne3=" << src0->ne[3] << ", nb0=" << src0->nb[0] << ", nb1=" << src0->nb[1] << ", nb2=" << src0->nb[2] << ", nb3=" << src0->nb[3]; - if (src1 != nullptr) { - std::cerr << "), (" << src1 << ", name=" << src1->name << ", type=" << src1->type << ", backend=" << src1->backend << ", ne0=" << src1->ne[0] << ", ne1=" << src1->ne[1] << ", ne2=" << src1->ne[2] << ", ne3=" << src1->ne[3] << ", nb0=" << src1->nb[0] << ", nb1=" << src1->nb[1] << ", nb2=" << src1->nb[2] << ", nb3=" << src1->nb[3]; - } - if (src2 != nullptr) { - std::cerr << "), (" << src2 << ", name=" << src2->name << ", type=" << src2->type << ", backend=" << src2->backend << ", ne0=" << src2->ne[0] << ", ne1=" << src2->ne[1] << ", ne2=" << src2->ne[2] << ", ne3=" << src2->ne[3] << ", nb0=" << src2->nb[0] << ", nb1=" << src2->nb[1] << ", nb2=" << src2->nb[2] << ", nb3=" << src2->nb[3]; - } - std::cerr << "), (" << dst << ", name=" << dst->name << ", type=" << dst->type << ", backend=" << dst->backend << ", ne0=" << dst->ne[0] << ", ne1=" << dst->ne[1] << ", ne2=" << dst->ne[2] << ", ne3=" << dst->ne[3] << ", nb0=" << dst->nb[0] << ", nb1=" << dst->nb[1] << ", nb2=" << dst->nb[2] << ", nb3=" << dst->nb[3] << "), " << ggml_op_name(op) << ")" << std::endl; -#endif - GGML_ASSERT(op == GGML_OP_GET_ROWS || (!ggml_is_quantized(src0->type) && (src1 == nullptr || !ggml_is_quantized(src1->type)))); // NOLINT - GGML_ASSERT(op == GGML_OP_CPY || ggml_vk_dim01_contiguous(src0)); // NOLINT - GGML_ASSERT(dst->extra != nullptr); - const uint64_t ne00 = src0->ne[0]; - const uint64_t ne01 = src0->ne[1]; - const uint64_t ne02 = src0->ne[2]; - const uint64_t ne03 = src0->ne[3]; - const uint64_t ne0 = ne00 * ne01; - const bool use_src1 = src1 != nullptr; - const uint64_t ne10 = use_src1 ? src1->ne[0] : 0; - const uint64_t ne11 = use_src1 ? src1->ne[1] : 0; - const uint64_t ne12 = use_src1 ? src1->ne[2] : 0; - const uint64_t ne13 = use_src1 ? src1->ne[3] : 0; - const uint64_t ne1 = ne10 * ne11; - // const uint64_t nb10 = use_src1 ? src1->nb[0] : 0; - const uint64_t nb2 = dst->nb[2]; - const uint64_t nb3 = dst->nb[3]; - - const bool use_src2 = src2 != nullptr; - const uint64_t ne2 = use_src2 ? src2->ne[0] * src2->ne[1] : 0; - - vk_pipeline pipeline = ggml_vk_op_get_pipeline(ctx, src0, src1, src2, dst, op); - ggml_vk_func_t op_func; - - if (pipeline == nullptr) { - op_func = ggml_vk_op_get_func(op); - if (op_func == nullptr) { - std::cerr << "ggml_vulkan: Error: Missing op: " << ggml_op_name(op) << " for " << ggml_type_name(src0->type); - if (src1 != nullptr) { - std::cerr << " and " << ggml_type_name(src1->type); - } - std::cerr << " to " << ggml_type_name(dst->type) << std::endl; - GGML_ASSERT(false); - } - - op_func(ctx, subctx, src0, src1, dst); - return; - } - - ggml_tensor_extra_gpu * extra = (ggml_tensor_extra_gpu *) dst->extra; - ggml_tensor_extra_gpu * extra_src0 = (ggml_tensor_extra_gpu *) src0->extra; - ggml_tensor_extra_gpu * extra_src1 = use_src1 ? (ggml_tensor_extra_gpu *) src1->extra : nullptr; - ggml_tensor_extra_gpu * extra_src2 = use_src2 ? (ggml_tensor_extra_gpu *) src2->extra : nullptr; - - vk_buffer d_X = nullptr; - size_t x_buf_offset = 0; - vk_buffer d_Y = nullptr; - size_t y_buf_offset = 0; - vk_buffer d_Z = nullptr; - size_t z_buf_offset = 0; - - bool src0_uma = false; - bool src1_uma = false; - bool src2_uma = false; - - if (ctx->device->uma) { - ggml_vk_host_get(ctx, src0->data, d_X, x_buf_offset); - src0_uma = d_X != nullptr; - if (use_src1) { - ggml_vk_host_get(ctx, src1->data, d_Y, y_buf_offset); - src1_uma = d_Y != nullptr; - } - if (use_src2) { - ggml_vk_host_get(ctx, src1->data, d_Z, z_buf_offset); - src2_uma = d_Z != nullptr; - } - } - - uint64_t x_sz = ggml_vk_align_size(ggml_type_size(src0->type)/ggml_blck_size(src0->type) * ne0, ctx->device->properties.limits.minStorageBufferOffsetAlignment); - uint64_t y_sz = use_src1 ? ggml_vk_align_size(ggml_type_size(src1->type) * ne1, ctx->device->properties.limits.minStorageBufferOffsetAlignment) : 0; - uint64_t z_sz = use_src2 ? ggml_vk_align_size(ggml_type_size(src2->type) * ne2, ctx->device->properties.limits.minStorageBufferOffsetAlignment) : 0; - uint64_t d_sz = ggml_type_size(dst->type) * ne0; - - vk_buffer d_D = extra->buffer_gpu.lock(); - - // Workaround for tiny tensor inputs on ROPE - if (use_src1 && src1->backend == GGML_BACKEND_TYPE_GPU && y_sz > d_D->size) { - y_sz = VK_WHOLE_SIZE; - } - - GGML_ASSERT(d_D != nullptr); - uint64_t d_buf_offset = (extra->offset / ctx->device->properties.limits.minStorageBufferOffsetAlignment) * ctx->device->properties.limits.minStorageBufferOffsetAlignment; - GGML_ASSERT(d_buf_offset == extra->offset || op == GGML_OP_CPY); // NOLINT - if(!src0_uma) { - d_X = extra_src0->buffer_gpu.lock(); - x_buf_offset = extra_src0->offset; - GGML_ASSERT(d_X != nullptr); - } - if (use_src1 && !src1_uma) { - d_Y = extra_src1->buffer_gpu.lock(); - y_buf_offset = extra_src1->offset; - GGML_ASSERT(d_Y != nullptr); - } - - if (use_src2 && !src2_uma) { - d_Z = extra_src2->buffer_gpu.lock(); - z_buf_offset = extra_src2->offset; - GGML_ASSERT(d_Z != nullptr); - } - - if (op == GGML_OP_CPY || op == GGML_OP_GET_ROWS) { - x_sz = ggml_nbytes(src0); - y_sz = use_src1 ? ggml_nbytes(src1) : 0; - d_sz = ggml_nbytes(dst); - - if (x_buf_offset + x_sz >= d_X->size) { - x_sz = VK_WHOLE_SIZE; - } - if (use_src1 && y_buf_offset + y_sz >= d_Y->size) { - y_sz = VK_WHOLE_SIZE; - } - if (d_buf_offset + d_sz >= d_D->size) { - d_sz = VK_WHOLE_SIZE; - } - } - - std::array elements; - - // Single call if dimension 2 is contiguous - if (op == GGML_OP_CPY || op == GGML_OP_GET_ROWS || (ggml_is_contiguous(src0) && (src1 == nullptr || ggml_is_contiguous(src1)))) { - ggml_pipeline_allocate_descriptor_sets(ctx, pipeline, 1); - - switch (dst->op) { - case GGML_OP_NORM: - case GGML_OP_RMS_NORM: - case GGML_OP_SOFT_MAX: - elements = { (uint32_t)ggml_nrows(src0), 1, 1 }; - break; - case GGML_OP_DIAG_MASK_INF: - case GGML_OP_ROPE: - elements = { (uint32_t)ggml_nrows(src0), (uint32_t)ne00, 1 }; - break; - case GGML_OP_GET_ROWS: - elements = { (uint32_t)ne00, (uint32_t)ne10, (uint32_t)(ne11 * ne12) }; - break; - default: - elements = { (uint32_t)ggml_nelements(src0), 1, 1 }; - break; - } - - if (op != GGML_OP_CPY && op != GGML_OP_GET_ROWS) { - if (x_sz != VK_WHOLE_SIZE) { - x_sz *= ne02 * ne03; - } - if (use_src1 && y_sz != VK_WHOLE_SIZE) { - y_sz *= ne12 * ne13; - } - if (d_sz != VK_WHOLE_SIZE) { - d_sz *= ne02 * ne03; - } - } - - if (op == GGML_OP_SOFT_MAX) { - // Empty src1 and src2 are possible on soft_max, but the shader needs buffers - vk_subbuffer subbuf_y; - if (use_src1) { - subbuf_y = { d_Y, y_buf_offset, y_sz }; - } else { - subbuf_y = { ctx->prealloc_y, 0, ctx->prealloc_y->size }; - } - - vk_subbuffer subbuf_z; - if (use_src2) { - subbuf_z = { d_Z, z_buf_offset, z_sz }; - } else { - subbuf_z = { ctx->prealloc_y, 0, ctx->prealloc_y->size }; - } - - ggml_vk_sync_buffers(subctx); - ggml_vk_dispatch_pipeline(ctx, subctx, pipeline, { { d_X, x_buf_offset, x_sz }, subbuf_y, subbuf_z, { d_D, d_buf_offset, d_sz } }, sizeof(PC), &pc, elements); - } else if (use_src1) { - ggml_vk_sync_buffers(subctx); - ggml_vk_dispatch_pipeline(ctx, subctx, pipeline, { { d_X, x_buf_offset, x_sz }, { d_Y, y_buf_offset, y_sz }, { d_D, d_buf_offset, d_sz } }, sizeof(PC), &pc, elements); - } else { - ggml_vk_sync_buffers(subctx); - ggml_vk_dispatch_pipeline(ctx, subctx, pipeline, { { d_X, x_buf_offset, x_sz }, { d_D, d_buf_offset, d_sz } }, sizeof(PC), &pc, elements); - } - if (dst->backend == GGML_BACKEND_TYPE_CPU && op == GGML_OP_CPY) { - ggml_vk_d2h_tensor_2d(ctx, subctx, d_D, 0, dst); - } else if(dst->backend == GGML_BACKEND_TYPE_CPU) { - // copy dst to host - float * d = (float *) dst->data; - ggml_vk_buffer_read_async(ctx, subctx, d_D, 0, d, d_sz); - } - } else { - GGML_ASSERT(op != GGML_OP_SOFT_MAX); - - ggml_pipeline_allocate_descriptor_sets(ctx, pipeline, ne02 * ne03); - - switch (dst->op) { - case GGML_OP_NORM: - case GGML_OP_RMS_NORM: - case GGML_OP_SOFT_MAX: - elements = { (uint32_t)ne01, 1, 1 }; - break; - case GGML_OP_DIAG_MASK_INF: - case GGML_OP_ROPE: - elements = { (uint32_t)ne01, (uint32_t)ne00, 1 }; - break; - case GGML_OP_GET_ROWS: - elements = { (uint32_t)ne00, (uint32_t)ne10, (uint32_t)(ne11 * ne12) }; - break; - default: - elements = { (uint32_t)ne0, 1, 1 }; - break; - } - - for (uint64_t i03 = 0; i03 < ne03; i03++) { - for (uint64_t i02 = 0; i02 < ne02; i02++) { - const uint32_t it_idx0 = (i03 * ne02 + i02); - const uint32_t it_idx1 = use_src1 ? ((i03 % ne13) * ne12 + (i02 % ne12)) : 0; - const uint32_t x_offset = x_sz * it_idx0; - const uint32_t y_offset = y_sz * it_idx1; - const uint32_t d_offset = d_sz * it_idx0; - - if (use_src1) { - ggml_vk_sync_buffers(subctx); - ggml_vk_dispatch_pipeline(ctx, subctx, pipeline, { { d_X, x_buf_offset + x_offset, x_sz }, { d_Y, y_buf_offset + y_offset, y_sz }, { d_D, d_buf_offset + d_offset, d_sz } }, sizeof(PC), &pc, elements); - } else { - ggml_vk_sync_buffers(subctx); - ggml_vk_dispatch_pipeline(ctx, subctx, pipeline, { { d_X, x_buf_offset + x_offset, x_sz }, { d_D, d_buf_offset + d_offset, d_sz } }, sizeof(PC), &pc, elements); - } - if (dst->backend == GGML_BACKEND_TYPE_CPU) { - // copy dst to host - ggml_vk_buffer_read_async(ctx, subctx, d_D, d_buf_offset + d_offset, (char *) dst->data + i02*nb2 + i03*nb3, d_sz); - } - } - } - } -} - -static void ggml_vk_repeat(ggml_backend_vk_context * ctx, vk_context * subctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) { - ggml_vk_op_f32(ctx, subctx, src0, src1, nullptr, dst, GGML_OP_REPEAT, { (uint32_t)ggml_nelements(src0), (uint32_t)ggml_nelements(src1), 0.0f, 0.0f }); -} - -static void ggml_vk_get_rows(ggml_backend_vk_context * ctx, vk_context * subctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) { - const uint32_t src0_type_size = ggml_type_size(src0->type); - const uint32_t src1_type_size = ggml_type_size(src1->type); - const uint32_t dst_type_size = ggml_type_size(dst->type); - - ggml_vk_op_f32(ctx, subctx, src0, src1, nullptr, dst, GGML_OP_GET_ROWS, { - (uint32_t)ggml_nelements(src0), - (uint32_t)src0->ne[0], (uint32_t)src0->ne[1], (uint32_t)src0->ne[2],(uint32_t)src0->ne[3], (uint32_t)src0->nb[0] / src0_type_size, (uint32_t)src0->nb[1] / src0_type_size, (uint32_t)src0->nb[2] / src0_type_size, (uint32_t)src0->nb[3] / src0_type_size, - (uint32_t)src1->ne[0], (uint32_t)src1->ne[1], (uint32_t)src1->ne[2],(uint32_t)src1->ne[3], (uint32_t)src1->nb[0] / src1_type_size, (uint32_t)src1->nb[1] / src1_type_size, (uint32_t)src1->nb[2] / src1_type_size, (uint32_t)src1->nb[3] / src1_type_size, - (uint32_t) dst->ne[0], (uint32_t) dst->ne[1], (uint32_t) dst->ne[2],(uint32_t) dst->ne[3], (uint32_t) dst->nb[0] / dst_type_size, (uint32_t) dst->nb[1] / dst_type_size, (uint32_t) dst->nb[2] / dst_type_size, (uint32_t) dst->nb[3] / dst_type_size, - 0, - 0.0f, 0.0f, - }); -} - -static void ggml_vk_add(ggml_backend_vk_context * ctx, vk_context * subctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) { - const uint32_t src0_type_size = ggml_type_size(src0->type); - const uint32_t src1_type_size = ggml_type_size(src1->type); - const uint32_t dst_type_size = ggml_type_size(dst->type); - - ggml_vk_op_f32(ctx, subctx, src0, src1, nullptr, dst, GGML_OP_ADD, { - (uint32_t)ggml_nelements(src0), - (uint32_t)src0->ne[0], (uint32_t)src0->ne[1], (uint32_t)src0->ne[2],(uint32_t)src0->ne[3], (uint32_t)src0->nb[0] / src0_type_size, (uint32_t)src0->nb[1] / src0_type_size, (uint32_t)src0->nb[2] / src0_type_size, (uint32_t)src0->nb[3] / src0_type_size, - (uint32_t)src1->ne[0], (uint32_t)src1->ne[1], (uint32_t)src1->ne[2],(uint32_t)src1->ne[3], (uint32_t)src1->nb[0] / src1_type_size, (uint32_t)src1->nb[1] / src1_type_size, (uint32_t)src1->nb[2] / src1_type_size, (uint32_t)src1->nb[3] / src1_type_size, - (uint32_t) dst->ne[0], (uint32_t) dst->ne[1], (uint32_t) dst->ne[2],(uint32_t) dst->ne[3], (uint32_t) dst->nb[0] / dst_type_size, (uint32_t) dst->nb[1] / dst_type_size, (uint32_t) dst->nb[2] / dst_type_size, (uint32_t) dst->nb[3] / dst_type_size, - 0, - 0.0f, 0.0f, - }); -} - -static void ggml_vk_mul(ggml_backend_vk_context * ctx, vk_context * subctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) { - const uint32_t src0_type_size = ggml_type_size(src0->type); - const uint32_t src1_type_size = ggml_type_size(src1->type); - const uint32_t dst_type_size = ggml_type_size(dst->type); - - ggml_vk_op_f32(ctx, subctx, src0, src1, nullptr, dst, GGML_OP_MUL, { - (uint32_t)ggml_nelements(src0), - (uint32_t)src0->ne[0], (uint32_t)src0->ne[1], (uint32_t)src0->ne[2],(uint32_t)src0->ne[3], (uint32_t)src0->nb[0] / src0_type_size, (uint32_t)src0->nb[1] / src0_type_size, (uint32_t)src0->nb[2] / src0_type_size, (uint32_t)src0->nb[3] / src0_type_size, - (uint32_t)src1->ne[0], (uint32_t)src1->ne[1], (uint32_t)src1->ne[2],(uint32_t)src1->ne[3], (uint32_t)src1->nb[0] / src1_type_size, (uint32_t)src1->nb[1] / src1_type_size, (uint32_t)src1->nb[2] / src1_type_size, (uint32_t)src1->nb[3] / src1_type_size, - (uint32_t) dst->ne[0], (uint32_t) dst->ne[1], (uint32_t) dst->ne[2],(uint32_t) dst->ne[3], (uint32_t) dst->nb[0] / dst_type_size, (uint32_t) dst->nb[1] / dst_type_size, (uint32_t) dst->nb[2] / dst_type_size, (uint32_t) dst->nb[3] / dst_type_size, - 0, - 0.0f, 0.0f, - }); -} - -static void ggml_vk_scale(ggml_backend_vk_context * ctx, vk_context * subctx, const ggml_tensor * src0, ggml_tensor * dst) { - float * op_params = (float *)dst->op_params; - const uint32_t src0_type_size = ggml_type_size(src0->type); - const uint32_t dst_type_size = ggml_type_size(dst->type); - - ggml_vk_op_f32(ctx, subctx, src0, nullptr, nullptr, dst, GGML_OP_SCALE, { - (uint32_t)ggml_nelements(src0), - (uint32_t)src0->ne[0], (uint32_t)src0->ne[1], (uint32_t)src0->ne[2], (uint32_t)src0->ne[3], (uint32_t)src0->nb[0] / src0_type_size, (uint32_t)src0->nb[1] / src0_type_size, (uint32_t)src0->nb[2] / src0_type_size, (uint32_t)src0->nb[3] / src0_type_size, - (uint32_t) dst->ne[0], (uint32_t) dst->ne[1], (uint32_t) dst->ne[2], (uint32_t) dst->ne[3], (uint32_t) dst->nb[0] / dst_type_size, (uint32_t) dst->nb[1] / dst_type_size, (uint32_t) dst->nb[2] / dst_type_size, (uint32_t) dst->nb[3] / dst_type_size, - 0, - op_params[0], 0.0f - }); -} - -static void ggml_vk_sqr(ggml_backend_vk_context * ctx, vk_context * subctx, const ggml_tensor * src0, ggml_tensor * dst) { - const uint32_t src0_type_size = ggml_type_size(src0->type); - const uint32_t dst_type_size = ggml_type_size(dst->type); - - ggml_vk_op_f32(ctx, subctx, src0, nullptr, nullptr, dst, GGML_OP_SQR, { - (uint32_t)ggml_nelements(src0), - (uint32_t)src0->ne[0], (uint32_t)src0->ne[1], (uint32_t)src0->ne[2], (uint32_t)src0->ne[3], (uint32_t)src0->nb[0] / src0_type_size, (uint32_t)src0->nb[1] / src0_type_size, (uint32_t)src0->nb[2] / src0_type_size, (uint32_t)src0->nb[3] / src0_type_size, - (uint32_t) dst->ne[0], (uint32_t) dst->ne[1], (uint32_t) dst->ne[2], (uint32_t) dst->ne[3], (uint32_t) dst->nb[0] / dst_type_size, (uint32_t) dst->nb[1] / dst_type_size, (uint32_t) dst->nb[2] / dst_type_size, (uint32_t) dst->nb[3] / dst_type_size, - 0, - 0.0f, 0.0f, - }); -} - -static void ggml_vk_clamp(ggml_backend_vk_context * ctx, vk_context * subctx, const ggml_tensor * src0, ggml_tensor * dst) { - float * op_params = (float *)dst->op_params; - const uint32_t src0_type_size = ggml_type_size(src0->type); - const uint32_t dst_type_size = ggml_type_size(dst->type); - - ggml_vk_op_f32(ctx, subctx, src0, nullptr, nullptr, dst, GGML_OP_CLAMP, { - (uint32_t)ggml_nelements(src0), - (uint32_t)src0->ne[0], (uint32_t)src0->ne[1], (uint32_t)src0->ne[2], (uint32_t)src0->ne[3], (uint32_t)src0->nb[0] / src0_type_size, (uint32_t)src0->nb[1] / src0_type_size, (uint32_t)src0->nb[2] / src0_type_size, (uint32_t)src0->nb[3] / src0_type_size, - (uint32_t) dst->ne[0], (uint32_t) dst->ne[1], (uint32_t) dst->ne[2], (uint32_t) dst->ne[3], (uint32_t) dst->nb[0] / dst_type_size, (uint32_t) dst->nb[1] / dst_type_size, (uint32_t) dst->nb[2] / dst_type_size, (uint32_t) dst->nb[3] / dst_type_size, - 0, - op_params[0], op_params[1], - }); -} - -static void ggml_vk_cpy(ggml_backend_vk_context * ctx, vk_context * subctx, const ggml_tensor * src0, ggml_tensor * dst) { - ggml_tensor_extra_gpu * extra = (ggml_tensor_extra_gpu *) dst->extra; - const uint32_t src0_type_size = ggml_type_size(src0->type); - const uint32_t dst_type_size = ggml_type_size(dst->type); - const uint32_t d_offset = (extra->offset % ctx->device->properties.limits.minStorageBufferOffsetAlignment) / dst_type_size; - - ggml_vk_op_f32(ctx, subctx, src0, nullptr, nullptr, dst, GGML_OP_CPY, { - (uint32_t)ggml_nelements(src0), - (uint32_t)src0->ne[0], (uint32_t)src0->ne[1], (uint32_t)src0->ne[2], (uint32_t)src0->ne[3], (uint32_t)src0->nb[0] / src0_type_size, (uint32_t)src0->nb[1] / src0_type_size, (uint32_t)src0->nb[2] / src0_type_size, (uint32_t)src0->nb[3] / src0_type_size, - (uint32_t) dst->ne[0], (uint32_t) dst->ne[1], (uint32_t) dst->ne[2], (uint32_t) dst->ne[3], (uint32_t) dst->nb[0] / dst_type_size, (uint32_t) dst->nb[1] / dst_type_size, (uint32_t) dst->nb[2] / dst_type_size, (uint32_t) dst->nb[3] / dst_type_size, - d_offset, - 0.0f, 0.0f, - }); -} - -static void ggml_vk_norm(ggml_backend_vk_context * ctx, vk_context * subctx, const ggml_tensor * src0, ggml_tensor * dst) { - ggml_vk_op_f32(ctx, subctx, src0, nullptr, nullptr, dst, GGML_OP_NORM, { (uint32_t)src0->ne[0], (uint32_t)src0->ne[1], 0.0f, 0.0f }); -} - -static void ggml_vk_rms_norm(ggml_backend_vk_context * ctx, vk_context * subctx, const ggml_tensor * src0, ggml_tensor * dst) { - float * op_params = (float *)dst->op_params; - ggml_vk_op_f32(ctx, subctx, src0, nullptr, nullptr, dst, GGML_OP_RMS_NORM, { (uint32_t)src0->ne[0], (uint32_t)src0->ne[1], op_params[0], 0.0f }); -} - -static void ggml_vk_unary(ggml_backend_vk_context * ctx, vk_context * subctx, const ggml_tensor * src0, ggml_tensor * dst) { - ggml_vk_op_f32(ctx, subctx, src0, nullptr, nullptr, dst, GGML_OP_UNARY, { (uint32_t)ggml_nelements(src0), 0, 0.0f, 0.0f }); -} - -static void ggml_vk_diag_mask_inf(ggml_backend_vk_context * ctx, vk_context * subctx, const ggml_tensor * src0, ggml_tensor * dst) { - int32_t * op_params = (int32_t *)dst->op_params; - ggml_vk_op_f32(ctx, subctx, src0, nullptr, nullptr, dst, GGML_OP_DIAG_MASK_INF, { (uint32_t)src0->ne[0], (uint32_t)src0->ne[1], op_params[0] }); -} - -static void ggml_vk_soft_max(ggml_backend_vk_context * ctx, vk_context * subctx, const ggml_tensor * src0, const ggml_tensor * src1, const ggml_tensor * src2, ggml_tensor * dst) { - float * op_params = (float *)dst->op_params; - - float scale = op_params[0]; - float max_bias = op_params[1]; - - const uint32_t ncols = (uint32_t)src0->ne[0]; - const uint32_t nrows_x = (uint32_t)ggml_nrows(src0); - const uint32_t nrows_y = (uint32_t)src0->ne[1]; - - const uint32_t n_head_kv = nrows_x/nrows_y; - const uint32_t n_head_log2 = 1u << (uint32_t) floorf(log2f((float) n_head_kv)); - - const float m0 = powf(2.0f, -(max_bias ) / n_head_log2); - const float m1 = powf(2.0f, -(max_bias / 2.0f) / n_head_log2); - - ggml_vk_op_f32(ctx, subctx, src0, src1, src2, dst, GGML_OP_SOFT_MAX, { - ncols, - nrows_y, - src2 != nullptr ? (uint32_t)1 : (uint32_t)0, - scale, max_bias, - m0, m1, - n_head_log2, - }); -} - -static void ggml_vk_rope(ggml_backend_vk_context * ctx, vk_context * subctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) { - const int n_dims = ((int32_t *) dst->op_params)[1]; - const int mode = ((int32_t *) dst->op_params)[2]; - // const int n_ctx = ((int32_t *) dst->op_params)[3]; - const int n_orig_ctx = ((int32_t *) dst->op_params)[4]; - const float freq_base = ((float *) dst->op_params)[5]; - const float freq_scale = ((float *) dst->op_params)[6]; - const float ext_factor = ((float *) dst->op_params)[7]; - const float attn_factor = ((float *) dst->op_params)[8]; - const float beta_fast = ((float *) dst->op_params)[9]; - const float beta_slow = ((float *) dst->op_params)[10]; - - const bool is_neox = mode & 2; - const bool is_glm = mode & 4; - - GGML_ASSERT(!is_glm); - - float corr_dims[2]; - ggml_rope_yarn_corr_dims(n_dims, n_orig_ctx, freq_base, beta_fast, beta_slow, corr_dims); - - if (is_neox) { - const float theta_scale = powf(freq_base, -2.0f/n_dims); - const float inv_ndims = -1.0f / n_dims; - ggml_vk_op_f32(ctx, subctx, src0, src1, nullptr, dst, GGML_OP_ROPE, { (uint32_t)src0->ne[0], (uint32_t)n_dims, freq_scale, (uint32_t)src0->ne[1], freq_base, ext_factor, attn_factor, {corr_dims[0], corr_dims[1], 0.0f, 0.0f}, theta_scale, inv_ndims }); - } else { - ggml_vk_op_f32(ctx, subctx, src0, src1, nullptr, dst, GGML_OP_ROPE, { (uint32_t)src0->ne[0], freq_scale, (uint32_t)src0->ne[1], freq_base, ext_factor, attn_factor, {corr_dims[0], corr_dims[1], 0.0f, 0.0f} }); - } -} - -static void ggml_vk_argsort(ggml_backend_vk_context * ctx, vk_context * subctx, const ggml_tensor * src0, ggml_tensor * dst) { - int32_t * op_params = (int32_t *)dst->op_params; - ggml_vk_op_f32(ctx, subctx, src0, nullptr, nullptr, dst, GGML_OP_ARGSORT, { (uint32_t)src0->ne[0], ((ggml_sort_order) op_params[0]) == GGML_SORT_ORDER_ASC }); -} - -#ifdef GGML_VULKAN_RUN_TESTS -static void ggml_vk_print_matrix_area(const void * data, ggml_type type, int ne0, int ne1, int i0, int i1, int i2) { - if (type != GGML_TYPE_F32 && type != GGML_TYPE_F16) { - return; - } - i0 = std::max(i0, 5); - i1 = std::max(i1, 5); - i2 = std::max(i2, 0); - fprintf(stderr, " "); - for (int idx1 = i1 - 5; idx1 < i1 + 5; idx1++) { - fprintf(stderr, "%7d ", idx1); - } - fprintf(stderr, "\n"); - for (int idx0 = i0 - 5; idx0 < i0 + 5; idx0++) { - fprintf(stderr, "%7d: ", idx0); - for (int idx1 = i1 - 5; idx1 < i1 + 5; idx1++) { - if (idx0 >= 0 && idx0 < ne0 && idx1 >= 0 && idx1 < ne1) { - float val; - if (type == GGML_TYPE_F32) { - val = *((const float *) data + i2*ne1*ne0 + idx1*ne0 + idx0); - } else if (type == GGML_TYPE_F16) { - val = ggml_fp16_to_fp32(*((const ggml_fp16_t *) data + i2*ne1*ne0 + idx1*ne0 + idx0)); - } else { - GGML_ASSERT(false); - } - fprintf(stderr, "% 7.2f ", val); - } else { - fprintf(stderr, " "); - } - } - fprintf(stderr, "\n"); - } -} - -template -static void ggml_vk_test_matmul(ggml_backend_vk_context * ctx, size_t m, size_t n, size_t k, size_t batch, size_t num_it, int split_k, int shader_size) { -#ifdef GGML_VULKAN_DEBUG - std::cerr << "ggml_vk_test_matmul(" << m << ", " << n << ", " << k << ", " << batch << ", " << num_it << ", " << split_k << ", " << shader_size << ")" << std::endl; -#endif - const size_t x_ne = m * k * batch; - const size_t y_ne = k * n * batch; - const size_t d_ne = m * n * batch; - - vk_pipeline p; - std::string shname; - if (shader_size == 0) { - if (std::is_same() && std::is_same()) { - p = ctx->device->pipeline_matmul_f32->a_s; - shname = "F32_ALIGNED_S"; - } else if (std::is_same() && std::is_same()) { - p = ctx->device->pipeline_matmul_f16_f32->a_s; - shname = "F16_F32_ALIGNED_S"; - } else if (std::is_same() && std::is_same()) { - p = ctx->device->pipeline_matmul_f16->a_s; - shname = "F16_ALIGNED_S"; - } else { - GGML_ASSERT(false); - } - } else if (shader_size == 1) { - if (std::is_same() && std::is_same()) { - p = ctx->device->pipeline_matmul_f32->a_m; - shname = "F32_ALIGNED_M"; - } else if (std::is_same() && std::is_same()) { - p = ctx->device->pipeline_matmul_f16_f32->a_m; - shname = "F16_F32_ALIGNED_M"; - } else if (std::is_same() && std::is_same()) { - p = ctx->device->pipeline_matmul_f16->a_m; - shname = "F16_ALIGNED_M"; - } else { - GGML_ASSERT(false); - } - } else if (shader_size == 2) { - if (std::is_same() && std::is_same()) { - p = ctx->device->pipeline_matmul_f32->a_l; - shname = "F32_ALIGNED_L"; - } else if (std::is_same() && std::is_same()) { - p = ctx->device->pipeline_matmul_f16_f32->a_l; - shname = "F16_F32_ALIGNED_L"; - } else if (std::is_same() && std::is_same()) { - p = ctx->device->pipeline_matmul_f16->a_l; - shname = "F16_ALIGNED_L"; - } else { - GGML_ASSERT(false); - } - } else { - GGML_ASSERT(0); - } - - const size_t kpad = ggml_vk_align_size(k, p->align); - - if (k != kpad) { - if (shader_size == 0) { - if (std::is_same() && std::is_same()) { - p = ctx->device->pipeline_matmul_f32->s; - shname = "F32_S"; - } else if (std::is_same() && std::is_same()) { - p = ctx->device->pipeline_matmul_f16_f32->s; - shname = "F16_F32_S"; - } else if (std::is_same() && std::is_same()) { - p = ctx->device->pipeline_matmul_f16->s; - shname = "F16_S"; - } - } else if (shader_size == 1) { - if (std::is_same() && std::is_same()) { - p = ctx->device->pipeline_matmul_f32->m; - shname = "F32_M"; - } else if (std::is_same() && std::is_same()) { - p = ctx->device->pipeline_matmul_f16_f32->m; - shname = "F16_F32_M"; - } else if (std::is_same() && std::is_same()) { - p = ctx->device->pipeline_matmul_f16->m; - shname = "F16_M"; - } - } else if (shader_size == 2) { - if (std::is_same() && std::is_same()) { - p = ctx->device->pipeline_matmul_f32->l; - shname = "F32_L"; - } else if (std::is_same() && std::is_same()) { - p = ctx->device->pipeline_matmul_f16_f32->l; - shname = "F16_F32_L"; - } else if (std::is_same() && std::is_same()) { - p = ctx->device->pipeline_matmul_f16->l; - shname = "F16_L"; - } - } - } - - ggml_pipeline_allocate_descriptor_sets(ctx, p, num_it); - if (split_k > 1) { - ggml_pipeline_allocate_descriptor_sets(ctx, ctx->device->pipeline_matmul_split_k_reduce, num_it); - - if (ctx->prealloc_split_k == nullptr || ctx->prealloc_split_k->size < sizeof(float) * d_ne * split_k) { - // Resize buffer - if (ctx->prealloc_split_k != nullptr) { - ggml_vk_destroy_buffer(ctx->prealloc_split_k); - } - ctx->prealloc_split_k = ggml_vk_create_buffer_check(ctx, sizeof(float) * d_ne * split_k, vk::MemoryPropertyFlagBits::eDeviceLocal); - } - } - - vk_buffer d_X = ggml_vk_create_buffer_check(ctx, sizeof(X_TYPE) * x_ne, vk::MemoryPropertyFlagBits::eDeviceLocal); - vk_buffer d_Y = ggml_vk_create_buffer_check(ctx, sizeof(Y_TYPE) * y_ne, vk::MemoryPropertyFlagBits::eDeviceLocal); - vk_buffer d_D = ggml_vk_create_buffer_check(ctx, sizeof(float) * d_ne, vk::MemoryPropertyFlagBits::eDeviceLocal); - - X_TYPE* x = (X_TYPE *) malloc(sizeof(X_TYPE) * x_ne); - Y_TYPE* y = (Y_TYPE *) malloc(sizeof(Y_TYPE) * y_ne); - float* d = (float *) malloc(sizeof(float) * d_ne); - - for (size_t i = 0; i < x_ne; i++) { - if (std::is_same()) { - x[i] = (rand() / (float)RAND_MAX) * 2.0f - 1.0f; - } else if (std::is_same()) { - x[i] = ggml_fp32_to_fp16((rand() / (float)RAND_MAX) * 2.0f - 1.0f); - } else { - GGML_ASSERT(false); - } - } - for (size_t i = 0; i < y_ne; i++) { - if (std::is_same()) { - // y[i] = (rand() / (float)RAND_MAX) * 2.0f - 1.0f; - y[i] = (i % k == i / k) ? 1.0f : 0.0f; - } else if (std::is_same()) { - // y[i] = ggml_fp32_to_fp16((rand() / (float)RAND_MAX) * 2.0f - 1.0f); - y[i] = ggml_fp32_to_fp16((i % k == i / k) ? 1.0f : 0.0f); - } else { - GGML_ASSERT(false); - } - } - - ggml_vk_buffer_write(ctx, d_X, 0, x, sizeof(X_TYPE) * k * m * batch); - ggml_vk_buffer_write(ctx, d_Y, 0, y, sizeof(Y_TYPE) * k * n * batch); - - vk_context * subctx = ggml_vk_create_context(ctx, ctx->device->compute_queue); - for (size_t i = 0; i < num_it; i++) { - ggml_vk_ctx_begin(ctx, subctx); - ggml_vk_matmul(ctx, subctx, p, ggml_vk_subbuffer(d_X), ggml_vk_subbuffer(d_Y), ggml_vk_subbuffer(d_D), ggml_vk_subbuffer(ctx->prealloc_split_k), m, n, k, k, k, m, split_k, batch, batch, batch, 1, 1, k*m, k*n, m*n); - ggml_vk_ctx_end(subctx); - } - - auto begin = std::chrono::high_resolution_clock::now(); - ggml_vk_submit(subctx, ctx->fence); - VK_CHECK(ctx->device->device.waitForFences({ ctx->fence }, true, UINT64_MAX), "ggml_vk_test_matmul waitForFences"); - ctx->device->device.resetFences({ ctx->fence }); - - auto end = std::chrono::high_resolution_clock::now(); - double time = std::chrono::duration_cast(end-begin).count() / 1000.0; - - // copy dst to host - ggml_vk_buffer_read(ctx, d_D, 0, d, sizeof(float) * d_ne); - - float * d_chk = (float *) malloc(sizeof(float) * d_ne); - - ggml_init_params iparams = { - /*.mem_size =*/ 1024*1024*1024, - /*.mem_buffer =*/ NULL, - /*.no_alloc =*/ true, - }; - - ggml_context * ggml_ctx = ggml_init(iparams); - - ggml_type src0_type; - ggml_type src1_type; - - if (std::is_same()) { - src0_type = GGML_TYPE_F32; - } else if (std::is_same()) { - src0_type = GGML_TYPE_F16; - } else { - GGML_ASSERT(false); - } - if (std::is_same()) { - src1_type = GGML_TYPE_F32; - } else if (std::is_same()) { - src1_type = GGML_TYPE_F16; - } else { - GGML_ASSERT(false); - } - - ggml_tensor * src0_ggml = ggml_new_tensor_3d(ggml_ctx, src0_type, k, m, batch); - ggml_tensor * src1_ggml = ggml_new_tensor_3d(ggml_ctx, src1_type, k, n, batch); - ggml_tensor * tensor_ggml = ggml_mul_mat(ggml_ctx, src0_ggml, src1_ggml); - - src0_ggml->data = x; - src1_ggml->data = y; - tensor_ggml->data = d_chk; - - ctx->disable = true; - - ggml_cgraph * cgraph = ggml_new_graph(ggml_ctx); - ggml_build_forward_expand(cgraph, tensor_ggml); - - ggml_graph_compute_with_ctx(ggml_ctx, cgraph, 1); - - ctx->disable = false; - - ggml_free(ggml_ctx); - - double avg_err = 0.0; - int first_err_n = -1; - int first_err_m = -1; - int first_err_b = -1; - - for (size_t i = 0; i < m*n*batch; i++) { - double err = std::fabs(d[i] - d_chk[i]); - avg_err += err; - - if (err > 0.05f && first_err_n == -1) { - first_err_b = i / (m * n); - first_err_n = (i % (m * n)) / m; - first_err_m = (i % (m * n)) % m; - } - } - - avg_err /= m * n; - - std::cerr << "TEST " << shname << " m=" << m << " n=" << n << " k=" << k << " batch=" << batch << " split_k=" << split_k << " matmul " << time / num_it << "ms avg_err=" << avg_err << std::endl; - - if (avg_err > 0.1) { - std::cerr << "m = " << first_err_m << " n = " << first_err_n << " b = " << first_err_b << std::endl; - std::cerr << "Actual result: " << std::endl << std::endl; - ggml_vk_print_matrix_area(d, GGML_TYPE_F32, m, n, first_err_m, first_err_n, first_err_b); - std::cerr << std::endl; - ggml_vk_print_matrix_area(d, GGML_TYPE_F32, m, n, first_err_m, first_err_n + 15, first_err_b); - std::cerr << "Expected result: " << std::endl << std::endl; - ggml_vk_print_matrix_area(d_chk, GGML_TYPE_F32, m, n, first_err_m, first_err_n, first_err_b); - - if (split_k > 1) { - float * split_k_buf = (float *) malloc(sizeof(float) * d_ne * split_k); - ggml_vk_buffer_read(ctx, ctx->prealloc_split_k, 0, split_k_buf, sizeof(float) * d_ne * split_k); - - std::cerr << "d_buf0: " << std::endl << std::endl; - ggml_vk_print_matrix_area(split_k_buf, GGML_TYPE_F32, m, n, first_err_m, first_err_n, first_err_b); - - std::cerr << "d_buf1: " << std::endl << std::endl; - ggml_vk_print_matrix_area(split_k_buf + d_ne, GGML_TYPE_F32, m, n, first_err_m, first_err_n, first_err_b); - - std::cerr << "d_buf2: " << std::endl << std::endl; - ggml_vk_print_matrix_area(split_k_buf + 2 * d_ne, GGML_TYPE_F32, m, n, first_err_m, first_err_n, first_err_b); - - std::cerr << "d_buf3: " << std::endl << std::endl; - ggml_vk_print_matrix_area(split_k_buf + 3 * d_ne, GGML_TYPE_F32, m, n, first_err_m, first_err_n, first_err_b); - - free(split_k_buf); - } - } - - free(d_chk); - - ggml_vk_queue_cleanup(ctx, ctx->device->transfer_queue); - ggml_vk_queue_cleanup(ctx, ctx->device->compute_queue); - - ggml_vk_destroy_buffer(d_X); - ggml_vk_destroy_buffer(d_Y); - ggml_vk_destroy_buffer(d_D); - - ggml_pipeline_cleanup(p); - ggml_pipeline_cleanup(ctx->device->pipeline_matmul_split_k_reduce); - - free(x); - free(y); - free(d); -} - -static void ggml_vk_print_tensor_area(const ggml_tensor * tensor, int i0, int i1, int i2, int i3) { - if (tensor->type != GGML_TYPE_F32 && tensor->type != GGML_TYPE_F16) { - return; - } - i0 = std::max(i0, 5); - i1 = std::max(i1, 5); - i2 = std::max(i2, 0); - i3 = std::max(i3, 0); - fprintf(stderr, " "); - for (int idx1 = i1 - 5; idx1 < i1 + 5; idx1++) { - fprintf(stderr, "%7d ", idx1); - } - fprintf(stderr, "\n"); - for (int idx0 = i0 - 5; idx0 < i0 + 5; idx0++) { - fprintf(stderr, "%7d: ", idx0); - for (int idx1 = i1 - 5; idx1 < i1 + 5; idx1++) { - if (idx0 >= 0 && idx0 < tensor->ne[0] && idx1 >= 0 && idx1 < tensor->ne[1] && i2 >= 0 && i2 < tensor->ne[2] && i3 >= 0 && i3 < tensor->ne[3]) { - float val; - if (tensor->type == GGML_TYPE_F32) { - val = *(float *) ((char *) tensor->data + i3*tensor->nb[3] + i2*tensor->nb[2] + idx1*tensor->nb[1] + idx0*tensor->nb[0]); - } else if (tensor->type == GGML_TYPE_F16) { - val = ggml_fp16_to_fp32(*(ggml_fp16_t *) ((char *) tensor->data + i3*tensor->nb[3] + i2*tensor->nb[2] + idx1*tensor->nb[1] + idx0*tensor->nb[0])); - } else { - GGML_ASSERT(false); - } - fprintf(stderr, "% 7.2f ", val); - } else { - fprintf(stderr, " "); - } - } - fprintf(stderr, "\n"); - } -} - -static void ggml_vk_test_h2d_nc(ggml_backend_vk_context * ctx, size_t ne0, size_t ne1, size_t ne2, size_t ne3) { - const size_t ne = ne0 * ne1 * ne2 * ne3; - - ggml_init_params iparams = { - /*.mem_size =*/ 1024*1024*1024, - /*.mem_buffer =*/ NULL, - /*.no_alloc =*/ true, - }; - - ggml_context * ggml_ctx = ggml_init(iparams); - - ggml_tensor * tensor = ggml_new_tensor_4d(ggml_ctx, GGML_TYPE_F32, ne0, ne2, ne1, ne3); // NOLINT - ggml_tensor * result_tensor = ggml_new_tensor_4d(ggml_ctx, GGML_TYPE_F32, ne0, ne1, ne2, ne3); - - float * data = (float *) ggml_vk_host_malloc(ctx, ggml_nbytes(tensor)); - tensor->data = data; - - float * result_data = (float *) malloc(ggml_nbytes(tensor)); - result_tensor->data = result_data; - - // Permute - { - size_t tmp = tensor->nb[2]; - tensor->nb[2] = tensor->nb[1]; - tensor->nb[1] = tmp; - - tensor->ne[2] = ne2; - tensor->ne[1] = ne1; - } - - for (size_t i = 0; i < ne; i++) { - data[i] = (rand() / (float)RAND_MAX) * 2.0f - 1.0f; - } - - vk_context * subctx = ggml_vk_create_context(ctx, ctx->device->compute_queue); - ggml_vk_ctx_begin(ctx, subctx); - - vk_buffer buffer = ggml_vk_create_buffer_check(ctx, ggml_nbytes(tensor), vk::MemoryPropertyFlagBits::eDeviceLocal); - - ggml_vk_h2d_tensor_2d(ctx, subctx, buffer, 0, tensor, 0, 0, ggml_nrows(tensor)); - - ggml_vk_ctx_end(subctx); - ggml_vk_submit(subctx, ctx->fence); - VK_CHECK(ctx->device->device.waitForFences({ ctx->fence }, true, UINT64_MAX), "ggml_vk_test_h2d_nc waitForFences"); - ctx->device->device.resetFences({ ctx->fence }); - - ggml_vk_buffer_read(ctx, buffer, 0, result_data, ggml_nbytes(tensor)); - - double avg_err = 0.0; - int first_err_i0 = -1; - int first_err_i1 = -1; - int first_err_i2 = -1; - int first_err_i3 = -1; - - for (size_t i3 = 0; i3 < ne3; i3++) { - for (size_t i2 = 0; i2 < ne2; i2++) { - for (size_t i1 = 0; i1 < ne1; i1++) { - for (size_t i0 = 0; i0 < ne0; i0++) { - float correct = *(float *) ((char *) data + i3*tensor->nb[3] + i2*tensor->nb[2] + i1*tensor->nb[1] + i0*tensor->nb[0]); - float result = *(float *) ((char *) result_data + i3*ne2*ne1*ne0*sizeof(float) + i2*ne1*ne0*sizeof(float) + i1*ne0*sizeof(float) + i0*sizeof(float)); - double err = std::fabs(result - correct); - - avg_err += err; - - if (err > 0.05f && first_err_i0 == -1) { - first_err_i0 = i0; - first_err_i1 = i1; - first_err_i2 = i2; - first_err_i3 = i3; - } - } - } - } - } - - avg_err /= ne; - - std::cerr << "TEST nc copy ne0=" << ne0 << " ne1=" << ne1 << " ne2=" << ne2 << " ne3=" << ne3 << " avg_err=" << avg_err << std::endl; - - if (avg_err > 0.1) { - std::cerr << "i0 = " << first_err_i0 << " i1 = " << first_err_i1 << " i2 = " << first_err_i2 << " i3 = " << first_err_i3 << std::endl; - std::cerr << "Actual result: " << std::endl << std::endl; - ggml_vk_print_tensor_area(result_tensor, first_err_i0, first_err_i1, first_err_i2, first_err_i3); - std::cerr << "Expected result: " << std::endl << std::endl; - ggml_vk_print_tensor_area(tensor, first_err_i0, first_err_i1, first_err_i2, first_err_i3); - } - - ggml_free(ggml_ctx); - - ggml_vk_destroy_buffer(buffer); - - ggml_vk_host_free(ctx, data); - free(result_data); -} - -static void ggml_vk_test_transfer(ggml_backend_vk_context * ctx, size_t ne, bool pinned) { -#ifdef GGML_VULKAN_DEBUG - std::cerr << "ggml_vk_test_transfer(" << ne << ")" << std::endl; -#endif - // Check transfers are correct - vk_buffer buffer = ggml_vk_create_buffer_check(ctx, sizeof(float) * ne, vk::MemoryPropertyFlagBits::eDeviceLocal); - - float * x; - float * y; - if (pinned) { - x = (float *) ggml_vk_host_malloc(ctx, sizeof(float) * ne); - y = (float *) ggml_vk_host_malloc(ctx, sizeof(float) * ne); - } else { - x = (float *) malloc(sizeof(float) * ne); - y = (float *) malloc(sizeof(float) * ne); - } - - for (size_t i = 0; i < ne; i++) { - x[i] = rand() / (float)RAND_MAX; - } - - vk_context * subctx = ggml_vk_create_context(ctx, ctx->device->compute_queue); - ggml_vk_ctx_begin(ctx, subctx); - - auto begin = std::chrono::high_resolution_clock::now(); - - ggml_vk_buffer_write_async(ctx, subctx, buffer, 0, x, sizeof(float) * ne); - - for (auto& cpy : subctx->in_memcpys) { - memcpy(cpy.dst, cpy.src, cpy.n); - } - subctx->in_memcpys.clear(); - - ggml_vk_ctx_end(subctx); - ggml_vk_submit(subctx, ctx->fence); - VK_CHECK(ctx->device->device.waitForFences({ ctx->fence }, true, UINT64_MAX), "ggml_vk_test_transfer waitForFences"); - ctx->device->device.resetFences({ ctx->fence }); - - auto end = std::chrono::high_resolution_clock::now(); - - double ms_to_gpu = std::chrono::duration_cast(end-begin).count() / 1000.0; - - ggml_vk_ctx_begin(ctx, subctx); - - begin = std::chrono::high_resolution_clock::now(); - - ggml_vk_buffer_read_async(ctx, subctx, buffer, 0, y, sizeof(float) * ne); - - ggml_vk_ctx_end(subctx); - ggml_vk_submit(subctx, ctx->fence); - VK_CHECK(ctx->device->device.waitForFences({ ctx->fence }, true, UINT64_MAX), "ggml_vk_test_transfer waitForFences"); - ctx->device->device.resetFences({ ctx->fence }); - - for (auto& cpy : subctx->out_memcpys) { - memcpy(cpy.dst, cpy.src, cpy.n); - } - subctx->out_memcpys.clear(); - - end = std::chrono::high_resolution_clock::now(); - - double ms_from_gpu = std::chrono::duration_cast(end-begin).count() / 1000.0; - - double avg_err = 0.0; - for (size_t i = 0; i < ne; i++) { - avg_err += std::fabs(x[i] - y[i]); - } - - double kb = ne * sizeof(float) / 1024.0; - - std::cerr << "TEST TRANSFER " << kb << " KB to_gpu " << ms_to_gpu << "ms (" << kb / ms_to_gpu * 1000.0 / 1024.0 << " MB/s) from_gpu " << ms_from_gpu << "ms (" << kb / ms_from_gpu * 1000.0 / 1024.0 << " MB/s) avg_err=" << avg_err / ne << std::endl; - - ggml_vk_destroy_buffer(buffer); - - if (pinned) { - ggml_vk_host_free(ctx, x); - ggml_vk_host_free(ctx, y); - } else { - free(x); - free(y); - } -} - -static void ggml_vk_quantize_data(const float * from, void * to, size_t ne, ggml_type quant) { - ggml_quantize_chunk(quant, from, to, 0, 1, ne, nullptr); -} - -static void ggml_vk_test_dequant(ggml_backend_vk_context * ctx, size_t ne, ggml_type quant) { -#ifdef GGML_VULKAN_DEBUG - std::cerr << "ggml_vk_test_dequant(" << ne << ")" << std::endl; -#endif - const size_t x_sz = sizeof(float) * ne; - const size_t x_sz_f16 = sizeof(ggml_fp16_t) * ne; - const size_t qx_sz = ne * ggml_type_size(quant)/ggml_blck_size(quant); - float * x = (float *) malloc(x_sz); - void * qx = malloc(qx_sz); - vk_buffer qx_buf = ggml_vk_create_buffer_check(ctx, qx_sz, vk::MemoryPropertyFlagBits::eDeviceLocal); - vk_buffer x_buf = ggml_vk_create_buffer_check(ctx, x_sz_f16, vk::MemoryPropertyFlagBits::eDeviceLocal); - ggml_fp16_t * x_chk = (ggml_fp16_t *) malloc(x_sz_f16); - - for (size_t i = 0; i < ne; i++) { - x[i] = rand() / (float)RAND_MAX; - } - - vk_pipeline p = ctx->device->pipeline_dequant[quant]; - - ggml_vk_quantize_data(x, qx, ne, quant); - - ggml_pipeline_allocate_descriptor_sets(ctx, p, 1); - - ggml_vk_buffer_write(ctx, qx_buf, 0, qx, qx_sz); - - vk_context * subctx = ggml_vk_create_context(ctx, ctx->device->compute_queue); - ggml_vk_ctx_begin(ctx, subctx); - const std::vector pc = { 1, (uint32_t)ne, (uint32_t)ne, (uint32_t)ne, (uint32_t)ne }; - ggml_vk_dispatch_pipeline(ctx, subctx, p, { { qx_buf, 0, qx_sz }, { x_buf, 0, x_sz_f16 } }, pc.size() * sizeof(int), pc.data(), { (uint32_t)ne, 1, 1}); - ggml_vk_ctx_end(subctx); - - auto begin = std::chrono::high_resolution_clock::now(); - - ggml_vk_submit(subctx, ctx->fence); - VK_CHECK(ctx->device->device.waitForFences({ ctx->fence }, true, UINT64_MAX), "ggml_vk_test_dequant waitForFences"); - ctx->device->device.resetFences({ ctx->fence }); - - auto end = std::chrono::high_resolution_clock::now(); - - double ms_dequant = std::chrono::duration_cast(end-begin).count() / 1000.0; - ggml_vk_buffer_read(ctx, x_buf, 0, x_chk, x_sz_f16); - - int first_err = -1; - - double avg_err = 0.0; - for (size_t i = 0; i < ne; i++) { - double error = std::fabs(x[i] - ggml_fp16_to_fp32(x_chk[i])); - avg_err += error; - - if (first_err < 0 && error > 0.05) { - first_err = i; - } - } - - avg_err /= ne; - - std::cerr << "TEST DEQUANT " << ggml_type_name(quant) << " time=" << ms_dequant << "ms avg_err=" << avg_err << std::endl; - - if (avg_err > 0.1) { - std::cerr << "first_error = " << first_err << std::endl; - std::cerr << "Actual result: " << std::endl << std::endl; - for (int i = std::max(0, first_err - 5); i < std::min((int)ne, first_err + 5); i++) { - std::cerr << ggml_fp16_to_fp32(x_chk[i]) << ", "; - } - std::cerr << std::endl << "Expected result: " << std::endl << std::endl; - for (int i = std::max(0, first_err - 5); i < std::min((int)ne, first_err + 5); i++) { - std::cerr << x[i] << ", "; - } - std::cerr << std::endl; - } - - ggml_vk_destroy_buffer(x_buf); - ggml_vk_destroy_buffer(qx_buf); - - free(x); - free(qx); - free(x_chk); -} - -static void ggml_vk_test_dequant_matmul(ggml_backend_vk_context * ctx, size_t m, size_t n, size_t k, size_t batch, size_t num_it, size_t split_k, size_t shader_size, ggml_type quant) { -#ifdef GGML_VULKAN_DEBUG - std::cerr << "ggml_vk_test_dequant_matmul(" << m << ", " << n << ", " << k << ", " << batch << ", " << num_it << ", " << split_k << ", " << ggml_type_name(quant) << ")" << std::endl; -#endif - const size_t x_ne = m * k * batch; - const size_t y_ne = k * n * batch; - const size_t d_ne = m * n * batch; - - vk_pipeline p; - std::string shname; - if (shader_size == 0) { - p = ctx->device->pipeline_dequant_mul_mat_mat[quant]->a_s; - shname = std::string(ggml_type_name(quant)) + "_ALIGNED_S"; - } else if (shader_size == 1) { - p = ctx->device->pipeline_dequant_mul_mat_mat[quant]->a_m; - shname = std::string(ggml_type_name(quant)) + "_ALIGNED_M"; - } else if (shader_size == 2) { - p = ctx->device->pipeline_dequant_mul_mat_mat[quant]->a_l; - shname = std::string(ggml_type_name(quant)) + "_ALIGNED_L"; - } else { - GGML_ASSERT(0); - } - - const size_t kpad = ggml_vk_align_size(k, p->align); - - if (k != kpad) { - if (shader_size == 0) { - p = ctx->device->pipeline_dequant_mul_mat_mat[quant]->s; - shname = std::string(ggml_type_name(quant)) + "_S"; - } else if (shader_size == 1) { - p = ctx->device->pipeline_dequant_mul_mat_mat[quant]->m; - shname = std::string(ggml_type_name(quant)) + "_M"; - } else if (shader_size == 2) { - p = ctx->device->pipeline_dequant_mul_mat_mat[quant]->l; - shname = std::string(ggml_type_name(quant)) + "_L"; - } else { - GGML_ASSERT(0); - } - } - - const size_t x_sz = sizeof(float) * x_ne; - const size_t y_sz = sizeof(float) * y_ne; - const size_t qx_sz = x_ne * ggml_type_size(quant)/ggml_blck_size(quant); - const size_t d_sz = sizeof(float) * d_ne; - float * x = (float *) malloc(x_sz); - float * y = (float *) malloc(y_sz); - void * qx = malloc(qx_sz); - vk_buffer qx_buf = ggml_vk_create_buffer_check(ctx, qx_sz, vk::MemoryPropertyFlagBits::eDeviceLocal); - vk_buffer y_buf = ggml_vk_create_buffer_check(ctx, y_sz, vk::MemoryPropertyFlagBits::eDeviceLocal); - vk_buffer d_buf = ggml_vk_create_buffer_check(ctx, d_sz, vk::MemoryPropertyFlagBits::eDeviceLocal); - float * d = (float *) malloc(d_sz); - float * d_chk = (float *) malloc(d_sz); - - for (size_t i = 0; i < x_ne; i++) { - x[i] = (rand() / (float)RAND_MAX) * 2.0f - 1.0f; - } - - ggml_vk_quantize_data(x, qx, x_ne, quant); - - for (size_t i = 0; i < y_ne; i++) { - // y[i] = rand() / (float)RAND_MAX; - y[i] = (i % k == i / k) ? 1.0f : 0.0f; - } - - ggml_pipeline_allocate_descriptor_sets(ctx, p, num_it); - if (split_k > 1) { - ggml_pipeline_allocate_descriptor_sets(ctx, ctx->device->pipeline_matmul_split_k_reduce, num_it); - - if (ctx->prealloc_split_k == nullptr || ctx->prealloc_split_k->size < sizeof(float) * d_ne * split_k) { - // Resize buffer - if (ctx->prealloc_split_k != nullptr) { - ggml_vk_destroy_buffer(ctx->prealloc_split_k); - } - ctx->prealloc_split_k = ggml_vk_create_buffer_check(ctx, sizeof(float) * d_ne * split_k, vk::MemoryPropertyFlagBits::eDeviceLocal); - } - } - - ggml_vk_buffer_write(ctx, qx_buf, 0, qx, qx_sz); - ggml_vk_buffer_write(ctx, y_buf, 0, y, y_sz); - - vk_context * subctx = ggml_vk_create_context(ctx, ctx->device->compute_queue); - for (size_t i = 0; i < num_it; i++) { - ggml_vk_ctx_begin(ctx, subctx); - ggml_vk_matmul(ctx, subctx, p, ggml_vk_subbuffer(qx_buf), ggml_vk_subbuffer(y_buf), ggml_vk_subbuffer(d_buf), ggml_vk_subbuffer(ctx->prealloc_split_k), m, n, k, k, k, m, split_k, batch, batch, batch, 1, 1, k*m, k*n, m*n); - ggml_vk_ctx_end(subctx); - } - - auto begin = std::chrono::high_resolution_clock::now(); - - ggml_vk_submit(subctx, ctx->fence); - VK_CHECK(ctx->device->device.waitForFences({ ctx->fence }, true, UINT64_MAX), "ggml_vk_test_dequant waitForFences"); - ctx->device->device.resetFences({ ctx->fence }); - - auto end = std::chrono::high_resolution_clock::now(); - - double time_ms = std::chrono::duration_cast(end-begin).count() / 1000.0; - ggml_vk_buffer_read(ctx, d_buf, 0, d, d_sz); - - ggml_init_params iparams = { - /*.mem_size =*/ 1024*1024*1024, - /*.mem_buffer =*/ NULL, - /*.no_alloc =*/ true, - }; - - ggml_context * ggml_ctx = ggml_init(iparams); - - ggml_tensor * src0_ggml = ggml_new_tensor_3d(ggml_ctx, quant, k, m, batch); - ggml_tensor * src1_ggml = ggml_new_tensor_3d(ggml_ctx, GGML_TYPE_F32, k, n, batch); - ggml_tensor * tensor_ggml = ggml_mul_mat(ggml_ctx, src0_ggml, src1_ggml); - - src0_ggml->data = qx; - src1_ggml->data = y; - tensor_ggml->data = d_chk; - - ctx->disable = true; - - ggml_cgraph * cgraph = ggml_new_graph(ggml_ctx); - ggml_build_forward_expand(cgraph, tensor_ggml); - - ggml_graph_compute_with_ctx(ggml_ctx, cgraph, 1); - - ctx->disable = false; - - ggml_free(ggml_ctx); - - double avg_err = 0.0; - int first_err_n = -1; - int first_err_m = -1; - int first_err_b = -1; - - for (size_t i = 0; i < m*n*batch; i++) { - double err = std::fabs(d[i] - d_chk[i]); - avg_err += err; - - if ((err > 0.05f || std::isnan(err)) && first_err_n == -1) { - first_err_b = i / (m * n); - first_err_n = (i % (m * n)) / m; - first_err_m = (i % (m * n)) % m; - } - } - - avg_err /= m * n; - - std::cerr << "TEST MMQ " << shname << " m=" << m << " n=" << n << " k=" << k << " batch=" << batch << " split_k=" << split_k << " matmul " << time_ms / num_it << "ms avg_err=" << avg_err << std::endl; - - if (avg_err > 0.01 || std::isnan(avg_err)) { - std::cerr << "m = " << first_err_m << " n = " << first_err_n << " b = " << first_err_b << std::endl; - std::cerr << "Actual result: " << std::endl << std::endl; - ggml_vk_print_matrix_area(d, GGML_TYPE_F32, m, n, first_err_m, first_err_n, first_err_b); - std::cerr << std::endl; - std::cerr << "Expected result: " << std::endl << std::endl; - ggml_vk_print_matrix_area(d_chk, GGML_TYPE_F32, m, n, first_err_m, first_err_n, first_err_b); - - if (split_k > 1) { - float * split_k_buf = (float *) malloc(sizeof(float) * d_ne * split_k); - ggml_vk_buffer_read(ctx, ctx->prealloc_split_k, 0, split_k_buf, sizeof(float) * d_ne * split_k); - - std::cerr << "d_buf0: " << std::endl << std::endl; - ggml_vk_print_matrix_area(split_k_buf, GGML_TYPE_F32, m, n, first_err_m, first_err_n, first_err_b); - - std::cerr << "d_buf1: " << std::endl << std::endl; - ggml_vk_print_matrix_area(split_k_buf + d_ne, GGML_TYPE_F32, m, n, first_err_m, first_err_n, first_err_b); - - std::cerr << "d_buf2: " << std::endl << std::endl; - ggml_vk_print_matrix_area(split_k_buf + 2 * d_ne, GGML_TYPE_F32, m, n, first_err_m, first_err_n, first_err_b); - - std::cerr << "d_buf3: " << std::endl << std::endl; - ggml_vk_print_matrix_area(split_k_buf + 3 * d_ne, GGML_TYPE_F32, m, n, first_err_m, first_err_n, first_err_b); - - free(split_k_buf); - } - } - - ggml_vk_destroy_buffer(qx_buf); - ggml_vk_destroy_buffer(y_buf); - ggml_vk_destroy_buffer(d_buf); - - free(x); - free(qx); - free(y); - free(d); - free(d_chk); -} -#endif - -static ggml_tensor_extra_gpu * ggml_vk_tensor_create_extra(ggml_tensor * tensor) { -#ifdef GGML_VULKAN_DEBUG - std::cerr << "ggml_vk_create_extra(" << tensor << " (" << tensor->name << ", " << ggml_op_name(tensor->op) << "))" << std::endl; -#endif - ggml_tensor_extra_gpu * extra = new ggml_tensor_extra_gpu; - extra->reset(); - tensor->extra = extra; - return extra; -} - -static void ggml_vk_preallocate_buffers_graph(ggml_backend_vk_context * ctx, ggml_tensor * node){ -#ifdef GGML_VULKAN_DEBUG - std::cerr << "ggml_vk_preallocate_buffers_graph(" << node << ")" << std::endl; -#endif - if (ctx->disable || node->backend != GGML_BACKEND_TYPE_GPU) { - return; - } - - ggml_tensor_extra_gpu * extra = (ggml_tensor_extra_gpu *) node->extra; - - ggml_tensor * src0 = node->src[0]; - ggml_tensor * src1 = node->src[1]; - - const bool use_src0 = src0 != nullptr; - const int64_t ne00 = use_src0 ? src0->ne[0] : 0; - const int64_t ne01 = use_src0 ? src0->ne[1] : 0; - const int64_t ne02 = use_src0 ? src0->ne[2] : 0; - const int64_t ne03 = use_src0 ? src0->ne[3] : 0; - const bool use_src1 = src1 != nullptr && node->op != GGML_OP_CPY && node->op != GGML_OP_CONT && node->op != GGML_OP_DUP; - const int64_t ne10 = use_src1 ? src1->ne[0] : 0; - const int64_t ne11 = use_src1 ? src1->ne[1] : 0; - const int64_t ne12 = use_src1 ? src1->ne[2] : 0; - const int64_t ne13 = use_src1 ? src1->ne[3] : 0; - const int64_t ne20 = node->ne[0]; - const int64_t ne21 = node->ne[1]; - const int64_t ne22 = node->ne[2]; - const int64_t ne23 = node->ne[3]; - - const ggml_type src0_type = (use_src0 && src0->type == GGML_TYPE_F32) ? src0->type : GGML_TYPE_F16; - const ggml_type src1_type = (use_src1 && src1->type == GGML_TYPE_F32) ? src1->type : GGML_TYPE_F16; - - const bool x_non_contig = use_src0 && !ggml_vk_dim01_contiguous(src0); - const bool y_non_contig = use_src1 && !ggml_vk_dim01_contiguous(src1); - - const bool y_f32_kernel = use_src1 && src1->type == GGML_TYPE_F32 && !y_non_contig; - - bool mmp = (use_src0 && use_src1 && src1_type == GGML_TYPE_F32) ? ggml_vk_get_mul_mat_mat_pipeline(ctx, src0_type, y_non_contig ? GGML_TYPE_F16 : src1->type) != nullptr : false; - - const bool qx_needs_dequant = use_src0 && (mmp || x_non_contig); - const bool qy_needs_dequant = use_src1 && ((src1->type != GGML_TYPE_F16 && !y_f32_kernel) || y_non_contig); - - int split_k; - if (node->op == GGML_OP_MUL_MAT || node->op == GGML_OP_MUL_MAT_ID) { - split_k = ggml_vk_guess_split_k(ne01, ne11, ne10); - } else { - split_k = 1; - } - const uint32_t x_ne = ne00 * ne01; - const uint32_t y_ne = ne10 * ne11; - const uint32_t d_ne = ne20 * ne21; - - const uint64_t x_sz = (use_src0 && qx_needs_dequant) ? ggml_vk_align_size(sizeof(src0_type) * x_ne, ctx->device->properties.limits.minStorageBufferOffsetAlignment) * ne02 * ne03 : 0; - const uint64_t y_sz = (use_src1 && qy_needs_dequant) ? ggml_vk_align_size(sizeof(src1_type) * y_ne, ctx->device->properties.limits.minStorageBufferOffsetAlignment) * ne12 * ne13 : 0; - uint64_t d_sz = ggml_vk_align_size(ggml_type_size(node->type) * d_ne, ctx->device->properties.limits.minStorageBufferOffsetAlignment) * ne22 * ne23; - const uint64_t split_k_size = split_k > 1 ? d_sz * 4 : 0; - - if (extra->buffer_gpu.expired()) { - // Workaround for CPU backend BLAS matmul calls - extra->buffer_gpu = ggml_vk_create_buffer_temp(ctx, d_sz); - } - - switch (node->op) { - case GGML_OP_REPEAT: - case GGML_OP_GET_ROWS: - case GGML_OP_RESHAPE: - case GGML_OP_VIEW: - case GGML_OP_PERMUTE: - case GGML_OP_TRANSPOSE: - case GGML_OP_ADD: - case GGML_OP_SCALE: - case GGML_OP_SQR: - case GGML_OP_CLAMP: - case GGML_OP_CPY: - case GGML_OP_CONT: - case GGML_OP_DUP: - case GGML_OP_MUL: - case GGML_OP_NORM: - case GGML_OP_RMS_NORM: - case GGML_OP_DIAG_MASK_INF: - case GGML_OP_SOFT_MAX: - case GGML_OP_ROPE: - case GGML_OP_ARGSORT: - break; - case GGML_OP_UNARY: - switch (ggml_get_unary_op(node)) { - case GGML_UNARY_OP_SILU: - case GGML_UNARY_OP_GELU: - case GGML_UNARY_OP_RELU: - break; - default: - return; - } - break; - case GGML_OP_MUL_MAT: - case GGML_OP_MUL_MAT_ID: - if (ctx->prealloc_size_x < x_sz) { - ctx->prealloc_size_x = x_sz; - } - if (ctx->prealloc_size_y < y_sz) { - ctx->prealloc_size_y = y_sz; - } - if (ctx->prealloc_size_split_k < split_k_size) { - ctx->prealloc_size_split_k = split_k_size; - } - if (ctx->staging_size < x_sz + y_sz) { - ctx->staging_size = x_sz + y_sz; - } - break; - default: - return; - } -} - -static void ggml_vk_preallocate_buffers(ggml_backend_vk_context * ctx) { - if (ctx->disable) { - return; - } -#ifdef GGML_VULKAN_DEBUG - std::cerr << "ggml_vk_preallocate_buffers(x_size: " << ctx->prealloc_size_x << " y_size: " << ctx->prealloc_size_y << " split_k_size: " << ctx->prealloc_size_split_k << ")" << std::endl; -#endif -#if defined(GGML_VULKAN_RUN_TESTS) - ctx->staging = ggml_vk_create_buffer_check(ctx, 100ul * 1024ul * 1024ul, - vk::MemoryPropertyFlagBits::eHostVisible | vk::MemoryPropertyFlagBits::eHostCoherent | vk::MemoryPropertyFlagBits::eHostCached, - vk::MemoryPropertyFlagBits::eHostVisible | vk::MemoryPropertyFlagBits::eHostCoherent); - ggml_vk_test_transfer(ctx, 8192 * 1000, false); - ggml_vk_test_transfer(ctx, 8192 * 1000, true); - - ggml_vk_test_dequant(ctx, 7680, GGML_TYPE_F32); - ggml_vk_test_dequant(ctx, 7680, GGML_TYPE_Q4_0); - ggml_vk_test_dequant(ctx, 7680, GGML_TYPE_Q4_1); - ggml_vk_test_dequant(ctx, 7680, GGML_TYPE_Q5_0); - ggml_vk_test_dequant(ctx, 7680, GGML_TYPE_Q5_1); - ggml_vk_test_dequant(ctx, 7680, GGML_TYPE_Q8_0); - ggml_vk_test_dequant(ctx, 7680, GGML_TYPE_Q2_K); - ggml_vk_test_dequant(ctx, 7680, GGML_TYPE_Q3_K); - ggml_vk_test_dequant(ctx, 7680, GGML_TYPE_Q4_K); - ggml_vk_test_dequant(ctx, 7680, GGML_TYPE_Q5_K); - ggml_vk_test_dequant(ctx, 7680, GGML_TYPE_Q6_K); - - ggml_vk_test_matmul(ctx, 128, 512, 512, 2, 100, 1, 0); - ggml_vk_test_matmul(ctx, 128, 512, 512, 2, 100, 1, 1); - ggml_vk_test_matmul(ctx, 128, 512, 512, 2, 100, 1, 2); - ggml_vk_test_matmul(ctx, 128, 512, 512, 2, 100, 4, 0); - ggml_vk_test_matmul(ctx, 128, 512, 512, 2, 100, 4, 1); - ggml_vk_test_matmul(ctx, 128, 512, 512, 2, 100, 4, 2); - - ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 1, 0, GGML_TYPE_Q4_0); - ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 1, 1, GGML_TYPE_Q4_0); - ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 1, 2, GGML_TYPE_Q4_0); - ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 4, 0, GGML_TYPE_Q4_0); - ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 4, 1, GGML_TYPE_Q4_0); - ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 4, 2, GGML_TYPE_Q4_0); - - ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 1, 0, GGML_TYPE_Q4_1); - ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 1, 1, GGML_TYPE_Q4_1); - ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 1, 2, GGML_TYPE_Q4_1); - ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 4, 0, GGML_TYPE_Q4_1); - ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 4, 1, GGML_TYPE_Q4_1); - ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 4, 2, GGML_TYPE_Q4_1); - - ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 1, 0, GGML_TYPE_Q5_0); - ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 1, 1, GGML_TYPE_Q5_0); - ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 1, 2, GGML_TYPE_Q5_0); - ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 4, 0, GGML_TYPE_Q5_0); - ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 4, 1, GGML_TYPE_Q5_0); - ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 4, 2, GGML_TYPE_Q5_0); - - ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 1, 0, GGML_TYPE_Q5_1); - ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 1, 1, GGML_TYPE_Q5_1); - ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 1, 2, GGML_TYPE_Q5_1); - ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 4, 0, GGML_TYPE_Q5_1); - ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 4, 1, GGML_TYPE_Q5_1); - ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 4, 2, GGML_TYPE_Q5_1); - - ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 1, 0, GGML_TYPE_Q8_0); - ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 1, 1, GGML_TYPE_Q8_0); - ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 1, 2, GGML_TYPE_Q8_0); - ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 4, 0, GGML_TYPE_Q8_0); - ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 4, 1, GGML_TYPE_Q8_0); - ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 4, 2, GGML_TYPE_Q8_0); - - ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 1, 0, GGML_TYPE_Q2_K); - ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 1, 1, GGML_TYPE_Q2_K); - ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 1, 2, GGML_TYPE_Q2_K); - ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 4, 0, GGML_TYPE_Q2_K); - ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 4, 1, GGML_TYPE_Q2_K); - ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 4, 2, GGML_TYPE_Q2_K); - - ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 1, 0, GGML_TYPE_Q3_K); - ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 1, 1, GGML_TYPE_Q3_K); - ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 1, 2, GGML_TYPE_Q3_K); - ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 4, 0, GGML_TYPE_Q3_K); - ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 4, 1, GGML_TYPE_Q3_K); - ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 4, 2, GGML_TYPE_Q3_K); - - ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 1, 0, GGML_TYPE_Q4_K); - ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 1, 1, GGML_TYPE_Q4_K); - ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 1, 2, GGML_TYPE_Q4_K); - ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 4, 0, GGML_TYPE_Q4_K); - ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 4, 1, GGML_TYPE_Q4_K); - ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 4, 2, GGML_TYPE_Q4_K); - - ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 1, 0, GGML_TYPE_Q5_K); - ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 1, 1, GGML_TYPE_Q5_K); - ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 1, 2, GGML_TYPE_Q5_K); - ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 4, 0, GGML_TYPE_Q5_K); - ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 4, 1, GGML_TYPE_Q5_K); - ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 4, 2, GGML_TYPE_Q5_K); - - ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 1, 0, GGML_TYPE_Q6_K); - ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 1, 1, GGML_TYPE_Q6_K); - ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 1, 2, GGML_TYPE_Q6_K); - ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 4, 0, GGML_TYPE_Q6_K); - ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 4, 1, GGML_TYPE_Q6_K); - ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 4, 2, GGML_TYPE_Q6_K); - - std::cerr << std::endl; - - const std::vector vals { - 8, 8, 8, - 100, 46, 576, - 623, 111, 128, - 100, 46, 558, - 512, 1, 256, - 128, 110, 622, - 511, 511, 127, - 511, 511, 7, - 511, 511, 17, - 49, 49, 128, - 128, 49, 49, - 4096, 49, 4096, - 11008, 49, 4096, - 4096, 49, 11008, - 32000, 49, 4096, - 512, 512, 128, - 128, 512, 512, - 4096, 512, 4096, - 11008, 512, 4096, - 4096, 512, 11008, - 32000, 512, 4096, - }; - const size_t num_it = 1; - for (size_t i = 0; i < vals.size(); i += 3) { - ggml_vk_test_matmul(ctx, vals[i], vals[i + 1], vals[i + 2], 2, num_it, 1, 0); - ggml_vk_test_matmul(ctx, vals[i], vals[i + 1], vals[i + 2], 2, num_it, 1, 1); - ggml_vk_test_matmul(ctx, vals[i], vals[i + 1], vals[i + 2], 2, num_it, 1, 2); - ggml_vk_test_matmul(ctx, vals[i], vals[i + 1], vals[i + 2], 2, num_it, 4, 0); - ggml_vk_test_matmul(ctx, vals[i], vals[i + 1], vals[i + 2], 2, num_it, 4, 1); - ggml_vk_test_matmul(ctx, vals[i], vals[i + 1], vals[i + 2], 2, num_it, 4, 2); - std::cerr << std::endl; - } - - GGML_ASSERT(false); -#endif - - if (ctx->prealloc_x == nullptr || (ctx->prealloc_size_x > 0 && ctx->prealloc_x->size < ctx->prealloc_size_x)) { - // Resize buffer - if (ctx->prealloc_x != nullptr) { - ggml_vk_destroy_buffer(ctx->prealloc_x); - } - ctx->prealloc_x = ggml_vk_create_buffer_device(ctx, ctx->prealloc_size_x); - } - if (ctx->prealloc_y == nullptr || (ctx->prealloc_size_y > 0 && ctx->prealloc_y->size < ctx->prealloc_size_y)) { - // Resize buffer - if (ctx->prealloc_y != nullptr) { - ggml_vk_destroy_buffer(ctx->prealloc_y); - } - ctx->prealloc_y = ggml_vk_create_buffer_device(ctx, ctx->prealloc_size_y); - } - if (ctx->prealloc_split_k == nullptr || (ctx->prealloc_size_split_k > 0 && ctx->prealloc_split_k->size < ctx->prealloc_size_split_k)) { - // Resize buffer - if (ctx->prealloc_split_k != nullptr) { - ggml_vk_destroy_buffer(ctx->prealloc_split_k); - } - ctx->prealloc_split_k = ggml_vk_create_buffer_device(ctx, ctx->prealloc_size_split_k); - } - if (ctx->staging == nullptr || (ctx->staging_size > 0 && ctx->staging->size < ctx->staging_size)) { - // Resize buffer - if (ctx->staging != nullptr) { - ggml_vk_destroy_buffer(ctx->staging); - } - ctx->staging = ggml_vk_create_buffer_check(ctx, ctx->staging_size, - vk::MemoryPropertyFlagBits::eHostVisible | vk::MemoryPropertyFlagBits::eHostCoherent | vk::MemoryPropertyFlagBits::eHostCached, - vk::MemoryPropertyFlagBits::eHostVisible | vk::MemoryPropertyFlagBits::eHostCoherent); - } -} - -static void ggml_vk_build_graph(ggml_backend_vk_context * ctx, ggml_tensor * node, bool last_node){ - if (ctx->disable || node->backend != GGML_BACKEND_TYPE_GPU) { - return; - } - -#ifdef GGML_VULKAN_DEBUG - std::cerr << "ggml_vk_build_graph(" << node << ", " << ggml_op_name(node->op) << ")" << std::endl; -#endif - ctx->semaphore_idx = 0; - ctx->staging_offset = 0; - - const ggml_tensor * src0 = node->src[0]; - const ggml_tensor * src1 = node->src[1]; - const ggml_tensor * src2 = node->src[2]; - - ggml_tensor_extra_gpu * extra = (ggml_tensor_extra_gpu *) node->extra; - - switch (node->op) { - case GGML_OP_UNARY: - switch (ggml_get_unary_op(node)) { - case GGML_UNARY_OP_SILU: - case GGML_UNARY_OP_GELU: - case GGML_UNARY_OP_RELU: - break; - default: - return; - } - break; - case GGML_OP_REPEAT: - case GGML_OP_GET_ROWS: - case GGML_OP_ADD: - case GGML_OP_MUL: - case GGML_OP_SCALE: - case GGML_OP_SQR: - case GGML_OP_CLAMP: - case GGML_OP_CPY: - case GGML_OP_CONT: - case GGML_OP_DUP: - case GGML_OP_RESHAPE: - case GGML_OP_VIEW: - case GGML_OP_PERMUTE: - case GGML_OP_TRANSPOSE: - case GGML_OP_NORM: - case GGML_OP_RMS_NORM: - case GGML_OP_DIAG_MASK_INF: - case GGML_OP_SOFT_MAX: - case GGML_OP_ROPE: - case GGML_OP_MUL_MAT: - case GGML_OP_MUL_MAT_ID: - case GGML_OP_NONE: - case GGML_OP_ARGSORT: - break; - default: - std::cerr << "ggml_vulkan: Error: Missing op: " << ggml_op_name(node->op) << std::endl; - GGML_ASSERT(false); - return; - } - - if (ctx->compute_ctx == nullptr) { - ctx->compute_ctx = ggml_vk_create_context(ctx, ctx->device->compute_queue); - ggml_vk_ctx_begin(ctx, ctx->compute_ctx); - } - - switch (node->op) { - case GGML_OP_REPEAT: - ggml_vk_repeat(ctx, ctx->compute_ctx, src0, src1, node); - - break; - case GGML_OP_GET_ROWS: - ggml_vk_get_rows(ctx, ctx->compute_ctx, src0, src1, node); - - break; - case GGML_OP_ADD: - ggml_vk_add(ctx, ctx->compute_ctx, src0, src1, node); - - break; - case GGML_OP_MUL: - ggml_vk_mul(ctx, ctx->compute_ctx, src0, src1, node); - - break; - case GGML_OP_SCALE: - ggml_vk_scale(ctx, ctx->compute_ctx, src0, node); - - break; - case GGML_OP_SQR: - ggml_vk_sqr(ctx, ctx->compute_ctx, src0, node); - - break; - case GGML_OP_CLAMP: - ggml_vk_clamp(ctx, ctx->compute_ctx, src0, node); - - break; - case GGML_OP_CPY: - case GGML_OP_CONT: - case GGML_OP_DUP: - ggml_vk_cpy(ctx, ctx->compute_ctx, src0, node); - - break; - case GGML_OP_RESHAPE: - case GGML_OP_VIEW: - case GGML_OP_PERMUTE: - case GGML_OP_TRANSPOSE: - case GGML_OP_NONE: - break; - case GGML_OP_NORM: - ggml_vk_norm(ctx, ctx->compute_ctx, src0, node); - - break; - case GGML_OP_RMS_NORM: - ggml_vk_rms_norm(ctx, ctx->compute_ctx, src0, node); - - break; - case GGML_OP_UNARY: - switch (ggml_get_unary_op(node)) { - case GGML_UNARY_OP_SILU: - case GGML_UNARY_OP_GELU: - case GGML_UNARY_OP_RELU: - ggml_vk_unary(ctx, ctx->compute_ctx, src0, node); - break; - default: - return; - } - break; - case GGML_OP_DIAG_MASK_INF: - ggml_vk_diag_mask_inf(ctx, ctx->compute_ctx, src0, node); - - break; - case GGML_OP_SOFT_MAX: - ggml_vk_soft_max(ctx, ctx->compute_ctx, src0, src1, src2, node); - - break; - case GGML_OP_ROPE: - ggml_vk_rope(ctx, ctx->compute_ctx, src0, src1, node); - - break; - case GGML_OP_ARGSORT: - ggml_vk_argsort(ctx, ctx->compute_ctx, src0, node); - break; - case GGML_OP_MUL_MAT: - ggml_vk_mul_mat(ctx, ctx->compute_ctx, src0, src1, node); - - break; - case GGML_OP_MUL_MAT_ID: - //ggml_vk_mul_mat_id(ctx, ctx->compute_ctx, src0, src1, node); - std::cerr << "ggml_vulkan: GGML_OP_MUL_MAT_ID not implemented yet." << std::endl; - GGML_ASSERT(false); - - break; - default: - return; - } - - extra->ready = true; - extra->ctx_idx = ctx->compute_ctx->idx; - -#ifdef GGML_VULKAN_CHECK_RESULTS - // Force context reset on each node so that each tensor ends up in its own context - // and can be run and compared to its CPU equivalent separately - last_node = true; -#endif - - if (node->backend == GGML_BACKEND_TYPE_CPU || last_node) { - ggml_vk_ctx_end(ctx->compute_ctx); - ctx->compute_ctx->exit_tensor = node; - ctx->compute_ctx = nullptr; - } -} - -static bool ggml_vk_compute_forward(ggml_backend_vk_context * ctx, ggml_compute_params * params, ggml_tensor * tensor){ - if (ctx->disable) { - return false; - } - - ggml_tensor_extra_gpu * extra = nullptr; - - switch (tensor->op) { - case GGML_OP_ADD: - case GGML_OP_GET_ROWS: - case GGML_OP_MUL: - case GGML_OP_SCALE: - case GGML_OP_SQR: - case GGML_OP_CLAMP: - case GGML_OP_CPY: - case GGML_OP_CONT: - case GGML_OP_DUP: - case GGML_OP_NORM: - case GGML_OP_RMS_NORM: - case GGML_OP_DIAG_MASK_INF: - case GGML_OP_SOFT_MAX: - case GGML_OP_ROPE: - case GGML_OP_RESHAPE: - case GGML_OP_VIEW: - case GGML_OP_PERMUTE: - case GGML_OP_TRANSPOSE: - case GGML_OP_NONE: - case GGML_OP_ARGSORT: - extra = (ggml_tensor_extra_gpu *) tensor->extra; - - break; - case GGML_OP_UNARY: - switch (ggml_get_unary_op(tensor)) { - case GGML_UNARY_OP_SILU: - case GGML_UNARY_OP_GELU: - case GGML_UNARY_OP_RELU: - extra = (ggml_tensor_extra_gpu *) tensor->extra; - break; - default: - return false; - } - break; - case GGML_OP_MUL_MAT: - case GGML_OP_MUL_MAT_ID: - extra = (ggml_tensor_extra_gpu *) tensor->extra; - - break; - default: - return false; - } - - if (extra == nullptr) { - return false; - } - - if (params->ith != 0) { - return true; - } - if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) { - return true; - } - -#ifdef GGML_VULKAN_DEBUG - std::cerr << "ggml_vk_compute_forward(" << tensor << ", name=" << tensor->name << ", op=" << ggml_op_name(tensor->op) << ", type=" << tensor->type << ", backend=" << tensor->backend << ", ne0=" << tensor->ne[0] << ", ne1=" << tensor->ne[1] << ", ne2=" << tensor->ne[2] << ", ne3=" << tensor->ne[3] << ", nb0=" << tensor->nb[0] << ", nb1=" << tensor->nb[1] << ", nb2=" << tensor->nb[2] << ", nb3=" << tensor->nb[3] << ", view_src=" << tensor->view_src << ", view_offs=" << tensor->view_offs << ")" << std::endl; -#endif - -#ifdef GGML_VULKAN_CHECK_RESULTS - ggml_vk_check_results_0(ctx, params, tensor); -#endif - - GGML_ASSERT(extra->ready); - - vk_context& subctx = ctx->gc.contexts[extra->ctx_idx]; - - // Only run if ctx hasn't been submitted yet - if (!subctx.seqs.empty()) { - // Do staging buffer copies - for (auto& cpy : subctx.in_memcpys) { - memcpy(cpy.dst, cpy.src, cpy.n); - } - - ggml_vk_submit(&subctx, ctx->fence); - } - - if (tensor == subctx.exit_tensor) { - VK_CHECK(ctx->device->device.waitForFences({ ctx->fence }, true, UINT64_MAX), "ggml_vk_compute_forward waitForFences"); - ctx->device->device.resetFences({ ctx->fence }); - - // Do staging buffer copies - for (auto& cpy : subctx.out_memcpys) { - memcpy(cpy.dst, cpy.src, cpy.n); - } - subctx.in_memcpys.clear(); - subctx.out_memcpys.clear(); - } - - extra->ready = false; - - return true; -} - -// Clean up after graph processing is done -static void ggml_vk_graph_cleanup(ggml_backend_vk_context * ctx) { - if (ctx->disable) { - return; - } -#ifdef GGML_VULKAN_DEBUG - std::cerr << "ggml_vk_graph_cleanup()" << std::endl; -#endif - for (auto& buffer : ctx->gc.temp_buffers) { - ggml_vk_pool_free(ctx, buffer); - } - ctx->gc.temp_buffers.clear(); - - for (auto& pipeline : ctx->device->pipelines) { - if (pipeline.expired()) { - continue; - } - - vk_pipeline pl = pipeline.lock(); - ggml_pipeline_cleanup(pl); - } - - ggml_vk_queue_cleanup(ctx, ctx->device->compute_queue); - ggml_vk_queue_cleanup(ctx, ctx->device->transfer_queue); - - for (size_t i = 0; i < ctx->gc.semaphores.size(); i++) { - ctx->device->device.destroySemaphore({ ctx->gc.semaphores[i].s }); - } - ctx->gc.semaphores.clear(); - - for (size_t i = 0; i < ctx->gc.tl_semaphores.size(); i++) { - ctx->device->device.destroySemaphore({ ctx->gc.tl_semaphores[i].s }); - } - ctx->gc.tl_semaphores.clear(); - ctx->semaphore_idx = 0; - - ctx->event_idx = 0; - - for (auto& event : ctx->gc.events) { - ctx->device->device.resetEvent(event); - } - - ctx->staging_offset = 0; - - ctx->compute_ctx = nullptr; - ctx->transfer_ctx = nullptr; - ctx->gc.contexts.clear(); -} - -// Clean up on backend free -static void ggml_vk_cleanup(ggml_backend_vk_context * ctx) { -#ifdef GGML_VULKAN_DEBUG - std::cerr << "ggml_vk_cleanup(" << ctx->idx << ")" << std::endl; -#endif - ggml_vk_graph_cleanup(ctx); - - ggml_vk_destroy_buffer(ctx->prealloc_x); - ggml_vk_destroy_buffer(ctx->prealloc_y); - ggml_vk_destroy_buffer(ctx->prealloc_split_k); - ggml_vk_destroy_buffer(ctx->staging); - ggml_vk_destroy_buffer(ctx->sync_staging); - - for (auto& buffer : ctx->buffer_pool) { - ggml_vk_destroy_buffer(buffer); - } - - ctx->prealloc_size_x = 0; - ctx->prealloc_size_y = 0; - ctx->prealloc_size_split_k = 0; - ctx->staging_size = 0; - - for (auto& event : ctx->gc.events) { - ctx->device->device.destroyEvent(event); - } - ctx->gc.events.clear(); - - ctx->device->device.destroyFence(ctx->fence); -} - -GGML_CALL static int ggml_vk_get_device_count() { - ggml_vk_instance_init(); - - return vk_instance.device_indices.size(); -} - -GGML_CALL static void ggml_vk_get_device_description(int device, char * description, size_t description_size) { - ggml_vk_instance_init(); - - std::vector devices = vk_instance.instance.enumeratePhysicalDevices(); - - vk::PhysicalDeviceProperties props; - devices[device].getProperties(&props); - - snprintf(description, description_size, "%s", props.deviceName.data()); -} - -// backend interface - -#define UNUSED GGML_UNUSED - -// device backend - -static void * const vk_ptr_base = (void *)(uintptr_t) 0x1000; // NOLINT - -struct ggml_backend_vk_buffer_context { - ggml_backend_vk_context * ctx; - vk_buffer dev_buffer; - ggml_tensor_extra_gpu * temp_tensor_extras = nullptr; - size_t temp_tensor_extra_index = 0; - std::string name; - - ggml_backend_vk_buffer_context(ggml_backend_vk_context * ctx, vk_buffer&& dev_buffer, std::string& name) : - ctx(ctx), - dev_buffer(dev_buffer), - name(name) { - } - - ~ggml_backend_vk_buffer_context() { - ggml_vk_destroy_buffer(dev_buffer); - delete[] temp_tensor_extras; - } - - ggml_tensor_extra_gpu * ggml_vk_alloc_temp_tensor_extra() { - if (temp_tensor_extras == nullptr) { - temp_tensor_extras = new ggml_tensor_extra_gpu[GGML_VK_MAX_NODES]; - } - - size_t alloc_index = temp_tensor_extra_index; - temp_tensor_extra_index = (temp_tensor_extra_index + 1) % GGML_VK_MAX_NODES; - ggml_tensor_extra_gpu * extra = &temp_tensor_extras[alloc_index]; - extra->reset(); - - return extra; - } -}; - -GGML_CALL static const char * ggml_backend_vk_buffer_get_name(ggml_backend_buffer_t buffer) { - ggml_backend_vk_buffer_context * ctx = (ggml_backend_vk_buffer_context *)buffer->context; - return ctx->name.c_str(); -} - -GGML_CALL static bool ggml_backend_buffer_is_vk(ggml_backend_buffer_t buffer) { - return buffer->iface.get_name == ggml_backend_vk_buffer_get_name; -} - -GGML_CALL static void ggml_backend_vk_buffer_free_buffer(ggml_backend_buffer_t buffer) { -#ifdef GGML_VULKAN_DEBUG - std::cerr << "ggml_backend_vk_buffer_free_buffer()" << std::endl; -#endif - ggml_backend_vk_buffer_context * ctx = (ggml_backend_vk_buffer_context *)buffer->context; - ggml_vk_destroy_buffer(ctx->dev_buffer); - delete ctx; -} - -GGML_CALL static void * ggml_backend_vk_buffer_get_base(ggml_backend_buffer_t buffer) { - return vk_ptr_base; - - UNUSED(buffer); -} - -GGML_CALL static void ggml_backend_vk_buffer_init_tensor(ggml_backend_buffer_t buffer, ggml_tensor * tensor) { -#ifdef GGML_VULKAN_DEBUG - std::cerr << "ggml_backend_vk_buffer_init_tensor(" << buffer << " (" << buffer->context << "), " << tensor << ")" << std::endl; -#endif - ggml_backend_vk_buffer_context * ctx = (ggml_backend_vk_buffer_context *)buffer->context; - - ggml_tensor_extra_gpu * extra = ctx->ggml_vk_alloc_temp_tensor_extra(); - if (tensor->view_src != nullptr && tensor->view_src->extra != nullptr) { - GGML_ASSERT(tensor->view_src->buffer->buft == buffer->buft); - ggml_tensor_extra_gpu * extra_view = (ggml_tensor_extra_gpu *) tensor->view_src->extra; - extra->buffer_gpu = extra_view->buffer_gpu; - extra->offset = extra_view->offset + tensor->view_offs; - } else { - extra->buffer_gpu = ctx->dev_buffer; - extra->offset = (uint8_t *) tensor->data - (uint8_t *) vk_ptr_base; - } - - tensor->backend = GGML_BACKEND_TYPE_GPU; - tensor->extra = extra; -} - -GGML_CALL static void ggml_backend_vk_buffer_set_tensor(ggml_backend_buffer_t buffer, ggml_tensor * tensor, const void * data, size_t offset, size_t size) { -#ifdef GGML_VULKAN_DEBUG - std::cerr << "ggml_backend_vk_buffer_set_tensor(" << buffer << ", " << tensor << ", " << data << ", " << offset << ", " << size << ")" << std::endl; -#endif - GGML_ASSERT(tensor->backend == GGML_BACKEND_TYPE_GPU); - - ggml_backend_vk_buffer_context * ctx = (ggml_backend_vk_buffer_context *)buffer->context; - - ggml_tensor_extra_gpu * extra = (ggml_tensor_extra_gpu *) tensor->extra; - - vk_buffer buf = extra->buffer_gpu.lock(); - - ggml_vk_buffer_write(ctx->ctx, buf, extra->offset + offset, data, size); -} - -GGML_CALL static void ggml_backend_vk_buffer_get_tensor(ggml_backend_buffer_t buffer, const ggml_tensor * tensor, void * data, size_t offset, size_t size) { -#ifdef GGML_VULKAN_DEBUG - std::cerr << "ggml_backend_vk_buffer_get_tensor(" << buffer << ", " << tensor << ", " << data << ", " << offset << ", " << size << ")" << std::endl; -#endif - GGML_ASSERT(tensor->backend == GGML_BACKEND_TYPE_GPU); - - ggml_backend_vk_buffer_context * ctx = (ggml_backend_vk_buffer_context *)buffer->context; - - ggml_tensor_extra_gpu * extra = (ggml_tensor_extra_gpu *) tensor->extra; - - vk_buffer buf = extra->buffer_gpu.lock(); - - ggml_vk_buffer_read(ctx->ctx, buf, extra->offset + offset, data, size); -} - -GGML_CALL static bool ggml_backend_vk_buffer_cpy_tensor(ggml_backend_buffer_t buffer, const ggml_tensor * src, ggml_tensor * dst) { - if (ggml_backend_buffer_is_vk(src->buffer)) { - ggml_tensor_extra_gpu * src_extra = (ggml_tensor_extra_gpu *) src->extra; - ggml_tensor_extra_gpu * dst_extra = (ggml_tensor_extra_gpu *) dst->extra; - - vk_buffer src_buf = src_extra->buffer_gpu.lock(); - vk_buffer dst_buf = dst_extra->buffer_gpu.lock(); - - ggml_vk_buffer_copy(dst_buf, dst_extra->offset, src_buf, src_extra->offset, ggml_nbytes(src)); - - return true; - } - return false; - - UNUSED(buffer); -} - -GGML_CALL static void ggml_backend_vk_buffer_clear(ggml_backend_buffer_t buffer, uint8_t value) { - ggml_backend_vk_buffer_context * ctx = (ggml_backend_vk_buffer_context *)buffer->context; - - ggml_vk_buffer_memset(ctx->ctx, ctx->dev_buffer, 0, value, buffer->size); -} - -static ggml_backend_buffer_i ggml_backend_vk_buffer_interface = { - /* .get_name = */ ggml_backend_vk_buffer_get_name, - /* .free_buffer = */ ggml_backend_vk_buffer_free_buffer, - /* .get_base = */ ggml_backend_vk_buffer_get_base, - /* .init_tensor = */ ggml_backend_vk_buffer_init_tensor, - /* .set_tensor = */ ggml_backend_vk_buffer_set_tensor, - /* .get_tensor = */ ggml_backend_vk_buffer_get_tensor, - /* .cpy_tensor = */ ggml_backend_vk_buffer_cpy_tensor, - /* .clear = */ ggml_backend_vk_buffer_clear, - /* .reset = */ NULL, -}; - -// vk buffer type -struct ggml_backend_vk_buffer_type_context { - std::string name; - ggml_backend_vk_context * ctx; -}; - -GGML_CALL static const char * ggml_backend_vk_buffer_type_name(ggml_backend_buffer_type_t buft) { - ggml_backend_vk_buffer_type_context * ctx = (ggml_backend_vk_buffer_type_context *)buft->context; - - return ctx->name.c_str(); -} - -GGML_CALL static ggml_backend_buffer_t ggml_backend_vk_buffer_type_alloc_buffer(ggml_backend_buffer_type_t buft, size_t size) { -#ifdef GGML_VULKAN_DEBUG - std::cerr << "ggml_backend_vk_buffer_type_alloc_buffer(" << size << ")" << std::endl; -#endif - ggml_backend_vk_buffer_type_context * ctx = (ggml_backend_vk_buffer_type_context *) buft->context; - vk_buffer dev_buffer = ggml_vk_create_buffer_device(ctx->ctx, size); - - ggml_backend_vk_buffer_context * bufctx = new ggml_backend_vk_buffer_context(ctx->ctx, std::move(dev_buffer), ctx->name); - - return ggml_backend_buffer_init(buft, ggml_backend_vk_buffer_interface, bufctx, size); -} - -GGML_CALL static size_t ggml_backend_vk_buffer_type_get_alignment(ggml_backend_buffer_type_t buft) { - ggml_backend_vk_buffer_type_context * ctx = (ggml_backend_vk_buffer_type_context *) buft->context; - return ctx->ctx->device->properties.limits.minStorageBufferOffsetAlignment; -} - -GGML_CALL static size_t ggml_backend_vk_buffer_type_get_max_size(ggml_backend_buffer_type_t buft) { - ggml_backend_vk_buffer_type_context * ctx = (ggml_backend_vk_buffer_type_context *) buft->context; - return ctx->ctx->device->max_memory_allocation_size; -} - -GGML_CALL static size_t ggml_backend_vk_buffer_type_get_alloc_size(ggml_backend_buffer_type_t buft, const ggml_tensor * tensor) { - return ggml_nbytes(tensor); - - UNUSED(buft); -} - -GGML_CALL static bool ggml_backend_vk_buffer_type_supports_backend(ggml_backend_buffer_type_t buft, ggml_backend_t backend) { - if (!ggml_backend_is_vk(backend)) { - return false; - } - - ggml_backend_vk_buffer_type_context * buft_ctx = (ggml_backend_vk_buffer_type_context *)buft->context; - ggml_backend_vk_context * ctx = (ggml_backend_vk_context *)backend->context; - - return buft_ctx->ctx->idx == ctx->idx; -} - -static ggml_backend_buffer_type_i ggml_backend_vk_buffer_type_interface = { - /* .get_name = */ ggml_backend_vk_buffer_type_name, - /* .alloc_buffer = */ ggml_backend_vk_buffer_type_alloc_buffer, - /* .get_alignment = */ ggml_backend_vk_buffer_type_get_alignment, - /* .get_max_size = */ ggml_backend_vk_buffer_type_get_max_size, - /* .get_alloc_size = */ ggml_backend_vk_buffer_type_get_alloc_size, - /* .supports_backend = */ ggml_backend_vk_buffer_type_supports_backend, - /* .is_host = */ NULL, -}; - -GGML_CALL ggml_backend_buffer_type_t ggml_backend_vk_buffer_type(size_t dev_num) { -#ifdef GGML_VULKAN_DEBUG - std::cerr << "ggml_backend_vk_buffer_type(" << dev_num << ")" << std::endl; -#endif - - GGML_ASSERT(dev_num < vk_instance.device_indices.size()); - - ggml_backend_vk_init(dev_num); - - return &vk_instance.buffer_types[dev_num]; -} - -// host buffer type - -GGML_CALL static const char * ggml_backend_vk_host_buffer_type_name(ggml_backend_buffer_type_t buft) { - return GGML_VK_NAME "_Host"; - - UNUSED(buft); -} - -GGML_CALL static const char * ggml_backend_vk_host_buffer_name(ggml_backend_buffer_t buffer) { - return GGML_VK_NAME "_Host"; - - UNUSED(buffer); -} - -GGML_CALL static void ggml_backend_vk_host_buffer_free_buffer(ggml_backend_buffer_t buffer) { -#ifdef GGML_VULKAN_DEBUG - std::cerr << "ggml_backend_vk_host_buffer_free_buffer()" << std::endl; -#endif - ggml_vk_host_free(&vk_instance.contexts[0], buffer->context); -} - -GGML_CALL static ggml_backend_buffer_t ggml_backend_vk_host_buffer_type_alloc_buffer(ggml_backend_buffer_type_t buft, size_t size) { -#ifdef GGML_VULKAN_DEBUG - std::cerr << "ggml_backend_vk_host_buffer_type_alloc_buffer(" << size << ")" << std::endl; -#endif - void * ptr = nullptr; - try { - ptr = ggml_vk_host_malloc(&vk_instance.contexts[0], size); - } catch (vk::SystemError& e) { - std::cerr << "ggml_vulkan: Failed to allocate pinned memory." << std::endl; - std::cerr << "ggml_vulkan: " << e.what() << std::endl; - // fallback to cpu buffer - return ggml_backend_buft_alloc_buffer(ggml_backend_cpu_buffer_type(), size); - } - - ggml_backend_buffer_t buffer = ggml_backend_cpu_buffer_from_ptr(ptr, size); - buffer->buft = buft; - buffer->iface.get_name = ggml_backend_vk_host_buffer_name; - buffer->iface.free_buffer = ggml_backend_vk_host_buffer_free_buffer; - - return buffer; -} - -GGML_CALL static size_t ggml_backend_vk_host_buffer_type_get_alignment(ggml_backend_buffer_type_t buft) { - return vk_instance.contexts[0].device->properties.limits.minMemoryMapAlignment; - - UNUSED(buft); -} - -GGML_CALL ggml_backend_buffer_type_t ggml_backend_vk_host_buffer_type() { - static struct ggml_backend_buffer_type ggml_backend_vk_buffer_type_host = { - /* .iface = */ { - /* .get_name = */ ggml_backend_vk_host_buffer_type_name, - /* .alloc_buffer = */ ggml_backend_vk_host_buffer_type_alloc_buffer, - /* .get_alignment = */ ggml_backend_vk_host_buffer_type_get_alignment, - /* .get_max_size = */ NULL, // defaults to SIZE_MAX - /* .get_alloc_size = */ ggml_backend_cpu_buffer_type()->iface.get_alloc_size, - /* .supports_backend = */ ggml_backend_cpu_buffer_type()->iface.supports_backend, - /* .is_host = */ ggml_backend_cpu_buffer_type()->iface.is_host, - }, - /* .context = */ nullptr, - }; - - if (!vk_instance.contexts[0].initialized) { - // Fall back to CPU - return ggml_backend_cpu_buffer_type(); - } - - return &ggml_backend_vk_buffer_type_host; -} - -// backend - -GGML_CALL static const char * ggml_backend_vk_name(ggml_backend_t backend) { - ggml_backend_vk_context * ctx = (ggml_backend_vk_context *)backend->context; - - return ctx->name.c_str(); -} - -GGML_CALL static void ggml_backend_vk_free(ggml_backend_t backend) { - ggml_backend_vk_context * ctx = (ggml_backend_vk_context *)backend->context; -#ifdef GGML_VULKAN_DEBUG - std::cerr << "ggml_backend_vk_free(" << ctx->name << ")" << std::endl; -#endif - - size_t idx = ctx->idx; - - ggml_vk_cleanup(ctx); - - ctx->device.reset(); - ctx->initialized = false; - - vk_instance.initialized[idx] = false; - vk_instance.backends[idx] = nullptr; - memset(&vk_instance.buffer_types[idx], 0, sizeof(ggml_backend_buffer_type)); - delete backend; -} - -GGML_CALL static ggml_backend_buffer_type_t ggml_backend_vk_get_default_buffer_type(ggml_backend_t backend) { - ggml_backend_vk_context * ctx = (ggml_backend_vk_context *)backend->context; - - GGML_ASSERT(ctx->initialized); - - return ggml_backend_vk_buffer_type(ctx->idx); -} - -GGML_CALL static void ggml_backend_vk_set_tensor_async(ggml_backend_t backend, ggml_tensor * tensor, const void * data, size_t offset, size_t size) { -#ifdef GGML_VULKAN_DEBUG - std::cerr << "ggml_backend_vk_set_tensor_async(" << size << ")" << std::endl; -#endif - ggml_backend_vk_context * ctx = (ggml_backend_vk_context *)backend->context; - GGML_ASSERT((tensor->buffer->buft == ggml_backend_vk_buffer_type(ctx->idx) || tensor->buffer->buft == ggml_backend_vk_host_buffer_type()) && "unsupported buffer type"); - GGML_ASSERT(tensor->backend == GGML_BACKEND_TYPE_GPU); - - ggml_tensor_extra_gpu * extra = (ggml_tensor_extra_gpu *) tensor->extra; - - if (ctx->transfer_ctx == nullptr) { - // Initialize new transfer context - ctx->transfer_ctx = ggml_vk_create_context(ctx, ctx->device->transfer_queue); - ggml_vk_ctx_begin(ctx, ctx->transfer_ctx); - } - - vk_buffer buf = extra->buffer_gpu.lock(); - - ggml_vk_buffer_write_async(ctx, ctx->transfer_ctx, buf, extra->offset + offset, data, size); -} - -GGML_CALL static void ggml_backend_vk_get_tensor_async(ggml_backend_t backend, const ggml_tensor * tensor, void * data, size_t offset, size_t size) { -#ifdef GGML_VULKAN_DEBUG - std::cerr << "ggml_backend_vk_get_tensor_async(" << size << ")" << std::endl; -#endif - ggml_backend_vk_context * ctx = (ggml_backend_vk_context *)backend->context; - GGML_ASSERT((tensor->buffer->buft == ggml_backend_vk_buffer_type(ctx->idx) || tensor->buffer->buft == ggml_backend_vk_host_buffer_type()) && "unsupported buffer type"); - GGML_ASSERT(tensor->backend == GGML_BACKEND_TYPE_GPU); - - ggml_tensor_extra_gpu * extra = (ggml_tensor_extra_gpu *) tensor->extra; - - if (ctx->transfer_ctx == nullptr) { - // Initialize new transfer context - ctx->transfer_ctx = ggml_vk_create_context(ctx, ctx->device->transfer_queue); - ggml_vk_ctx_begin(ctx, ctx->transfer_ctx); - } - - vk_buffer buf = extra->buffer_gpu.lock(); - - ggml_vk_buffer_read_async(ctx, ctx->transfer_ctx, buf, extra->offset + offset, data, size); -} - -GGML_CALL static bool ggml_backend_vk_cpy_tensor_async(ggml_backend_t backend, const ggml_tensor * src, ggml_tensor * dst) { -#ifdef GGML_VULKAN_DEBUG - std::cerr << "ggml_backend_vk_cpy_tensor_async()" << std::endl; -#endif - ggml_backend_vk_context * ctx = (ggml_backend_vk_context *)backend->context; - if ((dst->buffer->buft == ggml_backend_vk_buffer_type(ctx->idx) || dst->buffer->buft == ggml_backend_vk_host_buffer_type()) && ggml_backend_buffer_is_vk(src->buffer)) { - ggml_tensor_extra_gpu * src_extra = (ggml_tensor_extra_gpu *) src->extra; - ggml_tensor_extra_gpu * dst_extra = (ggml_tensor_extra_gpu *) dst->extra; - - if (ctx->transfer_ctx == nullptr) { - // Initialize new transfer context - ctx->transfer_ctx = ggml_vk_create_context(ctx, ctx->device->transfer_queue); - ggml_vk_ctx_begin(ctx, ctx->transfer_ctx); - } - - vk_buffer src_buf = src_extra->buffer_gpu.lock(); - vk_buffer dst_buf = dst_extra->buffer_gpu.lock(); - - ggml_vk_buffer_copy_async(ctx->transfer_ctx, dst_buf, dst_extra->offset, src_buf, src_extra->offset, ggml_nbytes(src)); - return true; - } - - return false; -} - -GGML_CALL static void ggml_backend_vk_synchronize(ggml_backend_t backend) { -#ifdef GGML_VULKAN_DEBUG - std::cerr << "ggml_backend_vk_synchronize()" << std::endl; -#endif - ggml_backend_vk_context * ctx = (ggml_backend_vk_context *)backend->context; - if(ctx->transfer_ctx == nullptr) { - return; - } - - ggml_vk_ctx_end(ctx->transfer_ctx); - - for (auto& cpy : ctx->transfer_ctx->in_memcpys) { - memcpy(cpy.dst, cpy.src, cpy.n); - } - - ggml_vk_submit(ctx->transfer_ctx, ctx->fence); - VK_CHECK(ctx->device->device.waitForFences({ ctx->fence }, true, UINT64_MAX), "ggml_backend_vk_synchronize waitForFences"); - ctx->device->device.resetFences({ ctx->fence }); - - for (auto& cpy : ctx->transfer_ctx->out_memcpys) { - memcpy(cpy.dst, cpy.src, cpy.n); - } - - ctx->transfer_ctx = nullptr; -} - -GGML_CALL static ggml_status ggml_backend_vk_graph_compute(ggml_backend_t backend, ggml_cgraph * cgraph) { -#ifdef GGML_VULKAN_DEBUG - std::cerr << "ggml_backend_vk_graph_compute(" << cgraph->n_nodes << " nodes)" << std::endl; -#endif - ggml_backend_vk_context * ctx = (ggml_backend_vk_context *)backend->context; - - for (int i = 0; i < cgraph->n_nodes; i++) { - ggml_vk_preallocate_buffers_graph(ctx, cgraph->nodes[i]); - } - ggml_vk_preallocate_buffers(ctx); - - int last_node = cgraph->n_nodes - 1; - - // If the last op in the cgraph isn't backend GPU, the command buffer doesn't get closed properly - while (last_node > 0 && cgraph->nodes[last_node]->backend != GGML_BACKEND_TYPE_GPU) { - last_node -= 1; - } - - for (int i = 0; i < cgraph->n_nodes; i++) { - ggml_vk_build_graph(ctx,cgraph->nodes[i], i == last_node); - } - - ggml_compute_params params = {}; - params.type = GGML_TASK_TYPE_COMPUTE; - params.ith = 0; - for (int i = 0; i < cgraph->n_nodes; i++) { - ggml_tensor * node = cgraph->nodes[i]; - - if (ggml_is_empty(node) || node->op == GGML_OP_RESHAPE || node->op == GGML_OP_TRANSPOSE || node->op == GGML_OP_VIEW || node->op == GGML_OP_PERMUTE || node->op == GGML_OP_NONE) { - continue; - } - - bool ok = ggml_vk_compute_forward(ctx, ¶ms, node); - if (!ok) { - fprintf(stderr, "%s: error: op not supported %s (%s)\n", __func__, node->name, ggml_op_name(node->op)); - } -#ifdef GGML_VULKAN_CHECK_RESULTS - else { - ggml_vk_check_results_1(ctx, ¶ms, node); - } -#endif - GGML_ASSERT(ok); - } - - ggml_vk_graph_cleanup(ctx); - - return GGML_STATUS_SUCCESS; - - UNUSED(backend); -} - -GGML_CALL static bool ggml_backend_vk_supports_op(ggml_backend_t backend, const ggml_tensor * op) { - switch (op->op) { - case GGML_OP_UNARY: - switch (ggml_get_unary_op(op)) { - case GGML_UNARY_OP_GELU: - case GGML_UNARY_OP_SILU: - case GGML_UNARY_OP_RELU: - return true; - default: - return false; - } - break; - case GGML_OP_MUL_MAT: - // case GGML_OP_MUL_MAT_ID: - { - switch (op->src[0]->type) { - case GGML_TYPE_F32: - case GGML_TYPE_F16: - case GGML_TYPE_Q4_0: - case GGML_TYPE_Q4_1: - case GGML_TYPE_Q5_0: - case GGML_TYPE_Q5_1: - case GGML_TYPE_Q8_0: - case GGML_TYPE_Q2_K: - case GGML_TYPE_Q3_K: - case GGML_TYPE_Q4_K: - case GGML_TYPE_Q5_K: - case GGML_TYPE_Q6_K: - break; - default: - return false; - } - struct ggml_tensor * a; - struct ggml_tensor * b; - if (op->op == GGML_OP_MUL_MAT) { - a = op->src[0]; - b = op->src[1]; - } else { - a = op->src[2]; - b = op->src[1]; - } - if (a->ne[3] != b->ne[3]) { - return false; - } - return true; - } break; - case GGML_OP_GET_ROWS: - { - switch (op->src[0]->type) { - case GGML_TYPE_F32: - case GGML_TYPE_F16: - case GGML_TYPE_Q4_0: - case GGML_TYPE_Q4_1: - case GGML_TYPE_Q5_0: - case GGML_TYPE_Q5_1: - case GGML_TYPE_Q8_0: - return true; - default: - return false; - } - } break; - case GGML_OP_CPY: - case GGML_OP_DUP: - { - ggml_type src0_type = op->src[0]->type; - ggml_type src1_type = op->src[1] != nullptr ? op->src[1]->type : src0_type; - if (src0_type == GGML_TYPE_F32 && src1_type == GGML_TYPE_F32) { - return true; - } - if (src0_type == GGML_TYPE_F32 && src1_type == GGML_TYPE_F16) { - return true; - } - if (src0_type == GGML_TYPE_F16 && src1_type == GGML_TYPE_F16) { - return true; - } - return false; - } break; - // case GGML_OP_REPEAT: - // { - // ggml_type src0_type = op->src[0]->type; - // return src0_type != GGML_TYPE_I32 && src0_type != GGML_TYPE_I16; - // } break; - case GGML_OP_ROPE: - { - const int mode = ((const int32_t *) op->op_params)[2]; - const bool is_glm = mode & 4; - - return !is_glm; - } break; - case GGML_OP_NONE: - case GGML_OP_RESHAPE: - case GGML_OP_VIEW: - case GGML_OP_PERMUTE: - case GGML_OP_TRANSPOSE: - case GGML_OP_NORM: - case GGML_OP_ADD: - case GGML_OP_MUL: - case GGML_OP_RMS_NORM: - case GGML_OP_SCALE: - case GGML_OP_SQR: - case GGML_OP_CLAMP: - case GGML_OP_CONT: - case GGML_OP_DIAG_MASK_INF: - case GGML_OP_SOFT_MAX: - case GGML_OP_ARGSORT: - return true; - default: - return false; - } - - UNUSED(backend); -} - -GGML_CALL static bool ggml_backend_vk_offload_op(ggml_backend_t backend, const ggml_tensor * op) { - const ggml_tensor * dst = op; - - const int min_batch_size = 32; - - if (dst->ne[1] > min_batch_size && dst->op != GGML_OP_GET_ROWS) { - return true; - } - - return false; - - UNUSED(backend); -} - -// TODO: enable async and synchronize -static ggml_backend_i ggml_backend_vk_interface = { - /* .get_name = */ ggml_backend_vk_name, - /* .free = */ ggml_backend_vk_free, - /* .get_default_buffer_type = */ ggml_backend_vk_get_default_buffer_type, - /* .set_tensor_async = */ NULL, // ggml_backend_vk_set_tensor_async, - /* .get_tensor_async = */ NULL, // ggml_backend_vk_get_tensor_async, - /* .cpy_tensor_async = */ NULL, // ggml_backend_vk_cpy_tensor_async, - /* .synchronize = */ NULL, // ggml_backend_vk_synchronize, - /* .graph_plan_create = */ NULL, - /* .graph_plan_free = */ NULL, - /* .graph_plan_compute = */ NULL, - /* .graph_compute = */ ggml_backend_vk_graph_compute, - /* .supports_op = */ ggml_backend_vk_supports_op, - /* .offload_op = */ ggml_backend_vk_offload_op, - /* .event_new = */ NULL, - /* .event_free = */ NULL, - /* .event_record = */ NULL, - /* .event_wait = */ NULL, - /* .event_synchronize = */ NULL, -}; - -static ggml_guid_t ggml_backend_vk_guid() { - static ggml_guid guid = { 0xb8, 0xf7, 0x4f, 0x86, 0x40, 0x3c, 0xe1, 0x02, 0x91, 0xc8, 0xdd, 0xe9, 0x02, 0x3f, 0xc0, 0x2b }; - return &guid; -} - -GGML_CALL ggml_backend_t ggml_backend_vk_init(size_t dev_num) { - if (vk_instance.initialized[dev_num]) { - return vk_instance.backends[dev_num]; - } -#ifdef GGML_VULKAN_DEBUG - std::cerr << "ggml_backend_vk_init(" << dev_num << ")" << std::endl; -#endif - - ggml_backend_vk_context * ctx = &vk_instance.contexts[dev_num]; - ggml_vk_init(ctx, dev_num); - ctx->name = GGML_VK_NAME + std::to_string(dev_num); - vk_instance.buffer_types[dev_num] = { - /* .iface = */ ggml_backend_vk_buffer_type_interface, - /* .context = */ new ggml_backend_vk_buffer_type_context{ ctx->name, ctx }, - }; - vk_instance.initialized[dev_num] = true; - - ggml_backend_t vk_backend = new ggml_backend { - /* .guid = */ ggml_backend_vk_guid(), - /* .interface = */ ggml_backend_vk_interface, - /* .context = */ &vk_instance.contexts[ctx->idx], - }; - - vk_instance.backends[dev_num] = vk_backend; - - return vk_backend; -} - -GGML_CALL bool ggml_backend_is_vk(ggml_backend_t backend) { - return backend != NULL && ggml_guid_matches(backend->guid, ggml_backend_vk_guid()); -} - -GGML_CALL int ggml_backend_vk_get_device_count() { - return ggml_vk_get_device_count(); -} - -GGML_CALL void ggml_backend_vk_get_device_description(int device, char * description, size_t description_size) { - ggml_vk_get_device_description(device, description, description_size); -} - -GGML_CALL void ggml_backend_vk_get_device_memory(int device, size_t * free, size_t * total) { - GGML_ASSERT(device < (int) vk_instance.device_indices.size()); - - vk::PhysicalDevice vkdev = vk_instance.instance.enumeratePhysicalDevices()[vk_instance.device_indices[device]]; - - vk::PhysicalDeviceMemoryProperties memprops = vkdev.getMemoryProperties(); - - for (const vk::MemoryHeap& heap : memprops.memoryHeaps) { - if (heap.flags & vk::MemoryHeapFlagBits::eDeviceLocal) { - *total = heap.size; - *free = heap.size; - break; - } - } -} - -// backend registry -GGML_CALL static ggml_backend_t ggml_backend_reg_vk_init(const char * params, void * user_data) { - ggml_backend_t vk_backend = ggml_backend_vk_init((int) (intptr_t) user_data); - return vk_backend; - - UNUSED(params); -} - -extern "C" GGML_CALL int ggml_backend_vk_reg_devices(); - -GGML_CALL int ggml_backend_vk_reg_devices() { - ggml_vk_instance_init(); - - for (size_t i = 0; i < vk_instance.device_indices.size(); i++) { - char name[128]; - snprintf(name, sizeof(name), "%s%ld", GGML_VK_NAME, i); - ggml_backend_register(name, ggml_backend_reg_vk_init, ggml_backend_vk_buffer_type(i), (void *) (intptr_t) i); // NOLINT - } - return vk_instance.device_indices.size(); -} - -// Extension availability -static bool ggml_vk_instance_validation_ext_available(const std::vector& instance_extensions) { -#ifdef GGML_VULKAN_VALIDATE - bool portability_enumeration_ext = false; - // Check for portability enumeration extension for MoltenVK support - for (const auto& properties : instance_extensions) { - if (strcmp("VK_KHR_portability_enumeration", properties.extensionName) == 0) { - return true; - } - } - if (!portability_enumeration_ext) { - std::cerr << "ggml_vulkan: WARNING: Instance extension VK_KHR_portability_enumeration not found." << std::endl; - } -#endif - return false; - - UNUSED(instance_extensions); -} -static bool ggml_vk_instance_portability_enumeration_ext_available(const std::vector& instance_extensions) { -#ifdef __APPLE__ - bool portability_enumeration_ext = false; - // Check for portability enumeration extension for MoltenVK support - for (const auto& properties : instance_extensions) { - if (strcmp("VK_KHR_portability_enumeration", properties.extensionName) == 0) { - return true; - } - } - if (!portability_enumeration_ext) { - std::cerr << "ggml_vulkan: WARNING: Instance extension VK_KHR_portability_enumeration not found." << std::endl; - } -#endif - return false; - - UNUSED(instance_extensions); -} - -// checks - -#ifdef GGML_VULKAN_CHECK_RESULTS -static void ggml_vk_print_graph_origin(const ggml_tensor * tensor, std::vector& done, int level = 0) { - if (std::find(done.begin(), done.end(), tensor) != done.end() || level > 10) { - return; - } - for (int j = 0; j < level; j++) { - std::cerr << " "; - } - std::cerr << ggml_op_name(tensor->op) << " gpu=" << (tensor->extra != nullptr) << " backend=" << tensor->backend << std::endl; - - done.push_back(tensor); - - for (int i = 0; i < GGML_MAX_SRC; i++) { - if (tensor->src[i] != nullptr) { - ggml_vk_print_graph_origin(tensor->src[i], done, level + 1); - } - } -} - -static void ggml_vk_print_tensor_area(const ggml_tensor * tensor, const void * data, int i0, int i1, int i2, int i3) { - if (tensor->type != GGML_TYPE_F32 && tensor->type != GGML_TYPE_F16) { - return; - } - i0 = std::max(i0, 5); - i1 = std::max(i1, 5); - i2 = std::max(i2, 0); - i3 = std::max(i3, 0); - fprintf(stderr, " "); - for (int idx1 = i1 - 5; idx1 < i1 + 5; idx1++) { - fprintf(stderr, "%7d ", idx1); - } - fprintf(stderr, "\n"); - for (int idx0 = i0 - 5; idx0 < i0 + 5; idx0++) { - fprintf(stderr, "%7d: ", idx0); - for (int idx1 = i1 - 5; idx1 < i1 + 5; idx1++) { - if (idx0 >= 0 && idx0 < tensor->ne[0] && idx1 >= 0 && idx1 < tensor->ne[1] && i2 >= 0 && i2 < tensor->ne[2] && i3 >= 0 && i3 < tensor->ne[3]) { - float val; - if (tensor->type == GGML_TYPE_F32) { - val = *(const float *) ((const char *) data + i3*tensor->nb[3] + i2*tensor->nb[2] + idx1*tensor->nb[1] + idx0*tensor->nb[0]); - } else if (tensor->type == GGML_TYPE_F16) { - val = ggml_fp16_to_fp32(*(const ggml_fp16_t *) ((const char *) data + i3*tensor->nb[3] + i2*tensor->nb[2] + idx1*tensor->nb[1] + idx0*tensor->nb[0])); - } else { - GGML_ASSERT(false); - } - fprintf(stderr, "% 7.2f ", val); - } else { - fprintf(stderr, " "); - } - } - fprintf(stderr, "\n"); - } -} - -static void ggml_vk_print_tensor(ggml_backend_vk_context * ctx, const ggml_tensor * tensor, const char * name) { - void * tensor_data = tensor->data; - - if (tensor->backend == GGML_BACKEND_TYPE_GPU) { - const size_t tensor_size = ggml_nbytes(tensor); - tensor_data = malloc(tensor_size); - - ggml_tensor_extra_gpu * extra = (ggml_tensor_extra_gpu *) tensor->extra; - - vk_buffer buffer_gpu = extra->buffer_gpu.lock(); - ggml_vk_buffer_read(ctx, buffer_gpu, extra->offset, tensor_data, tensor_size); - } - - std::cerr << "TENSOR CHECK " << name << " (" << tensor->name << "): " << ggml_op_name(tensor->op) << std::endl; - std::cerr << "tensor=" << tensor << " tensor->backend: " << tensor->backend << " tensor->type: " << ggml_type_name(tensor->type) << " ne0=" << tensor->ne[0] << " nb0=" << tensor->nb[0] << " ne1=" << tensor->ne[1] << " nb1=" << tensor->nb[1] << " ne2=" << tensor->ne[2] << " nb2=" << tensor->nb[2] << " ne3=" << tensor->ne[3] << " nb3=" << tensor->nb[3] << std::endl; - if (tensor->src[0] != nullptr) { - std::cerr << "tensor->src[0]=" << tensor->src[0] << " name=" << tensor->src[0]->name << " op=" << ggml_op_name(tensor->src[0]->op) << " type=" << ggml_type_name(tensor->src[0]->type) << " backend=" << tensor->src[0]->backend << " ne0=" << tensor->src[0]->ne[0] << " nb0=" << tensor->src[0]->nb[0] << " ne1=" << tensor->src[0]->ne[1] << " nb1=" << tensor->src[0]->nb[1] << " ne2=" << tensor->src[0]->ne[2] << " nb2=" << tensor->src[0]->nb[2] << " ne3=" << tensor->src[0]->ne[3] << " nb3=" << tensor->src[0]->nb[3] << std::endl; - } - if (tensor->src[1] != nullptr) { - std::cerr << "tensor->src[1]=" << tensor->src[1] << " name=" << tensor->src[1]->name << " op=" << ggml_op_name(tensor->src[1]->op) << " type=" << ggml_type_name(tensor->src[1]->type) << " backend=" << tensor->src[1]->backend << " ne0=" << tensor->src[1]->ne[0] << " nb0=" << tensor->src[1]->nb[0] << " ne1=" << tensor->src[1]->ne[1] << " nb1=" << tensor->src[1]->nb[1] << " ne2=" << tensor->src[1]->ne[2] << " nb2=" << tensor->src[1]->nb[2] << " ne3=" << tensor->src[1]->ne[3] << " nb3=" << tensor->src[1]->nb[3] << std::endl; - } - std::cerr << std::endl << "Result:" << std::endl; - ggml_vk_print_tensor_area(tensor, tensor_data, 5, 5, 0, 0); - std::cerr << std::endl; - std::cerr << std::endl << "Result:" << std::endl; - ggml_vk_print_tensor_area(tensor, tensor_data, 5, 5, 1, 0); - std::cerr << std::endl; - std::vector done; - ggml_vk_print_graph_origin(tensor, done); - - if (tensor->backend == GGML_BACKEND_TYPE_GPU) { - free(tensor_data); - } -} - -static void ggml_vk_check_tensor(const std::string& name, const ggml_tensor * tensor) { - return; - GGML_ASSERT(tensor->backend == GGML_BACKEND_TYPE_CPU); - if (tensor->type != GGML_TYPE_F32 && tensor->type != GGML_TYPE_F16) { - return; - } - for (int i3 = 0; i3 < tensor->ne[3]; i3++) { - for (int i2 = 0; i2 < tensor->ne[2]; i2++) { - for (int i1 = 0; i1 < tensor->ne[1]; i1++) { - for (int i0 = 0; i0 < tensor->ne[0]; i0++) { - float val = 0.0f; - if (tensor->type == GGML_TYPE_F32) { - val = *(float *) ((char *) tensor->data + i3*tensor->nb[3] + i2*tensor->nb[2] + i1*tensor->nb[1] + i0*tensor->nb[0]); - } else if (tensor->type == GGML_TYPE_F16) { - val = ggml_fp16_to_fp32(*(ggml_fp16_t *) ((char *) tensor->data + i3*tensor->nb[3] + i2*tensor->nb[2] + i1*tensor->nb[1] + i0*tensor->nb[0])); - } - if (std::isnan(val)) { - std::cerr << "ERROR: TENSOR CHECK " << name << ": Invalid value in " << ggml_op_name(tensor->op) << " i3=" << i3 << " i2=" << i2 << " i1=" << i1 << " i0=" << i0 << " val=" << val << std::endl; - std::cerr << "tensor=" << tensor << " tensor->type=" << ggml_type_name(tensor->type) << " tensor->backend: " << tensor->backend << " ne0=" << tensor->ne[0] << " nb0=" << tensor->nb[0] << " ne1=" << tensor->ne[1] << " nb1=" << tensor->nb[1] << " ne2=" << tensor->ne[2] << " nb2=" << tensor->nb[2] << " ne3=" << tensor->ne[3] << " nb3=" << tensor->nb[3] << std::endl; - std::cerr << std::endl; - ggml_vk_print_tensor_area(tensor, tensor->data, i0, i1, i2, i3); - std::cerr << std::endl; - std::vector done; - ggml_vk_print_graph_origin(tensor, done); - GGML_ASSERT(false); - } - } - } - } - } -} - -void * comp_result; -size_t comp_size; -size_t comp_nb[GGML_MAX_DIMS]; -size_t check_counter = 0; -static void ggml_vk_check_results_0(ggml_backend_vk_context * ctx, ggml_compute_params * params, ggml_tensor * tensor) { - if (params->ith != 0) { - return; - } - if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE || tensor->op == GGML_OP_TRANSPOSE) { - return; - } - - check_counter++; - if (!(vk_output_tensor > 0 && vk_output_tensor == check_counter) && check_counter <= vk_skip_checks) { - return; - } - -#ifdef GGML_VULKAN_DEBUG - std::cerr << "ggml_vk_check_results_0(" << tensor->name << ")" << std::endl; -#endif - - ggml_tensor * src0 = tensor->src[0]; - ggml_tensor * src1 = tensor->src[1]; - ggml_tensor * src2 = tensor->src[2]; - - struct ggml_init_params iparams = { - /*.mem_size =*/ 1024*1024*1024, - /*.mem_buffer =*/ NULL, - /*.no_alloc =*/ false, - }; - - struct ggml_context * ggml_ctx = ggml_init(iparams); - - struct ggml_tensor * src0_clone = nullptr; - struct ggml_tensor * src1_clone = nullptr; - struct ggml_tensor * src2_clone = nullptr; - struct ggml_tensor * tensor_clone = nullptr; - - size_t src0_size; - size_t src1_size; - size_t src2_size; - - void * src0_buffer; - void * src1_buffer; - void * src2_buffer; - - if (src0 != nullptr) { - src0_clone = ggml_dup_tensor(ggml_ctx, src0); - - src0_size = ggml_nbytes(src0); - - src0_buffer = malloc(src0_size); - src0_clone->data = src0_buffer; - if (src0->backend == GGML_BACKEND_TYPE_CPU) { - memcpy(src0_clone->data, src0->data, src0_size); - memcpy(src0_clone->nb, src0->nb, sizeof(size_t) * GGML_MAX_DIMS); - } else if (src0->backend == GGML_BACKEND_TYPE_GPU) { - ggml_tensor_extra_gpu * extra = (ggml_tensor_extra_gpu *) src0->extra; - vk_buffer buffer_gpu = extra->buffer_gpu.lock(); - uint64_t offset = extra->offset; - if (!ggml_is_contiguous(src0) && ggml_vk_dim01_contiguous(src0)) { - for (int i3 = 0; i3 < src0->ne[3]; i3++) { - for (int i2 = 0; i2 < src0->ne[2]; i2++) { - const int idx = i3*src0->ne[2] + i2; - ggml_vk_buffer_read(ctx, buffer_gpu, offset + idx * src0->nb[2], ((char *)src0_clone->data + idx * src0_clone->nb[2]), src0->ne[1] * src0->nb[1]); - } - } - - src0_clone->nb[0] = src0->nb[0]; - src0_clone->nb[1] = src0->nb[1]; - for (int i = 2; i < GGML_MAX_DIMS; i++) { - src0_clone->nb[i] = src0_clone->nb[i - 1]*src0_clone->ne[i - 1]; - } - } else { - if (offset + src0_size >= buffer_gpu->size) { - src0_size = buffer_gpu->size - offset; - } - ggml_vk_buffer_read(ctx, buffer_gpu, offset, src0_clone->data, src0_size); - memcpy(src0_clone->nb, src0->nb, sizeof(size_t) * GGML_MAX_DIMS); - } - } else { - GGML_ASSERT(false); - } - - if (vk_output_tensor > 0 && vk_output_tensor == check_counter) { - ggml_vk_print_tensor(ctx, src0, "src0"); - } - - ggml_vk_check_tensor(std::string(ggml_op_name(tensor->op)) + "->src0", src0_clone); - } - if (src1 != nullptr) { - src1_clone = ggml_dup_tensor(ggml_ctx, src1); - - src1_size = ggml_nbytes(src1); - - src1_buffer = malloc(src1_size); - src1_clone->data = src1_buffer; - if (src1->backend == GGML_BACKEND_TYPE_CPU) { - memcpy(src1_clone->data, src1->data, src1_size); - memcpy(src1_clone->nb, src1->nb, sizeof(size_t) * GGML_MAX_DIMS); - } else if (src1->backend == GGML_BACKEND_TYPE_GPU) { - ggml_tensor_extra_gpu * extra = (ggml_tensor_extra_gpu *) src1->extra; - vk_buffer buffer_gpu = extra->buffer_gpu.lock(); - uint64_t offset = extra->offset; - if (!ggml_is_contiguous(src1) && ggml_vk_dim01_contiguous(src1)) { - for (int i3 = 0; i3 < src1->ne[3]; i3++) { - for (int i2 = 0; i2 < src1->ne[2]; i2++) { - const int idx = i3*src1->ne[2] + i2; - ggml_vk_buffer_read(ctx, buffer_gpu, offset + idx * src1->nb[2], ((char *)src1_clone->data + idx * src1_clone->nb[2]), src1->ne[1] * src1->nb[1]); - } - } - - src1_clone->nb[0] = src1->nb[0]; - src1_clone->nb[1] = src1->nb[1]; - for (int i = 2; i < GGML_MAX_DIMS; i++) { - src1_clone->nb[i] = src1_clone->nb[i - 1]*src1_clone->ne[i - 1]; - } - } else { - if (offset + src1_size >= buffer_gpu->size) { - src1_size = buffer_gpu->size - offset; - } - ggml_vk_buffer_read(ctx, buffer_gpu, offset, src1_clone->data, src1_size); - memcpy(src1_clone->nb, src1->nb, sizeof(size_t) * GGML_MAX_DIMS); - } - } else { - GGML_ASSERT(false); - } - - if (vk_output_tensor > 0 && vk_output_tensor == check_counter) { - ggml_vk_print_tensor(ctx, src1, "src1"); - std::cerr << "TENSOR CHECK: " << ggml_op_name(src1_clone->op) << " (check " << check_counter << ")" << std::endl; - std::cerr << "src1_clone=" << tensor << " src1_clone->backend: " << src1_clone->backend << " src1_clone->type: " << ggml_type_name(src1_clone->type) << " ne0=" << src1_clone->ne[0] << " nb0=" << src1_clone->nb[0] << " ne1=" << src1_clone->ne[1] << " nb1=" << src1_clone->nb[1] << " ne2=" << src1_clone->ne[2] << " nb2=" << src1_clone->nb[2] << " ne3=" << src1_clone->ne[3] << " nb3=" << src1_clone->nb[3] << std::endl; - if (src1->src[0] != nullptr) { - std::cerr << "src1->src[0]=" << src1->src[0] << " op=" << ggml_op_name(src1->src[0]->op) << " type=" << ggml_type_name(src1->src[0]->type) << " backend=" << src1->src[0]->backend << " ne0=" << src1->src[0]->ne[0] << " nb0=" << src1->src[0]->nb[0] << " ne1=" << src1->src[0]->ne[1] << " nb1=" << src1->src[0]->nb[1] << " ne2=" << src1->src[0]->ne[2] << " nb2=" << src1->src[0]->nb[2] << " ne3=" << src1->src[0]->ne[3] << " nb3=" << src1->src[0]->nb[3] << std::endl; - } - if (src1->src[1] != nullptr) { - std::cerr << "src1->src[1]=" << src1->src[1] << " op=" << ggml_op_name(src1->src[1]->op) << " type=" << ggml_type_name(src1->src[1]->type) << " backend=" << src1->src[1]->backend << " ne0=" << src1->src[1]->ne[0] << " nb0=" << src1->src[1]->nb[0] << " ne1=" << src1->src[1]->ne[1] << " nb1=" << src1->src[1]->nb[1] << " ne2=" << src1->src[1]->ne[2] << " nb2=" << src1->src[1]->nb[2] << " ne3=" << src1->src[1]->ne[3] << " nb3=" << src1->src[1]->nb[3] << std::endl; - } - std::cerr << std::endl << "Result:" << std::endl; - ggml_vk_print_tensor_area(src1_clone, src1_clone->data, 5, 5, 0, 0); - std::cerr << std::endl; - std::cerr << std::endl << "Result:" << std::endl; - ggml_vk_print_tensor_area(src1_clone, src1_clone->data, 5, 5, 1, 0); - std::cerr << std::endl; - std::vector done; - ggml_vk_print_graph_origin(src1_clone, done); - } - - ggml_vk_check_tensor(std::string(ggml_op_name(tensor->op)) + "->src1", src1_clone); - } - if (src2 != nullptr) { - src2_clone = ggml_dup_tensor(ggml_ctx, src2); - - src2_size = ggml_nbytes(src2); - - src2_buffer = malloc(src2_size); - src2_clone->data = src2_buffer; - if (src2->backend == GGML_BACKEND_TYPE_CPU) { - memcpy(src2_clone->data, src2->data, src2_size); - memcpy(src2_clone->nb, src2->nb, sizeof(size_t) * GGML_MAX_DIMS); - } else if (src2->backend == GGML_BACKEND_TYPE_GPU) { - ggml_tensor_extra_gpu * extra = (ggml_tensor_extra_gpu *) src2->extra; - vk_buffer buf = extra->buffer_gpu.lock(); - uint64_t offset = extra->offset; - if (!ggml_is_contiguous(src2) && ggml_vk_dim01_contiguous(src2)) { - for (int i3 = 0; i3 < src2->ne[3]; i3++) { - for (int i2 = 0; i2 < src2->ne[2]; i2++) { - const int idx = i3*src2->ne[2] + i2; - ggml_vk_buffer_read(ctx, buf, offset + idx * src2->nb[2], ((char *)src2_clone->data + idx * src2_clone->nb[2]), src2->ne[1] * src2->nb[1]); - } - } - - src2_clone->nb[0] = src2->nb[0]; - src2_clone->nb[1] = src2->nb[1]; - for (int i = 2; i < GGML_MAX_DIMS; i++) { - src2_clone->nb[i] = src2_clone->nb[i - 1]*src2_clone->ne[i - 1]; - } - } else { - if (offset + src2_size >= buf->size) { - src2_size = buf->size - offset; - } - ggml_vk_buffer_read(ctx, buf, offset, src2_clone->data, src2_size); - memcpy(src2_clone->nb, src2->nb, sizeof(size_t) * GGML_MAX_DIMS); - } - } else { - GGML_ASSERT(false); - } - - if (vk_output_tensor > 0 && vk_output_tensor == check_counter) { - ggml_vk_print_tensor(ctx, src2, "src2"); - std::cerr << "TENSOR CHECK: " << ggml_op_name(src2_clone->op) << " (check " << check_counter << ")" << std::endl; - std::cerr << "src2_clone=" << tensor << " src2_clone->backend: " << src2_clone->backend << " src2_clone->type: " << ggml_type_name(src2_clone->type) << " ne0=" << src2_clone->ne[0] << " nb0=" << src2_clone->nb[0] << " ne1=" << src2_clone->ne[1] << " nb1=" << src2_clone->nb[1] << " ne2=" << src2_clone->ne[2] << " nb2=" << src2_clone->nb[2] << " ne3=" << src2_clone->ne[3] << " nb3=" << src2_clone->nb[3] << std::endl; - if (src2->src[0] != nullptr) { - std::cerr << "src2->src[0]=" << src2->src[0] << " op=" << ggml_op_name(src2->src[0]->op) << " type=" << ggml_type_name(src2->src[0]->type) << " backend=" << src2->src[0]->backend << " ne0=" << src2->src[0]->ne[0] << " nb0=" << src2->src[0]->nb[0] << " ne1=" << src2->src[0]->ne[1] << " nb1=" << src2->src[0]->nb[1] << " ne2=" << src2->src[0]->ne[2] << " nb2=" << src2->src[0]->nb[2] << " ne3=" << src2->src[0]->ne[3] << " nb3=" << src2->src[0]->nb[3] << std::endl; - } - if (src2->src[1] != nullptr) { - std::cerr << "src2->src[1]=" << src2->src[1] << " op=" << ggml_op_name(src2->src[1]->op) << " type=" << ggml_type_name(src2->src[1]->type) << " backend=" << src2->src[1]->backend << " ne0=" << src2->src[1]->ne[0] << " nb0=" << src2->src[1]->nb[0] << " ne1=" << src2->src[1]->ne[1] << " nb1=" << src2->src[1]->nb[1] << " ne2=" << src2->src[1]->ne[2] << " nb2=" << src2->src[1]->nb[2] << " ne3=" << src2->src[1]->ne[3] << " nb3=" << src2->src[1]->nb[3] << std::endl; - } - std::cerr << std::endl << "Result:" << std::endl; - ggml_vk_print_tensor_area(src2_clone, src2_clone->data, 5, 5, 0, 0); - std::cerr << std::endl; - std::cerr << std::endl << "Result:" << std::endl; - ggml_vk_print_tensor_area(src2_clone, src2_clone->data, 5, 5, 1, 0); - std::cerr << std::endl; - std::vector done; - ggml_vk_print_graph_origin(src2_clone, done); - } - - ggml_vk_check_tensor(std::string(ggml_op_name(tensor->op)) + "->src2", src2_clone); - } - - if (tensor->op == GGML_OP_MUL_MAT) { - tensor_clone = ggml_mul_mat(ggml_ctx, src0_clone, src1_clone); - } else if (tensor->op == GGML_OP_MUL) { - tensor_clone = ggml_mul(ggml_ctx, src0_clone, src1_clone); - } else if (tensor->op == GGML_OP_SCALE) { - tensor_clone = ggml_scale(ggml_ctx, src0_clone, ((float *)tensor->op_params)[0]); - } else if (tensor->op == GGML_OP_SQR) { - tensor_clone = ggml_sqr(ggml_ctx, src0_clone); - } else if (tensor->op == GGML_OP_CLAMP) { - tensor_clone = ggml_clamp(ggml_ctx, src0_clone, ((float *)tensor->op_params)[0], ((float *)tensor->op_params)[1]); - } else if (tensor->op == GGML_OP_ADD) { - tensor_clone = ggml_add(ggml_ctx, src0_clone, src1_clone); - } else if (tensor->op == GGML_OP_NORM) { - tensor_clone = ggml_norm(ggml_ctx, src0_clone, *(float *)tensor->op_params); - } else if (tensor->op == GGML_OP_RMS_NORM) { - tensor_clone = ggml_rms_norm(ggml_ctx, src0_clone, *(float *)tensor->op_params); - } else if (tensor->op == GGML_OP_SOFT_MAX) { - if (src1 != nullptr) { - tensor_clone = ggml_soft_max_ext(ggml_ctx, src0_clone, src1_clone, src2_clone, ((float *)tensor->op_params)[0], ((float *)tensor->op_params)[1]); - } else { - tensor_clone = ggml_soft_max(ggml_ctx, src0_clone); - } - } else if (tensor->op == GGML_OP_DIAG_MASK_INF) { - tensor_clone = ggml_diag_mask_inf(ggml_ctx, src0_clone, *(float *)tensor->op_params); - } else if (tensor->op == GGML_OP_ROPE) { - const int n_dims = ((int32_t *) tensor->op_params)[1]; - const int mode = ((int32_t *) tensor->op_params)[2]; - const int n_ggml_ctx = ((int32_t *) tensor->op_params)[3]; - const int n_orig_ggml_ctx = ((int32_t *) tensor->op_params)[4]; - float freq_base = ((float *) tensor->op_params)[5]; - float freq_scale = ((float *) tensor->op_params)[6]; - float ext_factor = ((float *) tensor->op_params)[7]; - float attn_factor = ((float *) tensor->op_params)[8]; - float beta_fast = ((float *) tensor->op_params)[9]; - float beta_slow = ((float *) tensor->op_params)[10]; - tensor_clone = ggml_rope_custom(ggml_ctx, src0_clone, src1_clone, n_dims, mode, n_ggml_ctx, n_orig_ggml_ctx, freq_base, freq_scale, ext_factor, attn_factor, beta_fast, beta_slow); - } else if (tensor->op == GGML_OP_UNARY) { - switch (ggml_get_unary_op(tensor)) { - case GGML_UNARY_OP_SILU: - tensor_clone = ggml_silu(ggml_ctx, src0_clone); - break; - case GGML_UNARY_OP_GELU: - tensor_clone = ggml_gelu(ggml_ctx, src0_clone); - break; - case GGML_UNARY_OP_RELU: - tensor_clone = ggml_relu(ggml_ctx, src0_clone); - break; - default: - std::cerr << "Missing vk_check_results OP: " << ggml_op_name(tensor->op) << std::endl; - GGML_ASSERT(false); - } - } else if (tensor->op == GGML_OP_CPY || tensor->op == GGML_OP_DUP) { - if (src1 == nullptr) { - tensor_clone = ggml_dup(ggml_ctx, src0_clone); - tensor_clone->type = tensor->type; - } else { - tensor_clone = ggml_cpy(ggml_ctx, src0_clone, src1_clone); - } - } else if (tensor->op == GGML_OP_CONT) { - tensor_clone = ggml_cont_4d(ggml_ctx, src0_clone, tensor->ne[0], tensor->ne[1], tensor->ne[2], tensor->ne[3]); - } else if (tensor->op == GGML_OP_RESHAPE) { - tensor_clone = ggml_reshape_4d(ggml_ctx, src0_clone, tensor->ne[0], tensor->ne[1], tensor->ne[2], tensor->ne[3]); - } else if (tensor->op == GGML_OP_VIEW) { - tensor_clone = ggml_view_4d(ggml_ctx, src0_clone, tensor->ne[0], tensor->ne[1], tensor->ne[2], tensor->ne[3], tensor->nb[1], tensor->nb[2], tensor->nb[3], ((int32_t *) tensor->op_params)[0]); - } else if (tensor->op == GGML_OP_PERMUTE) { - int32_t * params = (int32_t *)tensor->op_params; - tensor_clone = ggml_permute(ggml_ctx, src0_clone, params[0], params[1], params[2], params[3]); - } else if (tensor->op == GGML_OP_TRANSPOSE) { - tensor_clone = ggml_transpose(ggml_ctx, src0_clone); - } else if (tensor->op == GGML_OP_GET_ROWS) { - tensor_clone = ggml_get_rows(ggml_ctx, src0_clone, src1_clone); - } else { - std::cerr << "Missing vk_check_results OP: " << ggml_op_name(tensor->op) << std::endl; - GGML_ASSERT(false); - } - - // Disable vulkan here to avoid the hooks in ggml.c - ctx->disable = true; - - ggml_cgraph * cgraph = ggml_new_graph(ggml_ctx); - ggml_build_forward_expand(cgraph, tensor_clone); - - ggml_graph_compute_with_ctx(ggml_ctx, cgraph, 8); - - ctx->disable = false; - - ggml_vk_check_tensor(ggml_op_name(tensor->op), tensor_clone); - if (vk_output_tensor > 0 && vk_output_tensor == check_counter) { - ggml_vk_print_tensor(ctx, tensor_clone, "tensor_clone"); - } - - comp_size = ggml_nbytes(tensor_clone); - - comp_result = malloc(comp_size); - memcpy(comp_result, tensor_clone->data, comp_size); - memcpy(comp_nb, tensor_clone->nb, sizeof(size_t) * GGML_MAX_DIMS); - - if (src0 != nullptr) { - free(src0_buffer); - } - if (src1 != nullptr) { - free(src1_buffer); - } - if (src2 != nullptr) { - free(src1_buffer); - } - - ggml_free(ggml_ctx); -} - -static void ggml_vk_check_results_1(ggml_backend_vk_context * ctx, ggml_compute_params * params, ggml_tensor * tensor) { - if (params->ith != 0) { - return; - } - if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE || tensor->op == GGML_OP_TRANSPOSE) { - return; - } - if (!(vk_output_tensor > 0 && vk_output_tensor == check_counter) && check_counter <= vk_skip_checks) { - return; - } - -#ifdef GGML_VULKAN_DEBUG - std::cerr << "ggml_vk_check_results_1(" << tensor->name << ")" << std::endl; -#endif - - ggml_tensor * src0 = tensor->src[0]; - ggml_tensor * src1 = tensor->src[1]; - - void * tensor_data = tensor->data; - - if (tensor->backend == GGML_BACKEND_TYPE_GPU) { - size_t tensor_size = ggml_nbytes(tensor); - tensor_data = malloc(tensor_size); - - ggml_tensor_extra_gpu * extra = (ggml_tensor_extra_gpu *) tensor->extra; - - vk_buffer buffer_gpu = extra->buffer_gpu.lock(); - if (extra->offset + tensor_size >= buffer_gpu->size) { - tensor_size = buffer_gpu->size - (extra->offset); - } - - ggml_vk_buffer_read(ctx, buffer_gpu, extra->offset, tensor_data, tensor_size); - } - - float first_error_result = -1.0f; - float first_error_correct = -1.0f; - std::array first_error = { -1, -1, -1, -1 }; - double avg_err = 0.0; - size_t counter = 0; - - for (int i3 = 0; i3 < tensor->ne[3]; i3++) { - for (int i2 = 0; i2 < tensor->ne[2]; i2++) { - for (int i1 = 0; i1 < tensor->ne[1]; i1++) { - for (int i0 = 0; i0 < tensor->ne[0]; i0++) { - const bool buffer_size_fit = i3*comp_nb[3] + i2*comp_nb[2] + i1*comp_nb[1] + i0*comp_nb[0] < comp_size; - float correct = 0.0f; - float result = 0.0f; - - if (buffer_size_fit) { - if (tensor->type == GGML_TYPE_F32) { - correct = *(float *) ((char *) comp_result + i3*comp_nb[3] + i2*comp_nb[2] + i1*comp_nb[1] + i0*comp_nb[0]); - result = *(float *) ((char *) tensor_data + i3*tensor->nb[3] + i2*tensor->nb[2] + i1*tensor->nb[1] + i0*tensor->nb[0]); - } else if (tensor->type == GGML_TYPE_F16) { - correct = ggml_fp16_to_fp32(*(ggml_fp16_t *) ((char *) comp_result + i3*comp_nb[3] + i2*comp_nb[2] + i1*comp_nb[1] + i0*comp_nb[0])); - result = ggml_fp16_to_fp32(*(ggml_fp16_t *) ((char *) tensor_data + i3*tensor->nb[3] + i2*tensor->nb[2] + i1*tensor->nb[1] + i0*tensor->nb[0])); - } else { - std::cerr << "comp_size=" << comp_size << " but required is " << (i3*comp_nb[3] + i2*comp_nb[2] + i1*comp_nb[1] + i0*comp_nb[0]) << std::endl; - } - } else { - std::cerr << "Missing debug code for type " << ggml_type_name(tensor->type) << std::endl; - GGML_ASSERT(false); - } - - if ((std::isnan(correct) != std::isnan(result)) || (std::isinf(correct) != std::isinf(result)) || !buffer_size_fit) { - std::cerr << "ERROR: Invalid value in " << ggml_op_name(tensor->op) << " i3=" << i3 << " i2=" << i2 << " i1=" << i1 << " i0=" << i0 << " result=" << result << " correct=" << correct << " avg_err=" << (avg_err / counter) << std::endl; - std::cerr << "tensor=" << tensor << " tensor->name=" << tensor->name << " tensor->backend: " << tensor->backend << " tensor->type: " << ggml_type_name(tensor->type) << " ne0=" << tensor->ne[0] << " nb0=" << tensor->nb[0] << " ne1=" << tensor->ne[1] << " nb1=" << tensor->nb[1] << " ne2=" << tensor->ne[2] << " nb2=" << tensor->nb[2] << " ne3=" << tensor->ne[3] << " nb3=" << tensor->nb[3] << " offset=" << tensor->view_offs << std::endl; - if (src0 != nullptr) { - std::cerr << "src0=" << src0 << " src0->name=" << src0->name << " op=" << ggml_op_name(src0->op) << " type=" << ggml_type_name(src0->type) << " backend=" << src0->backend << " ne0=" << src0->ne[0] << " nb0=" << src0->nb[0] << " ne1=" << src0->ne[1] << " nb1=" << src0->nb[1] << " ne2=" << src0->ne[2] << " nb2=" << src0->nb[2] << " ne3=" << src0->ne[3] << " nb3=" << src0->nb[3] << " offset=" << src0->view_offs << std::endl; - } - if (src1 != nullptr) { - std::cerr << "src1=" << src1 << " src1->name=" << src1->name << " op=" << ggml_op_name(src1->op) << " type=" << ggml_type_name(src1->type) << " backend=" << src1->backend << " ne0=" << src1->ne[0] << " nb0=" << src1->nb[0] << " ne1=" << src1->ne[1] << " nb1=" << src1->nb[1] << " ne2=" << src1->ne[2] << " nb2=" << src1->nb[2] << " ne3=" << src1->ne[3] << " nb3=" << src1->nb[3] << " offset=" << src1->view_offs << std::endl; - } - std::cerr << "First error: result=" << first_error_result << " correct=" << first_error_correct << " i3=" << first_error[3] << " i2=" << first_error[2] << " i1=" << first_error[1] << " i0=" << first_error[0] << std::endl; - std::cerr << std::endl << "Result:" << std::endl; - ggml_vk_print_tensor_area(tensor, tensor_data, i0, i1, i2, i3); - std::cerr << std::endl << "Correct:" << std::endl; - ggml_vk_print_tensor_area(tensor, comp_result, i0, i1, i2, i3); - std::cerr << std::endl; - std::vector done; - ggml_vk_print_graph_origin(tensor, done); - GGML_ASSERT(false); - } - if (first_error[0] == -1 && std::fabs(correct - result) > 0.1f) { - first_error[0] = i0; - first_error[1] = i1; - first_error[2] = i2; - first_error[3] = i3; - first_error_result = result; - first_error_correct = correct; - } - - // Special case, value is infinite, avoid NaN result in avg_err - // NaN also appears in results, if both are nan error is 0 - if (!std::isinf(correct) && !std::isinf(result) && !std::isnan(correct) && !std::isnan(result)) { - avg_err += std::fabs(correct - result); - } - counter++; - } - } - } - } - - avg_err /= counter; - - if (vk_output_tensor > 0 && vk_output_tensor == check_counter) { - std::cerr << "TENSOR CHECK: avg_err=" << avg_err << " in " << ggml_op_name(tensor->op) << " (check " << check_counter << ")" << std::endl; - std::cerr << "tensor=" << tensor << " tensor->name=" << tensor->name << " tensor->backend: " << tensor->backend << " tensor->type: " << ggml_type_name(tensor->type) << " ne0=" << tensor->ne[0] << " nb0=" << tensor->nb[0] << " ne1=" << tensor->ne[1] << " nb1=" << tensor->nb[1] << " ne2=" << tensor->ne[2] << " nb2=" << tensor->nb[2] << " ne3=" << tensor->ne[3] << " nb3=" << tensor->nb[3] << " offset=" << tensor->view_offs << std::endl; - if (src0 != nullptr) { - std::cerr << "src0=" << src0 << " op=" << ggml_op_name(src0->op) << " type=" << ggml_type_name(src0->type) << " backend=" << src0->backend << " ne0=" << src0->ne[0] << " nb0=" << src0->nb[0] << " ne1=" << src0->ne[1] << " nb1=" << src0->nb[1] << " ne2=" << src0->ne[2] << " nb2=" << src0->nb[2] << " ne3=" << src0->ne[3] << " nb3=" << src0->nb[3] << " offset=" << src0->view_offs << std::endl; - } - if (src1 != nullptr) { - std::cerr << "src1=" << src1 << " op=" << ggml_op_name(src1->op) << " type=" << ggml_type_name(src1->type) << " backend=" << src1->backend << " ne0=" << src1->ne[0] << " nb0=" << src1->nb[0] << " ne1=" << src1->ne[1] << " nb1=" << src1->nb[1] << " ne2=" << src1->ne[2] << " nb2=" << src1->nb[2] << " ne3=" << src1->ne[3] << " nb3=" << src1->nb[3] << " offset=" << src1->view_offs << std::endl; - } - std::cerr << "First error: result=" << first_error_result << " correct=" << first_error_correct << " i3=" << first_error[3] << " i2=" << first_error[2] << " i1=" << first_error[1] << " i0=" << first_error[0] << std::endl; - std::cerr << std::endl << "Result:" << std::endl; - ggml_vk_print_tensor_area(tensor, tensor_data, 5, 5, 0, 0); - std::cerr << std::endl << "Correct:" << std::endl; - ggml_vk_print_tensor_area(tensor, comp_result, 5, 5, 0, 0); - std::cerr << std::endl; - std::cerr << std::endl << "Result:" << std::endl; - ggml_vk_print_tensor_area(tensor, tensor_data, 5, 5, 1, 0); - std::cerr << std::endl << "Correct:" << std::endl; - ggml_vk_print_tensor_area(tensor, comp_result, 5, 5, 1, 0); - std::cerr << std::endl; - std::vector done; - ggml_vk_print_graph_origin(tensor, done); - } - - if (avg_err > 0.05 || std::isnan(avg_err)) { - std::cerr << "ERROR: avg_err=" << avg_err << " in " << ggml_op_name(tensor->op) << " (check " << check_counter << ")" << std::endl; - std::cerr << "tensor=" << tensor << " tensor->name=" << tensor->name << " tensor->backend: " << tensor->backend << " tensor->type: " << ggml_type_name(tensor->type) << " ne0=" << tensor->ne[0] << " nb0=" << tensor->nb[0] << " ne1=" << tensor->ne[1] << " nb1=" << tensor->nb[1] << " ne2=" << tensor->ne[2] << " nb2=" << tensor->nb[2] << " ne3=" << tensor->ne[3] << " nb3=" << tensor->nb[3] << " offset=" << tensor->view_offs << std::endl; - if (src0 != nullptr) { - std::cerr << "src0=" << src0 << " op=" << ggml_op_name(src0->op) << " type=" << ggml_type_name(src0->type) << " backend=" << src0->backend << " ne0=" << src0->ne[0] << " nb0=" << src0->nb[0] << " ne1=" << src0->ne[1] << " nb1=" << src0->nb[1] << " ne2=" << src0->ne[2] << " nb2=" << src0->nb[2] << " ne3=" << src0->ne[3] << " nb3=" << src0->nb[3] << " offset=" << src0->view_offs << std::endl; - } - if (src1 != nullptr) { - std::cerr << "src1=" << src1 << " op=" << ggml_op_name(src1->op) << " type=" << ggml_type_name(src1->type) << " backend=" << src1->backend << " ne0=" << src1->ne[0] << " nb0=" << src1->nb[0] << " ne1=" << src1->ne[1] << " nb1=" << src1->nb[1] << " ne2=" << src1->ne[2] << " nb2=" << src1->nb[2] << " ne3=" << src1->ne[3] << " nb3=" << src1->nb[3] << " offset=" << src1->view_offs << std::endl; - } - std::cerr << "First error: result=" << first_error_result << " correct=" << first_error_correct << " i3=" << first_error[3] << " i2=" << first_error[2] << " i1=" << first_error[1] << " i0=" << first_error[0] << std::endl; - std::cerr << std::endl << "Result:" << std::endl; - ggml_vk_print_tensor_area(tensor, tensor_data, first_error[0], first_error[1], first_error[2], first_error[3]); - std::cerr << std::endl << "Correct:" << std::endl; - ggml_vk_print_tensor_area(tensor, comp_result, first_error[0], first_error[1], first_error[2], first_error[3]); - std::cerr << std::endl; - std::vector done; - ggml_vk_print_graph_origin(tensor, done); - GGML_ASSERT(false); - } else { - std::cerr << check_counter << " " << tensor->name << " op=" << ggml_op_name(tensor->op) << " backend=" << tensor->backend << " avg_err=" << avg_err << std::endl; - } - - free(comp_result); - comp_result = nullptr; - comp_size = 0; - - if (tensor->backend == GGML_BACKEND_TYPE_GPU) { - free(tensor_data); - } -} -#endif diff --git a/ggml-vulkan.h b/ggml-vulkan.h deleted file mode 100644 index af661c2d7d5..00000000000 --- a/ggml-vulkan.h +++ /dev/null @@ -1,29 +0,0 @@ -#pragma once - -#include "ggml.h" -#include "ggml-backend.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#define GGML_VK_NAME "Vulkan" -#define GGML_VK_MAX_DEVICES 16 - -GGML_API void ggml_vk_instance_init(void); - -// backend API -GGML_API GGML_CALL ggml_backend_t ggml_backend_vk_init(size_t dev_num); - -GGML_API GGML_CALL bool ggml_backend_is_vk(ggml_backend_t backend); -GGML_API GGML_CALL int ggml_backend_vk_get_device_count(void); -GGML_API GGML_CALL void ggml_backend_vk_get_device_description(int device, char * description, size_t description_size); -GGML_API GGML_CALL void ggml_backend_vk_get_device_memory(int device, size_t * free, size_t * total); - -GGML_API GGML_CALL ggml_backend_buffer_type_t ggml_backend_vk_buffer_type(size_t dev_num); -// pinned host buffer for use with the CPU backend for faster copies between CPU and GPU -GGML_API GGML_CALL ggml_backend_buffer_type_t ggml_backend_vk_host_buffer_type(void); - -#ifdef __cplusplus -} -#endif diff --git a/ggml.c b/ggml.c deleted file mode 100644 index 86ef34cfb53..00000000000 --- a/ggml.c +++ /dev/null @@ -1,21830 +0,0 @@ -#define _CRT_SECURE_NO_DEPRECATE // Disables ridiculous "unsafe" warnings on Windows -#define _USE_MATH_DEFINES // For M_PI on MSVC - -#include "ggml-impl.h" -#include "ggml-quants.h" -#include "ggml.h" -#include "sgemm.h" - -#if defined(_MSC_VER) || defined(__MINGW32__) -#include // using malloc.h with MSC/MINGW -#elif !defined(__FreeBSD__) && !defined(__NetBSD__) && !defined(__OpenBSD__) -#include -#endif - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#if defined(__gnu_linux__) -#include -#endif - -#ifdef GGML_USE_METAL -#include -#endif - -#ifdef __ARM_FEATURE_MATMUL_INT8 -#undef GGML_USE_LLAMAFILE -#endif - -#if defined(_MSC_VER) -// disable "possible loss of data" to avoid hundreds of casts -// we should just be careful :) -#pragma warning(disable: 4244 4267) - -// disable POSIX deprecation warnings -// these functions are never going away, anyway -#pragma warning(disable: 4996) -#endif - -#if defined(_WIN32) - -#define WIN32_LEAN_AND_MEAN -#ifndef NOMINMAX - #define NOMINMAX -#endif -#include - -typedef volatile LONG atomic_int; -typedef atomic_int atomic_bool; - -static void atomic_store(atomic_int * ptr, LONG val) { - InterlockedExchange(ptr, val); -} -static LONG atomic_load(atomic_int * ptr) { - return InterlockedCompareExchange(ptr, 0, 0); -} -static LONG atomic_fetch_add(atomic_int * ptr, LONG inc) { - return InterlockedExchangeAdd(ptr, inc); -} -static LONG atomic_fetch_sub(atomic_int * ptr, LONG dec) { - return atomic_fetch_add(ptr, -(dec)); -} - -typedef HANDLE pthread_t; - -typedef DWORD thread_ret_t; -static int pthread_create(pthread_t * out, void * unused, thread_ret_t(*func)(void *), void * arg) { - (void) unused; - HANDLE handle = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE) func, arg, 0, NULL); - if (handle == NULL) - { - return EAGAIN; - } - - *out = handle; - return 0; -} - -static int pthread_join(pthread_t thread, void * unused) { - (void) unused; - int ret = (int) WaitForSingleObject(thread, INFINITE); - CloseHandle(thread); - return ret; -} - -static int sched_yield (void) { - Sleep (0); - return 0; -} -#else -#include -#include - -typedef void * thread_ret_t; - -#include -#include -#include - -#endif - -#ifdef GGML_USE_CPU_HBM -#include -#endif - -#if defined(__APPLE__) -#include -#endif - -#if (defined(__linux__) || defined(__APPLE__) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__)) && \ - (!defined(TARGET_OS_TV) && !defined(TARGET_OS_WATCH)) - -#include - -void ggml_print_backtrace(void) { - /* - #include - #include - - void * trace[100]; - - int nptrs = backtrace(trace, sizeof(trace)/sizeof(trace[0])); - - backtrace_symbols_fd(trace, nptrs, STDERR_FILENO); - */ - - // backtrack_symbols does not show line numbers, use gdb instead - char attach[32]; - snprintf(attach, sizeof(attach), "attach %d", getpid()); - int pid = fork(); - if (pid == 0) { - execlp("gdb", "gdb", "--batch", - "-ex", "set style enabled on", - "-ex", attach, - "-ex", "bt -frame-info source-and-location", - "-ex", "detach", - "-ex", "quit", - (char *) NULL); - } else { - waitpid(pid, NULL, 0); - } -} -#else -void ggml_print_backtrace(void) { - // platform not supported -} -#endif - -/*#define GGML_PERF*/ -#define GGML_DEBUG 0 -#define GGML_GELU_FP16 -#define GGML_GELU_QUICK_FP16 -#define GGML_SILU_FP16 -// #define GGML_CROSS_ENTROPY_EXP_FP16 -// #define GGML_FLASH_ATTN_EXP_FP16 - -#define GGML_SOFT_MAX_UNROLL 4 -#define GGML_VEC_DOT_UNROLL 2 -#define GGML_VEC_MAD_UNROLL 32 - -// -// logging -// - -#if (GGML_DEBUG >= 1) -#define GGML_PRINT_DEBUG(...) printf(__VA_ARGS__) -#else -#define GGML_PRINT_DEBUG(...) -#endif - -#if (GGML_DEBUG >= 5) -#define GGML_PRINT_DEBUG_5(...) printf(__VA_ARGS__) -#else -#define GGML_PRINT_DEBUG_5(...) -#endif - -#if (GGML_DEBUG >= 10) -#define GGML_PRINT_DEBUG_10(...) printf(__VA_ARGS__) -#else -#define GGML_PRINT_DEBUG_10(...) -#endif - -#define GGML_PRINT(...) printf(__VA_ARGS__) - -// -// end of logging block -// - -#ifdef GGML_USE_ACCELERATE -// uncomment to use vDSP for soft max computation -// note: not sure if it is actually faster -//#define GGML_SOFT_MAX_ACCELERATE -#endif - -#if defined(_MSC_VER) || defined(__MINGW32__) -#define GGML_ALIGNED_MALLOC(size) _aligned_malloc(size, GGML_MEM_ALIGN) -#define GGML_ALIGNED_FREE(ptr) _aligned_free(ptr) -#else -inline static void * ggml_aligned_malloc(size_t size) { - if (size == 0) { - GGML_PRINT("WARNING: Behavior may be unexpected when allocating 0 bytes for ggml_aligned_malloc!\n"); - return NULL; - } - void * aligned_memory = NULL; -#ifdef GGML_USE_CPU_HBM - int result = hbw_posix_memalign(&aligned_memory, 16, size); -#elif GGML_USE_METAL - int result = posix_memalign(&aligned_memory, sysconf(_SC_PAGESIZE), size); -#else - int result = posix_memalign(&aligned_memory, GGML_MEM_ALIGN, size); -#endif - if (result != 0) { - // Handle allocation failure - const char *error_desc = "unknown allocation error"; - switch (result) { - case EINVAL: - error_desc = "invalid alignment value"; - break; - case ENOMEM: - error_desc = "insufficient memory"; - break; - } - GGML_PRINT("%s: %s (attempted to allocate %6.2f MB)\n", __func__, error_desc, size/(1024.0*1024.0)); - GGML_ASSERT(false); - return NULL; - } - return aligned_memory; -} -#define GGML_ALIGNED_MALLOC(size) ggml_aligned_malloc(size) -#ifdef GGML_USE_CPU_HBM -#define GGML_ALIGNED_FREE(ptr) if(NULL != ptr) hbw_free(ptr) -#else -#define GGML_ALIGNED_FREE(ptr) free(ptr) -#endif -#endif - -inline static void * ggml_malloc(size_t size) { - if (size == 0) { - GGML_PRINT("WARNING: Behavior may be unexpected when allocating 0 bytes for ggml_malloc!\n"); - return NULL; - } - void * result = malloc(size); - if (result == NULL) { - GGML_PRINT("%s: failed to allocate %6.2f MB\n", __func__, size/(1024.0*1024.0)); - GGML_ASSERT(false); - } - return result; -} - -// calloc -inline static void * ggml_calloc(size_t num, size_t size) { - if (num == 0 || size == 0) { - GGML_PRINT("WARNING: Behavior may be unexpected when allocating 0 bytes for ggml_calloc!\n"); - return NULL; - } - void * result = calloc(num, size); - if (result == NULL) { - GGML_PRINT("%s: failed to allocate %6.2f MB\n", __func__, size/(1024.0*1024.0)); - GGML_ASSERT(false); - } - return result; -} - -#define GGML_MALLOC(size) ggml_malloc(size) -#define GGML_CALLOC(num, size) ggml_calloc(num, size) - -#define GGML_FREE(ptr) free(ptr) - -#define UNUSED GGML_UNUSED -#define SWAP(x, y, T) do { T SWAP = x; x = y; y = SWAP; } while (0) - -#if defined(GGML_USE_ACCELERATE) -#include -#if defined(GGML_USE_CLBLAST) // allow usage of CLBlast alongside Accelerate functions -#include "ggml-opencl.h" -#endif -#elif defined(GGML_USE_OPENBLAS) -#if defined(GGML_BLAS_USE_MKL) -#include -#else -#include -#endif -#elif defined(GGML_USE_CLBLAST) -#include "ggml-opencl.h" -#endif - -// floating point type used to accumulate sums -typedef double ggml_float; - -#undef MIN -#undef MAX - -#define MIN(a, b) ((a) < (b) ? (a) : (b)) -#define MAX(a, b) ((a) > (b) ? (a) : (b)) - -// -// global data -// - -// precomputed gelu table for f16 (128 KB) -static ggml_fp16_t ggml_table_gelu_f16[1 << 16]; - -// precomputed quick gelu table for f16 (128 KB) -static ggml_fp16_t ggml_table_gelu_quick_f16[1 << 16]; - -// precomputed silu table for f16 (128 KB) -static ggml_fp16_t ggml_table_silu_f16[1 << 16]; - -// precomputed exp table for f16 (128 KB) -static ggml_fp16_t ggml_table_exp_f16[1 << 16]; - -// precomputed f32 table for f16 (256 KB) (ggml-impl.h) -float ggml_table_f32_f16[1 << 16]; - -bool isOpenCLSupported = false; - -const char * ggml_status_to_string(enum ggml_status status) { - switch (status) { - case GGML_STATUS_ALLOC_FAILED: return "GGML status: error (failed to allocate memory)"; - case GGML_STATUS_FAILED: return "GGML status: error (operation failed)"; - case GGML_STATUS_SUCCESS: return "GGML status: success"; - case GGML_STATUS_ABORTED: return "GGML status: warning (operation aborted)"; - } - - return "GGML status: unknown"; -} - -// note: do not use these inside ggml.c -// these are meant to be used via the ggml.h API -float ggml_fp16_to_fp32(ggml_fp16_t x) { - return GGML_FP16_TO_FP32(x); -} - -ggml_fp16_t ggml_fp32_to_fp16(float x) { - return GGML_FP32_TO_FP16(x); -} - -void ggml_fp16_to_fp32_row(const ggml_fp16_t * x, float * y, int64_t n) { - for (int64_t i = 0; i < n; i++) { - y[i] = GGML_FP16_TO_FP32(x[i]); - } -} - -void ggml_fp32_to_fp16_row(const float * x, ggml_fp16_t * y, int64_t n) { - int64_t i = 0; -#if defined(__F16C__) - for (; i + 7 < n; i += 8) { - __m256 x_vec = _mm256_loadu_ps(x + i); - __m128i y_vec = _mm256_cvtps_ph(x_vec, _MM_FROUND_TO_NEAREST_INT); - _mm_storeu_si128((__m128i *)(y + i), y_vec); - } - for(; i + 3 < n; i += 4) { - __m128 x_vec = _mm_loadu_ps(x + i); - __m128i y_vec = _mm_cvtps_ph(x_vec, _MM_FROUND_TO_NEAREST_INT); - _mm_storel_epi64((__m128i *)(y + i), y_vec); - } -#endif - for (; i < n; i++) { - y[i] = GGML_FP32_TO_FP16(x[i]); - } -} - -bool ggml_guid_matches(ggml_guid_t guid_a, ggml_guid_t guid_b) { - return memcmp(guid_a, guid_b, sizeof(ggml_guid)) == 0; -} - -// -// timing -// - -#if defined(_MSC_VER) || defined(__MINGW32__) -static int64_t timer_freq, timer_start; -void ggml_time_init(void) { - LARGE_INTEGER t; - QueryPerformanceFrequency(&t); - timer_freq = t.QuadPart; - - // The multiplication by 1000 or 1000000 below can cause an overflow if timer_freq - // and the uptime is high enough. - // We subtract the program start time to reduce the likelihood of that happening. - QueryPerformanceCounter(&t); - timer_start = t.QuadPart; -} -int64_t ggml_time_ms(void) { - LARGE_INTEGER t; - QueryPerformanceCounter(&t); - return ((t.QuadPart-timer_start) * 1000) / timer_freq; -} -int64_t ggml_time_us(void) { - LARGE_INTEGER t; - QueryPerformanceCounter(&t); - return ((t.QuadPart-timer_start) * 1000000) / timer_freq; -} -#else -void ggml_time_init(void) {} -int64_t ggml_time_ms(void) { - struct timespec ts; - clock_gettime(CLOCK_MONOTONIC, &ts); - return (int64_t)ts.tv_sec*1000 + (int64_t)ts.tv_nsec/1000000; -} - -int64_t ggml_time_us(void) { - struct timespec ts; - clock_gettime(CLOCK_MONOTONIC, &ts); - return (int64_t)ts.tv_sec*1000000 + (int64_t)ts.tv_nsec/1000; -} -#endif - -int64_t ggml_cycles(void) { - return clock(); -} - -int64_t ggml_cycles_per_ms(void) { - return CLOCKS_PER_SEC/1000; -} - -#ifdef GGML_PERF -#define ggml_perf_time_ms() ggml_time_ms() -#define ggml_perf_time_us() ggml_time_us() -#define ggml_perf_cycles() ggml_cycles() -#define ggml_perf_cycles_per_ms() ggml_cycles_per_ms() -#else -#define ggml_perf_time_ms() 0 -#define ggml_perf_time_us() 0 -#define ggml_perf_cycles() 0 -#define ggml_perf_cycles_per_ms() 0 -#endif - -// -// cross-platform UTF-8 file paths -// - -#ifdef _WIN32 -static wchar_t * ggml_mbstowcs(const char * mbs) { - int wlen = MultiByteToWideChar(CP_UTF8, 0, mbs, -1, NULL, 0); - if (!wlen) { - errno = EINVAL; - return NULL; - } - - wchar_t * wbuf = GGML_MALLOC(wlen * sizeof(wchar_t)); - wlen = MultiByteToWideChar(CP_UTF8, 0, mbs, -1, wbuf, wlen); - if (!wlen) { - GGML_FREE(wbuf); - errno = EINVAL; - return NULL; - } - - return wbuf; -} -#endif - -FILE * ggml_fopen(const char * fname, const char * mode) { -#ifdef _WIN32 - FILE * file = NULL; - - // convert fname (UTF-8) - wchar_t * wfname = ggml_mbstowcs(fname); - if (wfname) { - // convert mode (ANSI) - wchar_t * wmode = GGML_MALLOC((strlen(mode) + 1) * sizeof(wchar_t)); - wchar_t * wmode_p = wmode; - do { - *wmode_p++ = (wchar_t)*mode; - } while (*mode++); - - // open file - file = _wfopen(wfname, wmode); - - GGML_FREE(wfname); - GGML_FREE(wmode); - } - - return file; -#else - return fopen(fname, mode); -#endif -} - -// -// cache line -// - -#if defined(__cpp_lib_hardware_interference_size) -#define CACHE_LINE_SIZE hardware_destructive_interference_size -#else -#if defined(__POWER9_VECTOR__) -#define CACHE_LINE_SIZE 128 -#else -#define CACHE_LINE_SIZE 64 -#endif -#endif - -static const size_t CACHE_LINE_SIZE_F32 = CACHE_LINE_SIZE/sizeof(float); - -static void ggml_vec_dot_f32(int n, float * restrict s, size_t bs, const float * restrict x, size_t bx, const float * restrict y, size_t by, int nrc); -static void ggml_vec_dot_f16(int n, float * restrict s, size_t bs, ggml_fp16_t * restrict x, size_t bx, ggml_fp16_t * restrict y, size_t by, int nrc); - -static const ggml_type_traits_t type_traits[GGML_TYPE_COUNT] = { - [GGML_TYPE_I8] = { - .type_name = "i8", - .blck_size = 1, - .type_size = sizeof(int8_t), - .is_quantized = false, - }, - [GGML_TYPE_I16] = { - .type_name = "i16", - .blck_size = 1, - .type_size = sizeof(int16_t), - .is_quantized = false, - }, - [GGML_TYPE_I32] = { - .type_name = "i32", - .blck_size = 1, - .type_size = sizeof(int32_t), - .is_quantized = false, - }, - [GGML_TYPE_I64] = { - .type_name = "i64", - .blck_size = 1, - .type_size = sizeof(int64_t), - .is_quantized = false, - }, - [GGML_TYPE_F64] = { - .type_name = "f64", - .blck_size = 1, - .type_size = sizeof(double), - .is_quantized = false, - .nrows = 1, - }, - [GGML_TYPE_F32] = { - .type_name = "f32", - .blck_size = 1, - .type_size = sizeof(float), - .is_quantized = false, - .vec_dot = (ggml_vec_dot_t) ggml_vec_dot_f32, - .vec_dot_type = GGML_TYPE_F32, - .nrows = 1, - }, - [GGML_TYPE_F16] = { - .type_name = "f16", - .blck_size = 1, - .type_size = sizeof(ggml_fp16_t), - .is_quantized = false, - .to_float = (ggml_to_float_t) ggml_fp16_to_fp32_row, - .from_float = (ggml_from_float_t) ggml_fp32_to_fp16_row, - .from_float_reference = (ggml_from_float_t) ggml_fp32_to_fp16_row, - .vec_dot = (ggml_vec_dot_t) ggml_vec_dot_f16, - .vec_dot_type = GGML_TYPE_F16, - .nrows = 1, - }, - [GGML_TYPE_Q4_0] = { - .type_name = "q4_0", - .blck_size = QK4_0, - .type_size = sizeof(block_q4_0), - .is_quantized = true, - .to_float = (ggml_to_float_t) dequantize_row_q4_0, - .from_float = quantize_row_q4_0, - .from_float_reference = (ggml_from_float_t) quantize_row_q4_0_reference, - .vec_dot = ggml_vec_dot_q4_0_q8_0, - .vec_dot_type = GGML_TYPE_Q8_0, -#if defined (__ARM_FEATURE_MATMUL_INT8) - .nrows = 2, -#else - .nrows = 1, -#endif - }, - [GGML_TYPE_Q4_1] = { - .type_name = "q4_1", - .blck_size = QK4_1, - .type_size = sizeof(block_q4_1), - .is_quantized = true, - .to_float = (ggml_to_float_t) dequantize_row_q4_1, - .from_float = quantize_row_q4_1, - .from_float_reference = (ggml_from_float_t) quantize_row_q4_1_reference, - .vec_dot = ggml_vec_dot_q4_1_q8_1, - .vec_dot_type = GGML_TYPE_Q8_1, -#if defined (__ARM_FEATURE_MATMUL_INT8) - .nrows = 2, -#else - .nrows = 1, -#endif - }, - [4] = { // GGML_TYPE_Q4_2 - .type_name = "DEPRECATED", - .blck_size = 0, - .type_size = 0, - .is_quantized = false, - .to_float = NULL, - .from_float = NULL, - .from_float_reference = NULL, - .vec_dot = NULL, - .vec_dot_type = GGML_TYPE_COUNT, - .nrows = 1, - }, - [5] = { // GGML_TYPE_Q4_3 - .type_name = "DEPRECATED", - .blck_size = 0, - .type_size = 0, - .is_quantized = false, - .to_float = NULL, - .from_float = NULL, - .from_float_reference = NULL, - .vec_dot = NULL, - .vec_dot_type = GGML_TYPE_COUNT, - .nrows = 1, - }, - [GGML_TYPE_Q5_0] = { - .type_name = "q5_0", - .blck_size = QK5_0, - .type_size = sizeof(block_q5_0), - .is_quantized = true, - .to_float = (ggml_to_float_t) dequantize_row_q5_0, - .from_float = quantize_row_q5_0, - .from_float_reference = (ggml_from_float_t) quantize_row_q5_0_reference, - .vec_dot = ggml_vec_dot_q5_0_q8_0, - .vec_dot_type = GGML_TYPE_Q8_0, - .nrows = 1, - }, - [GGML_TYPE_Q5_1] = { - .type_name = "q5_1", - .blck_size = QK5_1, - .type_size = sizeof(block_q5_1), - .is_quantized = true, - .to_float = (ggml_to_float_t) dequantize_row_q5_1, - .from_float = quantize_row_q5_1, - .from_float_reference = (ggml_from_float_t) quantize_row_q5_1_reference, - .vec_dot = ggml_vec_dot_q5_1_q8_1, - .vec_dot_type = GGML_TYPE_Q8_1, - .nrows = 1, - }, - [GGML_TYPE_Q8_0] = { - .type_name = "q8_0", - .blck_size = QK8_0, - .type_size = sizeof(block_q8_0), - .is_quantized = true, - .to_float = (ggml_to_float_t) dequantize_row_q8_0, - .from_float = quantize_row_q8_0, - .from_float_reference = (ggml_from_float_t) quantize_row_q8_0_reference, - .vec_dot = ggml_vec_dot_q8_0_q8_0, - .vec_dot_type = GGML_TYPE_Q8_0, -#if defined (__ARM_FEATURE_MATMUL_INT8) - .nrows = 2, -#else - .nrows = 1, -#endif - }, - [GGML_TYPE_Q8_1] = { - .type_name = "q8_1", - .blck_size = QK8_1, - .type_size = sizeof(block_q8_1), - .is_quantized = true, - .from_float = quantize_row_q8_1, - .from_float_reference = (ggml_from_float_t) quantize_row_q8_1_reference, - .vec_dot_type = GGML_TYPE_Q8_1, - .nrows = 1, - }, - [GGML_TYPE_Q2_K] = { - .type_name = "q2_K", - .blck_size = QK_K, - .type_size = sizeof(block_q2_K), - .is_quantized = true, - .to_float = (ggml_to_float_t) dequantize_row_q2_K, - .from_float = quantize_row_q2_K, - .from_float_reference = (ggml_from_float_t) quantize_row_q2_K_reference, - .vec_dot = ggml_vec_dot_q2_K_q8_K, - .vec_dot_type = GGML_TYPE_Q8_K, - .nrows = 1, - }, - [GGML_TYPE_Q3_K] = { - .type_name = "q3_K", - .blck_size = QK_K, - .type_size = sizeof(block_q3_K), - .is_quantized = true, - .to_float = (ggml_to_float_t) dequantize_row_q3_K, - .from_float = quantize_row_q3_K, - .from_float_reference = (ggml_from_float_t) quantize_row_q3_K_reference, - .vec_dot = ggml_vec_dot_q3_K_q8_K, - .vec_dot_type = GGML_TYPE_Q8_K, - .nrows = 1, - }, - [GGML_TYPE_Q4_K] = { - .type_name = "q4_K", - .blck_size = QK_K, - .type_size = sizeof(block_q4_K), - .is_quantized = true, - .to_float = (ggml_to_float_t) dequantize_row_q4_K, - .from_float = quantize_row_q4_K, - .from_float_reference = (ggml_from_float_t) quantize_row_q4_K_reference, - .vec_dot = ggml_vec_dot_q4_K_q8_K, - .vec_dot_type = GGML_TYPE_Q8_K, - .nrows = 1, - }, - [GGML_TYPE_Q5_K] = { - .type_name = "q5_K", - .blck_size = QK_K, - .type_size = sizeof(block_q5_K), - .is_quantized = true, - .to_float = (ggml_to_float_t) dequantize_row_q5_K, - .from_float = quantize_row_q5_K, - .from_float_reference = (ggml_from_float_t) quantize_row_q5_K_reference, - .vec_dot = ggml_vec_dot_q5_K_q8_K, - .vec_dot_type = GGML_TYPE_Q8_K, - .nrows = 1, - }, - [GGML_TYPE_Q6_K] = { - .type_name = "q6_K", - .blck_size = QK_K, - .type_size = sizeof(block_q6_K), - .is_quantized = true, - .to_float = (ggml_to_float_t) dequantize_row_q6_K, - .from_float = quantize_row_q6_K, - .from_float_reference = (ggml_from_float_t) quantize_row_q6_K_reference, - .vec_dot = ggml_vec_dot_q6_K_q8_K, - .vec_dot_type = GGML_TYPE_Q8_K, - .nrows = 1, - }, - [GGML_TYPE_IQ2_XXS] = { - .type_name = "iq2_xxs", - .blck_size = QK_K, - .type_size = sizeof(block_iq2_xxs), - .is_quantized = true, - .to_float = (ggml_to_float_t) dequantize_row_iq2_xxs, - .from_float = NULL, - .from_float_reference = NULL, - .vec_dot = ggml_vec_dot_iq2_xxs_q8_K, - .vec_dot_type = GGML_TYPE_Q8_K, - .nrows = 1, - }, - [GGML_TYPE_IQ2_XS] = { - .type_name = "iq2_xs", - .blck_size = QK_K, - .type_size = sizeof(block_iq2_xs), - .is_quantized = true, - .to_float = (ggml_to_float_t) dequantize_row_iq2_xs, - .from_float = NULL, - .from_float_reference = NULL, - .vec_dot = ggml_vec_dot_iq2_xs_q8_K, - .vec_dot_type = GGML_TYPE_Q8_K, - .nrows = 1, - }, - [GGML_TYPE_IQ3_XXS] = { - .type_name = "iq3_xxs", - .blck_size = QK_K, - .type_size = sizeof(block_iq3_xxs), - .is_quantized = true, - .to_float = (ggml_to_float_t) dequantize_row_iq3_xxs, - .from_float = quantize_row_iq3_xxs, - .from_float_reference = (ggml_from_float_t)quantize_row_iq3_xxs_reference, - .vec_dot = ggml_vec_dot_iq3_xxs_q8_K, - .vec_dot_type = GGML_TYPE_Q8_K, - .nrows = 1, - }, - [GGML_TYPE_IQ3_S] = { - .type_name = "iq3_s", - .blck_size = QK_K, - .type_size = sizeof(block_iq3_s), - .is_quantized = true, - .to_float = (ggml_to_float_t) dequantize_row_iq3_s, - .from_float = quantize_row_iq3_s, - .from_float_reference = (ggml_from_float_t)quantize_row_iq3_s_reference, - .vec_dot = ggml_vec_dot_iq3_s_q8_K, - .vec_dot_type = GGML_TYPE_Q8_K, - .nrows = 1, - }, - [GGML_TYPE_IQ2_S] = { - .type_name = "iq2_s", - .blck_size = QK_K, - .type_size = sizeof(block_iq2_s), - .is_quantized = true, - .to_float = (ggml_to_float_t) dequantize_row_iq2_s, - .from_float = quantize_row_iq2_s, - .from_float_reference = (ggml_from_float_t)quantize_row_iq2_s_reference, - .vec_dot = ggml_vec_dot_iq2_s_q8_K, - .vec_dot_type = GGML_TYPE_Q8_K, - .nrows = 1, - }, - [GGML_TYPE_IQ1_S] = { - .type_name = "iq1_s", - .blck_size = QK_K, - .type_size = sizeof(block_iq1_s), - .is_quantized = true, - .to_float = (ggml_to_float_t) dequantize_row_iq1_s, - .from_float = NULL, - .from_float_reference = NULL, - .vec_dot = ggml_vec_dot_iq1_s_q8_K, - .vec_dot_type = GGML_TYPE_Q8_K, - .nrows = 1, - }, - [GGML_TYPE_IQ1_M] = { - .type_name = "iq1_m", - .blck_size = QK_K, - .type_size = sizeof(block_iq1_m), - .is_quantized = true, - .to_float = (ggml_to_float_t) dequantize_row_iq1_m, - .from_float = NULL, - .from_float_reference = NULL, - .vec_dot = ggml_vec_dot_iq1_m_q8_K, - .vec_dot_type = GGML_TYPE_Q8_K, - .nrows = 1, - }, - [GGML_TYPE_IQ4_NL] = { - .type_name = "iq4_nl", - .blck_size = QK4_NL, - .type_size = sizeof(block_iq4_nl), - .is_quantized = true, - .to_float = (ggml_to_float_t) dequantize_row_iq4_nl, - .from_float = quantize_row_iq4_nl, - .from_float_reference = (ggml_from_float_t)quantize_row_iq4_nl_reference, - .vec_dot = ggml_vec_dot_iq4_nl_q8_0, - .vec_dot_type = GGML_TYPE_Q8_0, - .nrows = 1, - }, - [GGML_TYPE_IQ4_XS] = { - .type_name = "iq4_xs", -#if QK_K == 64 - .blck_size = QK4_NL, -#else - .blck_size = QK_K, -#endif - .type_size = sizeof(block_iq4_xs), - .is_quantized = true, - .to_float = (ggml_to_float_t) dequantize_row_iq4_xs, - .from_float = quantize_row_iq4_xs, - .from_float_reference = (ggml_from_float_t)quantize_row_iq4_xs_reference, - .vec_dot = ggml_vec_dot_iq4_xs_q8_K, -#if QK_K == 64 - .vec_dot_type = GGML_TYPE_Q8_0, -#else - .vec_dot_type = GGML_TYPE_Q8_K, -#endif - .nrows = 1, - }, - [GGML_TYPE_Q8_K] = { - .type_name = "q8_K", - .blck_size = QK_K, - .type_size = sizeof(block_q8_K), - .is_quantized = true, - .from_float = quantize_row_q8_K, - } -}; - -// For internal test use -ggml_type_traits_t ggml_internal_get_type_traits(enum ggml_type type) { - GGML_ASSERT(type < GGML_TYPE_COUNT); - return type_traits[type]; -} - -// -// simd mappings -// - -// we define a common set of C macros which map to specific intrinsics based on the current architecture -// we then implement the fundamental computation operations below using only these macros -// adding support for new architectures requires to define the corresponding SIMD macros -// -// GGML_F32_STEP / GGML_F16_STEP -// number of elements to process in a single step -// -// GGML_F32_EPR / GGML_F16_EPR -// number of elements to fit in a single register -// - -#if defined(__ARM_NEON) && defined(__ARM_FEATURE_FMA) - -#define GGML_SIMD - -// F32 NEON - -#define GGML_F32_STEP 16 -#define GGML_F32_EPR 4 - -#define GGML_F32x4 float32x4_t -#define GGML_F32x4_ZERO vdupq_n_f32(0.0f) -#define GGML_F32x4_SET1(x) vdupq_n_f32(x) -#define GGML_F32x4_LOAD vld1q_f32 -#define GGML_F32x4_STORE vst1q_f32 -#define GGML_F32x4_FMA(a, b, c) vfmaq_f32(a, b, c) -#define GGML_F32x4_ADD vaddq_f32 -#define GGML_F32x4_MUL vmulq_f32 -#define GGML_F32x4_REDUCE_ONE(x) vaddvq_f32(x) -#define GGML_F32x4_REDUCE(res, x) \ -{ \ - int offset = GGML_F32_ARR >> 1; \ - for (int i = 0; i < offset; ++i) { \ - x[i] = vaddq_f32(x[i], x[offset+i]); \ - } \ - offset >>= 1; \ - for (int i = 0; i < offset; ++i) { \ - x[i] = vaddq_f32(x[i], x[offset+i]); \ - } \ - offset >>= 1; \ - for (int i = 0; i < offset; ++i) { \ - x[i] = vaddq_f32(x[i], x[offset+i]); \ - } \ - res = GGML_F32x4_REDUCE_ONE(x[0]); \ -} - -#define GGML_F32_VEC GGML_F32x4 -#define GGML_F32_VEC_ZERO GGML_F32x4_ZERO -#define GGML_F32_VEC_SET1 GGML_F32x4_SET1 -#define GGML_F32_VEC_LOAD GGML_F32x4_LOAD -#define GGML_F32_VEC_STORE GGML_F32x4_STORE -#define GGML_F32_VEC_FMA GGML_F32x4_FMA -#define GGML_F32_VEC_ADD GGML_F32x4_ADD -#define GGML_F32_VEC_MUL GGML_F32x4_MUL -#define GGML_F32_VEC_REDUCE GGML_F32x4_REDUCE - -// F16 NEON - -#if defined(__ARM_FEATURE_FP16_VECTOR_ARITHMETIC) - #define GGML_F16_STEP 32 - #define GGML_F16_EPR 8 - - #define GGML_F16x8 float16x8_t - #define GGML_F16x8_ZERO vdupq_n_f16(0.0f) - #define GGML_F16x8_SET1(x) vdupq_n_f16(x) - #define GGML_F16x8_LOAD(x) vld1q_f16((const ggml_fp16_internal_t *)(x)) - #define GGML_F16x8_STORE vst1q_f16 - #define GGML_F16x8_FMA(a, b, c) vfmaq_f16(a, b, c) - #define GGML_F16x8_ADD vaddq_f16 - #define GGML_F16x8_MUL vmulq_f16 - #define GGML_F16x8_REDUCE(res, x) \ - do { \ - int offset = GGML_F16_ARR >> 1; \ - for (int i = 0; i < offset; ++i) { \ - x[i] = vaddq_f16(x[i], x[offset+i]); \ - } \ - offset >>= 1; \ - for (int i = 0; i < offset; ++i) { \ - x[i] = vaddq_f16(x[i], x[offset+i]); \ - } \ - offset >>= 1; \ - for (int i = 0; i < offset; ++i) { \ - x[i] = vaddq_f16(x[i], x[offset+i]); \ - } \ - const float32x4_t t0 = vcvt_f32_f16(vget_low_f16 (x[0])); \ - const float32x4_t t1 = vcvt_f32_f16(vget_high_f16(x[0])); \ - res = (ggml_float) vaddvq_f32(vaddq_f32(t0, t1)); \ - } while (0) - - #define GGML_F16_VEC GGML_F16x8 - #define GGML_F16_VEC_ZERO GGML_F16x8_ZERO - #define GGML_F16_VEC_SET1 GGML_F16x8_SET1 - #define GGML_F16_VEC_LOAD(p, i) GGML_F16x8_LOAD(p) - #define GGML_F16_VEC_STORE(p, r, i) GGML_F16x8_STORE(p, r[i]) - #define GGML_F16_VEC_FMA GGML_F16x8_FMA - #define GGML_F16_VEC_ADD GGML_F16x8_ADD - #define GGML_F16_VEC_MUL GGML_F16x8_MUL - #define GGML_F16_VEC_REDUCE GGML_F16x8_REDUCE -#else - // if FP16 vector arithmetic is not supported, we use FP32 instead - // and take advantage of the vcvt_ functions to convert to/from FP16 - - #define GGML_F16_STEP 16 - #define GGML_F16_EPR 4 - - #define GGML_F32Cx4 float32x4_t - #define GGML_F32Cx4_ZERO vdupq_n_f32(0.0f) - #define GGML_F32Cx4_SET1(x) vdupq_n_f32(x) - #define GGML_F32Cx4_LOAD(x) vcvt_f32_f16(vld1_f16((const ggml_fp16_internal_t *)(x))) - #define GGML_F32Cx4_STORE(x, y) vst1_f16(x, vcvt_f16_f32(y)) - #define GGML_F32Cx4_FMA(a, b, c) vfmaq_f32(a, b, c) - #define GGML_F32Cx4_ADD vaddq_f32 - #define GGML_F32Cx4_MUL vmulq_f32 - #define GGML_F32Cx4_REDUCE GGML_F32x4_REDUCE - - #define GGML_F16_VEC GGML_F32Cx4 - #define GGML_F16_VEC_ZERO GGML_F32Cx4_ZERO - #define GGML_F16_VEC_SET1 GGML_F32Cx4_SET1 - #define GGML_F16_VEC_LOAD(p, i) GGML_F32Cx4_LOAD(p) - #define GGML_F16_VEC_STORE(p, r, i) GGML_F32Cx4_STORE(p, r[i]) - #define GGML_F16_VEC_FMA GGML_F32Cx4_FMA - #define GGML_F16_VEC_ADD GGML_F32Cx4_ADD - #define GGML_F16_VEC_MUL GGML_F32Cx4_MUL - #define GGML_F16_VEC_REDUCE GGML_F32Cx4_REDUCE -#endif - -#elif defined(__AVX512F__) - -#define GGML_SIMD - -// F32 AVX512 - -#define GGML_F32_STEP 64 -#define GGML_F32_EPR 16 - -#define GGML_F32x16 __m512 -#define GGML_F32x16_ZERO _mm512_setzero_ps() -#define GGML_F32x16_SET1(x) _mm512_set1_ps(x) -#define GGML_F32x16_LOAD _mm512_loadu_ps -#define GGML_F32x16_STORE _mm512_storeu_ps -// _mm512_fmadd_ps is defined in AVX512F so no guard is required -#define GGML_F32x16_FMA(a, b, c) _mm512_fmadd_ps(b, c, a) -#define GGML_F32x16_ADD _mm512_add_ps -#define GGML_F32x16_MUL _mm512_mul_ps -#define GGML_F32x16_REDUCE(res, x) \ -do { \ - int offset = GGML_F32_ARR >> 1; \ - for (int i = 0; i < offset; ++i) { \ - x[i] = _mm512_add_ps(x[i], x[offset+i]); \ - } \ - offset >>= 1; \ - for (int i = 0; i < offset; ++i) { \ - x[i] = _mm512_add_ps(x[i], x[offset+i]); \ - } \ - offset >>= 1; \ - for (int i = 0; i < offset; ++i) { \ - x[i] = _mm512_add_ps(x[i], x[offset+i]); \ - } \ - res = _mm512_reduce_add_ps(x[0]); \ -} while (0) - -// TODO: is this optimal ? - -#define GGML_F32_VEC GGML_F32x16 -#define GGML_F32_VEC_ZERO GGML_F32x16_ZERO -#define GGML_F32_VEC_SET1 GGML_F32x16_SET1 -#define GGML_F32_VEC_LOAD GGML_F32x16_LOAD -#define GGML_F32_VEC_STORE GGML_F32x16_STORE -#define GGML_F32_VEC_FMA GGML_F32x16_FMA -#define GGML_F32_VEC_ADD GGML_F32x16_ADD -#define GGML_F32_VEC_MUL GGML_F32x16_MUL -#define GGML_F32_VEC_REDUCE GGML_F32x16_REDUCE - -// F16 AVX512 - -// F16 AVX - -#define GGML_F16_STEP 64 -#define GGML_F16_EPR 16 - -// AVX512 has FP16 extension (AVX512_FP16) but I don't have it on my machine so I use FP32 instead - -#define GGML_F32Cx16 __m512 -#define GGML_F32Cx16_ZERO _mm512_setzero_ps() -#define GGML_F32Cx16_SET1(x) _mm512_set1_ps(x) - -// unlike _mm256_cvt intrinsics that require F16C, _mm512_cvt is defined in AVX512F -// so F16C guard isn't required -#define GGML_F32Cx16_LOAD(x) _mm512_cvtph_ps(_mm256_loadu_si256((__m256i *)(x))) -#define GGML_F32Cx16_STORE(x, y) _mm256_storeu_si256((__m256i *)(x), _mm512_cvtps_ph(y, 0)) - -#define GGML_F32Cx16_FMA(a, b, c) _mm512_fmadd_ps(b, c, a) -#define GGML_F32Cx16_ADD _mm512_add_ps -#define GGML_F32Cx16_MUL _mm512_mul_ps -#define GGML_F32Cx16_REDUCE(res, x) \ -do { \ - int offset = GGML_F32_ARR >> 1; \ - for (int i = 0; i < offset; ++i) { \ - x[i] = _mm512_add_ps(x[i], x[offset+i]); \ - } \ - offset >>= 1; \ - for (int i = 0; i < offset; ++i) { \ - x[i] = _mm512_add_ps(x[i], x[offset+i]); \ - } \ - offset >>= 1; \ - for (int i = 0; i < offset; ++i) { \ - x[i] = _mm512_add_ps(x[i], x[offset+i]); \ - } \ - res = _mm512_reduce_add_ps(x[0]); \ -} while (0) - -#define GGML_F16_VEC GGML_F32Cx16 -#define GGML_F16_VEC_ZERO GGML_F32Cx16_ZERO -#define GGML_F16_VEC_SET1 GGML_F32Cx16_SET1 -#define GGML_F16_VEC_LOAD(p, i) GGML_F32Cx16_LOAD(p) -#define GGML_F16_VEC_STORE(p, r, i) GGML_F32Cx16_STORE(p, r[i]) -#define GGML_F16_VEC_FMA GGML_F32Cx16_FMA -#define GGML_F16_VEC_ADD GGML_F32Cx16_ADD -#define GGML_F16_VEC_MUL GGML_F32Cx16_MUL -#define GGML_F16_VEC_REDUCE GGML_F32Cx16_REDUCE - -#elif defined(__AVX__) - -#define GGML_SIMD - -// F32 AVX - -#define GGML_F32_STEP 32 -#define GGML_F32_EPR 8 - -#define GGML_F32x8 __m256 -#define GGML_F32x8_ZERO _mm256_setzero_ps() -#define GGML_F32x8_SET1(x) _mm256_set1_ps(x) -#define GGML_F32x8_LOAD _mm256_loadu_ps -#define GGML_F32x8_STORE _mm256_storeu_ps -#if defined(__FMA__) - #define GGML_F32x8_FMA(a, b, c) _mm256_fmadd_ps(b, c, a) -#else - #define GGML_F32x8_FMA(a, b, c) _mm256_add_ps(_mm256_mul_ps(b, c), a) -#endif -#define GGML_F32x8_ADD _mm256_add_ps -#define GGML_F32x8_MUL _mm256_mul_ps -#define GGML_F32x8_REDUCE(res, x) \ -do { \ - int offset = GGML_F32_ARR >> 1; \ - for (int i = 0; i < offset; ++i) { \ - x[i] = _mm256_add_ps(x[i], x[offset+i]); \ - } \ - offset >>= 1; \ - for (int i = 0; i < offset; ++i) { \ - x[i] = _mm256_add_ps(x[i], x[offset+i]); \ - } \ - offset >>= 1; \ - for (int i = 0; i < offset; ++i) { \ - x[i] = _mm256_add_ps(x[i], x[offset+i]); \ - } \ - const __m128 t0 = _mm_add_ps(_mm256_castps256_ps128(x[0]), \ - _mm256_extractf128_ps(x[0], 1)); \ - const __m128 t1 = _mm_hadd_ps(t0, t0); \ - res = (ggml_float) _mm_cvtss_f32(_mm_hadd_ps(t1, t1)); \ -} while (0) -// TODO: is this optimal ? - -#define GGML_F32_VEC GGML_F32x8 -#define GGML_F32_VEC_ZERO GGML_F32x8_ZERO -#define GGML_F32_VEC_SET1 GGML_F32x8_SET1 -#define GGML_F32_VEC_LOAD GGML_F32x8_LOAD -#define GGML_F32_VEC_STORE GGML_F32x8_STORE -#define GGML_F32_VEC_FMA GGML_F32x8_FMA -#define GGML_F32_VEC_ADD GGML_F32x8_ADD -#define GGML_F32_VEC_MUL GGML_F32x8_MUL -#define GGML_F32_VEC_REDUCE GGML_F32x8_REDUCE - -// F16 AVX - -#define GGML_F16_STEP 32 -#define GGML_F16_EPR 8 - -// F16 arithmetic is not supported by AVX, so we use F32 instead - -#define GGML_F32Cx8 __m256 -#define GGML_F32Cx8_ZERO _mm256_setzero_ps() -#define GGML_F32Cx8_SET1(x) _mm256_set1_ps(x) - -#if defined(__F16C__) -// the _mm256_cvt intrinsics require F16C -#define GGML_F32Cx8_LOAD(x) _mm256_cvtph_ps(_mm_loadu_si128((__m128i *)(x))) -#define GGML_F32Cx8_STORE(x, y) _mm_storeu_si128((__m128i *)(x), _mm256_cvtps_ph(y, 0)) -#else -static inline __m256 __avx_f32cx8_load(ggml_fp16_t *x) { - float tmp[8]; - - for (int i = 0; i < 8; i++) { - tmp[i] = GGML_FP16_TO_FP32(x[i]); - } - - return _mm256_loadu_ps(tmp); -} -static inline void __avx_f32cx8_store(ggml_fp16_t *x, __m256 y) { - float arr[8]; - - _mm256_storeu_ps(arr, y); - - for (int i = 0; i < 8; i++) - x[i] = GGML_FP32_TO_FP16(arr[i]); -} -#define GGML_F32Cx8_LOAD(x) __avx_f32cx8_load(x) -#define GGML_F32Cx8_STORE(x, y) __avx_f32cx8_store(x, y) -#endif - -#define GGML_F32Cx8_FMA GGML_F32x8_FMA -#define GGML_F32Cx8_ADD _mm256_add_ps -#define GGML_F32Cx8_MUL _mm256_mul_ps -#define GGML_F32Cx8_REDUCE GGML_F32x8_REDUCE - -#define GGML_F16_VEC GGML_F32Cx8 -#define GGML_F16_VEC_ZERO GGML_F32Cx8_ZERO -#define GGML_F16_VEC_SET1 GGML_F32Cx8_SET1 -#define GGML_F16_VEC_LOAD(p, i) GGML_F32Cx8_LOAD(p) -#define GGML_F16_VEC_STORE(p, r, i) GGML_F32Cx8_STORE(p, r[i]) -#define GGML_F16_VEC_FMA GGML_F32Cx8_FMA -#define GGML_F16_VEC_ADD GGML_F32Cx8_ADD -#define GGML_F16_VEC_MUL GGML_F32Cx8_MUL -#define GGML_F16_VEC_REDUCE GGML_F32Cx8_REDUCE - -#elif defined(__POWER9_VECTOR__) - -#define GGML_SIMD - -// F32 POWER9 - -#define GGML_F32_STEP 32 -#define GGML_F32_EPR 4 - -#define GGML_F32x4 vector float -#define GGML_F32x4_ZERO 0.0f -#define GGML_F32x4_SET1 vec_splats -#define GGML_F32x4_LOAD(p) vec_xl(0, p) -#define GGML_F32x4_STORE(p, r) vec_xst(r, 0, p) -#define GGML_F32x4_FMA(a, b, c) vec_madd(b, c, a) -#define GGML_F32x4_ADD vec_add -#define GGML_F32x4_MUL vec_mul -#define GGML_F32x4_REDUCE(res, x) \ -{ \ - int offset = GGML_F32_ARR >> 1; \ - for (int i = 0; i < offset; ++i) { \ - x[i] = vec_add(x[i], x[offset+i]); \ - } \ - offset >>= 1; \ - for (int i = 0; i < offset; ++i) { \ - x[i] = vec_add(x[i], x[offset+i]); \ - } \ - offset >>= 1; \ - for (int i = 0; i < offset; ++i) { \ - x[i] = vec_add(x[i], x[offset+i]); \ - } \ - res = vec_extract(x[0], 0) + \ - vec_extract(x[0], 1) + \ - vec_extract(x[0], 2) + \ - vec_extract(x[0], 3); \ -} - -#define GGML_F32_VEC GGML_F32x4 -#define GGML_F32_VEC_ZERO GGML_F32x4_ZERO -#define GGML_F32_VEC_SET1 GGML_F32x4_SET1 -#define GGML_F32_VEC_LOAD GGML_F32x4_LOAD -#define GGML_F32_VEC_STORE GGML_F32x4_STORE -#define GGML_F32_VEC_FMA GGML_F32x4_FMA -#define GGML_F32_VEC_ADD GGML_F32x4_ADD -#define GGML_F32_VEC_MUL GGML_F32x4_MUL -#define GGML_F32_VEC_REDUCE GGML_F32x4_REDUCE - -// F16 POWER9 -#define GGML_F16_STEP GGML_F32_STEP -#define GGML_F16_EPR GGML_F32_EPR -#define GGML_F16_VEC GGML_F32x4 -#define GGML_F16_VEC_ZERO GGML_F32x4_ZERO -#define GGML_F16_VEC_SET1 GGML_F32x4_SET1 -#define GGML_F16_VEC_FMA GGML_F32x4_FMA -#define GGML_F16_VEC_REDUCE GGML_F32x4_REDUCE -// Use vec_xl, not vec_ld, in case the load address is not aligned. -#define GGML_F16_VEC_LOAD(p, i) (i & 0x1) ? \ - vec_extract_fp32_from_shorth(vec_xl(0, p - GGML_F16_EPR)) : \ - vec_extract_fp32_from_shortl(vec_xl(0, p)) -#define GGML_ENDIAN_BYTE(i) ((unsigned char *)&(uint16_t){1})[i] -#define GGML_F16_VEC_STORE(p, r, i) \ - if (i & 0x1) \ - vec_xst(vec_pack_to_short_fp32(r[i - GGML_ENDIAN_BYTE(1)], \ - r[i - GGML_ENDIAN_BYTE(0)]), \ - 0, p - GGML_F16_EPR) - -#elif defined(__wasm_simd128__) - -#define GGML_SIMD - -// F32 WASM - -#define GGML_F32_STEP 16 -#define GGML_F32_EPR 4 - -#define GGML_F32x4 v128_t -#define GGML_F32x4_ZERO wasm_f32x4_splat(0.0f) -#define GGML_F32x4_SET1(x) wasm_f32x4_splat(x) -#define GGML_F32x4_LOAD wasm_v128_load -#define GGML_F32x4_STORE wasm_v128_store -#define GGML_F32x4_FMA(a, b, c) wasm_f32x4_add(wasm_f32x4_mul(b, c), a) -#define GGML_F32x4_ADD wasm_f32x4_add -#define GGML_F32x4_MUL wasm_f32x4_mul -#define GGML_F32x4_REDUCE(res, x) \ -{ \ - int offset = GGML_F32_ARR >> 1; \ - for (int i = 0; i < offset; ++i) { \ - x[i] = wasm_f32x4_add(x[i], x[offset+i]); \ - } \ - offset >>= 1; \ - for (int i = 0; i < offset; ++i) { \ - x[i] = wasm_f32x4_add(x[i], x[offset+i]); \ - } \ - offset >>= 1; \ - for (int i = 0; i < offset; ++i) { \ - x[i] = wasm_f32x4_add(x[i], x[offset+i]); \ - } \ - res = wasm_f32x4_extract_lane(x[0], 0) + \ - wasm_f32x4_extract_lane(x[0], 1) + \ - wasm_f32x4_extract_lane(x[0], 2) + \ - wasm_f32x4_extract_lane(x[0], 3); \ -} - -#define GGML_F32_VEC GGML_F32x4 -#define GGML_F32_VEC_ZERO GGML_F32x4_ZERO -#define GGML_F32_VEC_SET1 GGML_F32x4_SET1 -#define GGML_F32_VEC_LOAD GGML_F32x4_LOAD -#define GGML_F32_VEC_STORE GGML_F32x4_STORE -#define GGML_F32_VEC_FMA GGML_F32x4_FMA -#define GGML_F32_VEC_ADD GGML_F32x4_ADD -#define GGML_F32_VEC_MUL GGML_F32x4_MUL -#define GGML_F32_VEC_REDUCE GGML_F32x4_REDUCE - -// F16 WASM - -#define GGML_F16_STEP 16 -#define GGML_F16_EPR 4 - -inline static v128_t __wasm_f16x4_load(const ggml_fp16_t * p) { - float tmp[4]; - - tmp[0] = GGML_FP16_TO_FP32(p[0]); - tmp[1] = GGML_FP16_TO_FP32(p[1]); - tmp[2] = GGML_FP16_TO_FP32(p[2]); - tmp[3] = GGML_FP16_TO_FP32(p[3]); - - return wasm_v128_load(tmp); -} - -inline static void __wasm_f16x4_store(ggml_fp16_t * p, v128_t x) { - float tmp[4]; - - wasm_v128_store(tmp, x); - - p[0] = GGML_FP32_TO_FP16(tmp[0]); - p[1] = GGML_FP32_TO_FP16(tmp[1]); - p[2] = GGML_FP32_TO_FP16(tmp[2]); - p[3] = GGML_FP32_TO_FP16(tmp[3]); -} - -#define GGML_F16x4 v128_t -#define GGML_F16x4_ZERO wasm_f32x4_splat(0.0f) -#define GGML_F16x4_SET1(x) wasm_f32x4_splat(x) -#define GGML_F16x4_LOAD(x) __wasm_f16x4_load(x) -#define GGML_F16x4_STORE(x, y) __wasm_f16x4_store(x, y) -#define GGML_F16x4_FMA GGML_F32x4_FMA -#define GGML_F16x4_ADD wasm_f32x4_add -#define GGML_F16x4_MUL wasm_f32x4_mul -#define GGML_F16x4_REDUCE(res, x) \ -{ \ - int offset = GGML_F16_ARR >> 1; \ - for (int i = 0; i < offset; ++i) { \ - x[i] = wasm_f32x4_add(x[i], x[offset+i]); \ - } \ - offset >>= 1; \ - for (int i = 0; i < offset; ++i) { \ - x[i] = wasm_f32x4_add(x[i], x[offset+i]); \ - } \ - offset >>= 1; \ - for (int i = 0; i < offset; ++i) { \ - x[i] = wasm_f32x4_add(x[i], x[offset+i]); \ - } \ - res = wasm_f32x4_extract_lane(x[0], 0) + \ - wasm_f32x4_extract_lane(x[0], 1) + \ - wasm_f32x4_extract_lane(x[0], 2) + \ - wasm_f32x4_extract_lane(x[0], 3); \ -} - -#define GGML_F16_VEC GGML_F16x4 -#define GGML_F16_VEC_ZERO GGML_F16x4_ZERO -#define GGML_F16_VEC_SET1 GGML_F16x4_SET1 -#define GGML_F16_VEC_LOAD(p, i) GGML_F16x4_LOAD(p) -#define GGML_F16_VEC_STORE(p, r, i) GGML_F16x4_STORE(p, r[i]) -#define GGML_F16_VEC_FMA GGML_F16x4_FMA -#define GGML_F16_VEC_ADD GGML_F16x4_ADD -#define GGML_F16_VEC_MUL GGML_F16x4_MUL -#define GGML_F16_VEC_REDUCE GGML_F16x4_REDUCE - -#elif defined(__SSE3__) - -#define GGML_SIMD - -// F32 SSE - -#define GGML_F32_STEP 32 -#define GGML_F32_EPR 4 - -#define GGML_F32x4 __m128 -#define GGML_F32x4_ZERO _mm_setzero_ps() -#define GGML_F32x4_SET1(x) _mm_set1_ps(x) -#define GGML_F32x4_LOAD _mm_loadu_ps -#define GGML_F32x4_STORE _mm_storeu_ps -#if defined(__FMA__) - // TODO: Does this work? - #define GGML_F32x4_FMA(a, b, c) _mm_fmadd_ps(b, c, a) -#else - #define GGML_F32x4_FMA(a, b, c) _mm_add_ps(_mm_mul_ps(b, c), a) -#endif -#define GGML_F32x4_ADD _mm_add_ps -#define GGML_F32x4_MUL _mm_mul_ps -#define GGML_F32x4_REDUCE(res, x) \ -{ \ - int offset = GGML_F32_ARR >> 1; \ - for (int i = 0; i < offset; ++i) { \ - x[i] = _mm_add_ps(x[i], x[offset+i]); \ - } \ - offset >>= 1; \ - for (int i = 0; i < offset; ++i) { \ - x[i] = _mm_add_ps(x[i], x[offset+i]); \ - } \ - offset >>= 1; \ - for (int i = 0; i < offset; ++i) { \ - x[i] = _mm_add_ps(x[i], x[offset+i]); \ - } \ - const __m128 t0 = _mm_hadd_ps(x[0], x[0]); \ - res = (ggml_float) _mm_cvtss_f32(_mm_hadd_ps(t0, t0)); \ -} -// TODO: is this optimal ? - -#define GGML_F32_VEC GGML_F32x4 -#define GGML_F32_VEC_ZERO GGML_F32x4_ZERO -#define GGML_F32_VEC_SET1 GGML_F32x4_SET1 -#define GGML_F32_VEC_LOAD GGML_F32x4_LOAD -#define GGML_F32_VEC_STORE GGML_F32x4_STORE -#define GGML_F32_VEC_FMA GGML_F32x4_FMA -#define GGML_F32_VEC_ADD GGML_F32x4_ADD -#define GGML_F32_VEC_MUL GGML_F32x4_MUL -#define GGML_F32_VEC_REDUCE GGML_F32x4_REDUCE - -// F16 SSE - -#define GGML_F16_STEP 32 -#define GGML_F16_EPR 4 - -static inline __m128 __sse_f16x4_load(ggml_fp16_t *x) { - float tmp[4]; - - tmp[0] = GGML_FP16_TO_FP32(x[0]); - tmp[1] = GGML_FP16_TO_FP32(x[1]); - tmp[2] = GGML_FP16_TO_FP32(x[2]); - tmp[3] = GGML_FP16_TO_FP32(x[3]); - - return _mm_loadu_ps(tmp); -} - -static inline void __sse_f16x4_store(ggml_fp16_t *x, __m128 y) { - float arr[4]; - - _mm_storeu_ps(arr, y); - - x[0] = GGML_FP32_TO_FP16(arr[0]); - x[1] = GGML_FP32_TO_FP16(arr[1]); - x[2] = GGML_FP32_TO_FP16(arr[2]); - x[3] = GGML_FP32_TO_FP16(arr[3]); -} - -#define GGML_F32Cx4 __m128 -#define GGML_F32Cx4_ZERO _mm_setzero_ps() -#define GGML_F32Cx4_SET1(x) _mm_set1_ps(x) -#define GGML_F32Cx4_LOAD(x) __sse_f16x4_load(x) -#define GGML_F32Cx4_STORE(x, y) __sse_f16x4_store(x, y) -#define GGML_F32Cx4_FMA GGML_F32x4_FMA -#define GGML_F32Cx4_ADD _mm_add_ps -#define GGML_F32Cx4_MUL _mm_mul_ps -#define GGML_F32Cx4_REDUCE GGML_F32x4_REDUCE - -#define GGML_F16_VEC GGML_F32Cx4 -#define GGML_F16_VEC_ZERO GGML_F32Cx4_ZERO -#define GGML_F16_VEC_SET1 GGML_F32Cx4_SET1 -#define GGML_F16_VEC_LOAD(p, i) GGML_F32Cx4_LOAD(p) -#define GGML_F16_VEC_STORE(p, r, i) GGML_F32Cx4_STORE(p, r[i]) -#define GGML_F16_VEC_FMA GGML_F32Cx4_FMA -#define GGML_F16_VEC_ADD GGML_F32Cx4_ADD -#define GGML_F16_VEC_MUL GGML_F32Cx4_MUL -#define GGML_F16_VEC_REDUCE GGML_F32Cx4_REDUCE - -#endif - -// GGML_F32_ARR / GGML_F16_ARR -// number of registers to use per step -#ifdef GGML_SIMD -#define GGML_F32_ARR (GGML_F32_STEP/GGML_F32_EPR) -#define GGML_F16_ARR (GGML_F16_STEP/GGML_F16_EPR) -#endif - -// -// fundamental operations -// - -inline static void ggml_vec_set_i8(const int n, int8_t * x, const int8_t v) { for (int i = 0; i < n; ++i) x[i] = v; } - -inline static void ggml_vec_set_i16(const int n, int16_t * x, const int16_t v) { for (int i = 0; i < n; ++i) x[i] = v; } - -inline static void ggml_vec_set_i32(const int n, int32_t * x, const int32_t v) { for (int i = 0; i < n; ++i) x[i] = v; } - -inline static void ggml_vec_set_f16(const int n, ggml_fp16_t * x, const int32_t v) { for (int i = 0; i < n; ++i) x[i] = v; } - -inline static void ggml_vec_add_f32 (const int n, float * z, const float * x, const float * y) { for (int i = 0; i < n; ++i) z[i] = x[i] + y[i]; } -inline static void ggml_vec_add1_f32(const int n, float * z, const float * x, const float v) { for (int i = 0; i < n; ++i) z[i] = x[i] + v; } -inline static void ggml_vec_acc_f32 (const int n, float * y, const float * x) { for (int i = 0; i < n; ++i) y[i] += x[i]; } -inline static void ggml_vec_acc1_f32(const int n, float * y, const float v) { for (int i = 0; i < n; ++i) y[i] += v; } -inline static void ggml_vec_sub_f32 (const int n, float * z, const float * x, const float * y) { for (int i = 0; i < n; ++i) z[i] = x[i] - y[i]; } -inline static void ggml_vec_set_f32 (const int n, float * x, const float v) { for (int i = 0; i < n; ++i) x[i] = v; } -inline static void ggml_vec_cpy_f32 (const int n, float * y, const float * x) { for (int i = 0; i < n; ++i) y[i] = x[i]; } -inline static void ggml_vec_neg_f32 (const int n, float * y, const float * x) { for (int i = 0; i < n; ++i) y[i] = -x[i]; } -inline static void ggml_vec_mul_f32 (const int n, float * z, const float * x, const float * y) { for (int i = 0; i < n; ++i) z[i] = x[i]*y[i]; } -inline static void ggml_vec_div_f32 (const int n, float * z, const float * x, const float * y) { for (int i = 0; i < n; ++i) z[i] = x[i]/y[i]; } - -static void ggml_vec_dot_f32(int n, float * restrict s, size_t bs, const float * restrict x, size_t bx, const float * restrict y, size_t by, int nrc) { - assert(nrc == 1); - UNUSED(nrc); - UNUSED(bx); - UNUSED(by); - UNUSED(bs); - -#ifdef GGML_SIMD - float sumf = 0.0f; - const int np = (n & ~(GGML_F32_STEP - 1)); - - GGML_F32_VEC sum[GGML_F32_ARR] = { GGML_F32_VEC_ZERO }; - - GGML_F32_VEC ax[GGML_F32_ARR]; - GGML_F32_VEC ay[GGML_F32_ARR]; - - for (int i = 0; i < np; i += GGML_F32_STEP) { - for (int j = 0; j < GGML_F32_ARR; j++) { - ax[j] = GGML_F32_VEC_LOAD(x + i + j*GGML_F32_EPR); - ay[j] = GGML_F32_VEC_LOAD(y + i + j*GGML_F32_EPR); - - sum[j] = GGML_F32_VEC_FMA(sum[j], ax[j], ay[j]); - } - } - - // reduce sum0..sum3 to sum0 - GGML_F32_VEC_REDUCE(sumf, sum); - - // leftovers - for (int i = np; i < n; ++i) { - sumf += x[i]*y[i]; - } -#else - // scalar - ggml_float sumf = 0.0; - for (int i = 0; i < n; ++i) { - sumf += (ggml_float)(x[i]*y[i]); - } -#endif - - *s = sumf; -} - -static void ggml_vec_dot_f16(int n, float * restrict s, size_t bs, ggml_fp16_t * restrict x, size_t bx, ggml_fp16_t * restrict y, size_t by, int nrc) { - assert(nrc == 1); - UNUSED(nrc); - UNUSED(bx); - UNUSED(by); - UNUSED(bs); - - ggml_float sumf = 0.0; - -#if defined(GGML_SIMD) - const int np = (n & ~(GGML_F16_STEP - 1)); - - GGML_F16_VEC sum[GGML_F16_ARR] = { GGML_F16_VEC_ZERO }; - - GGML_F16_VEC ax[GGML_F16_ARR]; - GGML_F16_VEC ay[GGML_F16_ARR]; - - for (int i = 0; i < np; i += GGML_F16_STEP) { - for (int j = 0; j < GGML_F16_ARR; j++) { - ax[j] = GGML_F16_VEC_LOAD(x + i + j*GGML_F16_EPR, j); - ay[j] = GGML_F16_VEC_LOAD(y + i + j*GGML_F16_EPR, j); - - sum[j] = GGML_F16_VEC_FMA(sum[j], ax[j], ay[j]); - } - } - - // reduce sum0..sum3 to sum0 - GGML_F16_VEC_REDUCE(sumf, sum); - - // leftovers - for (int i = np; i < n; ++i) { - sumf += (ggml_float)(GGML_FP16_TO_FP32(x[i])*GGML_FP16_TO_FP32(y[i])); - } -#else - for (int i = 0; i < n; ++i) { - sumf += (ggml_float)(GGML_FP16_TO_FP32(x[i])*GGML_FP16_TO_FP32(y[i])); - } -#endif - - *s = sumf; -} - -// compute GGML_VEC_DOT_UNROLL dot products at once -// xs - x row stride in bytes -inline static void ggml_vec_dot_f16_unroll(const int n, const int xs, float * restrict s, void * restrict xv, ggml_fp16_t * restrict y) { - ggml_float sumf[GGML_VEC_DOT_UNROLL] = { 0.0 }; - - ggml_fp16_t * restrict x[GGML_VEC_DOT_UNROLL]; - - for (int i = 0; i < GGML_VEC_DOT_UNROLL; ++i) { - x[i] = (ggml_fp16_t *) ((char *) xv + i*xs); - } - -#if defined(GGML_SIMD) - const int np = (n & ~(GGML_F16_STEP - 1)); - - GGML_F16_VEC sum[GGML_VEC_DOT_UNROLL][GGML_F16_ARR] = { { GGML_F16_VEC_ZERO } }; - - GGML_F16_VEC ax[GGML_F16_ARR]; - GGML_F16_VEC ay[GGML_F16_ARR]; - - for (int i = 0; i < np; i += GGML_F16_STEP) { - for (int j = 0; j < GGML_F16_ARR; j++) { - ay[j] = GGML_F16_VEC_LOAD(y + i + j*GGML_F16_EPR, j); - - for (int k = 0; k < GGML_VEC_DOT_UNROLL; ++k) { - ax[j] = GGML_F16_VEC_LOAD(x[k] + i + j*GGML_F16_EPR, j); - - sum[k][j] = GGML_F16_VEC_FMA(sum[k][j], ax[j], ay[j]); - } - } - } - - // reduce sum0..sum3 to sum0 - for (int k = 0; k < GGML_VEC_DOT_UNROLL; ++k) { - GGML_F16_VEC_REDUCE(sumf[k], sum[k]); - } - - // leftovers - for (int i = np; i < n; ++i) { - for (int j = 0; j < GGML_VEC_DOT_UNROLL; ++j) { - sumf[j] += (ggml_float)(GGML_FP16_TO_FP32(x[j][i])*GGML_FP16_TO_FP32(y[i])); - } - } -#else - for (int i = 0; i < n; ++i) { - for (int j = 0; j < GGML_VEC_DOT_UNROLL; ++j) { - sumf[j] += (ggml_float)(GGML_FP16_TO_FP32(x[j][i])*GGML_FP16_TO_FP32(y[i])); - } - } -#endif - - for (int i = 0; i < GGML_VEC_DOT_UNROLL; ++i) { - s[i] = sumf[i]; - } -} - -inline static void ggml_vec_mad_f32(const int n, float * restrict y, const float * restrict x, const float v) { -#if defined(GGML_SIMD) - const int np = (n & ~(GGML_F32_STEP - 1)); - - GGML_F32_VEC vx = GGML_F32_VEC_SET1(v); - - GGML_F32_VEC ax[GGML_F32_ARR]; - GGML_F32_VEC ay[GGML_F32_ARR]; - - for (int i = 0; i < np; i += GGML_F32_STEP) { - for (int j = 0; j < GGML_F32_ARR; j++) { - ax[j] = GGML_F32_VEC_LOAD(x + i + j*GGML_F32_EPR); - ay[j] = GGML_F32_VEC_LOAD(y + i + j*GGML_F32_EPR); - ay[j] = GGML_F32_VEC_FMA(ay[j], ax[j], vx); - - GGML_F32_VEC_STORE(y + i + j*GGML_F32_EPR, ay[j]); - } - } - - // leftovers - for (int i = np; i < n; ++i) { - y[i] += x[i]*v; - } -#else - // scalar - for (int i = 0; i < n; ++i) { - y[i] += x[i]*v; - } -#endif -} - -// xs and vs are byte strides of x and v -inline static void ggml_vec_mad_f32_unroll(const int n, const int xs, const int vs, float * restrict y, const float * restrict xv, const float * restrict vv) { - - const float * restrict x[GGML_VEC_MAD_UNROLL]; - const float * restrict v[GGML_VEC_MAD_UNROLL]; - - for (int i = 0; i < GGML_VEC_MAD_UNROLL; ++i) { - x[i] = (const float *) ((const char *) xv + i*xs); - v[i] = (const float *) ((const char *) vv + i*vs); - } - -#if defined(GGML_SIMD) - const int np = (n & ~(GGML_F32_STEP - 1)); - - GGML_F32_VEC vx[GGML_VEC_MAD_UNROLL]; - - for (int k = 0; k < GGML_VEC_MAD_UNROLL; ++k) { - vx[k] = GGML_F32_VEC_SET1(v[k][0]); - } - - GGML_F32_VEC ax[GGML_VEC_MAD_UNROLL][GGML_F32_ARR]; - GGML_F32_VEC ay[GGML_F32_ARR]; - - for (int i = 0; i < np; i += GGML_F32_STEP) { - for (int j = 0; j < GGML_F32_ARR; j++) { - ay[j] = GGML_F32_VEC_LOAD(y + i + j*GGML_F32_EPR); - - for (int k = 0; k < GGML_VEC_MAD_UNROLL; ++k) { - ax[k][j] = GGML_F32_VEC_LOAD(x[k] + i + j*GGML_F32_EPR); - ay[j] = GGML_F32_VEC_FMA(ay[j], ax[k][j], vx[k]); - } - - GGML_F32_VEC_STORE(y + i + j*GGML_F32_EPR, ay[j]); - } - } - - // leftovers - for (int k = 0; k < GGML_VEC_MAD_UNROLL; ++k) { - for (int i = np; i < n; ++i) { - y[i] += x[k][i]*v[k][0]; - } - } -#else - // scalar - for (int k = 0; k < GGML_VEC_MAD_UNROLL; ++k) { - for (int i = 0; i < n; ++i) { - y[i] += x[k][i]*v[k][0]; - } - } -#endif -} - -//inline static void ggml_vec_scale_f32(const int n, float * y, const float v) { for (int i = 0; i < n; ++i) y[i] *= v; } -inline static void ggml_vec_scale_f32(const int n, float * y, const float v) { -#if defined(GGML_USE_ACCELERATE) - vDSP_vsmul(y, 1, &v, y, 1, n); -#elif defined(GGML_SIMD) - const int np = (n & ~(GGML_F32_STEP - 1)); - - GGML_F32_VEC vx = GGML_F32_VEC_SET1(v); - - GGML_F32_VEC ay[GGML_F32_ARR]; - - for (int i = 0; i < np; i += GGML_F32_STEP) { - for (int j = 0; j < GGML_F32_ARR; j++) { - ay[j] = GGML_F32_VEC_LOAD(y + i + j*GGML_F32_EPR); - ay[j] = GGML_F32_VEC_MUL(ay[j], vx); - - GGML_F32_VEC_STORE(y + i + j*GGML_F32_EPR, ay[j]); - } - } - - // leftovers - for (int i = np; i < n; ++i) { - y[i] *= v; - } -#else - // scalar - for (int i = 0; i < n; ++i) { - y[i] *= v; - } -#endif -} - -inline static void ggml_vec_norm_f32 (const int n, float * s, const float * x) { ggml_vec_dot_f32(n, s, 0, x, 0, x, 0, 1); *s = sqrtf(*s); } -inline static void ggml_vec_sqr_f32 (const int n, float * y, const float * x) { for (int i = 0; i < n; ++i) y[i] = x[i]*x[i]; } -inline static void ggml_vec_sqrt_f32 (const int n, float * y, const float * x) { for (int i = 0; i < n; ++i) y[i] = sqrtf(x[i]); } -inline static void ggml_vec_log_f32 (const int n, float * y, const float * x) { for (int i = 0; i < n; ++i) y[i] = logf(x[i]); } -inline static void ggml_vec_abs_f32 (const int n, float * y, const float * x) { for (int i = 0; i < n; ++i) y[i] = fabsf(x[i]); } -inline static void ggml_vec_sgn_f32 (const int n, float * y, const float * x) { for (int i = 0; i < n; ++i) y[i] = (x[i] > 0.f) ? 1.f : ((x[i] < 0.f) ? -1.f : 0.f); } -inline static void ggml_vec_step_f32 (const int n, float * y, const float * x) { for (int i = 0; i < n; ++i) y[i] = (x[i] > 0.f) ? 1.f : 0.f; } -inline static void ggml_vec_tanh_f32 (const int n, float * y, const float * x) { for (int i = 0; i < n; ++i) y[i] = tanhf(x[i]); } -inline static void ggml_vec_elu_f32 (const int n, float * y, const float * x) { for (int i = 0; i < n; ++i) y[i] = (x[i] > 0.f) ? x[i] : expf(x[i])-1; } -inline static void ggml_vec_relu_f32 (const int n, float * y, const float * x) { for (int i = 0; i < n; ++i) y[i] = (x[i] > 0.f) ? x[i] : 0.f; } -inline static void ggml_vec_leaky_relu_f32 (const int n, float * y, const float * x, const float ns) { for (int i = 0; i < n; ++i) y[i] = ((x[i] > 0.f) ? x[i] : 0.f) + ns * ((x[i] < 0.0f) ? x[i] : 0.f); } -// TODO: optimize performance -inline static void ggml_vec_hardswish_f32 (const int n, float * y, const float * x) { for (int i = 0; i < n; ++i) y[i] = x[i] * fminf(1.0f, fmaxf(0.0f, (x[i] + 3.0f) / 6.0f)); } -inline static void ggml_vec_hardsigmoid_f32 (const int n, float * y, const float * x) { for (int i = 0; i < n; ++i) y[i] = fminf(1.0f, fmaxf(0.0f, (x[i] + 3.0f) / 6.0f)); } - -static const float GELU_COEF_A = 0.044715f; -static const float GELU_QUICK_COEF = -1.702f; -static const float SQRT_2_OVER_PI = 0.79788456080286535587989211986876f; - -inline static float ggml_gelu_f32(float x) { - return 0.5f*x*(1.0f + tanhf(SQRT_2_OVER_PI*x*(1.0f + GELU_COEF_A*x*x))); -} - -inline static void ggml_vec_gelu_f16(const int n, ggml_fp16_t * y, const ggml_fp16_t * x) { - const uint16_t * i16 = (const uint16_t *) x; - for (int i = 0; i < n; ++i) { - y[i] = ggml_table_gelu_f16[i16[i]]; - } -} - -#ifdef GGML_GELU_FP16 -inline static void ggml_vec_gelu_f32(const int n, float * y, const float * x) { - uint16_t t; - for (int i = 0; i < n; ++i) { - if (x[i] <= -10.0f) { - y[i] = 0.0f; - } else if (x[i] >= 10.0f) { - y[i] = x[i]; - } else { - ggml_fp16_t fp16 = GGML_FP32_TO_FP16(x[i]); - memcpy(&t, &fp16, sizeof(uint16_t)); - y[i] = GGML_FP16_TO_FP32(ggml_table_gelu_f16[t]); - } - } -} -#else -inline static void ggml_vec_gelu_f32(const int n, float * y, const float * x) { - for (int i = 0; i < n; ++i) { - y[i] = ggml_gelu_f32(x[i]); - } -} -#endif - -inline static float ggml_gelu_quick_f32(float x) { - return x*(1.0f/(1.0f+expf(GELU_QUICK_COEF*x))); -} - -//inline static void ggml_vec_gelu_quick_f16(const int n, ggml_fp16_t * y, const ggml_fp16_t * x) { -// const uint16_t * i16 = (const uint16_t *) x; -// for (int i = 0; i < n; ++i) { -// y[i] = ggml_table_gelu_quick_f16[i16[i]]; -// } -//} - -#ifdef GGML_GELU_QUICK_FP16 -inline static void ggml_vec_gelu_quick_f32(const int n, float * y, const float * x) { - uint16_t t; - for (int i = 0; i < n; ++i) { - ggml_fp16_t fp16 = GGML_FP32_TO_FP16(x[i]); - memcpy(&t, &fp16, sizeof(uint16_t)); - y[i] = GGML_FP16_TO_FP32(ggml_table_gelu_quick_f16[t]); - } -} -#else -inline static void ggml_vec_gelu_quick_f32(const int n, float * y, const float * x) { - for (int i = 0; i < n; ++i) { - y[i] = ggml_gelu_quick_f32(x[i]); - } -} -#endif - -// Sigmoid Linear Unit (SiLU) function -inline static float ggml_silu_f32(float x) { - return x/(1.0f + expf(-x)); -} - -//inline static void ggml_vec_silu_f16(const int n, ggml_fp16_t * y, const ggml_fp16_t * x) { -// const uint16_t * i16 = (const uint16_t *) x; -// for (int i = 0; i < n; ++i) { -// y[i] = ggml_table_silu_f16[i16[i]]; -// } -//} - -#ifdef GGML_SILU_FP16 -inline static void ggml_vec_silu_f32(const int n, float * y, const float * x) { - uint16_t t; - for (int i = 0; i < n; ++i) { - ggml_fp16_t fp16 = GGML_FP32_TO_FP16(x[i]); - memcpy(&t, &fp16, sizeof(uint16_t)); - y[i] = GGML_FP16_TO_FP32(ggml_table_silu_f16[t]); - } -} -#else -inline static void ggml_vec_silu_f32(const int n, float * y, const float * x) { - for (int i = 0; i < n; ++i) { - y[i] = ggml_silu_f32(x[i]); - } -} -#endif - -inline static float ggml_silu_backward_f32(float x, float dy) { - const float s = 1.0f/(1.0f + expf(-x)); - return dy*s*(1.0f + x*(1.0f - s)); -} - -#ifdef GGML_SILU_FP16 -inline static void ggml_vec_silu_backward_f32(const int n, float * dx, const float * x, const float * dy) { - for (int i = 0; i < n; ++i) { - // we did not use x[i] to compute forward silu but its f16 equivalent - // take derivative at f16 of x[i]: - ggml_fp16_t fp16 = GGML_FP32_TO_FP16(x[i]); - float usedx = GGML_FP16_TO_FP32(fp16); - dx[i] = ggml_silu_backward_f32(usedx, dy[i]); - } -} -#else -inline static void ggml_vec_silu_backward_f32(const int n, float * dx, const float * x, const float * dy) { - for (int i = 0; i < n; ++i) { - dx[i] = ggml_silu_backward_f32(x[i], dy[i]); - } -} -#endif - -inline static void ggml_vec_sum_f32(const int n, float * s, const float * x) { -#ifndef GGML_USE_ACCELERATE - ggml_float sum = 0.0; - for (int i = 0; i < n; ++i) { - sum += (ggml_float)x[i]; - } - *s = sum; -#else - vDSP_sve(x, 1, s, n); -#endif -} - -inline static void ggml_vec_sum_f32_ggf(const int n, ggml_float * s, const float * x) { - ggml_float sum = 0.0; - for (int i = 0; i < n; ++i) { - sum += (ggml_float)x[i]; - } - *s = sum; -} - -inline static void ggml_vec_sum_f16_ggf(const int n, float * s, const ggml_fp16_t * x) { - float sum = 0.0f; - for (int i = 0; i < n; ++i) { - sum += GGML_FP16_TO_FP32(x[i]); - } - *s = sum; -} - -inline static void ggml_vec_max_f32(const int n, float * s, const float * x) { -#ifndef GGML_USE_ACCELERATE - float max = -INFINITY; - for (int i = 0; i < n; ++i) { - max = MAX(max, x[i]); - } - *s = max; -#else - vDSP_maxv(x, 1, s, n); -#endif -} - -inline static void ggml_vec_norm_inv_f32(const int n, float * s, const float * x) { - ggml_vec_norm_f32(n, s, x); - *s = 1.f/(*s); -} - -inline static void ggml_vec_argmax_f32(const int n, int * s, const float * x) { - float max = -INFINITY; - int idx = 0; - for (int i = 0; i < n; ++i) { - max = MAX(max, x[i]); - if (max == x[i]) { idx = i; } - } - *s = idx; -} - -// -// data types -// - -static const char * GGML_OP_NAME[GGML_OP_COUNT] = { - "NONE", - - "DUP", - "ADD", - "ADD1", - "ACC", - "SUB", - "MUL", - "DIV", - "SQR", - "SQRT", - "LOG", - "SUM", - "SUM_ROWS", - "MEAN", - "ARGMAX", - "REPEAT", - "REPEAT_BACK", - "CONCAT", - "SILU_BACK", - "NORM", - "RMS_NORM", - "RMS_NORM_BACK", - "GROUP_NORM", - - "MUL_MAT", - "MUL_MAT_ID", - "OUT_PROD", - - "SCALE", - "SET", - "CPY", - "CONT", - "RESHAPE", - "VIEW", - "PERMUTE", - "TRANSPOSE", - "GET_ROWS", - "GET_ROWS_BACK", - "DIAG", - "DIAG_MASK_INF", - "DIAG_MASK_ZERO", - "SOFT_MAX", - "SOFT_MAX_BACK", - "ROPE", - "ROPE_BACK", - "ALIBI", - "CLAMP", - "CONV_TRANSPOSE_1D", - "IM2COL", - "CONV_TRANSPOSE_2D", - "POOL_1D", - "POOL_2D", - "UPSCALE", - "PAD", - "ARANGE", - "TIMESTEP_EMBEDDING", - "ARGSORT", - "LEAKY_RELU", - - "FLASH_ATTN", - "FLASH_FF", - "FLASH_ATTN_BACK", - "SSM_CONV", - "SSM_SCAN", - "WIN_PART", - "WIN_UNPART", - "GET_REL_POS", - "ADD_REL_POS", - - "UNARY", - - "MAP_UNARY", - "MAP_BINARY", - - "MAP_CUSTOM1_F32", - "MAP_CUSTOM2_F32", - "MAP_CUSTOM3_F32", - - "MAP_CUSTOM1", - "MAP_CUSTOM2", - "MAP_CUSTOM3", - - "CROSS_ENTROPY_LOSS", - "CROSS_ENTROPY_LOSS_BACK", -}; - -static_assert(GGML_OP_COUNT == 76, "GGML_OP_COUNT != 76"); - -static const char * GGML_OP_SYMBOL[GGML_OP_COUNT] = { - "none", - - "x", - "x+y", - "x+y", - "view(x,nb,offset)+=y->x", - "x-y", - "x*y", - "x/y", - "x^2", - "√x", - "log(x)", - "Σx", - "Σx_k", - "Σx/n", - "argmax(x)", - "repeat(x)", - "repeat_back(x)", - "concat(x, y)", - "silu_back(x)", - "norm(x)", - "rms_norm(x)", - "rms_norm_back(x)", - "group_norm(x)", - - "X*Y", - "X[i]*Y", - "X*Y", - - "x*v", - "y-\\>view(x)", - "x-\\>y", - "cont(x)", - "reshape(x)", - "view(x)", - "permute(x)", - "transpose(x)", - "get_rows(x)", - "get_rows_back(x)", - "diag(x)", - "diag_mask_inf(x)", - "diag_mask_zero(x)", - "soft_max(x)", - "soft_max_back(x)", - "rope(x)", - "rope_back(x)", - "alibi(x)", - "clamp(x)", - "conv_transpose_1d(x)", - "im2col(x)", - "conv_transpose_2d(x)", - "pool_1d(x)", - "pool_2d(x)", - "upscale(x)", - "pad(x)", - "arange(start, stop, step)", - "timestep_embedding(timesteps, dim, max_period)", - "argsort(x)", - "leaky_relu(x)", - - "flash_attn(x)", - "flash_ff(x)", - "flash_attn_back(x)", - "ssm_conv(x)", - "ssm_scan(x)", - "win_part(x)", - "win_unpart(x)", - "get_rel_pos(x)", - "add_rel_pos(x)", - - "unary(x)", - - "f(x)", - "f(x,y)", - - "custom_f32(x)", - "custom_f32(x,y)", - "custom_f32(x,y,z)", - - "custom(x)", - "custom(x,y)", - "custom(x,y,z)", - - "cross_entropy_loss(x,y)", - "cross_entropy_loss_back(x,y)", -}; - -static_assert(GGML_OP_COUNT == 76, "GGML_OP_COUNT != 76"); - -static_assert(GGML_OP_POOL_COUNT == 2, "GGML_OP_POOL_COUNT != 2"); - - -static const char * GGML_UNARY_OP_NAME[GGML_UNARY_OP_COUNT] = { - "ABS", - "SGN", - "NEG", - "STEP", - "TANH", - "ELU", - "RELU", - "GELU", - "GELU_QUICK", - "SILU", - "HARDSWISH", - "HARDSIGMOID", -}; - -static_assert(GGML_UNARY_OP_COUNT == 12, "GGML_UNARY_OP_COUNT != 12"); - - -static_assert(sizeof(struct ggml_object)%GGML_MEM_ALIGN == 0, "ggml_object size must be a multiple of GGML_MEM_ALIGN"); -static_assert(sizeof(struct ggml_tensor)%GGML_MEM_ALIGN == 0, "ggml_tensor size must be a multiple of GGML_MEM_ALIGN"); - -// WARN: -// Mis-configuration can lead to problem that's hard to reason about: -// * At best it crash or talks nosense. -// * At worst it talks slightly difference but hard to perceive. -// -// An op has to enable INIT or FINALIZE when any of it's branch needs that pass. -// Take care about compile options (e.g., GGML_USE_xxx). -static bool GGML_OP_HAS_INIT [GGML_OP_COUNT] = { 0 }; -static bool GGML_OP_HAS_FINALIZE[GGML_OP_COUNT] = { 0 }; - -static void ggml_setup_op_has_task_pass(void) { - { // INIT - bool * p = GGML_OP_HAS_INIT; - - p[GGML_OP_ACC ] = true; - p[GGML_OP_MUL_MAT ] = true; - p[GGML_OP_MUL_MAT_ID ] = true; - p[GGML_OP_OUT_PROD ] = true; - p[GGML_OP_SET ] = true; - p[GGML_OP_GET_ROWS_BACK ] = true; - p[GGML_OP_DIAG_MASK_INF ] = true; - p[GGML_OP_DIAG_MASK_ZERO ] = true; - p[GGML_OP_CONV_TRANSPOSE_1D ] = true; - p[GGML_OP_CONV_TRANSPOSE_2D ] = true; - p[GGML_OP_FLASH_ATTN_BACK ] = true; - p[GGML_OP_CROSS_ENTROPY_LOSS ] = true; - p[GGML_OP_ADD_REL_POS ] = true; - } - - { // FINALIZE - bool * p = GGML_OP_HAS_FINALIZE; - - p[GGML_OP_CROSS_ENTROPY_LOSS ] = true; - } -} - -// -// ggml context -// - -struct ggml_context { - size_t mem_size; - void * mem_buffer; - bool mem_buffer_owned; - bool no_alloc; - bool no_alloc_save; // this is used to save the no_alloc state when using scratch buffers - - int n_objects; - - struct ggml_object * objects_begin; - struct ggml_object * objects_end; - - struct ggml_scratch scratch; - struct ggml_scratch scratch_save; -}; - -struct ggml_context_container { - bool used; - - struct ggml_context context; -}; - -// -// NUMA support -// - -#define GGML_NUMA_MAX_NODES 8 -#define GGML_NUMA_MAX_CPUS 512 - -struct ggml_numa_node { - uint32_t cpus[GGML_NUMA_MAX_CPUS]; // hardware threads on this node - uint32_t n_cpus; -}; - -struct ggml_numa_nodes { - enum ggml_numa_strategy numa_strategy; - struct ggml_numa_node nodes[GGML_NUMA_MAX_NODES]; - uint32_t n_nodes; - uint32_t total_cpus; // hardware threads on system - uint32_t current_node; // node on which main process is execting -#if defined(__gnu_linux__) - cpu_set_t cpuset; // cpuset from numactl -#else - uint32_t cpuset; // no NUMA support outside of Linux at this time. Use a portable datatype -#endif -}; - -// -// ggml state -// - -struct ggml_state { - struct ggml_context_container contexts[GGML_MAX_CONTEXTS]; - struct ggml_numa_nodes numa; -}; - -// global state -static struct ggml_state g_state; -static atomic_int g_state_barrier = 0; - -// barrier via spin lock -inline static void ggml_critical_section_start(void) { - int processing = atomic_fetch_add(&g_state_barrier, 1); - - while (processing > 0) { - // wait for other threads to finish - atomic_fetch_sub(&g_state_barrier, 1); - sched_yield(); // TODO: reconsider this - processing = atomic_fetch_add(&g_state_barrier, 1); - } -} - -// TODO: make this somehow automatically executed -// some sort of "sentry" mechanism -inline static void ggml_critical_section_end(void) { - atomic_fetch_sub(&g_state_barrier, 1); -} - -#if defined(__gnu_linux__) -static cpu_set_t ggml_get_numa_affinity(void) { - cpu_set_t cpuset; - pthread_t thread; - thread = pthread_self(); - CPU_ZERO(&cpuset); - pthread_getaffinity_np(thread, sizeof(cpu_set_t), &cpuset); - return cpuset; -} -#else -static uint32_t ggml_get_numa_affinity(void) { - return 0; // no NUMA support -} -#endif - -void ggml_numa_init(enum ggml_numa_strategy numa_flag) { - if (g_state.numa.n_nodes > 0) { - fprintf(stderr, "ggml_numa_init: NUMA already initialized\n"); - - return; - } - -#if defined(__gnu_linux__) - struct stat st; - char path[256]; - int rv; - - // set numa scheme - g_state.numa.numa_strategy = numa_flag; - - GGML_PRINT_DEBUG("numa strategy %u\n",g_state.numa.numa_strategy); - - g_state.numa.cpuset = ggml_get_numa_affinity(); - - // enumerate nodes - while (g_state.numa.n_nodes < GGML_NUMA_MAX_NODES) { - rv = snprintf(path, sizeof(path), "/sys/devices/system/node/node%u", g_state.numa.n_nodes); - GGML_ASSERT(rv > 0 && (unsigned)rv < sizeof(path)); - if (stat(path, &st) != 0) { break; } - ++g_state.numa.n_nodes; - } - - // enumerate CPUs - while (g_state.numa.total_cpus < GGML_NUMA_MAX_CPUS) { - rv = snprintf(path, sizeof(path), "/sys/devices/system/cpu/cpu%u", g_state.numa.total_cpus); - GGML_ASSERT(rv > 0 && (unsigned)rv < sizeof(path)); - if (stat(path, &st) != 0) { break; } - ++g_state.numa.total_cpus; - } - - GGML_PRINT_DEBUG("found %u numa nodes, %u CPUs\n", g_state.numa.n_nodes, g_state.numa.total_cpus); - - // figure out which node we're on - uint current_cpu; - int getcpu_ret = 0; -#if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 28) - getcpu_ret = getcpu(¤t_cpu, &g_state.numa.current_node); -#else - // old glibc doesn't have a wrapper for this call. Fall back on direct syscall -# if !defined(SYS_getcpu) && defined(SYS_get_cpu) -# define SYS_getcpu SYS_get_cpu // some older glibc versions use this name -# endif - getcpu_ret = syscall(SYS_getcpu, ¤t_cpu, &g_state.numa.current_node); -#endif - - if (g_state.numa.n_nodes < 1 || g_state.numa.total_cpus < 1 || getcpu_ret != 0) { - g_state.numa.n_nodes = 0; - return; - } - - GGML_PRINT_DEBUG("found our process on numa node %u, CPU %u\n", g_state.numa.current_node, current_cpu); - - for (uint32_t n = 0; n < g_state.numa.n_nodes; ++n) { - struct ggml_numa_node * node = &g_state.numa.nodes[n]; - GGML_PRINT_DEBUG("CPUs on node %u:", n); - node->n_cpus = 0; - for (uint32_t c = 0; c < g_state.numa.total_cpus; ++c) { - rv = snprintf(path, sizeof(path), "/sys/devices/system/node/node%u/cpu%u", n, c); - GGML_ASSERT(rv > 0 && (unsigned)rv < sizeof(path)); - if (stat(path, &st) == 0) { - node->cpus[node->n_cpus++] = c; - GGML_PRINT_DEBUG(" %u", c); - } - } - GGML_PRINT_DEBUG("\n"); - } - - if (ggml_is_numa()) { - FILE *fptr = fopen("/proc/sys/kernel/numa_balancing", "r"); - if (fptr != NULL) { - char buf[42]; - if (fgets(buf, sizeof(buf), fptr) && strncmp(buf, "0\n", sizeof(buf)) != 0) { - GGML_PRINT("WARNING: /proc/sys/kernel/numa_balancing is enabled, this has been observed to impair performance\n"); - } - fclose(fptr); - } - } -#else - GGML_UNUSED(numa_flag); - // TODO -#endif -} - -bool ggml_is_numa(void) { - return g_state.numa.n_nodes > 1; -} - -//////////////////////////////////////////////////////////////////////////////// - -void ggml_print_object(const struct ggml_object * obj) { - GGML_PRINT(" - ggml_object: type = %d, offset = %zu, size = %zu, next = %p\n", - obj->type, obj->offs, obj->size, (const void *) obj->next); -} - -void ggml_print_objects(const struct ggml_context * ctx) { - struct ggml_object * obj = ctx->objects_begin; - - GGML_PRINT("%s: objects in context %p:\n", __func__, (const void *) ctx); - - while (obj != NULL) { - ggml_print_object(obj); - obj = obj->next; - } - - GGML_PRINT("%s: --- end ---\n", __func__); -} - -GGML_CALL int64_t ggml_nelements(const struct ggml_tensor * tensor) { - static_assert(GGML_MAX_DIMS == 4, "GGML_MAX_DIMS is not 4 - update this function"); - - return tensor->ne[0]*tensor->ne[1]*tensor->ne[2]*tensor->ne[3]; -} - -GGML_CALL int64_t ggml_nrows(const struct ggml_tensor * tensor) { - static_assert(GGML_MAX_DIMS == 4, "GGML_MAX_DIMS is not 4 - update this function"); - - return tensor->ne[1]*tensor->ne[2]*tensor->ne[3]; -} - -GGML_CALL size_t ggml_nbytes(const struct ggml_tensor * tensor) { - size_t nbytes; - size_t blck_size = ggml_blck_size(tensor->type); - if (blck_size == 1) { - nbytes = ggml_type_size(tensor->type); - for (int i = 0; i < GGML_MAX_DIMS; ++i) { - nbytes += (tensor->ne[i] - 1)*tensor->nb[i]; - } - } - else { - nbytes = tensor->ne[0]*tensor->nb[0]/blck_size; - for (int i = 1; i < GGML_MAX_DIMS; ++i) { - nbytes += (tensor->ne[i] - 1)*tensor->nb[i]; - } - } - - return nbytes; -} - -size_t ggml_nbytes_pad(const struct ggml_tensor * tensor) { - return GGML_PAD(ggml_nbytes(tensor), GGML_MEM_ALIGN); -} - -GGML_CALL int ggml_blck_size(enum ggml_type type) { - return type_traits[type].blck_size; -} - -GGML_CALL size_t ggml_type_size(enum ggml_type type) { - return type_traits[type].type_size; -} - -GGML_CALL size_t ggml_row_size(enum ggml_type type, int64_t ne) { - assert(ne % ggml_blck_size(type) == 0); - return ggml_type_size(type)*ne/ggml_blck_size(type); -} - -double ggml_type_sizef(enum ggml_type type) { - return ((double)(type_traits[type].type_size))/type_traits[type].blck_size; -} - -GGML_CALL const char * ggml_type_name(enum ggml_type type) { - return type_traits[type].type_name; -} - -GGML_CALL bool ggml_is_quantized(enum ggml_type type) { - return type_traits[type].is_quantized; -} - -GGML_CALL const char * ggml_op_name(enum ggml_op op) { - return GGML_OP_NAME[op]; -} - -const char * ggml_op_symbol(enum ggml_op op) { - return GGML_OP_SYMBOL[op]; -} - -const char * ggml_unary_op_name(enum ggml_unary_op op) { - return GGML_UNARY_OP_NAME[op]; -} - -GGML_CALL const char * ggml_op_desc(const struct ggml_tensor * t) { - if (t->op == GGML_OP_UNARY) { - enum ggml_unary_op uop = ggml_get_unary_op(t); - return ggml_unary_op_name(uop); - } - else { - return ggml_op_name(t->op); - } -} - -GGML_CALL size_t ggml_element_size(const struct ggml_tensor * tensor) { - return ggml_type_size(tensor->type); -} - -bool ggml_is_scalar(const struct ggml_tensor * tensor) { - static_assert(GGML_MAX_DIMS == 4, "GGML_MAX_DIMS is not 4 - update this function"); - - return tensor->ne[0] == 1 && tensor->ne[1] == 1 && tensor->ne[2] == 1 && tensor->ne[3] == 1; -} - -bool ggml_is_vector(const struct ggml_tensor * tensor) { - static_assert(GGML_MAX_DIMS == 4, "GGML_MAX_DIMS is not 4 - update this function"); - - return tensor->ne[1] == 1 && tensor->ne[2] == 1 && tensor->ne[3] == 1; -} - -bool ggml_is_matrix(const struct ggml_tensor * tensor) { - static_assert(GGML_MAX_DIMS == 4, "GGML_MAX_DIMS is not 4 - update this function"); - - return tensor->ne[2] == 1 && tensor->ne[3] == 1; -} - -bool ggml_is_3d(const struct ggml_tensor * tensor) { - return tensor->ne[3] == 1; -} - -int ggml_n_dims(const struct ggml_tensor * tensor) { - for (int i = GGML_MAX_DIMS - 1; i >= 1; --i) { - if (tensor->ne[i] > 1) { - return i + 1; - } - } - return 1; -} - -static inline bool ggml_can_mul_mat(const struct ggml_tensor * t0, const struct ggml_tensor * t1) { - static_assert(GGML_MAX_DIMS == 4, "GGML_MAX_DIMS is not 4 - update this function"); - - return (t0->ne[0] == t1->ne[0]) && - (t1->ne[2]%t0->ne[2] == 0) && // verify t0 is broadcastable - (t1->ne[3]%t0->ne[3] == 0); -} - -static inline bool ggml_can_out_prod(const struct ggml_tensor * t0, const struct ggml_tensor * t1) { - static_assert(GGML_MAX_DIMS == 4, "GGML_MAX_DIMS is not 4 - update this function"); - - return (t0->ne[1] == t1->ne[1]) && - (t1->ne[2]%t0->ne[2] == 0) && // verify t0 is broadcastable - (t1->ne[3]%t0->ne[3] == 0); -} - -enum ggml_type ggml_ftype_to_ggml_type(enum ggml_ftype ftype) { - enum ggml_type wtype = GGML_TYPE_COUNT; - - switch (ftype) { - case GGML_FTYPE_ALL_F32: wtype = GGML_TYPE_F32; break; - case GGML_FTYPE_MOSTLY_F16: wtype = GGML_TYPE_F16; break; - case GGML_FTYPE_MOSTLY_Q4_0: wtype = GGML_TYPE_Q4_0; break; - case GGML_FTYPE_MOSTLY_Q4_1: wtype = GGML_TYPE_Q4_1; break; - case GGML_FTYPE_MOSTLY_Q5_0: wtype = GGML_TYPE_Q5_0; break; - case GGML_FTYPE_MOSTLY_Q5_1: wtype = GGML_TYPE_Q5_1; break; - case GGML_FTYPE_MOSTLY_Q8_0: wtype = GGML_TYPE_Q8_0; break; - case GGML_FTYPE_MOSTLY_Q2_K: wtype = GGML_TYPE_Q2_K; break; - case GGML_FTYPE_MOSTLY_Q3_K: wtype = GGML_TYPE_Q3_K; break; - case GGML_FTYPE_MOSTLY_Q4_K: wtype = GGML_TYPE_Q4_K; break; - case GGML_FTYPE_MOSTLY_Q5_K: wtype = GGML_TYPE_Q5_K; break; - case GGML_FTYPE_MOSTLY_Q6_K: wtype = GGML_TYPE_Q6_K; break; - case GGML_FTYPE_MOSTLY_IQ2_XXS: wtype = GGML_TYPE_IQ2_XXS; break; - case GGML_FTYPE_MOSTLY_IQ2_XS: wtype = GGML_TYPE_IQ2_XS; break; - case GGML_FTYPE_MOSTLY_IQ3_XXS: wtype = GGML_TYPE_IQ3_XXS; break; - case GGML_FTYPE_MOSTLY_IQ1_S: wtype = GGML_TYPE_IQ1_S; break; - case GGML_FTYPE_MOSTLY_IQ1_M: wtype = GGML_TYPE_IQ1_M; break; - case GGML_FTYPE_MOSTLY_IQ4_NL: wtype = GGML_TYPE_IQ4_NL; break; - case GGML_FTYPE_MOSTLY_IQ4_XS: wtype = GGML_TYPE_IQ4_XS; break; - case GGML_FTYPE_MOSTLY_IQ3_S: wtype = GGML_TYPE_IQ3_S; break; - case GGML_FTYPE_MOSTLY_IQ2_S: wtype = GGML_TYPE_IQ2_S; break; - case GGML_FTYPE_UNKNOWN: wtype = GGML_TYPE_COUNT; break; - case GGML_FTYPE_MOSTLY_Q4_1_SOME_F16: wtype = GGML_TYPE_COUNT; break; - } - - GGML_ASSERT(wtype != GGML_TYPE_COUNT); - - return wtype; -} - -size_t ggml_tensor_overhead(void) { - return GGML_OBJECT_SIZE + GGML_TENSOR_SIZE; -} - -GGML_CALL bool ggml_is_transposed(const struct ggml_tensor * tensor) { - return tensor->nb[0] > tensor->nb[1]; -} - -GGML_CALL bool ggml_is_contiguous(const struct ggml_tensor * tensor) { - static_assert(GGML_MAX_DIMS == 4, "GGML_MAX_DIMS is not 4 - update this function"); - - return - tensor->nb[0] == ggml_type_size(tensor->type) && - tensor->nb[1] == (tensor->nb[0]*tensor->ne[0])/ggml_blck_size(tensor->type) && - tensor->nb[2] == tensor->nb[1]*tensor->ne[1] && - tensor->nb[3] == tensor->nb[2]*tensor->ne[2]; -} - -static inline bool ggml_is_contiguous_except_dim_1(const struct ggml_tensor * tensor) { - static_assert(GGML_MAX_DIMS == 4, "GGML_MAX_DIMS is not 4 - update this function"); - - return - tensor->nb[0] == ggml_type_size(tensor->type) && - tensor->nb[2] == tensor->nb[1]*tensor->ne[1] && - tensor->nb[3] == tensor->nb[2]*tensor->ne[2]; -} - -GGML_CALL bool ggml_is_permuted(const struct ggml_tensor * tensor) { - static_assert(GGML_MAX_DIMS == 4, "GGML_MAX_DIMS is not 4 - update this function"); - - return tensor->nb[0] > tensor->nb[1] || tensor->nb[1] > tensor->nb[2] || tensor->nb[2] > tensor->nb[3]; -} - -static inline bool ggml_is_padded_1d(const struct ggml_tensor * tensor) { - static_assert(GGML_MAX_DIMS == 4, "GGML_MAX_DIMS is not 4 - update this function"); - - return - tensor->nb[0] == ggml_type_size(tensor->type) && - tensor->nb[2] == tensor->nb[1]*tensor->ne[1] && - tensor->nb[3] == tensor->nb[2]*tensor->ne[2]; -} - -GGML_CALL bool ggml_is_empty(const struct ggml_tensor * tensor) { - for (int i = 0; i < GGML_MAX_DIMS; ++i) { - if (tensor->ne[i] == 0) { - // empty if any dimension has no elements - return true; - } - } - return false; -} - -bool ggml_are_same_shape(const struct ggml_tensor * t0, const struct ggml_tensor * t1) { - static_assert(GGML_MAX_DIMS == 4, "GGML_MAX_DIMS is not 4 - update this function"); - - return - (t0->ne[0] == t1->ne[0] ) && - (t0->ne[1] == t1->ne[1] ) && - (t0->ne[2] == t1->ne[2] ) && - (t0->ne[3] == t1->ne[3] ); -} - -// check if t1 can be represented as a repeatition of t0 -static inline bool ggml_can_repeat(const struct ggml_tensor * t0, const struct ggml_tensor * t1) { - static_assert(GGML_MAX_DIMS == 4, "GGML_MAX_DIMS is not 4 - update this function"); - - return ggml_is_empty(t0) ? ggml_is_empty(t1) : - (t1->ne[0]%t0->ne[0] == 0) && - (t1->ne[1]%t0->ne[1] == 0) && - (t1->ne[2]%t0->ne[2] == 0) && - (t1->ne[3]%t0->ne[3] == 0); -} - -static inline bool ggml_can_repeat_rows(const struct ggml_tensor * t0, const struct ggml_tensor * t1) { - static_assert(GGML_MAX_DIMS == 4, "GGML_MAX_DIMS is not 4 - update this function"); - - return (t0->ne[0] == t1->ne[0]) && ggml_can_repeat(t0, t1); -} - -static inline int ggml_up32(int n) { - return (n + 31) & ~31; -} - -//static inline int ggml_up64(int n) { -// return (n + 63) & ~63; -//} - -static inline int ggml_up(int n, int m) { - // assert m is a power of 2 - GGML_ASSERT((m & (m - 1)) == 0); - return (n + m - 1) & ~(m - 1); -} - -// assert that pointer is aligned to GGML_MEM_ALIGN -#define ggml_assert_aligned(ptr) \ - GGML_ASSERT(((uintptr_t) (ptr))%GGML_MEM_ALIGN == 0) - -//////////////////////////////////////////////////////////////////////////////// - -struct ggml_context * ggml_init(struct ggml_init_params params) { - // make this function thread safe - ggml_critical_section_start(); - - static bool is_first_call = true; - - if (is_first_call) { - // initialize time system (required on Windows) - ggml_time_init(); - - // initialize GELU, Quick GELU, SILU and EXP F32 tables - { - const uint64_t t_start = ggml_time_us(); UNUSED(t_start); - - ggml_fp16_t ii; - for (int i = 0; i < (1 << 16); ++i) { - uint16_t ui = i; - memcpy(&ii, &ui, sizeof(ii)); - const float f = ggml_table_f32_f16[i] = GGML_COMPUTE_FP16_TO_FP32(ii); - ggml_table_gelu_f16[i] = GGML_FP32_TO_FP16(ggml_gelu_f32(f)); - ggml_table_gelu_quick_f16[i] = GGML_FP32_TO_FP16(ggml_gelu_quick_f32(f)); - ggml_table_silu_f16[i] = GGML_FP32_TO_FP16(ggml_silu_f32(f)); - ggml_table_exp_f16[i] = GGML_FP32_TO_FP16(expf(f)); - } - - const uint64_t t_end = ggml_time_us(); UNUSED(t_end); - - GGML_PRINT_DEBUG("%s: GELU, Quick GELU, SILU and EXP tables initialized in %f ms\n", __func__, (t_end - t_start)/1000.0f); - } - - // initialize g_state - { - const uint64_t t_start = ggml_time_us(); UNUSED(t_start); - - g_state = (struct ggml_state) { - /*.contexts =*/ { { 0 } }, - /*.numa =*/ { - .n_nodes = 0, - .total_cpus = 0, - }, - }; - - for (int i = 0; i < GGML_MAX_CONTEXTS; ++i) { - g_state.contexts[i].used = false; - } - - const uint64_t t_end = ggml_time_us(); UNUSED(t_end); - - GGML_PRINT_DEBUG("%s: g_state initialized in %f ms\n", __func__, (t_end - t_start)/1000.0f); - } - -#if defined(GGML_USE_CLBLAST) - if (isOpenCLSupported) { - ggml_cl_init(); - } -#endif - - ggml_setup_op_has_task_pass(); - - is_first_call = false; - } - - // find non-used context in g_state - struct ggml_context * ctx = NULL; - - for (int i = 0; i < GGML_MAX_CONTEXTS; i++) { - if (!g_state.contexts[i].used) { - g_state.contexts[i].used = true; - ctx = &g_state.contexts[i].context; - - GGML_PRINT_DEBUG("%s: found unused context %d\n", __func__, i); - break; - } - } - - if (ctx == NULL) { - GGML_PRINT_DEBUG("%s: no unused context found\n", __func__); - - ggml_critical_section_end(); - - return NULL; - } - - // allow to call ggml_init with 0 size - if (params.mem_size == 0) { - params.mem_size = GGML_MEM_ALIGN; - } - - const size_t mem_size = params.mem_buffer ? params.mem_size : GGML_PAD(params.mem_size, GGML_MEM_ALIGN); - - *ctx = (struct ggml_context) { - /*.mem_size =*/ mem_size, - /*.mem_buffer =*/ params.mem_buffer ? params.mem_buffer : GGML_ALIGNED_MALLOC(mem_size), - /*.mem_buffer_owned =*/ params.mem_buffer ? false : true, - /*.no_alloc =*/ params.no_alloc, - /*.no_alloc_save =*/ params.no_alloc, - /*.n_objects =*/ 0, - /*.objects_begin =*/ NULL, - /*.objects_end =*/ NULL, - /*.scratch =*/ { 0, 0, NULL, }, - /*.scratch_save =*/ { 0, 0, NULL, }, - }; - - GGML_ASSERT(ctx->mem_buffer != NULL); - - ggml_assert_aligned(ctx->mem_buffer); - - GGML_PRINT_DEBUG("%s: context initialized\n", __func__); - - ggml_critical_section_end(); - - return ctx; -} - -void ggml_free(struct ggml_context * ctx) { - if (ctx == NULL) { - return; - } - - // make this function thread safe - ggml_critical_section_start(); - - bool found = false; - - for (int i = 0; i < GGML_MAX_CONTEXTS; i++) { - if (&g_state.contexts[i].context == ctx) { - g_state.contexts[i].used = false; - - GGML_PRINT_DEBUG("%s: context %d has been freed. memory used = %zu\n", - __func__, i, ggml_used_mem(ctx)); - - if (ctx->mem_buffer_owned) { - GGML_ALIGNED_FREE(ctx->mem_buffer); - } - - found = true; - break; - } - } - - if (!found) { - GGML_PRINT_DEBUG("%s: context not found\n", __func__); - } - - ggml_critical_section_end(); -} - -size_t ggml_used_mem(const struct ggml_context * ctx) { - return ctx->objects_end == NULL ? 0 : ctx->objects_end->offs + ctx->objects_end->size; -} - -size_t ggml_set_scratch(struct ggml_context * ctx, struct ggml_scratch scratch) { - const size_t result = ctx->scratch.data ? ctx->scratch.offs : 0; - - ctx->scratch = scratch; - - return result; -} - -bool ggml_get_no_alloc(struct ggml_context * ctx) { - return ctx->no_alloc; -} - -void ggml_set_no_alloc(struct ggml_context * ctx, bool no_alloc) { - ctx->no_alloc = no_alloc; -} - -void * ggml_get_mem_buffer(const struct ggml_context * ctx) { - return ctx->mem_buffer; -} - -size_t ggml_get_mem_size(const struct ggml_context * ctx) { - return ctx->mem_size; -} - -size_t ggml_get_max_tensor_size(const struct ggml_context * ctx) { - size_t max_size = 0; - - for (struct ggml_tensor * tensor = ggml_get_first_tensor(ctx); tensor != NULL; tensor = ggml_get_next_tensor(ctx, tensor)) { - size_t bytes = ggml_nbytes(tensor); - max_size = MAX(max_size, bytes); - } - - return max_size; -} - -// IMPORTANT: -// when creating "opt" tensors, always save and load the scratch buffer -// this is an error prone process, but it is necessary to support inplace -// operators when using scratch buffers -// TODO: implement a better way -static void ggml_scratch_save(struct ggml_context * ctx) { - // this is needed to allow opt tensors to store their data - // TODO: again, need to find a better way - ctx->no_alloc_save = ctx->no_alloc; - ctx->no_alloc = false; - - ctx->scratch_save = ctx->scratch; - ctx->scratch.data = NULL; -} - -static void ggml_scratch_load(struct ggml_context * ctx) { - ctx->no_alloc = ctx->no_alloc_save; - - ctx->scratch = ctx->scratch_save; -} - -//////////////////////////////////////////////////////////////////////////////// - -static struct ggml_object * ggml_new_object(struct ggml_context * ctx, enum ggml_object_type type, size_t size) { - // always insert objects at the end of the context's memory pool - struct ggml_object * obj_cur = ctx->objects_end; - - const size_t cur_offs = obj_cur == NULL ? 0 : obj_cur->offs; - const size_t cur_size = obj_cur == NULL ? 0 : obj_cur->size; - const size_t cur_end = cur_offs + cur_size; - - // align to GGML_MEM_ALIGN - size_t size_needed = GGML_PAD(size, GGML_MEM_ALIGN); - - char * const mem_buffer = ctx->mem_buffer; - struct ggml_object * const obj_new = (struct ggml_object *)(mem_buffer + cur_end); - - if (cur_end + size_needed + GGML_OBJECT_SIZE > ctx->mem_size) { - GGML_PRINT("%s: not enough space in the context's memory pool (needed %zu, available %zu)\n", - __func__, cur_end + size_needed, ctx->mem_size); - assert(false); - return NULL; - } - - *obj_new = (struct ggml_object) { - .offs = cur_end + GGML_OBJECT_SIZE, - .size = size_needed, - .next = NULL, - .type = type, - }; - - ggml_assert_aligned(mem_buffer + obj_new->offs); - - if (obj_cur != NULL) { - obj_cur->next = obj_new; - } else { - // this is the first object in this context - ctx->objects_begin = obj_new; - } - - ctx->objects_end = obj_new; - - //printf("%s: inserted new object at %zu, size = %zu\n", __func__, cur_end, obj_new->size); - - return obj_new; -} - -static struct ggml_tensor * ggml_new_tensor_impl( - struct ggml_context * ctx, - enum ggml_type type, - int n_dims, - const int64_t * ne, - struct ggml_tensor * view_src, - size_t view_offs) { - - assert(n_dims >= 1 && n_dims <= GGML_MAX_DIMS); - - // find the base tensor and absolute offset - if (view_src != NULL && view_src->view_src != NULL) { - view_offs += view_src->view_offs; - view_src = view_src->view_src; - } - - size_t data_size = ggml_row_size(type, ne[0]); - for (int i = 1; i < n_dims; i++) { - data_size *= ne[i]; - } - - GGML_ASSERT(view_src == NULL || data_size == 0 || data_size + view_offs <= ggml_nbytes(view_src)); - - void * data = view_src != NULL ? view_src->data : NULL; - if (data != NULL) { - data = (char *) data + view_offs; - } - - size_t obj_alloc_size = 0; - - if (view_src == NULL && !ctx->no_alloc) { - if (ctx->scratch.data != NULL) { - // allocate tensor data in the scratch buffer - if (ctx->scratch.offs + data_size > ctx->scratch.size) { - GGML_PRINT("%s: not enough space in the scratch memory pool (needed %zu, available %zu)\n", - __func__, ctx->scratch.offs + data_size, ctx->scratch.size); - assert(false); - return NULL; - } - - data = (char * const) ctx->scratch.data + ctx->scratch.offs; - - ctx->scratch.offs += data_size; - } else { - // allocate tensor data in the context's memory pool - obj_alloc_size = data_size; - } - } - - struct ggml_object * const obj_new = ggml_new_object(ctx, GGML_OBJECT_TYPE_TENSOR, GGML_TENSOR_SIZE + obj_alloc_size); - - // TODO: for recoverable errors, we would need to free the data allocated from the scratch buffer here - - struct ggml_tensor * const result = (struct ggml_tensor *)((char *)ctx->mem_buffer + obj_new->offs); - - *result = (struct ggml_tensor) { - /*.type =*/ type, - /*.backend =*/ GGML_BACKEND_TYPE_CPU, - /*.buffer =*/ NULL, - /*.ne =*/ { 1, 1, 1, 1 }, - /*.nb =*/ { 0, 0, 0, 0 }, - /*.op =*/ GGML_OP_NONE, - /*.op_params =*/ { 0 }, - /*.flags =*/ 0, - /*.grad =*/ NULL, - /*.src =*/ { NULL }, - /*.perf_runs =*/ 0, - /*.perf_cycles =*/ 0, - /*.perf_time_us =*/ 0, - /*.view_src =*/ view_src, - /*.view_offs =*/ view_offs, - /*.data =*/ obj_alloc_size > 0 ? (void *)(result + 1) : data, - /*.name =*/ { 0 }, - /*.extra =*/ NULL, - /*.padding =*/ { 0 }, - }; - - // TODO: this should not be needed as long as we don't rely on aligned SIMD loads - //ggml_assert_aligned(result->data); - - for (int i = 0; i < n_dims; i++) { - result->ne[i] = ne[i]; - } - - result->nb[0] = ggml_type_size(type); - result->nb[1] = result->nb[0]*(result->ne[0]/ggml_blck_size(type)); - for (int i = 2; i < GGML_MAX_DIMS; i++) { - result->nb[i] = result->nb[i - 1]*result->ne[i - 1]; - } - - ctx->n_objects++; - - return result; -} - -struct ggml_tensor * ggml_new_tensor( - struct ggml_context * ctx, - enum ggml_type type, - int n_dims, - const int64_t * ne) { - return ggml_new_tensor_impl(ctx, type, n_dims, ne, NULL, 0); -} - -struct ggml_tensor * ggml_new_tensor_1d( - struct ggml_context * ctx, - enum ggml_type type, - int64_t ne0) { - return ggml_new_tensor(ctx, type, 1, &ne0); -} - -struct ggml_tensor * ggml_new_tensor_2d( - struct ggml_context * ctx, - enum ggml_type type, - int64_t ne0, - int64_t ne1) { - const int64_t ne[2] = { ne0, ne1 }; - return ggml_new_tensor(ctx, type, 2, ne); -} - -struct ggml_tensor * ggml_new_tensor_3d( - struct ggml_context * ctx, - enum ggml_type type, - int64_t ne0, - int64_t ne1, - int64_t ne2) { - const int64_t ne[3] = { ne0, ne1, ne2 }; - return ggml_new_tensor(ctx, type, 3, ne); -} - -struct ggml_tensor * ggml_new_tensor_4d( - struct ggml_context * ctx, - enum ggml_type type, - int64_t ne0, - int64_t ne1, - int64_t ne2, - int64_t ne3) { - const int64_t ne[4] = { ne0, ne1, ne2, ne3 }; - return ggml_new_tensor(ctx, type, 4, ne); -} - -struct ggml_tensor * ggml_new_i32(struct ggml_context * ctx, int32_t value) { - ggml_scratch_save(ctx); - - struct ggml_tensor * result = ggml_new_tensor_1d(ctx, GGML_TYPE_I32, 1); - - ggml_scratch_load(ctx); - - ggml_set_i32(result, value); - - return result; -} - -struct ggml_tensor * ggml_new_f32(struct ggml_context * ctx, float value) { - ggml_scratch_save(ctx); - - struct ggml_tensor * result = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, 1); - - ggml_scratch_load(ctx); - - ggml_set_f32(result, value); - - return result; -} - -struct ggml_tensor * ggml_dup_tensor(struct ggml_context * ctx, const struct ggml_tensor * src) { - return ggml_new_tensor(ctx, src->type, GGML_MAX_DIMS, src->ne); -} - -static void ggml_set_op_params(struct ggml_tensor * tensor, const void * params, size_t params_size) { - GGML_ASSERT(tensor != NULL); // silence -Warray-bounds warnings - assert(params_size <= GGML_MAX_OP_PARAMS); - memcpy(tensor->op_params, params, params_size); -} - -static int32_t ggml_get_op_params_i32(const struct ggml_tensor * tensor, uint32_t i) { - assert(i < GGML_MAX_OP_PARAMS / sizeof(int32_t)); - return ((const int32_t *)(tensor->op_params))[i]; -} - -static float ggml_get_op_params_f32(const struct ggml_tensor * tensor, uint32_t i) { - assert(i < GGML_MAX_OP_PARAMS / sizeof(float)); - return ((const float *)(tensor->op_params))[i]; -} - -static void ggml_set_op_params_i32(struct ggml_tensor * tensor, uint32_t i, int32_t value) { - assert(i < GGML_MAX_OP_PARAMS / sizeof(int32_t)); - ((int32_t *)(tensor->op_params))[i] = value; -} - -static void ggml_set_op_params_f32(struct ggml_tensor * tensor, uint32_t i, float value) { - assert(i < GGML_MAX_OP_PARAMS / sizeof(float)); - ((float *)(tensor->op_params))[i] = value; -} - -struct ggml_tensor * ggml_set_zero(struct ggml_tensor * tensor) { - memset(tensor->data, 0, ggml_nbytes(tensor)); - return tensor; -} - -struct ggml_tensor * ggml_set_i32 (struct ggml_tensor * tensor, int32_t value) { - const int n = ggml_nrows(tensor); - const int nc = tensor->ne[0]; - const size_t n1 = tensor->nb[1]; - - char * const data = tensor->data; - - switch (tensor->type) { - case GGML_TYPE_I8: - { - assert(tensor->nb[0] == sizeof(int8_t)); - for (int i = 0; i < n; i++) { - ggml_vec_set_i8(nc, (int8_t *)(data + i*n1), value); - } - } break; - case GGML_TYPE_I16: - { - assert(tensor->nb[0] == sizeof(int16_t)); - for (int i = 0; i < n; i++) { - ggml_vec_set_i16(nc, (int16_t *)(data + i*n1), value); - } - } break; - case GGML_TYPE_I32: - { - assert(tensor->nb[0] == sizeof(int32_t)); - for (int i = 0; i < n; i++) { - ggml_vec_set_i32(nc, (int32_t *)(data + i*n1), value); - } - } break; - case GGML_TYPE_F16: - { - assert(tensor->nb[0] == sizeof(ggml_fp16_t)); - for (int i = 0; i < n; i++) { - ggml_vec_set_f16(nc, (ggml_fp16_t *)(data + i*n1), GGML_FP32_TO_FP16(value)); - } - } break; - case GGML_TYPE_F32: - { - assert(tensor->nb[0] == sizeof(float)); - for (int i = 0; i < n; i++) { - ggml_vec_set_f32(nc, (float *)(data + i*n1), value); - } - } break; - default: - { - GGML_ASSERT(false); - } break; - } - - return tensor; -} - -struct ggml_tensor * ggml_set_f32(struct ggml_tensor * tensor, float value) { - const int n = ggml_nrows(tensor); - const int nc = tensor->ne[0]; - const size_t n1 = tensor->nb[1]; - - char * const data = tensor->data; - - switch (tensor->type) { - case GGML_TYPE_I8: - { - assert(tensor->nb[0] == sizeof(int8_t)); - for (int i = 0; i < n; i++) { - ggml_vec_set_i8(nc, (int8_t *)(data + i*n1), value); - } - } break; - case GGML_TYPE_I16: - { - assert(tensor->nb[0] == sizeof(int16_t)); - for (int i = 0; i < n; i++) { - ggml_vec_set_i16(nc, (int16_t *)(data + i*n1), value); - } - } break; - case GGML_TYPE_I32: - { - assert(tensor->nb[0] == sizeof(int32_t)); - for (int i = 0; i < n; i++) { - ggml_vec_set_i32(nc, (int32_t *)(data + i*n1), value); - } - } break; - case GGML_TYPE_F16: - { - assert(tensor->nb[0] == sizeof(ggml_fp16_t)); - for (int i = 0; i < n; i++) { - ggml_vec_set_f16(nc, (ggml_fp16_t *)(data + i*n1), GGML_FP32_TO_FP16(value)); - } - } break; - case GGML_TYPE_F32: - { - assert(tensor->nb[0] == sizeof(float)); - for (int i = 0; i < n; i++) { - ggml_vec_set_f32(nc, (float *)(data + i*n1), value); - } - } break; - default: - { - GGML_ASSERT(false); - } break; - } - - return tensor; -} - -void ggml_unravel_index(const struct ggml_tensor * tensor, int64_t i, int64_t * i0, int64_t * i1, int64_t * i2, int64_t * i3) { - const int64_t ne2 = tensor->ne[2]; - const int64_t ne1 = tensor->ne[1]; - const int64_t ne0 = tensor->ne[0]; - - const int64_t i3_ = (i/(ne2*ne1*ne0)); - const int64_t i2_ = (i - i3_*ne2*ne1*ne0)/(ne1*ne0); - const int64_t i1_ = (i - i3_*ne2*ne1*ne0 - i2_*ne1*ne0)/ne0; - const int64_t i0_ = (i - i3_*ne2*ne1*ne0 - i2_*ne1*ne0 - i1_*ne0); - - if (i0) { - * i0 = i0_; - } - if (i1) { - * i1 = i1_; - } - if (i2) { - * i2 = i2_; - } - if (i3) { - * i3 = i3_; - } -} - -int32_t ggml_get_i32_1d(const struct ggml_tensor * tensor, int i) { - if (!ggml_is_contiguous(tensor)) { - int64_t id[4] = { 0, 0, 0, 0 }; - ggml_unravel_index(tensor, i, &id[0], &id[1], &id[2], &id[3]); - return ggml_get_i32_nd(tensor, id[0], id[1], id[2], id[3]); - } - switch (tensor->type) { - case GGML_TYPE_I8: - { - GGML_ASSERT(tensor->nb[0] == sizeof(int8_t)); - return ((int8_t *)(tensor->data))[i]; - } - case GGML_TYPE_I16: - { - GGML_ASSERT(tensor->nb[0] == sizeof(int16_t)); - return ((int16_t *)(tensor->data))[i]; - } - case GGML_TYPE_I32: - { - GGML_ASSERT(tensor->nb[0] == sizeof(int32_t)); - return ((int32_t *)(tensor->data))[i]; - } - case GGML_TYPE_F16: - { - GGML_ASSERT(tensor->nb[0] == sizeof(ggml_fp16_t)); - return GGML_FP16_TO_FP32(((ggml_fp16_t *)(tensor->data))[i]); - } - case GGML_TYPE_F32: - { - GGML_ASSERT(tensor->nb[0] == sizeof(float)); - return ((float *)(tensor->data))[i]; - } - default: - { - GGML_ASSERT(false); - } - } - - return 0.0f; -} - -void ggml_set_i32_1d(const struct ggml_tensor * tensor, int i, int32_t value) { - if (!ggml_is_contiguous(tensor)) { - int64_t id[4] = { 0, 0, 0, 0 }; - ggml_unravel_index(tensor, i, &id[0], &id[1], &id[2], &id[3]); - ggml_set_i32_nd(tensor, id[0], id[1], id[2], id[3], value); - return; - } - switch (tensor->type) { - case GGML_TYPE_I8: - { - GGML_ASSERT(tensor->nb[0] == sizeof(int8_t)); - ((int8_t *)(tensor->data))[i] = value; - } break; - case GGML_TYPE_I16: - { - GGML_ASSERT(tensor->nb[0] == sizeof(int16_t)); - ((int16_t *)(tensor->data))[i] = value; - } break; - case GGML_TYPE_I32: - { - GGML_ASSERT(tensor->nb[0] == sizeof(int32_t)); - ((int32_t *)(tensor->data))[i] = value; - } break; - case GGML_TYPE_F16: - { - GGML_ASSERT(tensor->nb[0] == sizeof(ggml_fp16_t)); - ((ggml_fp16_t *)(tensor->data))[i] = GGML_FP32_TO_FP16(value); - } break; - case GGML_TYPE_F32: - { - GGML_ASSERT(tensor->nb[0] == sizeof(float)); - ((float *)(tensor->data))[i] = value; - } break; - default: - { - GGML_ASSERT(false); - } break; - } -} - -int32_t ggml_get_i32_nd(const struct ggml_tensor * tensor, int i0, int i1, int i2, int i3) { - void * data = (char *) tensor->data + i0*tensor->nb[0] + i1*tensor->nb[1] + i2*tensor->nb[2] + i3*tensor->nb[3]; - switch (tensor->type) { - case GGML_TYPE_I8: - return ((int8_t *) data)[0]; - case GGML_TYPE_I16: - return ((int16_t *) data)[0]; - case GGML_TYPE_I32: - return ((int32_t *) data)[0]; - case GGML_TYPE_F16: - return GGML_FP16_TO_FP32(((ggml_fp16_t *) data)[0]); - case GGML_TYPE_F32: - return ((float *) data)[0]; - default: - GGML_ASSERT(false); - } - - return 0.0f; -} - -void ggml_set_i32_nd(const struct ggml_tensor * tensor, int i0, int i1, int i2, int i3, int32_t value) { - void * data = (char *) tensor->data + i0*tensor->nb[0] + i1*tensor->nb[1] + i2*tensor->nb[2] + i3*tensor->nb[3]; - switch (tensor->type) { - case GGML_TYPE_I8: - { - ((int8_t *)(data))[0] = value; - } break; - case GGML_TYPE_I16: - { - ((int16_t *)(data))[0] = value; - } break; - case GGML_TYPE_I32: - { - ((int32_t *)(data))[0] = value; - } break; - case GGML_TYPE_F16: - { - ((ggml_fp16_t *)(data))[0] = GGML_FP32_TO_FP16(value); - } break; - case GGML_TYPE_F32: - { - ((float *)(data))[0] = value; - } break; - default: - { - GGML_ASSERT(false); - } break; - } -} - -float ggml_get_f32_1d(const struct ggml_tensor * tensor, int i) { - if (!ggml_is_contiguous(tensor)) { - int64_t id[4] = { 0, 0, 0, 0 }; - ggml_unravel_index(tensor, i, &id[0], &id[1], &id[2], &id[3]); - return ggml_get_f32_nd(tensor, id[0], id[1], id[2], id[3]); - } - switch (tensor->type) { - case GGML_TYPE_I8: - { - GGML_ASSERT(tensor->nb[0] == sizeof(int8_t)); - return ((int8_t *)(tensor->data))[i]; - } - case GGML_TYPE_I16: - { - GGML_ASSERT(tensor->nb[0] == sizeof(int16_t)); - return ((int16_t *)(tensor->data))[i]; - } - case GGML_TYPE_I32: - { - GGML_ASSERT(tensor->nb[0] == sizeof(int32_t)); - return ((int32_t *)(tensor->data))[i]; - } - case GGML_TYPE_F16: - { - GGML_ASSERT(tensor->nb[0] == sizeof(ggml_fp16_t)); - return GGML_FP16_TO_FP32(((ggml_fp16_t *)(tensor->data))[i]); - } - case GGML_TYPE_F32: - { - GGML_ASSERT(tensor->nb[0] == sizeof(float)); - return ((float *)(tensor->data))[i]; - } - default: - { - GGML_ASSERT(false); - } - } - - return 0.0f; -} - -void ggml_set_f32_1d(const struct ggml_tensor * tensor, int i, float value) { - if (!ggml_is_contiguous(tensor)) { - int64_t id[4] = { 0, 0, 0, 0 }; - ggml_unravel_index(tensor, i, &id[0], &id[1], &id[2], &id[3]); - ggml_set_f32_nd(tensor, id[0], id[1], id[2], id[3], value); - return; - } - switch (tensor->type) { - case GGML_TYPE_I8: - { - GGML_ASSERT(tensor->nb[0] == sizeof(int8_t)); - ((int8_t *)(tensor->data))[i] = value; - } break; - case GGML_TYPE_I16: - { - GGML_ASSERT(tensor->nb[0] == sizeof(int16_t)); - ((int16_t *)(tensor->data))[i] = value; - } break; - case GGML_TYPE_I32: - { - GGML_ASSERT(tensor->nb[0] == sizeof(int32_t)); - ((int32_t *)(tensor->data))[i] = value; - } break; - case GGML_TYPE_F16: - { - GGML_ASSERT(tensor->nb[0] == sizeof(ggml_fp16_t)); - ((ggml_fp16_t *)(tensor->data))[i] = GGML_FP32_TO_FP16(value); - } break; - case GGML_TYPE_F32: - { - GGML_ASSERT(tensor->nb[0] == sizeof(float)); - ((float *)(tensor->data))[i] = value; - } break; - default: - { - GGML_ASSERT(false); - } break; - } -} - -float ggml_get_f32_nd(const struct ggml_tensor * tensor, int i0, int i1, int i2, int i3) { - void * data = (char *) tensor->data + i0*tensor->nb[0] + i1*tensor->nb[1] + i2*tensor->nb[2] + i3*tensor->nb[3]; - switch (tensor->type) { - case GGML_TYPE_I8: - return ((int8_t *) data)[0]; - case GGML_TYPE_I16: - return ((int16_t *) data)[0]; - case GGML_TYPE_I32: - return ((int32_t *) data)[0]; - case GGML_TYPE_F16: - return GGML_FP16_TO_FP32(((ggml_fp16_t *) data)[0]); - case GGML_TYPE_F32: - return ((float *) data)[0]; - default: - GGML_ASSERT(false); - } - - return 0.0f; -} - -void ggml_set_f32_nd(const struct ggml_tensor * tensor, int i0, int i1, int i2, int i3, float value) { - void * data = (char *) tensor->data + i0*tensor->nb[0] + i1*tensor->nb[1] + i2*tensor->nb[2] + i3*tensor->nb[3]; - switch (tensor->type) { - case GGML_TYPE_I8: - { - ((int8_t *)(data))[0] = value; - } break; - case GGML_TYPE_I16: - { - ((int16_t *)(data))[0] = value; - } break; - case GGML_TYPE_I32: - { - ((int32_t *)(data))[0] = value; - } break; - case GGML_TYPE_F16: - { - ((ggml_fp16_t *)(data))[0] = GGML_FP32_TO_FP16(value); - } break; - case GGML_TYPE_F32: - { - ((float *)(data))[0] = value; - } break; - default: - { - GGML_ASSERT(false); - } break; - } -} - -void * ggml_get_data(const struct ggml_tensor * tensor) { - return tensor->data; -} - -float * ggml_get_data_f32(const struct ggml_tensor * tensor) { - assert(tensor->type == GGML_TYPE_F32); - return (float *)(tensor->data); -} - -GGML_CALL enum ggml_unary_op ggml_get_unary_op(const struct ggml_tensor * tensor) { - GGML_ASSERT(tensor->op == GGML_OP_UNARY); - return (enum ggml_unary_op) ggml_get_op_params_i32(tensor, 0); -} - -const char * ggml_get_name(const struct ggml_tensor * tensor) { - return tensor->name; -} - -struct ggml_tensor * ggml_set_name(struct ggml_tensor * tensor, const char * name) { - strncpy(tensor->name, name, sizeof(tensor->name) - 1); - tensor->name[sizeof(tensor->name) - 1] = '\0'; - return tensor; -} - -struct ggml_tensor * ggml_format_name(struct ggml_tensor * tensor, const char * fmt, ...) { - va_list args; - va_start(args, fmt); - vsnprintf(tensor->name, sizeof(tensor->name), fmt, args); - va_end(args); - return tensor; -} - -struct ggml_tensor * ggml_view_tensor( - struct ggml_context * ctx, - struct ggml_tensor * src) { - struct ggml_tensor * result = ggml_new_tensor_impl(ctx, src->type, GGML_MAX_DIMS, src->ne, src, 0); - ggml_format_name(result, "%s (view)", src->name); - - for (int i = 0; i < GGML_MAX_DIMS; i++) { - result->nb[i] = src->nb[i]; - } - - return result; -} - -struct ggml_tensor * ggml_get_first_tensor(const struct ggml_context * ctx) { - struct ggml_object * obj = ctx->objects_begin; - - char * const mem_buffer = ctx->mem_buffer; - - while (obj != NULL) { - if (obj->type == GGML_OBJECT_TYPE_TENSOR) { - return (struct ggml_tensor *)(mem_buffer + obj->offs); - } - - obj = obj->next; - } - - return NULL; -} - -struct ggml_tensor * ggml_get_next_tensor(const struct ggml_context * ctx, struct ggml_tensor * tensor) { - struct ggml_object * obj = (struct ggml_object *) ((char *)tensor - GGML_OBJECT_SIZE); - obj = obj->next; - - char * const mem_buffer = ctx->mem_buffer; - - while (obj != NULL) { - if (obj->type == GGML_OBJECT_TYPE_TENSOR) { - return (struct ggml_tensor *)(mem_buffer + obj->offs); - } - - obj = obj->next; - } - - return NULL; -} - -struct ggml_tensor * ggml_get_tensor(struct ggml_context * ctx, const char * name) { - struct ggml_object * obj = ctx->objects_begin; - - char * const mem_buffer = ctx->mem_buffer; - - while (obj != NULL) { - if (obj->type == GGML_OBJECT_TYPE_TENSOR) { - struct ggml_tensor * cur = (struct ggml_tensor *)(mem_buffer + obj->offs); - if (strcmp(cur->name, name) == 0) { - return cur; - } - } - - obj = obj->next; - } - - return NULL; -} - -//////////////////////////////////////////////////////////////////////////////// - -// ggml_dup - -static struct ggml_tensor * ggml_dup_impl( - struct ggml_context * ctx, - struct ggml_tensor * a, - bool inplace) { - bool is_node = false; - - if (!inplace && (a->grad)) { - is_node = true; - } - - struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a); - - result->op = GGML_OP_DUP; - result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src[0] = a; - - return result; -} - -struct ggml_tensor * ggml_dup( - struct ggml_context * ctx, - struct ggml_tensor * a) { - return ggml_dup_impl(ctx, a, false); -} - -struct ggml_tensor * ggml_dup_inplace( - struct ggml_context * ctx, - struct ggml_tensor * a) { - return ggml_dup_impl(ctx, a, true); -} - -// ggml_add - -static struct ggml_tensor * ggml_add_impl( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b, - bool inplace) { - GGML_ASSERT(ggml_can_repeat(b, a)); - - bool is_node = false; - - if (!inplace && (a->grad || b->grad)) { - // TODO: support backward pass for broadcasting - GGML_ASSERT(ggml_are_same_shape(a, b)); - is_node = true; - } - - struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a); - - result->op = GGML_OP_ADD; - result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src[0] = a; - result->src[1] = b; - - return result; -} - -struct ggml_tensor * ggml_add( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b) { - return ggml_add_impl(ctx, a, b, false); -} - -struct ggml_tensor * ggml_add_inplace( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b) { - return ggml_add_impl(ctx, a, b, true); -} - -// ggml_add_cast - -static struct ggml_tensor * ggml_add_cast_impl( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b, - enum ggml_type type) { - // TODO: support less-strict constraint - // GGML_ASSERT(ggml_can_repeat(b, a)); - GGML_ASSERT(ggml_can_repeat_rows(b, a)); - GGML_ASSERT(ggml_is_quantized(a->type) || a->type == GGML_TYPE_F16); // currently only supported for quantized input and f16 - - bool is_node = false; - - if (a->grad || b->grad) { - // TODO: support backward pass for broadcasting - GGML_ASSERT(ggml_are_same_shape(a, b)); - is_node = true; - } - - struct ggml_tensor * result = ggml_new_tensor(ctx, type, GGML_MAX_DIMS, a->ne); - - result->op = GGML_OP_ADD; - result->grad = is_node ? ggml_new_tensor(ctx, GGML_TYPE_F32, GGML_MAX_DIMS, a->ne) : NULL; - result->src[0] = a; - result->src[1] = b; - - return result; -} - -struct ggml_tensor * ggml_add_cast( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b, - enum ggml_type type) { - return ggml_add_cast_impl(ctx, a, b, type); -} - -// ggml_add1 - -static struct ggml_tensor * ggml_add1_impl( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b, - bool inplace) { - GGML_ASSERT(ggml_is_scalar(b)); - GGML_ASSERT(ggml_is_padded_1d(a)); - - bool is_node = false; - - if (a->grad || b->grad) { - is_node = true; - } - - struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a); - - result->op = GGML_OP_ADD1; - result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src[0] = a; - result->src[1] = b; - - return result; -} - -struct ggml_tensor * ggml_add1( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b) { - return ggml_add1_impl(ctx, a, b, false); -} - -struct ggml_tensor * ggml_add1_inplace( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b) { - return ggml_add1_impl(ctx, a, b, true); -} - -// ggml_acc - -static struct ggml_tensor * ggml_acc_impl( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b, - size_t nb1, - size_t nb2, - size_t nb3, - size_t offset, - bool inplace) { - GGML_ASSERT(ggml_nelements(b) <= ggml_nelements(a)); - GGML_ASSERT(ggml_is_contiguous(a)); - GGML_ASSERT(a->type == GGML_TYPE_F32); - GGML_ASSERT(b->type == GGML_TYPE_F32); - - bool is_node = false; - - if (!inplace && (a->grad || b->grad)) { - is_node = true; - } - - struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a); - - int32_t params[] = { nb1, nb2, nb3, offset, inplace ? 1 : 0 }; - ggml_set_op_params(result, params, sizeof(params)); - - result->op = GGML_OP_ACC; - result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src[0] = a; - result->src[1] = b; - - return result; -} - -struct ggml_tensor * ggml_acc( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b, - size_t nb1, - size_t nb2, - size_t nb3, - size_t offset) { - return ggml_acc_impl(ctx, a, b, nb1, nb2, nb3, offset, false); -} - -struct ggml_tensor * ggml_acc_inplace( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b, - size_t nb1, - size_t nb2, - size_t nb3, - size_t offset) { - return ggml_acc_impl(ctx, a, b, nb1, nb2, nb3, offset, true); -} - -// ggml_sub - -static struct ggml_tensor * ggml_sub_impl( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b, - bool inplace) { - GGML_ASSERT(ggml_are_same_shape(a, b)); - - bool is_node = false; - - if (!inplace && (a->grad || b->grad)) { - is_node = true; - } - - struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a); - - result->op = GGML_OP_SUB; - result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src[0] = a; - result->src[1] = b; - - return result; -} - -struct ggml_tensor * ggml_sub( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b) { - return ggml_sub_impl(ctx, a, b, false); -} - -struct ggml_tensor * ggml_sub_inplace( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b) { - return ggml_sub_impl(ctx, a, b, true); -} - -// ggml_mul - -static struct ggml_tensor * ggml_mul_impl( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b, - bool inplace) { - GGML_ASSERT(ggml_can_repeat(b, a)); - - bool is_node = false; - - if (!inplace && (a->grad || b->grad)) { - // TODO: support backward pass for broadcasting - GGML_ASSERT(ggml_are_same_shape(a, b)); - is_node = true; - } - - if (inplace) { - GGML_ASSERT(!is_node); - } - - struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a); - - result->op = GGML_OP_MUL; - result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src[0] = a; - result->src[1] = b; - - return result; -} - -struct ggml_tensor * ggml_mul( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b) { - return ggml_mul_impl(ctx, a, b, false); -} - -struct ggml_tensor * ggml_mul_inplace( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b) { - return ggml_mul_impl(ctx, a, b, true); -} - -// ggml_div - -static struct ggml_tensor * ggml_div_impl( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b, - bool inplace) { - GGML_ASSERT(ggml_can_repeat(b, a)); - - bool is_node = false; - - if (!inplace && (a->grad || b->grad)) { - is_node = true; - } - - if (inplace) { - GGML_ASSERT(!is_node); - } - - struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a); - - result->op = GGML_OP_DIV; - result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src[0] = a; - result->src[1] = b; - - return result; -} - -struct ggml_tensor * ggml_div( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b) { - return ggml_div_impl(ctx, a, b, false); -} - -struct ggml_tensor * ggml_div_inplace( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b) { - return ggml_div_impl(ctx, a, b, true); -} - -// ggml_sqr - -static struct ggml_tensor * ggml_sqr_impl( - struct ggml_context * ctx, - struct ggml_tensor * a, - bool inplace) { - bool is_node = false; - - if (!inplace && (a->grad)) { - is_node = true; - } - - struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a); - - result->op = GGML_OP_SQR; - result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src[0] = a; - - return result; -} - -struct ggml_tensor * ggml_sqr( - struct ggml_context * ctx, - struct ggml_tensor * a) { - return ggml_sqr_impl(ctx, a, false); -} - -struct ggml_tensor * ggml_sqr_inplace( - struct ggml_context * ctx, - struct ggml_tensor * a) { - return ggml_sqr_impl(ctx, a, true); -} - -// ggml_sqrt - -static struct ggml_tensor * ggml_sqrt_impl( - struct ggml_context * ctx, - struct ggml_tensor * a, - bool inplace) { - bool is_node = false; - - if (!inplace && (a->grad)) { - is_node = true; - } - - struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a); - - result->op = GGML_OP_SQRT; - result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src[0] = a; - - return result; -} - -struct ggml_tensor * ggml_sqrt( - struct ggml_context * ctx, - struct ggml_tensor * a) { - return ggml_sqrt_impl(ctx, a, false); -} - -struct ggml_tensor * ggml_sqrt_inplace( - struct ggml_context * ctx, - struct ggml_tensor * a) { - return ggml_sqrt_impl(ctx, a, true); -} - -// ggml_log - -static struct ggml_tensor * ggml_log_impl( - struct ggml_context * ctx, - struct ggml_tensor * a, - bool inplace) { - bool is_node = false; - - if (!inplace && (a->grad)) { - is_node = true; - } - - struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a); - - result->op = GGML_OP_LOG; - result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src[0] = a; - - return result; -} - -struct ggml_tensor * ggml_log( - struct ggml_context * ctx, - struct ggml_tensor * a) { - return ggml_log_impl(ctx, a, false); -} - -struct ggml_tensor * ggml_log_inplace( - struct ggml_context * ctx, - struct ggml_tensor * a) { - return ggml_log_impl(ctx, a, true); -} - -// ggml_sum - -struct ggml_tensor * ggml_sum( - struct ggml_context * ctx, - struct ggml_tensor * a) { - bool is_node = false; - - if (a->grad) { - is_node = true; - } - - struct ggml_tensor * result = ggml_new_tensor_1d(ctx, a->type, 1); - - result->op = GGML_OP_SUM; - result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src[0] = a; - - return result; -} - -// ggml_sum_rows - -struct ggml_tensor * ggml_sum_rows( - struct ggml_context * ctx, - struct ggml_tensor * a) { - bool is_node = false; - - if (a->grad) { - is_node = true; - } - - int64_t ne[GGML_MAX_DIMS] = { 1 }; - for (int i = 1; i < GGML_MAX_DIMS; ++i) { - ne[i] = a->ne[i]; - } - - struct ggml_tensor * result = ggml_new_tensor(ctx, a->type, GGML_MAX_DIMS, ne); - - result->op = GGML_OP_SUM_ROWS; - result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src[0] = a; - - return result; -} - -// ggml_mean - -struct ggml_tensor * ggml_mean( - struct ggml_context * ctx, - struct ggml_tensor * a) { - bool is_node = false; - - if (a->grad) { - GGML_ASSERT(false); // TODO: implement - is_node = true; - } - - int64_t ne[4] = { 1, a->ne[1], a->ne[2], a->ne[3] }; - struct ggml_tensor * result = ggml_new_tensor(ctx, GGML_TYPE_F32, 4, ne); - - result->op = GGML_OP_MEAN; - result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src[0] = a; - - return result; -} - -// ggml_argmax - -struct ggml_tensor * ggml_argmax( - struct ggml_context * ctx, - struct ggml_tensor * a) { - GGML_ASSERT(ggml_is_matrix(a)); - bool is_node = false; - - if (a->grad) { - GGML_ASSERT(false); - is_node = true; - } - - struct ggml_tensor * result = ggml_new_tensor_1d(ctx, GGML_TYPE_I32, a->ne[1]); - - result->op = GGML_OP_ARGMAX; - result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src[0] = a; - - return result; -} - -// ggml_repeat - -struct ggml_tensor * ggml_repeat( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b) { - GGML_ASSERT(ggml_can_repeat(a, b)); - - bool is_node = false; - - if (a->grad) { - is_node = true; - } - - struct ggml_tensor * result = ggml_new_tensor(ctx, a->type, GGML_MAX_DIMS, b->ne); - - result->op = GGML_OP_REPEAT; - result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src[0] = a; - - return result; -} - -// ggml_repeat_back - -struct ggml_tensor * ggml_repeat_back( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b) { - GGML_ASSERT(ggml_can_repeat(b, a)); - - bool is_node = false; - - if (a->grad) { - is_node = true; - } - - if (ggml_are_same_shape(a, b) && !is_node) { - return a; - } - - struct ggml_tensor * result = ggml_new_tensor(ctx, a->type, GGML_MAX_DIMS, b->ne); - - result->op = GGML_OP_REPEAT_BACK; - result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src[0] = a; - - return result; -} - -// ggml_concat - -struct ggml_tensor * ggml_concat( - struct ggml_context* ctx, - struct ggml_tensor* a, - struct ggml_tensor* b) { - GGML_ASSERT(a->ne[0] == b->ne[0] && a->ne[1] == b->ne[1] && a->ne[3] == b->ne[3]); - - bool is_node = false; - - if (a->grad || b->grad) { - is_node = true; - } - - struct ggml_tensor * result = ggml_new_tensor_4d(ctx, a->type, a->ne[0], a->ne[1], a->ne[2] + b->ne[2], a->ne[3]); - - result->op = GGML_OP_CONCAT; - result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src[0] = a; - result->src[1] = b; - - return result; -} - -// ggml_abs - -struct ggml_tensor * ggml_abs( - struct ggml_context * ctx, - struct ggml_tensor * a) { - return ggml_unary(ctx, a, GGML_UNARY_OP_ABS); -} - -struct ggml_tensor * ggml_abs_inplace( - struct ggml_context * ctx, - struct ggml_tensor * a) { - return ggml_unary_inplace(ctx, a, GGML_UNARY_OP_ABS); -} - -// ggml_sgn - -struct ggml_tensor * ggml_sgn( - struct ggml_context * ctx, - struct ggml_tensor * a) { - return ggml_unary(ctx, a, GGML_UNARY_OP_SGN); -} - -struct ggml_tensor * ggml_sgn_inplace( - struct ggml_context * ctx, - struct ggml_tensor * a) { - return ggml_unary_inplace(ctx, a, GGML_UNARY_OP_SGN); -} - -// ggml_neg - -struct ggml_tensor * ggml_neg( - struct ggml_context * ctx, - struct ggml_tensor * a) { - return ggml_unary(ctx, a, GGML_UNARY_OP_NEG); -} - -struct ggml_tensor * ggml_neg_inplace( - struct ggml_context * ctx, - struct ggml_tensor * a) { - return ggml_unary_inplace(ctx, a, GGML_UNARY_OP_NEG); -} - -// ggml_step - -struct ggml_tensor * ggml_step( - struct ggml_context * ctx, - struct ggml_tensor * a) { - return ggml_unary(ctx, a, GGML_UNARY_OP_STEP); -} - -struct ggml_tensor * ggml_step_inplace( - struct ggml_context * ctx, - struct ggml_tensor * a) { - return ggml_unary_inplace(ctx, a, GGML_UNARY_OP_STEP); -} - -// ggml_tanh - -struct ggml_tensor * ggml_tanh( - struct ggml_context * ctx, - struct ggml_tensor * a) { - return ggml_unary(ctx, a, GGML_UNARY_OP_TANH); -} - -struct ggml_tensor * ggml_tanh_inplace( - struct ggml_context * ctx, - struct ggml_tensor * a) { - return ggml_unary_inplace(ctx, a, GGML_UNARY_OP_TANH); -} - -// ggml_elu - -struct ggml_tensor * ggml_elu( - struct ggml_context * ctx, - struct ggml_tensor * a) { - return ggml_unary(ctx, a, GGML_UNARY_OP_ELU); -} - -struct ggml_tensor * ggml_elu_inplace( - struct ggml_context * ctx, - struct ggml_tensor * a) { - return ggml_unary_inplace(ctx, a, GGML_UNARY_OP_ELU); -} - -// ggml_relu - -struct ggml_tensor * ggml_relu( - struct ggml_context * ctx, - struct ggml_tensor * a) { - return ggml_unary(ctx, a, GGML_UNARY_OP_RELU); -} - -struct ggml_tensor * ggml_relu_inplace( - struct ggml_context * ctx, - struct ggml_tensor * a) { - return ggml_unary_inplace(ctx, a, GGML_UNARY_OP_RELU); -} - -// ggml_leaky_relu - -struct ggml_tensor * ggml_leaky_relu( - struct ggml_context * ctx, - struct ggml_tensor * a, float negative_slope, bool inplace) { - bool is_node = false; - - if (!inplace && (a->grad)) { - is_node = true; - } - - struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a); - ggml_set_op_params(result, &negative_slope, sizeof(negative_slope)); - - result->op = GGML_OP_LEAKY_RELU; - result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src[0] = a; - - return result; -} - -// ggml_gelu - -struct ggml_tensor * ggml_gelu( - struct ggml_context * ctx, - struct ggml_tensor * a) { - return ggml_unary(ctx, a, GGML_UNARY_OP_GELU); -} - -struct ggml_tensor * ggml_gelu_inplace( - struct ggml_context * ctx, - struct ggml_tensor * a) { - return ggml_unary_inplace(ctx, a, GGML_UNARY_OP_GELU); -} - -// ggml_gelu_quick - -struct ggml_tensor * ggml_gelu_quick( - struct ggml_context * ctx, - struct ggml_tensor * a) { - return ggml_unary(ctx, a, GGML_UNARY_OP_GELU_QUICK); -} - -struct ggml_tensor * ggml_gelu_quick_inplace( - struct ggml_context * ctx, - struct ggml_tensor * a) { - return ggml_unary_inplace(ctx, a, GGML_UNARY_OP_GELU_QUICK); -} - -// ggml_silu - -struct ggml_tensor * ggml_silu( - struct ggml_context * ctx, - struct ggml_tensor * a) { - return ggml_unary(ctx, a, GGML_UNARY_OP_SILU); -} - -struct ggml_tensor * ggml_silu_inplace( - struct ggml_context * ctx, - struct ggml_tensor * a) { - return ggml_unary_inplace(ctx, a, GGML_UNARY_OP_SILU); -} - -// ggml_silu_back - -struct ggml_tensor * ggml_silu_back( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b) { - bool is_node = false; - - if (a->grad || b->grad) { - // TODO: implement backward - is_node = true; - } - - struct ggml_tensor * result = ggml_dup_tensor(ctx, a); - - result->op = GGML_OP_SILU_BACK; - result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src[0] = a; - result->src[1] = b; - - return result; -} - -// ggml hardswish -struct ggml_tensor * ggml_hardswish( - struct ggml_context * ctx, - struct ggml_tensor * a) { - return ggml_unary(ctx, a, GGML_UNARY_OP_HARDSWISH); -} - -// ggml hardsigmoid -struct ggml_tensor * ggml_hardsigmoid( - struct ggml_context * ctx, - struct ggml_tensor * a) { - return ggml_unary(ctx, a, GGML_UNARY_OP_HARDSIGMOID); -} - -// ggml_norm - -static struct ggml_tensor * ggml_norm_impl( - struct ggml_context * ctx, - struct ggml_tensor * a, - float eps, - bool inplace) { - bool is_node = false; - - if (!inplace && (a->grad)) { - GGML_ASSERT(false); // TODO: implement backward - is_node = true; - } - - struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a); - - ggml_set_op_params(result, &eps, sizeof(eps)); - - result->op = GGML_OP_NORM; - result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src[0] = a; - - return result; -} - -struct ggml_tensor * ggml_norm( - struct ggml_context * ctx, - struct ggml_tensor * a, - float eps) { - return ggml_norm_impl(ctx, a, eps, false); -} - -struct ggml_tensor * ggml_norm_inplace( - struct ggml_context * ctx, - struct ggml_tensor * a, - float eps) { - return ggml_norm_impl(ctx, a, eps, true); -} - -// ggml_rms_norm - -static struct ggml_tensor * ggml_rms_norm_impl( - struct ggml_context * ctx, - struct ggml_tensor * a, - float eps, - bool inplace) { - bool is_node = false; - - if (!inplace && (a->grad)) { - is_node = true; - } - - struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a); - - ggml_set_op_params(result, &eps, sizeof(eps)); - - result->op = GGML_OP_RMS_NORM; - result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src[0] = a; - - return result; -} - -struct ggml_tensor * ggml_rms_norm( - struct ggml_context * ctx, - struct ggml_tensor * a, - float eps) { - return ggml_rms_norm_impl(ctx, a, eps, false); -} - -struct ggml_tensor * ggml_rms_norm_inplace( - struct ggml_context * ctx, - struct ggml_tensor * a, - float eps) { - return ggml_rms_norm_impl(ctx, a, eps, true); -} - -// ggml_rms_norm_back - -struct ggml_tensor * ggml_rms_norm_back( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b, - float eps) { - bool is_node = false; - - if (a->grad) { - // TODO: implement backward - is_node = true; - } - - struct ggml_tensor * result = ggml_dup_tensor(ctx, a); - - ggml_set_op_params(result, &eps, sizeof(eps)); - - result->op = GGML_OP_RMS_NORM_BACK; - result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src[0] = a; - result->src[1] = b; - - return result; -} - -// ggml_group_norm - -static struct ggml_tensor * ggml_group_norm_impl( - struct ggml_context * ctx, - struct ggml_tensor * a, - int n_groups, - bool inplace) { - - bool is_node = false; - if (!inplace && (a->grad)) { - GGML_ASSERT(false); // TODO: implement backward - is_node = true; - } - - struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a); - - result->op_params[0] = n_groups; - - result->op = GGML_OP_GROUP_NORM; - result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src[0] = a; - - return result; -} - -struct ggml_tensor * ggml_group_norm( - struct ggml_context * ctx, - struct ggml_tensor * a, - int n_groups) { - return ggml_group_norm_impl(ctx, a, n_groups, false); -} - -struct ggml_tensor * ggml_group_norm_inplace( - struct ggml_context * ctx, - struct ggml_tensor * a, - int n_groups) { - return ggml_group_norm_impl(ctx, a, n_groups, true); -} - -// ggml_mul_mat - -struct ggml_tensor * ggml_mul_mat( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b) { - GGML_ASSERT(ggml_can_mul_mat(a, b)); - GGML_ASSERT(!ggml_is_transposed(a)); - - bool is_node = false; - - if (a->grad || b->grad) { - is_node = true; - } - - const int64_t ne[4] = { a->ne[1], b->ne[1], b->ne[2], b->ne[3] }; - struct ggml_tensor * result = ggml_new_tensor(ctx, GGML_TYPE_F32, 4, ne); - - result->op = GGML_OP_MUL_MAT; - result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src[0] = a; - result->src[1] = b; - - return result; -} - -void ggml_mul_mat_set_prec( - struct ggml_tensor * a, - enum ggml_prec prec) { - const int32_t prec_i32 = (int32_t) prec; - - ggml_set_op_params_i32(a, 0, prec_i32); -} - -// ggml_mul_mat_id - -/* - c = ggml_mul_mat_id(ctx, as, b, ids); - - as -> [cols, rows, n_expert] - ids -> [n_experts_used, n_tokens] (i32) - b -> [cols, n_expert_used, n_tokens] - c -> [cols, n_expert_used, n_tokens] - - in b, n_experts_used can be broadcasted to match the n_expert_used of ids - - c ~= as[:,:,i] @ b[:,i%r,t], i = ids[e,t] for all e,t in ids -*/ -struct ggml_tensor * ggml_mul_mat_id( - struct ggml_context * ctx, - struct ggml_tensor * as, - struct ggml_tensor * b, - struct ggml_tensor * ids) { - GGML_ASSERT(!ggml_is_transposed(as)); - GGML_ASSERT(ids->type == GGML_TYPE_I32); - - GGML_ASSERT(as->ne[3] == 1); // as is 3d (one matrix per expert) - GGML_ASSERT(b->ne[3] == 1); // b is 3d - GGML_ASSERT(ids->ne[2] == 1 && ids->ne[3] == 1); // ids is 2d - GGML_ASSERT(ids->ne[1] == b->ne[2]); // must have an expert list per b row - GGML_ASSERT(as->ne[0] == b->ne[0]); // can_mul_mat - GGML_ASSERT(ids->ne[0] % b->ne[1] == 0); // can broadcast - - bool is_node = false; - - if (as->grad || b->grad) { - is_node = true; - } - - const int64_t ne[4] = { as->ne[1], ids->ne[0], b->ne[2], 1 }; - struct ggml_tensor * result = ggml_new_tensor(ctx, GGML_TYPE_F32, 4, ne); - - result->op = GGML_OP_MUL_MAT_ID; - result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src[0] = as; - result->src[1] = b; - result->src[2] = ids; - - return result; -} - -// ggml_out_prod - -struct ggml_tensor * ggml_out_prod( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b) { - GGML_ASSERT(ggml_can_out_prod(a, b)); - GGML_ASSERT(!ggml_is_transposed(a)); - - bool is_node = false; - - if (a->grad || b->grad) { - is_node = true; - } - - // a is broadcastable to b for ne[2] and ne[3] -> use b->ne[2] and b->ne[3] - const int64_t ne[4] = { a->ne[0], b->ne[0], b->ne[2], b->ne[3] }; - struct ggml_tensor * result = ggml_new_tensor(ctx, GGML_TYPE_F32, 4, ne); - - result->op = GGML_OP_OUT_PROD; - result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src[0] = a; - result->src[1] = b; - - return result; -} - -// ggml_scale - -static struct ggml_tensor * ggml_scale_impl( - struct ggml_context * ctx, - struct ggml_tensor * a, - float s, - bool inplace) { - GGML_ASSERT(ggml_is_padded_1d(a)); - - bool is_node = false; - - if (a->grad) { - is_node = true; - } - - struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a); - - ggml_set_op_params(result, &s, sizeof(s)); - - result->op = GGML_OP_SCALE; - result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src[0] = a; - - return result; -} - -struct ggml_tensor * ggml_scale( - struct ggml_context * ctx, - struct ggml_tensor * a, - float s) { - return ggml_scale_impl(ctx, a, s, false); -} - -struct ggml_tensor * ggml_scale_inplace( - struct ggml_context * ctx, - struct ggml_tensor * a, - float s) { - return ggml_scale_impl(ctx, a, s, true); -} - -// ggml_set - -static struct ggml_tensor * ggml_set_impl( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b, - size_t nb1, - size_t nb2, - size_t nb3, - size_t offset, - bool inplace) { - GGML_ASSERT(ggml_nelements(a) >= ggml_nelements(b)); - - bool is_node = false; - - if (a->grad || b->grad) { - is_node = true; - } - - // make a view of the destination - struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a); - - int32_t params[] = { nb1, nb2, nb3, offset, inplace ? 1 : 0 }; - ggml_set_op_params(result, params, sizeof(params)); - - result->op = GGML_OP_SET; - result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src[0] = a; - result->src[1] = b; - - return result; -} - -struct ggml_tensor * ggml_set( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b, - size_t nb1, - size_t nb2, - size_t nb3, - size_t offset) { - return ggml_set_impl(ctx, a, b, nb1, nb2, nb3, offset, false); -} - -struct ggml_tensor * ggml_set_inplace( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b, - size_t nb1, - size_t nb2, - size_t nb3, - size_t offset) { - return ggml_set_impl(ctx, a, b, nb1, nb2, nb3, offset, true); -} - -struct ggml_tensor * ggml_set_1d( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b, - size_t offset) { - return ggml_set_impl(ctx, a, b, a->nb[1], a->nb[2], a->nb[3], offset, false); -} - -struct ggml_tensor * ggml_set_1d_inplace( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b, - size_t offset) { - return ggml_set_impl(ctx, a, b, a->nb[1], a->nb[2], a->nb[3], offset, true); -} - -struct ggml_tensor * ggml_set_2d( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b, - size_t nb1, - size_t offset) { - return ggml_set_impl(ctx, a, b, nb1, a->nb[2], a->nb[3], offset, false); -} - -struct ggml_tensor * ggml_set_2d_inplace( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b, - size_t nb1, - size_t offset) { - return ggml_set_impl(ctx, a, b, nb1, a->nb[2], a->nb[3], offset, true); -} - -// ggml_cpy - -static struct ggml_tensor * ggml_cpy_impl( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b) { - GGML_ASSERT(ggml_nelements(a) == ggml_nelements(b)); - - bool is_node = false; - - if (a->grad || b->grad) { - // inplace is false and either one have a grad - is_node = true; - } - - // make a view of the destination - struct ggml_tensor * result = ggml_view_tensor(ctx, b); - if (strlen(b->name) > 0) { - ggml_format_name(result, "%s (copy of %s)", b->name, a->name); - } else { - ggml_format_name(result, "%s (copy)", a->name); - } - - result->op = GGML_OP_CPY; - result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src[0] = a; - result->src[1] = b; - - return result; -} - -struct ggml_tensor * ggml_cpy( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b) { - return ggml_cpy_impl(ctx, a, b); -} - -struct ggml_tensor * ggml_cast( - struct ggml_context * ctx, - struct ggml_tensor * a, - enum ggml_type type) { - bool is_node = false; - - struct ggml_tensor * result = ggml_new_tensor(ctx, type, GGML_MAX_DIMS, a->ne); - ggml_format_name(result, "%s (copy)", a->name); - - result->op = GGML_OP_CPY; - result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src[0] = a; - result->src[1] = result; - - return result; -} - -// ggml_cont - -static struct ggml_tensor * ggml_cont_impl( - struct ggml_context * ctx, - struct ggml_tensor * a) { - bool is_node = false; - - if (a->grad) { - is_node = true; - } - - struct ggml_tensor * result = ggml_dup_tensor(ctx, a); - ggml_format_name(result, "%s (cont)", a->name); - - result->op = GGML_OP_CONT; - result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src[0] = a; - - return result; -} - -struct ggml_tensor * ggml_cont( - struct ggml_context * ctx, - struct ggml_tensor * a) { - return ggml_cont_impl(ctx, a); -} - -// make contiguous, with new shape -GGML_API struct ggml_tensor * ggml_cont_1d( - struct ggml_context * ctx, - struct ggml_tensor * a, - int64_t ne0) { - return ggml_cont_4d(ctx, a, ne0, 1, 1, 1); -} - -GGML_API struct ggml_tensor * ggml_cont_2d( - struct ggml_context * ctx, - struct ggml_tensor * a, - int64_t ne0, - int64_t ne1) { - return ggml_cont_4d(ctx, a, ne0, ne1, 1, 1); -} - -GGML_API struct ggml_tensor * ggml_cont_3d( - struct ggml_context * ctx, - struct ggml_tensor * a, - int64_t ne0, - int64_t ne1, - int64_t ne2) { - return ggml_cont_4d(ctx, a, ne0, ne1, ne2, 1); -} - -struct ggml_tensor * ggml_cont_4d( - struct ggml_context * ctx, - struct ggml_tensor * a, - int64_t ne0, - int64_t ne1, - int64_t ne2, - int64_t ne3) { - GGML_ASSERT(ggml_nelements(a) == (ne0*ne1*ne2*ne3)); - - bool is_node = false; - - struct ggml_tensor * result = ggml_new_tensor_4d(ctx, a->type, ne0, ne1, ne2, ne3); - ggml_format_name(result, "%s (cont)", a->name); - - result->op = GGML_OP_CONT; - result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src[0] = a; - - return result; -} - -// ggml_reshape - -struct ggml_tensor * ggml_reshape( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b) { - GGML_ASSERT(ggml_is_contiguous(a)); - // as only the shape of b is relevant, and not its memory layout, b is allowed to be non contiguous. - GGML_ASSERT(ggml_nelements(a) == ggml_nelements(b)); - - bool is_node = false; - - if (a->grad) { - is_node = true; - } - - if (b->grad) { - // gradient propagation is not supported - //GGML_ASSERT(false); - } - - struct ggml_tensor * result = ggml_new_tensor_impl(ctx, a->type, GGML_MAX_DIMS, b->ne, a, 0); - ggml_format_name(result, "%s (reshaped)", a->name); - - result->op = GGML_OP_RESHAPE; - result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src[0] = a; - - return result; -} - -struct ggml_tensor * ggml_reshape_1d( - struct ggml_context * ctx, - struct ggml_tensor * a, - int64_t ne0) { - GGML_ASSERT(ggml_is_contiguous(a)); - GGML_ASSERT(ggml_nelements(a) == ne0); - - bool is_node = false; - - if (a->grad) { - is_node = true; - } - - const int64_t ne[1] = { ne0 }; - struct ggml_tensor * result = ggml_new_tensor_impl(ctx, a->type, 1, ne, a, 0); - ggml_format_name(result, "%s (reshaped)", a->name); - - result->op = GGML_OP_RESHAPE; - result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src[0] = a; - - return result; -} - -struct ggml_tensor * ggml_reshape_2d( - struct ggml_context * ctx, - struct ggml_tensor * a, - int64_t ne0, - int64_t ne1) { - GGML_ASSERT(ggml_is_contiguous(a)); - GGML_ASSERT(ggml_nelements(a) == ne0*ne1); - - bool is_node = false; - - if (a->grad) { - is_node = true; - } - - const int64_t ne[2] = { ne0, ne1 }; - struct ggml_tensor * result = ggml_new_tensor_impl(ctx, a->type, 2, ne, a, 0); - ggml_format_name(result, "%s (reshaped)", a->name); - - result->op = GGML_OP_RESHAPE; - result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src[0] = a; - - return result; -} - -struct ggml_tensor * ggml_reshape_3d( - struct ggml_context * ctx, - struct ggml_tensor * a, - int64_t ne0, - int64_t ne1, - int64_t ne2) { - GGML_ASSERT(ggml_is_contiguous(a)); - GGML_ASSERT(ggml_nelements(a) == ne0*ne1*ne2); - - bool is_node = false; - - if (a->grad) { - is_node = true; - } - - const int64_t ne[3] = { ne0, ne1, ne2 }; - struct ggml_tensor * result = ggml_new_tensor_impl(ctx, a->type, 3, ne, a, 0); - ggml_format_name(result, "%s (reshaped)", a->name); - - result->op = GGML_OP_RESHAPE; - result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src[0] = a; - - return result; -} - -struct ggml_tensor * ggml_reshape_4d( - struct ggml_context * ctx, - struct ggml_tensor * a, - int64_t ne0, - int64_t ne1, - int64_t ne2, - int64_t ne3) { - GGML_ASSERT(ggml_is_contiguous(a)); - GGML_ASSERT(ggml_nelements(a) == ne0*ne1*ne2*ne3); - - bool is_node = false; - - if (a->grad) { - is_node = true; - } - - const int64_t ne[4] = { ne0, ne1, ne2, ne3 }; - struct ggml_tensor * result = ggml_new_tensor_impl(ctx, a->type, 4, ne, a, 0); - ggml_format_name(result, "%s (reshaped)", a->name); - - result->op = GGML_OP_RESHAPE; - result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src[0] = a; - - return result; -} - -static struct ggml_tensor * ggml_view_impl( - struct ggml_context * ctx, - struct ggml_tensor * a, - int n_dims, - const int64_t * ne, - size_t offset) { - - bool is_node = false; - - if (a->grad) { - is_node = true; - } - - struct ggml_tensor * result = ggml_new_tensor_impl(ctx, a->type, n_dims, ne, a, offset); - ggml_format_name(result, "%s (view)", a->name); - - ggml_set_op_params(result, &offset, sizeof(offset)); - - result->op = GGML_OP_VIEW; - result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src[0] = a; - - return result; -} - -// ggml_view_1d - -struct ggml_tensor * ggml_view_1d( - struct ggml_context * ctx, - struct ggml_tensor * a, - int64_t ne0, - size_t offset) { - - struct ggml_tensor * result = ggml_view_impl(ctx, a, 1, &ne0, offset); - - return result; -} - -// ggml_view_2d - -struct ggml_tensor * ggml_view_2d( - struct ggml_context * ctx, - struct ggml_tensor * a, - int64_t ne0, - int64_t ne1, - size_t nb1, - size_t offset) { - - const int64_t ne[2] = { ne0, ne1 }; - - struct ggml_tensor * result = ggml_view_impl(ctx, a, 2, ne, offset); - - result->nb[1] = nb1; - result->nb[2] = result->nb[1]*ne1; - result->nb[3] = result->nb[2]; - - return result; -} - -// ggml_view_3d - -struct ggml_tensor * ggml_view_3d( - struct ggml_context * ctx, - struct ggml_tensor * a, - int64_t ne0, - int64_t ne1, - int64_t ne2, - size_t nb1, - size_t nb2, - size_t offset) { - - const int64_t ne[3] = { ne0, ne1, ne2 }; - - struct ggml_tensor * result = ggml_view_impl(ctx, a, 3, ne, offset); - - result->nb[1] = nb1; - result->nb[2] = nb2; - result->nb[3] = result->nb[2]*ne2; - - return result; -} - -// ggml_view_4d - -struct ggml_tensor * ggml_view_4d( - struct ggml_context * ctx, - struct ggml_tensor * a, - int64_t ne0, - int64_t ne1, - int64_t ne2, - int64_t ne3, - size_t nb1, - size_t nb2, - size_t nb3, - size_t offset) { - - const int64_t ne[4] = { ne0, ne1, ne2, ne3 }; - - struct ggml_tensor * result = ggml_view_impl(ctx, a, 4, ne, offset); - - result->nb[1] = nb1; - result->nb[2] = nb2; - result->nb[3] = nb3; - - return result; -} - -// ggml_permute - -struct ggml_tensor * ggml_permute( - struct ggml_context * ctx, - struct ggml_tensor * a, - int axis0, - int axis1, - int axis2, - int axis3) { - GGML_ASSERT(axis0 >= 0 && axis0 < GGML_MAX_DIMS); - GGML_ASSERT(axis1 >= 0 && axis1 < GGML_MAX_DIMS); - GGML_ASSERT(axis2 >= 0 && axis2 < GGML_MAX_DIMS); - GGML_ASSERT(axis3 >= 0 && axis3 < GGML_MAX_DIMS); - - GGML_ASSERT(axis0 != axis1); - GGML_ASSERT(axis0 != axis2); - GGML_ASSERT(axis0 != axis3); - GGML_ASSERT(axis1 != axis2); - GGML_ASSERT(axis1 != axis3); - GGML_ASSERT(axis2 != axis3); - - bool is_node = false; - - if (a->grad) { - is_node = true; - } - - struct ggml_tensor * result = ggml_view_tensor(ctx, a); - ggml_format_name(result, "%s (permuted)", a->name); - - int ne[GGML_MAX_DIMS]; - int nb[GGML_MAX_DIMS]; - - ne[axis0] = a->ne[0]; - ne[axis1] = a->ne[1]; - ne[axis2] = a->ne[2]; - ne[axis3] = a->ne[3]; - - nb[axis0] = a->nb[0]; - nb[axis1] = a->nb[1]; - nb[axis2] = a->nb[2]; - nb[axis3] = a->nb[3]; - - result->ne[0] = ne[0]; - result->ne[1] = ne[1]; - result->ne[2] = ne[2]; - result->ne[3] = ne[3]; - - result->nb[0] = nb[0]; - result->nb[1] = nb[1]; - result->nb[2] = nb[2]; - result->nb[3] = nb[3]; - - result->op = GGML_OP_PERMUTE; - result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src[0] = a; - - int32_t params[] = { axis0, axis1, axis2, axis3 }; - ggml_set_op_params(result, params, sizeof(params)); - - return result; -} - -// ggml_transpose - -struct ggml_tensor * ggml_transpose( - struct ggml_context * ctx, - struct ggml_tensor * a) { - bool is_node = false; - - if (a->grad) { - is_node = true; - } - - struct ggml_tensor * result = ggml_view_tensor(ctx, a); - ggml_format_name(result, "%s (transposed)", a->name); - - result->ne[0] = a->ne[1]; - result->ne[1] = a->ne[0]; - - result->nb[0] = a->nb[1]; - result->nb[1] = a->nb[0]; - - result->op = GGML_OP_TRANSPOSE; - result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src[0] = a; - - return result; -} - -// ggml_get_rows - -struct ggml_tensor * ggml_get_rows( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b) { - GGML_ASSERT(a->ne[2] == b->ne[1]); - GGML_ASSERT(b->ne[3] == 1); - GGML_ASSERT(b->type == GGML_TYPE_I32); - - bool is_node = false; - - if (a->grad || b->grad) { - is_node = true; - } - - // TODO: implement non F32 return - enum ggml_type type = GGML_TYPE_F32; - if (a->type == GGML_TYPE_I32) { - type = a->type; - } - struct ggml_tensor * result = ggml_new_tensor_4d(ctx, type, a->ne[0], b->ne[0], b->ne[1], b->ne[2]); - - result->op = GGML_OP_GET_ROWS; - result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src[0] = a; - result->src[1] = b; - - return result; -} - -// ggml_get_rows_back - -struct ggml_tensor * ggml_get_rows_back( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b, - struct ggml_tensor * c) { - GGML_ASSERT(ggml_is_matrix(a) && ggml_is_vector(b) && b->type == GGML_TYPE_I32); - GGML_ASSERT(ggml_is_matrix(c) && (a->ne[0] == c->ne[0])); - - bool is_node = false; - - if (a->grad || b->grad) { - is_node = true; - } - - // TODO: implement non F32 return - //struct ggml_tensor * result = ggml_new_tensor_2d(ctx, a->type, a->ne[0], b->ne[0]); - struct ggml_tensor * result = ggml_new_tensor_2d(ctx, GGML_TYPE_F32, c->ne[0], c->ne[1]); - - result->op = GGML_OP_GET_ROWS_BACK; - result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src[0] = a; - result->src[1] = b; - - return result; -} - -// ggml_diag - -struct ggml_tensor * ggml_diag( - struct ggml_context * ctx, - struct ggml_tensor * a) { - GGML_ASSERT(a->ne[1] == 1); - bool is_node = false; - - if (a->grad) { - is_node = true; - } - - const int64_t ne[4] = { a->ne[0], a->ne[0], a->ne[2], a->ne[3] }; - struct ggml_tensor * result = ggml_new_tensor(ctx, a->type, 4, ne); - - result->op = GGML_OP_DIAG; - result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src[0] = a; - - return result; -} - -// ggml_diag_mask_inf - -static struct ggml_tensor * ggml_diag_mask_inf_impl( - struct ggml_context * ctx, - struct ggml_tensor * a, - int n_past, - bool inplace) { - bool is_node = false; - - if (a->grad) { - is_node = true; - } - - struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a); - - int32_t params[] = { n_past }; - ggml_set_op_params(result, params, sizeof(params)); - - result->op = GGML_OP_DIAG_MASK_INF; - result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src[0] = a; - - return result; -} - -struct ggml_tensor * ggml_diag_mask_inf( - struct ggml_context * ctx, - struct ggml_tensor * a, - int n_past) { - return ggml_diag_mask_inf_impl(ctx, a, n_past, false); -} - -struct ggml_tensor * ggml_diag_mask_inf_inplace( - struct ggml_context * ctx, - struct ggml_tensor * a, - int n_past) { - return ggml_diag_mask_inf_impl(ctx, a, n_past, true); -} - -// ggml_diag_mask_zero - -static struct ggml_tensor * ggml_diag_mask_zero_impl( - struct ggml_context * ctx, - struct ggml_tensor * a, - int n_past, - bool inplace) { - bool is_node = false; - - if (a->grad) { - is_node = true; - } - - struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a); - - int32_t params[] = { n_past }; - ggml_set_op_params(result, params, sizeof(params)); - - result->op = GGML_OP_DIAG_MASK_ZERO; - result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src[0] = a; - - return result; -} - -struct ggml_tensor * ggml_diag_mask_zero( - struct ggml_context * ctx, - struct ggml_tensor * a, - int n_past) { - return ggml_diag_mask_zero_impl(ctx, a, n_past, false); -} - -struct ggml_tensor * ggml_diag_mask_zero_inplace( - struct ggml_context * ctx, - struct ggml_tensor * a, - int n_past) { - return ggml_diag_mask_zero_impl(ctx, a, n_past, true); -} - -// ggml_soft_max - -static struct ggml_tensor * ggml_soft_max_impl( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * mask, - struct ggml_tensor * pos, - float scale, - float max_bias, - bool inplace) { - GGML_ASSERT(ggml_is_contiguous(a)); - - if (mask) { - GGML_ASSERT(ggml_is_contiguous(mask)); - GGML_ASSERT(ggml_is_matrix(mask)); - GGML_ASSERT(ggml_can_repeat_rows(mask, a)); - } - - if (pos) { - GGML_ASSERT(ggml_is_vector(pos)); - GGML_ASSERT(pos->type == GGML_TYPE_F32); - GGML_ASSERT(pos->ne[0] == a->ne[0]); - } - - if (max_bias > 0.0f) { - GGML_ASSERT(pos); - } - - bool is_node = false; - - if (a->grad) { - is_node = true; - } - - struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a); - - float params[] = { scale, max_bias }; - ggml_set_op_params(result, params, sizeof(params)); - - result->op = GGML_OP_SOFT_MAX; - result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src[0] = a; - result->src[1] = mask; - result->src[2] = pos; - - return result; -} - -struct ggml_tensor * ggml_soft_max( - struct ggml_context * ctx, - struct ggml_tensor * a) { - return ggml_soft_max_impl(ctx, a, NULL, NULL, 1.0f, 0.0f, false); -} - -struct ggml_tensor * ggml_soft_max_inplace( - struct ggml_context * ctx, - struct ggml_tensor * a) { - return ggml_soft_max_impl(ctx, a, NULL, NULL, 1.0f, 0.0f, true); -} - -struct ggml_tensor * ggml_soft_max_ext( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * mask, - struct ggml_tensor * pos, - float scale, - float max_bias) { - return ggml_soft_max_impl(ctx, a, mask, pos, scale, max_bias, false); -} - -// ggml_soft_max_back - -static struct ggml_tensor * ggml_soft_max_back_impl( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b, - bool inplace) { - bool is_node = false; - - if (a->grad || b->grad) { - is_node = true; // TODO : implement backward pass - } - - struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a); - - result->op = GGML_OP_SOFT_MAX_BACK; - result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src[0] = a; - result->src[1] = b; - - return result; -} - -struct ggml_tensor * ggml_soft_max_back( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b) { - return ggml_soft_max_back_impl(ctx, a, b, false); -} - -struct ggml_tensor * ggml_soft_max_back_inplace( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b) { - return ggml_soft_max_back_impl(ctx, a, b, true); -} - -// ggml_rope - -static struct ggml_tensor * ggml_rope_impl( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b, - int n_dims, - int mode, - int n_ctx, - int n_orig_ctx, - float freq_base, - float freq_scale, - float ext_factor, - float attn_factor, - float beta_fast, - float beta_slow, - float xpos_base, - bool xpos_down, - bool inplace) { - GGML_ASSERT(ggml_is_vector(b)); - GGML_ASSERT(b->type == GGML_TYPE_I32); - GGML_ASSERT(a->ne[2] == b->ne[0]); - - bool is_node = false; - - if (a->grad) { - is_node = true; - } - - struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a); - - int32_t params[13] = { /*n_past*/ 0, n_dims, mode, n_ctx, n_orig_ctx }; - memcpy(params + 5, &freq_base, sizeof(float)); - memcpy(params + 6, &freq_scale, sizeof(float)); - memcpy(params + 7, &ext_factor, sizeof(float)); - memcpy(params + 8, &attn_factor, sizeof(float)); - memcpy(params + 9, &beta_fast, sizeof(float)); - memcpy(params + 10, &beta_slow, sizeof(float)); - memcpy(params + 11, &xpos_base, sizeof(float)); - memcpy(params + 12, &xpos_down, sizeof(bool)); - ggml_set_op_params(result, params, sizeof(params)); - - result->op = GGML_OP_ROPE; - result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src[0] = a; - result->src[1] = b; - - return result; -} - -struct ggml_tensor * ggml_rope( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b, - int n_dims, - int mode, - int n_ctx) { - return ggml_rope_impl( - ctx, a, b, n_dims, mode, n_ctx, 0, 10000.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, false, false - ); -} - -struct ggml_tensor * ggml_rope_inplace( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b, - int n_dims, - int mode, - int n_ctx) { - return ggml_rope_impl( - ctx, a, b, n_dims, mode, n_ctx, 0, 10000.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, false, true - ); -} - -struct ggml_tensor * ggml_rope_custom( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b, - int n_dims, - int mode, - int n_ctx, - int n_orig_ctx, - float freq_base, - float freq_scale, - float ext_factor, - float attn_factor, - float beta_fast, - float beta_slow) { - return ggml_rope_impl( - ctx, a, b, n_dims, mode, n_ctx, n_orig_ctx, freq_base, freq_scale, - ext_factor, attn_factor, beta_fast, beta_slow, 0.0f, false, false - ); -} - -struct ggml_tensor * ggml_rope_custom_inplace( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b, - int n_dims, - int mode, - int n_ctx, - int n_orig_ctx, - float freq_base, - float freq_scale, - float ext_factor, - float attn_factor, - float beta_fast, - float beta_slow) { - return ggml_rope_impl( - ctx, a, b, n_dims, mode, n_ctx, n_orig_ctx, freq_base, freq_scale, - ext_factor, attn_factor, beta_fast, beta_slow, 0.0f, false, true - ); -} - -struct ggml_tensor * ggml_rope_xpos_inplace( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b, - int n_dims, - float base, - bool down) { - return ggml_rope_impl(ctx, a, b, n_dims, 0, 0, 0, 10000.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f, base, down, true); -} - -// ggml_rope_back - -struct ggml_tensor * ggml_rope_back( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b, - int n_dims, - int mode, - int n_ctx, - int n_orig_ctx, - float freq_base, - float freq_scale, - float ext_factor, - float attn_factor, - float beta_fast, - float beta_slow, - float xpos_base, - bool xpos_down) { - GGML_ASSERT(ggml_is_vector(b)); - GGML_ASSERT(b->type == GGML_TYPE_I32); - GGML_ASSERT(a->ne[2] == b->ne[0]); - - GGML_ASSERT((mode & 4) == 0 && "ggml_rope_back() for ChatGLM not implemented yet"); - - bool is_node = false; - - if (a->grad) { - is_node = false; // TODO: implement backward - } - - struct ggml_tensor * result = ggml_dup_tensor(ctx, a); - - int32_t params[13] = { /*n_past*/ 0, n_dims, mode, n_ctx, n_orig_ctx }; - memcpy(params + 5, &freq_base, sizeof(float)); - memcpy(params + 6, &freq_scale, sizeof(float)); - memcpy(params + 7, &ext_factor, sizeof(float)); - memcpy(params + 8, &attn_factor, sizeof(float)); - memcpy(params + 9, &beta_fast, sizeof(float)); - memcpy(params + 10, &beta_slow, sizeof(float)); - memcpy(params + 11, &xpos_base, sizeof(float)); - memcpy(params + 12, &xpos_down, sizeof(bool)); - ggml_set_op_params(result, params, sizeof(params)); - - result->op = GGML_OP_ROPE_BACK; - result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src[0] = a; - result->src[1] = b; - - return result; -} - -// ggml_alibi - -struct ggml_tensor * ggml_alibi( - struct ggml_context * ctx, - struct ggml_tensor * a, - int n_past, - int n_head, - float bias_max) { - GGML_ASSERT(n_past >= 0); - bool is_node = false; - - if (a->grad) { - GGML_ASSERT(false); // TODO: implement backward - is_node = true; - } - - // TODO: when implement backward, fix this: - //struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a); - struct ggml_tensor * result = ggml_view_tensor(ctx, a); - - int32_t op_params[3] = { n_past, n_head }; - memcpy(op_params + 2, &bias_max, sizeof(float)); - ggml_set_op_params(result, op_params, sizeof(op_params)); - - result->op = GGML_OP_ALIBI; - result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src[0] = a; - - return result; -} - -// ggml_clamp - -struct ggml_tensor * ggml_clamp( - struct ggml_context * ctx, - struct ggml_tensor * a, - float min, - float max) { - bool is_node = false; - - if (a->grad) { - GGML_ASSERT(false); // TODO: implement backward - is_node = true; - } - - // TODO: when implement backward, fix this: - struct ggml_tensor * result = ggml_view_tensor(ctx, a); - - float params[] = { min, max }; - ggml_set_op_params(result, params, sizeof(params)); - - result->op = GGML_OP_CLAMP; - result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src[0] = a; - - return result; -} - -// ggml_conv_1d - -static int64_t ggml_calc_conv_output_size(int64_t ins, int64_t ks, int s, int p, int d) { - return (ins + 2 * p - d * (ks - 1) - 1) / s + 1; -} - -GGML_API struct ggml_tensor * ggml_conv_1d( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b, - int s0, - int p0, - int d0) { - struct ggml_tensor * im2col = ggml_im2col(ctx, a, b, s0, 0, p0, 0, d0, 0, false, GGML_TYPE_F16); // [N, OL, IC * K] - - struct ggml_tensor * result = - ggml_mul_mat(ctx, - ggml_reshape_2d(ctx, im2col, im2col->ne[0], (im2col->ne[2] * im2col->ne[1])), // [N, OL, IC * K] => [N*OL, IC * K] - ggml_reshape_2d(ctx, a, (a->ne[0] * a->ne[1]), a->ne[2])); // [OC,IC, K] => [OC, IC * K] - - result = ggml_reshape_3d(ctx, result, im2col->ne[1], a->ne[2], im2col->ne[2]); // [N, OC, OL] - - return result; -} - -// ggml_conv_1d_ph - -struct ggml_tensor* ggml_conv_1d_ph( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b, - int s, - int d) { - return ggml_conv_1d(ctx, a, b, s, a->ne[0] / 2, d); -} - -// ggml_conv_transpose_1d - -static int64_t ggml_calc_conv_transpose_1d_output_size(int64_t ins, int64_t ks, int s, int p, int d) { - return (ins - 1) * s - 2 * p + d * (ks - 1) + 1; -} - -GGML_API struct ggml_tensor * ggml_conv_transpose_1d( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b, - int s0, - int p0, - int d0) { - GGML_ASSERT(ggml_is_matrix(b)); - GGML_ASSERT(a->ne[2] == b->ne[1]); - GGML_ASSERT(a->ne[3] == 1); - - GGML_ASSERT(p0 == 0); - GGML_ASSERT(d0 == 1); - - bool is_node = false; - - if (a->grad || b->grad) { - GGML_ASSERT(false); // TODO: implement backward - is_node = true; - } - - const int64_t ne[4] = { - ggml_calc_conv_transpose_1d_output_size(b->ne[0], a->ne[0], s0, 0 /*p0*/, 1 /*d0*/), - a->ne[1], b->ne[2], 1, - }; - struct ggml_tensor * result = ggml_new_tensor(ctx, GGML_TYPE_F32, 4, ne); - - int32_t params[] = { s0, p0, d0 }; - ggml_set_op_params(result, params, sizeof(params)); - - result->op = GGML_OP_CONV_TRANSPOSE_1D; - result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src[0] = a; - result->src[1] = b; - - return result; -} - -// ggml_conv_depthwise -struct ggml_tensor * ggml_conv_depthwise_2d( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b, - int s0, - int s1, - int p0, - int p1, - int d0, - int d1) { - - struct ggml_tensor * new_a = ggml_reshape_4d(ctx, a, a->ne[0], a->ne[1], 1, a->ne[2] * a->ne[3]); - struct ggml_tensor * im2col = ggml_im2col(ctx, new_a, - ggml_reshape_4d(ctx, b, b->ne[0], b->ne[1], 1, b->ne[2] * b->ne[3]), - s0, s1, p0, p1, d0, d1, true, GGML_TYPE_F16); // [N * IC, OH, OW, KH * KW] - struct ggml_tensor * new_b = ggml_reshape_4d(ctx, im2col, im2col->ne[0], im2col->ne[2] * im2col->ne[1], b->ne[2], b->ne[3]); // [N * IC, OH, OW, KH * KW] => [N, IC, OH * OW, KH * KW] - - new_a = ggml_reshape_4d(ctx, new_a, (new_a->ne[0] * new_a->ne[1]), new_a->ne[2], new_a->ne[3], 1); // [OC,1, KH, KW] => [1, OC, 1, KH * KW] - struct ggml_tensor * result = ggml_mul_mat(ctx, new_a, new_b); - result = ggml_reshape_4d(ctx, result, im2col->ne[1], im2col->ne[2], b->ne[2], b->ne[3]); // [N, OC, OH, OW] - - return result; -} -// ggml_conv_2d - -// im2col: [N, IC, IH, IW] => [N, OH, OW, IC*KH*KW] -// a: [OC,IC, KH, KW] -// b: [N, IC, IH, IW] -// result: [N, OH, OW, IC*KH*KW] -struct ggml_tensor * ggml_im2col( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b, - int s0, - int s1, - int p0, - int p1, - int d0, - int d1, - bool is_2D, - enum ggml_type dst_type) { - - if(is_2D) { - GGML_ASSERT(a->ne[2] == b->ne[2]); - } else { - GGML_ASSERT(a->ne[1] == b->ne[1]); - } - bool is_node = false; - - if (a->grad || b->grad) { - GGML_ASSERT(false); // TODO: implement backward - is_node = true; - } - - const int64_t OH = is_2D ? ggml_calc_conv_output_size(b->ne[1], a->ne[1], s1, p1, d1) : 0; - const int64_t OW = ggml_calc_conv_output_size(b->ne[0], a->ne[0], s0, p0, d0); - - const int64_t ne[4] = { - is_2D ? (a->ne[2] * a->ne[1] * a->ne[0]) : a->ne[1] * a->ne[0], - OW, - is_2D ? OH : b->ne[2], - is_2D ? b->ne[3] : 1, - }; - - struct ggml_tensor * result = ggml_new_tensor(ctx, dst_type, 4, ne); - int32_t params[] = { s0, s1, p0, p1, d0, d1, (is_2D ? 1 : 0) }; - ggml_set_op_params(result, params, sizeof(params)); - - result->op = GGML_OP_IM2COL; - result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src[0] = a; - result->src[1] = b; - - return result; -} - -// a: [OC,IC, KH, KW] -// b: [N, IC, IH, IW] -// result: [N, OC, OH, OW] -struct ggml_tensor * ggml_conv_2d( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b, - int s0, - int s1, - int p0, - int p1, - int d0, - int d1) { - struct ggml_tensor * im2col = ggml_im2col(ctx, a, b, s0, s1, p0, p1, d0, d1, true, GGML_TYPE_F16); // [N, OH, OW, IC * KH * KW] - - struct ggml_tensor * result = - ggml_mul_mat(ctx, - ggml_reshape_2d(ctx, im2col, im2col->ne[0], im2col->ne[3] * im2col->ne[2] * im2col->ne[1]), // [N, OH, OW, IC * KH * KW] => [N*OH*OW, IC * KH * KW] - ggml_reshape_2d(ctx, a, (a->ne[0] * a->ne[1] * a->ne[2]), a->ne[3])); // [OC,IC, KH, KW] => [OC, IC * KH * KW] - - result = ggml_reshape_4d(ctx, result, im2col->ne[1], im2col->ne[2], im2col->ne[3], a->ne[3]); // [OC, N, OH, OW] - result = ggml_cont(ctx, ggml_permute(ctx, result, 0, 1, 3, 2)); // [N, OC, OH, OW] - - - return result; -} - -// ggml_conv_2d_sk_p0 -struct ggml_tensor * ggml_conv_2d_sk_p0( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b) { - return ggml_conv_2d(ctx, a, b, a->ne[0], a->ne[1], 0, 0, 1, 1); -} - -// ggml_conv_2d_s1_ph - -struct ggml_tensor * ggml_conv_2d_s1_ph( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b) { - return ggml_conv_2d(ctx, a, b, 1, 1, a->ne[0] / 2, a->ne[1] / 2, 1, 1); -} - -// ggml_conv_transpose_2d_p0 - -static int64_t ggml_calc_conv_transpose_output_size(int64_t ins, int64_t ks, int s, int p) { - return (ins - 1) * s - 2 * p + ks; -} - -struct ggml_tensor * ggml_conv_transpose_2d_p0( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b, - int stride) { - GGML_ASSERT(a->ne[3] == b->ne[2]); - - bool is_node = false; - - if (a->grad || b->grad) { - GGML_ASSERT(false); // TODO: implement backward - is_node = true; - } - - const int64_t ne[4] = { - ggml_calc_conv_transpose_output_size(b->ne[0], a->ne[0], stride, 0 /*p0*/), - ggml_calc_conv_transpose_output_size(b->ne[1], a->ne[1], stride, 0 /*p1*/), - a->ne[2], b->ne[3], - }; - - struct ggml_tensor* result = ggml_new_tensor(ctx, GGML_TYPE_F32, 4, ne); - - ggml_set_op_params_i32(result, 0, stride); - - result->op = GGML_OP_CONV_TRANSPOSE_2D; - result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src[0] = a; - result->src[1] = b; - - return result; -} - -// ggml_pool_* - -static int64_t ggml_calc_pool_output_size(int64_t ins, int ks, int s, float p) { - return (ins + 2 * p - ks) / s + 1; -} - -// ggml_pool_1d - -struct ggml_tensor * ggml_pool_1d( - struct ggml_context * ctx, - struct ggml_tensor * a, - enum ggml_op_pool op, - int k0, - int s0, - int p0) { - - bool is_node = false; - - if (a->grad) { - GGML_ASSERT(false); // TODO: implement backward - is_node = true; - } - - const int64_t ne[4] = { - ggml_calc_pool_output_size(a->ne[0], k0, s0, p0), - a->ne[1], - a->ne[2], - a->ne[3], - }; - struct ggml_tensor * result = ggml_new_tensor(ctx, GGML_TYPE_F32, 4, ne); - - int32_t params[] = { op, k0, s0, p0 }; - ggml_set_op_params(result, params, sizeof(params)); - - result->op = GGML_OP_POOL_1D; - result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src[0] = a; - - return result; -} - -// ggml_pool_2d - -struct ggml_tensor * ggml_pool_2d( - struct ggml_context * ctx, - struct ggml_tensor * a, - enum ggml_op_pool op, - int k0, - int k1, - int s0, - int s1, - float p0, - float p1) { - - bool is_node = false; - - if (a->grad) { - GGML_ASSERT(false); // TODO: implement backward - is_node = true; - } - - struct ggml_tensor * result; - const int64_t ne[3] = { - ggml_calc_pool_output_size(a->ne[0], k0, s0, p0), - ggml_calc_pool_output_size(a->ne[1], k1, s1, p1), - a->ne[2], - }; - result = ggml_new_tensor(ctx, GGML_TYPE_F32, 3, ne); - - int32_t params[] = { op, k0, k1, s0, s1, p0, p1 }; - ggml_set_op_params(result, params, sizeof(params)); - - result->op = GGML_OP_POOL_2D; - result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src[0] = a; - return result; -} - -// ggml_upscale - -static struct ggml_tensor * ggml_upscale_impl( - struct ggml_context * ctx, - struct ggml_tensor * a, - int scale_factor) { - bool is_node = false; - - if (a->grad) { - GGML_ASSERT(false); // TODO: implement backward - is_node = true; - } - - struct ggml_tensor * result = ggml_new_tensor_4d(ctx, a->type, - a->ne[0] * scale_factor, - a->ne[1] * scale_factor, - a->ne[2], a->ne[3]); - - result->op = GGML_OP_UPSCALE; - result->op_params[0] = scale_factor; - result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src[0] = a; - - return result; -} - -struct ggml_tensor * ggml_pad( - struct ggml_context * ctx, - struct ggml_tensor * a, - int p0, int p1, int p2, int p3) { - bool is_node = false; - - if (a->grad) { - GGML_ASSERT(false); // TODO: implement backward - is_node = true; - } - - struct ggml_tensor * result = ggml_new_tensor_4d(ctx, a->type, - a->ne[0] + p0, - a->ne[1] + p1, - a->ne[2] + p2, - a->ne[3] + p3); - - result->op = GGML_OP_PAD; - result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src[0] = a; - - return result; -} - -struct ggml_tensor * ggml_upscale( - struct ggml_context * ctx, - struct ggml_tensor * a, - int scale_factor) { - return ggml_upscale_impl(ctx, a, scale_factor); -} - -struct ggml_tensor * ggml_arange( - struct ggml_context * ctx, - float start, - float stop, - float step) { - - GGML_ASSERT(stop > start); - - const int64_t steps = (int64_t) ceilf((stop - start) / step); - - struct ggml_tensor * result = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, steps); - - result->op = GGML_OP_ARANGE; - ggml_set_op_params_f32(result, 0, start); - ggml_set_op_params_f32(result, 1, stop); - ggml_set_op_params_f32(result, 2, step); - - return result; -} - -struct ggml_tensor * ggml_timestep_embedding( - struct ggml_context * ctx, - struct ggml_tensor * timesteps, - int dim, - int max_period) { - bool is_node = false; - - if (timesteps->grad) { - GGML_ASSERT(false); // TODO: implement backward - is_node = true; - } - - int actual_dim = dim; - if (dim % 2 != 0) { - actual_dim = dim + 1; - } - - struct ggml_tensor * result = ggml_new_tensor_2d(ctx, GGML_TYPE_F32, actual_dim, timesteps->ne[0]); - - result->op = GGML_OP_TIMESTEP_EMBEDDING; - ggml_set_op_params_i32(result, 0, dim); - ggml_set_op_params_i32(result, 1, max_period); - - result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src[0] = timesteps; - - return result; -} - -// ggml_argsort - -struct ggml_tensor * ggml_argsort( - struct ggml_context * ctx, - struct ggml_tensor * a, - enum ggml_sort_order order) { - bool is_node = false; - - struct ggml_tensor * result = ggml_new_tensor(ctx, GGML_TYPE_I32, GGML_MAX_DIMS, a->ne); - - ggml_set_op_params_i32(result, 0, (int32_t) order); - - result->op = GGML_OP_ARGSORT; - result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src[0] = a; - - return result; -} - -// ggml_top_k - -struct ggml_tensor * ggml_top_k( - struct ggml_context * ctx, - struct ggml_tensor * a, - int k) { - GGML_ASSERT(a->ne[0] >= k); - - struct ggml_tensor * result = ggml_argsort(ctx, a, GGML_SORT_ORDER_DESC); - - result = ggml_view_4d(ctx, result, - k, result->ne[1], result->ne[2], result->ne[3], - result->nb[1], result->nb[2], result->nb[3], - 0); - - return result; -} - -// ggml_flash_attn - -struct ggml_tensor * ggml_flash_attn( - struct ggml_context * ctx, - struct ggml_tensor * q, - struct ggml_tensor * k, - struct ggml_tensor * v, - bool masked) { - GGML_ASSERT(ggml_can_mul_mat(k, q)); - // TODO: check if vT can be multiplied by (k*qT) - - bool is_node = false; - - if (q->grad || k->grad || v->grad) { - is_node = true; - } - - //struct ggml_tensor * result = ggml_dup_tensor(ctx, q); - struct ggml_tensor * result = ggml_new_tensor(ctx, GGML_TYPE_F32, GGML_MAX_DIMS, q->ne); - - int32_t t = masked ? 1 : 0; - ggml_set_op_params(result, &t, sizeof(t)); - - result->op = GGML_OP_FLASH_ATTN; - result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src[0] = q; - result->src[1] = k; - result->src[2] = v; - - return result; -} - -// ggml_flash_ff - -struct ggml_tensor * ggml_flash_ff( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b0, - struct ggml_tensor * b1, - struct ggml_tensor * c0, - struct ggml_tensor * c1) { - GGML_ASSERT(ggml_can_mul_mat(b0, a)); - // TODO: more checks - - bool is_node = false; - - if (a->grad || b0->grad || b1->grad || c0->grad || c1->grad) { - is_node = true; - } - - //struct ggml_tensor * result = ggml_dup_tensor(ctx, a); - struct ggml_tensor * result = ggml_new_tensor(ctx, GGML_TYPE_F32, GGML_MAX_DIMS, a->ne); - - result->op = GGML_OP_FLASH_FF; - result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src[0] = a; - result->src[1] = b0; - result->src[2] = b1; - result->src[3] = c0; - result->src[4] = c1; - - return result; -} - -// ggml_flash_attn_back - -struct ggml_tensor * ggml_flash_attn_back( - struct ggml_context * ctx, - struct ggml_tensor * q, - struct ggml_tensor * k, - struct ggml_tensor * v, - struct ggml_tensor * d, - bool masked) { - GGML_ASSERT(ggml_can_mul_mat(k, q)); - // TODO: check if vT can be multiplied by (k*qT) - - // d shape [D,N,ne2,ne3] - // q shape [D,N,ne2,ne3] - // k shape [D,M,kvne2,ne3] - // v shape [M,D,kvne2,ne3] - - const int64_t D = q->ne[0]; - const int64_t N = q->ne[1]; - const int64_t M = k->ne[1]; - const int64_t ne2 = q->ne[2]; - const int64_t ne3 = q->ne[3]; - const int64_t kvne2 = k->ne[2]; - - GGML_ASSERT(k->ne[0] == D); - GGML_ASSERT(v->ne[0] == M); - GGML_ASSERT(v->ne[1] == D); - GGML_ASSERT(d->ne[0] == D); - GGML_ASSERT(d->ne[1] == N); - GGML_ASSERT(k->ne[2] == kvne2); - GGML_ASSERT(k->ne[3] == ne3); - GGML_ASSERT(v->ne[2] == kvne2); - GGML_ASSERT(v->ne[3] == ne3); - GGML_ASSERT(d->ne[2] == ne2); - GGML_ASSERT(d->ne[3] == ne3); - - GGML_ASSERT(ne2 % kvne2 == 0); - - bool is_node = false; - - if (q->grad || k->grad || v->grad) { - // when using this operation (in backwards pass) these grads are set. - // we don't want to create (big) grad of our result, so is_node is false. - is_node = false; - } - - // store gradients of q, k and v as continuous tensors concatenated in result. - // note: v and gradv are actually transposed, i.e. v->ne[0] != D. - const int64_t elem_q = ggml_nelements(q); - const int64_t elem_k = ggml_nelements(k); - const int64_t elem_v = ggml_nelements(v); - - enum ggml_type result_type = GGML_TYPE_F32; - GGML_ASSERT(ggml_blck_size(result_type) == 1); - const size_t tsize = ggml_type_size(result_type); - - const size_t offs_q = 0; - const size_t offs_k = offs_q + GGML_PAD(elem_q * tsize, GGML_MEM_ALIGN); - const size_t offs_v = offs_k + GGML_PAD(elem_k * tsize, GGML_MEM_ALIGN); - const size_t end = offs_v + GGML_PAD(elem_v * tsize, GGML_MEM_ALIGN); - - const size_t nelements = (end + tsize - 1)/tsize; - - struct ggml_tensor * result = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, nelements); - - int32_t masked_i = masked ? 1 : 0; - ggml_set_op_params(result, &masked_i, sizeof(masked_i)); - - result->op = GGML_OP_FLASH_ATTN_BACK; - result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src[0] = q; - result->src[1] = k; - result->src[2] = v; - result->src[3] = d; - - return result; -} - -// ggml_ssm_conv - -struct ggml_tensor * ggml_ssm_conv( - struct ggml_context * ctx, - struct ggml_tensor * s, - struct ggml_tensor * x, - struct ggml_tensor * c, - struct ggml_tensor * sq) { - GGML_ASSERT(ggml_is_3d(s)); - GGML_ASSERT(ggml_is_matrix(x)); - GGML_ASSERT(ggml_is_matrix(c)); - GGML_ASSERT(ggml_is_matrix(sq)); - GGML_ASSERT(sq->type == GGML_TYPE_I32); - - const int64_t d_conv = c->ne[0]; - const int64_t d_inner = c->ne[1]; - const int64_t n_tokens = x->ne[1]; - const int64_t n_kv = s->ne[2]; - - GGML_ASSERT( s->ne[0] == d_conv - 1); - GGML_ASSERT( s->ne[1] == d_inner); - GGML_ASSERT( x->ne[0] == d_inner); - GGML_ASSERT(sq->ne[0] == n_kv); - GGML_ASSERT(sq->ne[1] == n_tokens); - - bool is_node = false; - - if (s->grad || x->grad || c->grad || sq->grad) { - GGML_ASSERT(false); // TODO: implement - is_node = true; - } - - // 2-in-1 concatenated x and conv_states, {d_inner, n_tokens} with {d_conv, d_inner, n_kv} - struct ggml_tensor * result = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, (d_inner*n_tokens) + (d_conv*d_inner*n_kv)); - - result->op = GGML_OP_SSM_CONV; - result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src[0] = s; - result->src[1] = x; - result->src[2] = c; - result->src[3] = sq; - - return result; -} - -// ggml_ssm_scan - -struct ggml_tensor * ggml_ssm_scan( - struct ggml_context * ctx, - struct ggml_tensor * s, - struct ggml_tensor * x, - struct ggml_tensor * dt, - struct ggml_tensor * A, - struct ggml_tensor * B, - struct ggml_tensor * C, - struct ggml_tensor * sq) { - GGML_ASSERT(ggml_is_contiguous(s)); - GGML_ASSERT(ggml_is_contiguous(x)); - GGML_ASSERT(ggml_is_contiguous(dt)); - GGML_ASSERT(ggml_is_contiguous(A)); - GGML_ASSERT(sq->type == GGML_TYPE_I32); - GGML_ASSERT(B->nb[0] == ggml_type_size(B->type)); - GGML_ASSERT(C->nb[0] == ggml_type_size(C->type)); - GGML_ASSERT(ggml_are_same_shape(x, dt)); - - { - const int64_t d_state = s->ne[0]; - const int64_t d_inner = s->ne[1]; - const int64_t n_tokens = x->ne[1]; - - GGML_ASSERT(x->ne[0] == d_inner); - GGML_ASSERT(A->ne[0] == d_state); - GGML_ASSERT(A->ne[1] == d_inner); - GGML_ASSERT(B->ne[0] == d_state); - GGML_ASSERT(B->ne[1] == n_tokens); - GGML_ASSERT(C->ne[0] == d_state); - GGML_ASSERT(C->ne[1] == n_tokens); - } - - bool is_node = false; - - if (s->grad || x->grad || dt->grad || A->grad || B->grad || C->grad || sq->grad) { - GGML_ASSERT(false); // TODO: implement - is_node = true; - } - - // 2-in-1 concatenated y and ssm_states, {d_inner, n_tokens} with {d_state, d_inner, n_kv} - struct ggml_tensor * result = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, ggml_nelements(x) + ggml_nelements(s)); - - result->op = GGML_OP_SSM_SCAN; - result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src[0] = s; - result->src[1] = x; - result->src[2] = dt; - result->src[3] = A; - result->src[4] = B; - result->src[5] = C; - result->src[6] = sq; - - return result; -} - -// ggml_win_part - -struct ggml_tensor * ggml_win_part( - struct ggml_context * ctx, - struct ggml_tensor * a, - int w) { - GGML_ASSERT(a->ne[3] == 1); - GGML_ASSERT(a->type == GGML_TYPE_F32); - - bool is_node = false; - - if (a->grad) { - GGML_ASSERT(false); // TODO: implement backward - is_node = true; - } - - // padding - const int px = (w - a->ne[1]%w)%w; - const int py = (w - a->ne[2]%w)%w; - - const int npx = (px + a->ne[1])/w; - const int npy = (py + a->ne[2])/w; - const int np = npx*npy; - - const int64_t ne[4] = { a->ne[0], w, w, np, }; - struct ggml_tensor * result = ggml_new_tensor(ctx, GGML_TYPE_F32, 4, ne); - - int32_t params[] = { npx, npy, w }; - ggml_set_op_params(result, params, sizeof(params)); - - result->op = GGML_OP_WIN_PART; - result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src[0] = a; - - return result; -} - -// ggml_win_unpart - -struct ggml_tensor * ggml_win_unpart( - struct ggml_context * ctx, - struct ggml_tensor * a, - int w0, - int h0, - int w) { - GGML_ASSERT(a->type == GGML_TYPE_F32); - - bool is_node = false; - - if (a->grad) { - GGML_ASSERT(false); // TODO: implement backward - is_node = true; - } - - const int64_t ne[4] = { a->ne[0], w0, h0, 1, }; - struct ggml_tensor * result = ggml_new_tensor(ctx, GGML_TYPE_F32, 3, ne); - - int32_t params[] = { w }; - ggml_set_op_params(result, params, sizeof(params)); - - result->op = GGML_OP_WIN_UNPART; - result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src[0] = a; - - return result; -} - -// ggml_get_rel_pos - -struct ggml_tensor * ggml_get_rel_pos( - struct ggml_context * ctx, - struct ggml_tensor * a, - int qh, - int kh) { - GGML_ASSERT(qh == kh); - GGML_ASSERT(2*MAX(qh, kh) - 1 == a->ne[1]); - - bool is_node = false; - - if (a->grad) { - GGML_ASSERT(false); // TODO: implement backward - is_node = true; - } - - const int64_t ne[4] = { a->ne[0], kh, qh, 1, }; - struct ggml_tensor * result = ggml_new_tensor(ctx, GGML_TYPE_F16, 3, ne); - - result->op = GGML_OP_GET_REL_POS; - result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src[0] = a; - - return result; -} - -// ggml_add_rel_pos - -static struct ggml_tensor * ggml_add_rel_pos_impl( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * pw, - struct ggml_tensor * ph, - bool inplace) { - GGML_ASSERT(ggml_are_same_shape(pw, ph)); - GGML_ASSERT(ggml_is_contiguous(a)); - GGML_ASSERT(ggml_is_contiguous(pw)); - GGML_ASSERT(ggml_is_contiguous(ph)); - GGML_ASSERT(ph->type == GGML_TYPE_F32); - GGML_ASSERT(pw->type == GGML_TYPE_F32); - GGML_ASSERT(pw->ne[3] == a->ne[2]); - GGML_ASSERT(pw->ne[0]*pw->ne[0] == a->ne[0]); - GGML_ASSERT(pw->ne[1]*pw->ne[2] == a->ne[1]); - - bool is_node = false; - - if (!inplace && (a->grad || pw->grad || ph->grad)) { - is_node = true; - } - - struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a); - ggml_set_op_params_i32(result, 0, inplace ? 1 : 0); - - result->op = GGML_OP_ADD_REL_POS; - result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src[0] = a; - result->src[1] = pw; - result->src[2] = ph; - - return result; -} - -struct ggml_tensor * ggml_add_rel_pos( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * pw, - struct ggml_tensor * ph) { - return ggml_add_rel_pos_impl(ctx, a, pw, ph, false); -} - -struct ggml_tensor * ggml_add_rel_pos_inplace( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * pw, - struct ggml_tensor * ph) { - return ggml_add_rel_pos_impl(ctx, a, pw, ph, true); -} - -// gmml_unary - -static struct ggml_tensor * ggml_unary_impl( - struct ggml_context * ctx, - struct ggml_tensor * a, - enum ggml_unary_op op, - bool inplace) { - bool is_node = false; - - if (!inplace && (a->grad)) { - is_node = true; - } - - struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a); - - ggml_set_op_params_i32(result, 0, (int32_t) op); - - result->op = GGML_OP_UNARY; - result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src[0] = a; - - return result; -} - -struct ggml_tensor * ggml_unary( - struct ggml_context * ctx, - struct ggml_tensor * a, - enum ggml_unary_op op) { - return ggml_unary_impl(ctx, a, op, false); -} - -struct ggml_tensor * ggml_unary_inplace( - struct ggml_context * ctx, - struct ggml_tensor * a, - enum ggml_unary_op op) { - return ggml_unary_impl(ctx, a, op, true); -} - -// ggml_map_unary - -static struct ggml_tensor * ggml_map_unary_impl_f32( - struct ggml_context * ctx, - struct ggml_tensor * a, - const ggml_unary_op_f32_t fun, - bool inplace) { - bool is_node = false; - - if (!inplace && a->grad) { - is_node = true; - } - - struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a); - - ggml_set_op_params(result, (const void *) &fun, sizeof(fun)); - - result->op = GGML_OP_MAP_UNARY; - result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src[0] = a; - - return result; -} - -struct ggml_tensor * ggml_map_unary_f32( - struct ggml_context * ctx, - struct ggml_tensor * a, - const ggml_unary_op_f32_t fun) { - return ggml_map_unary_impl_f32(ctx, a, fun, false); -} - -struct ggml_tensor * ggml_map_unary_inplace_f32( - struct ggml_context * ctx, - struct ggml_tensor * a, - const ggml_unary_op_f32_t fun) { - return ggml_map_unary_impl_f32(ctx, a, fun, true); -} - -// ggml_map_binary - -static struct ggml_tensor * ggml_map_binary_impl_f32( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b, - const ggml_binary_op_f32_t fun, - bool inplace) { - GGML_ASSERT(ggml_are_same_shape(a, b)); - - bool is_node = false; - - if (!inplace && (a->grad || b->grad)) { - is_node = true; - } - - struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a); - - ggml_set_op_params(result, (const void *) &fun, sizeof(fun)); - - result->op = GGML_OP_MAP_BINARY; - result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src[0] = a; - result->src[1] = b; - - return result; -} - -struct ggml_tensor * ggml_map_binary_f32( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b, - const ggml_binary_op_f32_t fun) { - return ggml_map_binary_impl_f32(ctx, a, b, fun, false); -} - -struct ggml_tensor * ggml_map_binary_inplace_f32( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b, - const ggml_binary_op_f32_t fun) { - return ggml_map_binary_impl_f32(ctx, a, b, fun, true); -} - -// ggml_map_custom1_f32 - -static struct ggml_tensor * ggml_map_custom1_impl_f32( - struct ggml_context * ctx, - struct ggml_tensor * a, - const ggml_custom1_op_f32_t fun, - bool inplace) { - bool is_node = false; - - if (!inplace && a->grad) { - is_node = true; - } - - struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a); - - ggml_set_op_params(result, (const void *) &fun, sizeof(fun)); - - result->op = GGML_OP_MAP_CUSTOM1_F32; - result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src[0] = a; - - return result; -} - -struct ggml_tensor * ggml_map_custom1_f32( - struct ggml_context * ctx, - struct ggml_tensor * a, - const ggml_custom1_op_f32_t fun) { - return ggml_map_custom1_impl_f32(ctx, a, fun, false); -} - -struct ggml_tensor * ggml_map_custom1_inplace_f32( - struct ggml_context * ctx, - struct ggml_tensor * a, - const ggml_custom1_op_f32_t fun) { - return ggml_map_custom1_impl_f32(ctx, a, fun, true); -} - -// ggml_map_custom2_f32 - -static struct ggml_tensor * ggml_map_custom2_impl_f32( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b, - const ggml_custom2_op_f32_t fun, - bool inplace) { - bool is_node = false; - - if (!inplace && (a->grad || b->grad)) { - is_node = true; - } - - struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a); - - ggml_set_op_params(result, (const void *) &fun, sizeof(fun)); - - result->op = GGML_OP_MAP_CUSTOM2_F32; - result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src[0] = a; - result->src[1] = b; - - return result; -} - -struct ggml_tensor * ggml_map_custom2_f32( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b, - const ggml_custom2_op_f32_t fun) { - return ggml_map_custom2_impl_f32(ctx, a, b, fun, false); -} - -struct ggml_tensor * ggml_map_custom2_inplace_f32( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b, - const ggml_custom2_op_f32_t fun) { - return ggml_map_custom2_impl_f32(ctx, a, b, fun, true); -} - -// ggml_map_custom3_f32 - -static struct ggml_tensor * ggml_map_custom3_impl_f32( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b, - struct ggml_tensor * c, - const ggml_custom3_op_f32_t fun, - bool inplace) { - bool is_node = false; - - if (!inplace && (a->grad || b->grad || c->grad)) { - is_node = true; - } - - struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a); - - ggml_set_op_params(result, (const void *) &fun, sizeof(fun)); - - result->op = GGML_OP_MAP_CUSTOM3_F32; - result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src[0] = a; - result->src[1] = b; - result->src[2] = c; - - return result; -} - -struct ggml_tensor * ggml_map_custom3_f32( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b, - struct ggml_tensor * c, - const ggml_custom3_op_f32_t fun) { - return ggml_map_custom3_impl_f32(ctx, a, b, c, fun, false); -} - -struct ggml_tensor * ggml_map_custom3_inplace_f32( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b, - struct ggml_tensor * c, - const ggml_custom3_op_f32_t fun) { - return ggml_map_custom3_impl_f32(ctx, a, b, c, fun, true); -} - -// ggml_map_custom1 -struct ggml_map_custom1_op_params { - ggml_custom1_op_t fun; - int n_tasks; - void * userdata; -}; - -static struct ggml_tensor * ggml_map_custom1_impl( - struct ggml_context * ctx, - struct ggml_tensor * a, - const ggml_custom1_op_t fun, - int n_tasks, - void * userdata, - bool inplace) { - GGML_ASSERT(n_tasks == GGML_N_TASKS_MAX || n_tasks > 0); - - bool is_node = false; - - if (!inplace && a->grad) { - is_node = true; - } - - struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a); - - struct ggml_map_custom1_op_params params = { - /*.fun =*/ fun, - /*.n_tasks =*/ n_tasks, - /*.userdata =*/ userdata - }; - ggml_set_op_params(result, (const void *) ¶ms, sizeof(params)); - - result->op = GGML_OP_MAP_CUSTOM1; - result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src[0] = a; - - return result; -} - -struct ggml_tensor * ggml_map_custom1( - struct ggml_context * ctx, - struct ggml_tensor * a, - const ggml_custom1_op_t fun, - int n_tasks, - void * userdata) { - return ggml_map_custom1_impl(ctx, a, fun, n_tasks, userdata, false); -} - -struct ggml_tensor * ggml_map_custom1_inplace( - struct ggml_context * ctx, - struct ggml_tensor * a, - const ggml_custom1_op_t fun, - int n_tasks, - void * userdata) { - return ggml_map_custom1_impl(ctx, a, fun, n_tasks, userdata, true); -} - -// ggml_map_custom2 - -struct ggml_map_custom2_op_params { - ggml_custom2_op_t fun; - int n_tasks; - void * userdata; -}; - -static struct ggml_tensor * ggml_map_custom2_impl( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b, - const ggml_custom2_op_t fun, - int n_tasks, - void * userdata, - bool inplace) { - GGML_ASSERT(n_tasks == GGML_N_TASKS_MAX || n_tasks > 0); - - bool is_node = false; - - if (!inplace && (a->grad || b->grad)) { - is_node = true; - } - - struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a); - - struct ggml_map_custom2_op_params params = { - /*.fun =*/ fun, - /*.n_tasks =*/ n_tasks, - /*.userdata =*/ userdata - }; - ggml_set_op_params(result, (const void *) ¶ms, sizeof(params)); - - result->op = GGML_OP_MAP_CUSTOM2; - result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src[0] = a; - result->src[1] = b; - - return result; -} - -struct ggml_tensor * ggml_map_custom2( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b, - const ggml_custom2_op_t fun, - int n_tasks, - void * userdata) { - return ggml_map_custom2_impl(ctx, a, b, fun, n_tasks, userdata, false); -} - -struct ggml_tensor * ggml_map_custom2_inplace( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b, - const ggml_custom2_op_t fun, - int n_tasks, - void * userdata) { - return ggml_map_custom2_impl(ctx, a, b, fun, n_tasks, userdata, true); -} - -// ggml_map_custom3 - -struct ggml_map_custom3_op_params { - ggml_custom3_op_t fun; - int n_tasks; - void * userdata; -}; - -static struct ggml_tensor * ggml_map_custom3_impl( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b, - struct ggml_tensor * c, - const ggml_custom3_op_t fun, - int n_tasks, - void * userdata, - bool inplace) { - GGML_ASSERT(n_tasks == GGML_N_TASKS_MAX || n_tasks > 0); - - bool is_node = false; - - if (!inplace && (a->grad || b->grad || c->grad)) { - is_node = true; - } - - struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a); - - struct ggml_map_custom3_op_params params = { - /*.fun =*/ fun, - /*.n_tasks =*/ n_tasks, - /*.userdata =*/ userdata - }; - ggml_set_op_params(result, (const void *) ¶ms, sizeof(params)); - - result->op = GGML_OP_MAP_CUSTOM3; - result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src[0] = a; - result->src[1] = b; - result->src[2] = c; - - return result; -} - -struct ggml_tensor * ggml_map_custom3( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b, - struct ggml_tensor * c, - const ggml_custom3_op_t fun, - int n_tasks, - void * userdata) { - return ggml_map_custom3_impl(ctx, a, b, c, fun, n_tasks, userdata, false); -} - -struct ggml_tensor * ggml_map_custom3_inplace( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b, - struct ggml_tensor * c, - const ggml_custom3_op_t fun, - int n_tasks, - void * userdata) { - return ggml_map_custom3_impl(ctx, a, b, c, fun, n_tasks, userdata, true); -} - -// ggml_cross_entropy_loss - -struct ggml_tensor * ggml_cross_entropy_loss( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b) { - GGML_ASSERT(ggml_are_same_shape(a, b)); - bool is_node = false; - - if (a->grad || b->grad) { - is_node = true; - } - - struct ggml_tensor * result = ggml_new_tensor_1d(ctx, a->type, 1); - - result->op = GGML_OP_CROSS_ENTROPY_LOSS; - result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src[0] = a; - result->src[1] = b; - - return result; -} - -// ggml_cross_entropy_loss_back - -struct ggml_tensor * ggml_cross_entropy_loss_back( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b, - struct ggml_tensor * c) { - GGML_ASSERT(ggml_are_same_shape(a, b)); - GGML_ASSERT(ggml_is_scalar(c)); - - struct ggml_tensor * result = ggml_dup_tensor(ctx, a); - - result->op = GGML_OP_CROSS_ENTROPY_LOSS_BACK; - result->grad = NULL; - result->src[0] = a; - result->src[1] = b; - result->src[2] = c; - - return result; -} - -//////////////////////////////////////////////////////////////////////////////// - -void ggml_set_param( - struct ggml_context * ctx, - struct ggml_tensor * tensor) { - tensor->flags |= GGML_TENSOR_FLAG_PARAM; - - GGML_ASSERT(tensor->grad == NULL); - tensor->grad = ggml_dup_tensor(ctx, tensor); - ggml_format_name(tensor->grad, "%s (grad)", tensor->name); -} - -// ggml_compute_forward_dup - -static void ggml_compute_forward_dup_same_cont( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - - GGML_ASSERT(ggml_nelements(dst) == ggml_nelements(src0)); - GGML_ASSERT(ggml_is_contiguous(dst) && ggml_is_contiguous(src0)); - GGML_ASSERT(src0->type == dst->type); - - if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) { - return; - } - - const size_t nb00 = src0->nb[0]; - const size_t nb0 = dst->nb[0]; - - const int ith = params->ith; // thread index - const int nth = params->nth; // number of threads - - // parallelize by elements - const int ne = ggml_nelements(dst); - const int dr = (ne + nth - 1) / nth; - const int ie0 = dr * ith; - const int ie1 = MIN(ie0 + dr, ne); - - if (ie0 < ie1) { - memcpy( - ((char *) dst->data + ie0*nb0), - ((char *) src0->data + ie0*nb00), - (ie1 - ie0) * ggml_type_size(src0->type)); - } - -} -static void ggml_compute_forward_dup_f16( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - - GGML_ASSERT(ggml_nelements(dst) == ggml_nelements(src0)); - - if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) { - return; - } - - GGML_TENSOR_UNARY_OP_LOCALS - - const int ith = params->ith; // thread index - const int nth = params->nth; // number of threads - - if (ggml_is_contiguous(src0) && ggml_is_contiguous(dst) && src0->type == dst->type) { - ggml_compute_forward_dup_same_cont(params, dst); - return; - } - - // parallelize by rows - const int nr = ne01; - // number of rows per thread - const int dr = (nr + nth - 1) / nth; - // row range for this thread - const int ir0 = dr * ith; - const int ir1 = MIN(ir0 + dr, nr); - - if (src0->type == dst->type && - ne00 == ne0 && - nb00 == ggml_type_size(src0->type) && nb0 == ggml_type_size(dst->type)) { - // copy by rows - const size_t rs = ne00*nb00; - for (int64_t i03 = 0; i03 < ne03; i03++) { - for (int64_t i02 = 0; i02 < ne02; i02++) { - for (int64_t i01 = ir0; i01 < ir1; i01++) { - memcpy( - ((char *) dst->data + i01*nb1 + i02*nb2 + i03*nb3), - ((char *) src0->data + i01*nb01 + i02*nb02 + i03*nb03), - rs); - } - } - } - return; - } - - // TODO: add more special-case implementations for tensor shapes/strides that can benefit from memcpy - - if (ggml_is_contiguous(dst)) { - if (nb00 == sizeof(ggml_fp16_t)) { - if (dst->type == GGML_TYPE_F16) { - size_t id = 0; - const size_t rs = ne00 * nb00; - char * dst_ptr = (char *) dst->data; - - for (int i03 = 0; i03 < ne03; i03++) { - for (int i02 = 0; i02 < ne02; i02++) { - id += rs * ir0; - for (int i01 = ir0; i01 < ir1; i01++) { - const char * src0_ptr = (char *) src0->data + i01*nb01 + i02*nb02 + i03*nb03; - memcpy(dst_ptr + id, src0_ptr, rs); - id += rs; - } - id += rs * (ne01 - ir1); - } - } - } else if (dst->type == GGML_TYPE_F32) { - size_t id = 0; - float * dst_ptr = (float *) dst->data; - - for (int i03 = 0; i03 < ne03; i03++) { - for (int i02 = 0; i02 < ne02; i02++) { - id += ne00 * ir0; - for (int i01 = ir0; i01 < ir1; i01++) { - const ggml_fp16_t * src0_ptr = (ggml_fp16_t *) ((char *) src0->data + i01*nb01 + i02*nb02 + i03*nb03); - for (int i00 = 0; i00 < ne00; i00++) { - dst_ptr[id] = GGML_FP16_TO_FP32(src0_ptr[i00]); - id++; - } - } - id += ne00 * (ne01 - ir1); - } - } - } else if (type_traits[dst->type].from_float) { - ggml_from_float_t const quantize_row_q = type_traits[dst->type].from_float; - float * src0_f32 = (float *) params->wdata + (ne00 + CACHE_LINE_SIZE_F32) * ith; - - size_t id = 0; - size_t rs = nb0 * (ne00 / ggml_blck_size(dst->type)); - char * dst_ptr = (char *) dst->data; - - for (int i03 = 0; i03 < ne03; i03++) { - for (int i02 = 0; i02 < ne02; i02++) { - id += rs * ir0; - for (int i01 = ir0; i01 < ir1; i01++) { - const ggml_fp16_t * src0_ptr = (ggml_fp16_t *) ((char *) src0->data + i01*nb01 + i02*nb02 + i03*nb03); - - for (int i00 = 0; i00 < ne00; i00++) { - src0_f32[i00] = GGML_FP16_TO_FP32(src0_ptr[i00]); - } - - quantize_row_q(src0_f32, dst_ptr + id, ne00); - id += rs; - } - id += rs * (ne01 - ir1); - } - } - } else { - GGML_ASSERT(false); // TODO: implement - } - } else { - //printf("%s: this is not optimal - fix me\n", __func__); - - if (dst->type == GGML_TYPE_F32) { - size_t id = 0; - float * dst_ptr = (float *) dst->data; - - for (int i03 = 0; i03 < ne03; i03++) { - for (int i02 = 0; i02 < ne02; i02++) { - id += ne00 * ir0; - for (int i01 = ir0; i01 < ir1; i01++) { - for (int i00 = 0; i00 < ne00; i00++) { - const ggml_fp16_t * src0_ptr = (ggml_fp16_t *) ((char *) src0->data + i00*nb00 + i01*nb01 + i02*nb02 + i03*nb03); - - dst_ptr[id] = GGML_FP16_TO_FP32(*src0_ptr); - id++; - } - } - id += ne00 * (ne01 - ir1); - } - } - } else if (dst->type == GGML_TYPE_F16) { - size_t id = 0; - ggml_fp16_t * dst_ptr = (ggml_fp16_t *) dst->data; - - for (int i03 = 0; i03 < ne03; i03++) { - for (int i02 = 0; i02 < ne02; i02++) { - id += ne00 * ir0; - for (int i01 = ir0; i01 < ir1; i01++) { - for (int i00 = 0; i00 < ne00; i00++) { - const ggml_fp16_t * src0_ptr = (ggml_fp16_t *) ((char *) src0->data + i00*nb00 + i01*nb01 + i02*nb02 + i03*nb03); - - dst_ptr[id] = *src0_ptr; - id++; - } - } - id += ne00 * (ne01 - ir1); - } - } - } else { - GGML_ASSERT(false); // TODO: implement - } - } - return; - } - - // dst counters - int64_t i10 = 0; - int64_t i11 = 0; - int64_t i12 = 0; - int64_t i13 = 0; - - if (dst->type == GGML_TYPE_F16) { - for (int64_t i03 = 0; i03 < ne03; i03++) { - for (int64_t i02 = 0; i02 < ne02; i02++) { - i10 += ne00 * ir0; - while (i10 >= ne0) { - i10 -= ne0; - if (++i11 == ne1) { - i11 = 0; - if (++i12 == ne2) { - i12 = 0; - if (++i13 == ne3) { - i13 = 0; - } - } - } - } - for (int64_t i01 = ir0; i01 < ir1; i01++) { - for (int64_t i00 = 0; i00 < ne00; i00++) { - const char * src0_ptr = ((char *) src0->data + i00*nb00 + i01*nb01 + i02*nb02 + i03*nb03); - char * dst_ptr = ((char *) dst->data + i10*nb0 + i11*nb1 + i12*nb2 + i13*nb3); - - memcpy(dst_ptr, src0_ptr, sizeof(ggml_fp16_t)); - - if (++i10 == ne00) { - i10 = 0; - if (++i11 == ne01) { - i11 = 0; - if (++i12 == ne02) { - i12 = 0; - if (++i13 == ne03) { - i13 = 0; - } - } - } - } - } - } - i10 += ne00 * (ne01 - ir1); - while (i10 >= ne0) { - i10 -= ne0; - if (++i11 == ne1) { - i11 = 0; - if (++i12 == ne2) { - i12 = 0; - if (++i13 == ne3) { - i13 = 0; - } - } - } - } - } - } - } else if (dst->type == GGML_TYPE_F32) { - for (int64_t i03 = 0; i03 < ne03; i03++) { - for (int64_t i02 = 0; i02 < ne02; i02++) { - i10 += ne00 * ir0; - while (i10 >= ne0) { - i10 -= ne0; - if (++i11 == ne1) { - i11 = 0; - if (++i12 == ne2) { - i12 = 0; - if (++i13 == ne3) { - i13 = 0; - } - } - } - } - for (int64_t i01 = ir0; i01 < ir1; i01++) { - for (int64_t i00 = 0; i00 < ne00; i00++) { - const char * src0_ptr = ((char *) src0->data + i00*nb00 + i01*nb01 + i02*nb02 + i03*nb03); - char * dst_ptr = ((char *) dst->data + i10*nb0 + i11*nb1 + i12*nb2 + i13*nb3); - - *(float *) dst_ptr = GGML_FP16_TO_FP32(*(const ggml_fp16_t *) src0_ptr); - - if (++i10 == ne0) { - i10 = 0; - if (++i11 == ne1) { - i11 = 0; - if (++i12 == ne2) { - i12 = 0; - if (++i13 == ne3) { - i13 = 0; - } - } - } - } - } - } - i10 += ne00 * (ne01 - ir1); - while (i10 >= ne0) { - i10 -= ne0; - if (++i11 == ne1) { - i11 = 0; - if (++i12 == ne2) { - i12 = 0; - if (++i13 == ne3) { - i13 = 0; - } - } - } - } - } - } - } else { - GGML_ASSERT(false); // TODO: implement - } -} - -static void ggml_compute_forward_dup_f32( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - - GGML_ASSERT(ggml_nelements(dst) == ggml_nelements(src0)); - - if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) { - return; - } - - GGML_TENSOR_UNARY_OP_LOCALS - - const int ith = params->ith; // thread index - const int nth = params->nth; // number of threads - - if (ggml_is_contiguous(src0) && ggml_is_contiguous(dst) && src0->type == dst->type) { - ggml_compute_forward_dup_same_cont(params, dst); - return; - } - - // parallelize by rows - const int nr = ne01; - // number of rows per thread - const int dr = (nr + nth - 1) / nth; - // row range for this thread - const int ir0 = dr * ith; - const int ir1 = MIN(ir0 + dr, nr); - - if (src0->type == dst->type && - ne00 == ne0 && - nb00 == ggml_type_size(src0->type) && nb0 == ggml_type_size(dst->type)) { - // copy by rows - const size_t rs = ne00*nb00; - for (int64_t i03 = 0; i03 < ne03; i03++) { - for (int64_t i02 = 0; i02 < ne02; i02++) { - for (int64_t i01 = ir0; i01 < ir1; i01++) { - memcpy( - ((char *) dst->data + i01*nb1 + i02*nb2 + i03*nb3), - ((char *) src0->data + i01*nb01 + i02*nb02 + i03*nb03), - rs); - } - } - } - return; - } - - if (ggml_is_contiguous(dst)) { - // TODO: simplify - if (nb00 == sizeof(float)) { - if (dst->type == GGML_TYPE_F32) { - size_t id = 0; - const size_t rs = ne00 * nb00; - char * dst_ptr = (char *) dst->data; - - for (int i03 = 0; i03 < ne03; i03++) { - for (int i02 = 0; i02 < ne02; i02++) { - id += rs * ir0; - for (int i01 = ir0; i01 < ir1; i01++) { - const char * src0_ptr = (char *) src0->data + i01*nb01 + i02*nb02 + i03*nb03; - memcpy(dst_ptr + id, src0_ptr, rs); - id += rs; - } - id += rs * (ne01 - ir1); - } - } - } else if (type_traits[dst->type].from_float) { - ggml_from_float_t const quantize_row_q = type_traits[dst->type].from_float; - - size_t id = 0; - size_t rs = nb0 * (ne00 / ggml_blck_size(dst->type)); - char * dst_ptr = (char *) dst->data; - - for (int i03 = 0; i03 < ne03; i03++) { - for (int i02 = 0; i02 < ne02; i02++) { - id += rs * ir0; - for (int i01 = ir0; i01 < ir1; i01++) { - const float * src0_ptr = (float *) ((char *) src0->data + i01*nb01 + i02*nb02 + i03*nb03); - quantize_row_q(src0_ptr, dst_ptr + id, ne00); - id += rs; - } - id += rs * (ne01 - ir1); - } - } - } else { - GGML_ASSERT(false); // TODO: implement - } - } else { - //printf("%s: this is not optimal - fix me\n", __func__); - - if (dst->type == GGML_TYPE_F32) { - size_t id = 0; - float * dst_ptr = (float *) dst->data; - - for (int i03 = 0; i03 < ne03; i03++) { - for (int i02 = 0; i02 < ne02; i02++) { - id += ne00 * ir0; - for (int i01 = ir0; i01 < ir1; i01++) { - for (int i00 = 0; i00 < ne00; i00++) { - const float * src0_ptr = (float *) ((char *) src0->data + i00*nb00 + i01*nb01 + i02*nb02 + i03*nb03); - - dst_ptr[id] = *src0_ptr; - id++; - } - } - id += ne00 * (ne01 - ir1); - } - } - } else if (dst->type == GGML_TYPE_F16) { - size_t id = 0; - ggml_fp16_t * dst_ptr = (ggml_fp16_t *) dst->data; - - for (int i03 = 0; i03 < ne03; i03++) { - for (int i02 = 0; i02 < ne02; i02++) { - id += ne00 * ir0; - for (int i01 = ir0; i01 < ir1; i01++) { - for (int i00 = 0; i00 < ne00; i00++) { - const float * src0_ptr = (float *) ((char *) src0->data + i00*nb00 + i01*nb01 + i02*nb02 + i03*nb03); - - dst_ptr[id] = GGML_FP32_TO_FP16(*src0_ptr); - id++; - } - } - id += ne00 * (ne01 - ir1); - } - } - } else { - GGML_ASSERT(false); // TODO: implement - } - } - - return; - } - - // dst counters - - int64_t i10 = 0; - int64_t i11 = 0; - int64_t i12 = 0; - int64_t i13 = 0; - - if (dst->type == GGML_TYPE_F32) { - for (int64_t i03 = 0; i03 < ne03; i03++) { - for (int64_t i02 = 0; i02 < ne02; i02++) { - i10 += ne00 * ir0; - while (i10 >= ne0) { - i10 -= ne0; - if (++i11 == ne1) { - i11 = 0; - if (++i12 == ne2) { - i12 = 0; - if (++i13 == ne3) { - i13 = 0; - } - } - } - } - for (int64_t i01 = ir0; i01 < ir1; i01++) { - for (int64_t i00 = 0; i00 < ne00; i00++) { - const char * src0_ptr = ((char *) src0->data + i00*nb00 + i01*nb01 + i02*nb02 + i03*nb03); - char * dst_ptr = ((char *) dst->data + i10*nb0 + i11*nb1 + i12*nb2 + i13*nb3); - - memcpy(dst_ptr, src0_ptr, sizeof(float)); - - if (++i10 == ne0) { - i10 = 0; - if (++i11 == ne1) { - i11 = 0; - if (++i12 == ne2) { - i12 = 0; - if (++i13 == ne3) { - i13 = 0; - } - } - } - } - } - } - i10 += ne00 * (ne01 - ir1); - while (i10 >= ne0) { - i10 -= ne0; - if (++i11 == ne1) { - i11 = 0; - if (++i12 == ne2) { - i12 = 0; - if (++i13 == ne3) { - i13 = 0; - } - } - } - } - } - } - } else if (dst->type == GGML_TYPE_F16) { - for (int64_t i03 = 0; i03 < ne03; i03++) { - for (int64_t i02 = 0; i02 < ne02; i02++) { - i10 += ne00 * ir0; - while (i10 >= ne0) { - i10 -= ne0; - if (++i11 == ne1) { - i11 = 0; - if (++i12 == ne2) { - i12 = 0; - if (++i13 == ne3) { - i13 = 0; - } - } - } - } - for (int64_t i01 = ir0; i01 < ir1; i01++) { - for (int64_t i00 = 0; i00 < ne00; i00++) { - const char * src0_ptr = ((char *) src0->data + i00*nb00 + i01*nb01 + i02*nb02 + i03*nb03); - char * dst_ptr = ((char *) dst->data + i10*nb0 + i11*nb1 + i12*nb2 + i13*nb3); - - *(ggml_fp16_t *) dst_ptr = GGML_FP32_TO_FP16(*(const float *) src0_ptr); - - if (++i10 == ne0) { - i10 = 0; - if (++i11 == ne1) { - i11 = 0; - if (++i12 == ne2) { - i12 = 0; - if (++i13 == ne3) { - i13 = 0; - } - } - } - } - } - } - i10 += ne00 * (ne01 - ir1); - while (i10 >= ne0) { - i10 -= ne0; - if (++i11 == ne1) { - i11 = 0; - if (++i12 == ne2) { - i12 = 0; - if (++i13 == ne3) { - i13 = 0; - } - } - } - } - } - } - } else { - GGML_ASSERT(false); // TODO: implement - } -} - -// A simplified version of ggml_compute_forward_dup that doesn't do float upcasting, and just plain old memcpy. -static void ggml_compute_forward_dup_bytes( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - - GGML_ASSERT(ggml_nelements(dst) == ggml_nelements(src0)); - GGML_ASSERT(src0->type == dst->type); - - if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) { - return; - } - - if (ggml_is_contiguous(src0) && ggml_is_contiguous(dst)) { - ggml_compute_forward_dup_same_cont(params, dst); - return; - } - - GGML_TENSOR_UNARY_OP_LOCALS; - - const size_t type_size = ggml_type_size(src0->type); - const int ith = params->ith; // thread index - const int nth = params->nth; // number of threads - - - // parallelize by rows - const int nr = ne01; - // number of rows per thread - const int dr = (nr + nth - 1) / nth; - // row range for this thread - const int ir0 = dr * ith; - const int ir1 = MIN(ir0 + dr, nr); - - if (src0->type == dst->type && - ne00 == ne0 && - nb00 == type_size && nb0 == type_size) { - // copy by rows - const size_t rs = ne00 * type_size; - for (int64_t i03 = 0; i03 < ne03; i03++) { - for (int64_t i02 = 0; i02 < ne02; i02++) { - for (int64_t i01 = ir0; i01 < ir1; i01++) { - memcpy( - ((char *) dst->data + i01*nb1 + i02*nb2 + i03*nb3), - ((char *) src0->data + i01*nb01 + i02*nb02 + i03*nb03), - rs); - } - } - } - return; - } - - if (ggml_is_contiguous(dst)) { - size_t id = 0; - char * dst_ptr = (char *) dst->data; - const size_t rs = ne00 * type_size; - - if (nb00 == type_size) { - // src0 is contigous on first dimension, copy by rows - for (int64_t i03 = 0; i03 < ne03; i03++) { - for (int64_t i02 = 0; i02 < ne02; i02++) { - id += rs * ir0; - for (int64_t i01 = ir0; i01 < ir1; i01++) { - const char * src0_ptr = (char *) src0->data + i01*nb01 + i02*nb02 + i03*nb03; - memcpy(dst_ptr + id, src0_ptr, rs); - id += rs; - } - id += rs * (ne01 - ir1); - } - } - } else { - //printf("%s: this is not optimal - fix me\n", __func__); - - for (int64_t i03 = 0; i03 < ne03; i03++) { - for (int64_t i02 = 0; i02 < ne02; i02++) { - id += rs * ir0; - for (int64_t i01 = ir0; i01 < ir1; i01++) { - for (int64_t i00 = 0; i00 < ne00; i00++) { - const char * src0_ptr = (char *) src0->data + i00*nb00 + i01*nb01 + i02*nb02 + i03*nb03; - memcpy(dst_ptr + id, src0_ptr, type_size); - - id += type_size; - } - } - id += rs * (ne01 - ir1); - } - } - } - - return; - } - - // dst counters - - int64_t i10 = 0; - int64_t i11 = 0; - int64_t i12 = 0; - int64_t i13 = 0; - - for (int64_t i03 = 0; i03 < ne03; i03++) { - for (int64_t i02 = 0; i02 < ne02; i02++) { - i10 += ne00 * ir0; - while (i10 >= ne0) { - i10 -= ne0; - if (++i11 == ne1) { - i11 = 0; - if (++i12 == ne2) { - i12 = 0; - if (++i13 == ne3) { - i13 = 0; - } - } - } - } - for (int64_t i01 = ir0; i01 < ir1; i01++) { - for (int64_t i00 = 0; i00 < ne00; i00++) { - const char * src0_ptr = ((char *) src0->data + i00*nb00 + i01*nb01 + i02*nb02 + i03*nb03); - char * dst_ptr = ((char *) dst->data + i10*nb0 + i11*nb1 + i12*nb2 + i13*nb3); - - memcpy(dst_ptr, src0_ptr, type_size); - - if (++i10 == ne0) { - i10 = 0; - if (++i11 == ne1) { - i11 = 0; - if (++i12 == ne2) { - i12 = 0; - if (++i13 == ne3) { - i13 = 0; - } - } - } - } - } - } - i10 += ne00 * (ne01 - ir1); - while (i10 >= ne0) { - i10 -= ne0; - if (++i11 == ne1) { - i11 = 0; - if (++i12 == ne2) { - i12 = 0; - if (++i13 == ne3) { - i13 = 0; - } - } - } - } - } - } -} - -static void ggml_compute_forward_dup( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - - if (src0->type == dst->type) { - ggml_compute_forward_dup_bytes(params, dst); - return; - } - - switch (src0->type) { - case GGML_TYPE_F16: - { - ggml_compute_forward_dup_f16(params, dst); - } break; - case GGML_TYPE_F32: - { - ggml_compute_forward_dup_f32(params, dst); - } break; - default: - { - GGML_ASSERT(false); - } break; - } -} - -// ggml_compute_forward_add - -static void ggml_compute_forward_add_f32( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - const struct ggml_tensor * src1 = dst->src[1]; - - GGML_ASSERT(ggml_can_repeat(src1, src0) && ggml_are_same_shape(src0, dst)); - - if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) { - return; - } - - const int ith = params->ith; - const int nth = params->nth; - -#ifdef GGML_USE_CLBLAST - if (isOpenCLSupported && src1->backend == GGML_BACKEND_TYPE_GPU) { - // TODO: OpenCL kernel support full broadcast - GGML_ASSERT(ggml_can_repeat_rows(src1, src0)); - if (ith == 0) { - ggml_cl_add(src0, src1, dst); - } - return; - } -#endif - - const int nr = ggml_nrows(src0); - - GGML_TENSOR_BINARY_OP_LOCALS - - GGML_ASSERT( nb0 == sizeof(float)); - GGML_ASSERT(nb00 == sizeof(float)); - - // rows per thread - const int dr = (nr + nth - 1)/nth; - - // row range for this thread - const int ir0 = dr*ith; - const int ir1 = MIN(ir0 + dr, nr); - - if (nb10 == sizeof(float)) { - for (int ir = ir0; ir < ir1; ++ir) { - // src1 is broadcastable across src0 and dst in i1, i2, i3 - const int64_t i03 = ir/(ne02*ne01); - const int64_t i02 = (ir - i03*ne02*ne01)/ne01; - const int64_t i01 = (ir - i03*ne02*ne01 - i02*ne01); - - const int64_t i13 = i03 % ne13; - const int64_t i12 = i02 % ne12; - const int64_t i11 = i01 % ne11; - const int64_t nr0 = ne00 / ne10; - - float * dst_ptr = (float *) ((char *) dst->data + i03*nb3 + i02*nb2 + i01*nb1 ); - float * src0_ptr = (float *) ((char *) src0->data + i03*nb03 + i02*nb02 + i01*nb01); - float * src1_ptr = (float *) ((char *) src1->data + i13*nb13 + i12*nb12 + i11*nb11); - - for (int64_t r = 0; r < nr0; ++r) { -#ifdef GGML_USE_ACCELERATE - vDSP_vadd(src0_ptr + r*ne10, 1, src1_ptr, 1, dst_ptr + r*ne10, 1, ne10); -#else - ggml_vec_add_f32(ne10, dst_ptr + r*ne10, src0_ptr + r*ne10, src1_ptr); -#endif - } - } - } else { - // src1 is not contiguous - for (int ir = ir0; ir < ir1; ++ir) { - // src1 is broadcastable across src0 and dst in i1, i2, i3 - const int64_t i03 = ir/(ne02*ne01); - const int64_t i02 = (ir - i03*ne02*ne01)/ne01; - const int64_t i01 = (ir - i03*ne02*ne01 - i02*ne01); - - const int64_t i13 = i03 % ne13; - const int64_t i12 = i02 % ne12; - const int64_t i11 = i01 % ne11; - - float * dst_ptr = (float *) ((char *) dst->data + i03*nb3 + i02*nb2 + i01*nb1 ); - float * src0_ptr = (float *) ((char *) src0->data + i03*nb03 + i02*nb02 + i01*nb01); - - for (int64_t i0 = 0; i0 < ne0; ++i0) { - const int64_t i10 = i0 % ne10; - float * src1_ptr = (float *) ((char *) src1->data + i13*nb13 + i12*nb12 + i11*nb11 + i10*nb10); - - dst_ptr[i0] = src0_ptr[i0] + *src1_ptr; - } - } - } -} - -static void ggml_compute_forward_add_f16_f32( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - const struct ggml_tensor * src1 = dst->src[1]; - - GGML_ASSERT(ggml_are_same_shape(src0, src1) && ggml_are_same_shape(src0, dst)); - - if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) { - return; - } - - const int ith = params->ith; - const int nth = params->nth; - - const int nr = ggml_nrows(src0); - - GGML_TENSOR_BINARY_OP_LOCALS - - GGML_ASSERT(src0->type == GGML_TYPE_F16); - GGML_ASSERT(src1->type == GGML_TYPE_F32); - - if (dst->type == GGML_TYPE_F32) { - GGML_ASSERT( nb0 == sizeof(float)); - } - else { - GGML_ASSERT(dst->type == GGML_TYPE_F16); - GGML_ASSERT( nb0 == sizeof(ggml_fp16_t)); - } - - GGML_ASSERT(nb00 == sizeof(ggml_fp16_t)); - - // rows per thread - const int dr = (nr + nth - 1)/nth; - - // row range for this thread - const int ir0 = dr*ith; - const int ir1 = MIN(ir0 + dr, nr); - - if (nb10 == sizeof(float)) { - if (dst->type == GGML_TYPE_F16) { - for (int ir = ir0; ir < ir1; ++ir) { - // src0, src1 and dst are same shape => same indices - const int i3 = ir/(ne2*ne1); - const int i2 = (ir - i3*ne2*ne1)/ne1; - const int i1 = (ir - i3*ne2*ne1 - i2*ne1); - - ggml_fp16_t * dst_ptr = (ggml_fp16_t *) ((char *) dst->data + i3*nb3 + i2*nb2 + i1*nb1); - ggml_fp16_t * src0_ptr = (ggml_fp16_t *) ((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01); - float * src1_ptr = (float *) ((char *) src1->data + i3*nb13 + i2*nb12 + i1*nb11); - - for (int i = 0; i < ne0; i++) { - dst_ptr[i] = GGML_FP32_TO_FP16(GGML_FP16_TO_FP32(src0_ptr[i]) + src1_ptr[i]); - } - } - } else { - for (int ir = ir0; ir < ir1; ++ir) { - // src0, src1 and dst are same shape => same indices - const int i3 = ir/(ne2*ne1); - const int i2 = (ir - i3*ne2*ne1)/ne1; - const int i1 = (ir - i3*ne2*ne1 - i2*ne1); - - float * dst_ptr = (float *) ((char *) dst->data + i3*nb3 + i2*nb2 + i1*nb1); - ggml_fp16_t * src0_ptr = (ggml_fp16_t *) ((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01); - float * src1_ptr = (float *) ((char *) src1->data + i3*nb13 + i2*nb12 + i1*nb11); - - for (int i = 0; i < ne0; i++) { - dst_ptr[i] = GGML_FP16_TO_FP32(src0_ptr[i]) + src1_ptr[i]; - } - } - } - } - else { - // src1 is not contiguous - GGML_ASSERT(false); - } -} - -static void ggml_compute_forward_add_f16_f16( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - const struct ggml_tensor * src1 = dst->src[1]; - - GGML_ASSERT(ggml_are_same_shape(src0, src1) && ggml_are_same_shape(src0, dst)); - - if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) { - return; - } - - const int ith = params->ith; - const int nth = params->nth; - - const int nr = ggml_nrows(src0); - - GGML_TENSOR_BINARY_OP_LOCALS - - GGML_ASSERT(src0->type == GGML_TYPE_F16); - GGML_ASSERT(src1->type == GGML_TYPE_F16); - GGML_ASSERT(dst->type == GGML_TYPE_F16); - - GGML_ASSERT( nb0 == sizeof(ggml_fp16_t)); - GGML_ASSERT(nb00 == sizeof(ggml_fp16_t)); - - // rows per thread - const int dr = (nr + nth - 1)/nth; - - // row range for this thread - const int ir0 = dr*ith; - const int ir1 = MIN(ir0 + dr, nr); - - if (nb10 == sizeof(ggml_fp16_t)) { - for (int ir = ir0; ir < ir1; ++ir) { - // src0, src1 and dst are same shape => same indices - const int i3 = ir/(ne2*ne1); - const int i2 = (ir - i3*ne2*ne1)/ne1; - const int i1 = (ir - i3*ne2*ne1 - i2*ne1); - - ggml_fp16_t * dst_ptr = (ggml_fp16_t *) ((char *) dst->data + i3*nb3 + i2*nb2 + i1*nb1); - ggml_fp16_t * src0_ptr = (ggml_fp16_t *) ((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01); - ggml_fp16_t * src1_ptr = (ggml_fp16_t *) ((char *) src1->data + i3*nb13 + i2*nb12 + i1*nb11); - - for (int i = 0; i < ne0; i++) { - dst_ptr[i] = GGML_FP32_TO_FP16(GGML_FP16_TO_FP32(src0_ptr[i]) + GGML_FP16_TO_FP32(src1_ptr[i])); - } - } - } - else { - // src1 is not contiguous - GGML_ASSERT(false); - } -} - -static void ggml_compute_forward_add_q_f32( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - const struct ggml_tensor * src1 = dst->src[1]; - - GGML_ASSERT(ggml_are_same_shape(src0, src1) && ggml_are_same_shape(src0, dst)); - - if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) { - return; - } - - const int nr = ggml_nrows(src0); - - GGML_TENSOR_BINARY_OP_LOCALS - - const int ith = params->ith; - const int nth = params->nth; - - const enum ggml_type type = src0->type; - const enum ggml_type dtype = dst->type; - ggml_to_float_t const dequantize_row_q = type_traits[type].to_float; - ggml_from_float_t const quantize_row_q = type_traits[dtype].from_float; - - // we don't support permuted src0 or src1 - GGML_ASSERT(nb00 == ggml_type_size(type)); - GGML_ASSERT(nb10 == sizeof(float)); - - // dst cannot be transposed or permuted - GGML_ASSERT(nb0 <= nb1); - GGML_ASSERT(nb1 <= nb2); - GGML_ASSERT(nb2 <= nb3); - - GGML_ASSERT(ggml_is_quantized(src0->type)); - GGML_ASSERT(src1->type == GGML_TYPE_F32); - - // rows per thread - const int dr = (nr + nth - 1)/nth; - - // row range for this thread - const int ir0 = dr*ith; - const int ir1 = MIN(ir0 + dr, nr); - - float * wdata = (float *) params->wdata + (ne00 + CACHE_LINE_SIZE_F32) * ith; - - for (int ir = ir0; ir < ir1; ++ir) { - // src0 indices - const int i03 = ir/(ne02*ne01); - const int i02 = (ir - i03*ne02*ne01)/ne01; - const int i01 = (ir - i03*ne02*ne01 - i02*ne01); - - // src1 and dst are same shape as src0 => same indices - const int i13 = i03; - const int i12 = i02; - const int i11 = i01; - - const int i3 = i03; - const int i2 = i02; - const int i1 = i01; - - void * src0_row = (void *) ((char *) src0->data + (i01*nb01 + i02*nb02 + i03*nb03)); - float * src1_row = (float *)((char *) src1->data + (i11*nb11 + i12*nb12 + i13*nb13)); - void * dst_row = (void *) ((char *) dst->data + ( i1*nb1 + i2*nb2 + i3*nb3)); - - assert(ne00 % 32 == 0); - - // unquantize row from src0 to temp buffer - dequantize_row_q(src0_row, wdata, ne00); - // add src1 - ggml_vec_acc_f32(ne00, wdata, src1_row); - // quantize row to dst - if (quantize_row_q != NULL) { - quantize_row_q(wdata, dst_row, ne00); - } else { - memcpy(dst_row, wdata, ne0*nb0); - } - } -} - -static void ggml_compute_forward_add( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - const struct ggml_tensor * src1 = dst->src[1]; - - switch (src0->type) { - case GGML_TYPE_F32: - { - if (src1->type == GGML_TYPE_F32) { - ggml_compute_forward_add_f32(params, dst); - } - else { - GGML_ASSERT(false); - } - } break; - case GGML_TYPE_F16: - { - if (src1->type == GGML_TYPE_F16) { - ggml_compute_forward_add_f16_f16(params, dst); - } - else if (src1->type == GGML_TYPE_F32) { - ggml_compute_forward_add_f16_f32(params, dst); - } - else { - GGML_ASSERT(false); - } - } break; - case GGML_TYPE_Q4_0: - case GGML_TYPE_Q4_1: - case GGML_TYPE_Q5_0: - case GGML_TYPE_Q5_1: - case GGML_TYPE_Q8_0: - case GGML_TYPE_Q2_K: - case GGML_TYPE_Q3_K: - case GGML_TYPE_Q4_K: - case GGML_TYPE_Q5_K: - case GGML_TYPE_Q6_K: - case GGML_TYPE_IQ2_XXS: - case GGML_TYPE_IQ2_XS: - case GGML_TYPE_IQ3_XXS: - case GGML_TYPE_IQ1_S: - case GGML_TYPE_IQ1_M: - case GGML_TYPE_IQ4_NL: - case GGML_TYPE_IQ4_XS: - case GGML_TYPE_IQ3_S: - case GGML_TYPE_IQ2_S: - { - ggml_compute_forward_add_q_f32(params, dst); - } break; - default: - { - GGML_ASSERT(false); - } break; - } -} - -// ggml_compute_forward_add1 - -static void ggml_compute_forward_add1_f32( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - const struct ggml_tensor * src1 = dst->src[1]; - - GGML_ASSERT(ggml_are_same_shape(src0, dst)); - GGML_ASSERT(ggml_is_scalar(src1)); - - if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) { - return; - } - - const int ith = params->ith; - const int nth = params->nth; - - const int nr = ggml_nrows(src0); - - GGML_TENSOR_UNARY_OP_LOCALS - - GGML_ASSERT( nb0 == sizeof(float)); - GGML_ASSERT(nb00 == sizeof(float)); - - // rows per thread - const int dr = (nr + nth - 1)/nth; - - // row range for this thread - const int ir0 = dr*ith; - const int ir1 = MIN(ir0 + dr, nr); - - for (int ir = ir0; ir < ir1; ++ir) { - // src0 and dst are same shape => same indices - const int i3 = ir/(ne2*ne1); - const int i2 = (ir - i3*ne2*ne1)/ne1; - const int i1 = (ir - i3*ne2*ne1 - i2*ne1); - -#ifdef GGML_USE_ACCELERATE - UNUSED(ggml_vec_add1_f32); - - vDSP_vadd( - (float *) ((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01), 1, - (float *) ((char *) src1->data), 0, - (float *) ((char *) dst->data + i3*nb3 + i2*nb2 + i1*nb1 ), 1, - ne0); -#else - ggml_vec_add1_f32(ne0, - (float *) ((char *) dst->data + i3*nb3 + i2*nb2 + i1*nb1 ), - (float *) ((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01), - *(float *) src1->data); -#endif - } -} - -static void ggml_compute_forward_add1_f16_f32( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - const struct ggml_tensor * src1 = dst->src[1]; - - GGML_ASSERT(ggml_are_same_shape(src0, dst)); - GGML_ASSERT(ggml_is_scalar(src1)); - - if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) { - return; - } - - // scalar to add - const float v = *(float *) src1->data; - - const int ith = params->ith; - const int nth = params->nth; - - const int nr = ggml_nrows(src0); - - GGML_TENSOR_UNARY_OP_LOCALS - - GGML_ASSERT(src0->type == GGML_TYPE_F16); - GGML_ASSERT(src1->type == GGML_TYPE_F32); - GGML_ASSERT(dst->type == GGML_TYPE_F16); - - GGML_ASSERT( nb0 == sizeof(ggml_fp16_t)); - GGML_ASSERT(nb00 == sizeof(ggml_fp16_t)); - - // rows per thread - const int dr = (nr + nth - 1)/nth; - - // row range for this thread - const int ir0 = dr*ith; - const int ir1 = MIN(ir0 + dr, nr); - - for (int ir = ir0; ir < ir1; ++ir) { - // src0 and dst are same shape => same indices - const int i3 = ir/(ne2*ne1); - const int i2 = (ir - i3*ne2*ne1)/ne1; - const int i1 = (ir - i3*ne2*ne1 - i2*ne1); - - ggml_fp16_t * dst_ptr = (ggml_fp16_t *) ((char *) dst->data + i3*nb3 + i2*nb2 + i1*nb1 ); - ggml_fp16_t * src0_ptr = (ggml_fp16_t *) ((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01); - for (int i = 0; i < ne0; i++) { - dst_ptr[i] = GGML_FP32_TO_FP16(GGML_FP16_TO_FP32(src0_ptr[i]) + v); - } - } -} - -static void ggml_compute_forward_add1_f16_f16( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - const struct ggml_tensor * src1 = dst->src[1]; - - GGML_ASSERT(ggml_are_same_shape(src0, dst)); - GGML_ASSERT(ggml_is_scalar(src1)); - - if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) { - return; - } - - // scalar to add - const float v = GGML_FP16_TO_FP32(*(ggml_fp16_t *) src1->data); - - const int ith = params->ith; - const int nth = params->nth; - - const int nr = ggml_nrows(src0); - - GGML_TENSOR_UNARY_OP_LOCALS - - GGML_ASSERT(src0->type == GGML_TYPE_F16); - GGML_ASSERT(src1->type == GGML_TYPE_F16); - GGML_ASSERT(dst->type == GGML_TYPE_F16); - - GGML_ASSERT( nb0 == sizeof(ggml_fp16_t)); - GGML_ASSERT(nb00 == sizeof(ggml_fp16_t)); - - // rows per thread - const int dr = (nr + nth - 1)/nth; - - // row range for this thread - const int ir0 = dr*ith; - const int ir1 = MIN(ir0 + dr, nr); - - for (int ir = ir0; ir < ir1; ++ir) { - // src0 and dst are same shape => same indices - const int i3 = ir/(ne2*ne1); - const int i2 = (ir - i3*ne2*ne1)/ne1; - const int i1 = (ir - i3*ne2*ne1 - i2*ne1); - - ggml_fp16_t * dst_ptr = (ggml_fp16_t *) ((char *) dst->data + i3*nb3 + i2*nb2 + i1*nb1 ); - ggml_fp16_t * src0_ptr = (ggml_fp16_t *) ((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01); - for (int i = 0; i < ne0; i++) { - dst_ptr[i] = GGML_FP32_TO_FP16(GGML_FP16_TO_FP32(src0_ptr[i]) + v); - } - } -} - -static void ggml_compute_forward_add1_q_f32( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - const struct ggml_tensor * src1 = dst->src[1]; - - GGML_ASSERT(ggml_are_same_shape(src0, dst)); - GGML_ASSERT(ggml_is_scalar(src1)); - - if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) { - return; - } - - // scalar to add - const float v = *(float *) src1->data; - - const int ith = params->ith; - const int nth = params->nth; - - const int nr = ggml_nrows(src0); - - GGML_TENSOR_UNARY_OP_LOCALS - - const enum ggml_type type = src0->type; - ggml_to_float_t const dequantize_row_q = type_traits[type].to_float; - ggml_from_float_t const quantize_row_q = type_traits[type].from_float; - - // we don't support permuted src0 - GGML_ASSERT(nb00 == ggml_type_size(type)); - - // dst cannot be transposed or permuted - GGML_ASSERT(nb0 <= nb1); - GGML_ASSERT(nb1 <= nb2); - GGML_ASSERT(nb2 <= nb3); - - GGML_ASSERT(ggml_is_quantized(src0->type)); - GGML_ASSERT(dst->type == src0->type); - GGML_ASSERT(src1->type == GGML_TYPE_F32); - - // rows per thread - const int dr = (nr + nth - 1)/nth; - - // row range for this thread - const int ir0 = dr*ith; - const int ir1 = MIN(ir0 + dr, nr); - - float * wdata = (float *) params->wdata + (ne0 + CACHE_LINE_SIZE_F32) * ith; - - for (int ir = ir0; ir < ir1; ++ir) { - // src0 and dst are same shape => same indices - const int i3 = ir/(ne2*ne1); - const int i2 = (ir - i3*ne2*ne1)/ne1; - const int i1 = (ir - i3*ne2*ne1 - i2*ne1); - - void * src0_row = (void *) ((char *) src0->data + (i1*nb01 + i2*nb02 + i3*nb03)); - void * dst_row = (void *) ((char *) dst->data + (i1*nb1 + i2*nb2 + i3*nb0 )); - - assert(ne0 % 32 == 0); - - // unquantize row from src0 to temp buffer - dequantize_row_q(src0_row, wdata, ne0); - // add src1 - ggml_vec_acc1_f32(ne0, wdata, v); - // quantize row to dst - quantize_row_q(wdata, dst_row, ne0); - } -} - -static void ggml_compute_forward_add1( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - const struct ggml_tensor * src1 = dst->src[1]; - - switch (src0->type) { - case GGML_TYPE_F32: - { - ggml_compute_forward_add1_f32(params, dst); - } break; - case GGML_TYPE_F16: - { - if (src1->type == GGML_TYPE_F16) { - ggml_compute_forward_add1_f16_f16(params, dst); - } - else if (src1->type == GGML_TYPE_F32) { - ggml_compute_forward_add1_f16_f32(params, dst); - } - else { - GGML_ASSERT(false); - } - } break; - case GGML_TYPE_Q4_0: - case GGML_TYPE_Q4_1: - case GGML_TYPE_Q5_0: - case GGML_TYPE_Q5_1: - case GGML_TYPE_Q8_0: - case GGML_TYPE_Q8_1: - case GGML_TYPE_Q2_K: - case GGML_TYPE_Q3_K: - case GGML_TYPE_Q4_K: - case GGML_TYPE_Q5_K: - case GGML_TYPE_Q6_K: - case GGML_TYPE_IQ2_XXS: - case GGML_TYPE_IQ2_XS: - case GGML_TYPE_IQ3_XXS: - case GGML_TYPE_IQ1_S: - case GGML_TYPE_IQ1_M: - case GGML_TYPE_IQ4_NL: - case GGML_TYPE_IQ4_XS: - case GGML_TYPE_IQ3_S: - case GGML_TYPE_IQ2_S: - { - ggml_compute_forward_add1_q_f32(params, dst); - } break; - default: - { - GGML_ASSERT(false); - } break; - } -} - -// ggml_compute_forward_acc - -static void ggml_compute_forward_acc_f32( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - const struct ggml_tensor * src1 = dst->src[1]; - - GGML_ASSERT(ggml_are_same_shape(src0, dst)); - GGML_ASSERT(ggml_is_contiguous(dst) && ggml_is_contiguous(src0)); - - // view src0 and dst with these strides and data offset inbytes during acc - // nb0 is implicitly element_size because src0 and dst are contiguous - size_t nb1 = ((int32_t *) dst->op_params)[0]; - size_t nb2 = ((int32_t *) dst->op_params)[1]; - size_t nb3 = ((int32_t *) dst->op_params)[2]; - size_t offset = ((int32_t *) dst->op_params)[3]; - bool inplace = (bool) ((int32_t *) dst->op_params)[4]; - - if (!inplace && (params->type == GGML_TASK_TYPE_INIT)) { - if (params->ith != 0) { - return; - } - // memcpy needs to be synchronized across threads to avoid race conditions. - // => do it in INIT phase - memcpy( - ((char *) dst->data), - ((char *) src0->data), - ggml_nbytes(dst)); - } - - if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) { - return; - } - - const int ith = params->ith; - const int nth = params->nth; - - const int nr = ggml_nrows(src1); - const int nc = src1->ne[0]; - - GGML_TENSOR_LOCALS(int64_t, ne1, src1, ne) - GGML_TENSOR_LOCALS(size_t, nb1, src1, nb) - - // src0 and dst as viewed during acc - const size_t nb0 = ggml_element_size(src0); - - const size_t nb00 = nb0; - const size_t nb01 = nb1; - const size_t nb02 = nb2; - const size_t nb03 = nb3; - - GGML_ASSERT(offset + (ne10 == 0 ? 0 : ne10-1)*nb0 + (ne11 == 0 ? 0 : ne11-1)*nb1 + (ne12 == 0 ? 0 : ne12-1)*nb2 + (ne13 == 0 ? 0 : ne13-1)*nb3 < ggml_nbytes(dst)); - GGML_ASSERT(offset + (ne10 == 0 ? 0 : ne10-1)*nb00 + (ne11 == 0 ? 0 : ne11-1)*nb01 + (ne12 == 0 ? 0 : ne12-1)*nb02 + (ne13 == 0 ? 0 : ne13-1)*nb03 < ggml_nbytes(src0)); - - GGML_ASSERT(nb10 == sizeof(float)); - - // rows per thread - const int dr = (nr + nth - 1)/nth; - - // row range for this thread - const int ir0 = dr*ith; - const int ir1 = MIN(ir0 + dr, nr); - - for (int ir = ir0; ir < ir1; ++ir) { - // src0 and dst are viewed with shape of src1 and offset - // => same indices - const int i3 = ir/(ne12*ne11); - const int i2 = (ir - i3*ne12*ne11)/ne11; - const int i1 = (ir - i3*ne12*ne11 - i2*ne11); - -#ifdef GGML_USE_ACCELERATE - vDSP_vadd( - (float *) ((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01 + offset), 1, - (float *) ((char *) src1->data + i3*nb13 + i2*nb12 + i1*nb11), 1, - (float *) ((char *) dst->data + i3*nb3 + i2*nb2 + i1*nb1 + offset), 1, nc); -#else - ggml_vec_add_f32(nc, - (float *) ((char *) dst->data + i3*nb3 + i2*nb2 + i1*nb1 + offset), - (float *) ((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01 + offset), - (float *) ((char *) src1->data + i3*nb13 + i2*nb12 + i1*nb11)); -#endif - } -} - -static void ggml_compute_forward_acc( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - - switch (src0->type) { - case GGML_TYPE_F32: - { - ggml_compute_forward_acc_f32(params, dst); - } break; - case GGML_TYPE_F16: - case GGML_TYPE_Q4_0: - case GGML_TYPE_Q4_1: - case GGML_TYPE_Q5_0: - case GGML_TYPE_Q5_1: - case GGML_TYPE_Q8_0: - case GGML_TYPE_Q8_1: - case GGML_TYPE_Q2_K: - case GGML_TYPE_Q3_K: - case GGML_TYPE_Q4_K: - case GGML_TYPE_Q5_K: - case GGML_TYPE_Q6_K: - case GGML_TYPE_IQ2_XXS: - case GGML_TYPE_IQ2_XS: - case GGML_TYPE_IQ3_XXS: - case GGML_TYPE_IQ1_S: - case GGML_TYPE_IQ1_M: - case GGML_TYPE_IQ4_NL: - case GGML_TYPE_IQ4_XS: - case GGML_TYPE_IQ3_S: - case GGML_TYPE_IQ2_S: - default: - { - GGML_ASSERT(false); - } break; - } -} - -// ggml_compute_forward_sub - -static void ggml_compute_forward_sub_f32( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - const struct ggml_tensor * src1 = dst->src[1]; - - assert(params->ith == 0); - assert(ggml_are_same_shape(src0, src1) && ggml_are_same_shape(src0, dst)); - - if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) { - return; - } - - const int nr = ggml_nrows(src0); - - GGML_TENSOR_BINARY_OP_LOCALS - - GGML_ASSERT( nb0 == sizeof(float)); - GGML_ASSERT(nb00 == sizeof(float)); - - if (nb10 == sizeof(float)) { - for (int ir = 0; ir < nr; ++ir) { - // src0, src1 and dst are same shape => same indices - const int i3 = ir/(ne2*ne1); - const int i2 = (ir - i3*ne2*ne1)/ne1; - const int i1 = (ir - i3*ne2*ne1 - i2*ne1); - -#ifdef GGML_USE_ACCELERATE - vDSP_vsub( - (float *) ((char *) src1->data + i3*nb13 + i2*nb12 + i1*nb11), 1, - (float *) ((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01), 1, - (float *) ((char *) dst->data + i3*nb3 + i2*nb2 + i1*nb1 ), 1, - ne0); -#else - ggml_vec_sub_f32(ne0, - (float *) ((char *) dst->data + i3*nb3 + i2*nb2 + i1*nb1 ), - (float *) ((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01), - (float *) ((char *) src1->data + i3*nb13 + i2*nb12 + i1*nb11)); -#endif - // } - // } - } - } else { - // src1 is not contiguous - for (int ir = 0; ir < nr; ++ir) { - // src0, src1 and dst are same shape => same indices - const int i3 = ir/(ne2*ne1); - const int i2 = (ir - i3*ne2*ne1)/ne1; - const int i1 = (ir - i3*ne2*ne1 - i2*ne1); - - float * dst_ptr = (float *) ((char *) dst->data + i3*nb3 + i2*nb2 + i1*nb1 ); - float * src0_ptr = (float *) ((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01); - for (int i0 = 0; i0 < ne0; i0++) { - float * src1_ptr = (float *) ((char *) src1->data + i3*nb13 + i2*nb12 + i1*nb11 + i0*nb10); - - dst_ptr[i0] = src0_ptr[i0] - *src1_ptr; - } - } - } -} - -static void ggml_compute_forward_sub( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - - switch (src0->type) { - case GGML_TYPE_F32: - { - ggml_compute_forward_sub_f32(params, dst); - } break; - default: - { - GGML_ASSERT(false); - } break; - } -} - -// ggml_compute_forward_mul - -static void ggml_compute_forward_mul_f32( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - const struct ggml_tensor * src1 = dst->src[1]; - - GGML_ASSERT(ggml_can_repeat(src1, src0) && ggml_are_same_shape(src0, dst)); - - if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) { - return; - } - const int ith = params->ith; - const int nth = params->nth; - -#if defined(GGML_USE_CLBLAST) - if (isOpenCLSupported && src1->backend == GGML_BACKEND_TYPE_GPU) { - // TODO: OpenCL kernel support full broadcast - GGML_ASSERT(ggml_can_repeat_rows(src1, src0)); - if (ith == 0) { - ggml_cl_mul(src0, src1, dst); - } - return; - } -#endif - - const int64_t nr = ggml_nrows(src0); - - GGML_TENSOR_BINARY_OP_LOCALS - - GGML_ASSERT( nb0 == sizeof(float)); - GGML_ASSERT(nb00 == sizeof(float)); - - if (nb10 == sizeof(float)) { - for (int64_t ir = ith; ir < nr; ir += nth) { - // src0 and dst are same shape => same indices - const int64_t i03 = ir/(ne02*ne01); - const int64_t i02 = (ir - i03*ne02*ne01)/ne01; - const int64_t i01 = (ir - i03*ne02*ne01 - i02*ne01); - - const int64_t i13 = i03 % ne13; - const int64_t i12 = i02 % ne12; - const int64_t i11 = i01 % ne11; - const int64_t nr0 = ne00 / ne10; - - float * dst_ptr = (float *) ((char *) dst->data + i03*nb3 + i02*nb2 + i01*nb1 ); - float * src0_ptr = (float *) ((char *) src0->data + i03*nb03 + i02*nb02 + i01*nb01); - float * src1_ptr = (float *) ((char *) src1->data + i13*nb13 + i12*nb12 + i11*nb11); - - for (int64_t r = 0 ; r < nr0; ++r) { -#ifdef GGML_USE_ACCELERATE - UNUSED(ggml_vec_mul_f32); - - vDSP_vmul(src0_ptr + r*ne10, 1, src1_ptr, 1, dst_ptr + r*ne10, 1, ne10); -#else - ggml_vec_mul_f32(ne10, dst_ptr + r*ne10, src0_ptr + r*ne10, src1_ptr); -#endif - } - } - } else { - // src1 is not contiguous - for (int64_t ir = ith; ir < nr; ir += nth) { - // src0 and dst are same shape => same indices - // src1 is broadcastable across src0 and dst in i1, i2, i3 - const int64_t i03 = ir/(ne02*ne01); - const int64_t i02 = (ir - i03*ne02*ne01)/ne01; - const int64_t i01 = (ir - i03*ne02*ne01 - i02*ne01); - - const int64_t i13 = i03 % ne13; - const int64_t i12 = i02 % ne12; - const int64_t i11 = i01 % ne11; - - float * dst_ptr = (float *) ((char *) dst->data + i03*nb3 + i02*nb2 + i01*nb1 ); - float * src0_ptr = (float *) ((char *) src0->data + i03*nb03 + i02*nb02 + i01*nb01); - - for (int64_t i0 = 0; i0 < ne00; ++i0) { - const int64_t i10 = i0 % ne10; - float * src1_ptr = (float *) ((char *) src1->data + i13*nb13 + i12*nb12 + i11*nb11 + i10*nb10); - - dst_ptr[i0] = src0_ptr[i0] * (*src1_ptr); - } - } - } -} - -static void ggml_compute_forward_mul( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - const struct ggml_tensor * src1 = dst->src[1]; - - GGML_ASSERT(src1->type == GGML_TYPE_F32 && "only f32 src1 supported for now"); - - switch (src0->type) { - case GGML_TYPE_F32: - { - ggml_compute_forward_mul_f32(params, dst); - } break; - default: - { - GGML_ASSERT(false); - } break; - } -} - -// ggml_compute_forward_div - -static void ggml_compute_forward_div_f32( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - const struct ggml_tensor * src1 = dst->src[1]; - - GGML_ASSERT(ggml_can_repeat(src1, src0) && ggml_are_same_shape(src0, dst)); - - if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) { - return; - } - - const int ith = params->ith; - const int nth = params->nth; - - const int64_t nr = ggml_nrows(src0); - - GGML_TENSOR_BINARY_OP_LOCALS - - GGML_ASSERT( nb0 == sizeof(float)); - GGML_ASSERT(nb00 == sizeof(float)); - - if (nb10 == sizeof(float)) { - for (int64_t ir = ith; ir < nr; ir += nth) { - // src0 and dst are same shape => same indices - const int64_t i03 = ir/(ne02*ne01); - const int64_t i02 = (ir - i03*ne02*ne01)/ne01; - const int64_t i01 = (ir - i03*ne02*ne01 - i02*ne01); - - const int64_t i13 = i03 % ne13; - const int64_t i12 = i02 % ne12; - const int64_t i11 = i01 % ne11; - const int64_t nr0 = ne00 / ne10; - - float * dst_ptr = (float *) ((char *) dst->data + i03*nb3 + i02*nb2 + i01*nb1 ); - float * src0_ptr = (float *) ((char *) src0->data + i03*nb03 + i02*nb02 + i01*nb01); - float * src1_ptr = (float *) ((char *) src1->data + i13*nb13 + i12*nb12 + i11*nb11); - - for (int64_t r = 0; r < nr0; ++r) { -#ifdef GGML_USE_ACCELERATE - UNUSED(ggml_vec_div_f32); - - vDSP_vdiv(src1_ptr, 1, src0_ptr + r*ne10, 1, dst_ptr + r*ne10, 1, ne10); -#else - ggml_vec_div_f32(ne10, dst_ptr + r*ne10, src0_ptr + r*ne10, src1_ptr); -#endif - } - } - } else { - // src1 is not contiguous - for (int64_t ir = ith; ir < nr; ir += nth) { - // src0 and dst are same shape => same indices - // src1 is broadcastable across src0 and dst in i1, i2, i3 - const int64_t i03 = ir/(ne02*ne01); - const int64_t i02 = (ir - i03*ne02*ne01)/ne01; - const int64_t i01 = (ir - i03*ne02*ne01 - i02*ne01); - - const int64_t i13 = i03 % ne13; - const int64_t i12 = i02 % ne12; - const int64_t i11 = i01 % ne11; - - float * dst_ptr = (float *) ((char *) dst->data + i03*nb3 + i02*nb2 + i01*nb1 ); - float * src0_ptr = (float *) ((char *) src0->data + i03*nb03 + i02*nb02 + i01*nb01); - - for (int64_t i0 = 0; i0 < ne00; ++i0) { - const int64_t i10 = i0 % ne10; - float * src1_ptr = (float *) ((char *) src1->data + i13*nb13 + i12*nb12 + i11*nb11 + i10*nb10); - - dst_ptr[i0] = src0_ptr[i0] / (*src1_ptr); - } - } - } -} - -static void ggml_compute_forward_div( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - - switch (src0->type) { - case GGML_TYPE_F32: - { - ggml_compute_forward_div_f32(params, dst); - } break; - default: - { - GGML_ASSERT(false); - } break; - } -} - -// ggml_compute_forward_sqr - -static void ggml_compute_forward_sqr_f32( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - - assert(params->ith == 0); - assert(ggml_are_same_shape(src0, dst)); - - if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) { - return; - } - - const int n = ggml_nrows(src0); - const int nc = src0->ne[0]; - - assert( dst->nb[0] == sizeof(float)); - assert(src0->nb[0] == sizeof(float)); - - for (int i = 0; i < n; i++) { - ggml_vec_sqr_f32(nc, - (float *) ((char *) dst->data + i*( dst->nb[1])), - (float *) ((char *) src0->data + i*(src0->nb[1]))); - } -} - -static void ggml_compute_forward_sqr( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - - switch (src0->type) { - case GGML_TYPE_F32: - { - ggml_compute_forward_sqr_f32(params, dst); - } break; - default: - { - GGML_ASSERT(false); - } break; - } -} - -// ggml_compute_forward_sqrt - -static void ggml_compute_forward_sqrt_f32( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - - assert(params->ith == 0); - assert(ggml_are_same_shape(src0, dst)); - - if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) { - return; - } - - const int n = ggml_nrows(src0); - const int nc = src0->ne[0]; - - assert( dst->nb[0] == sizeof(float)); - assert(src0->nb[0] == sizeof(float)); - - for (int i = 0; i < n; i++) { - ggml_vec_sqrt_f32(nc, - (float *) ((char *) dst->data + i*( dst->nb[1])), - (float *) ((char *) src0->data + i*(src0->nb[1]))); - } -} - -static void ggml_compute_forward_sqrt( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - - switch (src0->type) { - case GGML_TYPE_F32: - { - ggml_compute_forward_sqrt_f32(params, dst); - } break; - default: - { - GGML_ASSERT(false); - } break; - } -} - -// ggml_compute_forward_log - -static void ggml_compute_forward_log_f32( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - - GGML_ASSERT(params->ith == 0); - GGML_ASSERT(ggml_are_same_shape(src0, dst)); - - if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) { - return; - } - - const int n = ggml_nrows(src0); - const int nc = src0->ne[0]; - - GGML_ASSERT( dst->nb[0] == sizeof(float)); - GGML_ASSERT(src0->nb[0] == sizeof(float)); - - for (int i = 0; i < n; i++) { - ggml_vec_log_f32(nc, - (float *) ((char *) dst->data + i*( dst->nb[1])), - (float *) ((char *) src0->data + i*(src0->nb[1]))); - } -} - -static void ggml_compute_forward_log( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - - switch (src0->type) { - case GGML_TYPE_F32: - { - ggml_compute_forward_log_f32(params, dst); - } break; - default: - { - GGML_ASSERT(false); - } break; - } -} - -// ggml_compute_forward_sum - -static void ggml_compute_forward_sum_f32( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - - assert(params->ith == 0); - assert(ggml_is_scalar(dst)); - - if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) { - return; - } - - assert(ggml_is_scalar(dst)); - assert(src0->nb[0] == sizeof(float)); - - GGML_TENSOR_LOCALS(int64_t, ne0, src0, ne) - GGML_TENSOR_LOCALS(size_t, nb0, src0, nb) - - ggml_float sum = 0; - ggml_float row_sum = 0; - - for (int64_t i03 = 0; i03 < ne03; i03++) { - for (int64_t i02 = 0; i02 < ne02; i02++) { - for (int64_t i01 = 0; i01 < ne01; i01++) { - ggml_vec_sum_f32_ggf(ne00, - &row_sum, - (float *) ((char *) src0->data + i01*nb01 + i02*nb02 + i03*nb03)); - sum += row_sum; - } - } - } - ((float *) dst->data)[0] = sum; -} - -static void ggml_compute_forward_sum_f16( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - - assert(params->ith == 0); - assert(ggml_is_scalar(dst)); - - if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) { - return; - } - - assert(src0->nb[0] == sizeof(ggml_fp16_t)); - - GGML_TENSOR_LOCALS(int64_t, ne0, src0, ne) - GGML_TENSOR_LOCALS(size_t, nb0, src0, nb) - - float sum = 0; - float row_sum = 0; - - for (int64_t i03 = 0; i03 < ne03; i03++) { - for (int64_t i02 = 0; i02 < ne02; i02++) { - for (int64_t i01 = 0; i01 < ne01; i01++) { - ggml_vec_sum_f16_ggf(ne00, - &row_sum, - (ggml_fp16_t *) ((char *) src0->data + i01 * nb01 + i02 * nb02 + i03 * nb03)); - sum += row_sum; - } - } - } - ((ggml_fp16_t *) dst->data)[0] = GGML_FP32_TO_FP16(sum); -} - -static void ggml_compute_forward_sum( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - - switch (src0->type) { - case GGML_TYPE_F32: - { - ggml_compute_forward_sum_f32(params, dst); - } break; - case GGML_TYPE_F16: - { - ggml_compute_forward_sum_f16(params, dst); - } break; - default: - { - GGML_ASSERT(false); - } break; - } -} - -// ggml_compute_forward_sum_rows - -static void ggml_compute_forward_sum_rows_f32( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - - GGML_ASSERT(params->ith == 0); - - if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) { - return; - } - - GGML_ASSERT(src0->nb[0] == sizeof(float)); - GGML_ASSERT(dst->nb[0] == sizeof(float)); - - GGML_TENSOR_UNARY_OP_LOCALS - - GGML_ASSERT(ne0 == 1); - GGML_ASSERT(ne1 == ne01); - GGML_ASSERT(ne2 == ne02); - GGML_ASSERT(ne3 == ne03); - - for (int64_t i3 = 0; i3 < ne03; i3++) { - for (int64_t i2 = 0; i2 < ne02; i2++) { - for (int64_t i1 = 0; i1 < ne01; i1++) { - float * src_row = (float *) ((char *) src0->data + i1*nb01 + i2*nb02 + i3*nb03); - float * dst_row = (float *) ((char *) dst->data + i1*nb1 + i2*nb2 + i3*nb3); - float row_sum = 0; - ggml_vec_sum_f32(ne00, &row_sum, src_row); - dst_row[0] = row_sum; - } - } - } -} - -static void ggml_compute_forward_sum_rows( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - - switch (src0->type) { - case GGML_TYPE_F32: - { - ggml_compute_forward_sum_rows_f32(params, dst); - } break; - default: - { - GGML_ASSERT(false); - } break; - } -} - -// ggml_compute_forward_mean - -static void ggml_compute_forward_mean_f32( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - - assert(params->ith == 0); - - if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) { - return; - } - - assert(src0->nb[0] == sizeof(float)); - - GGML_TENSOR_UNARY_OP_LOCALS - - assert(ne0 == 1); - assert(ne1 == ne01); - assert(ne2 == ne02); - assert(ne3 == ne03); - - UNUSED(ne0); - UNUSED(ne1); - UNUSED(ne2); - UNUSED(ne3); - - for (int64_t i03 = 0; i03 < ne03; i03++) { - for (int64_t i02 = 0; i02 < ne02; i02++) { - for (int64_t i01 = 0; i01 < ne01; i01++) { - ggml_vec_sum_f32(ne00, - (float *) ((char *) dst->data + i01*nb1 + i02*nb2 + i03*nb3), - (float *) ((char *) src0->data + i01*nb01 + i02*nb02 + i03*nb03)); - - *(float *) ((char *) dst->data + i01*nb1 + i02*nb2 + i03*nb3) /= (float) ne00; - } - } - } -} - -static void ggml_compute_forward_mean( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - - switch (src0->type) { - case GGML_TYPE_F32: - { - ggml_compute_forward_mean_f32(params, dst); - } break; - default: - { - GGML_ASSERT(false); - } break; - } -} - -// ggml_compute_forward_argmax - -static void ggml_compute_forward_argmax_f32( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - - assert(params->ith == 0); - - if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) { - return; - } - - assert(src0->nb[0] == sizeof(float)); - assert(dst->nb[0] == sizeof(float)); - - const int64_t ne00 = src0->ne[0]; - const int64_t ne01 = src0->ne[1]; - - const size_t nb01 = src0->nb[1]; - const size_t nb0 = dst->nb[0]; - - for (int64_t i1 = 0; i1 < ne01; i1++) { - float * src = (float *) ((char *) src0->data + i1*nb01); - int32_t * dst_ = (int32_t *) ((char *) dst->data + i1*nb0); - int v = 0; - ggml_vec_argmax_f32(ne00, &v, src); - dst_[0] = v; - } -} - -static void ggml_compute_forward_argmax( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - - switch (src0->type) { - case GGML_TYPE_F32: - { - ggml_compute_forward_argmax_f32(params, dst); - } break; - default: - { - GGML_ASSERT(false); - } break; - } -} - -// ggml_compute_forward_repeat - -static void ggml_compute_forward_repeat_f32( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - - GGML_ASSERT(params->ith == 0); - GGML_ASSERT(ggml_can_repeat(src0, dst)); - - if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) { - return; - } - - GGML_TENSOR_UNARY_OP_LOCALS - - // guaranteed to be an integer due to the check in ggml_can_repeat - const int nr0 = (int)(ne0/ne00); - const int nr1 = (int)(ne1/ne01); - const int nr2 = (int)(ne2/ne02); - const int nr3 = (int)(ne3/ne03); - - // TODO: support for transposed / permuted tensors - GGML_ASSERT(nb0 == sizeof(float)); - GGML_ASSERT(nb00 == sizeof(float)); - - // TODO: maybe this is not optimal? - for (int i3 = 0; i3 < nr3; i3++) { - for (int k3 = 0; k3 < ne03; k3++) { - for (int i2 = 0; i2 < nr2; i2++) { - for (int k2 = 0; k2 < ne02; k2++) { - for (int i1 = 0; i1 < nr1; i1++) { - for (int k1 = 0; k1 < ne01; k1++) { - for (int i0 = 0; i0 < nr0; i0++) { - ggml_vec_cpy_f32(ne00, - (float *) ((char *) dst->data + (i3*ne03 + k3)*nb3 + (i2*ne02 + k2)*nb2 + (i1*ne01 + k1)*nb1 + (i0*ne00)*nb0), - (float *) ((char *) src0->data + ( k3)*nb03 + ( k2)*nb02 + ( k1)*nb01)); - } - } - } - } - } - } - } -} - -static void ggml_compute_forward_repeat_f16( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - - GGML_ASSERT(params->ith == 0); - GGML_ASSERT(ggml_can_repeat(src0, dst)); - - if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) { - return; - } - - GGML_TENSOR_UNARY_OP_LOCALS - - // guaranteed to be an integer due to the check in ggml_can_repeat - const int nr0 = (int)(ne0/ne00); - const int nr1 = (int)(ne1/ne01); - const int nr2 = (int)(ne2/ne02); - const int nr3 = (int)(ne3/ne03); - - // TODO: support for transposed / permuted tensors - GGML_ASSERT(nb0 == sizeof(ggml_fp16_t)); - GGML_ASSERT(nb00 == sizeof(ggml_fp16_t)); - - // TODO: maybe this is not optimal? - for (int i3 = 0; i3 < nr3; i3++) { - for (int k3 = 0; k3 < ne03; k3++) { - for (int i2 = 0; i2 < nr2; i2++) { - for (int k2 = 0; k2 < ne02; k2++) { - for (int i1 = 0; i1 < nr1; i1++) { - for (int k1 = 0; k1 < ne01; k1++) { - for (int i0 = 0; i0 < nr0; i0++) { - ggml_fp16_t * y = (ggml_fp16_t *) ((char *) dst->data + (i3*ne03 + k3)*nb3 + (i2*ne02 + k2)*nb2 + (i1*ne01 + k1)*nb1 + (i0*ne00)*nb0); - ggml_fp16_t * x = (ggml_fp16_t *) ((char *) src0->data + ( k3)*nb03 + ( k2)*nb02 + ( k1)*nb01); - // ggml_vec_cpy_f16(ne00, y, x) - for (int i = 0; i < ne00; ++i) { - y[i] = x[i]; - } - } - } - } - } - } - } - } -} - -static void ggml_compute_forward_repeat( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - - switch (src0->type) { - case GGML_TYPE_F16: - case GGML_TYPE_I16: - { - ggml_compute_forward_repeat_f16(params, dst); - } break; - case GGML_TYPE_F32: - case GGML_TYPE_I32: - { - ggml_compute_forward_repeat_f32(params, dst); - } break; - default: - { - GGML_ASSERT(false); - } break; - } -} - -// ggml_compute_forward_repeat_back - -static void ggml_compute_forward_repeat_back_f32( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - - GGML_ASSERT(params->ith == 0); - GGML_ASSERT(ggml_can_repeat(dst, src0)); - - if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) { - return; - } - - GGML_TENSOR_UNARY_OP_LOCALS - - // guaranteed to be an integer due to the check in ggml_can_repeat - const int nr0 = (int)(ne00/ne0); - const int nr1 = (int)(ne01/ne1); - const int nr2 = (int)(ne02/ne2); - const int nr3 = (int)(ne03/ne3); - - // TODO: support for transposed / permuted tensors - GGML_ASSERT(nb0 == sizeof(float)); - GGML_ASSERT(nb00 == sizeof(float)); - - if (ggml_is_contiguous(dst)) { - ggml_vec_set_f32(ne0*ne1*ne2*ne3, dst->data, 0); - } else { - for (int k3 = 0; k3 < ne3; k3++) { - for (int k2 = 0; k2 < ne2; k2++) { - for (int k1 = 0; k1 < ne1; k1++) { - ggml_vec_set_f32(ne0, - (float *) ((char *) dst->data + k1*nb1 + k2*nb2 + k3*nb3), - 0); - } - } - } - } - - // TODO: maybe this is not optimal? - for (int i3 = 0; i3 < nr3; i3++) { - for (int k3 = 0; k3 < ne3; k3++) { - for (int i2 = 0; i2 < nr2; i2++) { - for (int k2 = 0; k2 < ne2; k2++) { - for (int i1 = 0; i1 < nr1; i1++) { - for (int k1 = 0; k1 < ne1; k1++) { - for (int i0 = 0; i0 < nr0; i0++) { - ggml_vec_acc_f32(ne0, - (float *) ((char *) dst->data + ( k3)*nb3 + ( k2)*nb2 + ( k1)*nb1), - (float *) ((char *) src0->data + (i3*ne3 + k3)*nb03 + (i2*ne2 + k2)*nb02 + (i1*ne1 + k1)*nb01 + (i0*ne0)*nb00)); - } - } - } - } - } - } - } -} - -static void ggml_compute_forward_repeat_back( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - - switch (src0->type) { - case GGML_TYPE_F32: - { - ggml_compute_forward_repeat_back_f32(params, dst); - } break; - default: - { - GGML_ASSERT(false); - } break; - } -} - -// ggml_compute_forward_concat - -static void ggml_compute_forward_concat_f32( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - const struct ggml_tensor * src1 = dst->src[1]; - - if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) { - return; - } - - GGML_ASSERT(src0->nb[0] == sizeof(float)); - - const int ith = params->ith; - const int nth = params->nth; - - GGML_TENSOR_BINARY_OP_LOCALS - - // TODO: support for transposed / permuted tensors - GGML_ASSERT(nb0 == sizeof(float)); - GGML_ASSERT(nb00 == sizeof(float)); - GGML_ASSERT(nb10 == sizeof(float)); - - for (int i3 = 0; i3 < ne3; i3++) { - for (int i2 = ith; i2 < ne2; i2 += nth) { - if (i2 < ne02) { // src0 - for (int i1 = 0; i1 < ne1; i1++) { - for (int i0 = 0; i0 < ne0; i0++) { - const float * x = (float *)((char *) src0->data + i0 * nb00 + i1 * nb01 + i2 * nb02 + i3 * nb03); - - float * y = (float *)((char *)dst->data + i0 * nb0 + i1 * nb1 + i2 * nb2 + i3 * nb3); - *y = *x; - } - } - } // src1 - else { - for (int i1 = 0; i1 < ne1; i1++) { - for (int i0 = 0; i0 < ne0; i0++) { - const float * x = (float *)((char *) src1->data + i0 * nb10 + i1 * nb11 + (i2 - ne02) * nb12 + i3 * nb13); - - float * y = (float *)((char *)dst->data + i0 * nb0 + i1 * nb1 + i2 * nb2 + i3 * nb3); - *y = *x; - } - } - } - } - } -} - -static void ggml_compute_forward_concat( - const struct ggml_compute_params* params, - struct ggml_tensor* dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - - switch (src0->type) { - case GGML_TYPE_F32: - case GGML_TYPE_I32: - { - ggml_compute_forward_concat_f32(params, dst); - } break; - default: - { - GGML_ASSERT(false); - } break; - } -} - -// ggml_compute_forward_abs - -static void ggml_compute_forward_abs_f32( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - - assert(params->ith == 0); - assert(ggml_are_same_shape(src0, dst)); - - if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) { - return; - } - - const int n = ggml_nrows(src0); - const int nc = src0->ne[0]; - - assert(dst->nb[0] == sizeof(float)); - assert(src0->nb[0] == sizeof(float)); - - for (int i = 0; i < n; i++) { - ggml_vec_abs_f32(nc, - (float *) ((char *) dst->data + i*( dst->nb[1])), - (float *) ((char *) src0->data + i*(src0->nb[1]))); - } -} - -static void ggml_compute_forward_abs( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - - switch (src0->type) { - case GGML_TYPE_F32: - { - ggml_compute_forward_abs_f32(params, dst); - } break; - default: - { - GGML_ASSERT(false); - } break; - } -} - -// ggml_compute_forward_sgn - -static void ggml_compute_forward_sgn_f32( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - - assert(params->ith == 0); - assert(ggml_are_same_shape(src0, dst)); - - if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) { - return; - } - - const int n = ggml_nrows(src0); - const int nc = src0->ne[0]; - - assert(dst->nb[0] == sizeof(float)); - assert(src0->nb[0] == sizeof(float)); - - for (int i = 0; i < n; i++) { - ggml_vec_sgn_f32(nc, - (float *) ((char *) dst->data + i*( dst->nb[1])), - (float *) ((char *) src0->data + i*(src0->nb[1]))); - } -} - -static void ggml_compute_forward_sgn( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - - switch (src0->type) { - case GGML_TYPE_F32: - { - ggml_compute_forward_sgn_f32(params, dst); - } break; - default: - { - GGML_ASSERT(false); - } break; - } -} - -// ggml_compute_forward_neg - -static void ggml_compute_forward_neg_f32( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - - assert(params->ith == 0); - assert(ggml_are_same_shape(src0, dst)); - - if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) { - return; - } - - const int n = ggml_nrows(src0); - const int nc = src0->ne[0]; - - assert(dst->nb[0] == sizeof(float)); - assert(src0->nb[0] == sizeof(float)); - - for (int i = 0; i < n; i++) { - ggml_vec_neg_f32(nc, - (float *) ((char *) dst->data + i*( dst->nb[1])), - (float *) ((char *) src0->data + i*(src0->nb[1]))); - } -} - -static void ggml_compute_forward_neg( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - - switch (src0->type) { - case GGML_TYPE_F32: - { - ggml_compute_forward_neg_f32(params, dst); - } break; - default: - { - GGML_ASSERT(false); - } break; - } -} - -// ggml_compute_forward_step - -static void ggml_compute_forward_step_f32( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - - assert(params->ith == 0); - assert(ggml_are_same_shape(src0, dst)); - - if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) { - return; - } - - const int n = ggml_nrows(src0); - const int nc = src0->ne[0]; - - assert(dst->nb[0] == sizeof(float)); - assert(src0->nb[0] == sizeof(float)); - - for (int i = 0; i < n; i++) { - ggml_vec_step_f32(nc, - (float *) ((char *) dst->data + i*( dst->nb[1])), - (float *) ((char *) src0->data + i*(src0->nb[1]))); - } -} - -static void ggml_compute_forward_step( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - - switch (src0->type) { - case GGML_TYPE_F32: - { - ggml_compute_forward_step_f32(params, dst); - } break; - default: - { - GGML_ASSERT(false); - } break; - } -} - -// ggml_compute_forward_tanh - -static void ggml_compute_forward_tanh_f32( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - - assert(params->ith == 0); - assert(ggml_are_same_shape(src0, dst)); - - if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) { - return; - } - - const int n = ggml_nrows(src0); - const int nc = src0->ne[0]; - - assert(dst->nb[0] == sizeof(float)); - assert(src0->nb[0] == sizeof(float)); - - for (int i = 0; i < n; i++) { - ggml_vec_tanh_f32(nc, - (float *) ((char *) dst->data + i*( dst->nb[1])), - (float *) ((char *) src0->data + i*(src0->nb[1]))); - } -} - -static void ggml_compute_forward_tanh( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - - switch (src0->type) { - case GGML_TYPE_F32: - { - ggml_compute_forward_tanh_f32(params, dst); - } break; - default: - { - GGML_ASSERT(false); - } break; - } -} - -// ggml_compute_forward_elu - -static void ggml_compute_forward_elu_f32( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - - assert(params->ith == 0); - assert(ggml_are_same_shape(src0, dst)); - - if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) { - return; - } - - const int n = ggml_nrows(src0); - const int nc = src0->ne[0]; - - assert(dst->nb[0] == sizeof(float)); - assert(src0->nb[0] == sizeof(float)); - - for (int i = 0; i < n; i++) { - ggml_vec_elu_f32(nc, - (float *) ((char *) dst->data + i*( dst->nb[1])), - (float *) ((char *) src0->data + i*(src0->nb[1]))); - } -} - -static void ggml_compute_forward_elu( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - - switch (src0->type) { - case GGML_TYPE_F32: - { - ggml_compute_forward_elu_f32(params, dst); - } break; - default: - { - GGML_ASSERT(false); - } break; - } -} - -// ggml_compute_forward_relu - -static void ggml_compute_forward_relu_f32( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - - assert(params->ith == 0); - assert(ggml_are_same_shape(src0, dst)); - - if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) { - return; - } - - const int n = ggml_nrows(src0); - const int nc = src0->ne[0]; - - assert(dst->nb[0] == sizeof(float)); - assert(src0->nb[0] == sizeof(float)); - - for (int i = 0; i < n; i++) { - ggml_vec_relu_f32(nc, - (float *) ((char *) dst->data + i*( dst->nb[1])), - (float *) ((char *) src0->data + i*(src0->nb[1]))); - } -} - -static void ggml_compute_forward_relu( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - - switch (src0->type) { - case GGML_TYPE_F32: - { - ggml_compute_forward_relu_f32(params, dst); - } break; - default: - { - GGML_ASSERT(false); - } break; - } -} - -// ggml_compute_forward_gelu - -static void ggml_compute_forward_gelu_f32( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - - GGML_ASSERT(ggml_is_contiguous_except_dim_1(src0)); - GGML_ASSERT(ggml_is_contiguous_except_dim_1(dst)); - GGML_ASSERT(ggml_are_same_shape(src0, dst)); - - if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) { - return; - } - - const int ith = params->ith; - const int nth = params->nth; - - const int nc = src0->ne[0]; - const int nr = ggml_nrows(src0); - - // rows per thread - const int dr = (nr + nth - 1)/nth; - - // row range for this thread - const int ir0 = dr*ith; - const int ir1 = MIN(ir0 + dr, nr); - - for (int i1 = ir0; i1 < ir1; i1++) { - ggml_vec_gelu_f32(nc, - (float *) ((char *) dst->data + i1*( dst->nb[1])), - (float *) ((char *) src0->data + i1*(src0->nb[1]))); - -#ifndef NDEBUG - for (int k = 0; k < nc; k++) { - const float x = ((float *) ((char *) dst->data + i1*( dst->nb[1])))[k]; - UNUSED(x); - assert(!isnan(x)); - assert(!isinf(x)); - } -#endif - } -} - -static void ggml_compute_forward_gelu( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - - switch (src0->type) { - case GGML_TYPE_F32: - { - ggml_compute_forward_gelu_f32(params, dst); - } break; - default: - { - GGML_ASSERT(false); - } break; - } -} - -// ggml_compute_forward_gelu_quick - -static void ggml_compute_forward_gelu_quick_f32( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - - GGML_ASSERT(ggml_is_contiguous_except_dim_1(src0)); - GGML_ASSERT(ggml_is_contiguous_except_dim_1(dst)); - GGML_ASSERT(ggml_are_same_shape(src0, dst)); - - if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) { - return; - } - - const int ith = params->ith; - const int nth = params->nth; - - const int nc = src0->ne[0]; - const int nr = ggml_nrows(src0); - - // rows per thread - const int dr = (nr + nth - 1)/nth; - - // row range for this thread - const int ir0 = dr*ith; - const int ir1 = MIN(ir0 + dr, nr); - - for (int i1 = ir0; i1 < ir1; i1++) { - ggml_vec_gelu_quick_f32(nc, - (float *) ((char *) dst->data + i1*( dst->nb[1])), - (float *) ((char *) src0->data + i1*(src0->nb[1]))); - -#ifndef NDEBUG - for (int k = 0; k < nc; k++) { - const float x = ((float *) ((char *) dst->data + i1*( dst->nb[1])))[k]; - UNUSED(x); - assert(!isnan(x)); - assert(!isinf(x)); - } -#endif - } -} - -static void ggml_compute_forward_gelu_quick( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - - switch (src0->type) { - case GGML_TYPE_F32: - { - ggml_compute_forward_gelu_quick_f32(params, dst); - } break; - default: - { - GGML_ASSERT(false); - } break; - } -} - -// ggml_compute_forward_silu - -static void ggml_compute_forward_silu_f32( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - - GGML_ASSERT(ggml_is_contiguous_except_dim_1(src0)); - GGML_ASSERT(ggml_is_contiguous_except_dim_1(dst)); - GGML_ASSERT(ggml_are_same_shape(src0, dst)); - - if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) { - return; - } - - const int ith = params->ith; - const int nth = params->nth; - - const int nc = src0->ne[0]; - const int nr = ggml_nrows(src0); - - // rows per thread - const int dr = (nr + nth - 1)/nth; - - // row range for this thread - const int ir0 = dr*ith; - const int ir1 = MIN(ir0 + dr, nr); - - for (int i1 = ir0; i1 < ir1; i1++) { - ggml_vec_silu_f32(nc, - (float *) ((char *) dst->data + i1*( dst->nb[1])), - (float *) ((char *) src0->data + i1*(src0->nb[1]))); - -#ifndef NDEBUG - for (int k = 0; k < nc; k++) { - const float x = ((float *) ((char *) dst->data + i1*(dst->nb[1])))[k]; - UNUSED(x); - assert(!isnan(x)); - assert(!isinf(x)); - } -#endif - } -} - -static void ggml_compute_forward_silu( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - - switch (src0->type) { - case GGML_TYPE_F32: - { - ggml_compute_forward_silu_f32(params, dst); - } break; - default: - { - GGML_ASSERT(false); - } break; - } -} -// ggml_compute_forward_leaky_relu - -static void ggml_compute_forward_leaky_relu_f32( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - - assert(params->ith == 0); - assert(ggml_are_same_shape(src0, dst)); - - if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) { - return; - } - - const int n = ggml_nrows(src0); - const int nc = src0->ne[0]; - - float negative_slope; - memcpy(&negative_slope, dst->op_params, sizeof(float)); - - assert(dst->nb[0] == sizeof(float)); - assert(src0->nb[0] == sizeof(float)); - - for (int i = 0; i < n; i++) { - ggml_vec_leaky_relu_f32(nc, - (float *) ((char *) dst->data + i*( dst->nb[1])), - (float *) ((char *) src0->data + i*(src0->nb[1])), negative_slope); - } -} - -static void ggml_compute_forward_leaky_relu( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - - switch (src0->type) { - case GGML_TYPE_F32: - { - ggml_compute_forward_leaky_relu_f32(params, dst); - } break; - default: - { - GGML_ASSERT(false); - } break; - } -} - -// ggml_compute_forward_silu_back - -static void ggml_compute_forward_silu_back_f32( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - const struct ggml_tensor * grad = dst->src[1]; - - GGML_ASSERT(ggml_is_contiguous_except_dim_1(grad)); - GGML_ASSERT(ggml_is_contiguous_except_dim_1(src0)); - GGML_ASSERT(ggml_is_contiguous_except_dim_1(dst)); - GGML_ASSERT(ggml_are_same_shape(src0, dst)); - GGML_ASSERT(ggml_are_same_shape(src0, grad)); - - if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) { - return; - } - - const int ith = params->ith; - const int nth = params->nth; - - const int nc = src0->ne[0]; - const int nr = ggml_nrows(src0); - - // rows per thread - const int dr = (nr + nth - 1)/nth; - - // row range for this thread - const int ir0 = dr*ith; - const int ir1 = MIN(ir0 + dr, nr); - - for (int i1 = ir0; i1 < ir1; i1++) { - ggml_vec_silu_backward_f32(nc, - (float *) ((char *) dst->data + i1*( dst->nb[1])), - (float *) ((char *) src0->data + i1*(src0->nb[1])), - (float *) ((char *) grad->data + i1*(grad->nb[1]))); - -#ifndef NDEBUG - for (int k = 0; k < nc; k++) { - const float x = ((float *) ((char *) dst->data + i1*( dst->nb[1])))[k]; - UNUSED(x); - assert(!isnan(x)); - assert(!isinf(x)); - } -#endif - } -} - -static void ggml_compute_forward_silu_back( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - - switch (src0->type) { - case GGML_TYPE_F32: - { - ggml_compute_forward_silu_back_f32(params, dst); - } break; - default: - { - GGML_ASSERT(false); - } break; - } -} - - -static void ggml_compute_forward_hardswish_f32( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - - assert(params->ith == 0); - assert(ggml_are_same_shape(src0, dst)); - - if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) { - return; - } - - const int n = ggml_nrows(src0); - const int nc = src0->ne[0]; - - assert(dst->nb[0] == sizeof(float)); - assert(src0->nb[0] == sizeof(float)); - - for (int i = 0; i < n; i++) { - ggml_vec_hardswish_f32(nc, - (float *) ((char *) dst->data + i*( dst->nb[1])), - (float *) ((char *) src0->data + i*(src0->nb[1]))); - } -} -static void ggml_compute_forward_hardswish( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - - switch (src0->type) { - case GGML_TYPE_F32: - { - ggml_compute_forward_hardswish_f32(params, dst); - } break; - default: - { - GGML_ASSERT(false); - } break; - } -} - -static void ggml_compute_forward_hardsigmoid_f32( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - - assert(params->ith == 0); - assert(ggml_are_same_shape(src0, dst)); - - if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) { - return; - } - - const int n = ggml_nrows(src0); - const int nc = src0->ne[0]; - - assert(dst->nb[0] == sizeof(float)); - assert(src0->nb[0] == sizeof(float)); - - for (int i = 0; i < n; i++) { - ggml_vec_hardsigmoid_f32(nc, - (float *) ((char *) dst->data + i*( dst->nb[1])), - (float *) ((char *) src0->data + i*(src0->nb[1]))); - } -} - -static void ggml_compute_forward_hardsigmoid( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - - switch (src0->type) { - case GGML_TYPE_F32: - { - ggml_compute_forward_hardsigmoid_f32(params, dst); - } break; - default: - { - GGML_ASSERT(false); - } break; - } -} - - -// ggml_compute_forward_norm - -static void ggml_compute_forward_norm_f32( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - - GGML_ASSERT(ggml_are_same_shape(src0, dst)); - - if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) { - return; - } - - GGML_ASSERT(src0->nb[0] == sizeof(float)); - - const int ith = params->ith; - const int nth = params->nth; - - GGML_TENSOR_UNARY_OP_LOCALS - - float eps; - memcpy(&eps, dst->op_params, sizeof(float)); - - GGML_ASSERT(eps > 0.0f); - - // TODO: optimize - for (int64_t i03 = 0; i03 < ne03; i03++) { - for (int64_t i02 = 0; i02 < ne02; i02++) { - for (int64_t i01 = ith; i01 < ne01; i01 += nth) { - const float * x = (float *) ((char *) src0->data + i01*nb01 + i02*nb02 + i03*nb03); - - ggml_float sum = 0.0; - for (int64_t i00 = 0; i00 < ne00; i00++) { - sum += (ggml_float)x[i00]; - } - - float mean = sum/ne00; - - float * y = (float *) ((char *) dst->data + i01*nb1 + i02*nb2 + i03*nb3); - - ggml_float sum2 = 0.0; - for (int64_t i00 = 0; i00 < ne00; i00++) { - float v = x[i00] - mean; - y[i00] = v; - sum2 += (ggml_float)(v*v); - } - - float variance = sum2/ne00; - const float scale = 1.0f/sqrtf(variance + eps); - - ggml_vec_scale_f32(ne00, y, scale); - } - } - } -} - -static void ggml_compute_forward_norm( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - - switch (src0->type) { - case GGML_TYPE_F32: - { - ggml_compute_forward_norm_f32(params, dst); - } break; - default: - { - GGML_ASSERT(false); - } break; - } -} - -// ggml_compute_forward_group_rms_norm - -static void ggml_compute_forward_rms_norm_f32( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - - GGML_ASSERT(ggml_are_same_shape(src0, dst)); - - if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) { - return; - } - - GGML_ASSERT(src0->nb[0] == sizeof(float)); - - const int ith = params->ith; - const int nth = params->nth; - - GGML_TENSOR_UNARY_OP_LOCALS - - float eps; - memcpy(&eps, dst->op_params, sizeof(float)); - - GGML_ASSERT(eps > 0.0f); - - // TODO: optimize - for (int64_t i03 = 0; i03 < ne03; i03++) { - for (int64_t i02 = 0; i02 < ne02; i02++) { - for (int64_t i01 = ith; i01 < ne01; i01 += nth) { - const float * x = (float *) ((char *) src0->data + i01*nb01 + i02*nb02 + i03*nb03); - - ggml_float sum = 0.0; - for (int64_t i00 = 0; i00 < ne00; i00++) { - sum += (ggml_float)(x[i00] * x[i00]); - } - - const float mean = sum/ne00; - - float * y = (float *) ((char *) dst->data + i01*nb1 + i02*nb2 + i03*nb3); - - memcpy(y, x, ne00 * sizeof(float)); - // for (int i00 = 0; i00 < ne00; i00++) { - // y[i00] = x[i00]; - // } - - const float scale = 1.0f/sqrtf(mean + eps); - - ggml_vec_scale_f32(ne00, y, scale); - } - } - } -} - -static void ggml_compute_forward_rms_norm( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - - switch (src0->type) { - case GGML_TYPE_F32: - { - ggml_compute_forward_rms_norm_f32(params, dst); - } break; - default: - { - GGML_ASSERT(false); - } break; - } -} - -static void ggml_compute_forward_rms_norm_back_f32( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - const struct ggml_tensor * src1 = dst->src[1]; - - GGML_ASSERT(ggml_are_same_shape(src0, dst) && ggml_are_same_shape(src0, src1)); - - if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) { - return; - } - - GGML_ASSERT(src0->nb[0] == sizeof(float)); - - const int ith = params->ith; - const int nth = params->nth; - - GGML_TENSOR_BINARY_OP_LOCALS - - float eps; - memcpy(&eps, dst->op_params, sizeof(float)); - - // TODO: optimize - for (int64_t i03 = 0; i03 < ne03; i03++) { - for (int64_t i02 = 0; i02 < ne02; i02++) { - for (int64_t i01 = ith; i01 < ne01; i01 += nth) { - // src1 is same shape as src0 => same indices - const int64_t i11 = i01; - const int64_t i12 = i02; - const int64_t i13 = i03; - - const float * x = (float *) ((char *) src0->data + i01*nb01 + i02*nb02 + i03*nb03); - const float * dz = (float *) ((char *) src1->data + i11*nb11 + i12*nb12 + i13*nb13); - - ggml_float sum_xx = 0.0; - ggml_float sum_xdz = 0.0; - - for (int64_t i00 = 0; i00 < ne00; i00++) { - sum_xx += (ggml_float)(x[i00] * x[i00]); - sum_xdz += (ggml_float)(x[i00] * dz[i00]); - } - - //const float mean = (float)(sum_xx)/ne00; - const float mean_eps = (float)(sum_xx)/ne00 + eps; - const float sum_eps = (float)(sum_xx) + eps*ne00; - //const float mean_xdz = (float)(sum_xdz)/ne00; - // we could cache rms from forward pass to improve performance. - // to do this implement ggml_rms and compose ggml_rms_norm using ggml_rms. - //const float rms = sqrtf(mean_eps); - const float rrms = 1.0f / sqrtf(mean_eps); - //const float scale = -rrms/(ne00 * mean_eps); // -1/(n*rms**3) - - { - // z = rms_norm(x) - // - // rms_norm(src0) = - // scale( - // src0, - // div( - // 1, - // sqrt( - // add( - // scale( - // sum( - // sqr( - // src0)), - // (1.0/N)), - // eps)))); - - // postorder: - // ## op args grad - // 00 param src0 grad[#00] - // 01 const 1 - // 02 sqr (#00) grad[#02] - // 03 sum (#02) grad[#03] - // 04 const 1/N - // 05 scale (#03, #04) grad[#05] - // 06 const eps - // 07 add (#05, #06) grad[#07] - // 08 sqrt (#07) grad[#08] - // 09 div (#01,#08) grad[#09] - // 10 scale (#00,#09) grad[#10] - // - // backward pass, given grad[#10] - // #10: scale - // grad[#00] += scale(grad[#10],#09) - // grad[#09] += sum(mul(grad[#10],#00)) - // #09: div - // grad[#08] += neg(mul(grad[#09], div(#09,#08))) - // #08: sqrt - // grad[#07] += mul(grad[#08], div(0.5, #08)) - // #07: add - // grad[#05] += grad[#07] - // #05: scale - // grad[#03] += scale(grad[#05],#04) - // #03: sum - // grad[#02] += repeat(grad[#03], #02) - // #02: - // grad[#00] += scale(mul(#00, grad[#02]), 2.0) - // - // substitute and simplify: - // grad[#00] = scale(grad(#10), #09) + scale(mul(#00, grad[#02]), 2.0) - // grad[#02] = repeat(grad[#03], #02) - // grad[#02] = repeat(scale(grad[#05],#04), #02) - // grad[#02] = repeat(scale(grad[#07],#04), #02) - // grad[#02] = repeat(scale(mul(grad[#08], div(0.5, #08)),#04), #02) - // grad[#02] = repeat(scale(mul(neg(mul(grad[#09], div(#09,#08))), div(0.5, #08)),#04), #02) - // grad[#02] = repeat(scale(mul(neg(mul(sum(mul(grad[#10],#00)), div(#09,#08))), div(0.5, #08)),#04), #02) - // grad[#02] = repeat(-(sum(mul(grad[#10],#00)) * div(#09,#08) * div(0.5, #08) * (1/N)), #02) - // grad[#02] = repeat(-(sum(mul(grad[#10],#00)) * div(div(#01,#08),#08) * div(0.5, #08) * (1/N)), #02) - // grad[#02] = repeat(-(sum(mul(grad[#10],#00)) * div(1,#08*#08) * div(0.5, #08) * (1/N)), #02) - // grad[#02] = repeat(-(sum(mul(grad[#10],#00)) * div(1,#07) * div(0.5, #08) * (1/N)), #02) - // grad[#00] = scale(grad(#10), #09) + scale(mul(#00, grad[#02]), 2.0) - // grad[#00] = scale(grad(#10), #09) + scale(mul(#00, repeat(-(sum(mul(grad[#10],#00)) * div(1,#07) * div(0.5, #08) * (1/N)), #02)), 2.0) - // grad[#00] = scale(grad(#10), #09) + scale(scale(#00, -(sum(mul(grad[#10],#00)) * div(1,#07) * div(0.5, #08) * (1/N))), 2.0) - // grad[#00] = scale(grad(#10), #09) + scale(#00, -(sum(mul(grad[#10],#00)) * div(1,#07) * div(1,#08) * (1/N))) - // grad[#00] = scale(grad(#10), #09) + scale(#00, sum(mul(grad[#10],#00)) * div(1,#07*#08) * (-1/N)) - // grad[#00] = scale(grad(#10), #09) + scale(#00, sum(mul(grad[#10],#00)) * div(1,#07*#08) * (-1/N)) - // grad[#00] = scale(grad(#10), #09) + scale(#00, sum(mul(grad[#10],#00)) * div(1,mean_eps*rms) * (-1/N)) - // grad[#00] = scale(grad(#10), #09) + scale(#00, sum(mul(grad[#10],#00)) * div(-1,rms*N*mean_eps)) - // grad[#00] = scale(grad(#10), #09) + scale(#00, sum(mul(grad[#10],#00)) * div(-1,rms*N*(sum_xx/N+eps))) - // grad[#00] = scale(grad(#10), #09) + scale(#00, sum(mul(grad[#10],#00)) * div(-1,rms*N*sum_xx+rms*N*eps)) - // grad[#00] = scale(dz, rrms) + scale(x, sum(mul(dz,x)) * div(-1,rms*N*mean_eps)) - // grad[#00] = scale(dz, rrms) + scale(x, sum_xdz * div(-1,rms*N*mean_eps)) - // a = b*c + d*e - // a = b*c*f/f + d*e*f/f - // a = (b*c*f + d*e*f)*(1/f) - // a = (b*c*(1/c) + d*e*(1/c))*(1/(1/c)) - // a = (b + d*e/c)*c - // b = dz, c = rrms, d = x, e = sum_xdz * div(-1,rms*N*mean_eps) - // a = (dz + x*sum_xdz * div(-1,rms*N*mean_eps)/rrms)*rrms - // a = (dz + x*sum_xdz * div(-1,rms*N*mean_eps)*rms)*rrms - // a = (dz + x*sum_xdz * div(-rms,rms*N*mean_eps))*rrms - // a = (dz + x*sum_xdz * div(-1,N*mean_eps))*rrms - // a = (dz + x*div(-sum_xdz,N*mean_eps))*rrms - // a = (dz + x*div(-mean_xdz,mean_eps))*rrms - // grad[#00] = scale(dz + scale(x, div(-mean_xdz,mean_eps)),rrms) - // grad[#00] = scale(dz + scale(x, -mean_xdz/mean_eps),rrms) - // dx = scale(dz + scale(x, -mean_xdz/mean_eps),rrms) - } - // dx = scale(dz + scale(x, -mean_xdz/mean_eps),rrms) - // post-order: - // dx := x - // dx := scale(dx,-mean_xdz/mean_eps) - // dx := add(dx, dz) - // dx := scale(dx, rrms) - float * dx = (float *) ((char *) dst->data + i01*nb1 + i02*nb2 + i03*nb3); - - ggml_vec_cpy_f32 (ne00, dx, x); - // ggml_vec_scale_f32(ne00, dx, -mean_xdz/mean_eps); - ggml_vec_scale_f32(ne00, dx, (float)(-sum_xdz)/sum_eps); - ggml_vec_acc_f32 (ne00, dx, dz); - ggml_vec_scale_f32(ne00, dx, rrms); - } - } - } -} - -static void ggml_compute_forward_rms_norm_back( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - - switch (src0->type) { - case GGML_TYPE_F32: - { - ggml_compute_forward_rms_norm_back_f32(params, dst); - } break; - default: - { - GGML_ASSERT(false); - } break; - } -} - -// ggml_compute_forward_group_norm - -static void ggml_compute_forward_group_norm_f32( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - - GGML_ASSERT(ggml_are_same_shape(src0, dst)); - - if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) { - return; - } - - GGML_ASSERT(src0->nb[0] == sizeof(float)); - - const int ith = params->ith; - const int nth = params->nth; - - GGML_TENSOR_UNARY_OP_LOCALS - - const float eps = 1e-6f; // TODO: make this a parameter - - // TODO: optimize - - int n_channels = src0->ne[2]; - int n_groups = dst->op_params[0]; - int n_channels_per_group = (n_channels + n_groups - 1) / n_groups; - for (int i = ith; i < n_groups; i += nth) { - int start = i * n_channels_per_group; - int end = start + n_channels_per_group; - if (end > n_channels) { - end = n_channels; - } - int step = end - start; - - for (int64_t i03 = 0; i03 < ne03; i03++) { - ggml_float sum = 0.0; - for (int64_t i02 = start; i02 < end; i02++) { - for (int64_t i01 = 0; i01 < ne01; i01++) { - const float * x = (float *)((char *) src0->data + i01 * nb01 + i02 * nb02 + i03 * nb03); - - ggml_float sumr = 0.0; - for (int64_t i00 = 0; i00 < ne00; i00++) { - sumr += (ggml_float)x[i00]; - } - sum += sumr; - } - } - const float mean = sum / (ne00 * ne01 * step); - - ggml_float sum2 = 0.0; - for (int64_t i02 = start; i02 < end; i02++) { - for (int64_t i01 = 0; i01 < ne01; i01++) { - const float * x = (float *)((char *) src0->data + i01 * nb01 + i02 * nb02 + i03 * nb03); - - float * y = (float *)((char *) dst->data + i01 * nb1 + i02 * nb2 + i03 * nb3); - - ggml_float sumr = 0.0; - for (int64_t i00 = 0; i00 < ne00; i00++) { - float v = x[i00] - mean; - y[i00] = v; - sumr += (ggml_float)(v * v); - } - sum2 += sumr; - } - } - const float variance = sum2 / (ne00 * ne01 * step); - const float scale = 1.0f / sqrtf(variance + eps); - - for (int64_t i02 = start; i02 < end; i02++) { - for (int64_t i01 = 0; i01 < ne01; i01++) { - float * y = (float *)((char *) dst->data + i01 * nb1 + i02 * nb2 + i03 * nb3); - ggml_vec_scale_f32(ne00, y, scale); - } - } - } - } -} - -static void ggml_compute_forward_group_norm( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - - switch (src0->type) { - case GGML_TYPE_F32: - { - ggml_compute_forward_group_norm_f32(params, dst); - } break; - default: - { - GGML_ASSERT(false); - } break; - } -} - -// ggml_compute_forward_mul_mat - -#if defined(GGML_USE_ACCELERATE) || defined(GGML_USE_OPENBLAS) -// helper function to determine if it is better to use BLAS or not -// for large matrices, BLAS is faster -static bool ggml_compute_forward_mul_mat_use_blas(struct ggml_tensor * dst) { - const struct ggml_tensor * src0 = dst->src[0]; - const struct ggml_tensor * src1 = dst->src[1]; - - //const int64_t ne00 = src0->ne[0]; - //const int64_t ne01 = src0->ne[1]; - - const int64_t ne10 = src1->ne[0]; - - const int64_t ne0 = dst->ne[0]; - const int64_t ne1 = dst->ne[1]; - - // NOTE: with GGML_OP_MUL_MAT_ID we don't want to go through the BLAS branch because it will dequantize (to_float) - // all the experts for each batch element and the processing would become incredibly slow - // TODO: find the optimal values for these - if (dst->op != GGML_OP_MUL_MAT_ID && - ggml_is_contiguous(src0) && - ggml_is_contiguous(src1) && - //src0->type == GGML_TYPE_F32 && - src1->type == GGML_TYPE_F32 && - (ne0 >= 32 && ne1 >= 32 && ne10 >= 32)) { - - /*printf("BLAS: %d %d %d %d %d\n", ne0, ne1, ne10, ne00, ne01);*/ - return true; - } - - return false; -} -#endif - -static void ggml_compute_forward_mul_mat( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - const struct ggml_tensor * src1 = dst->src[1]; - - int64_t t0 = ggml_perf_time_us(); - UNUSED(t0); - - GGML_TENSOR_BINARY_OP_LOCALS - - const int ith = params->ith; - const int nth = params->nth; - - const enum ggml_type type = src0->type; - - const bool src1_cont = ggml_is_contiguous(src1); - - ggml_vec_dot_t const vec_dot = type_traits[type].vec_dot; - enum ggml_type const vec_dot_type = type_traits[type].vec_dot_type; - ggml_from_float_t const from_float_to_vec_dot = type_traits[vec_dot_type].from_float; - int64_t const vec_dot_num_rows = type_traits[type].nrows; - - GGML_ASSERT(ne0 == ne01); - GGML_ASSERT(ne1 == ne11); - GGML_ASSERT(ne2 == ne12); - GGML_ASSERT(ne3 == ne13); - - // we don't support permuted src0 or src1 - GGML_ASSERT(nb00 == ggml_type_size(type)); - GGML_ASSERT(nb10 == ggml_type_size(src1->type)); - - // dst cannot be transposed or permuted - GGML_ASSERT(nb0 == sizeof(float)); - GGML_ASSERT(nb0 <= nb1); - GGML_ASSERT(nb1 <= nb2); - GGML_ASSERT(nb2 <= nb3); - - // broadcast factors - const int64_t r2 = ne12/ne02; - const int64_t r3 = ne13/ne03; - - // nb01 >= nb00 - src0 is not transposed - // compute by src0 rows - -#if defined(GGML_USE_CLBLAST) - if (isOpenCLSupported && ggml_cl_can_mul_mat(src0, src1, dst)) { - if (params->ith == 0 && params->type == GGML_TASK_TYPE_COMPUTE) { - ggml_cl_mul_mat(src0, src1, dst, params->wdata, params->wsize); - } - return; - } -#endif - -#if defined(GGML_USE_ACCELERATE) || defined(GGML_USE_OPENBLAS) - if (ggml_compute_forward_mul_mat_use_blas(dst)) { - const int64_t ne_plane = ne01*ne00; - const size_t desired_wsize = ne13*ne12*ne_plane*sizeof(float); - UNUSED(desired_wsize); - - if (params->type == GGML_TASK_TYPE_INIT) { - if (type != GGML_TYPE_F32) { - assert(params->wsize >= desired_wsize); - // parallelize by src0 rows - for (int64_t i13 = 0; i13 < ne13; i13++) { - for (int64_t i12 = 0; i12 < ne12; i12++) { - // broadcast src0 into src1 across 2nd,3rd dimension - const int64_t i03 = i13/r3; - const int64_t i02 = i12/r2; - - const void * x = (char *) src0->data + i02*nb02 + i03*nb03; - float * const wdata = (float *) params->wdata + i13*ne12*ne_plane + i12*ne_plane; - ggml_to_float_t const to_float = type_traits[type].to_float; - - for (int64_t i01 = ith; i01 < ne01; i01 += nth) { - to_float((const char *) x + i01*nb01, wdata + i01*ne00, ne00); - } - } - } - } - return; - } - - if (params->type == GGML_TASK_TYPE_FINALIZE) { - return; - } - - // perform sgemm, parallelization controlled by blas lib - if (ith != 0) { - return; - } - - //const int64_t tgemm0 = ggml_perf_time_us(); - for (int64_t i13 = 0; i13 < ne13; i13++) { - for (int64_t i12 = 0; i12 < ne12; i12++) { - const int64_t i03 = i13/r3; - const int64_t i02 = i12/r2; - - const void * x = (char *) src0->data + i02*nb02 + i03*nb03; - const float * y = (float *) ((char *) src1->data + i12*nb12 + i13*nb13); - float * d = (float *) ((char *) dst->data + i12*nb2 + i13*nb3); - - if (type != GGML_TYPE_F32) { - x = (float *) params->wdata + i13*ne12*ne_plane + i12*ne_plane; - } - - cblas_sgemm(CblasRowMajor, CblasNoTrans, CblasTrans, - ne1, ne01, ne10, - 1.0f, y, ne10, - x, ne00, - 0.0f, d, ne01); - } - } - //printf("cblas_sgemm = %.3f ms, %lld flops\n", (ggml_perf_time_us() - tgemm0)/1000.0, ne13*ne12*ne1*ne01*ne10*2); - - //printf("CBLAS = %f ms, %d x %d x %d x %d\n", (ggml_perf_time_us() - t0)/1000.0, ne0, ne1, ne2, ne3); - - return; - } -#endif - -#if GGML_USE_LLAMAFILE - if (src1_cont) { - for (int64_t i13 = 0; i13 < ne13; i13++) - for (int64_t i12 = 0; i12 < ne12; i12++) - if (!llamafile_sgemm(ne01, ne11, ne00/ggml_blck_size(src0->type), - (const char *)src0->data + i12/r2*nb02 + i13/r3*nb03, - nb01/ggml_type_size(src0->type), - (const char *)src1->data + i12*nb12 + i13*nb13, - nb11/ggml_type_size(src1->type), - (char *)dst->data + i12*nb2 + i13*nb3, - nb1/ggml_type_size(dst->type), - ith, nth, - params->type, - src0->type, - src1->type, - dst->type)) - goto UseGgmlGemm1; - return; - } -UseGgmlGemm1:; -#endif - - if (params->type == GGML_TASK_TYPE_INIT) { - if (ith != 0) { - return; - } - if (src1->type != vec_dot_type) { - char * wdata = params->wdata; - const size_t row_size = ggml_row_size(vec_dot_type, ne10); - - assert(params->wsize >= ne11*ne12*ne13*row_size); - GGML_ASSERT(src1->type == GGML_TYPE_F32); - - for (int64_t i13 = 0; i13 < ne13; ++i13) { - for (int64_t i12 = 0; i12 < ne12; ++i12) { - for (int64_t i11 = 0; i11 < ne11; ++i11) { - from_float_to_vec_dot((float *)((char *) src1->data + i13*nb13 + i12*nb12 + i11*nb11), (void *) wdata, ne10); - wdata += row_size; - } - } - } - } - - return; - } - - if (params->type == GGML_TASK_TYPE_FINALIZE) { - return; - } - - const void * wdata = (src1->type == vec_dot_type) ? src1->data : params->wdata; - const size_t row_size = ggml_row_size(vec_dot_type, ne10); - -#if GGML_USE_LLAMAFILE - if (src1->type != vec_dot_type) { - for (int64_t i13 = 0; i13 < ne13; i13++) - for (int64_t i12 = 0; i12 < ne12; i12++) - if (!llamafile_sgemm(ne01, ne11, ne00/ggml_blck_size(src0->type), - (const char *)src0->data + i12/r2*nb02 + i13/r3*nb03, - nb01/ggml_type_size(src0->type), - (const char *)wdata + (i12*ne11 + i13*ne12*ne11)*row_size, - row_size/ggml_type_size(vec_dot_type), - (char *)dst->data + i12*nb2 + i13*nb3, - nb1/ggml_type_size(dst->type), - ith, nth, - params->type, - src0->type, - vec_dot_type, - dst->type)) - goto UseGgmlGemm2; - return; - } -UseGgmlGemm2:; -#endif - - const int64_t nr0 = ne01; // src0 rows - const int64_t nr1 = ne1*ne12*ne13; // src1 rows - - //printf("nr0 = %lld, nr1 = %lld\n", nr0, nr1); - - // distribute the thread work across the inner or outer loop based on which one is larger - - const int64_t nth0 = nr0 > nr1 ? nth : 1; // parallelize by src0 rows - const int64_t nth1 = nr0 > nr1 ? 1 : nth; // parallelize by src1 rows - - const int64_t ith0 = ith % nth0; - const int64_t ith1 = ith / nth0; - - const int64_t dr0 = (nr0 + nth0 - 1)/nth0; - const int64_t dr1 = (nr1 + nth1 - 1)/nth1; - - const int64_t ir010 = dr0*ith0; - const int64_t ir011 = MIN(ir010 + dr0, nr0); - - const int64_t ir110 = dr1*ith1; - const int64_t ir111 = MIN(ir110 + dr1, nr1); - - //printf("ir010 = %6lld, ir011 = %6lld, ir110 = %6lld, ir111 = %6lld\n", ir010, ir011, ir110, ir111); - - // threads with no work simply yield (not sure if it helps) - if (ir010 >= ir011 || ir110 >= ir111) { - sched_yield(); - return; - } - - assert(ne12 % ne02 == 0); - assert(ne13 % ne03 == 0); - - // block-tiling attempt - const int64_t blck_0 = 16; - const int64_t blck_1 = 16; - - // dot kernels can handle 1 row and col at a time, but mmla kernels can process 2 rows and cols - int64_t nrc = vec_dot_num_rows; - // TODO: currently the mmla kernels support only even numbered rows/cols. - // this check can be removed once they are extended to support odd numbered rows/cols too - if ((nr0 % 2 != 0) || (ne11 % 2 != 0)) { - nrc = 1; - } - - const size_t src1_col_stride = src1_cont || src1->type != vec_dot_type ? row_size : nb11; - - // attempt to reduce false-sharing (does not seem to make a difference) - // 16 * 2, accounting for mmla kernels - float tmp[32]; - - for (int64_t iir1 = ir110; iir1 < ir111; iir1 += blck_1) { - for (int64_t iir0 = ir010; iir0 < ir011; iir0 += blck_0) { - for (int64_t ir1 = iir1; ir1 < iir1 + blck_1 && ir1 < ir111; ir1 += nrc) { - const int64_t i13 = (ir1/(ne12*ne1)); - const int64_t i12 = (ir1 - i13*ne12*ne1)/ne1; - const int64_t i11 = (ir1 - i13*ne12*ne1 - i12*ne1); - - // broadcast src0 into src1 - const int64_t i03 = i13/r3; - const int64_t i02 = i12/r2; - - const int64_t i1 = i11; - const int64_t i2 = i12; - const int64_t i3 = i13; - - const char * src0_row = (const char *) src0->data + (0 + i02*nb02 + i03*nb03); - - // desc: when src1 is not a contiguous memory block we have to calculate the offset using the strides - // if it is, then we have either copied the data to params->wdata and made it contiguous or we are using - // the original src1 data pointer, so we should index using the indices directly - // TODO: this is a bit of a hack, we should probably have a better way to handle this - const char * src1_col = (const char *) wdata + - (src1_cont || src1->type != vec_dot_type - ? (i11 + i12*ne11 + i13*ne12*ne11)*row_size - : (i11*nb11 + i12*nb12 + i13*nb13)); - float * dst_col = (float *) ((char *) dst->data + (i1*nb1 + i2*nb2 + i3*nb3)); - - //for (int64_t ir0 = iir0; ir0 < iir0 + blck_0 && ir0 < ir011; ++ir0) { - // vec_dot(ne00, &dst_col[ir0], src0_row + ir0*nb01, src1_col); - //} - - for (int64_t ir0 = iir0; ir0 < iir0 + blck_0 && ir0 < ir011; ir0 += nrc) { - vec_dot(ne00, &tmp[ir0 - iir0], (nrc>1 ? 16 : 0), src0_row + ir0*nb01, (nrc>1 ? nb01 : 0), src1_col, (nrc>1 ? src1_col_stride : 0), nrc); - } - - for (int cn = 0; cn < nrc; ++cn) { - memcpy(&dst_col[iir0 + cn*nb1/nb0], tmp + (cn*16), (MIN(iir0 + blck_0, ir011) - iir0)*sizeof(float)); - } - } - } - } -} - -// ggml_compute_forward_mul_mat_id - -static void ggml_compute_forward_mul_mat_id( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - const struct ggml_tensor * src1 = dst->src[1]; - const struct ggml_tensor * ids = dst->src[2]; - - GGML_TENSOR_BINARY_OP_LOCALS - - const int ith = params->ith; - const int nth = params->nth; - - const enum ggml_type type = src0->type; - - const bool src1_cont = ggml_is_contiguous(src1); - - ggml_vec_dot_t const vec_dot = type_traits[type].vec_dot; - enum ggml_type const vec_dot_type = type_traits[type].vec_dot_type; - ggml_from_float_t const from_float_to_vec_dot = type_traits[vec_dot_type].from_float; - - // we don't support permuted src0 or src1 - GGML_ASSERT(nb00 == ggml_type_size(type)); - GGML_ASSERT(nb10 == ggml_type_size(src1->type)); - - // dst cannot be transposed or permuted - GGML_ASSERT(nb0 == sizeof(float)); - GGML_ASSERT(nb0 <= nb1); - GGML_ASSERT(nb1 <= nb2); - GGML_ASSERT(nb2 <= nb3); - - // row groups - const int n_ids = ids->ne[0]; // n_expert_used - const int n_as = ne02; // n_expert - - char * wdata_src1_end = (src1->type == vec_dot_type) ? - (char *) params->wdata : - (char *) params->wdata + GGML_PAD(ggml_row_size(vec_dot_type, ggml_nelements(src1)), sizeof(int64_t)); - - struct mmid_row_mapping { - int32_t i1; - int32_t i2; - }; - - int64_t * matrix_row_counts = (int64_t *) (wdata_src1_end); // [n_as] - struct mmid_row_mapping * matrix_rows = (struct mmid_row_mapping *)(matrix_row_counts + n_as); // [n_as][ne11] - - if (params->type == GGML_TASK_TYPE_INIT) { - if (ith != 0) { - return; - } - char * wdata = params->wdata; - if (src1->type != vec_dot_type) { - const size_t row_size = ggml_row_size(vec_dot_type, ne10); - - assert(params->wsize >= ne11*ne12*ne13*row_size); - assert(src1->type == GGML_TYPE_F32); - - for (int64_t i13 = 0; i13 < ne13; ++i13) { - for (int64_t i12 = 0; i12 < ne12; ++i12) { - for (int64_t i11 = 0; i11 < ne11; ++i11) { - from_float_to_vec_dot((float *)((char *) src1->data + i13*nb13 + i12*nb12 + i11*nb11), (void *) wdata, ne10); - wdata += row_size; - } - } - } - } - - // initialize matrix_row_counts - memset(matrix_row_counts, 0, n_as*sizeof(int64_t)); - -#define MMID_MATRIX_ROW(row_id, i1) matrix_rows[(row_id)*ne12 + (i1)] - - // group rows by src0 matrix - for (int64_t iid1 = 0; iid1 < ids->ne[1]; ++iid1) { - for (int id = 0; id < n_ids; ++id) { - const int32_t i02 = *(const int32_t *) ((const char *) ids->data + iid1*ids->nb[1] + id*ids->nb[0]); - - assert(i02 >= 0 && i02 < n_as); - - MMID_MATRIX_ROW(i02, matrix_row_counts[i02]) = (struct mmid_row_mapping) {id, iid1}; - matrix_row_counts[i02] += 1; - } - } - - return; - } - - if (params->type == GGML_TASK_TYPE_FINALIZE) { - return; - } - - // compute each matrix multiplication in sequence - for (int cur_a = 0; cur_a < n_as; ++cur_a) { - const int64_t cne1 = matrix_row_counts[cur_a]; - - if (cne1 == 0) { - continue; - } - - const char * src0_cur = (const char *) src0->data + cur_a*nb02; - - const void * wdata = (src1->type == vec_dot_type) ? src1->data : params->wdata; - const size_t row_size = ggml_row_size(vec_dot_type, ne10); - - const int64_t nr0 = ne01; // src0 rows - const int64_t nr1 = cne1; // src1 rows - - // distribute the thread work across the inner or outer loop based on which one is larger - - const int64_t nth0 = nr0 > nr1 ? nth : 1; // parallelize by src0 rows - const int64_t nth1 = nr0 > nr1 ? 1 : nth; // parallelize by src1 rows - - const int64_t ith0 = ith % nth0; - const int64_t ith1 = ith / nth0; - - const int64_t dr0 = (nr0 + nth0 - 1)/nth0; - const int64_t dr1 = (nr1 + nth1 - 1)/nth1; - - const int64_t ir010 = dr0*ith0; - const int64_t ir011 = MIN(ir010 + dr0, nr0); - - const int64_t ir110 = dr1*ith1; - const int64_t ir111 = MIN(ir110 + dr1, nr1); - - // threads with no work simply yield (not sure if it helps) - //if (ir010 >= ir011 || ir110 >= ir111) { - // sched_yield(); - // continue; - //} - - // block-tiling attempt - const int64_t blck_0 = 16; - const int64_t blck_1 = 16; - - // attempt to reduce false-sharing (does not seem to make a difference) - float tmp[16]; - - for (int64_t iir1 = ir110; iir1 < ir111; iir1 += blck_1) { - for (int64_t iir0 = ir010; iir0 < ir011; iir0 += blck_0) { - for (int64_t ir1 = iir1; ir1 < iir1 + blck_1 && ir1 < ir111; ++ir1) { - const int64_t _i12 = ir1; // logical row index for this expert - - struct mmid_row_mapping row_mapping = MMID_MATRIX_ROW(cur_a, _i12); - const int id = row_mapping.i1; // selected expert index - - const int64_t i11 = id % ne11; - const int64_t i12 = row_mapping.i2; // row index in src1 - - const int64_t i1 = id; // selected expert index - const int64_t i2 = i12; // row - - // desc: when src1 is not a contiguous memory block we have to calculate the offset using the strides - // if it is, then we have either copied the data to params->wdata and made it contiguous or we are using - // the original src1 data pointer, so we should index using the indices directly - // TODO: this is a bit of a hack, we should probably have a better way to handle this - const char * src1_col = (const char *) wdata + - (src1_cont || src1->type != vec_dot_type - ? (i11 + i12*ne11)*row_size - : (i11*nb11 + i12*nb12)); - - float * dst_col = (float *) ((char *) dst->data + (i1*nb1 + i2*nb2)); - - //for (int64_t ir0 = iir0; ir0 < iir0 + blck_0 && ir0 < ir011; ++ir0) { - // vec_dot(ne00, &dst_col[ir0], src0_row + ir0*nb01, src1_col); - //} - - for (int64_t ir0 = iir0; ir0 < iir0 + blck_0 && ir0 < ir011; ++ir0) { - vec_dot(ne00, &tmp[ir0 - iir0], 0, src0_cur + ir0*nb01, 0, src1_col, 0, 1); - } - - memcpy(&dst_col[iir0], tmp, (MIN(iir0 + blck_0, ir011) - iir0)*sizeof(float)); - } - } - } - } - -#undef MMID_MATRIX_ROW -} - -// ggml_compute_forward_out_prod - -static void ggml_compute_forward_out_prod_f32( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - const struct ggml_tensor * src1 = dst->src[1]; - - // int64_t t0 = ggml_perf_time_us(); - // UNUSED(t0); - - GGML_TENSOR_BINARY_OP_LOCALS - - const int ith = params->ith; - const int nth = params->nth; - - GGML_ASSERT(ne0 == ne00); - GGML_ASSERT(ne1 == ne10); - GGML_ASSERT(ne2 == ne02); - GGML_ASSERT(ne02 == ne12); - GGML_ASSERT(ne3 == ne13); - GGML_ASSERT(ne03 == ne13); - - // we don't support permuted src0 or src1 - GGML_ASSERT(nb00 == sizeof(float)); - - // dst cannot be transposed or permuted - GGML_ASSERT(nb0 == sizeof(float)); - // GGML_ASSERT(nb0 <= nb1); - // GGML_ASSERT(nb1 <= nb2); - // GGML_ASSERT(nb2 <= nb3); - - // nb01 >= nb00 - src0 is not transposed - // compute by src0 rows - - // TODO: #if defined(GGML_USE_CLBLAST) - -#if defined(GGML_USE_ACCELERATE) || defined(GGML_USE_OPENBLAS) - bool use_blas = ggml_is_matrix(src0) && - ggml_is_matrix(src1) && - ggml_is_contiguous(src0) && - (ggml_is_contiguous(src1) || ggml_is_transposed(src1)); -#endif - - if (params->type == GGML_TASK_TYPE_INIT) { -#if defined(GGML_USE_ACCELERATE) || defined(GGML_USE_OPENBLAS) // gemm beta will zero dst - if (use_blas) { - return; - } -#endif - if (ith != 0) { - return; - } - ggml_vec_set_f32(ne0*ne1*ne2*ne3, dst->data, 0); - return; - } - - if (params->type == GGML_TASK_TYPE_FINALIZE) { - return; - } - -#if defined(GGML_USE_ACCELERATE) || defined(GGML_USE_OPENBLAS) - if (use_blas) { - if (params->ith != 0) { // All threads other than the first do no work. - return; - } - // Arguments to ggml_compute_forward_out_prod (expressed as major,minor) - // src0: (k,n) - // src1: (k,m) - // dst: (m,n) - // - // Arguments to sgemm (see https://github.com/Reference-LAPACK/lapack/blob/master/BLAS/SRC/sgemm.f) - // Also expressed as (major,minor) - // a: (m,k): so src1 transposed - // b: (k,n): so src0 - // c: (m,n) - // - // However, if ggml_is_transposed(src1) is true, then - // src1->data already contains a transposed version, so sgemm mustn't - // transpose it further. - - int n = src0->ne[0]; - int k = src0->ne[1]; - int m = src1->ne[0]; - - int transposeA, lda; - - if (!ggml_is_transposed(src1)) { - transposeA = CblasTrans; - lda = m; - } else { - transposeA = CblasNoTrans; - lda = k; - } - - float * a = (float *) ((char *) src1->data); - float * b = (float *) ((char *) src0->data); - float * c = (float *) ((char *) dst->data); - - cblas_sgemm(CblasRowMajor, transposeA, CblasNoTrans, m, n, k, 1.0, a, lda, b, n, 0.0, c, n); - - return; - } -#endif - - // dst[:,:,:,:] = 0 - // for i2,i3: - // for i1: - // for i01: - // for i0: - // dst[i0,i1,i2,i3] += src0[i0,i01,i2,i3] * src1[i1,i01,i2,i3] - - // parallelize by last three dimensions - - // total rows in dst - const int64_t nr = ne1*ne2*ne3; - - // rows per thread - const int64_t dr = (nr + nth - 1)/nth; - - // row range for this thread - const int64_t ir0 = dr*ith; - const int64_t ir1 = MIN(ir0 + dr, nr); - - // block-tiling attempt - const int64_t blck_0 = MAX(GGML_VEC_MAD_UNROLL, 32); - const int64_t blck_1 = 16; - - for (int64_t bir = ir0; bir < ir1; bir += blck_1) { - const int64_t bir1 = MIN(bir + blck_1, ir1); - for (int64_t bi01 = 0; bi01 < ne01; bi01 += blck_0) { - const int64_t bne01 = MIN(bi01 + blck_0, ne01); - for (int64_t ir = bir; ir < bir1; ++ir) { - // dst indices - const int64_t i3 = ir/(ne2*ne1); - const int64_t i2 = (ir - i3*ne2*ne1)/ne1; - const int64_t i1 = (ir - i3*ne2*ne1 - i2*ne1); - - const int64_t i02 = i2; - const int64_t i03 = i3; - - //const int64_t i10 = i1; - const int64_t i12 = i2; - const int64_t i13 = i3; - -#if GGML_VEC_MAD_UNROLL > 2 - const int64_t bne01_unroll = bne01 - (bne01 % GGML_VEC_MAD_UNROLL); - for (int64_t i01 = bi01; i01 < bne01_unroll; i01 += GGML_VEC_MAD_UNROLL) { - const int64_t i11 = i01; - - float * s0 = (float *) ((char *) src0->data + ( i01*nb01 + i02*nb02 + i03*nb03)); - float * s1 = (float *) ((char *) src1->data + (i1*nb10 + i11*nb11 + i12*nb12 + i13*nb13)); - float * d = (float *) ((char *) dst->data + ( i1*nb1 + i2*nb2 + i3*nb3)); - - ggml_vec_mad_f32_unroll(ne0, nb01, nb11, d, s0, s1); - } - for (int64_t i01 = bne01_unroll; i01 < bne01; ++i01) { - const int64_t i11 = i01; - - float * s0 = (float *) ((char *) src0->data + ( i01*nb01 + i02*nb02 + i03*nb03)); - float * s1 = (float *) ((char *) src1->data + (i1*nb10 + i11*nb11 + i12*nb12 + i13*nb13)); - float * d = (float *) ((char *) dst->data + ( i1*nb1 + i2*nb2 + i3*nb3)); - - ggml_vec_mad_f32(ne0, d, s0, *s1); - } -#else - for (int64_t i01 = bi01; i01 < bne01; ++i01) { - const int64_t i11 = i01; - - float * s0 = (float *) ((char *) src0->data + ( i01*nb01 + i02*nb02 + i03*nb03)); - float * s1 = (float *) ((char *) src1->data + (i1*nb10 + i11*nb11 + i12*nb12 + i13*nb13)); - float * d = (float *) ((char *) dst->data + ( i1*nb1 + i2*nb2 + i3*nb3)); - - ggml_vec_mad_f32(ne0, d, s0, *s1); - } -#endif - } - } - } - - //int64_t t1 = ggml_perf_time_us(); - //static int64_t acc = 0; - //acc += t1 - t0; - //if (t1 - t0 > 10) { - // printf("\n"); - // printf("ne00 = %5d, ne01 = %5d, ne02 = %5d, ne03 = %5d\n", ne00, ne01, ne02, ne03); - // printf("nb00 = %5d, nb01 = %5d, nb02 = %5d, nb03 = %5d\n", nb00, nb01, nb02, nb03); - // printf("ne10 = %5d, ne11 = %5d, ne12 = %5d, ne13 = %5d\n", ne10, ne11, ne12, ne13); - // printf("nb10 = %5d, nb11 = %5d, nb12 = %5d, nb13 = %5d\n", nb10, nb11, nb12, nb13); - - // printf("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX task %d/%d: %d us, acc = %d\n", ith, nth, (int) (t1 - t0), (int) acc); - //} -} - -static void ggml_compute_forward_out_prod_q_f32( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - const struct ggml_tensor * src1 = dst->src[1]; - - // int64_t t0 = ggml_perf_time_us(); - // UNUSED(t0); - - GGML_TENSOR_BINARY_OP_LOCALS; - - const int ith = params->ith; - const int nth = params->nth; - - const enum ggml_type type = src0->type; - ggml_to_float_t const dequantize_row_q = type_traits[type].to_float; - - GGML_ASSERT(ne02 == ne12); - GGML_ASSERT(ne03 == ne13); - GGML_ASSERT(ne2 == ne12); - GGML_ASSERT(ne3 == ne13); - - // we don't support permuted src0 dim0 - GGML_ASSERT(nb00 == ggml_type_size(type)); - - // dst dim0 cannot be transposed or permuted - GGML_ASSERT(nb0 == sizeof(float)); - // GGML_ASSERT(nb0 <= nb1); - // GGML_ASSERT(nb1 <= nb2); - // GGML_ASSERT(nb2 <= nb3); - - GGML_ASSERT(ne0 == ne00); - GGML_ASSERT(ne1 == ne10); - GGML_ASSERT(ne2 == ne02); - GGML_ASSERT(ne3 == ne03); - - // nb01 >= nb00 - src0 is not transposed - // compute by src0 rows - - // TODO: #if defined(GGML_USE_ACCELERATE) || defined(GGML_USE_OPENBLAS) || defined(GGML_USE_CLBLAST) - - if (params->type == GGML_TASK_TYPE_INIT) { - if (ith != 0) { - return; - } - ggml_vec_set_f32(ne0*ne1*ne2*ne3, dst->data, 0); - return; - } - - if (params->type == GGML_TASK_TYPE_FINALIZE) { - return; - } - - // parallelize by last three dimensions - - // total rows in dst - const int64_t nr = ne1*ne2*ne3; - - // rows per thread - const int64_t dr = (nr + nth - 1)/nth; - - // row range for this thread - const int64_t ir0 = dr*ith; - const int64_t ir1 = MIN(ir0 + dr, nr); - - // dst[:,:,:,:] = 0 - // for i2,i3: - // for i1: - // for i01: - // for i0: - // dst[i0,i1,i2,i3] += src0[i0,i01,i2,i3] * src1[i1,i01,i2,i3] - - float * wdata = (float *) params->wdata + (ne0 + CACHE_LINE_SIZE_F32) * ith; - - for (int64_t ir = ir0; ir < ir1; ++ir) { - // dst indices - const int64_t i3 = ir/(ne2*ne1); - const int64_t i2 = (ir - i3*ne2*ne1)/ne1; - const int64_t i1 = (ir - i3*ne2*ne1 - i2*ne1); - - const int64_t i02 = i2; - const int64_t i03 = i3; - - //const int64_t i10 = i1; - const int64_t i12 = i2; - const int64_t i13 = i3; - - for (int64_t i01 = 0; i01 < ne01; ++i01) { - const int64_t i11 = i01; - - float * s0 = (float *) ((char *) src0->data + ( i01*nb01 + i02*nb02 + i03*nb03)); - float * s1 = (float *) ((char *) src1->data + (i1*nb10 + i11*nb11 + i12*nb12 + i13*nb13)); - float * d = (float *) ((char *) dst->data + ( i1*nb1 + i2*nb2 + i3*nb3)); - - dequantize_row_q(s0, wdata, ne0); - ggml_vec_mad_f32(ne0, d, wdata, *s1); - } - } - - //int64_t t1 = ggml_perf_time_us(); - //static int64_t acc = 0; - //acc += t1 - t0; - //if (t1 - t0 > 10) { - // printf("\n"); - // printf("ne00 = %5d, ne01 = %5d, ne02 = %5d, ne03 = %5d\n", ne00, ne01, ne02, ne03); - // printf("nb00 = %5d, nb01 = %5d, nb02 = %5d, nb03 = %5d\n", nb00, nb01, nb02, nb03); - // printf("ne10 = %5d, ne11 = %5d, ne12 = %5d, ne13 = %5d\n", ne10, ne11, ne12, ne13); - // printf("nb10 = %5d, nb11 = %5d, nb12 = %5d, nb13 = %5d\n", nb10, nb11, nb12, nb13); - - // printf("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX task %d/%d: %d us, acc = %d\n", ith, nth, (int) (t1 - t0), (int) acc); - //} -} - -static void ggml_compute_forward_out_prod( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - - switch (src0->type) { - case GGML_TYPE_Q4_0: - case GGML_TYPE_Q4_1: - case GGML_TYPE_Q5_0: - case GGML_TYPE_Q5_1: - case GGML_TYPE_Q8_0: - case GGML_TYPE_Q2_K: - case GGML_TYPE_Q3_K: - case GGML_TYPE_Q4_K: - case GGML_TYPE_Q5_K: - case GGML_TYPE_Q6_K: - case GGML_TYPE_IQ2_XXS: - case GGML_TYPE_IQ2_XS: - case GGML_TYPE_IQ3_XXS: - case GGML_TYPE_IQ1_S: - case GGML_TYPE_IQ1_M: - case GGML_TYPE_IQ4_NL: - case GGML_TYPE_IQ4_XS: - case GGML_TYPE_IQ3_S: - case GGML_TYPE_IQ2_S: - { - ggml_compute_forward_out_prod_q_f32(params, dst); - } break; - case GGML_TYPE_F16: - { - GGML_ASSERT(false); // todo - // ggml_compute_forward_out_prod_f16_f32(params, dst); - } break; - case GGML_TYPE_F32: - { - ggml_compute_forward_out_prod_f32(params, dst); - } break; - default: - { - GGML_ASSERT(false); - } break; - } -} - -// ggml_compute_forward_scale - -static void ggml_compute_forward_scale_f32( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - - GGML_ASSERT(ggml_is_contiguous(src0)); - GGML_ASSERT(ggml_is_contiguous(dst)); - GGML_ASSERT(ggml_are_same_shape(src0, dst)); - - if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) { - return; - } - - // scale factor - float v; - memcpy(&v, dst->op_params, sizeof(float)); - - const int ith = params->ith; - const int nth = params->nth; - - const int nc = src0->ne[0]; - const int nr = ggml_nrows(src0); - - // rows per thread - const int dr = (nr + nth - 1)/nth; - - // row range for this thread - const int ir0 = dr*ith; - const int ir1 = MIN(ir0 + dr, nr); - - const size_t nb01 = src0->nb[1]; - - const size_t nb1 = dst->nb[1]; - - for (int i1 = ir0; i1 < ir1; i1++) { - if (dst->data != src0->data) { - // src0 is same shape as dst => same indices - memcpy((char *)dst->data + i1*nb1, (char *)src0->data + i1*nb01, nc * sizeof(float)); - } - ggml_vec_scale_f32(nc, (float *) ((char *) dst->data + i1*nb1), v); - } -} - -static void ggml_compute_forward_scale( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - - switch (src0->type) { - case GGML_TYPE_F32: - { - ggml_compute_forward_scale_f32(params, dst); - } break; - default: - { - GGML_ASSERT(false); - } break; - } -} - -// ggml_compute_forward_set - -static void ggml_compute_forward_set_f32( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - const struct ggml_tensor * src1 = dst->src[1]; - - GGML_ASSERT(ggml_are_same_shape(src0, dst)); - GGML_ASSERT(ggml_is_contiguous(dst) && ggml_is_contiguous(src0)); - - // view src0 and dst with these strides and data offset inbytes during set - // nb0 is implicitly element_size because src0 and dst are contiguous - size_t nb1 = ((int32_t *) dst->op_params)[0]; - size_t nb2 = ((int32_t *) dst->op_params)[1]; - size_t nb3 = ((int32_t *) dst->op_params)[2]; - size_t offset = ((int32_t *) dst->op_params)[3]; - bool inplace = (bool) ((int32_t *) dst->op_params)[4]; - - if (!inplace && (params->type == GGML_TASK_TYPE_INIT)) { - if (params->ith != 0) { - return; - } - // memcpy needs to be synchronized across threads to avoid race conditions. - // => do it in INIT phase - memcpy( - ((char *) dst->data), - ((char *) src0->data), - ggml_nbytes(dst)); - } - - if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) { - return; - } - - const int ith = params->ith; - const int nth = params->nth; - - const int nr = ggml_nrows(src1); - const int nc = src1->ne[0]; - - GGML_TENSOR_LOCALS(int64_t, ne1, src1, ne) - GGML_TENSOR_LOCALS(size_t, nb1, src1, nb) - - // src0 and dst as viewed during set - const size_t nb0 = ggml_element_size(src0); - - const int im0 = (ne10 == 0 ? 0 : ne10-1); - const int im1 = (ne11 == 0 ? 0 : ne11-1); - const int im2 = (ne12 == 0 ? 0 : ne12-1); - const int im3 = (ne13 == 0 ? 0 : ne13-1); - - GGML_ASSERT(offset + im0*nb0 + im1*nb1 + im2*nb2 + im3*nb3 <= ggml_nbytes(dst)); - - GGML_ASSERT(nb10 == sizeof(float)); - - // rows per thread - const int dr = (nr + nth - 1)/nth; - - // row range for this thread - const int ir0 = dr*ith; - const int ir1 = MIN(ir0 + dr, nr); - - for (int ir = ir0; ir < ir1; ++ir) { - // src0 and dst are viewed with shape of src1 and offset - // => same indices - const int i3 = ir/(ne12*ne11); - const int i2 = (ir - i3*ne12*ne11)/ne11; - const int i1 = (ir - i3*ne12*ne11 - i2*ne11); - - ggml_vec_cpy_f32(nc, - (float *) ((char *) dst->data + i3*nb3 + i2*nb2 + i1*nb1 + offset), - (float *) ((char *) src1->data + i3*nb13 + i2*nb12 + i1*nb11)); - } -} - -static void ggml_compute_forward_set( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - - switch (src0->type) { - case GGML_TYPE_F32: - { - ggml_compute_forward_set_f32(params, dst); - } break; - case GGML_TYPE_F16: - case GGML_TYPE_Q4_0: - case GGML_TYPE_Q4_1: - case GGML_TYPE_Q5_0: - case GGML_TYPE_Q5_1: - case GGML_TYPE_Q8_0: - case GGML_TYPE_Q8_1: - case GGML_TYPE_Q2_K: - case GGML_TYPE_Q3_K: - case GGML_TYPE_Q4_K: - case GGML_TYPE_Q5_K: - case GGML_TYPE_Q6_K: - case GGML_TYPE_IQ2_XXS: - case GGML_TYPE_IQ2_XS: - case GGML_TYPE_IQ3_XXS: - case GGML_TYPE_IQ1_S: - case GGML_TYPE_IQ1_M: - case GGML_TYPE_IQ4_NL: - case GGML_TYPE_IQ4_XS: - case GGML_TYPE_IQ3_S: - case GGML_TYPE_IQ2_S: - default: - { - GGML_ASSERT(false); - } break; - } -} - -// ggml_compute_forward_cpy - -static void ggml_compute_forward_cpy( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - ggml_compute_forward_dup(params, dst); -} - -// ggml_compute_forward_cont - -static void ggml_compute_forward_cont( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - ggml_compute_forward_dup(params, dst); -} - -// ggml_compute_forward_reshape - -static void ggml_compute_forward_reshape( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - // NOP - UNUSED(params); - UNUSED(dst); -} - -// ggml_compute_forward_view - -static void ggml_compute_forward_view( - const struct ggml_compute_params * params, - const struct ggml_tensor * dst) { - // NOP - UNUSED(params); - UNUSED(dst); -} - -// ggml_compute_forward_permute - -static void ggml_compute_forward_permute( - const struct ggml_compute_params * params, - const struct ggml_tensor * dst) { - // NOP - UNUSED(params); - UNUSED(dst); -} - -// ggml_compute_forward_transpose - -static void ggml_compute_forward_transpose( - const struct ggml_compute_params * params, - const struct ggml_tensor * dst) { - // NOP - UNUSED(params); - UNUSED(dst); -} - -// ggml_compute_forward_get_rows - -static void ggml_compute_forward_get_rows_q( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - const struct ggml_tensor * src1 = dst->src[1]; - - if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) { - return; - } - - GGML_TENSOR_BINARY_OP_LOCALS - - const int64_t nc = ne00; - const int64_t nr = ggml_nelements(src1); - - const enum ggml_type type = src0->type; - ggml_to_float_t const dequantize_row_q = type_traits[type].to_float; - - assert(ne0 == nc); - assert(ne02 == ne11); - assert(nb00 == ggml_type_size(type)); - assert(ggml_nrows(dst) == nr); - - const int ith = params->ith; - const int nth = params->nth; - - // rows per thread - const int dr = (nr + nth - 1)/nth; - - // row range for this thread - const int ir0 = dr*ith; - const int ir1 = MIN(ir0 + dr, nr); - - for (int64_t i = ir0; i < ir1; ++i) { - const int64_t i12 = i/(ne11*ne10); - const int64_t i11 = (i - i12*ne11*ne10)/ne10; - const int64_t i10 = (i - i12*ne11*ne10 - i11*ne10); - const int64_t i01 = *(int32_t *) ((char *) src1->data + i10*nb10 + i11*nb11 + i12*nb12); - - dequantize_row_q( - (const void *) ((char *) src0->data + i01*nb01 + i11*nb02 + i12*nb03), - (float *) ((char *) dst->data + i10*nb1 + i11*nb2 + i12*nb3), nc); - } -} - -static void ggml_compute_forward_get_rows_f16( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - const struct ggml_tensor * src1 = dst->src[1]; - - if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) { - return; - } - - GGML_TENSOR_BINARY_OP_LOCALS - - const int64_t nc = ne00; - const int64_t nr = ggml_nelements(src1); - - assert(ne0 == nc); - assert(ne02 == ne11); - assert(nb00 == sizeof(ggml_fp16_t)); - assert(ggml_nrows(dst) == nr); - - const int ith = params->ith; - const int nth = params->nth; - - // rows per thread - const int dr = (nr + nth - 1)/nth; - - // row range for this thread - const int ir0 = dr*ith; - const int ir1 = MIN(ir0 + dr, nr); - - for (int64_t i = ir0; i < ir1; ++i) { - const int64_t i12 = i/(ne11*ne10); - const int64_t i11 = (i - i12*ne11*ne10)/ne10; - const int64_t i10 = (i - i12*ne11*ne10 - i11*ne10); - const int64_t i01 = *(int32_t *) ((char *) src1->data + i10*nb10 + i11*nb11 + i12*nb12); - - ggml_fp16_to_fp32_row( - (const void *) ((char *) src0->data + i01*nb01 + i11*nb02 + i12*nb03), - (float *) ((char *) dst->data + i10*nb1 + i11*nb2 + i12*nb3), nc); - } -} - -static void ggml_compute_forward_get_rows_f32( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - const struct ggml_tensor * src1 = dst->src[1]; - - if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) { - return; - } - - GGML_TENSOR_BINARY_OP_LOCALS - - const int64_t nc = ne00; - const int64_t nr = ggml_nelements(src1); - - assert(ne0 == nc); - assert(ne02 == ne11); - assert(nb00 == sizeof(float)); - assert(ggml_nrows(dst) == nr); - - const int ith = params->ith; - const int nth = params->nth; - - // rows per thread - const int dr = (nr + nth - 1)/nth; - - // row range for this thread - const int ir0 = dr*ith; - const int ir1 = MIN(ir0 + dr, nr); - - for (int64_t i = ir0; i < ir1; ++i) { - const int64_t i12 = i/(ne11*ne10); - const int64_t i11 = (i - i12*ne11*ne10)/ne10; - const int64_t i10 = (i - i12*ne11*ne10 - i11*ne10); - const int64_t i01 = *(int32_t *) ((char *) src1->data + i10*nb10 + i11*nb11 + i12*nb12); - - ggml_vec_cpy_f32(nc, - (float *) ((char *) dst->data + i10*nb1 + i11*nb2 + i12*nb3), - (float *) ((char *) src0->data + i01*nb01 + i11*nb02 + i12*nb03)); - } -} - -static void ggml_compute_forward_get_rows( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - - switch (src0->type) { - case GGML_TYPE_Q4_0: - case GGML_TYPE_Q4_1: - case GGML_TYPE_Q5_0: - case GGML_TYPE_Q5_1: - case GGML_TYPE_Q8_0: - case GGML_TYPE_Q8_1: - case GGML_TYPE_Q2_K: - case GGML_TYPE_Q3_K: - case GGML_TYPE_Q4_K: - case GGML_TYPE_Q5_K: - case GGML_TYPE_Q6_K: - case GGML_TYPE_IQ2_XXS: - case GGML_TYPE_IQ2_XS: - case GGML_TYPE_IQ3_XXS: - case GGML_TYPE_IQ1_S: - case GGML_TYPE_IQ1_M: - case GGML_TYPE_IQ4_NL: - case GGML_TYPE_IQ4_XS: - case GGML_TYPE_IQ3_S: - case GGML_TYPE_IQ2_S: - { - ggml_compute_forward_get_rows_q(params, dst); - } break; - case GGML_TYPE_F16: - { - ggml_compute_forward_get_rows_f16(params, dst); - } break; - case GGML_TYPE_F32: - case GGML_TYPE_I32: - { - ggml_compute_forward_get_rows_f32(params, dst); - } break; - default: - { - GGML_ASSERT(false); - } break; - } - - //static bool first = true; - //printf("ne0 = %d, ne1 = %d, ne2 = %d\n", dst->ne[0], dst->ne[1], dst->ne[2]); - //if (first) { - // first = false; - //} else { - // for (int k = 0; k < dst->ne[1]; ++k) { - // for (int j = 0; j < dst->ne[0]/16; ++j) { - // for (int i = 0; i < 16; ++i) { - // printf("%8.4f ", ((float *) dst->data)[k*dst->ne[0] + j*16 + i]); - // } - // printf("\n"); - // } - // printf("\n"); - // } - // printf("\n"); - // exit(0); - //} -} - -// ggml_compute_forward_get_rows_back - -static void ggml_compute_forward_get_rows_back_f32_f16( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - const struct ggml_tensor * src1 = dst->src[1]; - - GGML_ASSERT(params->ith == 0); - GGML_ASSERT(ggml_is_contiguous(dst)); - - // ggml_compute_forward_dup_same_cont(params, opt0, dst); - - if (params->type == GGML_TASK_TYPE_INIT) { - if (params->ith != 0) { - return; - } - memset(dst->data, 0, ggml_nbytes(dst)); - } - - if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) { - return; - } - - const int nc = src0->ne[0]; - const int nr = ggml_nelements(src1); - - GGML_ASSERT( dst->ne[0] == nc); - GGML_ASSERT(src0->nb[0] == sizeof(ggml_fp16_t)); - - for (int i = 0; i < nr; ++i) { - const int r = ((int32_t *) src1->data)[i]; - - for (int j = 0; j < nc; ++j) { - ggml_fp16_t v = ((ggml_fp16_t *) ((char *) src0->data + i*src0->nb[1]))[j]; - ((float *) ((char *) dst->data + r*dst->nb[1]))[j] += GGML_FP16_TO_FP32(v); - } - } -} - -static void ggml_compute_forward_get_rows_back_f32( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - const struct ggml_tensor * src1 = dst->src[1]; - - GGML_ASSERT(params->ith == 0); - GGML_ASSERT(ggml_is_contiguous(dst)); - - // ggml_compute_forward_dup_same_cont(params, opt0, dst); - - if (params->type == GGML_TASK_TYPE_INIT) { - if (params->ith != 0) { - return; - } - memset(dst->data, 0, ggml_nbytes(dst)); - } - - if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) { - return; - } - - const int nc = src0->ne[0]; - const int nr = ggml_nelements(src1); - - GGML_ASSERT( dst->ne[0] == nc); - GGML_ASSERT(src0->nb[0] == sizeof(float)); - - for (int i = 0; i < nr; ++i) { - const int r = ((int32_t *) src1->data)[i]; - - ggml_vec_add_f32(nc, - (float *) ((char *) dst->data + r*dst->nb[1]), - (float *) ((char *) dst->data + r*dst->nb[1]), - (float *) ((char *) src0->data + i*src0->nb[1])); - } -} - -static void ggml_compute_forward_get_rows_back( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - - switch (src0->type) { - case GGML_TYPE_F16: - { - ggml_compute_forward_get_rows_back_f32_f16(params, dst); - } break; - case GGML_TYPE_F32: - { - ggml_compute_forward_get_rows_back_f32(params, dst); - } break; - default: - { - GGML_ASSERT(false); - } break; - } - - //static bool first = true; - //printf("ne0 = %d, ne1 = %d, ne2 = %d\n", dst->ne[0], dst->ne[1], dst->ne[2]); - //if (first) { - // first = false; - //} else { - // for (int k = 0; k < dst->ne[1]; ++k) { - // for (int j = 0; j < dst->ne[0]/16; ++j) { - // for (int i = 0; i < 16; ++i) { - // printf("%8.4f ", ((float *) dst->data)[k*dst->ne[0] + j*16 + i]); - // } - // printf("\n"); - // } - // printf("\n"); - // } - // printf("\n"); - // exit(0); - //} -} - -// ggml_compute_forward_diag - -static void ggml_compute_forward_diag_f32( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - - GGML_ASSERT(params->ith == 0); - - if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) { - return; - } - - // TODO: handle transposed/permuted matrices - - GGML_TENSOR_UNARY_OP_LOCALS - - GGML_ASSERT(ne00 == ne0); - GGML_ASSERT(ne00 == ne1); - GGML_ASSERT(ne01 == 1); - GGML_ASSERT(ne02 == ne2); - GGML_ASSERT(ne03 == ne3); - - GGML_ASSERT(nb00 == sizeof(float)); - GGML_ASSERT(nb0 == sizeof(float)); - - for (int i3 = 0; i3 < ne3; i3++) { - for (int i2 = 0; i2 < ne2; i2++) { - for (int i1 = 0; i1 < ne1; i1++) { - float * d = (float *)((char *) dst->data + i3*nb3 + i2*nb2 + i1*nb1); - float * s = (float *)((char *) src0->data + i3*nb03 + i2*nb02); - for (int i0 = 0; i0 < i1; i0++) { - d[i0] = 0; - } - d[i1] = s[i1]; - for (int i0 = i1+1; i0 < ne0; i0++) { - d[i0] = 0; - } - } - } - } -} - -static void ggml_compute_forward_diag( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - - switch (src0->type) { - case GGML_TYPE_F32: - { - ggml_compute_forward_diag_f32(params, dst); - } break; - default: - { - GGML_ASSERT(false); - } break; - } -} - -// ggml_compute_forward_diag_mask_inf - -static void ggml_compute_forward_diag_mask_f32( - const struct ggml_compute_params * params, - struct ggml_tensor * dst, - const float value) { - - const struct ggml_tensor * src0 = dst->src[0]; - - const int ith = params->ith; - const int nth = params->nth; - - const int n_past = ((int32_t *) dst->op_params)[0]; - const bool inplace = src0->data == dst->data; - - GGML_ASSERT(n_past >= 0); - - if (!inplace && (params->type == GGML_TASK_TYPE_INIT)) { - if (ith != 0) { - return; - } - // memcpy needs to be synchronized across threads to avoid race conditions. - // => do it in INIT phase - GGML_ASSERT(ggml_nelements(dst) == ggml_nelements(src0)); - GGML_ASSERT(ggml_is_contiguous(dst) && ggml_is_contiguous(src0)); - memcpy( - ((char *) dst->data), - ((char *) src0->data), - ggml_nbytes(dst)); - } - - if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) { - return; - } - - // TODO: handle transposed/permuted matrices - - const int n = ggml_nrows(src0); - const int nc = src0->ne[0]; - const int nr = src0->ne[1]; - const int nz = n/nr; - - GGML_ASSERT( dst->nb[0] == sizeof(float)); - GGML_ASSERT(src0->nb[0] == sizeof(float)); - - for (int k = 0; k < nz; k++) { - for (int j = ith; j < nr; j += nth) { - for (int i = n_past; i < nc; i++) { - if (i > n_past + j) { - *(float *)((char *) dst->data + k*dst->nb[2] + j*dst->nb[1] + i*dst->nb[0]) = value; - } - } - } - } -} - -static void ggml_compute_forward_diag_mask_inf( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - - switch (src0->type) { - case GGML_TYPE_F32: - { - ggml_compute_forward_diag_mask_f32(params, dst, -INFINITY); - } break; - default: - { - GGML_ASSERT(false); - } break; - } -} - -static void ggml_compute_forward_diag_mask_zero( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - - switch (src0->type) { - case GGML_TYPE_F32: - { - ggml_compute_forward_diag_mask_f32(params, dst, 0); - } break; - default: - { - GGML_ASSERT(false); - } break; - } -} - -// ggml_compute_forward_soft_max - -static void ggml_compute_forward_soft_max_f32( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - const struct ggml_tensor * src1 = dst->src[1]; - const struct ggml_tensor * src2 = dst->src[2]; - - assert(ggml_is_contiguous(dst)); - assert(ggml_are_same_shape(src0, dst)); - - if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) { - return; - } - - float scale = 1.0f; - float max_bias = 0.0f; - - memcpy(&scale, (float *) dst->op_params + 0, sizeof(float)); - memcpy(&max_bias, (float *) dst->op_params + 1, sizeof(float)); - - // TODO: handle transposed/permuted matrices - - const int ith = params->ith; - const int nth = params->nth; - - GGML_TENSOR_UNARY_OP_LOCALS - - const int64_t ne11 = src1 ? src1->ne[1] : 1; - - // TODO: is this supposed to be ceil instead of floor? - // https://huggingface.co/mosaicml/mpt-7b/blob/main/attention.py#L370 - const uint32_t n_head_kv = ne02; - const uint32_t n_head_log2 = 1u << (uint32_t) floor(log2(n_head_kv)); - - const float m0 = powf(2.0f, -(max_bias ) / n_head_log2); - const float m1 = powf(2.0f, -(max_bias / 2.0f) / n_head_log2); - - const int nc = src0->ne[0]; - const int nr = ggml_nrows(src0); - - // rows per thread - const int dr = (nr + nth - 1)/nth; - - // row range for this thread - const int ir0 = dr*ith; - const int ir1 = MIN(ir0 + dr, nr); - - float * wp = (float *) params->wdata + (nc + CACHE_LINE_SIZE_F32) * ith; - - // when max_bias <= 0.0f, src2 is not used and we default it to src0 to avoid branching - float * pos = src2 ? (float *) src2->data : src0->data; - - for (int i1 = ir0; i1 < ir1; i1++) { - float * sp = (float *)((char *) src0->data + i1*src0->nb[1]); - float * dp = (float *)((char *) dst->data + i1*dst->nb[1]); - - // broadcast the mask across rows - float * mp = src1 ? (float *)((char *) src1->data + (i1%ne11)*src1->nb[1]) : NULL; - - ggml_vec_cpy_f32 (nc, wp, sp); - ggml_vec_scale_f32(nc, wp, scale); - if (mp) { - ggml_vec_acc_f32(nc, wp, mp); - } - - // ALiBi bias - if (max_bias > 0.0f) { - const uint32_t h = (i1/ne01)%ne02; // head - const float slope = h < n_head_log2 ? powf(m0, h + 1) : powf(m1, 2*(h - n_head_log2) + 1); - - for (int i = 0; i < nc; i++) { - wp[i] = wp[i] + slope*pos[i]; - } - } - -#ifndef NDEBUG - for (int i = 0; i < nc; ++i) { - //printf("p[%d] = %f\n", i, p[i]); - assert(!isnan(wp[i])); - } -#endif - - float max = -INFINITY; - ggml_vec_max_f32(nc, &max, wp); - - ggml_float sum = 0.0; - - uint16_t scvt; - for (int i = 0; i < nc; i++) { - if (wp[i] == -INFINITY) { - dp[i] = 0.0f; - } else { - // const float val = (wp[i] == -INFINITY) ? 0.0 : exp(wp[i] - max); - ggml_fp16_t s = GGML_FP32_TO_FP16(wp[i] - max); - memcpy(&scvt, &s, sizeof(scvt)); - const float val = GGML_FP16_TO_FP32(ggml_table_exp_f16[scvt]); - sum += (ggml_float)val; - dp[i] = val; - } - } - - assert(sum > 0.0); - - sum = 1.0/sum; - ggml_vec_scale_f32(nc, dp, sum); - -#ifndef NDEBUG - for (int i = 0; i < nc; ++i) { - assert(!isnan(dp[i])); - assert(!isinf(dp[i])); - } -#endif - } -} - -static void ggml_compute_forward_soft_max( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - - switch (src0->type) { - case GGML_TYPE_F32: - { - ggml_compute_forward_soft_max_f32(params, dst); - } break; - default: - { - GGML_ASSERT(false); - } break; - } -} - -// ggml_compute_forward_soft_max_back - -static void ggml_compute_forward_soft_max_back_f32( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - const struct ggml_tensor * src1 = dst->src[1]; - - GGML_ASSERT(ggml_is_contiguous(src0)); - GGML_ASSERT(ggml_is_contiguous(src1)); - GGML_ASSERT(ggml_is_contiguous(dst)); - GGML_ASSERT(ggml_are_same_shape(src0, dst)); - GGML_ASSERT(ggml_are_same_shape(src1, dst)); - - if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) { - return; - } - - // TODO: handle transposed/permuted matrices - - const int ith = params->ith; - const int nth = params->nth; - - const int nc = src0->ne[0]; - const int nr = ggml_nrows(src0); - - // rows per thread - const int dr = (nr + nth - 1)/nth; - - // row range for this thread - const int ir0 = dr*ith; - const int ir1 = MIN(ir0 + dr, nr); - - for (int i1 = ir0; i1 < ir1; i1++) { - float *dy = (float *)((char *) src0->data + i1*src0->nb[1]); - float *y = (float *)((char *) src1->data + i1*src1->nb[1]); - float *dx = (float *)((char *) dst->data + i1*dst->nb[1]); - -#ifndef NDEBUG - for (int i = 0; i < nc; ++i) { - //printf("p[%d] = %f\n", i, p[i]); - assert(!isnan(dy[i])); - assert(!isnan(y[i])); - } -#endif - // Jii = yi - yi*yi - // Jij = -yi*yj - // J = diag(y)-y.T*y - // dx = J * dy - // dxk = sum_i(Jki * dyi) - // dxk = sum_i(-yk*yi * dyi) - (-yk*yk)*dyk + (yk - yk*yk)*dyk - // dxk = sum_i(-yk*yi * dyi) + yk*yk*dyk + yk*dyk - yk*yk*dyk - // dxk = sum_i(-yk*yi * dyi) + yk*dyk - // dxk = -yk * sum_i(yi * dyi) + yk*dyk - // dxk = -yk * dot(y, dy) + yk*dyk - // dxk = yk * (- dot(y, dy) + dyk) - // dxk = yk * (dyk - dot(y, dy)) - // - // post-order: - // dot_y_dy := dot(y, dy) - // dx := dy - // dx := dx - dot_y_dy - // dx := dx * y - - // linear runtime, no additional memory - float dot_y_dy = 0; - ggml_vec_dot_f32 (nc, &dot_y_dy, 0, y, 0, dy, 0, 1); - ggml_vec_cpy_f32 (nc, dx, dy); - ggml_vec_acc1_f32(nc, dx, -dot_y_dy); - ggml_vec_mul_f32 (nc, dx, dx, y); - -#ifndef NDEBUG - for (int i = 0; i < nc; ++i) { - assert(!isnan(dx[i])); - assert(!isinf(dx[i])); - } -#endif - } -} - -static void ggml_compute_forward_soft_max_back( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - - switch (src0->type) { - case GGML_TYPE_F32: - { - ggml_compute_forward_soft_max_back_f32(params, dst); - } break; - default: - { - GGML_ASSERT(false); - } break; - } -} - -// ggml_compute_forward_alibi - -static void ggml_compute_forward_alibi_f32( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - - assert(params->ith == 0); - - if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) { - return; - } - - //const int n_past = ((int32_t *) dst->op_params)[0]; - const int n_head = ((int32_t *) dst->op_params)[1]; - float max_bias; - memcpy(&max_bias, (int32_t *) dst->op_params + 2, sizeof(float)); - - const int64_t ne0 = src0->ne[0]; // all_seq_len = n_past + ne1 - const int64_t ne1 = src0->ne[1]; // seq_len_without_past - const int64_t ne2 = src0->ne[2]; // n_head -> this is k - //const int64_t ne3 = src0->ne[3]; // 1 -> bsz - - const int64_t n = ggml_nrows(src0); - const int64_t ne2_ne3 = n/ne1; // ne2*ne3 - - const size_t nb0 = src0->nb[0]; - const size_t nb1 = src0->nb[1]; - const size_t nb2 = src0->nb[2]; - //const int nb3 = src0->nb[3]; - - GGML_ASSERT(nb0 == sizeof(float)); - GGML_ASSERT(n_head == ne2); - - // add alibi to src0 (KQ_scaled) - const int n_heads_log2_floor = 1 << (int) floor(log2(n_head)); - - const float m0 = powf(2.0f, -(max_bias) / n_heads_log2_floor); - const float m1 = powf(2.0f, -(max_bias / 2.0f) / n_heads_log2_floor); - - for (int64_t k = 0; k < ne2_ne3; k++) { - // TODO: k*nb2 or k*nb3 - float m_k; - - if (k < n_heads_log2_floor) { - m_k = powf(m0, k + 1); - } else { - m_k = powf(m1, 2 * (k - n_heads_log2_floor) + 1); - } - - for (int64_t i = 0; i < ne0; i++) { - for (int64_t j = 0; j < ne1; j++) { - float * const src = (float *)((char *) src0->data + i*nb0 + j*nb1 + k*nb2); - float * pdst = (float *)((char *) dst->data + i*nb0 + j*nb1 + k*nb2); - pdst[0] = i * m_k + src[0]; - } - } - } -} - -static void ggml_compute_forward_alibi_f16( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - - assert(params->ith == 0); - - if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) { - return; - } - - //const int n_past = ((int32_t *) dst->op_params)[0]; - const int n_head = ((int32_t *) dst->op_params)[1]; - float max_bias; - memcpy(&max_bias, (int32_t *) dst->op_params + 2, sizeof(float)); - - const int ne0 = src0->ne[0]; // all_seq_len = n_past + ne1 - const int ne1 = src0->ne[1]; // seq_len_without_past - const int ne2 = src0->ne[2]; // n_head -> this is k - //const int ne3 = src0->ne[3]; // 1 -> bsz - - const int n = ggml_nrows(src0); - const int ne2_ne3 = n/ne1; // ne2*ne3 - - const int nb0 = src0->nb[0]; - const int nb1 = src0->nb[1]; - const int nb2 = src0->nb[2]; - //const int nb3 = src0->nb[3]; - - GGML_ASSERT(nb0 == sizeof(ggml_fp16_t)); - //GGML_ASSERT(ne1 + n_past == ne0); (void) n_past; - GGML_ASSERT(n_head == ne2); - - // add alibi to src0 (KQ_scaled) - const int n_heads_log2_floor = 1 << (int) floor(log2(n_head)); - - const float m0 = powf(2.0f, -(max_bias) / n_heads_log2_floor); - const float m1 = powf(2.0f, -(max_bias / 2.0f) / n_heads_log2_floor); - - for (int k = 0; k < ne2_ne3; k++) { - // TODO: k*nb2 or k*nb3 - float m_k; - - if (k < n_heads_log2_floor) { - m_k = powf(m0, k + 1); - } else { - m_k = powf(m1, 2 * (k - n_heads_log2_floor) + 1); - } - - for (int i = 0; i < ne0; i++) { - for (int j = 0; j < ne1; j++) { - ggml_fp16_t * const src = (ggml_fp16_t *)((char *) src0->data + i*nb0 + j*nb1 + k*nb2); - float * pdst = (float *)((char *) dst->data + i*nb0 + j*nb1 + k*nb2); - - // we return F32 - pdst[0] = i * m_k + GGML_FP16_TO_FP32(src[0]); - } - } - } -} - -static void ggml_compute_forward_alibi( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - - switch (src0->type) { - case GGML_TYPE_F16: - { - ggml_compute_forward_alibi_f16(params, dst); - } break; - case GGML_TYPE_F32: - { - ggml_compute_forward_alibi_f32(params, dst); - } break; - case GGML_TYPE_Q4_0: - case GGML_TYPE_Q4_1: - case GGML_TYPE_Q5_0: - case GGML_TYPE_Q5_1: - case GGML_TYPE_Q8_0: - case GGML_TYPE_Q8_1: - case GGML_TYPE_Q2_K: - case GGML_TYPE_Q3_K: - case GGML_TYPE_Q4_K: - case GGML_TYPE_Q5_K: - case GGML_TYPE_Q6_K: - case GGML_TYPE_IQ2_XXS: - case GGML_TYPE_IQ2_XS: - case GGML_TYPE_IQ3_XXS: - case GGML_TYPE_IQ1_S: - case GGML_TYPE_IQ1_M: - case GGML_TYPE_IQ4_NL: - case GGML_TYPE_IQ4_XS: - case GGML_TYPE_IQ3_S: - case GGML_TYPE_IQ2_S: - case GGML_TYPE_Q8_K: - case GGML_TYPE_I8: - case GGML_TYPE_I16: - case GGML_TYPE_I32: - case GGML_TYPE_I64: - case GGML_TYPE_F64: - case GGML_TYPE_COUNT: - { - GGML_ASSERT(false); - } break; - } -} - -// ggml_compute_forward_clamp - -static void ggml_compute_forward_clamp_f32( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - - assert(params->ith == 0); - - if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) { - return; - } - - float min; - float max; - memcpy(&min, (float *) dst->op_params + 0, sizeof(float)); - memcpy(&max, (float *) dst->op_params + 1, sizeof(float)); - - const int ith = params->ith; - const int nth = params->nth; - - const int n = ggml_nrows(src0); - const int nc = src0->ne[0]; - - const size_t nb00 = src0->nb[0]; - const size_t nb01 = src0->nb[1]; - - const size_t nb0 = dst->nb[0]; - const size_t nb1 = dst->nb[1]; - - GGML_ASSERT( nb0 == sizeof(float)); - GGML_ASSERT(nb00 == sizeof(float)); - - for (int j = ith; j < n; j += nth) { - float * dst_ptr = (float *) ((char *) dst->data + j*nb1); - float * src0_ptr = (float *) ((char *) src0->data + j*nb01); - - for (int i = 0; i < nc; i++) { - dst_ptr[i] = MAX(MIN(src0_ptr[i], max), min); - } - } -} - -static void ggml_compute_forward_clamp( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - - switch (src0->type) { - case GGML_TYPE_F32: - { - ggml_compute_forward_clamp_f32(params, dst); - } break; - case GGML_TYPE_F16: - case GGML_TYPE_Q4_0: - case GGML_TYPE_Q4_1: - case GGML_TYPE_Q5_0: - case GGML_TYPE_Q5_1: - case GGML_TYPE_Q8_0: - case GGML_TYPE_Q8_1: - case GGML_TYPE_Q2_K: - case GGML_TYPE_Q3_K: - case GGML_TYPE_Q4_K: - case GGML_TYPE_Q5_K: - case GGML_TYPE_Q6_K: - case GGML_TYPE_IQ2_XXS: - case GGML_TYPE_IQ2_XS: - case GGML_TYPE_IQ3_XXS: - case GGML_TYPE_IQ1_S: - case GGML_TYPE_IQ1_M: - case GGML_TYPE_IQ4_NL: - case GGML_TYPE_IQ4_XS: - case GGML_TYPE_IQ3_S: - case GGML_TYPE_IQ2_S: - case GGML_TYPE_Q8_K: - case GGML_TYPE_I8: - case GGML_TYPE_I16: - case GGML_TYPE_I32: - case GGML_TYPE_I64: - case GGML_TYPE_F64: - case GGML_TYPE_COUNT: - { - GGML_ASSERT(false); - } break; - } -} - -// ggml_compute_forward_rope - -static float rope_yarn_ramp(const float low, const float high, const int i0) { - const float y = (i0 / 2 - low) / MAX(0.001f, high - low); - return 1 - MIN(1, MAX(0, y)); -} - -// YaRN algorithm based on LlamaYaRNScaledRotaryEmbedding.py from https://github.com/jquesnelle/yarn -// MIT licensed. Copyright (c) 2023 Jeffrey Quesnelle and Bowen Peng. -static void rope_yarn( - float theta_extrap, float freq_scale, float corr_dims[2], int64_t i0, float ext_factor, float mscale, - float * cos_theta, float * sin_theta -) { - // Get n-d rotational scaling corrected for extrapolation - float theta_interp = freq_scale * theta_extrap; - float theta = theta_interp; - if (ext_factor != 0.0f) { - float ramp_mix = rope_yarn_ramp(corr_dims[0], corr_dims[1], i0) * ext_factor; - theta = theta_interp * (1 - ramp_mix) + theta_extrap * ramp_mix; - - // Get n-d magnitude scaling corrected for interpolation - mscale *= 1.0f + 0.1f * logf(1.0f / freq_scale); - } - *cos_theta = cosf(theta) * mscale; - *sin_theta = sinf(theta) * mscale; -} - -// Apparently solving `n_rot = 2pi * x * base^((2 * max_pos_emb) / n_dims)` for x, we get -// `corr_dim(n_rot) = n_dims * log(max_pos_emb / (n_rot * 2pi)) / (2 * log(base))` -static float ggml_rope_yarn_corr_dim(int n_dims, int n_orig_ctx, float n_rot, float base) { - return n_dims * logf(n_orig_ctx / (n_rot * 2 * (float)M_PI)) / (2 * logf(base)); -} - -static void ggml_rope_cache_init( - float theta_base, float freq_scale, float corr_dims[2], int64_t ne0, float ext_factor, float mscale, - float * cache, float sin_sign, float theta_scale -) { - float theta = theta_base; - for (int64_t i0 = 0; i0 < ne0; i0 += 2) { - rope_yarn( - theta, freq_scale, corr_dims, i0, ext_factor, mscale, &cache[i0 + 0], &cache[i0 + 1] - ); - cache[i0 + 1] *= sin_sign; - - theta *= theta_scale; - } -} - -GGML_CALL void ggml_rope_yarn_corr_dims( - int n_dims, int n_orig_ctx, float freq_base, float beta_fast, float beta_slow, float dims[2] -) { - // start and end correction dims - float start = floorf(ggml_rope_yarn_corr_dim(n_dims, n_orig_ctx, beta_fast, freq_base)); - float end = ceilf(ggml_rope_yarn_corr_dim(n_dims, n_orig_ctx, beta_slow, freq_base)); - dims[0] = MAX(0, start); - dims[1] = MIN(n_dims - 1, end); -} - -static void ggml_compute_forward_rope_f32( - const struct ggml_compute_params * params, - struct ggml_tensor * dst, - const bool forward) { - - const struct ggml_tensor * src0 = dst->src[0]; - const struct ggml_tensor * src1 = dst->src[1]; - - if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) { - return; - } - - float freq_base, freq_scale, ext_factor, attn_factor, beta_fast, beta_slow; - - // these two only relevant for xPos RoPE: - float xpos_base; - bool xpos_down; - - //const int n_past = ((int32_t *) dst->op_params)[0]; - const int n_dims = ((int32_t *) dst->op_params)[1]; - const int mode = ((int32_t *) dst->op_params)[2]; - const int n_ctx = ((int32_t *) dst->op_params)[3]; - const int n_orig_ctx = ((int32_t *) dst->op_params)[4]; - - memcpy(&freq_base, (int32_t *) dst->op_params + 5, sizeof(float)); - memcpy(&freq_scale, (int32_t *) dst->op_params + 6, sizeof(float)); - memcpy(&ext_factor, (int32_t *) dst->op_params + 7, sizeof(float)); - memcpy(&attn_factor, (int32_t *) dst->op_params + 8, sizeof(float)); - memcpy(&beta_fast, (int32_t *) dst->op_params + 9, sizeof(float)); - memcpy(&beta_slow, (int32_t *) dst->op_params + 10, sizeof(float)); - memcpy(&xpos_base, (int32_t *) dst->op_params + 11, sizeof(float)); - memcpy(&xpos_down, (int32_t *) dst->op_params + 12, sizeof(bool)); - - GGML_TENSOR_UNARY_OP_LOCALS - - //printf("ne0: %d, ne1: %d, ne2: %d, ne3: %d\n", ne0, ne1, ne2, ne3); - //printf("n_past = %d, ne2 = %d\n", n_past, ne2); - - GGML_ASSERT(nb00 == sizeof(float)); - - const int ith = params->ith; - const int nth = params->nth; - - const int nr = ggml_nrows(dst); - - GGML_ASSERT(n_dims <= ne0); - GGML_ASSERT(n_dims % 2 == 0); - - // rows per thread - const int dr = (nr + nth - 1)/nth; - - // row range for this thread - const int ir0 = dr*ith; - const int ir1 = MIN(ir0 + dr, nr); - - // row index used to determine which thread to use - int ir = 0; - - const float theta_scale = powf(freq_base, -2.0f/n_dims); - const float inv_ndims = -1.f/n_dims; - float corr_dims[2]; - ggml_rope_yarn_corr_dims(n_dims, n_orig_ctx, freq_base, beta_fast, beta_slow, corr_dims); - - const bool is_neox = mode & 2; - const bool is_glm = mode & 4; - - // backward process uses inverse rotation by cos and sin. - // cos and sin build a rotation matrix, where the inverse is the transpose. - // this essentially just switches the sign of sin. - const float sin_sign = forward ? 1.0f : -1.0f; - - const int32_t * pos = (const int32_t *) src1->data; - - for (int64_t i3 = 0; i3 < ne3; i3++) { - for (int64_t i2 = 0; i2 < ne2; i2++) { - const int64_t p = pos[i2]; - - float * cache = (float *) params->wdata + (ne0 + CACHE_LINE_SIZE_F32)*ith; - if (!is_glm && !is_neox) { // TODO: cache sin/cos for glm, neox - ggml_rope_cache_init(p, freq_scale, corr_dims, ne0, ext_factor, attn_factor, cache, sin_sign, theta_scale); - } - - for (int64_t i1 = 0; i1 < ne1; i1++) { - if (ir++ < ir0) continue; - if (ir > ir1) break; - - float theta_base = (float)p; - - if (is_glm) { - theta_base = MIN(p, n_ctx - 2); - float block_theta = MAX(p - (n_ctx - 2), 0); - for (int64_t i0 = 0; i0 < ne0 / 4; i0++) { - const float cos_theta = cosf(theta_base); - const float sin_theta = sinf(theta_base) * sin_sign; - const float cos_block_theta = cosf(block_theta); - const float sin_block_theta = sinf(block_theta) * sin_sign; - - theta_base *= theta_scale; - block_theta *= theta_scale; - - const float * const src = (float *)((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01 + i0*nb00); - float * dst_data = (float *)((char *) dst->data + i3*nb3 + i2*nb2 + i1*nb1 + i0*nb0); - - const float x0 = src[0]; - const float x1 = src[n_dims/2]; - const float x2 = src[n_dims]; - const float x3 = src[n_dims/2*3]; - - dst_data[0] = x0*cos_theta - x1*sin_theta; - dst_data[n_dims/2] = x0*sin_theta + x1*cos_theta; - dst_data[n_dims] = x2*cos_block_theta - x3*sin_block_theta; - dst_data[n_dims/2*3] = x2*sin_block_theta + x3*cos_block_theta; - } - } else if (!is_neox) { - for (int64_t i0 = 0; i0 < ne0; i0 += 2) { - const float cos_theta = cache[i0 + 0]; - const float sin_theta = cache[i0 + 1]; - - // zeta scaling for xPos only: - float zeta = xpos_base != 0.0f ? powf((i0 + 0.4f * ne0) / (1.4f * ne0), p / xpos_base) : 1.0f; - if (xpos_down) zeta = 1.0f / zeta; - - const float * const src = (float *)((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01 + i0*nb00); - float * dst_data = (float *)((char *) dst->data + i3*nb3 + i2*nb2 + i1*nb1 + i0*nb0); - - const float x0 = src[0]; - const float x1 = src[1]; - - dst_data[0] = x0*cos_theta*zeta - x1*sin_theta*zeta; - dst_data[1] = x0*sin_theta*zeta + x1*cos_theta*zeta; - } - } else { - // TODO: this might be wrong for ne0 != n_dims - need double check - // it seems we have to rope just the first n_dims elements and do nothing with the rest - // ref: https://github.com/ml-explore/mlx/blob/dc2edc762c797e3b8de50b1dad4dc0a131691033/benchmarks/python/llama_jax_bench.py#L11-L26 - theta_base *= freq_scale; - for (int64_t ic = 0; ic < ne0; ic += 2) { - if (ic < n_dims) { - const int64_t ib = 0; - - // simplified from `(ib * n_dims + ic) * inv_ndims` - float cur_rot = inv_ndims * ic - ib; - - float cos_theta, sin_theta; - rope_yarn( - theta_base, freq_scale, corr_dims, cur_rot, ext_factor, attn_factor, - &cos_theta, &sin_theta - ); - sin_theta *= sin_sign; - - theta_base *= theta_scale; - - const int64_t i0 = ib*n_dims + ic/2; - - const float * const src = (float *)((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01 + i0*nb00); - float * dst_data = (float *)((char *) dst->data + i3*nb3 + i2*nb2 + i1*nb1 + i0*nb0); - - const float x0 = src[0]; - const float x1 = src[n_dims/2]; - - dst_data[0] = x0*cos_theta - x1*sin_theta; - dst_data[n_dims/2] = x0*sin_theta + x1*cos_theta; - } else { - const int64_t i0 = ic; - - const float * const src = (float *)((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01 + i0*nb00); - float * dst_data = (float *)((char *) dst->data + i3*nb3 + i2*nb2 + i1*nb1 + i0*nb0); - - dst_data[0] = src[0]; - dst_data[1] = src[1]; - } - } - } - } - } - } -} - -static void ggml_compute_forward_rope_f16( - const struct ggml_compute_params * params, - struct ggml_tensor * dst, - const bool forward) { - - const struct ggml_tensor * src0 = dst->src[0]; - const struct ggml_tensor * src1 = dst->src[1]; - - if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) { - return; - } - - float freq_base, freq_scale, ext_factor, attn_factor, beta_fast, beta_slow; - - //const int n_past = ((int32_t *) dst->op_params)[0]; - const int n_dims = ((int32_t *) dst->op_params)[1]; - const int mode = ((int32_t *) dst->op_params)[2]; - const int n_ctx = ((int32_t *) dst->op_params)[3]; - const int n_orig_ctx = ((int32_t *) dst->op_params)[4]; - memcpy(&freq_base, (int32_t *) dst->op_params + 5, sizeof(float)); - memcpy(&freq_scale, (int32_t *) dst->op_params + 6, sizeof(float)); - memcpy(&ext_factor, (int32_t *) dst->op_params + 7, sizeof(float)); - memcpy(&attn_factor, (int32_t *) dst->op_params + 8, sizeof(float)); - memcpy(&beta_fast, (int32_t *) dst->op_params + 9, sizeof(float)); - memcpy(&beta_slow, (int32_t *) dst->op_params + 10, sizeof(float)); - - GGML_TENSOR_UNARY_OP_LOCALS - - //printf("ne0: %d, ne1: %d, ne2: %d, ne3: %d\n", ne0, ne1, ne2, ne3); - //printf("n_past = %d, ne2 = %d\n", n_past, ne2); - - GGML_ASSERT(nb0 == sizeof(ggml_fp16_t)); - - const int ith = params->ith; - const int nth = params->nth; - - const int nr = ggml_nrows(dst); - - GGML_ASSERT(n_dims <= ne0); - GGML_ASSERT(n_dims % 2 == 0); - - // rows per thread - const int dr = (nr + nth - 1)/nth; - - // row range for this thread - const int ir0 = dr*ith; - const int ir1 = MIN(ir0 + dr, nr); - - // row index used to determine which thread to use - int ir = 0; - - const float theta_scale = powf(freq_base, -2.0f/n_dims); - const float inv_ndims = -1.f/n_dims; - float corr_dims[2]; - ggml_rope_yarn_corr_dims(n_dims, n_orig_ctx, freq_base, beta_fast, beta_slow, corr_dims); - - const bool is_neox = mode & 2; - const bool is_glm = mode & 4; - - // backward process uses inverse rotation by cos and sin. - // cos and sin build a rotation matrix, where the inverse is the transpose. - // this essentially just switches the sign of sin. - const float sin_sign = forward ? 1.0f : -1.0f; - - const int32_t * pos = (const int32_t *) src1->data; - - for (int64_t i3 = 0; i3 < ne3; i3++) { - for (int64_t i2 = 0; i2 < ne2; i2++) { - const int64_t p = pos[i2]; - - float * cache = (float *) params->wdata + (ne0 + CACHE_LINE_SIZE_F32)*ith; - if (!is_glm && !is_neox) { // TODO: cache sin/cos for glm, neox - ggml_rope_cache_init(p, freq_scale, corr_dims, ne0, ext_factor, attn_factor, cache, sin_sign, theta_scale); - } - - for (int64_t i1 = 0; i1 < ne1; i1++) { - if (ir++ < ir0) continue; - if (ir > ir1) break; - - float theta_base = (float)p; - - if (is_glm) { - theta_base = MIN(p, n_ctx - 2); - float block_theta = MAX(p - (n_ctx - 2), 0); - for (int64_t i0 = 0; i0 < ne0 / 4; i0++) { - const float cos_theta = cosf(theta_base); - const float sin_theta = sinf(theta_base) * sin_sign; - const float cos_block_theta = cosf(block_theta); - const float sin_block_theta = sinf(block_theta) * sin_sign; - - theta_base *= theta_scale; - block_theta *= theta_scale; - - const ggml_fp16_t * const src = (ggml_fp16_t *)((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01 + i0*nb00); - ggml_fp16_t * dst_data = (ggml_fp16_t *)((char *) dst->data + i3*nb3 + i2*nb2 + i1*nb1 + i0*nb0); - - const float x0 = GGML_FP16_TO_FP32(src[0]); - const float x1 = GGML_FP16_TO_FP32(src[n_dims/2]); - const float x2 = GGML_FP16_TO_FP32(src[n_dims]); - const float x3 = GGML_FP16_TO_FP32(src[n_dims/2*3]); - - dst_data[0] = GGML_FP32_TO_FP16(x0*cos_theta - x1*sin_theta); - dst_data[n_dims/2] = GGML_FP32_TO_FP16(x0*sin_theta + x1*cos_theta); - dst_data[n_dims] = GGML_FP32_TO_FP16(x2*cos_block_theta - x3*sin_block_theta); - dst_data[n_dims/2*3] = GGML_FP32_TO_FP16(x2*sin_block_theta + x3*cos_block_theta); - } - } else if (!is_neox) { - for (int64_t i0 = 0; i0 < ne0; i0 += 2) { - const float cos_theta = cache[i0 + 0]; - const float sin_theta = cache[i0 + 1]; - - const ggml_fp16_t * const src = (ggml_fp16_t *)((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01 + i0*nb00); - ggml_fp16_t * dst_data = (ggml_fp16_t *)((char *) dst->data + i3*nb3 + i2*nb2 + i1*nb1 + i0*nb0); - - const float x0 = GGML_FP16_TO_FP32(src[0]); - const float x1 = GGML_FP16_TO_FP32(src[1]); - - dst_data[0] = GGML_FP32_TO_FP16(x0*cos_theta - x1*sin_theta); - dst_data[1] = GGML_FP32_TO_FP16(x0*sin_theta + x1*cos_theta); - } - } else { - // TODO: this might be wrong for ne0 != n_dims - need double check - // it seems we have to rope just the first n_dims elements and do nothing with the rest - // ref: https://github.com/ml-explore/mlx/blob/dc2edc762c797e3b8de50b1dad4dc0a131691033/benchmarks/python/llama_jax_bench.py#L11-L26 - theta_base *= freq_scale; - for (int64_t ic = 0; ic < ne0; ic += 2) { - if (ic < n_dims) { - const int64_t ib = 0; - - // simplified from `(ib * n_dims + ic) * inv_ndims` - float cur_rot = inv_ndims * ic - ib; - - float cos_theta, sin_theta; - rope_yarn( - theta_base, freq_scale, corr_dims, cur_rot, ext_factor, attn_factor, - &cos_theta, &sin_theta - ); - sin_theta *= sin_sign; - - theta_base *= theta_scale; - - const int64_t i0 = ib*n_dims + ic/2; - - const ggml_fp16_t * const src = (ggml_fp16_t *)((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01 + i0*nb00); - ggml_fp16_t * dst_data = (ggml_fp16_t *)((char *) dst->data + i3*nb3 + i2*nb2 + i1*nb1 + i0*nb0); - - const float x0 = GGML_FP16_TO_FP32(src[0]); - const float x1 = GGML_FP16_TO_FP32(src[n_dims/2]); - - dst_data[0] = GGML_FP32_TO_FP16(x0*cos_theta - x1*sin_theta); - dst_data[n_dims/2] = GGML_FP32_TO_FP16(x0*sin_theta + x1*cos_theta); - } else { - const int64_t i0 = ic; - - const ggml_fp16_t * const src = (ggml_fp16_t *)((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01 + i0*nb00); - ggml_fp16_t * dst_data = (ggml_fp16_t *)((char *) dst->data + i3*nb3 + i2*nb2 + i1*nb1 + i0*nb0); - - dst_data[0] = src[0]; - dst_data[1] = src[1]; - } - } - } - } - } - } -} - -static void ggml_compute_forward_rope( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - - switch (src0->type) { - case GGML_TYPE_F16: - { - ggml_compute_forward_rope_f16(params, dst, true); - } break; - case GGML_TYPE_F32: - { - ggml_compute_forward_rope_f32(params, dst, true); - } break; - default: - { - GGML_ASSERT(false); - } break; - } -} - -// ggml_compute_forward_rope_back - -static void ggml_compute_forward_rope_back( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - - switch (src0->type) { - case GGML_TYPE_F16: - { - ggml_compute_forward_rope_f16(params, dst, false); - } break; - case GGML_TYPE_F32: - { - ggml_compute_forward_rope_f32(params, dst, false); - } break; - default: - { - GGML_ASSERT(false); - } break; - } -} - -// ggml_compute_forward_conv_transpose_1d - -static void ggml_compute_forward_conv_transpose_1d_f16_f32( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - const struct ggml_tensor * src1 = dst->src[1]; - - GGML_ASSERT(src0->type == GGML_TYPE_F16); - GGML_ASSERT(src1->type == GGML_TYPE_F32); - GGML_ASSERT( dst->type == GGML_TYPE_F32); - - int64_t t0 = ggml_perf_time_us(); - UNUSED(t0); - - GGML_TENSOR_BINARY_OP_LOCALS - - const int ith = params->ith; - const int nth = params->nth; - - const int nk = ne00*ne01*ne02; - - GGML_ASSERT(nb00 == sizeof(ggml_fp16_t)); - GGML_ASSERT(nb10 == sizeof(float)); - - if (params->type == GGML_TASK_TYPE_INIT) { - if (ith != 0) { - return; - } - memset(params->wdata, 0, params->wsize); - - // permute kernel data (src0) from (K x Cout x Cin) to (Cin x K x Cout) - { - ggml_fp16_t * const wdata = (ggml_fp16_t *) params->wdata + 0; - - for (int64_t i02 = 0; i02 < ne02; i02++) { - for (int64_t i01 = 0; i01 < ne01; i01++) { - const ggml_fp16_t * const src = (ggml_fp16_t *)((char *) src0->data + i02*nb02 + i01*nb01); - ggml_fp16_t * dst_data = wdata + i01*ne00*ne02; - for (int64_t i00 = 0; i00 < ne00; i00++) { - dst_data[i00*ne02 + i02] = src[i00]; - } - } - } - } - - // permute source data (src1) from (L x Cin) to (Cin x L) - { - ggml_fp16_t * const wdata = (ggml_fp16_t *) params->wdata + nk; - ggml_fp16_t * dst_data = wdata; - - for (int64_t i11 = 0; i11 < ne11; i11++) { - const float * const src = (float *)((char *) src1->data + i11*nb11); - for (int64_t i10 = 0; i10 < ne10; i10++) { - dst_data[i10*ne11 + i11] = GGML_FP32_TO_FP16(src[i10]); - } - } - } - - // need to zero dst since we are accumulating into it - memset(dst->data, 0, ggml_nbytes(dst)); - - return; - } - - if (params->type == GGML_TASK_TYPE_FINALIZE) { - return; - } - - const int32_t s0 = ((const int32_t*)(dst->op_params))[0]; - - // total rows in dst - const int nr = ne1; - - // rows per thread - const int dr = (nr + nth - 1)/nth; - - // row range for this thread - const int ir0 = dr*ith; - const int ir1 = MIN(ir0 + dr, nr); - - ggml_fp16_t * const wdata = (ggml_fp16_t *) params->wdata + 0; - ggml_fp16_t * const wdata_src = wdata + nk; - - for (int i1 = ir0; i1 < ir1; i1++) { - float * dst_data = (float *)((char *) dst->data + i1*nb1); - ggml_fp16_t * wdata_kernel = wdata + i1*ne02*ne00; - for (int i10 = 0; i10 < ne10; i10++) { - const int i1n = i10*ne11; - for (int i00 = 0; i00 < ne00; i00++) { - float v = 0; - ggml_vec_dot_f16(ne02, &v, 0, - (ggml_fp16_t *) wdata_src + i1n, 0, - (ggml_fp16_t *) wdata_kernel + i00*ne02, 0, 1); - dst_data[i10*s0 + i00] += v; - } - } - } -} - -static void ggml_compute_forward_conv_transpose_1d_f32( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - const struct ggml_tensor * src1 = dst->src[1]; - - GGML_ASSERT(src0->type == GGML_TYPE_F32); - GGML_ASSERT(src1->type == GGML_TYPE_F32); - GGML_ASSERT( dst->type == GGML_TYPE_F32); - - int64_t t0 = ggml_perf_time_us(); - UNUSED(t0); - - GGML_TENSOR_BINARY_OP_LOCALS - - const int ith = params->ith; - const int nth = params->nth; - - const int nk = ne00*ne01*ne02; - - GGML_ASSERT(nb00 == sizeof(float)); - GGML_ASSERT(nb10 == sizeof(float)); - - if (params->type == GGML_TASK_TYPE_INIT) { - if (ith != 0) { - return; - } - memset(params->wdata, 0, params->wsize); - - // prepare kernel data (src0) from (K x Cout x Cin) to (Cin x K x Cout) - { - float * const wdata = (float *) params->wdata + 0; - - for (int64_t i02 = 0; i02 < ne02; i02++) { - for (int64_t i01 = 0; i01 < ne01; i01++) { - const float * const src = (float *)((char *) src0->data + i02*nb02 + i01*nb01); - float * dst_data = wdata + i01*ne00*ne02; - for (int64_t i00 = 0; i00 < ne00; i00++) { - dst_data[i00*ne02 + i02] = src[i00]; - } - } - } - } - - // prepare source data (src1) - { - float * const wdata = (float *) params->wdata + nk; - float * dst_data = wdata; - - for (int64_t i11 = 0; i11 < ne11; i11++) { - const float * const src = (float *)((char *) src1->data + i11*nb11); - for (int64_t i10 = 0; i10 < ne10; i10++) { - dst_data[i10*ne11 + i11] = src[i10]; - } - } - } - - // need to zero dst since we are accumulating into it - memset(dst->data, 0, ggml_nbytes(dst)); - - return; - } - - if (params->type == GGML_TASK_TYPE_FINALIZE) { - return; - } - - const int32_t s0 = ((const int32_t*)(dst->op_params))[0]; - - // total rows in dst - const int nr = ne1; - - // rows per thread - const int dr = (nr + nth - 1)/nth; - - // row range for this thread - const int ir0 = dr*ith; - const int ir1 = MIN(ir0 + dr, nr); - - float * const wdata = (float *) params->wdata + 0; - float * const wdata_src = wdata + nk; - - for (int i1 = ir0; i1 < ir1; i1++) { - float * dst_data = (float *)((char *) dst->data + i1*nb1); - float * wdata_kernel = wdata + i1*ne02*ne00; - for (int i10 = 0; i10 < ne10; i10++) { - const int i1n = i10*ne11; - for (int i00 = 0; i00 < ne00; i00++) { - float v = 0; - ggml_vec_dot_f32(ne02, &v, 0, - wdata_src + i1n, 0, - wdata_kernel + i00*ne02, 0, 1); - dst_data[i10*s0 + i00] += v; - } - } - } -} - -static void ggml_compute_forward_conv_transpose_1d( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - - switch (src0->type) { - case GGML_TYPE_F16: - { - ggml_compute_forward_conv_transpose_1d_f16_f32(params, dst); - } break; - case GGML_TYPE_F32: - { - ggml_compute_forward_conv_transpose_1d_f32(params, dst); - } break; - default: - { - GGML_ASSERT(false); - } break; - } -} - -// src0: kernel [OC, IC, KH, KW] -// src1: image [N, IC, IH, IW] -// dst: result [N, OH, OW, IC*KH*KW] -static void ggml_compute_forward_im2col_f32( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - const struct ggml_tensor * src1 = dst->src[1]; - - GGML_ASSERT(src0->type == GGML_TYPE_F16); - GGML_ASSERT(src1->type == GGML_TYPE_F32); - GGML_ASSERT( dst->type == GGML_TYPE_F32); - - int64_t t0 = ggml_perf_time_us(); - UNUSED(t0); - - GGML_TENSOR_BINARY_OP_LOCALS; - - const int32_t s0 = ((const int32_t *)(dst->op_params))[0]; - const int32_t s1 = ((const int32_t *)(dst->op_params))[1]; - const int32_t p0 = ((const int32_t *)(dst->op_params))[2]; - const int32_t p1 = ((const int32_t *)(dst->op_params))[3]; - const int32_t d0 = ((const int32_t *)(dst->op_params))[4]; - const int32_t d1 = ((const int32_t *)(dst->op_params))[5]; - const bool is_2D = ((const int32_t *)(dst->op_params))[6] == 1; - - const int ith = params->ith; - const int nth = params->nth; - - const int64_t N = is_2D ? ne13 : ne12; - const int64_t IC = is_2D ? ne12 : ne11; - const int64_t IH = is_2D ? ne11 : 1; - const int64_t IW = ne10; - - const int64_t KH = is_2D ? ne01 : 1; - const int64_t KW = ne00; - - const int64_t OH = is_2D ? ne2 : 1; - const int64_t OW = ne1; - - int ofs0 = is_2D ? nb13 : nb12; - int ofs1 = is_2D ? nb12 : nb11; - - GGML_ASSERT(nb00 == sizeof(ggml_fp16_t)); - GGML_ASSERT(nb10 == sizeof(float)); - - if (params->type == GGML_TASK_TYPE_INIT) { - return; - } - - if (params->type == GGML_TASK_TYPE_FINALIZE) { - return; - } - - // im2col: [N, IC, IH, IW] => [N, OH, OW, IC*KH*KW] - { - float * const wdata = (float *) dst->data; - - for (int64_t in = 0; in < N; in++) { - for (int64_t ioh = 0; ioh < OH; ioh++) { // 1 - for (int64_t iow = 0; iow < OW; iow++) { - for (int64_t iic = ith; iic < IC; iic += nth) { - - // micro kernel - float * dst_data = wdata + (in*OH*OW + ioh*OW + iow)*(IC*KH*KW); // [IC, KH, KW] - const float * const src_data = (float *)((char *) src1->data + in*ofs0 + iic*ofs1); // [IH, IW] - - for (int64_t ikh = 0; ikh < KH; ikh++) { // 1 - for (int64_t ikw = 0; ikw < KW; ikw++) { - const int64_t iiw = iow*s0 + ikw*d0 - p0; - const int64_t iih = ioh*s1 + ikh*d1 - p1; - - if (iih < 0 || iih >= IH || iiw < 0 || iiw >= IW) { - dst_data[iic*(KH*KW) + ikh*KW + ikw] = 0; - } else { - dst_data[iic*(KH*KW) + ikh*KW + ikw] = (src_data[iih*IW + iiw]); - } - } - } - } - } - } - } - } -} - - -// src0: kernel [OC, IC, KH, KW] -// src1: image [N, IC, IH, IW] -// dst: result [N, OH, OW, IC*KH*KW] -static void ggml_compute_forward_im2col_f16( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - const struct ggml_tensor * src1 = dst->src[1]; - - GGML_ASSERT(src0->type == GGML_TYPE_F16); - GGML_ASSERT(src1->type == GGML_TYPE_F32); - GGML_ASSERT( dst->type == GGML_TYPE_F16); - - int64_t t0 = ggml_perf_time_us(); - UNUSED(t0); - - GGML_TENSOR_BINARY_OP_LOCALS; - - const int32_t s0 = ((const int32_t *)(dst->op_params))[0]; - const int32_t s1 = ((const int32_t *)(dst->op_params))[1]; - const int32_t p0 = ((const int32_t *)(dst->op_params))[2]; - const int32_t p1 = ((const int32_t *)(dst->op_params))[3]; - const int32_t d0 = ((const int32_t *)(dst->op_params))[4]; - const int32_t d1 = ((const int32_t *)(dst->op_params))[5]; - const bool is_2D = ((const int32_t *)(dst->op_params))[6] == 1; - - const int ith = params->ith; - const int nth = params->nth; - - const int64_t N = is_2D ? ne13 : ne12; - const int64_t IC = is_2D ? ne12 : ne11; - const int64_t IH = is_2D ? ne11 : 1; - const int64_t IW = ne10; - - const int64_t KH = is_2D ? ne01 : 1; - const int64_t KW = ne00; - - const int64_t OH = is_2D ? ne2 : 1; - const int64_t OW = ne1; - - int ofs0 = is_2D ? nb13 : nb12; - int ofs1 = is_2D ? nb12 : nb11; - - GGML_ASSERT(nb00 == sizeof(ggml_fp16_t)); - GGML_ASSERT(nb10 == sizeof(float)); - - if (params->type == GGML_TASK_TYPE_INIT) { - return; - } - - if (params->type == GGML_TASK_TYPE_FINALIZE) { - return; - } - - // im2col: [N, IC, IH, IW] => [N, OH, OW, IC*KH*KW] - { - ggml_fp16_t * const wdata = (ggml_fp16_t *) dst->data; - - for (int64_t in = 0; in < N; in++) { - for (int64_t ioh = 0; ioh < OH; ioh++) { // 1 - for (int64_t iow = 0; iow < OW; iow++) { - for (int64_t iic = ith; iic < IC; iic += nth) { - - // micro kernel - ggml_fp16_t * dst_data = wdata + (in*OH*OW + ioh*OW + iow)*(IC*KH*KW); // [IC, KH, KW] - const float * const src_data = (float *)((char *) src1->data + in*ofs0 + iic*ofs1); // [IH, IW] - - for (int64_t ikh = 0; ikh < KH; ikh++) { // 1 - for (int64_t ikw = 0; ikw < KW; ikw++) { - const int64_t iiw = iow*s0 + ikw*d0 - p0; - const int64_t iih = ioh*s1 + ikh*d1 - p1; - - if (iih < 0 || iih >= IH || iiw < 0 || iiw >= IW) { - dst_data[iic*(KH*KW) + ikh*KW + ikw] = 0; - } else { - dst_data[iic*(KH*KW) + ikh*KW + ikw] = GGML_FP32_TO_FP16(src_data[iih*IW + iiw]); - } - } - } - } - } - } - } - } -} - -static void ggml_compute_forward_im2col( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - switch (dst->type) { - case GGML_TYPE_F16: - { - ggml_compute_forward_im2col_f16(params, dst); - } break; - case GGML_TYPE_F32: - { - ggml_compute_forward_im2col_f32(params, dst); - } break; - default: - { - GGML_ASSERT(false); - } break; - } -} - - -// ggml_compute_forward_conv_transpose_2d - -static void ggml_compute_forward_conv_transpose_2d( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - const struct ggml_tensor * src1 = dst->src[1]; - - GGML_ASSERT(src0->type == GGML_TYPE_F16); - GGML_ASSERT(src1->type == GGML_TYPE_F32); - GGML_ASSERT( dst->type == GGML_TYPE_F32); - - int64_t t0 = ggml_perf_time_us(); - UNUSED(t0); - - GGML_TENSOR_BINARY_OP_LOCALS - - const int ith = params->ith; - const int nth = params->nth; - - const int nk = ne00*ne01*ne02*ne03; - - GGML_ASSERT(nb00 == sizeof(ggml_fp16_t)); - GGML_ASSERT(nb10 == sizeof(float)); - - if (params->type == GGML_TASK_TYPE_INIT) { - if (ith != 0) { - return; - } - memset(params->wdata, 0, params->wsize); - - // permute kernel data (src0) from (Kw x Kh x Cout x Cin) to (Cin x Kw x Kh x Cout) - { - ggml_fp16_t * const wdata = (ggml_fp16_t *) params->wdata + 0; - - for (int64_t i03 = 0; i03 < ne03; i03++) { - for (int64_t i02 = 0; i02 < ne02; i02++) { - const ggml_fp16_t * const src = (ggml_fp16_t *)((char *) src0->data + i03*nb03 + i02*nb02); - ggml_fp16_t * dst_data = wdata + i02*ne01*ne00*ne03; - for (int64_t i01 = 0; i01 < ne01; i01++) { - for (int64_t i00 = 0; i00 < ne00; i00++) { - dst_data[i01*ne00*ne03 + i00*ne03 + i03] = src[i01 * ne00 + i00]; - } - } - } - } - } - - // permute source data (src1) from (Sw x Sh x Cin) to (Cin x Sw x Sh) - { - ggml_fp16_t * const wdata = (ggml_fp16_t *) params->wdata + nk; - for (int i12 = 0; i12 < ne12; i12++) { - for (int i11 = 0; i11 < ne11; i11++) { - const float * const src = (float *)((char *) src1->data + i12*nb12 + i11*nb11); - ggml_fp16_t * dst_data = wdata + i11*ne10*ne12; - for (int i10 = 0; i10 < ne10; i10++) { - dst_data[i10*ne12 + i12] = GGML_FP32_TO_FP16(src[i10]); - } - } - } - } - - memset(dst->data, 0, ggml_nbytes(dst)); - - return; - } - - if (params->type == GGML_TASK_TYPE_FINALIZE) { - return; - } - - const int32_t stride = ggml_get_op_params_i32(dst, 0); - - // total patches in dst - const int np = ne2; - - // patches per thread - const int dp = (np + nth - 1)/nth; - - // patch range for this thread - const int ip0 = dp*ith; - const int ip1 = MIN(ip0 + dp, np); - - ggml_fp16_t * const wdata = (ggml_fp16_t *) params->wdata + 0; - ggml_fp16_t * const wdata_src = wdata + nk; - - for (int i2 = ip0; i2 < ip1; i2++) { // Cout - float * dst_data = (float *)((char *) dst->data + i2*nb2); - ggml_fp16_t * wdata_kernel = wdata + i2*ne01*ne00*ne03; - for (int i11 = 0; i11 < ne11; i11++) { - for (int i10 = 0; i10 < ne10; i10++) { - const int i1n = i11*ne10*ne12 + i10*ne12; - for (int i01 = 0; i01 < ne01; i01++) { - for (int i00 = 0; i00 < ne00; i00++) { - float v = 0; - ggml_vec_dot_f16(ne03, &v, 0, - wdata_src + i1n, 0, - wdata_kernel + i01*ne00*ne03 + i00*ne03, 0, 1); - dst_data[(i11*stride + i01)*ne0 + i10*stride + i00] += v; - } - } - } - } - } -} - -// ggml_compute_forward_pool_1d_sk_p0 - -static void ggml_compute_forward_pool_1d_sk_p0( - const struct ggml_compute_params * params, - const enum ggml_op_pool op, - const int k, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src = dst->src[0]; - - assert(src->type == GGML_TYPE_F32); - assert(params->ith == 0); - - if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) { - return; - } - - const char * cdata = (const char *)src->data; - const char * const data_end = cdata + ggml_nbytes(src); - float * drow = (float *)dst->data; - - const int64_t rs = dst->ne[0]; - - while (cdata < data_end) { - const float * const srow = (const float *)cdata; - - int j = 0; - - for (int64_t i = 0; i < rs; ++i) { - switch (op) { - case GGML_OP_POOL_AVG: drow[i] = 0; break; - case GGML_OP_POOL_MAX: drow[i] = -FLT_MAX; break; - case GGML_OP_POOL_COUNT: GGML_ASSERT(false); break; - } - for (int ki = 0; ki < k; ++ki) { - switch (op) { - case GGML_OP_POOL_AVG: drow[i] += srow[j]; break; - case GGML_OP_POOL_MAX: if (srow[j] > drow[i]) drow[i] = srow[j]; break; - case GGML_OP_POOL_COUNT: GGML_ASSERT(false); break; - } - ++j; - } - switch (op) { - case GGML_OP_POOL_AVG: drow[i] /= k; break; - case GGML_OP_POOL_MAX: break; - case GGML_OP_POOL_COUNT: GGML_ASSERT(false); break; - } - } - - cdata += src->nb[1]; - drow += rs; - } -} - -// ggml_compute_forward_pool_1d - -static void ggml_compute_forward_pool_1d( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const int32_t * opts = (const int32_t *)dst->op_params; - enum ggml_op_pool op = opts[0]; - const int k0 = opts[1]; - const int s0 = opts[2]; - const int p0 = opts[3]; - GGML_ASSERT(p0 == 0); // padding not supported - GGML_ASSERT(k0 == s0); // only s = k supported - - ggml_compute_forward_pool_1d_sk_p0(params, op, k0, dst); -} - -// ggml_compute_forward_pool_2d - -static void ggml_compute_forward_pool_2d( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src = dst->src[0]; - - GGML_ASSERT(src->type == GGML_TYPE_F32); - GGML_ASSERT(params->ith == 0); - - if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) { - return; - } - - const int32_t * opts = (const int32_t *)dst->op_params; - enum ggml_op_pool op = opts[0]; - const int k0 = opts[1]; - const int k1 = opts[2]; - const int s0 = opts[3]; - const int s1 = opts[4]; - const int p0 = opts[5]; - const int p1 = opts[6]; - const char * cdata = (const char*)src->data; - const char * const data_end = cdata + ggml_nbytes(src); - - const int64_t px = dst->ne[0]; - const int64_t py = dst->ne[1]; - const int64_t pa = px * py; - - float * dplane = (float *)dst->data; - - const int ka = k0 * k1; - const int offset0 = -p0; - const int offset1 = -p1; - - while (cdata < data_end) { - for (int oy = 0; oy < py; ++oy) { - float * const drow = dplane + oy * px; - for (int ox = 0; ox < px; ++ox) { - float * const out = drow + ox; - switch (op) { - case GGML_OP_POOL_AVG: *out = 0; break; - case GGML_OP_POOL_MAX: *out = -FLT_MAX; break; - case GGML_OP_POOL_COUNT: GGML_ASSERT(false); break; - } - - const int ix = offset0 + ox * s0; - const int iy = offset1 + oy * s1; - - for (int ky = 0; ky < k1; ++ky) { - if (iy + ky < 0 || iy + ky >= src->ne[1]) continue; - const float * const srow = (const float *)(cdata + src->nb[1] * (iy + ky)); - for (int kx = 0; kx < k0; ++kx) { - int j = ix + kx; - if (j < 0 || j >= src->ne[0]) continue; - switch (op) { - case GGML_OP_POOL_AVG: *out += srow[j]; break; - case GGML_OP_POOL_MAX: if (srow[j] > *out) *out = srow[j]; break; - case GGML_OP_POOL_COUNT: GGML_ASSERT(false); break; - } - } - } - switch (op) { - case GGML_OP_POOL_AVG: *out /= ka; break; - case GGML_OP_POOL_MAX: break; - case GGML_OP_POOL_COUNT: GGML_ASSERT(false); break; - } - } - } - - cdata += src->nb[2]; - dplane += pa; - } -} - -// ggml_compute_forward_upscale - -static void ggml_compute_forward_upscale_f32( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - - if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) { - return; - } - - GGML_ASSERT(src0->nb[0] == sizeof(float)); - - const int ith = params->ith; - const int nth = params->nth; - - GGML_TENSOR_UNARY_OP_LOCALS - - const int scale_factor = dst->op_params[0]; - - // TODO: optimize - - for (int64_t i3 = 0; i3 < ne3; i3++) { - const int64_t i03 = i3; - for (int64_t i2 = ith; i2 < ne2; i2 += nth) { - const int64_t i02 = i2; - for (int64_t i1 = 0; i1 < ne1; i1++) { - const int64_t i01 = i1 / scale_factor; - for (int64_t i0 = 0; i0 < ne0; i0++) { - const int64_t i00 = i0 / scale_factor; - - const float * x = (float *)((char *) src0->data + i00*nb00 + i01*nb01 + i02*nb02 + i03*nb03); - float * y = (float *)((char *) dst->data + i0*nb0 + i1*nb1 + i2*nb2 + i3*nb3); - - *y = *x; - } - } - } - } -} - -static void ggml_compute_forward_upscale( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - - switch (src0->type) { - case GGML_TYPE_F32: - { - ggml_compute_forward_upscale_f32(params, dst); - } break; - default: - { - GGML_ASSERT(false); - } break; - } -} - -// ggml_compute_forward_pad - -static void ggml_compute_forward_pad_f32( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - - if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) { - return; - } - - GGML_ASSERT(src0->nb[0] == sizeof(float)); - GGML_ASSERT( dst->nb[0] == sizeof(float)); - - const int ith = params->ith; - const int nth = params->nth; - - GGML_TENSOR_UNARY_OP_LOCALS - - float * dst_ptr = (float *) dst->data; - - // TODO: optimize - - for (int64_t i2 = 0; i2 < ne2; ++i2) { - for (int64_t i1 = ith; i1 < ne1; i1 += nth) { - for (int64_t i0 = 0; i0 < ne0; ++i0) { - for (int64_t i3 = 0; i3 < ne3; ++i3) { - const int64_t dst_idx = i3*(ne0*ne1*ne2) + i2*(ne0*ne1) + i1*ne0 + i0; - - const float * src_ptr = (const float *)((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01 + i0*nb00); - - if (i0 < ne00 && i1 < ne01 && i2 < ne02 && i3 < ne03) { - dst_ptr[dst_idx] = *src_ptr; - } else { - dst_ptr[dst_idx] = 0; - } - } - } - } - } -} - -static void ggml_compute_forward_pad( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - - switch (src0->type) { - case GGML_TYPE_F32: - { - ggml_compute_forward_pad_f32(params, dst); - } break; - default: - { - GGML_ASSERT(false); - } break; - } -} - - -// ggml_compute_forward_arange - -static void ggml_compute_forward_arange_f32( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) { - return; - } - - GGML_ASSERT(dst->nb[0] == sizeof(float)); - - const int ith = params->ith; - const int nth = params->nth; - - const float start = ggml_get_op_params_f32(dst, 0); - const float stop = ggml_get_op_params_f32(dst, 1); - const float step = ggml_get_op_params_f32(dst, 2); - - const int64_t steps = (int64_t) ceilf((stop - start) / step); - - GGML_ASSERT(ggml_nelements(dst) == steps); - - for (int64_t i = ith; i < steps; i+= nth) { - float value = start + step * i; - ((float *)dst->data)[i] = value; - } -} - -static void ggml_compute_forward_arange( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - switch (dst->type) { - case GGML_TYPE_F32: - { - ggml_compute_forward_arange_f32(params, dst); - } break; - default: - { - GGML_ASSERT(false); - } break; - } -} - -static void ggml_compute_forward_timestep_embedding_f32( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) { - return; - } - - const struct ggml_tensor * src0 = dst->src[0]; - - GGML_ASSERT(src0->nb[0] == sizeof(float)); - - const int ith = params->ith; - const int nth = params->nth; - - GGML_TENSOR_UNARY_OP_LOCALS - - const int dim = ggml_get_op_params_i32(dst, 0); - const int max_period = ggml_get_op_params_i32(dst, 1); - - int half = dim / 2; - - for (int64_t i = 0; i < ne00; i++) { - float * embed_data = (float *)((char *) dst->data + i*nb1); - for (int64_t j = ith; j < half; j += nth) { - float timestep = ((float *)src0->data)[i]; - float freq = (float)expf(-logf(max_period) * j / half); - float arg = timestep * freq; - embed_data[j] = cosf(arg); - embed_data[j + half] = sinf(arg); - } - if (dim % 2 != 0 && ith == 0) { - embed_data[dim] = 0.f; - } - } -} - -static void ggml_compute_forward_timestep_embedding( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - - switch (src0->type) { - case GGML_TYPE_F32: - { - ggml_compute_forward_timestep_embedding_f32(params, dst); - } break; - default: - { - GGML_ASSERT(false); - } break; - } -} - -// ggml_compute_forward_argsort - -static void ggml_compute_forward_argsort_f32( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - - if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) { - return; - } - - GGML_TENSOR_UNARY_OP_LOCALS - - GGML_ASSERT(nb0 == sizeof(float)); - - const int ith = params->ith; - const int nth = params->nth; - - const int64_t nr = ggml_nrows(src0); - - enum ggml_sort_order order = (enum ggml_sort_order) ggml_get_op_params_i32(dst, 0); - - for (int64_t i = ith; i < nr; i += nth) { - int32_t * dst_data = (int32_t *)((char *) dst->data + i*nb1); - const float * src_data = (float *)((char *) src0->data + i*nb01); - - for (int64_t j = 0; j < ne0; j++) { - dst_data[j] = j; - } - - // C doesn't have a functional sort, so we do a bubble sort instead - for (int64_t j = 0; j < ne0; j++) { - for (int64_t k = j + 1; k < ne0; k++) { - if ((order == GGML_SORT_ORDER_ASC && src_data[dst_data[j]] > src_data[dst_data[k]]) || - (order == GGML_SORT_ORDER_DESC && src_data[dst_data[j]] < src_data[dst_data[k]])) { - int32_t tmp = dst_data[j]; - dst_data[j] = dst_data[k]; - dst_data[k] = tmp; - } - } - } - } -} - -static void ggml_compute_forward_argsort( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - - switch (src0->type) { - case GGML_TYPE_F32: - { - ggml_compute_forward_argsort_f32(params, dst); - } break; - default: - { - GGML_ASSERT(false); - } break; - } -} - -// ggml_compute_forward_flash_attn - -static void ggml_compute_forward_flash_attn_f32( - const struct ggml_compute_params * params, - const bool masked, - struct ggml_tensor * dst) { - - const struct ggml_tensor * q = dst->src[0]; - const struct ggml_tensor * k = dst->src[1]; - const struct ggml_tensor * v = dst->src[2]; - - int64_t t0 = ggml_perf_time_us(); - UNUSED(t0); - - GGML_TENSOR_LOCALS(int64_t, neq, q, ne) - GGML_TENSOR_LOCALS(size_t, nbq, q, nb) - GGML_TENSOR_LOCALS(int64_t, nek, k, ne) - GGML_TENSOR_LOCALS(size_t, nbk, k, nb) - GGML_TENSOR_LOCALS(int64_t, nev, v, ne) - GGML_TENSOR_LOCALS(size_t, nbv, v, nb) - GGML_TENSOR_LOCALS(int64_t, ne, dst, ne) - GGML_TENSOR_LOCALS(size_t, nb, dst, nb) - - const int ith = params->ith; - const int nth = params->nth; - - const int64_t D = neq0; - const int64_t N = neq1; - const int64_t P = nek1 - N; - const int64_t M = P + N; - - const int Mup = ggml_up(M, GGML_SOFT_MAX_UNROLL); - - GGML_ASSERT(ne0 == D); - GGML_ASSERT(ne1 == N); - GGML_ASSERT(P >= 0); - - GGML_ASSERT(nbq0 == sizeof(float)); - GGML_ASSERT(nbk0 == sizeof(float)); - GGML_ASSERT(nbv0 == sizeof(float)); - - GGML_ASSERT(neq0 == D); - GGML_ASSERT(nek0 == D); - GGML_ASSERT(nev1 == D); - - GGML_ASSERT(neq1 == N); - GGML_ASSERT(nek1 == N + P); - GGML_ASSERT(nev1 == D); - - // dst cannot be transposed or permuted - GGML_ASSERT(nb0 == sizeof(float)); - GGML_ASSERT(nb0 <= nb1); - GGML_ASSERT(nb1 <= nb2); - GGML_ASSERT(nb2 <= nb3); - - if (params->type == GGML_TASK_TYPE_INIT) { - return; - } - - if (params->type == GGML_TASK_TYPE_FINALIZE) { - return; - } - - // parallelize by q rows using ggml_vec_dot_f32 - - // total rows in q - const int nr = neq1*neq2*neq3; - - // rows per thread - const int dr = (nr + nth - 1)/nth; - - // row range for this thread - const int ir0 = dr*ith; - const int ir1 = MIN(ir0 + dr, nr); - - const float scale = 1.0f/sqrtf(D); - - //printf("P=%d N=%d D=%d ir0=%d ir1=%d scale = %f\n", P, N, D, ir0, ir1, scale); - - for (int ir = ir0; ir < ir1; ++ir) { - // q indices - const int iq3 = ir/(neq2*neq1); - const int iq2 = (ir - iq3*neq2*neq1)/neq1; - const int iq1 = (ir - iq3*neq2*neq1 - iq2*neq1); - - float * S = (float *) params->wdata + ith*(Mup + CACHE_LINE_SIZE_F32); - - for (int i = M; i < Mup; ++i) { - S[i] = -INFINITY; - } - - const int64_t masked_begin = masked ? (P + iq1 + 1) : M; - for (int64_t ic = 0; ic < masked_begin; ++ic) { - // k indices - const int ik3 = iq3; - const int ik2 = iq2 % nek2; - const int ik1 = ic; - - // S indices - const int i1 = ik1; - - ggml_vec_dot_f32(neq0, - S + i1, 0, - (float *) ((char *) k->data + (ik1*nbk1 + ik2*nbk2 + ik3*nbk3)), 0, - (float *) ((char *) q->data + (iq1*nbq1 + iq2*nbq2 + iq3*nbq3)), 0, 1); - } - - // scale - ggml_vec_scale_f32(masked_begin, S, scale); - - for (int64_t i = masked_begin; i < M; i++) { - S[i] = -INFINITY; - } - - // softmax - // exclude known -INF S[..] values from max and loop - // dont forget to set their SW values to zero - { - float max = -INFINITY; - ggml_vec_max_f32(masked_begin, &max, S); - - ggml_float sum = 0.0; - { -#ifdef GGML_SOFT_MAX_ACCELERATE - max = -max; - vDSP_vsadd(S, 1, &max, S, 1, Mup); - vvexpf(S, S, &Mup); - ggml_vec_sum_f32(Mup, &sum, S); -#else - uint16_t scvt[GGML_SOFT_MAX_UNROLL]; UNUSED(scvt); - ggml_float sump[GGML_SOFT_MAX_UNROLL] = { 0.0 }; - - for (int i = 0; i < Mup; i += GGML_SOFT_MAX_UNROLL) { - if (i >= masked_begin) { - break; - } - float * SS = S + i; - - for (int j = 0; j < GGML_SOFT_MAX_UNROLL; ++j) { - if (i + j >= masked_begin) { - break; - } else if (SS[j] == -INFINITY) { - SS[j] = 0.0f; - } else { -#ifndef GGML_FLASH_ATTN_EXP_FP16 - const float val = expf(SS[j] - max); -#else - ggml_fp16_t s = GGML_FP32_TO_FP16(SS[j] - max); - memcpy(&scvt[j], &s, sizeof(uint16_t)); - const float val = GGML_FP16_TO_FP32(ggml_table_exp_f16[scvt[j]]); -#endif - sump[j] += (ggml_float)val; - SS[j] = val; - } - } - } - - for (int i = 0; i < GGML_SOFT_MAX_UNROLL; i++) { - sum += sump[i]; - } -#endif - } - - assert(sum > 0.0); - - sum = 1.0/sum; - ggml_vec_scale_f32(masked_begin, S, sum); - -#ifndef NDEBUG - for (int i = 0; i < masked_begin; ++i) { - assert(!isnan(S[i])); - assert(!isinf(S[i])); - } -#endif - } - - for (int64_t ic = 0; ic < nev1; ++ic) { - // dst indices - const int i1 = iq1; - const int i2 = iq2; - const int i3 = iq3; - - // v indices - const int iv2 = iq2 % nev2; - const int iv3 = iq3; - - ggml_vec_dot_f32(masked_begin, - (float *) ((char *) dst->data + (ic*nb0 + i1*nb1 + i2*nb2 + i3*nb3)), 0, - (float *) ((char *) v->data + ( ic*nbv1 + iv2*nbv2 + iv3*nbv3)), 0, - S, 0, 1); - } - } -} - -static void ggml_compute_forward_flash_attn_f16( - const struct ggml_compute_params * params, - const bool masked, - struct ggml_tensor * dst) { - - const struct ggml_tensor * q = dst->src[0]; - const struct ggml_tensor * k = dst->src[1]; - const struct ggml_tensor * v = dst->src[2]; - - int64_t t0 = ggml_perf_time_us(); - UNUSED(t0); - - GGML_TENSOR_LOCALS(int64_t, neq, q, ne) - GGML_TENSOR_LOCALS(size_t, nbq, q, nb) - GGML_TENSOR_LOCALS(int64_t, nek, k, ne) - GGML_TENSOR_LOCALS(size_t, nbk, k, nb) - GGML_TENSOR_LOCALS(int64_t, nev, v, ne) - GGML_TENSOR_LOCALS(size_t, nbv, v, nb) - GGML_TENSOR_LOCALS(int64_t, ne, dst, ne) - GGML_TENSOR_LOCALS(size_t, nb, dst, nb) - - const int ith = params->ith; - const int nth = params->nth; - - const int64_t D = neq0; - const int64_t N = neq1; - const int64_t P = nek1 - N; - const int64_t M = P + N; - - const int Mup = ggml_up(M, GGML_SOFT_MAX_UNROLL); - - GGML_ASSERT(ne0 == D); - GGML_ASSERT(ne1 == N); - GGML_ASSERT(P >= 0); - - GGML_ASSERT(nbq0 == sizeof(ggml_fp16_t)); - GGML_ASSERT(nbk0 == sizeof(ggml_fp16_t)); - GGML_ASSERT(nbv0 == sizeof(ggml_fp16_t)); - - GGML_ASSERT(neq0 == D); - GGML_ASSERT(nek0 == D); - GGML_ASSERT(nev1 == D); - - GGML_ASSERT(neq1 == N); - GGML_ASSERT(nek1 == N + P); - GGML_ASSERT(nev1 == D); - - // dst cannot be transposed or permuted - GGML_ASSERT(nb0 == sizeof(float)); - GGML_ASSERT(nb0 <= nb1); - GGML_ASSERT(nb1 <= nb2); - GGML_ASSERT(nb2 <= nb3); - - if (params->type == GGML_TASK_TYPE_INIT) { - return; - } - - if (params->type == GGML_TASK_TYPE_FINALIZE) { - return; - } - - // parallelize by q rows using ggml_vec_dot_f32 - - // total rows in q - const int nr = neq1*neq2*neq3; - - // rows per thread - const int dr = (nr + nth - 1)/nth; - - // row range for this thread - const int ir0 = dr*ith; - const int ir1 = MIN(ir0 + dr, nr); - - const float scale = 1.0f/sqrtf(D); - - //printf("P=%d N=%d D=%d ir0=%d ir1=%d scale = %f\n", P, N, D, ir0, ir1, scale); - - for (int ir = ir0; ir < ir1; ++ir) { - // q indices - const int iq3 = ir/(neq2*neq1); - const int iq2 = (ir - iq3*neq2*neq1)/neq1; - const int iq1 = (ir - iq3*neq2*neq1 - iq2*neq1); - - float * S = (float *) params->wdata + ith*(2*Mup + CACHE_LINE_SIZE_F32); - - for (int i = M; i < Mup; ++i) { - S[i] = -INFINITY; - } - - if (GGML_VEC_DOT_UNROLL > 2 || nek1 % GGML_VEC_DOT_UNROLL != 0) { - for (int64_t ic = 0; ic < nek1; ++ic) { - // k indices - const int ik3 = iq3; - const int ik2 = iq2 % nek2; - const int ik1 = ic; - - // S indices - const int i1 = ik1; - - ggml_vec_dot_f16(neq0, - S + i1, 0, - (ggml_fp16_t *) ((char *) k->data + (ik1*nbk1 + ik2*nbk2 + ik3*nbk3)), 0, - (ggml_fp16_t *) ((char *) q->data + (iq1*nbq1 + iq2*nbq2 + iq3*nbq3)), 0, 1); - } - } else { - for (int64_t ic = 0; ic < nek1; ic += GGML_VEC_DOT_UNROLL) { - // k indices - const int ik3 = iq3; - const int ik2 = iq2 % nek2; - const int ik1 = ic; - - // S indices - const int i1 = ik1; - - ggml_vec_dot_f16_unroll(neq0, nbk1, - S + i1, - ((char *) k->data + (ik1*nbk1 + ik2*nbk2 + ik3*nbk3)), - (ggml_fp16_t *) ((char *) q->data + (iq1*nbq1 + iq2*nbq2 + iq3*nbq3))); - } - } - - // scale - ggml_vec_scale_f32(nek1, S, scale); - - if (masked) { - for (int64_t i = P; i < M; i++) { - if (i > P + iq1) { - S[i] = -INFINITY; - } - } - } - - // softmax - // todo: exclude known -INF S[..] values from max and loop, assuming their results to be zero. - // dont forget to set their S values to zero - { - float max = -INFINITY; - ggml_vec_max_f32(M, &max, S); - - ggml_float sum = 0.0; - { -#ifdef GGML_SOFT_MAX_ACCELERATE - max = -max; - vDSP_vsadd(S, 1, &max, S, 1, Mup); - vvexpf(S, S, &Mup); - ggml_vec_sum_f32(Mup, &sum, S); -#else - uint16_t scvt[GGML_SOFT_MAX_UNROLL]; - ggml_float sump[GGML_SOFT_MAX_UNROLL] = { 0.0 }; - - for (int i = 0; i < Mup; i += GGML_SOFT_MAX_UNROLL) { - float * SS = S + i; - - for (int j = 0; j < GGML_SOFT_MAX_UNROLL; ++j) { - if (SS[j] == -INFINITY) { - SS[j] = 0.0f; - } else { - ggml_fp16_t s = GGML_FP32_TO_FP16(SS[j] - max); - memcpy(&scvt[j], &s, sizeof(uint16_t)); - const float val = GGML_FP16_TO_FP32(ggml_table_exp_f16[scvt[j]]); - sump[j] += (ggml_float)val; - SS[j] = val; - } - } - } - - for (int i = 0; i < GGML_SOFT_MAX_UNROLL; i++) { - sum += sump[i]; - } -#endif - } - - assert(sum > 0.0); - - sum = 1.0/sum; - ggml_vec_scale_f32(M, S, sum); - -#ifndef NDEBUG - for (int i = 0; i < M; ++i) { - assert(!isnan(S[i])); - assert(!isinf(S[i])); - } -#endif - } - - ggml_fp16_t * S16 = (ggml_fp16_t *) ((float *) params->wdata + ith*(2*Mup + CACHE_LINE_SIZE_F32) + Mup); - - for (int64_t i = 0; i < M; i++) { - S16[i] = GGML_FP32_TO_FP16(S[i]); - } - - // todo: exclude known zero S[..] values from dot (reducing nev0 and increasing begin of v and S16). - if (GGML_VEC_DOT_UNROLL == 1 || (nev1 % GGML_VEC_DOT_UNROLL != 0)) { - for (int64_t ic = 0; ic < nev1; ++ic) { - // dst indices - const int i1 = iq1; - const int i2 = iq2; - const int i3 = iq3; - - // v indices - const int iv2 = iq2 % nev2; - const int iv3 = iq3; - - ggml_vec_dot_f16(nev0, - (float *) ((char *) dst->data + (ic*nb0 + i1*nb1 + i2*nb2 + i3*nb3)), 0, - (ggml_fp16_t *) ((char *) v->data + ( ic*nbv1 + iv2*nbv2 + iv3*nbv3)), 0, - S16, 0, 1); - } - } else { - for (int64_t ic = 0; ic < nev1; ic += GGML_VEC_DOT_UNROLL) { - // dst indices - const int i1 = iq1; - const int i2 = iq2; - const int i3 = iq3; - - // v indices - const int iv2 = iq2 % nev2; - const int iv3 = iq3; - - ggml_vec_dot_f16_unroll(nev0, nbv1, - (float *) ((char *) dst->data + (ic*nb0 + i1*nb1 + i2*nb2 + i3*nb3)), - ((char *) v->data + ( ic*nbv1 + iv2*nbv2 + iv3*nbv3)), - S16); - } - } - } -} - -static void ggml_compute_forward_flash_attn( - const struct ggml_compute_params * params, - const bool masked, - struct ggml_tensor * dst) { - - const struct ggml_tensor * q = dst->src[0]; - - switch (q->type) { - case GGML_TYPE_F16: - { - ggml_compute_forward_flash_attn_f16(params, masked, dst); - } break; - case GGML_TYPE_F32: - { - ggml_compute_forward_flash_attn_f32(params, masked, dst); - } break; - default: - { - GGML_ASSERT(false); - } break; - } -} - -// ggml_compute_forward_flash_ff - -static void ggml_compute_forward_flash_ff_f16( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * a = dst->src[0]; // F16 - const struct ggml_tensor * b0 = dst->src[1]; // F16 fc_w - const struct ggml_tensor * b1 = dst->src[2]; // F32 fc_b - const struct ggml_tensor * c0 = dst->src[3]; // F16 proj_w - const struct ggml_tensor * c1 = dst->src[4]; // F32 proj_b - - int64_t t0 = ggml_perf_time_us(); - UNUSED(t0); - - GGML_TENSOR_LOCALS(int64_t, nea, a, ne) - GGML_TENSOR_LOCALS(size_t, nba, a, nb) - GGML_TENSOR_LOCALS(int64_t, neb0, b0, ne) - GGML_TENSOR_LOCALS(size_t, nbb0, b0, nb) - GGML_TENSOR_LOCALS(int64_t, neb1, b1, ne) - GGML_TENSOR_LOCALS(size_t, nbb1, b1, nb) - GGML_TENSOR_LOCALS(int64_t, nec0, c0, ne) - GGML_TENSOR_LOCALS(size_t, nbc0, c0, nb) - GGML_TENSOR_LOCALS(int64_t, nec1, c1, ne) - GGML_TENSOR_LOCALS(size_t, nbc1, c1, nb) - GGML_TENSOR_LOCALS(int64_t, ne, dst, ne) - GGML_TENSOR_LOCALS(size_t, nb, dst, nb) - - const int ith = params->ith; - const int nth = params->nth; - - const int64_t D = nea0; - //const int64_t N = nea1; - const int64_t M = neb01; - - GGML_ASSERT(ne0 == nea0); - GGML_ASSERT(ne1 == nea1); - GGML_ASSERT(ne2 == nea2); - - GGML_ASSERT(nba0 == sizeof(ggml_fp16_t)); - GGML_ASSERT(nbb00 == sizeof(ggml_fp16_t)); - GGML_ASSERT(nbb10 == sizeof(float)); - GGML_ASSERT(nbc00 == sizeof(ggml_fp16_t)); - GGML_ASSERT(nbc10 == sizeof(float)); - - GGML_ASSERT(neb00 == D); - GGML_ASSERT(neb01 == M); - GGML_ASSERT(neb10 == M); - GGML_ASSERT(neb11 == 1); - - GGML_ASSERT(nec00 == M); - GGML_ASSERT(nec01 == D); - GGML_ASSERT(nec10 == D); - GGML_ASSERT(nec11 == 1); - - // dst cannot be transposed or permuted - GGML_ASSERT(nb0 == sizeof(float)); - GGML_ASSERT(nb0 <= nb1); - GGML_ASSERT(nb1 <= nb2); - GGML_ASSERT(nb2 <= nb3); - - if (params->type == GGML_TASK_TYPE_INIT) { - return; - } - - if (params->type == GGML_TASK_TYPE_FINALIZE) { - return; - } - - // parallelize by a rows using ggml_vec_dot_f32 - - // total rows in a - const int nr = nea1*nea2*nea3; - - // rows per thread - const int dr = (nr + nth - 1)/nth; - - // row range for this thread - const int ir0 = dr*ith; - const int ir1 = MIN(ir0 + dr, nr); - - for (int ir = ir0; ir < ir1; ++ir) { - // a indices - const int ia3 = ir/(nea2*nea1); - const int ia2 = (ir - ia3*nea2*nea1)/nea1; - const int ia1 = (ir - ia3*nea2*nea1 - ia2*nea1); - - float * S = (float *) params->wdata + ith*(2*M + CACHE_LINE_SIZE_F32); - - for (int64_t ic = 0; ic < neb01; ++ic) { - // b0 indices - const int ib03 = ia3; - const int ib02 = ia2; - const int ib01 = ic; - - // S indices - const int i1 = ib01; - - ggml_vec_dot_f16(nea0, - S + i1, 0, - (ggml_fp16_t *) ((char *) b0->data + (ib01*nbb01 + ib02*nbb02 + ib03*nbb03)), 0, - (ggml_fp16_t *) ((char *) a->data + ( ia1*nba1 + ia2*nba2 + ia3*nba3)), 0, 1); - } - - ggml_vec_add_f32(neb01, S, S, (float *) b1->data); - //ggml_vec_gelu_f32(neb01, S, S); - - ggml_fp16_t * S16 = (ggml_fp16_t *) ((float *) params->wdata + ith*(2*M + CACHE_LINE_SIZE_F32) + M); - - for (int64_t i = 0; i < M; i++) { - S16[i] = GGML_FP32_TO_FP16(S[i]); - } - - ggml_vec_gelu_f16(neb01, S16, S16); - - { - // dst indices - const int i1 = ia1; - const int i2 = ia2; - const int i3 = ia3; - - for (int64_t ic = 0; ic < nec01; ++ic) { - - ggml_vec_dot_f16(neb01, - (float *) ((char *) dst->data + (ic*nb0 + i1*nb1 + i2*nb2 + i3*nb3)), 0, - (ggml_fp16_t *) ((char *) c0->data + ( ic*nbc01 + i2*nbc02 + i3*nbc03)), 0, - S16, 0, 1); - } - - ggml_vec_add_f32(nec01, - (float *) ((char *) dst->data + (i1*nb1 + i2*nb2 + i3*nb3)), - (float *) ((char *) dst->data + (i1*nb1 + i2*nb2 + i3*nb3)), - (float *) c1->data); - } - } -} - -static void ggml_compute_forward_flash_ff( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * b0 = dst->src[1]; - - switch (b0->type) { - case GGML_TYPE_F16: - { - ggml_compute_forward_flash_ff_f16(params, dst); - } break; - case GGML_TYPE_F32: - { - GGML_ASSERT(false); // TODO - } break; - default: - { - GGML_ASSERT(false); - } break; - } -} - -// ggml_compute_forward_flash_attn_back - -static void ggml_compute_forward_flash_attn_back_f32( - const struct ggml_compute_params * params, - const bool masked, - struct ggml_tensor * dst) { - - const struct ggml_tensor * q = dst->src[0]; - const struct ggml_tensor * k = dst->src[1]; - const struct ggml_tensor * v = dst->src[2]; - const struct ggml_tensor * d = dst->src[3]; - - int64_t t0 = ggml_perf_time_us(); - UNUSED(t0); - - GGML_TENSOR_LOCALS(int64_t, neq, q, ne) - GGML_TENSOR_LOCALS(size_t, nbq, q, nb) - GGML_TENSOR_LOCALS(int64_t, nek, k, ne) - GGML_TENSOR_LOCALS(size_t, nbk, k, nb) - GGML_TENSOR_LOCALS(int64_t, nev, v, ne) - GGML_TENSOR_LOCALS(size_t, nbv, v, nb) - GGML_TENSOR_LOCALS(int64_t, ned, d, ne) - GGML_TENSOR_LOCALS(size_t, nbd, d, nb) - GGML_TENSOR_LOCALS(int64_t, ne, dst, ne) - GGML_TENSOR_LOCALS(size_t, nb, dst, nb) - - const int ith = params->ith; - const int nth = params->nth; - - const int64_t D = neq0; - const int64_t N = neq1; - const int64_t P = nek1 - N; - const int64_t M = P + N; - - const int Mup = ggml_up(M, GGML_SOFT_MAX_UNROLL); - const int mxDM = MAX(D, Mup); - - // GGML_ASSERT(ne0 == D); - // GGML_ASSERT(ne1 == N); - GGML_ASSERT(P >= 0); - - GGML_ASSERT(nbq0 == sizeof(float)); - GGML_ASSERT(nbk0 == sizeof(float)); - GGML_ASSERT(nbv0 == sizeof(float)); - - GGML_ASSERT(neq0 == D); - GGML_ASSERT(nek0 == D); - GGML_ASSERT(nev1 == D); - GGML_ASSERT(ned0 == D); - - GGML_ASSERT(neq1 == N); - GGML_ASSERT(nek1 == N + P); - GGML_ASSERT(nev1 == D); - GGML_ASSERT(ned1 == N); - - // dst cannot be transposed or permuted - GGML_ASSERT(nb0 == sizeof(float)); - GGML_ASSERT(nb0 <= nb1); - GGML_ASSERT(nb1 <= nb2); - GGML_ASSERT(nb2 <= nb3); - - if (params->type == GGML_TASK_TYPE_INIT) { - if (ith == 0) { - memset(dst->data, 0, nb0*ne0*ne1*ne2*ne3); - } - return; - } - - if (params->type == GGML_TASK_TYPE_FINALIZE) { - return; - } - - const int64_t elem_q = ggml_nelements(q); - const int64_t elem_k = ggml_nelements(k); - - enum ggml_type result_type = dst->type; - GGML_ASSERT(ggml_blck_size(result_type) == 1); - const size_t tsize = ggml_type_size(result_type); - - const size_t offs_q = 0; - const size_t offs_k = offs_q + GGML_PAD(elem_q * tsize, GGML_MEM_ALIGN); - const size_t offs_v = offs_k + GGML_PAD(elem_k * tsize, GGML_MEM_ALIGN); - - void * grad_q = (char *) dst->data; - void * grad_k = (char *) dst->data + offs_k; - void * grad_v = (char *) dst->data + offs_v; - - const size_t nbgq1 = nb0*neq0; - const size_t nbgq2 = nb0*neq0*neq1; - const size_t nbgq3 = nb0*neq0*neq1*neq2; - - const size_t nbgk1 = nb0*nek0; - const size_t nbgk2 = nb0*nek0*nek1; - const size_t nbgk3 = nb0*nek0*nek1*neq2; - - const size_t nbgv1 = nb0*nev0; - const size_t nbgv2 = nb0*nev0*nev1; - const size_t nbgv3 = nb0*nev0*nev1*neq2; - - // parallelize by k rows using ggml_vec_dot_f32 - - // total rows in k - const int nr = nek2*nek3; - - // rows per thread - const int dr = (nr + nth - 1)/nth; - - // row range for this thread - const int ir0 = dr*ith; - const int ir1 = MIN(ir0 + dr, nr); - - const float scale = 1.0f/sqrtf(D); - - //printf("P=%d N=%d D=%d ir0=%d ir1=%d scale = %f\n", P, N, D, ir0, ir1, scale); - - // how often k2 (and v2) is repeated in q2 - int nrep = neq2/nek2; - - for (int ir = ir0; ir < ir1; ++ir) { - // q indices - const int ik3 = ir/(nek2); - const int ik2 = ir - ik3*nek2; - - const int iq3 = ik3; - const int id3 = ik3; - const int iv3 = ik3; - const int iv2 = ik2; - - for (int irep = 0; irep < nrep; ++irep) { - const int iq2 = ik2 + irep*nek2; - const int id2 = iq2; - - // (ik2 + irep*nek2) % nek2 == ik2 - for (int iq1 = 0; iq1 < neq1; ++iq1) { - const int id1 = iq1; - - // not sure about CACHE_LINE_SIZE_F32.. - // - maybe it must not be multiplied by 2 and excluded from .. in SM 1*(..) offset? - float * S = (float *) params->wdata + ith*2*(mxDM + CACHE_LINE_SIZE_F32) + 0*(mxDM+CACHE_LINE_SIZE_F32); - float * SM = (float *) params->wdata + ith*2*(mxDM + CACHE_LINE_SIZE_F32) + 1*(mxDM+CACHE_LINE_SIZE_F32); - - for (int i = M; i < Mup; ++i) { - S[i] = -INFINITY; - } - - const int64_t masked_begin = masked ? (P + iq1 + 1) : M; - for (int64_t ic = 0; ic < masked_begin; ++ic) { - // k indices - const int ik1 = ic; - - // S indices - const int i1 = ik1; - - ggml_vec_dot_f32(neq0, - S + i1, 0, - (float *) ((char *) k->data + (ik1*nbk1 + ik2*nbk2 + ik3*nbk3)), 0, - (float *) ((char *) q->data + (iq1*nbq1 + iq2*nbq2 + iq3*nbq3)), 0, 1); - } - - // scale - ggml_vec_scale_f32(masked_begin, S, scale); - - for (int64_t i = masked_begin; i < M; i++) { - S[i] = -INFINITY; - } - - // softmax - // exclude known -INF S[..] values from max and loop - // dont forget to set their SM values to zero - { - float max = -INFINITY; - ggml_vec_max_f32(masked_begin, &max, S); - - ggml_float sum = 0.0; - { -#ifdef GGML_SOFT_MAX_ACCELERATE - max = -max; - vDSP_vsadd(SM, 1, &max, SM, 1, Mup); - vvexpf(SM, SM, &Mup); - ggml_vec_sum_f32(Mup, &sum, SM); -#else - uint16_t scvt[GGML_SOFT_MAX_UNROLL]; UNUSED(scvt); - ggml_float sump[GGML_SOFT_MAX_UNROLL] = { 0.0 }; - - for (int i = 0; i < Mup; i += GGML_SOFT_MAX_UNROLL) { - if (i >= masked_begin) { - break; - } - float * SR = S + i; - float * SW = SM + i; - - for (int j = 0; j < GGML_SOFT_MAX_UNROLL; ++j) { - if (i + j >= masked_begin) { - break; - } else if (SR[j] == -INFINITY) { - SW[j] = 0.0f; - } else { -#ifndef GGML_FLASH_ATTN_EXP_FP16 - const float val = expf(SR[j] - max); -#else - ggml_fp16_t s = GGML_FP32_TO_FP16(SR[j] - max); - memcpy(&scvt[j], &s, sizeof(uint16_t)); - const float val = GGML_FP16_TO_FP32(ggml_table_exp_f16[scvt[j]]); -#endif - sump[j] += (ggml_float)val; - SW[j] = val; - } - } - } - - for (int i = 0; i < GGML_SOFT_MAX_UNROLL; i++) { - sum += sump[i]; - } -#endif - } - - assert(sum > 0.0); - - sum = 1.0/sum; - ggml_vec_scale_f32(masked_begin, SM, sum); - - } - - // step-by-step explanation - { - // forward-process shape grads from backward process - // parallel_for ik2,ik3: - // for irep: - // iq2 = ik2 + irep*nek2 - // k[:D,:M,:,:] [D,M,:,:] grad[k][:D,:M,ik2,ik3] += grad[kcur] - // q[:D,:N,:,:] [D,N,:,:] grad[q][:D,iq1,iq2,iq3] += grad[qcur] - // v[:M,:D,:,:] [M,D,:,:] grad[v][:M,:D,iv2,iv3] += grad[vcur] - // for iq1: - // kcur = k[:D,:M,ik2,ik3] [D,M,1,1] grad[kcur] = grad[S1].T @ qcur - // qcur = q[:D,iq1,iq2,iq3] [D,1,1,1] grad[qcur] = grad[S1] @ kcur - // vcur = v[:M,:D,iv2,iv3] [M,D,1,1] grad[vcur] = grad[S5].T @ S4 - // S0 = -Inf [D,1,1,1] - // ~S1[i] = dot(kcur[:D,i], qcur) - // S1 = qcur @ kcur.T [M,1,1,1] grad[S1] = grad[S2] * scale - // S2 = S1 * scale [M,1,1,1] grad[S2] = diag_mask_zero(grad[S3], P) - // S3 = diag_mask_inf(S2, P) [M,1,1,1] grad[S3] = S4 * (grad[S4] - dot(S4, grad[S4])) - // S4 = softmax(S3) [M,1,1,1] grad[S4] = grad[S5] @ vcur - // ~S5[i] = dot(vcur[:,i], S4) - // S5 = S4 @ vcur.T [D,1,1,1] grad[S5] = d[:D,id1,id2,id3] - // ~dst[i,iq1,iq2,iq3] = S5[i] ^ - // dst[:D,iq1,iq2,iq3] = S5 | grad[dst[:D,iq1,iq2,iq3]] = d[:D,id1,id2,id3] - // dst backward-/ grad[dst] = d - // - // output gradients with their dependencies: - // - // grad[kcur] = grad[S1].T @ qcur - // grad[S1] = diag_mask_zero(grad[S3], P) * scale - // grad[S3] = S4 * (grad[S4] - dot(S4, grad[S4])) - // grad[S4] = grad[S5] @ vcur - // grad[S4] = d[:D,id1,id2,id3] @ vcur - // grad[qcur] = grad[S1] @ kcur - // grad[vcur] = grad[S5].T @ S4 - // grad[vcur] = d[:D,id1,id2,id3].T @ S4 - // - // in post-order: - // - // S1 = qcur @ kcur.T - // S2 = S1 * scale - // S3 = diag_mask_inf(S2, P) - // S4 = softmax(S3) - // grad[S4] = d[:D,id1,id2,id3] @ vcur - // grad[S3] = S4 * (grad[S4] - dot(S4, grad[S4])) - // grad[S1] = diag_mask_zero(grad[S3], P) * scale - // grad[qcur] = grad[S1] @ kcur - // grad[kcur] = grad[S1].T @ qcur - // grad[vcur] = d[:D,id1,id2,id3].T @ S4 - // - // using less variables (SM=S4): - // - // S = diag_mask_inf(qcur @ kcur.T * scale, P) - // SM = softmax(S) - // S = d[:D,iq1,iq2,iq3] @ vcur - // dot_SM_gradSM = dot(SM, S) - // S = SM * (S - dot(SM, S)) - // S = diag_mask_zero(S, P) * scale - // - // grad[q][:D,iq1,iq2,iq3] += S @ kcur - // grad[k][:D,:M,ik2,ik3] += S.T @ qcur - // grad[v][:M,:D,iv2,iv3] += d[:D,id1,id2,id3].T @ SM - } - - // S = gradSM = d[:D,id1,id2,id3] @ vcur[:,:,iv2,iv3] - // S = d[:D,id1,id2,id3] @ vcur[:,:,iv2,iv3] - // for ic: - // S[:M] += vcur[:M,ic,iv2,iv3] * d[ic,id1,id2,id3] - // exclude known future zero S[..] values from operation - ggml_vec_set_f32(masked_begin, S, 0); - for (int64_t ic = 0; ic < D; ++ic) { - ggml_vec_mad_f32(masked_begin, - S, - (float *) ((char *) v->data + ( ic*nbv1 + iv2*nbv2 + iv3*nbv3)), - *(float *) ((char *) d->data + (ic*nbd0 + id1*nbd1 + id2*nbd2 + id3*nbd3))); - } - - // S = SM * (S - dot(SM, S)) - float dot_SM_gradSM = 0; - ggml_vec_dot_f32 (masked_begin, &dot_SM_gradSM, 0, SM, 0, S, 0, 1); - ggml_vec_acc1_f32(M, S, -dot_SM_gradSM); - ggml_vec_mul_f32 (masked_begin, S, S, SM); - - // S = diag_mask_zero(S, P) * scale - // already done by above ggml_vec_set_f32 - - // exclude known zero S[..] values from operation - ggml_vec_scale_f32(masked_begin, S, scale); - - // S shape [M,1] - // SM shape [M,1] - // kcur shape [D,M] - // qcur shape [D,1] - // vcur shape [M,D] - - // grad[q][:D,iq1,iq2,iq3] += S @ kcur - // grad[q][:D,iq1,iq2,iq3] += shape[M,1] @ shape[D,M] - // for ic: - // grad[q][:D,iq1,iq2,iq3] += S[ic] * kcur[:D,ic,ik2,ik3] - // exclude known zero S[..] values from loop - for (int64_t ic = 0; ic < masked_begin; ++ic) { - ggml_vec_mad_f32(D, - (float *) ((char *) grad_q + (iq1*nbgq1 + iq2*nbgq2 + iq3*nbgq3)), - (float *) ((char *) k->data + (ic*nbk1 + ik2*nbk2 + ik3*nbk3)), - S[ic]); - } - - // grad[k][:D,:M,iq2,iq3] += S.T @ qcur - // for ic: - // grad[k][:D,ic,iq2,iq3] += S.T[0,ic] * qcur[:D,0] - // grad[k][:D,ic,iq2,iq3] += S[ic] * qcur[:D,0] - // exclude known zero S[..] values from loop - for (int64_t ic = 0; ic < masked_begin; ++ic) { - ggml_vec_mad_f32(D, - (float *) ((char *) grad_k + (ic*nbgk1 + ik2*nbgk2 + ik3*nbgk3)), - (float *) ((char *) q->data + (iq1*nbq1 + iq2*nbq2 + iq3*nbq3)), - S[ic]); - } - - // grad[v][:M,:D,iv2,iv3] += d[:D,id1,id2,id3].T @ SM - // for ic: - // grad[v][:M,ic,iv2,iv3] += d[:D,id1,id2,id3].T[0,ic] * SM[:M] - // grad[v][:M,ic,iv2,iv3] += d[ic,id1,id2,id3] * SM[:M] - // exclude known zero SM[..] values from mad - for (int64_t ic = 0; ic < D; ++ic) { - ggml_vec_mad_f32(masked_begin, - (float *) ((char *) grad_v + ( ic*nbgv1 + iv2*nbgv2 + iv3*nbgv3)), - SM, - *(float *) ((char *) d->data + (ic*nbd0 + id1*nbd1 + id2*nbd2 + id3*nbd3))); - } - } - } - } -} - -static void ggml_compute_forward_flash_attn_back( - const struct ggml_compute_params * params, - const bool masked, - struct ggml_tensor * dst) { - - const struct ggml_tensor * q = dst->src[0]; - - switch (q->type) { - case GGML_TYPE_F32: - { - ggml_compute_forward_flash_attn_back_f32(params, masked, dst); - } break; - default: - { - GGML_ASSERT(false); - } break; - } -} - -// ggml_compute_forward_ssm_conv - -static void ggml_compute_forward_ssm_conv_f32( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) { - return; - } - - const struct ggml_tensor * src0 = dst->src[0]; // conv_state - const struct ggml_tensor * src1 = dst->src[1]; // x - const struct ggml_tensor * src2 = dst->src[2]; // conv1d.weight - const struct ggml_tensor * src3 = dst->src[3]; // state_seq - - const int ith = params->ith; - const int nth = params->nth; - - const int nc = src2->ne[0]; // d_conv - const int nr = src0->ne[1]; // d_inner - const int n_t = src1->ne[1]; // n_tokens - const int n_kv = src0->ne[2]; // max number of sequences in the batch - - GGML_ASSERT((nr*n_t) + (nc*nr*n_kv) == ggml_nelements(dst)); - GGML_ASSERT(src0->nb[0] == sizeof(float)); - GGML_ASSERT(src1->nb[0] == sizeof(float)); - GGML_ASSERT(src2->nb[0] == sizeof(float)); - GGML_ASSERT(src3->nb[0] == sizeof(int32_t)); - GGML_ASSERT(src0->nb[1] == src0->ne[0]*sizeof(float)); - // for use with the destination state offset between sequences - GGML_ASSERT(src2->nb[2] == src2->ne[1]*src2->ne[0]*sizeof(float)); - - // rows per thread - const int dr = (nr + nth - 1)/nth; - - // row range for this thread - const int ir0 = dr*ith; - const int ir1 = MIN(ir0 + dr, nr); - const int ir = ir1 - ir0; - - if (n_kv > 1) { - // multiple sequences means it's hard to know when it's the first time a state is read, - // so copy them all over to the destination, just to be sure. - for (int i3 = 0; i3 < n_kv; ++i3) { - float * s0 = (float *) ((char *) src0->data + ir0*(src0->nb[1]) + i3*(src0->nb[2])); - float * s = (float *) ((char *) dst->data + ir0*(src2->nb[1]) + i3*(src2->nb[2]) + nr*n_t*sizeof(float)); - // can't use memcpy because of d_conv vs d_conv - 1 - for (int i1 = 0; i1 < ir; ++i1) { - for (int i0 = 0; i0 < nc - 1; ++i0) { - // copy s0 to last (d_conv - 1) columns of s - s[1 + i0 + i1*nc] = s0[i0 + i1*(nc - 1)]; - } - } - } - } - - for (int i2 = 0; i2 < n_t; ++i2) { - int32_t * sq = (int32_t *) ((char *) src3->data + i2*(src3->nb[1])); // {n_kv, n_tokens} - float * x = (float *) ((char *) dst->data + ir0*sizeof(float) + i2*(nr*sizeof(float))); // {d_inner, n_tokens} - float * s = (float *) ((char *) dst->data + ir0*(src2->nb[1]) + sq[0]*(src2->nb[2]) + nr*n_t*sizeof(float)); // {d_conv, d_inner, n_kv} - float * s0; // {d_conv - 1, d_inner, n_kv} - float * x0 = (float *) ((char *) src1->data + ir0*(src1->nb[0]) + i2*(src1->nb[1])); // {d_inner, n_tokens} - float * c = (float *) ((char *) src2->data + ir0*(src2->nb[1])); // {d_conv, d_inner} - int ne0s0; - - GGML_ASSERT(0 <= sq[0] && sq[0] < n_kv); - - // avoid needing to copy the state for the first token - if (i2 == 0) { - s0 = (float *) ((char *) src0->data + ir0*(src0->nb[1]) + sq[0]*(src0->nb[2])); // {d_conv - 1, d_inner, n_kv} - ne0s0 = src0->ne[0]; - } else { - // the source is the last (d_conv - 1) columns of the destination - s0 = s + 1; - ne0s0 = nc; - } - - // d_inner - for (int i1 = 0; i1 < ir; ++i1) { - // shift state left - for (int i0 = 0; i0 < nc - 1; ++i0) { - s[i0 + i1*nc] = s0[i0 + i1*ne0s0]; - } - // insert x on the last column - s[(nc - 1) + i1*nc] = x0[i1]; - } - - // handle copies when there are multiple output states - for (int i3 = 1; i3 < n_kv; ++i3) { - int32_t seq = sq[i3]; - if (0 <= seq && seq < n_kv) { - float * s1 = s + (seq - sq[0])*nc*nr; - memcpy(s1, s, nc*ir*sizeof(float)); - } else { - // stop at negative or too big seq_ids - break; - } - } - - // it seems a little faster when this is separate from the state shift - for (int i1 = 0; i1 < ir; ++i1) { - // rowwise dot product - float sumf = 0.0f; - for (int i0 = 0; i0 < nc; ++i0) { - int i = i0 + i1*nc; - sumf += s[i] * c[i]; - } - x[i1] = sumf; - } - } -} - -static void ggml_compute_forward_ssm_conv( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - switch (dst->src[0]->type) { - case GGML_TYPE_F32: - { - ggml_compute_forward_ssm_conv_f32(params, dst); - } break; - default: - { - GGML_ASSERT(false); - } break; - } -} - -// ggml_compute_forward_ssm_scan - -static void ggml_compute_forward_ssm_scan_f32( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) { - return; - } - - const struct ggml_tensor * src0 = dst->src[0]; // s - const struct ggml_tensor * src1 = dst->src[1]; // x - const struct ggml_tensor * src2 = dst->src[2]; // dt - const struct ggml_tensor * src3 = dst->src[3]; // A - const struct ggml_tensor * src4 = dst->src[4]; // B - const struct ggml_tensor * src5 = dst->src[5]; // C - const struct ggml_tensor * src6 = dst->src[6]; // sq - - const int ith = params->ith; - const int nth = params->nth; - - const int64_t nc = src0->ne[0]; // d_state - const int64_t nr = src0->ne[1]; // d_inner - const int64_t n_t = src1->ne[1]; // number of tokens in the batch - const int64_t n_kv = src0->ne[2]; // max number of sequences in the batch - - GGML_ASSERT(ggml_nelements(src1) + ggml_nelements(src0) == ggml_nelements(dst)); - GGML_ASSERT(src0->nb[0] == sizeof(float)); - GGML_ASSERT(src1->nb[0] == sizeof(float)); - GGML_ASSERT(src2->nb[0] == sizeof(float)); - GGML_ASSERT(src3->nb[0] == sizeof(float)); - GGML_ASSERT(src4->nb[0] == sizeof(float)); - GGML_ASSERT(src5->nb[0] == sizeof(float)); - // required for the dot product between s and C, and when copying the states - GGML_ASSERT(src0->nb[1] == src0->ne[0]*sizeof(float)); - // required for per-sequence offsets for states - GGML_ASSERT(src0->nb[2] == src0->ne[0]*src0->ne[1]*sizeof(float)); - // required to get correct offset for state destination (i.e. src1->nb[2]) - GGML_ASSERT(src1->nb[2] == src1->ne[0]*src1->ne[1]*sizeof(float)); - - // rows per thread - const int dr = (nr + nth - 1)/nth; - - // row range for this thread - const int ir0 = dr*ith; - const int ir1 = MIN(ir0 + dr, nr); - const int ir = ir1 - ir0; - - if (n_kv > 1) { - // it's hard to know if the source states have already been copied - // when there are multiple, so copy them already. - for (int i3 = 0; i3 < n_kv; ++i3) { - float * s0 = (float *) ((char *) src0->data + ir0*(src0->nb[1]) + i3*(src0->nb[2])); - float * s = (float *) ((char *) dst->data + ir0*(src0->nb[1]) + i3*(src0->nb[2]) + src1->nb[2]); - memcpy(s, s0, nc*ir*sizeof(float)); - } - } - - for (int i2 = 0; i2 < n_t; ++i2) { - int32_t * sq = (int32_t *) ((char *) src6->data + i2*(src6->nb[1])); // {n_kv, n_tokens} - float * y = (float *) ((char *) dst->data + ir0*(src1->nb[0]) + i2*(src1->nb[1])); // {d_inner, n_tokens} - float * s = (float *) ((char *) dst->data + ir0*(src0->nb[1]) + sq[0]*(src0->nb[2]) + src1->nb[2]); // {d_state, d_inner, n_kv} - float * s0; - float * x = (float *) ((char *) src1->data + ir0*(src1->nb[0]) + i2*(src1->nb[1])); // {d_inner, n_tokens} - float * dt = (float *) ((char *) src2->data + ir0*(src2->nb[0]) + i2*(src2->nb[1])); // {d_inner, n_tokens} - float * A = (float *) ((char *) src3->data + ir0*(src3->nb[1])); // {d_state, d_inner} - float * B = (float *) ((char *) src4->data + i2*(src4->nb[1])); // {d_state, n_tokens} - float * C = (float *) ((char *) src5->data + i2*(src5->nb[1])); // {d_state, n_tokens} - - GGML_ASSERT(0 <= sq[0] && sq[0] < n_kv); - - // avoid needing to copy the state for the first token - if (i2 == 0) { - s0 = (float *) ((char *) src0->data + ir0*(src0->nb[1]) + sq[0]*(src0->nb[2])); // {d_state, d_inner, n_kv} - } else { - // otherwise the source is the same as the destination - s0 = s; - } - - // d_inner - for (int i1 = 0; i1 < ir; ++i1) { - // ref: https://github.com/state-spaces/mamba/blob/34076d664838588a3c97727b263478ab9f621a07/mamba_ssm/ops/triton/selective_state_update.py#L78 - float dt_soft_plus = dt[i1] <= 20.0f ? log1pf(expf(dt[i1])) : dt[i1]; - float x_dt = x[i1] * dt_soft_plus; - float sumf = 0.0f; - // d_state - for (int i0 = 0; i0 < nc; ++i0) { - int i = i0 + i1*nc; - // state = prev_state * dA + dB * x - float state = (s0[i] * expf(dt_soft_plus * A[i])) + (B[i0] * x_dt); - // y = rowwise_dotprod(state, C) - sumf += state * C[i0]; - s[i] = state; - } - y[i1] = sumf; - } - - // handle copies when there are multiple output states - for (int i3 = 1; i3 < n_kv; ++i3) { - int32_t seq = sq[i3]; - if (0 <= seq && seq < n_kv) { - float * s1 = s + (seq - sq[0])*nc*nr; - memcpy(s1, s, nc*ir*sizeof(float)); - } else { - // stop at negative or too big seq_ids - break; - } - } - } -} - -static void ggml_compute_forward_ssm_scan( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - switch (dst->src[0]->type) { - case GGML_TYPE_F32: - { - ggml_compute_forward_ssm_scan_f32(params, dst); - } break; - default: - { - GGML_ASSERT(false); - } break; - } -} - -// ggml_compute_forward_win_part - -static void ggml_compute_forward_win_part_f32( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - - if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) { - return; - } - - GGML_TENSOR_LOCALS(int64_t, ne0, src0, ne) - GGML_TENSOR_LOCALS(int64_t, ne, dst, ne) - - const int32_t nep0 = ((const int32_t *)(dst->op_params))[0]; - const int32_t nep1 = ((const int32_t *)(dst->op_params))[1]; - const int32_t w = ((const int32_t *)(dst->op_params))[2]; - - assert(ne00 == ne0); - assert(ne3 == nep0*nep1); - - // TODO: optimize / multi-thread - for (int py = 0; py < nep1; ++py) { - for (int px = 0; px < nep0; ++px) { - const int64_t i3 = py*nep0 + px; - for (int64_t i2 = 0; i2 < ne2; ++i2) { - for (int64_t i1 = 0; i1 < ne1; ++i1) { - for (int64_t i0 = 0; i0 < ne0; ++i0) { - const int64_t i02 = py*w + i2; - const int64_t i01 = px*w + i1; - const int64_t i00 = i0; - - const int64_t i = i3*ne2*ne1*ne0 + i2*ne1*ne0 + i1*ne0 + i0; - const int64_t j = i02*ne01*ne00 + i01*ne00 + i00; - - if (py*w + i2 >= ne02 || px*w + i1 >= ne01) { - ((float *) dst->data)[i] = 0.0f; - } else { - ((float *) dst->data)[i] = ((float *) src0->data)[j]; - } - } - } - } - } - } -} - -static void ggml_compute_forward_win_part( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - - switch (src0->type) { - case GGML_TYPE_F32: - { - ggml_compute_forward_win_part_f32(params, dst); - } break; - default: - { - GGML_ASSERT(false); - } break; - } -} - -// ggml_compute_forward_win_unpart - -static void ggml_compute_forward_win_unpart_f32( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - - if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) { - return; - } - - GGML_TENSOR_LOCALS(int64_t, ne0, src0, ne) - GGML_TENSOR_LOCALS(int64_t, ne, dst, ne) - - const int32_t w = ((const int32_t *)(dst->op_params))[0]; - - // padding - const int px = (w - ne1%w)%w; - //const int py = (w - ne2%w)%w; - - const int npx = (px + ne1)/w; - //const int npy = (py + ne2)/w; - - assert(ne0 == ne00); - - // TODO: optimize / multi-thread - for (int64_t i2 = 0; i2 < ne2; ++i2) { - for (int64_t i1 = 0; i1 < ne1; ++i1) { - for (int64_t i0 = 0; i0 < ne0; ++i0) { - const int ip2 = i2/w; - const int ip1 = i1/w; - - const int64_t i02 = i2%w; - const int64_t i01 = i1%w; - const int64_t i00 = i0; - - const int64_t i = (ip2*npx + ip1)*ne02*ne01*ne00 + i02*ne01*ne00 + i01*ne00 + i00; - const int64_t j = i2*ne1*ne0 + i1*ne0 + i0; - - ((float *) dst->data)[j] = ((float *) src0->data)[i]; - } - } - } -} - -static void ggml_compute_forward_win_unpart( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - - switch (src0->type) { - case GGML_TYPE_F32: - { - ggml_compute_forward_win_unpart_f32(params, dst); - } break; - default: - { - GGML_ASSERT(false); - } break; - } -} - -//gmml_compute_forward_unary - -static void ggml_compute_forward_unary( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const enum ggml_unary_op op = ggml_get_unary_op(dst); - - switch (op) { - case GGML_UNARY_OP_ABS: - { - ggml_compute_forward_abs(params, dst); - } break; - case GGML_UNARY_OP_SGN: - { - ggml_compute_forward_sgn(params, dst); - } break; - case GGML_UNARY_OP_NEG: - { - ggml_compute_forward_neg(params, dst); - } break; - case GGML_UNARY_OP_STEP: - { - ggml_compute_forward_step(params, dst); - } break; - case GGML_UNARY_OP_TANH: - { - ggml_compute_forward_tanh(params, dst); - } break; - case GGML_UNARY_OP_ELU: - { - ggml_compute_forward_elu(params, dst); - } break; - case GGML_UNARY_OP_RELU: - { - ggml_compute_forward_relu(params, dst); - } break; - case GGML_UNARY_OP_GELU: - { - ggml_compute_forward_gelu(params, dst); - } break; - case GGML_UNARY_OP_GELU_QUICK: - { - ggml_compute_forward_gelu_quick(params, dst); - } break; - case GGML_UNARY_OP_SILU: - { - ggml_compute_forward_silu(params, dst); - } break; - case GGML_UNARY_OP_HARDSWISH: - { - ggml_compute_forward_hardswish(params, dst); - } break; - case GGML_UNARY_OP_HARDSIGMOID: - { - ggml_compute_forward_hardsigmoid(params, dst); - } break; - default: - { - GGML_ASSERT(false); - } break; - } -} - -// ggml_compute_forward_get_rel_pos - -static void ggml_compute_forward_get_rel_pos_f16( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - - if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) { - return; - } - - // ref: https://github.com/facebookresearch/segment-anything/blob/main/segment_anything/modeling/image_encoder.py#L292-L322 - - GGML_TENSOR_UNARY_OP_LOCALS - - const int64_t w = ne1; - - ggml_fp16_t * src0_data = (ggml_fp16_t *) src0->data; - ggml_fp16_t * dst_data = (ggml_fp16_t *) dst->data; - - for (int64_t i2 = 0; i2 < ne2; ++i2) { - for (int64_t i1 = 0; i1 < ne1; ++i1) { - const int64_t pos = (w - i1 - 1) + i2; - for (int64_t i0 = 0; i0 < ne0; ++i0) { - dst_data[i2*ne1*ne0 + i1*ne0 + i0] = src0_data[pos*ne00 + i0]; - } - } - } -} - -static void ggml_compute_forward_get_rel_pos( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - - switch (src0->type) { - case GGML_TYPE_F16: - { - ggml_compute_forward_get_rel_pos_f16(params, dst); - } break; - default: - { - GGML_ASSERT(false); - } break; - } -} - -// ggml_compute_forward_add_rel_pos - -static void ggml_compute_forward_add_rel_pos_f32( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - const struct ggml_tensor * src1 = dst->src[1]; - const struct ggml_tensor * src2 = dst->src[2]; - - const bool inplace = (bool) ((int32_t *) dst->op_params)[0]; - if (!inplace && params->type == GGML_TASK_TYPE_INIT) { - if (params->ith != 0) { - return; - } - memcpy((char *) dst->data, (char *) src0->data, ggml_nbytes(dst)); - return; - } - if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) { - return; - } - - int64_t t0 = ggml_perf_time_us(); - UNUSED(t0); - - // ref: https://github.com/facebookresearch/segment-anything/blob/main/segment_anything/modeling/image_encoder.py#L357-L359 - - float * src1_data = (float *) src1->data; - float * src2_data = (float *) src2->data; - float * dst_data = (float *) dst->data; - - const int64_t ne10 = src1->ne[0]; - const int64_t ne11 = src1->ne[1]; - const int64_t ne12 = src1->ne[2]; - const int64_t ne13 = src1->ne[3]; - - const int ith = params->ith; - const int nth = params->nth; - - // total patches in dst - const int np = ne13; - - // patches per thread - const int dp = (np + nth - 1)/nth; - - // patch range for this thread - const int ip0 = dp*ith; - const int ip1 = MIN(ip0 + dp, np); - - for (int64_t i13 = ip0; i13 < ip1; ++i13) { - for (int64_t i12 = 0; i12 < ne12; ++i12) { - for (int64_t i11 = 0; i11 < ne11; ++i11) { - const int64_t jp1 = i13*ne12*ne11*ne10 + i12*ne11*ne10 + i11*ne10; - for (int64_t i10 = 0; i10 < ne10; ++i10) { - const int64_t jp0 = jp1 + i10; - const float src1_e = src1_data[jp0]; - const float src2_e = src2_data[jp0]; - - const int64_t jdh = jp0 * ne10; - const int64_t jdw = jdh - (ne10 - 1) * i10; - - for (int64_t j = 0; j < ne10; ++j) { - dst_data[jdh + j ] += src2_e; - dst_data[jdw + j*ne10] += src1_e; - } - } - } - } - } -} - -static void ggml_compute_forward_add_rel_pos( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - - switch (src0->type) { - case GGML_TYPE_F32: - { - ggml_compute_forward_add_rel_pos_f32(params, dst); - } break; - default: - { - GGML_ASSERT(false); - } break; - } -} - -// ggml_compute_forward_map_unary - -static void ggml_compute_forward_map_unary_f32( - const struct ggml_compute_params * params, - struct ggml_tensor * dst, - const ggml_unary_op_f32_t fun) { - - const struct ggml_tensor * src0 = dst->src[0]; - - GGML_ASSERT(ggml_are_same_shape(src0, dst)); - - if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) { - return; - } - - const int n = ggml_nrows(src0); - const int nc = src0->ne[0]; - - assert( dst->nb[0] == sizeof(float)); - assert(src0->nb[0] == sizeof(float)); - - for (int i = 0; i < n; i++) { - fun(nc, - (float *) ((char *) dst->data + i*( dst->nb[1])), - (float *) ((char *) src0->data + i*(src0->nb[1]))); - } -} - -static void ggml_compute_forward_map_unary( - const struct ggml_compute_params * params, - struct ggml_tensor * dst, - const ggml_unary_op_f32_t fun) { - - const struct ggml_tensor * src0 = dst->src[0]; - - switch (src0->type) { - case GGML_TYPE_F32: - { - ggml_compute_forward_map_unary_f32(params, dst, fun); - } break; - default: - { - GGML_ASSERT(false); - } break; - } -} - -// ggml_compute_forward_map_binary - -static void ggml_compute_forward_map_binary_f32( - const struct ggml_compute_params * params, - struct ggml_tensor * dst, - const ggml_binary_op_f32_t fun) { - - const struct ggml_tensor * src0 = dst->src[0]; - const struct ggml_tensor * src1 = dst->src[1]; - - assert(params->ith == 0); - assert(ggml_are_same_shape(src0, src1) && ggml_are_same_shape(src0, dst)); - - if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) { - return; - } - - const int n = ggml_nrows(src0); - const int nc = src0->ne[0]; - - assert( dst->nb[0] == sizeof(float)); - assert(src0->nb[0] == sizeof(float)); - assert(src1->nb[0] == sizeof(float)); - - for (int i = 0; i < n; i++) { - fun(nc, - (float *) ((char *) dst->data + i*( dst->nb[1])), - (float *) ((char *) src0->data + i*(src0->nb[1])), - (float *) ((char *) src1->data + i*(src1->nb[1]))); - } -} - -static void ggml_compute_forward_map_binary( - const struct ggml_compute_params * params, - struct ggml_tensor * dst, - const ggml_binary_op_f32_t fun) { - - const struct ggml_tensor * src0 = dst->src[0]; - - switch (src0->type) { - case GGML_TYPE_F32: - { - ggml_compute_forward_map_binary_f32(params, dst, fun); - } break; - default: - { - GGML_ASSERT(false); - } break; - } -} - -// ggml_compute_forward_map_custom1 - -static void ggml_compute_forward_map_custom1_f32( - const struct ggml_compute_params * params, - struct ggml_tensor * dst, - const ggml_custom1_op_f32_t fun) { - - const struct ggml_tensor * a = dst->src[0]; - - assert(params->ith == 0); - - if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) { - return; - } - - fun(dst, a); -} - -// ggml_compute_forward_map_custom2 - -static void ggml_compute_forward_map_custom2_f32( - const struct ggml_compute_params * params, - struct ggml_tensor * dst, - const ggml_custom2_op_f32_t fun) { - - const struct ggml_tensor * a = dst->src[0]; - const struct ggml_tensor * b = dst->src[1]; - - assert(params->ith == 0); - - if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) { - return; - } - - fun(dst, a, b); -} - -// ggml_compute_forward_map_custom3 - -static void ggml_compute_forward_map_custom3_f32( - const struct ggml_compute_params * params, - struct ggml_tensor * dst, - const ggml_custom3_op_f32_t fun) { - - const struct ggml_tensor * a = dst->src[0]; - const struct ggml_tensor * b = dst->src[1]; - const struct ggml_tensor * c = dst->src[1]; - - assert(params->ith == 0); - - if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) { - return; - } - - fun(dst, a, b, c); -} - -// ggml_compute_forward_map_custom1 - -static void ggml_compute_forward_map_custom1( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * a = dst->src[0]; - - if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) { - return; - } - - struct ggml_map_custom1_op_params p; - memcpy(&p, dst->op_params, sizeof(p)); - - p.fun(dst, a, params->ith, params->nth, p.userdata); -} - -// ggml_compute_forward_map_custom2 - -static void ggml_compute_forward_map_custom2( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * a = dst->src[0]; - const struct ggml_tensor * b = dst->src[1]; - - if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) { - return; - } - - struct ggml_map_custom2_op_params p; - memcpy(&p, dst->op_params, sizeof(p)); - - p.fun(dst, a, b, params->ith, params->nth, p.userdata); -} - -// ggml_compute_forward_map_custom3 - -static void ggml_compute_forward_map_custom3( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * a = dst->src[0]; - const struct ggml_tensor * b = dst->src[1]; - const struct ggml_tensor * c = dst->src[2]; - - if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) { - return; - } - - struct ggml_map_custom3_op_params p; - memcpy(&p, dst->op_params, sizeof(p)); - - p.fun(dst, a, b, c, params->ith, params->nth, p.userdata); -} - -// ggml_compute_forward_cross_entropy_loss - -static void ggml_compute_forward_cross_entropy_loss_f32( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - const struct ggml_tensor * src1 = dst->src[1]; - - GGML_ASSERT(ggml_is_contiguous(src0)); - GGML_ASSERT(ggml_is_contiguous(src1)); - GGML_ASSERT(ggml_is_scalar(dst)); - GGML_ASSERT(ggml_are_same_shape(src0, src1)); - - const int ith = params->ith; - const int nth = params->nth; - - float * sums = (float *) params->wdata; - - // TODO: handle transposed/permuted matrices - const int nc = src0->ne[0]; - const int nr = ggml_nrows(src0); - - GGML_ASSERT(params->wsize >= sizeof(float) * (nth + nth * nc)); - - if (params->type == GGML_TASK_TYPE_INIT) { - if (ith == 0) { - memset(sums, 0, sizeof(float) * (nth + nth * nc)); - } - return; - } - - if (params->type == GGML_TASK_TYPE_FINALIZE) { - if (ith == 0) { - float * dp = (float *) dst->data; - ggml_vec_sum_f32(nth, dp, sums); - dp[0] *= -1.0f / (float) nr; - } - return; - } - - const double eps = 1e-9; - - // rows per thread - const int dr = (nr + nth - 1)/nth; - - // row range for this thread - const int ir0 = dr*ith; - const int ir1 = MIN(ir0 + dr, nr); - - for (int i1 = ir0; i1 < ir1; i1++) { - float * s0 = (float *)((char *) src0->data + i1*src0->nb[1]); - float * s1 = (float *)((char *) src1->data + i1*src1->nb[1]); - float * st = ((float *) params->wdata) + nth + ith*nc; - -#ifndef NDEBUG - for (int i = 0; i < nc; ++i) { - //printf("p[%d] = %f\n", i, p[i]); - assert(!isnan(s0[i])); - assert(!isnan(s1[i])); - } -#endif - // soft_max - ggml_float sum = 0.0; - { - float max = -INFINITY; - ggml_vec_max_f32(nc, &max, s0); - - uint16_t scvt; UNUSED(scvt); - for (int i = 0; i < nc; i++) { - if (s0[i] == -INFINITY) { - st[i] = 0.0f; - } else { -#ifndef GGML_CROSS_ENTROPY_EXP_FP16 - const float s = s0[i] - max; - const float val = expf(s); -#else - ggml_fp16_t s = GGML_FP32_TO_FP16(s0[i] - max); - memcpy(&scvt, &s, sizeof(scvt)); - const float val = GGML_FP16_TO_FP32(ggml_table_exp_f16[scvt]); -#endif - sum += (ggml_float)val; - st[i] = val; - } - } - - assert(sum > 0.0); - // sum = 1.0/sum; - } - // avoid log(0) by rescaling from [0..1] to [eps..1] - sum = (1.0 - eps) / sum; - ggml_vec_scale_f32(nc, st, sum); - ggml_vec_add1_f32(nc, st, st, eps); - ggml_vec_log_f32(nc, st, st); - ggml_vec_mul_f32(nc, st, st, s1); - - float st_sum = 0; - ggml_vec_sum_f32(nc, &st_sum, st); - sums[ith] += st_sum; - -#ifndef NDEBUG - for (int i = 0; i < nc; ++i) { - assert(!isnan(st[i])); - assert(!isinf(st[i])); - } -#endif - } - -} - -static void ggml_compute_forward_cross_entropy_loss( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - - switch (src0->type) { - case GGML_TYPE_F32: - { - ggml_compute_forward_cross_entropy_loss_f32(params, dst); - } break; - default: - { - GGML_ASSERT(false); - } break; - } -} - -// ggml_compute_forward_cross_entropy_loss_back - -static void ggml_compute_forward_cross_entropy_loss_back_f32( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - const struct ggml_tensor * src1 = dst->src[1]; - const struct ggml_tensor * opt0 = dst->src[2]; - - GGML_ASSERT(ggml_is_contiguous(dst)); - GGML_ASSERT(ggml_is_contiguous(src0)); - GGML_ASSERT(ggml_is_contiguous(src1)); - GGML_ASSERT(ggml_is_contiguous(opt0)); - GGML_ASSERT(ggml_are_same_shape(src0, src1) && ggml_are_same_shape(src0, dst)); - - const int64_t ith = params->ith; - const int64_t nth = params->nth; - - if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) { - return; - } - - const double eps = 1e-9; - - // TODO: handle transposed/permuted matrices - const int64_t nc = src0->ne[0]; - const int64_t nr = ggml_nrows(src0); - - // rows per thread - const int64_t dr = (nr + nth - 1)/nth; - - // row range for this thread - const int64_t ir0 = dr*ith; - const int64_t ir1 = MIN(ir0 + dr, nr); - - float * d = (float *) opt0->data; - - for (int64_t i1 = ir0; i1 < ir1; i1++) { - float * ds0 = (float *)((char *) dst->data + i1*dst->nb[1]); - float * s0 = (float *)((char *) src0->data + i1*src0->nb[1]); - float * s1 = (float *)((char *) src1->data + i1*src1->nb[1]); - -#ifndef NDEBUG - for (int i = 0; i < nc; ++i) { - //printf("p[%d] = %f\n", i, p[i]); - assert(!isnan(s0[i])); - assert(!isnan(s1[i])); - } -#endif - - // soft_max - ggml_float sum = 0.0; - { - float max = -INFINITY; - ggml_vec_max_f32(nc, &max, s0); - - uint16_t scvt; UNUSED(scvt); - for (int i = 0; i < nc; i++) { - if (s0[i] == -INFINITY) { - ds0[i] = 0.0f; - } else { -#ifndef GGML_CROSS_ENTROPY_EXP_FP16 - const float s = s0[i] - max; - const float val = expf(s); -#else - ggml_fp16_t s = GGML_FP32_TO_FP16(s0[i] - max); - memcpy(&scvt, &s, sizeof(scvt)); - const float val = GGML_FP16_TO_FP32(ggml_table_exp_f16[scvt]); -#endif - sum += (ggml_float)val; - ds0[i] = val; - } - } - - assert(sum > 0.0); - sum = (1.0 - eps)/sum; - } - - // grad(src0) = (softmax(src0) - src1) * grad(cross_entropy_loss(src0, src1)) / nr - ggml_vec_scale_f32(nc, ds0, sum); - ggml_vec_add1_f32(nc, ds0, ds0, eps); - ggml_vec_sub_f32(nc, ds0, ds0, s1); - ggml_vec_scale_f32(nc, ds0, d[0] / (float) nr); - -#ifndef NDEBUG - for (int i = 0; i < nc; ++i) { - assert(!isnan(ds0[i])); - assert(!isinf(ds0[i])); - } -#endif - } -} - -static void ggml_compute_forward_cross_entropy_loss_back( - const struct ggml_compute_params * params, - struct ggml_tensor * dst) { - - const struct ggml_tensor * src0 = dst->src[0]; - - switch (src0->type) { - case GGML_TYPE_F32: - { - ggml_compute_forward_cross_entropy_loss_back_f32(params, dst); - } break; - default: - { - GGML_ASSERT(false); - } break; - } -} - -///////////////////////////////// - -static void ggml_compute_forward(struct ggml_compute_params * params, struct ggml_tensor * tensor) { - GGML_ASSERT(params); - - if (tensor->op == GGML_OP_NONE || ggml_is_empty(tensor)) { - return; - } - - switch (tensor->op) { - case GGML_OP_DUP: - { - ggml_compute_forward_dup(params, tensor); - } break; - case GGML_OP_ADD: - { - ggml_compute_forward_add(params, tensor); - } break; - case GGML_OP_ADD1: - { - ggml_compute_forward_add1(params, tensor); - } break; - case GGML_OP_ACC: - { - ggml_compute_forward_acc(params, tensor); - } break; - case GGML_OP_SUB: - { - ggml_compute_forward_sub(params, tensor); - } break; - case GGML_OP_MUL: - { - ggml_compute_forward_mul(params, tensor); - } break; - case GGML_OP_DIV: - { - ggml_compute_forward_div(params, tensor); - } break; - case GGML_OP_SQR: - { - ggml_compute_forward_sqr(params, tensor); - } break; - case GGML_OP_SQRT: - { - ggml_compute_forward_sqrt(params, tensor); - } break; - case GGML_OP_LOG: - { - ggml_compute_forward_log(params, tensor); - } break; - case GGML_OP_SUM: - { - ggml_compute_forward_sum(params, tensor); - } break; - case GGML_OP_SUM_ROWS: - { - ggml_compute_forward_sum_rows(params, tensor); - } break; - case GGML_OP_MEAN: - { - ggml_compute_forward_mean(params, tensor); - } break; - case GGML_OP_ARGMAX: - { - ggml_compute_forward_argmax(params, tensor); - } break; - case GGML_OP_REPEAT: - { - ggml_compute_forward_repeat(params, tensor); - } break; - case GGML_OP_REPEAT_BACK: - { - ggml_compute_forward_repeat_back(params, tensor); - } break; - case GGML_OP_CONCAT: - { - ggml_compute_forward_concat(params, tensor); - } break; - case GGML_OP_SILU_BACK: - { - ggml_compute_forward_silu_back(params, tensor); - } break; - case GGML_OP_NORM: - { - ggml_compute_forward_norm(params, tensor); - } break; - case GGML_OP_RMS_NORM: - { - ggml_compute_forward_rms_norm(params, tensor); - } break; - case GGML_OP_RMS_NORM_BACK: - { - ggml_compute_forward_rms_norm_back(params, tensor); - } break; - case GGML_OP_GROUP_NORM: - { - ggml_compute_forward_group_norm(params, tensor); - } break; - case GGML_OP_MUL_MAT: - { - ggml_compute_forward_mul_mat(params, tensor); - } break; - case GGML_OP_MUL_MAT_ID: - { - ggml_compute_forward_mul_mat_id(params, tensor); - } break; - case GGML_OP_OUT_PROD: - { - ggml_compute_forward_out_prod(params, tensor); - } break; - case GGML_OP_SCALE: - { - ggml_compute_forward_scale(params, tensor); - } break; - case GGML_OP_SET: - { - ggml_compute_forward_set(params, tensor); - } break; - case GGML_OP_CPY: - { - ggml_compute_forward_cpy(params, tensor); - } break; - case GGML_OP_CONT: - { - ggml_compute_forward_cont(params, tensor); - } break; - case GGML_OP_RESHAPE: - { - ggml_compute_forward_reshape(params, tensor); - } break; - case GGML_OP_VIEW: - { - ggml_compute_forward_view(params, tensor); - } break; - case GGML_OP_PERMUTE: - { - ggml_compute_forward_permute(params, tensor); - } break; - case GGML_OP_TRANSPOSE: - { - ggml_compute_forward_transpose(params, tensor); - } break; - case GGML_OP_GET_ROWS: - { - ggml_compute_forward_get_rows(params, tensor); - } break; - case GGML_OP_GET_ROWS_BACK: - { - ggml_compute_forward_get_rows_back(params, tensor); - } break; - case GGML_OP_DIAG: - { - ggml_compute_forward_diag(params, tensor); - } break; - case GGML_OP_DIAG_MASK_INF: - { - ggml_compute_forward_diag_mask_inf(params, tensor); - } break; - case GGML_OP_DIAG_MASK_ZERO: - { - ggml_compute_forward_diag_mask_zero(params, tensor); - } break; - case GGML_OP_SOFT_MAX: - { - ggml_compute_forward_soft_max(params, tensor); - } break; - case GGML_OP_SOFT_MAX_BACK: - { - ggml_compute_forward_soft_max_back(params, tensor); - } break; - case GGML_OP_ROPE: - { - ggml_compute_forward_rope(params, tensor); - } break; - case GGML_OP_ROPE_BACK: - { - ggml_compute_forward_rope_back(params, tensor); - } break; - case GGML_OP_ALIBI: - { - ggml_compute_forward_alibi(params, tensor); - } break; - case GGML_OP_CLAMP: - { - ggml_compute_forward_clamp(params, tensor); - } break; - case GGML_OP_CONV_TRANSPOSE_1D: - { - ggml_compute_forward_conv_transpose_1d(params, tensor); - } break; - case GGML_OP_IM2COL: - { - ggml_compute_forward_im2col(params, tensor); - } break; - case GGML_OP_CONV_TRANSPOSE_2D: - { - ggml_compute_forward_conv_transpose_2d(params, tensor); - } break; - case GGML_OP_POOL_1D: - { - ggml_compute_forward_pool_1d(params, tensor); - } break; - case GGML_OP_POOL_2D: - { - ggml_compute_forward_pool_2d(params, tensor); - } break; - case GGML_OP_UPSCALE: - { - ggml_compute_forward_upscale(params, tensor); - } break; - case GGML_OP_PAD: - { - ggml_compute_forward_pad(params, tensor); - } break; - case GGML_OP_ARANGE: - { - ggml_compute_forward_arange(params, tensor); - } break; - case GGML_OP_TIMESTEP_EMBEDDING: - { - ggml_compute_forward_timestep_embedding(params, tensor); - } break; - case GGML_OP_ARGSORT: - { - ggml_compute_forward_argsort(params, tensor); - } break; - case GGML_OP_LEAKY_RELU: - { - ggml_compute_forward_leaky_relu(params, tensor); - } break; - case GGML_OP_FLASH_ATTN: - { - const int32_t t = ggml_get_op_params_i32(tensor, 0); - GGML_ASSERT(t == 0 || t == 1); - const bool masked = t != 0; - ggml_compute_forward_flash_attn(params, masked, tensor); - } break; - case GGML_OP_FLASH_FF: - { - ggml_compute_forward_flash_ff(params, tensor); - } break; - case GGML_OP_FLASH_ATTN_BACK: - { - int32_t t = ggml_get_op_params_i32(tensor, 0); - GGML_ASSERT(t == 0 || t == 1); - bool masked = t != 0; - ggml_compute_forward_flash_attn_back(params, masked, tensor); - } break; - case GGML_OP_SSM_CONV: - { - ggml_compute_forward_ssm_conv(params, tensor); - } break; - case GGML_OP_SSM_SCAN: - { - ggml_compute_forward_ssm_scan(params, tensor); - } break; - case GGML_OP_WIN_PART: - { - ggml_compute_forward_win_part(params, tensor); - } break; - case GGML_OP_WIN_UNPART: - { - ggml_compute_forward_win_unpart(params, tensor); - } break; - case GGML_OP_UNARY: - { - ggml_compute_forward_unary(params, tensor); - } break; - case GGML_OP_GET_REL_POS: - { - ggml_compute_forward_get_rel_pos(params, tensor); - } break; - case GGML_OP_ADD_REL_POS: - { - ggml_compute_forward_add_rel_pos(params, tensor); - } break; - case GGML_OP_MAP_UNARY: - { - ggml_unary_op_f32_t fun; - memcpy(&fun, tensor->op_params, sizeof(fun)); - ggml_compute_forward_map_unary(params, tensor, fun); - } - break; - case GGML_OP_MAP_BINARY: - { - ggml_binary_op_f32_t fun; - memcpy(&fun, tensor->op_params, sizeof(fun)); - ggml_compute_forward_map_binary(params, tensor, fun); - } - break; - case GGML_OP_MAP_CUSTOM1_F32: - { - ggml_custom1_op_f32_t fun; - memcpy(&fun, tensor->op_params, sizeof(fun)); - ggml_compute_forward_map_custom1_f32(params, tensor, fun); - } - break; - case GGML_OP_MAP_CUSTOM2_F32: - { - ggml_custom2_op_f32_t fun; - memcpy(&fun, tensor->op_params, sizeof(fun)); - ggml_compute_forward_map_custom2_f32(params, tensor, fun); - } - break; - case GGML_OP_MAP_CUSTOM3_F32: - { - ggml_custom3_op_f32_t fun; - memcpy(&fun, tensor->op_params, sizeof(fun)); - ggml_compute_forward_map_custom3_f32(params, tensor, fun); - } - break; - case GGML_OP_MAP_CUSTOM1: - { - ggml_compute_forward_map_custom1(params, tensor); - } - break; - case GGML_OP_MAP_CUSTOM2: - { - ggml_compute_forward_map_custom2(params, tensor); - } - break; - case GGML_OP_MAP_CUSTOM3: - { - ggml_compute_forward_map_custom3(params, tensor); - } - break; - case GGML_OP_CROSS_ENTROPY_LOSS: - { - ggml_compute_forward_cross_entropy_loss(params, tensor); - } - break; - case GGML_OP_CROSS_ENTROPY_LOSS_BACK: - { - ggml_compute_forward_cross_entropy_loss_back(params, tensor); - } - break; - case GGML_OP_NONE: - { - // nop - } break; - case GGML_OP_COUNT: - { - GGML_ASSERT(false); - } break; - } -} - -//////////////////////////////////////////////////////////////////////////////// - -static size_t ggml_hash_size(size_t min_sz) { - // next primes after powers of two - static const size_t primes[] = { - 2, 3, 5, 11, 17, 37, 67, 131, 257, 521, 1031, - 2053, 4099, 8209, 16411, 32771, 65537, 131101, - 262147, 524309, 1048583, 2097169, 4194319, 8388617, - 16777259, 33554467, 67108879, 134217757, 268435459, - 536870923, 1073741827, 2147483659 - }; - static const size_t n_primes = sizeof(primes)/sizeof(primes[0]); - - // find the smallest prime that is larger or equal to min_sz - size_t l = 0; - size_t r = n_primes; - while (l < r) { - size_t m = (l + r)/2; - if (primes[m] < min_sz) { - l = m + 1; - } else { - r = m; - } - } - size_t sz = l < n_primes ? primes[l] : min_sz | 1; - return sz; -} - -static size_t ggml_hash(const void * p) { - return (size_t)p; -} - -size_t ggml_hash_find(const struct ggml_hash_set hash_set, struct ggml_tensor * key) { - size_t h = ggml_hash(key) % hash_set.size; - - // linear probing - size_t i = h; - while (hash_set.keys[i] != NULL && hash_set.keys[i] != key) { - i = (i + 1) % hash_set.size; - if (i == h) { - // visited all hash table entries -> not found - return GGML_HASHTABLE_FULL; - } - } - return i; -} - -bool ggml_hash_contains(struct ggml_hash_set hash_set, struct ggml_tensor * key) { - size_t i = ggml_hash_find(hash_set, key); - return i != GGML_HASHTABLE_FULL && hash_set.keys[i] == key; -} - -size_t ggml_hash_insert(struct ggml_hash_set hash_set, struct ggml_tensor * key) { - size_t i = ggml_hash_find(hash_set, key); - - GGML_ASSERT(i != GGML_HASHTABLE_FULL); - - if (hash_set.keys[i] == key) { - return GGML_HASHTABLE_ALREADY_EXISTS; - } - - // insert - GGML_ASSERT(hash_set.keys[i] == NULL); - hash_set.keys[i] = key; - return i; -} - -size_t ggml_hash_find_or_insert(struct ggml_hash_set hash_set, struct ggml_tensor * key) { - size_t i = ggml_hash_find(hash_set, key); - - GGML_ASSERT(i != GGML_HASHTABLE_FULL); - - hash_set.keys[i] = key; - return i; -} - -struct ggml_hash_set ggml_hash_set_new(size_t size) { - size = ggml_hash_size(size); - struct ggml_hash_set result; - result.size = size; - result.keys = GGML_MALLOC(sizeof(struct ggml_tensor *) * size); - memset(result.keys, 0, sizeof(struct ggml_tensor *) * size); - return result; -} - -static void ggml_hash_set_free(struct ggml_hash_set hash_set) { - GGML_FREE(hash_set.keys); -} - -struct hash_map { - struct ggml_hash_set set; - struct ggml_tensor ** vals; -}; - -static struct hash_map * ggml_new_hash_map(size_t size) { - struct hash_map * result = GGML_MALLOC(sizeof(struct hash_map)); - result->set = ggml_hash_set_new(size); - result->vals = GGML_MALLOC(sizeof(struct ggml_tensor *) * result->set.size); - memset(result->vals, 0, sizeof(struct ggml_tensor *) * result->set.size); - return result; -} - -static void ggml_hash_map_free(struct hash_map * map) { - ggml_hash_set_free(map->set); - GGML_FREE(map->vals); - GGML_FREE(map); -} - -// gradient checkpointing - -static struct ggml_tensor * ggml_recompute_graph_node( - struct ggml_context * ctx, - struct ggml_cgraph * graph, - struct hash_map * replacements, - struct ggml_tensor * node) { - - if (node == NULL) { - return NULL; - } - - if (node->flags & GGML_TENSOR_FLAG_PARAM) { - return node; - } - - if (!ggml_hash_contains(graph->visited_hash_table, node)) { - return node; - } - - int count_children = 0; - for (int k = 0; k < GGML_MAX_SRC; ++k) { - if (node->src[k]) { - ++count_children; - } - } - - if (count_children == 0) { - return node; - } - - size_t i = ggml_hash_find(replacements->set, node); - GGML_ASSERT(i != GGML_HASHTABLE_FULL); // assert that not full - if (replacements->set.keys[i] == node) { - return replacements->vals[i]; - } - - struct ggml_tensor * clone = ggml_new_tensor(ctx, node->type, GGML_MAX_DIMS, node->ne); - - // insert clone into replacements - GGML_ASSERT(replacements->set.keys[i] == NULL); // assert that we don't overwrite - replacements->set.keys[i] = node; - replacements->vals[i] = clone; - - clone->op = node->op; - clone->grad = node->grad; - clone->flags = node->flags; - clone->extra = node->extra; - for (int k = 0; k < GGML_MAX_DIMS; ++k) { - clone->nb[k] = node->nb[k]; - } - for (int k = 0; k < GGML_MAX_SRC; ++k) { - clone->src[k] = ggml_recompute_graph_node(ctx, graph, replacements, node->src[k]); - } - if (node->view_src != NULL) { - clone->data = (node->view_src->data == NULL) - ? NULL // view_src not yet allocated - : (char *) node->view_src->data // view_src already allocated - + node->view_offs; - clone->view_src = node->view_src; - clone->view_offs = node->view_offs; - } - - GGML_ASSERT(sizeof(node->op_params) == sizeof(int32_t) * (GGML_MAX_OP_PARAMS / sizeof(int32_t))); - GGML_ASSERT(sizeof(node->name) == GGML_MAX_NAME); - memcpy(clone->op_params, node->op_params, sizeof(node->op_params)); - ggml_format_name(clone, "%s (clone)", ggml_get_name(node)); - - return clone; -} - -void ggml_build_backward_gradient_checkpointing( - struct ggml_context * ctx, - struct ggml_cgraph * gf, - struct ggml_cgraph * gb, - struct ggml_cgraph * gb_tmp, - struct ggml_tensor * * checkpoints, - int n_checkpoints) { - ggml_graph_cpy(gf, gb_tmp); - ggml_build_backward_expand(ctx, gf, gb_tmp, true); - - if (n_checkpoints <= 0) { - ggml_graph_cpy(gb_tmp, gb); - return; - } - - struct hash_map * replacements = ggml_new_hash_map(gf->n_nodes + gf->n_leafs + n_checkpoints); - - // insert checkpoints in replacements - for (int i = 0; i < n_checkpoints; ++i) { - size_t k = ggml_hash_find(replacements->set, checkpoints[i]); - GGML_ASSERT(k != GGML_HASHTABLE_FULL); // assert that not full - GGML_ASSERT(replacements->set.keys[k] == NULL); // assert that we don't overwrite - replacements->set.keys[k] = checkpoints[i]; - replacements->vals[k] = checkpoints[i]; - } - - ggml_graph_cpy(gf, gb); - // rewrite gb_tmp->nodes[gf->n_nodes:gb_tmp->n_nodes], - // replacing references to gb_tmp->nodes[0:gf->n_nodes] ( == gf->nodes[0:gf->n_nodes]), - // by recomputing them from checkpoints - for (int i = gf->n_nodes; in_nodes; ++i) { - struct ggml_tensor * node = gb_tmp->nodes[i]; - for (int k = 0; k < GGML_MAX_SRC; ++k) { - // insert new tensors recomputing src, reusing already made replacements, - // remember replacements: remember new tensors with mapping from corresponding gf nodes - // recurse for input tensors, - // unless (i.e. terminating when) input tensors are replacements (like checkpoints) - node->src[k] = ggml_recompute_graph_node(ctx, gf, replacements, node->src[k]); - } - // insert rewritten backward node with replacements made into resulting backward graph gb - ggml_build_forward_expand(gb, node); - } - - ggml_hash_map_free(replacements); -} - -// functions to change gradients considering the case that input a might be initial gradient with zero value - -static struct ggml_tensor * ggml_add_or_set(struct ggml_context * ctx, struct ggml_tensor * a, struct ggml_tensor * b, struct ggml_hash_set zero_table) { - if (ggml_hash_contains(zero_table, a)) { - return b; - } else { - return ggml_add_impl(ctx, a, b, false); - } -} - -static struct ggml_tensor * ggml_acc_or_set(struct ggml_context * ctx, struct ggml_tensor * a, struct ggml_tensor * b, size_t nb1, size_t nb2, size_t nb3, size_t offset, struct ggml_hash_set zero_table) { - if (ggml_hash_contains(zero_table, a)) { - struct ggml_tensor * a_zero = ggml_scale(ctx, a, 0.0f); - return ggml_acc_impl(ctx, a_zero, b, nb1, nb2, nb3, offset, false); - } else { - return ggml_acc_impl(ctx, a, b, nb1, nb2, nb3, offset, false); - } -} - -static struct ggml_tensor * ggml_add1_or_set(struct ggml_context * ctx, struct ggml_tensor * a, struct ggml_tensor * b, struct ggml_hash_set zero_table) { - if (ggml_hash_contains(zero_table, a)) { - return ggml_repeat(ctx, b, a); - } else { - return ggml_add1_impl(ctx, a, b, false); - } -} - -static struct ggml_tensor * ggml_sub_or_set(struct ggml_context * ctx, struct ggml_tensor * a, struct ggml_tensor * b, struct ggml_hash_set zero_table) { - if (ggml_hash_contains(zero_table, a)) { - return ggml_neg(ctx, b); - } else { - return ggml_sub_impl(ctx, a, b, false); - } -} - -static void ggml_compute_backward(struct ggml_context * ctx, struct ggml_tensor * tensor, struct ggml_hash_set zero_table) { - struct ggml_tensor * src0 = tensor->src[0]; - struct ggml_tensor * src1 = tensor->src[1]; - - switch (tensor->op) { - case GGML_OP_DUP: - { - if (src0->grad) { - src0->grad = ggml_add_or_set(ctx, src0->grad, tensor->grad, zero_table); - } - } break; - case GGML_OP_ADD: - { - if (src0->grad) { - src0->grad = ggml_add_or_set(ctx, src0->grad, tensor->grad, zero_table); - } - if (src1->grad) { - src1->grad = ggml_add_or_set(ctx, src1->grad, tensor->grad, zero_table); - } - } break; - case GGML_OP_ADD1: - { - if (src0->grad) { - src0->grad = ggml_add_or_set(ctx, src0->grad, tensor->grad, zero_table); - } - if (src1->grad) { - src1->grad = ggml_add_or_set(ctx, - src1->grad, - ggml_mean(ctx, tensor->grad), // TODO: should probably be sum instead of mean - zero_table); - } - } break; - case GGML_OP_ACC: - { - if (src0->grad) { - src0->grad = ggml_add_or_set(ctx, src0->grad, tensor->grad, zero_table); - } - if (src1->grad) { - const size_t nb1 = ((int32_t *) tensor->op_params)[0]; - const size_t nb2 = ((int32_t *) tensor->op_params)[1]; - const size_t nb3 = ((int32_t *) tensor->op_params)[2]; - const size_t offset = ((int32_t *) tensor->op_params)[3]; - - struct ggml_tensor * tensor_grad_view = ggml_view_4d(ctx, - tensor->grad, - src1->grad->ne[0], - src1->grad->ne[1], - src1->grad->ne[2], - src1->grad->ne[3], - nb1, nb2, nb3, offset); - - src1->grad = - ggml_add_or_set(ctx, - src1->grad, - ggml_reshape(ctx, - ggml_cont(ctx, tensor_grad_view), - src1->grad), - zero_table); - } - } break; - case GGML_OP_SUB: - { - if (src0->grad) { - src0->grad = ggml_add_or_set(ctx, src0->grad, tensor->grad, zero_table); - } - if (src1->grad) { - src1->grad = ggml_sub_or_set(ctx, src1->grad, tensor->grad, zero_table); - } - } break; - case GGML_OP_MUL: - { - if (src0->grad) { - src0->grad = - ggml_add_or_set(ctx, - src0->grad, - ggml_mul(ctx, src1, tensor->grad), - zero_table); - } - if (src1->grad) { - src1->grad = - ggml_add_or_set(ctx, - src1->grad, - ggml_mul(ctx, src0, tensor->grad), - zero_table); - } - } break; - case GGML_OP_DIV: - { - if (src0->grad) { - src0->grad = - ggml_add_or_set(ctx, - src0->grad, - ggml_div(ctx, tensor->grad, src1), - zero_table); - } - if (src1->grad) { - src1->grad = - ggml_sub_or_set(ctx, - src1->grad, - ggml_mul(ctx, - tensor->grad, - ggml_div(ctx, tensor, src1)), - zero_table); - } - } break; - case GGML_OP_SQR: - { - if (src0->grad) { - src0->grad = - ggml_add_or_set(ctx, - src0->grad, - ggml_scale(ctx, - ggml_mul(ctx, src0, tensor->grad), - 2.0f), - zero_table); - } - } break; - case GGML_OP_SQRT: - { - if (src0->grad) { - src0->grad = - ggml_add_or_set(ctx, - src0->grad, - ggml_scale(ctx, - ggml_div(ctx, - tensor->grad, - tensor), - 0.5f), - zero_table); - } - } break; - case GGML_OP_LOG: - { - if (src0->grad) { - src0->grad = - ggml_add_or_set(ctx, - src0->grad, - ggml_div(ctx, - tensor->grad, - src0), - zero_table); - } - } break; - case GGML_OP_SUM: - { - if (src0->grad) { - src0->grad = - ggml_add1_or_set(ctx, - src0->grad, - tensor->grad, - zero_table); - } - } break; - case GGML_OP_SUM_ROWS: - { - if (src0->grad) { - src0->grad = - ggml_add_or_set(ctx, - src0->grad, - ggml_repeat(ctx, - tensor->grad, - src0->grad), - zero_table); - } - } break; - case GGML_OP_MEAN: - case GGML_OP_ARGMAX: - { - GGML_ASSERT(false); // TODO: implement - } break; - case GGML_OP_REPEAT: - { - // necessary for llama - if (src0->grad) { - src0->grad = ggml_add_or_set(ctx, - src0->grad, - ggml_repeat_back(ctx, tensor->grad, src0->grad), - zero_table); - } - } break; - case GGML_OP_REPEAT_BACK: - { - if (src0->grad) { - // TODO: test this - src0->grad = ggml_add_or_set(ctx, - src0->grad, - ggml_repeat(ctx, tensor->grad, src0->grad), - zero_table); - } - } break; - case GGML_OP_CONCAT: - { - GGML_ASSERT(false); // TODO: implement - } break; - case GGML_OP_SILU_BACK: - { - GGML_ASSERT(false); // TODO: not implemented - } break; - case GGML_OP_NORM: - { - GGML_ASSERT(false); // TODO: not implemented - } break; - case GGML_OP_RMS_NORM: - { - // necessary for llama - if (src0->grad) { - float eps; - memcpy(&eps, tensor->op_params, sizeof(float)); - - src0->grad = ggml_add_or_set(ctx, - src0->grad, - ggml_rms_norm_back(ctx, src0, tensor->grad, eps), - zero_table); - } - } break; - case GGML_OP_RMS_NORM_BACK: - { - GGML_ASSERT(false); // TODO: not implemented - } break; - case GGML_OP_GROUP_NORM: - { - GGML_ASSERT(false); // TODO: not implemented - } break; - case GGML_OP_MUL_MAT: - { - // https://cs231n.github.io/optimization-2/#staged - // # forward pass - // s0 = np.random.randn(5, 10) - // s1 = np.random.randn(10, 3) - // t = s0.dot(s1) - - // # now suppose we had the gradient on t from above in the circuit - // dt = np.random.randn(*t.shape) # same shape as t - // ds0 = dt.dot(s1.T) #.T gives the transpose of the matrix - // ds1 = t.T.dot(dt) - - // tensor.shape [m,p,qq,rr] - // src0.shape [n,m,q1,r1] - // src1.shape [n,p,qq,rr] - - // necessary for llama - if (src0->grad) { - struct ggml_tensor * s1_tg = - ggml_out_prod(ctx, // [n,m,qq,rr] - src1, // [n,p,qq,rr] - tensor->grad); // [m,p,qq,rr] - const int64_t qq = s1_tg->ne[2]; - const int64_t rr = s1_tg->ne[3]; - const int64_t q1 = src0->ne[2]; - const int64_t r1 = src0->ne[3]; - const bool ne2_broadcasted = qq > q1; - const bool ne3_broadcasted = rr > r1; - if (ne2_broadcasted || ne3_broadcasted) { - // sum broadcast repetitions of s1_tg into shape of src0 - s1_tg = ggml_repeat_back(ctx, s1_tg, src0); - } - src0->grad = - ggml_add_or_set(ctx, - src0->grad, // [n,m,q1,r1] - s1_tg, // [n,m,q1,r1] - zero_table); - } - if (src1->grad) { - src1->grad = - ggml_add_or_set(ctx, - src1->grad, // [n,p,qq,rr] - // ggml_mul_mat(ctx, // [n,p,qq,rr] - // ggml_cont(ctx, // [m,n,q1,r1] - // ggml_transpose(ctx, src0)), // [m,n,q1,r1] - // tensor->grad), // [m,p,qq,rr] - - // // when src0 is bigger than tensor->grad (this is mostly the case in llama), - // // avoid transpose of src0, rather transpose smaller tensor->grad - // // and then use ggml_out_prod - ggml_out_prod(ctx, // [n,p,qq,rr] - src0, // [n,m,q1,r1] - ggml_transpose(ctx, // [p,m,qq,rr] - tensor->grad)), // [m,p,qq,rr] - zero_table); - } - } break; - case GGML_OP_MUL_MAT_ID: - { - GGML_ASSERT(false); // TODO: not implemented - } break; - case GGML_OP_OUT_PROD: - { - GGML_ASSERT(false); // TODO: not implemented - } break; - case GGML_OP_SCALE: - { - // necessary for llama - if (src0->grad) { - float s; - memcpy(&s, tensor->op_params, sizeof(float)); - - src0->grad = - ggml_add_or_set(ctx, - src0->grad, - ggml_scale_impl(ctx, tensor->grad, s, false), - zero_table); - } - } break; - case GGML_OP_SET: - { - const size_t nb1 = ((int32_t *) tensor->op_params)[0]; - const size_t nb2 = ((int32_t *) tensor->op_params)[1]; - const size_t nb3 = ((int32_t *) tensor->op_params)[2]; - const size_t offset = ((int32_t *) tensor->op_params)[3]; - - struct ggml_tensor * tensor_grad_view = NULL; - - if (src0->grad || src1->grad) { - GGML_ASSERT(src0->type == tensor->type); - GGML_ASSERT(tensor->grad->type == tensor->type); - GGML_ASSERT(tensor->grad->type == src1->grad->type); - - tensor_grad_view = ggml_view_4d(ctx, - tensor->grad, - src1->grad->ne[0], - src1->grad->ne[1], - src1->grad->ne[2], - src1->grad->ne[3], - nb1, nb2, nb3, offset); - } - - if (src0->grad) { - src0->grad = ggml_add_or_set(ctx, - src0->grad, - ggml_acc_impl(ctx, - tensor->grad, - ggml_neg(ctx, tensor_grad_view), - nb1, nb2, nb3, offset, false), - zero_table); - } - - if (src1->grad) { - src1->grad = - ggml_add_or_set(ctx, - src1->grad, - ggml_reshape(ctx, - ggml_cont(ctx, tensor_grad_view), - src1->grad), - zero_table); - } - } break; - case GGML_OP_CPY: - { - // necessary for llama - // cpy overwrites value of src1 by src0 and returns view(src1) - // the overwriting is mathematically equivalent to: - // tensor = src0 * 1 + src1 * 0 - if (src0->grad) { - // dsrc0 = dtensor * 1 - src0->grad = ggml_add_or_set(ctx, src0->grad, tensor->grad, zero_table); - } - if (src1->grad) { - // dsrc1 = dtensor * 0 -> noop - } - } break; - case GGML_OP_CONT: - { - // same as cpy - if (src0->grad) { - GGML_ASSERT(ggml_is_contiguous(src0->grad)); - GGML_ASSERT(ggml_is_contiguous(tensor->grad)); - src0->grad = ggml_add_or_set(ctx, src0->grad, tensor->grad, zero_table); - } - } break; - case GGML_OP_RESHAPE: - { - // necessary for llama - if (src0->grad) { - src0->grad = - ggml_add_or_set(ctx, src0->grad, - ggml_reshape(ctx, - ggml_is_contiguous(tensor->grad) - ? tensor->grad - : ggml_cont(ctx, tensor->grad), - src0->grad), - zero_table); - } - } break; - case GGML_OP_VIEW: - { - // necessary for llama - if (src0->grad) { - size_t offset; - - memcpy(&offset, tensor->op_params, sizeof(offset)); - - size_t nb1 = tensor->nb[1]; - size_t nb2 = tensor->nb[2]; - size_t nb3 = tensor->nb[3]; - - if (src0->type != src0->grad->type) { - // gradient is typically F32, but src0 could be other type - size_t ng = ggml_element_size(src0->grad); - size_t n0 = ggml_element_size(src0); - GGML_ASSERT(offset % n0 == 0); - GGML_ASSERT(nb1 % n0 == 0); - GGML_ASSERT(nb2 % n0 == 0); - GGML_ASSERT(nb3 % n0 == 0); - offset = (offset / n0) * ng; - nb1 = (nb1 / n0) * ng; - nb2 = (nb2 / n0) * ng; - nb3 = (nb3 / n0) * ng; - } - - src0->grad = ggml_acc_or_set(ctx, src0->grad, tensor->grad, nb1, nb2, nb3, offset, zero_table); - } - } break; - case GGML_OP_PERMUTE: - { - // necessary for llama - if (src0->grad) { - int32_t * axes = (int32_t *) tensor->op_params; - int axis0 = axes[0] & 0x3; - int axis1 = axes[1] & 0x3; - int axis2 = axes[2] & 0x3; - int axis3 = axes[3] & 0x3; - int axes_backward[4] = {0,0,0,0}; - axes_backward[axis0] = 0; - axes_backward[axis1] = 1; - axes_backward[axis2] = 2; - axes_backward[axis3] = 3; - src0->grad = - ggml_add_or_set(ctx, src0->grad, - ggml_permute(ctx, - tensor->grad, - axes_backward[0], - axes_backward[1], - axes_backward[2], - axes_backward[3]), - zero_table); - } - } break; - case GGML_OP_TRANSPOSE: - { - // necessary for llama - if (src0->grad) { - src0->grad = - ggml_add_or_set(ctx, src0->grad, - ggml_transpose(ctx, tensor->grad), - zero_table); - } - } break; - case GGML_OP_GET_ROWS: - { - // necessary for llama (only for tokenizer) - if (src0->grad) { - src0->grad = - ggml_add_or_set(ctx, src0->grad, - // last ggml_get_rows_back argument src0->grad is only - // necessary to setup correct output shape - ggml_get_rows_back(ctx, tensor->grad, src1, src0->grad), - zero_table); - } - if (src1->grad) { - // noop - } - } break; - case GGML_OP_GET_ROWS_BACK: - { - GGML_ASSERT(false); // TODO: not implemented - } break; - case GGML_OP_DIAG: - { - GGML_ASSERT(false); // TODO: not implemented - } break; - case GGML_OP_DIAG_MASK_INF: - { - // necessary for llama - if (src0->grad) { - const int n_past = ((int32_t *) tensor->op_params)[0]; - src0->grad = - ggml_add_or_set(ctx, src0->grad, - /* ggml_diag_mask_inf_impl() shouldn't be here */ - /* ref: https://github.com/ggerganov/llama.cpp/pull/4203#discussion_r1412377992 */ - ggml_diag_mask_zero_impl(ctx, tensor->grad, n_past, false), - zero_table); - } - } break; - case GGML_OP_DIAG_MASK_ZERO: - { - // necessary for llama - if (src0->grad) { - const int n_past = ((int32_t *) tensor->op_params)[0]; - src0->grad = - ggml_add_or_set(ctx, src0->grad, - ggml_diag_mask_zero_impl(ctx, tensor->grad, n_past, false), - zero_table); - } - } break; - case GGML_OP_SOFT_MAX: - { - // necessary for llama - if (src0->grad) { - src0->grad = - ggml_add_or_set(ctx, src0->grad, - ggml_soft_max_back(ctx, tensor->grad, tensor), - zero_table); - } - - } break; - case GGML_OP_SOFT_MAX_BACK: - { - GGML_ASSERT(false); // TODO: not implemented - } break; - case GGML_OP_ROPE: - { - // necessary for llama - if (src0->grad) { - //const int n_past = ((int32_t *) tensor->op_params)[0]; - const int n_dims = ((int32_t *) tensor->op_params)[1]; - const int mode = ((int32_t *) tensor->op_params)[2]; - const int n_ctx = ((int32_t *) tensor->op_params)[3]; - const int n_orig_ctx = ((int32_t *) tensor->op_params)[4]; - float freq_base, freq_scale, ext_factor, attn_factor, beta_fast, beta_slow, xpos_base, xpos_down; - - memcpy(&freq_base, (int32_t *) tensor->op_params + 5, sizeof(float)); - memcpy(&freq_scale, (int32_t *) tensor->op_params + 6, sizeof(float)); - memcpy(&ext_factor, (int32_t *) tensor->op_params + 7, sizeof(float)); - memcpy(&attn_factor, (int32_t *) tensor->op_params + 8, sizeof(float)); - memcpy(&beta_fast, (int32_t *) tensor->op_params + 9, sizeof(float)); - memcpy(&beta_slow, (int32_t *) tensor->op_params + 10, sizeof(float)); - memcpy(&xpos_base, (int32_t *) tensor->op_params + 11, sizeof(float)); - memcpy(&xpos_down, (int32_t *) tensor->op_params + 12, sizeof(bool)); - - src0->grad = ggml_add_or_set(ctx, - src0->grad, - ggml_rope_back(ctx, - tensor->grad, - src1, - n_dims, - mode, - n_ctx, - n_orig_ctx, - freq_base, - freq_scale, - ext_factor, - attn_factor, - beta_fast, - beta_slow, - xpos_base, - xpos_down), - zero_table); - } - } break; - case GGML_OP_ROPE_BACK: - { - if (src0->grad) { - //const int n_past = ((int32_t *) tensor->op_params)[0]; - const int n_dims = ((int32_t *) tensor->op_params)[1]; - const int mode = ((int32_t *) tensor->op_params)[2]; - const int n_ctx = ((int32_t *) tensor->op_params)[3]; - const int n_orig_ctx = ((int32_t *) tensor->op_params)[4]; - float freq_base, freq_scale, ext_factor, attn_factor, beta_fast, beta_slow, xpos_base, xpos_down; - - memcpy(&freq_base, (int32_t *) tensor->op_params + 5, sizeof(float)); - memcpy(&freq_scale, (int32_t *) tensor->op_params + 6, sizeof(float)); - memcpy(&ext_factor, (int32_t *) tensor->op_params + 7, sizeof(float)); - memcpy(&attn_factor, (int32_t *) tensor->op_params + 8, sizeof(float)); - memcpy(&beta_fast, (int32_t *) tensor->op_params + 9, sizeof(float)); - memcpy(&beta_slow, (int32_t *) tensor->op_params + 10, sizeof(float)); - memcpy(&xpos_base, (int32_t *) tensor->op_params + 11, sizeof(float)); - memcpy(&xpos_down, (int32_t *) tensor->op_params + 12, sizeof(bool)); - - src0->grad = ggml_add_or_set(ctx, - src0->grad, - ggml_rope_impl(ctx, - tensor->grad, - src1, - n_dims, - mode, - n_ctx, - n_orig_ctx, - freq_base, - freq_scale, - ext_factor, - attn_factor, - beta_fast, - beta_slow, - xpos_base, - xpos_down, - false), - zero_table); - } - } break; - case GGML_OP_ALIBI: - { - GGML_ASSERT(false); // TODO: not implemented - } break; - case GGML_OP_CLAMP: - { - GGML_ASSERT(false); // TODO: not implemented - } break; - case GGML_OP_CONV_TRANSPOSE_1D: - { - GGML_ASSERT(false); // TODO: not implemented - } break; - case GGML_OP_IM2COL: - { - GGML_ASSERT(false); // TODO: not implemented - } break; - case GGML_OP_CONV_TRANSPOSE_2D: - { - GGML_ASSERT(false); // TODO: not implemented - } break; - case GGML_OP_POOL_1D: - { - GGML_ASSERT(false); // TODO: not implemented - } break; - case GGML_OP_POOL_2D: - { - GGML_ASSERT(false); // TODO: not implemented - } break; - case GGML_OP_UPSCALE: - { - GGML_ASSERT(false); // TODO: not implemented - } break; - case GGML_OP_PAD: - { - GGML_ASSERT(false); // TODO: not implemented - } break; - case GGML_OP_ARANGE: - { - GGML_ASSERT(false); // TODO: not implemented - } break; - case GGML_OP_TIMESTEP_EMBEDDING: - { - GGML_ASSERT(false); // TODO: not implemented - } break; - case GGML_OP_ARGSORT: - { - GGML_ASSERT(false); // TODO: not implemented - } break; - case GGML_OP_LEAKY_RELU: - { - GGML_ASSERT(false); // TODO: not implemented - } break; - case GGML_OP_FLASH_ATTN: - { - struct ggml_tensor * flash_grad = NULL; - if (src0->grad || src1->grad || tensor->src[2]->grad) { - int32_t t = ggml_get_op_params_i32(tensor, 0); - GGML_ASSERT(t == 0 || t == 1); - bool masked = t != 0; - flash_grad = - ggml_flash_attn_back(ctx, - src0, - src1, - tensor->src[2], - tensor->grad, - masked); - } - - struct ggml_tensor * src2 = tensor->src[2]; - const int64_t elem_q = ggml_nelements(src0); - const int64_t elem_k = ggml_nelements(src1); - const int64_t elem_v = ggml_nelements(src2); - - enum ggml_type result_type = flash_grad->type; - GGML_ASSERT(ggml_blck_size(result_type) == 1); - const size_t tsize = ggml_type_size(result_type); - - const size_t offs_q = 0; - const size_t offs_k = offs_q + GGML_PAD(elem_q * tsize, GGML_MEM_ALIGN); - const size_t offs_v = offs_k + GGML_PAD(elem_k * tsize, GGML_MEM_ALIGN); - - if (src0->grad) { - struct ggml_tensor * view_q = ggml_view_1d(ctx, flash_grad, elem_q, offs_q); - struct ggml_tensor * grad_q = ggml_reshape(ctx, view_q, src0); - src0->grad = ggml_add_or_set(ctx, - src0->grad, - grad_q, - zero_table); - } - if (src1->grad) { - struct ggml_tensor * view_k = ggml_view_1d(ctx, flash_grad, elem_k, offs_k); - struct ggml_tensor * grad_k = ggml_reshape(ctx, view_k, src1); - src1->grad = ggml_add_or_set(ctx, - src1->grad, - grad_k, - zero_table); - } - if (src2->grad) { - struct ggml_tensor * view_v = ggml_view_1d(ctx, flash_grad, elem_v, offs_v); - struct ggml_tensor * grad_v = ggml_reshape(ctx, view_v, src2); - src2->grad = ggml_add_or_set(ctx, - src2->grad, - grad_v, - zero_table); - } - } break; - case GGML_OP_FLASH_FF: - { - GGML_ASSERT(false); // not supported - } break; - case GGML_OP_FLASH_ATTN_BACK: - { - GGML_ASSERT(false); // not supported - } break; - case GGML_OP_SSM_CONV: - case GGML_OP_SSM_SCAN: - { - GGML_ASSERT(false); // TODO: not implemented - } break; - case GGML_OP_WIN_PART: - case GGML_OP_WIN_UNPART: - case GGML_OP_UNARY: - { - switch (ggml_get_unary_op(tensor)) { - case GGML_UNARY_OP_ABS: - { - if (src0->grad) { - src0->grad = - ggml_add_or_set(ctx, - src0->grad, - ggml_mul(ctx, - ggml_sgn(ctx, src0), - tensor->grad), - zero_table); - } - } break; - case GGML_UNARY_OP_SGN: - { - if (src0->grad) { - // noop - } - } break; - case GGML_UNARY_OP_NEG: - { - if (src0->grad) { - src0->grad = ggml_sub_or_set(ctx, src0->grad, tensor->grad, zero_table); - } - } break; - case GGML_UNARY_OP_STEP: - { - if (src0->grad) { - // noop - } - } break; - case GGML_UNARY_OP_TANH: - { - GGML_ASSERT(false); // TODO: not implemented - } break; - case GGML_UNARY_OP_ELU: - { - GGML_ASSERT(false); // TODO: not implemented - } break; - case GGML_UNARY_OP_RELU: - { - if (src0->grad) { - src0->grad = ggml_add_or_set(ctx, - src0->grad, - ggml_mul(ctx, - ggml_step(ctx, src0), - tensor->grad), - zero_table); - } - } break; - case GGML_UNARY_OP_GELU: - { - GGML_ASSERT(false); // TODO: not implemented - } break; - case GGML_UNARY_OP_GELU_QUICK: - { - GGML_ASSERT(false); // TODO: not implemented - } break; - case GGML_UNARY_OP_SILU: - { - // necessary for llama - if (src0->grad) { - src0->grad = ggml_add_or_set(ctx, - src0->grad, - ggml_silu_back(ctx, src0, tensor->grad), - zero_table); - } - } break; - default: - GGML_ASSERT(false); - } - } break; - case GGML_OP_GET_REL_POS: - case GGML_OP_ADD_REL_POS: - case GGML_OP_MAP_UNARY: - case GGML_OP_MAP_BINARY: - case GGML_OP_MAP_CUSTOM1_F32: - case GGML_OP_MAP_CUSTOM2_F32: - case GGML_OP_MAP_CUSTOM3_F32: - case GGML_OP_MAP_CUSTOM1: - case GGML_OP_MAP_CUSTOM2: - case GGML_OP_MAP_CUSTOM3: - { - GGML_ASSERT(false); // not supported - } break; - case GGML_OP_CROSS_ENTROPY_LOSS: - { - if (src0->grad) { - src0->grad = ggml_add_or_set(ctx, - src0->grad, - ggml_cross_entropy_loss_back(ctx, - src0, - src1, - tensor->grad), - zero_table); - } - } break; - case GGML_OP_CROSS_ENTROPY_LOSS_BACK: - { - GGML_ASSERT(false); // not supported - } break; - case GGML_OP_NONE: - { - // nop - } break; - case GGML_OP_COUNT: - { - GGML_ASSERT(false); - } break; - } - - for (int i = 0; i < GGML_MAX_SRC; ++i) { - if (tensor->src[i] && tensor->src[i]->grad) { - GGML_ASSERT(ggml_are_same_shape(tensor->src[i], tensor->src[i]->grad)); - } - } -} - -static void ggml_visit_parents(struct ggml_cgraph * cgraph, struct ggml_tensor * node) { - if (node->grad == NULL) { - // this usually happens when we generate intermediate nodes from constants in the backward pass - // it can also happen during forward pass, if the user performs computations with constants - if (node->op != GGML_OP_NONE) { - //GGML_PRINT_DEBUG("%s: warning: node %p has no grad, but op %d\n", __func__, (void *) node, node->op); - } - } - - // check if already visited - if (ggml_hash_insert(cgraph->visited_hash_table, node) == GGML_HASHTABLE_ALREADY_EXISTS) { - return; - } - - for (int i = 0; i < GGML_MAX_SRC; ++i) { - const int k = - (cgraph->order == GGML_CGRAPH_EVAL_ORDER_LEFT_TO_RIGHT) ? i : - (cgraph->order == GGML_CGRAPH_EVAL_ORDER_RIGHT_TO_LEFT) ? (GGML_MAX_SRC-1-i) : - /* unknown order, just fall back to using i*/ i; - if (node->src[k]) { - ggml_visit_parents(cgraph, node->src[k]); - } - } - - if (node->op == GGML_OP_NONE && node->grad == NULL) { - // reached a leaf node, not part of the gradient graph (e.g. a constant) - GGML_ASSERT(cgraph->n_leafs < cgraph->size); - - if (strlen(node->name) == 0) { - ggml_format_name(node, "leaf_%d", cgraph->n_leafs); - } - - cgraph->leafs[cgraph->n_leafs] = node; - cgraph->n_leafs++; - } else { - GGML_ASSERT(cgraph->n_nodes < cgraph->size); - - if (strlen(node->name) == 0) { - ggml_format_name(node, "node_%d", cgraph->n_nodes); - } - - cgraph->nodes[cgraph->n_nodes] = node; - if (cgraph->grads) { - cgraph->grads[cgraph->n_nodes] = node->grad; - } - cgraph->n_nodes++; - } -} - -static void ggml_build_forward_impl(struct ggml_cgraph * cgraph, struct ggml_tensor * tensor, bool expand) { - if (!expand) { - // TODO: this branch isn't accessible anymore, maybe move this to ggml_build_forward_expand - ggml_graph_clear(cgraph); - } - - const int n0 = cgraph->n_nodes; - UNUSED(n0); - - ggml_visit_parents(cgraph, tensor); - - const int n_new = cgraph->n_nodes - n0; - GGML_PRINT_DEBUG("%s: visited %d new nodes\n", __func__, n_new); - - if (n_new > 0) { - // the last added node should always be starting point - GGML_ASSERT(cgraph->nodes[cgraph->n_nodes - 1] == tensor); - } -} - -void ggml_build_forward_expand(struct ggml_cgraph * cgraph, struct ggml_tensor * tensor) { - ggml_build_forward_impl(cgraph, tensor, true); -} - -void ggml_build_backward_expand(struct ggml_context * ctx, struct ggml_cgraph * gf, struct ggml_cgraph * gb, bool keep) { - GGML_ASSERT(gf->n_nodes > 0); - - // if we are keeping the gradient graph, we have to detach the gradient nodes from the original graph - if (keep) { - for (int i = 0; i < gf->n_nodes; i++) { - struct ggml_tensor * node = gf->nodes[i]; - - if (node->grad) { - node->grad = ggml_dup_tensor(ctx, node); - gf->grads[i] = node->grad; - } - } - } - - // remember original gradients which start with zero values - struct ggml_hash_set zero_table = ggml_hash_set_new(gf->size); - for (int i = 0; i < gf->n_nodes; i++) { - if (gf->grads[i]) { - ggml_hash_insert(zero_table, gf->grads[i]); - } - } - - for (int i = gf->n_nodes - 1; i >= 0; i--) { - struct ggml_tensor * node = gf->nodes[i]; - - // inplace operations to add gradients are not created by ggml_compute_backward - // use allocator to automatically make inplace operations - if (node->grad) { - ggml_compute_backward(ctx, node, zero_table); - } - } - - for (int i = 0; i < gf->n_nodes; i++) { - struct ggml_tensor * node = gf->nodes[i]; - - if (node->flags & GGML_TENSOR_FLAG_PARAM) { - GGML_PRINT_DEBUG("%s: found root node %p\n", __func__, (void *) node); - ggml_build_forward_expand(gb, node->grad); - } - } - - ggml_hash_set_free(zero_table); -} - -static size_t ggml_graph_nbytes(size_t size, bool grads) { - size_t nbytes = sizeof(struct ggml_cgraph); - nbytes += size * sizeof(struct ggml_tensor *) * 2; // leafs + nodes - if (grads) { - nbytes += size * sizeof(struct ggml_tensor *); // grads - } - nbytes += ggml_hash_size(size * 2) * sizeof(struct ggml_tensor *); // hash set - return nbytes; -} - -size_t ggml_graph_overhead_custom(size_t size, bool grads) { - return GGML_OBJECT_SIZE + GGML_PAD(ggml_graph_nbytes(size, grads), GGML_MEM_ALIGN); -} - -size_t ggml_graph_overhead(void) { - return ggml_graph_overhead_custom(GGML_DEFAULT_GRAPH_SIZE, false); -} - -struct ggml_cgraph * ggml_new_graph_custom(struct ggml_context * ctx, size_t size, bool grads) { - const size_t obj_size = ggml_graph_nbytes(size, grads); - struct ggml_object * obj = ggml_new_object(ctx, GGML_OBJECT_TYPE_GRAPH, obj_size); - struct ggml_cgraph * cgraph = (struct ggml_cgraph *) ((char *) ctx->mem_buffer + obj->offs); - - struct ggml_tensor ** data_start = (struct ggml_tensor **) (cgraph + 1); - - size_t hash_size = ggml_hash_size(size * 2); - struct ggml_tensor ** nodes_ptr = data_start; - struct ggml_tensor ** leafs_ptr = nodes_ptr + size; - struct ggml_tensor ** hash_keys_ptr = leafs_ptr + size; - struct ggml_tensor ** grads_ptr = grads ? hash_keys_ptr + hash_size : NULL; - - // check that we allocated the correct amount of memory - assert(obj_size == (size_t) ( - (grads ? (char *)(grads_ptr + size) : (char *)(hash_keys_ptr + hash_size)) - (char *)cgraph)); - - memset(hash_keys_ptr, 0, hash_size * sizeof(struct ggml_tensor *)); - - *cgraph = (struct ggml_cgraph) { - /*.size =*/ size, - /*.n_nodes =*/ 0, - /*.n_leafs =*/ 0, - /*.nodes =*/ nodes_ptr, - /*.grads =*/ grads_ptr, - /*.leafs =*/ leafs_ptr, - /*.hash_table =*/ { hash_size, hash_keys_ptr }, - /*.order =*/ GGML_CGRAPH_EVAL_ORDER_LEFT_TO_RIGHT, - /*.perf_runs =*/ 0, - /*.perf_cycles =*/ 0, - /*.perf_time_us =*/ 0, - }; - - return cgraph; -} - -struct ggml_cgraph * ggml_new_graph(struct ggml_context * ctx) { - return ggml_new_graph_custom(ctx, GGML_DEFAULT_GRAPH_SIZE, false); -} - -struct ggml_cgraph ggml_graph_view(struct ggml_cgraph * cgraph0, int i0, int i1) { - struct ggml_cgraph cgraph = { - /*.size =*/ 0, - /*.n_nodes =*/ i1 - i0, - /*.n_leafs =*/ 0, - /*.nodes =*/ cgraph0->nodes + i0, - /*.grads =*/ cgraph0->grads ? cgraph0->grads + i0 : NULL, - /*.leafs =*/ NULL, - /*.hash_table =*/ { 0, NULL }, - /*.order =*/ cgraph0->order, - /*.perf_runs =*/ 0, - /*.perf_cycles =*/ 0, - /*.perf_time_us =*/ 0, - }; - - return cgraph; -} - -void ggml_graph_cpy(struct ggml_cgraph * src, struct ggml_cgraph * dst) { - GGML_ASSERT(dst->size >= src->n_leafs); - GGML_ASSERT(dst->size >= src->n_nodes); - GGML_ASSERT(dst->visited_hash_table.size >= src->visited_hash_table.size); - - dst->n_leafs = src->n_leafs; - dst->n_nodes = src->n_nodes; - dst->order = src->order; - - for (int i = 0; i < src->n_leafs; ++i) { - dst->leafs[i] = src->leafs[i]; - } - - for (int i = 0; i < src->n_nodes; ++i) { - dst->nodes[i] = src->nodes[i]; - } - - if (src->grads) { - GGML_ASSERT(dst->grads != NULL); - for (int i = 0; i < src->n_nodes; ++i) { - dst->grads[i] = src->grads[i]; - } - } - - for (size_t i = 0; i < src->visited_hash_table.size; ++i) { - if (src->visited_hash_table.keys[i]) { - ggml_hash_insert(dst->visited_hash_table, src->visited_hash_table.keys[i]); - } - } -} - -struct ggml_cgraph * ggml_graph_dup(struct ggml_context * ctx, struct ggml_cgraph * cgraph) { - struct ggml_cgraph * result = ggml_new_graph_custom(ctx, cgraph->size, cgraph->grads != NULL); - ggml_graph_cpy(cgraph, result); - return result; -} - -void ggml_graph_reset(struct ggml_cgraph * cgraph) { - GGML_ASSERT(cgraph->grads != NULL); - - for (int i = 0; i < cgraph->n_nodes; i++) { - struct ggml_tensor * grad = cgraph->grads[i]; - - if (grad) { - ggml_set_zero(grad); - } - } -} - -void ggml_graph_clear(struct ggml_cgraph * cgraph) { - cgraph->n_leafs = 0; - cgraph->n_nodes = 0; - memset(cgraph->visited_hash_table.keys, 0, cgraph->visited_hash_table.size * sizeof(struct ggml_tensor *)); -} - -// -// thread data -// -// synchronization is done via busy loops -// I tried using spin locks, but not sure how to use them correctly - the things I tried were slower than busy loops -// - -#ifdef __APPLE__ - -//#include -// -//typedef os_unfair_lock ggml_lock_t; -// -//#define ggml_lock_init(x) UNUSED(x) -//#define ggml_lock_destroy(x) UNUSED(x) -//#define ggml_lock_lock os_unfair_lock_lock -//#define ggml_lock_unlock os_unfair_lock_unlock -// -//#define GGML_LOCK_INITIALIZER OS_UNFAIR_LOCK_INIT - -typedef int ggml_lock_t; - -#define ggml_lock_init(x) UNUSED(x) -#define ggml_lock_destroy(x) UNUSED(x) -#define ggml_lock_lock(x) UNUSED(x) -#define ggml_lock_unlock(x) UNUSED(x) - -#define GGML_LOCK_INITIALIZER 0 - -typedef pthread_t ggml_thread_t; - -#define ggml_thread_create pthread_create -#define ggml_thread_join pthread_join - -#else - -//typedef pthread_spinlock_t ggml_lock_t; - -//#define ggml_lock_init(x) pthread_spin_init(x, PTHREAD_PROCESS_PRIVATE) -//#define ggml_lock_destroy pthread_spin_destroy -//#define ggml_lock_lock pthread_spin_lock -//#define ggml_lock_unlock pthread_spin_unlock - -typedef int ggml_lock_t; - -#define ggml_lock_init(x) UNUSED(x) -#define ggml_lock_destroy(x) UNUSED(x) -#if defined(__x86_64__) || (defined(_MSC_VER) && defined(_M_AMD64)) -#define ggml_lock_lock(x) _mm_pause() -#else -#define ggml_lock_lock(x) UNUSED(x) -#endif -#define ggml_lock_unlock(x) UNUSED(x) - -#define GGML_LOCK_INITIALIZER 0 - -typedef pthread_t ggml_thread_t; - -#define ggml_thread_create pthread_create -#define ggml_thread_join pthread_join - -#endif - -// Android's libc implementation "bionic" does not support setting affinity -#if defined(__gnu_linux__) -static void set_numa_thread_affinity(int thread_n) { - if (!ggml_is_numa()) { - return; - } - - int node_num; - int rv; - size_t setsize = CPU_ALLOC_SIZE(g_state.numa.total_cpus); - - switch(g_state.numa.numa_strategy) { - case GGML_NUMA_STRATEGY_DISTRIBUTE: - // run thread on node_num thread_n / (threads per node) - node_num = thread_n % g_state.numa.n_nodes; - break; - case GGML_NUMA_STRATEGY_ISOLATE: - // run thread on current_node - node_num = g_state.numa.current_node; - break; - case GGML_NUMA_STRATEGY_NUMACTL: - // use the cpuset that numactl gave us - rv = pthread_setaffinity_np(pthread_self(), setsize, &g_state.numa.cpuset); - if (rv) { - fprintf(stderr, "warning: pthread_setaffinity_np() failed: %s\n",strerror(rv)); - } - return; - default: - return; - } - - struct ggml_numa_node * node = &g_state.numa.nodes[node_num]; - - cpu_set_t * cpus = CPU_ALLOC(g_state.numa.total_cpus); - CPU_ZERO_S(setsize, cpus); - for (size_t i = 0; i < node->n_cpus; ++i) { - CPU_SET_S(node->cpus[i], setsize, cpus); - } - - rv = pthread_setaffinity_np(pthread_self(), setsize, cpus); - if (rv) { - fprintf(stderr, "warning: pthread_setaffinity_np() failed: %s\n", strerror(rv)); - } - - CPU_FREE(cpus); -} - -static void clear_numa_thread_affinity(void) { - if (!ggml_is_numa()) { - return; - } - - size_t setsize = CPU_ALLOC_SIZE(g_state.numa.total_cpus); - - cpu_set_t * cpus = CPU_ALLOC(g_state.numa.total_cpus); - CPU_ZERO_S(setsize, cpus); - for (unsigned i = 0; i < g_state.numa.total_cpus; ++i) { - CPU_SET_S(i, setsize, cpus); - } - - int rv = pthread_setaffinity_np(pthread_self(), setsize, cpus); - if (rv) { - fprintf(stderr, "warning: pthread_setaffinity_np() failed: %s\n", strerror(rv)); - } - - CPU_FREE(cpus); -} -#else -// TODO: Windows etc. -// (the linux implementation may also work on BSD, someone should test) -static void set_numa_thread_affinity(int thread_n) { UNUSED(thread_n); } -static void clear_numa_thread_affinity(void) {} -#endif - -struct ggml_compute_state_shared { - const struct ggml_cgraph * cgraph; - const struct ggml_cplan * cplan; - - int64_t perf_node_start_cycles; - int64_t perf_node_start_time_us; - - const int n_threads; - - // synchronization primitives - atomic_int n_active; // num active threads - atomic_int node_n; // active graph node - atomic_int node_task; // active graph node task phase - - ggml_abort_callback abort_callback; // abort ggml_graph_compute when true - void * abort_callback_data; -}; - -struct ggml_compute_state { - ggml_thread_t thrd; - int ith; - struct ggml_compute_state_shared * shared; - enum ggml_status ec; -}; - -static void ggml_graph_compute_perf_stats_node(struct ggml_tensor * node, const struct ggml_compute_state_shared * st) { - int64_t cycles_cur = ggml_perf_cycles() - st->perf_node_start_cycles; - int64_t time_us_cur = ggml_perf_time_us() - st->perf_node_start_time_us; - - node->perf_runs++; - node->perf_cycles += cycles_cur; - node->perf_time_us += time_us_cur; -} - -static int ggml_get_n_tasks(struct ggml_tensor * node, int n_threads, int n_cur_threads) { - int n_tasks = 0; - - if (ggml_is_empty(node)) { - // no need to multi-thread a no-op - n_tasks = 1; - return n_tasks; - } - - switch (node->op) { - case GGML_OP_CPY: - case GGML_OP_DUP: - case GGML_OP_ADD: - case GGML_OP_ADD1: - case GGML_OP_ACC: - { - n_tasks = n_threads; - } break; - case GGML_OP_SUB: - case GGML_OP_SQR: - case GGML_OP_SQRT: - case GGML_OP_LOG: - case GGML_OP_SUM: - case GGML_OP_SUM_ROWS: - case GGML_OP_MEAN: - case GGML_OP_ARGMAX: - case GGML_OP_REPEAT: - case GGML_OP_REPEAT_BACK: - case GGML_OP_LEAKY_RELU: - { - n_tasks = 1; - } break; - case GGML_OP_UNARY: - switch (ggml_get_unary_op(node)) { - case GGML_UNARY_OP_ABS: - case GGML_UNARY_OP_SGN: - case GGML_UNARY_OP_NEG: - case GGML_UNARY_OP_STEP: - case GGML_UNARY_OP_TANH: - case GGML_UNARY_OP_ELU: - case GGML_UNARY_OP_RELU: - case GGML_UNARY_OP_HARDSWISH: // to opt for multiple threads - case GGML_UNARY_OP_HARDSIGMOID: // to opt for multiple threads - { - n_tasks = 1; - } break; - - case GGML_UNARY_OP_GELU: - case GGML_UNARY_OP_GELU_QUICK: - case GGML_UNARY_OP_SILU: - { - n_tasks = n_threads; - } break; - default: - GGML_ASSERT(false); - } - break; - case GGML_OP_SILU_BACK: - case GGML_OP_MUL: - case GGML_OP_DIV: - case GGML_OP_NORM: - case GGML_OP_RMS_NORM: - case GGML_OP_RMS_NORM_BACK: - case GGML_OP_GROUP_NORM: - case GGML_OP_CONCAT: - { - n_tasks = n_threads; - } break; - case GGML_OP_MUL_MAT: - { - n_tasks = n_threads; - - // TODO: use different scheduling for different matrix sizes - //const int nr0 = ggml_nrows(node->src[0]); - //const int nr1 = ggml_nrows(node->src[1]); - - //n_tasks = MIN(n_threads, MAX(1, nr0/128)); - //printf("nr0 = %8d, nr1 = %8d, nr0*nr1 = %8d, n_tasks%d\n", nr0, nr1, nr0*nr1, n_tasks); - } break; - case GGML_OP_MUL_MAT_ID: - { - n_tasks = n_threads; - } break; - case GGML_OP_OUT_PROD: - { - n_tasks = n_threads; - } break; - case GGML_OP_GET_ROWS: - { - // FIXME: the cost of launching additional threads decreases performance with GPU offloading - //n_tasks = MIN(n_threads, ggml_nelements(node->src[1])); - n_tasks = MIN(n_cur_threads, ggml_nelements(node->src[1])); - } break; - case GGML_OP_SCALE: - case GGML_OP_SET: - case GGML_OP_CONT: - case GGML_OP_RESHAPE: - case GGML_OP_VIEW: - case GGML_OP_PERMUTE: - case GGML_OP_TRANSPOSE: - case GGML_OP_GET_ROWS_BACK: - case GGML_OP_DIAG: - { - n_tasks = 1; - } break; - case GGML_OP_DIAG_MASK_ZERO: - case GGML_OP_DIAG_MASK_INF: - case GGML_OP_SOFT_MAX_BACK: - case GGML_OP_ROPE: - case GGML_OP_ROPE_BACK: - case GGML_OP_ADD_REL_POS: - { - n_tasks = n_threads; - } break; - case GGML_OP_ALIBI: - { - n_tasks = 1; //TODO - } break; - case GGML_OP_CLAMP: - { - n_tasks = 1; //TODO - } break; - case GGML_OP_SOFT_MAX: - { - n_tasks = MIN(n_threads, ggml_nrows(node->src[0])); - } break; - case GGML_OP_CONV_TRANSPOSE_1D: - { - n_tasks = n_threads; - } break; - case GGML_OP_IM2COL: - { - n_tasks = n_threads; - } break; - case GGML_OP_CONV_TRANSPOSE_2D: - { - n_tasks = n_threads; - } break; - case GGML_OP_POOL_1D: - case GGML_OP_POOL_2D: - { - n_tasks = 1; - } break; - case GGML_OP_UPSCALE: - { - n_tasks = n_threads; - } break; - case GGML_OP_PAD: - { - n_tasks = n_threads; - } break; - case GGML_OP_ARANGE: - { - n_tasks = n_threads; - } break; - case GGML_OP_TIMESTEP_EMBEDDING: - { - n_tasks = n_threads; - } break; - case GGML_OP_ARGSORT: - { - n_tasks = n_threads; - } break; - case GGML_OP_FLASH_ATTN: - { - n_tasks = n_threads; - } break; - case GGML_OP_FLASH_FF: - { - n_tasks = n_threads; - } break; - case GGML_OP_FLASH_ATTN_BACK: - { - n_tasks = n_threads; - } break; - case GGML_OP_SSM_CONV: - case GGML_OP_SSM_SCAN: - { - n_tasks = n_threads; - } break; - case GGML_OP_WIN_PART: - case GGML_OP_WIN_UNPART: - case GGML_OP_GET_REL_POS: - case GGML_OP_MAP_UNARY: - case GGML_OP_MAP_BINARY: - case GGML_OP_MAP_CUSTOM1_F32: - case GGML_OP_MAP_CUSTOM2_F32: - case GGML_OP_MAP_CUSTOM3_F32: - { - n_tasks = 1; - } break; - case GGML_OP_MAP_CUSTOM1: - { - struct ggml_map_custom1_op_params p; - memcpy(&p, node->op_params, sizeof(p)); - if (p.n_tasks == GGML_N_TASKS_MAX) { - n_tasks = n_threads; - } else { - n_tasks = MIN(p.n_tasks, n_threads); - } - } break; - case GGML_OP_MAP_CUSTOM2: - { - struct ggml_map_custom2_op_params p; - memcpy(&p, node->op_params, sizeof(p)); - if (p.n_tasks == GGML_N_TASKS_MAX) { - n_tasks = n_threads; - } else { - n_tasks = MIN(p.n_tasks, n_threads); - } - } break; - case GGML_OP_MAP_CUSTOM3: - { - struct ggml_map_custom3_op_params p; - memcpy(&p, node->op_params, sizeof(p)); - if (p.n_tasks == GGML_N_TASKS_MAX) { - n_tasks = n_threads; - } else { - n_tasks = MIN(p.n_tasks, n_threads); - } - } break; - case GGML_OP_CROSS_ENTROPY_LOSS: - { - n_tasks = n_threads; - } break; - case GGML_OP_CROSS_ENTROPY_LOSS_BACK: - { - n_tasks = n_threads; - } break; - case GGML_OP_NONE: - { - n_tasks = 1; - } break; - case GGML_OP_COUNT: - { - GGML_ASSERT(false); - } break; - default: - { - fprintf(stderr, "%s: op not implemented: ", __func__); - if (node->op < GGML_OP_COUNT) { - fprintf(stderr, "%s\n", ggml_op_name(node->op)); - } else { - fprintf(stderr, "%d\n", node->op); - } - GGML_ASSERT(false); - } break; - } - - assert(n_tasks > 0); - - return n_tasks; -} - -static void ggml_graph_compute_thread_sync_node(int * node_n, struct ggml_compute_state * state, const bool do_yield) { - // wait for other threads to finish - const int last_node_n = * node_n; - - while (true) { - if (do_yield) { - sched_yield(); - } - - * node_n = atomic_load(&state->shared->node_n); - if (* node_n != last_node_n) break; - } -} - -static void ggml_graph_compute_thread_sync_task(int * task_phase, struct ggml_compute_state * state, const bool do_yield) { - // wait for other threads to finish - const int last_task_phase = * task_phase; - - while (true) { - if (do_yield) { - sched_yield(); - } - - * task_phase = atomic_load(&state->shared->node_task); - if (* task_phase != last_task_phase) break; - } -} - -static thread_ret_t ggml_graph_compute_thread(void * data) { - struct ggml_compute_state * state = (struct ggml_compute_state *) data; - - const struct ggml_cgraph * cgraph = state->shared->cgraph; - const struct ggml_cplan * cplan = state->shared->cplan; - - const int n_threads = state->shared->n_threads; - - set_numa_thread_affinity(state->ith); - - int node_n = -1; - int task_phase = GGML_TASK_TYPE_FINALIZE; - - while (true) { - if (cplan->abort_callback && cplan->abort_callback(cplan->abort_callback_data)) { - state->shared->node_n += 1; - state->ec = GGML_STATUS_ABORTED; - return 0; - } - - if (atomic_fetch_sub(&state->shared->n_active, 1) == 1) { - // all other threads are finished and spinning - // do finalize and init here so we don't have synchronize again - struct ggml_compute_params params = { - /*.type =*/ GGML_TASK_TYPE_FINALIZE, - /*.ith =*/ 0, - /*.nth =*/ 0, - /*.wsize =*/ cplan->work_size, - /*.wdata =*/ cplan->work_data, - }; - - if (node_n != -1) { - /* FINALIZE */ - struct ggml_tensor * node = cgraph->nodes[node_n]; - if (GGML_OP_HAS_FINALIZE[node->op]) { - params.nth = ggml_get_n_tasks(node, n_threads, state->shared->n_threads); - ggml_compute_forward(¶ms, node); - } - ggml_graph_compute_perf_stats_node(node, state->shared); - } - - // distribute new work or execute it direct if 1T - while (++node_n < cgraph->n_nodes) { - GGML_PRINT_DEBUG_5("%s: %d/%d\n", __func__, node_n, cgraph->n_nodes); - struct ggml_tensor * node = cgraph->nodes[node_n]; - const int n_tasks = ggml_get_n_tasks(node, n_threads, state->shared->n_threads); - - state->shared->perf_node_start_cycles = ggml_perf_cycles(); - state->shared->perf_node_start_time_us = ggml_perf_time_us(); - - params.nth = n_tasks; - - if (n_tasks == 1) { - /* INIT */ - if (GGML_OP_HAS_INIT[node->op]) { - params.type = GGML_TASK_TYPE_INIT; - ggml_compute_forward(¶ms, node); - } - - // TODO: maybe push node_n to the atomic but if other threads see n_tasks is 1, - // they do something more efficient than spinning (?) - params.type = GGML_TASK_TYPE_COMPUTE; - ggml_compute_forward(¶ms, node); - - if (GGML_OP_HAS_FINALIZE[node->op]) { - params.type = GGML_TASK_TYPE_FINALIZE; - ggml_compute_forward(¶ms, node); - } - - ggml_graph_compute_perf_stats_node(node, state->shared); - } else { - break; - } - - if (cplan->abort_callback && cplan->abort_callback(cplan->abort_callback_data)) { - break; - } - } - - task_phase = GGML_TASK_TYPE_INIT; - atomic_store(&state->shared->n_active, n_threads); - atomic_store(&state->shared->node_n, node_n); - atomic_store(&state->shared->node_task, task_phase); - } else { - ggml_graph_compute_thread_sync_node(&node_n, state, false); - ggml_graph_compute_thread_sync_task(&task_phase, state, false); - } - - // check if we should stop - if (node_n >= cgraph->n_nodes) break; - - /* INIT & COMPUTE */ - struct ggml_tensor * node = cgraph->nodes[node_n]; - const int n_tasks = ggml_get_n_tasks(node, n_threads, state->shared->n_threads); - - struct ggml_compute_params params = { - /*.type =*/ GGML_TASK_TYPE_INIT, - /*.ith =*/ state->ith, - /*.nth =*/ n_tasks, - /*.wsize =*/ cplan->work_size, - /*.wdata =*/ cplan->work_data, - }; - - if (state->ith < n_tasks) { - if (GGML_OP_HAS_INIT[node->op]) { - ggml_compute_forward(¶ms, node); - } - } - - if (atomic_fetch_sub(&state->shared->n_active, 1) == 1) { - task_phase = GGML_TASK_TYPE_COMPUTE; - atomic_store(&state->shared->n_active, n_threads); - atomic_store(&state->shared->node_task, task_phase); - } - else { - // TODO: this sched_yield can have significant impact on the performance - either positive or negative - // depending on the workload and the operating system. - // since it is not clear what is the best approach, it should potentially become user-configurable - // ref: https://github.com/ggerganov/ggml/issues/291 - // UPD: adding the do_yield flag seems to resolve the issue universally - const bool do_yield = node_n < 0 || cgraph->nodes[node_n]->op == GGML_OP_MUL_MAT; - ggml_graph_compute_thread_sync_task(&task_phase, state, do_yield); - } - - if (state->ith < n_tasks) { - params.type = GGML_TASK_TYPE_COMPUTE; - ggml_compute_forward(¶ms, node); - } - - if (atomic_fetch_sub(&state->shared->n_active, 1) == 1) { - task_phase = GGML_TASK_TYPE_FINALIZE; - atomic_store(&state->shared->n_active, n_threads); - atomic_store(&state->shared->node_task, task_phase); - } - else { - ggml_graph_compute_thread_sync_task(&task_phase, state, false); - } - } - - return 0; -} - -struct ggml_cplan ggml_graph_plan(const struct ggml_cgraph * cgraph, int n_threads) { - if (n_threads <= 0) { - n_threads = GGML_DEFAULT_N_THREADS; - } - - size_t work_size = 0; - - struct ggml_cplan cplan; - memset(&cplan, 0, sizeof(struct ggml_cplan)); - - int max_tasks = 1; - - // thread scheduling for the different operations + work buffer size estimation - for (int i = 0; i < cgraph->n_nodes; i++) { - struct ggml_tensor * node = cgraph->nodes[i]; - - const int n_tasks = ggml_get_n_tasks(node, n_threads, 1); - - max_tasks = MAX(max_tasks, n_tasks); - - size_t cur = 0; - - switch (node->op) { - case GGML_OP_CPY: - case GGML_OP_DUP: - { - if (ggml_is_quantized(node->type)) { - cur = ggml_type_size(GGML_TYPE_F32) * node->ne[0] * n_tasks; - } - } break; - case GGML_OP_ADD: - case GGML_OP_ADD1: - { - if (ggml_is_quantized(node->src[0]->type)) { - cur = ggml_type_size(GGML_TYPE_F32) * node->src[0]->ne[0] * n_tasks; - } - } break; - case GGML_OP_ACC: - { - if (ggml_is_quantized(node->src[0]->type)) { - cur = ggml_type_size(GGML_TYPE_F32) * node->src[1]->ne[0] * n_tasks; - } - } break; - case GGML_OP_MUL_MAT: - { - const enum ggml_type vec_dot_type = type_traits[node->src[0]->type].vec_dot_type; - -#if defined(GGML_USE_CLBLAST) - if (isOpenCLSupported && ggml_cl_can_mul_mat(node->src[0], node->src[1], node)) { - cur = ggml_cl_mul_mat_get_wsize(node->src[0], node->src[1], node); - } else -#endif -#if defined(GGML_USE_ACCELERATE) || defined(GGML_USE_OPENBLAS) - if (ggml_compute_forward_mul_mat_use_blas(node)) { - if (node->src[0]->type != GGML_TYPE_F32) { - // here we need memory for fully dequantized matrix from src0 - // take into account that src0 can be broadcasted into src1[2,3] - cur = ggml_type_size(GGML_TYPE_F32) - * node->src[0]->ne[0]*node->src[0]->ne[1] - * node->src[1]->ne[2]*node->src[1]->ne[3]; - } - } else -#endif - if (node->src[1]->type != vec_dot_type) { - cur = ggml_row_size(vec_dot_type, ggml_nelements(node->src[1])); - } - } break; - case GGML_OP_MUL_MAT_ID: - { - cur = 0; - const struct ggml_tensor * src0 = node->src[0]; - const struct ggml_tensor * src1 = node->src[1]; - const enum ggml_type vec_dot_type = type_traits[src0->type].vec_dot_type; - if (src1->type != vec_dot_type) { - cur += ggml_row_size(vec_dot_type, ggml_nelements(src1)); - } - const int n_as = src0->ne[2]; - cur += GGML_PAD(cur, sizeof(int64_t)); // align - cur += n_as * sizeof(int64_t); // matrix_row_counts - cur += n_as * src1->ne[2] * sizeof(int64_t); // matrix_rows - } break; - case GGML_OP_OUT_PROD: - { - if (ggml_is_quantized(node->src[0]->type)) { - cur = ggml_type_size(GGML_TYPE_F32) * node->src[0]->ne[0] * n_tasks; - } - } break; - case GGML_OP_SOFT_MAX: - case GGML_OP_ROPE: - { - cur = ggml_type_size(GGML_TYPE_F32) * node->ne[0] * n_tasks; - } break; - case GGML_OP_CONV_TRANSPOSE_1D: - { - GGML_ASSERT(node->src[0]->ne[3] == 1); - GGML_ASSERT(node->src[1]->ne[2] == 1); - GGML_ASSERT(node->src[1]->ne[3] == 1); - - const int64_t ne00 = node->src[0]->ne[0]; // K - const int64_t ne01 = node->src[0]->ne[1]; // Cout - const int64_t ne02 = node->src[0]->ne[2]; // Cin - - const int64_t ne10 = node->src[1]->ne[0]; // L - const int64_t ne11 = node->src[1]->ne[1]; // Cin - - if (node->src[0]->type == GGML_TYPE_F16 && - node->src[1]->type == GGML_TYPE_F32) { - cur += sizeof(ggml_fp16_t)*ne00*ne01*ne02; - cur += sizeof(ggml_fp16_t)*ne10*ne11; - } else if (node->src[0]->type == GGML_TYPE_F32 && - node->src[1]->type == GGML_TYPE_F32) { - cur += sizeof(float)*ne00*ne01*ne02; - cur += sizeof(float)*ne10*ne11; - } else { - GGML_ASSERT(false); - } - } break; - case GGML_OP_CONV_TRANSPOSE_2D: - { - const int64_t ne00 = node->src[0]->ne[0]; // W - const int64_t ne01 = node->src[0]->ne[1]; // H - const int64_t ne02 = node->src[0]->ne[2]; // Channels Out - const int64_t ne03 = node->src[0]->ne[3]; // Channels In - - const int64_t ne10 = node->src[1]->ne[0]; // W - const int64_t ne11 = node->src[1]->ne[1]; // H - const int64_t ne12 = node->src[1]->ne[2]; // Channels In - - cur += sizeof(ggml_fp16_t)*ne00*ne01*ne02*ne03; - cur += sizeof(ggml_fp16_t)*ne10*ne11*ne12; - } break; - case GGML_OP_FLASH_ATTN: - { - const int64_t ne11 = ggml_up(node->src[1]->ne[1], GGML_SOFT_MAX_UNROLL); - - if (node->src[1]->type == GGML_TYPE_F32) { - cur = sizeof(float)*ne11*n_tasks; // TODO: this can become (n_tasks-1) - cur += sizeof(float)*ne11*n_tasks; // this is overestimated by x2 - } else if (node->src[1]->type == GGML_TYPE_F16) { - cur = sizeof(float)*ne11*n_tasks; // TODO: this can become (n_tasks-1) - cur += sizeof(float)*ne11*n_tasks; // this is overestimated by x2 - } - } break; - case GGML_OP_FLASH_FF: - { - if (node->src[1]->type == GGML_TYPE_F32) { - cur = sizeof(float)*node->src[1]->ne[1]*n_tasks; // TODO: this can become (n_tasks-1) - cur += sizeof(float)*node->src[1]->ne[1]*n_tasks; // this is overestimated by x2 - } else if (node->src[1]->type == GGML_TYPE_F16) { - cur = sizeof(float)*node->src[1]->ne[1]*n_tasks; // TODO: this can become (n_tasks-1) - cur += sizeof(float)*node->src[1]->ne[1]*n_tasks; // this is overestimated by x2 - } - } break; - case GGML_OP_FLASH_ATTN_BACK: - { - const int64_t D = node->src[0]->ne[0]; - const int64_t ne11 = ggml_up(node->src[1]->ne[1], GGML_SOFT_MAX_UNROLL); - const int64_t mxDn = MAX(D, ne11) * 2; // *2 because of S and SM in ggml_compute_forward_flash_attn_back - if (node->src[1]->type == GGML_TYPE_F32) { - cur = sizeof(float)*mxDn*n_tasks; // TODO: this can become (n_tasks-1) - cur += sizeof(float)*mxDn*n_tasks; // this is overestimated by x2 - } else if (node->src[1]->type == GGML_TYPE_F16) { - cur = sizeof(float)*mxDn*n_tasks; // TODO: this can become (n_tasks-1) - cur += sizeof(float)*mxDn*n_tasks; // this is overestimated by x2 - } - } break; - - case GGML_OP_CROSS_ENTROPY_LOSS: - { - cur = ggml_type_size(node->type)*(n_tasks + node->src[0]->ne[0]*n_tasks); - } break; - case GGML_OP_COUNT: - { - GGML_ASSERT(false); - } break; - default: - break; - } - - work_size = MAX(work_size, cur); - } - - if (work_size > 0) { - work_size += CACHE_LINE_SIZE*(n_threads - 1); - } - - cplan.n_threads = MIN(max_tasks, n_threads); - cplan.work_size = work_size; - cplan.work_data = NULL; - - return cplan; -} - -enum ggml_status ggml_graph_compute(struct ggml_cgraph * cgraph, struct ggml_cplan * cplan) { - { - GGML_ASSERT(cplan); - GGML_ASSERT(cplan->n_threads > 0); - - if (cplan->work_size > 0) { - GGML_ASSERT(cplan->work_data); - } - } - - const int n_threads = cplan->n_threads; - - struct ggml_compute_state_shared state_shared = { - /*.cgraph =*/ cgraph, - /*.cgraph_plan =*/ cplan, - /*.perf_node_start_cycles =*/ 0, - /*.perf_node_start_time_us =*/ 0, - /*.n_threads =*/ n_threads, - /*.n_active =*/ n_threads, - /*.node_n =*/ -1, - /*.node_task =*/ GGML_TASK_TYPE_FINALIZE, - /*.abort_callback =*/ NULL, - /*.abort_callback_data =*/ NULL, - }; - struct ggml_compute_state * workers = alloca(sizeof(struct ggml_compute_state)*n_threads); - - // create thread pool - if (n_threads > 1) { - for (int j = 1; j < n_threads; ++j) { - workers[j] = (struct ggml_compute_state) { - .thrd = 0, - .ith = j, - .shared = &state_shared, - .ec = GGML_STATUS_SUCCESS, - }; - - const int rc = ggml_thread_create(&workers[j].thrd, NULL, ggml_graph_compute_thread, &workers[j]); - GGML_ASSERT(rc == 0); - UNUSED(rc); - } - } - - workers[0].ith = 0; - workers[0].shared = &state_shared; - workers[0].ec = GGML_STATUS_SUCCESS; - - const int64_t perf_start_cycles = ggml_perf_cycles(); - const int64_t perf_start_time_us = ggml_perf_time_us(); - - // this is a work thread too - ggml_graph_compute_thread(&workers[0]); - enum ggml_status compute_status = workers[0].ec; - - // don't leave affinity set on the main thread - clear_numa_thread_affinity(); - - // join or kill thread pool - if (n_threads > 1) { - for (int j = 1; j < n_threads; j++) { - const int rc = ggml_thread_join(workers[j].thrd, NULL); - GGML_ASSERT(rc == 0); - if (workers[j].ec != GGML_STATUS_SUCCESS) - compute_status = workers[j].ec; - } - } - - // performance stats (graph) - { - int64_t perf_cycles_cur = ggml_perf_cycles() - perf_start_cycles; - int64_t perf_time_us_cur = ggml_perf_time_us() - perf_start_time_us; - - cgraph->perf_runs++; - cgraph->perf_cycles += perf_cycles_cur; - cgraph->perf_time_us += perf_time_us_cur; - - GGML_PRINT_DEBUG("%s: perf (%d) - cpu = %.3f / %.3f ms, wall = %.3f / %.3f ms\n", - __func__, cgraph->perf_runs, - (double) perf_cycles_cur / (double) ggml_cycles_per_ms(), - (double) cgraph->perf_cycles / (double) ggml_cycles_per_ms() / (double) cgraph->perf_runs, - (double) perf_time_us_cur / 1000.0, - (double) cgraph->perf_time_us / 1000.0 / cgraph->perf_runs); - } - - return compute_status; -} - -enum ggml_status ggml_graph_compute_with_ctx(struct ggml_context * ctx, struct ggml_cgraph * cgraph, int n_threads) { - struct ggml_cplan cplan = ggml_graph_plan(cgraph, n_threads); - - struct ggml_object * obj = ggml_new_object(ctx, GGML_OBJECT_TYPE_WORK_BUFFER, cplan.work_size); - - cplan.work_data = (uint8_t *)ctx->mem_buffer + obj->offs; - - return ggml_graph_compute(cgraph, &cplan); -} - -struct ggml_tensor * ggml_graph_get_tensor(struct ggml_cgraph * cgraph, const char * name) { - for (int i = 0; i < cgraph->n_leafs; i++) { - struct ggml_tensor * leaf = cgraph->leafs[i]; - - if (strcmp(leaf->name, name) == 0) { - return leaf; - } - } - - for (int i = 0; i < cgraph->n_nodes; i++) { - struct ggml_tensor * node = cgraph->nodes[i]; - - if (strcmp(node->name, name) == 0) { - return node; - } - } - - return NULL; -} - -static void ggml_graph_export_leaf(const struct ggml_tensor * tensor, FILE * fout) { - const int64_t * ne = tensor->ne; - const size_t * nb = tensor->nb; - - fprintf(fout, "%-6s %-12s %8d %" PRId64 " %" PRId64 " %" PRId64 " %" PRId64 " %16zu %16zu %16zu %16zu %16p %32s\n", - ggml_type_name(tensor->type), - ggml_op_name (tensor->op), - ggml_n_dims(tensor), - ne[0], ne[1], ne[2], ne[3], - nb[0], nb[1], nb[2], nb[3], - tensor->data, - tensor->name); -} - -static void ggml_graph_export_node(const struct ggml_tensor * tensor, const char * arg, FILE * fout) { - const int64_t * ne = tensor->ne; - const size_t * nb = tensor->nb; - - fprintf(fout, "%-6s %-6s %-12s %8d %" PRId64 " %" PRId64 " %" PRId64 " %" PRId64 " %16zu %16zu %16zu %16zu %16p %32s\n", - arg, - ggml_type_name(tensor->type), - ggml_op_name (tensor->op), - ggml_n_dims(tensor), - ne[0], ne[1], ne[2], ne[3], - nb[0], nb[1], nb[2], nb[3], - tensor->data, - tensor->name); -} - -void ggml_graph_export(const struct ggml_cgraph * cgraph, const char * fname) { - uint64_t size_eval = 0; - - // compute size of intermediate results - // TODO: does not take into account scratch buffers !!!! - for (int i = 0; i < cgraph->n_nodes; ++i) { - size_eval += ggml_nbytes_pad(cgraph->nodes[i]); - } - - // print - { - FILE * fout = stdout; - - fprintf(fout, "\n"); - fprintf(fout, "%-16s %8x\n", "magic", GGML_FILE_MAGIC); - fprintf(fout, "%-16s %8d\n", "version", GGML_FILE_VERSION); - fprintf(fout, "%-16s %8d\n", "leafs", cgraph->n_leafs); - fprintf(fout, "%-16s %8d\n", "nodes", cgraph->n_nodes); - fprintf(fout, "%-16s %" PRIu64 "\n", "eval", size_eval); - - // header - fprintf(fout, "\n"); - fprintf(fout, "%-6s %-12s %8s %8s %8s %8s %8s %16s %16s %16s %16s %16s %16s\n", - "TYPE", "OP", "NDIMS", "NE0", "NE1", "NE2", "NE3", "NB0", "NB1", "NB2", "NB3", "DATA", "NAME"); - - for (int i = 0; i < cgraph->n_leafs; ++i) { - ggml_graph_export_leaf(cgraph->leafs[i], fout); - - GGML_ASSERT(cgraph->leafs[i]->op == GGML_OP_NONE); - GGML_ASSERT(cgraph->leafs[i]->src[0] == NULL); - GGML_ASSERT(cgraph->leafs[i]->src[1] == NULL); - } - - // header - fprintf(fout, "\n"); - fprintf(fout, "%-6s %-6s %-12s %8s %8s %8s %8s %8s %16s %16s %16s %16s %8s %16s %16s\n", - "ARG", "TYPE", "OP", "NDIMS", "NE0", "NE1", "NE2", "NE3", "NB0", "NB1", "NB2", "NB3", "NTASKS", "DATA", "NAME"); - - for (int i = 0; i < cgraph->n_nodes; ++i) { - ggml_graph_export_node(cgraph->nodes[i], "DST", fout); - - for (int j = 0; j < GGML_MAX_SRC; ++j) { - if (cgraph->nodes[i]->src[j]) { - ggml_graph_export_node(cgraph->nodes[i]->src[j], "SRC", fout); - } - } - - fprintf(fout, "\n"); - } - - fprintf(fout, "\n"); - } - - // write binary data - { - FILE * fout = ggml_fopen(fname, "wb"); - - if (!fout) { - fprintf(stderr, "%s: failed to open %s\n", __func__, fname); - return; - } - - // header - { - const uint32_t magic = GGML_FILE_MAGIC; - const uint32_t version = GGML_FILE_VERSION; - const uint32_t n_leafs = cgraph->n_leafs; - const uint32_t n_nodes = cgraph->n_nodes; - - fwrite(&magic, sizeof(uint32_t), 1, fout); - fwrite(&version, sizeof(uint32_t), 1, fout); - fwrite(&n_leafs, sizeof(uint32_t), 1, fout); - fwrite(&n_nodes, sizeof(uint32_t), 1, fout); - fwrite(&size_eval, sizeof(uint64_t), 1, fout); - } - - // leafs - { - for (int i = 0; i < cgraph->n_leafs; ++i) { - const struct ggml_tensor * tensor = cgraph->leafs[i]; - - const uint32_t type = tensor->type; - const uint32_t op = tensor->op; - - fwrite(&type, sizeof(uint32_t), 1, fout); - fwrite(&op, sizeof(uint32_t), 1, fout); - - for (int j = 0; j < GGML_MAX_DIMS; ++j) { - const uint64_t ne = tensor->ne[j]; - const uint64_t nb = tensor->nb[j]; - - fwrite(&ne, sizeof(uint64_t), 1, fout); - fwrite(&nb, sizeof(uint64_t), 1, fout); - } - - fwrite(tensor->name, sizeof(char), GGML_MAX_NAME, fout); - fwrite(tensor->op_params, sizeof(char), GGML_MAX_OP_PARAMS, fout); - - // dump the data - // TODO: pad this to 32 byte boundary - { - const size_t size = ggml_nbytes(tensor); - - fwrite(tensor->data, sizeof(char), size, fout); - } - } - } - - // nodes - { - for (int i = 0; i < cgraph->n_nodes; ++i) { - const struct ggml_tensor * tensor = cgraph->nodes[i]; - - const uint32_t type = tensor->type; - const uint32_t op = tensor->op; - - fwrite(&type, sizeof(uint32_t), 1, fout); - fwrite(&op, sizeof(uint32_t), 1, fout); - - for (int j = 0; j < GGML_MAX_DIMS; ++j) { - const uint64_t ne = tensor->ne[j]; - const uint64_t nb = tensor->nb[j]; - - fwrite(&ne, sizeof(uint64_t), 1, fout); - fwrite(&nb, sizeof(uint64_t), 1, fout); - } - - fwrite(tensor->name, sizeof(char), GGML_MAX_NAME, fout); - fwrite(tensor->op_params, sizeof(char), GGML_MAX_OP_PARAMS, fout); - - // output the op arguments - { - struct ggml_tensor * args[GGML_MAX_SRC] = { NULL }; - - for (int j = 0; j < GGML_MAX_SRC; ++j) { - args[j] = tensor->src[j]; - } - - for (int j = 0; j < GGML_MAX_SRC; ++j) { - if (args[j]) { - int32_t idx = -1; - - // check if leaf - { - for (int k = 0; k < cgraph->n_leafs; ++k) { - if (args[j] == cgraph->leafs[k]) { - idx = k; - break; - } - } - } - - // check if node - if (idx == -1) { - for (int k = 0; k < cgraph->n_nodes; ++k) { - if (args[j] == cgraph->nodes[k]) { - idx = cgraph->n_leafs + k; - break; - } - } - } - - if (idx == -1) { - fprintf(stderr, "%s: failed to find tensor, arg = %d, node = %d\n", __func__, j, i); - fclose(fout); - return; - } - - fwrite(&idx, sizeof(int32_t), 1, fout); - } else { - const int32_t nul = -1; - - fwrite(&nul, sizeof(int32_t), 1, fout); - } - } - } - } - } - - fclose(fout); - } -} - -struct ggml_cgraph * ggml_graph_import(const char * fname, struct ggml_context ** ctx_data, struct ggml_context ** ctx_eval) { - assert(*ctx_data == NULL); - assert(*ctx_eval == NULL); - - struct ggml_cgraph * result = NULL; - - struct ggml_tensor * data = NULL; - - // read file into data - { - FILE * fin = ggml_fopen(fname, "rb"); - if (!fin) { - fprintf(stderr, "%s: failed to open %s\n", __func__, fname); - return result; - } - - size_t fsize = 0; - - fseek(fin, 0, SEEK_END); - fsize = ftell(fin); - fseek(fin, 0, SEEK_SET); - - // create the data context - { - const size_t overhead = 1*ggml_tensor_overhead(); - - struct ggml_init_params params = { - .mem_size = fsize + overhead, - .mem_buffer = NULL, - .no_alloc = false, - }; - - *ctx_data = ggml_init(params); - - if (!*ctx_data) { - fprintf(stderr, "%s: failed to create ggml context\n", __func__); - fclose(fin); - return result; - } - } - - data = ggml_new_tensor_1d(*ctx_data, GGML_TYPE_I8, fsize); - - { - const size_t ret = fread(data->data, sizeof(char), fsize, fin); - if (ret != fsize) { - fprintf(stderr, "%s: failed to read %s\n", __func__, fname); - fclose(fin); - return result; - } - } - - fclose(fin); - } - - // populate result - { - char * ptr = (char *) data->data; - - const uint32_t magic = *(const uint32_t *) ptr; ptr += sizeof(magic); - - if (magic != GGML_FILE_MAGIC) { - fprintf(stderr, "%s: invalid magic number, got %08x\n", __func__, magic); - return result; - } - - const uint32_t version = *(const uint32_t *) ptr; ptr += sizeof(version); - - if (version != GGML_FILE_VERSION) { - fprintf(stderr, "%s: invalid version number\n", __func__); - return result; - } - - const uint32_t n_leafs = *(const uint32_t *) ptr; ptr += sizeof(n_leafs); - const uint32_t n_nodes = *(const uint32_t *) ptr; ptr += sizeof(n_nodes); - const uint64_t size_eval = *(const uint64_t *) ptr; ptr += sizeof(size_eval); - const int graph_size = MAX(n_leafs, n_nodes); - - // create the data context - { - const size_t overhead = (n_leafs + n_nodes)*ggml_tensor_overhead() + ggml_graph_overhead_custom(graph_size, false); - - struct ggml_init_params params = { - .mem_size = size_eval + overhead, - .mem_buffer = NULL, - .no_alloc = true, - }; - - *ctx_eval = ggml_init(params); - - if (!*ctx_eval) { - fprintf(stderr, "%s: failed to create ggml context\n", __func__); - return result; - } - } - - result = ggml_new_graph_custom(*ctx_eval, graph_size, false); - - result->n_leafs = n_leafs; - result->n_nodes = n_nodes; - - - // leafs - { - uint32_t type; - uint32_t op; - - for (uint32_t i = 0; i < n_leafs; ++i) { - type = *(const uint32_t *) ptr; ptr += sizeof(type); - op = *(const uint32_t *) ptr; ptr += sizeof(op); - - int64_t ne[GGML_MAX_DIMS]; - size_t nb[GGML_MAX_DIMS]; - - for (int j = 0; j < GGML_MAX_DIMS; ++j) { - uint64_t ne_cur; - uint64_t nb_cur; - - ne_cur = *(const uint64_t *) ptr; ptr += sizeof(ne_cur); - nb_cur = *(const uint64_t *) ptr; ptr += sizeof(nb_cur); - - ne[j] = ne_cur; - nb[j] = nb_cur; - } - - struct ggml_tensor * tensor = ggml_new_tensor(*ctx_eval, (enum ggml_type) type, GGML_MAX_DIMS, ne); - - tensor->op = (enum ggml_op) op; - - memcpy(tensor->name, ptr, GGML_MAX_NAME); ptr += GGML_MAX_NAME; - memcpy(tensor->op_params, ptr, GGML_MAX_OP_PARAMS); ptr += GGML_MAX_OP_PARAMS; - - tensor->data = (void *) ptr; - - for (int j = 0; j < GGML_MAX_DIMS; ++j) { - tensor->nb[j] = nb[j]; - } - - result->leafs[i] = tensor; - - ptr += ggml_nbytes(tensor); - - fprintf(stderr, "%s: loaded leaf %u: '%16s', %9zu bytes\n", __func__, i, tensor->name, ggml_nbytes(tensor)); - } - } - - ggml_set_no_alloc(*ctx_eval, false); - - // nodes - { - uint32_t type; - uint32_t op; - - for (uint32_t i = 0; i < n_nodes; ++i) { - type = *(const uint32_t *) ptr; ptr += sizeof(type); - op = *(const uint32_t *) ptr; ptr += sizeof(op); - - enum ggml_op eop = (enum ggml_op) op; - - int64_t ne[GGML_MAX_DIMS]; - size_t nb[GGML_MAX_DIMS]; - - for (int j = 0; j < GGML_MAX_DIMS; ++j) { - uint64_t ne_cur; - uint64_t nb_cur; - - ne_cur = *(const uint64_t *) ptr; ptr += sizeof(ne_cur); - nb_cur = *(const uint64_t *) ptr; ptr += sizeof(nb_cur); - - ne[j] = ne_cur; - nb[j] = nb_cur; - } - - const char * ptr_name = ptr; ptr += GGML_MAX_NAME; - const char * ptr_op_params = ptr; ptr += GGML_MAX_OP_PARAMS; - - const int32_t * ptr_arg_idx = (const int32_t *) ptr; ptr += GGML_MAX_SRC*sizeof(int32_t); - - struct ggml_tensor * args[GGML_MAX_SRC] = { NULL }; - - // parse args - for (int j = 0; j < GGML_MAX_SRC; ++j) { - const int32_t arg_idx = ptr_arg_idx[j]; - - if (arg_idx == -1) { - continue; - } - - if (arg_idx < result->n_leafs) { - args[j] = result->leafs[arg_idx]; - } else { - args[j] = result->nodes[arg_idx - result->n_leafs]; - } - } - - // create the tensor - // "view" operations are handled differently - // TODO: handle inplace ops - currently a copy is always made - - struct ggml_tensor * tensor = NULL; - - switch (eop) { - // TODO: implement other view ops - case GGML_OP_RESHAPE: - { - tensor = ggml_reshape_4d(*ctx_eval, args[0], ne[0], ne[1], ne[2], ne[3]); - } break; - case GGML_OP_VIEW: - { - tensor = ggml_view_4d(*ctx_eval, args[0], ne[0], ne[1], ne[2], ne[3], 0, 0, 0, 0); - - size_t offs; - memcpy(&offs, ptr_op_params, sizeof(offs)); - - tensor->data = ((char *) tensor->data) + offs; - } break; - case GGML_OP_TRANSPOSE: - { - tensor = ggml_transpose(*ctx_eval, args[0]); - } break; - case GGML_OP_PERMUTE: - { - tensor = ggml_view_4d(*ctx_eval, args[0], ne[0], ne[1], ne[2], ne[3], 0, 0, 0, 0); - } break; - default: - { - tensor = ggml_new_tensor(*ctx_eval, (enum ggml_type) type, GGML_MAX_DIMS, ne); - - tensor->op = eop; - } break; - } - - memcpy(tensor->name, ptr_name, GGML_MAX_NAME); - memcpy(tensor->op_params, ptr_op_params, GGML_MAX_OP_PARAMS); - - for (int j = 0; j < GGML_MAX_DIMS; ++j) { - tensor->nb[j] = nb[j]; - } - - for (int j = 0; j < GGML_MAX_SRC; ++j) { - tensor->src[j] = args[j]; - } - - result->nodes[i] = tensor; - - fprintf(stderr, "%s: loaded node %u: '%16s', %9zu bytes\n", __func__, i, tensor->name, ggml_nbytes(tensor)); - } - } - } - - return result; -} - -void ggml_graph_print(const struct ggml_cgraph * cgraph) { - int64_t perf_total_per_op_us[GGML_OP_COUNT] = {0}; - - GGML_PRINT("=== GRAPH ===\n"); - - GGML_PRINT("n_nodes = %d\n", cgraph->n_nodes); - for (int i = 0; i < cgraph->n_nodes; i++) { - struct ggml_tensor * node = cgraph->nodes[i]; - - perf_total_per_op_us[node->op] += MAX(1, node->perf_time_us); - - GGML_PRINT(" - %3d: [ %5" PRId64 ", %5" PRId64 ", %5" PRId64 "] %16s %s (%3d) cpu = %7.3f / %7.3f ms, wall = %7.3f / %7.3f ms\n", - i, - node->ne[0], node->ne[1], node->ne[2], - ggml_op_name(node->op), (node->flags & GGML_TENSOR_FLAG_PARAM) ? "x" : node->grad ? "g" : " ", node->perf_runs, - (double) node->perf_cycles / (double) ggml_cycles_per_ms(), - (double) node->perf_cycles / (double) ggml_cycles_per_ms() / (double) node->perf_runs, - (double) node->perf_time_us / 1000.0, - (double) node->perf_time_us / 1000.0 / node->perf_runs); - } - - GGML_PRINT("n_leafs = %d\n", cgraph->n_leafs); - for (int i = 0; i < cgraph->n_leafs; i++) { - struct ggml_tensor * node = cgraph->leafs[i]; - - GGML_PRINT(" - %3d: [ %5" PRId64 ", %5" PRId64 "] %8s %16s\n", - i, - node->ne[0], node->ne[1], - ggml_op_name(node->op), - ggml_get_name(node)); - } - - for (int i = 0; i < GGML_OP_COUNT; i++) { - if (perf_total_per_op_us[i] == 0) { - continue; - } - - GGML_PRINT("perf_total_per_op_us[%16s] = %7.3f ms\n", ggml_op_name(i), (double) perf_total_per_op_us[i] / 1000.0); - } - - GGML_PRINT("========================================\n"); -} - -// check if node is part of the graph -static bool ggml_graph_find(const struct ggml_cgraph * cgraph, const struct ggml_tensor * node) { - if (cgraph == NULL) { - return true; - } - - for (int i = 0; i < cgraph->n_nodes; i++) { - if (cgraph->nodes[i] == node) { - return true; - } - } - - return false; -} - -static struct ggml_tensor * ggml_graph_get_parent(const struct ggml_cgraph * cgraph, const struct ggml_tensor * node) { - for (int i = 0; i < cgraph->n_nodes; i++) { - struct ggml_tensor * parent = cgraph->nodes[i]; - - if (parent->grad == node) { - return parent; - } - } - - return NULL; -} - -static void ggml_graph_dump_dot_node_edge(FILE * fp, const struct ggml_cgraph * gb, struct ggml_tensor * node, struct ggml_tensor * parent, const char * label) { - struct ggml_tensor * gparent = ggml_graph_get_parent(gb, node); - struct ggml_tensor * gparent0 = ggml_graph_get_parent(gb, parent); - fprintf(fp, " \"%p\":%s -> \"%p\":%s [ arrowhead = %s; style = %s; label = \"%s\"; ]\n", - gparent0 ? (void *) gparent0 : (void *) parent, - gparent0 ? "g" : "x", - gparent ? (void *) gparent : (void *) node, - gparent ? "g" : "x", - gparent ? "empty" : "vee", - gparent ? "dashed" : "solid", - label); -} - -static void ggml_graph_dump_dot_leaf_edge(FILE * fp, struct ggml_tensor * node, struct ggml_tensor * parent, const char * label) { - fprintf(fp, " \"%p\":%s -> \"%p\":%s [ label = \"%s\"; ]\n", - (void *) parent, "x", - (void *) node, "x", - label); -} - -void ggml_graph_dump_dot(const struct ggml_cgraph * gb, const struct ggml_cgraph * gf, const char * filename) { - char color[16]; - - FILE * fp = ggml_fopen(filename, "w"); - GGML_ASSERT(fp); - - fprintf(fp, "digraph G {\n"); - fprintf(fp, " newrank = true;\n"); - fprintf(fp, " rankdir = LR;\n"); - - for (int i = 0; i < gb->n_nodes; i++) { - struct ggml_tensor * node = gb->nodes[i]; - - if (ggml_graph_get_parent(gb, node) != NULL) { - continue; - } - - if (node->flags & GGML_TENSOR_FLAG_PARAM) { - snprintf(color, sizeof(color), "yellow"); - } else if (node->grad) { - if (ggml_graph_find(gf, node)) { - snprintf(color, sizeof(color), "green"); - } else { - snprintf(color, sizeof(color), "lightblue"); - } - } else { - snprintf(color, sizeof(color), "white"); - } - - fprintf(fp, " \"%p\" [ " - "style = filled; fillcolor = %s; shape = record; " - "label=\"", - (void *) node, color); - - if (strlen(node->name) > 0) { - fprintf(fp, "%s (%s)|", node->name, ggml_type_name(node->type)); - } else { - fprintf(fp, "(%s)|", ggml_type_name(node->type)); - } - - if (ggml_is_matrix(node)) { - fprintf(fp, "%d [%" PRId64 ", %" PRId64 "] | %s", i, node->ne[0], node->ne[1], ggml_op_symbol(node->op)); - } else { - fprintf(fp, "%d [%" PRId64 ", %" PRId64 ", %" PRId64 "] | %s", i, node->ne[0], node->ne[1], node->ne[2], ggml_op_symbol(node->op)); - } - - if (node->grad) { - fprintf(fp, " | %s\"; ]\n", ggml_op_symbol(node->grad->op)); - } else { - fprintf(fp, "\"; ]\n"); - } - } - - for (int i = 0; i < gb->n_leafs; i++) { - struct ggml_tensor * node = gb->leafs[i]; - - snprintf(color, sizeof(color), "pink"); - - fprintf(fp, " \"%p\" [ " - "style = filled; fillcolor = %s; shape = record; " - "label=\"", - (void *) node, color); - - if (strlen(node->name) > 0) { - fprintf(fp, "%s (%s)|", node->name, ggml_type_name(node->type)); - } else { - fprintf(fp, "(%s)|", ggml_type_name(node->type)); - } - - fprintf(fp, "CONST %d [%" PRId64 ", %" PRId64 "]", i, node->ne[0], node->ne[1]); - if (ggml_nelements(node) < 5) { - fprintf(fp, " | ("); - for (int j = 0; j < ggml_nelements(node); j++) { - if (node->type == GGML_TYPE_I8 || node->type == GGML_TYPE_I16 || node->type == GGML_TYPE_I32) { - fprintf(fp, "%d", ggml_get_i32_1d(node, j)); - } - else if (node->type == GGML_TYPE_F32 || node->type == GGML_TYPE_F16) { - fprintf(fp, "%.1e", (double)ggml_get_f32_1d(node, j)); - } - else { - fprintf(fp, "#"); - } - if (j < ggml_nelements(node) - 1) { - fprintf(fp, ", "); - } - } - fprintf(fp, ")"); - } - fprintf(fp, "\"; ]\n"); - } - - for (int i = 0; i < gb->n_nodes; i++) { - struct ggml_tensor * node = gb->nodes[i]; - - for (int j = 0; j < GGML_MAX_SRC; j++) { - if (node->src[j]) { - char label[16]; - snprintf(label, sizeof(label), "src %d", j); - ggml_graph_dump_dot_node_edge(fp, gb, node, node->src[j], label); - } - } - } - - for (int i = 0; i < gb->n_leafs; i++) { - struct ggml_tensor * node = gb->leafs[i]; - - for (int j = 0; j < GGML_MAX_SRC; j++) { - if (node->src[j]) { - char label[16]; - snprintf(label, sizeof(label), "src %d", j); - ggml_graph_dump_dot_leaf_edge(fp, node, node->src[j], label); - } - } - } - - fprintf(fp, "}\n"); - - fclose(fp); - - GGML_PRINT("%s: dot -Tpng %s -o %s.png && open %s.png\n", __func__, filename, filename, filename); -} - -//////////////////////////////////////////////////////////////////////////////// - -static void ggml_opt_set_params(int np, struct ggml_tensor * const ps[], const float * x) { - int i = 0; - for (int p = 0; p < np; ++p) { - const int64_t ne = ggml_nelements(ps[p]) ; - // TODO: add function to set tensor from array - for (int64_t j = 0; j < ne; ++j) { - ggml_set_f32_1d(ps[p], j, x[i++]); - } - } -} - -static void ggml_opt_get_params(int np, struct ggml_tensor * const ps[], float * x) { - int i = 0; - for (int p = 0; p < np; ++p) { - const int64_t ne = ggml_nelements(ps[p]) ; - // TODO: add function to get all elements at once - for (int64_t j = 0; j < ne; ++j) { - x[i++] = ggml_get_f32_1d(ps[p], j); - } - } -} - -static void ggml_opt_get_grad(int np, struct ggml_tensor * const ps[], float * g) { - int64_t i = 0; - for (int p = 0; p < np; ++p) { - const int64_t ne = ggml_nelements(ps[p]) ; - // TODO: add function to get all elements at once - for (int64_t j = 0; j < ne; ++j) { - g[i++] = ggml_get_f32_1d(ps[p]->grad, j); - } - } -} - -static void ggml_opt_acc_grad(int np, struct ggml_tensor * const ps[], float * g, float scale) { - int64_t i = 0; - for (int p = 0; p < np; ++p) { - const int64_t ne = ggml_nelements(ps[p]) ; - // TODO: add function to get all elements at once - for (int64_t j = 0; j < ne; ++j) { - g[i++] += ggml_get_f32_1d(ps[p]->grad, j) * scale; - } - } -} - -// -// Using AdamW - ref: https://arxiv.org/pdf/1711.05101v3.pdf -// -// (Original Adam - ref: https://arxiv.org/pdf/1412.6980.pdf) -// - -static enum ggml_opt_result ggml_opt_adam( - struct ggml_context * ctx, - struct ggml_opt_context * opt, - struct ggml_opt_params params, - struct ggml_tensor * f, - struct ggml_cgraph * gf, - struct ggml_cgraph * gb, - ggml_opt_callback callback, - void * callback_data) { - GGML_ASSERT(ggml_is_scalar(f)); - - // these will store the parameters we want to optimize - struct ggml_tensor * ps[GGML_MAX_PARAMS]; - - int np = 0; - int64_t nx = 0; - for (int i = 0; i < gf->n_nodes; ++i) { - if (gf->nodes[i]->flags & GGML_TENSOR_FLAG_PARAM) { - GGML_PRINT_DEBUG("found param %d: grad->op = %d\n", np, gf->nodes[i]->grad->op); - - GGML_ASSERT(np < GGML_MAX_PARAMS); - - ps[np++] = gf->nodes[i]; - nx += ggml_nelements(gf->nodes[i]); - } - } - - if ((opt->params.type != params.type) || (opt->nx != nx) || (opt->params.past != params.past)) { - int iter = opt->iter; - ggml_opt_init(opt->ctx, opt, params, nx); - opt->iter = iter; - } - - // constants - float sched = params.adam.sched; - const float alpha = params.adam.alpha; - const float decay = params.adam.decay * alpha; - const float beta1 = params.adam.beta1; - const float beta2 = params.adam.beta2; - const float eps = params.adam.eps; - const float gclip = params.adam.gclip; - const int decay_min_ndim = params.adam.decay_min_ndim; - const int n_accum = MAX(1, params.n_gradient_accumulation); - const float accum_norm = 1.0f / (float) n_accum; - - float * g = opt->adam.g->data; // gradients - float * m = opt->adam.m->data; // first moment - float * v = opt->adam.v->data; // second moment - - float * pf = params.past > 0 ? opt->adam.pf->data : NULL; // past function values - - struct ggml_cplan cplan = ggml_graph_plan(gb, params.n_threads); - struct ggml_object * obj = ggml_new_object(ctx, GGML_OBJECT_TYPE_WORK_BUFFER, cplan.work_size); - cplan.work_data = (uint8_t *)ctx->mem_buffer + obj->offs; - - bool cancel = false; - - // compute the function value - float fx = 0; - ggml_set_zero(opt->adam.g); - for (int accum_step = 0; accum_step < n_accum; ++accum_step) { - if (callback) { - callback(callback_data, accum_step, &sched, &cancel); - if (cancel) { - return GGML_OPT_RESULT_CANCEL; - } - } - // ggml_graph_reset (gf); - ggml_set_f32 (f->grad, 1.0f); - ggml_graph_compute(gb, &cplan); - ggml_opt_acc_grad(np, ps, g, accum_norm); - fx += ggml_get_f32_1d(f, 0); - } - fx *= accum_norm; - - opt->adam.fx_prev = fx; - opt->adam.fx_best = opt->adam.fx_prev; - if (pf) { - pf[opt->iter % params.past] = opt->adam.fx_prev; - } - - opt->loss_before = opt->adam.fx_prev; - opt->loss_after = opt->adam.fx_prev; - - // initialize - if (opt->just_initialized) { - opt->adam.n_no_improvement = 0; - opt->just_initialized = false; - } - - float * fx_best = &opt->adam.fx_best; - float * fx_prev = &opt->adam.fx_prev; - int * n_no_improvement = &opt->adam.n_no_improvement; - - int iter0 = opt->iter; - - // run the optimizer - for (int t = 0; t < params.adam.n_iter; ++t) { - opt->iter = iter0 + t + 1; - GGML_PRINT_DEBUG ("=== iter %d ===\n", t); - - GGML_PRINT_DEBUG ("f = %10.6f\n", ggml_get_f32_1d(f, 0)); - GGML_PRINT_DEBUG_5("df/dx0 = %10.6f\n", ggml_get_f32_1d(ps[0]->grad, 0)); - GGML_PRINT_DEBUG_5("df/dx1 = %10.6f\n", ggml_get_f32_1d(ps[1]->grad, 0)); - - for (int i = 0; i < np; ++i) { - GGML_PRINT_DEBUG("param %d: %10.6f, g = %10.6f\n", i, - ggml_get_f32_1d(ps[i], 0), ggml_get_f32_1d(ps[i]->grad, 0)); - } - - const int64_t t_start_wall = ggml_time_us(); - const int64_t t_start_cpu = ggml_cycles(); - UNUSED(t_start_wall); - UNUSED(t_start_cpu); - - { - float gnorm = 1.0f; - if (gclip > 0.0f) { - // gradient clipping - ggml_float sum = 0.0; - for (int64_t i = 0; i < nx; ++i) { - sum += (ggml_float)(g[i]*g[i]); - } - ggml_float norm = sqrt(sum); - if (norm > (ggml_float) gclip) { - gnorm = (float) ((ggml_float) gclip / norm); - } - } - const float beta1h = alpha*sched/(1.0f - powf(beta1, opt->iter)); - const float beta2h = 1.0f/(1.0f - powf(beta2, opt->iter)); - int64_t i = 0; - for (int p = 0; p < np; ++p) { - const int64_t ne = ggml_nelements(ps[p]); - const float p_decay = ((ggml_n_dims(ps[p]) >= decay_min_ndim) ? decay : 0.0f) * sched; - for (int64_t j = 0; j < ne; ++j) { - float x = ggml_get_f32_1d(ps[p], j); - float g_ = g[i]*gnorm; - m[i] = m[i]*beta1 + g_*(1.0f - beta1); - v[i] = v[i]*beta2 + g_*g_*(1.0f - beta2); - float mh = m[i]*beta1h; - float vh = v[i]*beta2h; - vh = sqrtf(vh) + eps; - x = x*(1.0f - p_decay) - mh/vh; - ggml_set_f32_1d(ps[p], j, x); - ++i; - } - } - } - - fx = 0; - ggml_set_zero(opt->adam.g); - for (int accum_step = 0; accum_step < n_accum; ++accum_step) { - if (callback) { - callback(callback_data, accum_step, &sched, &cancel); - if (cancel) { - return GGML_OPT_RESULT_CANCEL;; - } - } - // ggml_graph_reset (gf); - ggml_set_f32 (f->grad, 1.0f); - ggml_graph_compute(gb, &cplan); - ggml_opt_acc_grad(np, ps, g, accum_norm); - fx += ggml_get_f32_1d(f, 0); - } - fx *= accum_norm; - - opt->loss_after = fx; - - // check convergence - if (fabsf(fx - fx_prev[0])/fx < params.adam.eps_f) { - GGML_PRINT_DEBUG("converged\n"); - - return GGML_OPT_RESULT_OK; - } - - // delta-based convergence test - if (pf != NULL) { - // need at least params.past iterations to start checking for convergence - if (params.past <= iter0 + t) { - const float rate = (pf[(iter0 + t)%params.past] - fx)/fx; - - if (fabsf(rate) < params.delta) { - return GGML_OPT_RESULT_OK; - } - } - - pf[(iter0 + t)%params.past] = fx; - } - - // check for improvement - if (params.max_no_improvement > 0) { - if (fx_best[0] > fx) { - fx_best[0] = fx; - n_no_improvement[0] = 0; - } else { - ++n_no_improvement[0]; - - if (n_no_improvement[0] >= params.max_no_improvement) { - return GGML_OPT_RESULT_OK; - } - } - } - - fx_prev[0] = fx; - - { - const int64_t t_end_cpu = ggml_cycles(); - GGML_PRINT_DEBUG("time iter: %5.3f s\n", ((float)(t_end_cpu - t_start_cpu))/CLOCKS_PER_SEC); - UNUSED(t_end_cpu); - - const int64_t t_end_wall = ggml_time_us(); - GGML_PRINT_DEBUG("wall time iter: %5.3f s\n", (t_end_wall - t_start_wall)/1e6); - UNUSED(t_end_wall); - } - } - - return GGML_OPT_RESULT_DID_NOT_CONVERGE; -} - -// -// L-BFGS -// -// the L-BFGS implementation below is based on the following implementation: -// -// https://github.com/chokkan/liblbfgs -// - -struct ggml_lbfgs_iteration_data { - float alpha; - float ys; - float * s; - float * y; -}; - -static enum ggml_opt_result linesearch_backtracking( - const struct ggml_opt_params * params, - int nx, - float * x, - float * fx, - float * g, - float * d, - float * step, - const float * xp, - struct ggml_tensor * f, - struct ggml_cgraph * gb, - struct ggml_cplan * cplan, - const int np, - struct ggml_tensor * ps[], - bool * cancel, - ggml_opt_callback callback, - void * callback_data) { - int count = 0; - - float width = 0.0f; - float dg = 0.0f; - float finit = 0.0f; - float dginit = 0.0f; - float dgtest = 0.0f; - - const float dec = 0.5f; - const float inc = 2.1f; - - const int n_accum = MAX(1, params->n_gradient_accumulation); - const float accum_norm = 1.0f / (float) n_accum; - - if (*step <= 0.f) { - return GGML_LINESEARCH_INVALID_PARAMETERS; - } - - // compute the initial gradient in the search direction - ggml_vec_dot_f32(nx, &dginit, 0, g, 0, d, 0, 1); - - // make sure that d points to a descent direction - if (0 < dginit) { - return GGML_LINESEARCH_FAIL; - } - - // initialize local variables - finit = *fx; - dgtest = params->lbfgs.ftol*dginit; - - while (true) { - ggml_vec_cpy_f32(nx, x, xp); - ggml_vec_mad_f32(nx, x, d, *step); - - // evaluate the function and gradient values - { - ggml_opt_set_params(np, ps, x); - - *fx = 0; - memset(g, 0, sizeof(float)*nx); - for (int accum_step = 0; accum_step < n_accum; ++accum_step) { - if (callback) { - // LBFG-S does not support learning rate -> ignore learning schedule - float sched = 0; - callback(callback_data, accum_step, &sched, cancel); - if (*cancel) { - return GGML_OPT_RESULT_CANCEL; - } - } - // ggml_graph_reset (gf); - ggml_set_f32 (f->grad, 1.0f); - ggml_graph_compute(gb, cplan); - ggml_opt_acc_grad(np, ps, g, accum_norm); - *fx += ggml_get_f32_1d(f, 0); - } - *fx *= accum_norm; - - } - - ++count; - - if (*fx > finit + (*step)*dgtest) { - width = dec; - } else { - // Armijo condition is satisfied - if (params->lbfgs.linesearch == GGML_LINESEARCH_BACKTRACKING_ARMIJO) { - return count; - } - - ggml_vec_dot_f32(nx, &dg, 0, g, 0, d, 0, 1); - - // check the Wolfe condition - if (dg < params->lbfgs.wolfe * dginit) { - width = inc; - } else { - if(params->lbfgs.linesearch == GGML_LINESEARCH_BACKTRACKING_WOLFE) { - // regular Wolfe conditions - return count; - } - - if(dg > -params->lbfgs.wolfe*dginit) { - width = dec; - } else { - // strong Wolfe condition (GGML_LINESEARCH_BACKTRACKING_STRONG_WOLFE) - return count; - } - } - } - - if (*step < params->lbfgs.min_step) { - return GGML_LINESEARCH_MINIMUM_STEP; - } - if (*step > params->lbfgs.max_step) { - return GGML_LINESEARCH_MAXIMUM_STEP; - } - if (params->lbfgs.max_linesearch <= count) { - return GGML_LINESEARCH_MAXIMUM_ITERATIONS; - } - - (*step) *= width; - } - - GGML_ASSERT(false && "line search failed"); - - return GGML_LINESEARCH_FAIL; -} - -static enum ggml_opt_result ggml_opt_lbfgs( - struct ggml_context * ctx, - struct ggml_opt_context * opt, - struct ggml_opt_params params, - struct ggml_tensor * f, - struct ggml_cgraph * gf, - struct ggml_cgraph * gb, - ggml_opt_callback callback, - void * callback_data) { - if (params.lbfgs.linesearch == GGML_LINESEARCH_BACKTRACKING_WOLFE || - params.lbfgs.linesearch == GGML_LINESEARCH_BACKTRACKING_STRONG_WOLFE) { - if (params.lbfgs.wolfe <= params.lbfgs.ftol || 1.f <= params.lbfgs.wolfe) { - return GGML_OPT_RESULT_INVALID_WOLFE; - } - } - - const int m = params.lbfgs.m; - - // these will store the parameters we want to optimize - struct ggml_tensor * ps[GGML_MAX_PARAMS]; - - int np = 0; - int nx = 0; - for (int i = 0; i < gf->n_nodes; ++i) { - if (gf->nodes[i]->flags & GGML_TENSOR_FLAG_PARAM) { - GGML_PRINT_DEBUG("found param %d: grad->op = %d\n", np, gf->nodes[i]->grad->op); - - GGML_ASSERT(np < GGML_MAX_PARAMS); - - ps[np++] = gf->nodes[i]; - nx += ggml_nelements(gf->nodes[i]); - } - } - - if ((opt->params.type != params.type) || (opt->nx != nx) || (opt->params.past != params.past) || (opt->params.lbfgs.m != params.lbfgs.m)) { - int iter = opt->iter; - ggml_opt_init(ctx, opt, params, nx); - opt->iter = iter; - } - - struct ggml_cplan cplan = ggml_graph_plan(gb, params.n_threads); - struct ggml_object * obj = ggml_new_object(ctx, GGML_OBJECT_TYPE_WORK_BUFFER, cplan.work_size); - cplan.work_data = (uint8_t *)ctx->mem_buffer + obj->offs; - - float * x = opt->lbfgs.x->data; // current parameters - float * xp = opt->lbfgs.xp->data; // previous parameters - float * g = opt->lbfgs.g->data; // current gradient - float * gp = opt->lbfgs.gp->data; // previous gradient - float * d = opt->lbfgs.d->data; // search direction - - float * pf = params.past > 0 ? opt->lbfgs.pf->data : NULL; // past function values - - const int n_accum = MAX(1, params.n_gradient_accumulation); - const float accum_norm = 1.0f / (float) n_accum; - - float fx = 0.0f; // cost function value - float xnorm = 0.0f; // ||x|| - float gnorm = 0.0f; // ||g|| - - // initialize x from the graph nodes - ggml_opt_get_params(np, ps, x); - - // the L-BFGS memory - float * lm_alpha = opt->lbfgs.lmal->data; - float * lm_ys = opt->lbfgs.lmys->data; - float * lm_s = opt->lbfgs.lms->data; - float * lm_y = opt->lbfgs.lmy->data; - - bool cancel = false; - - // evaluate the function value and its gradient - { - ggml_opt_set_params(np, ps, x); - - fx = 0; - memset(g, 0, sizeof(float)*nx); - for (int accum_step = 0; accum_step < n_accum; ++accum_step) { - if (callback) { - // LBFG-S does not support learning rate -> ignore learning schedule - float sched = 0; - callback(callback_data, accum_step, &sched, &cancel); - if (cancel) { - return GGML_OPT_RESULT_CANCEL; - } - } - // ggml_graph_reset (gf); - ggml_set_f32 (f->grad, 1.0f); - ggml_graph_compute(gb, &cplan); - ggml_opt_acc_grad(np, ps, g, accum_norm); - fx += ggml_get_f32_1d(f, 0); - } - fx *= accum_norm; - - opt->loss_before = fx; - opt->loss_after = fx; - } - - // search direction = -gradient - ggml_vec_neg_f32(nx, d, g); - - // ||x||, ||g|| - ggml_vec_norm_f32(nx, &xnorm, x); - ggml_vec_norm_f32(nx, &gnorm, g); - - if (xnorm < 1.0f) { - xnorm = 1.0f; - } - - // already optimized - if (gnorm/xnorm <= params.lbfgs.eps) { - return GGML_OPT_RESULT_OK; - } - - if (opt->just_initialized) { - if (pf) { - pf[0] = fx; - } - opt->lbfgs.fx_best = fx; - - // initial step - ggml_vec_norm_inv_f32(nx, &opt->lbfgs.step, d); - opt->lbfgs.j = 0; - opt->lbfgs.k = 1; - opt->lbfgs.end = 0; - opt->lbfgs.n_no_improvement = 0; - opt->just_initialized = false; - } - - float * fx_best = &opt->lbfgs.fx_best; - float * step = &opt->lbfgs.step; - int * j = &opt->lbfgs.j; - int * k = &opt->lbfgs.k; - int * end = &opt->lbfgs.end; - int * n_no_improvement = &opt->lbfgs.n_no_improvement; - - int ls = 0; - int bound = 0; - - float ys = 0.0f; - float yy = 0.0f; - float beta = 0.0f; - - int it = 0; - - while (true) { - // store the current position and gradient vectors - ggml_vec_cpy_f32(nx, xp, x); - ggml_vec_cpy_f32(nx, gp, g); - - // TODO: instead of passing &cancel here, use the return code of the linesearch - // to determine if the optimization should be cancelled - // this is a simple change, but not doing this atm, since I don't have a nice - // way to test and don't want to break something with so many changes lined up - ls = linesearch_backtracking(¶ms, nx, x, &fx, g, d, step, xp, f, gb, &cplan, np, ps, &cancel, callback, callback_data); - if (cancel) { - return GGML_OPT_RESULT_CANCEL; - } - - if (ls < 0) { - // linesearch failed - go back to the previous point and return - ggml_vec_cpy_f32(nx, x, xp); - ggml_vec_cpy_f32(nx, g, gp); - - return ls; - } - - opt->loss_after = fx; - - ggml_vec_norm_f32(nx, &xnorm, x); - ggml_vec_norm_f32(nx, &gnorm, g); - - GGML_PRINT_DEBUG("f = %10.6f\n", ggml_get_f32_1d(f, 0)); - - if (xnorm < 1.0f) { - xnorm = 1.0f; - } - if (gnorm/xnorm <= params.lbfgs.eps) { - // converged - return GGML_OPT_RESULT_OK; - } - - // delta-based convergence test - if (pf != NULL) { - // need at least params.past iterations to start checking for convergence - if (params.past <= k[0]) { - const float rate = (pf[k[0]%params.past] - fx)/fx; - - if (fabsf(rate) < params.delta) { - return GGML_OPT_RESULT_OK; - } - } - - pf[k[0]%params.past] = fx; - } - - // check for improvement - if (params.max_no_improvement > 0) { - if (fx < fx_best[0]) { - fx_best[0] = fx; - n_no_improvement[0] = 0; - } else { - n_no_improvement[0]++; - - if (n_no_improvement[0] >= params.max_no_improvement) { - return GGML_OPT_RESULT_OK; - } - } - } - - if (params.lbfgs.n_iter != 0 && params.lbfgs.n_iter < it + 1) { - // reached the maximum number of iterations - return GGML_OPT_RESULT_DID_NOT_CONVERGE; - } - - // update vectors s and y: - // s_{k+1} = x_{k+1} - x_{k} = \step * d_{k}. - // y_{k+1} = g_{k+1} - g_{k}. - // - ggml_vec_sub_f32(nx, &lm_s[end[0]*nx], x, xp); - ggml_vec_sub_f32(nx, &lm_y[end[0]*nx], g, gp); - - // compute scalars ys and yy: - // ys = y^t \cdot s -> 1 / \rho. - // yy = y^t \cdot y. - // - ggml_vec_dot_f32(nx, &ys, 0, &lm_y[end[0]*nx], 0, &lm_s[end[0]*nx], 0, 1); - ggml_vec_dot_f32(nx, &yy, 0, &lm_y[end[0]*nx], 0, &lm_y[end[0]*nx], 0, 1); - - lm_ys[end[0]] = ys; - - // find new search direction - // ref: https://en.wikipedia.org/wiki/Limited-memory_BFGS - - bound = (m <= k[0]) ? m : k[0]; - k[0]++; - it++; - end[0] = (end[0] + 1)%m; - - // initialize search direction with -g - ggml_vec_neg_f32(nx, d, g); - - j[0] = end[0]; - for (int i = 0; i < bound; ++i) { - j[0] = (j[0] + m - 1) % m; - // \alpha_{j} = \rho_{j} s^{t}_{j} \cdot q_{k+1} - ggml_vec_dot_f32(nx, &lm_alpha[j[0]], 0, &lm_s[j[0]*nx], 0, d, 0, 1); - lm_alpha[j[0]] /= lm_ys[j[0]]; - // q_{i} = q_{i+1} - \alpha_{i} y_{i} - ggml_vec_mad_f32(nx, d, &lm_y[j[0]*nx], -lm_alpha[j[0]]); - } - - ggml_vec_scale_f32(nx, d, ys/yy); - - for (int i = 0; i < bound; ++i) { - // \beta_{j} = \rho_{j} y^t_{j} \cdot \gamma_{i} - ggml_vec_dot_f32(nx, &beta, 0, &lm_y[j[0]*nx], 0, d, 0, 1); - beta /= lm_ys[j[0]]; - // \gamma_{i+1} = \gamma_{i} + (\alpha_{j} - \beta_{j}) s_{j} - ggml_vec_mad_f32(nx, d, &lm_s[j[0]*nx], lm_alpha[j[0]] - beta); - j[0] = (j[0] + 1)%m; - } - - step[0] = 1.0; - } - - GGML_ASSERT(false && "lbfgs failed"); - - return GGML_OPT_RESULT_DID_NOT_CONVERGE; -} - -struct ggml_opt_params ggml_opt_default_params(enum ggml_opt_type type) { - struct ggml_opt_params result; - - switch (type) { - case GGML_OPT_TYPE_ADAM: - { - result = (struct ggml_opt_params) { - .type = GGML_OPT_TYPE_ADAM, - .graph_size = GGML_DEFAULT_GRAPH_SIZE, - .n_threads = 1, // FIXME: GGML_DEFAULT_N_THREADS ? - .past = 0, - .delta = 1e-5f, - - .max_no_improvement = 100, - - .print_forward_graph = true, - .print_backward_graph = true, - - .n_gradient_accumulation = 1, - - .adam = { - .n_iter = 10000, - .sched = 1.000f, - .decay = 0.0f, - .decay_min_ndim = 2, - .alpha = 0.001f, - .beta1 = 0.9f, - .beta2 = 0.999f, - .eps = 1e-8f, - .eps_f = 1e-5f, - .eps_g = 1e-3f, - .gclip = 0.0f, - }, - }; - } break; - case GGML_OPT_TYPE_LBFGS: - { - result = (struct ggml_opt_params) { - .type = GGML_OPT_TYPE_LBFGS, - .graph_size = GGML_DEFAULT_GRAPH_SIZE, - .n_threads = 1, - .past = 0, - .delta = 1e-5f, - - .max_no_improvement = 0, - - .print_forward_graph = true, - .print_backward_graph = true, - - .n_gradient_accumulation = 1, - - .lbfgs = { - .m = 6, - .n_iter = 100, - .max_linesearch = 20, - - .eps = 1e-5f, - .ftol = 1e-4f, - .wolfe = 0.9f, - .min_step = 1e-20f, - .max_step = 1e+20f, - - .linesearch = GGML_LINESEARCH_DEFAULT, - }, - }; - } break; - } - - return result; -} - -GGML_API void ggml_opt_init( - struct ggml_context * ctx, - struct ggml_opt_context * opt, - struct ggml_opt_params params, - int64_t nx) { - opt->ctx = ctx; - opt->params = params; - opt->iter = 0; - opt->nx = nx; - opt->just_initialized = true; - if (opt->ctx == NULL) { - struct ggml_init_params ctx_opt_params; - if (opt->params.type == GGML_OPT_TYPE_ADAM) { - ctx_opt_params.mem_size = GGML_MEM_ALIGN*3 + ggml_tensor_overhead()*3 + ggml_type_size(GGML_TYPE_F32)*nx*3; - if (opt->params.past > 0) { - ctx_opt_params.mem_size += GGML_MEM_ALIGN + ggml_tensor_overhead() + ggml_type_size(GGML_TYPE_F32)*opt->params.past; - } - } else if (opt->params.type == GGML_OPT_TYPE_LBFGS) { - ctx_opt_params.mem_size = GGML_MEM_ALIGN*9 + ggml_tensor_overhead()*9 + ggml_type_size(GGML_TYPE_F32)*(nx*5 + opt->params.lbfgs.m*2 + nx*opt->params.lbfgs.m*2); - if (opt->params.past > 0) { - ctx_opt_params.mem_size += GGML_MEM_ALIGN + ggml_tensor_overhead() + ggml_type_size(GGML_TYPE_F32)*opt->params.past; - } - } - ctx_opt_params.mem_buffer = NULL; - ctx_opt_params.no_alloc = false; - - opt->ctx = ggml_init(ctx_opt_params); - } - switch (opt->params.type) { - case GGML_OPT_TYPE_ADAM: - { - opt->adam.g = ggml_new_tensor_1d(opt->ctx, GGML_TYPE_F32, nx); - opt->adam.m = ggml_new_tensor_1d(opt->ctx, GGML_TYPE_F32, nx); - opt->adam.v = ggml_new_tensor_1d(opt->ctx, GGML_TYPE_F32, nx); - opt->adam.pf = params.past > 0 - ? ggml_new_tensor_1d(opt->ctx, GGML_TYPE_F32, params.past) - : NULL; - ggml_set_zero(opt->adam.m); - ggml_set_zero(opt->adam.v); - if (opt->adam.pf) { - ggml_set_zero(opt->adam.pf); - } - } break; - case GGML_OPT_TYPE_LBFGS: - { - opt->lbfgs.x = ggml_new_tensor_1d(opt->ctx, GGML_TYPE_F32, nx); - opt->lbfgs.xp = ggml_new_tensor_1d(opt->ctx, GGML_TYPE_F32, nx); - opt->lbfgs.g = ggml_new_tensor_1d(opt->ctx, GGML_TYPE_F32, nx); - opt->lbfgs.gp = ggml_new_tensor_1d(opt->ctx, GGML_TYPE_F32, nx); - opt->lbfgs.d = ggml_new_tensor_1d(opt->ctx, GGML_TYPE_F32, nx); - opt->lbfgs.pf = params.past > 0 - ? ggml_new_tensor_1d(opt->ctx, GGML_TYPE_F32, params.past) - : NULL; - opt->lbfgs.lmal = ggml_new_tensor_1d(opt->ctx, GGML_TYPE_F32, params.lbfgs.m); - opt->lbfgs.lmys = ggml_new_tensor_1d(opt->ctx, GGML_TYPE_F32, params.lbfgs.m); - opt->lbfgs.lms = ggml_new_tensor_2d(opt->ctx, GGML_TYPE_F32, nx, params.lbfgs.m); - opt->lbfgs.lmy = ggml_new_tensor_2d(opt->ctx, GGML_TYPE_F32, nx, params.lbfgs.m); - ggml_set_zero(opt->lbfgs.x); - ggml_set_zero(opt->lbfgs.xp); - ggml_set_zero(opt->lbfgs.g); - ggml_set_zero(opt->lbfgs.gp); - ggml_set_zero(opt->lbfgs.d); - if (opt->lbfgs.pf) { - ggml_set_zero(opt->lbfgs.pf); - } - ggml_set_zero(opt->lbfgs.lmal); - ggml_set_zero(opt->lbfgs.lmys); - ggml_set_zero(opt->lbfgs.lms); - ggml_set_zero(opt->lbfgs.lmy); - } break; - } -} - -enum ggml_opt_result ggml_opt( - struct ggml_context * ctx, - struct ggml_opt_params params, - struct ggml_tensor * f) { - bool free_ctx = false; - if (ctx == NULL) { - struct ggml_init_params params_ctx = { - .mem_size = 16*1024*1024, - .mem_buffer = NULL, - .no_alloc = false, - }; - - ctx = ggml_init(params_ctx); - if (ctx == NULL) { - return GGML_OPT_RESULT_NO_CONTEXT; - } - - free_ctx = true; - } - - enum ggml_opt_result result = GGML_OPT_RESULT_OK; - - struct ggml_opt_context * opt = (struct ggml_opt_context *) alloca(sizeof(struct ggml_opt_context)); - - ggml_opt_init(ctx, opt, params, 0); - result = ggml_opt_resume(ctx, opt, f); - - if (free_ctx) { - ggml_free(ctx); - } - - return result; -} - -enum ggml_opt_result ggml_opt_resume( - struct ggml_context * ctx, - struct ggml_opt_context * opt, - struct ggml_tensor * f) { - - // build forward + backward compute graphs - struct ggml_cgraph * gf = ggml_new_graph_custom(ctx, opt->params.graph_size, true); - ggml_build_forward_expand(gf, f); - - struct ggml_cgraph * gb = ggml_graph_dup(ctx, gf); - ggml_build_backward_expand(ctx, gf, gb, true); - - return ggml_opt_resume_g(ctx, opt, f, gf, gb, NULL, NULL); -} - -enum ggml_opt_result ggml_opt_resume_g( - struct ggml_context * ctx, - struct ggml_opt_context * opt, - struct ggml_tensor * f, - struct ggml_cgraph * gf, - struct ggml_cgraph * gb, - ggml_opt_callback callback, - void * callback_data) { - - // build forward + backward compute graphs - enum ggml_opt_result result = GGML_OPT_RESULT_OK; - - switch (opt->params.type) { - case GGML_OPT_TYPE_ADAM: - { - result = ggml_opt_adam(ctx, opt, opt->params, f, gf, gb, callback, callback_data); - } break; - case GGML_OPT_TYPE_LBFGS: - { - result = ggml_opt_lbfgs(ctx, opt, opt->params, f, gf, gb, callback, callback_data); - } break; - } - - if (opt->params.print_forward_graph) { - ggml_graph_print (gf); - ggml_graph_dump_dot(gf, NULL, "opt-forward.dot"); - } - - if (opt->params.print_backward_graph) { - ggml_graph_print (gb); - ggml_graph_dump_dot(gb, gf, "opt-backward.dot"); - } - - return result; -} - -//////////////////////////////////////////////////////////////////////////////// - -void ggml_set_input(struct ggml_tensor * tensor) { - tensor->flags |= GGML_TENSOR_FLAG_INPUT; -} - -void ggml_set_output(struct ggml_tensor * tensor) { - tensor->flags |= GGML_TENSOR_FLAG_OUTPUT; -} - -//////////////////////////////////////////////////////////////////////////////// - -void ggml_quantize_init(enum ggml_type type) { - ggml_critical_section_start(); - - switch (type) { - case GGML_TYPE_IQ2_XXS: - case GGML_TYPE_IQ2_XS: - case GGML_TYPE_IQ2_S: - case GGML_TYPE_IQ1_S: - case GGML_TYPE_IQ1_M: iq2xs_init_impl(type); break; - case GGML_TYPE_IQ3_XXS: iq3xs_init_impl(256); break; - case GGML_TYPE_IQ3_S: iq3xs_init_impl(512); break; - default: // nothing - break; - } - - ggml_critical_section_end(); -} - -void ggml_quantize_free(void) { - ggml_critical_section_start(); - - iq2xs_free_impl(GGML_TYPE_IQ2_XXS); - iq2xs_free_impl(GGML_TYPE_IQ2_XS); - iq2xs_free_impl(GGML_TYPE_IQ1_S); - iq3xs_free_impl(256); - - ggml_critical_section_end(); -} - -bool ggml_quantize_requires_imatrix(enum ggml_type type) { - return - type == GGML_TYPE_IQ2_XXS || - type == GGML_TYPE_IQ2_XS || - type == GGML_TYPE_IQ1_S;// || - //type == GGML_TYPE_IQ1_M; -} - -size_t ggml_quantize_chunk( - enum ggml_type type, - const float * src, - void * dst, - int64_t start, - int64_t nrows, - int64_t n_per_row, - const float * imatrix) { - const int64_t n = (int64_t) nrows * n_per_row; - - if (ggml_quantize_requires_imatrix(type)) { - GGML_ASSERT(imatrix != NULL); - } - - GGML_ASSERT(start % type_traits[type].blck_size == 0); - GGML_ASSERT(start % n_per_row == 0); - - ggml_quantize_init(type); // this is noop if already initialized - - const size_t start_row = start / n_per_row; - const size_t row_size = ggml_row_size(type, n_per_row); - - size_t result = 0; - - switch (type) { - case GGML_TYPE_Q4_0: result = quantize_q4_0(src + start, (char *) dst + start_row * row_size, nrows, n_per_row, imatrix); break; - case GGML_TYPE_Q4_1: result = quantize_q4_1(src + start, (char *) dst + start_row * row_size, nrows, n_per_row, imatrix); break; - case GGML_TYPE_Q5_0: result = quantize_q5_0(src + start, (char *) dst + start_row * row_size, nrows, n_per_row, imatrix); break; - case GGML_TYPE_Q5_1: result = quantize_q5_1(src + start, (char *) dst + start_row * row_size, nrows, n_per_row, imatrix); break; - case GGML_TYPE_Q8_0: result = quantize_q8_0(src + start, (char *) dst + start_row * row_size, nrows, n_per_row, imatrix); break; - case GGML_TYPE_Q2_K: result = quantize_q2_K(src + start, (char *) dst + start_row * row_size, nrows, n_per_row, imatrix); break; - case GGML_TYPE_Q3_K: result = quantize_q3_K(src + start, (char *) dst + start_row * row_size, nrows, n_per_row, imatrix); break; - case GGML_TYPE_Q4_K: result = quantize_q4_K(src + start, (char *) dst + start_row * row_size, nrows, n_per_row, imatrix); break; - case GGML_TYPE_Q5_K: result = quantize_q5_K(src + start, (char *) dst + start_row * row_size, nrows, n_per_row, imatrix); break; - case GGML_TYPE_Q6_K: result = quantize_q6_K(src + start, (char *) dst + start_row * row_size, nrows, n_per_row, imatrix); break; - case GGML_TYPE_IQ2_XXS: result = quantize_iq2_xxs(src + start, (char *) dst + start_row * row_size, nrows, n_per_row, imatrix); break; - case GGML_TYPE_IQ2_XS: result = quantize_iq2_xs (src + start, (char *) dst + start_row * row_size, nrows, n_per_row, imatrix); break; - case GGML_TYPE_IQ3_XXS: result = quantize_iq3_xxs(src + start, (char *) dst + start_row * row_size, nrows, n_per_row, imatrix); break; - case GGML_TYPE_IQ3_S: result = quantize_iq3_s (src + start, (char *) dst + start_row * row_size, nrows, n_per_row, imatrix); break; - case GGML_TYPE_IQ2_S: result = quantize_iq2_s (src + start, (char *) dst + start_row * row_size, nrows, n_per_row, imatrix); break; - case GGML_TYPE_IQ1_S: result = quantize_iq1_s (src + start, (char *) dst + start_row * row_size, nrows, n_per_row, imatrix); break; - case GGML_TYPE_IQ1_M: result = quantize_iq1_m (src + start, (char *) dst + start_row * row_size, nrows, n_per_row, imatrix); break; - case GGML_TYPE_IQ4_NL: result = quantize_iq4_nl (src + start, (char *) dst + start_row * row_size, nrows, n_per_row, imatrix); break; -#if QK_K == 64 - case GGML_TYPE_IQ4_XS: result = quantize_iq4_nl (src + start, (char *) dst + start_row * row_size, nrows, n_per_row, imatrix); break; -#else - case GGML_TYPE_IQ4_XS: result = quantize_iq4_xs (src + start, (char *) dst + start_row * row_size, nrows, n_per_row, imatrix); break; -#endif - case GGML_TYPE_F16: - { - size_t elemsize = sizeof(ggml_fp16_t); - ggml_fp32_to_fp16_row(src + start, (ggml_fp16_t *)dst + start, n); - result = n * elemsize; - } break; - case GGML_TYPE_F32: - { - size_t elemsize = sizeof(float); - result = n * elemsize; - memcpy((uint8_t *)dst + start * elemsize, src + start, result); - } break; - default: - assert(false); - } - - GGML_ASSERT(result == nrows * row_size); - - return result; -} - -//////////////////////////////////////////////////////////////////////////////// - -struct gguf_str { - uint64_t n; // GGUFv2 - char * data; -}; - -static const size_t GGUF_TYPE_SIZE[GGUF_TYPE_COUNT] = { - [GGUF_TYPE_UINT8] = sizeof(uint8_t), - [GGUF_TYPE_INT8] = sizeof(int8_t), - [GGUF_TYPE_UINT16] = sizeof(uint16_t), - [GGUF_TYPE_INT16] = sizeof(int16_t), - [GGUF_TYPE_UINT32] = sizeof(uint32_t), - [GGUF_TYPE_INT32] = sizeof(int32_t), - [GGUF_TYPE_FLOAT32] = sizeof(float), - [GGUF_TYPE_BOOL] = sizeof(bool), - [GGUF_TYPE_STRING] = sizeof(struct gguf_str), - [GGUF_TYPE_UINT64] = sizeof(uint64_t), - [GGUF_TYPE_INT64] = sizeof(int64_t), - [GGUF_TYPE_FLOAT64] = sizeof(double), - [GGUF_TYPE_ARRAY] = 0, // undefined -}; -static_assert(GGUF_TYPE_COUNT == 13, "GGUF_TYPE_COUNT != 13"); - -static const char * GGUF_TYPE_NAME[GGUF_TYPE_COUNT] = { - [GGUF_TYPE_UINT8] = "u8", - [GGUF_TYPE_INT8] = "i8", - [GGUF_TYPE_UINT16] = "u16", - [GGUF_TYPE_INT16] = "i16", - [GGUF_TYPE_UINT32] = "u32", - [GGUF_TYPE_INT32] = "i32", - [GGUF_TYPE_FLOAT32] = "f32", - [GGUF_TYPE_BOOL] = "bool", - [GGUF_TYPE_STRING] = "str", - [GGUF_TYPE_ARRAY] = "arr", - [GGUF_TYPE_UINT64] = "u64", - [GGUF_TYPE_INT64] = "i64", - [GGUF_TYPE_FLOAT64] = "f64", -}; -static_assert(GGUF_TYPE_COUNT == 13, "GGUF_TYPE_COUNT != 13"); - -union gguf_value { - uint8_t uint8; - int8_t int8; - uint16_t uint16; - int16_t int16; - uint32_t uint32; - int32_t int32; - float float32; - uint64_t uint64; - int64_t int64; - double float64; - bool bool_; - - struct gguf_str str; - - struct { - enum gguf_type type; - - uint64_t n; // GGUFv2 - void * data; - } arr; -}; - -struct gguf_kv { - struct gguf_str key; - - enum gguf_type type; - union gguf_value value; -}; - -struct gguf_header { - char magic[4]; - - uint32_t version; - uint64_t n_tensors; // GGUFv2 - uint64_t n_kv; // GGUFv2 -}; - -struct gguf_tensor_info { - struct gguf_str name; - - uint32_t n_dims; - uint64_t ne[GGML_MAX_DIMS]; - - enum ggml_type type; - - uint64_t offset; // offset from start of `data`, must be a multiple of `ALIGNMENT` - - // for writing API - const void * data; - size_t size; -}; - -struct gguf_context { - struct gguf_header header; - - struct gguf_kv * kv; - struct gguf_tensor_info * infos; - - size_t alignment; - size_t offset; // offset of `data` from beginning of file - size_t size; // size of `data` in bytes - - //uint8_t * padding; - void * data; -}; - -static size_t gguf_type_size(enum gguf_type type) { - GGML_ASSERT(0 <= type && type < GGUF_TYPE_COUNT); - return GGUF_TYPE_SIZE[type]; -} - -static void gguf_tensor_info_sanitize(struct gguf_tensor_info * info) { - GGML_ASSERT(info->n_dims <= GGML_MAX_DIMS); - GGML_ASSERT(0 <= info->type && info->type < GGML_TYPE_COUNT); - - for (uint32_t i = 0; i < info->n_dims; ++i) { - GGML_ASSERT(info->ne[i] > 0); - } - - // prevent overflow for total number of elements - GGML_ASSERT(INT64_MAX/info->ne[1] > info->ne[0]); - GGML_ASSERT(INT64_MAX/info->ne[2] > info->ne[0]*info->ne[1]); - GGML_ASSERT(INT64_MAX/info->ne[3] > info->ne[0]*info->ne[1]*info->ne[2]); -} - -static bool gguf_fread_el(FILE * file, void * dst, size_t size, size_t * offset) { - const size_t n = fread(dst, 1, size, file); - *offset += n; - return n == size; -} - -static bool gguf_fread_str(FILE * file, struct gguf_str * p, size_t * offset) { - p->n = 0; - p->data = NULL; - - bool ok = true; - - ok = ok && gguf_fread_el(file, &p->n, sizeof(p->n), offset); - - // early exit if string length is invalid, prevents from integer overflow - if (p->n == SIZE_MAX) { - fprintf(stderr, "%s: invalid string length (%" PRIu64 ")\n", __func__, p->n); - return false; - } - - p->data = GGML_CALLOC(p->n + 1, 1); - - ok = ok && gguf_fread_el(file, p->data, p->n, offset); - - return ok; -} - -static void gguf_free_kv(struct gguf_kv * kv) { - if (kv->key.data) { - GGML_FREE(kv->key.data); - } - - if (kv->type == GGUF_TYPE_STRING) { - if (kv->value.str.data) { - GGML_FREE(kv->value.str.data); - } - } - - if (kv->type == GGUF_TYPE_ARRAY) { - if (kv->value.arr.data) { - if (kv->value.arr.type == GGUF_TYPE_STRING) { - for (uint64_t j = 0; j < kv->value.arr.n; ++j) { - struct gguf_str * str = &((struct gguf_str *) kv->value.arr.data)[j]; - if (str->data) { - GGML_FREE(str->data); - } - } - } - GGML_FREE(kv->value.arr.data); - } - } -} - -struct gguf_context * gguf_init_empty(void) { - struct gguf_context * ctx = GGML_CALLOC(1, sizeof(struct gguf_context)); - - memcpy(ctx->header.magic, GGUF_MAGIC, sizeof(ctx->header.magic)); - ctx->header.version = GGUF_VERSION; - ctx->header.n_tensors = 0; - ctx->header.n_kv = 0; - - ctx->kv = NULL; - ctx->infos = NULL; - - ctx->alignment = GGUF_DEFAULT_ALIGNMENT; - ctx->offset = 0; - ctx->size = 0; - - ctx->data = NULL; - - return ctx; -} - -struct gguf_context * gguf_init_from_file(const char * fname, struct gguf_init_params params) { - FILE * file = ggml_fopen(fname, "rb"); - if (!file) { - return NULL; - } - - // offset from start of file - size_t offset = 0; - - char magic[4]; - - // check the magic before making allocations - { - gguf_fread_el(file, &magic, sizeof(magic), &offset); - - for (uint32_t i = 0; i < sizeof(magic); i++) { - if (magic[i] != GGUF_MAGIC[i]) { - fprintf(stderr, "%s: invalid magic characters '%c%c%c%c'\n", __func__, magic[0], magic[1], magic[2], magic[3]); - fclose(file); - return NULL; - } - } - } - - bool ok = true; - - struct gguf_context * ctx = GGML_CALLOC(1, sizeof(struct gguf_context)); - - // read the header - { - strncpy(ctx->header.magic, magic, 4); - - ctx->kv = NULL; - ctx->infos = NULL; - ctx->data = NULL; - - ok = ok && gguf_fread_el(file, &ctx->header.version, sizeof(ctx->header.version), &offset); - ok = ok && gguf_fread_el(file, &ctx->header.n_tensors, sizeof(ctx->header.n_tensors), &offset); - ok = ok && gguf_fread_el(file, &ctx->header.n_kv, sizeof(ctx->header.n_kv), &offset); - - if (ctx->header.version == 1) { - fprintf(stderr, "%s: GGUFv1 is no longer supported. please use a more up-to-date version\n", __func__); - fclose(file); - gguf_free(ctx); - return NULL; - } - - // sanity-checks to prevent from integer/buffer overflows - - ok = ok && (ctx->header.n_tensors < (SIZE_MAX/2)/sizeof(struct gguf_tensor_info)); - ok = ok && (ctx->header.n_tensors < (SIZE_MAX/2)/ggml_tensor_overhead()); - ok = ok && (ctx->header.n_kv < (SIZE_MAX/2)/sizeof(struct gguf_kv)); - - if (!ok) { - fprintf(stderr, "%s: failed to read header\n", __func__); - fclose(file); - gguf_free(ctx); - return NULL; - } - } - - // read the kv pairs - { - const uint64_t n_kv = ctx->header.n_kv; - - // header.n_kv will hold the actual value of pairs that were successfully read in the loop below - ctx->header.n_kv = 0; - ctx->kv = GGML_CALLOC(n_kv, sizeof(struct gguf_kv)); - - for (uint64_t i = 0; i < n_kv; ++i) { - struct gguf_kv * kv = &ctx->kv[i]; - - //fprintf(stderr, "%s: reading kv %d\n", __func__, i); - - ok = ok && gguf_fread_str(file, &kv->key, &offset); - ok = ok && gguf_fread_el (file, &kv->type, sizeof(kv->type), &offset); - - //fprintf(stderr, "%s: reading kv with key %s\n", __func__, kv->key.data); - - switch (kv->type) { - case GGUF_TYPE_UINT8: ok = ok && gguf_fread_el (file, &kv->value.uint8, sizeof(kv->value.uint8), &offset); break; - case GGUF_TYPE_INT8: ok = ok && gguf_fread_el (file, &kv->value.int8, sizeof(kv->value.int8), &offset); break; - case GGUF_TYPE_UINT16: ok = ok && gguf_fread_el (file, &kv->value.uint16, sizeof(kv->value.uint16), &offset); break; - case GGUF_TYPE_INT16: ok = ok && gguf_fread_el (file, &kv->value.int16, sizeof(kv->value.int16), &offset); break; - case GGUF_TYPE_UINT32: ok = ok && gguf_fread_el (file, &kv->value.uint32, sizeof(kv->value.uint32), &offset); break; - case GGUF_TYPE_INT32: ok = ok && gguf_fread_el (file, &kv->value.int32, sizeof(kv->value.int32), &offset); break; - case GGUF_TYPE_FLOAT32: ok = ok && gguf_fread_el (file, &kv->value.float32, sizeof(kv->value.float32), &offset); break; - case GGUF_TYPE_UINT64: ok = ok && gguf_fread_el (file, &kv->value.uint64, sizeof(kv->value.uint64), &offset); break; - case GGUF_TYPE_INT64: ok = ok && gguf_fread_el (file, &kv->value.int64, sizeof(kv->value.int64), &offset); break; - case GGUF_TYPE_FLOAT64: ok = ok && gguf_fread_el (file, &kv->value.float64, sizeof(kv->value.float64), &offset); break; - case GGUF_TYPE_BOOL: ok = ok && gguf_fread_el (file, &kv->value.bool_, sizeof(kv->value.bool_), &offset); break; - case GGUF_TYPE_STRING: ok = ok && gguf_fread_str(file, &kv->value.str, &offset); break; - case GGUF_TYPE_ARRAY: - { - ok = ok && gguf_fread_el(file, &kv->value.arr.type, sizeof(kv->value.arr.type), &offset); - ok = ok && gguf_fread_el(file, &kv->value.arr.n, sizeof(kv->value.arr.n), &offset); - - switch (kv->value.arr.type) { - case GGUF_TYPE_UINT8: - case GGUF_TYPE_INT8: - case GGUF_TYPE_UINT16: - case GGUF_TYPE_INT16: - case GGUF_TYPE_UINT32: - case GGUF_TYPE_INT32: - case GGUF_TYPE_FLOAT32: - case GGUF_TYPE_UINT64: - case GGUF_TYPE_INT64: - case GGUF_TYPE_FLOAT64: - case GGUF_TYPE_BOOL: - { - // prevent from integer overflow in the malloc below - if (kv->value.arr.n >= SIZE_MAX/gguf_type_size(kv->value.arr.type)) { - fprintf(stderr, "%s: array size is too large (%" PRIu64 ")\n", __func__, kv->value.arr.n); - fclose(file); - gguf_free(ctx); - return NULL; - } - - kv->value.arr.data = GGML_CALLOC(kv->value.arr.n, gguf_type_size(kv->value.arr.type)); - - ok = ok && gguf_fread_el(file, kv->value.arr.data, kv->value.arr.n * gguf_type_size(kv->value.arr.type), &offset); - } break; - case GGUF_TYPE_STRING: - { - // prevent from integer overflow in the malloc below - if (kv->value.arr.n >= SIZE_MAX/sizeof(struct gguf_str)) { - fprintf(stderr, "%s: array size is too large (%" PRIu64 ")\n", __func__, kv->value.arr.n); - fclose(file); - gguf_free(ctx); - return NULL; - } - - kv->value.arr.data = GGML_CALLOC(kv->value.arr.n, sizeof(struct gguf_str)); - - for (uint64_t j = 0; j < kv->value.arr.n; ++j) { - ok = ok && gguf_fread_str(file, &((struct gguf_str *) kv->value.arr.data)[j], &offset); - } - } break; - case GGUF_TYPE_ARRAY: - default: GGML_ASSERT(false && "invalid type"); break; - } - } break; - default: GGML_ASSERT(false && "invalid type"); - } - - if (!ok) { - break; - } - - ctx->header.n_kv++; - } - - if (!ok) { - fprintf(stderr, "%s: failed to read key-value pairs\n", __func__); - fclose(file); - gguf_free(ctx); - return NULL; - } - } - - // read the tensor infos - { - ctx->infos = GGML_CALLOC(ctx->header.n_tensors, sizeof(struct gguf_tensor_info)); - - for (uint64_t i = 0; i < ctx->header.n_tensors; ++i) { - struct gguf_tensor_info * info = &ctx->infos[i]; - - for (int j = 0; j < GGML_MAX_DIMS; ++j) { - info->ne[j] = 1; - } - - ok = ok && gguf_fread_str(file, &info->name, &offset); - ok = ok && gguf_fread_el (file, &info->n_dims, sizeof(info->n_dims), &offset); - - ok = ok && (info->n_dims <= GGML_MAX_DIMS); - - for (uint32_t j = 0; j < info->n_dims; ++j) { - ok = ok && gguf_fread_el(file, &info->ne[j], sizeof(info->ne[j]), &offset); - } - - ok = ok && gguf_fread_el (file, &info->type, sizeof(info->type), &offset); - ok = ok && gguf_fread_el (file, &info->offset, sizeof(info->offset), &offset); - - // TODO: return an error instead of crashing with GGML_ASSERT - gguf_tensor_info_sanitize(info); - - // make sure there is no duplicated tensor names - for (uint64_t j = 0; j < i; ++j) { - if (strcmp(info->name.data, ctx->infos[j].name.data) == 0) { - fprintf(stderr, "%s: duplicated tensor name %s\n", __func__, info->name.data); - ok = false; - } - } - - if (!ok) { - fprintf(stderr, "%s: failed to read tensor info\n", __func__); - fclose(file); - gguf_free(ctx); - return NULL; - } - } - } - - ctx->alignment = GGUF_DEFAULT_ALIGNMENT; - - int alignment_idx = gguf_find_key(ctx, "general.alignment"); - if (alignment_idx != -1) { - ctx->alignment = gguf_get_val_u32(ctx, alignment_idx); - } - - // we require the data section to be aligned, so take into account any padding - { - const size_t offset_pad = offset % ctx->alignment; - - if (offset_pad != 0) { - offset += ctx->alignment - offset_pad; - fseek(file, offset, SEEK_SET); - } - } - - // store the current file offset - this is where the data section starts - ctx->offset = offset; - - // compute the total size of the data section, taking into account the alignment - { - ctx->size = 0; - for (uint64_t i = 0; i < ctx->header.n_tensors; ++i) { - struct gguf_tensor_info * info = &ctx->infos[i]; - - const int64_t ne = - (int64_t) info->ne[0] * - (int64_t) info->ne[1] * - (int64_t) info->ne[2] * - (int64_t) info->ne[3]; - - if (ne % ggml_blck_size(info->type) != 0) { - fprintf(stderr, "%s: tensor '%s' of type %d (%s) number of elements (%" PRId64 ") is not a multiple of block size (%d)\n", - __func__, info->name.data, (int)info->type, ggml_type_name(info->type), ne, ggml_blck_size(info->type)); - fclose(file); - gguf_free(ctx); - return NULL; - } - - const size_t size_cur = ggml_row_size(info->type, ne); - - ctx->size += GGML_PAD(size_cur, ctx->alignment); - } - } - - // load the tensor data only if requested - if (params.ctx != NULL) { - // if the provided gguf_context is no_alloc, then we create "empty" tensors and do not read the binary blob - // otherwise, we load the binary blob into the created ggml_context as well, and point the "data" members of - // the ggml_tensor structs to the appropriate locations in the binary blob - - // compute the exact size needed for the new ggml_context - const size_t mem_size = - params.no_alloc ? - (ctx->header.n_tensors )*ggml_tensor_overhead() : - (ctx->header.n_tensors + 1)*ggml_tensor_overhead() + ctx->size; - - struct ggml_init_params pdata = { - .mem_size = mem_size, - .mem_buffer = NULL, - .no_alloc = params.no_alloc, - }; - - *params.ctx = ggml_init(pdata); - - struct ggml_context * ctx_data = *params.ctx; - - struct ggml_tensor * data = NULL; - - if (!params.no_alloc) { - data = ggml_new_tensor_1d(ctx_data, GGML_TYPE_I8, ctx->size); - - ok = ok && data != NULL; - - // read the binary blob with the tensor data - ok = ok && gguf_fread_el(file, data->data, ctx->size, &offset); - - if (!ok) { - fprintf(stderr, "%s: failed to read tensor data\n", __func__); - fclose(file); - ggml_free(ctx_data); - gguf_free(ctx); - return NULL; - } - - ctx->data = data->data; - } - - ggml_set_no_alloc(ctx_data, true); - - // create the tensors - for (uint64_t i = 0; i < ctx->header.n_tensors; ++i) { - const int64_t ne[GGML_MAX_DIMS] = { - ctx->infos[i].ne[0], - ctx->infos[i].ne[1], - ctx->infos[i].ne[2], - ctx->infos[i].ne[3], - }; - - struct ggml_tensor * cur = ggml_new_tensor(ctx_data, ctx->infos[i].type, ctx->infos[i].n_dims, ne); - - ok = ok && cur != NULL; - - if (!ok) { - break; - } - - ggml_set_name(cur, ctx->infos[i].name.data); - - // point the data member to the appropriate location in the binary blob using the tensor infos - if (!params.no_alloc) { - //cur->data = (char *) data->data + ctx->infos[i].offset - ctx->offset; // offset from start of file - cur->data = (char *) data->data + ctx->infos[i].offset; // offset from data - } - } - - if (!ok) { - fprintf(stderr, "%s: failed to read the tensor data\n", __func__); - fclose(file); - ggml_free(ctx_data); - gguf_free(ctx); - return NULL; - } - - ggml_set_no_alloc(ctx_data, params.no_alloc); - } - - fclose(file); - - return ctx; -} - -void gguf_free(struct gguf_context * ctx) { - if (ctx == NULL) { - return; - } - - if (ctx->kv) { - // free string memory - not great.. - for (uint64_t i = 0; i < ctx->header.n_kv; ++i) { - gguf_free_kv(&ctx->kv[i]); - } - - GGML_FREE(ctx->kv); - } - - if (ctx->infos) { - for (uint64_t i = 0; i < ctx->header.n_tensors; ++i) { - struct gguf_tensor_info * info = &ctx->infos[i]; - - if (info->name.data) { - GGML_FREE(info->name.data); - } - } - - GGML_FREE(ctx->infos); - } - - GGML_FREE(ctx); -} - -const char * gguf_type_name(enum gguf_type type) { - return GGUF_TYPE_NAME[type]; -} - -int gguf_get_version(const struct gguf_context * ctx) { - return ctx->header.version; -} - -size_t gguf_get_alignment(const struct gguf_context * ctx) { - return ctx->alignment; -} - -size_t gguf_get_data_offset(const struct gguf_context * ctx) { - return ctx->offset; -} - -void * gguf_get_data(const struct gguf_context * ctx) { - return ctx->data; -} - -int gguf_get_n_kv(const struct gguf_context * ctx) { - return ctx->header.n_kv; -} - -int gguf_find_key(const struct gguf_context * ctx, const char * key) { - // return -1 if key not found - int keyfound = -1; - - const int n_kv = gguf_get_n_kv(ctx); - - for (int i = 0; i < n_kv; ++i) { - if (strcmp(key, gguf_get_key(ctx, i)) == 0) { - keyfound = i; - break; - } - } - - return keyfound; -} - -const char * gguf_get_key(const struct gguf_context * ctx, int key_id) { - GGML_ASSERT(key_id >= 0 && key_id < gguf_get_n_kv(ctx)); - return ctx->kv[key_id].key.data; -} - -enum gguf_type gguf_get_kv_type(const struct gguf_context * ctx, int key_id) { - GGML_ASSERT(key_id >= 0 && key_id < gguf_get_n_kv(ctx)); - return ctx->kv[key_id].type; -} - -enum gguf_type gguf_get_arr_type(const struct gguf_context * ctx, int key_id) { - GGML_ASSERT(key_id >= 0 && key_id < gguf_get_n_kv(ctx)); - GGML_ASSERT(ctx->kv[key_id].type == GGUF_TYPE_ARRAY); - return ctx->kv[key_id].value.arr.type; -} - -const void * gguf_get_arr_data(const struct gguf_context * ctx, int key_id) { - GGML_ASSERT(key_id >= 0 && key_id < gguf_get_n_kv(ctx)); - GGML_ASSERT(ctx->kv[key_id].type == GGUF_TYPE_ARRAY); - return ctx->kv[key_id].value.arr.data; -} - -const char * gguf_get_arr_str(const struct gguf_context * ctx, int key_id, int i) { - GGML_ASSERT(key_id >= 0 && key_id < gguf_get_n_kv(ctx)); - GGML_ASSERT(ctx->kv[key_id].type == GGUF_TYPE_ARRAY); - struct gguf_kv * kv = &ctx->kv[key_id]; - struct gguf_str * str = &((struct gguf_str *) kv->value.arr.data)[i]; - return str->data; -} - -int gguf_get_arr_n(const struct gguf_context * ctx, int key_id) { - GGML_ASSERT(key_id >= 0 && key_id < gguf_get_n_kv(ctx)); - GGML_ASSERT(ctx->kv[key_id].type == GGUF_TYPE_ARRAY); - return ctx->kv[key_id].value.arr.n; -} - -uint8_t gguf_get_val_u8(const struct gguf_context * ctx, int key_id) { - GGML_ASSERT(key_id >= 0 && key_id < gguf_get_n_kv(ctx)); - GGML_ASSERT(ctx->kv[key_id].type == GGUF_TYPE_UINT8); - return ctx->kv[key_id].value.uint8; -} - -int8_t gguf_get_val_i8(const struct gguf_context * ctx, int key_id) { - GGML_ASSERT(key_id >= 0 && key_id < gguf_get_n_kv(ctx)); - GGML_ASSERT(ctx->kv[key_id].type == GGUF_TYPE_INT8); - return ctx->kv[key_id].value.int8; -} - -uint16_t gguf_get_val_u16(const struct gguf_context * ctx, int key_id) { - GGML_ASSERT(key_id >= 0 && key_id < gguf_get_n_kv(ctx)); - GGML_ASSERT(ctx->kv[key_id].type == GGUF_TYPE_UINT16); - return ctx->kv[key_id].value.uint16; -} - -int16_t gguf_get_val_i16(const struct gguf_context * ctx, int key_id) { - GGML_ASSERT(key_id >= 0 && key_id < gguf_get_n_kv(ctx)); - GGML_ASSERT(ctx->kv[key_id].type == GGUF_TYPE_INT16); - return ctx->kv[key_id].value.int16; -} - -uint32_t gguf_get_val_u32(const struct gguf_context * ctx, int key_id) { - GGML_ASSERT(key_id >= 0 && key_id < gguf_get_n_kv(ctx)); - GGML_ASSERT(ctx->kv[key_id].type == GGUF_TYPE_UINT32); - return ctx->kv[key_id].value.uint32; -} - -int32_t gguf_get_val_i32(const struct gguf_context * ctx, int key_id) { - GGML_ASSERT(key_id >= 0 && key_id < gguf_get_n_kv(ctx)); - GGML_ASSERT(ctx->kv[key_id].type == GGUF_TYPE_INT32); - return ctx->kv[key_id].value.int32; -} - -float gguf_get_val_f32(const struct gguf_context * ctx, int key_id) { - GGML_ASSERT(key_id >= 0 && key_id < gguf_get_n_kv(ctx)); - GGML_ASSERT(ctx->kv[key_id].type == GGUF_TYPE_FLOAT32); - return ctx->kv[key_id].value.float32; -} - -uint64_t gguf_get_val_u64(const struct gguf_context * ctx, int key_id) { - GGML_ASSERT(key_id >= 0 && key_id < gguf_get_n_kv(ctx)); - GGML_ASSERT(ctx->kv[key_id].type == GGUF_TYPE_UINT64); - return ctx->kv[key_id].value.uint64; -} - -int64_t gguf_get_val_i64(const struct gguf_context * ctx, int key_id) { - GGML_ASSERT(key_id >= 0 && key_id < gguf_get_n_kv(ctx)); - GGML_ASSERT(ctx->kv[key_id].type == GGUF_TYPE_INT64); - return ctx->kv[key_id].value.int64; -} - -double gguf_get_val_f64(const struct gguf_context * ctx, int key_id) { - GGML_ASSERT(key_id >= 0 && key_id < gguf_get_n_kv(ctx)); - GGML_ASSERT(ctx->kv[key_id].type == GGUF_TYPE_FLOAT64); - return ctx->kv[key_id].value.float64; -} - -bool gguf_get_val_bool(const struct gguf_context * ctx, int key_id) { - GGML_ASSERT(key_id >= 0 && key_id < gguf_get_n_kv(ctx)); - GGML_ASSERT(ctx->kv[key_id].type == GGUF_TYPE_BOOL); - return ctx->kv[key_id].value.bool_; -} - -const char * gguf_get_val_str(const struct gguf_context * ctx, int key_id) { - GGML_ASSERT(key_id >= 0 && key_id < gguf_get_n_kv(ctx)); - GGML_ASSERT(ctx->kv[key_id].type == GGUF_TYPE_STRING); - return ctx->kv[key_id].value.str.data; -} - -const void * gguf_get_val_data(const struct gguf_context * ctx, int key_id) { - GGML_ASSERT(key_id >= 0 && key_id < gguf_get_n_kv(ctx)); - GGML_ASSERT(ctx->kv[key_id].type != GGUF_TYPE_ARRAY); - GGML_ASSERT(ctx->kv[key_id].type != GGUF_TYPE_STRING); - return &ctx->kv[key_id].value; -} - -int gguf_get_n_tensors(const struct gguf_context * ctx) { - return ctx->header.n_tensors; -} - -int gguf_find_tensor(const struct gguf_context * ctx, const char * name) { - // return -1 if tensor not found - int tensorfound = -1; - - const int n_tensors = gguf_get_n_tensors(ctx); - - for (int i = 0; i < n_tensors; ++i) { - if (strcmp(name, gguf_get_tensor_name(ctx, i)) == 0) { - tensorfound = i; - break; - } - } - - return tensorfound; -} - -size_t gguf_get_tensor_offset(const struct gguf_context * ctx, int i) { - return ctx->infos[i].offset; -} - -char * gguf_get_tensor_name(const struct gguf_context * ctx, int i) { - return ctx->infos[i].name.data; -} - -enum ggml_type gguf_get_tensor_type(const struct gguf_context * ctx, int i) { - return ctx->infos[i].type; -} - -// returns the index -static int gguf_get_or_add_key(struct gguf_context * ctx, const char * key) { - const int idx = gguf_find_key(ctx, key); - if (idx >= 0) { - return idx; - } - - const int n_kv = gguf_get_n_kv(ctx); - - ctx->kv = realloc(ctx->kv, (n_kv + 1) * sizeof(struct gguf_kv)); - ctx->kv[n_kv].key.n = strlen(key); - ctx->kv[n_kv].key.data = strdup(key); - ctx->header.n_kv++; - - return n_kv; -} - -void gguf_remove_key(struct gguf_context * ctx, const char * key) { - const int idx = gguf_find_key(ctx, key); - if (idx >= 0) { - const int n_kv = gguf_get_n_kv(ctx); - gguf_free_kv(&ctx->kv[idx]); - for (int i = idx; i < n_kv-1; ++i) { - ctx->kv[i] = ctx->kv[i+1]; - } - ctx->kv = realloc(ctx->kv, (n_kv - 1) * sizeof(struct gguf_kv)); - ctx->header.n_kv--; - } -} - -void gguf_set_val_u8(struct gguf_context * ctx, const char * key, uint8_t val) { - const int idx = gguf_get_or_add_key(ctx, key); - - ctx->kv[idx].type = GGUF_TYPE_UINT8; - ctx->kv[idx].value.uint8 = val; -} - -void gguf_set_val_i8(struct gguf_context * ctx, const char * key, int8_t val) { - const int idx = gguf_get_or_add_key(ctx, key); - - ctx->kv[idx].type = GGUF_TYPE_INT8; - ctx->kv[idx].value.int8 = val; -} - -void gguf_set_val_u16(struct gguf_context * ctx, const char * key, uint16_t val) { - const int idx = gguf_get_or_add_key(ctx, key); - - ctx->kv[idx].type = GGUF_TYPE_UINT16; - ctx->kv[idx].value.uint16 = val; -} - -void gguf_set_val_i16(struct gguf_context * ctx, const char * key, int16_t val) { - const int idx = gguf_get_or_add_key(ctx, key); - - ctx->kv[idx].type = GGUF_TYPE_INT16; - ctx->kv[idx].value.int16 = val; -} - -void gguf_set_val_u32(struct gguf_context * ctx, const char * key, uint32_t val) { - const int idx = gguf_get_or_add_key(ctx, key); - - ctx->kv[idx].type = GGUF_TYPE_UINT32; - ctx->kv[idx].value.uint32 = val; -} - -void gguf_set_val_i32(struct gguf_context * ctx, const char * key, int32_t val) { - const int idx = gguf_get_or_add_key(ctx, key); - - ctx->kv[idx].type = GGUF_TYPE_INT32; - ctx->kv[idx].value.int32 = val; -} - -void gguf_set_val_f32(struct gguf_context * ctx, const char * key, float val) { - const int idx = gguf_get_or_add_key(ctx, key); - - ctx->kv[idx].type = GGUF_TYPE_FLOAT32; - ctx->kv[idx].value.float32 = val; -} - -void gguf_set_val_u64(struct gguf_context * ctx, const char * key, uint64_t val) { - const int idx = gguf_get_or_add_key(ctx, key); - - ctx->kv[idx].type = GGUF_TYPE_UINT64; - ctx->kv[idx].value.uint64 = val; -} - -void gguf_set_val_i64(struct gguf_context * ctx, const char * key, int64_t val) { - const int idx = gguf_get_or_add_key(ctx, key); - - ctx->kv[idx].type = GGUF_TYPE_INT64; - ctx->kv[idx].value.int64 = val; -} - -void gguf_set_val_f64(struct gguf_context * ctx, const char * key, double val) { - const int idx = gguf_get_or_add_key(ctx, key); - - ctx->kv[idx].type = GGUF_TYPE_FLOAT64; - ctx->kv[idx].value.float64 = val; -} - -void gguf_set_val_bool(struct gguf_context * ctx, const char * key, bool val) { - const int idx = gguf_get_or_add_key(ctx, key); - - ctx->kv[idx].type = GGUF_TYPE_BOOL; - ctx->kv[idx].value.bool_ = val; -} - -void gguf_set_val_str(struct gguf_context * ctx, const char * key, const char * val) { - const int idx = gguf_get_or_add_key(ctx, key); - - ctx->kv[idx].type = GGUF_TYPE_STRING; - ctx->kv[idx].value.str.n = strlen(val); - ctx->kv[idx].value.str.data = strdup(val); -} - -void gguf_set_arr_data(struct gguf_context * ctx, const char * key, enum gguf_type type, const void * data, int n) { - const int idx = gguf_get_or_add_key(ctx, key); - - ctx->kv[idx].type = GGUF_TYPE_ARRAY; - ctx->kv[idx].value.arr.type = type; - ctx->kv[idx].value.arr.n = n; - ctx->kv[idx].value.arr.data = GGML_CALLOC(n, gguf_type_size(type)); - memcpy(ctx->kv[idx].value.arr.data, data, n*gguf_type_size(type)); -} - -void gguf_set_arr_str(struct gguf_context * ctx, const char * key, const char ** data, int n) { - const int idx = gguf_get_or_add_key(ctx, key); - - ctx->kv[idx].type = GGUF_TYPE_ARRAY; - ctx->kv[idx].value.arr.type = GGUF_TYPE_STRING; - ctx->kv[idx].value.arr.n = n; - ctx->kv[idx].value.arr.data = GGML_CALLOC(n, sizeof(struct gguf_str)); - for (int i = 0; i < n; i++) { - struct gguf_str * str = &((struct gguf_str *)ctx->kv[idx].value.arr.data)[i]; - str->n = strlen(data[i]); - str->data = strdup(data[i]); - } -} - -// set or add KV pairs from another context -void gguf_set_kv(struct gguf_context * ctx, struct gguf_context * src) { - for (uint32_t i = 0; i < src->header.n_kv; i++) { - switch (src->kv[i].type) { - case GGUF_TYPE_UINT8: gguf_set_val_u8 (ctx, src->kv[i].key.data, src->kv[i].value.uint8); break; - case GGUF_TYPE_INT8: gguf_set_val_i8 (ctx, src->kv[i].key.data, src->kv[i].value.int8); break; - case GGUF_TYPE_UINT16: gguf_set_val_u16 (ctx, src->kv[i].key.data, src->kv[i].value.uint16); break; - case GGUF_TYPE_INT16: gguf_set_val_i16 (ctx, src->kv[i].key.data, src->kv[i].value.int16); break; - case GGUF_TYPE_UINT32: gguf_set_val_u32 (ctx, src->kv[i].key.data, src->kv[i].value.uint32); break; - case GGUF_TYPE_INT32: gguf_set_val_i32 (ctx, src->kv[i].key.data, src->kv[i].value.int32); break; - case GGUF_TYPE_FLOAT32: gguf_set_val_f32 (ctx, src->kv[i].key.data, src->kv[i].value.float32); break; - case GGUF_TYPE_UINT64: gguf_set_val_u64 (ctx, src->kv[i].key.data, src->kv[i].value.uint64); break; - case GGUF_TYPE_INT64: gguf_set_val_i64 (ctx, src->kv[i].key.data, src->kv[i].value.int64); break; - case GGUF_TYPE_FLOAT64: gguf_set_val_f64 (ctx, src->kv[i].key.data, src->kv[i].value.float64); break; - case GGUF_TYPE_BOOL: gguf_set_val_bool(ctx, src->kv[i].key.data, src->kv[i].value.bool_); break; - case GGUF_TYPE_STRING: gguf_set_val_str (ctx, src->kv[i].key.data, src->kv[i].value.str.data); break; - case GGUF_TYPE_ARRAY: - { - if (src->kv[i].value.arr.type == GGUF_TYPE_STRING) { - const char ** data = GGML_CALLOC(src->kv[i].value.arr.n, sizeof(char *)); - for (uint32_t j = 0; j < src->kv[i].value.arr.n; j++) { - data[j] = ((struct gguf_str *)src->kv[i].value.arr.data)[j].data; - } - gguf_set_arr_str(ctx, src->kv[i].key.data, data, src->kv[i].value.arr.n); - GGML_FREE((void *)data); - } else if (src->kv[i].value.arr.type == GGUF_TYPE_ARRAY) { - GGML_ASSERT(false && "nested arrays not supported"); - } else { - gguf_set_arr_data(ctx, src->kv[i].key.data, src->kv[i].value.arr.type, src->kv[i].value.arr.data, src->kv[i].value.arr.n); - } - } break; - default: GGML_ASSERT(false && "invalid type"); break; - } - } -} - -void gguf_add_tensor( - struct gguf_context * ctx, - const struct ggml_tensor * tensor) { - if (gguf_find_tensor(ctx, tensor->name) != -1) { - GGML_ASSERT(false && "duplicated tensor name"); - } - - const int idx = ctx->header.n_tensors; - ctx->infos = realloc(ctx->infos, (idx + 1)*sizeof(struct gguf_tensor_info)); - - ctx->infos[idx].name.n = strlen(tensor->name); - ctx->infos[idx].name.data = strdup(tensor->name); - - for (int i = 0; i < GGML_MAX_DIMS; ++i) { - ctx->infos[idx].ne[i] = 1; - } - - ctx->infos[idx].n_dims = ggml_n_dims(tensor); - for (uint32_t i = 0; i < ctx->infos[idx].n_dims; i++) { - ctx->infos[idx].ne[i] = tensor->ne[i]; - } - - ctx->infos[idx].type = tensor->type; - ctx->infos[idx].offset = 0; - ctx->infos[idx].data = tensor->data; - ctx->infos[idx].size = ggml_nbytes(tensor); - - if (ctx->header.n_tensors > 0) { - ctx->infos[idx].offset = ctx->infos[idx - 1].offset + GGML_PAD(ctx->infos[idx - 1].size, ctx->alignment); - } - - ctx->header.n_tensors++; -} - -void gguf_set_tensor_type(struct gguf_context * ctx, const char * name, enum ggml_type type) { - const int idx = gguf_find_tensor(ctx, name); - if (idx < 0) { - GGML_ASSERT(false && "tensor not found"); - } - - ctx->infos[idx].type = type; -} - -void gguf_set_tensor_data(struct gguf_context * ctx, const char * name, const void * data, size_t size) { - const int idx = gguf_find_tensor(ctx, name); - if (idx < 0) { - GGML_ASSERT(false && "tensor not found"); - } - - ctx->infos[idx].data = data; - ctx->infos[idx].size = size; - - // update offsets - for (uint32_t i = idx + 1; i < ctx->header.n_tensors; ++i) { - ctx->infos[i].offset = ctx->infos[i - 1].offset + GGML_PAD(ctx->infos[i - 1].size, ctx->alignment); - } -} - -//static void gguf_fwrite_str(FILE * file, const struct gguf_str * val) { -// fwrite(&val->n, sizeof(val->n), 1, file); -// fwrite(val->data, sizeof(char), val->n, file); -//} -// -//static void gguf_fwrite_el(FILE * file, const void * val, size_t size) { -// fwrite(val, sizeof(char), size, file); -//} - -struct gguf_buf { - void * data; - size_t size; - size_t offset; -}; - -static struct gguf_buf gguf_buf_init(size_t size) { - struct gguf_buf buf = { - /*buf.data =*/ size == 0 ? NULL : GGML_CALLOC(1, size), - /*buf.size =*/ size, - /*buf.offset =*/ 0, - }; - - return buf; -} - -static void gguf_buf_free(struct gguf_buf buf) { - if (buf.data) { - GGML_FREE(buf.data); - } -} - -static void gguf_buf_grow(struct gguf_buf * buf, size_t size) { - if (buf->offset + size > buf->size) { - buf->size = 1.5*(buf->offset + size); - if (buf->data) { - buf->data = realloc(buf->data, buf->size); - } - } -} - -static void gguf_bwrite_str(struct gguf_buf * buf, const struct gguf_str * val) { - gguf_buf_grow(buf, sizeof(val->n) + val->n); - - if (buf->data) { - memcpy((char *) buf->data + buf->offset, &val->n, sizeof(val->n)); - } - buf->offset += sizeof(val->n); - - if (buf->data) { - memcpy((char *) buf->data + buf->offset, val->data, val->n); - } - buf->offset += val->n; -} - -static void gguf_bwrite_el(struct gguf_buf * buf, const void * val, size_t el_size) { - gguf_buf_grow(buf, el_size); - - if (buf->data) { - memcpy((char *) buf->data + buf->offset, val, el_size); - } - buf->offset += el_size; -} - -static void gguf_write_to_buf(const struct gguf_context * ctx, struct gguf_buf * buf, bool only_meta) { - // write header - gguf_bwrite_el(buf, &ctx->header.magic, sizeof(ctx->header.magic)); - gguf_bwrite_el(buf, &ctx->header.version, sizeof(ctx->header.version)); - gguf_bwrite_el(buf, &ctx->header.n_tensors, sizeof(ctx->header.n_tensors)); - gguf_bwrite_el(buf, &ctx->header.n_kv, sizeof(ctx->header.n_kv)); - - // write key-value pairs - for (uint32_t i = 0; i < ctx->header.n_kv; ++i) { - struct gguf_kv * kv = &ctx->kv[i]; - - gguf_bwrite_str(buf, &kv->key); - gguf_bwrite_el (buf, &kv->type, sizeof(kv->type)); - - switch (kv->type) { - case GGUF_TYPE_UINT8: gguf_bwrite_el( buf, &kv->value.uint8, sizeof(kv->value.uint8) ); break; - case GGUF_TYPE_INT8: gguf_bwrite_el (buf, &kv->value.int8, sizeof(kv->value.int8) ); break; - case GGUF_TYPE_UINT16: gguf_bwrite_el (buf, &kv->value.uint16, sizeof(kv->value.uint16) ); break; - case GGUF_TYPE_INT16: gguf_bwrite_el (buf, &kv->value.int16, sizeof(kv->value.int16) ); break; - case GGUF_TYPE_UINT32: gguf_bwrite_el (buf, &kv->value.uint32, sizeof(kv->value.uint32) ); break; - case GGUF_TYPE_INT32: gguf_bwrite_el (buf, &kv->value.int32, sizeof(kv->value.int32) ); break; - case GGUF_TYPE_FLOAT32: gguf_bwrite_el (buf, &kv->value.float32, sizeof(kv->value.float32)); break; - case GGUF_TYPE_UINT64: gguf_bwrite_el (buf, &kv->value.uint64, sizeof(kv->value.uint64) ); break; - case GGUF_TYPE_INT64: gguf_bwrite_el (buf, &kv->value.int64, sizeof(kv->value.int64) ); break; - case GGUF_TYPE_FLOAT64: gguf_bwrite_el (buf, &kv->value.float64, sizeof(kv->value.float64)); break; - case GGUF_TYPE_BOOL: gguf_bwrite_el (buf, &kv->value.bool_, sizeof(kv->value.bool_) ); break; - case GGUF_TYPE_STRING: gguf_bwrite_str(buf, &kv->value.str ); break; - case GGUF_TYPE_ARRAY: - { - gguf_bwrite_el(buf, &kv->value.arr.type, sizeof(kv->value.arr.type)); - gguf_bwrite_el(buf, &kv->value.arr.n, sizeof(kv->value.arr.n) ); - - switch (kv->value.arr.type) { - case GGUF_TYPE_UINT8: - case GGUF_TYPE_INT8: - case GGUF_TYPE_UINT16: - case GGUF_TYPE_INT16: - case GGUF_TYPE_UINT32: - case GGUF_TYPE_INT32: - case GGUF_TYPE_FLOAT32: - case GGUF_TYPE_UINT64: - case GGUF_TYPE_INT64: - case GGUF_TYPE_FLOAT64: - case GGUF_TYPE_BOOL: - { - gguf_bwrite_el(buf, kv->value.arr.data, kv->value.arr.n * gguf_type_size(kv->value.arr.type)); - } break; - case GGUF_TYPE_STRING: - { - for (uint32_t j = 0; j < kv->value.arr.n; ++j) { - gguf_bwrite_str(buf, &((struct gguf_str *) kv->value.arr.data)[j]); - } - } break; - case GGUF_TYPE_ARRAY: - default: GGML_ASSERT(false && "invalid type"); break; - } - } break; - default: GGML_ASSERT(false && "invalid type"); - } - } - - // write tensor infos - for (uint32_t i = 0; i < ctx->header.n_tensors; ++i) { - struct gguf_tensor_info * info = &ctx->infos[i]; - - gguf_bwrite_str(buf, &info->name); - gguf_bwrite_el (buf, &info->n_dims, sizeof(info->n_dims)); - for (uint32_t j = 0; j < info->n_dims; ++j) { - gguf_bwrite_el(buf, &info->ne[j], sizeof(info->ne[j])); - } - gguf_bwrite_el(buf, &info->type, sizeof(info->type)); - gguf_bwrite_el(buf, &info->offset, sizeof(info->offset)); - } - - // we require the data section to be aligned, so take into account any padding - { - const size_t offset = buf->offset; - const size_t offset_pad = GGML_PAD(offset, ctx->alignment); - - if (offset_pad != offset) { - uint8_t pad = 0; - for (size_t i = 0; i < offset_pad - offset; ++i) { - gguf_bwrite_el(buf, &pad, sizeof(pad)); - } - } - } - - if (only_meta) { - return; - } - - size_t offset = 0; - - // write tensor data - for (uint32_t i = 0; i < ctx->header.n_tensors; ++i) { - struct gguf_tensor_info * info = &ctx->infos[i]; - - const size_t size = info->size; - const size_t size_pad = GGML_PAD(size, ctx->alignment); - - gguf_bwrite_el(buf, info->data, size); - - if (size_pad != size) { - uint8_t pad = 0; - for (size_t j = 0; j < size_pad - size; ++j) { - gguf_bwrite_el(buf, &pad, sizeof(pad)); - } - } - - GGML_ASSERT(offset == info->offset); - - offset += size_pad; - } -} - -void gguf_write_to_file(const struct gguf_context * ctx, const char * fname, bool only_meta) { - FILE * file = ggml_fopen(fname, "wb"); - if (!file) { - GGML_ASSERT(false && "failed to open file for writing"); - } - - struct gguf_buf buf = gguf_buf_init(16*1024); - - gguf_write_to_buf(ctx, &buf, only_meta); - - fwrite(buf.data, 1, buf.offset, file); - - gguf_buf_free(buf); - - fclose(file); -} - -size_t gguf_get_meta_size(const struct gguf_context * ctx) { - // no allocs - only compute size - struct gguf_buf buf = gguf_buf_init(0); - - gguf_write_to_buf(ctx, &buf, true); - - return buf.offset; -} - -void gguf_get_meta_data(const struct gguf_context * ctx, void * data) { - struct gguf_buf buf = gguf_buf_init(16*1024); - - gguf_write_to_buf(ctx, &buf, true); - - memcpy(data, buf.data, buf.offset); - - gguf_buf_free(buf); -} - -//////////////////////////////////////////////////////////////////////////////// - -int ggml_cpu_has_avx(void) { -#if defined(__AVX__) - return 1; -#else - return 0; -#endif -} - -int ggml_cpu_has_avx_vnni(void) { -#if defined(__AVXVNNI__) - return 1; -#else - return 0; -#endif -} - -int ggml_cpu_has_avx2(void) { -#if defined(__AVX2__) - return 1; -#else - return 0; -#endif -} - -int ggml_cpu_has_avx512(void) { -#if defined(__AVX512F__) - return 1; -#else - return 0; -#endif -} - -int ggml_cpu_has_avx512_vbmi(void) { -#if defined(__AVX512VBMI__) - return 1; -#else - return 0; -#endif -} - -int ggml_cpu_has_avx512_vnni(void) { -#if defined(__AVX512VNNI__) - return 1; -#else - return 0; -#endif -} - -int ggml_cpu_has_fma(void) { -#if defined(__FMA__) - return 1; -#else - return 0; -#endif -} - -int ggml_cpu_has_neon(void) { -#if defined(__ARM_NEON) - return 1; -#else - return 0; -#endif -} - -int ggml_cpu_has_arm_fma(void) { -#if defined(__ARM_FEATURE_FMA) - return 1; -#else - return 0; -#endif -} - -int ggml_cpu_has_metal(void) { -#if defined(GGML_USE_METAL) - return 1; -#else - return 0; -#endif -} - -int ggml_cpu_has_f16c(void) { -#if defined(__F16C__) - return 1; -#else - return 0; -#endif -} - -int ggml_cpu_has_fp16_va(void) { -#if defined(__ARM_FEATURE_FP16_VECTOR_ARITHMETIC) - return 1; -#else - return 0; -#endif -} - -int ggml_cpu_has_wasm_simd(void) { -#if defined(__wasm_simd128__) - return 1; -#else - return 0; -#endif -} - -int ggml_cpu_has_blas(void) { -#if defined(GGML_USE_ACCELERATE) || defined(GGML_USE_OPENBLAS) || defined(GGML_USE_CUDA) || defined(GGML_USE_VULKAN) || defined(GGML_USE_CLBLAST) || defined(GGML_USE_SYCL) - return isOpenCLSupported ? 1 : 0; -#else - return 0; -#endif -} - -int ggml_cpu_has_cuda(void) { -#if defined(GGML_USE_CUDA) - return 1; -#else - return 0; -#endif -} - -int ggml_cpu_has_clblast(void) { -#if defined(GGML_USE_CLBLAST) - return isOpenCLSupported ? 1 : 0; -#else - return 0; -#endif -} - -int ggml_cpu_has_vulkan(void) { -#if defined(GGML_USE_VULKAN) - return 1; -#else - return 0; -#endif -} - -int ggml_cpu_has_kompute(void) { -#if defined(GGML_USE_KOMPUTE) - return 1; -#else - return 0; -#endif -} - -int ggml_cpu_has_sycl(void) { -#if defined(GGML_USE_SYCL) - return 1; -#else - return 0; -#endif -} - -int ggml_cpu_has_gpublas(void) { - return ggml_cpu_has_cuda() || ggml_cpu_has_clblast() || ggml_cpu_has_vulkan() || ggml_cpu_has_kompute() || - ggml_cpu_has_sycl(); -} - -int ggml_cpu_has_sse3(void) { -#if defined(__SSE3__) - return 1; -#else - return 0; -#endif -} - -int ggml_cpu_has_ssse3(void) { -#if defined(__SSSE3__) - return 1; -#else - return 0; -#endif -} - -int ggml_cpu_has_vsx(void) { -#if defined(__POWER9_VECTOR__) - return 1; -#else - return 0; -#endif -} - -int ggml_cpu_has_matmul_int8(void) { -#if defined(__ARM_FEATURE_MATMUL_INT8) - return 1; -#else - return 0; -#endif -} - -//////////////////////////////////////////////////////////////////////////////// diff --git a/ggml.h b/ggml.h deleted file mode 100644 index 28d9d93e336..00000000000 --- a/ggml.h +++ /dev/null @@ -1,2407 +0,0 @@ -#pragma once - -// -// GGML Tensor Library -// -// This documentation is still a work in progress. -// If you wish some specific topics to be covered, feel free to drop a comment: -// -// https://github.com/ggerganov/whisper.cpp/issues/40 -// -// ## Overview -// -// This library implements: -// -// - a set of tensor operations -// - automatic differentiation -// - basic optimization algorithms -// -// The aim of this library is to provide a minimalistic approach for various machine learning tasks. This includes, -// but is not limited to, the following: -// -// - linear regression -// - support vector machines -// - neural networks -// -// The library allows the user to define a certain function using the available tensor operations. This function -// definition is represented internally via a computation graph. Each tensor operation in the function definition -// corresponds to a node in the graph. Having the computation graph defined, the user can choose to compute the -// function's value and/or its gradient with respect to the input variables. Optionally, the function can be optimized -// using one of the available optimization algorithms. -// -// For example, here we define the function: f(x) = a*x^2 + b -// -// { -// struct ggml_init_params params = { -// .mem_size = 16*1024*1024, -// .mem_buffer = NULL, -// }; -// -// // memory allocation happens here -// struct ggml_context * ctx = ggml_init(params); -// -// struct ggml_tensor * x = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, 1); -// -// ggml_set_param(ctx, x); // x is an input variable -// -// struct ggml_tensor * a = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, 1); -// struct ggml_tensor * b = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, 1); -// struct ggml_tensor * x2 = ggml_mul(ctx, x, x); -// struct ggml_tensor * f = ggml_add(ctx, ggml_mul(ctx, a, x2), b); -// -// ... -// } -// -// Notice that the function definition above does not involve any actual computation. The computation is performed only -// when the user explicitly requests it. For example, to compute the function's value at x = 2.0: -// -// { -// ... -// -// struct ggml_cgraph * gf = ggml_new_graph(ctx); -// ggml_build_forward_expand(gf, f); -// -// // set the input variable and parameter values -// ggml_set_f32(x, 2.0f); -// ggml_set_f32(a, 3.0f); -// ggml_set_f32(b, 4.0f); -// -// ggml_graph_compute_with_ctx(ctx, &gf, n_threads); -// -// printf("f = %f\n", ggml_get_f32_1d(f, 0)); -// -// ... -// } -// -// The actual computation is performed in the ggml_graph_compute() function. -// -// The ggml_new_tensor_...() functions create new tensors. They are allocated in the memory buffer provided to the -// ggml_init() function. You have to be careful not to exceed the memory buffer size. Therefore, you have to know -// in advance how much memory you need for your computation. Alternatively, you can allocate a large enough memory -// and after defining the computation graph, call the ggml_used_mem() function to find out how much memory was -// actually needed. -// -// The ggml_set_param() function marks a tensor as an input variable. This is used by the automatic -// differentiation and optimization algorithms. -// -// The described approach allows to define the function graph once and then compute its forward or backward graphs -// multiple times. All computations will use the same memory buffer allocated in the ggml_init() function. This way -// the user can avoid the memory allocation overhead at runtime. -// -// The library supports multi-dimensional tensors - up to 4 dimensions. The FP16 and FP32 data types are first class -// citizens, but in theory the library can be extended to support FP8 and integer data types. -// -// Each tensor operation produces a new tensor. Initially the library was envisioned to support only the use of unary -// and binary operations. Most of the available operations fall into one of these two categories. With time, it became -// clear that the library needs to support more complex operations. The way to support these operations is not clear -// yet, but a few examples are demonstrated in the following operations: -// -// - ggml_permute() -// - ggml_conv_1d_1s() -// - ggml_conv_1d_2s() -// -// For each tensor operator, the library implements a forward and backward computation function. The forward function -// computes the output tensor value given the input tensor values. The backward function computes the adjoint of the -// input tensors given the adjoint of the output tensor. For a detailed explanation of what this means, take a -// calculus class, or watch the following video: -// -// What is Automatic Differentiation? -// https://www.youtube.com/watch?v=wG_nF1awSSY -// -// -// ## Tensor data (struct ggml_tensor) -// -// The tensors are stored in memory via the ggml_tensor struct. The structure provides information about the size of -// the tensor, the data type, and the memory buffer where the tensor data is stored. Additionally, it contains -// pointers to the "source" tensors - i.e. the tensors that were used to compute the current tensor. For example: -// -// { -// struct ggml_tensor * c = ggml_add(ctx, a, b); -// -// assert(c->src[0] == a); -// assert(c->src[1] == b); -// } -// -// The multi-dimensional tensors are stored in row-major order. The ggml_tensor struct contains fields for the -// number of elements in each dimension ("ne") as well as the number of bytes ("nb", a.k.a. stride). This allows -// to store tensors that are not contiguous in memory, which is useful for operations such as transposition and -// permutation. All tensor operations have to take the stride into account and not assume that the tensor is -// contiguous in memory. -// -// The data of the tensor is accessed via the "data" pointer. For example: -// -// { -// const int nx = 2; -// const int ny = 3; -// -// struct ggml_tensor * a = ggml_new_tensor_2d(ctx, GGML_TYPE_F32, nx, ny); -// -// for (int y = 0; y < ny; y++) { -// for (int x = 0; x < nx; x++) { -// *(float *) ((char *) a->data + y*a->nb[1] + x*a->nb[0]) = x + y; -// } -// } -// -// ... -// } -// -// Alternatively, there are helper functions, such as ggml_get_f32_1d() and ggml_set_f32_1d() that can be used. -// -// ## The matrix multiplication operator (ggml_mul_mat) -// -// TODO -// -// -// ## Multi-threading -// -// TODO -// -// -// ## Overview of ggml.c -// -// TODO -// -// -// ## SIMD optimizations -// -// TODO -// -// -// ## Debugging ggml -// -// TODO -// -// - -#ifdef GGML_SHARED -# if defined(_WIN32) && !defined(__MINGW32__) -# ifdef GGML_BUILD -# define GGML_API __declspec(dllexport) -# else -# define GGML_API __declspec(dllimport) -# endif -# else -# define GGML_API __attribute__ ((visibility ("default"))) -# endif -#else -# define GGML_API -#endif - -#ifdef GGML_MULTIPLATFORM -# if defined(_WIN32) -# define GGML_CALL -# else -# define GGML_CALL __attribute__((__ms_abi__)) -# endif -#else -# define GGML_CALL -#endif - -// TODO: support for clang -#ifdef __GNUC__ -# define GGML_DEPRECATED(func, hint) func __attribute__((deprecated(hint))) -#elif defined(_MSC_VER) -# define GGML_DEPRECATED(func, hint) __declspec(deprecated(hint)) func -#else -# define GGML_DEPRECATED(func, hint) func -#endif - -#ifndef __GNUC__ -# define GGML_ATTRIBUTE_FORMAT(...) -#elif defined(__MINGW32__) -# define GGML_ATTRIBUTE_FORMAT(...) __attribute__((format(gnu_printf, __VA_ARGS__))) -#else -# define GGML_ATTRIBUTE_FORMAT(...) __attribute__((format(printf, __VA_ARGS__))) -#endif - -#include -#include -#include -#include - -#define GGML_FILE_MAGIC 0x67676d6c // "ggml" -#define GGML_FILE_VERSION 1 - -#define GGML_QNT_VERSION 2 // bump this on quantization format changes -#define GGML_QNT_VERSION_FACTOR 1000 // do not change this - -#define GGML_MAX_DIMS 4 -#define GGML_MAX_PARAMS 2048 -#define GGML_MAX_CONTEXTS 64 -#define GGML_MAX_SRC 10 -#ifndef GGML_MAX_NAME -#define GGML_MAX_NAME 64 -#endif -#define GGML_MAX_OP_PARAMS 64 -#define GGML_DEFAULT_N_THREADS 4 -#define GGML_DEFAULT_GRAPH_SIZE 2048 -#if UINTPTR_MAX == 0xFFFFFFFF - #define GGML_MEM_ALIGN 4 -#else - #define GGML_MEM_ALIGN 16 -#endif - -#define GGML_EXIT_SUCCESS 0 -#define GGML_EXIT_ABORTED 1 - -#define GGUF_MAGIC "GGUF" - -#define GGUF_VERSION 3 - -#define GGUF_DEFAULT_ALIGNMENT 32 - -#define GGML_UNUSED(x) (void)(x) - -#define GGML_PAD(x, n) (((x) + (n) - 1) & ~((n) - 1)) - -#define GGML_ASSERT(x) \ - do { \ - if (!(x)) { \ - fflush(stdout); \ - fprintf(stderr, "GGML_ASSERT: %s:%d: %s\n", __FILE__, __LINE__, #x); \ - ggml_print_backtrace(); \ - abort(); \ - } \ - } while (0) - -#ifndef NDEBUG -#define GGML_UNREACHABLE() GGML_ASSERT(!"statement should not be reached") -#elif defined(__GNUC__) -#define GGML_UNREACHABLE() __builtin_unreachable() -#elif defined(_MSC_VER) -#define GGML_UNREACHABLE() __assume(0) -#else -#define GGML_UNREACHABLE() ((void) 0) -#endif - -// used to copy the number of elements and stride in bytes of tensors into local variables. -// main purpose is to reduce code duplication and improve readability. -// -// example: -// -// GGML_TENSOR_LOCALS(int64_t, ne1, src1, ne); -// GGML_TENSOR_LOCALS(size_t, nb1, src1, nb); -// -#define GGML_TENSOR_LOCALS_1(type, prefix, pointer, array) \ - const type prefix##0 = (pointer)->array[0]; \ - GGML_UNUSED(prefix##0); -#define GGML_TENSOR_LOCALS_2(type, prefix, pointer, array) \ - GGML_TENSOR_LOCALS_1 (type, prefix, pointer, array) \ - const type prefix##1 = (pointer)->array[1]; \ - GGML_UNUSED(prefix##1); -#define GGML_TENSOR_LOCALS_3(type, prefix, pointer, array) \ - GGML_TENSOR_LOCALS_2 (type, prefix, pointer, array) \ - const type prefix##2 = (pointer)->array[2]; \ - GGML_UNUSED(prefix##2); -#define GGML_TENSOR_LOCALS(type, prefix, pointer, array) \ - GGML_TENSOR_LOCALS_3 (type, prefix, pointer, array) \ - const type prefix##3 = (pointer)->array[3]; \ - GGML_UNUSED(prefix##3); - -#define GGML_TENSOR_UNARY_OP_LOCALS \ - GGML_TENSOR_LOCALS(int64_t, ne0, src0, ne) \ - GGML_TENSOR_LOCALS(size_t, nb0, src0, nb) \ - GGML_TENSOR_LOCALS(int64_t, ne, dst, ne) \ - GGML_TENSOR_LOCALS(size_t, nb, dst, nb) - -#define GGML_TENSOR_BINARY_OP_LOCALS \ - GGML_TENSOR_LOCALS(int64_t, ne0, src0, ne) \ - GGML_TENSOR_LOCALS(size_t, nb0, src0, nb) \ - GGML_TENSOR_LOCALS(int64_t, ne1, src1, ne) \ - GGML_TENSOR_LOCALS(size_t, nb1, src1, nb) \ - GGML_TENSOR_LOCALS(int64_t, ne, dst, ne) \ - GGML_TENSOR_LOCALS(size_t, nb, dst, nb) - -#ifdef __cplusplus -extern "C" { -#endif - - extern bool isOpenCLSupported; - - enum ggml_status { - GGML_STATUS_ALLOC_FAILED = -2, - GGML_STATUS_FAILED = -1, - GGML_STATUS_SUCCESS = 0, - GGML_STATUS_ABORTED = 1, - }; - - // get ggml_status name string - GGML_API GGML_CALL const char * ggml_status_to_string(enum ggml_status status); - - typedef uint16_t ggml_fp16_t; - - // convert FP16 <-> FP32 - GGML_API float ggml_fp16_to_fp32(ggml_fp16_t x); - GGML_API ggml_fp16_t ggml_fp32_to_fp16(float x); - - GGML_API void ggml_fp16_to_fp32_row(const ggml_fp16_t * x, float * y, int64_t n); - GGML_API void ggml_fp32_to_fp16_row(const float * x, ggml_fp16_t * y, int64_t n); - - struct ggml_object; - struct ggml_context; - - // NOTE: always add types at the end of the enum to keep backward compatibility - enum ggml_type { - GGML_TYPE_F32 = 0, - GGML_TYPE_F16 = 1, - GGML_TYPE_Q4_0 = 2, - GGML_TYPE_Q4_1 = 3, - // GGML_TYPE_Q4_2 = 4, support has been removed - // GGML_TYPE_Q4_3 = 5, support has been removed - GGML_TYPE_Q5_0 = 6, - GGML_TYPE_Q5_1 = 7, - GGML_TYPE_Q8_0 = 8, - GGML_TYPE_Q8_1 = 9, - GGML_TYPE_Q2_K = 10, - GGML_TYPE_Q3_K = 11, - GGML_TYPE_Q4_K = 12, - GGML_TYPE_Q5_K = 13, - GGML_TYPE_Q6_K = 14, - GGML_TYPE_Q8_K = 15, - GGML_TYPE_IQ2_XXS = 16, - GGML_TYPE_IQ2_XS = 17, - GGML_TYPE_IQ3_XXS = 18, - GGML_TYPE_IQ1_S = 19, - GGML_TYPE_IQ4_NL = 20, - GGML_TYPE_IQ3_S = 21, - GGML_TYPE_IQ2_S = 22, - GGML_TYPE_IQ4_XS = 23, - GGML_TYPE_I8 = 24, - GGML_TYPE_I16 = 25, - GGML_TYPE_I32 = 26, - GGML_TYPE_I64 = 27, - GGML_TYPE_F64 = 28, - GGML_TYPE_IQ1_M = 29, - GGML_TYPE_COUNT, - }; - - // precision - enum ggml_prec { - GGML_PREC_DEFAULT, - GGML_PREC_F32, - }; - - enum ggml_backend_type { - GGML_BACKEND_TYPE_CPU = 0, - GGML_BACKEND_TYPE_GPU = 10, - GGML_BACKEND_TYPE_GPU_SPLIT = 20, - }; - - // model file types - enum ggml_ftype { - GGML_FTYPE_UNKNOWN = -1, - GGML_FTYPE_ALL_F32 = 0, - GGML_FTYPE_MOSTLY_F16 = 1, // except 1d tensors - GGML_FTYPE_MOSTLY_Q4_0 = 2, // except 1d tensors - GGML_FTYPE_MOSTLY_Q4_1 = 3, // except 1d tensors - GGML_FTYPE_MOSTLY_Q4_1_SOME_F16 = 4, // tok_embeddings.weight and output.weight are F16 - GGML_FTYPE_MOSTLY_Q8_0 = 7, // except 1d tensors - GGML_FTYPE_MOSTLY_Q5_0 = 8, // except 1d tensors - GGML_FTYPE_MOSTLY_Q5_1 = 9, // except 1d tensors - GGML_FTYPE_MOSTLY_Q2_K = 10, // except 1d tensors - GGML_FTYPE_MOSTLY_Q3_K = 11, // except 1d tensors - GGML_FTYPE_MOSTLY_Q4_K = 12, // except 1d tensors - GGML_FTYPE_MOSTLY_Q5_K = 13, // except 1d tensors - GGML_FTYPE_MOSTLY_Q6_K = 14, // except 1d tensors - GGML_FTYPE_MOSTLY_IQ2_XXS = 15, // except 1d tensors - GGML_FTYPE_MOSTLY_IQ2_XS = 16, // except 1d tensors - GGML_FTYPE_MOSTLY_IQ3_XXS = 17, // except 1d tensors - GGML_FTYPE_MOSTLY_IQ1_S = 18, // except 1d tensors - GGML_FTYPE_MOSTLY_IQ4_NL = 19, // except 1d tensors - GGML_FTYPE_MOSTLY_IQ3_S = 20, // except 1d tensors - GGML_FTYPE_MOSTLY_IQ2_S = 21, // except 1d tensors - GGML_FTYPE_MOSTLY_IQ4_XS = 22, // except 1d tensors - GGML_FTYPE_MOSTLY_IQ1_M = 23, // except 1d tensors - }; - - // available tensor operations: - enum ggml_op { - GGML_OP_NONE = 0, - - GGML_OP_DUP, - GGML_OP_ADD, - GGML_OP_ADD1, - GGML_OP_ACC, - GGML_OP_SUB, - GGML_OP_MUL, - GGML_OP_DIV, - GGML_OP_SQR, - GGML_OP_SQRT, - GGML_OP_LOG, - GGML_OP_SUM, - GGML_OP_SUM_ROWS, - GGML_OP_MEAN, - GGML_OP_ARGMAX, - GGML_OP_REPEAT, - GGML_OP_REPEAT_BACK, - GGML_OP_CONCAT, - GGML_OP_SILU_BACK, - GGML_OP_NORM, // normalize - GGML_OP_RMS_NORM, - GGML_OP_RMS_NORM_BACK, - GGML_OP_GROUP_NORM, - - GGML_OP_MUL_MAT, - GGML_OP_MUL_MAT_ID, - GGML_OP_OUT_PROD, - - GGML_OP_SCALE, - GGML_OP_SET, - GGML_OP_CPY, - GGML_OP_CONT, - GGML_OP_RESHAPE, - GGML_OP_VIEW, - GGML_OP_PERMUTE, - GGML_OP_TRANSPOSE, - GGML_OP_GET_ROWS, - GGML_OP_GET_ROWS_BACK, - GGML_OP_DIAG, - GGML_OP_DIAG_MASK_INF, - GGML_OP_DIAG_MASK_ZERO, - GGML_OP_SOFT_MAX, - GGML_OP_SOFT_MAX_BACK, - GGML_OP_ROPE, - GGML_OP_ROPE_BACK, - GGML_OP_ALIBI, - GGML_OP_CLAMP, - GGML_OP_CONV_TRANSPOSE_1D, - GGML_OP_IM2COL, - GGML_OP_CONV_TRANSPOSE_2D, - GGML_OP_POOL_1D, - GGML_OP_POOL_2D, - GGML_OP_UPSCALE, // nearest interpolate - GGML_OP_PAD, - GGML_OP_ARANGE, - GGML_OP_TIMESTEP_EMBEDDING, - GGML_OP_ARGSORT, - GGML_OP_LEAKY_RELU, - - GGML_OP_FLASH_ATTN, - GGML_OP_FLASH_FF, - GGML_OP_FLASH_ATTN_BACK, - GGML_OP_SSM_CONV, - GGML_OP_SSM_SCAN, - GGML_OP_WIN_PART, - GGML_OP_WIN_UNPART, - GGML_OP_GET_REL_POS, - GGML_OP_ADD_REL_POS, - - GGML_OP_UNARY, - - GGML_OP_MAP_UNARY, - GGML_OP_MAP_BINARY, - - GGML_OP_MAP_CUSTOM1_F32, - GGML_OP_MAP_CUSTOM2_F32, - GGML_OP_MAP_CUSTOM3_F32, - - GGML_OP_MAP_CUSTOM1, - GGML_OP_MAP_CUSTOM2, - GGML_OP_MAP_CUSTOM3, - - GGML_OP_CROSS_ENTROPY_LOSS, - GGML_OP_CROSS_ENTROPY_LOSS_BACK, - - GGML_OP_COUNT, - }; - - enum ggml_unary_op { - GGML_UNARY_OP_ABS, - GGML_UNARY_OP_SGN, - GGML_UNARY_OP_NEG, - GGML_UNARY_OP_STEP, - GGML_UNARY_OP_TANH, - GGML_UNARY_OP_ELU, - GGML_UNARY_OP_RELU, - GGML_UNARY_OP_GELU, - GGML_UNARY_OP_GELU_QUICK, - GGML_UNARY_OP_SILU, - GGML_UNARY_OP_HARDSWISH, - GGML_UNARY_OP_HARDSIGMOID, - - GGML_UNARY_OP_COUNT, - }; - - enum ggml_object_type { - GGML_OBJECT_TYPE_TENSOR, - GGML_OBJECT_TYPE_GRAPH, - GGML_OBJECT_TYPE_WORK_BUFFER - }; - - enum ggml_log_level { - GGML_LOG_LEVEL_ERROR = 2, - GGML_LOG_LEVEL_WARN = 3, - GGML_LOG_LEVEL_INFO = 4, - GGML_LOG_LEVEL_DEBUG = 5 - }; - - enum ggml_tensor_flag { - GGML_TENSOR_FLAG_INPUT = 1, - GGML_TENSOR_FLAG_OUTPUT = 2, - GGML_TENSOR_FLAG_PARAM = 4, - }; - - // ggml object - struct ggml_object { - size_t offs; - size_t size; - - struct ggml_object * next; - - enum ggml_object_type type; - - char padding[4]; - }; - - static const size_t GGML_OBJECT_SIZE = sizeof(struct ggml_object); - - // n-dimensional tensor - struct ggml_tensor { - enum ggml_type type; - enum ggml_backend_type backend; - - struct ggml_backend_buffer * buffer; - - int64_t ne[GGML_MAX_DIMS]; // number of elements - size_t nb[GGML_MAX_DIMS]; // stride in bytes: - // nb[0] = ggml_type_size(type) - // nb[1] = nb[0] * (ne[0] / ggml_blck_size(type)) + padding - // nb[i] = nb[i-1] * ne[i-1] - - // compute data - enum ggml_op op; - - // op params - allocated as int32_t for alignment - int32_t op_params[GGML_MAX_OP_PARAMS / sizeof(int32_t)]; - - int32_t flags; - - struct ggml_tensor * grad; - struct ggml_tensor * src[GGML_MAX_SRC]; - - // performance - int perf_runs; - int64_t perf_cycles; - int64_t perf_time_us; - - struct ggml_tensor * view_src; - size_t view_offs; - - void * data; - - char name[GGML_MAX_NAME]; - - void * extra; // extra things e.g. for ggml-cuda.cu - - char padding[8]; - }; - - static const size_t GGML_TENSOR_SIZE = sizeof(struct ggml_tensor); - - // Abort callback - // If not NULL, called before ggml computation - // If it returns true, the computation is aborted - typedef bool (*ggml_abort_callback)(void * data); - - // the compute plan that needs to be prepared for ggml_graph_compute() - // since https://github.com/ggerganov/ggml/issues/287 - struct ggml_cplan { - size_t work_size; // size of work buffer, calculated by `ggml_graph_plan()` - uint8_t * work_data; // work buffer, to be allocated by caller before calling to `ggml_graph_compute()` - - int n_threads; - - // abort ggml_graph_compute when true - ggml_abort_callback abort_callback; - void * abort_callback_data; - }; - - enum ggml_cgraph_eval_order { - GGML_CGRAPH_EVAL_ORDER_LEFT_TO_RIGHT = 0, - GGML_CGRAPH_EVAL_ORDER_RIGHT_TO_LEFT, - GGML_CGRAPH_EVAL_ORDER_COUNT - }; - - struct ggml_hash_set { - size_t size; - struct ggml_tensor ** keys; - }; - - // computation graph - struct ggml_cgraph { - int size; - int n_nodes; - int n_leafs; - - struct ggml_tensor ** nodes; - struct ggml_tensor ** grads; - struct ggml_tensor ** leafs; - - struct ggml_hash_set visited_hash_table; - - enum ggml_cgraph_eval_order order; - - // performance - int perf_runs; - int64_t perf_cycles; - int64_t perf_time_us; - }; - - // scratch buffer - struct ggml_scratch { - size_t offs; - size_t size; - void * data; - }; - - struct ggml_init_params { - // memory pool - size_t mem_size; // bytes - void * mem_buffer; // if NULL, memory will be allocated internally - bool no_alloc; // don't allocate memory for the tensor data - }; - - - // compute types - - // NOTE: the INIT or FINALIZE pass is not scheduled unless explicitly enabled. - // This behavior was changed since https://github.com/ggerganov/llama.cpp/pull/1995. - enum ggml_task_type { - GGML_TASK_TYPE_INIT = 0, - GGML_TASK_TYPE_COMPUTE, - GGML_TASK_TYPE_FINALIZE, - }; - - struct ggml_compute_params { - enum ggml_task_type type; - - // ith = thread index, nth = number of threads - int ith, nth; - - // work buffer for all threads - size_t wsize; - void * wdata; - }; - - // numa strategies - enum ggml_numa_strategy { - GGML_NUMA_STRATEGY_DISABLED = 0, - GGML_NUMA_STRATEGY_DISTRIBUTE = 1, - GGML_NUMA_STRATEGY_ISOLATE = 2, - GGML_NUMA_STRATEGY_NUMACTL = 3, - GGML_NUMA_STRATEGY_MIRROR = 4, - GGML_NUMA_STRATEGY_COUNT - }; - - // - // GUID - // - - // GUID types - typedef uint8_t ggml_guid[16]; - typedef ggml_guid * ggml_guid_t; - - GGML_API bool ggml_guid_matches(ggml_guid_t guid_a, ggml_guid_t guid_b); - - // misc - - GGML_API void ggml_time_init(void); // call this once at the beginning of the program - GGML_API int64_t ggml_time_ms(void); - GGML_API int64_t ggml_time_us(void); - GGML_API int64_t ggml_cycles(void); - GGML_API int64_t ggml_cycles_per_ms(void); - - GGML_API void ggml_print_backtrace(void); - - // accepts a UTF-8 path, even on Windows - GGML_API FILE * ggml_fopen(const char * fname, const char * mode); - - GGML_API void ggml_numa_init(enum ggml_numa_strategy numa); // call once for better performance on NUMA systems - GGML_API bool ggml_is_numa(void); // true if init detected that system has >1 NUMA node - - GGML_API void ggml_print_object (const struct ggml_object * obj); - GGML_API void ggml_print_objects(const struct ggml_context * ctx); - - GGML_API GGML_CALL int64_t ggml_nelements (const struct ggml_tensor * tensor); - GGML_API GGML_CALL int64_t ggml_nrows (const struct ggml_tensor * tensor); - GGML_API GGML_CALL size_t ggml_nbytes (const struct ggml_tensor * tensor); - GGML_API size_t ggml_nbytes_pad (const struct ggml_tensor * tensor); // same as ggml_nbytes() but padded to GGML_MEM_ALIGN - - GGML_API GGML_CALL int ggml_blck_size(enum ggml_type type); - GGML_API GGML_CALL size_t ggml_type_size(enum ggml_type type); // size in bytes for all elements in a block - GGML_API GGML_CALL size_t ggml_row_size (enum ggml_type type, int64_t ne); // size in bytes for all elements in a row - - GGML_DEPRECATED( - GGML_API double ggml_type_sizef(enum ggml_type type), // ggml_type_size()/ggml_blck_size() as float - "use ggml_row_size() instead"); - - GGML_API GGML_CALL const char * ggml_type_name(enum ggml_type type); - GGML_API GGML_CALL const char * ggml_op_name (enum ggml_op op); - GGML_API const char * ggml_op_symbol(enum ggml_op op); - - GGML_API const char * ggml_unary_op_name(enum ggml_unary_op op); - GGML_API GGML_CALL const char * ggml_op_desc(const struct ggml_tensor * t); // unary or op name - - GGML_API GGML_CALL size_t ggml_element_size(const struct ggml_tensor * tensor); - - GGML_API GGML_CALL bool ggml_is_quantized(enum ggml_type type); - - // TODO: temporary until model loading of ggml examples is refactored - GGML_API enum ggml_type ggml_ftype_to_ggml_type(enum ggml_ftype ftype); - - GGML_API GGML_CALL bool ggml_is_transposed(const struct ggml_tensor * tensor); - GGML_API GGML_CALL bool ggml_is_contiguous(const struct ggml_tensor * tensor); - GGML_API GGML_CALL bool ggml_is_permuted (const struct ggml_tensor * tensor); - GGML_API GGML_CALL bool ggml_is_empty (const struct ggml_tensor * tensor); - GGML_API bool ggml_is_scalar (const struct ggml_tensor * tensor); - GGML_API bool ggml_is_vector (const struct ggml_tensor * tensor); - GGML_API bool ggml_is_matrix (const struct ggml_tensor * tensor); - GGML_API bool ggml_is_3d (const struct ggml_tensor * tensor); - GGML_API int ggml_n_dims (const struct ggml_tensor * tensor); // returns 1 for scalars - - GGML_API bool ggml_are_same_shape(const struct ggml_tensor * t0, const struct ggml_tensor * t1); - - // use this to compute the memory overhead of a tensor - GGML_API size_t ggml_tensor_overhead(void); - - GGML_API bool ggml_validate_row_data(enum ggml_type type, const void * data, size_t nbytes); - - // main - - GGML_API struct ggml_context * ggml_init(struct ggml_init_params params); - GGML_API void ggml_free(struct ggml_context * ctx); - - GGML_API size_t ggml_used_mem(const struct ggml_context * ctx); - - GGML_API size_t ggml_set_scratch (struct ggml_context * ctx, struct ggml_scratch scratch); - GGML_API bool ggml_get_no_alloc(struct ggml_context * ctx); - GGML_API void ggml_set_no_alloc(struct ggml_context * ctx, bool no_alloc); - - GGML_API void * ggml_get_mem_buffer (const struct ggml_context * ctx); - GGML_API size_t ggml_get_mem_size (const struct ggml_context * ctx); - GGML_API size_t ggml_get_max_tensor_size(const struct ggml_context * ctx); - - GGML_API struct ggml_tensor * ggml_new_tensor( - struct ggml_context * ctx, - enum ggml_type type, - int n_dims, - const int64_t *ne); - - GGML_API struct ggml_tensor * ggml_new_tensor_1d( - struct ggml_context * ctx, - enum ggml_type type, - int64_t ne0); - - GGML_API struct ggml_tensor * ggml_new_tensor_2d( - struct ggml_context * ctx, - enum ggml_type type, - int64_t ne0, - int64_t ne1); - - GGML_API struct ggml_tensor * ggml_new_tensor_3d( - struct ggml_context * ctx, - enum ggml_type type, - int64_t ne0, - int64_t ne1, - int64_t ne2); - - GGML_API struct ggml_tensor * ggml_new_tensor_4d( - struct ggml_context * ctx, - enum ggml_type type, - int64_t ne0, - int64_t ne1, - int64_t ne2, - int64_t ne3); - - GGML_API struct ggml_tensor * ggml_new_i32(struct ggml_context * ctx, int32_t value); - GGML_API struct ggml_tensor * ggml_new_f32(struct ggml_context * ctx, float value); - - GGML_API struct ggml_tensor * ggml_dup_tensor (struct ggml_context * ctx, const struct ggml_tensor * src); - GGML_API struct ggml_tensor * ggml_view_tensor(struct ggml_context * ctx, struct ggml_tensor * src); - - // Context tensor enumeration and lookup - GGML_API struct ggml_tensor * ggml_get_first_tensor(const struct ggml_context * ctx); - GGML_API struct ggml_tensor * ggml_get_next_tensor (const struct ggml_context * ctx, struct ggml_tensor * tensor); - GGML_API struct ggml_tensor * ggml_get_tensor(struct ggml_context * ctx, const char * name); - - GGML_API struct ggml_tensor * ggml_set_zero(struct ggml_tensor * tensor); - GGML_API struct ggml_tensor * ggml_set_i32 (struct ggml_tensor * tensor, int32_t value); - GGML_API struct ggml_tensor * ggml_set_f32 (struct ggml_tensor * tensor, float value); - - // Converts a flat index into coordinates - GGML_API void ggml_unravel_index(const struct ggml_tensor * tensor, int64_t i, int64_t * i0, int64_t * i1, int64_t * i2, int64_t * i3); - - GGML_API int32_t ggml_get_i32_1d(const struct ggml_tensor * tensor, int i); - GGML_API void ggml_set_i32_1d(const struct ggml_tensor * tensor, int i, int32_t value); - - GGML_API int32_t ggml_get_i32_nd(const struct ggml_tensor * tensor, int i0, int i1, int i2, int i3); - GGML_API void ggml_set_i32_nd(const struct ggml_tensor * tensor, int i0, int i1, int i2, int i3, int32_t value); - - GGML_API float ggml_get_f32_1d(const struct ggml_tensor * tensor, int i); - GGML_API void ggml_set_f32_1d(const struct ggml_tensor * tensor, int i, float value); - - GGML_API float ggml_get_f32_nd(const struct ggml_tensor * tensor, int i0, int i1, int i2, int i3); - GGML_API void ggml_set_f32_nd(const struct ggml_tensor * tensor, int i0, int i1, int i2, int i3, float value); - - GGML_API void * ggml_get_data (const struct ggml_tensor * tensor); - GGML_API float * ggml_get_data_f32(const struct ggml_tensor * tensor); - - GGML_API GGML_CALL enum ggml_unary_op ggml_get_unary_op(const struct ggml_tensor * tensor); - - GGML_API const char * ggml_get_name (const struct ggml_tensor * tensor); - GGML_API struct ggml_tensor * ggml_set_name ( struct ggml_tensor * tensor, const char * name); - GGML_ATTRIBUTE_FORMAT(2, 3) - GGML_API struct ggml_tensor * ggml_format_name( struct ggml_tensor * tensor, const char * fmt, ...); - - // - // operations on tensors with backpropagation - // - - GGML_API struct ggml_tensor * ggml_dup( - struct ggml_context * ctx, - struct ggml_tensor * a); - - // in-place, returns view(a) - GGML_API struct ggml_tensor * ggml_dup_inplace( - struct ggml_context * ctx, - struct ggml_tensor * a); - - GGML_API struct ggml_tensor * ggml_add( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b); - - GGML_API struct ggml_tensor * ggml_add_inplace( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b); - - GGML_API struct ggml_tensor * ggml_add_cast( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b, - enum ggml_type type); - - GGML_API struct ggml_tensor * ggml_add1( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b); - - GGML_API struct ggml_tensor * ggml_add1_inplace( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b); - - // dst = a - // view(dst, nb1, nb2, nb3, offset) += b - // return dst - GGML_API struct ggml_tensor * ggml_acc( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b, - size_t nb1, - size_t nb2, - size_t nb3, - size_t offset); - - GGML_API struct ggml_tensor * ggml_acc_inplace( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b, - size_t nb1, - size_t nb2, - size_t nb3, - size_t offset); - - GGML_API struct ggml_tensor * ggml_sub( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b); - - GGML_API struct ggml_tensor * ggml_sub_inplace( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b); - - GGML_API struct ggml_tensor * ggml_mul( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b); - - GGML_API struct ggml_tensor * ggml_mul_inplace( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b); - - GGML_API struct ggml_tensor * ggml_div( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b); - - GGML_API struct ggml_tensor * ggml_div_inplace( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b); - - GGML_API struct ggml_tensor * ggml_sqr( - struct ggml_context * ctx, - struct ggml_tensor * a); - - GGML_API struct ggml_tensor * ggml_sqr_inplace( - struct ggml_context * ctx, - struct ggml_tensor * a); - - GGML_API struct ggml_tensor * ggml_sqrt( - struct ggml_context * ctx, - struct ggml_tensor * a); - - GGML_API struct ggml_tensor * ggml_sqrt_inplace( - struct ggml_context * ctx, - struct ggml_tensor * a); - - GGML_API struct ggml_tensor * ggml_log( - struct ggml_context * ctx, - struct ggml_tensor * a); - - GGML_API struct ggml_tensor * ggml_log_inplace( - struct ggml_context * ctx, - struct ggml_tensor * a); - - // return scalar - GGML_API struct ggml_tensor * ggml_sum( - struct ggml_context * ctx, - struct ggml_tensor * a); - - // sums along rows, with input shape [a,b,c,d] return shape [1,b,c,d] - GGML_API struct ggml_tensor * ggml_sum_rows( - struct ggml_context * ctx, - struct ggml_tensor * a); - - // mean along rows - GGML_API struct ggml_tensor * ggml_mean( - struct ggml_context * ctx, - struct ggml_tensor * a); - - // argmax along rows - GGML_API struct ggml_tensor * ggml_argmax( - struct ggml_context * ctx, - struct ggml_tensor * a); - - // if a is the same shape as b, and a is not parameter, return a - // otherwise, return a new tensor: repeat(a) to fit in b - GGML_API struct ggml_tensor * ggml_repeat( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b); - - // sums repetitions in a into shape of b - GGML_API struct ggml_tensor * ggml_repeat_back( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b); - - // concat a and b on dim 2 - // used in stable-diffusion - GGML_API struct ggml_tensor * ggml_concat( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b); - - GGML_API struct ggml_tensor * ggml_abs( - struct ggml_context * ctx, - struct ggml_tensor * a); - - GGML_API struct ggml_tensor * ggml_abs_inplace( - struct ggml_context * ctx, - struct ggml_tensor * a); - - GGML_API struct ggml_tensor * ggml_sgn( - struct ggml_context * ctx, - struct ggml_tensor * a); - - GGML_API struct ggml_tensor * ggml_sgn_inplace( - struct ggml_context * ctx, - struct ggml_tensor * a); - - GGML_API struct ggml_tensor * ggml_neg( - struct ggml_context * ctx, - struct ggml_tensor * a); - - GGML_API struct ggml_tensor * ggml_neg_inplace( - struct ggml_context * ctx, - struct ggml_tensor * a); - - GGML_API struct ggml_tensor * ggml_step( - struct ggml_context * ctx, - struct ggml_tensor * a); - - GGML_API struct ggml_tensor * ggml_step_inplace( - struct ggml_context * ctx, - struct ggml_tensor * a); - - GGML_API struct ggml_tensor * ggml_tanh( - struct ggml_context * ctx, - struct ggml_tensor * a); - - GGML_API struct ggml_tensor * ggml_tanh_inplace( - struct ggml_context * ctx, - struct ggml_tensor * a); - - GGML_API struct ggml_tensor * ggml_elu( - struct ggml_context * ctx, - struct ggml_tensor * a); - - GGML_API struct ggml_tensor * ggml_elu_inplace( - struct ggml_context * ctx, - struct ggml_tensor * a); - - GGML_API struct ggml_tensor * ggml_relu( - struct ggml_context * ctx, - struct ggml_tensor * a); - - GGML_API struct ggml_tensor * ggml_leaky_relu( - struct ggml_context * ctx, - struct ggml_tensor * a, float negative_slope, bool inplace); - - GGML_API struct ggml_tensor * ggml_relu_inplace( - struct ggml_context * ctx, - struct ggml_tensor * a); - - GGML_API struct ggml_tensor * ggml_gelu( - struct ggml_context * ctx, - struct ggml_tensor * a); - - GGML_API struct ggml_tensor * ggml_gelu_inplace( - struct ggml_context * ctx, - struct ggml_tensor * a); - - GGML_API struct ggml_tensor * ggml_gelu_quick( - struct ggml_context * ctx, - struct ggml_tensor * a); - - GGML_API struct ggml_tensor * ggml_gelu_quick_inplace( - struct ggml_context * ctx, - struct ggml_tensor * a); - - GGML_API struct ggml_tensor * ggml_silu( - struct ggml_context * ctx, - struct ggml_tensor * a); - - GGML_API struct ggml_tensor * ggml_silu_inplace( - struct ggml_context * ctx, - struct ggml_tensor * a); - - // a - x - // b - dy - GGML_API struct ggml_tensor * ggml_silu_back( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b); - - // hardswish(x) = x * relu6(x + 3) / 6 - GGML_API struct ggml_tensor * ggml_hardswish( - struct ggml_context * ctx, - struct ggml_tensor * a); - - // hardsigmoid(x) = relu6(x + 3) / 6 - GGML_API struct ggml_tensor * ggml_hardsigmoid( - struct ggml_context * ctx, - struct ggml_tensor * a); - - // normalize along rows - GGML_API struct ggml_tensor * ggml_norm( - struct ggml_context * ctx, - struct ggml_tensor * a, - float eps); - - GGML_API struct ggml_tensor * ggml_norm_inplace( - struct ggml_context * ctx, - struct ggml_tensor * a, - float eps); - - GGML_API struct ggml_tensor * ggml_rms_norm( - struct ggml_context * ctx, - struct ggml_tensor * a, - float eps); - - GGML_API struct ggml_tensor * ggml_rms_norm_inplace( - struct ggml_context * ctx, - struct ggml_tensor * a, - float eps); - - // group normalize along ne0*ne1*n_groups - // used in stable-diffusion - // TODO: eps is hardcoded to 1e-6 for now - GGML_API struct ggml_tensor * ggml_group_norm( - struct ggml_context * ctx, - struct ggml_tensor * a, - int n_groups); - - GGML_API struct ggml_tensor * ggml_group_norm_inplace( - struct ggml_context * ctx, - struct ggml_tensor * a, - int n_groups); - - // a - x - // b - dy - GGML_API struct ggml_tensor * ggml_rms_norm_back( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b, - float eps); - - // A: k columns, n rows => [ne03, ne02, n, k] - // B: k columns, m rows (i.e. we transpose it internally) => [ne03 * x, ne02 * y, m, k] - // result is n columns, m rows => [ne03 * x, ne02 * y, m, n] - GGML_API struct ggml_tensor * ggml_mul_mat( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b); - - // change the precision of a matrix multiplication - // set to GGML_PREC_F32 for higher precision (useful for phi-2) - GGML_API void ggml_mul_mat_set_prec( - struct ggml_tensor * a, - enum ggml_prec prec); - - // indirect matrix multiplication - GGML_API struct ggml_tensor * ggml_mul_mat_id( - struct ggml_context * ctx, - struct ggml_tensor * as, - struct ggml_tensor * b, - struct ggml_tensor * ids); - - // A: m columns, n rows, - // B: p columns, n rows, - // result is m columns, p rows - GGML_API struct ggml_tensor * ggml_out_prod( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b); - - // - // operations on tensors without backpropagation - // - - GGML_API struct ggml_tensor * ggml_scale( - struct ggml_context * ctx, - struct ggml_tensor * a, - float s); - - // in-place, returns view(a) - GGML_API struct ggml_tensor * ggml_scale_inplace( - struct ggml_context * ctx, - struct ggml_tensor * a, - float s); - - // b -> view(a,offset,nb1,nb2,3), return modified a - GGML_API struct ggml_tensor * ggml_set( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b, - size_t nb1, - size_t nb2, - size_t nb3, - size_t offset); - - // b -> view(a,offset,nb1,nb2,3), return view(a) - GGML_API struct ggml_tensor * ggml_set_inplace( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b, - size_t nb1, - size_t nb2, - size_t nb3, - size_t offset); - - GGML_API struct ggml_tensor * ggml_set_1d( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b, - size_t offset); - - GGML_API struct ggml_tensor * ggml_set_1d_inplace( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b, - size_t offset); - - // b -> view(a,offset,nb1,nb2,3), return modified a - GGML_API struct ggml_tensor * ggml_set_2d( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b, - size_t nb1, - size_t offset); - - // b -> view(a,offset,nb1,nb2,3), return view(a) - GGML_API struct ggml_tensor * ggml_set_2d_inplace( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b, - size_t nb1, - size_t offset); - - // a -> b, return view(b) - GGML_API struct ggml_tensor * ggml_cpy( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b); - - GGML_API struct ggml_tensor * ggml_cast( - struct ggml_context * ctx, - struct ggml_tensor * a, - enum ggml_type type); - - // make contiguous - GGML_API struct ggml_tensor * ggml_cont( - struct ggml_context * ctx, - struct ggml_tensor * a); - - // make contiguous, with new shape - GGML_API struct ggml_tensor * ggml_cont_1d( - struct ggml_context * ctx, - struct ggml_tensor * a, - int64_t ne0); - - GGML_API struct ggml_tensor * ggml_cont_2d( - struct ggml_context * ctx, - struct ggml_tensor * a, - int64_t ne0, - int64_t ne1); - - GGML_API struct ggml_tensor * ggml_cont_3d( - struct ggml_context * ctx, - struct ggml_tensor * a, - int64_t ne0, - int64_t ne1, - int64_t ne2); - - GGML_API struct ggml_tensor * ggml_cont_4d( - struct ggml_context * ctx, - struct ggml_tensor * a, - int64_t ne0, - int64_t ne1, - int64_t ne2, - int64_t ne3); - - // return view(a), b specifies the new shape - // TODO: when we start computing gradient, make a copy instead of view - GGML_API struct ggml_tensor * ggml_reshape( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b); - - // return view(a) - // TODO: when we start computing gradient, make a copy instead of view - GGML_API struct ggml_tensor * ggml_reshape_1d( - struct ggml_context * ctx, - struct ggml_tensor * a, - int64_t ne0); - - GGML_API struct ggml_tensor * ggml_reshape_2d( - struct ggml_context * ctx, - struct ggml_tensor * a, - int64_t ne0, - int64_t ne1); - - // return view(a) - // TODO: when we start computing gradient, make a copy instead of view - GGML_API struct ggml_tensor * ggml_reshape_3d( - struct ggml_context * ctx, - struct ggml_tensor * a, - int64_t ne0, - int64_t ne1, - int64_t ne2); - - GGML_API struct ggml_tensor * ggml_reshape_4d( - struct ggml_context * ctx, - struct ggml_tensor * a, - int64_t ne0, - int64_t ne1, - int64_t ne2, - int64_t ne3); - - // offset in bytes - GGML_API struct ggml_tensor * ggml_view_1d( - struct ggml_context * ctx, - struct ggml_tensor * a, - int64_t ne0, - size_t offset); - - GGML_API struct ggml_tensor * ggml_view_2d( - struct ggml_context * ctx, - struct ggml_tensor * a, - int64_t ne0, - int64_t ne1, - size_t nb1, // row stride in bytes - size_t offset); - - GGML_API struct ggml_tensor * ggml_view_3d( - struct ggml_context * ctx, - struct ggml_tensor * a, - int64_t ne0, - int64_t ne1, - int64_t ne2, - size_t nb1, // row stride in bytes - size_t nb2, // slice stride in bytes - size_t offset); - - GGML_API struct ggml_tensor * ggml_view_4d( - struct ggml_context * ctx, - struct ggml_tensor * a, - int64_t ne0, - int64_t ne1, - int64_t ne2, - int64_t ne3, - size_t nb1, // row stride in bytes - size_t nb2, // slice stride in bytes - size_t nb3, - size_t offset); - - GGML_API struct ggml_tensor * ggml_permute( - struct ggml_context * ctx, - struct ggml_tensor * a, - int axis0, - int axis1, - int axis2, - int axis3); - - // alias for ggml_permute(ctx, a, 1, 0, 2, 3) - GGML_API struct ggml_tensor * ggml_transpose( - struct ggml_context * ctx, - struct ggml_tensor * a); - - // supports 3D: a->ne[2] == b->ne[1] - GGML_API struct ggml_tensor * ggml_get_rows( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b); - - GGML_API struct ggml_tensor * ggml_get_rows_back( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b, - struct ggml_tensor * c); - - GGML_API struct ggml_tensor * ggml_diag( - struct ggml_context * ctx, - struct ggml_tensor * a); - - // set elements above the diagonal to -INF - GGML_API struct ggml_tensor * ggml_diag_mask_inf( - struct ggml_context * ctx, - struct ggml_tensor * a, - int n_past); - - // in-place, returns view(a) - GGML_API struct ggml_tensor * ggml_diag_mask_inf_inplace( - struct ggml_context * ctx, - struct ggml_tensor * a, - int n_past); - - // set elements above the diagonal to 0 - GGML_API struct ggml_tensor * ggml_diag_mask_zero( - struct ggml_context * ctx, - struct ggml_tensor * a, - int n_past); - - // in-place, returns view(a) - GGML_API struct ggml_tensor * ggml_diag_mask_zero_inplace( - struct ggml_context * ctx, - struct ggml_tensor * a, - int n_past); - - GGML_API struct ggml_tensor * ggml_soft_max( - struct ggml_context * ctx, - struct ggml_tensor * a); - - // in-place, returns view(a) - GGML_API struct ggml_tensor * ggml_soft_max_inplace( - struct ggml_context * ctx, - struct ggml_tensor * a); - - // fused soft_max(a*scale + mask + pos[i]*(ALiBi slope)) - // mask is optional - // pos is required when max_bias > 0.0f - // max_bias = 0.0f for no ALiBi - GGML_API struct ggml_tensor * ggml_soft_max_ext( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * mask, - struct ggml_tensor * pos, - float scale, - float max_bias); - - GGML_API struct ggml_tensor * ggml_soft_max_back( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b); - - // in-place, returns view(a) - GGML_API struct ggml_tensor * ggml_soft_max_back_inplace( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b); - - // rotary position embedding - // if mode & 1 == 1, skip n_past elements (DEPRECATED) - // if mode & 2 == 1, GPT-NeoX style - // if mode & 4 == 1, ChatGLM style - // - // b is an int32 vector with size a->ne[2], it contains the positions - GGML_API struct ggml_tensor * ggml_rope( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b, - int n_dims, - int mode, - int n_ctx); - - // in-place, returns view(a) - GGML_API struct ggml_tensor * ggml_rope_inplace( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b, - int n_dims, - int mode, - int n_ctx); - - // custom RoPE - GGML_API struct ggml_tensor * ggml_rope_custom( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b, - int n_dims, - int mode, - int n_ctx, - int n_orig_ctx, - float freq_base, - float freq_scale, - float ext_factor, - float attn_factor, - float beta_fast, - float beta_slow); - - // in-place, returns view(a) - GGML_API struct ggml_tensor * ggml_rope_custom_inplace( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b, - int n_dims, - int mode, - int n_ctx, - int n_orig_ctx, - float freq_base, - float freq_scale, - float ext_factor, - float attn_factor, - float beta_fast, - float beta_slow); - - // compute correction dims for YaRN RoPE scaling - GGML_CALL void ggml_rope_yarn_corr_dims( - int n_dims, int n_orig_ctx, float freq_base, float beta_fast, float beta_slow, float dims[2]); - - // xPos RoPE, in-place, returns view(a) - GGML_API struct ggml_tensor * ggml_rope_xpos_inplace( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b, - int n_dims, - float base, - bool down); - - // rotary position embedding backward, i.e compute dx from dy - // a - dy - GGML_API struct ggml_tensor * ggml_rope_back( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b, - int n_dims, - int mode, - int n_ctx, - int n_orig_ctx, - float freq_base, - float freq_scale, - float ext_factor, - float attn_factor, - float beta_fast, - float beta_slow, - float xpos_base, - bool xpos_down); - - // alibi position embedding - // in-place, returns view(a) - GGML_DEPRECATED(GGML_API struct ggml_tensor * ggml_alibi( - struct ggml_context * ctx, - struct ggml_tensor * a, - int n_past, - int n_head, - float bias_max), - "use ggml_soft_max_ext instead (will be removed in Mar 2024)"); - - // clamp - // in-place, returns view(a) - GGML_API struct ggml_tensor * ggml_clamp( - struct ggml_context * ctx, - struct ggml_tensor * a, - float min, - float max); - - GGML_API struct ggml_tensor * ggml_im2col( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b, - int s0, - int s1, - int p0, - int p1, - int d0, - int d1, - bool is_2D, - enum ggml_type dst_type); - - GGML_API struct ggml_tensor * ggml_conv_depthwise_2d( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b, - int s0, - int s1, - int p0, - int p1, - int d0, - int d1); - - GGML_API struct ggml_tensor * ggml_conv_1d( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b, - int s0, // stride - int p0, // padding - int d0); // dilation - - // conv_1d with padding = half - // alias for ggml_conv_1d(a, b, s, a->ne[0]/2, d) - GGML_API struct ggml_tensor* ggml_conv_1d_ph( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b, - int s, - int d); - - GGML_API struct ggml_tensor * ggml_conv_transpose_1d( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b, - int s0, - int p0, - int d0); - - GGML_API struct ggml_tensor * ggml_conv_2d( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b, - int s0, - int s1, - int p0, - int p1, - int d0, - int d1); - - - // kernel size is a->ne[0] x a->ne[1] - // stride is equal to kernel size - // padding is zero - // example: - // a: 16 16 3 768 - // b: 1024 1024 3 1 - // res: 64 64 768 1 - // used in sam - GGML_API struct ggml_tensor * ggml_conv_2d_sk_p0( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b); - - // kernel size is a->ne[0] x a->ne[1] - // stride is 1 - // padding is half - // example: - // a: 3 3 256 256 - // b: 64 64 256 1 - // res: 64 64 256 1 - // used in sam - GGML_API struct ggml_tensor * ggml_conv_2d_s1_ph( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b); - - GGML_API struct ggml_tensor * ggml_conv_transpose_2d_p0( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b, - int stride); - - enum ggml_op_pool { - GGML_OP_POOL_MAX, - GGML_OP_POOL_AVG, - GGML_OP_POOL_COUNT, - }; - - GGML_API struct ggml_tensor * ggml_pool_1d( - struct ggml_context * ctx, - struct ggml_tensor * a, - enum ggml_op_pool op, - int k0, // kernel size - int s0, // stride - int p0); // padding - - // the result will have 2*p0 padding for the first dimension - // and 2*p1 padding for the second dimension - GGML_API struct ggml_tensor * ggml_pool_2d( - struct ggml_context * ctx, - struct ggml_tensor * a, - enum ggml_op_pool op, - int k0, - int k1, - int s0, - int s1, - float p0, - float p1); - - // nearest interpolate - // used in stable-diffusion - GGML_API struct ggml_tensor * ggml_upscale( - struct ggml_context * ctx, - struct ggml_tensor * a, - int scale_factor); - - // pad each dimension with zeros: [x, ..., x] -> [x, ..., x, 0, ..., 0] - GGML_API struct ggml_tensor * ggml_pad( - struct ggml_context * ctx, - struct ggml_tensor * a, - int p0, - int p1, - int p2, - int p3); - - // Ref: https://github.com/CompVis/stable-diffusion/blob/main/ldm/modules/diffusionmodules/util.py#L151 - // timesteps: [N,] - // return: [N, dim] - GGML_API struct ggml_tensor * ggml_timestep_embedding( - struct ggml_context * ctx, - struct ggml_tensor * timesteps, - int dim, - int max_period); - - // sort rows - enum ggml_sort_order { - GGML_SORT_ORDER_ASC, - GGML_SORT_ORDER_DESC, - }; - - GGML_API struct ggml_tensor * ggml_argsort( - struct ggml_context * ctx, - struct ggml_tensor * a, - enum ggml_sort_order order); - - GGML_API struct ggml_tensor * ggml_arange( - struct ggml_context * ctx, - float start, - float stop, - float step); - - // top k elements per row - GGML_API struct ggml_tensor * ggml_top_k( - struct ggml_context * ctx, - struct ggml_tensor * a, - int k); - - GGML_API struct ggml_tensor * ggml_flash_attn( - struct ggml_context * ctx, - struct ggml_tensor * q, - struct ggml_tensor * k, - struct ggml_tensor * v, - bool masked); - - GGML_API struct ggml_tensor * ggml_flash_attn_back( - struct ggml_context * ctx, - struct ggml_tensor * q, - struct ggml_tensor * k, - struct ggml_tensor * v, - struct ggml_tensor * d, - bool masked); - - GGML_API struct ggml_tensor * ggml_flash_ff( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b0, - struct ggml_tensor * b1, - struct ggml_tensor * c0, - struct ggml_tensor * c1); - - GGML_API struct ggml_tensor * ggml_ssm_conv( - struct ggml_context * ctx, - struct ggml_tensor * s, - struct ggml_tensor * x, - struct ggml_tensor * c, - struct ggml_tensor * sq); - - GGML_API struct ggml_tensor * ggml_ssm_scan( - struct ggml_context * ctx, - struct ggml_tensor * s, - struct ggml_tensor * x, - struct ggml_tensor * dt, - struct ggml_tensor * A, - struct ggml_tensor * B, - struct ggml_tensor * C, - struct ggml_tensor * sq); - - // partition into non-overlapping windows with padding if needed - // example: - // a: 768 64 64 1 - // w: 14 - // res: 768 14 14 25 - // used in sam - GGML_API struct ggml_tensor * ggml_win_part( - struct ggml_context * ctx, - struct ggml_tensor * a, - int w); - - // reverse of ggml_win_part - // used in sam - GGML_API struct ggml_tensor * ggml_win_unpart( - struct ggml_context * ctx, - struct ggml_tensor * a, - int w0, - int h0, - int w); - - GGML_API struct ggml_tensor * ggml_unary( - struct ggml_context * ctx, - struct ggml_tensor * a, - enum ggml_unary_op op); - - GGML_API struct ggml_tensor * ggml_unary_inplace( - struct ggml_context * ctx, - struct ggml_tensor * a, - enum ggml_unary_op op); - - // used in sam - GGML_API struct ggml_tensor * ggml_get_rel_pos( - struct ggml_context * ctx, - struct ggml_tensor * a, - int qh, - int kh); - - // used in sam - GGML_API struct ggml_tensor * ggml_add_rel_pos( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * pw, - struct ggml_tensor * ph); - - GGML_API struct ggml_tensor * ggml_add_rel_pos_inplace( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * pw, - struct ggml_tensor * ph); - - // custom operators - - typedef void (*ggml_unary_op_f32_t) (const int, float *, const float *); - typedef void (*ggml_binary_op_f32_t)(const int, float *, const float *, const float *); - - typedef void (*ggml_custom1_op_f32_t)(struct ggml_tensor *, const struct ggml_tensor *); - typedef void (*ggml_custom2_op_f32_t)(struct ggml_tensor *, const struct ggml_tensor *, const struct ggml_tensor *); - typedef void (*ggml_custom3_op_f32_t)(struct ggml_tensor *, const struct ggml_tensor *, const struct ggml_tensor *, const struct ggml_tensor *); - - GGML_DEPRECATED(GGML_API struct ggml_tensor * ggml_map_unary_f32( - struct ggml_context * ctx, - struct ggml_tensor * a, - ggml_unary_op_f32_t fun), - "use ggml_map_custom1 instead"); - - GGML_DEPRECATED(GGML_API struct ggml_tensor * ggml_map_unary_inplace_f32( - struct ggml_context * ctx, - struct ggml_tensor * a, - ggml_unary_op_f32_t fun), - "use ggml_map_custom1_inplace instead"); - - GGML_DEPRECATED(GGML_API struct ggml_tensor * ggml_map_binary_f32( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b, - ggml_binary_op_f32_t fun), - "use ggml_map_custom2 instead"); - - GGML_DEPRECATED(GGML_API struct ggml_tensor * ggml_map_binary_inplace_f32( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b, - ggml_binary_op_f32_t fun), - "use ggml_map_custom2_inplace instead"); - - GGML_DEPRECATED(GGML_API struct ggml_tensor * ggml_map_custom1_f32( - struct ggml_context * ctx, - struct ggml_tensor * a, - ggml_custom1_op_f32_t fun), - "use ggml_map_custom1 instead"); - - GGML_DEPRECATED(GGML_API struct ggml_tensor * ggml_map_custom1_inplace_f32( - struct ggml_context * ctx, - struct ggml_tensor * a, - ggml_custom1_op_f32_t fun), - "use ggml_map_custom1_inplace instead"); - - GGML_DEPRECATED(GGML_API struct ggml_tensor * ggml_map_custom2_f32( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b, - ggml_custom2_op_f32_t fun), - "use ggml_map_custom2 instead"); - - GGML_DEPRECATED(GGML_API struct ggml_tensor * ggml_map_custom2_inplace_f32( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b, - ggml_custom2_op_f32_t fun), - "use ggml_map_custom2_inplace instead"); - - GGML_DEPRECATED(GGML_API struct ggml_tensor * ggml_map_custom3_f32( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b, - struct ggml_tensor * c, - ggml_custom3_op_f32_t fun), - "use ggml_map_custom3 instead"); - - GGML_DEPRECATED(GGML_API struct ggml_tensor * ggml_map_custom3_inplace_f32( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b, - struct ggml_tensor * c, - ggml_custom3_op_f32_t fun), - "use ggml_map_custom3_inplace instead"); - - // custom operators v2 - - typedef void (*ggml_custom1_op_t)(struct ggml_tensor * dst , const struct ggml_tensor * a, int ith, int nth, void * userdata); - typedef void (*ggml_custom2_op_t)(struct ggml_tensor * dst , const struct ggml_tensor * a, const struct ggml_tensor * b, int ith, int nth, void * userdata); - typedef void (*ggml_custom3_op_t)(struct ggml_tensor * dst , const struct ggml_tensor * a, const struct ggml_tensor * b, const struct ggml_tensor * c, int ith, int nth, void * userdata); - - #define GGML_N_TASKS_MAX -1 - - GGML_API struct ggml_tensor * ggml_map_custom1( - struct ggml_context * ctx, - struct ggml_tensor * a, - ggml_custom1_op_t fun, - int n_tasks, - void * userdata); - - GGML_API struct ggml_tensor * ggml_map_custom1_inplace( - struct ggml_context * ctx, - struct ggml_tensor * a, - ggml_custom1_op_t fun, - int n_tasks, - void * userdata); - - GGML_API struct ggml_tensor * ggml_map_custom2( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b, - ggml_custom2_op_t fun, - int n_tasks, - void * userdata); - - GGML_API struct ggml_tensor * ggml_map_custom2_inplace( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b, - ggml_custom2_op_t fun, - int n_tasks, - void * userdata); - - GGML_API struct ggml_tensor * ggml_map_custom3( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b, - struct ggml_tensor * c, - ggml_custom3_op_t fun, - int n_tasks, - void * userdata); - - GGML_API struct ggml_tensor * ggml_map_custom3_inplace( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b, - struct ggml_tensor * c, - ggml_custom3_op_t fun, - int n_tasks, - void * userdata); - - // loss function - - GGML_API struct ggml_tensor * ggml_cross_entropy_loss( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b); - - GGML_API struct ggml_tensor * ggml_cross_entropy_loss_back( - struct ggml_context * ctx, - struct ggml_tensor * a, - struct ggml_tensor * b, - struct ggml_tensor * c); - - // - // automatic differentiation - // - - GGML_API void ggml_set_param( - struct ggml_context * ctx, - struct ggml_tensor * tensor); - - - GGML_API void ggml_build_forward_expand (struct ggml_cgraph * cgraph, struct ggml_tensor * tensor); - GGML_API void ggml_build_backward_expand(struct ggml_context * ctx, struct ggml_cgraph * gf, struct ggml_cgraph * gb, bool keep); - - // graph allocation in a context - GGML_API struct ggml_cgraph * ggml_new_graph (struct ggml_context * ctx); // size = GGML_DEFAULT_GRAPH_SIZE, grads = false - GGML_API struct ggml_cgraph * ggml_new_graph_custom (struct ggml_context * ctx, size_t size, bool grads); - GGML_API struct ggml_cgraph * ggml_graph_dup (struct ggml_context * ctx, struct ggml_cgraph * cgraph); - GGML_API struct ggml_cgraph ggml_graph_view (struct ggml_cgraph * cgraph, int i0, int i1); - GGML_API void ggml_graph_cpy (struct ggml_cgraph * src, struct ggml_cgraph * dst); - GGML_API void ggml_graph_reset (struct ggml_cgraph * cgraph); // zero grads - GGML_API void ggml_graph_clear (struct ggml_cgraph * cgraph); - - GGML_API size_t ggml_graph_overhead(void); - GGML_API size_t ggml_graph_overhead_custom(size_t size, bool grads); - - // ggml_graph_plan() has to be called before ggml_graph_compute() - // when plan.work_size > 0, caller must allocate memory for plan.work_data - GGML_API struct ggml_cplan ggml_graph_plan (const struct ggml_cgraph * cgraph, int n_threads /*= GGML_DEFAULT_N_THREADS*/); - GGML_API enum ggml_status ggml_graph_compute ( struct ggml_cgraph * cgraph, struct ggml_cplan * cplan); - // same as ggml_graph_compute() but the work data is allocated as a part of the context - // note: the drawback of this API is that you must have ensured that the context has enough memory for the work data - GGML_API enum ggml_status ggml_graph_compute_with_ctx(struct ggml_context * ctx, struct ggml_cgraph * cgraph, int n_threads); - - GGML_API struct ggml_tensor * ggml_graph_get_tensor(struct ggml_cgraph * cgraph, const char * name); - - GGML_API void ggml_graph_export(const struct ggml_cgraph * cgraph, const char * fname); - GGML_API struct ggml_cgraph * ggml_graph_import(const char * fname, struct ggml_context ** ctx_data, struct ggml_context ** ctx_eval); - - // print info and performance information for the graph - GGML_API void ggml_graph_print(const struct ggml_cgraph * cgraph); - - // dump the graph into a file using the dot format - GGML_API void ggml_graph_dump_dot(const struct ggml_cgraph * gb, const struct ggml_cgraph * gf, const char * filename); - - // build gradient checkpointing backward graph gb for gf using provided checkpoints - // gb_tmp will contain original backward graph with rewritten backward process nodes, - // but without the second forward pass nodes. - GGML_API void ggml_build_backward_gradient_checkpointing( - struct ggml_context * ctx, - struct ggml_cgraph * gf, - struct ggml_cgraph * gb, - struct ggml_cgraph * gb_tmp, - struct ggml_tensor * * checkpoints, - int n_checkpoints); - // - // optimization - // - - // optimization methods - enum ggml_opt_type { - GGML_OPT_TYPE_ADAM, - GGML_OPT_TYPE_LBFGS, - }; - - // linesearch methods - enum ggml_linesearch { - GGML_LINESEARCH_DEFAULT = 1, - - GGML_LINESEARCH_BACKTRACKING_ARMIJO = 0, - GGML_LINESEARCH_BACKTRACKING_WOLFE = 1, - GGML_LINESEARCH_BACKTRACKING_STRONG_WOLFE = 2, - }; - - // optimization return values - enum ggml_opt_result { - GGML_OPT_RESULT_OK = 0, - GGML_OPT_RESULT_DID_NOT_CONVERGE, - GGML_OPT_RESULT_NO_CONTEXT, - GGML_OPT_RESULT_INVALID_WOLFE, - GGML_OPT_RESULT_FAIL, - GGML_OPT_RESULT_CANCEL, - - GGML_LINESEARCH_FAIL = -128, - GGML_LINESEARCH_MINIMUM_STEP, - GGML_LINESEARCH_MAXIMUM_STEP, - GGML_LINESEARCH_MAXIMUM_ITERATIONS, - GGML_LINESEARCH_INVALID_PARAMETERS, - }; - - typedef void (*ggml_opt_callback)(void * data, int accum_step, float * sched, bool * cancel); - typedef void (*ggml_log_callback)(enum ggml_log_level level, const char * text, void * user_data); - - // optimization parameters - // - // see ggml.c (ggml_opt_default_params) for default values - // - struct ggml_opt_params { - enum ggml_opt_type type; - - size_t graph_size; - - int n_threads; - - // delta-based convergence test - // - // if past == 0 - disabled - // if past > 0: - // stop if |f(x) - f(x_past)| < delta * max(1, |f(x)|) - // - int past; - float delta; - - // maximum number of iterations without improvement - // - // if 0 - disabled - // if > 0: - // assume convergence if no cost improvement in this number of iterations - // - int max_no_improvement; - - bool print_forward_graph; - bool print_backward_graph; - - int n_gradient_accumulation; - - // ADAM parameters - struct { - int n_iter; - - float sched; // schedule multiplier (fixed, decay or warmup) - float decay; // weight decay for AdamW, use 0.0f to disable - int decay_min_ndim; // minimum number of tensor dimension to apply weight decay - float alpha; // learning rate - float beta1; - float beta2; - float eps; // epsilon for numerical stability - float eps_f; // epsilon for convergence test - float eps_g; // epsilon for convergence test - float gclip; // gradient clipping - } adam; - - // LBFGS parameters - struct { - int m; // number of corrections to approximate the inv. Hessian - int n_iter; - int max_linesearch; - - float eps; // convergence tolerance - float ftol; // line search tolerance - float wolfe; - float min_step; - float max_step; - - enum ggml_linesearch linesearch; - } lbfgs; - }; - - struct ggml_opt_context { - struct ggml_context * ctx; - struct ggml_opt_params params; - - int iter; - int64_t nx; // number of parameter elements - - bool just_initialized; - - float loss_before; - float loss_after; - - struct { - struct ggml_tensor * g; // current gradient - struct ggml_tensor * m; // first moment - struct ggml_tensor * v; // second moment - struct ggml_tensor * pf; // past function values - float fx_best; - float fx_prev; - int n_no_improvement; - } adam; - - struct { - struct ggml_tensor * x; // current parameters - struct ggml_tensor * xp; // previous parameters - struct ggml_tensor * g; // current gradient - struct ggml_tensor * gp; // previous gradient - struct ggml_tensor * d; // search direction - struct ggml_tensor * pf; // past function values - struct ggml_tensor * lmal; // the L-BFGS memory alpha - struct ggml_tensor * lmys; // the L-BFGS memory ys - struct ggml_tensor * lms; // the L-BFGS memory s - struct ggml_tensor * lmy; // the L-BFGS memory y - float fx_best; - float step; - int j; - int k; - int end; - int n_no_improvement; - } lbfgs; - }; - - GGML_API struct ggml_opt_params ggml_opt_default_params(enum ggml_opt_type type); - - // optimize the function defined by the tensor f - GGML_API enum ggml_opt_result ggml_opt( - struct ggml_context * ctx, - struct ggml_opt_params params, - struct ggml_tensor * f); - - // initialize optimizer context - GGML_API void ggml_opt_init( - struct ggml_context * ctx, - struct ggml_opt_context * opt, - struct ggml_opt_params params, - int64_t nx); - - // continue optimizing the function defined by the tensor f - GGML_API enum ggml_opt_result ggml_opt_resume( - struct ggml_context * ctx, - struct ggml_opt_context * opt, - struct ggml_tensor * f); - - // continue optimizing the function defined by the tensor f - GGML_API enum ggml_opt_result ggml_opt_resume_g( - struct ggml_context * ctx, - struct ggml_opt_context * opt, - struct ggml_tensor * f, - struct ggml_cgraph * gf, - struct ggml_cgraph * gb, - ggml_opt_callback callback, - void * callback_data); - - // - // tensor flags - // - GGML_API void ggml_set_input(struct ggml_tensor * tensor); - GGML_API void ggml_set_output(struct ggml_tensor * tensor); - - // - // quantization - // - - // - ggml_quantize_init can be called multiple times with the same type - // it will only initialize the quantization tables for the first call or after ggml_quantize_free - // automatically called by ggml_quantize_chunk for convenience - // - // - ggml_quantize_free will free any memory allocated by ggml_quantize_init - // call this at the end of the program to avoid memory leaks - // - // note: these are thread-safe - // - GGML_API void ggml_quantize_init(enum ggml_type type); - GGML_API void ggml_quantize_free(void); - - // some quantization type cannot be used without an importance matrix - GGML_API bool ggml_quantize_requires_imatrix(enum ggml_type type); - - // calls ggml_quantize_init internally (i.e. can allocate memory) - GGML_API size_t ggml_quantize_chunk( - enum ggml_type type, - const float * src, - void * dst, - int64_t start, - int64_t nrows, - int64_t n_per_row, - const float * imatrix); - - // - // gguf - // - - enum gguf_type { - GGUF_TYPE_UINT8 = 0, - GGUF_TYPE_INT8 = 1, - GGUF_TYPE_UINT16 = 2, - GGUF_TYPE_INT16 = 3, - GGUF_TYPE_UINT32 = 4, - GGUF_TYPE_INT32 = 5, - GGUF_TYPE_FLOAT32 = 6, - GGUF_TYPE_BOOL = 7, - GGUF_TYPE_STRING = 8, - GGUF_TYPE_ARRAY = 9, - GGUF_TYPE_UINT64 = 10, - GGUF_TYPE_INT64 = 11, - GGUF_TYPE_FLOAT64 = 12, - GGUF_TYPE_COUNT, // marks the end of the enum - }; - - struct gguf_context; - - struct gguf_init_params { - bool no_alloc; - - // if not NULL, create a ggml_context and allocate the tensor data in it - struct ggml_context ** ctx; - }; - - GGML_API struct gguf_context * gguf_init_empty(void); - GGML_API struct gguf_context * gguf_init_from_file(const char * fname, struct gguf_init_params params); - //GGML_API struct gguf_context * gguf_init_from_buffer(..); - - GGML_API void gguf_free(struct gguf_context * ctx); - - GGML_API const char * gguf_type_name(enum gguf_type type); - - GGML_API int gguf_get_version (const struct gguf_context * ctx); - GGML_API size_t gguf_get_alignment (const struct gguf_context * ctx); - GGML_API size_t gguf_get_data_offset(const struct gguf_context * ctx); - GGML_API void * gguf_get_data (const struct gguf_context * ctx); - - GGML_API int gguf_get_n_kv(const struct gguf_context * ctx); - GGML_API int gguf_find_key(const struct gguf_context * ctx, const char * key); - GGML_API const char * gguf_get_key (const struct gguf_context * ctx, int key_id); - - GGML_API enum gguf_type gguf_get_kv_type (const struct gguf_context * ctx, int key_id); - GGML_API enum gguf_type gguf_get_arr_type(const struct gguf_context * ctx, int key_id); - - // will abort if the wrong type is used for the key - GGML_API uint8_t gguf_get_val_u8 (const struct gguf_context * ctx, int key_id); - GGML_API int8_t gguf_get_val_i8 (const struct gguf_context * ctx, int key_id); - GGML_API uint16_t gguf_get_val_u16 (const struct gguf_context * ctx, int key_id); - GGML_API int16_t gguf_get_val_i16 (const struct gguf_context * ctx, int key_id); - GGML_API uint32_t gguf_get_val_u32 (const struct gguf_context * ctx, int key_id); - GGML_API int32_t gguf_get_val_i32 (const struct gguf_context * ctx, int key_id); - GGML_API float gguf_get_val_f32 (const struct gguf_context * ctx, int key_id); - GGML_API uint64_t gguf_get_val_u64 (const struct gguf_context * ctx, int key_id); - GGML_API int64_t gguf_get_val_i64 (const struct gguf_context * ctx, int key_id); - GGML_API double gguf_get_val_f64 (const struct gguf_context * ctx, int key_id); - GGML_API bool gguf_get_val_bool(const struct gguf_context * ctx, int key_id); - GGML_API const char * gguf_get_val_str (const struct gguf_context * ctx, int key_id); - GGML_API const void * gguf_get_val_data(const struct gguf_context * ctx, int key_id); - GGML_API int gguf_get_arr_n (const struct gguf_context * ctx, int key_id); - GGML_API const void * gguf_get_arr_data(const struct gguf_context * ctx, int key_id); - GGML_API const char * gguf_get_arr_str (const struct gguf_context * ctx, int key_id, int i); - - GGML_API int gguf_get_n_tensors (const struct gguf_context * ctx); - GGML_API int gguf_find_tensor (const struct gguf_context * ctx, const char * name); - GGML_API size_t gguf_get_tensor_offset(const struct gguf_context * ctx, int i); - GGML_API char * gguf_get_tensor_name (const struct gguf_context * ctx, int i); - GGML_API enum ggml_type gguf_get_tensor_type (const struct gguf_context * ctx, int i); - - // removes key if it exists - GGML_API void gguf_remove_key(struct gguf_context * ctx, const char * key); - - // overrides existing values or adds a new one - GGML_API void gguf_set_val_u8 (struct gguf_context * ctx, const char * key, uint8_t val); - GGML_API void gguf_set_val_i8 (struct gguf_context * ctx, const char * key, int8_t val); - GGML_API void gguf_set_val_u16 (struct gguf_context * ctx, const char * key, uint16_t val); - GGML_API void gguf_set_val_i16 (struct gguf_context * ctx, const char * key, int16_t val); - GGML_API void gguf_set_val_u32 (struct gguf_context * ctx, const char * key, uint32_t val); - GGML_API void gguf_set_val_i32 (struct gguf_context * ctx, const char * key, int32_t val); - GGML_API void gguf_set_val_f32 (struct gguf_context * ctx, const char * key, float val); - GGML_API void gguf_set_val_u64 (struct gguf_context * ctx, const char * key, uint64_t val); - GGML_API void gguf_set_val_i64 (struct gguf_context * ctx, const char * key, int64_t val); - GGML_API void gguf_set_val_f64 (struct gguf_context * ctx, const char * key, double val); - GGML_API void gguf_set_val_bool(struct gguf_context * ctx, const char * key, bool val); - GGML_API void gguf_set_val_str (struct gguf_context * ctx, const char * key, const char * val); - GGML_API void gguf_set_arr_data(struct gguf_context * ctx, const char * key, enum gguf_type type, const void * data, int n); - GGML_API void gguf_set_arr_str (struct gguf_context * ctx, const char * key, const char ** data, int n); - - // set or add KV pairs from another context - GGML_API void gguf_set_kv(struct gguf_context * ctx, struct gguf_context * src); - - // manage tensor info - GGML_API void gguf_add_tensor(struct gguf_context * ctx, const struct ggml_tensor * tensor); - GGML_API void gguf_set_tensor_type(struct gguf_context * ctx, const char * name, enum ggml_type type); - GGML_API void gguf_set_tensor_data(struct gguf_context * ctx, const char * name, const void * data, size_t size); - - // writing gguf files can be done in 2 ways: - // - // - write the entire gguf_context to a binary file in a single pass: - // - // gguf_write_to_file(ctx, fname); - // - // - first prepare a file with a placeholder for the meta data, write the tensor data, then write the meta data: - // - // FILE * f = fopen(fname, "wb"); - // fseek(f, gguf_get_meta_size(ctx), SEEK_SET); - // fwrite(f, ...); - // void * data = gguf_meta_get_meta_data(ctx); - // fseek(f, 0, SEEK_SET); - // fwrite(f, data, gguf_get_meta_size(ctx)); - // free(data); - // fclose(f); - // - - // write the entire context to a binary file - GGML_API void gguf_write_to_file(const struct gguf_context * ctx, const char * fname, bool only_meta); - - // get the size in bytes of the meta data (header, kv pairs, tensor info) including padding - GGML_API size_t gguf_get_meta_size(const struct gguf_context * ctx); - GGML_API void gguf_get_meta_data(const struct gguf_context * ctx, void * data); - - // - // system info - // - - GGML_API int ggml_cpu_has_avx (void); - GGML_API int ggml_cpu_has_avx_vnni (void); - GGML_API int ggml_cpu_has_avx2 (void); - GGML_API int ggml_cpu_has_avx512 (void); - GGML_API int ggml_cpu_has_avx512_vbmi(void); - GGML_API int ggml_cpu_has_avx512_vnni(void); - GGML_API int ggml_cpu_has_fma (void); - GGML_API int ggml_cpu_has_neon (void); - GGML_API int ggml_cpu_has_arm_fma (void); - GGML_API int ggml_cpu_has_metal (void); - GGML_API int ggml_cpu_has_f16c (void); - GGML_API int ggml_cpu_has_fp16_va (void); - GGML_API int ggml_cpu_has_wasm_simd (void); - GGML_API int ggml_cpu_has_blas (void); - GGML_API int ggml_cpu_has_cuda (void); - GGML_API int ggml_cpu_has_clblast (void); - GGML_API int ggml_cpu_has_vulkan (void); - GGML_API int ggml_cpu_has_kompute (void); - GGML_API int ggml_cpu_has_gpublas (void); - GGML_API int ggml_cpu_has_sse3 (void); - GGML_API int ggml_cpu_has_ssse3 (void); - GGML_API int ggml_cpu_has_sycl (void); - GGML_API int ggml_cpu_has_vsx (void); - GGML_API int ggml_cpu_has_matmul_int8(void); - - // - // Internal types and functions exposed for tests and benchmarks - // - -#ifdef __cplusplus -// restrict not standard in C++ -#define GGML_RESTRICT -#else -#define GGML_RESTRICT restrict -#endif - typedef void (*ggml_to_float_t) (const void * GGML_RESTRICT x, float * GGML_RESTRICT y, int64_t k); - typedef void (*ggml_from_float_t)(const float * GGML_RESTRICT x, void * GGML_RESTRICT y, int64_t k); - typedef void (*ggml_vec_dot_t) (int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT x, size_t bx, - const void * GGML_RESTRICT y, size_t by, int nrc); - - typedef struct { - const char * type_name; - int blck_size; - size_t type_size; - bool is_quantized; - ggml_to_float_t to_float; - ggml_from_float_t from_float; - ggml_from_float_t from_float_reference; - ggml_vec_dot_t vec_dot; - enum ggml_type vec_dot_type; - int64_t nrows; // number of rows to process simultaneously; - } ggml_type_traits_t; - - GGML_API ggml_type_traits_t ggml_internal_get_type_traits(enum ggml_type type); - -#ifdef __cplusplus -} -#endif diff --git a/ggml_vk_generate_shaders.py b/ggml_vk_generate_shaders.py deleted file mode 100644 index 5dd70096317..00000000000 --- a/ggml_vk_generate_shaders.py +++ /dev/null @@ -1,2777 +0,0 @@ -#!/usr/bin/env python - -import argparse -import asyncio -import os -import sys -from tempfile import gettempdir, NamedTemporaryFile - -shader_f32 = """ -#define FLOAT_TYPE float -""" -shader_f16 = """ -#extension GL_EXT_shader_explicit_arithmetic_types_float16 : require -#define FLOAT_TYPE float16_t -""" -shader_int8_ext = """ -#extension GL_EXT_shader_explicit_arithmetic_types_int8 : require -""" - -# Type-specific defines -shader_f32_defines = """ -#define QUANT_K 1 -#define QUANT_R 1 - -#define A_TYPE float -""" -shader_f16_defines = """ -#define QUANT_K 1 -#define QUANT_R 1 - -#define A_TYPE float16_t -""" -shader_q4_0_defines = """ -#define QUANT_K 32 -#define QUANT_R 2 - -struct block_q4_0 -{ - float16_t d; - uint8_t qs[16]; -}; - -#define A_TYPE block_q4_0 -""" -shader_q4_1_defines = """ -#define QUANT_K 32 -#define QUANT_R 2 - -struct block_q4_1 -{ - float16_t d; - float16_t m; - uint8_t qs[16]; -}; - -#define A_TYPE block_q4_1 -""" -shader_q5_0_defines = """ -#extension GL_EXT_shader_explicit_arithmetic_types_int16 : require -#define QUANT_K 32 -#define QUANT_R 2 - -struct block_q5_0 -{ - float16_t d; - uint16_t qh[2]; - uint8_t qs[16]; -}; - -#define A_TYPE block_q5_0 -""" -shader_q5_1_defines = """ -#extension GL_EXT_shader_explicit_arithmetic_types_int16 : require -#define QUANT_K 32 -#define QUANT_R 2 - -struct block_q5_1 -{ - float16_t d; - float16_t m; - uint qh; - uint8_t qs[16]; -}; - -#define A_TYPE block_q5_1 -""" -shader_q8_0_defines = """ -#define QUANT_K 32 -#define QUANT_R 1 - -struct block_q8_0 -{ - float16_t d; - int8_t qs[32]; -}; - -#define A_TYPE block_q8_0 -""" - -# K-quants -shader_q2_K_defines = """ -#define QUANT_K 256 - -struct block_q2_K -{ - uint8_t scales[QUANT_K/16]; - uint8_t qs[QUANT_K/4]; - f16vec2 d; -}; - -#define A_TYPE block_q2_K -""" -shader_q3_K_defines = """ -#define QUANT_K 256 - -struct block_q3_K -{ - uint8_t hmask[QUANT_K/8]; - uint8_t qs[QUANT_K/4]; - uint8_t scales[12]; - float16_t d; -}; - -#define A_TYPE block_q3_K -""" -shader_q4_K_defines = """ -#define QUANT_K 256 - -struct block_q4_K -{ - f16vec2 d; - uint8_t scales[3*QUANT_K/64]; - uint8_t qs[QUANT_K/2]; -}; - -#define A_TYPE block_q4_K -""" -shader_q5_K_defines = """ -#define QUANT_K 256 - -struct block_q5_K -{ - f16vec2 d; - uint8_t scales[12]; - uint8_t qh[QUANT_K/8]; - uint8_t qs[QUANT_K/2]; -}; - -#define A_TYPE block_q5_K -""" -shader_q6_K_defines = """ -#define QUANT_K 256 - -struct block_q6_K -{ - uint8_t ql[QUANT_K/2]; - uint8_t qh[QUANT_K/4]; - int8_t scales[QUANT_K/16]; - float16_t d; -}; - -#define A_TYPE block_q6_K -""" - -# Dequant functions -shader_float_dequant_func = """ -#define DEQUANT_FUNC vec2 v = vec2(ib, ib); // data_a[ib], data_a[ib + 1]); -""" - -shader_q4_0_dequant_func = """ -#define DEQUANT_FUNC const float d = float(data_a[ib].d); \ -const uint vui = uint(data_a[ib].qs[iqs]); \ -vec2 v = vec2(vui & 0xF, vui >> 4); \ -v = (v - 8.0f)*d; -""" - -shader_q4_1_dequant_func = """ -#define DEQUANT_FUNC const float d = float(data_a[ib].d); \ -const float m = float(data_a[ib].m); \ -const uint vui = uint(data_a[ib].qs[iqs]); \ -vec2 v = vec2(vui & 0xF, vui >> 4); \ -v = v*d + m; -""" - -shader_q5_0_dequant_func = """ -#define DEQUANT_FUNC const float d = float(data_a[ib].d); \ -const uint uint_qh = uint(data_a[ib].qh[1]) << 16 | data_a[ib].qh[0]; \ -const ivec2 qh = ivec2(((uint_qh >> iqs) << 4) & 0x10, (uint_qh >> (iqs + 12)) & 0x10); \ -const uint vui = uint(data_a[ib].qs[iqs]); \ -vec2 v = vec2((vui & 0xF) | qh.x, (vui >> 4) | qh.y); \ -v = (v - 16.0f) * d; -""" - -shader_q5_1_dequant_func = """ -#define DEQUANT_FUNC const float d = float(data_a[ib].d); \ -const float m = float(data_a[ib].m); \ -const uint uint_qh = data_a[ib].qh; \ -const ivec2 qh = ivec2(((uint_qh >> iqs) << 4) & 0x10, (uint_qh >> (iqs + 12)) & 0x10); \ -const uint vui = uint(data_a[ib].qs[iqs]); \ -vec2 v = vec2((vui & 0xF) | qh.x, (vui >> 4) | qh.y); \ -v = v*d + m; -""" - -shader_q8_0_dequant_func = """ -#define DEQUANT_FUNC const float d = float(data_a[ib].d); \ -vec2 v = vec2(int(data_a[ib].qs[iqs]), int(data_a[ib].qs[iqs + 1])); \ -v = v * d; -""" - -# MULMAT - -mulmat_head = """#version 450 - -#extension GL_EXT_control_flow_attributes : enable -#extension GL_EXT_shader_16bit_storage : require - -#ifndef LOAD_VEC_A -#define LOAD_VEC_A 1 -#endif -#ifndef LOAD_VEC_B -#define LOAD_VEC_B 1 -#endif -""" - -mulmat_body1 = """ -layout(local_size_x_id = 0, local_size_y = 1, local_size_z = 1) in; - -layout (binding = 0) readonly buffer A {A_TYPE data_a[];}; -layout (binding = 1) readonly buffer B {B_TYPE data_b[];}; -layout (binding = 2) writeonly buffer D {D_TYPE data_d[];}; - -layout (push_constant) uniform parameter -{ - uint M; - uint N; - uint K; - uint stride_a; - uint stride_b; - uint stride_d; - uint k_split; - - uint ne02; - uint ne12; - uint broadcast2; - uint broadcast3; - - uint batch_stride_a; - uint batch_stride_b; - uint batch_stride_d; -} p; - -layout (constant_id = 1) const uint BM = 64; -layout (constant_id = 2) const uint BN = 64; -layout (constant_id = 3) const uint BK = 16; // Assumed to be 32 if working with a quant -layout (constant_id = 4) const uint WM = 32; -layout (constant_id = 5) const uint WN = 32; -layout (constant_id = 6) const uint WMITER = 2; -layout (constant_id = 7) const uint TM = 4; -layout (constant_id = 8) const uint TN = 2; -layout (constant_id = 9) const uint WARP = 32; - -shared FLOAT_TYPE buf_a[BM * (BK+1)]; -shared FLOAT_TYPE buf_b[BN * (BK+1)]; - -void main() { - const uint i13 = gl_GlobalInvocationID.z / p.ne12; - const uint i12 = gl_GlobalInvocationID.z % p.ne12; - - const uint i03 = i13 / p.broadcast3; - const uint i02 = i12 / p.broadcast2; - - const uint batch_idx_a = i03 * p.ne02 + i02; - - const uint blocks_m = (p.M + BM - 1) / BM; - const uint ir = gl_WorkGroupID.x % blocks_m; - const uint ik = gl_WorkGroupID.x / blocks_m; - const uint ic = gl_WorkGroupID.y; - - const uint warp_i = gl_LocalInvocationID.x / WARP; - const uint warp_r = warp_i % (BM / WM); - const uint warp_c = warp_i / (BM / WM); - - const uint WNITER = (WM * WN) / (WARP * TM * TN * WMITER); - const uint WSUBM = WM / WMITER; - const uint WSUBN = WN / WNITER; - - const uint tiw = gl_LocalInvocationID.x % WARP; - const uint tiwr = tiw % (WSUBM / TM); - const uint tiwc = tiw / (WSUBM / TM); - - const uint loadr_a = gl_LocalInvocationID.x % (BK / LOAD_VEC_A); - const uint loadc_a = gl_LocalInvocationID.x / (BK / LOAD_VEC_A); - const uint loadr_b = gl_LocalInvocationID.x % (BK / LOAD_VEC_B); - const uint loadc_b = gl_LocalInvocationID.x / (BK / LOAD_VEC_B); - - const uint loadstride_a = gl_WorkGroupSize.x * LOAD_VEC_A / BK; - const uint loadstride_b = gl_WorkGroupSize.x * LOAD_VEC_B / BK; - - const uint start_k = ik * p.k_split; - const uint end_k = min(p.K, (ik + 1) * p.k_split); - - uint pos_a = (batch_idx_a * p.batch_stride_a + ir * BM * p.stride_a + start_k) / LOAD_VEC_A; - uint pos_b = (gl_GlobalInvocationID.z * p.batch_stride_b + ic * BN * p.stride_b + start_k) / LOAD_VEC_B; - - float sums[WMITER * TM * WNITER * TN]; - FLOAT_TYPE cache_a[WMITER * TM]; - FLOAT_TYPE cache_b[WNITER * TN]; - - [[unroll]] for (uint i = 0; i < WMITER*TM*WNITER*TN; i++) { - sums[i] = 0.0f; - } - - [[unroll]] for (uint block = start_k; block < end_k; block += BK) { - [[unroll]] for (uint l = 0; l < BM; l += loadstride_a) {""" - -mulmat_load_scalar = """ -#if LOAD_VEC_A == 8 - const uint idx = pos_a + (loadc_a + l) * p.stride_a / LOAD_VEC_A + loadr_a; - const uint buf_idx = (loadc_a + l) * (BK+1) + loadr_a * LOAD_VEC_A; - buf_a[buf_idx ] = FLOAT_TYPE(data_a[idx][0].x); - buf_a[buf_idx + 1] = FLOAT_TYPE(data_a[idx][0].y); - buf_a[buf_idx + 2] = FLOAT_TYPE(data_a[idx][0].z); - buf_a[buf_idx + 3] = FLOAT_TYPE(data_a[idx][0].w); - buf_a[buf_idx + 4] = FLOAT_TYPE(data_a[idx][1].x); - buf_a[buf_idx + 5] = FLOAT_TYPE(data_a[idx][1].y); - buf_a[buf_idx + 6] = FLOAT_TYPE(data_a[idx][1].z); - buf_a[buf_idx + 7] = FLOAT_TYPE(data_a[idx][1].w); -#elif LOAD_VEC_A == 4 - const uint idx = pos_a + (loadc_a + l) * p.stride_a / LOAD_VEC_A + loadr_a; - const uint buf_idx = (loadc_a + l) * (BK+1) + loadr_a * LOAD_VEC_A; - buf_a[buf_idx ] = FLOAT_TYPE(data_a[idx].x); - buf_a[buf_idx + 1] = FLOAT_TYPE(data_a[idx].y); - buf_a[buf_idx + 2] = FLOAT_TYPE(data_a[idx].z); - buf_a[buf_idx + 3] = FLOAT_TYPE(data_a[idx].w); -#else - if (ir * BM + loadc_a + l < p.M && block + loadr_a < end_k) { - buf_a[(loadc_a + l) * (BK+1) + loadr_a] = FLOAT_TYPE(data_a[pos_a + (loadc_a + l) * p.stride_a + loadr_a]); - } else { - buf_a[(loadc_a + l) * (BK+1) + loadr_a] = FLOAT_TYPE(0.0f); - } -#endif -""" - -mulmat_load_q4_0 = """ - const uint idx = pos_a + (loadc_a + l) * p.stride_a / LOAD_VEC_A + loadr_a; - const uint buf_idx = (loadc_a + l) * (BK+1) + loadr_a; - - const uint ib = idx / 16; - const uint iqs = idx & 0xF; - - const float d = float(data_a[ib].d); - const uint vui = uint(data_a[ib].qs[iqs]); - const vec2 v = (vec2(vui & 0xF, vui >> 4) - 8.0f) * d; - - buf_a[buf_idx ] = FLOAT_TYPE(v.x); - buf_a[buf_idx + 16] = FLOAT_TYPE(v.y);""" - -mulmat_load_q4_1 = """ - const uint idx = pos_a + (loadc_a + l) * p.stride_a / LOAD_VEC_A + loadr_a; - const uint buf_idx = (loadc_a + l) * (BK+1) + loadr_a; - - const uint ib = idx / 16; - const uint iqs = idx & 0xF; - - const float d = float(data_a[ib].d); - const float m = float(data_a[ib].m); - const uint vui = uint(data_a[ib].qs[iqs]); - const vec2 v = vec2(vui & 0xF, vui >> 4) * d + m; - - buf_a[buf_idx ] = FLOAT_TYPE(v.x); - buf_a[buf_idx + 16] = FLOAT_TYPE(v.y);""" - -mulmat_load_q5_0 = """ - const uint idx = pos_a + (loadc_a + l) * p.stride_a / LOAD_VEC_A + loadr_a; - const uint buf_idx = (loadc_a + l) * (BK+1) + loadr_a; - - const uint ib = idx / 16; - const uint iqs = idx & 0xF; - - const float d = float(data_a[ib].d); - const uint uint_qh = uint(data_a[ib].qh[1]) << 16 | data_a[ib].qh[0]; - const ivec2 qh = ivec2(((uint_qh >> iqs) << 4) & 0x10, (uint_qh >> (iqs + 12)) & 0x10); - const uint vui = uint(data_a[ib].qs[iqs]); - const vec2 v = (vec2((vui & 0xF) | qh.x, (vui >> 4) | qh.y) - 16.0f) * d; - - buf_a[buf_idx ] = FLOAT_TYPE(v.x); - buf_a[buf_idx + 16] = FLOAT_TYPE(v.y);""" - -mulmat_load_q5_1 = """ - const uint idx = pos_a + (loadc_a + l) * p.stride_a / LOAD_VEC_A + loadr_a; - const uint buf_idx = (loadc_a + l) * (BK+1) + loadr_a; - - const uint ib = idx / 16; - const uint iqs = idx & 0xF; - - const float d = float(data_a[ib].d); - const float m = float(data_a[ib].m); - const uint uint_qh = data_a[ib].qh; - const ivec2 qh = ivec2(((uint_qh >> iqs) << 4) & 0x10, (uint_qh >> (iqs + 12)) & 0x10); - const uint vui = uint(data_a[ib].qs[iqs]); - const vec2 v = vec2((vui & 0xF) | qh.x, (vui >> 4) | qh.y) * d + m; - - buf_a[buf_idx ] = FLOAT_TYPE(v.x); - buf_a[buf_idx + 16] = FLOAT_TYPE(v.y);""" - -mulmat_load_q8_0 = """ - const uint idx = pos_a + (loadc_a + l) * p.stride_a / LOAD_VEC_A + loadr_a; - const uint buf_idx = (loadc_a + l) * (BK+1) + loadr_a * LOAD_VEC_A; - - const uint ib = idx / 16; - const uint iqs = (idx & 0xF) * 2; - - const float d = float(data_a[ib].d); - const vec2 v = vec2(int(data_a[ib].qs[iqs]), int(data_a[ib].qs[iqs + 1])) * d; - - buf_a[buf_idx ] = FLOAT_TYPE(v.x); - buf_a[buf_idx + 1] = FLOAT_TYPE(v.y);""" - - -mulmat_load_q2_K = """ - const uint idx = pos_a + (loadc_a + l) * p.stride_a / LOAD_VEC_A + loadr_a; - const uint buf_idx = (loadc_a + l) * (BK+1) + loadr_a * LOAD_VEC_A; - - const uint ib = idx / 128; // 2 values per idx - const uint iqs = idx % 128; // 0..127 - - const uint qsi = (iqs / 64) * 32 + (iqs % 16) * 2; // 0,2,4..30 - const uint scalesi = iqs / 8; // 0..15 - const uint qsshift = ((iqs % 64) / 16) * 2; // 0,2,4,6 - - const uvec2 qs = uvec2(data_a[ib].qs[qsi], data_a[ib].qs[qsi + 1]); - const uint scales = data_a[ib].scales[scalesi]; - const vec2 d = vec2(data_a[ib].d); - - const vec2 v = d.x * float(scales & 0xF) * vec2((qs >> qsshift) & 3) - d.y * float(scales >> 4); - - buf_a[buf_idx ] = FLOAT_TYPE(v.x); - buf_a[buf_idx + 1] = FLOAT_TYPE(v.y);""" - -mulmat_load_q3_K = """ - const uint idx = pos_a + (loadc_a + l) * p.stride_a / LOAD_VEC_A + loadr_a; - const uint buf_idx = (loadc_a + l) * (BK+1) + loadr_a * LOAD_VEC_A; - - const uint ib = idx / 128; // 2 values per idx - const uint iqs = idx % 128; // 0..127 - - const uint n = iqs / 64; // 0,1 - const uint qsi = n * 32 + (iqs % 16) * 2; // 0,2,4..62 - const uint hmi = (iqs % 16) * 2; // 0,2,4..30 - const uint j = (iqs % 64) / 4; // 0..3 - const uint is = iqs / 8; // 0..15 - const uint halfsplit = ((iqs % 64) / 16); // 0,1,2,3 - const uint qsshift = halfsplit * 2; // 0,2,4,6 - const uint m = 1 << (4 * n + halfsplit); // 1,2,4,8,16,32,64,128 - - const int8_t us = int8_t(is < 4 ? (data_a[ib].scales[is-0] & 0xF) | (((data_a[ib].scales[is+8] >> 0) & 3) << 4) : - is < 8 ? (data_a[ib].scales[is-0] & 0xF) | (((data_a[ib].scales[is+4] >> 2) & 3) << 4) : - is < 12 ? (data_a[ib].scales[is-8] >> 4) | (((data_a[ib].scales[is+0] >> 4) & 3) << 4) : - (data_a[ib].scales[is-8] >> 4) | (((data_a[ib].scales[is-4] >> 6) & 3) << 4)); - const float dl = float(data_a[ib].d) * float(us - 32); - - buf_a[buf_idx ] = FLOAT_TYPE(dl * float(int8_t((data_a[ib].qs[qsi ] >> qsshift) & 3) - (((data_a[ib].hmask[hmi ] & m) != 0) ? 0 : 4))); - buf_a[buf_idx + 1] = FLOAT_TYPE(dl * float(int8_t((data_a[ib].qs[qsi + 1] >> qsshift) & 3) - (((data_a[ib].hmask[hmi + 1] & m) != 0) ? 0 : 4)));""" - -mulmat_load_q4_K = """ - const uint idx = pos_a + (loadc_a + l) * p.stride_a / LOAD_VEC_A + loadr_a; - const uint buf_idx = (loadc_a + l) * (BK+1) + loadr_a * LOAD_VEC_A; - - const uint ib = idx / 128; // 2 values per idx - const uint iqs = idx % 128; // 0..127 - - const uint n = iqs / 32; // 0,1,2,3 - const uint b = (iqs % 32) / 16; // 0,1 - const uint is = 2 * n + b; // 0..7 - const uint qsi = n * 32 + (iqs % 16) * 2; // 0,2,4..126 - - const vec2 loadd = vec2(data_a[ib].d); - - uint8_t sc; - uint8_t mbyte; - if (is < 4) { - sc = uint8_t(data_a[ib].scales[is ] & 63); - mbyte = uint8_t(data_a[ib].scales[is + 4] & 63); - } else { - sc = uint8_t((data_a[ib].scales[is + 4] & 0xF) | ((data_a[ib].scales[is - 4] >> 6) << 4)); - mbyte = uint8_t((data_a[ib].scales[is + 4] >> 4) | ((data_a[ib].scales[is ] >> 6) << 4)); - } - const float d = loadd.x * sc; - const float m = loadd.y * mbyte; - - buf_a[buf_idx ] = FLOAT_TYPE(d * float((data_a[ib].qs[qsi ] >> (b * 4)) & 0xF) - m); - buf_a[buf_idx + 1] = FLOAT_TYPE(d * float((data_a[ib].qs[qsi + 1] >> (b * 4)) & 0xF) - m);""" - -mulmat_load_q5_K = """ - const uint idx = pos_a + (loadc_a + l) * p.stride_a / LOAD_VEC_A + loadr_a; - const uint buf_idx = (loadc_a + l) * (BK+1) + loadr_a * LOAD_VEC_A; - - const uint ib = idx / 128; // 2 values per idx - const uint iqs = idx % 128; // 0..127 - - const uint n = iqs / 32; // 0,1,2,3 - const uint b = (iqs % 32) / 16; // 0,1 - const uint is = 2 * n + b; // 0..7 - const uint qsi = n * 32 + (iqs % 16) * 2; // 0,2,4..126 - const uint qhi = (iqs % 16) * 2; // 0,2,4..30 - - const uint8_t hm = uint8_t(1 << (iqs / 16)); - - const vec2 loadd = vec2(data_a[ib].d); - - uint8_t sc; - uint8_t mbyte; - if (is < 4) { - sc = uint8_t(data_a[ib].scales[is ] & 63); - mbyte = uint8_t(data_a[ib].scales[is + 4] & 63); - } else { - sc = uint8_t((data_a[ib].scales[is + 4] & 0xF) | ((data_a[ib].scales[is - 4] >> 6) << 4)); - mbyte = uint8_t((data_a[ib].scales[is + 4] >> 4) | ((data_a[ib].scales[is ] >> 6) << 4)); - } - const float d = loadd.x * sc; - const float m = loadd.y * mbyte; - - buf_a[buf_idx ] = FLOAT_TYPE(d * (float((data_a[ib].qs[qsi ] >> (b * 4)) & 0xF) + float((data_a[ib].qh[qhi ] & hm) != 0 ? 16 : 0)) - m); - buf_a[buf_idx + 1] = FLOAT_TYPE(d * (float((data_a[ib].qs[qsi + 1] >> (b * 4)) & 0xF) + float((data_a[ib].qh[qhi + 1] & hm) != 0 ? 16 : 0)) - m);""" - -mulmat_load_q6_K = """ - const uint idx = pos_a + (loadc_a + l) * p.stride_a / LOAD_VEC_A + loadr_a; - const uint buf_idx = (loadc_a + l) * (BK+1) + loadr_a * LOAD_VEC_A; - - const uint ib = idx / 128; // 2 values per idx - const uint iqs = idx % 128; // 0..127 - - const uint n = iqs / 64; // 0,1 - const uint b = (iqs % 64) / 32; // 0,1 - const uint is_b = (iqs % 16) / 8; // 0,1 - const uint qhshift = ((iqs % 64) / 16) * 2; // 0,2,4,6 - const uint is = 8 * n + qhshift + is_b; // 0..15 - const uint qsi = n * 64 + (iqs % 32) * 2; // 0,2,4..126 - const uint qhi = n * 32 + (iqs % 16) * 2; // 0,2,4..62 - - const float dscale = float(data_a[ib].d) * float(data_a[ib].scales[is]); - - buf_a[buf_idx ] = FLOAT_TYPE(dscale * float(int8_t(((data_a[ib].ql[qsi ] >> (b * 4)) & 0xF) | (((data_a[ib].qh[qhi ] >> qhshift) & 3) << 4)) - 32)); - buf_a[buf_idx + 1] = FLOAT_TYPE(dscale * float(int8_t(((data_a[ib].ql[qsi + 1] >> (b * 4)) & 0xF) | (((data_a[ib].qh[qhi + 1] >> qhshift) & 3) << 4)) - 32));""" - -mulmat_body2 = """ - } - [[unroll]] for (uint l = 0; l < BN; l += loadstride_b) { -#if LOAD_VEC_B == 8 - const uint idx = pos_b + (loadc_b + l) * p.stride_b / LOAD_VEC_B + loadr_b; - const uint buf_idx = (loadc_b + l) * (BK+1) + loadr_b * LOAD_VEC_B; - buf_b[buf_idx + 0] = FLOAT_TYPE(data_b[idx][0].x); - buf_b[buf_idx + 1] = FLOAT_TYPE(data_b[idx][0].y); - buf_b[buf_idx + 2] = FLOAT_TYPE(data_b[idx][0].z); - buf_b[buf_idx + 3] = FLOAT_TYPE(data_b[idx][0].w); - buf_b[buf_idx + 4] = FLOAT_TYPE(data_b[idx][1].x); - buf_b[buf_idx + 5] = FLOAT_TYPE(data_b[idx][1].y); - buf_b[buf_idx + 6] = FLOAT_TYPE(data_b[idx][1].z); - buf_b[buf_idx + 7] = FLOAT_TYPE(data_b[idx][1].w); -#elif LOAD_VEC_B == 4 - const uint idx = pos_b + (loadc_b + l) * p.stride_b / LOAD_VEC_B + loadr_b; - const uint buf_idx = (loadc_b + l) * (BK+1) + loadr_b * LOAD_VEC_B; - buf_b[buf_idx + 0] = FLOAT_TYPE(data_b[idx].x); - buf_b[buf_idx + 1] = FLOAT_TYPE(data_b[idx].y); - buf_b[buf_idx + 2] = FLOAT_TYPE(data_b[idx].z); - buf_b[buf_idx + 3] = FLOAT_TYPE(data_b[idx].w); -#else - if (ic * BN + loadc_b + l < p.N && block + loadr_b < end_k) { - buf_b[(loadc_b + l) * (BK+1) + loadr_b] = FLOAT_TYPE(data_b[pos_b + (loadc_b + l) * p.stride_b + loadr_b]); - } else { - buf_b[(loadc_b + l) * (BK+1) + loadr_b] = FLOAT_TYPE(0.0f); - } -#endif - } - - barrier(); - - pos_a += BK / LOAD_VEC_A; - pos_b += BK / LOAD_VEC_B; - - for (uint i = 0; i < BK; i++) { - // Load from shared into cache - [[unroll]] for (uint wsir = 0; wsir < WMITER; wsir++) { - [[unroll]] for (uint j = 0; j < TM; j++) { - cache_a[wsir * TM + j] = buf_a[(warp_r * WM + wsir * WSUBM + tiwr * TM + j) * (BK+1) + i]; - } - } - [[unroll]] for (uint wsic = 0; wsic < WNITER; wsic++) { - [[unroll]] for (uint j = 0; j < TN; j++) { - cache_b[wsic * TN + j] = buf_b[(warp_c * WN + wsic * WSUBN + tiwc * TN + j) * (BK+1) + i]; - } - } - - [[unroll]] for (uint wsic = 0; wsic < WNITER; wsic++) { - [[unroll]] for (uint wsir = 0; wsir < WMITER; wsir++) { - [[unroll]] for (uint cc = 0; cc < TN; cc++) { - [[unroll]] for (uint cr = 0; cr < TM; cr++) { - sums[(wsic * TN + cc) * (WMITER * TM) + wsir * TM + cr] += float(cache_a[wsir * TM + cr]) * float(cache_b[wsic * TN + cc]); - } - } - } - } - } - - barrier(); - } - - const uint dr = ir * BM + warp_r * WM; - const uint dc = ic * BN + warp_c * WN; - - const uint offsets = gl_GlobalInvocationID.z * p.batch_stride_d + ik * p.batch_stride_d * gl_NumWorkGroups.z; - - [[unroll]] for (uint wsic = 0; wsic < WNITER; wsic++) { - [[unroll]] for (uint wsir = 0; wsir < WMITER; wsir++) { - - const uint dr_warp = dr + wsir * WSUBM + tiwr * TM; - const uint dc_warp = dc + wsic * WSUBN + tiwc * TN; - [[unroll]] for (uint cc = 0; cc < TN; cc++) { - [[unroll]] for (uint cr = 0; cr < TM; cr++) { - if (dr_warp + cr < p.M && dc_warp + cc < p.N) { - data_d[offsets + (dc_warp + cc) * p.stride_d + dr_warp + cr] = D_TYPE(sums[(wsic * TN + cc) * (WMITER * TM) + wsir * TM + cr]); - } - } - } - } - } -} -""" - -mulmat_split_k_reduce_src = """#version 450 - -#extension GL_EXT_control_flow_attributes : enable - -layout(local_size_x = 256, local_size_y = 1, local_size_z = 1) in; - -layout (binding = 0) readonly buffer A {float data_a[];}; -layout (binding = 1) writeonly buffer D {float data_d[];}; - -layout (push_constant) uniform parameter { - uint ne; - uint k_num; -} p; - -void main() { - const uint idx = gl_GlobalInvocationID.x; - - if (idx >= p.ne) { - return; - } - - float result = 0.0f; - - [[unroll]] for (uint i = 0; i < p.k_num; i++) { - result += data_a[i * p.ne + idx]; - } - - data_d[idx] = result; -} -""" - -# DEQUANT SHADER -dequant_head = """#version 450 - -#extension GL_EXT_control_flow_attributes : require -#extension GL_EXT_shader_16bit_storage : require - -layout (push_constant) uniform parameter -{ - uint M; - uint K; - uint stride_a; - uint stride_b; - uint nel; -} p; -""" - -dequant_f32_body = """ -layout(local_size_x = 256, local_size_y = 1, local_size_z = 1) in; - -layout (binding = 0) readonly buffer A {float data_a[];}; -layout (binding = 1) writeonly buffer D {D_TYPE data_b[];}; - -void main() { - const uint i = gl_GlobalInvocationID.x * 16; - - if (i >= p.nel) { - return; - } - - [[unroll]] for (uint l = 0; l < 16; l++) { - data_b[i + l] = D_TYPE(data_a[i + l]); - } -} -""" - -dequant_q4_0_body = """ -layout(local_size_x = 256, local_size_y = 1, local_size_z = 1) in; - -layout (binding = 0) readonly buffer A {block_q4_0 data_a[];}; -layout (binding = 1) writeonly buffer D {D_TYPE data_b[];}; - -void main() { - const uint i = gl_WorkGroupID.x * 4 + gl_LocalInvocationID.x / 64; - - const uint tid = gl_LocalInvocationID.x % 64; - const uint il = tid/32; - const uint ir = tid%32; - const uint ib = 32*i + ir; - if (ib >= p.nel / 32) { - return; - } - - const uint b_idx = 1024*i + 32*ir + 8*il; - - const float d = float(data_a[ib].d); - const float dm = -8.0f * d; - - const uint q_idx = 8*il; - - [[unroll]] for (uint l = 0; l < 8; ++l) { - data_b[b_idx + l + 0] = D_TYPE(d * (data_a[ib].qs[q_idx + l] & 0xF) + dm); - data_b[b_idx + l + 16] = D_TYPE(d * (data_a[ib].qs[q_idx + l] >> 4) + dm); - } -} -""" - -dequant_q4_1_body = """ -layout(local_size_x = 256, local_size_y = 1, local_size_z = 1) in; - -layout (binding = 0) readonly buffer A {block_q4_1 data_a[];}; -layout (binding = 1) writeonly buffer D {D_TYPE data_b[];}; - -void main() { - const uint i = gl_WorkGroupID.x * 4 + gl_LocalInvocationID.x / 64; - - const uint tid = gl_LocalInvocationID.x % 64; - const uint il = tid/32; - const uint ir = tid%32; - const uint ib = 32*i + ir; - if (ib >= p.nel / 32) { - return; - } - - const uint b_idx = 1024*i + 32*ir + 8*il; - - const float d = float(data_a[ib].d); - const float m = float(data_a[ib].m); - - const uint q_idx = 8*il; - - [[unroll]] for (uint l = 0; l < 8; ++l) { - data_b[b_idx + l + 0] = D_TYPE(d * (data_a[ib].qs[q_idx + l] & 0xF) + m); - data_b[b_idx + l + 16] = D_TYPE(d * (data_a[ib].qs[q_idx + l] >> 4) + m); - } -} -""" - -dequant_q5_0_body = """ -layout(local_size_x = 256, local_size_y = 1, local_size_z = 1) in; - -layout (binding = 0) readonly buffer A {block_q5_0 data_a[];}; -layout (binding = 1) writeonly buffer D {D_TYPE data_b[];}; - -void main() { - const uint i = gl_WorkGroupID.x * 4 + gl_LocalInvocationID.x / 64; - - const uint tid = gl_LocalInvocationID.x % 64; - const uint il = tid/32; - const uint ir = tid%32; - const uint ib = 32*i + ir; - if (ib >= p.nel / 32) { - return; - } - - const uint b_idx = 1024*i + 32*ir + 8*il; - - const float d = float(data_a[ib].d); - const uint qh = uint(data_a[ib].qh[1]) << 16 | data_a[ib].qh[0]; - - const uint q_idx = 8*il; - - [[unroll]] for (uint l = 0; l < 8; ++l) { - const uint iqs = q_idx + l; - const uint vui = uint(data_a[ib].qs[iqs]); - data_b[b_idx + l + 0] = D_TYPE(d * (((vui & 0xF) | (((qh >> iqs) << 4) & 0x10)) - 16.0f)); - data_b[b_idx + l + 16] = D_TYPE(d * (((vui >> 4) | ((qh >> (iqs + 12)) & 0x10)) - 16.0f)); - } -} -""" - -dequant_q5_1_body = """ -layout(local_size_x = 256, local_size_y = 1, local_size_z = 1) in; - -layout (binding = 0) readonly buffer A {block_q5_1 data_a[];}; -layout (binding = 1) writeonly buffer D {D_TYPE data_b[];}; - -void main() { - const uint i = gl_WorkGroupID.x * 4 + gl_LocalInvocationID.x / 64; - - const uint tid = gl_LocalInvocationID.x % 64; - const uint il = tid/32; - const uint ir = tid%32; - const uint ib = 32*i + ir; - if (ib >= p.nel / 32) { - return; - } - - const uint b_idx = 1024*i + 32*ir + 8*il; - - const float d = float(data_a[ib].d); - const float m = float(data_a[ib].m); - const uint qh = data_a[ib].qh; - - const uint q_idx = 8*il; - - [[unroll]] for (uint l = 0; l < 8; ++l) { - const uint iqs = q_idx + l; - const uint vui = uint(data_a[ib].qs[iqs]); - data_b[b_idx + l + 0] = D_TYPE(d * (((vui & 0xF) | (((qh >> iqs) << 4) & 0x10))) + m); - data_b[b_idx + l + 16] = D_TYPE(d * (((vui >> 4) | ((qh >> (iqs + 12)) & 0x10))) + m); - } -} -""" - -dequant_q8_0_body = """ -layout(local_size_x = 256, local_size_y = 1, local_size_z = 1) in; - -layout (binding = 0) readonly buffer A {block_q8_0 data_a[];}; -layout (binding = 1) writeonly buffer D {D_TYPE data_b[];}; - -void main() { - const uint i = gl_WorkGroupID.x * 4 + gl_LocalInvocationID.x / 64; - - const uint tid = gl_LocalInvocationID.x % 64; - const uint il = tid/32; - const uint ir = tid%32; - const uint ib = 32*i + ir; - if (ib >= p.nel / 32) { - return; - } - - const uint b_idx = 1024*i + 32*ir + 16*il; - - const float d = float(data_a[ib].d); - - const uint q_idx = 16*il; - - [[unroll]] for (uint l = 0; l < 16; l += 2) { - data_b[b_idx + l ] = D_TYPE(d * data_a[ib].qs[q_idx + l ]); - data_b[b_idx + l + 1] = D_TYPE(d * data_a[ib].qs[q_idx + l + 1]); - } -} -""" - -# K-quants -dequant_q2_K_body = """ -layout(local_size_x = 64, local_size_y = 1, local_size_z = 1) in; - -layout (binding = 0) readonly buffer A {A_TYPE data_a[];}; -layout (binding = 1) writeonly buffer D {D_TYPE data_b[];}; - -void main() { - [[unroll]] for (uint wgy = 0; wgy < 256; wgy++) { - const uint i = gl_WorkGroupID.x * 256 + wgy; - if (i >= p.M * p.K / QUANT_K) { - return; - } - - const uint tid = gl_LocalInvocationID.x; - const uint ip = tid / 32; - const uint il = tid - 32 * ip; - const uint is = 8 * ip + il / 16; - - const uint y_idx = i * QUANT_K + 128 * ip + il; - - const uint ql_idx = 32 * ip + il; - const uint8_t qs = data_a[i].qs[32 * ip + il]; - - FLOAT_TYPE dall = FLOAT_TYPE(data_a[i].d.x); - FLOAT_TYPE dmin = FLOAT_TYPE(data_a[i].d.y); - data_b[y_idx + 0] = D_TYPE(dall * FLOAT_TYPE((data_a[i].scales[is+0] & 0xF) * ((qs >> 0) & 3)) - dmin * FLOAT_TYPE(data_a[i].scales[is+0] >> 4)); - data_b[y_idx + 32] = D_TYPE(dall * FLOAT_TYPE((data_a[i].scales[is+2] & 0xF) * ((qs >> 2) & 3)) - dmin * FLOAT_TYPE(data_a[i].scales[is+2] >> 4)); - data_b[y_idx + 64] = D_TYPE(dall * FLOAT_TYPE((data_a[i].scales[is+4] & 0xF) * ((qs >> 4) & 3)) - dmin * FLOAT_TYPE(data_a[i].scales[is+4] >> 4)); - data_b[y_idx + 96] = D_TYPE(dall * FLOAT_TYPE((data_a[i].scales[is+6] & 0xF) * ((qs >> 6) & 3)) - dmin * FLOAT_TYPE(data_a[i].scales[is+6] >> 4)); - } -} -""" -dequant_q3_K_body = """ -layout(local_size_x = 64, local_size_y = 1, local_size_z = 1) in; - -layout (binding = 0) readonly buffer A {A_TYPE data_a[];}; -layout (binding = 1) writeonly buffer D {D_TYPE data_b[];}; - -void main() { - [[unroll]] for (uint wgy = 0; wgy < 256; wgy++) { - const uint i = uint(gl_WorkGroupID.x * 256 + wgy); - if (i >= p.M * p.K / QUANT_K) { - return; - } - - const uint r = gl_LocalInvocationID.x / 4; - const uint tid = r / 2; - const uint is0 = r % 2; - const uint l0 = 16 * is0 + 4 * (gl_LocalInvocationID.x % 4); - const uint n = tid / 4; - const uint j = tid - 4*n; - - const uint8_t m = uint8_t(1 << (4*n + j)); - const uint is = 8*n + 2*j + is0; - const uint shift = 2*j; - - const int8_t us = int8_t(is < 4 ? (data_a[i].scales[is-0] & 0xF) | (((data_a[i].scales[is+8] >> 0) & 3) << 4) : - is < 8 ? (data_a[i].scales[is-0] & 0xF) | (((data_a[i].scales[is+4] >> 2) & 3) << 4) : - is < 12 ? (data_a[i].scales[is-8] >> 4) | (((data_a[i].scales[is+0] >> 4) & 3) << 4) : - (data_a[i].scales[is-8] >> 4) | (((data_a[i].scales[is-4] >> 6) & 3) << 4)); - const FLOAT_TYPE d_all = FLOAT_TYPE(data_a[i].d); - const FLOAT_TYPE dl = d_all * FLOAT_TYPE(us - 32); - - const uint y_idx = i * QUANT_K + 128 * n + 32 * j; - const uint qs_idx = 32*n; - - for (uint l = l0; l < l0 + 4; ++l) { - data_b[y_idx + l] = D_TYPE(dl * FLOAT_TYPE(int8_t((data_a[i].qs[qs_idx + l] >> shift) & 3) - (((data_a[i].hmask[l] & m) != 0) ? 0 : 4))); - } - } -} -""" -dequant_q4_K_body = """ -layout(local_size_x = 32, local_size_y = 1, local_size_z = 1) in; - -layout (binding = 0) readonly buffer A {A_TYPE data_a[];}; -layout (binding = 1) writeonly buffer D {D_TYPE data_b[];}; - -void main() { - [[unroll]] for (uint wgy = 0; wgy < 256; wgy++) { - const uint i = gl_WorkGroupID.x * 256 + wgy; - if (i >= p.M * p.K / QUANT_K) { - return; - } - - const uint tid = gl_LocalInvocationID.x; - const uint il = tid / 8; - const uint ir = tid % 8; - const uint is = 2 * il; - const uint n = 4; - - const FLOAT_TYPE dall = FLOAT_TYPE(data_a[i].d.x); - const FLOAT_TYPE dmin = FLOAT_TYPE(data_a[i].d.y); - - const uint y_idx = i * QUANT_K + 64 * il + n * ir; - const uint qs_idx = 32*il + n * ir; - - uint8_t sc; - uint8_t m; - if (is < 4) { - sc = uint8_t(data_a[i].scales[is] & 63); - m = uint8_t(data_a[i].scales[is + 4] & 63); - } else { - sc = uint8_t((data_a[i].scales[is + 4] & 0xF) | ((data_a[i].scales[is - 4] >> 6) << 4)); - m = uint8_t((data_a[i].scales[is + 4] >> 4) | ((data_a[i].scales[is ] >> 6) << 4)); - } - const FLOAT_TYPE d1 = dall * sc; - const FLOAT_TYPE m1 = dmin * m; - - if (is < 4) { - sc = uint8_t(data_a[i].scales[is + 1] & 63); - m = uint8_t(data_a[i].scales[is + 5] & 63); - } else { - sc = uint8_t((data_a[i].scales[is + 5] & 0xF) | ((data_a[i].scales[is - 3] >> 6) << 4)); - m = uint8_t((data_a[i].scales[is + 5] >> 4) | ((data_a[i].scales[is + 1] >> 6) << 4)); - } - const FLOAT_TYPE d2 = dall * sc; - const FLOAT_TYPE m2 = dmin * m; - - [[unroll]] for (uint l = 0; l < n; ++l) { - data_b[y_idx + l ] = D_TYPE(d1 * FLOAT_TYPE(data_a[i].qs[qs_idx + l] & 0xF) - m1); - data_b[y_idx + l + 32] = D_TYPE(d2 * FLOAT_TYPE(data_a[i].qs[qs_idx + l] >> 4) - m2); - } - } -} -""" -dequant_q5_K_body = """ -layout(local_size_x = 64, local_size_y = 1, local_size_z = 1) in; - -layout (binding = 0) readonly buffer A {A_TYPE data_a[];}; -layout (binding = 1) writeonly buffer D {D_TYPE data_b[];}; - -void main() { - [[unroll]] for (uint wgy = 0; wgy < 256; wgy++) { - const uint i = gl_WorkGroupID.x * 256 + wgy; - if (i >= p.M * p.K / QUANT_K) { - return; - } - - const uint tid = gl_LocalInvocationID.x; - const uint il = tid / 16; - const uint ir = tid % 16; - const uint is = 2 * il; - - const FLOAT_TYPE dall = FLOAT_TYPE(data_a[i].d.x); - const FLOAT_TYPE dmin = FLOAT_TYPE(data_a[i].d.y); - - const uint y_idx = i * QUANT_K + 64 * il + 2 * ir; - const uint qs_idx = 32*il + 2 * ir; - const uint qh_idx = 2 * ir; - - uint8_t sc; - uint8_t m; - if (is < 4) { - sc = uint8_t(data_a[i].scales[is] & 63); - m = uint8_t(data_a[i].scales[is + 4] & 63); - } else { - sc = uint8_t((data_a[i].scales[is + 4] & 0xF) | ((data_a[i].scales[is - 4] >> 6) << 4)); - m = uint8_t((data_a[i].scales[is + 4] >> 4) | ((data_a[i].scales[is ] >> 6) << 4)); - } - const FLOAT_TYPE d1 = dall * sc; - const FLOAT_TYPE m1 = dmin * m; - - if (is < 4) { - sc = uint8_t(data_a[i].scales[is + 1] & 63); - m = uint8_t(data_a[i].scales[is + 5] & 63); - } else { - sc = uint8_t((data_a[i].scales[is + 5] & 0xF) | ((data_a[i].scales[is - 3] >> 6) << 4)); - m = uint8_t((data_a[i].scales[is + 5] >> 4) | ((data_a[i].scales[is + 1] >> 6) << 4)); - } - const FLOAT_TYPE d2 = dall * sc; - const FLOAT_TYPE m2 = dmin * m; - - const uint8_t hm1 = uint8_t(1 << (2 * il )); - const uint8_t hm2 = uint8_t(1 << (2 * il + 1)); - data_b[y_idx ] = D_TYPE(d1 * FLOAT_TYPE((data_a[i].qs[qs_idx ] & 0xF) + (((data_a[i].qh[qh_idx ] & hm1) != 0) ? 16 : 0)) - m1); - data_b[y_idx + 1] = D_TYPE(d1 * FLOAT_TYPE((data_a[i].qs[qs_idx + 1] & 0xF) + (((data_a[i].qh[qh_idx + 1] & hm1) != 0) ? 16 : 0)) - m1); - data_b[y_idx + 32] = D_TYPE(d2 * FLOAT_TYPE((data_a[i].qs[qs_idx ] >> 4) + (((data_a[i].qh[qh_idx ] & hm2) != 0) ? 16 : 0)) - m2); - data_b[y_idx + 33] = D_TYPE(d2 * FLOAT_TYPE((data_a[i].qs[qs_idx + 1] >> 4) + (((data_a[i].qh[qh_idx + 1] & hm2) != 0) ? 16 : 0)) - m2); - } -} -""" -dequant_q6_K_body = """ -layout(local_size_x = 64, local_size_y = 1, local_size_z = 1) in; - -layout (binding = 0) readonly buffer A {A_TYPE data_a[];}; -layout (binding = 1) writeonly buffer D {D_TYPE data_b[];}; - -void main() { - [[unroll]] for (uint wgy = 0; wgy < 256; wgy++) { - const uint i = gl_WorkGroupID.x * 256 + wgy; - if (i >= p.M * p.K / QUANT_K) { - return; - } - const uint tid = gl_LocalInvocationID.x; - const uint ip = tid / 32; - const uint il = tid - 32 * ip; - const uint is = 8 * ip + il / 16; - - const uint y_idx = i * QUANT_K + 128 * ip + il; - - const uint ql_idx = 64 * ip + il; - const uint8_t qh = data_a[i].qh[32 * ip + il]; - - const FLOAT_TYPE d = FLOAT_TYPE(data_a[i].d); - - data_b[y_idx + 0] = D_TYPE(d * FLOAT_TYPE(data_a[i].scales[is + 0] * (int8_t((data_a[i].ql[ql_idx + 0] & 0xF) | (((qh >> 0) & 3) << 4)) - 32))); - data_b[y_idx + 32] = D_TYPE(d * FLOAT_TYPE(data_a[i].scales[is + 2] * (int8_t((data_a[i].ql[ql_idx + 32] & 0xF) | (((qh >> 2) & 3) << 4)) - 32))); - data_b[y_idx + 64] = D_TYPE(d * FLOAT_TYPE(data_a[i].scales[is + 4] * (int8_t((data_a[i].ql[ql_idx + 0] >> 4) | (((qh >> 4) & 3) << 4)) - 32))); - data_b[y_idx + 96] = D_TYPE(d * FLOAT_TYPE(data_a[i].scales[is + 6] * (int8_t((data_a[i].ql[ql_idx + 32] >> 4) | (((qh >> 6) & 3) << 4)) - 32))); - } -} -""" - -# Mul Mat Vec -mul_mat_vec_head = """#version 450 - -#extension GL_EXT_control_flow_attributes : enable -#extension GL_EXT_shader_16bit_storage : require -#extension GL_EXT_shader_8bit_storage : require - -layout (push_constant) uniform parameter -{ - uint ncols; - uint b_offset; - uint d_offset; -} p; -""" - -mul_mat_vec_body = """ -layout(local_size_x_id = 0, local_size_y = 1, local_size_z = 1) in; - -layout (binding = 0) readonly buffer A {A_TYPE data_a[];}; -layout (binding = 1) readonly buffer B {B_TYPE data_b[];}; -layout (binding = 2) writeonly buffer D {D_TYPE dst[];}; - -layout (constant_id = 0) const uint BLOCK_SIZE = 32; - -shared FLOAT_TYPE tmp[BLOCK_SIZE]; - -void main() { - const uint row = gl_WorkGroupID.x; - const uint tid = gl_LocalInvocationID.x; - - const uint y_offset = QUANT_R == 1 ? 1 : QUANT_K/2; - - tmp[tid] = FLOAT_TYPE(0.0f); - - [[unroll]] for (uint i = 0; i < p.ncols/BLOCK_SIZE; i += 2) { - const uint col = i*BLOCK_SIZE + 2*tid; - const uint ib = (row*p.ncols + col)/QUANT_K; // block index - const uint iqs = (col%QUANT_K)/QUANT_R; // quant index - const uint iybs = col - col%QUANT_K; // y block start index - - DEQUANT_FUNC - - // matrix multiplication - tmp[tid] += FLOAT_TYPE(v.x) * FLOAT_TYPE(data_b[p.b_offset + iybs + iqs + 0]) + - FLOAT_TYPE(v.y) * FLOAT_TYPE(data_b[p.b_offset + iybs + iqs + y_offset]); - } - - // sum up partial sums and write back result - barrier(); - [[unroll]] for (uint s = BLOCK_SIZE/2; s > 0; s >>= 1) { - if (tid < s) { - tmp[tid] += tmp[tid + s]; - } - barrier(); - } - if (tid == 0) { - dst[p.d_offset + row] = D_TYPE(tmp[0]); - } -} -""" - -# K-quants -mul_mat_vec_q2_K_body = """ -layout(local_size_x = 32, local_size_y = 1, local_size_z = 1) in; - -layout (binding = 0) readonly buffer A {A_TYPE data_a[];}; -layout (binding = 1) readonly buffer B {B_TYPE data_b[];}; -layout (binding = 2) writeonly buffer D {D_TYPE dst[];}; - -shared FLOAT_TYPE tmp[32]; - -void main() { - const uint row = gl_WorkGroupID.x; - - const uint num_blocks_per_row = p.ncols / QUANT_K; - const uint ib0 = row*num_blocks_per_row; - - const uint tid = gl_LocalInvocationID.x/K_QUANTS_PER_ITERATION; // 0...31 or 0...16 - const uint ix = gl_LocalInvocationID.x%K_QUANTS_PER_ITERATION; // 0 or 0, 1 - - const uint step = 16/K_QUANTS_PER_ITERATION; // 16 or 8 - - const uint v_im = tid/step; // 0 or 1. 0 computes 0..., 1 computes 128... - const uint v_in = tid - step*v_im; // 0...15 or 0...7 - - const uint l0 = K_QUANTS_PER_ITERATION*v_in; // 0...15 - const uint q_offset = 32*v_im + l0; - const uint s_offset = 8*v_im; - const uint y_offset = 128*v_im + l0; - - tmp[16 * ix + tid] = FLOAT_TYPE(0.0); // partial sum for thread in warp - - [[unroll]] for (uint i = ix; i < num_blocks_per_row; i += K_QUANTS_PER_ITERATION) { - const uint y_idx = i * QUANT_K + y_offset; - - const FLOAT_TYPE dall = FLOAT_TYPE(data_a[ib0 + i].d.x); - const FLOAT_TYPE dmin = FLOAT_TYPE(data_a[ib0 + i].d.y); - - FLOAT_TYPE sum1 = FLOAT_TYPE(0.0); - FLOAT_TYPE sum2 = FLOAT_TYPE(0.0); - for (int l = 0; l < K_QUANTS_PER_ITERATION; ++l) { - sum1 += FLOAT_TYPE(data_b[p.b_offset + y_idx + l + 0]) * FLOAT_TYPE(data_a[ib0 + i].scales[s_offset + 0] & 0xF) * FLOAT_TYPE((data_a[ib0 + i].qs[q_offset + l + 0] >> 0) & 3) - + FLOAT_TYPE(data_b[p.b_offset + y_idx + l + 16]) * FLOAT_TYPE(data_a[ib0 + i].scales[s_offset + 1] & 0xF) * FLOAT_TYPE((data_a[ib0 + i].qs[q_offset + l +16] >> 0) & 3) - + FLOAT_TYPE(data_b[p.b_offset + y_idx + l + 32]) * FLOAT_TYPE(data_a[ib0 + i].scales[s_offset + 2] & 0xF) * FLOAT_TYPE((data_a[ib0 + i].qs[q_offset + l + 0] >> 2) & 3) - + FLOAT_TYPE(data_b[p.b_offset + y_idx + l + 48]) * FLOAT_TYPE(data_a[ib0 + i].scales[s_offset + 3] & 0xF) * FLOAT_TYPE((data_a[ib0 + i].qs[q_offset + l +16] >> 2) & 3) - + FLOAT_TYPE(data_b[p.b_offset + y_idx + l + 64]) * FLOAT_TYPE(data_a[ib0 + i].scales[s_offset + 4] & 0xF) * FLOAT_TYPE((data_a[ib0 + i].qs[q_offset + l + 0] >> 4) & 3) - + FLOAT_TYPE(data_b[p.b_offset + y_idx + l + 80]) * FLOAT_TYPE(data_a[ib0 + i].scales[s_offset + 5] & 0xF) * FLOAT_TYPE((data_a[ib0 + i].qs[q_offset + l +16] >> 4) & 3) - + FLOAT_TYPE(data_b[p.b_offset + y_idx + l + 96]) * FLOAT_TYPE(data_a[ib0 + i].scales[s_offset + 6] & 0xF) * FLOAT_TYPE((data_a[ib0 + i].qs[q_offset + l + 0] >> 6) & 3) - + FLOAT_TYPE(data_b[p.b_offset + y_idx + l +112]) * FLOAT_TYPE(data_a[ib0 + i].scales[s_offset + 7] & 0xF) * FLOAT_TYPE((data_a[ib0 + i].qs[q_offset + l +16] >> 6) & 3); - sum2 += FLOAT_TYPE(data_b[p.b_offset + y_idx + l + 0]) * FLOAT_TYPE((data_a[ib0 + i].scales[s_offset + 0] >> 4) & 0xF) - + FLOAT_TYPE(data_b[p.b_offset + y_idx + l + 16]) * FLOAT_TYPE((data_a[ib0 + i].scales[s_offset + 1] >> 4) & 0xF) - + FLOAT_TYPE(data_b[p.b_offset + y_idx + l + 32]) * FLOAT_TYPE((data_a[ib0 + i].scales[s_offset + 2] >> 4) & 0xF) - + FLOAT_TYPE(data_b[p.b_offset + y_idx + l + 48]) * FLOAT_TYPE((data_a[ib0 + i].scales[s_offset + 3] >> 4) & 0xF) - + FLOAT_TYPE(data_b[p.b_offset + y_idx + l + 64]) * FLOAT_TYPE((data_a[ib0 + i].scales[s_offset + 4] >> 4) & 0xF) - + FLOAT_TYPE(data_b[p.b_offset + y_idx + l + 80]) * FLOAT_TYPE((data_a[ib0 + i].scales[s_offset + 5] >> 4) & 0xF) - + FLOAT_TYPE(data_b[p.b_offset + y_idx + l + 96]) * FLOAT_TYPE((data_a[ib0 + i].scales[s_offset + 6] >> 4) & 0xF) - + FLOAT_TYPE(data_b[p.b_offset + y_idx + l +112]) * FLOAT_TYPE((data_a[ib0 + i].scales[s_offset + 7] >> 4) & 0xF); - } - tmp[16 * ix + tid] += dall * sum1 - dmin * sum2; - } - - // sum up partial sums and write back result - barrier(); - [[unroll]] for (uint s = 16; s > 0; s >>= 1) { - if (tid < s) { - tmp[tid] += tmp[tid + s]; - } - barrier(); - } - if (tid == 0) { - dst[p.d_offset + row] = D_TYPE(tmp[0]); - } -} -""" -mul_mat_vec_q3_K_body = """ -layout(local_size_x = 32, local_size_y = 1, local_size_z = 1) in; - -layout (binding = 0) readonly buffer A {A_TYPE data_a[];}; -layout (binding = 1) readonly buffer B {B_TYPE data_b[];}; -layout (binding = 2) writeonly buffer D {D_TYPE dst[];}; - -shared FLOAT_TYPE tmp[32]; - -void main() { - const uint row = gl_WorkGroupID.x; - - const uint num_blocks_per_row = p.ncols / QUANT_K; - const uint ib0 = row*num_blocks_per_row; - - const uint tid = gl_LocalInvocationID.x/K_QUANTS_PER_ITERATION; // 0...31 or 0...16 - const uint ix = gl_LocalInvocationID.x%K_QUANTS_PER_ITERATION; // 0 or 0, 1 - - const uint step = 16/K_QUANTS_PER_ITERATION; // 16 or 8 - - const uint v_im = tid/step; // 0 or 1. 0 computes 0..., 1 computes 128... - const uint v_in = tid - step*v_im; // 0...15 or 0...7 - - const uint8_t m = uint8_t(1 << (4 * v_im)); - - const uint l0 = K_QUANTS_PER_ITERATION*v_in; // 0...15 - const uint q_offset = 32*v_im + l0; - const uint y_offset = 128*v_im + l0; - - tmp[16 * ix + tid] = FLOAT_TYPE(0.0); // partial sum for thread in warp - - const uint s_shift = 4 * v_im; - - [[unroll]] for (uint i = ix; i < num_blocks_per_row; i += K_QUANTS_PER_ITERATION) { - const uint y_idx = i * QUANT_K + y_offset; - - const FLOAT_TYPE d = FLOAT_TYPE(data_a[ib0 + i].d); - - FLOAT_TYPE sum = FLOAT_TYPE(0.0); - for (int l = 0; l < K_QUANTS_PER_ITERATION; ++l) { - sum += FLOAT_TYPE(data_b[p.b_offset + y_idx + l + 0]) * FLOAT_TYPE(int8_t(((data_a[ib0 + i].scales[0] >> s_shift) & 0xF) | ((data_a[ib0 + i].scales[ 8] >> (s_shift + 0) & 0x3) << 4)) - 32) * FLOAT_TYPE(((data_a[ib0 + i].qs[q_offset + l ] ) & 3) - (((data_a[ib0 + i].hmask[l0 + l ] & (m << 0)) != 0) ? 0 : 4)) - + FLOAT_TYPE(data_b[p.b_offset + y_idx + l + 32]) * FLOAT_TYPE(int8_t(((data_a[ib0 + i].scales[2] >> s_shift) & 0xF) | ((data_a[ib0 + i].scales[10] >> (s_shift + 0) & 0x3) << 4)) - 32) * FLOAT_TYPE(((data_a[ib0 + i].qs[q_offset + l ] >> 2) & 3) - (((data_a[ib0 + i].hmask[l0 + l ] & (m << 1)) != 0) ? 0 : 4)) - + FLOAT_TYPE(data_b[p.b_offset + y_idx + l + 64]) * FLOAT_TYPE(int8_t(((data_a[ib0 + i].scales[4] >> s_shift) & 0xF) | ((data_a[ib0 + i].scales[ 8] >> (s_shift + 2) & 0x3) << 4)) - 32) * FLOAT_TYPE(((data_a[ib0 + i].qs[q_offset + l ] >> 4) & 3) - (((data_a[ib0 + i].hmask[l0 + l ] & (m << 2)) != 0) ? 0 : 4)) - + FLOAT_TYPE(data_b[p.b_offset + y_idx + l + 96]) * FLOAT_TYPE(int8_t(((data_a[ib0 + i].scales[6] >> s_shift) & 0xF) | ((data_a[ib0 + i].scales[10] >> (s_shift + 2) & 0x3) << 4)) - 32) * FLOAT_TYPE(((data_a[ib0 + i].qs[q_offset + l ] >> 6) & 3) - (((data_a[ib0 + i].hmask[l0 + l ] & (m << 3)) != 0) ? 0 : 4)) - + FLOAT_TYPE(data_b[p.b_offset + y_idx + l + 16]) * FLOAT_TYPE(int8_t(((data_a[ib0 + i].scales[1] >> s_shift) & 0xF) | ((data_a[ib0 + i].scales[ 9] >> (s_shift + 0) & 0x3) << 4)) - 32) * FLOAT_TYPE(((data_a[ib0 + i].qs[q_offset + l+16] ) & 3) - (((data_a[ib0 + i].hmask[l0 + l+16] & (m << 0)) != 0) ? 0 : 4)) - + FLOAT_TYPE(data_b[p.b_offset + y_idx + l + 48]) * FLOAT_TYPE(int8_t(((data_a[ib0 + i].scales[3] >> s_shift) & 0xF) | ((data_a[ib0 + i].scales[11] >> (s_shift + 0) & 0x3) << 4)) - 32) * FLOAT_TYPE(((data_a[ib0 + i].qs[q_offset + l+16] >> 2) & 3) - (((data_a[ib0 + i].hmask[l0 + l+16] & (m << 1)) != 0) ? 0 : 4)) - + FLOAT_TYPE(data_b[p.b_offset + y_idx + l + 80]) * FLOAT_TYPE(int8_t(((data_a[ib0 + i].scales[5] >> s_shift) & 0xF) | ((data_a[ib0 + i].scales[ 9] >> (s_shift + 2) & 0x3) << 4)) - 32) * FLOAT_TYPE(((data_a[ib0 + i].qs[q_offset + l+16] >> 4) & 3) - (((data_a[ib0 + i].hmask[l0 + l+16] & (m << 2)) != 0) ? 0 : 4)) - + FLOAT_TYPE(data_b[p.b_offset + y_idx + l +112]) * FLOAT_TYPE(int8_t(((data_a[ib0 + i].scales[7] >> s_shift) & 0xF) | ((data_a[ib0 + i].scales[11] >> (s_shift + 2) & 0x3) << 4)) - 32) * FLOAT_TYPE(((data_a[ib0 + i].qs[q_offset + l+16] >> 6) & 3) - (((data_a[ib0 + i].hmask[l0 + l+16] & (m << 3)) != 0) ? 0 : 4)); - } - tmp[16 * ix + tid] += d * sum; - } - - // sum up partial sums and write back result - barrier(); - [[unroll]] for (uint s = 16; s > 0; s >>= 1) { - if (tid < s) { - tmp[tid] += tmp[tid + s]; - } - barrier(); - } - if (tid == 0) { - dst[p.d_offset + row] = D_TYPE(tmp[0]); - } -} -""" -mul_mat_vec_q4_K_body = """ -layout(local_size_x = 32, local_size_y = 1, local_size_z = 1) in; - -layout (binding = 0) readonly buffer A {A_TYPE data_a[];}; -layout (binding = 1) readonly buffer B {B_TYPE data_b[];}; -layout (binding = 2) writeonly buffer D {D_TYPE dst[];}; - -shared FLOAT_TYPE tmp[32]; - -void main() { - const uint row = gl_WorkGroupID.x; - - const uint num_blocks_per_row = p.ncols / QUANT_K; - const uint ib0 = row*num_blocks_per_row; - - const uint tid = gl_LocalInvocationID.x/K_QUANTS_PER_ITERATION; // 0...31 or 0...16 - const uint ix = gl_LocalInvocationID.x%K_QUANTS_PER_ITERATION; // 0 or 0, 1 - - const uint step = 8/K_QUANTS_PER_ITERATION; // 8 or 4 - - const uint il = tid/step; // 0...3 - const uint ir = tid - step*il; // 0...7 or 0...3 - const uint n = 2 * K_QUANTS_PER_ITERATION; // 2 or 4 - - const uint v_im = il / 2; // 0 or 1. 0 computes 0,32 + 128,160, 1 computes 64,96 + 192,224 - const uint v_in = il % 2; - - const uint l0 = n * (2 * ir + v_in); // 0...15 - const uint q_offset = 32*v_im + l0; - const uint y_offset = 64*v_im + l0; - - tmp[16 * ix + tid] = FLOAT_TYPE(0.0); // partial sum for thread in warp - - [[unroll]] for (uint i = ix; i < num_blocks_per_row; i += K_QUANTS_PER_ITERATION) { - const uint y1_idx = i * QUANT_K + y_offset; - const uint y2_idx = y1_idx + 128; - - const FLOAT_TYPE dall = FLOAT_TYPE(data_a[ib0 + i].d.x); - const FLOAT_TYPE dmin = FLOAT_TYPE(data_a[ib0 + i].d.y); - - const uint8_t sc0 = uint8_t( data_a[ib0 + i].scales[v_im * 2 ] & 0x3f); - const uint8_t sc1 = uint8_t( data_a[ib0 + i].scales[v_im * 2 + 1] & 0x3f); - const uint8_t sc2 = uint8_t( data_a[ib0 + i].scales[v_im * 2 + 4] & 0x3f); - const uint8_t sc3 = uint8_t( data_a[ib0 + i].scales[v_im * 2 + 5] & 0x3f); - const uint8_t sc4 = uint8_t(( data_a[ib0 + i].scales[v_im * 2 + 8] & 0x0f) | ((data_a[ib0 + i].scales[v_im * 2 ] & 0xc0) >> 2)); - const uint8_t sc5 = uint8_t(( data_a[ib0 + i].scales[v_im * 2 + 9] & 0x0f) | ((data_a[ib0 + i].scales[v_im * 2 + 1] & 0xc0) >> 2)); - const uint8_t sc6 = uint8_t(((data_a[ib0 + i].scales[v_im * 2 + 8] >> 4) & 0x0f) | ((data_a[ib0 + i].scales[v_im * 2 + 4] & 0xc0) >> 2)); - const uint8_t sc7 = uint8_t(((data_a[ib0 + i].scales[v_im * 2 + 9] >> 4) & 0x0f) | ((data_a[ib0 + i].scales[v_im * 2 + 5] & 0xc0) >> 2)); - -#if K_QUANTS_PER_ITERATION == 2 - const uint8_t q4_0 = uint8_t(data_a[ib0 + i].qs[q_offset ] & 0xf); - const uint8_t q4_1 = uint8_t(data_a[ib0 + i].qs[q_offset + 1] & 0xf); - const uint8_t q4_2 = uint8_t(data_a[ib0 + i].qs[q_offset + 2] & 0xf); - const uint8_t q4_3 = uint8_t(data_a[ib0 + i].qs[q_offset + 3] & 0xf); - const uint8_t q4_4 = uint8_t(data_a[ib0 + i].qs[q_offset ] >> 4); - const uint8_t q4_5 = uint8_t(data_a[ib0 + i].qs[q_offset + 1] >> 4); - const uint8_t q4_6 = uint8_t(data_a[ib0 + i].qs[q_offset + 2] >> 4); - const uint8_t q4_7 = uint8_t(data_a[ib0 + i].qs[q_offset + 3] >> 4); - const uint8_t q4_8 = uint8_t(data_a[ib0 + i].qs[q_offset + 64] & 0xf); - const uint8_t q4_9 = uint8_t(data_a[ib0 + i].qs[q_offset + 65] & 0xf); - const uint8_t q4_10 = uint8_t(data_a[ib0 + i].qs[q_offset + 66] & 0xf); - const uint8_t q4_11 = uint8_t(data_a[ib0 + i].qs[q_offset + 67] & 0xf); - const uint8_t q4_12 = uint8_t(data_a[ib0 + i].qs[q_offset + 64] >> 4); - const uint8_t q4_13 = uint8_t(data_a[ib0 + i].qs[q_offset + 65] >> 4); - const uint8_t q4_14 = uint8_t(data_a[ib0 + i].qs[q_offset + 66] >> 4); - const uint8_t q4_15 = uint8_t(data_a[ib0 + i].qs[q_offset + 67] >> 4); - - const FLOAT_TYPE sx = FLOAT_TYPE(data_b[p.b_offset + y1_idx] * q4_0 + data_b[p.b_offset + y1_idx + 1] * q4_1 + data_b[p.b_offset + y1_idx + 2] * q4_2 + data_b[p.b_offset + y1_idx + 3] * q4_3); - const FLOAT_TYPE sy = FLOAT_TYPE(data_b[p.b_offset + y1_idx + 32] * q4_4 + data_b[p.b_offset + y1_idx + 33] * q4_5 + data_b[p.b_offset + y1_idx + 34] * q4_6 + data_b[p.b_offset + y1_idx + 35] * q4_7); - const FLOAT_TYPE sz = FLOAT_TYPE(data_b[p.b_offset + y2_idx] * q4_8 + data_b[p.b_offset + y2_idx + 1] * q4_9 + data_b[p.b_offset + y2_idx + 2] * q4_10 + data_b[p.b_offset + y2_idx + 3] * q4_11); - const FLOAT_TYPE sw = FLOAT_TYPE(data_b[p.b_offset + y2_idx + 32] * q4_12 + data_b[p.b_offset + y2_idx + 33] * q4_13 + data_b[p.b_offset + y2_idx + 34] * q4_14 + data_b[p.b_offset + y2_idx + 35] * q4_15); - const FLOAT_TYPE smin = FLOAT_TYPE( - data_b[p.b_offset + y1_idx ] * sc2 + data_b[p.b_offset + y1_idx + 32] * sc3 + data_b[p.b_offset + y2_idx ] * sc6 + data_b[p.b_offset + y2_idx + 32] * sc7 - + data_b[p.b_offset + y1_idx + 1] * sc2 + data_b[p.b_offset + y1_idx + 33] * sc3 + data_b[p.b_offset + y2_idx + 1] * sc6 + data_b[p.b_offset + y2_idx + 33] * sc7 - + data_b[p.b_offset + y1_idx + 2] * sc2 + data_b[p.b_offset + y1_idx + 34] * sc3 + data_b[p.b_offset + y2_idx + 2] * sc6 + data_b[p.b_offset + y2_idx + 34] * sc7 - + data_b[p.b_offset + y1_idx + 3] * sc2 + data_b[p.b_offset + y1_idx + 35] * sc3 + data_b[p.b_offset + y2_idx + 3] * sc6 + data_b[p.b_offset + y2_idx + 35] * sc7 - ); - tmp[16 * ix + tid] += FLOAT_TYPE(dall * (sx * sc0 + sy * sc1 + sz * sc4 + sw * sc5) - dmin * smin); -#else - const uint8_t q4_0 = uint8_t(data_a[ib0 + i].qs[q_offset ] & 0xf); - const uint8_t q4_1 = uint8_t(data_a[ib0 + i].qs[q_offset + 1] & 0xf); - const uint8_t q4_2 = uint8_t(data_a[ib0 + i].qs[q_offset ] >> 4); - const uint8_t q4_3 = uint8_t(data_a[ib0 + i].qs[q_offset + 1] >> 4); - const uint8_t q4_4 = uint8_t(data_a[ib0 + i].qs[q_offset + 64] & 0xf); - const uint8_t q4_5 = uint8_t(data_a[ib0 + i].qs[q_offset + 65] & 0xf); - const uint8_t q4_6 = uint8_t(data_a[ib0 + i].qs[q_offset + 64] >> 4); - const uint8_t q4_7 = uint8_t(data_a[ib0 + i].qs[q_offset + 65] >> 4); - - const FLOAT_TYPE sx = FLOAT_TYPE(data_b[p.b_offset + y1_idx ] * q4_0 + data_b[p.b_offset + y1_idx + 1] * q4_1); - const FLOAT_TYPE sy = FLOAT_TYPE(data_b[p.b_offset + y1_idx + 32] * q4_2 + data_b[p.b_offset + y1_idx + 33] * q4_3); - const FLOAT_TYPE sz = FLOAT_TYPE(data_b[p.b_offset + y2_idx ] * q4_4 + data_b[p.b_offset + y2_idx + 1] * q4_5); - const FLOAT_TYPE sw = FLOAT_TYPE(data_b[p.b_offset + y2_idx + 32] * q4_6 + data_b[p.b_offset + y2_idx + 33] * q4_7); - const FLOAT_TYPE smin = FLOAT_TYPE( - data_b[p.b_offset + y1_idx] * sc2 + data_b[p.b_offset + y1_idx + 32] * sc3 + data_b[p.b_offset + y2_idx] * sc6 + data_b[p.b_offset + y2_idx + 32] * sc7 - + data_b[p.b_offset + y1_idx + 1] * sc2 + data_b[p.b_offset + y1_idx + 33] * sc3 + data_b[p.b_offset + y2_idx + 1] * sc6 + data_b[p.b_offset + y2_idx + 33] * sc7 - ); - - tmp[16 * ix + tid] += FLOAT_TYPE(dall * (sx * FLOAT_TYPE(data_a[ib0 + i].scales[v_im] & 0x3f) + sy * FLOAT_TYPE(data_a[ib0 + i].scales[v_im + 1] & 0x3f) + sz * FLOAT_TYPE((data_a[ib0 + i].scales[v_im + 4] & 0x0f) | ((data_a[ib0 + i].scales[v_im] & 0xc0) >> 2)) + sw * FLOAT_TYPE((data_a[ib0 + i].scales[v_im + 5] & 0x0f) | ((data_a[ib0 + i].scales[v_im + 1] & 0xc0) >> 2))) - dmin * smin); -#endif - } - - // sum up partial sums and write back result - barrier(); - [[unroll]] for (uint s = 16; s > 0; s >>= 1) { - if (tid < s) { - tmp[tid] += tmp[tid + s]; - } - barrier(); - } - if (tid == 0) { - dst[p.d_offset + row] = D_TYPE(tmp[0]); - } -} -""" -mul_mat_vec_q5_K_body = """ -layout(local_size_x = 32, local_size_y = 1, local_size_z = 1) in; - -layout (binding = 0) readonly buffer A {A_TYPE data_a[];}; -layout (binding = 1) readonly buffer B {B_TYPE data_b[];}; -layout (binding = 2) writeonly buffer D {D_TYPE dst[];}; - -shared FLOAT_TYPE tmp[32]; - -void main() { - const uint row = gl_WorkGroupID.x; - - const uint num_blocks_per_row = p.ncols / QUANT_K; - const uint ib0 = row*num_blocks_per_row; - - const uint tid = gl_LocalInvocationID.x/2; // 0...31 or 0...16 - const uint ix = gl_LocalInvocationID.x%2; // 0 or 0, 1 - - const uint il = tid/4; // 0...3 - const uint ir = tid - 4*il; // 0...7 or 0...3 - - const uint v_im = il / 2; // 0 or 1. 0 computes 0,32 + 128,160, 1 computes 64,96 + 192,224 - const uint v_in = il % 2; - - const uint l0 = 4*ir + 2*v_in; // 0...15 - const uint q_offset = 32*v_im + l0; - const uint y_offset = 64*v_im + l0; - - const uint8_t hm1 = uint8_t(1 << (2*v_im)); - const uint8_t hm2 = uint8_t(hm1 << 4); - - tmp[16 * ix + tid] = FLOAT_TYPE(0.0); // partial sum for thread in warp - - [[unroll]] for (uint i = ix; i < num_blocks_per_row; i += 2) { - const uint y1_idx = i * QUANT_K + y_offset; - const uint y2_idx = y1_idx + 128; - - const FLOAT_TYPE dall = FLOAT_TYPE(data_a[ib0 + i].d.x); - const FLOAT_TYPE dmin = FLOAT_TYPE(data_a[ib0 + i].d.y); - - const uint8_t sc0 = uint8_t( data_a[ib0 + i].scales[v_im * 2 ] & 0x3f); - const uint8_t sc1 = uint8_t( data_a[ib0 + i].scales[v_im * 2 + 1] & 0x3f); - const uint8_t sc2 = uint8_t( data_a[ib0 + i].scales[v_im * 2 + 4] & 0x3f); - const uint8_t sc3 = uint8_t( data_a[ib0 + i].scales[v_im * 2 + 5] & 0x3f); - const uint8_t sc4 = uint8_t(( data_a[ib0 + i].scales[v_im * 2 + 8] & 0x0f) | ((data_a[ib0 + i].scales[v_im * 2 ] & 0xc0) >> 2)); - const uint8_t sc5 = uint8_t(( data_a[ib0 + i].scales[v_im * 2 + 9] & 0x0f) | ((data_a[ib0 + i].scales[v_im * 2 + 1] & 0xc0) >> 2)); - const uint8_t sc6 = uint8_t(((data_a[ib0 + i].scales[v_im * 2 + 8] >> 4) & 0x0f) | ((data_a[ib0 + i].scales[v_im * 2 + 4] & 0xc0) >> 2)); - const uint8_t sc7 = uint8_t(((data_a[ib0 + i].scales[v_im * 2 + 9] >> 4) & 0x0f) | ((data_a[ib0 + i].scales[v_im * 2 + 5] & 0xc0) >> 2)); - - const uint8_t q4_0 = uint8_t(data_a[ib0 + i].qs[q_offset ] & 0xf); - const uint8_t q4_1 = uint8_t(data_a[ib0 + i].qs[q_offset + 1] & 0xf); - const uint8_t q4_2 = uint8_t(data_a[ib0 + i].qs[q_offset + 16] & 0xf); - const uint8_t q4_3 = uint8_t(data_a[ib0 + i].qs[q_offset + 17] & 0xf); - const uint8_t q4_4 = uint8_t(data_a[ib0 + i].qs[q_offset ] >> 4); - const uint8_t q4_5 = uint8_t(data_a[ib0 + i].qs[q_offset + 1] >> 4); - const uint8_t q4_6 = uint8_t(data_a[ib0 + i].qs[q_offset + 16] >> 4); - const uint8_t q4_7 = uint8_t(data_a[ib0 + i].qs[q_offset + 17] >> 4); - const uint8_t q4_8 = uint8_t(data_a[ib0 + i].qs[q_offset + 64] & 0xf); - const uint8_t q4_9 = uint8_t(data_a[ib0 + i].qs[q_offset + 65] & 0xf); - const uint8_t q4_10 = uint8_t(data_a[ib0 + i].qs[q_offset + 80] & 0xf); - const uint8_t q4_11 = uint8_t(data_a[ib0 + i].qs[q_offset + 81] & 0xf); - const uint8_t q4_12 = uint8_t(data_a[ib0 + i].qs[q_offset + 64] >> 4); - const uint8_t q4_13 = uint8_t(data_a[ib0 + i].qs[q_offset + 65] >> 4); - const uint8_t q4_14 = uint8_t(data_a[ib0 + i].qs[q_offset + 80] >> 4); - const uint8_t q4_15 = uint8_t(data_a[ib0 + i].qs[q_offset + 81] >> 4); - - const FLOAT_TYPE sx = FLOAT_TYPE( - data_b[p.b_offset + y1_idx ] * (q4_0 + (((data_a[ib0 + i].qh[l0 ] & hm1) != 0) ? 16 : 0)) - + data_b[p.b_offset + y1_idx + 1] * (q4_1 + (((data_a[ib0 + i].qh[l0 + 1] & hm1) != 0) ? 16 : 0)) - + data_b[p.b_offset + y1_idx + 16] * (q4_2 + (((data_a[ib0 + i].qh[l0 + 16] & hm1) != 0) ? 16 : 0)) - + data_b[p.b_offset + y1_idx + 17] * (q4_3 + (((data_a[ib0 + i].qh[l0 + 17] & hm1) != 0) ? 16 : 0)) - ); - const FLOAT_TYPE sy = FLOAT_TYPE( - data_b[p.b_offset + y1_idx + 32] * (q4_4 + (((data_a[ib0 + i].qh[l0 ] & (hm1 << 1)) != 0) ? 16 : 0)) - + data_b[p.b_offset + y1_idx + 33] * (q4_5 + (((data_a[ib0 + i].qh[l0 + 1] & (hm1 << 1)) != 0) ? 16 : 0)) - + data_b[p.b_offset + y1_idx + 48] * (q4_6 + (((data_a[ib0 + i].qh[l0 + 16] & (hm1 << 1)) != 0) ? 16 : 0)) - + data_b[p.b_offset + y1_idx + 49] * (q4_7 + (((data_a[ib0 + i].qh[l0 + 17] & (hm1 << 1)) != 0) ? 16 : 0)) - ); - const FLOAT_TYPE sz = FLOAT_TYPE( - data_b[p.b_offset + y2_idx ] * (q4_8 + (((data_a[ib0 + i].qh[l0 ] & hm2) != 0) ? 16 : 0)) - + data_b[p.b_offset + y2_idx + 1] * (q4_9 + (((data_a[ib0 + i].qh[l0 + 1] & hm2) != 0) ? 16 : 0)) - + data_b[p.b_offset + y2_idx + 16] * (q4_10 + (((data_a[ib0 + i].qh[l0 + 16] & hm2) != 0) ? 16 : 0)) - + data_b[p.b_offset + y2_idx + 17] * (q4_11 + (((data_a[ib0 + i].qh[l0 + 17] & hm2) != 0) ? 16 : 0)) - ); - const FLOAT_TYPE sw = FLOAT_TYPE( - data_b[p.b_offset + y2_idx + 32] * (q4_12 + (((data_a[ib0 + i].qh[l0 ] & (hm2 << 1)) != 0) ? 16 : 0)) - + data_b[p.b_offset + y2_idx + 33] * (q4_13 + (((data_a[ib0 + i].qh[l0 + 1] & (hm2 << 1)) != 0) ? 16 : 0)) - + data_b[p.b_offset + y2_idx + 48] * (q4_14 + (((data_a[ib0 + i].qh[l0 + 16] & (hm2 << 1)) != 0) ? 16 : 0)) - + data_b[p.b_offset + y2_idx + 49] * (q4_15 + (((data_a[ib0 + i].qh[l0 + 17] & (hm2 << 1)) != 0) ? 16 : 0)) - ); - const FLOAT_TYPE smin = FLOAT_TYPE( - (data_b[p.b_offset + y1_idx] + data_b[p.b_offset + y1_idx + 1] + data_b[p.b_offset + y1_idx + 16] + data_b[p.b_offset + y1_idx + 17]) * sc2 + (data_b[p.b_offset + y1_idx + 32] + data_b[p.b_offset + y1_idx + 33] + data_b[p.b_offset + y1_idx + 48] + data_b[p.b_offset + y1_idx + 49]) * sc3 - + (data_b[p.b_offset + y2_idx] + data_b[p.b_offset + y2_idx + 1] + data_b[p.b_offset + y2_idx + 16] + data_b[p.b_offset + y2_idx + 17]) * sc6 + (data_b[p.b_offset + y2_idx + 32] + data_b[p.b_offset + y2_idx + 33] + data_b[p.b_offset + y2_idx + 48] + data_b[p.b_offset + y2_idx + 49]) * sc7 - ); - tmp[16 * ix + tid] += FLOAT_TYPE(dall * (sx * sc0 + sy * sc1 + sz * sc4 + sw * sc5) - dmin * smin); - } - - // sum up partial sums and write back result - barrier(); - [[unroll]] for (uint s = 16; s > 0; s >>= 1) { - if (tid < s) { - tmp[tid] += tmp[tid + s]; - } - barrier(); - } - if (tid == 0) { - dst[p.d_offset + row] = D_TYPE(tmp[0]); - } -} -""" -mul_mat_vec_q6_K_body = """ -layout(local_size_x = 32, local_size_y = 1, local_size_z = 1) in; - -layout (binding = 0) readonly buffer A {A_TYPE data_a[];}; -layout (binding = 1) readonly buffer B {B_TYPE data_b[];}; -layout (binding = 2) writeonly buffer D {D_TYPE dst[];}; - -shared FLOAT_TYPE tmp[32]; - -void main() { - const uint block_size = gl_WorkGroupSize.x; - const uint row = gl_WorkGroupID.x; - - const uint num_blocks_per_row = p.ncols / QUANT_K; - const uint ib0 = row*num_blocks_per_row; - - const uint tid = gl_LocalInvocationID.x/K_QUANTS_PER_ITERATION; // 0...31 or 0...16 - const uint ix = gl_LocalInvocationID.x%K_QUANTS_PER_ITERATION; // 0 or 0, 1 - - const uint step = 16/K_QUANTS_PER_ITERATION; // 16 or 8 - - const uint v_im = tid/step; // 0 or 1. 0 computes 0..., 1 computes 128... - const uint v_in = tid - step*v_im; // 0...15 or 0...7 - -#if K_QUANTS_PER_ITERATION == 1 - const uint l0 = v_in; // 0...15 - const uint is = 0; -#else - const uint l0 = 4 * v_in; // 0, 4, 8, ..., 28 - const uint is = v_in / 4; -#endif - - const uint ql_offset = 64*v_im + l0; - const uint qh_offset = 32*v_im + l0; - const uint s_offset = 8*v_im + is; - const uint y_offset = 128*v_im + l0; - - tmp[16 * ix + tid] = FLOAT_TYPE(0.0); // partial sum for thread in warp - - [[unroll]] for (uint i = ix; i < num_blocks_per_row; i += K_QUANTS_PER_ITERATION) { - const uint y_idx = i * QUANT_K + y_offset; - - const FLOAT_TYPE d = FLOAT_TYPE(data_a[ib0 + i].d); - -#if K_QUANTS_PER_ITERATION == 1 - FLOAT_TYPE sum = FLOAT_TYPE(data_b[p.b_offset + y_idx + 0]) * FLOAT_TYPE(data_a[ib0 + i].scales[s_offset + 0]) * d * FLOAT_TYPE(int8_t((data_a[ib0 + i].ql[ql_offset + 0] & 0xF) | ((data_a[ib0 + i].qh[qh_offset + 0] & 0x03) << 4)) - 32) - + FLOAT_TYPE(data_b[p.b_offset + y_idx + 16]) * FLOAT_TYPE(data_a[ib0 + i].scales[s_offset + 1]) * d * FLOAT_TYPE(int8_t((data_a[ib0 + i].ql[ql_offset + 16] & 0xF) | ((data_a[ib0 + i].qh[qh_offset + 16] & 0x03) << 4)) - 32) - + FLOAT_TYPE(data_b[p.b_offset + y_idx + 32]) * FLOAT_TYPE(data_a[ib0 + i].scales[s_offset + 2]) * d * FLOAT_TYPE(int8_t((data_a[ib0 + i].ql[ql_offset + 32] & 0xF) | ((data_a[ib0 + i].qh[qh_offset + 0] & 0x0c) << 2)) - 32) - + FLOAT_TYPE(data_b[p.b_offset + y_idx + 48]) * FLOAT_TYPE(data_a[ib0 + i].scales[s_offset + 3]) * d * FLOAT_TYPE(int8_t((data_a[ib0 + i].ql[ql_offset + 48] & 0xF) | ((data_a[ib0 + i].qh[qh_offset + 16] & 0x0c) << 2)) - 32) - + FLOAT_TYPE(data_b[p.b_offset + y_idx + 64]) * FLOAT_TYPE(data_a[ib0 + i].scales[s_offset + 4]) * d * FLOAT_TYPE(int8_t((data_a[ib0 + i].ql[ql_offset + 0] >> 4) | ((data_a[ib0 + i].qh[qh_offset + 0] & 0x30) >> 0)) - 32) - + FLOAT_TYPE(data_b[p.b_offset + y_idx + 80]) * FLOAT_TYPE(data_a[ib0 + i].scales[s_offset + 5]) * d * FLOAT_TYPE(int8_t((data_a[ib0 + i].ql[ql_offset + 16] >> 4) | ((data_a[ib0 + i].qh[qh_offset + 16] & 0x30) >> 0)) - 32) - + FLOAT_TYPE(data_b[p.b_offset + y_idx + 96]) * FLOAT_TYPE(data_a[ib0 + i].scales[s_offset + 6]) * d * FLOAT_TYPE(int8_t((data_a[ib0 + i].ql[ql_offset + 32] >> 4) | ((data_a[ib0 + i].qh[qh_offset + 0] & 0xc0) >> 2)) - 32) - + FLOAT_TYPE(data_b[p.b_offset + y_idx +112]) * FLOAT_TYPE(data_a[ib0 + i].scales[s_offset + 7]) * d * FLOAT_TYPE(int8_t((data_a[ib0 + i].ql[ql_offset + 48] >> 4) | ((data_a[ib0 + i].qh[qh_offset + 16] & 0xc0) >> 2)) - 32); - tmp[16 * ix + tid] += sum; -#else - FLOAT_TYPE sum = FLOAT_TYPE(0.0); - [[unroll]] for (int l = 0; l < 4; ++l) { - sum += FLOAT_TYPE(data_b[p.b_offset + y_idx + l+ 0]) * FLOAT_TYPE(data_a[ib0 + i].scales[s_offset + 0]) * d * FLOAT_TYPE(int8_t((data_a[ib0 + i].ql[ql_offset + l+ 0] & 0xF) | (((data_a[ib0 + i].qh[qh_offset + l] >> 0) & 3) << 4)) - 32) - + FLOAT_TYPE(data_b[p.b_offset + y_idx + l+32]) * FLOAT_TYPE(data_a[ib0 + i].scales[s_offset + 2]) * d * FLOAT_TYPE(int8_t((data_a[ib0 + i].ql[ql_offset + l+32] & 0xF) | (((data_a[ib0 + i].qh[qh_offset + l] >> 2) & 3) << 4)) - 32) - + FLOAT_TYPE(data_b[p.b_offset + y_idx + l+64]) * FLOAT_TYPE(data_a[ib0 + i].scales[s_offset + 4]) * d * FLOAT_TYPE(int8_t((data_a[ib0 + i].ql[ql_offset + l+ 0] >> 4) | (((data_a[ib0 + i].qh[qh_offset + l] >> 4) & 3) << 4)) - 32) - + FLOAT_TYPE(data_b[p.b_offset + y_idx + l+96]) * FLOAT_TYPE(data_a[ib0 + i].scales[s_offset + 6]) * d * FLOAT_TYPE(int8_t((data_a[ib0 + i].ql[ql_offset + l+32] >> 4) | (((data_a[ib0 + i].qh[qh_offset + l] >> 6) & 3) << 4)) - 32); - } - tmp[16 * ix + tid] += sum; -#endif - } - - // sum up partial sums and write back result - barrier(); - [[unroll]] for (uint s = 16; s > 0; s >>= 1) { - if (tid < s) { - tmp[tid] += tmp[tid + s]; - } - barrier(); - } - if (tid == 0) { - dst[p.d_offset + row] = D_TYPE(tmp[0]); - } -} -""" - -mul_mat_p021_src = """#version 450 - -#extension GL_EXT_control_flow_attributes : enable -#extension GL_EXT_shader_16bit_storage : require - -#define BLOCK_SIZE 32 -#define FLOAT_TYPE float - -layout(local_size_x = BLOCK_SIZE, local_size_y = 1, local_size_z = 1) in; - -layout (binding = 0) readonly buffer A {A_TYPE data_a[];}; -layout (binding = 1) readonly buffer B {B_TYPE data_b[];}; -layout (binding = 2) writeonly buffer D {D_TYPE dst[];}; - -layout (push_constant) uniform parameter -{ - uint ncols_x; - uint nrows_x; - uint nchannels_x; - uint nchannels_y; - uint b_offset; - uint d_offset; -} p; - -shared FLOAT_TYPE tmp[BLOCK_SIZE]; - -void main() { - const uint tid = gl_LocalInvocationID.x; - const uint row_x = gl_GlobalInvocationID.y; - const uint channel = gl_GlobalInvocationID.z; - const uint channel_x = channel / (p.nchannels_y / p.nchannels_x); - - const uint nrows_y = p.ncols_x; - const uint nrows_dst = p.nrows_x; - const uint row_dst = row_x; - - tmp[tid] = FLOAT_TYPE(0.0f); - - for (uint col_x0 = 0; col_x0 < p.ncols_x; col_x0 += BLOCK_SIZE) { - const uint col_x = col_x0 + tid; - - if (col_x >= p.ncols_x) { - break; - } - - // x is transposed and permuted - const uint ix = row_x*p.nchannels_x*p.ncols_x + channel_x*p.ncols_x + col_x; - const FLOAT_TYPE xi = FLOAT_TYPE(data_a[ix]); - - const uint row_y = col_x; - - // y is not transposed but permuted - const uint iy = channel*nrows_y + row_y; - - tmp[tid] += xi * FLOAT_TYPE(data_b[iy]); - } - - // dst is not transposed and not permuted - const uint idst = channel*nrows_dst + row_dst; - - // sum up partial sums and write back result - barrier(); - [[unroll]] for (int s = BLOCK_SIZE / 2; s > 0; s >>= 1) { - if (tid < s) { - tmp[tid] += tmp[tid + s]; - } - barrier(); - } - - if (tid == 0) { - dst[idst] = tmp[0]; - } -} -""" - - -mul_mat_nc_src = """#version 450 - -#extension GL_EXT_control_flow_attributes : enable -#extension GL_EXT_shader_16bit_storage : require - -#define BLOCK_SIZE 32 -#define FLOAT_TYPE float - -layout(local_size_x = BLOCK_SIZE, local_size_y = 1, local_size_z = 1) in; - -layout (binding = 0) readonly buffer A {A_TYPE data_a[];}; -layout (binding = 1) readonly buffer B {B_TYPE data_b[];}; -layout (binding = 2) writeonly buffer D {D_TYPE dst[];}; - -layout (push_constant) uniform parameter -{ - uint ncols_x; - uint nrows_x; - uint row_stride_x; - uint channel_stride_x; - uint channel_x_divisor; - uint b_offset; - uint d_offset; -} p; - -shared FLOAT_TYPE tmp[BLOCK_SIZE]; - -void main() { - const uint tid = gl_LocalInvocationID.x; - const uint row_x = gl_GlobalInvocationID.y; - const uint channel = gl_GlobalInvocationID.z; - const uint channel_x = channel / p.channel_x_divisor; - - const uint nrows_y = p.ncols_x; - const uint nrows_dst = p.nrows_x; - const uint row_dst = row_x; - - const uint idst = channel*nrows_dst + row_dst; - - tmp[tid] = 0.0f; - - for (uint col_x0 = 0; col_x0 < p.ncols_x; col_x0 += BLOCK_SIZE) { - const uint col_x = col_x0 + tid; - - if (col_x >= p.ncols_x) { - break; - } - - const uint row_y = col_x; - - const uint ix = channel_x*p.channel_stride_x + row_x*p.row_stride_x + col_x; - const uint iy = channel*nrows_y + row_y; - - const FLOAT_TYPE xi = FLOAT_TYPE(data_a[ix]); - - tmp[tid] += xi * FLOAT_TYPE(data_b[iy]); - } - - // sum up partial sums and write back result - barrier(); - [[unroll]] for (int s = BLOCK_SIZE / 2; s > 0; s >>= 1) { - if (tid < s) { - tmp[tid] += tmp[tid + s]; - } - barrier(); - } - - if (tid == 0) { - dst[idst] = tmp[0]; - } -} -""" - -generic_head = """ -#version 450 - -#extension GL_EXT_shader_16bit_storage : require - -layout (push_constant) uniform parameter -{ - uint KX; - uint KY; - float param1; - float param2; -} p; -""" - -generic_unary_op_head = """#version 450 - -#extension GL_EXT_shader_16bit_storage : require - -layout (push_constant) uniform parameter -{ - uint ne; - uint ne00; uint ne01; uint ne02; uint ne03; uint nb00; uint nb01; uint nb02; uint nb03; - uint ne10; uint ne11; uint ne12; uint ne13; uint nb10; uint nb11; uint nb12; uint nb13; - uint d_offset; - float param1; float param2; -} p;""" - -generic_unary_op_funcs = """ -layout(local_size_x = 512, local_size_y = 1, local_size_z = 1) in; - -layout (binding = 0) readonly buffer A {A_TYPE data_a[];}; -layout (binding = 1) writeonly buffer D {D_TYPE data_d[];}; - -uint src0_idx(uint idx) { - const uint i03 = idx / (p.ne02*p.ne01*p.ne00); - const uint i03_offset = i03 * p.ne02*p.ne01*p.ne00; - const uint i02 = (idx - i03_offset) / (p.ne01*p.ne00); - const uint i02_offset = i02*p.ne01*p.ne00; - const uint i01 = (idx - i03_offset - i02_offset) / p.ne00; - const uint i00 = idx - i03_offset - i02_offset - i01*p.ne00; - return i03*p.nb03 + i02*p.nb02 + i01*p.nb01 + i00*p.nb00; -} - -uint dst_idx(uint idx) { - const uint i13 = idx / (p.ne12*p.ne11*p.ne10); - const uint i13_offset = i13 * p.ne12*p.ne11*p.ne10; - const uint i12 = (idx - i13_offset) / (p.ne11*p.ne10); - const uint i12_offset = i12*p.ne11*p.ne10; - const uint i11 = (idx - i13_offset - i12_offset) / p.ne10; - const uint i10 = idx - i13_offset - i12_offset - i11*p.ne10; - return i13*p.nb13 + i12*p.nb12 + i11*p.nb11 + i10*p.nb10; -}""" - -generic_unary_op_main = """ -void main() { - if (gl_GlobalInvocationID.x >= p.ne) { - return; - } -""" - -generic_unary_op_combined = f"{generic_unary_op_head}\n{generic_unary_op_funcs}\n{generic_unary_op_main}" - -generic_binary_op_head = """#version 450 - -#extension GL_EXT_shader_16bit_storage : require - -layout (push_constant) uniform parameter -{ - uint ne; - uint ne00; uint ne01; uint ne02; uint ne03; uint nb00; uint nb01; uint nb02; uint nb03; - uint ne10; uint ne11; uint ne12; uint ne13; uint nb10; uint nb11; uint nb12; uint nb13; - uint ne20; uint ne21; uint ne22; uint ne23; uint nb20; uint nb21; uint nb22; uint nb23; - uint d_offset; - float param1; float param2; -} p;""" - -generic_binary_op_funcs = """ -layout(local_size_x = 512, local_size_y = 1, local_size_z = 1) in; - -layout (binding = 0) readonly buffer A {A_TYPE data_a[];}; -layout (binding = 1) readonly buffer B {B_TYPE data_b[];}; -layout (binding = 2) writeonly buffer D {D_TYPE data_d[];}; - -uint src0_idx(uint idx) { - const uint i03 = idx / (p.ne02*p.ne01*p.ne00); - const uint i03_offset = i03 * p.ne02*p.ne01*p.ne00; - const uint i02 = (idx - i03_offset) / (p.ne01*p.ne00); - const uint i02_offset = i02*p.ne01*p.ne00; - const uint i01 = (idx - i03_offset - i02_offset) / p.ne00; - const uint i00 = idx - i03_offset - i02_offset - i01*p.ne00; - return i03*p.nb03 + i02*p.nb02 + i01*p.nb01 + i00*p.nb00; -} - -uint src1_idx(uint idx) { - const uint i03 = idx / (p.ne02*p.ne01*p.ne00); - const uint i03_offset = i03 * p.ne02*p.ne01*p.ne00; - const uint i02 = (idx - i03_offset) / (p.ne01*p.ne00); - const uint i02_offset = i02*p.ne01*p.ne00; - const uint i01 = (idx - i03_offset - i02_offset) / p.ne00; - const uint i00 = idx - i03_offset - i02_offset - i01*p.ne00; - - return (i03 % p.ne13)*p.nb13 + (i02 % p.ne12)*p.nb12 + (i01 % p.ne11)*p.nb11 + (i00 % p.ne10)*p.nb10; -} - -uint dst_idx(uint idx) { - const uint i23 = idx / (p.ne22*p.ne21*p.ne20); - const uint i23_offset = i23 * p.ne22*p.ne21*p.ne20; - const uint i22 = (idx - i23_offset) / (p.ne21*p.ne20); - const uint i22_offset = i22*p.ne21*p.ne20; - const uint i21 = (idx - i23_offset - i22_offset) / p.ne20; - const uint i20 = idx - i23_offset - i22_offset - i21*p.ne20; - return i23*p.nb23 + i22*p.nb22 + i21*p.nb21 + i20*p.nb20; -}""" - -generic_binary_op_main = """ -void main() { - if (gl_GlobalInvocationID.x >= p.ne) { - return; - } -""" - -generic_binary_op_combined = f"{generic_binary_op_head}\n{generic_binary_op_funcs}\n{generic_binary_op_main}" - -# MUL F32 -mul_body = """ - data_d[p.d_offset + dst_idx(gl_GlobalInvocationID.x)] = D_TYPE(FLOAT_TYPE(data_a[src0_idx(gl_GlobalInvocationID.x)]) * FLOAT_TYPE(data_b[src1_idx(gl_GlobalInvocationID.x)])); -} -""" - -# ADD -add_body = """ - data_d[p.d_offset + dst_idx(gl_GlobalInvocationID.x)] = D_TYPE(FLOAT_TYPE(data_a[src0_idx(gl_GlobalInvocationID.x)]) + FLOAT_TYPE(data_b[src1_idx(gl_GlobalInvocationID.x)])); -} -""" - -# SCALE -scale_body = """ - data_d[p.d_offset + dst_idx(gl_GlobalInvocationID.x)] = D_TYPE(FLOAT_TYPE(data_a[src0_idx(gl_GlobalInvocationID.x)]) + FLOAT_TYPE(p.param1)); -} -""" - -# SQR -sqr_body = """ - const FLOAT_TYPE val = FLOAT_TYPE(data_a[src0_idx(gl_GlobalInvocationID.x)]); - data_d[p.d_offset + dst_idx(gl_GlobalInvocationID.x)] = D_TYPE(val * val); -} -""" - -# CLAMP -clamp_body = """ - const FLOAT_TYPE val = FLOAT_TYPE(data_a[src0_idx(gl_GlobalInvocationID.x)]); - data_d[p.d_offset + dst_idx(gl_GlobalInvocationID.x)] = D_TYPE(val < p.param1 ? p.param1 : (val > p.param2 ? p.param2 : val)); -} -""" - -# CPY -cpy_end = """ - data_d[p.d_offset + dst_idx(gl_GlobalInvocationID.x)] = D_TYPE(data_a[src0_idx(gl_GlobalInvocationID.x)]); -} -""" -# Causes an optimization error otherwise -cpy_f16_f16_end = """ - data_d[p.d_offset + dst_idx(gl_GlobalInvocationID.x)] = data_a[src0_idx(gl_GlobalInvocationID.x)]; -} -""" - -# GET_ROWS -get_rows_float_body = """ -void main() { - const uint i00 = gl_GlobalInvocationID.x; - const uint i10 = gl_GlobalInvocationID.y; - const uint i11 = (gl_GlobalInvocationID.z)/p.ne12; - const uint i12 = (gl_GlobalInvocationID.z)%p.ne12; - - if (i00 >= p.ne00) { - return; - } - - const uint i01 = data_b[i10*p.nb10 + i11*p.nb11 + i12*p.nb12]; - - const uint a_offset = i01*p.nb01 + i11*p.nb02 + i12*p.nb03; - const uint d_offset = i10*p.nb21 + i11*p.nb22 + i12*p.nb23; - -#ifndef OPTIMIZATION_ERROR_WORKAROUND - data_d[d_offset + i00] = D_TYPE(data_a[a_offset + i00]); -#else - data_d[d_offset + i00] = data_a[a_offset + i00]; -#endif -} -""" - -get_rows_body = """ -void main() { - const uint i00 = (gl_GlobalInvocationID.x)*2; - const uint i10 = gl_GlobalInvocationID.y; - const uint i11 = (gl_GlobalInvocationID.z)/p.ne12; - const uint i12 = (gl_GlobalInvocationID.z)%p.ne12; - - if (i00 >= p.ne00) { - return; - } - - const uint i01 = data_b[i10*p.nb10 + i11*p.nb11 + i12*p.nb12]; - - const uint a_offset = i01*p.nb01 + i11*p.nb02 + i12*p.nb03; - const uint d_offset = i10*p.nb21 + i11*p.nb22 + i12*p.nb23; - - const uint ib = a_offset + i00/QUANT_K; // block index - const uint iqs = (i00%QUANT_K)/QUANT_R; // quant index - const uint iybs = i00 - i00%QUANT_K; // dst block start index - const uint y_offset = QUANT_R == 1 ? 1 : QUANT_K/2; - - DEQUANT_FUNC - - data_d[d_offset + iybs + iqs ] = D_TYPE(v.x); - data_d[d_offset + iybs + iqs + y_offset] = D_TYPE(v.y); -} -""" - -# UNARY -gelu_body = """ -#extension GL_EXT_control_flow_attributes : enable - -layout(local_size_x = 512, local_size_y = 1, local_size_z = 1) in; - -layout (binding = 0) readonly buffer X {A_TYPE data_a[];}; -layout (binding = 1) writeonly buffer D {D_TYPE data_d[];}; - -void main() { - const float GELU_COEF_A = 0.044715f; - const float SQRT_2_OVER_PI = 0.79788456080286535587989211986876f; - const uint i = gl_GlobalInvocationID.x; - - if (i >= p.KX) { - return; - } - - const float xi = float(data_a[i]); - const float val = SQRT_2_OVER_PI*xi*(1.0f + GELU_COEF_A*xi*xi); - data_d[i] = D_TYPE(0.5f*xi*(2.0f - 2.0f / (exp(2 * val) + 1))); -} -""" - -silu_body = """ -#extension GL_EXT_control_flow_attributes : enable - -layout(local_size_x = 512, local_size_y = 1, local_size_z = 1) in; - -layout (binding = 0) readonly buffer X {A_TYPE data_a[];}; -layout (binding = 1) writeonly buffer D {D_TYPE data_d[];}; - -void main() { - const uint i = gl_GlobalInvocationID.x; - - if (i >= p.KX) { - return; - } - - const float xi = float(data_a[i]); - data_d[i] = D_TYPE(xi / (1.0f + exp(-xi))); -} -""" - -relu_body = """ -#extension GL_EXT_control_flow_attributes : enable - -layout(local_size_x = 512, local_size_y = 1, local_size_z = 1) in; - -layout (binding = 0) readonly buffer X {A_TYPE data_a[];}; -layout (binding = 1) writeonly buffer D {D_TYPE data_d[];}; - -void main() { - const uint i = gl_GlobalInvocationID.x; - - if (i >= p.KX) { - return; - } - - data_d[i] = max(float(data_a[i]), 0); -} -""" - -# DIAG_MASK_INF -diag_mask_inf_head = """#version 450 - -#extension GL_EXT_shader_16bit_storage : require - -layout (push_constant) uniform parameter -{ - uint ncols; - uint rows_per_channel; - uint n_past; -} p; -""" -diag_mask_inf_body = """ -#extension GL_EXT_control_flow_attributes : enable - -layout(local_size_x = 512, local_size_y = 1, local_size_z = 1) in; - -layout (binding = 0) readonly buffer X {A_TYPE data_a[];}; -layout (binding = 1) writeonly buffer D {D_TYPE data_d[];}; - -void main() { - const uint col = gl_GlobalInvocationID.y; - const uint row = gl_GlobalInvocationID.x; - - if (col >= p.ncols) { - return; - } - - const uint i = row*p.ncols + col; - data_d[i] = D_TYPE(data_a[i] - float(uint(col > p.n_past + row % p.rows_per_channel) * 0xFFFFFFFF)); -} -""" - -# NORMS -norm_body = """ -#extension GL_EXT_control_flow_attributes : enable -#define BLOCK_SIZE 512 - -layout(local_size_x = BLOCK_SIZE, local_size_y = 1, local_size_z = 1) in; - -layout (binding = 0) readonly buffer X {A_TYPE data_a[];}; -layout (binding = 1) writeonly buffer D {D_TYPE data_d[];}; - -shared vec2 sum[BLOCK_SIZE]; - -void main() { - const uint row = gl_WorkGroupID.x; - const uint tid = gl_LocalInvocationID.x; - - const float eps = 1e-5f; - - sum[tid] = vec2(0.0f, 0.0f); - - [[unroll]] for (uint col = tid; col < p.KX; col += BLOCK_SIZE) { - const float xi = float(data_a[row*p.KX + col]); - sum[tid].x += xi; - sum[tid].y += xi * xi; - } - - // sum up partial sums and write back result - barrier(); - [[unroll]] for (int s = BLOCK_SIZE / 2; s > 0; s >>= 1) { - if (tid < s) { - sum[tid] += sum[tid + s]; - } - barrier(); - } - - const float mean = sum[0].x / p.KX; - const float var = sum[0].y / p.KX - mean * mean; - const float inv_std = inversesqrt(var + 1e-5f); - - [[unroll]] for (uint col = tid; col < p.KX; col += BLOCK_SIZE) { - data_d[row*p.KX + col] = D_TYPE((float(data_a[row*p.KX + col]) - mean) * inv_std); - } -} -""" - -rms_norm_body = """ -#extension GL_EXT_control_flow_attributes : enable -#define BLOCK_SIZE 512 - -layout(local_size_x = BLOCK_SIZE, local_size_y = 1, local_size_z = 1) in; - -layout (binding = 0) readonly buffer X {A_TYPE data_a[];}; -layout (binding = 1) writeonly buffer D {D_TYPE data_d[];}; - -shared FLOAT_TYPE sum[BLOCK_SIZE]; - -void main() { - const uint row = gl_WorkGroupID.x; - const uint tid = gl_LocalInvocationID.x; - - sum[tid] = FLOAT_TYPE(0.0f); // partial sum for thread in warp - - [[unroll]] for (uint col = tid; col < p.KX; col += BLOCK_SIZE) { - const FLOAT_TYPE xi = FLOAT_TYPE(data_a[row*p.KX + col]); - sum[tid] += xi * xi; - } - - // sum up partial sums and write back result - barrier(); - [[unroll]] for (int s = BLOCK_SIZE / 2; s > 0; s >>= 1) { - if (tid < s) { - sum[tid] += sum[tid + s]; - } - barrier(); - } - - const FLOAT_TYPE mean = sum[0] / FLOAT_TYPE(p.KX); - const FLOAT_TYPE scale = inversesqrt(mean + FLOAT_TYPE(p.param1)); - - [[unroll]] for (uint col = tid; col < p.KX; col += BLOCK_SIZE) { - data_d[row*p.KX + col] = D_TYPE(scale * FLOAT_TYPE(data_a[row*p.KX + col])); - } -} -""" - -# SOFT_MAX -soft_max_head = """ -#version 450 - -#extension GL_EXT_shader_16bit_storage : require - -layout (push_constant) uniform parameter -{ - uint KX; - uint KY; - uint KZ; - float scale; - float max_bias; - float m0; - float m1; - uint n_head_log2; -} p; -""" - -soft_max_body = """ -#extension GL_EXT_control_flow_attributes : enable -#define BLOCK_SIZE 512 - -layout(local_size_x = BLOCK_SIZE, local_size_y = 1, local_size_z = 1) in; - -layout (binding = 0) readonly buffer X {A_TYPE data_a[];}; -layout (binding = 1) readonly buffer Y {B_TYPE data_b[];}; -layout (binding = 2) readonly buffer Z {C_TYPE data_c[];}; -layout (binding = 3) buffer D {D_TYPE data_d[];}; - -shared FLOAT_TYPE vals[BLOCK_SIZE]; - -void main() { - const uint tid = gl_LocalInvocationID.x; - const uint rowx = gl_WorkGroupID.x; - const uint rowy = rowx % p.KY; - - float slope = 0.0f; - - // ALiBi - if (p.max_bias > 0.0f) { - const uint h = rowx/p.KY; // head index - - const float base = h < p.n_head_log2 ? p.m0 : p.m1; - const uint exp = h < p.n_head_log2 ? h + 1 : 2*(h - p.n_head_log2) + 1; - - slope = pow(base, exp); - } - - // Find max - vals[tid] = uintBitsToFloat(0xFF800000); - - [[unroll]] for (uint col = tid; col < p.KX; col += BLOCK_SIZE) { - vals[tid] = max(vals[tid], FLOAT_TYPE(data_a[rowx * p.KX + col]) * p.scale + (p.KY > 0 ? FLOAT_TYPE(data_b[rowy * p.KX + col]) : FLOAT_TYPE(0.0f)) + (p.KZ > 0 ? slope * data_c[col] : 0.0f)); - } - - barrier(); - [[unroll]] for (int s = BLOCK_SIZE / 2; s > 0; s >>= 1) { - if (tid < s) { - vals[tid] = max(vals[tid], vals[tid + s]); - } - barrier(); - } - - const FLOAT_TYPE max_val = vals[0]; - barrier(); - - // Sum up values - vals[tid] = FLOAT_TYPE(0.0f); - - [[unroll]] for (uint col = tid; col < p.KX; col += BLOCK_SIZE) { - const uint i = rowx * p.KX + col; - const FLOAT_TYPE val = exp(FLOAT_TYPE(data_a[i]) * p.scale + (p.KY > 0 ? FLOAT_TYPE(data_b[rowy * p.KX + col]) : FLOAT_TYPE(0.0f)) - max_val); - vals[tid] += val; - data_d[i] = D_TYPE(val); - } - - barrier(); - [[unroll]] for (int s = BLOCK_SIZE / 2; s > 0; s >>= 1) { - if (tid < s) { - vals[tid] += vals[tid + s]; - } - barrier(); - } - - const D_TYPE divisor = D_TYPE(vals[0]); - - [[unroll]] for (uint col = tid; col < p.KX; col += BLOCK_SIZE) { - data_d[rowx*p.KX + col] /= divisor; - } -} -""" - -# ROPE -rope_src = """ -#version 450 - -#extension GL_EXT_shader_16bit_storage : require - -layout(local_size_x = 1, local_size_y = 256, local_size_z = 1) in; - -layout (binding = 0) readonly buffer X {A_TYPE data_a[];}; -layout (binding = 1) readonly buffer Y {int data_b[];}; -layout (binding = 2) writeonly buffer D {D_TYPE data_d[];}; - -layout (push_constant) uniform parameter { - uint ncols; - float freq_scale; - uint p_delta_rows; - float freq_base; - float ext_factor; - float attn_factor; - float corr_dims[4]; -} p; - -float rope_yarn_ramp(const float low, const float high, const uint i0) { - const float y = (i0 / 2 - low) / max(0.001f, high - low); - return 1.0f - min(1.0f, max(0.0f, y)); -} - -void rope_yarn(const float theta_extrap, const uint i0, out float cos_theta, out float sin_theta) { - float mscale = p.attn_factor; - // Get n-d rotational scaling corrected for extrapolation - float theta_interp = p.freq_scale * theta_extrap; - float theta = theta_interp; - if (p.ext_factor != 0.0f) { - float ramp_mix = rope_yarn_ramp(p.corr_dims[0], p.corr_dims[1], i0) * p.ext_factor; - theta = theta_interp * (1 - ramp_mix) + theta_extrap * ramp_mix; - - // Get n-d magnitude scaling corrected for interpolation - mscale *= 1.0f + 0.1f * log(1.0f / p.freq_scale); - } - cos_theta = cos(theta) * mscale; - sin_theta = sin(theta) * mscale; -} - -void main() { - const uint col = gl_GlobalInvocationID.y * 2; - const uint row = gl_GlobalInvocationID.x; - - if (col >= p.ncols) { - return; - } - - const uint i = row*p.ncols + col; - const uint i2 = row/p.p_delta_rows; - - const int pos = data_b[i2]; - const float theta_base = pos * pow(p.freq_base, -float(col)/p.ncols); - - float cos_theta, sin_theta; - rope_yarn(theta_base, col, cos_theta, sin_theta); - - const float x0 = float(data_a[i + 0]); - const float x1 = float(data_a[i + 1]); - - data_d[i + 0] = D_TYPE(x0*cos_theta - x1*sin_theta); - data_d[i + 1] = D_TYPE(x0*sin_theta + x1*cos_theta); -} -""" - -rope_neox_src = """ -#version 450 - -#extension GL_EXT_shader_16bit_storage : require - -layout(local_size_x = 1, local_size_y = 256, local_size_z = 1) in; - -layout (binding = 0) readonly buffer X {A_TYPE data_a[];}; -layout (binding = 1) readonly buffer Y {int data_b[];}; -layout (binding = 2) writeonly buffer D {D_TYPE data_d[];}; - -layout (push_constant) uniform parameter { - uint ncols; - uint ndims; - float freq_scale; - uint p_delta_rows; - float freq_base; - float ext_factor; - float attn_factor; - float corr_dims[4]; - float theta_scale; - float inv_ndims; -} p; - -float rope_yarn_ramp(const float low, const float high, const uint i0) { - const float y = (i0 / 2 - low) / max(0.001f, high - low); - return 1.0f - min(1.0f, max(0.0f, y)); -} - -void rope_yarn(const float theta_extrap, const uint i0, out float cos_theta, out float sin_theta) { - float mscale = p.attn_factor; - // Get n-d rotational scaling corrected for extrapolation - float theta_interp = p.freq_scale * theta_extrap; - float theta = theta_interp; - if (p.ext_factor != 0.0f) { - float ramp_mix = rope_yarn_ramp(p.corr_dims[0], p.corr_dims[1], i0) * p.ext_factor; - theta = theta_interp * (1 - ramp_mix) + theta_extrap * ramp_mix; - - // Get n-d magnitude scaling corrected for interpolation - mscale *= 1.0f + 0.1f * log(1.0f / p.freq_scale); - } - cos_theta = cos(theta) * mscale; - sin_theta = sin(theta) * mscale; -} - -void main() { - const uint col = gl_GlobalInvocationID.y * 2; - const uint row = gl_GlobalInvocationID.x; - - if (col >= p.ncols) { - return; - } - - const uint ib = col / p.ndims; - const uint ic = col % p.ndims; - - if (ib > 0) { - const uint i = row*p.ncols + ib*p.ndims + ic; - - data_d[i + 0] = data_a[i + 0]; - data_d[i + 1] = data_a[i + 1]; - - return; - } - - const uint i = row*p.ncols + ib*p.ndims + ic/2; - const uint i2 = row/p.p_delta_rows; - - const float cur_rot = p.inv_ndims * ic - ib; - - const int pos = data_b[i2]; - const float theta_base = pos*p.freq_scale*pow(p.theta_scale, col/2.0f); - - float cos_theta, sin_theta; - rope_yarn(theta_base, uint(cur_rot), cos_theta, sin_theta); - - const float x0 = float(data_a[i + 0]); - const float x1 = float(data_a[i + p.ndims/2]); - - data_d[i + 0] = D_TYPE(x0*cos_theta - x1*sin_theta); - data_d[i + p.ndims/2] = D_TYPE(x0*sin_theta + x1*cos_theta); -} -""" - -argsort_src = """ -#version 450 - -#extension GL_EXT_shader_16bit_storage : require - -layout(local_size_x = 1024, local_size_y = 1, local_size_z = 1) in; - -layout (binding = 0) readonly buffer A {A_TYPE data_a[];}; -layout (binding = 1) buffer D {int data_d[];}; - -layout (push_constant) uniform parameter { - uint ncols; - bool ascending; -} p; - -void swap(uint idx0, uint idx1) { - int tmp = data_d[idx0]; - data_d[idx0] = data_d[idx1]; - data_d[idx1] = tmp; -} - -void main() { - // bitonic sort - const int col = int(gl_LocalInvocationID.x); - const uint row = gl_WorkGroupID.y; - - if (col >= p.ncols) { - return; - } - - const uint a_idx = row * p.ncols; - const uint d_idx = row * p.ncols; - - // initialize indices - if (col < p.ncols) { - data_d[col] = col; - } - barrier(); - - for (uint k = 2; k <= p.ncols; k *= 2) { - for (uint j = k / 2; j > 0; j /= 2) { - const uint ixj = col ^ j; - if (ixj > col) { - if ((col & k) == 0) { - if (p.ascending ? data_a[a_idx + data_d[d_idx + col]] > data_a[a_idx + data_d[d_idx + ixj]] : data_a[a_idx + data_d[d_idx + col]] < data_a[a_idx + data_d[d_idx + ixj]]) { - swap(d_idx + col, d_idx + ixj); - } - } else { - if (p.ascending ? data_a[a_idx + data_d[d_idx + col]] < data_a[a_idx + data_d[d_idx + ixj]] : data_a[a_idx + data_d[d_idx + col]] > data_a[a_idx + data_d[d_idx + ixj]]) { - swap(d_idx + col, d_idx + ixj); - } - } - } - barrier(); - } - } -} -""" - -GLSLC = "glslc" - -VK_NUM_TYPES = 16 - -GGML_TYPE_F32 = 0 -GGML_TYPE_F16 = 1 -GGML_TYPE_Q4_0 = 2 -GGML_TYPE_Q4_1 = 3 -GGML_TYPE_Q5_0 = 6 -GGML_TYPE_Q5_1 = 7 -GGML_TYPE_Q8_0 = 8 -GGML_TYPE_Q8_1 = 9 -GGML_TYPE_Q2_K = 10 -GGML_TYPE_Q3_K = 11 -GGML_TYPE_Q4_K = 12 -GGML_TYPE_Q5_K = 13 -GGML_TYPE_Q6_K = 14 -GGML_TYPE_Q8_K = 15 - - -type_names = { - GGML_TYPE_F32: "f32", - GGML_TYPE_F16: "f16", - GGML_TYPE_Q4_0: "q4_0", - GGML_TYPE_Q4_1: "q4_1", - GGML_TYPE_Q5_0: "q5_0", - GGML_TYPE_Q5_1: "q5_1", - GGML_TYPE_Q8_0: "q8_0", - GGML_TYPE_Q8_1: "q8_1", - GGML_TYPE_Q2_K: "q2_K", - GGML_TYPE_Q3_K: "q3_K", - GGML_TYPE_Q4_K: "q4_K", - GGML_TYPE_Q5_K: "q5_K", - GGML_TYPE_Q6_K: "q6_K", - GGML_TYPE_Q8_K: "q8_K", -} - -K_QUANTS_PER_ITERATION = 2 - -ASYNCIO_CONCURRENCY = 64 - -output_dir = gettempdir() - -lock = asyncio.Lock() -shader_fnames = [] - - -async def string_to_spv(name, code, defines, fp16=True): - f = NamedTemporaryFile(mode="w", delete=False) - f.write(code) - f.flush() - - name = f"{name}{'_fp32' if not fp16 else ''}" - fname = os.path.join(output_dir, f"{name}.comp") - - cmd = [GLSLC, "-fshader-stage=compute", "--target-env=vulkan1.2", "-O", f.name, "-o", fname] - - cmd.extend([f"-D{key}={value}" for key, value in defines.items()]) - - proc = await asyncio.create_subprocess_exec(*cmd, stdout=asyncio.subprocess.PIPE, stderr=asyncio.subprocess.PIPE) - - stdout, stderr = await proc.communicate() - - stdout = stdout.decode() - error = stderr.decode() - - if proc.returncode: - # Generate preprocessed code - cmd = [GLSLC, "-E", f.name] - cmd.extend([f"-D{key}={value}" for key, value in defines.items()]) - - proc = await asyncio.create_subprocess_exec(*cmd, stdout=asyncio.subprocess.PIPE, stderr=asyncio.subprocess.PIPE) - - stdout, stderr = await proc.communicate() - - print(" ".join(cmd)) - - if proc.returncode: - raise RuntimeError(f"{name=} {f.name=} {stdout=} {stderr=}") - - preprocessed_code = stdout.decode() - - cmd.extend([f"-D{key}={value}" for key, value in defines.items()]) - code_with_lines = "\n".join([f"{i + 1}: {line}" for i, line in enumerate(preprocessed_code.splitlines())]) - print(f"ERROR compiling {name}\n\n{code_with_lines}\n\n{error}") - f.close() - os.remove(f.name) - sys.exit(proc.returncode) - - f.close() - os.remove(f.name) - - async with lock: - shader_fnames.append((name, fname)) - - -async def main(): - print("ggml_vulkan: Generating and compiling shaders to SPIR-V") - - tasks = [] - - stream = [] - - for fp16 in (False, True): - # mulmat - if fp16: - shader_float_type = shader_f16 - load_vec = "8" - vec_type_f16 = "f16mat2x4" - vec_type = "mat2x4" - else: - shader_float_type = shader_f32 - load_vec = "4" - vec_type_f16 = "f16vec4" - vec_type = "vec4" - - stream.clear() - stream.extend((mulmat_head, shader_float_type, mulmat_body1, mulmat_load_scalar, mulmat_body2)) - tasks.append(string_to_spv("matmul_f32", "".join(stream), {"A_TYPE": "float", "B_TYPE": "float", "D_TYPE": "float"}, fp16)) - tasks.append(string_to_spv("matmul_f32_aligned", "".join(stream), {"LOAD_VEC_A": load_vec, "LOAD_VEC_B": load_vec, "A_TYPE": vec_type, "B_TYPE": vec_type, "D_TYPE": "float"}, fp16)) - - tasks.append(string_to_spv("matmul_f16", "".join(stream), {"A_TYPE": "float16_t", "B_TYPE": "float16_t", "D_TYPE": "float"}, fp16)) - tasks.append(string_to_spv("matmul_f16_aligned", "".join(stream), {"LOAD_VEC_A": load_vec, "LOAD_VEC_B": load_vec, "A_TYPE": vec_type_f16, "B_TYPE": vec_type_f16, "D_TYPE": "float"}, fp16)) - - tasks.append(string_to_spv("matmul_f16_f32", "".join(stream), {"A_TYPE": "float16_t", "B_TYPE": "float", "D_TYPE": "float"}, fp16)) - tasks.append(string_to_spv("matmul_f16_f32_aligned", "".join(stream), {"LOAD_VEC_A": load_vec, "LOAD_VEC_B": load_vec, "A_TYPE": vec_type_f16, "B_TYPE": vec_type, "D_TYPE": "float"}, fp16)) - - stream.clear() - stream.extend((mulmat_head, shader_int8_ext, shader_float_type, shader_q4_0_defines, mulmat_body1, mulmat_load_q4_0, mulmat_body2)) - tasks.append(string_to_spv("matmul_q4_0_f32", "".join(stream), {"LOAD_VEC_A": 2, "A_TYPE": "block_q4_0", "B_TYPE": "float", "D_TYPE": "float"}, fp16)) - tasks.append(string_to_spv("matmul_q4_0_f32_aligned", "".join(stream), {"LOAD_VEC_A": 2, "LOAD_VEC_B": load_vec, "A_TYPE": "block_q4_0", "B_TYPE": vec_type, "D_TYPE": "float"}, fp16)) - - stream.clear() - stream.extend((mulmat_head, shader_int8_ext, shader_float_type, shader_q4_1_defines, mulmat_body1, mulmat_load_q4_1, mulmat_body2)) - tasks.append(string_to_spv("matmul_q4_1_f32", "".join(stream), {"LOAD_VEC_A": 2, "A_TYPE": "block_q4_1", "B_TYPE": "float", "D_TYPE": "float"}, fp16)) - tasks.append(string_to_spv("matmul_q4_1_f32_aligned", "".join(stream), {"LOAD_VEC_A": 2, "LOAD_VEC_B": load_vec, "A_TYPE": "block_q4_1", "B_TYPE": vec_type, "D_TYPE": "float"}, fp16)) - - stream.clear() - stream.extend((mulmat_head, shader_int8_ext, shader_float_type, shader_q5_0_defines, mulmat_body1, mulmat_load_q5_0, mulmat_body2)) - tasks.append(string_to_spv("matmul_q5_0_f32", "".join(stream), {"LOAD_VEC_A": 2, "A_TYPE": "block_q5_0", "B_TYPE": "float", "D_TYPE": "float"}, fp16)) - tasks.append(string_to_spv("matmul_q5_0_f32_aligned", "".join(stream), {"LOAD_VEC_A": 2, "LOAD_VEC_B": load_vec, "A_TYPE": "block_q5_0", "B_TYPE": vec_type, "D_TYPE": "float"}, fp16)) - - stream.clear() - stream.extend((mulmat_head, shader_int8_ext, shader_float_type, shader_q5_1_defines, mulmat_body1, mulmat_load_q5_1, mulmat_body2)) - tasks.append(string_to_spv("matmul_q5_1_f32", "".join(stream), {"LOAD_VEC_A": 2, "A_TYPE": "block_q5_1", "B_TYPE": "float", "D_TYPE": "float"}, fp16)) - tasks.append(string_to_spv("matmul_q5_1_f32_aligned", "".join(stream), {"LOAD_VEC_A": 2, "LOAD_VEC_B": load_vec, "A_TYPE": "block_q5_1", "B_TYPE": vec_type, "D_TYPE": "float"}, fp16)) - - stream.clear() - stream.extend((mulmat_head, shader_int8_ext, shader_float_type, shader_q8_0_defines, mulmat_body1, mulmat_load_q8_0, mulmat_body2)) - tasks.append(string_to_spv("matmul_q8_0_f32", "".join(stream), {"LOAD_VEC_A": 2, "A_TYPE": "block_q8_0", "B_TYPE": "float", "D_TYPE": "float"}, fp16)) - tasks.append(string_to_spv("matmul_q8_0_f32_aligned", "".join(stream), {"LOAD_VEC_A": 2, "LOAD_VEC_B": load_vec, "A_TYPE": "block_q8_0", "B_TYPE": vec_type, "D_TYPE": "float"}, fp16)) - - stream.clear() - stream.extend((mulmat_head, shader_int8_ext, shader_float_type, shader_q2_K_defines, mulmat_body1, mulmat_load_q2_K, mulmat_body2)) - tasks.append(string_to_spv("matmul_q2_k_f32", "".join(stream), {"LOAD_VEC_A": 2, "A_TYPE": "block_q2_K", "B_TYPE": "float", "D_TYPE": "float"}, fp16)) - tasks.append(string_to_spv("matmul_q2_k_f32_aligned", "".join(stream), {"LOAD_VEC_A": 2, "LOAD_VEC_B": load_vec, "A_TYPE": "block_q2_K", "B_TYPE": vec_type, "D_TYPE": "float"}, fp16)) - - stream.clear() - stream.extend((mulmat_head, shader_int8_ext, shader_float_type, shader_q3_K_defines, mulmat_body1, mulmat_load_q3_K, mulmat_body2)) - tasks.append(string_to_spv("matmul_q3_k_f32", "".join(stream), {"LOAD_VEC_A": 2, "A_TYPE": "block_q3_K", "B_TYPE": "float", "D_TYPE": "float"}, fp16)) - tasks.append(string_to_spv("matmul_q3_k_f32_aligned", "".join(stream), {"LOAD_VEC_A": 2, "LOAD_VEC_B": load_vec, "A_TYPE": "block_q3_K", "B_TYPE": vec_type, "D_TYPE": "float"}, fp16)) - - stream.clear() - stream.extend((mulmat_head, shader_int8_ext, shader_float_type, shader_q4_K_defines, mulmat_body1, mulmat_load_q4_K, mulmat_body2)) - tasks.append(string_to_spv("matmul_q4_k_f32", "".join(stream), {"LOAD_VEC_A": 2, "A_TYPE": "block_q4_K", "B_TYPE": "float", "D_TYPE": "float"}, fp16)) - tasks.append(string_to_spv("matmul_q4_k_f32_aligned", "".join(stream), {"LOAD_VEC_A": 2, "LOAD_VEC_B": load_vec, "A_TYPE": "block_q4_K", "B_TYPE": vec_type, "D_TYPE": "float"}, fp16)) - - stream.clear() - stream.extend((mulmat_head, shader_int8_ext, shader_float_type, shader_q5_K_defines, mulmat_body1, mulmat_load_q5_K, mulmat_body2)) - tasks.append(string_to_spv("matmul_q5_k_f32", "".join(stream), {"LOAD_VEC_A": 2, "A_TYPE": "block_q5_K", "B_TYPE": "float", "D_TYPE": "float"}, fp16)) - tasks.append(string_to_spv("matmul_q5_k_f32_aligned", "".join(stream), {"LOAD_VEC_A": 2, "LOAD_VEC_B": load_vec, "A_TYPE": "block_q5_K", "B_TYPE": vec_type, "D_TYPE": "float"}, fp16)) - - stream.clear() - stream.extend((mulmat_head, shader_int8_ext, shader_float_type, shader_q6_K_defines, mulmat_body1, mulmat_load_q6_K, mulmat_body2)) - tasks.append(string_to_spv("matmul_q6_k_f32", "".join(stream), {"LOAD_VEC_A": 2, "A_TYPE": "block_q6_K", "B_TYPE": "float", "D_TYPE": "float"}, fp16)) - tasks.append(string_to_spv("matmul_q6_k_f32_aligned", "".join(stream), {"LOAD_VEC_A": 2, "LOAD_VEC_B": load_vec, "A_TYPE": "block_q6_K", "B_TYPE": vec_type, "D_TYPE": "float"}, fp16)) - - # Shaders where precision is needed, so no fp16 version - - # mul mat vec - for i in range(0, VK_NUM_TYPES): - stream.clear() - stream.extend((mul_mat_vec_head, shader_int8_ext, shader_f32)) - - if i == GGML_TYPE_F16: - stream.extend((shader_f16_defines, shader_float_dequant_func, mul_mat_vec_body)) - elif i == GGML_TYPE_Q4_0: - stream.extend((shader_q4_0_defines, shader_q4_0_dequant_func, mul_mat_vec_body)) - elif i == GGML_TYPE_Q4_1: - stream.extend((shader_q4_1_defines, shader_q4_1_dequant_func, mul_mat_vec_body)) - elif i == GGML_TYPE_Q5_0: - stream.extend((shader_q5_0_defines, shader_q5_0_dequant_func, mul_mat_vec_body)) - elif i == GGML_TYPE_Q5_1: - stream.extend((shader_q5_1_defines, shader_q5_1_dequant_func, mul_mat_vec_body)) - elif i == GGML_TYPE_Q8_0: - stream.extend((shader_q8_0_defines, shader_q8_0_dequant_func, mul_mat_vec_body)) - elif i == GGML_TYPE_Q2_K: - stream.extend((shader_q2_K_defines, mul_mat_vec_q2_K_body)) - elif i == GGML_TYPE_Q3_K: - stream.extend((shader_q3_K_defines, mul_mat_vec_q3_K_body)) - elif i == GGML_TYPE_Q4_K: - stream.extend((shader_q4_K_defines, mul_mat_vec_q4_K_body)) - elif i == GGML_TYPE_Q5_K: - stream.extend((shader_q5_K_defines, mul_mat_vec_q5_K_body)) - elif i == GGML_TYPE_Q6_K: - stream.extend((shader_q6_K_defines, mul_mat_vec_q6_K_body)) - else: - continue - - tasks.append(string_to_spv(f"mul_mat_vec_{type_names[i]}_f32", "".join(stream), {"B_TYPE": "float", "D_TYPE": "float", "K_QUANTS_PER_ITERATION": K_QUANTS_PER_ITERATION})) - - # Dequant shaders - for i in range(0, VK_NUM_TYPES): - stream.clear() - - stream.extend((dequant_head, shader_int8_ext, shader_f32)) - - if i == GGML_TYPE_F32: - stream.append(dequant_f32_body) - elif i == GGML_TYPE_Q4_0: - stream.extend((shader_q4_0_defines, dequant_q4_0_body)) - elif i == GGML_TYPE_Q4_1: - stream.extend((shader_q4_1_defines, dequant_q4_1_body)) - elif i == GGML_TYPE_Q5_0: - stream.extend((shader_q5_0_defines, dequant_q5_0_body)) - elif i == GGML_TYPE_Q5_1: - stream.extend((shader_q5_1_defines, dequant_q5_1_body)) - elif i == GGML_TYPE_Q8_0: - stream.extend((shader_q8_0_defines, dequant_q8_0_body)) - elif i == GGML_TYPE_Q2_K: - stream.extend((shader_q2_K_defines, dequant_q2_K_body)) - elif i == GGML_TYPE_Q3_K: - stream.extend((shader_q3_K_defines, dequant_q3_K_body)) - elif i == GGML_TYPE_Q4_K: - stream.extend((shader_q4_K_defines, dequant_q4_K_body)) - elif i == GGML_TYPE_Q5_K: - stream.extend((shader_q5_K_defines, dequant_q5_K_body)) - elif i == GGML_TYPE_Q6_K: - stream.extend((shader_q6_K_defines, dequant_q6_K_body)) - else: - continue - - tasks.append(string_to_spv(f"dequant_{type_names[i]}", "".join(stream), {"D_TYPE": "float16_t"})) - - # get_rows - for i in range(0, VK_NUM_TYPES): - stream.clear() - stream.extend((generic_binary_op_head, shader_int8_ext, shader_f32)) - optimization_workaround = False - - if i == GGML_TYPE_F32: - stream.extend((shader_f32_defines, generic_binary_op_funcs, get_rows_float_body)) - elif i == GGML_TYPE_F16: - stream.extend((shader_f16_defines, generic_binary_op_funcs, get_rows_float_body)) - optimization_workaround = True - elif i == GGML_TYPE_Q4_0: - stream.extend((shader_q4_0_defines, shader_q4_0_dequant_func, generic_binary_op_funcs, get_rows_body)) - elif i == GGML_TYPE_Q4_1: - stream.extend((shader_q4_1_defines, shader_q4_1_dequant_func, generic_binary_op_funcs, get_rows_body)) - elif i == GGML_TYPE_Q5_0: - stream.extend((shader_q5_0_defines, shader_q5_0_dequant_func, generic_binary_op_funcs, get_rows_body)) - elif i == GGML_TYPE_Q5_1: - stream.extend((shader_q5_1_defines, shader_q5_1_dequant_func, generic_binary_op_funcs, get_rows_body)) - elif i == GGML_TYPE_Q8_0: - stream.extend((shader_q8_0_defines, shader_q8_0_dequant_func, generic_binary_op_funcs, get_rows_body)) - else: - continue - - if optimization_workaround: - tasks.append(string_to_spv(f"get_rows_{type_names[i]}", "".join(stream), {"B_TYPE": "int", "D_TYPE": "float16_t", "OPTIMIZATION_ERROR_WORKAROUND": "1"})) - else: - tasks.append(string_to_spv(f"get_rows_{type_names[i]}", "".join(stream), {"B_TYPE": "int", "D_TYPE": "float16_t"})) - tasks.append(string_to_spv(f"get_rows_{type_names[i]}_f32", "".join(stream), {"B_TYPE": "int", "D_TYPE": "float"})) - - tasks.append(string_to_spv("mul_mat_vec_p021_f16_f32", mul_mat_p021_src, {"A_TYPE": "float16_t", "B_TYPE": "float", "D_TYPE": "float"})) - tasks.append(string_to_spv("mul_mat_vec_nc_f16_f32", mul_mat_nc_src, {"A_TYPE": "float16_t", "B_TYPE": "float", "D_TYPE": "float"})) - - # Norms - tasks.append(string_to_spv("norm_f32", f"{generic_head}\n{shader_f32}\n{norm_body}", {"A_TYPE": "float", "D_TYPE": "float"})) - tasks.append(string_to_spv("rms_norm_f32", f"{generic_head}\n{shader_f32}\n{rms_norm_body}", {"A_TYPE": "float", "D_TYPE": "float"})) - - tasks.append(string_to_spv("cpy_f32_f32", f"{generic_unary_op_combined}\n{cpy_end}", {"A_TYPE": "float", "D_TYPE": "float"})) - tasks.append(string_to_spv("cpy_f32_f16", f"{generic_unary_op_combined}\n{cpy_end}", {"A_TYPE": "float", "D_TYPE": "float16_t"})) - tasks.append(string_to_spv("cpy_f16_f16", f"{generic_unary_op_combined}\n{cpy_f16_f16_end}", {"A_TYPE": "float16_t", "D_TYPE": "float16_t"})) - - tasks.append(string_to_spv("add_f32", f"{generic_binary_op_combined}\n{add_body}", {"A_TYPE": "float", "B_TYPE": "float", "D_TYPE": "float", "FLOAT_TYPE": "float"})) - - tasks.append(string_to_spv("split_k_reduce", mulmat_split_k_reduce_src, {})) - tasks.append(string_to_spv("mul_f32", f"{generic_binary_op_combined}\n{mul_body}", {"A_TYPE": "float", "B_TYPE": "float", "D_TYPE": "float", "FLOAT_TYPE": "float"})) - - tasks.append(string_to_spv("scale_f32", f"{generic_unary_op_combined}\n{scale_body}", {"A_TYPE": "float", "D_TYPE": "float", "FLOAT_TYPE": "float"})) - - tasks.append(string_to_spv("sqr_f32", f"{generic_unary_op_combined}\n{sqr_body}", {"A_TYPE": "float", "D_TYPE": "float", "FLOAT_TYPE": "float"})) - - tasks.append(string_to_spv("clamp_f32", f"{generic_unary_op_combined}\n{clamp_body}", {"A_TYPE": "float", "D_TYPE": "float", "FLOAT_TYPE": "float"})) - - tasks.append(string_to_spv("gelu_f32", f"{generic_head}\n{shader_f32}\n{gelu_body}", {"A_TYPE": "float", "D_TYPE": "float"})) - tasks.append(string_to_spv("silu_f32", f"{generic_head}\n{shader_f32}\n{silu_body}", {"A_TYPE": "float", "D_TYPE": "float"})) - tasks.append(string_to_spv("relu_f32", f"{generic_head}\n{shader_f32}\n{relu_body}", {"A_TYPE": "float", "D_TYPE": "float"})) - - tasks.append(string_to_spv("diag_mask_inf_f32", f"{diag_mask_inf_head}\n{shader_f32}\n{diag_mask_inf_body}", {"A_TYPE": "float", "D_TYPE": "float"})) - - tasks.append(string_to_spv("soft_max_f32", f"{soft_max_head}\n{shader_f32}\n{soft_max_body}", {"A_TYPE": "float", "B_TYPE": "float", "C_TYPE": "float", "D_TYPE": "float"})) - - tasks.append(string_to_spv("rope_f32", rope_src, {"A_TYPE": "float", "D_TYPE": "float"})) - tasks.append(string_to_spv("rope_f16", rope_src, {"A_TYPE": "float16_t", "D_TYPE": "float16_t"})) - - tasks.append(string_to_spv("rope_neox_f32", rope_neox_src, {"A_TYPE": "float", "D_TYPE": "float"})) - tasks.append(string_to_spv("rope_neox_f16", rope_neox_src, {"A_TYPE": "float16_t", "D_TYPE": "float16_t"})) - - tasks.append(string_to_spv("argsort_f32", argsort_src, {"A_TYPE": "float"})) - - # Helper to decorate tasks with semaphore acquisition. - async def withSemaphore(sem, task): - async with sem: - return await task - - # Run tasks concurrently guarded by a concurrency limit. - sem = asyncio.Semaphore(ASYNCIO_CONCURRENCY) - await asyncio.gather(*(withSemaphore(sem, task) for task in tasks)) - - with open("ggml-vulkan-shaders.hpp", "w") as f: - f.write("#include \n\n") - for name, path in sorted(shader_fnames): - - with open(path, "rb") as spv: - counter = 0 - newline_counter = 0 - f.write(f"unsigned char {name}_data[] = {{\n") - for val in spv.read(): - f.write(f"0x{val:02x},") - newline_counter += 1 - counter += 1 - if newline_counter >= 12: - newline_counter = 0 - f.write("\n") - f.write("\n};\n") - f.write(f"const uint64_t {name}_len = {counter};\n\n") - os.remove(path) - - -if __name__ == "__main__": - parser = argparse.ArgumentParser(description="GGML Vulkan Shader Generator") - - parser.add_argument("--glslc", help="Path to glslc") - - args = parser.parse_args() - - if args.glslc: - GLSLC = args.glslc - - asyncio.run(main()) diff --git a/kompute b/kompute deleted file mode 160000 index 4565194ed7c..00000000000 --- a/kompute +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 4565194ed7c32d1d2efa32ceab4d3c6cae006306 diff --git a/kompute-shaders/common.comp b/kompute-shaders/common.comp deleted file mode 100644 index 62d62b025ec..00000000000 --- a/kompute-shaders/common.comp +++ /dev/null @@ -1,102 +0,0 @@ -#extension GL_EXT_shader_16bit_storage: require -#extension GL_EXT_shader_8bit_storage: require -#extension GL_EXT_shader_explicit_arithmetic_types_float16: require -#extension GL_EXT_shader_explicit_arithmetic_types_int8: require -#extension GL_EXT_shader_explicit_arithmetic_types_int16: require -#extension GL_EXT_control_flow_attributes: enable -#extension GL_KHR_shader_subgroup_arithmetic : require -#extension GL_EXT_debug_printf : enable - -#define QK4_0 32 -#define QK4_1 32 - -#define GELU_COEF_A 0.044715 -#define SQRT_2_OVER_PI 0.79788456080286535587989211986876 -#define TWOPI_F 6.283185307179586f - -#define QK_K 256 - -#define u8BufToU16(buf, idx) (((uint16_t(buf[idx + 1]) << 8)) | buf[idx]) -#define u8BufToFloat16(buf, idx) uint16BitsToHalf u8BufToU16(buf, idx) -#define u8BufToU32(buf, idx) (((uint32_t u8BufToU16(buf, idx + 2) << 8 | buf[idx + 1]) << 8) | buf[idx]) -#define u8BufToFloat(buf, idx) uintBitsToFloat u8BufToU32(buf, idx) - -#define sizeof_block_q4_0 0x12 -struct block_q4_0 { - float16_t d; - uint8_t qs[QK4_0 / 2]; -}; -mat4 dequantize_q4_0(const block_q4_0 xb, uint il) { - const float d1 = il != 0 ? (xb.d / 16.f) : xb.d; - const float d2 = d1 / 256.f; - const float md = -8.f * xb.d; - const uint16_t mask0 = il != 0 ? uint16_t(0x00F0) : uint16_t(0x000F); - const uint16_t mask1 = mask0 << 8; - - mat4 reg; - for (int i=0;i<8;i++) { - uint16_t b = (uint16_t(xb.qs[2 * i + 1]) << 8) | uint16_t(xb.qs[2 * i]); - reg[i/2][2*(i%2)+0] = d1 * (b & mask0) + md; - reg[i/2][2*(i%2)+1] = d2 * (b & mask1) + md; - } - return reg; -} - -#define sizeof_block_q4_1 0x14 -struct block_q4_1 { - float16_t d; - float16_t m; - uint8_t qs[QK4_1 / 2]; -}; -mat4 dequantize_q4_1(const block_q4_1 xb, uint il) { - const float d1 = il != 0 ? (xb.d / 16.f) : xb.d; - const float d2 = d1 / 256.f; - const float m = xb.m; - const uint16_t mask0 = il != 0 ? uint16_t(0x00F0) : uint16_t(0x000F); - const uint16_t mask1 = mask0 << 8; - - mat4 reg; - for (int i=0;i<8;i++) { - uint16_t b = (uint16_t(xb.qs[2 * i + 1]) << 8) | uint16_t(xb.qs[2 * i]); - reg[i/2][2*(i%2)+0] = ((b & mask0) * d1) + m; - reg[i/2][2*(i%2)+1] = ((b & mask1) * d2) + m; - } - return reg; -} - -#define sizeof_block_q6_k 210 -struct block_q6_k { - uint8_t ql[QK_K/2]; // quants, lower 4 bits - uint8_t qh[QK_K/4]; // quants, upper 2 bits - int8_t scales[QK_K/16]; // scales, quantized with 8 bits - float16_t d; // super-block scale -}; -mat4 dequantize_q6_k(const block_q6_k xb, uint il) { - const float16_t d_all = xb.d; - - const uint qlIndex = 64*(il/8) + 32*((il/2)&1) + 16*(il&1); - const uint qhIndex = 32*(il/8) + 16*(il&1); - float16_t sc = xb.scales[(il%2) + 2 * ((il/2))]; - il = (il/2) & 3; - - const uint16_t kmask1 = il>1 ? uint16_t(il>2 ? 192 : 48) : uint16_t(il>0 ? 12 : 3); - const uint16_t kmask2 = il>1 ? uint8_t(0xF0) : uint8_t(0x0F); - const float16_t coef = il>1 ? float16_t(1.f/16.f) : float16_t(1.f); - const float16_t ml = float16_t(d_all * sc * 32.f); - const float16_t dl = float16_t(d_all * sc * coef); - mat4 reg; - for (int i = 0; i < 16; ++i) { - const float16_t q = (il&1) != 0 ? ((xb.ql[qlIndex + i] & kmask2) | ((xb.qh[qhIndex + i] & kmask1) << 2)) - : ((xb.ql[qlIndex + i] & kmask2) | ((xb.qh[qhIndex + i] & kmask1) << 4)); - reg[i/4][i%4] = dl * q - ml; - } - return reg; -} - - -#define QK8_0 32 -// struct block_q8_0 { -// float16_t d; // delta -// int8_t qs[QK8_0]; // quants -// }; -#define sizeof_block_q8_0 34 diff --git a/kompute-shaders/op_add.comp b/kompute-shaders/op_add.comp deleted file mode 100644 index b7b76a79dbd..00000000000 --- a/kompute-shaders/op_add.comp +++ /dev/null @@ -1,58 +0,0 @@ -#version 450 - -#include "common.comp" - -layout(local_size_x = 1024) in; - -layout(binding = 0) buffer restrict readonly tensorInA { float inA[]; }; -layout(binding = 1) buffer restrict readonly tensorInB { float inB[]; }; -layout(binding = 2) buffer restrict writeonly tensorOut { float out_[]; }; - -layout(push_constant) uniform PushConstants { - uint inAOff; - uint inBOff; - uint outOff; - int ne00; - int nb00; - int nb01; - int nb02; - int nb03; - int ne10; - int ne11; - int ne12; - int ne13; - int nb10; - int nb11; - int nb12; - int nb13; - int ne0; - int nb0; - int nb1; - int nb2; - int nb3; - //int offs; // TODO: needed for GGML_OP_ACC, see metal code -} pcs; - -// general-purpose kernel for addition of two tensors -// pros: works for non-contiguous tensors, supports broadcast across dims 1, 2 and 3 -// cons: not very efficient -void main() { - const uint i03 = gl_WorkGroupID.z; - const uint i02 = gl_WorkGroupID.y; - const uint i01 = gl_WorkGroupID.x; - - const uint i13 = i03 % pcs.ne13; - const uint i12 = i02 % pcs.ne12; - const uint i11 = i01 % pcs.ne11; - - int offs = 0; // TMP (see above) - - uint src0_off = uint((i03*pcs.nb03 + i02*pcs.nb02 + i01*pcs.nb01 + offs) / 4); - uint src1_off = uint((i13*pcs.nb13 + i12*pcs.nb12 + i11*pcs.nb11 ) / 4); - uint dst_off = uint((i03*pcs.nb3 + i02*pcs.nb2 + i01*pcs.nb1 + offs) / 4); - - for (uint i0 = gl_LocalInvocationID.x; i0 < pcs.ne0; i0 += gl_WorkGroupSize.x) { - const uint i10 = i0 % pcs.ne10; - out_[pcs.outOff + dst_off + i0] = inA[pcs.inAOff + src0_off + i0] + inB[pcs.inBOff + src1_off + i10]; - } -} diff --git a/kompute-shaders/op_addrow.comp b/kompute-shaders/op_addrow.comp deleted file mode 100644 index 2376a6b8f03..00000000000 --- a/kompute-shaders/op_addrow.comp +++ /dev/null @@ -1,25 +0,0 @@ -#version 450 - -#include "common.comp" - -layout(local_size_x = 1) in; - -layout(binding = 0) buffer restrict readonly tensorInA { float inA[]; }; -layout(binding = 1) buffer restrict readonly tensorInB { float inB[]; }; -layout(binding = 2) buffer restrict writeonly tensorOut { float out_[]; }; - -layout(push_constant) uniform PushConstants { - uint inAOff; - uint inBOff; - uint outOff; - uint row; -} pcs; - -void main() { - const uint baseIndex = gl_WorkGroupID.x * 4; - - for (uint x = 0; x < 4; x++) { - const uint i = baseIndex + x; - out_[i + pcs.outOff] = inA[i + pcs.inAOff] + inB[(i % pcs.row) + pcs.inBOff]; - } -} diff --git a/kompute-shaders/op_cpy_f16_f16.comp b/kompute-shaders/op_cpy_f16_f16.comp deleted file mode 100644 index d57247d2dcc..00000000000 --- a/kompute-shaders/op_cpy_f16_f16.comp +++ /dev/null @@ -1,52 +0,0 @@ -#version 450 - -#include "common.comp" - -#define IN_TYPE float16_t -#define IN_TYPE_SIZE 2 -#define OUT_TYPE float16_t -#define OUT_TYPE_SIZE 2 - -layout(local_size_x = 1024) in; - -layout (binding = 0) readonly buffer tensorIn { IN_TYPE in_[]; }; -layout (binding = 1) writeonly buffer tensorOut { OUT_TYPE out_[]; }; - -layout (push_constant) uniform parameter { - uint inOff; - uint outOff; - int ne00; - int ne01; - int ne02; - uint nb00; - uint nb01; - uint nb02; - uint nb03; - int ne0; - int ne1; - int ne2; - uint nb0; - uint nb1; - uint nb2; - uint nb3; -} pcs; - -void main() { - const uint i03 = gl_WorkGroupID.z; - const uint i02 = gl_WorkGroupID.y; - const uint i01 = gl_WorkGroupID.x; - - const int n = int(i03)*pcs.ne02*pcs.ne01*pcs.ne00 + int(i02)*pcs.ne01*pcs.ne00 + int(i01)*pcs.ne00; - - const int i3 = n / (pcs.ne2*pcs.ne1*pcs.ne0); - const int i2 = (n - i3*pcs.ne2*pcs.ne1*pcs.ne0) / (pcs.ne1*pcs.ne0); - const int i1 = (n - i3*pcs.ne2*pcs.ne1*pcs.ne0 - i2*pcs.ne1*pcs.ne0) / pcs.ne0; - const int i0 = (n - i3*pcs.ne2*pcs.ne1*pcs.ne0 - i2*pcs.ne1*pcs.ne0 - i1*pcs.ne0); - - const uint dst_data = (i3*pcs.nb3 + i2*pcs.nb2 + i1*pcs.nb1 + i0*pcs.nb0) / OUT_TYPE_SIZE + pcs.outOff; // Based from out_ - - for (uint i00 = gl_LocalInvocationID.x; i00 < pcs.ne00; i00 += gl_WorkGroupSize.x) { - const uint src = uint((i03*pcs.nb03 + i02*pcs.nb02 + i01*pcs.nb01 + i00*pcs.nb00) / IN_TYPE_SIZE) + pcs.inOff; // Based from in_ - out_[dst_data+i00] = OUT_TYPE(in_[src]); - } -} diff --git a/kompute-shaders/op_cpy_f16_f32.comp b/kompute-shaders/op_cpy_f16_f32.comp deleted file mode 100644 index b568bcd7b26..00000000000 --- a/kompute-shaders/op_cpy_f16_f32.comp +++ /dev/null @@ -1,52 +0,0 @@ -#version 450 - -#include "common.comp" - -#define IN_TYPE float16_t -#define IN_TYPE_SIZE 2 -#define OUT_TYPE float -#define OUT_TYPE_SIZE 4 - -layout(local_size_x = 1024) in; - -layout (binding = 0) readonly buffer tensorIn { IN_TYPE in_[]; }; -layout (binding = 1) writeonly buffer tensorOut { OUT_TYPE out_[]; }; - -layout (push_constant) uniform parameter { - uint inOff; - uint outOff; - int ne00; - int ne01; - int ne02; - uint nb00; - uint nb01; - uint nb02; - uint nb03; - int ne0; - int ne1; - int ne2; - uint nb0; - uint nb1; - uint nb2; - uint nb3; -} pcs; - -void main() { - const uint i03 = gl_WorkGroupID.z; - const uint i02 = gl_WorkGroupID.y; - const uint i01 = gl_WorkGroupID.x; - - const int n = int(i03)*pcs.ne02*pcs.ne01*pcs.ne00 + int(i02)*pcs.ne01*pcs.ne00 + int(i01)*pcs.ne00; - - const int i3 = n / (pcs.ne2*pcs.ne1*pcs.ne0); - const int i2 = (n - i3*pcs.ne2*pcs.ne1*pcs.ne0) / (pcs.ne1*pcs.ne0); - const int i1 = (n - i3*pcs.ne2*pcs.ne1*pcs.ne0 - i2*pcs.ne1*pcs.ne0) / pcs.ne0; - const int i0 = (n - i3*pcs.ne2*pcs.ne1*pcs.ne0 - i2*pcs.ne1*pcs.ne0 - i1*pcs.ne0); - - const uint dst_data = (i3*pcs.nb3 + i2*pcs.nb2 + i1*pcs.nb1 + i0*pcs.nb0) / OUT_TYPE_SIZE + pcs.outOff; // Based from out_ - - for (uint i00 = gl_LocalInvocationID.x; i00 < pcs.ne00; i00 += gl_WorkGroupSize.x) { - const uint src = uint((i03*pcs.nb03 + i02*pcs.nb02 + i01*pcs.nb01 + i00*pcs.nb00) / IN_TYPE_SIZE) + pcs.inOff; // Based from in_ - out_[dst_data+i00] = OUT_TYPE(in_[src]); - } -} diff --git a/kompute-shaders/op_cpy_f32_f16.comp b/kompute-shaders/op_cpy_f32_f16.comp deleted file mode 100644 index 99b22834308..00000000000 --- a/kompute-shaders/op_cpy_f32_f16.comp +++ /dev/null @@ -1,52 +0,0 @@ -#version 450 - -#include "common.comp" - -#define IN_TYPE float -#define IN_TYPE_SIZE 4 -#define OUT_TYPE float16_t -#define OUT_TYPE_SIZE 2 - -layout(local_size_x = 1024) in; - -layout (binding = 0) readonly buffer tensorIn { IN_TYPE in_[]; }; -layout (binding = 1) writeonly buffer tensorOut { OUT_TYPE out_[]; }; - -layout (push_constant) uniform parameter { - uint inOff; - uint outOff; - int ne00; - int ne01; - int ne02; - uint nb00; - uint nb01; - uint nb02; - uint nb03; - int ne0; - int ne1; - int ne2; - uint nb0; - uint nb1; - uint nb2; - uint nb3; -} pcs; - -void main() { - const uint i03 = gl_WorkGroupID.z; - const uint i02 = gl_WorkGroupID.y; - const uint i01 = gl_WorkGroupID.x; - - const int n = int(i03)*pcs.ne02*pcs.ne01*pcs.ne00 + int(i02)*pcs.ne01*pcs.ne00 + int(i01)*pcs.ne00; - - const int i3 = n / (pcs.ne2*pcs.ne1*pcs.ne0); - const int i2 = (n - i3*pcs.ne2*pcs.ne1*pcs.ne0) / (pcs.ne1*pcs.ne0); - const int i1 = (n - i3*pcs.ne2*pcs.ne1*pcs.ne0 - i2*pcs.ne1*pcs.ne0) / pcs.ne0; - const int i0 = (n - i3*pcs.ne2*pcs.ne1*pcs.ne0 - i2*pcs.ne1*pcs.ne0 - i1*pcs.ne0); - - const uint dst_data = (i3*pcs.nb3 + i2*pcs.nb2 + i1*pcs.nb1 + i0*pcs.nb0) / OUT_TYPE_SIZE + pcs.outOff; // Based from out_ - - for (uint i00 = gl_LocalInvocationID.x; i00 < pcs.ne00; i00 += gl_WorkGroupSize.x) { - const uint src = uint((i03*pcs.nb03 + i02*pcs.nb02 + i01*pcs.nb01 + i00*pcs.nb00) / IN_TYPE_SIZE) + pcs.inOff; // Based from in_ - out_[dst_data+i00] = OUT_TYPE(in_[src]); - } -} diff --git a/kompute-shaders/op_cpy_f32_f32.comp b/kompute-shaders/op_cpy_f32_f32.comp deleted file mode 100644 index 2fc998492b7..00000000000 --- a/kompute-shaders/op_cpy_f32_f32.comp +++ /dev/null @@ -1,52 +0,0 @@ -#version 450 - -#include "common.comp" - -#define IN_TYPE float -#define IN_TYPE_SIZE 4 -#define OUT_TYPE float -#define OUT_TYPE_SIZE 4 - -layout(local_size_x = 1024) in; - -layout (binding = 0) readonly buffer tensorIn { IN_TYPE in_[]; }; -layout (binding = 1) writeonly buffer tensorOut { OUT_TYPE out_[]; }; - -layout (push_constant) uniform parameter { - uint inOff; - uint outOff; - int ne00; - int ne01; - int ne02; - uint nb00; - uint nb01; - uint nb02; - uint nb03; - int ne0; - int ne1; - int ne2; - uint nb0; - uint nb1; - uint nb2; - uint nb3; -} pcs; - -void main() { - const uint i03 = gl_WorkGroupID.z; - const uint i02 = gl_WorkGroupID.y; - const uint i01 = gl_WorkGroupID.x; - - const int n = int(i03)*pcs.ne02*pcs.ne01*pcs.ne00 + int(i02)*pcs.ne01*pcs.ne00 + int(i01)*pcs.ne00; - - const int i3 = n / (pcs.ne2*pcs.ne1*pcs.ne0); - const int i2 = (n - i3*pcs.ne2*pcs.ne1*pcs.ne0) / (pcs.ne1*pcs.ne0); - const int i1 = (n - i3*pcs.ne2*pcs.ne1*pcs.ne0 - i2*pcs.ne1*pcs.ne0) / pcs.ne0; - const int i0 = (n - i3*pcs.ne2*pcs.ne1*pcs.ne0 - i2*pcs.ne1*pcs.ne0 - i1*pcs.ne0); - - const uint dst_data = (i3*pcs.nb3 + i2*pcs.nb2 + i1*pcs.nb1 + i0*pcs.nb0) / OUT_TYPE_SIZE + pcs.outOff; // Based from out_ - - for (uint i00 = gl_LocalInvocationID.x; i00 < pcs.ne00; i00 += gl_WorkGroupSize.x) { - const uint src = uint((i03*pcs.nb03 + i02*pcs.nb02 + i01*pcs.nb01 + i00*pcs.nb00) / IN_TYPE_SIZE) + pcs.inOff; // Based from in_ - out_[dst_data+i00] = OUT_TYPE(in_[src]); - } -} diff --git a/kompute-shaders/op_diagmask.comp b/kompute-shaders/op_diagmask.comp deleted file mode 100644 index 291c3fc1897..00000000000 --- a/kompute-shaders/op_diagmask.comp +++ /dev/null @@ -1,30 +0,0 @@ -#version 450 - -#include "common.comp" - -layout(local_size_x = 1) in; - -layout(binding = 0) buffer restrict readonly tensorIn { float in_[]; }; -layout(binding = 1) buffer restrict writeonly tensorOut { float out_[]; }; - -layout(push_constant) uniform PushConstants { - uint inOff; - uint outOff; - uint n_past; - int ne00; - int ne01; -} pcs; - -void main() { - const uint i02 = gl_WorkGroupID.z; - const uint i01 = gl_WorkGroupID.y; - const uint i00 = gl_WorkGroupID.x; - - const uint index = i02*pcs.ne01*pcs.ne00 + i01*pcs.ne00 + i00; - - if (i00 > pcs.n_past + i01) { - out_[index + pcs.outOff] = uintBitsToFloat(0xFF800000); - } else { - out_[index + pcs.outOff] = in_[index + pcs.inOff]; - } -} diff --git a/kompute-shaders/op_gelu.comp b/kompute-shaders/op_gelu.comp deleted file mode 100644 index 9d8c53710af..00000000000 --- a/kompute-shaders/op_gelu.comp +++ /dev/null @@ -1,22 +0,0 @@ -#version 450 - -#include "common.comp" - -layout(local_size_x = 1) in; - -layout(binding = 0) buffer restrict readonly tensorIn { float in_[]; }; -layout(binding = 1) buffer restrict writeonly tensorOut { float out_[]; }; -layout(push_constant) uniform PushConstants { - uint inOff; - uint outOff; -} pcs; - -void main() { - const uint baseIndex = gl_WorkGroupID.x * 8; - - for (uint x = 0; x < 8; x++) { - const uint i = baseIndex + x; - const float y = in_[i + pcs.inOff]; - out_[i + pcs.outOff] = 0.5*y*(1.0 + tanh(clamp(SQRT_2_OVER_PI*y*(1.0 + GELU_COEF_A*y*y), -15.0, 15.0))); - } -} diff --git a/kompute-shaders/op_getrows.comp b/kompute-shaders/op_getrows.comp deleted file mode 100644 index 1a5581b23a9..00000000000 --- a/kompute-shaders/op_getrows.comp +++ /dev/null @@ -1,17 +0,0 @@ -void main() { - const uint i = gl_WorkGroupID.x; - const int r = inB[i + pcs.inBOff]; - - int z = 0; - for (uint ind = gl_LocalInvocationID.x; ind < pcs.ne00/16; ind += gl_WorkGroupSize.x) { - const uint inIndex = (r * pcs.nb01 + pcs.inAOff) + ind/NL * SIZE_OF_BLOCK; - const mat4 result = dequantize_block(inIndex, ind%NL); - for (uint j = 0; j < 4; ++j) { - for (uint k = 0; k < 4; ++k) { - const uint outIndex = i * pcs.nb1/BYTES_FOR_TYPE + pcs.outOff + z; - out_[outIndex] = result[j][k]; - ++z; - } - } - } -} diff --git a/kompute-shaders/op_getrows_f16.comp b/kompute-shaders/op_getrows_f16.comp deleted file mode 100644 index 48c93610811..00000000000 --- a/kompute-shaders/op_getrows_f16.comp +++ /dev/null @@ -1,31 +0,0 @@ -#version 450 - -#include "common.comp" - -layout(local_size_x = 1) in; - -layout (binding = 0) readonly buffer tensorInA { float16_t inA[]; }; -layout (binding = 1) readonly buffer tensorInB { int inB[]; }; -layout (binding = 2) writeonly buffer tensorOut { float out_[]; }; - -layout (push_constant) uniform parameter { - uint inAOff; - uint inBOff; - uint outOff; - int ne00; - int nb01; - int nb1; -} pcs; - -void dequantize_row_f16(uint x /*Based from inA unaligned*/, uint y /*Based from out_*/, int k) { - for (int j = 0; j < k; j++) { - out_[y + j] = inA[x + j]; - } -} - -void main() { - const uint i = gl_WorkGroupID.x; - const int r = inB[i + pcs.inBOff]; - - dequantize_row_f16(r*pcs.nb01/2/*bytes for float16*/ + pcs.inAOff, i*pcs.nb1/4 + pcs.outOff, pcs.ne00); -} diff --git a/kompute-shaders/op_getrows_q4_0.comp b/kompute-shaders/op_getrows_q4_0.comp deleted file mode 100644 index 32b2e891e8f..00000000000 --- a/kompute-shaders/op_getrows_q4_0.comp +++ /dev/null @@ -1,38 +0,0 @@ -#version 450 - -#include "common.comp" - -#define NL 2 -#define BYTES_FOR_TYPE 4 /*bytes for float*/ -#define SIZE_OF_BLOCK sizeof_block_q4_0 - -layout(local_size_x = 1) in; - -layout (binding = 0) readonly buffer tensorInA { uint8_t inA[]; }; -layout (binding = 1) readonly buffer tensorInB { int inB[]; }; -layout (binding = 2) writeonly buffer tensorOut { float out_[]; }; - -layout (push_constant) uniform parameter { - uint inAOff; - uint inBOff; - uint outOff; - int ne00; - int nb01; - int nb1; -} pcs; - -block_q4_0 get_unaligned_block_q4_0(uint index) { - block_q4_0 fres; - fres.d = u8BufToFloat16(inA, index); - [[unroll]] for (uint it = 0; it != QK4_0 / 2; it++) { - fres.qs[it] = inA[index+2+it]; - } - return fres; -} - -mat4 dequantize_block(uint index, uint il) { - const block_q4_0 block = get_unaligned_block_q4_0(index); - return dequantize_q4_0(block, il); -} - -#include "op_getrows.comp" diff --git a/kompute-shaders/op_getrows_q4_1.comp b/kompute-shaders/op_getrows_q4_1.comp deleted file mode 100644 index 87f2fbe17bb..00000000000 --- a/kompute-shaders/op_getrows_q4_1.comp +++ /dev/null @@ -1,39 +0,0 @@ -#version 450 - -#include "common.comp" - -#define NL 2 -#define BYTES_FOR_TYPE 4 /*bytes for float*/ -#define SIZE_OF_BLOCK sizeof_block_q4_1 - -layout(local_size_x = 1) in; - -layout (binding = 0) readonly buffer tensorInA { uint8_t inA[]; }; -layout (binding = 1) readonly buffer tensorInB { int inB[]; }; -layout (binding = 2) writeonly buffer tensorOut { float out_[]; }; - -layout (push_constant) uniform parameter { - uint inAOff; - uint inBOff; - uint outOff; - int ne00; - int nb01; - int nb1; -} pcs; - -block_q4_1 get_unaligned_block_q4_1(uint index) { - block_q4_1 fres; - fres.d = u8BufToFloat16(inA, index); - fres.m = u8BufToFloat16(inA, index+2); - [[unroll]] for (uint it = 0; it != QK4_1 / 2; it++) { - fres.qs[it] = inA[index+4+it]; - } - return fres; -} - -mat4 dequantize_block(uint index, uint il) { - const block_q4_1 block = get_unaligned_block_q4_1(index); - return dequantize_q4_1(block, il); -} - -#include "op_getrows.comp" diff --git a/kompute-shaders/op_getrows_q6_k.comp b/kompute-shaders/op_getrows_q6_k.comp deleted file mode 100644 index 9ce3545d1ec..00000000000 --- a/kompute-shaders/op_getrows_q6_k.comp +++ /dev/null @@ -1,44 +0,0 @@ -#version 450 - -#include "common.comp" - -#define NL 16 -#define BYTES_FOR_TYPE 4 /*bytes for float*/ -#define SIZE_OF_BLOCK sizeof_block_q6_k - -layout(local_size_x = 1) in; - -layout (binding = 0) readonly buffer tensorInA { uint8_t inA[]; }; -layout (binding = 1) readonly buffer tensorInB { int inB[]; }; -layout (binding = 2) writeonly buffer tensorOut { float out_[]; }; - -layout (push_constant) uniform parameter { - uint inAOff; - uint inBOff; - uint outOff; - int ne00; - int nb01; - int nb1; -} pcs; - -block_q6_k get_unaligned_block_q6_k(uint index) { - block_q6_k fres; - [[unroll]] for (uint it = 0; it != QK_K / 2; it++) { - fres.ql[it] = inA[index + it]; - } - [[unroll]] for (uint it = 0; it != QK_K / 4; it++) { - fres.qh[it] = inA[index + QK_K/2 + it]; - } - [[unroll]] for (uint it = 0; it != QK_K / 16; it++) { - fres.scales[it] = int8_t(inA[index + QK_K/2 + QK_K/4 + it]); - } - fres.d = u8BufToFloat16(inA, index + QK_K/2 + QK_K/4 + QK_K/16); - return fres; -} - -mat4 dequantize_block(uint index, uint il) { - const block_q6_k block = get_unaligned_block_q6_k(index); - return dequantize_q6_k(block, il); -} - -#include "op_getrows.comp" diff --git a/kompute-shaders/op_mul.comp b/kompute-shaders/op_mul.comp deleted file mode 100644 index c92647c4db1..00000000000 --- a/kompute-shaders/op_mul.comp +++ /dev/null @@ -1,52 +0,0 @@ -#version 450 - -#include "common.comp" - -layout(local_size_x = 1024) in; - -layout(binding = 0) buffer restrict readonly tensorInA { float inA[]; }; -layout(binding = 1) buffer restrict readonly tensorInB { float inB[]; }; -layout(binding = 2) buffer restrict writeonly tensorOut { float out_[]; }; - -layout(push_constant) uniform PushConstants { - uint inAOff; - uint inBOff; - uint outOff; - int ne00; - int nb00; - int nb01; - int nb02; - int nb03; - int ne10; - int ne11; - int ne12; - int ne13; - int nb10; - int nb11; - int nb12; - int nb13; - int ne0; - int nb0; - int nb1; - int nb2; - int nb3; -} pcs; - -void main() { - const uint i03 = gl_WorkGroupID.z; - const uint i02 = gl_WorkGroupID.y; - const uint i01 = gl_WorkGroupID.x; - - const uint i13 = i03 % pcs.ne13; - const uint i12 = i02 % pcs.ne12; - const uint i11 = i01 % pcs.ne11; - - uint src0_off = uint((i03*pcs.nb03 + i02*pcs.nb02 + i01*pcs.nb01) / 4); - uint src1_off = uint((i13*pcs.nb13 + i12*pcs.nb12 + i11*pcs.nb11) / 4); - uint dst_off = uint((i03*pcs.nb3 + i02*pcs.nb2 + i01*pcs.nb1) / 4); - - for (uint i0 = gl_LocalInvocationID.x; i0 < pcs.ne0; i0 += gl_WorkGroupSize.x) { - const uint i10 = i0 % pcs.ne10; - out_[pcs.outOff + dst_off + i0] = inA[pcs.inAOff + src0_off + i0] * inB[pcs.inBOff + src1_off + i10]; - } -} diff --git a/kompute-shaders/op_mul_mat_f16.comp b/kompute-shaders/op_mul_mat_f16.comp deleted file mode 100644 index 8f0a9031f7a..00000000000 --- a/kompute-shaders/op_mul_mat_f16.comp +++ /dev/null @@ -1,67 +0,0 @@ -#version 450 - -#include "common.comp" - -#extension GL_KHR_shader_subgroup_arithmetic : require - -layout(local_size_x_id = 0) in; - -layout (binding = 0) readonly buffer tensorInA { float16_t inA[]; }; -layout (binding = 1) readonly buffer tensorInB { float inB[]; }; -layout (binding = 2) writeonly buffer tensorOut { float out_[]; }; - -layout (push_constant) uniform parameter { - uint inAOff; - uint inBOff; - uint outOff; - int ne00; - int ne01; - int ne02; - uint nb00; - uint nb01; - uint nb02; - int ne10; - int ne11; - int ne12; - uint nb10; - uint nb11; - uint nb12; - int ne0; - int ne1; - uint r2; - uint r3; -} pcs; - -#define N_F16_F32 4 - -void main() { - const uint r0 = gl_WorkGroupID.x; - const uint rb = gl_WorkGroupID.y*N_F16_F32; - const uint im = gl_WorkGroupID.z; - - const uint i12 = im%pcs.ne12; - const uint i13 = im/pcs.ne12; - - const uint offset0 = r0*pcs.nb01 + (i12/pcs.r2)*pcs.nb02 + (i13/pcs.r3)*pcs.nb02*pcs.ne02; - - const uint x = offset0 / 2 + pcs.inAOff; // Based from inA - - for (uint row = 0; row < N_F16_F32; ++row) { - uint r1 = rb + row; - if (r1 >= pcs.ne11) { - break; - } - - const uint y = (r1*pcs.nb11 + im*pcs.nb12) / 4 + pcs.inBOff; // Based from inB - - float sumf = 0; - for (uint i = gl_SubgroupInvocationID.x; i < pcs.ne00; i += gl_SubgroupSize) { - sumf += float(inA[x+i]) * float(inB[y+i]); - } - - const float all_sum = subgroupAdd(sumf); - if (subgroupElect()) { - out_[im*pcs.ne1*pcs.ne0 + r1*pcs.ne0 + r0 + pcs.outOff] = all_sum; - } - } -} diff --git a/kompute-shaders/op_mul_mat_mat_f32.comp b/kompute-shaders/op_mul_mat_mat_f32.comp deleted file mode 100644 index d1ca4ad6c25..00000000000 --- a/kompute-shaders/op_mul_mat_mat_f32.comp +++ /dev/null @@ -1,51 +0,0 @@ -#version 450 - -#include "common.comp" - -#extension GL_KHR_shader_subgroup_arithmetic : require -#extension GL_EXT_debug_printf : enable - -// device subgroup size -layout (local_size_x_id = 0) in; - -layout(binding = 0) readonly buffer tensorInA { float inA[]; }; -layout(binding = 1) readonly buffer tensorInB { float inB[]; }; -layout(binding = 2) writeonly buffer tensorOut { float out_[]; }; - -layout(push_constant) uniform parameter { - uint inAOff; - uint inBOff; - uint outOff; - int ne00; - int ne01; - int ne02; - int ne11; - int ne12; - uint nb01; - uint nb02; - uint nb11; - uint nb12; - uint nb1; - uint nb2; -} -pcs; - - -void main() { - uvec3 gid = gl_WorkGroupID; - - uint bc_ab = pcs.ne12 > pcs.ne02 ? gid.z / (pcs.ne12 / pcs.ne02) : gid.z; - uint bc_ba = pcs.ne02 > pcs.ne12 ? gid.z / (pcs.ne02 / pcs.ne12) : gid.z; - - const uint x = (gid.x*pcs.nb01 + bc_ab*pcs.nb02) / 4 + pcs.inAOff; // Based from inA - const uint y = (gid.y*pcs.nb11 + bc_ba*pcs.nb12) / 4 + pcs.inBOff; // based from inB - float sum = 0.0f; - for (uint i = gl_SubgroupInvocationID.x; i < pcs.ne00; i += gl_SubgroupSize) { - sum += float(inA[x+i]) * float(inB[y+i]); - } - - const float all_sum = subgroupAdd(sum); - if (subgroupElect()) { - out_[gid.z*(pcs.nb2/4) + gid.y*(pcs.nb1/4) + gid.x + pcs.outOff] = all_sum; - } -} diff --git a/kompute-shaders/op_mul_mat_q4_0.comp b/kompute-shaders/op_mul_mat_q4_0.comp deleted file mode 100644 index b0cea8bbe67..00000000000 --- a/kompute-shaders/op_mul_mat_q4_0.comp +++ /dev/null @@ -1,33 +0,0 @@ -#version 450 - -#include "common.comp" - -#define BLOCKS_IN_QUANT QK4_0 -#define SIZE_OF_BLOCK sizeof_block_q4_0 -#define N_ROWS 4 - -#include "op_mul_mv_q_n_pre.comp" - -// The q4_0 version of this function -float block_q_n_dot_y(uint block_index, uint yb, uint il) { - vec2 acc = vec2(0.0, 0.0); - const uint index = (block_index) * SIZE_OF_BLOCK + pcs.inAOff; - float d = float(u8BufToFloat16(inA, index)); - float sumy = 0.0f; - for (int i = 0; i < BLOCKS_IN_QUANT/4; i+=2) { - const uint16_t b = u8BufToU16(inA, index + 2 + il + i); - - const float yl0 = inB[yb + i]; - const float yl1 = inB[yb + i + 1]; - const float yl8 = inB[yb + i + BLOCKS_IN_QUANT/2]; - const float yl9 = inB[yb + i + BLOCKS_IN_QUANT/2 + 1]; - - sumy += yl0 + yl1 + yl8 + yl9; - - acc[0] += yl0 * (b & 0x000F) + yl1 / 256.f * (b & 0x0F00); - acc[1] += yl8 / 16.f * (b & 0x00F0) + yl9 / 4096.f * (b & 0xF000); - } - return d * (sumy * -8.f + acc[0] + acc[1]); -} - -#include "op_mul_mv_q_n.comp" diff --git a/kompute-shaders/op_mul_mat_q4_1.comp b/kompute-shaders/op_mul_mat_q4_1.comp deleted file mode 100644 index 8582c61a3be..00000000000 --- a/kompute-shaders/op_mul_mat_q4_1.comp +++ /dev/null @@ -1,35 +0,0 @@ -#version 450 - -#include "common.comp" - -#define BLOCKS_IN_QUANT QK4_1 -#define SIZE_OF_BLOCK sizeof_block_q4_1 -#define N_ROWS 4 - -#include "op_mul_mv_q_n_pre.comp" - -// The q4_1 version of this function -float block_q_n_dot_y(uint block_index, uint yb, uint il) { - vec2 acc = vec2(0.0, 0.0); - const uint index = (block_index) * SIZE_OF_BLOCK + pcs.inAOff; - float d = float(u8BufToFloat16(inA, index)); - float m = float(u8BufToFloat16(inA, index+2)); - - float sumy = 0.0f; - for (int i = 0; i < BLOCKS_IN_QUANT/4; i+=2) { - const uint16_t b = u8BufToU16(inA, index + 4 + il + i); - - const float yl0 = inB[yb + i]; - const float yl1 = inB[yb + i + 1]; - const float yl8 = inB[yb + i + BLOCKS_IN_QUANT/2]; - const float yl9 = inB[yb + i + BLOCKS_IN_QUANT/2 + 1]; - - sumy += yl0 + yl1 + yl8 + yl9; - - acc[0] += yl0 * (b & 0x000F) + yl1 / 256.f * (b & 0x0F00); - acc[1] += yl8 / 16.f * (b & 0x00F0) + yl9 / 4096.f * (b & 0xF000); - } - return d * (acc[0] + acc[1]) + sumy * m; -} - -#include "op_mul_mv_q_n.comp" diff --git a/kompute-shaders/op_mul_mat_q6_k.comp b/kompute-shaders/op_mul_mat_q6_k.comp deleted file mode 100644 index c9baebdf4ba..00000000000 --- a/kompute-shaders/op_mul_mat_q6_k.comp +++ /dev/null @@ -1,94 +0,0 @@ -#version 450 - -#include "common.comp" - -#define SIZE_OF_BLOCK sizeof_block_q6_k - -layout(local_size_x_id = 0) in; -layout(local_size_y_id = 1) in; -layout(local_size_z = 1) in; - -layout (binding = 0) readonly buffer tensorInA { uint8_t inA[]; }; -layout (binding = 1) readonly buffer tensorInB { float inB[]; }; -layout (binding = 2) writeonly buffer tensorOut { float out_[]; }; - -layout (push_constant) uniform parameter { - uint inAOff; - uint inBOff; - uint outOff; - int ne00; - int ne10; - int ne0; - int ne1; - int ne01; - int gqa; -} pcs; - -void main() { - const uint8_t kmask1 = uint8_t(0x03); - const uint8_t kmask2 = uint8_t(0x0C); - const uint8_t kmask3 = uint8_t(0x30); - const uint8_t kmask4 = uint8_t(0xC0); - - const uint nb = pcs.ne00/QK_K; - - const uint r0 = gl_WorkGroupID.x; - const uint r1 = gl_WorkGroupID.y; - const uint r2 = gl_WorkGroupID.z; - - const uint row = (r0 * gl_NumSubgroups + gl_SubgroupID); - const uint offset0 = r2/pcs.gqa*(nb*pcs.ne0); - const uint x = row * nb + offset0; // Based from inA without base offset - const uint yy = r1*pcs.ne10 + r2*pcs.ne00*pcs.ne1+pcs.inBOff; // Based from inB - - float sumf = 0; - - // bits of invocation ID for gl_SubgroupSize=32: - // x x x x x - // 4 3 2 1 0 - // ( tid ) ix - // ip ( il ) - - const uint block_stride = gl_SubgroupSize / 16; // number of blocks each subgroup processes - const uint tid = gl_SubgroupInvocationID/block_stride; // first block_stride groups have tid=0 - const uint ix = gl_SubgroupInvocationID%block_stride; // first block is 0..block_stride-1 - const uint ip = tid/8; // first or second half of block (0 or 1) - const uint il = tid%8; // each half has 8 parts, one per scale - const uint n = 4; // 4 scales at a time (and 4 sums) - const uint l0 = n*il; // offset into half-block, 0..28 - const uint is = 8*ip + l0/16; // 0, 1, 8, 9 - - const uint y_offset = 128*ip + l0; - const uint q_offset_l = 64*ip + l0; - const uint q_offset_h = 32*ip + l0; - - for (uint i = ix; i < nb; i += block_stride) { - - const uint baseIndex = (x + i) * SIZE_OF_BLOCK + pcs.inAOff; - - const uint qlIndex = q_offset_l; - const uint q2Index = qlIndex + QK_K/8; - const uint qhIndex = q_offset_h; - const uint y = yy + i * QK_K + y_offset; - - float sums[4] = {0.0f, 0.0f, 0.0f, 0.0f}; - for (uint l = 0; l < n; ++l) { - const uint8_t currentQ1 = inA[baseIndex + qlIndex + l]; - const uint8_t currentQ2 = inA[baseIndex + q2Index + l]; - const uint8_t currentQh = inA[baseIndex + QK_K/2 + qhIndex + l]; - - sums[0] += inB[y+l+ 0] * (int8_t((currentQ1 & 0xF) | ((currentQh & kmask1) << 4)) - 32); - sums[1] += inB[y+l+32] * (int8_t((currentQ2 & 0xF) | ((currentQh & kmask2) << 2)) - 32); - sums[2] += inB[y+l+64] * (int8_t((currentQ1 >> 4) | ((currentQh & kmask3) << 0)) - 32); - sums[3] += inB[y+l+96] * (int8_t((currentQ2 >> 4) | ((currentQh & kmask4) >> 2)) - 32); - } - - float d = u8BufToFloat16(inA, baseIndex + QK_K/2 + QK_K/4 + QK_K/16); - sumf += d * (sums[0] * int8_t(inA[baseIndex + QK_K/2 + QK_K/4 + is]) + sums[1] * int8_t(inA[baseIndex + QK_K/2 + QK_K/4 + 2 + is]) + sums[2] * int8_t(inA[baseIndex + QK_K/2 + QK_K/4 + 4 + is]) + sums[3] * int8_t(inA[baseIndex + QK_K/2 + QK_K/4 + 6 + is])); - } - - const float tot = subgroupAdd(sumf); - if (subgroupElect()) { - out_[r1*pcs.ne0 + r2*pcs.ne0*pcs.ne1 + row + pcs.outOff] = tot; - } -} diff --git a/kompute-shaders/op_mul_mat_q8_0.comp b/kompute-shaders/op_mul_mat_q8_0.comp deleted file mode 100644 index 34d015e90b8..00000000000 --- a/kompute-shaders/op_mul_mat_q8_0.comp +++ /dev/null @@ -1,73 +0,0 @@ -#version 450 - -#include "common.comp" - -#include "op_mul_mv_q_n_pre.comp" - -#define SIZE_OF_D 2 - -#define N_DST 4 // each SIMD group works on 4 rows -#define N_SIMDGROUP 2 // number of SIMD groups in a thread group -#define N_SIMDWIDTH 32 // assuming SIMD group size is 32 - -#define NB_Q8_0 8 - -void main() { - // NB: hack to make compatible with AMD GPUs that have a subgroup size of 64 - if (gl_SubgroupInvocationID > 31) - return; - - const int nr = N_DST; - const int nsg = N_SIMDGROUP; - const int nw = N_SIMDWIDTH; - - const int nb = pcs.ne00/QK8_0; - const uint r0 = gl_WorkGroupID.x; - const uint r1 = gl_WorkGroupID.y; - const uint im = gl_WorkGroupID.z; - - const uint first_row = (r0 * nsg + gl_SubgroupID) * nr; - - const uint i12 = im%pcs.ne12; - const uint i13 = im/pcs.ne12; - - const uint offset0 = first_row * nb + (i12/pcs.r2)*(nb*pcs.ne01) + (i13/pcs.r3)*(nb*pcs.ne01*pcs.ne02); - - const uint x = offset0*sizeof_block_q8_0 + pcs.inAOff; // Based from inA - const uint y = r1*pcs.ne10 + im*pcs.ne00*pcs.ne1 + pcs.inBOff; // based from inB - - float yl[NB_Q8_0]; - float sumf[N_DST]={0.f, 0.f, 0.f, 0.f}; - - const uint ix = gl_SubgroupInvocationID.x/4; - const uint il = gl_SubgroupInvocationID.x%4; - - uint yb = y + ix * QK8_0 + NB_Q8_0*il; - - // each thread in a SIMD group deals with NB_Q8_0 quants at a time - for (uint ib = ix; ib < nb; ib += nw/4) { - for (int i = 0; i < NB_Q8_0; ++i) { - yl[i] = inB[yb + i]; - } - - for (int row = 0; row < nr; row++) { - const uint block_offset = (ib+row*nb) * sizeof_block_q8_0; - float sumq = 0.f; - for (int iq = 0; iq < NB_Q8_0; ++iq) { - const int8_t qs_iq = int8_t(inA[x + block_offset + SIZE_OF_D + NB_Q8_0*il + iq]); - sumq += qs_iq * yl[iq]; - } - const float16_t d = u8BufToFloat16(inA, x + block_offset); - sumf[row] += sumq*d; - } - - yb += NB_Q8_0 * nw; - } - - for (int row = 0; row < nr; ++row) { - const float tot = subgroupAdd(sumf[row]); - if (subgroupElect() && first_row + row < pcs.ne01) { - out_[r1*pcs.ne0 + im*pcs.ne0*pcs.ne1 + first_row + row] = tot; - } - } -} diff --git a/kompute-shaders/op_mul_mv_q_n.comp b/kompute-shaders/op_mul_mv_q_n.comp deleted file mode 100644 index 440b5ab2c81..00000000000 --- a/kompute-shaders/op_mul_mv_q_n.comp +++ /dev/null @@ -1,48 +0,0 @@ -void main() { - // NB: hack to make compatible with AMD GPUs that have a subgroup size of 64 - if (gl_SubgroupInvocationID > 31) - return; - - const uint nb = uint(pcs.ne00/BLOCKS_IN_QUANT); - - const uint r0 = gl_WorkGroupID.x; - const uint r1 = gl_WorkGroupID.y; - const uint im = gl_WorkGroupID.z; - - const uint first_row = (r0 * gl_NumSubgroups + gl_SubgroupID) * N_ROWS; - - const uint i12 = im%pcs.ne12; - const uint i13 = im/pcs.ne12; - - const uint offset0 = first_row * nb + (i12/pcs.r2)*(nb*pcs.ne01) + (i13/pcs.r3)*(nb*pcs.ne01*pcs.ne02); - - const uint x = offset0; // Based from inA without base offset - const uint y = r1*uint(pcs.ne10)+im*pcs.ne00*pcs.ne1+pcs.inBOff; // Based from inB - - float sumf[N_ROWS] = {0.0f, 0.0f, 0.0f, 0.0f}; - - const uint ix = gl_SubgroupInvocationID/2; - const uint il = (BLOCKS_IN_QUANT/4)*(gl_SubgroupInvocationID%2); - - uint yb = y + ix * BLOCKS_IN_QUANT + il; - - //debugPrintfEXT("gl_NumSubgroups=%d, gl_SubgroupID=%d, gl_SubgroupInvocationID=%d, glSubgroupSize=%d, gl_WorkGroupSize.x=%d, gl_WorkGroupSize.y=%d, gl_WorkGroupSize.z=%d\n", - // gl_NumSubgroups, gl_SubgroupID, gl_SubgroupInvocationID, gl_SubgroupSize, - // gl_WorkGroupSize.x, gl_WorkGroupSize.y, gl_WorkGroupSize.z); - - for (uint ib = ix; ib < nb; ib += 16) { - for (int row = 0; row < N_ROWS; row++) { - const uint block_index = x + ib + row * nb; - sumf[row] += block_q_n_dot_y(block_index, yb, il); - } - - yb += BLOCKS_IN_QUANT * 16; - } - - for (int row = 0; row < N_ROWS; ++row) { - const float tot = subgroupAdd(sumf[row]); - if (first_row + row < pcs.ne01 && subgroupElect()) { - out_[r1*pcs.ne0 + im*pcs.ne0*pcs.ne1 + first_row + row + pcs.outOff] = tot; - } - } -} diff --git a/kompute-shaders/op_mul_mv_q_n_pre.comp b/kompute-shaders/op_mul_mv_q_n_pre.comp deleted file mode 100644 index 7912b09ac69..00000000000 --- a/kompute-shaders/op_mul_mv_q_n_pre.comp +++ /dev/null @@ -1,22 +0,0 @@ -layout(local_size_x_id = 0) in; -layout(local_size_y = 1) in; -layout(local_size_z = 1) in; - -layout (binding = 0) readonly buffer tensorInA { uint8_t inA[]; }; -layout (binding = 1) readonly buffer tensorInB { float inB[]; }; -layout (binding = 2) writeonly buffer tensorOut { float out_[]; }; - -layout (push_constant) uniform parameter { - uint inAOff; - uint inBOff; - uint outOff; - int ne00; - int ne01; - int ne02; - int ne10; - int ne12; - int ne0; - int ne1; - uint r2; - uint r3; -} pcs; diff --git a/kompute-shaders/op_norm.comp b/kompute-shaders/op_norm.comp deleted file mode 100644 index ad0c3c01b9d..00000000000 --- a/kompute-shaders/op_norm.comp +++ /dev/null @@ -1,84 +0,0 @@ -#version 450 - -#include "common.comp" - -layout(local_size_x = 256) in; - -layout(binding = 0) buffer restrict readonly tensorIn { float in_[]; }; -layout(binding = 1) buffer restrict tensorOut { float out_[]; }; - -layout(push_constant) uniform PushConstants { - uint inOff; - uint outOff; - uint ne00; - uint nb01; - float eps; -} pcs; - -shared float sum[gl_WorkGroupSize.x]; - -void main() { - const uint x = (gl_WorkGroupID.x*pcs.nb01/4) + pcs.inOff; // Based from in_ - // MEAN - // parallel sum - sum[gl_LocalInvocationID.x] = 0.0; - for (uint i00 = gl_LocalInvocationID.x; i00 < pcs.ne00; i00 += gl_WorkGroupSize.x) { - sum[gl_LocalInvocationID.x] += in_[x+i00]; - } - - // reduce - barrier(); - memoryBarrierShared(); - [[unroll]] for (uint i = gl_WorkGroupSize.x/2; i > 0; i /= 2) { - if (gl_LocalInvocationID.x < i) { - sum[gl_LocalInvocationID.x] += sum[gl_LocalInvocationID.x + i]; - } - barrier(); - memoryBarrierShared(); - } - - // broadcast - if (gl_LocalInvocationID.x == 0) { - sum[0] /= float(pcs.ne00); - } - barrier(); - memoryBarrierShared(); - const float mean = sum[0]; - - // recenter - const uint y = (gl_WorkGroupID.x*pcs.ne00) + pcs.outOff; // Based from out_ - for (uint i00 = gl_LocalInvocationID.x; i00 < pcs.ne00; i00 += gl_WorkGroupSize.x) { - out_[y+i00] = in_[x+i00] - mean; - } - - // VARIANCE - // parallel sum - sum[gl_LocalInvocationID.x] = 0.0; - for (uint i00 = gl_LocalInvocationID.x; i00 < pcs.ne00; i00 += gl_WorkGroupSize.x) { - sum[gl_LocalInvocationID.x] += out_[y+i00] * out_[y+i00]; - } - - // reduce - barrier(); - memoryBarrierShared(); - [[unroll]] for (uint i = gl_WorkGroupSize.x/2; i > 0; i /= 2) { - if (gl_LocalInvocationID.x < i) { - sum[gl_LocalInvocationID.x] += sum[gl_LocalInvocationID.x + i]; - } - barrier(); - memoryBarrierShared(); - } - - // broadcast - if (gl_LocalInvocationID.x == 0) { - sum[0] /= float(pcs.ne00); - } - barrier(); - memoryBarrierShared(); - const float variance = sum[0]; - - const float scale = 1.0f/sqrt(variance + pcs.eps); - for (uint i00 = gl_LocalInvocationID.x; i00 < pcs.ne00; i00 += gl_WorkGroupSize.x) { - out_[y+i00] *= scale; - } -} diff --git a/kompute-shaders/op_relu.comp b/kompute-shaders/op_relu.comp deleted file mode 100644 index 52a601fe6da..00000000000 --- a/kompute-shaders/op_relu.comp +++ /dev/null @@ -1,21 +0,0 @@ -#version 450 - -#include "common.comp" - -layout(local_size_x = 1) in; - -layout(binding = 0) buffer restrict readonly tensorIn { float in_[]; }; -layout(binding = 1) buffer restrict writeonly tensorOut { float out_[]; }; -layout(push_constant) uniform PushConstants { - uint inOff; - uint outOff; -} pcs; - -void main() { - const uint baseIndex = gl_WorkGroupID.x * 4; - - for (uint x = 0; x < 4; x++) { - const uint i = baseIndex + x; - out_[i + pcs.outOff] = max(0.0, in_[i + pcs.inOff]); - } -} diff --git a/kompute-shaders/op_rmsnorm.comp b/kompute-shaders/op_rmsnorm.comp deleted file mode 100644 index da658c1601e..00000000000 --- a/kompute-shaders/op_rmsnorm.comp +++ /dev/null @@ -1,53 +0,0 @@ -#version 450 - -#include "common.comp" - -layout(local_size_x = 512) in; - -layout(binding = 0) buffer restrict readonly tensorIn { float in_[]; }; -layout(binding = 1) buffer restrict tensorOut { float out_[]; }; - -layout(push_constant) uniform PushConstants { - uint inOff; - uint outOff; - uint ne00; - uint nb01; - float eps; -} pcs; - -shared float sum[gl_WorkGroupSize.x]; - -void main() { - const uint x = (gl_WorkGroupID.x*pcs.nb01/4) + pcs.inOff; // Based from in_ - - // parallel sum - sum[gl_LocalInvocationID.x] = 0.0; - for (uint i00 = gl_LocalInvocationID.x; i00 < pcs.ne00; i00 += gl_WorkGroupSize.x) { - sum[gl_LocalInvocationID.x] += in_[x+i00] * in_[x+i00]; - } - - // reduce - barrier(); - memoryBarrierShared(); - [[unroll]] for (uint i = gl_WorkGroupSize.x/2; i > 0; i /= 2) { - if (gl_LocalInvocationID.x < i) { - sum[gl_LocalInvocationID.x] += sum[gl_LocalInvocationID.x + i]; - } - barrier(); - memoryBarrierShared(); - } - - // broadcast - if (gl_LocalInvocationID.x == 0) { - sum[0] /= float(pcs.ne00); - } - barrier(); - memoryBarrierShared(); - - const float scale = 1.0f/sqrt(sum[0] + pcs.eps); - - const uint y = (gl_WorkGroupID.x*pcs.ne00) + pcs.outOff; // Based from out_ - for (uint i00 = gl_LocalInvocationID.x; i00 < pcs.ne00; i00 += gl_WorkGroupSize.x) { - out_[y+i00] = in_[x+i00] * scale; - } -} diff --git a/kompute-shaders/op_rope_f16.comp b/kompute-shaders/op_rope_f16.comp deleted file mode 100644 index b446225849d..00000000000 --- a/kompute-shaders/op_rope_f16.comp +++ /dev/null @@ -1,73 +0,0 @@ -#version 450 - -#include "rope_common.comp" - -layout(binding = 0) buffer restrict readonly tensorInA { float16_t inA[]; }; -layout(binding = 1) buffer restrict readonly tensorInB { int inB[]; }; -layout(binding = 2) buffer restrict writeonly tensorOut { float16_t out_[]; }; - -void main() { - const uint i3 = gl_WorkGroupID.z; - const uint i2 = gl_WorkGroupID.y; - const uint i1 = gl_WorkGroupID.x; - - const bool is_neox = (pcs.mode & 2) != 0; - - float corr_dims[2]; - rope_yarn_corr_dims(pcs.n_dims, pcs.n_orig_ctx, pcs.freq_base, pcs.beta_fast, pcs.beta_slow, corr_dims); - - const float theta_scale = pow(pcs.freq_base, -2.0/pcs.n_dims); - - const int p = inB[pcs.inBOff + i2]; - - float theta = float(p); - - if (!is_neox) { - for (uint i0 = 0; i0 < pcs.ne0; i0 += 2) { - float cos_theta, sin_theta; - rope_yarn(theta, pcs.freq_scale, corr_dims, i0, pcs.ext_factor, pcs.attn_factor, cos_theta, sin_theta); - - theta *= theta_scale; - - const uint src = uint((i3*pcs.nb03 + i2*pcs.nb02 + i1*pcs.nb01 + i0*pcs.nb00) / 2) + pcs.inAOff; // Based from in - const uint dst_data = uint((i3*pcs.nb3 + i2*pcs.nb2 + i1*pcs.nb1 + i0*pcs.nb0) / 2) + pcs.outOff; // Based from out_ - - const float x0 = float(inA[src]); - const float x1 = float(inA[src+1]); - - out_[dst_data] = float16_t(x0*cos_theta - x1*sin_theta); - out_[dst_data+1] = float16_t(x0*sin_theta + x1*cos_theta); - } - } else { - const float inv_ndims = -1.f/pcs.n_dims; - for (uint ic = 0; ic < pcs.n_dims; ic += 2) { - const uint cur_rot = ic; - - float cos_theta, sin_theta; - rope_yarn(theta, pcs.freq_scale, corr_dims, cur_rot, pcs.ext_factor, pcs.attn_factor, cos_theta, sin_theta); - - theta *= theta_scale; - - const uint i0 = ic/2; - - const uint src = uint((i3*pcs.nb03 + i2*pcs.nb02 + i1*pcs.nb01 + i0*pcs.nb00) / 2) + pcs.inAOff; // Based from in - const uint dst_data = uint((i3*pcs.nb3 + i2*pcs.nb2 + i1*pcs.nb1 + i0*pcs.nb0) / 2) + pcs.outOff; // Based from out_ - - const float x0 = float(inA[src]); - const float x1 = float(inA[src+pcs.n_dims/2]); - - out_[dst_data] = float16_t(x0*cos_theta - x1*sin_theta); - out_[dst_data+pcs.n_dims/2] = float16_t(x0*sin_theta + x1*cos_theta); - } - - for (uint ic = pcs.n_dims; ic < pcs.ne0; ic += 2) { - const uint i0 = ic; - - const uint src = uint((i3*pcs.nb03 + i2*pcs.nb02 + i1*pcs.nb01 + i0*pcs.nb00) / 2) + pcs.inAOff; // Based from in - const uint dst_data = uint((i3*pcs.nb3 + i2*pcs.nb2 + i1*pcs.nb1 + i0*pcs.nb0) / 2) + pcs.outOff; // Based from out_ - - out_[dst_data + 0] = inA[src + 0]; - out_[dst_data + 1] = inA[src + 1]; - } - } -} diff --git a/kompute-shaders/op_rope_f32.comp b/kompute-shaders/op_rope_f32.comp deleted file mode 100644 index 2c0235d75b6..00000000000 --- a/kompute-shaders/op_rope_f32.comp +++ /dev/null @@ -1,73 +0,0 @@ -#version 450 - -#include "rope_common.comp" - -layout(binding = 0) buffer restrict readonly tensorInA { float inA[]; }; -layout(binding = 1) buffer restrict readonly tensorInB { int inB[]; }; -layout(binding = 2) buffer restrict writeonly tensorOut { float out_[]; }; - -void main() { - const uint i3 = gl_WorkGroupID.z; - const uint i2 = gl_WorkGroupID.y; - const uint i1 = gl_WorkGroupID.x; - - const bool is_neox = (pcs.mode & 2) != 0; - - float corr_dims[2]; - rope_yarn_corr_dims(pcs.n_dims, pcs.n_orig_ctx, pcs.freq_base, pcs.beta_fast, pcs.beta_slow, corr_dims); - - const float theta_scale = pow(pcs.freq_base, -2.0/pcs.n_dims); - - const int p = inB[pcs.inBOff + i2]; - - float theta = float(p); - - if (!is_neox) { - for (uint i0 = 0; i0 < pcs.ne0; i0 += 2) { - float cos_theta, sin_theta; - rope_yarn(theta, pcs.freq_scale, corr_dims, i0, pcs.ext_factor, pcs.attn_factor, cos_theta, sin_theta); - - theta *= theta_scale; - - const uint src = uint((i3*pcs.nb03 + i2*pcs.nb02 + i1*pcs.nb01 + i0*pcs.nb00) / 4) + pcs.inAOff; // Based from in - const uint dst_data = uint((i3*pcs.nb3 + i2*pcs.nb2 + i1*pcs.nb1 + i0*pcs.nb0) / 4) + pcs.outOff; // Based from out_ - - const float x0 = inA[src]; - const float x1 = inA[src+1]; - - out_[dst_data] = x0*cos_theta - x1*sin_theta; - out_[dst_data+1] = x0*sin_theta + x1*cos_theta; - } - } else { - const float inv_ndims = -1.f/pcs.n_dims; - for (uint ic = 0; ic < pcs.n_dims; ic += 2) { - const uint cur_rot = ic; - - float cos_theta, sin_theta; - rope_yarn(theta, pcs.freq_scale, corr_dims, cur_rot, pcs.ext_factor, pcs.attn_factor, cos_theta, sin_theta); - - theta *= theta_scale; - - const uint i0 = ic/2; - - const uint src = uint((i3*pcs.nb03 + i2*pcs.nb02 + i1*pcs.nb01 + i0*pcs.nb00) / 4) + pcs.inAOff; // Based from in - const uint dst_data = uint((i3*pcs.nb3 + i2*pcs.nb2 + i1*pcs.nb1 + i0*pcs.nb0) / 4) + pcs.outOff; // Based from out_ - - const float x0 = inA[src]; - const float x1 = inA[src+pcs.n_dims/2]; - - out_[dst_data] = x0*cos_theta - x1*sin_theta; - out_[dst_data+pcs.n_dims/2] = x0*sin_theta + x1*cos_theta; - } - - for (uint ic = pcs.n_dims; ic < pcs.ne0; ic += 2) { - const uint i0 = ic; - - const uint src = uint((i3*pcs.nb03 + i2*pcs.nb02 + i1*pcs.nb01 + i0*pcs.nb00) / 4) + pcs.inAOff; // Based from in - const uint dst_data = uint((i3*pcs.nb3 + i2*pcs.nb2 + i1*pcs.nb1 + i0*pcs.nb0) / 4) + pcs.outOff; // Based from out_ - - out_[dst_data + 0] = inA[src + 0]; - out_[dst_data + 1] = inA[src + 1]; - } - } -} diff --git a/kompute-shaders/op_scale.comp b/kompute-shaders/op_scale.comp deleted file mode 100644 index bdae2673820..00000000000 --- a/kompute-shaders/op_scale.comp +++ /dev/null @@ -1,19 +0,0 @@ -#version 450 - -#include "common.comp" - -layout(local_size_x = 1) in; - -layout(binding = 0) buffer restrict readonly tensorIn { float in_[]; }; -layout(binding = 1) buffer restrict writeonly tensorOut { float out_[]; }; - -layout(push_constant) uniform PushConstants { - uint inOff; - uint outOff; - float scale; -} pcs; - -void main() { - const uint i = gl_WorkGroupID.x; - out_[i + pcs.outOff] = in_[i + pcs.inOff] * pcs.scale; -} diff --git a/kompute-shaders/op_scale_8.comp b/kompute-shaders/op_scale_8.comp deleted file mode 100644 index ada69754b2c..00000000000 --- a/kompute-shaders/op_scale_8.comp +++ /dev/null @@ -1,23 +0,0 @@ -#version 450 - -#include "common.comp" - -layout(local_size_x = 1) in; - -layout(binding = 0) buffer restrict readonly tensorIn { float in_[]; }; -layout(binding = 1) buffer restrict writeonly tensorOut { float out_[]; }; - -layout(push_constant) uniform PushConstants { - uint inOff; - uint outOff; - float scale; -} pcs; - -void main() { - const uint baseIndex = gl_WorkGroupID.x * 8; - - for (uint x = 0; x < 8; x++) { - const uint i = baseIndex + x; - out_[i + pcs.outOff] = in_[i + pcs.inOff] * pcs.scale; - } -} diff --git a/kompute-shaders/op_silu.comp b/kompute-shaders/op_silu.comp deleted file mode 100644 index 0fb8e4b7405..00000000000 --- a/kompute-shaders/op_silu.comp +++ /dev/null @@ -1,22 +0,0 @@ -#version 450 - -#include "common.comp" - -layout(local_size_x = 1) in; - -layout(binding = 0) buffer restrict readonly tensorIn { float in_[]; }; -layout(binding = 1) buffer restrict writeonly tensorOut { float out_[]; }; -layout(push_constant) uniform PushConstants { - uint inOff; - uint outOff; -} pcs; - -void main() { - const uint baseIndex = gl_WorkGroupID.x * 4; - - for (uint x = 0; x < 4; x++) { - const uint i = baseIndex + x; - const float y = in_[i + pcs.inOff]; - out_[i + pcs.outOff] = y / (1.0 + exp(-y)); - } -} diff --git a/kompute-shaders/op_softmax.comp b/kompute-shaders/op_softmax.comp deleted file mode 100644 index 7bc9176caba..00000000000 --- a/kompute-shaders/op_softmax.comp +++ /dev/null @@ -1,56 +0,0 @@ -// TODO: implement multi-simd softmax (llama.cpp commit e16b9fa4) - -#version 450 - -#include "common.comp" - -layout(local_size_x_id = 0) in; - -layout(binding = 0) buffer restrict readonly tensorInA { float inA[]; }; -layout(binding = 1) buffer restrict readonly tensorInB { float inB[]; }; -layout(binding = 2) buffer restrict writeonly tensorOut { float out_[]; }; - -layout(push_constant) uniform PushConstants { - uint inAOff; - uint inBOff; - uint outOff; - int ne00; - int ne01; - int ne02; - float scale; - int mask; -} pcs; - -void main() { - if (gl_SubgroupInvocationID > 31) - return; - - const uint i03 = gl_WorkGroupID.z; - const uint i02 = gl_WorkGroupID.y; - const uint i01 = gl_WorkGroupID.x; - - const uint extra_off = i03*pcs.ne02*pcs.ne01*pcs.ne00 + i02*pcs.ne01*pcs.ne00 + i01*pcs.ne00; - const uint psrc0 = extra_off + pcs.inAOff; // Based from inA - const uint pmask = i01*pcs.ne00 + pcs.inBOff; // Based from inB - const uint pdst = extra_off + pcs.outOff; // Based from out_ - - // parallel max - float localMax = uintBitsToFloat(0xFF800000); - for (uint i00 = gl_SubgroupInvocationID.x; i00 < pcs.ne00; i00 += 32) { - localMax = max(localMax, inA[psrc0 + i00]*pcs.scale + (pcs.mask!=0 ? inB[pmask + i00] : 0.0f)); - } - float max_ = subgroupMax(localMax); - - // parallel sum - float localSum = 0.0f; - for (uint i00 = gl_SubgroupInvocationID.x; i00 < pcs.ne00; i00 += 32) { - const float exp_psrc0 = exp(inA[psrc0 + i00]*pcs.scale + (pcs.mask!=0 ? inB[pmask + i00] : 0.0f) - max_); - localSum += exp_psrc0; - out_[pdst + i00] = exp_psrc0; - } - - const float sum = subgroupAdd(localSum); - for (uint i00 = gl_SubgroupInvocationID.x; i00 < pcs.ne00; i00 += 32) { - out_[pdst + i00] /= sum; - } -} diff --git a/kompute-shaders/rope_common.comp b/kompute-shaders/rope_common.comp deleted file mode 100644 index 57ba6597a7e..00000000000 --- a/kompute-shaders/rope_common.comp +++ /dev/null @@ -1,67 +0,0 @@ -#include "common.comp" - -// TODO: use a local size of 32 or more (Metal uses 1024) -layout(local_size_x = 1) in; - -layout (push_constant) uniform parameter { - uint inAOff; - uint inBOff; - uint outOff; - int n_dims; - int mode; - int n_orig_ctx; - float freq_base; - float freq_scale; - float ext_factor; - float attn_factor; - float beta_fast; - float beta_slow; - uint nb00; - uint nb01; - uint nb02; - uint nb03; - int ne0; - uint nb0; - uint nb1; - uint nb2; - uint nb3; -} pcs; - -float rope_yarn_ramp(const float low, const float high, const float i0) { - const float y = (i0 / 2 - low) / max(0.001f, high - low); - return 1.0f - min(1.0f, max(0.0f, y)); -} - -// YaRN algorithm based on LlamaYaRNScaledRotaryEmbedding.py from https://github.com/jquesnelle/yarn -// MIT licensed. Copyright (c) 2023 Jeffrey Quesnelle and Bowen Peng. -void rope_yarn( - float theta_extrap, float freq_scale, float corr_dims[2], float i0, float ext_factor, float mscale, - out float cos_theta, out float sin_theta -) { - // Get n-d rotational scaling corrected for extrapolation - float theta_interp = freq_scale * theta_extrap; - float theta = theta_interp; - if (ext_factor != 0.0f) { - float ramp_mix = rope_yarn_ramp(corr_dims[0], corr_dims[1], i0) * ext_factor; - theta = theta_interp * (1 - ramp_mix) + theta_extrap * ramp_mix; - - // Get n-d magnitude scaling corrected for interpolation - mscale *= 1.0f + 0.1f * log(1.0f / freq_scale); - } - cos_theta = cos(theta) * mscale; - sin_theta = sin(theta) * mscale; -} - -// Apparently solving `n_rot = 2pi * x * base^((2 * max_pos_emb) / n_dims)` for x, we get -// `corr_fac(n_rot) = n_dims * log(max_pos_emb / (n_rot * 2pi)) / (2 * log(base))` -float rope_yarn_corr_factor(int n_dims, int n_orig_ctx, float n_rot, float base) { - return n_dims * log(n_orig_ctx / (n_rot * TWOPI_F)) / (2 * log(base)); -} - -void rope_yarn_corr_dims( - int n_dims, int n_orig_ctx, float freq_base, float beta_fast, float beta_slow, out float dims[2] -) { - // start and end correction dims - dims[0] = max(0.0f, floor(rope_yarn_corr_factor(n_dims, n_orig_ctx, beta_fast, freq_base))); - dims[1] = min(n_dims - 1.0f, ceil(rope_yarn_corr_factor(n_dims, n_orig_ctx, beta_slow, freq_base))); -} diff --git a/llama.cpp b/llama.cpp deleted file mode 100644 index c84443433a4..00000000000 --- a/llama.cpp +++ /dev/null @@ -1,17816 +0,0 @@ -#define LLAMA_API_INTERNAL -#include "llama.h" - -#include "unicode.h" - -#include "ggml.h" -#include "ggml-alloc.h" -#include "ggml-backend.h" - -#ifdef GGML_USE_CUDA -# include "ggml-cuda.h" -#elif defined(GGML_USE_CLBLAST) -# include "ggml-opencl.h" -#elif defined(GGML_USE_VULKAN) -# include "ggml-vulkan.h" -#elif defined(GGML_USE_SYCL) -# include "ggml-sycl.h" -#elif defined(GGML_USE_KOMPUTE) -# include "ggml-kompute.h" -#endif - -#ifdef GGML_USE_METAL -# include "ggml-metal.h" -#endif -#ifdef GGML_USE_MPI -# include "ggml-mpi.h" -#endif -#ifndef QK_K -# ifdef GGML_QKK_64 -# define QK_K 64 -# else -# define QK_K 256 -# endif -#endif - -#ifdef __has_include - #if __has_include() - #include - #if defined(_POSIX_MAPPED_FILES) - #include - #include - #endif - #if defined(_POSIX_MEMLOCK_RANGE) - #include - #endif - #endif -#endif - -#if defined(_WIN32) - #define WIN32_LEAN_AND_MEAN - #ifndef NOMINMAX - #define NOMINMAX - #endif - #include - #ifndef PATH_MAX - #define PATH_MAX MAX_PATH - #endif - #include -#endif - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#if defined(_MSC_VER) -#pragma warning(disable: 4244 4267) // possible loss of data -#endif - -#ifdef __GNUC__ -#ifdef __MINGW32__ -#define LLAMA_ATTRIBUTE_FORMAT(...) __attribute__((format(gnu_printf, __VA_ARGS__))) -#else -#define LLAMA_ATTRIBUTE_FORMAT(...) __attribute__((format(printf, __VA_ARGS__))) -#endif -#else -#define LLAMA_ATTRIBUTE_FORMAT(...) -#endif - -#define LLAMA_MAX_NODES 8192 -#define LLAMA_MAX_EXPERTS 60 - - -// -// logging -// - -LLAMA_ATTRIBUTE_FORMAT(2, 3) -static void llama_log_internal (ggml_log_level level, const char* format, ...); -static void llama_log_callback_default(ggml_log_level level, const char * text, void * user_data); - -#define LLAMA_LOG_INFO(...) llama_log_internal(GGML_LOG_LEVEL_INFO , __VA_ARGS__) -#define LLAMA_LOG_WARN(...) llama_log_internal(GGML_LOG_LEVEL_WARN , __VA_ARGS__) -#define LLAMA_LOG_ERROR(...) llama_log_internal(GGML_LOG_LEVEL_ERROR, __VA_ARGS__) - -// -// helpers -// - -static size_t utf8_len(char src) { - const size_t lookup[] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 4 }; - uint8_t highbits = static_cast(src) >> 4; - return lookup[highbits]; -} - -static void replace_all(std::string & s, const std::string & search, const std::string & replace) { - std::string result; - for (size_t pos = 0; ; pos += search.length()) { - auto new_pos = s.find(search, pos); - if (new_pos == std::string::npos) { - result += s.substr(pos, s.size() - pos); - break; - } - result += s.substr(pos, new_pos - pos) + replace; - pos = new_pos; - } - s = std::move(result); -} - -static bool is_float_close(float a, float b, float abs_tol) { - // Check for non-negative tolerance - if (abs_tol < 0.0) { - throw std::invalid_argument("Tolerance must be non-negative"); - } - - // Exact equality check - if (a == b) { - return true; - } - - // Check for infinities - if (std::isinf(a) || std::isinf(b)) { - return false; - } - - // Regular comparison using the provided absolute tolerance - return std::fabs(b - a) <= abs_tol; -} - -static void zeros(std::ofstream & file, size_t n) { - char zero = 0; - for (size_t i = 0; i < n; ++i) { - file.write(&zero, 1); - } -} - -LLAMA_ATTRIBUTE_FORMAT(1, 2) -static std::string format(const char * fmt, ...) { - va_list ap; - va_list ap2; - va_start(ap, fmt); - va_copy(ap2, ap); - int size = vsnprintf(NULL, 0, fmt, ap); - GGML_ASSERT(size >= 0 && size < INT_MAX); // NOLINT - std::vector buf(size + 1); - int size2 = vsnprintf(buf.data(), size + 1, fmt, ap2); - GGML_ASSERT(size2 == size); - va_end(ap2); - va_end(ap); - return std::string(buf.data(), size); -} - -// -// gguf constants (sync with gguf.py) -// - -enum llm_arch { - LLM_ARCH_LLAMA, - LLM_ARCH_FALCON, - LLM_ARCH_BAICHUAN, - LLM_ARCH_GROK, - LLM_ARCH_GPT2, - LLM_ARCH_GPTJ, - LLM_ARCH_GPTNEOX, - LLM_ARCH_MPT, - LLM_ARCH_STARCODER, - LLM_ARCH_PERSIMMON, - LLM_ARCH_REFACT, - LLM_ARCH_BERT, - LLM_ARCH_NOMIC_BERT, - LLM_ARCH_BLOOM, - LLM_ARCH_STABLELM, - LLM_ARCH_QWEN, - LLM_ARCH_QWEN2, - LLM_ARCH_QWEN2MOE, - LLM_ARCH_PHI2, - LLM_ARCH_PHI3, - LLM_ARCH_PLAMO, - LLM_ARCH_CODESHELL, - LLM_ARCH_ORION, - LLM_ARCH_INTERNLM2, - LLM_ARCH_MINICPM, - LLM_ARCH_GEMMA, - LLM_ARCH_STARCODER2, - LLM_ARCH_MAMBA, - LLM_ARCH_XVERSE, - LLM_ARCH_COMMAND_R, - LLM_ARCH_DBRX, - LLM_ARCH_OLMO, - LLM_ARCH_UNKNOWN, -}; - -static const std::map LLM_ARCH_NAMES = { - { LLM_ARCH_LLAMA, "llama" }, - { LLM_ARCH_FALCON, "falcon" }, - { LLM_ARCH_GROK, "grok" }, - { LLM_ARCH_GPT2, "gpt2" }, - { LLM_ARCH_GPTJ, "gptj" }, - { LLM_ARCH_GPTNEOX, "gptneox" }, - { LLM_ARCH_MPT, "mpt" }, - { LLM_ARCH_BAICHUAN, "baichuan" }, - { LLM_ARCH_STARCODER, "starcoder" }, - { LLM_ARCH_PERSIMMON, "persimmon" }, - { LLM_ARCH_REFACT, "refact" }, - { LLM_ARCH_BERT, "bert" }, - { LLM_ARCH_NOMIC_BERT, "nomic-bert" }, - { LLM_ARCH_BLOOM, "bloom" }, - { LLM_ARCH_STABLELM, "stablelm" }, - { LLM_ARCH_QWEN, "qwen" }, - { LLM_ARCH_QWEN2, "qwen2" }, - { LLM_ARCH_QWEN2MOE, "qwen2moe" }, - { LLM_ARCH_PHI2, "phi2" }, - { LLM_ARCH_PHI3, "phi3" }, - { LLM_ARCH_PLAMO, "plamo" }, - { LLM_ARCH_CODESHELL, "codeshell" }, - { LLM_ARCH_ORION, "orion" }, - { LLM_ARCH_INTERNLM2, "internlm2" }, - { LLM_ARCH_MINICPM, "minicpm" }, - { LLM_ARCH_GEMMA, "gemma" }, - { LLM_ARCH_STARCODER2, "starcoder2" }, - { LLM_ARCH_MAMBA, "mamba" }, - { LLM_ARCH_XVERSE, "xverse" }, - { LLM_ARCH_COMMAND_R, "command-r" }, - { LLM_ARCH_DBRX, "dbrx" }, - { LLM_ARCH_OLMO, "olmo" }, - { LLM_ARCH_UNKNOWN, "(unknown)" }, -}; - -enum llm_kv { - LLM_KV_GENERAL_ARCHITECTURE, - LLM_KV_GENERAL_QUANTIZATION_VERSION, - LLM_KV_GENERAL_ALIGNMENT, - LLM_KV_GENERAL_NAME, - LLM_KV_GENERAL_AUTHOR, - LLM_KV_GENERAL_VERSION, - LLM_KV_GENERAL_URL, - LLM_KV_GENERAL_DESCRIPTION, - LLM_KV_GENERAL_LICENSE, - LLM_KV_GENERAL_SOURCE_URL, - LLM_KV_GENERAL_SOURCE_HF_REPO, - - LLM_KV_VOCAB_SIZE, - LLM_KV_CONTEXT_LENGTH, - LLM_KV_EMBEDDING_LENGTH, - LLM_KV_BLOCK_COUNT, - LLM_KV_FEED_FORWARD_LENGTH, - LLM_KV_USE_PARALLEL_RESIDUAL, - LLM_KV_TENSOR_DATA_LAYOUT, - LLM_KV_EXPERT_COUNT, - LLM_KV_EXPERT_USED_COUNT, - LLM_KV_POOLING_TYPE, - LLM_KV_LOGIT_SCALE, - - LLM_KV_ATTENTION_HEAD_COUNT, - LLM_KV_ATTENTION_HEAD_COUNT_KV, - LLM_KV_ATTENTION_MAX_ALIBI_BIAS, - LLM_KV_ATTENTION_CLAMP_KQV, - LLM_KV_ATTENTION_KEY_LENGTH, - LLM_KV_ATTENTION_VALUE_LENGTH, - LLM_KV_ATTENTION_LAYERNORM_EPS, - LLM_KV_ATTENTION_LAYERNORM_RMS_EPS, - LLM_KV_ATTENTION_CAUSAL, - - LLM_KV_ROPE_DIMENSION_COUNT, - LLM_KV_ROPE_FREQ_BASE, - LLM_KV_ROPE_SCALE_LINEAR, - LLM_KV_ROPE_SCALING_TYPE, - LLM_KV_ROPE_SCALING_FACTOR, - LLM_KV_ROPE_SCALING_ORIG_CTX_LEN, - LLM_KV_ROPE_SCALING_FINETUNED, - - LLM_KV_SPLIT_NO, - LLM_KV_SPLIT_COUNT, - LLM_KV_SPLIT_TENSORS_COUNT, - - LLM_KV_SSM_INNER_SIZE, - LLM_KV_SSM_CONV_KERNEL, - LLM_KV_SSM_STATE_SIZE, - LLM_KV_SSM_TIME_STEP_RANK, - - LLM_KV_TOKENIZER_MODEL, - LLM_KV_TOKENIZER_LIST, - LLM_KV_TOKENIZER_TOKEN_TYPE, - LLM_KV_TOKENIZER_TOKEN_TYPE_COUNT, - LLM_KV_TOKENIZER_SCORES, - LLM_KV_TOKENIZER_MERGES, - LLM_KV_TOKENIZER_BOS_ID, - LLM_KV_TOKENIZER_EOS_ID, - LLM_KV_TOKENIZER_UNK_ID, - LLM_KV_TOKENIZER_SEP_ID, - LLM_KV_TOKENIZER_PAD_ID, - LLM_KV_TOKENIZER_CLS_ID, - LLM_KV_TOKENIZER_MASK_ID, - LLM_KV_TOKENIZER_ADD_BOS, - LLM_KV_TOKENIZER_ADD_EOS, - LLM_KV_TOKENIZER_ADD_PREFIX, - LLM_KV_TOKENIZER_HF_JSON, - LLM_KV_TOKENIZER_RWKV, - LLM_KV_TOKENIZER_PREFIX_ID, - LLM_KV_TOKENIZER_SUFFIX_ID, - LLM_KV_TOKENIZER_MIDDLE_ID, - LLM_KV_TOKENIZER_EOT_ID, -}; - -static const std::map LLM_KV_NAMES = { - { LLM_KV_GENERAL_ARCHITECTURE, "general.architecture" }, - { LLM_KV_GENERAL_QUANTIZATION_VERSION, "general.quantization_version" }, - { LLM_KV_GENERAL_ALIGNMENT, "general.alignment" }, - { LLM_KV_GENERAL_NAME, "general.name" }, - { LLM_KV_GENERAL_AUTHOR, "general.author" }, - { LLM_KV_GENERAL_VERSION, "general.version" }, - { LLM_KV_GENERAL_URL, "general.url" }, - { LLM_KV_GENERAL_DESCRIPTION, "general.description" }, - { LLM_KV_GENERAL_LICENSE, "general.license" }, - { LLM_KV_GENERAL_SOURCE_URL, "general.source.url" }, - { LLM_KV_GENERAL_SOURCE_HF_REPO, "general.source.huggingface.repository" }, - - { LLM_KV_VOCAB_SIZE, "%s.vocab_size" }, - { LLM_KV_CONTEXT_LENGTH, "%s.context_length" }, - { LLM_KV_EMBEDDING_LENGTH, "%s.embedding_length" }, - { LLM_KV_BLOCK_COUNT, "%s.block_count" }, - { LLM_KV_FEED_FORWARD_LENGTH, "%s.feed_forward_length" }, - { LLM_KV_USE_PARALLEL_RESIDUAL, "%s.use_parallel_residual" }, - { LLM_KV_TENSOR_DATA_LAYOUT, "%s.tensor_data_layout" }, - { LLM_KV_EXPERT_COUNT, "%s.expert_count" }, - { LLM_KV_EXPERT_USED_COUNT, "%s.expert_used_count" }, - { LLM_KV_POOLING_TYPE , "%s.pooling_type" }, - { LLM_KV_LOGIT_SCALE, "%s.logit_scale" }, - - { LLM_KV_ATTENTION_HEAD_COUNT, "%s.attention.head_count" }, - { LLM_KV_ATTENTION_HEAD_COUNT_KV, "%s.attention.head_count_kv" }, - { LLM_KV_ATTENTION_MAX_ALIBI_BIAS, "%s.attention.max_alibi_bias" }, - { LLM_KV_ATTENTION_CLAMP_KQV, "%s.attention.clamp_kqv" }, - { LLM_KV_ATTENTION_KEY_LENGTH, "%s.attention.key_length" }, - { LLM_KV_ATTENTION_VALUE_LENGTH, "%s.attention.value_length" }, - { LLM_KV_ATTENTION_LAYERNORM_EPS, "%s.attention.layer_norm_epsilon" }, - { LLM_KV_ATTENTION_LAYERNORM_RMS_EPS, "%s.attention.layer_norm_rms_epsilon" }, - { LLM_KV_ATTENTION_CAUSAL, "%s.attention.causal" }, - - { LLM_KV_ROPE_DIMENSION_COUNT, "%s.rope.dimension_count" }, - { LLM_KV_ROPE_FREQ_BASE, "%s.rope.freq_base" }, - { LLM_KV_ROPE_SCALE_LINEAR, "%s.rope.scale_linear" }, - { LLM_KV_ROPE_SCALING_TYPE, "%s.rope.scaling.type" }, - { LLM_KV_ROPE_SCALING_FACTOR, "%s.rope.scaling.factor" }, - { LLM_KV_ROPE_SCALING_ORIG_CTX_LEN, "%s.rope.scaling.original_context_length" }, - { LLM_KV_ROPE_SCALING_FINETUNED, "%s.rope.scaling.finetuned" }, - - { LLM_KV_SPLIT_NO, "split.no" }, - { LLM_KV_SPLIT_COUNT, "split.count" }, - { LLM_KV_SPLIT_TENSORS_COUNT, "split.tensors.count" }, - - { LLM_KV_SSM_CONV_KERNEL, "%s.ssm.conv_kernel" }, - { LLM_KV_SSM_INNER_SIZE, "%s.ssm.inner_size" }, - { LLM_KV_SSM_STATE_SIZE, "%s.ssm.state_size" }, - { LLM_KV_SSM_TIME_STEP_RANK, "%s.ssm.time_step_rank" }, - - { LLM_KV_TOKENIZER_MODEL, "tokenizer.ggml.model" }, - { LLM_KV_TOKENIZER_LIST, "tokenizer.ggml.tokens" }, - { LLM_KV_TOKENIZER_TOKEN_TYPE, "tokenizer.ggml.token_type" }, - { LLM_KV_TOKENIZER_TOKEN_TYPE_COUNT, "tokenizer.ggml.token_type_count" }, - { LLM_KV_TOKENIZER_SCORES, "tokenizer.ggml.scores" }, - { LLM_KV_TOKENIZER_MERGES, "tokenizer.ggml.merges" }, - { LLM_KV_TOKENIZER_BOS_ID, "tokenizer.ggml.bos_token_id" }, - { LLM_KV_TOKENIZER_EOS_ID, "tokenizer.ggml.eos_token_id" }, - { LLM_KV_TOKENIZER_UNK_ID, "tokenizer.ggml.unknown_token_id" }, - { LLM_KV_TOKENIZER_SEP_ID, "tokenizer.ggml.seperator_token_id" }, - { LLM_KV_TOKENIZER_PAD_ID, "tokenizer.ggml.padding_token_id" }, - { LLM_KV_TOKENIZER_CLS_ID, "tokenizer.ggml.cls_token_id" }, - { LLM_KV_TOKENIZER_MASK_ID, "tokenizer.ggml.mask_token_id" }, - { LLM_KV_TOKENIZER_ADD_BOS, "tokenizer.ggml.add_bos_token" }, - { LLM_KV_TOKENIZER_ADD_EOS, "tokenizer.ggml.add_eos_token" }, - { LLM_KV_TOKENIZER_ADD_PREFIX, "tokenizer.ggml.add_space_prefix" }, - { LLM_KV_TOKENIZER_HF_JSON, "tokenizer.huggingface.json" }, - { LLM_KV_TOKENIZER_RWKV, "tokenizer.rwkv.world" }, - { LLM_KV_TOKENIZER_PREFIX_ID, "tokenizer.ggml.prefix_token_id" }, - { LLM_KV_TOKENIZER_SUFFIX_ID, "tokenizer.ggml.suffix_token_id" }, - { LLM_KV_TOKENIZER_MIDDLE_ID, "tokenizer.ggml.middle_token_id" }, - { LLM_KV_TOKENIZER_EOT_ID, "tokenizer.ggml.eot_token_id" }, -}; - -struct LLM_KV { - LLM_KV(llm_arch arch) : arch(arch) {} - - llm_arch arch; - - std::string operator()(llm_kv kv) const { - return ::format(LLM_KV_NAMES.at(kv), LLM_ARCH_NAMES.at(arch)); - } -}; - -enum llm_tensor { - LLM_TENSOR_TOKEN_EMBD, - LLM_TENSOR_TOKEN_EMBD_NORM, - LLM_TENSOR_TOKEN_TYPES, - LLM_TENSOR_POS_EMBD, - LLM_TENSOR_OUTPUT, - LLM_TENSOR_OUTPUT_NORM, - LLM_TENSOR_ROPE_FREQS, - LLM_TENSOR_ATTN_Q, - LLM_TENSOR_ATTN_K, - LLM_TENSOR_ATTN_V, - LLM_TENSOR_ATTN_QKV, - LLM_TENSOR_ATTN_OUT, - LLM_TENSOR_ATTN_NORM, - LLM_TENSOR_ATTN_NORM_2, - LLM_TENSOR_ATTN_OUT_NORM, - LLM_TENSOR_ATTN_ROT_EMBD, - LLM_TENSOR_FFN_GATE_INP, - LLM_TENSOR_FFN_GATE_INP_SHEXP, - LLM_TENSOR_FFN_NORM, - LLM_TENSOR_FFN_GATE, - LLM_TENSOR_FFN_DOWN, - LLM_TENSOR_FFN_UP, - LLM_TENSOR_FFN_ACT, - LLM_TENSOR_FFN_DOWN_EXP, // split experts for backward compatibility - LLM_TENSOR_FFN_GATE_EXP, - LLM_TENSOR_FFN_UP_EXP, - LLM_TENSOR_FFN_DOWN_EXPS, // merged experts - LLM_TENSOR_FFN_GATE_EXPS, - LLM_TENSOR_FFN_UP_EXPS, - LLM_TENSOR_FFN_DOWN_SHEXP, - LLM_TENSOR_FFN_GATE_SHEXP, - LLM_TENSOR_FFN_UP_SHEXP, - LLM_TENSOR_ATTN_Q_NORM, - LLM_TENSOR_ATTN_K_NORM, - LLM_TENSOR_LAYER_OUT_NORM, - LLM_TENSOR_SSM_IN, - LLM_TENSOR_SSM_CONV1D, - LLM_TENSOR_SSM_X, - LLM_TENSOR_SSM_DT, - LLM_TENSOR_SSM_A, - LLM_TENSOR_SSM_D, - LLM_TENSOR_SSM_OUT, -}; - -static const std::map> LLM_TENSOR_NAMES = { - { - LLM_ARCH_LLAMA, - { - { LLM_TENSOR_TOKEN_EMBD, "token_embd" }, - { LLM_TENSOR_OUTPUT_NORM, "output_norm" }, - { LLM_TENSOR_OUTPUT, "output" }, - { LLM_TENSOR_ROPE_FREQS, "rope_freqs" }, - { LLM_TENSOR_ATTN_NORM, "blk.%d.attn_norm" }, - { LLM_TENSOR_ATTN_Q, "blk.%d.attn_q" }, - { LLM_TENSOR_ATTN_K, "blk.%d.attn_k" }, - { LLM_TENSOR_ATTN_V, "blk.%d.attn_v" }, - { LLM_TENSOR_ATTN_OUT, "blk.%d.attn_output" }, - { LLM_TENSOR_ATTN_ROT_EMBD, "blk.%d.attn_rot_embd" }, - { LLM_TENSOR_FFN_GATE_INP, "blk.%d.ffn_gate_inp" }, - { LLM_TENSOR_FFN_NORM, "blk.%d.ffn_norm" }, - { LLM_TENSOR_FFN_GATE, "blk.%d.ffn_gate" }, - { LLM_TENSOR_FFN_DOWN, "blk.%d.ffn_down" }, - { LLM_TENSOR_FFN_UP, "blk.%d.ffn_up" }, - { LLM_TENSOR_FFN_GATE_EXP, "blk.%d.ffn_gate.%d" }, - { LLM_TENSOR_FFN_DOWN_EXP, "blk.%d.ffn_down.%d" }, - { LLM_TENSOR_FFN_UP_EXP, "blk.%d.ffn_up.%d" }, - { LLM_TENSOR_FFN_GATE_EXPS, "blk.%d.ffn_gate_exps" }, - { LLM_TENSOR_FFN_DOWN_EXPS, "blk.%d.ffn_down_exps" }, - { LLM_TENSOR_FFN_UP_EXPS, "blk.%d.ffn_up_exps" }, - }, - }, - { - LLM_ARCH_BAICHUAN, - { - { LLM_TENSOR_TOKEN_EMBD, "token_embd" }, - { LLM_TENSOR_OUTPUT_NORM, "output_norm" }, - { LLM_TENSOR_OUTPUT, "output" }, - { LLM_TENSOR_ROPE_FREQS, "rope_freqs" }, - { LLM_TENSOR_ATTN_NORM, "blk.%d.attn_norm" }, - { LLM_TENSOR_ATTN_Q, "blk.%d.attn_q" }, - { LLM_TENSOR_ATTN_K, "blk.%d.attn_k" }, - { LLM_TENSOR_ATTN_V, "blk.%d.attn_v" }, - { LLM_TENSOR_ATTN_OUT, "blk.%d.attn_output" }, - { LLM_TENSOR_ATTN_ROT_EMBD, "blk.%d.attn_rot_embd" }, - { LLM_TENSOR_FFN_NORM, "blk.%d.ffn_norm" }, - { LLM_TENSOR_FFN_GATE, "blk.%d.ffn_gate" }, - { LLM_TENSOR_FFN_DOWN, "blk.%d.ffn_down" }, - { LLM_TENSOR_FFN_UP, "blk.%d.ffn_up" }, - }, - }, - { - LLM_ARCH_FALCON, - { - { LLM_TENSOR_TOKEN_EMBD, "token_embd" }, - { LLM_TENSOR_OUTPUT_NORM, "output_norm" }, - { LLM_TENSOR_OUTPUT, "output" }, - { LLM_TENSOR_ATTN_NORM, "blk.%d.attn_norm" }, - { LLM_TENSOR_ATTN_NORM_2, "blk.%d.attn_norm_2" }, - { LLM_TENSOR_ATTN_QKV, "blk.%d.attn_qkv" }, - { LLM_TENSOR_ATTN_OUT, "blk.%d.attn_output" }, - { LLM_TENSOR_FFN_DOWN, "blk.%d.ffn_down" }, - { LLM_TENSOR_FFN_UP, "blk.%d.ffn_up" }, - }, - }, - { - LLM_ARCH_GROK, - { - { LLM_TENSOR_TOKEN_EMBD, "token_embd" }, - { LLM_TENSOR_OUTPUT_NORM, "output_norm" }, - { LLM_TENSOR_OUTPUT, "output" }, - { LLM_TENSOR_ROPE_FREQS, "rope_freqs" }, - { LLM_TENSOR_ATTN_NORM, "blk.%d.attn_norm" }, - { LLM_TENSOR_ATTN_Q, "blk.%d.attn_q" }, - { LLM_TENSOR_ATTN_K, "blk.%d.attn_k" }, - { LLM_TENSOR_ATTN_V, "blk.%d.attn_v" }, - { LLM_TENSOR_ATTN_OUT, "blk.%d.attn_output" }, - { LLM_TENSOR_ATTN_ROT_EMBD, "blk.%d.attn_rot_embd" }, - { LLM_TENSOR_FFN_GATE_INP, "blk.%d.ffn_gate_inp" }, - { LLM_TENSOR_FFN_NORM, "blk.%d.ffn_norm" }, - { LLM_TENSOR_FFN_GATE_EXP, "blk.%d.ffn_gate.%d" }, - { LLM_TENSOR_FFN_DOWN_EXP, "blk.%d.ffn_down.%d" }, - { LLM_TENSOR_FFN_UP_EXP, "blk.%d.ffn_up.%d" }, - { LLM_TENSOR_FFN_GATE_EXPS, "blk.%d.ffn_gate_exps" }, - { LLM_TENSOR_FFN_DOWN_EXPS, "blk.%d.ffn_down_exps" }, - { LLM_TENSOR_FFN_UP_EXPS, "blk.%d.ffn_up_exps" }, - { LLM_TENSOR_LAYER_OUT_NORM, "blk.%d.layer_output_norm" }, - { LLM_TENSOR_ATTN_OUT_NORM, "blk.%d.attn_output_norm" }, - }, - }, - { - LLM_ARCH_GPT2, - { - { LLM_TENSOR_TOKEN_EMBD, "token_embd" }, - { LLM_TENSOR_POS_EMBD, "position_embd" }, - { LLM_TENSOR_OUTPUT_NORM, "output_norm" }, - { LLM_TENSOR_OUTPUT, "output" }, - { LLM_TENSOR_ATTN_NORM, "blk.%d.attn_norm" }, - { LLM_TENSOR_ATTN_QKV, "blk.%d.attn_qkv" }, - { LLM_TENSOR_ATTN_OUT, "blk.%d.attn_output" }, - { LLM_TENSOR_FFN_NORM, "blk.%d.ffn_norm" }, - { LLM_TENSOR_FFN_UP, "blk.%d.ffn_up" }, - { LLM_TENSOR_FFN_DOWN, "blk.%d.ffn_down" }, - }, - }, - { - LLM_ARCH_GPTJ, - { - { LLM_TENSOR_TOKEN_EMBD, "token_embd" }, - }, - }, - { - LLM_ARCH_GPTNEOX, - { - { LLM_TENSOR_TOKEN_EMBD, "token_embd" }, - { LLM_TENSOR_OUTPUT_NORM, "output_norm" }, - { LLM_TENSOR_OUTPUT, "output" }, - { LLM_TENSOR_ATTN_NORM, "blk.%d.attn_norm" }, - { LLM_TENSOR_ATTN_QKV, "blk.%d.attn_qkv" }, - { LLM_TENSOR_ATTN_OUT, "blk.%d.attn_output" }, - { LLM_TENSOR_FFN_NORM, "blk.%d.ffn_norm" }, - { LLM_TENSOR_FFN_DOWN, "blk.%d.ffn_down" }, - { LLM_TENSOR_FFN_UP, "blk.%d.ffn_up" }, - }, - }, - { - LLM_ARCH_PERSIMMON, - { - { LLM_TENSOR_TOKEN_EMBD, "token_embd"}, - { LLM_TENSOR_OUTPUT_NORM, "output_norm"}, - { LLM_TENSOR_OUTPUT, "output"}, - { LLM_TENSOR_ATTN_NORM, "blk.%d.attn_norm"}, - { LLM_TENSOR_ATTN_QKV, "blk.%d.attn_qkv"}, - { LLM_TENSOR_ATTN_OUT, "blk.%d.attn_output"}, - { LLM_TENSOR_ATTN_Q_NORM, "blk.%d.attn_q_norm"}, - { LLM_TENSOR_ATTN_K_NORM, "blk.%d.attn_k_norm"}, - { LLM_TENSOR_FFN_NORM, "blk.%d.ffn_norm"}, - { LLM_TENSOR_FFN_DOWN, "blk.%d.ffn_down"}, - { LLM_TENSOR_FFN_UP, "blk.%d.ffn_up"}, - { LLM_TENSOR_ATTN_ROT_EMBD, "blk.%d.attn_rot_embd"}, - }, - }, - { - LLM_ARCH_MPT, - { - { LLM_TENSOR_TOKEN_EMBD, "token_embd" }, - { LLM_TENSOR_OUTPUT_NORM, "output_norm" }, - { LLM_TENSOR_OUTPUT, "output"}, - { LLM_TENSOR_ATTN_NORM, "blk.%d.attn_norm" }, - { LLM_TENSOR_FFN_NORM, "blk.%d.ffn_norm" }, - { LLM_TENSOR_ATTN_QKV, "blk.%d.attn_qkv" }, - { LLM_TENSOR_ATTN_OUT, "blk.%d.attn_output" }, - { LLM_TENSOR_FFN_DOWN, "blk.%d.ffn_down" }, - { LLM_TENSOR_FFN_UP, "blk.%d.ffn_up" }, - { LLM_TENSOR_FFN_ACT, "blk.%d.ffn.act" }, - { LLM_TENSOR_POS_EMBD, "position_embd" }, - { LLM_TENSOR_ATTN_Q_NORM, "blk.%d.attn_q_norm"}, - { LLM_TENSOR_ATTN_K_NORM, "blk.%d.attn_k_norm"}, - }, - }, - { - LLM_ARCH_STARCODER, - { - { LLM_TENSOR_TOKEN_EMBD, "token_embd" }, - { LLM_TENSOR_POS_EMBD, "position_embd" }, - { LLM_TENSOR_OUTPUT_NORM, "output_norm" }, - { LLM_TENSOR_OUTPUT, "output" }, - { LLM_TENSOR_ATTN_NORM, "blk.%d.attn_norm" }, - { LLM_TENSOR_ATTN_QKV, "blk.%d.attn_qkv" }, - { LLM_TENSOR_ATTN_OUT, "blk.%d.attn_output" }, - { LLM_TENSOR_FFN_NORM, "blk.%d.ffn_norm" }, - { LLM_TENSOR_FFN_UP, "blk.%d.ffn_up" }, - { LLM_TENSOR_FFN_DOWN, "blk.%d.ffn_down" }, - }, - }, - { - LLM_ARCH_REFACT, - { - { LLM_TENSOR_TOKEN_EMBD, "token_embd" }, - { LLM_TENSOR_OUTPUT_NORM, "output_norm" }, - { LLM_TENSOR_OUTPUT, "output" }, - { LLM_TENSOR_ATTN_NORM, "blk.%d.attn_norm" }, - { LLM_TENSOR_ATTN_Q, "blk.%d.attn_q" }, - { LLM_TENSOR_ATTN_K, "blk.%d.attn_k" }, - { LLM_TENSOR_ATTN_V, "blk.%d.attn_v" }, - { LLM_TENSOR_ATTN_OUT, "blk.%d.attn_output" }, - { LLM_TENSOR_FFN_NORM, "blk.%d.ffn_norm" }, - { LLM_TENSOR_FFN_GATE, "blk.%d.ffn_gate" }, - { LLM_TENSOR_FFN_DOWN, "blk.%d.ffn_down" }, - { LLM_TENSOR_FFN_UP, "blk.%d.ffn_up" }, - }, - }, - { - LLM_ARCH_BERT, - { - { LLM_TENSOR_TOKEN_EMBD, "token_embd" }, - { LLM_TENSOR_TOKEN_EMBD_NORM, "token_embd_norm" }, - { LLM_TENSOR_TOKEN_TYPES, "token_types" }, - { LLM_TENSOR_POS_EMBD, "position_embd" }, - { LLM_TENSOR_ATTN_OUT_NORM, "blk.%d.attn_output_norm" }, - { LLM_TENSOR_ATTN_Q, "blk.%d.attn_q" }, - { LLM_TENSOR_ATTN_K, "blk.%d.attn_k" }, - { LLM_TENSOR_ATTN_V, "blk.%d.attn_v" }, - { LLM_TENSOR_ATTN_OUT, "blk.%d.attn_output" }, - { LLM_TENSOR_LAYER_OUT_NORM, "blk.%d.layer_output_norm" }, - { LLM_TENSOR_FFN_DOWN, "blk.%d.ffn_down" }, - { LLM_TENSOR_FFN_UP, "blk.%d.ffn_up" }, - }, - }, - { - LLM_ARCH_NOMIC_BERT, - { - { LLM_TENSOR_TOKEN_EMBD, "token_embd" }, - { LLM_TENSOR_TOKEN_EMBD_NORM, "token_embd_norm" }, - { LLM_TENSOR_TOKEN_TYPES, "token_types" }, - { LLM_TENSOR_ATTN_OUT_NORM, "blk.%d.attn_output_norm" }, - { LLM_TENSOR_ATTN_QKV, "blk.%d.attn_qkv" }, - { LLM_TENSOR_ATTN_OUT, "blk.%d.attn_output" }, - { LLM_TENSOR_LAYER_OUT_NORM, "blk.%d.layer_output_norm" }, - { LLM_TENSOR_FFN_GATE, "blk.%d.ffn_gate" }, - { LLM_TENSOR_FFN_DOWN, "blk.%d.ffn_down" }, - { LLM_TENSOR_FFN_UP, "blk.%d.ffn_up" }, - }, - }, - { - LLM_ARCH_BLOOM, - { - { LLM_TENSOR_TOKEN_EMBD, "token_embd" }, - { LLM_TENSOR_TOKEN_EMBD_NORM, "token_embd_norm" }, - { LLM_TENSOR_OUTPUT_NORM, "output_norm" }, - { LLM_TENSOR_OUTPUT, "output" }, - { LLM_TENSOR_ATTN_NORM, "blk.%d.attn_norm" }, - { LLM_TENSOR_ATTN_QKV, "blk.%d.attn_qkv" }, - { LLM_TENSOR_ATTN_OUT, "blk.%d.attn_output" }, - { LLM_TENSOR_FFN_NORM, "blk.%d.ffn_norm" }, - { LLM_TENSOR_FFN_UP, "blk.%d.ffn_up" }, - { LLM_TENSOR_FFN_DOWN, "blk.%d.ffn_down" }, - }, - }, - { - LLM_ARCH_STABLELM, - { - { LLM_TENSOR_TOKEN_EMBD, "token_embd" }, - { LLM_TENSOR_OUTPUT_NORM, "output_norm" }, - { LLM_TENSOR_OUTPUT, "output" }, - { LLM_TENSOR_ROPE_FREQS, "rope_freqs" }, - { LLM_TENSOR_ATTN_NORM, "blk.%d.attn_norm" }, - { LLM_TENSOR_ATTN_Q, "blk.%d.attn_q" }, - { LLM_TENSOR_ATTN_K, "blk.%d.attn_k" }, - { LLM_TENSOR_ATTN_V, "blk.%d.attn_v" }, - { LLM_TENSOR_ATTN_OUT, "blk.%d.attn_output" }, - { LLM_TENSOR_FFN_NORM, "blk.%d.ffn_norm" }, - { LLM_TENSOR_FFN_GATE, "blk.%d.ffn_gate" }, - { LLM_TENSOR_FFN_DOWN, "blk.%d.ffn_down" }, - { LLM_TENSOR_FFN_UP, "blk.%d.ffn_up" }, - { LLM_TENSOR_ATTN_Q_NORM, "blk.%d.attn_q_norm" }, - { LLM_TENSOR_ATTN_K_NORM, "blk.%d.attn_k_norm" }, - }, - }, - { - LLM_ARCH_QWEN, - { - { LLM_TENSOR_TOKEN_EMBD, "token_embd" }, - { LLM_TENSOR_OUTPUT_NORM, "output_norm" }, - { LLM_TENSOR_OUTPUT, "output" }, - { LLM_TENSOR_ROPE_FREQS, "rope_freqs" }, - { LLM_TENSOR_ATTN_NORM, "blk.%d.attn_norm" }, - { LLM_TENSOR_ATTN_QKV, "blk.%d.attn_qkv" }, - { LLM_TENSOR_ATTN_OUT, "blk.%d.attn_output" }, - { LLM_TENSOR_FFN_NORM, "blk.%d.ffn_norm" }, - { LLM_TENSOR_FFN_GATE, "blk.%d.ffn_gate" }, - { LLM_TENSOR_FFN_DOWN, "blk.%d.ffn_down" }, - { LLM_TENSOR_FFN_UP, "blk.%d.ffn_up" }, - }, - }, - { - LLM_ARCH_QWEN2, - { - { LLM_TENSOR_TOKEN_EMBD, "token_embd" }, - { LLM_TENSOR_OUTPUT_NORM, "output_norm" }, - { LLM_TENSOR_OUTPUT, "output" }, - { LLM_TENSOR_ATTN_NORM, "blk.%d.attn_norm" }, - { LLM_TENSOR_ATTN_Q, "blk.%d.attn_q" }, - { LLM_TENSOR_ATTN_K, "blk.%d.attn_k" }, - { LLM_TENSOR_ATTN_V, "blk.%d.attn_v" }, - { LLM_TENSOR_ATTN_OUT, "blk.%d.attn_output" }, - { LLM_TENSOR_FFN_NORM, "blk.%d.ffn_norm" }, - { LLM_TENSOR_FFN_GATE, "blk.%d.ffn_gate" }, - { LLM_TENSOR_FFN_DOWN, "blk.%d.ffn_down" }, - { LLM_TENSOR_FFN_UP, "blk.%d.ffn_up" }, - }, - }, - { - LLM_ARCH_QWEN2MOE, - { - { LLM_TENSOR_TOKEN_EMBD, "token_embd" }, - { LLM_TENSOR_OUTPUT_NORM, "output_norm" }, - { LLM_TENSOR_OUTPUT, "output" }, - { LLM_TENSOR_ATTN_NORM, "blk.%d.attn_norm" }, - { LLM_TENSOR_ATTN_Q, "blk.%d.attn_q" }, - { LLM_TENSOR_ATTN_K, "blk.%d.attn_k" }, - { LLM_TENSOR_ATTN_V, "blk.%d.attn_v" }, - { LLM_TENSOR_ATTN_OUT, "blk.%d.attn_output" }, - { LLM_TENSOR_FFN_NORM, "blk.%d.ffn_norm" }, - { LLM_TENSOR_FFN_GATE_INP, "blk.%d.ffn_gate_inp" }, - { LLM_TENSOR_FFN_GATE_EXPS, "blk.%d.ffn_gate_exps" }, - { LLM_TENSOR_FFN_DOWN_EXPS, "blk.%d.ffn_down_exps" }, - { LLM_TENSOR_FFN_UP_EXPS, "blk.%d.ffn_up_exps" }, - { LLM_TENSOR_FFN_GATE_INP_SHEXP, "blk.%d.ffn_gate_inp_shexp" }, - { LLM_TENSOR_FFN_GATE_SHEXP, "blk.%d.ffn_gate_shexp" }, - { LLM_TENSOR_FFN_DOWN_SHEXP, "blk.%d.ffn_down_shexp" }, - { LLM_TENSOR_FFN_UP_SHEXP, "blk.%d.ffn_up_shexp" }, - }, - }, - { - LLM_ARCH_PHI2, - { - { LLM_TENSOR_TOKEN_EMBD, "token_embd" }, - { LLM_TENSOR_OUTPUT_NORM, "output_norm" }, - { LLM_TENSOR_OUTPUT, "output" }, - { LLM_TENSOR_ATTN_NORM, "blk.%d.attn_norm" }, - { LLM_TENSOR_ATTN_QKV, "blk.%d.attn_qkv" }, - { LLM_TENSOR_ATTN_Q, "blk.%d.attn_q" }, - { LLM_TENSOR_ATTN_K, "blk.%d.attn_k" }, - { LLM_TENSOR_ATTN_V, "blk.%d.attn_v" }, - { LLM_TENSOR_ATTN_OUT, "blk.%d.attn_output" }, - { LLM_TENSOR_FFN_DOWN, "blk.%d.ffn_down" }, - { LLM_TENSOR_FFN_UP, "blk.%d.ffn_up" }, - }, - }, - { - LLM_ARCH_PHI3, - { - { LLM_TENSOR_TOKEN_EMBD, "token_embd" }, - { LLM_TENSOR_OUTPUT_NORM, "output_norm" }, - { LLM_TENSOR_OUTPUT, "output" }, - { LLM_TENSOR_ATTN_NORM, "blk.%d.attn_norm" }, - { LLM_TENSOR_ATTN_QKV, "blk.%d.attn_qkv" }, - { LLM_TENSOR_ATTN_Q, "blk.%d.attn_q" }, - { LLM_TENSOR_ATTN_K, "blk.%d.attn_k" }, - { LLM_TENSOR_ATTN_V, "blk.%d.attn_v" }, - { LLM_TENSOR_ATTN_OUT, "blk.%d.attn_output" }, - { LLM_TENSOR_FFN_NORM, "blk.%d.ffn_norm" }, - { LLM_TENSOR_FFN_DOWN, "blk.%d.ffn_down" }, - { LLM_TENSOR_FFN_UP, "blk.%d.ffn_up" }, - }, - }, - { - LLM_ARCH_PLAMO, - { - { LLM_TENSOR_TOKEN_EMBD, "token_embd" }, - { LLM_TENSOR_OUTPUT_NORM, "output_norm" }, - { LLM_TENSOR_OUTPUT, "output" }, - { LLM_TENSOR_ROPE_FREQS, "rope_freqs" }, - { LLM_TENSOR_ATTN_NORM, "blk.%d.attn_norm" }, - { LLM_TENSOR_ATTN_Q, "blk.%d.attn_q" }, - { LLM_TENSOR_ATTN_K, "blk.%d.attn_k" }, - { LLM_TENSOR_ATTN_V, "blk.%d.attn_v" }, - { LLM_TENSOR_ATTN_OUT, "blk.%d.attn_output" }, - { LLM_TENSOR_ATTN_ROT_EMBD, "blk.%d.attn_rot_embd" }, - { LLM_TENSOR_FFN_GATE, "blk.%d.ffn_gate" }, - { LLM_TENSOR_FFN_DOWN, "blk.%d.ffn_down" }, - { LLM_TENSOR_FFN_UP, "blk.%d.ffn_up" }, - }, - }, - { - LLM_ARCH_CODESHELL, - { - { LLM_TENSOR_TOKEN_EMBD, "token_embd" }, - { LLM_TENSOR_OUTPUT_NORM, "output_norm" }, - { LLM_TENSOR_OUTPUT, "output" }, - { LLM_TENSOR_ROPE_FREQS, "rope_freqs" }, - { LLM_TENSOR_ATTN_NORM, "blk.%d.attn_norm" }, - { LLM_TENSOR_ATTN_Q, "blk.%d.attn_q" }, - { LLM_TENSOR_ATTN_K, "blk.%d.attn_k" }, - { LLM_TENSOR_ATTN_V, "blk.%d.attn_v" }, - { LLM_TENSOR_ATTN_QKV, "blk.%d.attn_qkv" }, - { LLM_TENSOR_ATTN_OUT, "blk.%d.attn_output" }, - { LLM_TENSOR_ATTN_ROT_EMBD, "blk.%d.attn_rot_embd" }, - { LLM_TENSOR_FFN_NORM, "blk.%d.ffn_norm" }, - { LLM_TENSOR_FFN_GATE, "blk.%d.ffn_gate" }, - { LLM_TENSOR_FFN_DOWN, "blk.%d.ffn_down" }, - { LLM_TENSOR_FFN_UP, "blk.%d.ffn_up" }, - }, - }, - { - LLM_ARCH_ORION, - { - { LLM_TENSOR_TOKEN_EMBD, "token_embd" }, - { LLM_TENSOR_OUTPUT_NORM, "output_norm" }, - { LLM_TENSOR_OUTPUT, "output" }, - { LLM_TENSOR_ROPE_FREQS, "rope_freqs" }, - { LLM_TENSOR_ATTN_NORM, "blk.%d.attn_norm" }, - { LLM_TENSOR_ATTN_Q, "blk.%d.attn_q" }, - { LLM_TENSOR_ATTN_K, "blk.%d.attn_k" }, - { LLM_TENSOR_ATTN_V, "blk.%d.attn_v" }, - { LLM_TENSOR_ATTN_OUT, "blk.%d.attn_output" }, - { LLM_TENSOR_ATTN_ROT_EMBD, "blk.%d.attn_rot_embd" }, - { LLM_TENSOR_FFN_NORM, "blk.%d.ffn_norm" }, - { LLM_TENSOR_FFN_GATE, "blk.%d.ffn_gate" }, - { LLM_TENSOR_FFN_DOWN, "blk.%d.ffn_down" }, - { LLM_TENSOR_FFN_UP, "blk.%d.ffn_up" }, - }, - }, - { - LLM_ARCH_INTERNLM2, - { - { LLM_TENSOR_TOKEN_EMBD, "token_embd" }, - { LLM_TENSOR_OUTPUT_NORM, "output_norm" }, - { LLM_TENSOR_OUTPUT, "output" }, - { LLM_TENSOR_ATTN_NORM, "blk.%d.attn_norm" }, - { LLM_TENSOR_ATTN_Q, "blk.%d.attn_q" }, - { LLM_TENSOR_ATTN_K, "blk.%d.attn_k" }, - { LLM_TENSOR_ATTN_V, "blk.%d.attn_v" }, - { LLM_TENSOR_ATTN_OUT, "blk.%d.attn_output" }, - { LLM_TENSOR_FFN_NORM, "blk.%d.ffn_norm" }, - { LLM_TENSOR_FFN_GATE, "blk.%d.ffn_gate" }, - { LLM_TENSOR_FFN_DOWN, "blk.%d.ffn_down" }, - { LLM_TENSOR_FFN_UP, "blk.%d.ffn_up" }, - }, - }, - { - LLM_ARCH_MINICPM, - { - { LLM_TENSOR_TOKEN_EMBD, "token_embd" }, - { LLM_TENSOR_OUTPUT_NORM, "output_norm" }, - { LLM_TENSOR_OUTPUT, "output" }, - { LLM_TENSOR_ROPE_FREQS, "rope_freqs" }, - { LLM_TENSOR_ATTN_NORM, "blk.%d.attn_norm" }, - { LLM_TENSOR_ATTN_Q, "blk.%d.attn_q" }, - { LLM_TENSOR_ATTN_K, "blk.%d.attn_k" }, - { LLM_TENSOR_ATTN_V, "blk.%d.attn_v" }, - { LLM_TENSOR_ATTN_OUT, "blk.%d.attn_output" }, - { LLM_TENSOR_ATTN_ROT_EMBD, "blk.%d.attn_rot_embd" }, - { LLM_TENSOR_FFN_GATE_INP, "blk.%d.ffn_gate_inp" }, - { LLM_TENSOR_FFN_NORM, "blk.%d.ffn_norm" }, - { LLM_TENSOR_FFN_GATE, "blk.%d.ffn_gate" }, - { LLM_TENSOR_FFN_DOWN, "blk.%d.ffn_down" }, - { LLM_TENSOR_FFN_UP, "blk.%d.ffn_up" }, - { LLM_TENSOR_FFN_GATE_EXP, "blk.%d.ffn_gate.%d" }, - { LLM_TENSOR_FFN_DOWN_EXP, "blk.%d.ffn_down.%d" }, - { LLM_TENSOR_FFN_UP_EXP, "blk.%d.ffn_up.%d" }, - }, - }, - { - LLM_ARCH_GEMMA, - { - { LLM_TENSOR_TOKEN_EMBD, "token_embd" }, - { LLM_TENSOR_OUTPUT_NORM, "output_norm" }, - { LLM_TENSOR_ATTN_NORM, "blk.%d.attn_norm" }, - { LLM_TENSOR_ATTN_Q, "blk.%d.attn_q" }, - { LLM_TENSOR_ATTN_K, "blk.%d.attn_k" }, - { LLM_TENSOR_ATTN_V, "blk.%d.attn_v" }, - { LLM_TENSOR_ATTN_OUT, "blk.%d.attn_output" }, - { LLM_TENSOR_FFN_NORM, "blk.%d.ffn_norm" }, - { LLM_TENSOR_FFN_GATE, "blk.%d.ffn_gate" }, - { LLM_TENSOR_FFN_DOWN, "blk.%d.ffn_down" }, - { LLM_TENSOR_FFN_UP, "blk.%d.ffn_up" }, - }, - }, - { - LLM_ARCH_STARCODER2, - { - { LLM_TENSOR_TOKEN_EMBD, "token_embd" }, - { LLM_TENSOR_OUTPUT_NORM, "output_norm" }, - { LLM_TENSOR_OUTPUT, "output" }, - { LLM_TENSOR_ROPE_FREQS, "rope_freqs" }, - { LLM_TENSOR_ATTN_NORM, "blk.%d.attn_norm" }, - { LLM_TENSOR_ATTN_Q, "blk.%d.attn_q" }, - { LLM_TENSOR_ATTN_K, "blk.%d.attn_k" }, - { LLM_TENSOR_ATTN_V, "blk.%d.attn_v" }, - { LLM_TENSOR_ATTN_OUT, "blk.%d.attn_output" }, - { LLM_TENSOR_ATTN_ROT_EMBD, "blk.%d.attn_rot_embd" }, - { LLM_TENSOR_FFN_NORM, "blk.%d.ffn_norm" }, - { LLM_TENSOR_FFN_DOWN, "blk.%d.ffn_down" }, - { LLM_TENSOR_FFN_UP, "blk.%d.ffn_up" }, - }, - }, - { - LLM_ARCH_MAMBA, - { - { LLM_TENSOR_TOKEN_EMBD, "token_embd" }, - { LLM_TENSOR_OUTPUT_NORM, "output_norm" }, - { LLM_TENSOR_OUTPUT, "output" }, - { LLM_TENSOR_ATTN_NORM, "blk.%d.attn_norm" }, - { LLM_TENSOR_SSM_IN, "blk.%d.ssm_in" }, - { LLM_TENSOR_SSM_CONV1D, "blk.%d.ssm_conv1d" }, - { LLM_TENSOR_SSM_X, "blk.%d.ssm_x" }, - { LLM_TENSOR_SSM_DT, "blk.%d.ssm_dt" }, - { LLM_TENSOR_SSM_A, "blk.%d.ssm_a" }, - { LLM_TENSOR_SSM_D, "blk.%d.ssm_d" }, - { LLM_TENSOR_SSM_OUT, "blk.%d.ssm_out" }, - }, - }, - { - LLM_ARCH_XVERSE, - { - { LLM_TENSOR_TOKEN_EMBD, "token_embd" }, - { LLM_TENSOR_OUTPUT_NORM, "output_norm" }, - { LLM_TENSOR_OUTPUT, "output" }, - { LLM_TENSOR_ROPE_FREQS, "rope_freqs" }, - { LLM_TENSOR_ATTN_NORM, "blk.%d.attn_norm" }, - { LLM_TENSOR_ATTN_Q, "blk.%d.attn_q" }, - { LLM_TENSOR_ATTN_K, "blk.%d.attn_k" }, - { LLM_TENSOR_ATTN_V, "blk.%d.attn_v" }, - { LLM_TENSOR_ATTN_OUT, "blk.%d.attn_output" }, - { LLM_TENSOR_ATTN_ROT_EMBD, "blk.%d.attn_rot_embd" }, - { LLM_TENSOR_FFN_NORM, "blk.%d.ffn_norm" }, - { LLM_TENSOR_FFN_GATE, "blk.%d.ffn_gate" }, - { LLM_TENSOR_FFN_DOWN, "blk.%d.ffn_down" }, - { LLM_TENSOR_FFN_UP, "blk.%d.ffn_up" }, - }, - }, - { - LLM_ARCH_COMMAND_R, - { - { LLM_TENSOR_TOKEN_EMBD, "token_embd" }, - { LLM_TENSOR_OUTPUT_NORM, "output_norm" }, - { LLM_TENSOR_ATTN_NORM, "blk.%d.attn_norm" }, - { LLM_TENSOR_ATTN_Q, "blk.%d.attn_q" }, - { LLM_TENSOR_ATTN_K, "blk.%d.attn_k" }, - { LLM_TENSOR_ATTN_V, "blk.%d.attn_v" }, - { LLM_TENSOR_ATTN_OUT, "blk.%d.attn_output" }, - { LLM_TENSOR_FFN_GATE, "blk.%d.ffn_gate" }, - { LLM_TENSOR_FFN_DOWN, "blk.%d.ffn_down" }, - { LLM_TENSOR_FFN_UP, "blk.%d.ffn_up" }, - { LLM_TENSOR_ATTN_Q_NORM, "blk.%d.attn_q_norm" }, - { LLM_TENSOR_ATTN_K_NORM, "blk.%d.attn_k_norm" }, - }, - }, - { - LLM_ARCH_DBRX, - { - { LLM_TENSOR_TOKEN_EMBD, "token_embd" }, - { LLM_TENSOR_OUTPUT_NORM, "output_norm" }, - { LLM_TENSOR_OUTPUT, "output" }, - { LLM_TENSOR_ATTN_QKV, "blk.%d.attn_qkv" }, - { LLM_TENSOR_ATTN_NORM, "blk.%d.attn_norm" }, - { LLM_TENSOR_ATTN_OUT, "blk.%d.attn_output" }, - { LLM_TENSOR_ATTN_OUT_NORM, "blk.%d.attn_output_norm" }, - { LLM_TENSOR_FFN_GATE_INP, "blk.%d.ffn_gate_inp" }, - { LLM_TENSOR_FFN_GATE_EXPS, "blk.%d.ffn_gate_exps" }, - { LLM_TENSOR_FFN_DOWN_EXPS, "blk.%d.ffn_down_exps" }, - { LLM_TENSOR_FFN_UP_EXPS, "blk.%d.ffn_up_exps" }, - }, - }, - { - LLM_ARCH_OLMO, - { - { LLM_TENSOR_TOKEN_EMBD, "token_embd" }, - { LLM_TENSOR_OUTPUT, "output" }, - { LLM_TENSOR_ATTN_Q, "blk.%d.attn_q" }, - { LLM_TENSOR_ATTN_K, "blk.%d.attn_k" }, - { LLM_TENSOR_ATTN_V, "blk.%d.attn_v" }, - { LLM_TENSOR_ATTN_OUT, "blk.%d.attn_output" }, - { LLM_TENSOR_FFN_GATE, "blk.%d.ffn_gate" }, - { LLM_TENSOR_FFN_DOWN, "blk.%d.ffn_down" }, - { LLM_TENSOR_FFN_UP, "blk.%d.ffn_up" }, - }, - }, - { - LLM_ARCH_UNKNOWN, - { - { LLM_TENSOR_TOKEN_EMBD, "token_embd" }, - }, - }, -}; - -static llm_arch llm_arch_from_string(const std::string & name) { - for (const auto & kv : LLM_ARCH_NAMES) { // NOLINT - if (kv.second == name) { - return kv.first; - } - } - - return LLM_ARCH_UNKNOWN; -} - -// helper to handle gguf constants -// usage: -// -// const auto tn = LLM_TN(LLM_ARCH_LLAMA); -// -// std::string name = tn(LLM_TENSOR_OUTPUT); -> "output" -// std::string name = tn(LLM_TENSOR_TOKEN_EMBD, "bias"); -> "token_embd.bias" -// std::string name = tn(LLM_TENSOR_ATTN_NORM, "weight", 3); -> "blk.3.attn_norm.weight" -// -struct LLM_TN { - LLM_TN(llm_arch arch) : arch(arch) {} - - llm_arch arch; - - std::string operator()(llm_tensor tensor) const { - if (LLM_TENSOR_NAMES.at(arch).find(tensor) == LLM_TENSOR_NAMES.at(arch).end()) { - return "__missing__"; - } - return LLM_TENSOR_NAMES.at(arch).at(tensor); - } - - std::string operator()(llm_tensor tensor, const std::string & suffix) const { - if (LLM_TENSOR_NAMES.at(arch).find(tensor) == LLM_TENSOR_NAMES.at(arch).end()) { - return "__missing__"; - } - return LLM_TENSOR_NAMES.at(arch).at(tensor) + "." + suffix; - } - - std::string operator()(llm_tensor tensor, int bid) const { - if (LLM_TENSOR_NAMES.at(arch).find(tensor) == LLM_TENSOR_NAMES.at(arch).end()) { - return "__missing__"; - } - return ::format(LLM_TENSOR_NAMES.at(arch).at(tensor).c_str(), bid); - } - - std::string operator()(llm_tensor tensor, const std::string & suffix, int bid) const { - if (LLM_TENSOR_NAMES.at(arch).find(tensor) == LLM_TENSOR_NAMES.at(arch).end()) { - return "__missing__"; - } - return ::format(LLM_TENSOR_NAMES.at(arch).at(tensor).c_str(), bid) + "." + suffix; - } - - std::string operator()(llm_tensor tensor, const std::string & suffix, int bid, int xid) const { - if (LLM_TENSOR_NAMES.at(arch).find(tensor) == LLM_TENSOR_NAMES.at(arch).end()) { - return "__missing__"; - } - return ::format(LLM_TENSOR_NAMES.at(arch).at(tensor).c_str(), bid, xid) + "." + suffix; - } -}; - -// -// gguf helpers -// - -static const std::map LLAMA_ROPE_SCALING_TYPES = { - { LLAMA_ROPE_SCALING_TYPE_NONE, "none" }, - { LLAMA_ROPE_SCALING_TYPE_LINEAR, "linear" }, - { LLAMA_ROPE_SCALING_TYPE_YARN, "yarn" }, -}; - -static llama_rope_scaling_type llama_rope_scaling_type_from_string(const std::string & name) { - for (const auto & kv : LLAMA_ROPE_SCALING_TYPES) { - if (kv.second == name) { - return (llama_rope_scaling_type) kv.first; - } - } - - return LLAMA_ROPE_SCALING_TYPE_UNSPECIFIED; -} - -static std::string gguf_data_to_str(enum gguf_type type, const void * data, int i) { - switch (type) { - case GGUF_TYPE_UINT8: return std::to_string(((const uint8_t *)data)[i]); - case GGUF_TYPE_INT8: return std::to_string(((const int8_t *)data)[i]); - case GGUF_TYPE_UINT16: return std::to_string(((const uint16_t *)data)[i]); - case GGUF_TYPE_INT16: return std::to_string(((const int16_t *)data)[i]); - case GGUF_TYPE_UINT32: return std::to_string(((const uint32_t *)data)[i]); - case GGUF_TYPE_INT32: return std::to_string(((const int32_t *)data)[i]); - case GGUF_TYPE_UINT64: return std::to_string(((const uint64_t *)data)[i]); - case GGUF_TYPE_INT64: return std::to_string(((const int64_t *)data)[i]); - case GGUF_TYPE_FLOAT32: return std::to_string(((const float *)data)[i]); - case GGUF_TYPE_FLOAT64: return std::to_string(((const double *)data)[i]); - case GGUF_TYPE_BOOL: return ((const bool *)data)[i] ? "true" : "false"; - default: return format("unknown type %d", type); - } -} - -static std::string gguf_kv_to_str(const struct gguf_context * ctx_gguf, int i) { - const enum gguf_type type = gguf_get_kv_type(ctx_gguf, i); - - switch (type) { - case GGUF_TYPE_STRING: - return gguf_get_val_str(ctx_gguf, i); - case GGUF_TYPE_ARRAY: - { - const enum gguf_type arr_type = gguf_get_arr_type(ctx_gguf, i); - int arr_n = gguf_get_arr_n(ctx_gguf, i); - const void * data = gguf_get_arr_data(ctx_gguf, i); - std::stringstream ss; - ss << "["; - for (int j = 0; j < arr_n; j++) { - if (arr_type == GGUF_TYPE_STRING) { - std::string val = gguf_get_arr_str(ctx_gguf, i, j); - // escape quotes - replace_all(val, "\\", "\\\\"); - replace_all(val, "\"", "\\\""); - ss << '"' << val << '"'; - } else if (arr_type == GGUF_TYPE_ARRAY) { - ss << "???"; - } else { - ss << gguf_data_to_str(arr_type, data, j); - } - if (j < arr_n - 1) { - ss << ", "; - } - } - ss << "]"; - return ss.str(); - } - default: - return gguf_data_to_str(type, gguf_get_val_data(ctx_gguf, i), 0); - } -} - -// -// llama helpers -// - -#if defined(_WIN32) -static std::string llama_format_win_err(DWORD err) { - LPSTR buf; - size_t size = FormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, - NULL, err, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPSTR)&buf, 0, NULL); - if (!size) { - return "FormatMessageA failed"; - } - std::string ret(buf, size); - LocalFree(buf); - return ret; -} -#endif - -template -struct no_init { - T value; - no_init() { /* do nothing */ } -}; - -struct llama_file { - // use FILE * so we don't have to re-open the file to mmap - FILE * fp; - size_t size; - - llama_file(const char * fname, const char * mode) { - fp = ggml_fopen(fname, mode); - if (fp == NULL) { - throw std::runtime_error(format("failed to open %s: %s", fname, strerror(errno))); - } - seek(0, SEEK_END); - size = tell(); - seek(0, SEEK_SET); - } - - size_t tell() const { -#ifdef _WIN32 - __int64 ret = _ftelli64(fp); -#else - long ret = std::ftell(fp); -#endif - GGML_ASSERT(ret != -1); // this really shouldn't fail - return (size_t) ret; - } - - void seek(size_t offset, int whence) const { -#ifdef _WIN32 - int ret = _fseeki64(fp, (__int64) offset, whence); -#else - int ret = std::fseek(fp, (long) offset, whence); -#endif - GGML_ASSERT(ret == 0); // same - } - - void read_raw(void * ptr, size_t len) const { - if (len == 0) { - return; - } - errno = 0; - std::size_t ret = std::fread(ptr, len, 1, fp); - if (ferror(fp)) { - throw std::runtime_error(format("read error: %s", strerror(errno))); - } - if (ret != 1) { - throw std::runtime_error("unexpectedly reached end of file"); - } - } - - uint32_t read_u32() const { - uint32_t ret; - read_raw(&ret, sizeof(ret)); - return ret; - } - - void write_raw(const void * ptr, size_t len) const { - if (len == 0) { - return; - } - errno = 0; - size_t ret = std::fwrite(ptr, len, 1, fp); - if (ret != 1) { - throw std::runtime_error(format("write error: %s", strerror(errno))); - } - } - - void write_u32(std::uint32_t val) const { - write_raw(&val, sizeof(val)); - } - - ~llama_file() { - if (fp) { - std::fclose(fp); - } - } -}; -using llama_files = std::vector>; - -struct llama_mmap { - void * addr; - size_t size; - - llama_mmap(const llama_mmap &) = delete; - -#ifdef _POSIX_MAPPED_FILES - static constexpr bool SUPPORTED = true; - - // list of mapped fragments (first_offset, last_offset) - std::vector> mapped_fragments; - - llama_mmap(struct llama_file * file, size_t prefetch = (size_t) -1 /* -1 = max value */, bool numa = false) { - size = file->size; - int fd = fileno(file->fp); - int flags = MAP_SHARED; - // prefetch/readahead impairs performance on NUMA systems - if (numa) { prefetch = 0; } -#ifdef __linux__ - // advise the kernel to read the file sequentially (increases readahead) - if (posix_fadvise(fd, 0, 0, POSIX_FADV_SEQUENTIAL)) { - LLAMA_LOG_WARN("warning: posix_fadvise(.., POSIX_FADV_SEQUENTIAL) failed: %s\n", - strerror(errno)); - } - if (prefetch) { flags |= MAP_POPULATE; } -#endif - addr = mmap(NULL, file->size, PROT_READ, flags, fd, 0); - if (addr == MAP_FAILED) { // NOLINT - throw std::runtime_error(format("mmap failed: %s", strerror(errno))); - } - - if (prefetch > 0) { - // advise the kernel to preload the mapped memory - if (posix_madvise(addr, std::min(file->size, prefetch), POSIX_MADV_WILLNEED)) { - LLAMA_LOG_WARN("warning: posix_madvise(.., POSIX_MADV_WILLNEED) failed: %s\n", - strerror(errno)); - } - } - if (numa) { - // advise the kernel not to use readahead - // (because the next page might not belong on the same node) - if (posix_madvise(addr, file->size, POSIX_MADV_RANDOM)) { - LLAMA_LOG_WARN("warning: posix_madvise(.., POSIX_MADV_RANDOM) failed: %s\n", - strerror(errno)); - } - } - - // initialize list of mapped_fragments - mapped_fragments.emplace_back(0, file->size); - } - - static void align_range(size_t * first, size_t * last, size_t page_size) { - // align first to the next page - size_t offset_in_page = *first & (page_size - 1); - size_t offset_to_page = offset_in_page == 0 ? 0 : page_size - offset_in_page; - *first += offset_to_page; - - // align last to the previous page - *last = *last & ~(page_size - 1); - - if (*last <= *first) { - *last = *first; - } - } - - // partially unmap the file in the range [first, last) - void unmap_fragment(size_t first, size_t last) { - // note: this function must not be called multiple times with overlapping ranges - // otherwise, there is a risk of invalidating addresses that have been repurposed for other mappings - int page_size = sysconf(_SC_PAGESIZE); - align_range(&first, &last, page_size); - size_t len = last - first; - - if (len == 0) { - return; - } - - GGML_ASSERT(first % page_size == 0); - GGML_ASSERT(last % page_size == 0); - GGML_ASSERT(last > first); - - void * next_page_start = (uint8_t *) addr + first; - - // unmap the range - if (munmap(next_page_start, len)) { - LLAMA_LOG_WARN("warning: munmap failed: %s\n", strerror(errno)); - } - - // update the list of mapped fragments to avoid unmapping the same range again in the destructor - std::vector> new_mapped_fragments; - for (const auto & frag : mapped_fragments) { - if (frag.first < first && frag.second > last) { - // the range is in the middle of the fragment, split it - new_mapped_fragments.emplace_back(frag.first, first); - new_mapped_fragments.emplace_back(last, frag.second); - } else if (frag.first < first && frag.second > first) { - // the range starts in the middle of the fragment - new_mapped_fragments.emplace_back(frag.first, first); - } else if (frag.first < last && frag.second > last) { - // the range ends in the middle of the fragment - new_mapped_fragments.emplace_back(last, frag.second); - } else if (frag.first >= first && frag.second <= last) { - // the range covers the entire fragment - } else { - // the range is outside the fragment - new_mapped_fragments.push_back(frag); - } - } - mapped_fragments = std::move(new_mapped_fragments); - } - - ~llama_mmap() { - for (const auto & frag : mapped_fragments) { - if (munmap((char *) addr + frag.first, frag.second - frag.first)) { - LLAMA_LOG_WARN("warning: munmap failed: %s\n", strerror(errno)); - } - } - } -#elif defined(_WIN32) - static constexpr bool SUPPORTED = true; - - llama_mmap(struct llama_file * file, size_t prefetch = (size_t) -1, bool numa = false) { - GGML_UNUSED(numa); - - size = file->size; - - HANDLE hFile = (HANDLE) _get_osfhandle(_fileno(file->fp)); - - HANDLE hMapping = CreateFileMappingA(hFile, NULL, PAGE_READONLY, 0, 0, NULL); - - if (hMapping == NULL) { - DWORD error = GetLastError(); - throw std::runtime_error(format("CreateFileMappingA failed: %s", llama_format_win_err(error).c_str())); - } - - addr = MapViewOfFile(hMapping, FILE_MAP_READ, 0, 0, 0); - DWORD error = GetLastError(); - CloseHandle(hMapping); - - if (addr == NULL) { - throw std::runtime_error(format("MapViewOfFile failed: %s", llama_format_win_err(error).c_str())); - } - - if (prefetch > 0) { -#if _WIN32_WINNT >= 0x602 - // PrefetchVirtualMemory is only present on Windows 8 and above, so we dynamically load it - BOOL (WINAPI *pPrefetchVirtualMemory) (HANDLE, ULONG_PTR, PWIN32_MEMORY_RANGE_ENTRY, ULONG); - HMODULE hKernel32 = GetModuleHandleW(L"kernel32.dll"); - - // may fail on pre-Windows 8 systems - pPrefetchVirtualMemory = reinterpret_cast (GetProcAddress(hKernel32, "PrefetchVirtualMemory")); - - if (pPrefetchVirtualMemory) { - // advise the kernel to preload the mapped memory - WIN32_MEMORY_RANGE_ENTRY range; - range.VirtualAddress = addr; - range.NumberOfBytes = (SIZE_T) std::min(size, prefetch); - if (!pPrefetchVirtualMemory(GetCurrentProcess(), 1, &range, 0)) { - LLAMA_LOG_WARN("warning: PrefetchVirtualMemory failed: %s\n", - llama_format_win_err(GetLastError()).c_str()); - } - } -#else - throw std::runtime_error("PrefetchVirtualMemory unavailable"); -#endif - } - } - - void unmap_fragment(size_t first, size_t last) { - // not supported - GGML_UNUSED(first); - GGML_UNUSED(last); - } - - ~llama_mmap() { - if (!UnmapViewOfFile(addr)) { - LLAMA_LOG_WARN("warning: UnmapViewOfFile failed: %s\n", - llama_format_win_err(GetLastError()).c_str()); - } - } -#else - static constexpr bool SUPPORTED = false; - - llama_mmap(struct llama_file * file, size_t prefetch = -1, bool numa = false) { - GGML_UNUSED(file); - GGML_UNUSED(prefetch); - GGML_UNUSED(numa); - - throw std::runtime_error("mmap not supported"); - } - - void unmap_fragment(size_t first, size_t last) { - GGML_UNUSED(first); - GGML_UNUSED(last); - - throw std::runtime_error("mmap not supported"); - } -#endif -}; -using llama_mmaps = std::vector>; - -// Represents some region of memory being locked using mlock or VirtualLock; -// will automatically unlock on destruction. -struct llama_mlock { - void * addr = NULL; - size_t size = 0; - - bool failed_already = false; - - llama_mlock() {} - llama_mlock(const llama_mlock &) = delete; - - ~llama_mlock() { - if (size) { - raw_unlock(addr, size); - } - } - - void init(void * ptr) { - GGML_ASSERT(addr == NULL && size == 0); // NOLINT - addr = ptr; - } - - void grow_to(size_t target_size) { - GGML_ASSERT(addr); - if (failed_already) { - return; - } - size_t granularity = lock_granularity(); - target_size = (target_size + granularity - 1) & ~(granularity - 1); - if (target_size > size) { - if (raw_lock((uint8_t *) addr + size, target_size - size)) { - size = target_size; - } else { - failed_already = true; - } - } - } - -#ifdef _POSIX_MEMLOCK_RANGE - static constexpr bool SUPPORTED = true; - - static size_t lock_granularity() { - return (size_t) sysconf(_SC_PAGESIZE); - } - - #ifdef __APPLE__ - #define MLOCK_SUGGESTION \ - "Try increasing the sysctl values 'vm.user_wire_limit' and 'vm.global_user_wire_limit' and/or " \ - "decreasing 'vm.global_no_user_wire_amount'. Also try increasing RLIMIT_MEMLOCK (ulimit -l).\n" - #else - #define MLOCK_SUGGESTION \ - "Try increasing RLIMIT_MEMLOCK ('ulimit -l' as root).\n" - #endif - - bool raw_lock(const void * addr, size_t size) const { - if (!mlock(addr, size)) { - return true; - } - - char* errmsg = std::strerror(errno); - bool suggest = (errno == ENOMEM); - - // Check if the resource limit is fine after all - struct rlimit lock_limit; - if (suggest && getrlimit(RLIMIT_MEMLOCK, &lock_limit)) { - suggest = false; - } - if (suggest && (lock_limit.rlim_max > lock_limit.rlim_cur + size)) { - suggest = false; - } - - LLAMA_LOG_WARN("warning: failed to mlock %zu-byte buffer (after previously locking %zu bytes): %s\n%s", - size, this->size, errmsg, suggest ? MLOCK_SUGGESTION : ""); - return false; - } - - #undef MLOCK_SUGGESTION - - static void raw_unlock(void * addr, size_t size) { - if (munlock(addr, size)) { - LLAMA_LOG_WARN("warning: failed to munlock buffer: %s\n", std::strerror(errno)); - } - } -#elif defined(_WIN32) - static constexpr bool SUPPORTED = true; - - static size_t lock_granularity() { - SYSTEM_INFO si; - GetSystemInfo(&si); - return (size_t) si.dwPageSize; - } - - bool raw_lock(void * ptr, size_t len) const { - for (int tries = 1; ; tries++) { - if (VirtualLock(ptr, len)) { - return true; - } - if (tries == 2) { - LLAMA_LOG_WARN("warning: failed to VirtualLock %zu-byte buffer (after previously locking %zu bytes): %s\n", - len, size, llama_format_win_err(GetLastError()).c_str()); - return false; - } - - // It failed but this was only the first try; increase the working - // set size and try again. - SIZE_T min_ws_size, max_ws_size; - if (!GetProcessWorkingSetSize(GetCurrentProcess(), &min_ws_size, &max_ws_size)) { - LLAMA_LOG_WARN("warning: GetProcessWorkingSetSize failed: %s\n", - llama_format_win_err(GetLastError()).c_str()); - return false; - } - // Per MSDN: "The maximum number of pages that a process can lock - // is equal to the number of pages in its minimum working set minus - // a small overhead." - // Hopefully a megabyte is enough overhead: - size_t increment = len + 1048576; - // The minimum must be <= the maximum, so we need to increase both: - min_ws_size += increment; - max_ws_size += increment; - if (!SetProcessWorkingSetSize(GetCurrentProcess(), min_ws_size, max_ws_size)) { - LLAMA_LOG_WARN("warning: SetProcessWorkingSetSize failed: %s\n", - llama_format_win_err(GetLastError()).c_str()); - return false; - } - } - } - - static void raw_unlock(void * ptr, size_t len) { - if (!VirtualUnlock(ptr, len)) { - LLAMA_LOG_WARN("warning: failed to VirtualUnlock buffer: %s\n", - llama_format_win_err(GetLastError()).c_str()); - } - } -#else - static constexpr bool SUPPORTED = false; - - static size_t lock_granularity() { - return (size_t) 65536; - } - - bool raw_lock(const void * addr, size_t len) const { - LLAMA_LOG_WARN("warning: mlock not supported on this system\n"); - return false; - } - - static void raw_unlock(const void * addr, size_t len) {} -#endif -}; -using llama_mlocks = std::vector>; - -static std::string llama_token_to_piece(const struct llama_context * ctx, llama_token token, bool special) { - std::vector result(8, 0); - const int n_tokens = llama_token_to_piece(llama_get_model(ctx), token, result.data(), result.size(), special); - if (n_tokens < 0) { - result.resize(-n_tokens); - int check = llama_token_to_piece(llama_get_model(ctx), token, result.data(), result.size(), special); - GGML_ASSERT(check == -n_tokens); - } - else { - result.resize(n_tokens); - } - - return std::string(result.data(), result.size()); -} - -static ggml_backend_buffer_type_t llama_default_buffer_type_cpu(bool host_buffer) { - ggml_backend_buffer_type_t buft = nullptr; - -#if defined(GGML_USE_CUDA) - // host buffers should only be used when data is expected to be copied to/from the GPU - if (host_buffer) { - buft = ggml_backend_cuda_host_buffer_type(); - } -#elif defined(GGML_USE_SYCL) - if (host_buffer) { - buft = ggml_backend_sycl_host_buffer_type(); - } -#elif defined(GGML_USE_CPU_HBM) - buft = ggml_backend_cpu_hbm_buffer_type(); -#elif defined(GGML_USE_VULKAN) - if (host_buffer) { - buft = ggml_backend_vk_host_buffer_type(); - } -#endif - - if (buft == nullptr) { - buft = ggml_backend_cpu_buffer_type(); - } - return buft; - - GGML_UNUSED(host_buffer); -} - -static ggml_backend_buffer_type_t llama_default_buffer_type_offload(int gpu) { - ggml_backend_buffer_type_t buft = nullptr; - -#ifdef GGML_USE_METAL - buft = ggml_backend_metal_buffer_type(); -#elif defined(GGML_USE_CUDA) - buft = ggml_backend_cuda_buffer_type(gpu); -#elif defined(GGML_USE_VULKAN) - buft = ggml_backend_vk_buffer_type(gpu); -#elif defined(GGML_USE_SYCL) - buft = ggml_backend_sycl_buffer_type(gpu); -#elif defined(GGML_USE_CLBLAST) - if (isOpenCLSupported) { - buft = ggml_backend_opencl_buffer_type(); - } -#elif defined(GGML_USE_KOMPUTE) - buft = ggml_backend_kompute_buffer_type(gpu); - if (buft == nullptr) { - LLAMA_LOG_WARN("%s: cannot use GPU %d, check `vulkaninfo --summary`\n", __func__, gpu); - } -#endif - - if (buft == nullptr) { - buft = llama_default_buffer_type_cpu(true); - } - return buft; - - GGML_UNUSED(gpu); -} - -static ggml_backend_buffer_type_t llama_default_buffer_type_split(int fallback_gpu, const float * tensor_split) { - ggml_backend_buffer_type_t buft = nullptr; - -#ifdef GGML_USE_CUDA - if (ggml_backend_cuda_get_device_count() > 1) { - buft = ggml_backend_cuda_split_buffer_type(tensor_split); - } -#endif - -#ifdef GGML_USE_SYCL - if (ggml_backend_sycl_get_device_count() > 1) { - buft = ggml_backend_sycl_split_buffer_type(tensor_split); - } -#endif - - if (buft == nullptr) { - buft = llama_default_buffer_type_offload(fallback_gpu); - } - return buft; - - GGML_UNUSED(tensor_split); -} - -static size_t llama_get_device_count() { -#if defined(GGML_USE_CUDA) - return ggml_backend_cuda_get_device_count(); -#elif defined(GGML_USE_SYCL) - return ggml_backend_sycl_get_device_count(); -#elif defined(GGML_USE_VULKAN) - return ggml_backend_vk_get_device_count(); -#else - return 1; -#endif -} - -static size_t llama_get_device_memory(int device) { -#if defined(GGML_USE_CUDA) - size_t total; - size_t free; - ggml_backend_cuda_get_device_memory(device, &free, &total); - return free; -#elif defined(GGML_USE_SYCL) - size_t total; - size_t free; - ggml_backend_sycl_get_device_memory(device, &free, &total); - return free; -#elif defined(GGML_USE_VULKAN) - size_t total; - size_t free; - ggml_backend_vk_get_device_memory(device, &free, &total); - return free; -#else - return 1; - GGML_UNUSED(device); -#endif -} - -// -// globals -// - -struct llama_state { - llama_state() { -#ifdef GGML_USE_METAL - ggml_backend_metal_log_set_callback(log_callback, log_callback_user_data); -#endif - } - - // We save the log callback globally - ggml_log_callback log_callback = llama_log_callback_default; - void * log_callback_user_data = nullptr; -}; - -static llama_state g_state; - -// available llama models -enum e_model { - MODEL_UNKNOWN, - MODEL_17M, - MODEL_22M, - MODEL_33M, - MODEL_109M, - MODEL_137M, - MODEL_335M, - MODEL_0_5B, - MODEL_1B, - MODEL_2B, - MODEL_3B, - MODEL_4B, - MODEL_7B, - MODEL_8B, - MODEL_12B, - MODEL_13B, - MODEL_14B, - MODEL_15B, - MODEL_20B, - MODEL_30B, - MODEL_34B, - MODEL_35B, - MODEL_40B, - MODEL_65B, - MODEL_70B, - MODEL_314B, - MODEL_SMALL, - MODEL_MEDIUM, - MODEL_LARGE, - MODEL_XL, - MODEL_A2_7B, - MODEL_8x7B, - MODEL_8x22B, - MODEL_16x12B, -}; - -static const size_t kiB = 1024; -static const size_t MiB = 1024*kiB; -static const size_t GiB = 1024*MiB; - -struct llama_hparams { - bool vocab_only; - bool rope_finetuned; - - uint32_t n_vocab; - uint32_t n_ctx_train; // context size the model was trained on - uint32_t n_embd; - uint32_t n_head; - uint32_t n_head_kv; - uint32_t n_layer; - uint32_t n_rot; - uint32_t n_embd_head_k; // dimension of keys (d_k). d_q is assumed to be the same, but there are n_head q heads, and only n_head_kv k-v heads - uint32_t n_embd_head_v; // dimension of values (d_v) aka n_embd_head - uint32_t n_ff; - uint32_t n_expert = 0; - uint32_t n_expert_used = 0; - uint32_t n_vocab_type = 0; // for BERT-style token types - - float f_norm_eps; - float f_norm_rms_eps; - - float rope_freq_base_train; - float rope_freq_scale_train; - uint32_t n_yarn_orig_ctx; - - // for State Space Models - uint32_t ssm_d_conv = 0; - uint32_t ssm_d_inner = 0; - uint32_t ssm_d_state = 0; - uint32_t ssm_dt_rank = 0; - - float f_clamp_kqv = 0.0f; - float f_max_alibi_bias = 0.0f; - float f_logit_scale = 0.0f; - - bool causal_attn = true; - bool need_kq_pos = false; - - enum llama_pooling_type pooling_type = LLAMA_POOLING_TYPE_NONE; - enum llama_rope_type rope_type = LLAMA_ROPE_TYPE_NONE; - enum llama_rope_scaling_type rope_scaling_type_train = LLAMA_ROPE_SCALING_TYPE_NONE; - - bool operator!=(const llama_hparams & other) const { - if (this->vocab_only != other.vocab_only) return true; - if (this->n_vocab != other.n_vocab) return true; - if (this->n_ctx_train != other.n_ctx_train) return true; - if (this->n_embd != other.n_embd) return true; - if (this->n_head != other.n_head) return true; - if (this->n_head_kv != other.n_head_kv) return true; - if (this->n_layer != other.n_layer) return true; - if (this->n_rot != other.n_rot) return true; - if (this->n_embd_head_k != other.n_embd_head_k) return true; - if (this->n_embd_head_v != other.n_embd_head_v) return true; - if (this->n_ff != other.n_ff) return true; - if (this->n_expert != other.n_expert) return true; - if (this->n_expert_used != other.n_expert_used) return true; - - if (this->rope_finetuned != other.rope_finetuned) return true; - if (this->n_yarn_orig_ctx != other.n_yarn_orig_ctx) return true; - - if (this->ssm_d_conv != other.ssm_d_conv) return true; - if (this->ssm_d_inner != other.ssm_d_inner) return true; - if (this->ssm_d_state != other.ssm_d_state) return true; - if (this->ssm_dt_rank != other.ssm_dt_rank) return true; - - const float EPSILON = 1e-9f; - - if (!is_float_close(this->f_norm_eps, other.f_norm_eps, EPSILON)) return true; - if (!is_float_close(this->f_norm_rms_eps, other.f_norm_rms_eps, EPSILON)) return true; - if (!is_float_close(this->rope_freq_base_train, other.rope_freq_base_train, EPSILON)) return true; - if (!is_float_close(this->rope_freq_scale_train, other.rope_freq_scale_train, EPSILON)) return true; - - return false; - } - - uint32_t n_gqa() const { - if (n_head_kv == 0) { - return 0; - } - return n_head/n_head_kv; - } - - uint32_t n_embd_k_gqa() const { // dimension of key embeddings across all k-v heads - return n_embd_head_k * n_head_kv; - } - - uint32_t n_embd_v_gqa() const { // dimension of value embeddings across all k-v heads - return n_embd_head_v * n_head_kv; - } - - uint32_t n_embd_k_s() const { // dimension of the rolling state embeddings - // corresponds to Mamba's conv_states size - // TODO: maybe support other convolution strides than 1 - // NOTE: since the first column of the conv_state is shifted out each time, it's not actually needed - return (ssm_d_conv > 0 ? ssm_d_conv - 1 : 0) * ssm_d_inner; - } - - uint32_t n_embd_v_s() const { // dimension of the recurrent state embeddings - // corresponds to Mamba's ssm_states size - return ssm_d_state * ssm_d_inner; - } -}; - -struct llama_cparams { - uint32_t n_ctx; // context size used during inference - uint32_t n_batch; - uint32_t n_ubatch; - uint32_t n_seq_max; - uint32_t n_threads; // number of threads to use for generation - uint32_t n_threads_batch; // number of threads to use for batch processing - - float rope_freq_base; - float rope_freq_scale; - - uint32_t n_yarn_orig_ctx; - // These hyperparameters are not exposed in GGUF, because all - // existing YaRN models use the same values for them. - float yarn_ext_factor; - float yarn_attn_factor; - float yarn_beta_fast; - float yarn_beta_slow; - float defrag_thold; - - bool embeddings; - bool causal_attn; - bool offload_kqv; - - enum llama_pooling_type pooling_type; - - ggml_backend_sched_eval_callback cb_eval; - void * cb_eval_user_data; -}; - -struct llama_layer { - // normalization - struct ggml_tensor * attn_norm; - struct ggml_tensor * attn_norm_b; - struct ggml_tensor * attn_norm_2; - struct ggml_tensor * attn_norm_2_b; - struct ggml_tensor * attn_q_norm; - struct ggml_tensor * attn_q_norm_b; - struct ggml_tensor * attn_k_norm; - struct ggml_tensor * attn_k_norm_b; - struct ggml_tensor * attn_out_norm; - struct ggml_tensor * attn_out_norm_b; - - // attention - struct ggml_tensor * wq; - struct ggml_tensor * wk; - struct ggml_tensor * wv; - struct ggml_tensor * wo; - struct ggml_tensor * wqkv; - - // attention bias - struct ggml_tensor * bq; - struct ggml_tensor * bk; - struct ggml_tensor * bv; - struct ggml_tensor * bo; - struct ggml_tensor * bqkv; - - // normalization - struct ggml_tensor * ffn_norm; - struct ggml_tensor * ffn_norm_b; - struct ggml_tensor * layer_out_norm; - struct ggml_tensor * layer_out_norm_b; - - // ff - struct ggml_tensor * ffn_gate; // w1 - struct ggml_tensor * ffn_down; // w2 - struct ggml_tensor * ffn_up; // w3 - - // ff MoE - struct ggml_tensor * ffn_gate_inp; - struct ggml_tensor * ffn_gate_exps; - struct ggml_tensor * ffn_down_exps; - struct ggml_tensor * ffn_up_exps ; - - // ff shared expert (shexp) - struct ggml_tensor * ffn_gate_inp_shexp; - struct ggml_tensor * ffn_gate_shexp; - struct ggml_tensor * ffn_down_shexp; - struct ggml_tensor * ffn_up_shexp; - - // ff bias - struct ggml_tensor * ffn_down_b; // b2 - struct ggml_tensor * ffn_up_b; // b3 - struct ggml_tensor * ffn_act; - - // mamba proj - struct ggml_tensor * ssm_in; - struct ggml_tensor * ssm_x; - struct ggml_tensor * ssm_dt; - struct ggml_tensor * ssm_out; - - // mamba - struct ggml_tensor * ssm_conv1d; - struct ggml_tensor * ssm_a; - struct ggml_tensor * ssm_d; - - // mamba bias - struct ggml_tensor * ssm_conv1d_b; - struct ggml_tensor * ssm_dt_b; -}; - -struct llama_kv_cell { - llama_pos pos = -1; - llama_pos delta = 0; - int32_t src = 0; // used by recurrent state models to copy states - - std::set seq_id; - - bool has_seq_id(const llama_seq_id & id) const { - return seq_id.find(id) != seq_id.end(); - } - - bool is_empty() const { - return seq_id.empty(); - } - - bool is_same_seq(const llama_kv_cell & other) const { - return seq_id == other.seq_id; - } -}; - -// ring-buffer of cached KV data -struct llama_kv_cache { - bool has_shift = false; - bool do_defrag = false; - bool do_copy = false; - // with recurrent state models, a cell can hold the state for more than one past token - bool recurrent = false; - - // Note: The value of head isn't only used to optimize searching - // for a free KV slot. llama_decode_internal also uses it, so it - // cannot be freely changed after a slot has been allocated. - uint32_t head = 0; - uint32_t size = 0; - uint32_t used = 0; // used cells (i.e. at least one seq_id) - - // computed before each graph build - uint32_t n = 0; - - ggml_type type_k = GGML_TYPE_F16; - ggml_type type_v = GGML_TYPE_F16; - - std::vector cells; - - std::vector k_l; // per layer - std::vector v_l; - - std::vector ctxs; - std::vector bufs; - - size_t total_size() const { - size_t size = 0; - for (ggml_backend_buffer_t buf : bufs) { - size += ggml_backend_buffer_get_size(buf); - } - return size; - } - - ~llama_kv_cache() { - for (struct ggml_context * ctx : ctxs) { - ggml_free(ctx); - } - for (ggml_backend_buffer_t buf : bufs) { - ggml_backend_buffer_free(buf); - } - } -}; - -struct llama_control_vector { - std::vector tensors; // per layer - std::vector ctxs; - std::vector bufs; - - int32_t layer_start = -1; - int32_t layer_end = -1; - - ggml_tensor * tensor_for(int il) const { - if (il < 0 || il < layer_start || il > layer_end || (size_t) il >= tensors.size()) { - return nullptr; - } - return tensors[il]; - } - - ~llama_control_vector() { - for (struct ggml_context * ctx : ctxs) { - ggml_free(ctx); - } - for (ggml_backend_buffer_t buf : bufs) { - ggml_backend_buffer_free(buf); - } - } -}; - -struct llama_vocab { - using id = int32_t; - using token = std::string; - using ttype = llama_token_type; - - struct token_data { - token text; - float score; - ttype type; - }; - - enum llama_vocab_type type = LLAMA_VOCAB_TYPE_SPM; - - std::unordered_map token_to_id; - std::vector id_to_token; - - std::unordered_map special_tokens_cache; - - std::map, int> bpe_ranks; - - // default LLaMA special tokens - id special_bos_id = 1; - id special_eos_id = 2; - id special_unk_id = 0; - id special_sep_id = -1; - id special_pad_id = -1; - id special_cls_id = -1; - id special_mask_id = -1; - - int special_add_bos = -1; // -1 unknown, 1 add, 0 don't add. - int special_add_eos = -1; // -1 unknown, 1 add, 0 don't add. - - id linefeed_id = 13; - id special_prefix_id = -1; - id special_suffix_id = -1; - id special_middle_id = -1; - id special_eot_id = -1; // TODO: move above after "eos_id", and here add "file separator" token - - bool add_space_prefix = true; - - int find_bpe_rank(const std::string & token_left, const std::string & token_right) const { - GGML_ASSERT(token_left.find(' ') == std::string::npos); - GGML_ASSERT(token_left.find('\n') == std::string::npos); - GGML_ASSERT(token_right.find(' ') == std::string::npos); - GGML_ASSERT(token_right.find('\n') == std::string::npos); - - auto it = bpe_ranks.find(std::make_pair(token_left, token_right)); - if (it == bpe_ranks.end()) { - return -1; - } - - return it->second; - } -}; - -struct llama_model { - e_model type = MODEL_UNKNOWN; - llm_arch arch = LLM_ARCH_UNKNOWN; - llama_ftype ftype = LLAMA_FTYPE_ALL_F32; - - std::string name = "n/a"; - - llama_hparams hparams = {}; - llama_vocab vocab; - - struct ggml_tensor * tok_embd; - struct ggml_tensor * type_embd; - struct ggml_tensor * pos_embd; - struct ggml_tensor * tok_norm; - struct ggml_tensor * tok_norm_b; - - struct ggml_tensor * output_norm; - struct ggml_tensor * output_norm_b; - struct ggml_tensor * output; - struct ggml_tensor * output_b; - - std::vector layers; - - llama_split_mode split_mode; - int main_gpu; - int n_gpu_layers; - - // gguf metadata - std::unordered_map gguf_kv; - - // layer -> buffer type mapping - struct layer_buft { - layer_buft() : buft_matrix(nullptr), buft(nullptr) {} - layer_buft(ggml_backend_buffer_type_t matrix) : buft_matrix(matrix), buft(matrix) {} - layer_buft(ggml_backend_buffer_type_t matrix, ggml_backend_buffer_type_t other) : buft_matrix(matrix), buft(other) {} - - ggml_backend_buffer_type_t buft_matrix; // matrices only - used by split buffers and backends that support only matrix multiplication - ggml_backend_buffer_type_t buft; // everything else - }; - - layer_buft buft_input; - layer_buft buft_output; - std::vector buft_layer; - - // contexts where the model tensors metadata is stored - std::vector ctxs; - - // the model memory buffers for the tensor data - std::vector bufs; - - // model memory mapped files - llama_mmaps mappings; - - // objects representing data potentially being locked in memory - llama_mlocks mlock_bufs; - llama_mlocks mlock_mmaps; - - // for quantize-stats only - std::vector> tensors_by_name; - - int64_t t_load_us = 0; - int64_t t_start_us = 0; - - ~llama_model() { - for (struct ggml_context * ctx : ctxs) { - ggml_free(ctx); - } - for (ggml_backend_buffer_t buf : bufs) { -#ifdef GGML_USE_CUDA - if (ggml_backend_buffer_get_type(buf) == ggml_backend_cpu_buffer_type()) { - ggml_backend_cuda_unregister_host_buffer(ggml_backend_buffer_get_base(buf)); - } -#endif - ggml_backend_buffer_free(buf); - } - } -}; - -struct llama_context { - llama_context(const llama_model & model) : model(model), t_start_us(model.t_start_us), t_load_us(model.t_load_us) {} - ~llama_context() { - ggml_backend_sched_free(sched); - - for (ggml_backend_t backend : backends) { - ggml_backend_free(backend); - } - - ggml_backend_buffer_free(buf_output); - } - - llama_cparams cparams; - - std::vector backends; -#ifdef GGML_USE_METAL - ggml_backend_t backend_metal = nullptr; -#endif - ggml_backend_t backend_cpu = nullptr; - - const llama_model & model; - - // key + value cache for the self attention - struct llama_kv_cache kv_self; - - std::mt19937 rng; - - bool has_evaluated_once = false; - - int64_t t_start_us; - int64_t t_load_us; - int64_t t_sample_us = 0; - int64_t t_p_eval_us = 0; - int64_t t_eval_us = 0; - - int64_t t_compute_start_us = 0; - int64_t n_queued_tokens = 0; - - int32_t n_sample = 0; // number of tokens sampled - int32_t n_p_eval = 0; // number of tokens in eval calls for the prompt (with batch size > 1) - int32_t n_eval = 0; // number of eval calls - - // host buffer for the model output (logits and embeddings) - ggml_backend_buffer_t buf_output = nullptr; - - // decode output (2-dimensional array: [n_outputs][n_vocab]) - size_t logits_size = 0; // capacity (of floats) for logits - float * logits = nullptr; - - std::vector output_ids; // map batch token positions to ids of the logits and embd buffers - size_t output_size = 0; // capacity (of tokens positions) for the output buffers - int32_t n_outputs = 0; // number of actually-used outputs in the current ubatch or last logical batch - - bool logits_all = false; - - // embeddings output (2-dimensional array: [n_outputs][n_embd]) - // populated only when pooling_type == LLAMA_POOLING_TYPE_NONE - size_t embd_size = 0; // capacity (of floats) for embeddings - float * embd = nullptr; - - // sequence embeddings output (map of [n_embd] vectors) - // populated only when pooling_type != LLAMA_POOLING_TYPE_NONE - std::map> embd_seq; - - // memory buffers used to evaluate the model - std::vector buf_compute_meta; - ggml_backend_sched_t sched = nullptr; - - ggml_abort_callback abort_callback = nullptr; - void * abort_callback_data = nullptr; - - // input tensors - struct ggml_tensor * inp_tokens; // I32 [n_batch] - struct ggml_tensor * inp_embd; // F32 [n_embd, n_batch] - struct ggml_tensor * inp_pos; // I32 [n_batch] - struct ggml_tensor * inp_out_ids; // I32 [n_outputs] - struct ggml_tensor * inp_KQ_mask; // F32 [kv_size, n_batch] - struct ggml_tensor * inp_KQ_pos; // F32 [n_kv] - struct ggml_tensor * inp_K_shift; // I32 [kv_size] - struct ggml_tensor * inp_mean; // F32 [n_batch, n_batch] - struct ggml_tensor * inp_cls; // I32 [n_batch] - struct ggml_tensor * inp_s_copy; // I32 [kv_size] - struct ggml_tensor * inp_s_mask; // F32 [1, n_kv] - struct ggml_tensor * inp_s_seq; // I32 [n_kv, n_batch] - - // control vectors - struct llama_control_vector cvec; - -#ifdef GGML_USE_MPI - ggml_mpi_context * ctx_mpi = NULL; -#endif -}; - -// -// kv cache helpers -// - -static bool llama_kv_cache_init( - struct llama_kv_cache & cache, - const llama_model & model, - ggml_type type_k, - ggml_type type_v, - uint32_t kv_size, - bool offload) { - const struct llama_hparams & hparams = model.hparams; - - const uint32_t n_embd_k_gqa = hparams.n_embd_k_gqa() + hparams.n_embd_k_s(); - const uint32_t n_embd_v_gqa = hparams.n_embd_v_gqa() + hparams.n_embd_v_s(); - const int64_t n_layer = hparams.n_layer; - - cache.has_shift = false; - - // TODO: find a nicer way to add other recurrent model architectures - cache.recurrent = model.arch == LLM_ARCH_MAMBA; - - // TODO: support mixed reccurent Transformer architectues - // NOTE: (!a || b) is a logical implication (a -> b) - GGML_ASSERT(!cache.recurrent || n_embd_k_gqa == hparams.n_embd_k_s()); - GGML_ASSERT(!cache.recurrent || n_embd_v_gqa == hparams.n_embd_v_s()); - GGML_ASSERT( cache.recurrent || n_embd_k_gqa == hparams.n_embd_k_gqa()); - GGML_ASSERT( cache.recurrent || n_embd_v_gqa == hparams.n_embd_v_gqa()); - - cache.head = 0; - cache.size = kv_size; - cache.used = 0; - - cache.type_k = type_k; - cache.type_v = type_v; - - cache.cells.clear(); - cache.cells.resize(kv_size); - - if (cache.recurrent) { - // init state copy sources - for (uint32_t i = 0; i < cache.size; ++i) { - cache.cells[i].src = i; - } - } - -#ifdef GGML_USE_CLBLAST - if (isOpenCLSupported) { - offload = false; - } -#endif - - // count used buffer types - std::map buft_layer_count; - if (offload) { - for (int64_t i = 0; i < n_layer; ++i) { - buft_layer_count[model.buft_layer[i].buft]++; - } - } else { - buft_layer_count[llama_default_buffer_type_cpu(true)] = n_layer; - } - - // create a context for each buffer type - std::map ctx_map; - for (auto & it : buft_layer_count) { - int n_layers = it.second; - struct ggml_init_params params = { - /*.mem_size =*/ 2u*n_layers*ggml_tensor_overhead(), - /*.mem_buffer =*/ NULL, - /*.no_alloc =*/ true, - }; - ggml_context * ctx = ggml_init(params); - if (!ctx) { - LLAMA_LOG_ERROR("%s: failed to allocate context for kv cache\n", __func__); - return false; - } - ctx_map[it.first] = ctx; - cache.ctxs.push_back(ctx); - } - - cache.k_l.reserve(n_layer); - cache.v_l.reserve(n_layer); - - for (int i = 0; i < (int) n_layer; i++) { - struct ggml_context * ctx = offload ? ctx_map.at(model.buft_layer[i].buft) : cache.ctxs.front(); - ggml_tensor * k = ggml_new_tensor_1d(ctx, type_k, n_embd_k_gqa*kv_size); - ggml_tensor * v = ggml_new_tensor_1d(ctx, type_v, n_embd_v_gqa*kv_size); - ggml_format_name(k, "cache_k_l%d", i); - ggml_format_name(v, "cache_v_l%d", i); - cache.k_l.push_back(k); - cache.v_l.push_back(v); - } - - // allocate tensors and initialize the buffers to avoid NaNs in the padding - for (auto it : ctx_map) { - ggml_backend_buffer_type_t buft = it.first; - ggml_context * ctx = it.second; - ggml_backend_buffer_t buf = ggml_backend_alloc_ctx_tensors_from_buft(ctx, buft); - if (!buf) { - LLAMA_LOG_ERROR("%s: failed to allocate buffer for kv cache\n", __func__); - return false; - } - ggml_backend_buffer_clear(buf, 0); - LLAMA_LOG_INFO("%s: %10s KV buffer size = %8.2f MiB\n", __func__, ggml_backend_buffer_name(buf), ggml_backend_buffer_get_size(buf)/1024.0/1024.0); - cache.bufs.push_back(buf); - } - - return true; -} - -// find an empty slot of size "n_tokens" in the cache -// updates the cache head -// Note: On success, it's important that cache.head points -// to the first cell of the slot. -static bool llama_kv_cache_find_slot( - struct llama_kv_cache & cache, - const struct llama_batch & batch) { - const uint32_t n_ctx = cache.size; - const uint32_t n_tokens = batch.n_tokens; - - if (cache.recurrent) { - // For recurrent state architectures (like Mamba), - // each KV cache cell can store the state for a whole sequence. - - llama_seq_id min = cache.size - 1; - llama_seq_id max = 0; - - for (uint32_t i = 0; i < n_tokens; ++i) { - for (int32_t j = 0; j < batch.n_seq_id[i]; ++j) { - llama_seq_id seq_id = batch.seq_id[i][j]; - // make sure it's a valid seq_id - if ((uint32_t) seq_id < cache.size) { - if (seq_id > max) { - max = seq_id; - } - if (seq_id < min) { - min = seq_id; - } - // Assuming the tokens are in-order - if (batch.pos[i] != cache.cells[seq_id].pos + 1) { - // What should happen when the pos backtracks or skips a value? - // Clearing the state mid-batch would require special-casing which isn't done. - LLAMA_LOG_WARN("%s: non-consecutive token position %d after %d for sequence %d\n", - __func__, batch.pos[i], cache.cells[seq_id].pos, seq_id); - } - if (cache.cells[seq_id].pos < 0 && 0 <= batch.pos[i]) { - cache.used += 1; - } - cache.cells[seq_id].pos = batch.pos[i]; - // NOTE: seq_ids are not inserted here; they are handled when the input tensors are set - } else { - // too big seq_id - // TODO: would it be possible to resize the KV cache size instead? - LLAMA_LOG_ERROR("%s: seq_id=%d >= kv_size=%d Try using a bigger --parallel value\n", __func__, seq_id, cache.size); - return false; - } - } - } - - // allow getting the range of used cells, from head to head + n - cache.head = min; - cache.n = max - min + 1; - - // sanity check - return max >= min; - } - // otherwise, one cell per token. - - if (n_tokens > n_ctx) { - LLAMA_LOG_ERROR("%s: n_tokens=%d > n_ctx=%d\n", __func__, n_tokens, n_ctx); - return false; - } - - uint32_t n_tested = 0; - - while (true) { - if (cache.head + n_tokens > n_ctx) { - n_tested += n_ctx - cache.head; - cache.head = 0; - continue; - } - - bool found = true; - for (uint32_t i = 0; i < n_tokens; i++) { - if (cache.cells[cache.head + i].pos >= 0) { - found = false; - cache.head += i + 1; - n_tested += i + 1; - break; - } - } - - if (found) { - break; - } - - if (n_tested >= n_ctx) { - //LLAMA_LOG_ERROR("%s: failed to find a slot for %d tokens\n", __func__, n_tokens); - return false; - } - } - - for (uint32_t i = 0; i < n_tokens; i++) { - cache.cells[cache.head + i].pos = batch.pos[i]; - - for (int32_t j = 0; j < batch.n_seq_id[i]; j++) { - cache.cells[cache.head + i].seq_id.insert(batch.seq_id[i][j]); - } - } - - cache.used += n_tokens; - - return true; -} - -// find how many cells are currently in use -static uint32_t llama_kv_cache_cell_max(const struct llama_kv_cache & cache) { - for (uint32_t i = cache.size; i > 0; --i) { - const llama_kv_cell & cell = cache.cells[i - 1]; - - if (cell.pos >= 0 && !cell.is_empty()) { - return i; - } - } - - return 0; -} - -static void llama_kv_cache_clear(struct llama_kv_cache & cache) { - for (int32_t i = 0; i < (int32_t) cache.size; ++i) { - cache.cells[i].pos = -1; - cache.cells[i].seq_id.clear(); - } - cache.head = 0; - cache.used = 0; -} - -static bool llama_kv_cache_seq_rm( - struct llama_kv_cache & cache, - llama_seq_id seq_id, - llama_pos p0, - llama_pos p1) { - uint32_t new_head = cache.size; - - if (p0 < 0) p0 = 0; - if (p1 < 0) p1 = std::numeric_limits::max(); - - // models like Mamba can't have a state partially erased - if (cache.recurrent) { - if (seq_id >= (int64_t) cache.size) { - // could be fatal - return false; - } - if (0 <= seq_id) { - // partial intersection is invalid - if ((0 < p0 && p0 <= cache.cells[seq_id].pos) || (0 < p1 && p1 <= cache.cells[seq_id].pos)) { - return false; - } - } else { - // seq_id is negative, then the range should include everything or nothing - if (p0 != p1 && (p0 != 0 || p1 != std::numeric_limits::max())) { - return false; - } - } - } - - for (uint32_t i = 0; i < cache.size; ++i) { - if (cache.cells[i].pos >= p0 && cache.cells[i].pos < p1) { - if (seq_id < 0) { - cache.cells[i].seq_id.clear(); - } else if (cache.cells[i].has_seq_id(seq_id)) { - cache.cells[i].seq_id.erase(seq_id); - } else { - continue; - } - if (cache.cells[i].is_empty()) { - // keep count of the number of used cells - if (cache.cells[i].pos >= 0) cache.used--; - - cache.cells[i].pos = -1; - if (new_head == cache.size) new_head = i; - } - } - } - - // If we freed up a slot, set head to it so searching can start there. - if (new_head != cache.size && new_head < cache.head) cache.head = new_head; - - return true; -} - -static void llama_kv_cache_seq_cp( - struct llama_kv_cache & cache, - llama_seq_id seq_id_src, - llama_seq_id seq_id_dst, - llama_pos p0, - llama_pos p1) { - if (p0 < 0) p0 = 0; - if (p1 < 0) p1 = std::numeric_limits::max(); - - if (cache.recurrent) { - if ((uint32_t) seq_id_dst < cache.size && (uint32_t) seq_id_src < cache.size) { - seq_id_src = cache.cells[seq_id_src].src; - GGML_ASSERT((uint32_t) seq_id_src < cache.size); - // intent to "copy from" - // supports copy chains thanks to taking the source of the source - cache.cells[seq_id_dst].src = seq_id_src; - - // preserve the "keep or clear" status of the copied sequence - if (cache.cells[seq_id_src].has_seq_id(seq_id_src)) { - cache.cells[seq_id_dst].seq_id.insert(seq_id_dst); - } else { - cache.cells[seq_id_dst].seq_id.erase(seq_id_dst); - } - - cache.do_copy = true; - - cache.cells[seq_id_dst].pos = cache.cells[seq_id_src].pos; - } - return; - } - // otherwise, this is the KV cache of a Transformer-like model - - cache.head = 0; - - for (uint32_t i = 0; i < cache.size; ++i) { - if (cache.cells[i].has_seq_id(seq_id_src) && cache.cells[i].pos >= p0 && cache.cells[i].pos < p1) { - cache.cells[i].seq_id.insert(seq_id_dst); - } - } -} - -static void llama_kv_cache_seq_keep(struct llama_kv_cache & cache, llama_seq_id seq_id) { - uint32_t new_head = cache.size; - - for (uint32_t i = 0; i < cache.size; ++i) { - if (!cache.cells[i].has_seq_id(seq_id)) { - if (cache.cells[i].pos >= 0) cache.used--; - cache.cells[i].pos = -1; - cache.cells[i].seq_id.clear(); - if (new_head == cache.size) new_head = i; - } else { - cache.cells[i].seq_id.clear(); - cache.cells[i].seq_id.insert(seq_id); - } - } - - // If we freed up a slot, set head to it so searching can start there. - if (new_head != cache.size && new_head < cache.head) cache.head = new_head; -} - -static void llama_kv_cache_seq_add( - struct llama_kv_cache & cache, - llama_seq_id seq_id, - llama_pos p0, - llama_pos p1, - llama_pos delta) { - uint32_t new_head = cache.size; - - if (p0 < 0) p0 = 0; - if (p1 < 0) p1 = std::numeric_limits::max(); - - if (cache.recurrent) { - // for Mamba-like models, only the pos needs to be shifted - if (0 <= seq_id && seq_id < (int64_t) cache.size) { - llama_kv_cell & cell = cache.cells[seq_id]; - if (cell.has_seq_id(seq_id) && p0 <= cell.pos && cell.pos < p1) { - cell.pos += delta; - } - } - return; - } - - for (uint32_t i = 0; i < cache.size; ++i) { - if (cache.cells[i].has_seq_id(seq_id) && cache.cells[i].pos >= p0 && cache.cells[i].pos < p1) { - cache.has_shift = true; - cache.cells[i].pos += delta; - cache.cells[i].delta += delta; - - if (cache.cells[i].pos < 0) { - if (!cache.cells[i].is_empty()) { - cache.used--; - } - cache.cells[i].pos = -1; - cache.cells[i].seq_id.clear(); - if (new_head == cache.size) { - new_head = i; - } - } - } - } - - // If we freed up a slot, set head to it so searching can start there. - // Otherwise we just start the next search from the beginning. - cache.head = new_head != cache.size ? new_head : 0; -} - -static void llama_kv_cache_seq_div( - struct llama_kv_cache & cache, - llama_seq_id seq_id, - llama_pos p0, - llama_pos p1, - int d) { - if (p0 < 0) p0 = 0; - if (p1 < 0) p1 = std::numeric_limits::max(); - - if (cache.recurrent) { - // for Mamba-like models, only the pos needs to be changed - if (0 <= seq_id && seq_id < (int64_t) cache.size) { - llama_kv_cell & cell = cache.cells[seq_id]; - if (cell.has_seq_id(seq_id) && p0 <= cell.pos && cell.pos < p1) { - cell.pos /= d; - } - } - return; - } - - for (uint32_t i = 0; i < cache.size; ++i) { - if (cache.cells[i].has_seq_id(seq_id) && cache.cells[i].pos >= p0 && cache.cells[i].pos < p1) { - cache.has_shift = true; - - { - llama_pos p_old = cache.cells[i].pos; - cache.cells[i].pos /= d; - cache.cells[i].delta += cache.cells[i].pos - p_old; - } - } - } -} - -static llama_pos llama_kv_cache_seq_pos_max(struct llama_kv_cache & cache, llama_seq_id seq_id) { - llama_pos result = 0; - - for (uint32_t i = 0; i < cache.size; ++i) { - if (cache.cells[i].has_seq_id(seq_id)) { - result = std::max(result, cache.cells[i].pos); - } - } - - return result; -} - -static void llama_kv_cache_defrag(struct llama_kv_cache & cache) { - cache.do_defrag = true; -} - -// -// model loading and saving -// - -enum llama_fver { - GGUF_FILE_VERSION_V1 = 1, - GGUF_FILE_VERSION_V2 = 2, - GGUF_FILE_VERSION_V3 = 3, -}; - -static const char * llama_file_version_name(llama_fver version) { - switch (version) { - case GGUF_FILE_VERSION_V1: return "GGUF V1 (support until nov 2023)"; - case GGUF_FILE_VERSION_V2: return "GGUF V2"; - case GGUF_FILE_VERSION_V3: return "GGUF V3 (latest)"; - } - - return "unknown"; -} - -static std::string llama_format_tensor_shape(const std::vector & ne) { - char buf[256]; - snprintf(buf, sizeof(buf), "%5" PRId64, ne.at(0)); - for (size_t i = 1; i < ne.size(); i++) { - snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), ", %5" PRId64, ne.at(i)); - } - return buf; -} - -static std::string llama_format_tensor_shape(const struct ggml_tensor * t) { - char buf[256]; - snprintf(buf, sizeof(buf), "%5" PRId64, t->ne[0]); - for (int i = 1; i < GGML_MAX_DIMS; i++) { - snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), ", %5" PRId64, t->ne[i]); - } - return buf; -} - -namespace GGUFMeta { - template - struct GKV_Base_Type { - static constexpr gguf_type gt = gt_; - - static T getter(const gguf_context * ctx, const int kid) { - return gfun(ctx, kid); - } - }; - - template struct GKV_Base; - - template<> struct GKV_Base: GKV_Base_Type {}; - template<> struct GKV_Base: GKV_Base_Type {}; - template<> struct GKV_Base: GKV_Base_Type {}; - template<> struct GKV_Base: GKV_Base_Type {}; - template<> struct GKV_Base: GKV_Base_Type {}; - template<> struct GKV_Base: GKV_Base_Type {}; - template<> struct GKV_Base: GKV_Base_Type {}; - template<> struct GKV_Base: GKV_Base_Type {}; - template<> struct GKV_Base: GKV_Base_Type {}; - template<> struct GKV_Base: GKV_Base_Type {}; - template<> struct GKV_Base: GKV_Base_Type {}; - template<> struct GKV_Base: GKV_Base_Type {}; - - template<> struct GKV_Base { - static constexpr gguf_type gt = GGUF_TYPE_STRING; - - static std::string getter(const gguf_context * ctx, const int kid) { - return gguf_get_val_str(ctx, kid); - } - }; - - struct ArrayInfo { - const gguf_type gt; - const size_t length; - const void * data; - }; - - template<> struct GKV_Base { - public: - static constexpr gguf_type gt = GGUF_TYPE_ARRAY; - static ArrayInfo getter(const gguf_context *ctx, const int k) { - return ArrayInfo { - gguf_get_arr_type(ctx, k), - size_t(gguf_get_arr_n(ctx, k)), - gguf_get_arr_data(ctx, k), - }; - } - }; - - template - class GKV : public GKV_Base { - GKV() = delete; - - public: - static T get_kv(const gguf_context * ctx, const int k) { - const enum gguf_type kt = gguf_get_kv_type(ctx, k); - - if (kt != GKV::gt) { - throw std::runtime_error(format("key %s has wrong type %s but expected type %s", - gguf_get_key(ctx, k), gguf_type_name(kt), gguf_type_name(GKV::gt))); - } - return GKV::getter(ctx, k); - } - - static const char * override_type_to_str(const llama_model_kv_override_type ty) { - switch (ty) { - case LLAMA_KV_OVERRIDE_TYPE_BOOL: return "bool"; - case LLAMA_KV_OVERRIDE_TYPE_INT: return "int"; - case LLAMA_KV_OVERRIDE_TYPE_FLOAT: return "float"; - case LLAMA_KV_OVERRIDE_TYPE_STR: return "str"; - } - return "unknown"; - } - - static bool validate_override(const llama_model_kv_override_type expected_type, const struct llama_model_kv_override * ovrd) { - if (!ovrd) { return false; } - if (ovrd->tag == expected_type) { - LLAMA_LOG_INFO("%s: Using metadata override (%5s) '%s' = ", - __func__, override_type_to_str(ovrd->tag), ovrd->key); - switch (ovrd->tag) { - case LLAMA_KV_OVERRIDE_TYPE_BOOL: { - LLAMA_LOG_INFO("%s\n", ovrd->val_bool ? "true" : "false"); - } break; - case LLAMA_KV_OVERRIDE_TYPE_INT: { - LLAMA_LOG_INFO("%" PRId64 "\n", ovrd->val_i64); - } break; - case LLAMA_KV_OVERRIDE_TYPE_FLOAT: { - LLAMA_LOG_INFO("%.6f\n", ovrd->val_f64); - } break; - case LLAMA_KV_OVERRIDE_TYPE_STR: { - LLAMA_LOG_INFO("%s\n", ovrd->val_str); - } break; - default: - // Shouldn't be possible to end up here, but just in case... - throw std::runtime_error( - format("Unsupported attempt to override %s type for metadata key %s\n", - override_type_to_str(ovrd->tag), ovrd->key)); - } - return true; - } - LLAMA_LOG_WARN("%s: Warning: Bad metadata override type for key '%s', expected %s but got %s\n", - __func__, ovrd->key, override_type_to_str(expected_type), override_type_to_str(ovrd->tag)); - return false; - } - - template - static typename std::enable_if::value, bool>::type - try_override(OT & target, const struct llama_model_kv_override * ovrd) { - if (validate_override(LLAMA_KV_OVERRIDE_TYPE_BOOL, ovrd)) { - target = ovrd->val_bool; - return true; - } - return false; - } - - template - static typename std::enable_if::value && std::is_integral::value, bool>::type - try_override(OT & target, const struct llama_model_kv_override * ovrd) { - if (validate_override(LLAMA_KV_OVERRIDE_TYPE_INT, ovrd)) { - target = ovrd->val_i64; - return true; - } - return false; - } - - template - static typename std::enable_if::value, bool>::type - try_override(T & target, const struct llama_model_kv_override * ovrd) { - if (validate_override(LLAMA_KV_OVERRIDE_TYPE_FLOAT, ovrd)) { - target = ovrd->val_f64; - return true; - } - return false; - } - - template - static typename std::enable_if::value, bool>::type - try_override(T & target, const struct llama_model_kv_override * ovrd) { - if (validate_override(LLAMA_KV_OVERRIDE_TYPE_STR, ovrd)) { - target = ovrd->val_str; - return true; - } - return false; - } - - static bool set(const gguf_context * ctx, const int k, T & target, const struct llama_model_kv_override * ovrd = nullptr) { - if (try_override(target, ovrd)) { - return true; - } - if (k < 0) { return false; } - target = get_kv(ctx, k); - return true; - } - - static bool set(const gguf_context * ctx, const char * key, T & target, const struct llama_model_kv_override * ovrd = nullptr) { - return set(ctx, gguf_find_key(ctx, key), target, ovrd); - } - - static bool set(const gguf_context * ctx, const std::string & key, T & target, const struct llama_model_kv_override * ovrd = nullptr) { - return set(ctx, key.c_str(), target, ovrd); - } - }; -} - -using llama_buf_map = std::unordered_map; - -struct llama_model_loader { - int n_kv = 0; - int n_tensors = 0; - int n_created = 0; - - int64_t n_elements = 0; - size_t n_bytes = 0; - - bool use_mmap = false; - bool check_tensors; - - llama_files files; - llama_ftype ftype; - llama_fver fver; - - llama_mmaps mappings; - - // Holds information on a model weight - struct llama_tensor_weight { - uint16_t idx; // source file index - size_t offs; // tensor data offset in the original file - - ggml_tensor * tensor; - - llama_tensor_weight(const llama_file * file, uint16_t idx, const char * name, const struct gguf_context * gguf_ctx, ggml_tensor * tensor) : idx(idx), tensor(tensor) { - const int tensor_idx = gguf_find_tensor(gguf_ctx, name); - offs = gguf_get_data_offset(gguf_ctx) + gguf_get_tensor_offset(gguf_ctx, tensor_idx); - - if (offs + ggml_nbytes(tensor) < offs || offs + ggml_nbytes(tensor) > file->size) { - throw std::runtime_error(format("tensor '%s' data is not within the file bounds, model is corrupted or incomplete", name)); - } - } - }; - std::vector weights; - - std::unordered_map kv_overrides; - - struct gguf_context * meta = NULL; - std::vector contexts; - - std::string arch_name; - LLM_KV llm_kv = LLM_KV(LLM_ARCH_UNKNOWN); - - llama_model_loader(const std::string & fname, bool use_mmap, bool check_tensors, const struct llama_model_kv_override * param_overrides_p) { - int trace = 0; - if (getenv("LLAMA_TRACE")) { - trace = atoi(getenv("LLAMA_TRACE")); - } - - if (param_overrides_p != nullptr) { - for (const struct llama_model_kv_override *p = param_overrides_p; p->key[0] != 0; p++) { - kv_overrides.insert({std::string(p->key), *p}); - } - } - - struct ggml_context * ctx = NULL; - struct gguf_init_params params = { - /*.no_alloc = */ true, - /*.ctx = */ &ctx, - }; - - meta = gguf_init_from_file(fname.c_str(), params); - if (!meta) { - throw std::runtime_error(format("%s: failed to load model from %s\n", __func__, fname.c_str())); - } - - get_key(llm_kv(LLM_KV_GENERAL_ARCHITECTURE), arch_name, false); - llm_kv = LLM_KV(llm_arch_from_string(arch_name)); - - files.emplace_back(new llama_file(fname.c_str(), "rb")); - contexts.emplace_back(ctx); - - // Save tensors data offset of the main file. - // For subsidiary files, `meta` tensor data offset must not be used, - // so we build a unified tensors index for weights. - for (ggml_tensor * cur = ggml_get_first_tensor(ctx); cur; cur = ggml_get_next_tensor(ctx, cur)) { - weights.emplace_back(files.back().get(), 0, cur->name, meta, cur); - } - uint16_t n_split = 0; - get_key(llm_kv(LLM_KV_SPLIT_COUNT), n_split, false); - - // Load additional GGML contexts - if (n_split > 1) { - uint16_t idx = 0; - get_key(llm_kv(LLM_KV_SPLIT_NO), idx); - if (idx != 0) { - throw std::runtime_error(format("illegal split file: %d, model must be loaded with the first split", idx)); - } - - char split_prefix[PATH_MAX] = {0}; - if (!llama_split_prefix(split_prefix, sizeof(split_prefix), fname.c_str(), idx, n_split)) { - throw std::runtime_error(format("invalid split file: %s", fname.c_str())); - } - - if (trace > 0) { - LLAMA_LOG_INFO("%s: loading additional %d GGUFs\n", __func__, n_split); - } - - char split_path[PATH_MAX] = {0}; - for (idx = 1; idx < n_split; idx++) { - llama_split_path(split_path, sizeof(split_path), split_prefix, idx, n_split); - - struct gguf_init_params split_params = { - /*.no_alloc = */ true, - /*.ctx = */ &ctx, - }; - struct gguf_context * ctx_gguf = gguf_init_from_file(split_path, split_params); - if (!ctx_gguf) { - throw std::runtime_error(format("%s: failed to load GGUF split from %s\n", __func__, split_path)); - } - - files.emplace_back(new llama_file(split_path, "rb")); - contexts.emplace_back(ctx); - - // Save tensors data offset info of the shard. - for (ggml_tensor * cur = ggml_get_first_tensor(ctx); cur; cur = ggml_get_next_tensor(ctx, cur)) { - weights.emplace_back(files.back().get(), idx, cur->name, ctx_gguf, cur); - } - - gguf_free(ctx_gguf); - } - - get_key(llm_kv(LLM_KV_SPLIT_TENSORS_COUNT), n_tensors); - - // sanity check - { - const int n_tensors_loaded = (int) weights.size(); - if (n_tensors != n_tensors_loaded) { - throw std::runtime_error(format("corrupted model: %d tensors expected but %d found", n_tensors, n_tensors_loaded)); - } - } - - LLAMA_LOG_INFO("%s: additional %d GGUFs metadata loaded.\n", __func__, n_split - 1); - } - - n_kv = gguf_get_n_kv(meta); - n_tensors = weights.size(); - - fver = (enum llama_fver) gguf_get_version(meta); - - std::set tensor_names; - for (auto & w : weights) { - n_elements += ggml_nelements(w.tensor); - n_bytes += ggml_nbytes(w.tensor); - // make sure there is no duplicated tensor names - const std::string name(w.tensor->name); - auto found = tensor_names.find(name); - if (found != tensor_names.end()) { - throw std::runtime_error(format("invalid model: tensor '%s' is duplicated", w.tensor->name)); - } - tensor_names.insert(name); - } - - LLAMA_LOG_INFO("%s: loaded meta data with %d key-value pairs and %d tensors from %s (version %s)\n", - __func__, n_kv, n_tensors, fname.c_str(), llama_file_version_name(fver)); - - // determine file type based on the number of tensors for each quantization and print meta data - // TODO: make optional - { - std::map n_type; - - uint32_t n_type_max = 0; - enum ggml_type type_max = GGML_TYPE_F32; - - for (int i = 0; i < n_tensors; i++) { - const ggml_tensor * tensor = weights.at(i).tensor; - enum ggml_type type = tensor->type; - - n_type[type]++; - - if (n_type_max < n_type[type]) { - n_type_max = n_type[type]; - type_max = type; - } - - if (trace > 0) { - const uint16_t sid = weights.at(i).idx; - LLAMA_LOG_INFO("%s: - tensor %4d, split %2d: %32s %-8s [ %s ]\n", __func__, i, sid, ggml_get_name(tensor), ggml_type_name(type), llama_format_tensor_shape(tensor).c_str()); - } - } - - switch (type_max) { - case GGML_TYPE_F32: ftype = LLAMA_FTYPE_ALL_F32; break; - case GGML_TYPE_F16: ftype = LLAMA_FTYPE_MOSTLY_F16; break; - case GGML_TYPE_Q4_0: ftype = LLAMA_FTYPE_MOSTLY_Q4_0; break; - case GGML_TYPE_Q4_1: ftype = LLAMA_FTYPE_MOSTLY_Q4_1; break; - case GGML_TYPE_Q5_0: ftype = LLAMA_FTYPE_MOSTLY_Q5_0; break; - case GGML_TYPE_Q5_1: ftype = LLAMA_FTYPE_MOSTLY_Q5_1; break; - case GGML_TYPE_Q8_0: ftype = LLAMA_FTYPE_MOSTLY_Q8_0; break; - case GGML_TYPE_Q2_K: ftype = LLAMA_FTYPE_MOSTLY_Q2_K; break; - case GGML_TYPE_Q3_K: ftype = LLAMA_FTYPE_MOSTLY_Q3_K_M; break; - case GGML_TYPE_Q4_K: ftype = LLAMA_FTYPE_MOSTLY_Q4_K_M; break; - case GGML_TYPE_Q5_K: ftype = LLAMA_FTYPE_MOSTLY_Q5_K_M; break; - case GGML_TYPE_Q6_K: ftype = LLAMA_FTYPE_MOSTLY_Q6_K; break; - case GGML_TYPE_IQ2_XXS: ftype = LLAMA_FTYPE_MOSTLY_IQ2_XXS; break; - case GGML_TYPE_IQ2_XS: ftype = LLAMA_FTYPE_MOSTLY_IQ2_XS; break; - case GGML_TYPE_IQ2_S: ftype = LLAMA_FTYPE_MOSTLY_IQ2_S; break; - case GGML_TYPE_IQ3_XXS: ftype = LLAMA_FTYPE_MOSTLY_IQ3_XXS; break; - case GGML_TYPE_IQ1_S: ftype = LLAMA_FTYPE_MOSTLY_IQ1_S; break; - case GGML_TYPE_IQ1_M: ftype = LLAMA_FTYPE_MOSTLY_IQ1_M; break; - case GGML_TYPE_IQ4_NL: ftype = LLAMA_FTYPE_MOSTLY_IQ4_NL; break; - case GGML_TYPE_IQ4_XS: ftype = LLAMA_FTYPE_MOSTLY_IQ4_XS; break; - case GGML_TYPE_IQ3_S: ftype = LLAMA_FTYPE_MOSTLY_IQ3_S; break; - default: - { - LLAMA_LOG_WARN("%s: unknown type %s\n", __func__, ggml_type_name(type_max)); - ftype = LLAMA_FTYPE_ALL_F32; - } break; - } - - // this is a way to mark that we have "guessed" the file type - ftype = (llama_ftype) (ftype | LLAMA_FTYPE_GUESSED); - - { - const int kid = gguf_find_key(meta, "general.file_type"); - if (kid >= 0) { - ftype = (llama_ftype) gguf_get_val_u32(meta, kid); - } - } - - LLAMA_LOG_INFO("%s: Dumping metadata keys/values. Note: KV overrides do not apply in this output.\n", __func__); - - for (int i = 0; i < n_kv; i++) { - const char * name = gguf_get_key(meta, i); - const enum gguf_type type = gguf_get_kv_type(meta, i); - const std::string type_name = - type == GGUF_TYPE_ARRAY - ? format("%s[%s,%d]", gguf_type_name(type), gguf_type_name(gguf_get_arr_type(meta, i)), gguf_get_arr_n(meta, i)) - : gguf_type_name(type); - - std::string value = gguf_kv_to_str(meta, i); - const size_t MAX_VALUE_LEN = 40; - if (value.size() > MAX_VALUE_LEN) { - value = format("%s...", value.substr(0, MAX_VALUE_LEN - 3).c_str()); - } - replace_all(value, "\n", "\\n"); - - LLAMA_LOG_INFO("%s: - kv %3d: %42s %-16s = %s\n", __func__, i, name, type_name.c_str(), value.c_str()); - } - - // print type counts - for (auto & kv : n_type) { - if (kv.second == 0) { - continue; - } - - LLAMA_LOG_INFO("%s: - type %4s: %4d tensors\n", __func__, ggml_type_name(kv.first), kv.second); - } - } - - if (!llama_mmap::SUPPORTED) { - LLAMA_LOG_WARN("%s: mmap is not supported on this platform\n", __func__); - use_mmap = false; - } - - this->use_mmap = use_mmap; - this->check_tensors = check_tensors; - } - - ~llama_model_loader() { - if (meta) { - gguf_free(meta); - } - for (auto * ctx : contexts) { - ggml_free(ctx); - } - } - - template - typename std::enable_if::value, bool>::type - get_arr_n(const std::string & key, T & result, const bool required = true) { - const int kid = gguf_find_key(meta, key.c_str()); - - if (kid < 0) { - if (required) { - throw std::runtime_error(format("key not found in model: %s", key.c_str())); - } - return false; - } - - struct GGUFMeta::ArrayInfo arr_info = - GGUFMeta::GKV::get_kv(meta, kid); - - - result = arr_info.length; - return true; - } - - template - typename std::enable_if::value, bool>::type - get_arr_n(const enum llm_kv kid, T & result, const bool required = true) { - return get_arr_n(llm_kv(kid), result, required); - } - - template - bool get_key(const std::string & key, T & result, const bool required = true) { - auto it = kv_overrides.find(key); - - const struct llama_model_kv_override * override = - it != kv_overrides.end() ? &it->second : nullptr; - - const bool found = GGUFMeta::GKV::set(meta, key, result, override); - - if (required && !found) { - throw std::runtime_error(format("key not found in model: %s", key.c_str())); - } - - return found; - } - - template - bool get_key(const enum llm_kv kid, T & result, const bool required = true) { - return get_key(llm_kv(kid), result, required); - } - - std::string get_arch_name() const { - return arch_name; - } - - enum llm_arch get_arch() const { - return llm_kv.arch; - } - - const char * get_tensor_name(int i) const { - return weights.at(i).tensor->name; - } - - const llama_tensor_weight * get_weight(const char * name) const { - for (const auto & weight : weights) { - if (strcmp(name, weight.tensor->name) == 0) { - return &weight; - } - } - return nullptr; - } - - const llama_tensor_weight * get_weight(int i) const { - return get_weight(get_tensor_name(i)); - } - - const llama_tensor_weight & require_weight(const char * name) const { - const llama_tensor_weight * weight = get_weight(name); - if (!weight) { - throw std::runtime_error(format("%s: tensor '%s' not found", __func__, name)); - } - return *weight; - } - - struct ggml_tensor * get_tensor_meta(const char * name) const { - const auto * weight = get_weight(name); - if (!weight) { - return nullptr; - } - return weight->tensor; - } - - struct ggml_tensor * require_tensor_meta(const char * name) const { - struct ggml_tensor * tensor = get_tensor_meta(name); - if (!tensor) { - throw std::runtime_error(format("%s: tensor '%s' not found", __func__, name)); - } - return tensor; - } - - struct ggml_tensor * get_tensor_meta(int i) const { - return get_tensor_meta(get_tensor_name(i)); - } - - struct ggml_tensor * create_tensor_for(struct ggml_context * ctx, const struct ggml_tensor * cur) { - struct ggml_tensor * tensor = ggml_dup_tensor(ctx, cur); - ggml_set_name(tensor, ggml_get_name(cur)); - - n_created++; - - return tensor; - } - - const struct ggml_tensor * check_tensor_dims(const std::string & name, const std::vector & ne, bool required) const { - const struct ggml_tensor * cur = get_tensor_meta(name.c_str()); - - if (cur == NULL) { - if (!required) { - return NULL; - } - throw std::runtime_error(format("%s: tensor '%s' not found", __func__, name.c_str())); - } - - { - bool is_ok = true; - for (size_t i = 0; i < GGML_MAX_DIMS; ++i) { - if ((i < ne.size() && ne[i] != cur->ne[i]) || (i >= ne.size() && cur->ne[i] != 1)) { - is_ok = false; - break; - } - } - if (!is_ok) { - throw std::runtime_error( - format("%s: tensor '%s' has wrong shape; expected %s, got %s", - __func__, name.c_str(), - llama_format_tensor_shape(ne).c_str(), - llama_format_tensor_shape(cur).c_str())); - } - } - - return cur; - } - - struct ggml_tensor * create_tensor(struct ggml_context * ctx, const std::string & name, const std::vector & ne, bool required = true) { - const struct ggml_tensor * cur = check_tensor_dims(name, ne, required); - - if (cur == NULL) { - return NULL; - } - - return create_tensor_for(ctx, cur); - } - - struct ggml_tensor * create_tensor_as_view(struct ggml_context * ctx, struct ggml_tensor * base, const std::string & name, const std::vector & ne, size_t offset, bool required = true) { - const struct ggml_tensor * cur = check_tensor_dims(name, ne, required); - - if (cur == NULL) { - return NULL; - } - - if (cur->type != base->type) { - throw std::runtime_error(format("%s: tensor '%s' has wrong type; expected %s, got %s", __func__, name.c_str(), ggml_type_name(base->type), ggml_type_name(cur->type))); - } - - std::array dims; - for (size_t i = 0; i < GGML_MAX_DIMS; ++i) { - dims[i] = i < ne.size() ? ne[i] : 1; - } - - struct ggml_tensor * tensor = ggml_view_4d(ctx, base, - dims[0], dims[1], dims[2], dims[3], - cur->nb[1], cur->nb[2], cur->nb[3], - offset); - - ggml_set_name(tensor, name.c_str()); - - n_created++; - - return tensor; - } - - void done_getting_tensors() const { - if (n_created != n_tensors) { - throw std::runtime_error(format("%s: wrong number of tensors; expected %d, got %d", __func__, n_tensors, n_created)); - } - } - - void init_mappings(bool prefetch = true, llama_mlocks * mlock_mmaps = nullptr) { - if (use_mmap) { - mappings.reserve(files.size()); - mmaps_used.reserve(files.size()); - for (const auto & file : files) { - std::unique_ptr mapping(new llama_mmap(file.get(), prefetch ? -1 : 0, ggml_is_numa())); - mmaps_used.emplace_back(mapping->size, 0); - if (mlock_mmaps) { - std::unique_ptr mlock_mmap(new llama_mlock()); - mlock_mmap->init(mapping->addr); - mlock_mmaps->emplace_back(std::move(mlock_mmap)); - } - mappings.emplace_back(std::move(mapping)); - } - } - - // compute the total size of all tensors for progress reporting - for (auto & w : weights) { - size_data += ggml_nbytes(w.tensor); - } - } - - void get_mapping_range(size_t * first, size_t * last, void ** addr, int idx, ggml_context * ctx) const { - GGML_ASSERT(!mappings.empty()); - const auto & mapping = mappings.at(idx); - - *first = mapping->size; - *last = 0; - *addr = mapping->addr; - for (ggml_tensor * tensor = ggml_get_first_tensor(ctx); tensor; tensor = ggml_get_next_tensor(ctx, tensor)) { - try { - const auto * weight = get_weight(ggml_get_name(tensor)); - if (!weight) { - continue; - } - if (weight->idx != idx) { - continue; - } - *first = std::min(*first, weight->offs); - *last = std::max(*last, weight->offs + ggml_nbytes(tensor)); - } catch(...) { - // the tensor is not in the model - } - } - } - - // for backwards compatibility, does not support ggml-backend - void load_data_for(struct ggml_tensor * cur) const { - const auto & w = require_weight(ggml_get_name(cur)); - - if (use_mmap) { - const auto & mapping = mappings.at(w.idx); - if (cur->data == nullptr) { - cur->data = (uint8_t *)mapping->addr + w.offs; - } else { - memcpy(cur->data, (uint8_t *)mapping->addr + w.offs, ggml_nbytes(cur)); - } - } else { - GGML_ASSERT(cur->data != nullptr); - GGML_ASSERT(w.idx < files.size()); - const auto & file = files.at(w.idx); - file->seek(w.offs, SEEK_SET); - file->read_raw(cur->data, ggml_nbytes(cur)); - } - - if (check_tensors && !ggml_validate_row_data(cur->type, cur->data, ggml_nbytes(cur))) { - throw std::runtime_error(format("tensor '%s' has invalid data", ggml_get_name(cur))); - } - } - - size_t size_done = 0; - size_t size_data = 0; - std::vector> mmaps_used; - - // Returns false if cancelled by progress_callback - bool load_all_data( - struct ggml_context * ctx, - llama_buf_map & bufs_mmap, - llama_mlocks * lmlocks, - llama_progress_callback progress_callback, - void * progress_callback_user_data) { - GGML_ASSERT(size_data != 0 && "call init_mappings() first"); - - std::vector> read_buf; - std::vector>> validation_result; - - for (struct ggml_tensor * cur = ggml_get_first_tensor(ctx); cur != NULL; cur = ggml_get_next_tensor(ctx, cur)) { - const auto * weight = get_weight(ggml_get_name(cur)); - if (weight == nullptr) { - // this can happen with split experts models - continue; - } - - if (progress_callback) { - if (!progress_callback((float) size_done / size_data, progress_callback_user_data)) { - return false; - } - } - - size_t n_size = ggml_nbytes(cur); - - if (use_mmap) { - const auto & mapping = mappings.at(weight->idx); - ggml_backend_buffer_t buf_mmap = nullptr; - if (bufs_mmap.count(weight->idx)) { - buf_mmap = bufs_mmap.at(weight->idx); - } - uint8_t * data = (uint8_t *) mapping->addr + weight->offs; - - if (check_tensors) { - validation_result.emplace_back(std::async(std::launch::async, [cur, data, n_size] { - return std::make_pair(cur, ggml_validate_row_data(cur->type, data, n_size)); - })); - } - - GGML_ASSERT(buf_mmap || cur->data); // either we have a buffer to allocate the tensor in, or it is already allocated - if (buf_mmap && cur->data == nullptr) { - ggml_backend_tensor_alloc(buf_mmap, cur, data); - if (lmlocks) { - const auto & lmlock = lmlocks->at(weight->idx); - lmlock->grow_to(weight->offs + n_size); - } - - auto & mmap_used = mmaps_used[weight->idx]; - mmap_used.first = std::min(mmap_used.first, weight->offs); - mmap_used.second = std::max(mmap_used.second, weight->offs + n_size); - } else { - ggml_backend_tensor_set(cur, data, 0, n_size); - } - } else { - GGML_ASSERT(weight->idx < files.size()); - const auto & file = files.at(weight->idx); - if (ggml_backend_buffer_is_host(cur->buffer)) { - file->seek(weight->offs, SEEK_SET); - file->read_raw(cur->data, n_size); - if (check_tensors) { - validation_result.emplace_back(std::async(std::launch::async, [cur, n_size] { - return std::make_pair(cur, ggml_validate_row_data(cur->type, cur->data, n_size)); - })); - } - } else { - read_buf.resize(n_size); - file->seek(weight->offs, SEEK_SET); - file->read_raw(read_buf.data(), n_size); - ggml_backend_tensor_set(cur, read_buf.data(), 0, n_size); - if (check_tensors && !ggml_validate_row_data(cur->type, read_buf.data(), n_size)) { - throw std::runtime_error(format("tensor '%s' has invalid data", ggml_get_name(cur))); - } - } - } - - size_done += n_size; - } - - // check validation results - bool validation_failed = false; - for (auto & future : validation_result) { - auto result = future.get(); - if (!result.second) { - LLAMA_LOG_ERROR("%s: tensor '%s' has invalid data\n", __func__, ggml_get_name(result.first)); - validation_failed = true; - } - } - if (validation_failed) { - throw std::runtime_error("found tensors with invalid data"); - } - - // check if this is the last call and do final cleanup - if (size_done >= size_data) { - // unmap offloaded tensors and metadata - if (use_mmap) { - for (uint32_t idx = 0; idx < mappings.size(); idx++) { - const auto & mmap_used = mmaps_used.at(idx); - auto & mapping = mappings.at(idx); - mapping->unmap_fragment(0, mmap_used.first); - if (mmap_used.second != 0) { - mapping->unmap_fragment(mmap_used.second, mapping->size); - } - } - } - if (progress_callback) { - // Even though the model is done loading, we still honor - // cancellation since we need to free allocations. - return progress_callback(1.0f, progress_callback_user_data); - } - } - - return true; - } -}; - -template<> -bool llama_model_loader::get_key(const enum llm_kv kid, enum llama_pooling_type & result, const bool required) { - uint32_t tmp; - const bool found = get_key(kid, tmp, required); - if (found) { - result = (enum llama_pooling_type) tmp; - } else { - result = LLAMA_POOLING_TYPE_UNSPECIFIED; - } - return found; -} - - -// -// load LLaMA models -// - -static const char * llama_model_arch_name(llm_arch arch) { - auto it = LLM_ARCH_NAMES.find(arch); - if (it == LLM_ARCH_NAMES.end()) { - return "unknown"; - } - return it->second; -} - -static std::string llama_model_ftype_name(llama_ftype ftype) { - if (ftype & LLAMA_FTYPE_GUESSED) { - return llama_model_ftype_name((enum llama_ftype) (ftype & ~LLAMA_FTYPE_GUESSED)) + " (guessed)"; - } - - switch (ftype) { - case LLAMA_FTYPE_ALL_F32: return "all F32"; - case LLAMA_FTYPE_MOSTLY_F16: return "F16"; - case LLAMA_FTYPE_MOSTLY_Q4_0: return "Q4_0"; - case LLAMA_FTYPE_MOSTLY_Q4_1: return "Q4_1"; - case LLAMA_FTYPE_MOSTLY_Q4_1_SOME_F16: - return "Q4_1, some F16"; - case LLAMA_FTYPE_MOSTLY_Q5_0: return "Q5_0"; - case LLAMA_FTYPE_MOSTLY_Q5_1: return "Q5_1"; - case LLAMA_FTYPE_MOSTLY_Q8_0: return "Q8_0"; - - // K-quants - case LLAMA_FTYPE_MOSTLY_Q2_K: return "Q2_K - Medium"; - case LLAMA_FTYPE_MOSTLY_Q2_K_S: return "Q2_K - Small"; - case LLAMA_FTYPE_MOSTLY_Q3_K_S: return "Q3_K - Small"; - case LLAMA_FTYPE_MOSTLY_Q3_K_M: return "Q3_K - Medium"; - case LLAMA_FTYPE_MOSTLY_Q3_K_L: return "Q3_K - Large"; - case LLAMA_FTYPE_MOSTLY_Q4_K_S: return "Q4_K - Small"; - case LLAMA_FTYPE_MOSTLY_Q4_K_M: return "Q4_K - Medium"; - case LLAMA_FTYPE_MOSTLY_Q5_K_S: return "Q5_K - Small"; - case LLAMA_FTYPE_MOSTLY_Q5_K_M: return "Q5_K - Medium"; - case LLAMA_FTYPE_MOSTLY_Q6_K: return "Q6_K"; - case LLAMA_FTYPE_MOSTLY_IQ2_XXS:return "IQ2_XXS - 2.0625 bpw"; - case LLAMA_FTYPE_MOSTLY_IQ2_XS: return "IQ2_XS - 2.3125 bpw"; - case LLAMA_FTYPE_MOSTLY_IQ2_S: return "IQ2_S - 2.5 bpw"; - case LLAMA_FTYPE_MOSTLY_IQ2_M: return "IQ2_M - 2.7 bpw"; - case LLAMA_FTYPE_MOSTLY_IQ3_XS: return "IQ3_XS - 3.3 bpw"; - case LLAMA_FTYPE_MOSTLY_IQ3_XXS:return "IQ3_XXS - 3.0625 bpw"; - case LLAMA_FTYPE_MOSTLY_IQ1_S :return "IQ1_S - 1.5625 bpw"; - case LLAMA_FTYPE_MOSTLY_IQ1_M :return "IQ1_M - 1.75 bpw"; - case LLAMA_FTYPE_MOSTLY_IQ4_NL: return "IQ4_NL - 4.5 bpw"; - case LLAMA_FTYPE_MOSTLY_IQ4_XS: return "IQ4_XS - 4.25 bpw"; - case LLAMA_FTYPE_MOSTLY_IQ3_S: return "IQ3_S - 3.4375 bpw"; - case LLAMA_FTYPE_MOSTLY_IQ3_M: return "IQ3_S mix - 3.66 bpw"; - - default: return "unknown, may not work"; - } -} - -static const char * llama_model_type_name(e_model type) { - switch (type) { - case MODEL_22M: return "22M"; - case MODEL_33M: return "33M"; - case MODEL_109M: return "109M"; - case MODEL_137M: return "137M"; - case MODEL_0_5B: return "0.5B"; - case MODEL_1B: return "1B"; - case MODEL_2B: return "2B"; - case MODEL_3B: return "3B"; - case MODEL_7B: return "7B"; - case MODEL_8B: return "8B"; - case MODEL_12B: return "12B"; - case MODEL_13B: return "13B"; - case MODEL_14B: return "14B"; - case MODEL_15B: return "15B"; - case MODEL_20B: return "20B"; - case MODEL_30B: return "30B"; - case MODEL_34B: return "34B"; - case MODEL_35B: return "35B"; - case MODEL_40B: return "40B"; - case MODEL_65B: return "65B"; - case MODEL_70B: return "70B"; - case MODEL_314B: return "314B"; - case MODEL_SMALL: return "0.1B"; - case MODEL_MEDIUM: return "0.4B"; - case MODEL_LARGE: return "0.8B"; - case MODEL_XL: return "1.5B"; - case MODEL_A2_7B: return "A2.7B"; - case MODEL_8x7B: return "8x7B"; - case MODEL_8x22B: return "8x22B"; - case MODEL_16x12B: return "16x12B"; - default: return "?B"; - } -} - -static const char * llama_model_vocab_type_name(enum llama_vocab_type type){ - switch (type) { - case LLAMA_VOCAB_TYPE_NONE: return "no vocab"; - case LLAMA_VOCAB_TYPE_SPM: return "SPM"; - case LLAMA_VOCAB_TYPE_BPE: return "BPE"; - case LLAMA_VOCAB_TYPE_WPM: return "WPM"; - default: return "unknown"; - } -} - -static void llm_load_arch(llama_model_loader & ml, llama_model & model) { - model.arch = ml.get_arch(); - if (model.arch == LLM_ARCH_UNKNOWN) { - throw std::runtime_error("unknown model architecture: '" + ml.get_arch_name() + "'"); - } -} - -static void llm_load_hparams( - llama_model_loader & ml, - llama_model & model) { - auto & hparams = model.hparams; - const gguf_context * ctx = ml.meta; - - // get metadata as string - for (int i = 0; i < gguf_get_n_kv(ctx); i++) { - enum gguf_type type = gguf_get_kv_type(ctx, i); - if (type == GGUF_TYPE_ARRAY) { - continue; - } - const char * name = gguf_get_key(ctx, i); - const std::string value = gguf_kv_to_str(ctx, i); - model.gguf_kv.emplace(name, value); - } - - // get general kv - ml.get_key(LLM_KV_GENERAL_NAME, model.name, false); - - // get hparams kv - ml.get_key(LLM_KV_VOCAB_SIZE, hparams.n_vocab, false) || ml.get_arr_n(LLM_KV_TOKENIZER_LIST, hparams.n_vocab); - ml.get_key(LLM_KV_CONTEXT_LENGTH, hparams.n_ctx_train); - ml.get_key(LLM_KV_EMBEDDING_LENGTH, hparams.n_embd); - ml.get_key(LLM_KV_FEED_FORWARD_LENGTH, hparams.n_ff); - ml.get_key(LLM_KV_ATTENTION_HEAD_COUNT, hparams.n_head); - ml.get_key(LLM_KV_BLOCK_COUNT, hparams.n_layer); - ml.get_key(LLM_KV_EXPERT_COUNT, hparams.n_expert, false); - ml.get_key(LLM_KV_EXPERT_USED_COUNT, hparams.n_expert_used, false); - - GGML_ASSERT(hparams.n_expert <= LLAMA_MAX_EXPERTS); - GGML_ASSERT(hparams.n_expert_used <= hparams.n_expert); - if (hparams.n_expert > 0) { - GGML_ASSERT(hparams.n_expert_used > 0); - } else { - GGML_ASSERT(hparams.n_expert_used == 0); - } - - // n_head_kv is optional, default to n_head - hparams.n_head_kv = hparams.n_head; - ml.get_key(LLM_KV_ATTENTION_HEAD_COUNT_KV, hparams.n_head_kv, false); - - bool rope_finetuned = false; - ml.get_key(LLM_KV_ROPE_SCALING_FINETUNED, rope_finetuned, false); - hparams.rope_finetuned = rope_finetuned; - - hparams.n_yarn_orig_ctx = hparams.n_ctx_train; - ml.get_key(LLM_KV_ROPE_SCALING_ORIG_CTX_LEN, hparams.n_yarn_orig_ctx, false); - - // rope_freq_base (optional) - hparams.rope_freq_base_train = 10000.0f; - ml.get_key(LLM_KV_ROPE_FREQ_BASE, hparams.rope_freq_base_train, false); - - std::string rope_scaling("linear"); - ml.get_key(LLM_KV_ROPE_SCALING_TYPE, rope_scaling, false); - hparams.rope_scaling_type_train = llama_rope_scaling_type_from_string(rope_scaling); - GGML_ASSERT(hparams.rope_scaling_type_train != LLAMA_ROPE_SCALING_TYPE_UNSPECIFIED); - - // rope_freq_scale (inverse of the kv) is optional - float ropescale = 0.0f; - if (!ml.get_key(LLM_KV_ROPE_SCALING_FACTOR, ropescale, false)) { - // try the old key name - ml.get_key(LLM_KV_ROPE_SCALE_LINEAR, ropescale, false); - } - hparams.rope_freq_scale_train = ropescale == 0.0f ? 1.0f : 1.0f/ropescale; - - // sanity check for n_rot (optional) - { - hparams.n_rot = (hparams.n_head == 0) ? 0 : hparams.n_embd / hparams.n_head; - - ml.get_key(LLM_KV_ROPE_DIMENSION_COUNT, hparams.n_rot, false); - - if (model.arch == LLM_ARCH_LLAMA || model.arch == LLM_ARCH_FALCON) { - if (hparams.n_rot != hparams.n_embd / hparams.n_head) { - throw std::runtime_error(format("invalid n_rot: %u, expected %u", hparams.n_rot, hparams.n_embd / hparams.n_head)); - } - } - // gpt-neox n_rot = rotary_pct * (n_embd / n_head) - // gpt-j n_rot = rotary_dim - } - - hparams.n_embd_head_k = (hparams.n_head == 0) ? 0 : hparams.n_embd / hparams.n_head; - ml.get_key(LLM_KV_ATTENTION_KEY_LENGTH, hparams.n_embd_head_k, false); - - hparams.n_embd_head_v = (hparams.n_head == 0) ? 0 : hparams.n_embd / hparams.n_head; - ml.get_key(LLM_KV_ATTENTION_VALUE_LENGTH, hparams.n_embd_head_v, false); - - // arch-specific KVs - switch (model.arch) { - case LLM_ARCH_LLAMA: - { - ml.get_key(LLM_KV_ATTENTION_LAYERNORM_RMS_EPS, hparams.f_norm_rms_eps); - - if (hparams.n_expert == 8) { - switch (hparams.n_layer) { - case 32: model.type = e_model::MODEL_8x7B; break; - case 56: model.type = e_model::MODEL_8x22B; break; - default: model.type = e_model::MODEL_UNKNOWN; - } - } else { - switch (hparams.n_layer) { - case 22: model.type = e_model::MODEL_1B; break; - case 26: model.type = e_model::MODEL_3B; break; - case 32: model.type = hparams.n_head == hparams.n_head_kv ? e_model::MODEL_7B : e_model::MODEL_8B; break; // LLaMa 8B v3 uses GQA - case 40: model.type = e_model::MODEL_13B; break; - case 48: model.type = e_model::MODEL_34B; break; - case 60: model.type = e_model::MODEL_30B; break; - case 80: model.type = hparams.n_head == hparams.n_head_kv ? e_model::MODEL_65B : e_model::MODEL_70B; break; - default: model.type = e_model::MODEL_UNKNOWN; - } - } - } break; - case LLM_ARCH_MINICPM: - { - ml.get_key(LLM_KV_ATTENTION_LAYERNORM_RMS_EPS, hparams.f_norm_rms_eps); - - switch (hparams.n_layer) { - case 40: model.type = e_model::MODEL_2B; break; - default: model.type = e_model::MODEL_UNKNOWN; - } - } break; - case LLM_ARCH_GROK: - { - ml.get_key(LLM_KV_ATTENTION_LAYERNORM_RMS_EPS, hparams.f_norm_rms_eps); - - switch (hparams.n_layer) { - case 64: model.type = e_model::MODEL_314B; break; - default: model.type = e_model::MODEL_UNKNOWN; - } - } break; - case LLM_ARCH_FALCON: - { - ml.get_key(LLM_KV_ATTENTION_LAYERNORM_EPS, hparams.f_norm_eps); - - switch (hparams.n_layer) { - case 32: model.type = e_model::MODEL_7B; break; - case 60: model.type = e_model::MODEL_40B; break; - default: model.type = e_model::MODEL_UNKNOWN; - } - } break; - case LLM_ARCH_BAICHUAN: - { - ml.get_key(LLM_KV_ATTENTION_LAYERNORM_RMS_EPS, hparams.f_norm_rms_eps); - switch (hparams.n_layer) { - case 32: model.type = e_model::MODEL_7B; break; - case 40: model.type = e_model::MODEL_13B; break; - default: model.type = e_model::MODEL_UNKNOWN; - } - - if (model.type == e_model::MODEL_13B) { - // TODO: become GGUF KV parameter - hparams.f_max_alibi_bias = 8.0f; - } - } break; - case LLM_ARCH_STARCODER: - { - ml.get_key(LLM_KV_ATTENTION_LAYERNORM_EPS, hparams.f_norm_eps); - switch (hparams.n_layer) { - case 24: model.type = e_model::MODEL_1B; break; - case 36: model.type = e_model::MODEL_3B; break; - case 42: model.type = e_model::MODEL_7B; break; - case 40: model.type = e_model::MODEL_15B; break; - default: model.type = e_model::MODEL_UNKNOWN; - } - } break; - case LLM_ARCH_PERSIMMON: - { - ml.get_key(LLM_KV_ATTENTION_LAYERNORM_EPS, hparams.f_norm_eps); - switch (hparams.n_layer) { - case 36: model.type = e_model::MODEL_8B; break; - default: model.type = e_model::MODEL_UNKNOWN; - } - } break; - case LLM_ARCH_REFACT: - { - ml.get_key(LLM_KV_ATTENTION_LAYERNORM_RMS_EPS, hparams.f_norm_rms_eps); - switch (hparams.n_layer) { - case 32: model.type = e_model::MODEL_1B; break; - default: model.type = e_model::MODEL_UNKNOWN; - } - - // TODO: become GGUF KV parameter - hparams.f_max_alibi_bias = 8.0f; - } break; - case LLM_ARCH_BERT: - { - ml.get_key(LLM_KV_ATTENTION_LAYERNORM_EPS, hparams.f_norm_eps); - ml.get_key(LLM_KV_ATTENTION_CAUSAL, hparams.causal_attn); - ml.get_key(LLM_KV_TOKENIZER_TOKEN_TYPE_COUNT, hparams.n_vocab_type); - ml.get_key(LLM_KV_POOLING_TYPE, hparams.pooling_type, false); - - switch (hparams.n_layer) { - case 3: - model.type = e_model::MODEL_17M; break; // bge-micro - case 6: - model.type = e_model::MODEL_22M; break; // MiniLM-L6 - case 12: - switch (hparams.n_embd) { - case 384: model.type = e_model::MODEL_33M; break; // MiniLM-L12, bge-small - case 768: model.type = e_model::MODEL_109M; break; // bge-base - } break; - case 24: - model.type = e_model::MODEL_335M; break; // bge-large - } - } break; - case LLM_ARCH_NOMIC_BERT: - { - ml.get_key(LLM_KV_ATTENTION_LAYERNORM_EPS, hparams.f_norm_eps); - ml.get_key(LLM_KV_ATTENTION_CAUSAL, hparams.causal_attn); - ml.get_key(LLM_KV_TOKENIZER_TOKEN_TYPE_COUNT, hparams.n_vocab_type); - ml.get_key(LLM_KV_POOLING_TYPE, hparams.pooling_type); - - if (hparams.n_layer == 12 && hparams.n_embd == 768) { - model.type = e_model::MODEL_137M; - } - } break; - case LLM_ARCH_BLOOM: - { - ml.get_key(LLM_KV_ATTENTION_LAYERNORM_EPS, hparams.f_norm_eps); - - switch (hparams.n_layer) { - case 24: model.type = e_model::MODEL_1B; break; - case 30: - switch (hparams.n_embd) { - case 2560: model.type = e_model::MODEL_3B; break; - case 4096: model.type = e_model::MODEL_7B; break; - } break; - } - - // TODO: become GGUF KV parameter - hparams.f_max_alibi_bias = 8.0f; - } break; - case LLM_ARCH_MPT: - { - ml.get_key(LLM_KV_ATTENTION_LAYERNORM_EPS, hparams.f_norm_eps); - ml.get_key(LLM_KV_ATTENTION_CLAMP_KQV, hparams.f_clamp_kqv, false); - ml.get_key(LLM_KV_ATTENTION_MAX_ALIBI_BIAS, hparams.f_max_alibi_bias); - - switch (hparams.n_layer) { - case 32: model.type = e_model::MODEL_7B; break; - case 48: model.type = e_model::MODEL_30B; break; - default: model.type = e_model::MODEL_UNKNOWN; - } - } break; - case LLM_ARCH_STABLELM: - { - ml.get_key(LLM_KV_ATTENTION_LAYERNORM_EPS, hparams.f_norm_eps); - - switch (hparams.n_layer) { - case 24: model.type = e_model::MODEL_1B; break; - case 32: model.type = e_model::MODEL_3B; break; - case 40: model.type = e_model::MODEL_12B; break; - default: model.type = e_model::MODEL_UNKNOWN; - } - } break; - case LLM_ARCH_QWEN: - { - ml.get_key(LLM_KV_ATTENTION_LAYERNORM_RMS_EPS, hparams.f_norm_rms_eps); - - switch (hparams.n_layer) { - case 32: model.type = e_model::MODEL_7B; break; - case 40: model.type = e_model::MODEL_13B; break; - default: model.type = e_model::MODEL_UNKNOWN; - } - } break; - case LLM_ARCH_QWEN2: - { - ml.get_key(LLM_KV_ATTENTION_LAYERNORM_RMS_EPS, hparams.f_norm_rms_eps); - switch (hparams.n_layer) { - case 24: model.type = hparams.n_embd == 1024 ? e_model::MODEL_0_5B : e_model::MODEL_1B; break; - case 32: model.type = e_model::MODEL_7B; break; - case 40: model.type = hparams.n_head == 20 ? e_model::MODEL_4B : e_model::MODEL_13B; break; - case 80: model.type = e_model::MODEL_70B; break; - default: model.type = e_model::MODEL_UNKNOWN; - } - } break; - case LLM_ARCH_QWEN2MOE: - { - ml.get_key(LLM_KV_ATTENTION_LAYERNORM_RMS_EPS, hparams.f_norm_rms_eps); - switch (hparams.n_layer) { - case 24: model.type = e_model::MODEL_A2_7B; break; - default: model.type = e_model::MODEL_UNKNOWN; - } - } break; - case LLM_ARCH_PHI2: - { - ml.get_key(LLM_KV_ATTENTION_LAYERNORM_EPS, hparams.f_norm_eps); - - switch (hparams.n_layer) { - case 24: model.type = e_model::MODEL_1B; break; - case 32: model.type = e_model::MODEL_3B; break; - default: model.type = e_model::MODEL_UNKNOWN; - } - } break; - case LLM_ARCH_PHI3: - { - ml.get_key(LLM_KV_ATTENTION_LAYERNORM_RMS_EPS, hparams.f_norm_rms_eps); - - switch (hparams.n_layer) { - case 24: model.type = e_model::MODEL_1B; break; - case 32: model.type = e_model::MODEL_3B; break; - default: model.type = e_model::MODEL_UNKNOWN; - } - } break; - case LLM_ARCH_PLAMO: - { - ml.get_key(LLM_KV_ATTENTION_LAYERNORM_RMS_EPS, hparams.f_norm_rms_eps); - - switch (hparams.n_layer) { - case 40: model.type = e_model::MODEL_13B; break; - default: model.type = e_model::MODEL_UNKNOWN; - } - } break; - case LLM_ARCH_GPT2: - { - ml.get_key(LLM_KV_ATTENTION_LAYERNORM_EPS, hparams.f_norm_eps); - switch (hparams.n_layer) { - case 12: model.type = e_model::MODEL_SMALL; break; - case 24: model.type = e_model::MODEL_MEDIUM; break; - case 36: model.type = e_model::MODEL_LARGE; break; - case 48: model.type = e_model::MODEL_XL; break; - default: model.type = e_model::MODEL_UNKNOWN; - } - } break; - case LLM_ARCH_CODESHELL: - { - ml.get_key(LLM_KV_ATTENTION_LAYERNORM_EPS, hparams.f_norm_eps); - switch (hparams.n_layer) { - case 42: model.type = e_model::MODEL_SMALL; break; - default: model.type = e_model::MODEL_UNKNOWN; - } - } break; - case LLM_ARCH_ORION: - { - ml.get_key(LLM_KV_ATTENTION_LAYERNORM_EPS, hparams.f_norm_eps); - - switch (hparams.n_layer) { - case 40: model.type = e_model::MODEL_14B; break; - default: model.type = e_model::MODEL_UNKNOWN; - } - } break; - case LLM_ARCH_INTERNLM2: - { - ml.get_key(LLM_KV_ATTENTION_LAYERNORM_RMS_EPS, hparams.f_norm_rms_eps); - switch (hparams.n_layer) { - case 32: model.type = e_model::MODEL_7B; break; - case 48: model.type = e_model::MODEL_20B; break; - default: model.type = e_model::MODEL_UNKNOWN; - } - } break; - case LLM_ARCH_GEMMA: - { - ml.get_key(LLM_KV_ATTENTION_LAYERNORM_RMS_EPS, hparams.f_norm_rms_eps); - - switch (hparams.n_layer) { - case 18: model.type = e_model::MODEL_2B; break; - case 28: model.type = e_model::MODEL_7B; break; - default: model.type = e_model::MODEL_UNKNOWN; - } - } break; - case LLM_ARCH_STARCODER2: - { - ml.get_key(LLM_KV_ATTENTION_LAYERNORM_EPS, hparams.f_norm_eps); - switch (hparams.n_layer) { - case 30: model.type = e_model::MODEL_3B; break; - case 32: model.type = e_model::MODEL_7B; break; - case 40: model.type = e_model::MODEL_15B; break; - default: model.type = e_model::MODEL_UNKNOWN; - } - } break; - case LLM_ARCH_MAMBA: - { - ml.get_key(LLM_KV_SSM_CONV_KERNEL, hparams.ssm_d_conv); - ml.get_key(LLM_KV_SSM_INNER_SIZE, hparams.ssm_d_inner); - ml.get_key(LLM_KV_SSM_STATE_SIZE, hparams.ssm_d_state); - ml.get_key(LLM_KV_SSM_TIME_STEP_RANK, hparams.ssm_dt_rank); - - ml.get_key(LLM_KV_ATTENTION_LAYERNORM_RMS_EPS, hparams.f_norm_rms_eps); - - switch (hparams.n_layer) { - case 24: - switch (hparams.n_embd) { - case 768: model.type = e_model::MODEL_SMALL; break; - default: model.type = e_model::MODEL_UNKNOWN; - } break; - case 48: - switch (hparams.n_embd) { - case 1024: model.type = e_model::MODEL_MEDIUM; break; - case 1536: model.type = e_model::MODEL_LARGE; break; - case 2048: model.type = e_model::MODEL_XL; break; - default: model.type = e_model::MODEL_UNKNOWN; - } break; - case 64: - switch (hparams.n_embd) { - case 2560: model.type = e_model::MODEL_3B; break; - default: model.type = e_model::MODEL_UNKNOWN; - } break; - default: model.type = e_model::MODEL_UNKNOWN; - } - } break; - case LLM_ARCH_XVERSE: - { - ml.get_key(LLM_KV_ATTENTION_LAYERNORM_RMS_EPS, hparams.f_norm_rms_eps); - switch (hparams.n_layer) { - case 32: model.type = e_model::MODEL_7B; break; - case 40: model.type = e_model::MODEL_13B; break; - case 80: model.type = e_model::MODEL_65B; break; - default: model.type = e_model::MODEL_UNKNOWN; - } - } break; - case LLM_ARCH_COMMAND_R: - { - ml.get_key(LLM_KV_LOGIT_SCALE, hparams.f_logit_scale); - ml.get_key(LLM_KV_ATTENTION_LAYERNORM_EPS, hparams.f_norm_eps); - switch (hparams.n_layer) { - case 40: model.type = e_model::MODEL_35B; break; - default: model.type = e_model::MODEL_UNKNOWN; - } - } break; - case LLM_ARCH_DBRX: - { - ml.get_key(LLM_KV_ATTENTION_LAYERNORM_EPS, hparams.f_norm_eps); - ml.get_key(LLM_KV_ATTENTION_CLAMP_KQV, hparams.f_clamp_kqv); - - switch (hparams.n_layer) { - case 40: model.type = e_model::MODEL_16x12B; break; - default: model.type = e_model::MODEL_UNKNOWN; - } - } break; - case LLM_ARCH_OLMO: - { - ml.get_key(LLM_KV_ATTENTION_LAYERNORM_EPS, hparams.f_norm_eps); - ml.get_key(LLM_KV_ATTENTION_CLAMP_KQV, hparams.f_clamp_kqv, false); - - switch (hparams.n_layer) { - case 22: model.type = e_model::MODEL_1B; break; - case 32: model.type = e_model::MODEL_7B; break; - case 80: model.type = e_model::MODEL_70B; break; - default: model.type = e_model::MODEL_UNKNOWN; - } - } break; - default: (void)0; - } - - model.ftype = ml.ftype; - - if (hparams.f_max_alibi_bias > 0.0f) { - hparams.need_kq_pos = true; - } - - hparams.rope_type = llama_rope_type(&model); -} - -// TODO: This should probably be in llama.h -static std::vector llama_tokenize_internal( - const llama_vocab & vocab, std::string raw_text, bool add_special, bool parse_special = false -); -static llama_token llama_byte_to_token(const llama_vocab & vocab, uint8_t ch); - -static void llm_load_vocab( - llama_model_loader & ml, - llama_model & model) { - auto & vocab = model.vocab; - - struct gguf_context * ctx = ml.meta; - - const auto kv = LLM_KV(model.arch); - - // determine vocab type - { - std::string tokenizer_name; - - ml.get_key(LLM_KV_TOKENIZER_MODEL, tokenizer_name); - - if (tokenizer_name == "no_vocab") { - vocab.type = LLAMA_VOCAB_TYPE_NONE; - - // default special tokens - vocab.special_bos_id = -1; - vocab.special_eos_id = -1; - vocab.special_unk_id = -1; - vocab.special_sep_id = -1; - vocab.special_pad_id = -1; - vocab.special_cls_id = -1; - vocab.special_mask_id = -1; - vocab.linefeed_id = -1; - - return; - } else if (tokenizer_name == "llama") { - vocab.type = LLAMA_VOCAB_TYPE_SPM; - - // default special tokens - vocab.special_bos_id = 1; - vocab.special_eos_id = 2; - vocab.special_unk_id = 0; - vocab.special_sep_id = -1; - vocab.special_pad_id = -1; - vocab.special_cls_id = -1; - vocab.special_mask_id = -1; - - // For Fill-In-the-Middle (FIM)/infill models which where converted - // prior to support of FIM special tokens in GGUF, the following - // will allow those models to continue to work. The general names - // of the known models are currently CodeLlama (LLM_ARCH_LLAMA) and - // CodeGemma (LLM_ARCH_GEMMA). This can potentially be removed once - // new versions of these models have been published. - std::string gen_name; - ml.get_key(LLM_KV_GENERAL_NAME, gen_name, false); - - std::transform(gen_name.begin(), gen_name.end(), gen_name.begin(), - [](unsigned char c){ return std::tolower(c); }); - - if (gen_name.find("code") != std::string::npos) { - if (model.arch == LLM_ARCH_LLAMA) { - vocab.special_prefix_id = 32007; - vocab.special_suffix_id = 32008; - vocab.special_middle_id = 32009; - vocab.special_eot_id = 32010; - } else if (model.arch == LLM_ARCH_GEMMA) { - vocab.special_prefix_id = 67; - vocab.special_suffix_id = 69; - vocab.special_middle_id = 68; - // TODO: this is not EOT, it is "file separator" token, needs fix - // https://huggingface.co/google/codegemma-7b-it/blob/9b1d9231388358c04d90bd003458f5070d97db44/tokenizer_config.json#L565-L572 - //vocab.special_eot_id = 70; - vocab.special_eot_id = 107; - } - } - - const int add_space_prefix_keyidx = gguf_find_key(ctx, kv(LLM_KV_TOKENIZER_ADD_PREFIX).c_str()); - if (add_space_prefix_keyidx != -1) { - vocab.add_space_prefix = gguf_get_val_bool(ctx, add_space_prefix_keyidx); - } // The default value of add_space_prefix is true. - } else if (tokenizer_name == "gpt2") { - vocab.type = LLAMA_VOCAB_TYPE_BPE; - - // read bpe merges and populate bpe ranks - const int merges_keyidx = gguf_find_key(ctx, kv(LLM_KV_TOKENIZER_MERGES).c_str()); - if (merges_keyidx == -1) { - throw std::runtime_error("cannot find tokenizer merges in model file\n"); - } - - const int n_merges = gguf_get_arr_n(ctx, merges_keyidx); - - for (int i = 0; i < n_merges; i++) { - const std::string word = gguf_get_arr_str(ctx, merges_keyidx, i); - GGML_ASSERT(unicode_cpts_from_utf8(word).size() > 0); - - std::string first; - std::string second; - - const size_t pos = word.find(' ', 1); - - if (pos != std::string::npos) { - first = word.substr(0, pos); - second = word.substr(pos + 1); - } - - vocab.bpe_ranks.emplace(std::make_pair(first, second), i); - } - - // default special tokens - vocab.special_bos_id = 11; - vocab.special_eos_id = 11; - vocab.special_unk_id = -1; - vocab.special_sep_id = -1; - vocab.special_pad_id = -1; - vocab.special_cls_id = -1; - vocab.special_mask_id = -1; - } else if (tokenizer_name == "bert") { - vocab.type = LLAMA_VOCAB_TYPE_WPM; - - // default special tokens - vocab.special_bos_id = -1; - vocab.special_eos_id = -1; - vocab.special_unk_id = 100; - vocab.special_sep_id = 102; - vocab.special_pad_id = 0; - vocab.special_cls_id = 101; - vocab.special_mask_id = 103; - vocab.add_space_prefix = false; - } else { - LLAMA_LOG_WARN("%s: unknown tokenizer: '%s'", __func__, tokenizer_name.c_str()); - LLAMA_LOG_WARN("%s: using default tokenizer: 'llama'", __func__); - - vocab.type = LLAMA_VOCAB_TYPE_SPM; - } - } - - const int token_idx = gguf_find_key(ctx, kv(LLM_KV_TOKENIZER_LIST).c_str()); - if (token_idx == -1) { - throw std::runtime_error("cannot find tokenizer vocab in model file\n"); - } - - const float * scores = nullptr; - const int score_idx = gguf_find_key(ctx, kv(LLM_KV_TOKENIZER_SCORES).c_str()); - if (score_idx != -1) { - scores = (const float * ) gguf_get_arr_data(ctx, score_idx); - } - - const int * toktypes = nullptr; - const int toktype_idx = gguf_find_key(ctx, kv(LLM_KV_TOKENIZER_TOKEN_TYPE).c_str()); - if (toktype_idx != -1) { - toktypes = (const int * ) gguf_get_arr_data(ctx, toktype_idx); - } - - const uint32_t n_vocab = gguf_get_arr_n(ctx, token_idx); - - vocab.id_to_token.resize(n_vocab); - - for (uint32_t i = 0; i < n_vocab; i++) { - std::string word = gguf_get_arr_str(ctx, token_idx, i); - GGML_ASSERT(unicode_cpts_from_utf8(word).size() > 0); - - vocab.token_to_id[word] = i; - - auto & token_data = vocab.id_to_token[i]; - token_data.text = std::move(word); - token_data.score = scores ? scores[i] : 0.0f; - token_data.type = toktypes ? (llama_token_type) toktypes[i] : LLAMA_TOKEN_TYPE_NORMAL; - } - GGML_ASSERT(vocab.id_to_token.size() == vocab.token_to_id.size()); - - // determine the newline token: LLaMA "<0x0A>" == 10 == '\n', Falcon 193 == '\n' - if (vocab.type == LLAMA_VOCAB_TYPE_SPM) { - try { - vocab.linefeed_id = llama_byte_to_token(vocab, '\n'); - } catch (const std::exception & e) { - LLAMA_LOG_WARN("%s: SPM vocabulary, but newline token not found: %s! Using special_pad_id instead.", __func__, e.what()); - vocab.linefeed_id = vocab.special_pad_id; - } - } else if (vocab.type == LLAMA_VOCAB_TYPE_WPM) { - vocab.linefeed_id = vocab.special_pad_id; - } else { - const std::vector ids = llama_tokenize_internal(vocab, "\xC4\x8A", false); // U+010A - GGML_ASSERT(!ids.empty() && "model vocab missing newline token"); - vocab.linefeed_id = ids[0]; - } - - // special tokens - { - const std::vector> special_token_types = { - { LLM_KV_TOKENIZER_BOS_ID, vocab.special_bos_id }, - { LLM_KV_TOKENIZER_EOS_ID, vocab.special_eos_id }, - { LLM_KV_TOKENIZER_UNK_ID, vocab.special_unk_id }, - { LLM_KV_TOKENIZER_SEP_ID, vocab.special_sep_id }, - { LLM_KV_TOKENIZER_PAD_ID, vocab.special_pad_id }, - { LLM_KV_TOKENIZER_CLS_ID, vocab.special_cls_id }, - { LLM_KV_TOKENIZER_MASK_ID, vocab.special_mask_id }, - { LLM_KV_TOKENIZER_PREFIX_ID, vocab.special_prefix_id }, - { LLM_KV_TOKENIZER_SUFFIX_ID, vocab.special_suffix_id }, - { LLM_KV_TOKENIZER_MIDDLE_ID, vocab.special_middle_id }, - { LLM_KV_TOKENIZER_EOT_ID, vocab.special_eot_id }, - }; - - for (const auto & it : special_token_types) { - const std::string & key = kv(std::get<0>(it)); - int32_t & id = std::get<1>(it); - - uint32_t new_id; - if (!ml.get_key(std::get<0>(it), new_id, false)) { - continue; - } - if (new_id >= vocab.id_to_token.size()) { - LLAMA_LOG_WARN("%s: bad special token: '%s' = %ud, using default id %d\n", - __func__, key.c_str(), new_id, id); - } else { - id = new_id; - } - } - - // Handle add_bos_token and add_eos_token - { - bool temp = true; - - if (ml.get_key(LLM_KV_TOKENIZER_ADD_BOS, temp, false)) { - vocab.special_add_bos = int(temp); - } - if (ml.get_key(LLM_KV_TOKENIZER_ADD_EOS, temp, false)) { - vocab.special_add_eos = int(temp); - } - } - - // find EOT token: "<|eot_id|>", "<|im_end|>", "", etc. - // - // TODO: convert scripts should provide this token through the KV metadata LLAMA_KV_TOKENIZER_EOT_ID - // for now, we apply this workaround to find the EOT token based on its text - if (vocab.special_eot_id == -1) { - for (const auto & t : vocab.token_to_id) { - if ( - // TODO: gemma "" is exported as a normal token, so the following check does not work - // need to fix convert script - //vocab.id_to_token[t.second].type == LLAMA_TOKEN_TYPE_CONTROL && - (t.first == "<|eot_id|>" || - t.first == "<|im_end|>" || - t.first == "<|end|>" || - t.first == "" - ) - ) { - vocab.special_eot_id = t.second; - break; - } - } - } - } - - // build special tokens cache - { - // TODO: It is unclear (to me) at this point, whether special tokes are guaranteed to be of a deterministic type, - // and will always be correctly labeled in 'added_tokens.json' etc. - // The assumption is, since special tokens aren't meant to be exposed to end user, they are designed - // to be unmatchable by the tokenizer, therefore tokens from the vocab, which are unmatchable by the tokenizer - // are special tokens. - // From testing, this appears to correlate 1:1 with special tokens. - // - - // Counting special tokens and verifying in only one direction - // is sufficient to detect difference in those two sets. - // - uint32_t special_tokens_count_by_type = 0; - uint32_t special_tokens_count_from_verification = 0; - - bool special_tokens_definition_mismatch = false; - - for (const auto & t : vocab.token_to_id) { - const auto & token = t.first; - const auto & id = t.second; - - // Count all non-normal tokens in the vocab while iterating - if (vocab.id_to_token[id].type != LLAMA_TOKEN_TYPE_NORMAL) { - special_tokens_count_by_type++; - } - - // Skip single character tokens - if (token.length() > 1) { - bool is_tokenizable = false; - - // Split token string representation in two, in all possible ways - // and check if both halves can be matched to a valid token - for (unsigned i = 1; i < token.length();) { - const auto left = token.substr(0, i); - const auto right = token.substr(i); - - // check if we didnt partition in the middle of a utf sequence - auto utf = utf8_len(left.at(left.length() - 1)); - - if (utf == 1) { - if (vocab.token_to_id.find(left) != vocab.token_to_id.end() && - vocab.token_to_id.find(right) != vocab.token_to_id.end() ) { - is_tokenizable = true; - break; - } - i++; - } else { - // skip over the rest of multibyte utf sequence - i += utf - 1; - } - } - - if (!is_tokenizable) { - // Some tokens are multibyte, but they are utf sequences with equivalent text length of 1 - // it's faster to re-filter them here, since there are way less candidates now - - // Calculate a total "utf" length of a token string representation - size_t utf8_str_len = 0; - for (unsigned i = 0; i < token.length();) { - utf8_str_len++; - i += utf8_len(token.at(i)); - } - - // And skip the ones which are one character - if (utf8_str_len > 1) { - // At this point what we have left are special tokens only - vocab.special_tokens_cache[token] = id; - - // Count manually found special tokens - special_tokens_count_from_verification++; - - // If this manually found special token is not marked as such, flag a mismatch - if (vocab.id_to_token[id].type == LLAMA_TOKEN_TYPE_NORMAL) { - special_tokens_definition_mismatch = true; - } - } - } - } - } - - if (special_tokens_definition_mismatch || special_tokens_count_from_verification != special_tokens_count_by_type) { - LLAMA_LOG_WARN("%s: mismatch in special tokens definition ( %u/%zu vs %u/%zu ).\n", - __func__, - special_tokens_count_from_verification, vocab.id_to_token.size(), - special_tokens_count_by_type, vocab.id_to_token.size() - ); - } else { - LLAMA_LOG_INFO("%s: special tokens definition check successful ( %u/%zu ).\n", - __func__, - special_tokens_count_from_verification, vocab.id_to_token.size() - ); - } - } -} - -static void llm_load_print_meta(llama_model_loader & ml, llama_model & model) { - const auto & hparams = model.hparams; - const auto & vocab = model.vocab; - - const char * rope_scaling_type = LLAMA_ROPE_SCALING_TYPES.at(hparams.rope_scaling_type_train); - - // hparams - LLAMA_LOG_INFO("%s: format = %s\n", __func__, llama_file_version_name(ml.fver)); - LLAMA_LOG_INFO("%s: arch = %s\n", __func__, LLM_ARCH_NAMES.at(model.arch)); - LLAMA_LOG_INFO("%s: vocab type = %s\n", __func__, llama_model_vocab_type_name(vocab.type)); - LLAMA_LOG_INFO("%s: n_vocab = %u\n", __func__, hparams.n_vocab); - LLAMA_LOG_INFO("%s: n_merges = %u\n", __func__, (int) vocab.bpe_ranks.size()); - LLAMA_LOG_INFO("%s: n_ctx_train = %u\n", __func__, hparams.n_ctx_train); - LLAMA_LOG_INFO("%s: n_embd = %u\n", __func__, hparams.n_embd); - LLAMA_LOG_INFO("%s: n_head = %u\n", __func__, hparams.n_head); - LLAMA_LOG_INFO("%s: n_head_kv = %u\n", __func__, hparams.n_head_kv); - LLAMA_LOG_INFO("%s: n_layer = %u\n", __func__, hparams.n_layer); - LLAMA_LOG_INFO("%s: n_rot = %u\n", __func__, hparams.n_rot); - LLAMA_LOG_INFO("%s: n_embd_head_k = %u\n", __func__, hparams.n_embd_head_k); - LLAMA_LOG_INFO("%s: n_embd_head_v = %u\n", __func__, hparams.n_embd_head_v); - LLAMA_LOG_INFO("%s: n_gqa = %u\n", __func__, hparams.n_gqa()); - LLAMA_LOG_INFO("%s: n_embd_k_gqa = %u\n", __func__, hparams.n_embd_k_gqa()); - LLAMA_LOG_INFO("%s: n_embd_v_gqa = %u\n", __func__, hparams.n_embd_v_gqa()); - LLAMA_LOG_INFO("%s: f_norm_eps = %.1e\n", __func__, hparams.f_norm_eps); - LLAMA_LOG_INFO("%s: f_norm_rms_eps = %.1e\n", __func__, hparams.f_norm_rms_eps); - LLAMA_LOG_INFO("%s: f_clamp_kqv = %.1e\n", __func__, hparams.f_clamp_kqv); - LLAMA_LOG_INFO("%s: f_max_alibi_bias = %.1e\n", __func__, hparams.f_max_alibi_bias); - LLAMA_LOG_INFO("%s: f_logit_scale = %.1e\n", __func__, hparams.f_logit_scale); - LLAMA_LOG_INFO("%s: n_ff = %u\n", __func__, hparams.n_ff); - LLAMA_LOG_INFO("%s: n_expert = %u\n", __func__, hparams.n_expert); - LLAMA_LOG_INFO("%s: n_expert_used = %u\n", __func__, hparams.n_expert_used); - LLAMA_LOG_INFO("%s: causal attn = %d\n", __func__, hparams.causal_attn); - LLAMA_LOG_INFO("%s: pooling type = %d\n", __func__, hparams.pooling_type); - LLAMA_LOG_INFO("%s: rope type = %d\n", __func__, hparams.rope_type); - LLAMA_LOG_INFO("%s: rope scaling = %s\n", __func__, rope_scaling_type); - LLAMA_LOG_INFO("%s: freq_base_train = %.1f\n", __func__, hparams.rope_freq_base_train); - LLAMA_LOG_INFO("%s: freq_scale_train = %g\n", __func__, hparams.rope_freq_scale_train); - LLAMA_LOG_INFO("%s: n_yarn_orig_ctx = %u\n", __func__, hparams.n_yarn_orig_ctx); - LLAMA_LOG_INFO("%s: rope_finetuned = %s\n", __func__, hparams.rope_finetuned ? "yes" : "unknown"); - LLAMA_LOG_INFO("%s: ssm_d_conv = %u\n", __func__, hparams.ssm_d_conv); - LLAMA_LOG_INFO("%s: ssm_d_inner = %u\n", __func__, hparams.ssm_d_inner); - LLAMA_LOG_INFO("%s: ssm_d_state = %u\n", __func__, hparams.ssm_d_state); - LLAMA_LOG_INFO("%s: ssm_dt_rank = %u\n", __func__, hparams.ssm_dt_rank); - LLAMA_LOG_INFO("%s: model type = %s\n", __func__, llama_model_type_name(model.type)); - LLAMA_LOG_INFO("%s: model ftype = %s\n", __func__, llama_model_ftype_name(model.ftype).c_str()); - if (ml.n_elements >= 1e12) { - LLAMA_LOG_INFO("%s: model params = %.2f T\n", __func__, ml.n_elements*1e-12); - } else if (ml.n_elements >= 1e9) { - LLAMA_LOG_INFO("%s: model params = %.2f B\n", __func__, ml.n_elements*1e-9); - } else if (ml.n_elements >= 1e6) { - LLAMA_LOG_INFO("%s: model params = %.2f M\n", __func__, ml.n_elements*1e-6); - } else { - LLAMA_LOG_INFO("%s: model params = %.2f K\n", __func__, ml.n_elements*1e-3); - } - if (ml.n_bytes < GiB) { - LLAMA_LOG_INFO("%s: model size = %.2f MiB (%.2f BPW) \n", __func__, ml.n_bytes/1024.0/1024.0, ml.n_bytes*8.0/ml.n_elements); - } else { - LLAMA_LOG_INFO("%s: model size = %.2f GiB (%.2f BPW) \n", __func__, ml.n_bytes/1024.0/1024.0/1024.0, ml.n_bytes*8.0/ml.n_elements); - } - - // general kv - LLAMA_LOG_INFO("%s: general.name = %s\n", __func__, model.name.c_str()); - - // special tokens - if (vocab.special_bos_id != -1) { LLAMA_LOG_INFO( "%s: BOS token = %d '%s'\n", __func__, vocab.special_bos_id, vocab.id_to_token[vocab.special_bos_id].text.c_str() ); } - if (vocab.special_eos_id != -1) { LLAMA_LOG_INFO( "%s: EOS token = %d '%s'\n", __func__, vocab.special_eos_id, vocab.id_to_token[vocab.special_eos_id].text.c_str() ); } - if (vocab.special_unk_id != -1) { LLAMA_LOG_INFO( "%s: UNK token = %d '%s'\n", __func__, vocab.special_unk_id, vocab.id_to_token[vocab.special_unk_id].text.c_str() ); } - if (vocab.special_sep_id != -1) { LLAMA_LOG_INFO( "%s: SEP token = %d '%s'\n", __func__, vocab.special_sep_id, vocab.id_to_token[vocab.special_sep_id].text.c_str() ); } - if (vocab.special_pad_id != -1) { LLAMA_LOG_INFO( "%s: PAD token = %d '%s'\n", __func__, vocab.special_pad_id, vocab.id_to_token[vocab.special_pad_id].text.c_str() ); } - if (vocab.special_cls_id != -1) { LLAMA_LOG_INFO( "%s: CLS token = %d '%s'\n", __func__, vocab.special_cls_id, vocab.id_to_token[vocab.special_cls_id].text.c_str() ); } - if (vocab.special_mask_id != -1) { LLAMA_LOG_INFO( "%s: MASK token = %d '%s'\n", __func__, vocab.special_mask_id, vocab.id_to_token[vocab.special_mask_id].text.c_str() ); } - - if (vocab.linefeed_id != -1) { LLAMA_LOG_INFO( "%s: LF token = %d '%s'\n", __func__, vocab.linefeed_id, vocab.id_to_token[vocab.linefeed_id].text.c_str() ); } - if (vocab.special_prefix_id != -1) { LLAMA_LOG_INFO( "%s: PRE token = %d '%s'\n", __func__, vocab.special_prefix_id, vocab.id_to_token[vocab.special_prefix_id].text.c_str() ); } - if (vocab.special_suffix_id != -1) { LLAMA_LOG_INFO( "%s: SUF token = %d '%s'\n", __func__, vocab.special_suffix_id, vocab.id_to_token[vocab.special_suffix_id].text.c_str() ); } - if (vocab.special_middle_id != -1) { LLAMA_LOG_INFO( "%s: MID token = %d '%s'\n", __func__, vocab.special_middle_id, vocab.id_to_token[vocab.special_middle_id].text.c_str() ); } - if (vocab.special_eot_id != -1) { LLAMA_LOG_INFO( "%s: EOT token = %d '%s'\n", __func__, vocab.special_eot_id, vocab.id_to_token[vocab.special_eot_id].text.c_str() ); } -} - -// Returns false if cancelled by progress_callback -static bool llm_load_tensors( - llama_model_loader & ml, - llama_model & model, - int n_gpu_layers, - enum llama_split_mode split_mode, - int main_gpu, - const float * tensor_split, - bool use_mlock, - llama_progress_callback progress_callback, - void * progress_callback_user_data) { - model.t_start_us = ggml_time_us(); - - auto & hparams = model.hparams; - -#ifdef GGML_USE_SYCL - // disable MoE with SYCL until mul_mat_id is updated - if (hparams.n_expert > 0) { - n_gpu_layers = 0; - } -#endif - - model.split_mode = split_mode; - model.main_gpu = main_gpu; - model.n_gpu_layers = n_gpu_layers; - - const int64_t n_layer = hparams.n_layer; - const int64_t i_gpu_start = std::max((int64_t) hparams.n_layer - n_gpu_layers, (int64_t) 0); - bool use_mmap_buffer = true; - - // there is very little benefit to offloading the input layer, so always keep it on the CPU - model.buft_input = llama_default_buffer_type_cpu(true); - //model.buft_input = llama_default_buffer_type_offload(main_gpu); - - model.buft_layer.resize(n_layer); - - // assign cpu layers - for (int64_t i = 0; i < i_gpu_start; ++i) { - model.buft_layer[i] = llama_default_buffer_type_cpu(true); - } - - if (split_mode == LLAMA_SPLIT_MODE_LAYER) { - // calculate the split points - int device_count = llama_get_device_count(); - bool all_zero = tensor_split == nullptr || std::all_of(tensor_split, tensor_split + device_count, [](float x) { return x == 0.0f; }); - std::vector splits(device_count); - if (all_zero) { - // default split, by free memory - for (int i = 0; i < device_count; ++i) { - splits[i] = llama_get_device_memory(i); - } - } else { - std::copy(tensor_split, tensor_split + device_count, splits.begin()); - } - - // sum and normalize the splits to get the split points - float split_sum = 0.0f; - for (int i = 0; i < device_count; ++i) { - split_sum += splits[i]; - splits[i] = split_sum; - } - for (int i = 0; i < device_count; ++i) { - splits[i] /= split_sum; - } - - // assign the repeating layers to the devices according to the splits - int act_gpu_layers = std::min(n_gpu_layers, (int)n_layer + 1); - for (int64_t i = i_gpu_start; i < n_layer; ++i) { - int layer_gpu = std::upper_bound(splits.begin(), splits.begin() + device_count, float(i - i_gpu_start)/act_gpu_layers) - splits.begin(); - model.buft_layer[i] = llama_default_buffer_type_offload(layer_gpu); - } - // assign the output layer - if (n_gpu_layers > n_layer) { - int layer_gpu = std::upper_bound(splits.begin(), splits.begin() + device_count, float(act_gpu_layers - 1)/act_gpu_layers) - splits.begin(); - model.buft_output = llama_default_buffer_type_offload(layer_gpu); - } else { - model.buft_output = llama_default_buffer_type_cpu(true); - } - } else { - ggml_backend_buffer_type_t split_buft; - if (split_mode == LLAMA_SPLIT_MODE_ROW) { - split_buft = llama_default_buffer_type_split(main_gpu, tensor_split); - } else { - // LLAMA_SPLIT_MODE_NONE or LLAMA_SPLIT_MODE_LAYER in backends where it is not supported - split_buft = llama_default_buffer_type_offload(main_gpu); - } - // assign the repeating layers - for (int64_t i = i_gpu_start; i < n_layer; ++i) { - model.buft_layer[i] = { - split_buft, - llama_default_buffer_type_offload(main_gpu) - }; - } - // assign the output layer - if (n_gpu_layers > n_layer) { - model.buft_output = { - split_buft, - llama_default_buffer_type_offload(main_gpu) - }; - } else { - model.buft_output = llama_default_buffer_type_cpu(true); - } - } - - // count used buffer types - std::map buft_layer_count; - buft_layer_count[model.buft_input.buft]++; - buft_layer_count[model.buft_input.buft_matrix]++; - buft_layer_count[model.buft_output.buft]++; - buft_layer_count[model.buft_output.buft_matrix]++; - for (int64_t i = 0; i < n_layer; ++i) { - buft_layer_count[model.buft_layer[i].buft]++; - buft_layer_count[model.buft_layer[i].buft_matrix]++; - } - - // create one context per buffer type - size_t ctx_size = ggml_tensor_overhead()*(ml.n_tensors + 1); // +1 for models where tok_embd is duplicated as output - - // for moe merged tensors - ctx_size += ggml_tensor_overhead()*n_layer*3; - - std::map ctx_map; - for (auto & it : buft_layer_count) { - struct ggml_init_params params = { - /*.mem_size =*/ ctx_size, - /*.mem_buffer =*/ NULL, - /*.no_alloc =*/ true, - }; - ggml_context * ctx = ggml_init(params); - if (!ctx) { - throw std::runtime_error(format("failed to create context")); - } - ctx_map[it.first] = ctx; - model.ctxs.push_back(ctx); - } - - LLAMA_LOG_INFO("%s: ggml ctx size = %7.2f MiB\n", __func__, model.ctxs.size()*ctx_size/1024.0/1024.0); - - // create tensors for the weights - { - const int64_t n_embd = hparams.n_embd; - const int64_t n_embd_k_gqa = hparams.n_embd_k_gqa(); - const int64_t n_embd_v_gqa = hparams.n_embd_v_gqa(); - const int64_t n_embd_gqa = n_embd_v_gqa; - const int64_t n_vocab = hparams.n_vocab; - const int64_t n_vocab_type = hparams.n_vocab_type; - const int64_t n_ff = hparams.n_ff; - const int64_t n_expert = hparams.n_expert; - - if (n_expert > 0 && hparams.n_expert_used == 0) { - throw std::runtime_error("model has expert layers but no expert layers are used"); - } - - GGML_ASSERT(n_embd_gqa == n_embd_k_gqa); - - ggml_context * ctx_input = ctx_map.at(model.buft_input.buft); - ggml_context * ctx_output = ctx_map.at(model.buft_output.buft); - ggml_context * ctx_output_split = ctx_map.at(model.buft_output.buft_matrix); - auto ctx_for_layer = [&](int i) { return ctx_map.at(model.buft_layer[i].buft); }; - auto ctx_for_layer_split = [&](int i) { return ctx_map.at(model.buft_layer[i].buft_matrix); }; - - model.layers.resize(n_layer); - - const auto tn = LLM_TN(model.arch); - switch (model.arch) { - case LLM_ARCH_LLAMA: - case LLM_ARCH_REFACT: - case LLM_ARCH_MINICPM: - { - model.tok_embd = ml.create_tensor(ctx_input, tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}); - - // output - { - model.output_norm = ml.create_tensor(ctx_output, tn(LLM_TENSOR_OUTPUT_NORM, "weight"), {n_embd}); - if (model.arch != LLM_ARCH_MINICPM){ - model.output = ml.create_tensor(ctx_output_split, tn(LLM_TENSOR_OUTPUT, "weight"), {n_embd, n_vocab}, false); - // if output is NULL, init from the input tok embed - if (model.output == NULL) { - model.output = ml.create_tensor(ctx_output, tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}); - ml.n_created--; // artificial tensor - ml.size_data += ggml_nbytes(model.output); - } - } - } - - for (int i = 0; i < n_layer; ++i) { - ggml_context * ctx_layer = ctx_for_layer(i); - ggml_context * ctx_split = ctx_for_layer_split(i); - - auto & layer = model.layers[i]; - - layer.attn_norm = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_ATTN_NORM, "weight", i), {n_embd}); - - layer.wq = ml.create_tensor(ctx_split, tn(LLM_TENSOR_ATTN_Q, "weight", i), {n_embd, n_embd}); - layer.wk = ml.create_tensor(ctx_split, tn(LLM_TENSOR_ATTN_K, "weight", i), {n_embd, n_embd_gqa}); - layer.wv = ml.create_tensor(ctx_split, tn(LLM_TENSOR_ATTN_V, "weight", i), {n_embd, n_embd_gqa}); - layer.wo = ml.create_tensor(ctx_split, tn(LLM_TENSOR_ATTN_OUT, "weight", i), {n_embd, n_embd}); - - // optional bias tensors - layer.bq = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_ATTN_Q, "bias", i), {n_embd}, false); - layer.bk = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_ATTN_K, "bias", i), {n_embd_gqa}, false); - layer.bv = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_ATTN_V, "bias", i), {n_embd_gqa}, false); - layer.bo = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_ATTN_OUT, "bias", i), {n_embd}, false); - - layer.ffn_norm = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_FFN_NORM, "weight", i), {n_embd}); - - if (n_expert == 0) { - layer.ffn_gate = ml.create_tensor(ctx_split, tn(LLM_TENSOR_FFN_GATE, "weight", i), {n_embd, n_ff}); - layer.ffn_down = ml.create_tensor(ctx_split, tn(LLM_TENSOR_FFN_DOWN, "weight", i), { n_ff, n_embd}); - layer.ffn_up = ml.create_tensor(ctx_split, tn(LLM_TENSOR_FFN_UP, "weight", i), {n_embd, n_ff}); - } else { - layer.ffn_gate_inp = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_FFN_GATE_INP, "weight", i), {n_embd, n_expert}); - - layer.ffn_gate_exps = ml.create_tensor(ctx_split, tn(LLM_TENSOR_FFN_GATE_EXPS, "weight", i), {n_embd, n_ff, n_expert}, false); - if (layer.ffn_gate_exps) { - layer.ffn_down_exps = ml.create_tensor(ctx_split, tn(LLM_TENSOR_FFN_DOWN_EXPS, "weight", i), { n_ff, n_embd, n_expert}); - layer.ffn_up_exps = ml.create_tensor(ctx_split, tn(LLM_TENSOR_FFN_UP_EXPS, "weight", i), {n_embd, n_ff, n_expert}); - } else { - // merge split expert into a single tensor for compatibility with older models - // requires disabling mmap - use_mmap_buffer = false; - - ggml_type type_gate = ml.require_tensor_meta(tn(LLM_TENSOR_FFN_GATE_EXP, "weight", i, 0).c_str())->type; - ggml_type type_down = ml.require_tensor_meta(tn(LLM_TENSOR_FFN_DOWN_EXP, "weight", i, 0).c_str())->type; - ggml_type type_up = ml.require_tensor_meta(tn(LLM_TENSOR_FFN_UP_EXP, "weight", i, 0).c_str())->type; - - layer.ffn_gate_exps = ggml_new_tensor_3d(ctx_split, type_gate, n_embd, n_ff, n_expert); - layer.ffn_down_exps = ggml_new_tensor_3d(ctx_split, type_down, n_ff, n_embd, n_expert); - layer.ffn_up_exps = ggml_new_tensor_3d(ctx_split, type_up, n_embd, n_ff, n_expert); - - ggml_set_name(layer.ffn_gate_exps, tn(LLM_TENSOR_FFN_GATE_EXPS, "weight", i).c_str()); - ggml_set_name(layer.ffn_down_exps, tn(LLM_TENSOR_FFN_DOWN_EXPS, "weight", i).c_str()); - ggml_set_name(layer.ffn_up_exps, tn(LLM_TENSOR_FFN_UP_EXPS, "weight", i).c_str()); - - for (uint32_t x = 0; x < n_expert; ++x) { - // the individual experts are loaded into a view of the merged tensor - ml.create_tensor_as_view(ctx_split, layer.ffn_gate_exps, tn(LLM_TENSOR_FFN_GATE_EXP, "weight", i, x), { n_embd, n_ff }, layer.ffn_gate_exps->nb[2]*x); - ml.create_tensor_as_view(ctx_split, layer.ffn_down_exps, tn(LLM_TENSOR_FFN_DOWN_EXP, "weight", i, x), { n_ff, n_embd }, layer.ffn_down_exps->nb[2]*x); - ml.create_tensor_as_view(ctx_split, layer.ffn_up_exps, tn(LLM_TENSOR_FFN_UP_EXP, "weight", i, x), { n_embd, n_ff }, layer.ffn_up_exps->nb[2]*x); - } - } - } - } - } break; - case LLM_ARCH_GROK: - { - if (n_expert == 0) { - throw std::runtime_error("Grok model cannot have zero experts"); - } - - model.tok_embd = ml.create_tensor(ctx_input, tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}); - - // output - { - model.output_norm = ml.create_tensor(ctx_output, tn(LLM_TENSOR_OUTPUT_NORM, "weight"), {n_embd}); - model.output = ml.create_tensor(ctx_output_split, tn(LLM_TENSOR_OUTPUT, "weight"), {n_embd, n_vocab}, false); - // if output is NULL, init from the input tok embed - if (model.output == NULL) { - model.output = ml.create_tensor(ctx_output, tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}); - ml.n_created--; // artificial tensor - ml.size_data += ggml_nbytes(model.output); - } - } - - for (int i = 0; i < n_layer; ++i) { - ggml_context * ctx_layer = ctx_for_layer(i); - ggml_context * ctx_split = ctx_for_layer_split(i); - - auto & layer = model.layers[i]; - - layer.attn_norm = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_ATTN_NORM, "weight", i), {n_embd}); - - layer.wq = ml.create_tensor(ctx_split, tn(LLM_TENSOR_ATTN_Q, "weight", i), {n_embd, n_embd}); - layer.wk = ml.create_tensor(ctx_split, tn(LLM_TENSOR_ATTN_K, "weight", i), {n_embd, n_embd_gqa}); - layer.wv = ml.create_tensor(ctx_split, tn(LLM_TENSOR_ATTN_V, "weight", i), {n_embd, n_embd_gqa}); - layer.wo = ml.create_tensor(ctx_split, tn(LLM_TENSOR_ATTN_OUT, "weight", i), {n_embd, n_embd}); - - layer.attn_out_norm = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_ATTN_OUT_NORM, "weight", i), {n_embd}); - - layer.ffn_norm = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_FFN_NORM, "weight", i), {n_embd}); - - layer.ffn_gate_inp = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_FFN_GATE_INP, "weight", i), {n_embd, n_expert}); - - layer.ffn_gate_exps = ml.create_tensor(ctx_split, tn(LLM_TENSOR_FFN_GATE_EXPS, "weight", i), {n_embd, n_ff, n_expert}, false); - if (layer.ffn_gate_exps) { - layer.ffn_down_exps = ml.create_tensor(ctx_split, tn(LLM_TENSOR_FFN_DOWN_EXPS, "weight", i), { n_ff, n_embd, n_expert}); - layer.ffn_up_exps = ml.create_tensor(ctx_split, tn(LLM_TENSOR_FFN_UP_EXPS, "weight", i), {n_embd, n_ff, n_expert}); - } else { - // merge split expert into a single tensor for compatibility with older models - // requires disabling mmap - use_mmap_buffer = false; - - ggml_type type_gate = ml.require_tensor_meta(tn(LLM_TENSOR_FFN_GATE_EXP, "weight", i, 0).c_str())->type; - ggml_type type_down = ml.require_tensor_meta(tn(LLM_TENSOR_FFN_DOWN_EXP, "weight", i, 0).c_str())->type; - ggml_type type_up = ml.require_tensor_meta(tn(LLM_TENSOR_FFN_UP_EXP, "weight", i, 0).c_str())->type; - - layer.ffn_gate_exps = ggml_new_tensor_3d(ctx_split, type_gate, n_embd, n_ff, n_expert); - layer.ffn_down_exps = ggml_new_tensor_3d(ctx_split, type_down, n_ff, n_embd, n_expert); - layer.ffn_up_exps = ggml_new_tensor_3d(ctx_split, type_up, n_embd, n_ff, n_expert); - - ggml_set_name(layer.ffn_gate_exps, tn(LLM_TENSOR_FFN_GATE_EXPS, "weight", i).c_str()); - ggml_set_name(layer.ffn_down_exps, tn(LLM_TENSOR_FFN_DOWN_EXPS, "weight", i).c_str()); - ggml_set_name(layer.ffn_up_exps, tn(LLM_TENSOR_FFN_UP_EXPS, "weight", i).c_str()); - - for (uint32_t x = 0; x < n_expert; ++x) { - // the individual experts are loaded into a view of the merged tensor - ml.create_tensor_as_view(ctx_split, layer.ffn_gate_exps, tn(LLM_TENSOR_FFN_GATE_EXP, "weight", i, x), { n_embd, n_ff }, layer.ffn_gate_exps->nb[2]*x); - ml.create_tensor_as_view(ctx_split, layer.ffn_down_exps, tn(LLM_TENSOR_FFN_DOWN_EXP, "weight", i, x), { n_ff, n_embd }, layer.ffn_down_exps->nb[2]*x); - ml.create_tensor_as_view(ctx_split, layer.ffn_up_exps, tn(LLM_TENSOR_FFN_UP_EXP, "weight", i, x), { n_embd, n_ff }, layer.ffn_up_exps->nb[2]*x); - } - } - - layer.layer_out_norm = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_LAYER_OUT_NORM, "weight", i), {n_embd}); - } - } break; - case LLM_ARCH_DBRX: - { - if (n_expert == 0) { - throw std::runtime_error("DBRX model cannot have zero experts"); - } - - model.tok_embd = ml.create_tensor(ctx_input, tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}); - - // output - { - model.output_norm = ml.create_tensor(ctx_output, tn(LLM_TENSOR_OUTPUT_NORM, "weight"), {n_embd}); - model.output = ml.create_tensor(ctx_output_split, tn(LLM_TENSOR_OUTPUT, "weight"), {n_embd, n_vocab}); - } - - for (int i = 0; i < n_layer; ++i) { - ggml_context * ctx_layer = ctx_for_layer(i); - ggml_context * ctx_split = ctx_for_layer_split(i); - - auto & layer = model.layers[i]; - - layer.attn_norm = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_ATTN_NORM, "weight", i), {n_embd}); - - layer.wqkv = ml.create_tensor(ctx_split, tn(LLM_TENSOR_ATTN_QKV, "weight", i), {n_embd, n_embd + 2*n_embd_gqa}); - layer.wo = ml.create_tensor(ctx_split, tn(LLM_TENSOR_ATTN_OUT, "weight", i), {n_embd, n_embd}); - - layer.attn_out_norm = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_ATTN_OUT_NORM, "weight", i), {n_embd}); - - layer.ffn_gate_inp = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_FFN_GATE_INP, "weight", i), {n_embd, n_expert}); - layer.ffn_gate_exps = ml.create_tensor(ctx_split, tn(LLM_TENSOR_FFN_GATE_EXPS, "weight", i), {n_embd, n_ff, n_expert}); - layer.ffn_down_exps = ml.create_tensor(ctx_split, tn(LLM_TENSOR_FFN_DOWN_EXPS, "weight", i), {n_ff, n_embd, n_expert}); - layer.ffn_up_exps = ml.create_tensor(ctx_split, tn(LLM_TENSOR_FFN_UP_EXPS, "weight", i), {n_embd, n_ff, n_expert}); - } - } break; - case LLM_ARCH_BAICHUAN: - { - model.tok_embd = ml.create_tensor(ctx_input, tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}); - { - model.output_norm = ml.create_tensor(ctx_output, tn(LLM_TENSOR_OUTPUT_NORM, "weight"), {n_embd}); - model.output = ml.create_tensor(ctx_output_split, tn(LLM_TENSOR_OUTPUT, "weight"), {n_embd, n_vocab}); - } - - for (int i = 0; i < n_layer; ++i) { - ggml_context * ctx_layer = ctx_for_layer(i); - ggml_context * ctx_split = ctx_for_layer_split(i); - - auto & layer = model.layers[i]; - - layer.attn_norm = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_ATTN_NORM, "weight", i), {n_embd}); - - layer.wq = ml.create_tensor(ctx_split, tn(LLM_TENSOR_ATTN_Q, "weight", i), {n_embd, n_embd}); - layer.wk = ml.create_tensor(ctx_split, tn(LLM_TENSOR_ATTN_K, "weight", i), {n_embd, n_embd_gqa}); - layer.wv = ml.create_tensor(ctx_split, tn(LLM_TENSOR_ATTN_V, "weight", i), {n_embd, n_embd_gqa}); - layer.wo = ml.create_tensor(ctx_split, tn(LLM_TENSOR_ATTN_OUT, "weight", i), {n_embd, n_embd}); - - layer.ffn_norm = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_FFN_NORM, "weight", i), {n_embd}); - - layer.ffn_gate = ml.create_tensor(ctx_split, tn(LLM_TENSOR_FFN_GATE, "weight", i), {n_embd, n_ff}); - layer.ffn_down = ml.create_tensor(ctx_split, tn(LLM_TENSOR_FFN_DOWN, "weight", i), { n_ff, n_embd}); - layer.ffn_up = ml.create_tensor(ctx_split, tn(LLM_TENSOR_FFN_UP, "weight", i), {n_embd, n_ff}); - } - } break; - case LLM_ARCH_FALCON: - { - model.tok_embd = ml.create_tensor(ctx_input, tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}); - - // output - { - model.output_norm = ml.create_tensor(ctx_output, tn(LLM_TENSOR_OUTPUT_NORM, "weight"), {n_embd}); - model.output_norm_b = ml.create_tensor(ctx_output, tn(LLM_TENSOR_OUTPUT_NORM, "bias"), {n_embd}); - - model.output = ml.create_tensor(ctx_output_split, tn(LLM_TENSOR_OUTPUT, "weight"), {n_embd, n_vocab}, false); - if (!model.output) { - model.output = ml.create_tensor(ctx_output_split, tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}); // needs to be on GPU - ml.n_created--; // artificial tensor - ml.size_data += ggml_nbytes(model.output); - } - } - - for (int i = 0; i < n_layer; ++i) { - ggml_context * ctx_layer = ctx_for_layer(i); - ggml_context * ctx_split = ctx_for_layer_split(i); - - auto & layer = model.layers[i]; - - layer.attn_norm = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_ATTN_NORM, "weight", i), {n_embd}); - layer.attn_norm_b = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_ATTN_NORM, "bias", i), {n_embd}); - - layer.attn_norm_2 = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_ATTN_NORM_2, "weight", i), {n_embd}, false); - layer.attn_norm_2_b = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_ATTN_NORM_2, "bias", i), {n_embd}, false); - - layer.wqkv = ml.create_tensor(ctx_split, tn(LLM_TENSOR_ATTN_QKV, "weight", i), {n_embd, n_embd + 2*n_embd_gqa}); - layer.wo = ml.create_tensor(ctx_split, tn(LLM_TENSOR_ATTN_OUT, "weight", i), {n_embd, n_embd}); - - layer.ffn_down = ml.create_tensor(ctx_split, tn(LLM_TENSOR_FFN_DOWN, "weight", i), { n_ff, n_embd}); - layer.ffn_up = ml.create_tensor(ctx_split, tn(LLM_TENSOR_FFN_UP, "weight", i), {n_embd, n_ff}); - } - } break; - case LLM_ARCH_STARCODER: - { - model.tok_embd = ml.create_tensor(ctx_input, tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}); - model.pos_embd = ml.create_tensor(ctx_input, tn(LLM_TENSOR_POS_EMBD, "weight"), {n_embd, hparams.n_ctx_train}); - - // output - { - model.output_norm = ml.create_tensor(ctx_output, tn(LLM_TENSOR_OUTPUT_NORM, "weight"), {n_embd}); - model.output_norm_b = ml.create_tensor(ctx_output, tn(LLM_TENSOR_OUTPUT_NORM, "bias"), {n_embd}); - model.output = ml.create_tensor(ctx_output_split, tn(LLM_TENSOR_OUTPUT, "weight"), {n_embd, n_vocab}); - } - - for (int i = 0; i < n_layer; ++i) { - ggml_context * ctx_layer = ctx_for_layer(i); - ggml_context * ctx_split = ctx_for_layer_split(i); - - auto & layer = model.layers[i]; - - layer.attn_norm = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_ATTN_NORM, "weight", i), {n_embd}); - layer.attn_norm_b = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_ATTN_NORM, "bias", i), {n_embd}); - - layer.wqkv = ml.create_tensor(ctx_split, tn(LLM_TENSOR_ATTN_QKV, "weight", i), {n_embd, n_embd + 2*n_embd_gqa}); - layer.bqkv = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_ATTN_QKV, "bias", i), {n_embd + 2*n_embd_gqa}); - - layer.wo = ml.create_tensor(ctx_split, tn(LLM_TENSOR_ATTN_OUT, "weight", i), {n_embd, n_embd}); - layer.bo = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_ATTN_OUT, "bias", i), {n_embd}); - - layer.ffn_norm = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_FFN_NORM, "weight", i), {n_embd}); - layer.ffn_norm_b = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_FFN_NORM, "bias", i), {n_embd}); - - layer.ffn_down = ml.create_tensor(ctx_split, tn(LLM_TENSOR_FFN_DOWN, "weight", i), {n_ff, n_embd}); - layer.ffn_down_b = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_FFN_DOWN, "bias", i), {n_embd}); - - layer.ffn_up = ml.create_tensor(ctx_split, tn(LLM_TENSOR_FFN_UP, "weight", i), {n_embd, n_ff}); - layer.ffn_up_b = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_FFN_UP, "bias", i), {n_ff}); - } - } break; - case LLM_ARCH_PERSIMMON: - { - model.tok_embd = ml.create_tensor(ctx_input, tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}); - - { - model.output_norm = ml.create_tensor(ctx_output, tn(LLM_TENSOR_OUTPUT_NORM, "weight"), {n_embd}); - model.output_norm_b = ml.create_tensor(ctx_output, tn(LLM_TENSOR_OUTPUT_NORM, "bias"), {n_embd}); - model.output = ml.create_tensor(ctx_output_split, tn(LLM_TENSOR_OUTPUT, "weight"), {n_embd, n_vocab}); - } - - for (int i = 0; i < n_layer; ++i) { - ggml_context * ctx_layer = ctx_for_layer(i); - ggml_context * ctx_split = ctx_for_layer_split(i); - - auto & layer = model.layers[i]; - - layer.attn_norm = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_ATTN_NORM, "weight", i), {n_embd}); - layer.attn_norm_b = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_ATTN_NORM, "bias", i), {n_embd}); - - layer.wqkv = ml.create_tensor(ctx_split, tn(LLM_TENSOR_ATTN_QKV, "weight", i), {n_embd, n_embd + 2*n_embd_gqa}); - layer.bqkv = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_ATTN_QKV, "bias", i), {n_embd + 2*n_embd_gqa}); - - layer.wo = ml.create_tensor(ctx_split, tn(LLM_TENSOR_ATTN_OUT, "weight", i), {n_embd, n_embd}); - layer.bo = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_ATTN_OUT, "bias", i), {n_embd}); - - layer.ffn_down = ml.create_tensor(ctx_split, tn(LLM_TENSOR_FFN_DOWN, "weight", i), {n_ff, n_embd}); - layer.ffn_down_b = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_FFN_DOWN, "bias", i), {n_embd}); - - layer.ffn_up = ml.create_tensor(ctx_split, tn(LLM_TENSOR_FFN_UP, "weight", i), {n_embd, n_ff}); - layer.ffn_up_b = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_FFN_UP, "bias", i), {n_ff}); - - layer.ffn_norm = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_FFN_NORM, "weight", i), {n_embd}); - layer.ffn_norm_b = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_FFN_NORM, "bias", i), {n_embd}); - - layer.attn_q_norm = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_ATTN_Q_NORM, "weight", i), {64}); - layer.attn_q_norm_b = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_ATTN_Q_NORM, "bias", i), {64}); - - layer.attn_k_norm = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_ATTN_K_NORM, "weight", i), {64}); - layer.attn_k_norm_b = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_ATTN_K_NORM, "bias", i), {64}); - } - } break; - case LLM_ARCH_BERT: - case LLM_ARCH_NOMIC_BERT: - { - model.tok_embd = ml.create_tensor(ctx_input, tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}); - model.type_embd = ml.create_tensor(ctx_input, tn(LLM_TENSOR_TOKEN_TYPES, "weight"), {n_embd, n_vocab_type}); - if (model.arch == LLM_ARCH_BERT) { - model.pos_embd = ml.create_tensor(ctx_input, tn(LLM_TENSOR_POS_EMBD, "weight"), {n_embd, hparams.n_ctx_train}); - } - - model.tok_norm = ml.create_tensor(ctx_output, tn(LLM_TENSOR_TOKEN_EMBD_NORM, "weight"), {n_embd}); - model.tok_norm_b = ml.create_tensor(ctx_output, tn(LLM_TENSOR_TOKEN_EMBD_NORM, "bias"), {n_embd}); - - for (int i = 0; i < n_layer; ++i) { - ggml_context * ctx_layer = ctx_for_layer(i); - ggml_context * ctx_split = ctx_for_layer_split(i); - - auto & layer = model.layers[i]; - - if (model.arch == LLM_ARCH_BERT) { - layer.wq = ml.create_tensor(ctx_split, tn(LLM_TENSOR_ATTN_Q, "weight", i), {n_embd, n_embd}); - layer.bq = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_ATTN_Q, "bias", i), {n_embd}); - - layer.wk = ml.create_tensor(ctx_split, tn(LLM_TENSOR_ATTN_K, "weight", i), {n_embd, n_embd_gqa}); - layer.bk = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_ATTN_K, "bias", i), {n_embd_gqa}); - - layer.wv = ml.create_tensor(ctx_split, tn(LLM_TENSOR_ATTN_V, "weight", i), {n_embd, n_embd_gqa}); - layer.bv = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_ATTN_V, "bias", i), {n_embd_gqa}); - } else { - layer.wqkv = ml.create_tensor(ctx_split, tn(LLM_TENSOR_ATTN_QKV, "weight", i), {n_embd, n_embd + 2*n_embd_gqa}); - } - - layer.wo = ml.create_tensor(ctx_split, tn(LLM_TENSOR_ATTN_OUT, "weight", i), {n_embd, n_embd}); - - layer.attn_out_norm = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_ATTN_OUT_NORM, "weight", i), {n_embd}); - layer.attn_out_norm_b = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_ATTN_OUT_NORM, "bias", i), {n_embd}); - - layer.ffn_up = ml.create_tensor(ctx_split, tn(LLM_TENSOR_FFN_UP, "weight", i), {n_embd, n_ff}); - layer.ffn_down = ml.create_tensor(ctx_split, tn(LLM_TENSOR_FFN_DOWN, "weight", i), {n_ff, n_embd}); - - if (model.arch == LLM_ARCH_BERT) { - layer.bo = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_ATTN_OUT, "bias", i), {n_embd}); - layer.ffn_up_b = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_FFN_UP, "bias", i), {n_ff}); - - layer.ffn_down_b = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_FFN_DOWN, "bias", i), {n_embd}); - } else { - layer.ffn_gate = ml.create_tensor(ctx_split, tn(LLM_TENSOR_FFN_GATE, "weight", i), {n_embd, n_ff}); - } - - layer.layer_out_norm = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_LAYER_OUT_NORM, "weight", i), {n_embd}); - layer.layer_out_norm_b = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_LAYER_OUT_NORM, "bias", i), {n_embd}); - } - } break; - case LLM_ARCH_BLOOM: - { - model.tok_embd = ml.create_tensor(ctx_input, tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}); - model.tok_norm = ml.create_tensor(ctx_output, tn(LLM_TENSOR_TOKEN_EMBD_NORM, "weight"), {n_embd}); - model.tok_norm_b = ml.create_tensor(ctx_output, tn(LLM_TENSOR_TOKEN_EMBD_NORM, "bias"), {n_embd}); - - // output - { - model.output_norm = ml.create_tensor(ctx_output, tn(LLM_TENSOR_OUTPUT_NORM, "weight"), {n_embd}); - model.output_norm_b = ml.create_tensor(ctx_output, tn(LLM_TENSOR_OUTPUT_NORM, "bias"), {n_embd}); - model.output = ml.create_tensor(ctx_output_split, tn(LLM_TENSOR_OUTPUT, "weight"), {n_embd, n_vocab}); - } - - for (int i = 0; i < n_layer; ++i) { - ggml_context * ctx_layer = ctx_for_layer(i); - ggml_context * ctx_split = ctx_for_layer_split(i); - - auto & layer = model.layers[i]; - - layer.attn_norm = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_ATTN_NORM, "weight", i), {n_embd}); - layer.attn_norm_b = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_ATTN_NORM, "bias", i), {n_embd}); - - layer.wqkv = ml.create_tensor(ctx_split, tn(LLM_TENSOR_ATTN_QKV, "weight", i), {n_embd, n_embd + 2*n_embd_gqa}); - layer.bqkv = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_ATTN_QKV, "bias", i), {n_embd + 2*n_embd_gqa}); - - layer.wo = ml.create_tensor(ctx_split, tn(LLM_TENSOR_ATTN_OUT, "weight", i), {n_embd, n_embd}); - layer.bo = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_ATTN_OUT, "bias", i), {n_embd}); - - layer.ffn_norm = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_FFN_NORM, "weight", i), {n_embd}); - layer.ffn_norm_b = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_FFN_NORM, "bias", i), {n_embd}); - - layer.ffn_down = ml.create_tensor(ctx_split, tn(LLM_TENSOR_FFN_DOWN, "weight", i), {n_ff, n_embd}); - layer.ffn_down_b = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_FFN_DOWN, "bias", i), {n_embd}); - - layer.ffn_up = ml.create_tensor(ctx_split, tn(LLM_TENSOR_FFN_UP, "weight", i), {n_embd, n_ff}); - layer.ffn_up_b = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_FFN_UP, "bias", i), {n_ff}); - } - } break; - case LLM_ARCH_MPT: - { - model.tok_embd = ml.create_tensor(ctx_input, tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}); - model.pos_embd = ml.create_tensor(ctx_input, tn(LLM_TENSOR_POS_EMBD, "weight"), {n_embd, hparams.n_ctx_train}, false); - - // output - { - model.output_norm = ml.create_tensor(ctx_output, tn(LLM_TENSOR_OUTPUT_NORM, "weight"), {n_embd}); - model.output_norm_b = ml.create_tensor(ctx_output, tn(LLM_TENSOR_OUTPUT_NORM, "bias"), {n_embd}, false); - - model.output = ml.create_tensor(ctx_output_split, tn(LLM_TENSOR_OUTPUT, "weight"), {n_embd, n_vocab}, false); - if (!model.output) { - model.output = ml.create_tensor(ctx_output_split, tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}); // needs to be on GPU - ml.n_created--; // artificial tensor - ml.size_data += ggml_nbytes(model.output); - } - } - - for (int i = 0; i < n_layer; ++i) { - ggml_context * ctx_layer = ctx_for_layer(i); - ggml_context * ctx_split = ctx_for_layer_split(i); - - auto & layer = model.layers[i]; - - layer.attn_norm = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_ATTN_NORM, "weight", i), {n_embd}); - layer.attn_norm_b = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_ATTN_NORM, "bias", i), {n_embd}, false); - - layer.wqkv = ml.create_tensor(ctx_split, tn(LLM_TENSOR_ATTN_QKV, "weight", i), {n_embd, n_embd + 2*n_embd_gqa}); - layer.bqkv = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_ATTN_QKV, "bias", i), {n_embd + 2*n_embd_gqa}, false); - - layer.wo = ml.create_tensor(ctx_split, tn(LLM_TENSOR_ATTN_OUT, "weight", i), {n_embd, n_embd}); - layer.bo = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_ATTN_OUT, "bias", i), {n_embd}, false); - - layer.ffn_norm = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_FFN_NORM, "weight", i), {n_embd}); - layer.ffn_norm_b = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_FFN_NORM, "bias", i), {n_embd}, false); - - layer.ffn_down = ml.create_tensor(ctx_split, tn(LLM_TENSOR_FFN_DOWN, "weight", i), {n_ff, n_embd}); - layer.ffn_down_b = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_FFN_DOWN, "bias", i), {n_embd}, false); - - layer.ffn_up = ml.create_tensor(ctx_split, tn(LLM_TENSOR_FFN_UP, "weight", i), {n_embd, n_ff}); - layer.ffn_up_b = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_FFN_UP, "bias", i), {n_ff}, false); - - layer.attn_q_norm = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_ATTN_Q_NORM, "weight", i), {n_embd}, false); - layer.attn_q_norm_b = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_ATTN_Q_NORM, "bias", i), {n_embd}, false); - - layer.attn_k_norm = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_ATTN_K_NORM, "weight", i), {n_embd}, false); - layer.attn_k_norm_b = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_ATTN_K_NORM, "bias", i), {n_embd}, false); - - // AWQ ScaleActivation layer - layer.ffn_act = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_FFN_ACT, "scales", i), {n_ff}, false); - } - } break; - case LLM_ARCH_STABLELM: - { - model.tok_embd = ml.create_tensor(ctx_input, tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}); - - // output - { - model.output_norm_b = ml.create_tensor(ctx_output, tn(LLM_TENSOR_OUTPUT_NORM, "bias"), {n_embd}); - model.output_norm = ml.create_tensor(ctx_output, tn(LLM_TENSOR_OUTPUT_NORM, "weight"), {n_embd}); - model.output = ml.create_tensor(ctx_output_split, tn(LLM_TENSOR_OUTPUT, "weight"), {n_embd, n_vocab}); - } - - for (int i = 0; i < n_layer; ++i) { - ggml_context * ctx_layer = ctx_for_layer(i); - ggml_context * ctx_split = ctx_for_layer_split(i); - - auto & layer = model.layers[i]; - - layer.attn_norm = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_ATTN_NORM, "weight", i), {n_embd}); - layer.attn_norm_b = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_ATTN_NORM, "bias", i), {n_embd}); - - layer.wq = ml.create_tensor(ctx_split, tn(LLM_TENSOR_ATTN_Q, "weight", i), {n_embd, n_embd}); - layer.wk = ml.create_tensor(ctx_split, tn(LLM_TENSOR_ATTN_K, "weight", i), {n_embd, n_embd_gqa}); - layer.wv = ml.create_tensor(ctx_split, tn(LLM_TENSOR_ATTN_V, "weight", i), {n_embd, n_embd_gqa}); - layer.wo = ml.create_tensor(ctx_split, tn(LLM_TENSOR_ATTN_OUT, "weight", i), {n_embd, n_embd}); - - // optional bias tensors, present in Stable LM 2 1.6B - layer.bq = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_ATTN_Q, "bias", i), {n_embd}, false); - layer.bk = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_ATTN_K, "bias", i), {n_embd_gqa}, false); - layer.bv = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_ATTN_V, "bias", i), {n_embd_gqa}, false); - - // optional q and k layernorms, present in StableLM 2 12B - layer.attn_q_norm = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_ATTN_Q_NORM, "weight", i), {hparams.n_embd_head_k, hparams.n_head}, false); - layer.attn_k_norm = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_ATTN_K_NORM, "weight", i), {hparams.n_embd_head_k, hparams.n_head_kv}, false); - - // optional FFN norm, not present in StableLM 2 12B which uses parallel residual - layer.ffn_norm = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_FFN_NORM, "weight", i), {n_embd}, false); - layer.ffn_norm_b = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_FFN_NORM, "bias", i), {n_embd}, false); - - layer.ffn_gate = ml.create_tensor(ctx_split, tn(LLM_TENSOR_FFN_GATE, "weight", i), {n_embd, n_ff}); - layer.ffn_down = ml.create_tensor(ctx_split, tn(LLM_TENSOR_FFN_DOWN, "weight", i), { n_ff, n_embd}); - layer.ffn_up = ml.create_tensor(ctx_split, tn(LLM_TENSOR_FFN_UP, "weight", i), {n_embd, n_ff}); - } - } break; - case LLM_ARCH_QWEN: - { - model.tok_embd = ml.create_tensor(ctx_input, tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}); - - // output - { - model.output_norm = ml.create_tensor(ctx_output, tn(LLM_TENSOR_OUTPUT_NORM, "weight"), {n_embd}); - model.output = ml.create_tensor(ctx_output_split, tn(LLM_TENSOR_OUTPUT, "weight"), {n_embd, n_vocab}); - } - - for (int i = 0; i < n_layer; ++i) { - ggml_context * ctx_layer = ctx_for_layer(i); - ggml_context * ctx_split = ctx_for_layer_split(i); - - auto & layer = model.layers[i]; - - layer.attn_norm = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_ATTN_NORM, "weight", i), {n_embd}); - - layer.wqkv = ml.create_tensor(ctx_split, tn(LLM_TENSOR_ATTN_QKV, "weight", i), {n_embd, n_embd*3}); - layer.bqkv = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_ATTN_QKV, "bias", i), {n_embd*3}); - layer.wo = ml.create_tensor(ctx_split, tn(LLM_TENSOR_ATTN_OUT, "weight", i), {n_embd, n_embd}); - - layer.ffn_norm = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_FFN_NORM, "weight", i), {n_embd}); - - layer.ffn_gate = ml.create_tensor(ctx_split, tn(LLM_TENSOR_FFN_GATE, "weight", i), {n_embd, n_ff/2}); - layer.ffn_down = ml.create_tensor(ctx_split, tn(LLM_TENSOR_FFN_DOWN, "weight", i), {n_ff/2, n_embd}); - layer.ffn_up = ml.create_tensor(ctx_split, tn(LLM_TENSOR_FFN_UP, "weight", i), {n_embd, n_ff/2}); - } - } break; - case LLM_ARCH_QWEN2: - { - model.tok_embd = ml.create_tensor(ctx_input, tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}); - - // output - { - model.output_norm = ml.create_tensor(ctx_output, tn(LLM_TENSOR_OUTPUT_NORM, "weight"), {n_embd}); - model.output = ml.create_tensor(ctx_output_split, tn(LLM_TENSOR_OUTPUT, "weight"), {n_embd, n_vocab}, false); - // if output is NULL, init from the input tok embed - if (model.output == NULL) { - model.output = ml.create_tensor(ctx_output, tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}); - ml.n_created--; // artificial tensor - ml.size_data += ggml_nbytes(model.output); - } - } - - for (int i = 0; i < n_layer; ++i) { - ggml_context * ctx_layer = ctx_for_layer(i); - ggml_context * ctx_split = ctx_for_layer_split(i); - - auto & layer = model.layers[i]; - - layer.attn_norm = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_ATTN_NORM, "weight", i), {n_embd}); - - layer.wq = ml.create_tensor(ctx_split, tn(LLM_TENSOR_ATTN_Q, "weight", i), {n_embd, n_embd}); - layer.wk = ml.create_tensor(ctx_split, tn(LLM_TENSOR_ATTN_K, "weight", i), {n_embd, n_embd_gqa}); - layer.wv = ml.create_tensor(ctx_split, tn(LLM_TENSOR_ATTN_V, "weight", i), {n_embd, n_embd_gqa}); - layer.wo = ml.create_tensor(ctx_split, tn(LLM_TENSOR_ATTN_OUT, "weight", i), {n_embd, n_embd}); - - // optional bias tensors - layer.bq = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_ATTN_Q, "bias", i), {n_embd}); - layer.bk = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_ATTN_K, "bias", i), {n_embd_gqa}); - layer.bv = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_ATTN_V, "bias", i), {n_embd_gqa}); - - layer.ffn_norm = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_FFN_NORM, "weight", i), {n_embd}); - - layer.ffn_gate = ml.create_tensor(ctx_split, tn(LLM_TENSOR_FFN_GATE, "weight", i), {n_embd, n_ff}); - layer.ffn_down = ml.create_tensor(ctx_split, tn(LLM_TENSOR_FFN_DOWN, "weight", i), { n_ff, n_embd}); - layer.ffn_up = ml.create_tensor(ctx_split, tn(LLM_TENSOR_FFN_UP, "weight", i), {n_embd, n_ff}); - } - } break; - case LLM_ARCH_QWEN2MOE: - { - model.tok_embd = ml.create_tensor(ctx_input, tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}); - - // output - { - model.output_norm = ml.create_tensor(ctx_output, tn(LLM_TENSOR_OUTPUT_NORM, "weight"), {n_embd}); - model.output = ml.create_tensor(ctx_output_split, tn(LLM_TENSOR_OUTPUT, "weight"), {n_embd, n_vocab}); - } - - for (int i = 0; i < n_layer; ++i) { - ggml_context * ctx_layer = ctx_for_layer(i); - ggml_context * ctx_split = ctx_for_layer_split(i); - - auto & layer = model.layers[i]; - - layer.attn_norm = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_ATTN_NORM, "weight", i), {n_embd}); - - layer.wq = ml.create_tensor(ctx_split, tn(LLM_TENSOR_ATTN_Q, "weight", i), {n_embd, n_embd}); - layer.wk = ml.create_tensor(ctx_split, tn(LLM_TENSOR_ATTN_K, "weight", i), {n_embd, n_embd_gqa}); - layer.wv = ml.create_tensor(ctx_split, tn(LLM_TENSOR_ATTN_V, "weight", i), {n_embd, n_embd_gqa}); - layer.wo = ml.create_tensor(ctx_split, tn(LLM_TENSOR_ATTN_OUT, "weight", i), {n_embd, n_embd}); - - // optional bias tensors - layer.bq = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_ATTN_Q, "bias", i), {n_embd}); - layer.bk = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_ATTN_K, "bias", i), {n_embd_gqa}); - layer.bv = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_ATTN_V, "bias", i), {n_embd_gqa}); - - layer.ffn_norm = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_FFN_NORM, "weight", i), {n_embd}); - - layer.ffn_gate_inp = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_FFN_GATE_INP, "weight", i), {n_embd, n_expert}); - - GGML_ASSERT(hparams.n_expert > 0); - GGML_ASSERT(hparams.n_expert_used > 0); - - // MoE branch - auto n_ff_exp = n_ff / hparams.n_expert_used; - layer.ffn_gate_exps = ml.create_tensor(ctx_split, tn(LLM_TENSOR_FFN_GATE_EXPS, "weight", i), { n_embd, n_ff_exp, n_expert}); - layer.ffn_down_exps = ml.create_tensor(ctx_split, tn(LLM_TENSOR_FFN_DOWN_EXPS, "weight", i), {n_ff_exp, n_embd, n_expert}); - layer.ffn_up_exps = ml.create_tensor(ctx_split, tn(LLM_TENSOR_FFN_UP_EXPS, "weight", i), { n_embd, n_ff_exp, n_expert}); - - // Shared expert branch - layer.ffn_gate_inp_shexp = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_FFN_GATE_INP_SHEXP, "weight", i), {n_embd}); - layer.ffn_gate_shexp = ml.create_tensor(ctx_split, tn(LLM_TENSOR_FFN_GATE_SHEXP, "weight", i), {n_embd, n_ff}); - layer.ffn_down_shexp = ml.create_tensor(ctx_split, tn(LLM_TENSOR_FFN_DOWN_SHEXP, "weight", i), { n_ff, n_embd}); - layer.ffn_up_shexp = ml.create_tensor(ctx_split, tn(LLM_TENSOR_FFN_UP_SHEXP, "weight", i), {n_embd, n_ff}); - } - } break; - case LLM_ARCH_PHI2: - { - model.tok_embd = ml.create_tensor(ctx_input, tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}); - - // output - { - model.output_norm = ml.create_tensor(ctx_output, tn(LLM_TENSOR_OUTPUT_NORM, "weight"), {n_embd}); - model.output_norm_b = ml.create_tensor(ctx_output, tn(LLM_TENSOR_OUTPUT_NORM, "bias"), {n_embd}); - model.output = ml.create_tensor(ctx_output_split, tn(LLM_TENSOR_OUTPUT, "weight"), {n_embd, n_vocab}); - model.output_b = ml.create_tensor(ctx_output, tn(LLM_TENSOR_OUTPUT, "bias"), {n_vocab}); - } - - for (int i = 0; i < n_layer; ++i) { - ggml_context * ctx_layer = ctx_for_layer(i); - ggml_context * ctx_split = ctx_for_layer_split(i); - - auto & layer = model.layers[i]; - - layer.attn_norm = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_ATTN_NORM, "weight", i), {n_embd}); - layer.attn_norm_b = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_ATTN_NORM, "bias", i), {n_embd}); - - layer.wqkv = ml.create_tensor(ctx_split, tn(LLM_TENSOR_ATTN_QKV, "weight", i), {n_embd, n_embd + 2*n_embd_gqa}, false); - layer.bqkv = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_ATTN_QKV, "bias", i), {n_embd + 2*n_embd_gqa}, false); - - if (layer.wqkv == nullptr) { - layer.wq = ml.create_tensor(ctx_split, tn(LLM_TENSOR_ATTN_Q, "weight", i), {n_embd, n_embd}); - layer.bq = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_ATTN_Q, "bias", i), {n_embd}); - - layer.wk = ml.create_tensor(ctx_split, tn(LLM_TENSOR_ATTN_K, "weight", i), {n_embd, n_embd_gqa}); - layer.bk = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_ATTN_K, "bias", i), {n_embd_gqa}); - - layer.wv = ml.create_tensor(ctx_split, tn(LLM_TENSOR_ATTN_V, "weight", i), {n_embd, n_embd_gqa}); - layer.bv = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_ATTN_V, "bias", i), {n_embd_gqa}); - } - - layer.wo = ml.create_tensor(ctx_split, tn(LLM_TENSOR_ATTN_OUT, "weight", i), {n_embd, n_embd}); - layer.bo = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_ATTN_OUT, "bias", i), {n_embd}); - - layer.ffn_down = ml.create_tensor(ctx_split, tn(LLM_TENSOR_FFN_DOWN, "weight", i), {n_ff, n_embd}); - layer.ffn_down_b = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_FFN_DOWN, "bias", i), {n_embd}); - - layer.ffn_up = ml.create_tensor(ctx_split, tn(LLM_TENSOR_FFN_UP, "weight", i), {n_embd, n_ff}); - layer.ffn_up_b = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_FFN_UP, "bias", i), {n_ff}); - } - } break; - case LLM_ARCH_PHI3: - { - model.tok_embd = ml.create_tensor(ctx_input, tn(LLM_TENSOR_TOKEN_EMBD, "weight"), { n_embd, n_vocab }); - - // output - { - model.output_norm = ml.create_tensor(ctx_output, tn(LLM_TENSOR_OUTPUT_NORM, "weight"), { n_embd }); - model.output = ml.create_tensor(ctx_output_split, tn(LLM_TENSOR_OUTPUT, "weight"), { n_embd, n_vocab }); - } - - for (int i = 0; i < n_layer; ++i) { - ggml_context* ctx_layer = ctx_for_layer(i); - ggml_context* ctx_split = ctx_for_layer_split(i); - - auto& layer = model.layers[i]; - - layer.attn_norm = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_ATTN_NORM, "weight", i), { n_embd }); - - layer.wqkv = ml.create_tensor(ctx_split, tn(LLM_TENSOR_ATTN_QKV, "weight", i), { n_embd, n_embd + 2 * n_embd_gqa }, false); - layer.wo = ml.create_tensor(ctx_split, tn(LLM_TENSOR_ATTN_OUT, "weight", i), { n_embd, n_embd }); - - layer.ffn_norm = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_FFN_NORM, "weight", i), { n_embd }); - - layer.ffn_down = ml.create_tensor(ctx_split, tn(LLM_TENSOR_FFN_DOWN, "weight", i), { n_ff, n_embd }); - layer.ffn_up = ml.create_tensor(ctx_split, tn(LLM_TENSOR_FFN_UP, "weight", i), { n_embd, 2 * n_ff }); - } - } break; - case LLM_ARCH_PLAMO: - { - model.tok_embd = ml.create_tensor(ctx_input, tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}); - - // output - { - model.output_norm = ml.create_tensor(ctx_output, tn(LLM_TENSOR_OUTPUT_NORM, "weight"), {n_embd}); - model.output = ml.create_tensor(ctx_output_split, tn(LLM_TENSOR_OUTPUT, "weight"), {n_embd, n_vocab}); - } - - for (int i = 0; i < n_layer; ++i) { - ggml_context * ctx_layer = ctx_for_layer(i); - ggml_context * ctx_split = ctx_for_layer_split(i); - - auto & layer = model.layers[i]; - - layer.attn_norm = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_ATTN_NORM, "weight", i), {n_embd}); - - layer.wq = ml.create_tensor(ctx_split, tn(LLM_TENSOR_ATTN_Q, "weight", i), {n_embd, n_embd}); - layer.wk = ml.create_tensor(ctx_split, tn(LLM_TENSOR_ATTN_K, "weight", i), {n_embd, n_embd_gqa}); - layer.wv = ml.create_tensor(ctx_split, tn(LLM_TENSOR_ATTN_V, "weight", i), {n_embd, n_embd_gqa}); - layer.wo = ml.create_tensor(ctx_split, tn(LLM_TENSOR_ATTN_OUT, "weight", i), {n_embd, n_embd}); - - layer.ffn_gate = ml.create_tensor(ctx_split, tn(LLM_TENSOR_FFN_GATE, "weight", i), {n_embd, n_ff}); - layer.ffn_down = ml.create_tensor(ctx_split, tn(LLM_TENSOR_FFN_DOWN, "weight", i), { n_ff, n_embd}); - layer.ffn_up = ml.create_tensor(ctx_split, tn(LLM_TENSOR_FFN_UP, "weight", i), {n_embd, n_ff}); - } - } break; - case LLM_ARCH_GPT2: - { - model.tok_embd = ml.create_tensor(ctx_input, tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}); - model.pos_embd = ml.create_tensor(ctx_input, tn(LLM_TENSOR_POS_EMBD, "weight"), {n_embd, hparams.n_ctx_train}); - - // output - { - model.output_norm = ml.create_tensor(ctx_output, tn(LLM_TENSOR_OUTPUT_NORM, "weight"), {n_embd}); - model.output_norm_b = ml.create_tensor(ctx_output, tn(LLM_TENSOR_OUTPUT_NORM, "bias"), {n_embd}); - model.output = ml.create_tensor(ctx_output_split, tn(LLM_TENSOR_OUTPUT, "weight"), {n_embd, n_vocab}); - } - - for (int i = 0; i < n_layer; ++i) { - ggml_context * ctx_layer = ctx_for_layer(i); - ggml_context * ctx_split = ctx_for_layer_split(i); - - auto & layer = model.layers[i]; - - layer.attn_norm = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_ATTN_NORM, "weight", i), {n_embd}); - layer.attn_norm_b = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_ATTN_NORM, "bias", i), {n_embd}); - - layer.wqkv = ml.create_tensor(ctx_split, tn(LLM_TENSOR_ATTN_QKV, "weight", i), {n_embd, n_embd + 2*n_embd_gqa}); - layer.bqkv = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_ATTN_QKV, "bias", i), {n_embd + 2*n_embd_gqa}); - - layer.wo = ml.create_tensor(ctx_split, tn(LLM_TENSOR_ATTN_OUT, "weight", i), {n_embd, n_embd}); - layer.bo = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_ATTN_OUT, "bias", i), {n_embd}); - - layer.ffn_norm = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_FFN_NORM, "weight", i), {n_embd}); - layer.ffn_norm_b = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_FFN_NORM, "bias", i), {n_embd}); - - layer.ffn_down = ml.create_tensor(ctx_split, tn(LLM_TENSOR_FFN_DOWN, "weight", i), {n_ff, n_embd}); - layer.ffn_down_b = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_FFN_DOWN, "bias", i), {n_embd}); - - layer.ffn_up = ml.create_tensor(ctx_split, tn(LLM_TENSOR_FFN_UP, "weight", i), {n_embd, n_ff}); - layer.ffn_up_b = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_FFN_UP, "bias", i), {n_ff}); - } - } break; - case LLM_ARCH_CODESHELL: - { - model.tok_embd = ml.create_tensor(ctx_input, tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}); - - // output - { - model.output_norm = ml.create_tensor(ctx_output, tn(LLM_TENSOR_OUTPUT_NORM, "weight"), {n_embd}); - model.output_norm_b = ml.create_tensor(ctx_output, tn(LLM_TENSOR_OUTPUT_NORM, "bias"), {n_embd}); - model.output = ml.create_tensor(ctx_output_split, tn(LLM_TENSOR_OUTPUT, "weight"), {n_embd, n_vocab}); - } - - for (int i = 0; i < n_layer; ++i) { - ggml_context * ctx_layer = ctx_for_layer(i); - ggml_context * ctx_split = ctx_for_layer_split(i); - - auto & layer = model.layers[i]; - - layer.attn_norm = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_ATTN_NORM, "weight", i), {n_embd}); - layer.attn_norm_b = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_ATTN_NORM, "bias", i), {n_embd}); - - layer.wqkv = ml.create_tensor(ctx_split, tn(LLM_TENSOR_ATTN_QKV, "weight", i), {n_embd, n_embd + 2*n_embd_gqa}); - layer.bqkv = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_ATTN_QKV, "bias", i), {n_embd + 2*n_embd_gqa}); - - layer.wo = ml.create_tensor(ctx_split, tn(LLM_TENSOR_ATTN_OUT, "weight", i), {n_embd, n_embd}); - layer.bo = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_ATTN_OUT, "bias", i), {n_embd}); - - layer.ffn_norm = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_FFN_NORM, "weight", i), {n_embd}); - layer.ffn_norm_b = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_FFN_NORM, "bias", i), {n_embd}); - - layer.ffn_down = ml.create_tensor(ctx_split, tn(LLM_TENSOR_FFN_DOWN, "weight", i), {n_ff, n_embd}); - layer.ffn_down_b = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_FFN_DOWN, "bias", i), {n_embd}); - - layer.ffn_up = ml.create_tensor(ctx_split, tn(LLM_TENSOR_FFN_UP, "weight", i), {n_embd, n_ff}); - layer.ffn_up_b = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_FFN_UP, "bias", i), {n_ff}); - } - } break; - case LLM_ARCH_ORION: - { - model.tok_embd = ml.create_tensor(ctx_input, tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}); - { - model.output_norm = ml.create_tensor(ctx_output, tn(LLM_TENSOR_OUTPUT_NORM, "weight"), {n_embd}); - model.output_norm_b = ml.create_tensor(ctx_output, tn(LLM_TENSOR_OUTPUT_NORM, "bias"), {n_embd}); - model.output = ml.create_tensor(ctx_output_split, tn(LLM_TENSOR_OUTPUT, "weight"), {n_embd, n_vocab}); - } - for (int i = 0; i < n_layer; ++i) { - ggml_context * ctx_layer = ctx_for_layer(i); - ggml_context * ctx_split = ctx_for_layer_split(i); - - auto & layer = model.layers[i]; - - layer.attn_norm = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_ATTN_NORM, "weight", i), {n_embd}); - layer.attn_norm_b = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_ATTN_NORM, "bias", i), {n_embd}); - - layer.wq = ml.create_tensor(ctx_split, tn(LLM_TENSOR_ATTN_Q, "weight", i), {n_embd, n_embd}); - layer.wk = ml.create_tensor(ctx_split, tn(LLM_TENSOR_ATTN_K, "weight", i), {n_embd, n_embd_gqa}); - layer.wv = ml.create_tensor(ctx_split, tn(LLM_TENSOR_ATTN_V, "weight", i), {n_embd, n_embd_gqa}); - layer.wo = ml.create_tensor(ctx_split, tn(LLM_TENSOR_ATTN_OUT, "weight", i), {n_embd, n_embd}); - - layer.ffn_norm = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_FFN_NORM, "weight", i), {n_embd}); - layer.ffn_norm_b = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_FFN_NORM, "bias", i), {n_embd}); - - layer.ffn_gate = ml.create_tensor(ctx_split, tn(LLM_TENSOR_FFN_GATE, "weight", i), {n_embd, n_ff}); - layer.ffn_down = ml.create_tensor(ctx_split, tn(LLM_TENSOR_FFN_DOWN, "weight", i), { n_ff, n_embd}); - layer.ffn_up = ml.create_tensor(ctx_split, tn(LLM_TENSOR_FFN_UP, "weight", i), {n_embd, n_ff}); - } - } break; - case LLM_ARCH_INTERNLM2: - { - model.tok_embd = ml.create_tensor(ctx_input, tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}); - - // output - { - model.output_norm = ml.create_tensor(ctx_output, tn(LLM_TENSOR_OUTPUT_NORM, "weight"), {n_embd}); - model.output = ml.create_tensor(ctx_output_split, tn(LLM_TENSOR_OUTPUT, "weight"), {n_embd, n_vocab}); - } - - for (int i = 0; i < n_layer; ++i) { - ggml_context * ctx_layer = ctx_for_layer(i); - ggml_context * ctx_split = ctx_for_layer_split(i); - - auto & layer = model.layers[i]; - - layer.attn_norm = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_ATTN_NORM, "weight", i), {n_embd}); - // layer.wqkv = ml.create_tensor(ctx_split, tn(LLM_TENSOR_ATTN_QKV, "weight", i), {n_embd, n_embd + 2*n_embd_gqa}); - layer.wq = ml.create_tensor(ctx_split, tn(LLM_TENSOR_ATTN_Q, "weight", i), {n_embd, n_embd}); - layer.wk = ml.create_tensor(ctx_split, tn(LLM_TENSOR_ATTN_K, "weight", i), {n_embd, n_embd_gqa}); - layer.wv = ml.create_tensor(ctx_split, tn(LLM_TENSOR_ATTN_V, "weight", i), {n_embd, n_embd_gqa}); - - layer.wo = ml.create_tensor(ctx_split, tn(LLM_TENSOR_ATTN_OUT, "weight", i), {n_embd, n_embd}); - layer.ffn_norm = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_FFN_NORM, "weight", i), {n_embd}); - layer.ffn_gate = ml.create_tensor(ctx_split, tn(LLM_TENSOR_FFN_GATE, "weight", i), {n_embd, n_ff}); - layer.ffn_down = ml.create_tensor(ctx_split, tn(LLM_TENSOR_FFN_DOWN, "weight", i), { n_ff, n_embd}); - layer.ffn_up = ml.create_tensor(ctx_split, tn(LLM_TENSOR_FFN_UP, "weight", i), {n_embd, n_ff}); - } - } break; - case LLM_ARCH_GEMMA: - { - model.tok_embd = ml.create_tensor(ctx_input, tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}); - - // output - model.output_norm = ml.create_tensor(ctx_output, tn(LLM_TENSOR_OUTPUT_NORM, "weight"), {n_embd}); - model.output = ml.create_tensor(ctx_output, tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}); // same as tok_embd, duplicated to allow offloading - ml.n_created--; // artificial tensor - ml.size_data += ggml_nbytes(model.output); - - const int64_t n_ff = hparams.n_ff; - const int64_t n_embd_head_k = hparams.n_embd_head_k; - const int64_t n_embd_k_gqa = hparams.n_embd_k_gqa(); - const int64_t n_embd_v_gqa = hparams.n_embd_v_gqa(); - - for (uint32_t i = 0; i < n_layer; ++i) { - ggml_context * ctx_layer = ctx_for_layer(i); - ggml_context * ctx_split = ctx_for_layer_split(i); - - auto & layer = model.layers[i]; - - layer.attn_norm = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_ATTN_NORM, "weight", i), {n_embd}); - - layer.wq = ml.create_tensor(ctx_split, tn(LLM_TENSOR_ATTN_Q, "weight", i), {n_embd, n_embd_head_k * hparams.n_head}); - layer.wk = ml.create_tensor(ctx_split, tn(LLM_TENSOR_ATTN_K, "weight", i), {n_embd, n_embd_k_gqa}); - layer.wv = ml.create_tensor(ctx_split, tn(LLM_TENSOR_ATTN_V, "weight", i), {n_embd, n_embd_v_gqa}); - layer.wo = ml.create_tensor(ctx_split, tn(LLM_TENSOR_ATTN_OUT, "weight", i), {n_embd_head_k * hparams.n_head, n_embd}); - - layer.ffn_norm = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_FFN_NORM, "weight", i), {n_embd}); - layer.ffn_gate = ml.create_tensor(ctx_split, tn(LLM_TENSOR_FFN_GATE, "weight", i), {n_embd, n_ff}); - layer.ffn_up = ml.create_tensor(ctx_split, tn(LLM_TENSOR_FFN_UP, "weight", i), {n_embd, n_ff}); - layer.ffn_down = ml.create_tensor(ctx_split, tn(LLM_TENSOR_FFN_DOWN, "weight", i), { n_ff, n_embd}); - } - } break; - case LLM_ARCH_STARCODER2: - { - model.tok_embd = ml.create_tensor(ctx_input, tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}); - - // output - { - model.output_norm = ml.create_tensor(ctx_output, tn(LLM_TENSOR_OUTPUT_NORM, "weight"), {n_embd}); - model.output_norm_b = ml.create_tensor(ctx_output, tn(LLM_TENSOR_OUTPUT_NORM, "bias"), {n_embd}); - - model.output = ml.create_tensor(ctx_output_split, tn(LLM_TENSOR_OUTPUT, "weight"), {n_embd, n_vocab}, false); - // if output is NULL, init from the input tok embed - if (model.output == NULL) { - model.output = ml.create_tensor(ctx_output, tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}); - ml.n_created--; // artificial tensor - ml.size_data += ggml_nbytes(model.output); - } - - } - - for (int i = 0; i < n_layer; ++i) { - ggml_context * ctx_layer = ctx_for_layer(i); - ggml_context * ctx_split = ctx_for_layer_split(i); - - auto & layer = model.layers[i]; - - layer.attn_norm = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_ATTN_NORM, "weight", i), {n_embd}); - layer.attn_norm_b = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_ATTN_NORM, "bias", i), {n_embd}); - - layer.wq = ml.create_tensor(ctx_split, tn(LLM_TENSOR_ATTN_Q, "weight", i), {n_embd, n_embd}); - layer.wk = ml.create_tensor(ctx_split, tn(LLM_TENSOR_ATTN_K, "weight", i), {n_embd, n_embd_gqa}); - layer.wv = ml.create_tensor(ctx_split, tn(LLM_TENSOR_ATTN_V, "weight", i), {n_embd, n_embd_gqa}); - layer.wo = ml.create_tensor(ctx_split, tn(LLM_TENSOR_ATTN_OUT, "weight", i), {n_embd, n_embd}); - - // optional bias tensors - layer.bq = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_ATTN_Q, "bias", i), {n_embd}); - layer.bk = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_ATTN_K, "bias", i), {n_embd_gqa}); - layer.bv = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_ATTN_V, "bias", i), {n_embd_gqa}); - layer.bo = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_ATTN_OUT, "bias", i), {n_embd}); - - layer.ffn_norm = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_FFN_NORM, "weight", i), {n_embd}); - layer.ffn_norm_b = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_FFN_NORM, "bias", i), {n_embd}); - - layer.ffn_down = ml.create_tensor(ctx_split, tn(LLM_TENSOR_FFN_DOWN, "weight", i), { n_ff, n_embd}); - layer.ffn_up = ml.create_tensor(ctx_split, tn(LLM_TENSOR_FFN_UP, "weight", i), {n_embd, n_ff}); - - // optional bias tensors - layer.ffn_down_b = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_FFN_DOWN, "bias", i), {n_embd}); - layer.ffn_up_b = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_FFN_UP , "bias", i), { n_ff}); - } - } break; - case LLM_ARCH_MAMBA: - { - const int64_t d_conv = hparams.ssm_d_conv; - const int64_t d_inner = hparams.ssm_d_inner; - const int64_t d_state = hparams.ssm_d_state; - const int64_t dt_rank = hparams.ssm_dt_rank; - // only an expansion factor of 2 is supported for now - GGML_ASSERT(2 * n_embd == d_inner); - - model.tok_embd = ml.create_tensor(ctx_input, tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}); - - // output - { - model.output_norm = ml.create_tensor(ctx_output, tn(LLM_TENSOR_OUTPUT_NORM, "weight"), {n_embd}); - - model.output = ml.create_tensor(ctx_output_split, tn(LLM_TENSOR_OUTPUT, "weight"), {n_embd, n_vocab}, false); - // if output is NULL, init from the input tok embed, duplicated to allow offloading - if (model.output == NULL) { - model.output = ml.create_tensor(ctx_output_split, tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}); - ml.n_created--; // artificial tensor - ml.size_data += ggml_nbytes(model.output); - } - } - - for (int i = 0; i < n_layer; ++i) { - ggml_context * ctx_layer = ctx_for_layer(i); - ggml_context * ctx_split = ctx_for_layer_split(i); - - auto & layer = model.layers[i]; - - // norm - layer.attn_norm = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_ATTN_NORM, "weight", i), {n_embd}); - - layer.ssm_in = ml.create_tensor(ctx_split, tn(LLM_TENSOR_SSM_IN, "weight", i), {n_embd, 2*d_inner}); - - layer.ssm_conv1d = ml.create_tensor(ctx_split, tn(LLM_TENSOR_SSM_CONV1D, "weight", i), {d_conv, d_inner}); - layer.ssm_conv1d_b = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_SSM_CONV1D, "bias", i), {d_inner}); - - layer.ssm_x = ml.create_tensor(ctx_split, tn(LLM_TENSOR_SSM_X, "weight", i), {d_inner, dt_rank + 2*d_state}); - - layer.ssm_dt = ml.create_tensor(ctx_split, tn(LLM_TENSOR_SSM_DT, "weight", i), {dt_rank, d_inner}); - layer.ssm_dt_b = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_SSM_DT, "bias", i), {d_inner}); - - // no "weight" suffix for these - layer.ssm_a = ml.create_tensor(ctx_split, tn(LLM_TENSOR_SSM_A, i), {d_state, d_inner}); - layer.ssm_d = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_SSM_D, i), {d_inner}); - - // out_proj - layer.ssm_out = ml.create_tensor(ctx_split, tn(LLM_TENSOR_SSM_OUT, "weight", i), {d_inner, n_embd}); - } - } break; - case LLM_ARCH_XVERSE: - { - model.tok_embd = ml.create_tensor(ctx_input, tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}); - { - model.output_norm = ml.create_tensor(ctx_output, tn(LLM_TENSOR_OUTPUT_NORM, "weight"), {n_embd}); - model.output = ml.create_tensor(ctx_output_split, tn(LLM_TENSOR_OUTPUT, "weight"), {n_embd, n_vocab}); - } - for (int i = 0; i < n_layer; ++i) { - ggml_context * ctx_layer = ctx_for_layer(i); - ggml_context * ctx_split = ctx_for_layer_split(i); - auto & layer = model.layers[i]; - layer.attn_norm = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_ATTN_NORM, "weight", i), {n_embd}); - layer.wq = ml.create_tensor(ctx_split, tn(LLM_TENSOR_ATTN_Q, "weight", i), {n_embd, n_embd}); - layer.wk = ml.create_tensor(ctx_split, tn(LLM_TENSOR_ATTN_K, "weight", i), {n_embd, n_embd_gqa}); - layer.wv = ml.create_tensor(ctx_split, tn(LLM_TENSOR_ATTN_V, "weight", i), {n_embd, n_embd_gqa}); - layer.wo = ml.create_tensor(ctx_split, tn(LLM_TENSOR_ATTN_OUT, "weight", i), {n_embd, n_embd}); - layer.ffn_norm = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_FFN_NORM, "weight", i), {n_embd}); - layer.ffn_gate = ml.create_tensor(ctx_split, tn(LLM_TENSOR_FFN_GATE, "weight", i), {n_embd, n_ff}); - layer.ffn_down = ml.create_tensor(ctx_split, tn(LLM_TENSOR_FFN_DOWN, "weight", i), { n_ff, n_embd}); - layer.ffn_up = ml.create_tensor(ctx_split, tn(LLM_TENSOR_FFN_UP, "weight", i), {n_embd, n_ff}); - } - } break; - case LLM_ARCH_COMMAND_R: - { - model.tok_embd = ml.create_tensor(ctx_input, tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}); - - // output - { - model.output_norm = ml.create_tensor(ctx_output, tn(LLM_TENSOR_OUTPUT_NORM, "weight"), {n_embd}); - // init output from the input tok embed - model.output = ml.create_tensor(ctx_output, tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}); - ml.n_created--; // artificial tensor - ml.size_data += ggml_nbytes(model.output); - } - - for (int i = 0; i < n_layer; ++i) { - ggml_context * ctx_layer = ctx_for_layer(i); - ggml_context * ctx_split = ctx_for_layer_split(i); - - auto & layer = model.layers[i]; - - layer.attn_norm = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_ATTN_NORM, "weight", i), {n_embd}); - - if (n_layer >= 64){ - layer.attn_q_norm = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_ATTN_Q_NORM, "weight", i), {hparams.n_embd_head_k, hparams.n_head}); - layer.attn_k_norm = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_ATTN_K_NORM, "weight", i), {hparams.n_embd_head_k, hparams.n_head_kv}); - } - - layer.wq = ml.create_tensor(ctx_split, tn(LLM_TENSOR_ATTN_Q, "weight", i), {n_embd, n_embd}); - layer.wk = ml.create_tensor(ctx_split, tn(LLM_TENSOR_ATTN_K, "weight", i), {n_embd, n_embd_gqa}); - layer.wv = ml.create_tensor(ctx_split, tn(LLM_TENSOR_ATTN_V, "weight", i), {n_embd, n_embd_gqa}); - layer.wo = ml.create_tensor(ctx_split, tn(LLM_TENSOR_ATTN_OUT, "weight", i), {n_embd, n_embd}); - - layer.ffn_gate = ml.create_tensor(ctx_split, tn(LLM_TENSOR_FFN_GATE, "weight", i), {n_embd, n_ff}); - layer.ffn_down = ml.create_tensor(ctx_split, tn(LLM_TENSOR_FFN_DOWN, "weight", i), { n_ff, n_embd}); - layer.ffn_up = ml.create_tensor(ctx_split, tn(LLM_TENSOR_FFN_UP, "weight", i), {n_embd, n_ff}); - } - } break; - case LLM_ARCH_OLMO: // adapted from LLM_ARCH_LLAMA with norm params removed - { - model.tok_embd = ml.create_tensor(ctx_input, tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}); - - // output - { - model.output = ml.create_tensor(ctx_output_split, tn(LLM_TENSOR_OUTPUT, "weight"), {n_embd, n_vocab}, false); - // if output is NULL, init from the input tok embed - if (model.output == NULL) { - model.output = ml.create_tensor(ctx_output, tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}); - ml.n_created--; // artificial tensor - ml.size_data += ggml_nbytes(model.output); - } - } - - for (int i = 0; i < n_layer; ++i) { - ggml_context * ctx_split = ctx_for_layer_split(i); - - auto & layer = model.layers[i]; - - layer.wq = ml.create_tensor(ctx_split, tn(LLM_TENSOR_ATTN_Q, "weight", i), {n_embd, n_embd}); - layer.wk = ml.create_tensor(ctx_split, tn(LLM_TENSOR_ATTN_K, "weight", i), {n_embd, n_embd_gqa}); - layer.wv = ml.create_tensor(ctx_split, tn(LLM_TENSOR_ATTN_V, "weight", i), {n_embd, n_embd_gqa}); - layer.wo = ml.create_tensor(ctx_split, tn(LLM_TENSOR_ATTN_OUT, "weight", i), {n_embd, n_embd}); - - - layer.ffn_gate = ml.create_tensor(ctx_split, tn(LLM_TENSOR_FFN_GATE, "weight", i), {n_embd, n_ff}); - layer.ffn_down = ml.create_tensor(ctx_split, tn(LLM_TENSOR_FFN_DOWN, "weight", i), { n_ff, n_embd}); - layer.ffn_up = ml.create_tensor(ctx_split, tn(LLM_TENSOR_FFN_UP, "weight", i), {n_embd, n_ff}); - } - } break; - default: - throw std::runtime_error("unknown architecture"); - } - } - - ml.done_getting_tensors(); - - ml.init_mappings(true, use_mlock ? &model.mlock_mmaps : nullptr); - model.mappings.reserve(ml.mappings.size()); - - // create the backend buffers - std::vector> ctx_bufs; - ctx_bufs.reserve(ctx_map.size()); - - // Ensure we have enough capacity for the maximum backend buffer we will potentially create - size_t n_max_backend_buffer = ctx_map.size() * ml.files.size(); - model.bufs.reserve(n_max_backend_buffer); - - for (auto & it : ctx_map) { - ggml_backend_buffer_type_t buft = it.first; - ggml_context * ctx = it.second; - - llama_buf_map bufs; - bufs.reserve(n_max_backend_buffer); - - // only the mmap region containing the tensors in the model is mapped to the backend buffer - // this is important for metal with apple silicon: if the entire model could be mapped to a metal buffer, then we could just use metal for all layers - // this allows using partial offloading when the model size exceeds the metal buffer size, but not the RAM size - if (ml.use_mmap && use_mmap_buffer && buft == llama_default_buffer_type_cpu(true)) { - for (uint32_t idx = 0; idx < ml.files.size(); idx++) { - void * addr = nullptr; - size_t first, last; - ml.get_mapping_range(&first, &last, &addr, idx, ctx); - if (first >= last) { - continue; - } - ggml_backend_buffer_t buf = ggml_backend_cpu_buffer_from_ptr((char *) addr + first, last - first); - if (buf == nullptr) { - throw std::runtime_error("unable to allocate backend CPU buffer"); - } - model.bufs.push_back(buf); - bufs.emplace(idx, buf); -#ifdef GGML_USE_CUDA - if (n_layer >= n_gpu_layers) { - ggml_backend_cuda_register_host_buffer( - ggml_backend_buffer_get_base(buf), - ggml_backend_buffer_get_size(buf)); - } -#endif - } - } -#ifdef GGML_USE_METAL - else if (ml.use_mmap && use_mmap_buffer && buft == ggml_backend_metal_buffer_type()) { - for (uint32_t idx = 0; idx < ml.files.size(); idx++) { - const size_t max_size = ggml_get_max_tensor_size(ctx); - void * addr = nullptr; - size_t first, last; - ml.get_mapping_range(&first, &last, &addr, idx, ctx); - if (first >= last) { - continue; - } - ggml_backend_buffer_t buf = ggml_backend_metal_buffer_from_ptr((char *) addr + first, last - first, max_size); - if (buf == nullptr) { - throw std::runtime_error("unable to allocate backend metal buffer"); - } - model.bufs.push_back(buf); - bufs.emplace(idx, buf); - } - } -#endif - else { - ggml_backend_buffer_t buf = ggml_backend_alloc_ctx_tensors_from_buft(ctx, buft); - if (buf == nullptr) { - throw std::runtime_error("unable to allocate backend buffer"); - } - model.bufs.push_back(buf); - if (use_mlock && ggml_backend_buffer_is_host(buf)) { - model.mlock_bufs.emplace_back(new llama_mlock); - auto & mlock_buf = model.mlock_bufs.back(); - mlock_buf->init (ggml_backend_buffer_get_base(buf)); - mlock_buf->grow_to(ggml_backend_buffer_get_size(buf)); - } - for (uint32_t idx = 0; idx < ml.files.size(); idx++) { - bufs.emplace(idx, buf); - } - } - - if (bufs.empty()) { - throw std::runtime_error("failed to allocate buffer"); - } - - for (auto & buf : bufs) { - // indicate that this buffer contains weights - // this is used by ggml_backend_sched to improve op scheduling -> ops that use a weight are preferably scheduled to the backend that contains the weight - ggml_backend_buffer_set_usage(buf.second, GGML_BACKEND_BUFFER_USAGE_WEIGHTS); - } - - ctx_bufs.emplace_back(ctx, bufs); - } - - if (llama_supports_gpu_offload()) { - const int n_gpu = std::min(n_gpu_layers, int(hparams.n_layer)); - - LLAMA_LOG_INFO("%s: offloading %d repeating layers to GPU\n", __func__, n_gpu); - if (n_gpu_layers > (int) hparams.n_layer) { - LLAMA_LOG_INFO("%s: offloading non-repeating layers to GPU\n", __func__); - } - - const int max_backend_supported_layers = hparams.n_layer + 1; - const int max_offloadable_layers = hparams.n_layer + 1; - - LLAMA_LOG_INFO("%s: offloaded %d/%d layers to GPU\n", __func__, std::min(n_gpu_layers, max_offloadable_layers), max_backend_supported_layers); - } - - // print memory requirements - for (ggml_backend_buffer_t buf : model.bufs) { - LLAMA_LOG_INFO("%s: %10s buffer size = %8.2f MiB\n", __func__, ggml_backend_buffer_name(buf), ggml_backend_buffer_get_size(buf) / 1024.0 / 1024.0); - } - - // populate tensors_by_name - for (ggml_context * ctx : model.ctxs) { - for (auto * cur = ggml_get_first_tensor(ctx); cur != NULL; cur = ggml_get_next_tensor(ctx, cur)) { - model.tensors_by_name.emplace_back(ggml_get_name(cur), cur); - } - } - - // load tensor data - for (auto & it : ctx_bufs) { - ggml_context * ctx = it.first; - auto & bufs = it.second; - if (!ml.load_all_data(ctx, bufs, use_mlock ? &model.mlock_mmaps : NULL, progress_callback, progress_callback_user_data)) { - return false; - } - } - - if (use_mmap_buffer) { - for (auto & mapping : ml.mappings) { - model.mappings.emplace_back(std::move(mapping)); - } - } - - // loading time will be recalculate after the first eval, so - // we take page faults deferred by mmap() into consideration - model.t_load_us = ggml_time_us() - model.t_start_us; - return true; -} - -// Returns 0 on success, -1 on error, and -2 on cancellation via llama_progress_callback -static int llama_model_load(const std::string & fname, llama_model & model, llama_model_params & params) { - try { - llama_model_loader ml(fname, params.use_mmap, params.check_tensors, params.kv_overrides); - - model.hparams.vocab_only = params.vocab_only; - - try { - llm_load_arch(ml, model); - } catch(const std::exception & e) { - throw std::runtime_error("error loading model architecture: " + std::string(e.what())); - } - try { - llm_load_hparams(ml, model); - } catch(const std::exception & e) { - throw std::runtime_error("error loading model hyperparameters: " + std::string(e.what())); - } - try { - llm_load_vocab(ml, model); - } catch(const std::exception & e) { - throw std::runtime_error("error loading model vocabulary: " + std::string(e.what())); - } - - llm_load_print_meta(ml, model); - - if (model.vocab.type != LLAMA_VOCAB_TYPE_NONE && - model.hparams.n_vocab != model.vocab.id_to_token.size()) { - throw std::runtime_error("vocab size mismatch"); - } - - if (params.vocab_only) { - LLAMA_LOG_INFO("%s: vocab only - skipping tensors\n", __func__); - return 0; - } - -#ifdef GGML_USE_KOMPUTE - if (params.n_gpu_layers > 0 && ( - !(model.arch == LLM_ARCH_LLAMA || model.arch == LLM_ARCH_FALCON) - || !( - model.ftype == LLAMA_FTYPE_ALL_F32 || - model.ftype == LLAMA_FTYPE_MOSTLY_F16 || - model.ftype == LLAMA_FTYPE_MOSTLY_Q4_0 || - model.ftype == LLAMA_FTYPE_MOSTLY_Q4_1 - ) - )) { - // TODO(cebtenzzre): propagate this error outside of llama_load_model_from_file - LLAMA_LOG_WARN("%s: disabling Kompute due to unsupported model arch or quantization\n", __func__); - params.n_gpu_layers = 0; - } -#endif - -#ifdef GGML_USE_SYCL - if (params.split_mode == LLAMA_SPLIT_MODE_NONE) { - ggml_backend_sycl_set_single_device_mode(params.main_gpu); - //SYCL use device index (0, 1, 2) directly, uer input device id, then convert to device index. - params.main_gpu = ggml_backend_sycl_get_device_index(params.main_gpu); - } else { - ggml_backend_sycl_set_mul_device_mode(); - } -#endif - - if (!llm_load_tensors( - ml, model, params.n_gpu_layers, params.split_mode, params.main_gpu, params.tensor_split, params.use_mlock, - params.progress_callback, params.progress_callback_user_data - )) { - return -2; - } - } catch (const std::exception & err) { - LLAMA_LOG_ERROR("%s: error loading model: %s\n", __func__, err.what()); - return -1; - } - - return 0; -} - -// -// llm_build -// - -using llm_build_cb = std::function; - -enum llm_ffn_op_type { - LLM_FFN_SILU, - LLM_FFN_GELU, - LLM_FFN_RELU, - LLM_FFN_RELU_SQR, -}; - -enum llm_ffn_gate_type { - LLM_FFN_SEQ, - LLM_FFN_PAR, // ffn_gate is parallel to ffn_up -}; - -enum llm_norm_type { - LLM_NORM, - LLM_NORM_RMS, -}; - -static struct ggml_tensor * llm_build_inp_embd( - struct ggml_context * ctx, - struct llama_context & lctx, - const llama_hparams & hparams, - const llama_batch & batch, - struct ggml_tensor * tok_embd, - const llm_build_cb & cb) { - const int64_t n_embd = hparams.n_embd; - - struct ggml_tensor * inpL; - - if (batch.token) { - lctx.inp_tokens = ggml_new_tensor_1d(ctx, GGML_TYPE_I32, batch.n_tokens); - cb(lctx.inp_tokens, "inp_tokens", -1); - ggml_set_input(lctx.inp_tokens); - - inpL = ggml_get_rows(ctx, tok_embd, lctx.inp_tokens); - } else { -#ifdef GGML_USE_MPI - GGML_ASSERT(false && "not implemented"); -#endif - lctx.inp_embd = ggml_new_tensor_2d(ctx, GGML_TYPE_F32, n_embd, batch.n_tokens); - inpL = lctx.inp_embd; - ggml_set_input(lctx.inp_embd); - } - - cb(inpL, "inp_embd", -1); - - return inpL; -} - -static void llm_build_kv_store( - struct ggml_context * ctx, - const llama_hparams & hparams, - const llama_kv_cache & kv, - struct ggml_cgraph * graph, - struct ggml_tensor * k_cur, - struct ggml_tensor * v_cur, - int64_t n_ctx, - int32_t n_tokens, - int32_t kv_head, - const llm_build_cb & cb, - int64_t il) { - const int64_t n_embd_k_gqa = hparams.n_embd_k_gqa(); - const int64_t n_embd_v_gqa = hparams.n_embd_v_gqa(); - - GGML_ASSERT(kv.size == n_ctx); - - // compute the transposed [n_tokens, n_embd] V matrix - assert(v_cur->ne[0] == n_embd_v_gqa && v_cur->ne[1] == n_tokens); - struct ggml_tensor * v_cur_t = ggml_transpose(ctx, v_cur); - cb(v_cur_t, "v_cur_t", il); - - struct ggml_tensor * k_cache_view = ggml_view_1d(ctx, kv.k_l[il], n_tokens*n_embd_k_gqa, - (ggml_row_size(kv.k_l[il]->type, n_embd_k_gqa))*kv_head); - cb(k_cache_view, "k_cache_view", il); - - struct ggml_tensor * v_cache_view = ggml_view_2d(ctx, kv.v_l[il], n_tokens, n_embd_v_gqa, - ( n_ctx)*ggml_element_size(kv.v_l[il]), - (kv_head)*ggml_element_size(kv.v_l[il])); - cb(v_cache_view, "v_cache_view", il); - - // important: storing RoPE-ed version of K in the KV cache! - ggml_build_forward_expand(graph, ggml_cpy(ctx, k_cur, k_cache_view)); - ggml_build_forward_expand(graph, ggml_cpy(ctx, v_cur_t, v_cache_view)); -} - -static struct ggml_tensor * llm_build_norm( - struct ggml_context * ctx, - struct ggml_tensor * cur, - const llama_hparams & hparams, - struct ggml_tensor * mw, - struct ggml_tensor * mb, - llm_norm_type type, - const llm_build_cb & cb, - int il) { - switch (type) { - case LLM_NORM: cur = ggml_norm (ctx, cur, hparams.f_norm_eps); break; - case LLM_NORM_RMS: cur = ggml_rms_norm(ctx, cur, hparams.f_norm_rms_eps); break; - } - - if (mw || mb) { - cb(cur, "norm", il); - } - - if (mw) { - cur = ggml_mul(ctx, cur, mw); - if (mb) { - cb(cur, "norm_w", il); - } - } - - if (mb) { - cur = ggml_add(ctx, cur, mb); - } - - return cur; -} - -static struct ggml_tensor * llm_build_ffn( - struct ggml_context * ctx, - struct ggml_tensor * cur, - struct ggml_tensor * up, - struct ggml_tensor * up_b, - struct ggml_tensor * gate, - struct ggml_tensor * gate_b, - struct ggml_tensor * down, - struct ggml_tensor * down_b, - struct ggml_tensor * act_scales, - llm_ffn_op_type type_op, - llm_ffn_gate_type type_gate, - const llm_build_cb & cb, - int il) { - struct ggml_tensor * tmp = ggml_mul_mat(ctx, up, cur); - cb(tmp, "ffn_up", il); - - if (up_b) { - tmp = ggml_add(ctx, tmp, up_b); - cb(tmp, "ffn_up_b", il); - } - - if (gate) { - switch (type_gate) { - case LLM_FFN_SEQ: - { - cur = ggml_mul_mat(ctx, gate, tmp); - cb(cur, "ffn_gate", il); - } break; - case LLM_FFN_PAR: - { - cur = ggml_mul_mat(ctx, gate, cur); - cb(cur, "ffn_gate", il); - } break; - } - - if (gate_b) { - cur = ggml_add(ctx, cur, gate_b); - cb(cur, "ffn_gate_b", il); - } - } else { - cur = tmp; - } - - switch (type_op) { - case LLM_FFN_SILU: - { - cur = ggml_silu(ctx, cur); - cb(cur, "ffn_silu", il); - } break; - case LLM_FFN_GELU: - { - cur = ggml_gelu(ctx, cur); - cb(cur, "ffn_gelu", il); - if (act_scales != NULL) { - cur = ggml_div(ctx, cur, act_scales); - cb(cur, "ffn_act", il); - } - } break; - case LLM_FFN_RELU: - { - cur = ggml_relu(ctx, cur); - cb(cur, "ffn_relu", il); - } break; - case LLM_FFN_RELU_SQR: - { - cur = ggml_relu(ctx, cur); - cb(cur, "ffn_relu", il); - - cur = ggml_sqr(ctx, cur); - cb(cur, "ffn_sqr(relu)", il); - } break; - } - - if (type_gate == LLM_FFN_PAR) { - cur = ggml_mul(ctx, cur, tmp); - cb(cur, "ffn_gate_par", il); - } - - cur = ggml_mul_mat(ctx, down, cur); - if (down_b) { - cb(cur, "ffn_down", il); - } - - if (down_b) { - cur = ggml_add(ctx, cur, down_b); - } - - return cur; -} - -static struct ggml_tensor * llm_build_moe_ffn( - struct ggml_context * ctx, - struct ggml_tensor * cur, - struct ggml_tensor * gate_inp, - struct ggml_tensor * up_exps, - struct ggml_tensor * gate_exps, - struct ggml_tensor * down_exps, - int64_t n_expert, - int64_t n_expert_used, - llm_ffn_op_type type_op, - bool norm_w, - const llm_build_cb & cb, - int il) { - int64_t n_embd = cur->ne[0]; - int64_t n_tokens = cur->ne[1]; - - ggml_tensor * logits = ggml_mul_mat(ctx, gate_inp, cur); // [n_expert, n_tokens] - cb(logits, "ffn_moe_logits", il); - - ggml_tensor * probs = ggml_soft_max(ctx, logits); // [n_expert, n_tokens] - cb(probs, "ffn_moe_probs", il); - - // select experts - ggml_tensor * selected_experts = ggml_top_k(ctx, probs, n_expert_used); // [n_expert_used, n_tokens] - cb(selected_experts->src[0], "ffn_moe_argsort", il); - cb(selected_experts, "ffn_moe_topk", il); - - ggml_tensor * weights = ggml_get_rows(ctx, - ggml_reshape_3d(ctx, probs, 1, n_expert, n_tokens), selected_experts); // [1, n_expert_used, n_tokens] - cb(weights, "ffn_moe_weights", il); - - if (norm_w) { - weights = ggml_reshape_2d(ctx, weights, n_expert_used, n_tokens); - - ggml_tensor * weights_sum = ggml_sum_rows(ctx, weights); // [1, n_tokens] - cb(weights_sum, "ffn_moe_weights_sum", il); - - weights = ggml_div(ctx, weights, weights_sum); // [n_expert_used, n_tokens] - cb(weights, "ffn_moe_weights_norm", il); - - weights = ggml_reshape_3d(ctx, weights, 1, n_expert_used, n_tokens); - } - - cur = ggml_reshape_3d(ctx, cur, n_embd, 1, n_tokens); - ggml_tensor * up = ggml_mul_mat_id(ctx, up_exps, cur, selected_experts); // [n_ff, n_expert_used, n_tokens] - cb(up, "ffn_moe_up", il); - - ggml_tensor * gate = ggml_mul_mat_id(ctx, gate_exps, cur, selected_experts); // [n_ff, n_expert_used, n_tokens] - cb(gate, "ffn_moe_gate", il); - - switch (type_op) { - case LLM_FFN_SILU: - { - gate = ggml_silu(ctx, gate); - cb(gate, "ffn_moe_silu", il); - } break; - case LLM_FFN_GELU: - { - gate = ggml_gelu(ctx, gate); - cb(gate, "ffn_moe_gelu", il); - } break; - default: - GGML_ASSERT(false); - } - - ggml_tensor * par = ggml_mul(ctx, up, gate); // [n_ff, n_expert_used, n_tokens] - cb(par, "ffn_moe_gate_par", il); - - ggml_tensor * experts = ggml_mul_mat_id(ctx, down_exps, par, selected_experts); // [n_embd, n_expert_used, n_tokens] - cb(experts, "ffn_moe_down", il); - - experts = ggml_mul(ctx, experts, weights); - - // aggregate experts - ggml_tensor * moe_out = nullptr; - for (int i = 0; i < n_expert_used; ++i) { - ggml_tensor * cur_expert = ggml_view_2d(ctx, experts, n_embd, n_tokens, - experts->nb[2], i*experts->nb[1]); - - if (i == 0) { - moe_out = cur_expert; - } else { - moe_out = ggml_add(ctx, moe_out, cur_expert); - } - } - - if (n_expert_used == 1) { - // avoid returning a non-contiguous tensor - moe_out = ggml_cont(ctx, moe_out); - } - - return moe_out; -} - -// if max_alibi_bias > 0 then apply ALiBi -static struct ggml_tensor * llm_build_kqv( - struct ggml_context * ctx, - const llama_model & model, - const llama_hparams & hparams, - const llama_kv_cache & kv, - struct ggml_cgraph * graph, - struct ggml_tensor * wo, - struct ggml_tensor * wo_b, - struct ggml_tensor * q_cur, - struct ggml_tensor * kq_mask, - struct ggml_tensor * kq_pos, - int64_t n_ctx, - int32_t n_tokens, - int32_t n_kv, - float kq_scale, - const llm_build_cb & cb, - int il) { - const int64_t n_head = hparams.n_head; - const int64_t n_head_kv = hparams.n_head_kv; - const int64_t n_embd_head_k = hparams.n_embd_head_k; - const int64_t n_embd_k_gqa = hparams.n_embd_k_gqa(); - const int64_t n_embd_head_v = hparams.n_embd_head_v; - - struct ggml_tensor * q = ggml_permute(ctx, q_cur, 0, 2, 1, 3); - cb(q, "q", il); - - struct ggml_tensor * k = - ggml_view_3d(ctx, kv.k_l[il], - n_embd_head_k, n_kv, n_head_kv, - ggml_row_size(kv.k_l[il]->type, n_embd_k_gqa), - ggml_row_size(kv.k_l[il]->type, n_embd_head_k), - 0); - cb(k, "k", il); - - struct ggml_tensor * kq = ggml_mul_mat(ctx, k, q); - cb(kq, "kq", il); - - if (model.arch == LLM_ARCH_PHI2 || model.arch == LLM_ARCH_PHI3) { - // for this arch, we need to perform the KQ multiplication with F32 precision, otherwise we get NaNs - // ref: https://github.com/ggerganov/llama.cpp/pull/4490#issuecomment-1859055847 - ggml_mul_mat_set_prec(kq, GGML_PREC_F32); - } - - if (model.arch == LLM_ARCH_GROK) { - // need to do the following: - // multiply by attn_output_multiplyer of 0.08838834764831845 - // and then : - // kq = 30 * tanh(kq / 30) - // before the softmax below - - //try from phi2 - //ggml_mul_mat_set_prec(kq, GGML_PREC_F32); - - kq = ggml_tanh(ctx, ggml_scale(ctx, kq, 0.08838834764831845f/30.0f)); - kq = ggml_scale(ctx, kq, 30); - } - -#if defined(GGML_USE_KOMPUTE) -#pragma message("TODO: ALiBi support in ggml_soft_max_ext is not implemented for Kompute") -#pragma message(" Falling back to ggml_alibi(). Will become an error in Mar 2024") -#pragma message("ref: https://github.com/ggerganov/llama.cpp/pull/5488") - if (hparams.f_max_alibi_bias > 0.0f) { - kq = ggml_scale(ctx, kq, kq_scale); - cb(kq, "kq_scaled", il); - - kq = ggml_alibi(ctx, kq, /*n_past*/ 0, n_head, hparams.f_max_alibi_bias); - cb(kq, "kq_scaled_alibi", il); - - kq = ggml_add(ctx, kq, kq_mask); - cb(kq, "kq_masked", il); - - kq = ggml_soft_max(ctx, kq); - cb(kq, "kq_soft_max", il); - } else -#endif - { - kq = ggml_soft_max_ext(ctx, kq, kq_mask, kq_pos, kq_scale, hparams.f_max_alibi_bias); - cb(kq, "kq_soft_max_ext", il); - } - - GGML_ASSERT(kv.size == n_ctx); - - // split cached v into n_head heads - struct ggml_tensor * v = - ggml_view_3d(ctx, kv.v_l[il], - n_kv, n_embd_head_v, n_head_kv, - ggml_element_size(kv.v_l[il])*n_ctx, - ggml_element_size(kv.v_l[il])*n_ctx*n_embd_head_v, - 0); - cb(v, "v", il); - - struct ggml_tensor * kqv = ggml_mul_mat(ctx, v, kq); - cb(kqv, "kqv", il); - - struct ggml_tensor * kqv_merged = ggml_permute(ctx, kqv, 0, 2, 1, 3); - cb(kqv_merged, "kqv_merged", il); - - struct ggml_tensor * cur = ggml_cont_2d(ctx, kqv_merged, n_embd_head_k*n_head, n_tokens); - cb(cur, "kqv_merged_cont", il); - - ggml_build_forward_expand(graph, cur); - - cur = ggml_mul_mat(ctx, wo, cur); - if (wo_b) { - cb(cur, "kqv_wo", il); - } - - if (wo_b) { - cur = ggml_add(ctx, cur, wo_b); - } - - return cur; -} - -static struct ggml_tensor * llm_build_kv( - struct ggml_context * ctx, - const llama_model & model, - const llama_hparams & hparams, - const llama_kv_cache & kv, - struct ggml_cgraph * graph, - struct ggml_tensor * wo, - struct ggml_tensor * wo_b, - struct ggml_tensor * k_cur, - struct ggml_tensor * v_cur, - struct ggml_tensor * q_cur, - struct ggml_tensor * kq_mask, - struct ggml_tensor * kq_pos, - int64_t n_ctx, - int32_t n_tokens, - int32_t kv_head, - int32_t n_kv, - float kq_scale, - const llm_build_cb & cb, - int il) { - - // these nodes are added to the graph together so that they are not reordered - // by doing so, the number of splits in the graph is reduced - ggml_build_forward_expand(graph, q_cur); - ggml_build_forward_expand(graph, k_cur); - ggml_build_forward_expand(graph, v_cur); - - llm_build_kv_store(ctx, hparams, kv, graph, k_cur, v_cur, n_ctx, n_tokens, kv_head, cb, il); - - struct ggml_tensor * cur; - - cur = llm_build_kqv(ctx, model, hparams, kv, graph, wo, wo_b, - q_cur, kq_mask, kq_pos, n_ctx, n_tokens, n_kv, kq_scale, cb, il); - cb(cur, "kqv_out", il); - - return cur; -} - -struct llm_build_context { - const llama_model & model; - llama_context & lctx; - const llama_hparams & hparams; - const llama_cparams & cparams; - const llama_batch & batch; - const llama_kv_cache & kv_self; - - const int64_t n_embd; - const int64_t n_layer; - const int64_t n_rot; - const int64_t n_ctx; // user-specified context size (can be different from n_ctx_train) - const int64_t n_head; - const int64_t n_head_kv; - const int64_t n_embd_head_k; - const int64_t n_embd_k_gqa; - const int64_t n_embd_head_v; - const int64_t n_embd_v_gqa; - const int64_t n_expert; - const int64_t n_expert_used; - - const float freq_base; - const float freq_scale; - const float ext_factor; - const float attn_factor; - const float beta_fast; - const float beta_slow; - const float norm_eps; - const float norm_rms_eps; - - const int32_t n_tokens; - const int32_t n_kv; // size of KV cache to consider (n_kv <= kv_self.size) - const int32_t n_outputs; - const int32_t kv_head; // index of where we store new KV data in the cache - const int32_t n_orig_ctx; - - const enum llama_pooling_type pooling_type; - const enum llama_rope_type rope_type; - - const llm_build_cb & cb; - - std::vector & buf_compute_meta; - - struct ggml_context * ctx0 = nullptr; - - // TODO: consider making the entire interface noexcept - llm_build_context( - llama_context & lctx, - const llama_batch & batch, - const llm_build_cb & cb, - bool worst_case) : - model (lctx.model), - lctx (lctx), - hparams (model.hparams), - cparams (lctx.cparams), - batch (batch), - kv_self (lctx.kv_self), - n_embd (hparams.n_embd), - n_layer (hparams.n_layer), - n_rot (hparams.n_rot), - n_ctx (cparams.n_ctx), - n_head (hparams.n_head), - n_head_kv (hparams.n_head_kv), - n_embd_head_k (hparams.n_embd_head_k), - n_embd_k_gqa (hparams.n_embd_k_gqa()), - n_embd_head_v (hparams.n_embd_head_v), - n_embd_v_gqa (hparams.n_embd_v_gqa()), - n_expert (hparams.n_expert), - n_expert_used (hparams.n_expert_used), - freq_base (cparams.rope_freq_base), - freq_scale (cparams.rope_freq_scale), - ext_factor (cparams.yarn_ext_factor), - attn_factor (cparams.yarn_attn_factor), - beta_fast (cparams.yarn_beta_fast), - beta_slow (cparams.yarn_beta_slow), - norm_eps (hparams.f_norm_eps), - norm_rms_eps (hparams.f_norm_rms_eps), - n_tokens (batch.n_tokens), - n_kv (worst_case ? kv_self.size : kv_self.n), - n_outputs (worst_case ? n_tokens : lctx.n_outputs), - kv_head (worst_case ? (kv_self.recurrent ? 0 : kv_self.size - n_tokens) : kv_self.head), - n_orig_ctx (cparams.n_yarn_orig_ctx), - pooling_type (cparams.pooling_type), - rope_type (hparams.rope_type), - cb (cb), - buf_compute_meta (lctx.buf_compute_meta) { - // all initializations should be done in init() - } - - void init() { - struct ggml_init_params params = { - /*.mem_size =*/ buf_compute_meta.size(), - /*.mem_buffer =*/ buf_compute_meta.data(), - /*.no_alloc =*/ true, - }; - - ctx0 = ggml_init(params); - - lctx.inp_tokens = nullptr; - lctx.inp_embd = nullptr; - lctx.inp_pos = nullptr; - lctx.inp_out_ids = nullptr; - lctx.inp_KQ_mask = nullptr; - lctx.inp_KQ_pos = nullptr; - lctx.inp_K_shift = nullptr; - lctx.inp_mean = nullptr; - lctx.inp_cls = nullptr; - lctx.inp_s_copy = nullptr; - lctx.inp_s_mask = nullptr; - lctx.inp_s_seq = nullptr; - } - - void free() { - if (ctx0) { - ggml_free(ctx0); - ctx0 = nullptr; - } - } - - struct ggml_cgraph * build_k_shift() { - struct ggml_cgraph * gf = ggml_new_graph_custom(ctx0, LLAMA_MAX_NODES, false); - - GGML_ASSERT(kv_self.size == n_ctx); - - lctx.inp_K_shift = ggml_new_tensor_1d(ctx0, GGML_TYPE_I32, n_ctx); - cb(lctx.inp_K_shift, "K_shift", -1); - ggml_set_input(lctx.inp_K_shift); - - for (int il = 0; il < n_layer; ++il) { - struct ggml_tensor * tmp = - // we rotate only the first n_rot dimensions - ggml_rope_custom_inplace(ctx0, - ggml_view_3d(ctx0, kv_self.k_l[il], - n_embd_head_k, n_head_kv, n_ctx, - ggml_row_size(kv_self.k_l[il]->type, n_embd_head_k), - ggml_row_size(kv_self.k_l[il]->type, n_embd_k_gqa), - 0), - lctx.inp_K_shift, n_rot, rope_type, 0, n_orig_ctx, freq_base, freq_scale, - ext_factor, attn_factor, beta_fast, beta_slow); - cb(tmp, "K_shifted", il); - ggml_build_forward_expand(gf, tmp); - } - - return gf; - } - - struct ggml_cgraph * build_s_copy() { - struct ggml_cgraph * gf = ggml_new_graph_custom(ctx0, LLAMA_MAX_NODES, false); - - GGML_ASSERT(kv_self.recurrent); - - struct ggml_tensor * state_copy = build_inp_s_copy(); - - for (int il = 0; il < n_layer; ++il) { - struct ggml_tensor * conv_states = ggml_reshape_2d(ctx0, kv_self.k_l[il], hparams.n_embd_k_s(), kv_self.size); - struct ggml_tensor * ssm_states = ggml_reshape_2d(ctx0, kv_self.v_l[il], hparams.n_embd_v_s(), kv_self.size); - - conv_states = ggml_get_rows(ctx0, conv_states, state_copy); - ssm_states = ggml_get_rows(ctx0, ssm_states, state_copy); - - // TODO: name the intermediate tensors with cb() - - ggml_build_forward_expand(gf, ggml_cpy(ctx0, conv_states, kv_self.k_l[il])); - ggml_build_forward_expand(gf, ggml_cpy(ctx0, ssm_states, kv_self.v_l[il])); - } - - return gf; - } - - struct ggml_cgraph * build_defrag(const std::vector & ids) { - struct ggml_cgraph * gf = ggml_new_graph_custom(ctx0, LLAMA_MAX_NODES, false); - - for (uint32_t i = 0; i < ids.size(); ++i) { - const uint32_t id = ids[i]; - - if (i == id || id == ids.size()) { - continue; - } - - uint32_t nm = 1; - - while (i + nm < ids.size() && ids[i + nm] == id + nm) { - nm++; - } - - for (int il = 0; il < n_layer; ++il) { - ggml_tensor * view_k_src = ggml_view_2d(ctx0, kv_self.k_l[il], - n_embd_k_gqa, nm, - ggml_row_size(kv_self.k_l[il]->type, n_embd_k_gqa), - ggml_row_size(kv_self.k_l[il]->type, n_embd_k_gqa*i)); - - ggml_tensor * view_k_dst = ggml_view_2d(ctx0, kv_self.k_l[il], - n_embd_k_gqa, nm, - ggml_row_size(kv_self.k_l[il]->type, n_embd_k_gqa), - ggml_row_size(kv_self.k_l[il]->type, n_embd_k_gqa*id)); - - ggml_tensor * view_v_src = ggml_view_2d(ctx0, kv_self.v_l[il], - nm, n_embd_v_gqa, - ggml_row_size(kv_self.v_l[il]->type, kv_self.size), - ggml_row_size(kv_self.v_l[il]->type, i)); - - ggml_tensor * view_v_dst = ggml_view_2d(ctx0, kv_self.v_l[il], - nm, n_embd_v_gqa, - ggml_row_size(kv_self.v_l[il]->type, kv_self.size), - ggml_row_size(kv_self.v_l[il]->type, id)); - - ggml_build_forward_expand(gf, ggml_cpy(ctx0, view_k_src, view_k_dst)); - ggml_build_forward_expand(gf, ggml_cpy(ctx0, view_v_src, view_v_dst)); - } - - i += nm - 1; - } - - //LLAMA_LOG_INFO("gf->n_nodes = %d\n", gf->n_nodes); - - return gf; - } - - struct ggml_tensor * build_inp_pos() { - lctx.inp_pos = ggml_new_tensor_1d(ctx0, GGML_TYPE_I32, n_tokens); - cb(lctx.inp_pos, "inp_pos", -1); - ggml_set_input(lctx.inp_pos); - return lctx.inp_pos; - } - - struct ggml_tensor * build_inp_out_ids() { - lctx.inp_out_ids = ggml_new_tensor_1d(ctx0, GGML_TYPE_I32, n_outputs); - cb(lctx.inp_out_ids, "inp_out_ids", -1); - ggml_set_input(lctx.inp_out_ids); - return lctx.inp_out_ids; - } - - struct ggml_tensor * build_inp_KQ_mask(bool causal = true) { - if (causal) { - lctx.inp_KQ_mask = ggml_new_tensor_2d(ctx0, GGML_TYPE_F32, n_kv, n_tokens); - } else { - lctx.inp_KQ_mask = ggml_new_tensor_2d(ctx0, GGML_TYPE_F32, n_tokens, n_tokens); - } - cb(lctx.inp_KQ_mask, "KQ_mask", -1); - ggml_set_input(lctx.inp_KQ_mask); - return lctx.inp_KQ_mask; - } - - struct ggml_tensor * build_inp_KQ_pos() { - lctx.inp_KQ_pos = ggml_new_tensor_1d(ctx0, GGML_TYPE_F32, n_kv); - cb(lctx.inp_KQ_pos, "KQ_pos", -1); - ggml_set_input(lctx.inp_KQ_pos); - return lctx.inp_KQ_pos; - } - - struct ggml_tensor * build_inp_mean() { - lctx.inp_mean = ggml_new_tensor_2d(ctx0, GGML_TYPE_F32, n_tokens, n_tokens); - cb(lctx.inp_mean, "inp_mean", -1); - ggml_set_input(lctx.inp_mean); - return lctx.inp_mean; - } - - struct ggml_tensor * build_inp_cls() { - lctx.inp_cls = ggml_new_tensor_1d(ctx0, GGML_TYPE_I32, n_tokens); - cb(lctx.inp_cls, "inp_cls", -1); - ggml_set_input(lctx.inp_cls); - return lctx.inp_cls; - } - - struct ggml_tensor * build_inp_s_copy() { - lctx.inp_s_copy = ggml_new_tensor_1d(ctx0, GGML_TYPE_I32, kv_self.size); - cb(lctx.inp_s_copy, "inp_s_copy", -1); - ggml_set_input(lctx.inp_s_copy); - return lctx.inp_s_copy; - } - - struct ggml_tensor * build_inp_s_mask() { - lctx.inp_s_mask = ggml_new_tensor_2d(ctx0, GGML_TYPE_F32, 1, n_kv); - cb(lctx.inp_s_mask, "inp_s_mask", -1); - ggml_set_input(lctx.inp_s_mask); - return lctx.inp_s_mask; - } - - struct ggml_tensor * build_inp_s_seq() { - lctx.inp_s_seq = ggml_new_tensor_2d(ctx0, GGML_TYPE_I32, n_kv, n_tokens); - cb(lctx.inp_s_seq, "inp_s_seq", -1); - ggml_set_input(lctx.inp_s_seq); - return lctx.inp_s_seq; - } - - struct ggml_cgraph * build_llama() { - struct ggml_cgraph * gf = ggml_new_graph_custom(ctx0, LLAMA_MAX_NODES, false); - - // mutable variable, needed during the last layer of the computation to skip unused tokens - int32_t n_tokens = this->n_tokens; - - const int64_t n_embd_head = hparams.n_embd_head_v; - GGML_ASSERT(n_embd_head == hparams.n_embd_head_k); - GGML_ASSERT(n_embd_head == hparams.n_rot); - - struct ggml_tensor * cur; - struct ggml_tensor * inpL; - - inpL = llm_build_inp_embd(ctx0, lctx, hparams, batch, model.tok_embd, cb); - - // inp_pos - contains the positions - struct ggml_tensor * inp_pos = build_inp_pos(); - - // KQ_mask (mask for 1 head, it will be broadcasted to all heads) - struct ggml_tensor * KQ_mask = build_inp_KQ_mask(); - - for (int il = 0; il < n_layer; ++il) { - struct ggml_tensor * inpSA = inpL; - - // norm - cur = llm_build_norm(ctx0, inpL, hparams, - model.layers[il].attn_norm, NULL, - LLM_NORM_RMS, cb, il); - cb(cur, "attn_norm", il); - - // self-attention - { - // compute Q and K and RoPE them - struct ggml_tensor * Qcur = ggml_mul_mat(ctx0, model.layers[il].wq, cur); - cb(Qcur, "Qcur", il); - if (model.layers[il].bq) { - Qcur = ggml_add(ctx0, Qcur, model.layers[il].bq); - cb(Qcur, "Qcur", il); - } - - struct ggml_tensor * Kcur = ggml_mul_mat(ctx0, model.layers[il].wk, cur); - cb(Kcur, "Kcur", il); - if (model.layers[il].bk) { - Kcur = ggml_add(ctx0, Kcur, model.layers[il].bk); - cb(Kcur, "Kcur", il); - } - - struct ggml_tensor * Vcur = ggml_mul_mat(ctx0, model.layers[il].wv, cur); - cb(Vcur, "Vcur", il); - if (model.layers[il].bv) { - Vcur = ggml_add(ctx0, Vcur, model.layers[il].bv); - cb(Vcur, "Vcur", il); - } - - Qcur = ggml_rope_custom( - ctx0, ggml_reshape_3d(ctx0, Qcur, n_embd_head, n_head, n_tokens), inp_pos, - n_rot, rope_type, 0, n_orig_ctx, freq_base, freq_scale, - ext_factor, attn_factor, beta_fast, beta_slow - ); - cb(Qcur, "Qcur", il); - - Kcur = ggml_rope_custom( - ctx0, ggml_reshape_3d(ctx0, Kcur, n_embd_head, n_head_kv, n_tokens), inp_pos, - n_rot, rope_type, 0, n_orig_ctx, freq_base, freq_scale, - ext_factor, attn_factor, beta_fast, beta_slow - ); - cb(Kcur, "Kcur", il); - - cur = llm_build_kv(ctx0, model, hparams, kv_self, gf, - model.layers[il].wo, model.layers[il].bo, - Kcur, Vcur, Qcur, KQ_mask, nullptr, n_ctx, n_tokens, kv_head, n_kv, 1.0f/sqrtf(float(n_embd_head)), cb, il); - } - - if (il == n_layer - 1) { - // skip computing output for unused tokens - struct ggml_tensor * inp_out_ids = build_inp_out_ids(); - n_tokens = n_outputs; - cur = ggml_get_rows(ctx0, cur, inp_out_ids); - inpSA = ggml_get_rows(ctx0, inpSA, inp_out_ids); - } - - struct ggml_tensor * ffn_inp = ggml_add(ctx0, cur, inpSA); - cb(ffn_inp, "ffn_inp", il); - - // feed-forward network - if (model.layers[il].ffn_gate_inp == nullptr) { - cur = llm_build_norm(ctx0, ffn_inp, hparams, - model.layers[il].ffn_norm, NULL, - LLM_NORM_RMS, cb, il); - cb(cur, "ffn_norm", il); - - cur = llm_build_ffn(ctx0, cur, - model.layers[il].ffn_up, NULL, - model.layers[il].ffn_gate, NULL, - model.layers[il].ffn_down, NULL, - NULL, - LLM_FFN_SILU, LLM_FFN_PAR, cb, il); - cb(cur, "ffn_out", il); - } else { - // MoE branch - cur = llm_build_norm(ctx0, ffn_inp, hparams, - model.layers[il].ffn_norm, NULL, - LLM_NORM_RMS, cb, il); - cb(cur, "ffn_norm", il); - - cur = llm_build_moe_ffn(ctx0, cur, - model.layers[il].ffn_gate_inp, - model.layers[il].ffn_up_exps, - model.layers[il].ffn_gate_exps, - model.layers[il].ffn_down_exps, - n_expert, n_expert_used, - LLM_FFN_SILU, true, - cb, il); - cb(cur, "ffn_moe_out", il); - } - - cur = ggml_add(ctx0, cur, ffn_inp); - cb(cur, "ffn_out", il); - - ggml_tensor * layer_dir = lctx.cvec.tensor_for(il); - if (layer_dir != nullptr) { - cur = ggml_add(ctx0, cur, layer_dir); - } - cb(cur, "l_out", il); - - // input for next layer - inpL = cur; - } - - cur = inpL; - - cur = llm_build_norm(ctx0, cur, hparams, - model.output_norm, NULL, - LLM_NORM_RMS, cb, -1); - cb(cur, "result_norm", -1); - - // lm_head - cur = ggml_mul_mat(ctx0, model.output, cur); - cb(cur, "result_output", -1); - - ggml_build_forward_expand(gf, cur); - - return gf; - } - - struct ggml_cgraph * build_baichuan() { - struct ggml_cgraph * gf = ggml_new_graph_custom(ctx0, LLAMA_MAX_NODES, false); - - const int64_t n_embd_head = hparams.n_embd_head_v; - GGML_ASSERT(n_embd_head == hparams.n_embd_head_k); - GGML_ASSERT(n_embd_head == hparams.n_rot); - - struct ggml_tensor * cur; - struct ggml_tensor * inpL; - - inpL = llm_build_inp_embd(ctx0, lctx, hparams, batch, model.tok_embd, cb); - - // inp_pos - contains the positions - struct ggml_tensor * inp_pos = model.type == MODEL_7B ? build_inp_pos() : nullptr; - - // KQ_mask (mask for 1 head, it will be broadcasted to all heads) - struct ggml_tensor * KQ_mask = build_inp_KQ_mask(); - - // positions of the tokens in the KV cache - struct ggml_tensor * KQ_pos = build_inp_KQ_pos(); - - for (int il = 0; il < n_layer; ++il) { - struct ggml_tensor * inpSA = inpL; - - cur = llm_build_norm(ctx0, inpL, hparams, - model.layers[il].attn_norm, NULL, - LLM_NORM_RMS, cb, il); - cb(cur, "attn_norm", il); - - // self-attention - { - struct ggml_tensor * Qcur = ggml_mul_mat(ctx0, model.layers[il].wq, cur); - cb(Qcur, "Qcur", il); - - struct ggml_tensor * Kcur = ggml_mul_mat(ctx0, model.layers[il].wk, cur); - cb(Kcur, "Kcur", il); - - struct ggml_tensor * Vcur = ggml_mul_mat(ctx0, model.layers[il].wv, cur); - cb(Vcur, "Vcur", il); - - switch (model.type) { - case MODEL_7B: - Qcur = ggml_rope_custom( - ctx0, ggml_reshape_3d(ctx0, Qcur, n_embd_head, n_head, n_tokens), inp_pos, - n_rot, rope_type, 0, n_orig_ctx, freq_base, freq_scale, - ext_factor, attn_factor, beta_fast, beta_slow - ); - Kcur = ggml_rope_custom( - ctx0, ggml_reshape_3d(ctx0, Kcur, n_embd_head, n_head_kv, n_tokens), inp_pos, - n_rot, rope_type, 0, n_orig_ctx, freq_base, freq_scale, - ext_factor, attn_factor, beta_fast, beta_slow - ); - break; - case MODEL_13B: - Qcur = ggml_reshape_3d(ctx0, Qcur, n_embd/n_head, n_head, n_tokens); - Kcur = ggml_reshape_3d(ctx0, Kcur, n_embd/n_head, n_head, n_tokens); - break; - default: - GGML_ASSERT(false); - } - cb(Qcur, "Qcur", il); - cb(Kcur, "Kcur", il); - - cur = llm_build_kv(ctx0, model, hparams, kv_self, gf, - model.layers[il].wo, NULL, - Kcur, Vcur, Qcur, KQ_mask, KQ_pos, n_ctx, n_tokens, kv_head, n_kv, 1.0f/sqrtf(float(n_embd_head)), cb, il); - } - - if (il == n_layer - 1) { - // skip computing output for unused tokens - struct ggml_tensor * inp_out_ids = build_inp_out_ids(); - cur = ggml_get_rows(ctx0, cur, inp_out_ids); - inpSA = ggml_get_rows(ctx0, inpSA, inp_out_ids); - } - - struct ggml_tensor * ffn_inp = ggml_add(ctx0, cur, inpSA); - cb(ffn_inp, "ffn_inp", il); - - // feed-forward network - { - cur = llm_build_norm(ctx0, ffn_inp, hparams, - model.layers[il].ffn_norm, NULL, - LLM_NORM_RMS, cb, il); - cb(cur, "ffn_norm", il); - - cur = llm_build_ffn(ctx0, cur, - model.layers[il].ffn_up, NULL, - model.layers[il].ffn_gate, NULL, - model.layers[il].ffn_down, NULL, - NULL, - LLM_FFN_SILU, LLM_FFN_PAR, cb, il); - cb(cur, "ffn_out", il); - } - - cur = ggml_add(ctx0, cur, ffn_inp); - cb(cur, "l_out", il); - - // input for next layer - inpL = cur; - } - - cur = inpL; - - cur = llm_build_norm(ctx0, cur, hparams, - model.output_norm, NULL, - LLM_NORM_RMS, cb, -1); - cb(cur, "result_norm", -1); - - // lm_head - cur = ggml_mul_mat(ctx0, model.output, cur); - cb(cur, "result_output", -1); - - ggml_build_forward_expand(gf, cur); - - return gf; - } - - struct ggml_cgraph * build_xverse() { - struct ggml_cgraph * gf = ggml_new_graph_custom(ctx0, LLAMA_MAX_NODES, false); - - const int64_t n_embd_head = hparams.n_embd_head_v; - GGML_ASSERT(n_embd_head == hparams.n_embd_head_k); - GGML_ASSERT(n_embd_head == hparams.n_rot); - - struct ggml_tensor * cur; - struct ggml_tensor * inpL; - - inpL = llm_build_inp_embd(ctx0, lctx, hparams, batch, model.tok_embd, cb); - - // inp_pos - contains the positions - struct ggml_tensor * inp_pos = build_inp_pos(); - - // KQ_mask (mask for 1 head, it will be broadcasted to all heads) - struct ggml_tensor * KQ_mask = build_inp_KQ_mask(); - - // positions of the tokens in the KV cache - struct ggml_tensor * KQ_pos = build_inp_KQ_pos(); - - for (int il = 0; il < n_layer; ++il) { - struct ggml_tensor * inpSA = inpL; - - cur = llm_build_norm(ctx0, inpL, hparams, - model.layers[il].attn_norm, NULL, - LLM_NORM_RMS, cb, il); - cb(cur, "attn_norm", il); - - // self-attention - { - struct ggml_tensor * Qcur = ggml_mul_mat(ctx0, model.layers[il].wq, cur); - cb(Qcur, "Qcur", il); - - struct ggml_tensor * Kcur = ggml_mul_mat(ctx0, model.layers[il].wk, cur); - cb(Kcur, "Kcur", il); - - struct ggml_tensor * Vcur = ggml_mul_mat(ctx0, model.layers[il].wv, cur); - cb(Vcur, "Vcur", il); - - Qcur = ggml_rope_custom( - ctx0, ggml_reshape_3d(ctx0, Qcur, n_embd_head, n_head, n_tokens), inp_pos, - n_rot, rope_type, 0, n_orig_ctx, freq_base, freq_scale, - ext_factor, attn_factor, beta_fast, beta_slow - ); - cb(Qcur, "Qcur", il); - - Kcur = ggml_rope_custom( - ctx0, ggml_reshape_3d(ctx0, Kcur, n_embd_head, n_head_kv, n_tokens), inp_pos, - n_rot, rope_type, 0, n_orig_ctx, freq_base, freq_scale, - ext_factor, attn_factor, beta_fast, beta_slow - ); - cb(Kcur, "Kcur", il); - cur = llm_build_kv(ctx0, model, hparams, kv_self, gf, - model.layers[il].wo, NULL, - Kcur, Vcur, Qcur, KQ_mask, KQ_pos, n_ctx, n_tokens, kv_head, n_kv, 1.0f/sqrtf(float(n_embd_head)), cb, il); - } - - if (il == n_layer - 1) { - // skip computing output for unused tokens - struct ggml_tensor * inp_out_ids = build_inp_out_ids(); - cur = ggml_get_rows(ctx0, cur, inp_out_ids); - inpSA = ggml_get_rows(ctx0, inpSA, inp_out_ids); - } - - struct ggml_tensor * ffn_inp = ggml_add(ctx0, cur, inpSA); - cb(ffn_inp, "ffn_inp", il); - - // feed-forward network - { - cur = llm_build_norm(ctx0, ffn_inp, hparams, - model.layers[il].ffn_norm, NULL, - LLM_NORM_RMS, cb, il); - cb(cur, "ffn_norm", il); - - cur = llm_build_ffn(ctx0, cur, - model.layers[il].ffn_up, NULL, - model.layers[il].ffn_gate, NULL, - model.layers[il].ffn_down, NULL, - NULL, - LLM_FFN_SILU, LLM_FFN_PAR, cb, il); - cb(cur, "ffn_out", il); - } - - cur = ggml_add(ctx0, cur, ffn_inp); - cb(cur, "l_out", il); - - // input for next layer - inpL = cur; - } - - cur = inpL; - - cur = llm_build_norm(ctx0, cur, hparams, model.output_norm, NULL, LLM_NORM_RMS, cb, -1); - cb(cur, "result_norm", -1); - - // lm_head - cur = ggml_mul_mat(ctx0, model.output, cur); - cb(cur, "result_output", -1); - - ggml_build_forward_expand(gf, cur); - - return gf; - } - - struct ggml_cgraph * build_falcon() { - struct ggml_cgraph * gf = ggml_new_graph_custom(ctx0, LLAMA_MAX_NODES, false); - - const int64_t n_embd_head = hparams.n_embd_head_v; - const int64_t n_embd_gqa = hparams.n_embd_v_gqa(); - GGML_ASSERT(n_embd_head == hparams.n_embd_head_k); - GGML_ASSERT(n_embd_head == hparams.n_rot); - - struct ggml_tensor * cur; - struct ggml_tensor * inpL; - - inpL = llm_build_inp_embd(ctx0, lctx, hparams, batch, model.tok_embd, cb); - - // inp_pos - contains the positions - struct ggml_tensor * inp_pos = build_inp_pos(); - - // KQ_mask (mask for 1 head, it will be broadcasted to all heads) - struct ggml_tensor * KQ_mask = build_inp_KQ_mask(); - - for (int il = 0; il < n_layer; ++il) { - struct ggml_tensor * attn_norm; - - attn_norm = llm_build_norm(ctx0, inpL, hparams, - model.layers[il].attn_norm, - model.layers[il].attn_norm_b, - LLM_NORM, cb, il); - cb(attn_norm, "attn_norm", il); - - // self-attention - { - if (model.layers[il].attn_norm_2) { - // Falcon-40B - cur = llm_build_norm(ctx0, inpL, hparams, - model.layers[il].attn_norm_2, - model.layers[il].attn_norm_2_b, - LLM_NORM, cb, il); - cb(cur, "attn_norm_2", il); - } else { - cur = attn_norm; - } - - cur = ggml_mul_mat(ctx0, model.layers[il].wqkv, cur); - cb(cur, "wqkv", il); - - struct ggml_tensor * Qcur = ggml_cont(ctx0, ggml_view_2d(ctx0, cur, n_embd, n_tokens, cur->nb[1], 0*sizeof(float)*(n_embd))); - struct ggml_tensor * Kcur = ggml_cont(ctx0, ggml_view_2d(ctx0, cur, n_embd_gqa, n_tokens, cur->nb[1], 1*sizeof(float)*(n_embd))); - struct ggml_tensor * Vcur = ggml_cont(ctx0, ggml_view_2d(ctx0, cur, n_embd_gqa, n_tokens, cur->nb[1], 1*sizeof(float)*(n_embd + n_embd_gqa))); - - cb(Qcur, "Qcur", il); - cb(Kcur, "Kcur", il); - cb(Vcur, "Vcur", il); - - Qcur = ggml_reshape_3d(ctx0, Qcur, n_embd_head, n_head, n_tokens); - Kcur = ggml_reshape_3d(ctx0, Kcur, n_embd_head, n_head_kv, n_tokens); - - // using mode = 2 for neox mode - Qcur = ggml_rope_custom( - ctx0, Qcur, inp_pos, n_rot, rope_type, 0, n_orig_ctx, - freq_base, freq_scale, ext_factor, attn_factor, beta_fast, beta_slow - ); - cb(Qcur, "Qcur", il); - - Kcur = ggml_rope_custom( - ctx0, Kcur, inp_pos, n_rot, rope_type, 0, n_orig_ctx, - freq_base, freq_scale, ext_factor, attn_factor, beta_fast, beta_slow - ); - cb(Kcur, "Kcur", il); - - cur = llm_build_kv(ctx0, model, hparams, kv_self, gf, - model.layers[il].wo, NULL, - Kcur, Vcur, Qcur, KQ_mask, nullptr, n_ctx, n_tokens, kv_head, n_kv, 1.0f/sqrtf(float(n_embd_head)), cb, il); - } - - if (il == n_layer - 1) { - // skip computing output for unused tokens - struct ggml_tensor * inp_out_ids = build_inp_out_ids(); - cur = ggml_get_rows(ctx0, cur, inp_out_ids); - inpL = ggml_get_rows(ctx0, inpL, inp_out_ids); - attn_norm = ggml_get_rows(ctx0, attn_norm, inp_out_ids); - } - - struct ggml_tensor * ffn_inp = cur; - - // feed forward - { - cur = llm_build_ffn(ctx0, attn_norm, // !! use the attn norm, not the result - model.layers[il].ffn_up, NULL, - NULL, NULL, - model.layers[il].ffn_down, NULL, - NULL, - LLM_FFN_GELU, LLM_FFN_SEQ, cb, il); - cb(cur, "ffn_out", il); - } - - cur = ggml_add(ctx0, cur, ffn_inp); - cb(cur, "l_out", il); - - cur = ggml_add(ctx0, cur, inpL); - cb(cur, "l_out", il); - - // input for next layer - inpL = cur; - } - - cur = inpL; - - // norm - cur = llm_build_norm(ctx0, cur, hparams, - model.output_norm, - model.output_norm_b, - LLM_NORM, cb, -1); - cb(cur, "result_norm", -1); - - cur = ggml_mul_mat(ctx0, model.output, cur); - cb(cur, "result_output", -1); - - ggml_build_forward_expand(gf, cur); - - return gf; - } - - struct ggml_cgraph * build_grok() { - struct ggml_cgraph * gf = ggml_new_graph_custom(ctx0, LLAMA_MAX_NODES, false); - - // mutable variable, needed during the last layer of the computation to skip unused tokens - int32_t n_tokens = this->n_tokens; - - const int64_t n_embd_head = hparams.n_embd_head_v; - GGML_ASSERT(n_embd_head == hparams.n_embd_head_k); - GGML_ASSERT(n_embd_head == hparams.n_rot); - - struct ggml_tensor * cur; - struct ggml_tensor * inpL; - - inpL = llm_build_inp_embd(ctx0, lctx, hparams, batch, model.tok_embd, cb); - - // multiply by embedding_multiplier_scale of 78.38367176906169 - inpL = ggml_scale(ctx0, inpL, 78.38367176906169f); - - // inp_pos - contains the positions - struct ggml_tensor * inp_pos = build_inp_pos(); - - // KQ_mask (mask for 1 head, it will be broadcasted to all heads) - struct ggml_tensor * KQ_mask = build_inp_KQ_mask(); - - for (int il = 0; il < n_layer; ++il) { - struct ggml_tensor * inpSA = inpL; - - // norm - cur = llm_build_norm(ctx0, inpL, hparams, - model.layers[il].attn_norm, NULL, - LLM_NORM_RMS, cb, il); - cb(cur, "attn_norm", il); - - - // self-attention - { - // compute Q and K and RoPE them - struct ggml_tensor * Qcur = ggml_mul_mat(ctx0, model.layers[il].wq, cur); - cb(Qcur, "Qcur", il); - if (model.layers[il].bq) { - Qcur = ggml_add(ctx0, Qcur, model.layers[il].bq); - cb(Qcur, "Qcur", il); - } - - struct ggml_tensor * Kcur = ggml_mul_mat(ctx0, model.layers[il].wk, cur); - cb(Kcur, "Kcur", il); - if (model.layers[il].bk) { - Kcur = ggml_add(ctx0, Kcur, model.layers[il].bk); - cb(Kcur, "Kcur", il); - } - - struct ggml_tensor * Vcur = ggml_mul_mat(ctx0, model.layers[il].wv, cur); - cb(Vcur, "Vcur", il); - if (model.layers[il].bv) { - Vcur = ggml_add(ctx0, Vcur, model.layers[il].bv); - cb(Vcur, "Vcur", il); - } - - Qcur = ggml_rope_custom( - ctx0, ggml_reshape_3d(ctx0, Qcur, n_embd_head, n_head, n_tokens), inp_pos, - n_rot, rope_type, 0, n_orig_ctx, freq_base, freq_scale, - ext_factor, attn_factor, beta_fast, beta_slow - ); - cb(Qcur, "Qcur", il); - - Kcur = ggml_rope_custom( - ctx0, ggml_reshape_3d(ctx0, Kcur, n_embd_head, n_head_kv, n_tokens), inp_pos, - n_rot, rope_type, 0, n_orig_ctx, freq_base, freq_scale, - ext_factor, attn_factor, beta_fast, beta_slow - ); - cb(Kcur, "Kcur", il); - - cur = llm_build_kv(ctx0, model, hparams, kv_self, gf, - model.layers[il].wo, model.layers[il].bo, - Kcur, Vcur, Qcur, KQ_mask, nullptr, n_ctx, n_tokens, kv_head, n_kv, 1.0f, cb, il); - } - - if (il == n_layer - 1) { - // skip computing output for unused tokens - struct ggml_tensor * inp_out_ids = build_inp_out_ids(); - n_tokens = n_outputs; - cur = ggml_get_rows(ctx0, cur, inp_out_ids); - inpSA = ggml_get_rows(ctx0, inpSA, inp_out_ids); - } - - // Grok - // if attn_out_norm is present then apply it before adding the input - if (model.layers[il].attn_out_norm) { - cur = llm_build_norm(ctx0, cur, hparams, - model.layers[il].attn_out_norm, NULL, - LLM_NORM_RMS, cb, il); - cb(cur, "attn_out_norm", il); - } - - struct ggml_tensor * ffn_inp = ggml_add(ctx0, cur, inpSA); - cb(ffn_inp, "ffn_inp", il); - - // feed-forward network - // MoE branch - cur = llm_build_norm(ctx0, ffn_inp, hparams, - model.layers[il].ffn_norm, NULL, - LLM_NORM_RMS, cb, il); - cb(cur, "ffn_norm", il); - - cur = llm_build_moe_ffn(ctx0, cur, - model.layers[il].ffn_gate_inp, - model.layers[il].ffn_up_exps, - model.layers[il].ffn_gate_exps, - model.layers[il].ffn_down_exps, - n_expert, n_expert_used, - LLM_FFN_GELU, true, - cb, il); - cb(cur, "ffn_moe_out", il); - - // Grok - // if layer_out_norm is present then apply it before adding the input - // Idea: maybe ffn_out_norm is a better name - if (model.layers[il].layer_out_norm) { - cur = llm_build_norm(ctx0, cur, hparams, - model.layers[il].layer_out_norm, NULL, - LLM_NORM_RMS, cb, il); - cb(cur, "layer_out_norm", il); - } - - cur = ggml_add(ctx0, cur, ffn_inp); - cb(cur, "ffn_out", il); - - ggml_tensor * layer_dir = lctx.cvec.tensor_for(il); - if (layer_dir != nullptr) { - cur = ggml_add(ctx0, cur, layer_dir); - } - cb(cur, "l_out", il); - - // input for next layer - inpL = cur; - } - - cur = inpL; - - cur = llm_build_norm(ctx0, cur, hparams, - model.output_norm, NULL, - LLM_NORM_RMS, cb, -1); - cb(cur, "result_norm", -1); - - // lm_head - cur = ggml_mul_mat(ctx0, model.output, cur); - - // Grok - // multiply logits by output_multiplier_scale of 0.5773502691896257 - - cur = ggml_scale(ctx0, cur, 0.5773502691896257f); - - cb(cur, "result_output", -1); - - ggml_build_forward_expand(gf, cur); - - return gf; - } - - struct ggml_cgraph * build_dbrx() { - struct ggml_cgraph * gf = ggml_new_graph_custom(ctx0, LLAMA_MAX_NODES, false); - - // mutable variable, needed during the last layer of the computation to skip unused tokens - int32_t n_tokens = this->n_tokens; - - const int64_t n_embd_head = hparams.n_embd_head_v; - const int64_t n_embd_gqa = hparams.n_embd_v_gqa(); - GGML_ASSERT(n_embd_head == hparams.n_embd_head_k); - GGML_ASSERT(n_embd_head == hparams.n_rot); - - struct ggml_tensor * cur; - struct ggml_tensor * inpL; - - inpL = llm_build_inp_embd(ctx0, lctx, hparams, batch, model.tok_embd, cb); - - // inp_pos - contains the positions - struct ggml_tensor * inp_pos = build_inp_pos(); - - // KQ_mask (mask for 1 head, it will be broadcasted to all heads) - struct ggml_tensor * KQ_mask = build_inp_KQ_mask(); - - for (int il = 0; il < n_layer; ++il) { - struct ggml_tensor * inpSA = inpL; - - // norm - cur = llm_build_norm(ctx0, inpL, hparams, - model.layers[il].attn_norm, NULL, - LLM_NORM, cb, il); - cb(cur, "attn_norm", il); - - // self-attention - { - struct ggml_tensor * Qcur = nullptr; - struct ggml_tensor * Kcur = nullptr; - struct ggml_tensor * Vcur = nullptr; - - cur = ggml_mul_mat(ctx0, model.layers[il].wqkv, cur); - cb(cur, "wqkv", il); - - cur = ggml_clamp(ctx0, cur, -hparams.f_clamp_kqv, hparams.f_clamp_kqv); - cb(cur, "wqkv_clamped", il); - - Qcur = ggml_cont(ctx0, ggml_view_2d(ctx0, cur, n_embd, n_tokens, cur->nb[1], 0*sizeof(float)*(n_embd))); - Kcur = ggml_cont(ctx0, ggml_view_2d(ctx0, cur, n_embd_gqa, n_tokens, cur->nb[1], 1*sizeof(float)*(n_embd))); - Vcur = ggml_cont(ctx0, ggml_view_2d(ctx0, cur, n_embd_gqa, n_tokens, cur->nb[1], 1*sizeof(float)*(n_embd + n_embd_gqa))); - - cb(Qcur, "Qcur", il); - cb(Kcur, "Kcur", il); - cb(Vcur, "Vcur", il); - - Qcur = ggml_rope_custom( - ctx0, ggml_reshape_3d(ctx0, Qcur, n_embd_head, n_head, n_tokens), inp_pos, - n_rot, rope_type, 0, n_orig_ctx, freq_base, freq_scale, - ext_factor, attn_factor, beta_fast, beta_slow - ); - cb(Qcur, "Qcur", il); - - Kcur = ggml_rope_custom( - ctx0, ggml_reshape_3d(ctx0, Kcur, n_embd_head, n_head_kv, n_tokens), inp_pos, - n_rot, rope_type, 0, n_orig_ctx, freq_base, freq_scale, - ext_factor, attn_factor, beta_fast, beta_slow - ); - cb(Kcur, "Kcur", il); - - cur = llm_build_kv(ctx0, model, hparams, kv_self, gf, - model.layers[il].wo, NULL, - Kcur, Vcur, Qcur, KQ_mask, nullptr, n_ctx, n_tokens, kv_head, n_kv, 1.0f/sqrtf(float(n_embd_head)), cb, il); - } - - if (il == n_layer - 1) { - // skip computing output for unused tokens - struct ggml_tensor * inp_out_ids = build_inp_out_ids(); - n_tokens = n_outputs; - cur = ggml_get_rows(ctx0, cur, inp_out_ids); - inpSA = ggml_get_rows(ctx0, inpSA, inp_out_ids); - } - - struct ggml_tensor * ffn_inp = ggml_add(ctx0, cur, inpSA); - cb(ffn_inp, "ffn_inp", il); - - // feed-forward network - // MoE branch - cur = llm_build_norm(ctx0, ffn_inp, hparams, - model.layers[il].attn_out_norm, NULL, - LLM_NORM, cb, il); - cb(cur, "attn_out_norm", il); - - cur = llm_build_moe_ffn(ctx0, cur, - model.layers[il].ffn_gate_inp, - model.layers[il].ffn_up_exps, - model.layers[il].ffn_gate_exps, - model.layers[il].ffn_down_exps, - n_expert, n_expert_used, - LLM_FFN_SILU, true, - cb, il); - cb(cur, "ffn_moe_out", il); - - cur = ggml_add(ctx0, cur, ffn_inp); - cb(cur, "ffn_out", il); - - ggml_tensor * layer_dir = lctx.cvec.tensor_for(il); - if (layer_dir != nullptr) { - cur = ggml_add(ctx0, cur, layer_dir); - } - cb(cur, "l_out", il); - - // input for next layer - inpL = cur; - } - - cur = inpL; - - cur = llm_build_norm(ctx0, cur, hparams, - model.output_norm, NULL, - LLM_NORM, cb, -1); - cb(cur, "result_norm", -1); - - // lm_head - cur = ggml_mul_mat(ctx0, model.output, cur); - - cb(cur, "result_output", -1); - - ggml_build_forward_expand(gf, cur); - - return gf; - } - - struct ggml_cgraph * build_starcoder() { - struct ggml_cgraph * gf = ggml_new_graph_custom(ctx0, LLAMA_MAX_NODES, false); - - const int64_t n_embd_head = hparams.n_embd_head_v; - const int64_t n_embd_gqa = hparams.n_embd_v_gqa(); - GGML_ASSERT(n_embd_head == hparams.n_embd_head_k); - - struct ggml_tensor * cur; - struct ggml_tensor * inpL; - - inpL = llm_build_inp_embd(ctx0, lctx, hparams, batch, model.tok_embd, cb); - - // inp_pos - contains the positions - struct ggml_tensor * inp_pos = build_inp_pos(); - - // KQ_mask (mask for 1 head, it will be broadcasted to all heads) - struct ggml_tensor * KQ_mask = build_inp_KQ_mask(); - - struct ggml_tensor * pos = ggml_get_rows(ctx0, model.pos_embd, inp_pos); - cb(pos, "pos_embd", -1); - - inpL = ggml_add(ctx0, inpL, pos); - cb(inpL, "inpL", -1); - - for (int il = 0; il < n_layer; ++il) { - cur = llm_build_norm(ctx0, inpL, hparams, - model.layers[il].attn_norm, - model.layers[il].attn_norm_b, - LLM_NORM, cb, il); - cb(cur, "attn_norm", il); - - // self-attention - { - cur = ggml_mul_mat(ctx0, model.layers[il].wqkv, cur); - cb(cur, "wqkv", il); - - cur = ggml_add(ctx0, cur, model.layers[il].bqkv); - cb(cur, "bqkv", il); - - struct ggml_tensor * Qcur = ggml_cont(ctx0, ggml_view_2d(ctx0, cur, n_embd, n_tokens, cur->nb[1], 0*sizeof(float)*(n_embd))); - struct ggml_tensor * Kcur = ggml_cont(ctx0, ggml_view_2d(ctx0, cur, n_embd_gqa, n_tokens, cur->nb[1], 1*sizeof(float)*(n_embd))); - struct ggml_tensor * Vcur = ggml_cont(ctx0, ggml_view_2d(ctx0, cur, n_embd_gqa, n_tokens, cur->nb[1], 1*sizeof(float)*(n_embd + n_embd_gqa))); - - cb(Qcur, "Qcur", il); - cb(Kcur, "Kcur", il); - cb(Vcur, "Vcur", il); - - Qcur = ggml_reshape_3d(ctx0, Qcur, n_embd_head, n_head, n_tokens); - - cur = llm_build_kv(ctx0, model, hparams, kv_self, gf, - model.layers[il].wo, model.layers[il].bo, - Kcur, Vcur, Qcur, KQ_mask, nullptr, n_ctx, n_tokens, kv_head, n_kv, 1.0f/sqrtf(float(n_embd_head)), cb, il); - } - - if (il == n_layer - 1) { - // skip computing output for unused tokens - struct ggml_tensor * inp_out_ids = build_inp_out_ids(); - cur = ggml_get_rows(ctx0, cur, inp_out_ids); - inpL = ggml_get_rows(ctx0, inpL, inp_out_ids); - } - - // add the input - struct ggml_tensor * ffn_inp = ggml_add(ctx0, cur, inpL); - cb(ffn_inp, "ffn_inp", il); - - // FF - { - cur = llm_build_norm(ctx0, ffn_inp, hparams, - model.layers[il].ffn_norm, - model.layers[il].ffn_norm_b, - LLM_NORM, cb, il); - cb(cur, "ffn_norm", il); - - cur = llm_build_ffn(ctx0, cur, - model.layers[il].ffn_up, model.layers[il].ffn_up_b, - NULL, NULL, - model.layers[il].ffn_down, model.layers[il].ffn_down_b, - NULL, - LLM_FFN_GELU, LLM_FFN_SEQ, cb, il); - cb(cur, "ffn_out", il); - } - - inpL = ggml_add(ctx0, cur, ffn_inp); - cb(inpL, "l_out", il); - } - - cur = llm_build_norm(ctx0, inpL, hparams, - model.output_norm, - model.output_norm_b, - LLM_NORM, cb, -1); - cb(cur, "result_norm", -1); - - cur = ggml_mul_mat(ctx0, model.output, cur); - cb(cur, "result_output", -1); - - ggml_build_forward_expand(gf, cur); - - return gf; - } - - struct ggml_cgraph * build_persimmon() { - struct ggml_cgraph * gf = ggml_new_graph_custom(ctx0, LLAMA_MAX_NODES, false); - - const int64_t n_embd_head = hparams.n_embd_head_v; - GGML_ASSERT(n_embd_head == hparams.n_embd_head_k); - GGML_ASSERT(n_embd_head/2 == hparams.n_rot); - - struct ggml_tensor * cur; - struct ggml_tensor * inpL; - - inpL = llm_build_inp_embd(ctx0, lctx, hparams, batch, model.tok_embd, cb); - - // inp_pos - contains the positions - struct ggml_tensor * inp_pos = build_inp_pos(); - - // KQ_mask (mask for 1 head, it will be broadcasted to all heads) - struct ggml_tensor * KQ_mask = build_inp_KQ_mask(); - - for (int il = 0; il < n_layer; ++il) { - struct ggml_tensor * residual = inpL; - - cur = llm_build_norm(ctx0, inpL, hparams, - model.layers[il].attn_norm, - model.layers[il].attn_norm_b, - LLM_NORM, cb, il); - cb(cur, "attn_norm", il); - - // self attention - { - cur = ggml_mul_mat(ctx0, model.layers[il].wqkv, cur); - cb(cur, "wqkv", il); - - cur = ggml_add(ctx0, cur, model.layers[il].bqkv); - cb(cur, "bqkv", il); - - // split qkv - GGML_ASSERT(n_head_kv == n_head); - - struct ggml_tensor * tmpqkv = ggml_reshape_4d(ctx0, cur, n_embd_head, 3, n_head, n_tokens); - cb(tmpqkv, "tmpqkv", il); - - struct ggml_tensor * tmpqkv_perm = ggml_cont(ctx0, ggml_permute(ctx0, tmpqkv, 0, 3, 1, 2)); - cb(tmpqkv_perm, "tmpqkv", il); - - struct ggml_tensor * tmpq = ggml_view_3d( - ctx0, tmpqkv_perm, n_embd_head, n_head, n_tokens, - ggml_element_size(tmpqkv_perm) * n_embd_head, - ggml_element_size(tmpqkv_perm) * n_embd_head * n_head, - 0 - ); - cb(tmpq, "tmpq", il); - - struct ggml_tensor * tmpk = ggml_view_3d( - ctx0, tmpqkv_perm, n_embd_head, n_head, n_tokens, - ggml_element_size(tmpqkv_perm) * n_embd_head, - ggml_element_size(tmpqkv_perm) * n_embd_head * n_head, - ggml_element_size(tmpqkv_perm) * n_embd_head * n_head * n_tokens - ); - cb(tmpk, "tmpk", il); - - // Q/K Layernorm - tmpq = llm_build_norm(ctx0, tmpq, hparams, - model.layers[il].attn_q_norm, - model.layers[il].attn_q_norm_b, - LLM_NORM, cb, il); - cb(tmpq, "tmpq", il); - - tmpk = llm_build_norm(ctx0, tmpk, hparams, - model.layers[il].attn_k_norm, - model.layers[il].attn_k_norm_b, - LLM_NORM, cb, il); - cb(tmpk, "tmpk", il); - - // RoPE the first n_rot of q/k, pass the other half, and concat. - struct ggml_tensor * qrot = ggml_view_3d( - ctx0, tmpq, n_rot, n_head, n_tokens, - ggml_element_size(tmpq) * n_embd_head, - ggml_element_size(tmpq) * n_embd_head * n_head, - 0 - ); - cb(qrot, "qrot", il); - - struct ggml_tensor * krot = ggml_view_3d( - ctx0, tmpk, n_rot, n_head, n_tokens, - ggml_element_size(tmpk) * n_embd_head, - ggml_element_size(tmpk) * n_embd_head * n_head, - 0 - ); - cb(krot, "krot", il); - - // get the second half of tmpq, e.g tmpq[n_rot:, :, :] - struct ggml_tensor * qpass = ggml_view_3d( - ctx0, tmpq, n_rot, n_head, n_tokens, - ggml_element_size(tmpq) * n_embd_head, - ggml_element_size(tmpq) * n_embd_head * n_head, - ggml_element_size(tmpq) * n_rot - ); - cb(qpass, "qpass", il); - - struct ggml_tensor * kpass = ggml_view_3d( - ctx0, tmpk, n_rot, n_head, n_tokens, - ggml_element_size(tmpk) * n_embd_head, - ggml_element_size(tmpk) * n_embd_head * n_head, - ggml_element_size(tmpk) * n_rot - ); - cb(kpass, "kpass", il); - - struct ggml_tensor * qrotated = ggml_rope_custom( - ctx0, qrot, inp_pos, n_rot, rope_type, 0, n_orig_ctx, - freq_base, freq_scale, ext_factor, attn_factor, beta_fast, beta_slow - ); - cb(qrotated, "qrotated", il); - - struct ggml_tensor * krotated = ggml_rope_custom( - ctx0, krot, inp_pos, n_rot, rope_type, 0, n_orig_ctx, - freq_base, freq_scale, ext_factor, attn_factor, beta_fast, beta_slow - ); - cb(krotated, "krotated", il); - - // ggml currently only supports concatenation on dim=2 - // so we need to permute qrot, qpass, concat, then permute back. - qrotated = ggml_cont(ctx0, ggml_permute(ctx0, qrotated, 2, 1, 0, 3)); - cb(qrotated, "qrotated", il); - - krotated = ggml_cont(ctx0, ggml_permute(ctx0, krotated, 2, 1, 0, 3)); - cb(krotated, "krotated", il); - - qpass = ggml_cont(ctx0, ggml_permute(ctx0, qpass, 2, 1, 0, 3)); - cb(qpass, "qpass", il); - - kpass = ggml_cont(ctx0, ggml_permute(ctx0, kpass, 2, 1, 0, 3)); - cb(kpass, "kpass", il); - - struct ggml_tensor * Qcur = ggml_concat(ctx0, qrotated, qpass); - cb(Qcur, "Qcur", il); - - struct ggml_tensor * Kcur = ggml_concat(ctx0, krotated, kpass); - cb(Kcur, "Kcur", il); - - struct ggml_tensor * Q = ggml_cont(ctx0, ggml_permute(ctx0, Qcur, 2, 1, 0, 3)); - cb(Q, "Q", il); - - Kcur = ggml_cont(ctx0, ggml_permute(ctx0, Kcur, 2, 1, 0, 3)); - cb(Kcur, "Kcur", il); - - struct ggml_tensor * Vcur = ggml_view_3d( - ctx0, tmpqkv_perm, n_embd_head, n_head, n_tokens, - ggml_element_size(tmpqkv_perm) * n_embd_head, - ggml_element_size(tmpqkv_perm) * n_embd_head * n_head, - ggml_element_size(tmpqkv_perm) * n_embd_head * n_head * n_tokens * 2 - ); - cb(Vcur, "Vcur", il); - - cur = llm_build_kv(ctx0, model, hparams, kv_self, gf, - model.layers[il].wo, model.layers[il].bo, - Kcur, Vcur, Q, KQ_mask, nullptr, n_ctx, n_tokens, kv_head, n_kv, 1.0f/sqrtf(float(n_embd_head)), cb, il); - } - - if (il == n_layer - 1) { - // skip computing output for unused tokens - struct ggml_tensor * inp_out_ids = build_inp_out_ids(); - cur = ggml_get_rows(ctx0, cur, inp_out_ids); - residual = ggml_get_rows(ctx0, residual, inp_out_ids); - } - - struct ggml_tensor * ffn_inp = ggml_add(ctx0, residual, cur); - cb(ffn_inp, "ffn_inp", il); - - // feed-forward network - { - cur = llm_build_norm(ctx0, ffn_inp, hparams, - model.layers[il].ffn_norm, - model.layers[il].ffn_norm_b, - LLM_NORM, cb, il); - cb(cur, "ffn_norm", il); - - cur = llm_build_ffn(ctx0, cur, - model.layers[il].ffn_up, model.layers[il].ffn_up_b, - NULL, NULL, - model.layers[il].ffn_down, model.layers[il].ffn_down_b, - NULL, - LLM_FFN_RELU_SQR, LLM_FFN_SEQ, cb, il); - cb(cur, "ffn_out", il); - } - - cur = ggml_add(ctx0, cur, ffn_inp); - cb(cur, "l_out", il); - - inpL = cur; - } - - cur = inpL; - - cur = llm_build_norm(ctx0, cur, hparams, - model.output_norm, - model.output_norm_b, - LLM_NORM, cb, -1); - cb(cur, "result_norm", -1); - - cur = ggml_mul_mat(ctx0, model.output, cur); - cb(cur, "result_output", -1); - - ggml_build_forward_expand(gf, cur); - - return gf; - } - - struct ggml_cgraph * build_refact() { - struct ggml_cgraph * gf = ggml_new_graph_custom(ctx0, LLAMA_MAX_NODES, false); - - const int64_t n_embd_head = hparams.n_embd_head_v; - GGML_ASSERT(n_embd_head == hparams.n_embd_head_k); - - struct ggml_tensor * cur; - struct ggml_tensor * inpL; - - inpL = llm_build_inp_embd(ctx0, lctx, hparams, batch, model.tok_embd, cb); - - // KQ_mask (mask for 1 head, it will be broadcasted to all heads) - struct ggml_tensor * KQ_mask = build_inp_KQ_mask(); - - // positions of the tokens in the KV cache - struct ggml_tensor * KQ_pos = build_inp_KQ_pos(); - - for (int il = 0; il < n_layer; ++il) { - struct ggml_tensor * inpSA = inpL; - - cur = llm_build_norm(ctx0, inpL, hparams, - model.layers[il].attn_norm, NULL, - LLM_NORM_RMS, cb, il); - cb(cur, "attn_norm", il); - - // self-attention - { - struct ggml_tensor * Qcur = ggml_mul_mat(ctx0, model.layers[il].wq, cur); - cb(Qcur, "Qcur", il); - - struct ggml_tensor * Kcur = ggml_mul_mat(ctx0, model.layers[il].wk, cur); - cb(Kcur, "Kcur", il); - - struct ggml_tensor * Vcur = ggml_mul_mat(ctx0, model.layers[il].wv, cur); - cb(Vcur, "Vcur", il); - - Kcur = ggml_reshape_3d(ctx0, Kcur, n_embd_head, n_head_kv, n_tokens); - cb(Kcur, "Kcur", il); - - Qcur = ggml_reshape_3d(ctx0, Qcur, n_embd_head, n_head, n_tokens); - cb(Qcur, "Qcur", il); - - cur = llm_build_kv(ctx0, model, hparams, kv_self, gf, - model.layers[il].wo, NULL, - Kcur, Vcur, Qcur, KQ_mask, KQ_pos, n_ctx, n_tokens, kv_head, n_kv, 1.0f/sqrtf(float(n_embd_head)), cb, il); - } - - if (il == n_layer - 1) { - // skip computing output for unused tokens - struct ggml_tensor * inp_out_ids = build_inp_out_ids(); - cur = ggml_get_rows(ctx0, cur, inp_out_ids); - inpSA = ggml_get_rows(ctx0, inpSA, inp_out_ids); - } - - struct ggml_tensor * ffn_inp = ggml_add(ctx0, cur, inpSA); - cb(ffn_inp, "ffn_inp", il); - - // feed-forward network - { - cur = llm_build_norm(ctx0, ffn_inp, hparams, - model.layers[il].ffn_norm, NULL, - LLM_NORM_RMS, cb, il); - cb(cur, "ffn_norm", il); - - cur = llm_build_ffn(ctx0, cur, - model.layers[il].ffn_up, NULL, - model.layers[il].ffn_gate, NULL, - model.layers[il].ffn_down, NULL, - NULL, - LLM_FFN_SILU, LLM_FFN_PAR, cb, il); - cb(cur, "ffn_out", il); - } - - cur = ggml_add(ctx0, cur, ffn_inp); - cb(cur, "l_out", il); - - // input for next layer - inpL = cur; - } - - cur = inpL; - - cur = llm_build_norm(ctx0, cur, hparams, - model.output_norm, NULL, - LLM_NORM_RMS, cb, -1); - cb(cur, "result_norm", -1); - - // lm_head - cur = ggml_mul_mat(ctx0, model.output, cur); - cb(cur, "result_output", -1); - - ggml_build_forward_expand(gf, cur); - - return gf; - } - - struct ggml_cgraph * build_bert() { - struct ggml_cgraph * gf = ggml_new_graph_custom(ctx0, LLAMA_MAX_NODES, false); - - const int64_t n_embd_head = hparams.n_embd_head_v; - const int64_t n_embd_gqa = hparams.n_embd_v_gqa(); - - GGML_ASSERT(n_embd_head == hparams.n_embd_head_k); - - struct ggml_tensor * cur; - struct ggml_tensor * inpL; - - struct ggml_tensor * inp_pos = build_inp_pos(); - struct ggml_tensor * inp_mean = build_inp_mean(); - struct ggml_tensor * inp_cls = build_inp_cls(); - - // construct input embeddings (token, type, position) - inpL = llm_build_inp_embd(ctx0, lctx, hparams, batch, model.tok_embd, cb); - - // token types are hardcoded to zero ("Sentence A") - struct ggml_tensor * type_row0 = ggml_view_1d(ctx0, model.type_embd, n_embd, 0); - inpL = ggml_add(ctx0, inpL, type_row0); - if (model.arch == LLM_ARCH_BERT) { - inpL = ggml_add(ctx0, ggml_get_rows(ctx0, model.pos_embd, inp_pos), inpL); - } - cb(inpL, "inp_embd", -1); - - // embed layer norm - inpL = llm_build_norm(ctx0, inpL, hparams, model.tok_norm, model.tok_norm_b, LLM_NORM, cb, -1); - cb(inpL, "inp_norm", -1); - - // KQ_mask (mask for 1 head, it will be broadcasted to all heads) - struct ggml_tensor * KQ_mask = build_inp_KQ_mask(false); - - // iterate layers - for (int il = 0; il < n_layer; ++il) { - struct ggml_tensor * cur = inpL; - - struct ggml_tensor * Qcur; - struct ggml_tensor * Kcur; - struct ggml_tensor * Vcur; - - // self-attention - if (model.arch == LLM_ARCH_BERT) { - Qcur = ggml_add(ctx0, ggml_mul_mat(ctx0, model.layers[il].wq, cur), model.layers[il].bq); - cb(Qcur, "Qcur", il); - - Kcur = ggml_add(ctx0, ggml_mul_mat(ctx0, model.layers[il].wk, cur), model.layers[il].bk); - cb(Kcur, "Kcur", il); - - Vcur = ggml_add(ctx0, ggml_mul_mat(ctx0, model.layers[il].wv, cur), model.layers[il].bv); - cb(Vcur, "Vcur", il); - - Qcur = ggml_reshape_3d(ctx0, Qcur, n_embd_head, n_head, n_tokens); - Kcur = ggml_reshape_3d(ctx0, Kcur, n_embd_head, n_head_kv, n_tokens); - } else { - // compute Q and K and RoPE them - cur = ggml_mul_mat(ctx0, model.layers[il].wqkv, cur); - cb(cur, "wqkv", il); - - Qcur = ggml_cont(ctx0, ggml_view_2d(ctx0, cur, n_embd, n_tokens, cur->nb[1], 0*sizeof(float)*(n_embd))); - Kcur = ggml_cont(ctx0, ggml_view_2d(ctx0, cur, n_embd_gqa, n_tokens, cur->nb[1], 1*sizeof(float)*(n_embd))); - Vcur = ggml_cont(ctx0, ggml_view_2d(ctx0, cur, n_embd_gqa, n_tokens, cur->nb[1], 1*sizeof(float)*(n_embd + n_embd_gqa))); - - cb(Qcur, "Qcur", il); - cb(Kcur, "Kcur", il); - cb(Vcur, "Vcur", il); - - Qcur = ggml_rope_custom( - ctx0, ggml_reshape_3d(ctx0, Qcur, n_embd_head, n_head, n_tokens), inp_pos, - n_rot, rope_type, 0, n_orig_ctx, freq_base, freq_scale, - ext_factor, attn_factor, beta_fast, beta_slow - ); - cb(Qcur, "Qcur", il); - - Kcur = ggml_rope_custom( - ctx0, ggml_reshape_3d(ctx0, Kcur, n_embd_head, n_head_kv, n_tokens), inp_pos, - n_rot, rope_type, 0, n_orig_ctx, freq_base, freq_scale, - ext_factor, attn_factor, beta_fast, beta_slow - ); - cb(Kcur, "Kcur", il); - } - - struct ggml_tensor * q = ggml_permute(ctx0, Qcur, 0, 2, 1, 3); - struct ggml_tensor * k = ggml_cont(ctx0, ggml_permute(ctx0, Kcur, 0, 2, 1, 3)); - - struct ggml_tensor * kq = ggml_mul_mat(ctx0, k, q); - cb(kq, "kq", il); - - kq = ggml_soft_max_ext(ctx0, kq, KQ_mask, nullptr, 1.0f/sqrtf(float(n_embd_head)), hparams.f_max_alibi_bias); - cb(kq, "kq_soft_max_ext", il); - - struct ggml_tensor * v = ggml_cont(ctx0, ggml_transpose(ctx0, ggml_reshape_2d(ctx0, Vcur, n_embd_gqa, n_tokens))); - cb(v, "v", il); - - struct ggml_tensor * kqv = ggml_mul_mat(ctx0, ggml_reshape_3d(ctx0, v, n_tokens, n_embd_head, n_head_kv), kq); - cb(kqv, "kqv", il); - - struct ggml_tensor * kqv_merged = ggml_permute(ctx0, kqv, 0, 2, 1, 3); - cb(kqv_merged, "kqv_merged", il); - - cur = ggml_cont_2d(ctx0, kqv_merged, n_embd_gqa, n_tokens); - cb(cur, "kqv_merged_cont", il); - - ggml_build_forward_expand(gf, cur); - - cur = ggml_mul_mat(ctx0, model.layers[il].wo, cur); - if (model.layers[il].bo) { - cb(cur, "kqv_wo", il); - } - - if (model.layers[il].bo) { - cur = ggml_add(ctx0, cur, model.layers[il].bo); - } - cb(cur, "kqv_out", il); - - if (il == n_layer - 1 && pooling_type == LLAMA_POOLING_TYPE_NONE) { - // skip computing output for unused tokens - struct ggml_tensor * inp_out_ids = build_inp_out_ids(); - cur = ggml_get_rows(ctx0, cur, inp_out_ids); - inpL = ggml_get_rows(ctx0, inpL, inp_out_ids); - } - - // re-add the layer input - cur = ggml_add(ctx0, cur, inpL); - - // attention layer norm - cur = llm_build_norm(ctx0, cur, hparams, model.layers[il].attn_out_norm, model.layers[il].attn_out_norm_b, LLM_NORM, cb, il); - - struct ggml_tensor * ffn_inp = cur; - cb(ffn_inp, "ffn_inp", il); - - // feed-forward network - if (model.arch == LLM_ARCH_BERT) { - cur = llm_build_ffn(ctx0, cur, - model.layers[il].ffn_up, model.layers[il].ffn_up_b, - NULL, NULL, - model.layers[il].ffn_down, model.layers[il].ffn_down_b, - NULL, - LLM_FFN_GELU, LLM_FFN_SEQ, cb, il); - } else { - cur = llm_build_ffn(ctx0, cur, - model.layers[il].ffn_up, NULL, - model.layers[il].ffn_gate, NULL, - model.layers[il].ffn_down, NULL, - NULL, - LLM_FFN_SILU, LLM_FFN_PAR, cb, il); - } - cb(cur, "ffn_out", il); - - // attentions bypass the intermediate layer - cur = ggml_add(ctx0, cur, ffn_inp); - - // output layer norm - cur = llm_build_norm(ctx0, cur, hparams, model.layers[il].layer_out_norm, model.layers[il].layer_out_norm_b, LLM_NORM, cb, il); - - // input for next layer - inpL = cur; - } - - // final output - cur = inpL; - cb(cur, "result_embd", -1); - - // pooling layer - switch (pooling_type) { - case LLAMA_POOLING_TYPE_NONE: - { - // nop - } break; - case LLAMA_POOLING_TYPE_MEAN: - { - cur = ggml_mul_mat(ctx0, ggml_cont(ctx0, ggml_transpose(ctx0, cur)), inp_mean); - cb(cur, "result_embd_pooled", -1); - } break; - case LLAMA_POOLING_TYPE_CLS: - { - cur = ggml_get_rows(ctx0, cur, inp_cls); - cb(cur, "result_embd_pooled", -1); - } break; - case LLAMA_POOLING_TYPE_UNSPECIFIED: - { - GGML_ASSERT(false && "Invalid pooling type"); - } break; - } - - ggml_build_forward_expand(gf, cur); - - return gf; - } - - struct ggml_cgraph * build_bloom() { - struct ggml_cgraph * gf = ggml_new_graph_custom(ctx0, LLAMA_MAX_NODES, false); - - const int64_t n_embd_head = hparams.n_embd_head_v; - const int64_t n_embd_gqa = hparams.n_embd_v_gqa(); - GGML_ASSERT(n_embd_head == hparams.n_embd_head_k); - - struct ggml_tensor * cur; - struct ggml_tensor * inpL; - - inpL = llm_build_inp_embd(ctx0, lctx, hparams, batch, model.tok_embd, cb); - - // KQ_mask (mask for 1 head, it will be broadcasted to all heads) - struct ggml_tensor * KQ_mask = build_inp_KQ_mask(); - - // positions of the tokens in the KV cache - struct ggml_tensor * KQ_pos = build_inp_KQ_pos(); - - inpL = llm_build_norm(ctx0, inpL, hparams, - model.tok_norm, - model.tok_norm_b, - LLM_NORM, cb, -1); - cb(inpL, "inp_norm", -1); - - for (int il = 0; il < n_layer; ++il) { - cur = llm_build_norm(ctx0, inpL, hparams, - model.layers[il].attn_norm, - model.layers[il].attn_norm_b, - LLM_NORM, cb, il); - cb(cur, "attn_norm", il); - - // self-attention - { - cur = ggml_mul_mat(ctx0, model.layers[il].wqkv, cur); - cb(cur, "wqkv", il); - - cur = ggml_add(ctx0, cur, model.layers[il].bqkv); - cb(cur, "bqkv", il); - - struct ggml_tensor * Qcur = ggml_cont(ctx0, ggml_view_2d(ctx0, cur, n_embd, n_tokens, cur->nb[1], 0*sizeof(float)*(n_embd))); - struct ggml_tensor * Kcur = ggml_cont(ctx0, ggml_view_2d(ctx0, cur, n_embd_gqa, n_tokens, cur->nb[1], 1*sizeof(float)*(n_embd))); - struct ggml_tensor * Vcur = ggml_cont(ctx0, ggml_view_2d(ctx0, cur, n_embd_gqa, n_tokens, cur->nb[1], 1*sizeof(float)*(n_embd + n_embd_gqa))); - - cb(Qcur, "Qcur", il); - cb(Kcur, "Kcur", il); - cb(Vcur, "Vcur", il); - - Qcur = ggml_reshape_3d(ctx0, Qcur, n_embd_head, n_head, n_tokens); - - cur = llm_build_kv(ctx0, model, hparams, kv_self, gf, - model.layers[il].wo, model.layers[il].bo, - Kcur, Vcur, Qcur, KQ_mask, KQ_pos, n_ctx, n_tokens, kv_head, n_kv, 1.0f/sqrtf(float(n_embd_head)), cb, il); - } - - if (il == n_layer - 1) { - // skip computing output for unused tokens - struct ggml_tensor * inp_out_ids = build_inp_out_ids(); - cur = ggml_get_rows(ctx0, cur, inp_out_ids); - inpL = ggml_get_rows(ctx0, inpL, inp_out_ids); - } - - // Add the input - struct ggml_tensor * ffn_inp = ggml_add(ctx0, cur, inpL); - cb(ffn_inp, "ffn_inp", il); - - // FF - { - cur = llm_build_norm(ctx0, ffn_inp, hparams, - model.layers[il].ffn_norm, - model.layers[il].ffn_norm_b, - LLM_NORM, cb, il); - cb(cur, "ffn_norm", il); - - cur = llm_build_ffn(ctx0, cur, - model.layers[il].ffn_up, model.layers[il].ffn_up_b, - NULL, NULL, - model.layers[il].ffn_down, model.layers[il].ffn_down_b, - NULL, - LLM_FFN_GELU, LLM_FFN_SEQ, cb, il); - cb(cur, "ffn_out", il); - } - - inpL = ggml_add(ctx0, cur, ffn_inp); - cb(inpL, "l_out", il); - } - - cur = llm_build_norm(ctx0, inpL, hparams, - model.output_norm, - model.output_norm_b, - LLM_NORM, cb, -1); - cb(cur, "result_norm", -1); - - cur = ggml_mul_mat(ctx0, model.output, cur); - cb(cur, "result_output", -1); - - ggml_build_forward_expand(gf, cur); - - return gf; - } - - struct ggml_cgraph * build_mpt() { - struct ggml_cgraph * gf = ggml_new_graph_custom(ctx0, LLAMA_MAX_NODES, false); - - const int64_t n_embd_head = hparams.n_embd_head_v; - const int64_t n_embd_gqa = hparams.n_embd_v_gqa(); - GGML_ASSERT(n_embd_head == hparams.n_embd_head_k); - - struct ggml_tensor * cur; - struct ggml_tensor * pos; - struct ggml_tensor * inpL; - - inpL = llm_build_inp_embd(ctx0, lctx, hparams, batch, model.tok_embd, cb); - - // KQ_mask (mask for 1 head, it will be broadcasted to all heads) - struct ggml_tensor * KQ_mask = build_inp_KQ_mask(); - - // positions of the tokens in the KV cache - struct ggml_tensor * KQ_pos = build_inp_KQ_pos(); - - if (model.pos_embd) { - // inp_pos - contains the positions - struct ggml_tensor * inp_pos = build_inp_pos(); - pos = ggml_get_rows(ctx0, model.pos_embd, inp_pos); - cb(pos, "pos_embd", -1); - - inpL = ggml_add(ctx0, inpL, pos); - cb(inpL, "inpL", -1); - } - - for (int il = 0; il < n_layer; ++il) { - struct ggml_tensor * attn_norm; - - attn_norm = llm_build_norm(ctx0, inpL, hparams, - model.layers[il].attn_norm, - model.layers[il].attn_norm_b, - LLM_NORM, cb, il); - cb(attn_norm, "attn_norm", il); - - // self-attention - { - cur = attn_norm; - - cur = ggml_mul_mat(ctx0, model.layers[il].wqkv, cur); - cb(cur, "wqkv", il); - - if (model.layers[il].bqkv){ - cur = ggml_add(ctx0, cur, model.layers[il].bqkv); - cb(cur, "bqkv", il); - } - - if (hparams.f_clamp_kqv > 0.0f) { - cur = ggml_clamp(ctx0, cur, -hparams.f_clamp_kqv, hparams.f_clamp_kqv); - cb(cur, "wqkv_clamped", il); - } - - struct ggml_tensor * Qcur = ggml_cont(ctx0, ggml_view_2d(ctx0, cur, n_embd, n_tokens, cur->nb[1], 0*sizeof(float)*(n_embd))); - struct ggml_tensor * Kcur = ggml_cont(ctx0, ggml_view_2d(ctx0, cur, n_embd_gqa, n_tokens, cur->nb[1], 1*sizeof(float)*(n_embd))); - struct ggml_tensor * Vcur = ggml_cont(ctx0, ggml_view_2d(ctx0, cur, n_embd_gqa, n_tokens, cur->nb[1], 1*sizeof(float)*(n_embd + n_embd_gqa))); - - cb(Qcur, "Qcur", il); - cb(Kcur, "Kcur", il); - cb(Vcur, "Vcur", il); - - // Q/K Layernorm - if (model.layers[il].attn_q_norm) { - Qcur = llm_build_norm(ctx0, Qcur, hparams, - model.layers[il].attn_q_norm, - model.layers[il].attn_q_norm_b, - LLM_NORM, cb, il); - cb(Qcur, "Qcur", il); - - Kcur = llm_build_norm(ctx0, Kcur, hparams, - model.layers[il].attn_k_norm, - model.layers[il].attn_k_norm_b, - LLM_NORM, cb, il); - cb(Kcur, "Kcur", il); - - Qcur = ggml_reshape_3d(ctx0, Qcur, n_embd_head, n_head, n_tokens); - Kcur = ggml_reshape_3d(ctx0, Kcur, n_embd_head, n_head_kv, n_tokens); - - cur = llm_build_kv(ctx0, model, hparams, kv_self, gf, - model.layers[il].wo, model.layers[il].bo, - Kcur, Vcur, Qcur, KQ_mask, nullptr, n_ctx, n_tokens, kv_head, n_kv, 1.0f/sqrtf(float(n_embd_head)), cb, il); - } else { - Qcur = ggml_reshape_3d(ctx0, Qcur, n_embd_head, n_head, n_tokens); - cur = llm_build_kv(ctx0, model, hparams, kv_self, gf, - model.layers[il].wo, model.layers[il].bo, - Kcur, Vcur, Qcur, KQ_mask, KQ_pos, n_ctx, n_tokens, kv_head, n_kv, 1.0f/sqrtf(float(n_embd_head)), cb, il); - } - } - - if (il == n_layer - 1) { - // skip computing output for unused tokens - struct ggml_tensor * inp_out_ids = build_inp_out_ids(); - cur = ggml_get_rows(ctx0, cur, inp_out_ids); - inpL = ggml_get_rows(ctx0, inpL, inp_out_ids); - } - - // Add the input - struct ggml_tensor * ffn_inp = ggml_add(ctx0, cur, inpL); - cb(ffn_inp, "ffn_inp", il); - - // feed forward - { - cur = llm_build_norm(ctx0, ffn_inp, hparams, - model.layers[il].ffn_norm, - model.layers[il].ffn_norm_b, - LLM_NORM, cb, il); - cb(cur, "ffn_norm", il); - cur = llm_build_ffn(ctx0, cur, - model.layers[il].ffn_up, model.layers[il].ffn_up_b, - NULL, NULL, - model.layers[il].ffn_down, model.layers[il].ffn_down_b, - model.layers[il].ffn_act, - LLM_FFN_GELU, LLM_FFN_SEQ, cb, il); - cb(cur, "ffn_out", il); - } - - cur = ggml_add(ctx0, cur, ffn_inp); - cb(cur, "l_out", il); - - // input for next layer - inpL = cur; - } - - cur = inpL; - - cur = llm_build_norm(ctx0, cur, hparams, - model.output_norm, - model.output_norm_b, - LLM_NORM, cb, -1); - cb(cur, "result_norm", -1); - - cur = ggml_mul_mat(ctx0, model.output, cur); - cb(cur, "result_output", -1); - - ggml_build_forward_expand(gf, cur); - - return gf; - } - - struct ggml_cgraph * build_stablelm() { - struct ggml_cgraph * gf = ggml_new_graph(ctx0); - - const int64_t n_embd_head = hparams.n_embd_head_v; - GGML_ASSERT(n_embd_head == hparams.n_embd_head_k); - - struct ggml_tensor * cur; - struct ggml_tensor * inpL; - - inpL = llm_build_inp_embd(ctx0, lctx, hparams, batch, model.tok_embd, cb); - - // inp_pos - contains the positions - struct ggml_tensor * inp_pos = build_inp_pos(); - - // KQ_mask (mask for 1 head, it will be broadcasted to all heads) - struct ggml_tensor * KQ_mask = build_inp_KQ_mask(); - - for (int il = 0; il < n_layer; ++il) { - - - // norm - cur = llm_build_norm(ctx0, inpL, hparams, - model.layers[il].attn_norm, - model.layers[il].attn_norm_b, - LLM_NORM, cb, il); - cb(cur, "attn_norm", il); - - struct ggml_tensor * inpSA = cur; - - // self-attention - { - // compute Q and K and RoPE them - struct ggml_tensor * Qcur = ggml_mul_mat(ctx0, model.layers[il].wq, cur); - cb(Qcur, "Qcur", il); - if (model.layers[il].bq) { - Qcur = ggml_add(ctx0, Qcur, model.layers[il].bq); - cb(Qcur, "Qcur", il); - } - - struct ggml_tensor * Kcur = ggml_mul_mat(ctx0, model.layers[il].wk, cur); - cb(Kcur, "Kcur", il); - if (model.layers[il].bk) { - Kcur = ggml_add(ctx0, Kcur, model.layers[il].bk); - cb(Kcur, "Kcur", il); - } - - struct ggml_tensor * Vcur = ggml_mul_mat(ctx0, model.layers[il].wv, cur); - cb(Vcur, "Vcur", il); - if (model.layers[il].bv) { - Vcur = ggml_add(ctx0, Vcur, model.layers[il].bv); - cb(Vcur, "Vcur", il); - } - - Qcur = ggml_reshape_3d(ctx0, Qcur, n_embd_head, n_head, n_tokens); - cb(Qcur, "Qcur", il); - Kcur = ggml_reshape_3d(ctx0, Kcur, n_embd_head, n_head_kv, n_tokens); - cb(Kcur, "Kcur", il); - - if (model.layers[il].attn_q_norm) { - Qcur = llm_build_norm(ctx0, Qcur, hparams, - model.layers[il].attn_q_norm, - NULL, - LLM_NORM, cb, il); - cb(Qcur, "Qcur", il); - } - if (model.layers[il].attn_k_norm) { - Kcur = llm_build_norm(ctx0, Kcur, hparams, - model.layers[il].attn_k_norm, - NULL, - LLM_NORM, cb, il); - cb(Kcur, "Kcur", il); - } - - - Qcur = ggml_rope_custom( - ctx0, Qcur, inp_pos, - n_rot, rope_type, 0, n_orig_ctx, freq_base, freq_scale, - ext_factor, attn_factor, beta_fast, beta_slow - ); - cb(Qcur, "Qcur", il); - - Kcur = ggml_rope_custom( - ctx0, Kcur, inp_pos, - n_rot, rope_type, 0, n_orig_ctx, freq_base, freq_scale, - ext_factor, attn_factor, beta_fast, beta_slow - ); - cb(Kcur, "Kcur", il); - - cur = llm_build_kv(ctx0, model, hparams, kv_self, gf, - model.layers[il].wo, NULL, - Kcur, Vcur, Qcur, KQ_mask, nullptr, n_ctx, n_tokens, kv_head, n_kv, 1.0f/sqrtf(float(n_embd_head)), cb, il); - } - - if (il == n_layer - 1) { - // skip computing output for unused tokens - struct ggml_tensor * inp_out_ids = build_inp_out_ids(); - cur = ggml_get_rows(ctx0, cur, inp_out_ids); - inpL = ggml_get_rows(ctx0, inpL, inp_out_ids); - inpSA = ggml_get_rows(ctx0, inpSA, inp_out_ids); - } - - struct ggml_tensor * ffn_inp = ggml_add(ctx0, cur, inpL); - cb(ffn_inp, "ffn_inp", il); - - // feed-forward network - { - if (model.layers[il].ffn_norm) { - cur = llm_build_norm(ctx0, ffn_inp, hparams, - model.layers[il].ffn_norm, - model.layers[il].ffn_norm_b, - LLM_NORM, cb, il); - cb(cur, "ffn_norm", il); - } else { - // parallel residual - cur = inpSA; - } - cur = llm_build_ffn(ctx0, cur, - model.layers[il].ffn_up, NULL, - model.layers[il].ffn_gate, NULL, - model.layers[il].ffn_down, NULL, - NULL, - LLM_FFN_SILU, LLM_FFN_PAR, cb, il); - cb(cur, "ffn_out", il); - } - - cur = ggml_add(ctx0, cur, ffn_inp); - cb(cur, "l_out", il); - - // input for next layer - inpL = cur; - } - - cur = inpL; - - cur = llm_build_norm(ctx0, cur, hparams, - model.output_norm, - model.output_norm_b, - LLM_NORM, cb, -1); - cb(cur, "result_norm", -1); - - // lm_head - cur = ggml_mul_mat(ctx0, model.output, cur); - cb(cur, "result_output", -1); - - ggml_build_forward_expand(gf, cur); - - return gf; - } - - struct ggml_cgraph * build_qwen() { - struct ggml_cgraph * gf = ggml_new_graph_custom(ctx0, LLAMA_MAX_NODES, false); - - const int64_t n_embd_head = hparams.n_embd_head_v; - GGML_ASSERT(n_embd_head == hparams.n_embd_head_k); - - struct ggml_tensor * cur; - struct ggml_tensor * inpL; - - inpL = llm_build_inp_embd(ctx0, lctx, hparams, batch, model.tok_embd, cb); - - // inp_pos - contains the positions - struct ggml_tensor * inp_pos = build_inp_pos(); - - // KQ_mask (mask for 1 head, it will be broadcasted to all heads) - struct ggml_tensor * KQ_mask = build_inp_KQ_mask(); - - for (int il = 0; il < n_layer; ++il) { - struct ggml_tensor * inpSA = inpL; - - cur = llm_build_norm(ctx0, inpL, hparams, - model.layers[il].attn_norm, NULL, - LLM_NORM_RMS, cb, il); - cb(cur, "attn_norm", il); - - // self-attention - { - cur = ggml_mul_mat(ctx0, model.layers[il].wqkv, cur); - cb(cur, "wqkv", il); - - cur = ggml_add(ctx0, cur, model.layers[il].bqkv); - cb(cur, "bqkv", il); - - struct ggml_tensor * Qcur = ggml_cont(ctx0, ggml_view_2d(ctx0, cur, n_embd, n_tokens, cur->nb[1], 0*sizeof(float)*(n_embd))); - struct ggml_tensor * Kcur = ggml_cont(ctx0, ggml_view_2d(ctx0, cur, n_embd, n_tokens, cur->nb[1], 1*sizeof(float)*(n_embd))); - struct ggml_tensor * Vcur = ggml_cont(ctx0, ggml_view_2d(ctx0, cur, n_embd, n_tokens, cur->nb[1], 2*sizeof(float)*(n_embd))); - - cb(Qcur, "Qcur", il); - cb(Kcur, "Kcur", il); - cb(Vcur, "Vcur", il); - - Qcur = ggml_reshape_3d(ctx0, Qcur, n_embd_head, n_head, n_tokens); - Kcur = ggml_reshape_3d(ctx0, Kcur, n_embd_head, n_head_kv, n_tokens); - - // using mode = 2 for neox mode - Qcur = ggml_rope_custom( - ctx0, Qcur, inp_pos, n_rot, rope_type, 0, n_orig_ctx, - freq_base, freq_scale, ext_factor, attn_factor, beta_fast, beta_slow - ); - cb(Qcur, "Qcur", il); - - Kcur = ggml_rope_custom( - ctx0, Kcur, inp_pos, n_rot, rope_type, 0, n_orig_ctx, - freq_base, freq_scale, ext_factor, attn_factor, beta_fast, beta_slow - ); - cb(Kcur, "Kcur", il); - - cur = llm_build_kv(ctx0, model, hparams, kv_self, gf, - model.layers[il].wo, NULL, - Kcur, Vcur, Qcur, KQ_mask, nullptr, n_ctx, n_tokens, kv_head, n_kv, 1.0f/sqrtf(float(n_embd_head)), cb, il); - } - - if (il == n_layer - 1) { - // skip computing output for unused tokens - struct ggml_tensor * inp_out_ids = build_inp_out_ids(); - cur = ggml_get_rows(ctx0, cur, inp_out_ids); - inpSA = ggml_get_rows(ctx0, inpSA, inp_out_ids); - } - - struct ggml_tensor * ffn_inp = ggml_add(ctx0, cur, inpSA); - cb(ffn_inp, "ffn_inp", il); - - // feed-forward forward - { - cur = llm_build_norm(ctx0, ffn_inp, hparams, - model.layers[il].ffn_norm, NULL, - LLM_NORM_RMS, cb, il); - cb(cur, "ffn_norm", il); - - cur = llm_build_ffn(ctx0, cur, - model.layers[il].ffn_up, NULL, - model.layers[il].ffn_gate, NULL, - model.layers[il].ffn_down, NULL, - NULL, - LLM_FFN_SILU, LLM_FFN_PAR, cb, il); - cb(cur, "ffn_out", il); - } - - cur = ggml_add(ctx0, cur, ffn_inp); - cb(cur, "l_out", il); - - // input for next layer - inpL = cur; - } - - cur = inpL; - - cur = llm_build_norm(ctx0, cur, hparams, - model.output_norm, NULL, - LLM_NORM_RMS, cb, -1); - cb(cur, "result_norm", -1); - - // lm_head - cur = ggml_mul_mat(ctx0, model.output, cur); - cb(cur, "result_output", -1); - - ggml_build_forward_expand(gf, cur); - - return gf; - } - - struct ggml_cgraph * build_qwen2() { - struct ggml_cgraph * gf = ggml_new_graph_custom(ctx0, LLAMA_MAX_NODES, false); - - const int64_t n_embd_head = hparams.n_embd_head_v; - GGML_ASSERT(n_embd_head == hparams.n_embd_head_k); - GGML_ASSERT(n_embd_head == hparams.n_rot); - - struct ggml_tensor * cur; - struct ggml_tensor * inpL; - - inpL = llm_build_inp_embd(ctx0, lctx, hparams, batch, model.tok_embd, cb); - - // inp_pos - contains the positions - struct ggml_tensor * inp_pos = build_inp_pos(); - - // KQ_mask (mask for 1 head, it will be broadcasted to all heads) - struct ggml_tensor * KQ_mask = build_inp_KQ_mask(); - - for (int il = 0; il < n_layer; ++il) { - struct ggml_tensor * inpSA = inpL; - - // norm - cur = llm_build_norm(ctx0, inpL, hparams, - model.layers[il].attn_norm, NULL, - LLM_NORM_RMS, cb, il); - cb(cur, "attn_norm", il); - - // self-attention - { - // compute Q and K and RoPE them - struct ggml_tensor * Qcur = ggml_mul_mat(ctx0, model.layers[il].wq, cur); - cb(Qcur, "Qcur", il); - Qcur = ggml_add(ctx0, Qcur, model.layers[il].bq); - cb(Qcur, "Qcur", il); - - struct ggml_tensor * Kcur = ggml_mul_mat(ctx0, model.layers[il].wk, cur); - cb(Kcur, "Kcur", il); - Kcur = ggml_add(ctx0, Kcur, model.layers[il].bk); - cb(Kcur, "Kcur", il); - - struct ggml_tensor * Vcur = ggml_mul_mat(ctx0, model.layers[il].wv, cur); - cb(Vcur, "Vcur", il); - Vcur = ggml_add(ctx0, Vcur, model.layers[il].bv); - cb(Vcur, "Vcur", il); - - Qcur = ggml_rope_custom( - ctx0, ggml_reshape_3d(ctx0, Qcur, n_embd_head, n_head, n_tokens), inp_pos, - n_rot, rope_type, 0, n_orig_ctx, freq_base, freq_scale, - ext_factor, attn_factor, beta_fast, beta_slow - ); - cb(Qcur, "Qcur", il); - - Kcur = ggml_rope_custom( - ctx0, ggml_reshape_3d(ctx0, Kcur, n_embd_head, n_head_kv, n_tokens), inp_pos, - n_rot, rope_type, 0, n_orig_ctx, freq_base, freq_scale, - ext_factor, attn_factor, beta_fast, beta_slow - ); - cb(Kcur, "Kcur", il); - - cur = llm_build_kv(ctx0, model, hparams, kv_self, gf, - model.layers[il].wo, model.layers[il].bo, - Kcur, Vcur, Qcur, KQ_mask, nullptr, n_ctx, n_tokens, kv_head, n_kv, 1.0f/sqrtf(float(n_embd_head)), cb, il); - } - - if (il == n_layer - 1) { - // skip computing output for unused tokens - struct ggml_tensor * inp_out_ids = build_inp_out_ids(); - cur = ggml_get_rows(ctx0, cur, inp_out_ids); - inpSA = ggml_get_rows(ctx0, inpSA, inp_out_ids); - } - - struct ggml_tensor * ffn_inp = ggml_add(ctx0, cur, inpSA); - cb(ffn_inp, "ffn_inp", il); - - // feed-forward network - cur = llm_build_norm(ctx0, ffn_inp, hparams, - model.layers[il].ffn_norm, NULL, - LLM_NORM_RMS, cb, il); - cb(cur, "ffn_norm", il); - - cur = llm_build_ffn(ctx0, cur, - model.layers[il].ffn_up, NULL, - model.layers[il].ffn_gate, NULL, - model.layers[il].ffn_down, NULL, - NULL, - LLM_FFN_SILU, LLM_FFN_PAR, cb, il); - cb(cur, "ffn_out", il); - - cur = ggml_add(ctx0, cur, ffn_inp); - cb(cur, "l_out", il); - - // input for next layer - inpL = cur; - } - - cur = inpL; - - cur = llm_build_norm(ctx0, cur, hparams, - model.output_norm, NULL, - LLM_NORM_RMS, cb, -1); - cb(cur, "result_norm", -1); - - // lm_head - cur = ggml_mul_mat(ctx0, model.output, cur); - cb(cur, "result_output", -1); - - ggml_build_forward_expand(gf, cur); - - return gf; - } - - struct ggml_cgraph * build_qwen2moe() { - struct ggml_cgraph * gf = ggml_new_graph_custom(ctx0, LLAMA_MAX_NODES, false); - - // mutable variable, needed during the last layer of the computation to skip unused tokens - int32_t n_tokens = this->n_tokens; - - const int64_t n_embd_head = hparams.n_embd_head_v; - GGML_ASSERT(n_embd_head == hparams.n_embd_head_k); - GGML_ASSERT(n_embd_head == hparams.n_rot); - - struct ggml_tensor * cur; - struct ggml_tensor * inpL; - - inpL = llm_build_inp_embd(ctx0, lctx, hparams, batch, model.tok_embd, cb); - - // inp_pos - contains the positions - struct ggml_tensor * inp_pos = build_inp_pos(); - - // KQ_mask (mask for 1 head, it will be broadcasted to all heads) - struct ggml_tensor * KQ_mask = build_inp_KQ_mask(); - - for (int il = 0; il < n_layer; ++il) { - struct ggml_tensor * inpSA = inpL; - - // norm - cur = llm_build_norm(ctx0, inpL, hparams, - model.layers[il].attn_norm, NULL, - LLM_NORM_RMS, cb, il); - cb(cur, "attn_norm", il); - - // self_attention - { - // compute Q and K and RoPE them - struct ggml_tensor * Qcur = ggml_mul_mat(ctx0, model.layers[il].wq, cur); - cb(Qcur, "Qcur", il); - Qcur = ggml_add(ctx0, Qcur, model.layers[il].bq); - cb(Qcur, "Qcur", il); - - struct ggml_tensor * Kcur = ggml_mul_mat(ctx0, model.layers[il].wk, cur); - cb(Kcur, "Kcur", il); - Kcur = ggml_add(ctx0, Kcur, model.layers[il].bk); - cb(Kcur, "Kcur", il); - - struct ggml_tensor * Vcur = ggml_mul_mat(ctx0, model.layers[il].wv, cur); - cb(Vcur, "Vcur", il); - Vcur = ggml_add(ctx0, Vcur, model.layers[il].bv); - cb(Vcur, "Vcur", il); - - Qcur = ggml_rope_custom( - ctx0, ggml_reshape_3d(ctx0, Qcur, n_embd_head, n_head, n_tokens), inp_pos, - n_rot, rope_type, 0, n_orig_ctx, freq_base, freq_scale, - ext_factor, attn_factor, beta_fast, beta_slow - ); - cb(Qcur, "Qcur", il); - - Kcur = ggml_rope_custom( - ctx0, ggml_reshape_3d(ctx0, Kcur, n_embd_head, n_head_kv, n_tokens), inp_pos, - n_rot, rope_type, 0, n_orig_ctx, freq_base, freq_scale, - ext_factor, attn_factor, beta_fast, beta_slow - ); - cb(Kcur, "Kcur", il); - - cur = llm_build_kv(ctx0, model, hparams, kv_self, gf, - model.layers[il].wo, model.layers[il].bo, - Kcur, Vcur, Qcur, KQ_mask, nullptr, n_ctx, n_tokens, kv_head, n_kv, 1.0f/sqrtf(float(n_embd_head)), cb, il); - } - - if (il == n_layer - 1) { - // skip computing output for unused tokens - struct ggml_tensor * inp_out_ids = build_inp_out_ids(); - n_tokens = n_outputs; - cur = ggml_get_rows(ctx0, cur, inp_out_ids); - inpSA = ggml_get_rows(ctx0, inpSA, inp_out_ids); - } - - struct ggml_tensor * ffn_inp = ggml_add(ctx0, cur, inpSA); - cb(ffn_inp, "ffn_inp", il); - - // MoE branch - cur = llm_build_norm(ctx0, ffn_inp, hparams, - model.layers[il].ffn_norm, NULL, - LLM_NORM_RMS, cb, il); - cb(cur, "ffn_norm", il); - - ggml_tensor * moe_out = - llm_build_moe_ffn(ctx0, cur, - model.layers[il].ffn_gate_inp, - model.layers[il].ffn_up_exps, - model.layers[il].ffn_gate_exps, - model.layers[il].ffn_down_exps, - n_expert, n_expert_used, - LLM_FFN_SILU, false, - cb, il); - cb(cur, "ffn_moe_out", il); - - // FFN shared expert - { - ggml_tensor * cur_gate_inp = ggml_mul_mat(ctx0, model.layers[il].ffn_gate_inp_shexp, cur); - cb(cur_gate_inp, "ffn_shexp_gate_inp", il); - - // sigmoid - ggml_tensor * cur_gate = ggml_div(ctx0, ggml_silu(ctx0, cur_gate_inp), cur_gate_inp); - cb(cur_gate, "ffn_shexp_gate", il); - - ggml_tensor * cur_ffn = llm_build_ffn(ctx0, cur, - model.layers[il].ffn_up_shexp, NULL, - model.layers[il].ffn_gate_shexp, NULL, - model.layers[il].ffn_down_shexp, NULL, - NULL, - LLM_FFN_SILU, LLM_FFN_PAR, cb, il); - cb(cur_ffn, "ffn_shexp", il); - - ggml_tensor * ffn_shexp_out = ggml_mul(ctx0, cur_ffn, cur_gate); - cb(ffn_shexp_out, "ffn_shexp_out", il); - - moe_out = ggml_add(ctx0, moe_out, ffn_shexp_out); - cb(moe_out, "ffn_out", il); - - cur = moe_out; - } - - cur = ggml_add(ctx0, cur, ffn_inp); - cb(cur, "l_out", il); - - // input for next layer - inpL = cur; - } - - cur = inpL; - - cur = llm_build_norm(ctx0, cur, hparams, - model.output_norm, NULL, - LLM_NORM_RMS, cb, -1); - cb(cur, "result_norm", -1); - - // lm_head - cur = ggml_mul_mat(ctx0, model.output, cur); - cb(cur, "result_output", -1); - - ggml_build_forward_expand(gf, cur); - - return gf; - } - - struct ggml_cgraph * build_phi2() { - struct ggml_cgraph * gf = ggml_new_graph_custom(ctx0, LLAMA_MAX_NODES, false); - - const int64_t n_embd_head = hparams.n_embd_head_v; - const int64_t n_embd_gqa = hparams.n_embd_v_gqa(); - GGML_ASSERT(n_embd_head == hparams.n_embd_head_k); - - struct ggml_tensor * cur; - struct ggml_tensor * attn_norm_output; - struct ggml_tensor * ffn_output; - struct ggml_tensor * inpL; - - inpL = llm_build_inp_embd(ctx0, lctx, hparams, batch, model.tok_embd, cb); - - // inp_pos - contains the positions - struct ggml_tensor * inp_pos = build_inp_pos(); - - // KQ_mask (mask for 1 head, it will be broadcasted to all heads) - struct ggml_tensor * KQ_mask = build_inp_KQ_mask(); - - for (int il = 0; il < n_layer; ++il) { - attn_norm_output = llm_build_norm(ctx0, inpL, hparams, - model.layers[il].attn_norm, - model.layers[il].attn_norm_b, - LLM_NORM, cb, il); - cb(attn_norm_output, "attn_norm", il); - - // self-attention - { - struct ggml_tensor * Qcur = nullptr; - struct ggml_tensor * Kcur = nullptr; - struct ggml_tensor * Vcur = nullptr; - - if (model.layers[il].wqkv) { - cur = ggml_mul_mat(ctx0, model.layers[il].wqkv, attn_norm_output); - cb(cur, "wqkv", il); - - cur = ggml_add(ctx0, cur, model.layers[il].bqkv); - cb(cur, "bqkv", il); - - Qcur = ggml_cont(ctx0, ggml_view_2d(ctx0, cur, n_embd, n_tokens, cur->nb[1], 0*sizeof(float)*(n_embd))); - Kcur = ggml_cont(ctx0, ggml_view_2d(ctx0, cur, n_embd_gqa, n_tokens, cur->nb[1], 1*sizeof(float)*(n_embd))); - Vcur = ggml_cont(ctx0, ggml_view_2d(ctx0, cur, n_embd_gqa, n_tokens, cur->nb[1], 1*sizeof(float)*(n_embd + n_embd_gqa))); - } else { - Qcur = ggml_add(ctx0, ggml_mul_mat(ctx0, model.layers[il].wq, attn_norm_output), model.layers[il].bq); - Kcur = ggml_add(ctx0, ggml_mul_mat(ctx0, model.layers[il].wk, attn_norm_output), model.layers[il].bk); - Vcur = ggml_add(ctx0, ggml_mul_mat(ctx0, model.layers[il].wv, attn_norm_output), model.layers[il].bv); - } - - cb(Qcur, "Qcur", il); - cb(Kcur, "Kcur", il); - cb(Vcur, "Vcur", il); - - Qcur = ggml_reshape_3d(ctx0, Qcur, n_embd_head, n_head, n_tokens); - Kcur = ggml_reshape_3d(ctx0, Kcur, n_embd_head, n_head_kv, n_tokens); - - Qcur = ggml_rope_custom( - ctx0, Qcur, inp_pos, n_rot, rope_type, 0, n_orig_ctx, - freq_base, freq_scale, ext_factor, attn_factor, beta_fast, beta_slow - ); - cb(Qcur, "Qcur", il); - - // with phi2, we scale the Q to avoid precision issues - // ref: https://github.com/ml-explore/mlx-examples/blob/08e862336ade809bc37d1035f94b359e7d1a5152/phi2/phi2.py#L64-L66 - Qcur = ggml_scale(ctx0, Qcur, 1.0f/sqrtf(float(n_embd_head))); - cb(Qcur, "Qcur", il); - - Kcur = ggml_rope_custom( - ctx0, Kcur, inp_pos, n_rot, rope_type, 0, n_orig_ctx, - freq_base, freq_scale, ext_factor, attn_factor, beta_fast, beta_slow - ); - cb(Kcur, "Kcur", il); - - cur = llm_build_kv(ctx0, model, hparams, kv_self, gf, - model.layers[il].wo, model.layers[il].bo, - Kcur, Vcur, Qcur, KQ_mask, nullptr, n_ctx, n_tokens, kv_head, n_kv, 1.0f, cb, il); - } - - if (il == n_layer - 1) { - // skip computing output for unused tokens - struct ggml_tensor * inp_out_ids = build_inp_out_ids(); - cur = ggml_get_rows(ctx0, cur, inp_out_ids); - inpL = ggml_get_rows(ctx0, inpL, inp_out_ids); - attn_norm_output = ggml_get_rows(ctx0, attn_norm_output, inp_out_ids); - } - - // FF - { - ffn_output = llm_build_ffn(ctx0, attn_norm_output, - model.layers[il].ffn_up, model.layers[il].ffn_up_b, - NULL, NULL, - model.layers[il].ffn_down, model.layers[il].ffn_down_b, - NULL, - LLM_FFN_GELU, LLM_FFN_SEQ, cb, il); - cb(ffn_output, "ffn_out", il); - } - - cur = ggml_add(ctx0, cur, ffn_output); - cb(cur, "l_out", il); - - cur = ggml_add(ctx0, cur, inpL); - cb(cur, "l_out", il); - - inpL = cur; - } - - cur = llm_build_norm(ctx0, inpL, hparams, - model.output_norm, - model.output_norm_b, - LLM_NORM, cb, -1); - cb(cur, "result_norm", -1); - - cur = ggml_mul_mat(ctx0, model.output, cur); - cb(cur, "result_output_no_bias", -1); - - cur = ggml_add(ctx0, cur, model.output_b); - cb(cur, "result_output", -1); - ggml_build_forward_expand(gf, cur); - return gf; - } - - struct ggml_cgraph * build_phi3() { - struct ggml_cgraph * gf = ggml_new_graph_custom(ctx0, LLAMA_MAX_NODES, false); - - const int64_t n_embd_head = hparams.n_embd_head_v; - const int64_t n_embd_gqa = hparams.n_embd_v_gqa(); - GGML_ASSERT(n_embd_head == hparams.n_embd_head_k); - - struct ggml_tensor * cur; - struct ggml_tensor * inpL; - - inpL = llm_build_inp_embd(ctx0, lctx, hparams, batch, model.tok_embd, cb); - - // inp_pos - contains the positions - struct ggml_tensor * inp_pos = build_inp_pos(); - - // KQ_mask (mask for 1 head, it will be broadcasted to all heads) - struct ggml_tensor * KQ_mask = build_inp_KQ_mask(); - - for (int il = 0; il < n_layer; ++il) { - auto residual = inpL; - - // self-attention - { - struct ggml_tensor* attn_norm_output = llm_build_norm(ctx0, inpL, hparams, - model.layers[il].attn_norm, - NULL, - LLM_NORM_RMS, cb, il); - cb(attn_norm_output, "attn_norm", il); - - struct ggml_tensor * Qcur = nullptr; - struct ggml_tensor * Kcur = nullptr; - struct ggml_tensor * Vcur = nullptr; - - if (model.layers[il].wqkv) { - cur = ggml_mul_mat(ctx0, model.layers[il].wqkv, attn_norm_output); - cb(cur, "wqkv", il); - - Qcur = ggml_cont(ctx0, ggml_view_2d(ctx0, cur, n_embd, n_tokens, cur->nb[1], 0 * sizeof(float) * (n_embd))); - Kcur = ggml_cont(ctx0, ggml_view_2d(ctx0, cur, n_embd_gqa, n_tokens, cur->nb[1], 1 * sizeof(float) * (n_embd))); - Vcur = ggml_cont(ctx0, ggml_view_2d(ctx0, cur, n_embd_gqa, n_tokens, cur->nb[1], 1 * sizeof(float) * (n_embd + n_embd_gqa))); - } - else { - Qcur = ggml_add(ctx0, ggml_mul_mat(ctx0, model.layers[il].wq, attn_norm_output), model.layers[il].bq); - Kcur = ggml_add(ctx0, ggml_mul_mat(ctx0, model.layers[il].wk, attn_norm_output), model.layers[il].bk); - Vcur = ggml_add(ctx0, ggml_mul_mat(ctx0, model.layers[il].wv, attn_norm_output), model.layers[il].bv); - } - - cb(Qcur, "Qcur", il); - cb(Kcur, "Kcur", il); - cb(Vcur, "Vcur", il); - - Qcur = ggml_reshape_3d(ctx0, Qcur, n_embd_head, n_head, n_tokens); - Kcur = ggml_reshape_3d(ctx0, Kcur, n_embd_head, n_head_kv, n_tokens); - - Qcur = ggml_rope_custom( - ctx0, Qcur, inp_pos, n_rot, rope_type, 0, n_orig_ctx, - freq_base, freq_scale, ext_factor, attn_factor, beta_fast, beta_slow - ); - cb(Qcur, "Qcur", il); - - Qcur = ggml_scale(ctx0, Qcur, 1.0f / sqrtf(float(n_embd_head))); - cb(Qcur, "Qcur", il); - - Kcur = ggml_rope_custom( - ctx0, Kcur, inp_pos, n_rot, rope_type, 0, n_orig_ctx, - freq_base, freq_scale, ext_factor, attn_factor, beta_fast, beta_slow - ); - cb(Kcur, "Kcur", il); - - cur = llm_build_kv(ctx0, model, hparams, kv_self, gf, - model.layers[il].wo, NULL, - Kcur, Vcur, Qcur, KQ_mask, nullptr, n_ctx, n_tokens, kv_head, n_kv, 1.0f, cb, il); - } - - if (il == n_layer - 1) { - // skip computing output for unused tokens - struct ggml_tensor* inp_out_ids = build_inp_out_ids(); - cur = ggml_get_rows(ctx0, cur, inp_out_ids); - residual = ggml_get_rows(ctx0, residual, inp_out_ids); - } - - cur = ggml_add(ctx0, cur, residual); - residual = cur; - - cur = llm_build_norm(ctx0, cur, hparams, - model.layers[il].ffn_norm, NULL, - LLM_NORM_RMS, cb, il); - cb(cur, "ffn_norm", il); - - // FF - // special-case: the up and gate tensors are merged into a single tensor - // TOOD: support into llm_build_ffn - { - struct ggml_tensor* up = ggml_mul_mat(ctx0, model.layers[il].ffn_up, cur); - cb(up, "ffn_up", il); - - auto g = ggml_cont(ctx0, ggml_view_2d(ctx0, up, up->ne[0] / 2, up->ne[1], ggml_row_size(up->type, up->ne[0]), 0)); - auto y = ggml_cont(ctx0, ggml_view_2d(ctx0, up, up->ne[0] / 2, up->ne[1], ggml_row_size(up->type, up->ne[0]), up->nb[1] / 2)); - - y = ggml_mul(ctx0, y, ggml_silu(ctx0, g)); - cb(y, "ffn_gate", il); - - auto down = ggml_mul_mat(ctx0, model.layers[il].ffn_down, y); - cb(down, "ffn_down", il); - - cur = down; - cb(cur, "ffn_out", il); - } - - cur = ggml_add(ctx0, residual, cur); - cb(cur, "l_out", il); - - inpL = cur; - } - - cur = llm_build_norm(ctx0, inpL, hparams, - model.output_norm, - NULL, - LLM_NORM_RMS, cb, -1); - cb(cur, "result_norm", -1); - - cur = ggml_mul_mat(ctx0, model.output, cur); - cb(cur, "result_output", -1); - - ggml_build_forward_expand(gf, cur); - - return gf; - } - - - struct ggml_cgraph * build_plamo() { - struct ggml_cgraph * gf = ggml_new_graph(ctx0); - - const int64_t n_embd_head = hparams.n_embd_head_v; - GGML_ASSERT(n_embd_head == hparams.n_embd_head_k); - GGML_ASSERT(n_embd_head == hparams.n_rot); - - struct ggml_tensor * cur; - struct ggml_tensor * inpL; - - inpL = llm_build_inp_embd(ctx0, lctx, hparams, batch, model.tok_embd, cb); - - // inp_pos - contains the positions - struct ggml_tensor * inp_pos = build_inp_pos(); - - // KQ_mask (mask for 1 head, it will be broadcasted to all heads) - struct ggml_tensor * KQ_mask = build_inp_KQ_mask(); - - for (int il = 0; il < n_layer; ++il) { - - // norm - cur = llm_build_norm(ctx0, inpL, hparams, - model.layers[il].attn_norm, NULL, - LLM_NORM_RMS, cb, il); - cb(cur, "attn_norm", il); - - struct ggml_tensor * attention_norm = cur; - - // self-attention - { - // compute Q and K and RoPE them - struct ggml_tensor * Qcur = ggml_mul_mat(ctx0, model.layers[il].wq, cur); - cb(Qcur, "Qcur", il); - - struct ggml_tensor * Kcur = ggml_mul_mat(ctx0, model.layers[il].wk, cur); - cb(Kcur, "Kcur", il); - - struct ggml_tensor * Vcur = ggml_mul_mat(ctx0, model.layers[il].wv, cur); - cb(Vcur, "Vcur", il); - - Qcur = ggml_rope_custom( - ctx0, ggml_reshape_3d(ctx0, Qcur, n_rot, n_head, n_tokens), inp_pos, - n_embd_head, rope_type, 0, n_orig_ctx, freq_base, freq_scale, - ext_factor, attn_factor, beta_fast, beta_slow); - cb(Qcur, "Qcur", il); - - Kcur = ggml_rope_custom( - ctx0, ggml_reshape_3d(ctx0, Kcur, n_rot, n_head_kv, n_tokens), inp_pos, - n_embd_head, rope_type, 0, n_orig_ctx, freq_base, freq_scale, - ext_factor, attn_factor, beta_fast, beta_slow); - cb(Kcur, "Kcur", il); - - cur = llm_build_kv(ctx0, model, hparams, kv_self, gf, - model.layers[il].wo, NULL, - Kcur, Vcur, Qcur, KQ_mask, nullptr, n_ctx, n_tokens, kv_head, n_kv, 1.0f/sqrtf(float(n_embd_head)), cb, il); - } - struct ggml_tensor * sa_out = cur; - - cur = attention_norm; - - if (il == n_layer - 1) { - // skip computing output for unused tokens - struct ggml_tensor * inp_out_ids = build_inp_out_ids(); - cur = ggml_get_rows(ctx0, cur, inp_out_ids); - sa_out = ggml_get_rows(ctx0, sa_out, inp_out_ids); - inpL = ggml_get_rows(ctx0, inpL, inp_out_ids); - } - - // feed-forward network - { - cur = llm_build_ffn(ctx0, cur, - model.layers[il].ffn_up, NULL, - model.layers[il].ffn_gate, NULL, - model.layers[il].ffn_down, NULL, - NULL, - LLM_FFN_SILU, LLM_FFN_PAR, cb, il); - cb(cur, "ffn_out", il); - } - - cur = ggml_add(ctx0, cur, sa_out); - cb(cur, "l_out", il); - - cur = ggml_add(ctx0, cur, inpL); - cb(cur, "l_out", il); - - // input for next layer - inpL = cur; - } - - cur = inpL; - - cur = llm_build_norm(ctx0, cur, hparams, - model.output_norm, NULL, - LLM_NORM_RMS, cb, -1); - cb(cur, "result_norm", -1); - - // lm_head - cur = ggml_mul_mat(ctx0, model.output, cur); - cb(cur, "result_output", -1); - - ggml_build_forward_expand(gf, cur); - - return gf; - } - - struct ggml_cgraph * build_gpt2() { - struct ggml_cgraph * gf = ggml_new_graph_custom(ctx0, LLAMA_MAX_NODES, false); - - const int64_t n_embd_head = hparams.n_embd_head_v; - const int64_t n_embd_gqa = hparams.n_embd_v_gqa(); - GGML_ASSERT(n_embd_head == hparams.n_embd_head_k); - - struct ggml_tensor * cur; - struct ggml_tensor * pos; - struct ggml_tensor * inpL; - - inpL = llm_build_inp_embd(ctx0, lctx, hparams, batch, model.tok_embd, cb); - - // inp_pos - contains the positions - struct ggml_tensor * inp_pos = build_inp_pos(); - - // KQ_mask (mask for 1 head, it will be broadcasted to all heads) - struct ggml_tensor * KQ_mask = build_inp_KQ_mask(); - - pos = ggml_get_rows(ctx0, model.pos_embd, inp_pos); - cb(pos, "pos_embd", -1); - - inpL = ggml_add(ctx0, inpL, pos); - cb(inpL, "inpL", -1); - - for (int il = 0; il < n_layer; ++il) { - cur = llm_build_norm(ctx0, inpL, hparams, - model.layers[il].attn_norm, - model.layers[il].attn_norm_b, - LLM_NORM, cb, il); - cb(cur, "attn_norm", il); - - // self-attention - { - cur = ggml_mul_mat(ctx0, model.layers[il].wqkv, cur); - cb(cur, "wqkv", il); - - cur = ggml_add(ctx0, cur, model.layers[il].bqkv); - cb(cur, "bqkv", il); - - struct ggml_tensor * Qcur = ggml_cont(ctx0, ggml_view_2d(ctx0, cur, n_embd, n_tokens, cur->nb[1], 0*sizeof(float)*(n_embd))); - struct ggml_tensor * Kcur = ggml_cont(ctx0, ggml_view_2d(ctx0, cur, n_embd_gqa, n_tokens, cur->nb[1], 1*sizeof(float)*(n_embd))); - struct ggml_tensor * Vcur = ggml_cont(ctx0, ggml_view_2d(ctx0, cur, n_embd_gqa, n_tokens, cur->nb[1], 1*sizeof(float)*(n_embd + n_embd_gqa))); - - cb(Qcur, "Qcur", il); - cb(Kcur, "Kcur", il); - cb(Vcur, "Vcur", il); - - Qcur = ggml_reshape_3d(ctx0, Qcur, n_embd_head, n_head, n_tokens); - - cur = llm_build_kv(ctx0, model, hparams, kv_self, gf, - model.layers[il].wo, model.layers[il].bo, - Kcur, Vcur, Qcur, KQ_mask, nullptr, n_ctx, n_tokens, kv_head, n_kv, 1.0f/sqrtf(float(n_embd_head)), cb, il); - } - - if (il == n_layer - 1) { - // skip computing output for unused tokens - struct ggml_tensor * inp_out_ids = build_inp_out_ids(); - cur = ggml_get_rows(ctx0, cur, inp_out_ids); - inpL = ggml_get_rows(ctx0, inpL, inp_out_ids); - } - - // add the input - struct ggml_tensor * ffn_inp = ggml_add(ctx0, cur, inpL); - cb(ffn_inp, "ffn_inp", il); - - // FF - { - cur = llm_build_norm(ctx0, ffn_inp, hparams, - model.layers[il].ffn_norm, - model.layers[il].ffn_norm_b, - LLM_NORM, cb, il); - cb(cur, "ffn_norm", il); - - cur = llm_build_ffn(ctx0, cur, - model.layers[il].ffn_up, model.layers[il].ffn_up_b, - NULL, NULL, - model.layers[il].ffn_down, model.layers[il].ffn_down_b, - NULL, - LLM_FFN_GELU, LLM_FFN_SEQ, cb, il); - cb(cur, "ffn_out", il); - } - - inpL = ggml_add(ctx0, cur, ffn_inp); - cb(inpL, "l_out", il); - } - - cur = llm_build_norm(ctx0, inpL, hparams, - model.output_norm, - model.output_norm_b, - LLM_NORM, cb, -1); - cb(cur, "result_norm", -1); - - cur = ggml_mul_mat(ctx0, model.output, cur); - cb(cur, "result_output", -1); - - ggml_build_forward_expand(gf, cur); - - return gf; - } - - struct ggml_cgraph * build_codeshell() { - struct ggml_cgraph * gf = ggml_new_graph_custom(ctx0, LLAMA_MAX_NODES, false); - - const int64_t n_embd_head = hparams.n_embd_head_v; - const int64_t n_embd_gqa = hparams.n_embd_v_gqa(); - GGML_ASSERT(n_embd_head == hparams.n_embd_head_k); - GGML_ASSERT(n_embd_head == hparams.n_rot); - - struct ggml_tensor * cur; - struct ggml_tensor * inpL; - - inpL = llm_build_inp_embd(ctx0, lctx, hparams, batch, model.tok_embd, cb); - - // inp_pos - contains the positions - struct ggml_tensor * inp_pos = build_inp_pos(); - - // KQ_mask (mask for 1 head, it will be broadcasted to all heads) - struct ggml_tensor * KQ_mask = build_inp_KQ_mask(); - - for (int il = 0; il < n_layer; ++il) { - cur = llm_build_norm(ctx0, inpL, hparams, - model.layers[il].attn_norm, - model.layers[il].attn_norm_b, - LLM_NORM, cb, il); - cb(cur, "attn_norm", il); - - // self-attention - { - cur = ggml_mul_mat(ctx0, model.layers[il].wqkv, cur); - cb(cur, "wqkv", il); - - cur = ggml_add(ctx0, cur, model.layers[il].bqkv); - cb(cur, "bqkv", il); - - struct ggml_tensor * tmpq = ggml_cont(ctx0, ggml_view_2d(ctx0, cur, n_embd, n_tokens, cur->nb[1], 0*sizeof(float)*(n_embd))); - struct ggml_tensor * tmpk = ggml_cont(ctx0, ggml_view_2d(ctx0, cur, n_embd_gqa, n_tokens, cur->nb[1], 1*sizeof(float)*(n_embd))); - struct ggml_tensor * Vcur = ggml_cont(ctx0, ggml_view_2d(ctx0, cur, n_embd_gqa, n_tokens, cur->nb[1], 1*sizeof(float)*(n_embd + n_embd_gqa))); - - cb(tmpq, "tmpq", il); - cb(tmpk, "tmpk", il); - cb(Vcur, "Vcur", il); - - struct ggml_tensor * Qcur = ggml_rope_custom( - ctx0, ggml_reshape_3d(ctx0, tmpq, n_embd_head, n_head, n_tokens), inp_pos, - n_rot, rope_type, 0, n_orig_ctx, freq_base, freq_scale, - ext_factor, attn_factor, beta_fast, beta_slow - ); - cb(Qcur, "Qcur", il); - - struct ggml_tensor * Kcur = ggml_rope_custom( - ctx0, ggml_reshape_3d(ctx0, tmpk, n_embd_head, n_head_kv, n_tokens), inp_pos, - n_rot, rope_type, 0, n_orig_ctx, freq_base, freq_scale, - ext_factor, attn_factor, beta_fast, beta_slow - ); - cb(Kcur, "Kcur", il); - - cur = llm_build_kv(ctx0, model, hparams, kv_self, gf, - model.layers[il].wo, model.layers[il].bo, - Kcur, Vcur, Qcur, KQ_mask, nullptr, n_ctx, n_tokens, kv_head, n_kv, 1.0f/sqrtf(float(n_embd_head)), cb, il); - } - - if (il == n_layer - 1) { - // skip computing output for unused tokens - struct ggml_tensor * inp_out_ids = build_inp_out_ids(); - cur = ggml_get_rows(ctx0, cur, inp_out_ids); - inpL = ggml_get_rows(ctx0, inpL, inp_out_ids); - } - - // add the input - struct ggml_tensor * ffn_inp = ggml_add(ctx0, cur, inpL); - cb(ffn_inp, "ffn_inp", il); - - // FF - { - cur = llm_build_norm(ctx0, ffn_inp, hparams, - model.layers[il].ffn_norm, - model.layers[il].ffn_norm_b, - LLM_NORM, cb, il); - cb(cur, "ffn_norm", il); - - cur = llm_build_ffn(ctx0, cur, - model.layers[il].ffn_up, model.layers[il].ffn_up_b, - NULL, NULL, - model.layers[il].ffn_down, model.layers[il].ffn_down_b, - NULL, - LLM_FFN_GELU, LLM_FFN_SEQ, cb, il); - cb(cur, "ffn_out", il); - } - - inpL = ggml_add(ctx0, cur, ffn_inp); - cb(inpL, "l_out", il); - } - - cur = llm_build_norm(ctx0, inpL, hparams, - model.output_norm, - model.output_norm_b, - LLM_NORM, cb, -1); - cb(cur, "result_norm", -1); - - cur = ggml_mul_mat(ctx0, model.output, cur); - cb(cur, "result_output", -1); - - ggml_build_forward_expand(gf, cur); - - return gf; - } - - struct ggml_cgraph * build_orion() { - struct ggml_cgraph * gf = ggml_new_graph_custom(ctx0, LLAMA_MAX_NODES, false); - - const int64_t n_embd_head = hparams.n_embd_head_v; - GGML_ASSERT(n_embd_head == hparams.n_embd_head_k); - GGML_ASSERT(n_embd_head == hparams.n_rot); - - struct ggml_tensor * cur; - struct ggml_tensor * inpL; - - inpL = llm_build_inp_embd(ctx0, lctx, hparams, batch, model.tok_embd, cb); - - // inp_pos - contains the positions - struct ggml_tensor * inp_pos = build_inp_pos(); - - // KQ_mask (mask for 1 head, it will be broadcasted to all heads) - struct ggml_tensor * KQ_mask = build_inp_KQ_mask(); - - for (int il = 0; il < n_layer; ++il) { - struct ggml_tensor * inpSA = inpL; - - // norm - cur = llm_build_norm(ctx0, inpL, hparams, - model.layers[il].attn_norm, model.layers[il].attn_norm_b, - LLM_NORM, cb, il); - cb(cur, "attn_norm", il); - - // self-attention - { - // compute Q and K and RoPE them - struct ggml_tensor * Qcur = ggml_mul_mat(ctx0, model.layers[il].wq, cur); - cb(Qcur, "Qcur", il); - // if (model.layers[il].bq) { - // Qcur = ggml_add(ctx0, Qcur, model.layers[il].bq); - // cb(Qcur, "Qcur", il); - // } - - struct ggml_tensor * Kcur = ggml_mul_mat(ctx0, model.layers[il].wk, cur); - cb(Kcur, "Kcur", il); - // if (model.layers[il].bk) { - // Kcur = ggml_add(ctx0, Kcur, model.layers[il].bk); - // cb(Kcur, "Kcur", il); - // } - - struct ggml_tensor * Vcur = ggml_mul_mat(ctx0, model.layers[il].wv, cur); - cb(Vcur, "Vcur", il); - // if (model.layers[il].bv) { - // Vcur = ggml_add(ctx0, Vcur, model.layers[il].bv); - // cb(Vcur, "Vcur", il); - // } - - Qcur = ggml_rope_custom( - ctx0, ggml_reshape_3d(ctx0, Qcur, n_embd_head, n_head, n_tokens), inp_pos, - n_rot, rope_type, 0, n_orig_ctx, freq_base, freq_scale, - ext_factor, attn_factor, beta_fast, beta_slow - ); - cb(Qcur, "Qcur", il); - - Kcur = ggml_rope_custom( - ctx0, ggml_reshape_3d(ctx0, Kcur, n_embd_head, n_head_kv, n_tokens), inp_pos, - n_rot, rope_type, 0, n_orig_ctx, freq_base, freq_scale, - ext_factor, attn_factor, beta_fast, beta_slow - ); - cb(Kcur, "Kcur", il); - - cur = llm_build_kv(ctx0, model, hparams, kv_self, gf, - model.layers[il].wo, NULL, - Kcur, Vcur, Qcur, KQ_mask, nullptr, n_ctx, n_tokens, kv_head, n_kv, 1.0f/sqrtf(float(n_embd_head)), cb, il); - } - - if (il == n_layer - 1) { - // skip computing output for unused tokens - struct ggml_tensor * inp_out_ids = build_inp_out_ids(); - cur = ggml_get_rows(ctx0, cur, inp_out_ids); - inpSA = ggml_get_rows(ctx0, inpSA, inp_out_ids); - } - - struct ggml_tensor * ffn_inp = ggml_add(ctx0, cur, inpSA); - cb(ffn_inp, "ffn_inp", il); - - // feed-forward network - cur = llm_build_norm(ctx0, ffn_inp, hparams, - model.layers[il].ffn_norm, model.layers[il].ffn_norm_b, - LLM_NORM, cb, il); - cb(cur, "ffn_norm", il); - - cur = llm_build_ffn(ctx0, cur, - model.layers[il].ffn_up, NULL, - model.layers[il].ffn_gate, NULL, - model.layers[il].ffn_down, NULL, - NULL, - LLM_FFN_SILU, LLM_FFN_PAR, cb, il); - cb(cur, "ffn_out", il); - - cur = ggml_add(ctx0, cur, ffn_inp); - cb(cur, "l_out", il); - - // input for next layer - inpL = cur; - } - - cur = inpL; - - cur = llm_build_norm(ctx0, cur, hparams, - model.output_norm, model.output_norm_b, - LLM_NORM, cb, -1); - cb(cur, "result_norm", -1); - - // lm_head - cur = ggml_mul_mat(ctx0, model.output, cur); - cb(cur, "result_output", -1); - - ggml_build_forward_expand(gf, cur); - - return gf; - } - - struct ggml_cgraph * build_internlm2() { - struct ggml_cgraph * gf = ggml_new_graph_custom(ctx0, LLAMA_MAX_NODES, false); - - const int64_t n_embd_head = hparams.n_embd_head_v; - GGML_ASSERT(n_embd_head == hparams.n_embd_head_k); - GGML_ASSERT(n_embd_head == hparams.n_rot); - - struct ggml_tensor * cur; - struct ggml_tensor * inpL; - - inpL = llm_build_inp_embd(ctx0, lctx, hparams, batch, model.tok_embd, cb); - - // inp_pos - contains the positions - struct ggml_tensor * inp_pos = build_inp_pos(); - - // KQ_mask (mask for 1 head, it will be broadcasted to all heads) - struct ggml_tensor * KQ_mask = build_inp_KQ_mask(); - - for (int il = 0; il < n_layer; ++il) { - struct ggml_tensor * inpSA = inpL; - - // norm - cur = llm_build_norm(ctx0, inpL, hparams, - model.layers[il].attn_norm, NULL, - LLM_NORM_RMS, cb, il); - cb(cur, "attn_norm", il); - - // self-attention - { - // compute Q and K and RoPE them - struct ggml_tensor * Qcur = ggml_mul_mat(ctx0, model.layers[il].wq, cur); - cb(Qcur, "Qcur", il); - if (model.layers[il].bq) { - Qcur = ggml_add(ctx0, Qcur, model.layers[il].bq); - cb(Qcur, "Qcur", il); - } - - struct ggml_tensor * Kcur = ggml_mul_mat(ctx0, model.layers[il].wk, cur); - cb(Kcur, "Kcur", il); - if (model.layers[il].bk) { - Kcur = ggml_add(ctx0, Kcur, model.layers[il].bk); - cb(Kcur, "Kcur", il); - } - - struct ggml_tensor * Vcur = ggml_mul_mat(ctx0, model.layers[il].wv, cur); - cb(Vcur, "Vcur", il); - if (model.layers[il].bv) { - Vcur = ggml_add(ctx0, Vcur, model.layers[il].bv); - cb(Vcur, "Vcur", il); - } - - Qcur = ggml_rope_custom( - ctx0, ggml_reshape_3d(ctx0, Qcur, n_embd_head, n_head, n_tokens), inp_pos, - n_rot, rope_type, 0, n_orig_ctx, freq_base, freq_scale, - ext_factor, attn_factor, beta_fast, beta_slow - ); - cb(Qcur, "Qcur", il); - - Kcur = ggml_rope_custom( - ctx0, ggml_reshape_3d(ctx0, Kcur, n_embd_head, n_head_kv, n_tokens), inp_pos, - n_rot, rope_type, 0, n_orig_ctx, freq_base, freq_scale, - ext_factor, attn_factor, beta_fast, beta_slow - ); - cb(Kcur, "Kcur", il); - - cur = llm_build_kv(ctx0, model, hparams, kv_self, gf, - model.layers[il].wo, model.layers[il].bo, - Kcur, Vcur, Qcur, KQ_mask, nullptr, n_ctx, n_tokens, kv_head, n_kv, 1.0f/sqrtf(float(n_embd_head)), cb, il); - } - - if (il == n_layer - 1) { - // skip computing output for unused tokens - struct ggml_tensor * inp_out_ids = build_inp_out_ids(); - cur = ggml_get_rows(ctx0, cur, inp_out_ids); - inpSA = ggml_get_rows(ctx0, inpSA, inp_out_ids); - } - - struct ggml_tensor * ffn_inp = ggml_add(ctx0, cur, inpSA); - cb(ffn_inp, "ffn_inp", il); - - // feed-forward network - cur = llm_build_norm(ctx0, ffn_inp, hparams, - model.layers[il].ffn_norm, NULL, - LLM_NORM_RMS, cb, il); - cb(cur, "ffn_norm", il); - - cur = llm_build_ffn(ctx0, cur, - model.layers[il].ffn_up, NULL, - model.layers[il].ffn_gate, NULL, - model.layers[il].ffn_down, NULL, - NULL, - LLM_FFN_SILU, LLM_FFN_PAR, cb, il); - cb(cur, "ffn_out", il); - - cur = ggml_add(ctx0, cur, ffn_inp); - cb(cur, "l_out", il); - - // input for next layer - inpL = cur; - } - - cur = inpL; - - cur = llm_build_norm(ctx0, cur, hparams, - model.output_norm, NULL, - LLM_NORM_RMS, cb, -1); - cb(cur, "result_norm", -1); - - // lm_head - cur = ggml_mul_mat(ctx0, model.output, cur); - cb(cur, "result_output", -1); - - ggml_build_forward_expand(gf, cur); - - return gf; - } - - // ref: https://arxiv.org/abs/2203.03466 - // https://github.com/ggerganov/llama.cpp/issues/5276#issuecomment-1925774738 - // based on the original build_llama() function - struct ggml_cgraph * build_minicpm() { - struct ggml_cgraph * gf = ggml_new_graph_custom(ctx0, LLAMA_MAX_NODES, false); - - const int64_t n_embd_head = hparams.n_embd_head_v; - GGML_ASSERT(n_embd_head == hparams.n_embd_head_k); - GGML_ASSERT(n_embd_head == hparams.n_rot); - - const int64_t n_embd = hparams.n_embd; - //TODO: if the model varies, these parameters need to be read from the model - const int64_t n_embd_base = 256; - const float scale_embd = 12.0f; - const float scale_depth = 1.4f; - - struct ggml_tensor * cur; - struct ggml_tensor * inpL; - - inpL = llm_build_inp_embd(ctx0, lctx, hparams, batch, model.tok_embd, cb); - - // scale the input embeddings - inpL = ggml_scale(ctx0, inpL, scale_embd); - cb(inpL, "inp_scaled", -1); - - // inp_pos - contains the positions - struct ggml_tensor * inp_pos = build_inp_pos(); - - // KQ_mask (mask for 1 head, it will be broadcasted to all heads) - struct ggml_tensor * KQ_mask = build_inp_KQ_mask(); - - for (int il = 0; il < n_layer; ++il) { - struct ggml_tensor * inpSA = inpL; - - // norm - cur = llm_build_norm(ctx0, inpL, hparams, - model.layers[il].attn_norm, NULL, - LLM_NORM_RMS, cb, il); - cb(cur, "attn_norm", il); - - // self-attention - { - // compute Q and K and RoPE them - struct ggml_tensor * Qcur = ggml_mul_mat(ctx0, model.layers[il].wq, cur); - cb(Qcur, "Qcur", il); - if (model.layers[il].bq) { - Qcur = ggml_add(ctx0, Qcur, model.layers[il].bq); - cb(Qcur, "Qcur", il); - } - - struct ggml_tensor * Kcur = ggml_mul_mat(ctx0, model.layers[il].wk, cur); - cb(Kcur, "Kcur", il); - if (model.layers[il].bk) { - Kcur = ggml_add(ctx0, Kcur, model.layers[il].bk); - cb(Kcur, "Kcur", il); - } - - struct ggml_tensor * Vcur = ggml_mul_mat(ctx0, model.layers[il].wv, cur); - cb(Vcur, "Vcur", il); - if (model.layers[il].bv) { - Vcur = ggml_add(ctx0, Vcur, model.layers[il].bv); - cb(Vcur, "Vcur", il); - } - - Qcur = ggml_rope_custom( - ctx0, ggml_reshape_3d(ctx0, Qcur, n_embd_head, n_head, n_tokens), inp_pos, - n_rot, rope_type, 0, n_orig_ctx, freq_base, freq_scale, - ext_factor, attn_factor, beta_fast, beta_slow - ); - cb(Qcur, "Qcur", il); - - Kcur = ggml_rope_custom( - ctx0, ggml_reshape_3d(ctx0, Kcur, n_embd_head, n_head_kv, n_tokens), inp_pos, - n_rot, rope_type, 0, n_orig_ctx, freq_base, freq_scale, - ext_factor, attn_factor, beta_fast, beta_slow - ); - cb(Kcur, "Kcur", il); - - cur = llm_build_kv(ctx0, model, hparams, kv_self, gf, - model.layers[il].wo, model.layers[il].bo, - Kcur, Vcur, Qcur, KQ_mask, nullptr, n_ctx, n_tokens, kv_head, n_kv, 1.0f/sqrtf(float(n_embd_head)), cb, il); - } - - if (il == n_layer - 1) { - // skip computing output for unused tokens - struct ggml_tensor * inp_out_ids = build_inp_out_ids(); - cur = ggml_get_rows(ctx0, cur, inp_out_ids); - inpSA = ggml_get_rows(ctx0, inpSA, inp_out_ids); - } - - // scale_res - scale the hidden states for residual connection - const float scale_res = scale_depth/sqrtf(float(n_layer)); - cur = ggml_scale(ctx0, cur, scale_res); - cb(cur, "hidden_scaled", -1); - - struct ggml_tensor * ffn_inp = ggml_add(ctx0, cur, inpSA); - cb(ffn_inp, "ffn_inp", il); - - // feed-forward network - { - cur = llm_build_norm(ctx0, ffn_inp, hparams, - model.layers[il].ffn_norm, NULL, - LLM_NORM_RMS, cb, il); - cb(cur, "ffn_norm", il); - - cur = llm_build_ffn(ctx0, cur, - model.layers[il].ffn_up, NULL, - model.layers[il].ffn_gate, NULL, - model.layers[il].ffn_down, NULL, - NULL, - LLM_FFN_SILU, LLM_FFN_PAR, cb, il); - cb(cur, "ffn_out", il); - } - - // scale the hidden states for residual connection - cur = ggml_scale(ctx0, cur, scale_res); - cb(cur, "hidden_scaled_ffn", -1); - - cur = ggml_add(ctx0, cur, ffn_inp); - cb(cur, "l_out", il); - - // input for next layer - inpL = cur; - } - - cur = inpL; - - cur = llm_build_norm(ctx0, cur, hparams, - model.output_norm, NULL, - LLM_NORM_RMS, cb, -1); - cb(cur, "result_norm", -1); - - // lm_head scaling - const float scale_lmhead = float(n_embd_base)/float(n_embd); - cur = ggml_scale(ctx0, cur, scale_lmhead); - cb(cur, "lmhead_scaling", -1); - - // lm_head - cur = ggml_mul_mat(ctx0, model.tok_embd, cur); - cb(cur, "result_output", -1); - - ggml_build_forward_expand(gf, cur); - - return gf; - } - - struct ggml_cgraph * build_gemma() { - struct ggml_cgraph * gf = ggml_new_graph_custom(ctx0, LLAMA_MAX_NODES, false); - - const int64_t n_embd_head_k = hparams.n_embd_head_k; - - struct ggml_tensor * cur; - struct ggml_tensor * inpL; - - inpL = llm_build_inp_embd(ctx0, lctx, hparams, batch, model.tok_embd, cb); - - inpL = ggml_scale(ctx0, inpL, sqrtf(n_embd)); - cb(inpL, "inp_scaled", -1); - - // inp_pos - contains the positions - struct ggml_tensor * inp_pos = build_inp_pos(); - - // KQ_mask (mask for 1 head, it will be broadcasted to all heads) - struct ggml_tensor * KQ_mask = build_inp_KQ_mask(); - - for (int il = 0; il < n_layer; ++il) { - // norm - cur = llm_build_norm(ctx0, inpL, hparams, - model.layers[il].attn_norm, NULL, - LLM_NORM_RMS, cb, il); - cb(cur, "attn_norm", il); - - // self-attention - { - // compute Q and K and RoPE them - struct ggml_tensor * Qcur = ggml_mul_mat(ctx0, model.layers[il].wq, cur); - cb(Qcur, "Qcur", il); - - struct ggml_tensor * Kcur = ggml_mul_mat(ctx0, model.layers[il].wk, cur); - cb(Kcur, "Kcur", il); - - struct ggml_tensor * Vcur = ggml_mul_mat(ctx0, model.layers[il].wv, cur); - cb(Vcur, "Vcur", il); - - Qcur = ggml_rope_custom( - ctx0, ggml_reshape_3d(ctx0, Qcur, n_embd_head_k, n_head, n_tokens), inp_pos, - n_embd_head_k, rope_type, 0, n_orig_ctx, freq_base, freq_scale, - ext_factor, attn_factor, beta_fast, beta_slow); - cb(Qcur, "Qcur", il); - - Qcur = ggml_scale(ctx0, Qcur, 1.0f / sqrtf(float(n_embd_head_k))); - cb(Qcur, "Qcur_scaled", il); - - Kcur = ggml_rope_custom( - ctx0, ggml_reshape_3d(ctx0, Kcur, n_embd_head_k, n_head_kv, n_tokens), inp_pos, - n_embd_head_k, rope_type, 0, n_orig_ctx, freq_base, freq_scale, - ext_factor, attn_factor, beta_fast, beta_slow); - cb(Kcur, "Kcur", il); - - cur = llm_build_kv(ctx0, model, hparams, kv_self, gf, - model.layers[il].wo, NULL, - Kcur, Vcur, Qcur, KQ_mask, nullptr, n_ctx, n_tokens, kv_head, n_kv, 1.0f, cb, il); - } - - if (il == n_layer - 1) { - // skip computing output for unused tokens - struct ggml_tensor * inp_out_ids = build_inp_out_ids(); - cur = ggml_get_rows(ctx0, cur, inp_out_ids); - inpL = ggml_get_rows(ctx0, inpL, inp_out_ids); - } - - struct ggml_tensor * sa_out = ggml_add(ctx0, cur, inpL); - cb(sa_out, "sa_out", il); - - cur = llm_build_norm(ctx0, sa_out, hparams, - model.layers[il].ffn_norm, NULL, - LLM_NORM_RMS, cb, il); - cb(cur, "ffn_norm", il); - - // feed-forward network - { - cur = llm_build_ffn(ctx0, cur, - model.layers[il].ffn_up, NULL, - model.layers[il].ffn_gate, NULL, - model.layers[il].ffn_down, NULL, - NULL, - LLM_FFN_GELU, LLM_FFN_PAR, cb, il); - cb(cur, "ffn_out", il); - } - - cur = ggml_add(ctx0, cur, sa_out); - cb(cur, "l_out", il); - - // input for next layer - inpL = cur; - } - - cur = inpL; - - cur = llm_build_norm(ctx0, cur, hparams, - model.output_norm, NULL, - LLM_NORM_RMS, cb, -1); - cb(cur, "result_norm", -1); - - // lm_head - cur = ggml_mul_mat(ctx0, model.output, cur); - cb(cur, "result_output", -1); - - ggml_build_forward_expand(gf, cur); - - return gf; - } - - struct ggml_cgraph * build_starcoder2() { - struct ggml_cgraph * gf = ggml_new_graph_custom(ctx0, LLAMA_MAX_NODES, false); - - const int64_t n_embd_head = hparams.n_embd_head_v; - GGML_ASSERT(n_embd_head == hparams.n_embd_head_k); - GGML_ASSERT(n_embd_head == hparams.n_rot); - - struct ggml_tensor * cur; - struct ggml_tensor * inpL; - - inpL = llm_build_inp_embd(ctx0, lctx, hparams, batch, model.tok_embd, cb); - - // inp_pos - contains the positions - struct ggml_tensor * inp_pos = build_inp_pos(); - - // KQ_mask (mask for 1 head, it will be broadcasted to all heads) - struct ggml_tensor * KQ_mask = build_inp_KQ_mask(); - - for (int il = 0; il < n_layer; ++il) { - struct ggml_tensor * inpSA = inpL; - - // norm - cur = llm_build_norm(ctx0, inpL, hparams, - model.layers[il].attn_norm, model.layers[il].attn_norm_b, - LLM_NORM, cb, il); - cb(cur, "attn_norm", il); - - // self-attention - { - // compute Q and K and RoPE them - struct ggml_tensor * Qcur = ggml_mul_mat(ctx0, model.layers[il].wq, cur); - cb(Qcur, "Qcur", il); - if (model.layers[il].bq) { - Qcur = ggml_add(ctx0, Qcur, model.layers[il].bq); - cb(Qcur, "Qcur", il); - } - - struct ggml_tensor * Kcur = ggml_mul_mat(ctx0, model.layers[il].wk, cur); - cb(Kcur, "Kcur", il); - if (model.layers[il].bk) { - Kcur = ggml_add(ctx0, Kcur, model.layers[il].bk); - cb(Kcur, "Kcur", il); - } - - struct ggml_tensor * Vcur = ggml_mul_mat(ctx0, model.layers[il].wv, cur); - cb(Vcur, "Vcur", il); - if (model.layers[il].bv) { - Vcur = ggml_add(ctx0, Vcur, model.layers[il].bv); - cb(Vcur, "Vcur", il); - } - - Qcur = ggml_rope_custom( - ctx0, ggml_reshape_3d(ctx0, Qcur, n_embd_head, n_head, n_tokens), inp_pos, - n_rot, rope_type, 0, n_orig_ctx, freq_base, freq_scale, - ext_factor, attn_factor, beta_fast, beta_slow - ); - cb(Qcur, "Qcur", il); - - Kcur = ggml_rope_custom( - ctx0, ggml_reshape_3d(ctx0, Kcur, n_embd_head, n_head_kv, n_tokens), inp_pos, - n_rot, rope_type, 0, n_orig_ctx, freq_base, freq_scale, - ext_factor, attn_factor, beta_fast, beta_slow - ); - cb(Kcur, "Kcur", il); - - cur = llm_build_kv(ctx0, model, hparams, kv_self, gf, - model.layers[il].wo, model.layers[il].bo, - Kcur, Vcur, Qcur, KQ_mask, nullptr, n_ctx, n_tokens, kv_head, n_kv, 1.0f/sqrtf(float(n_embd_head)), cb, il); - } - - if (il == n_layer - 1) { - // skip computing output for unused tokens - struct ggml_tensor * inp_out_ids = build_inp_out_ids(); - cur = ggml_get_rows(ctx0, cur, inp_out_ids); - inpSA = ggml_get_rows(ctx0, inpSA, inp_out_ids); - } - - struct ggml_tensor * ffn_inp = ggml_add(ctx0, cur, inpSA); - cb(ffn_inp, "ffn_inp", il); - - // feed-forward network - - cur = llm_build_norm(ctx0, ffn_inp, hparams, - model.layers[il].ffn_norm, model.layers[il].ffn_norm_b, - LLM_NORM, cb, il); - cb(cur, "ffn_norm", il); - - cur = llm_build_ffn(ctx0, cur, - model.layers[il].ffn_up, model.layers[il].ffn_up_b, - NULL, NULL, - model.layers[il].ffn_down, model.layers[il].ffn_down_b, - NULL, - LLM_FFN_GELU, LLM_FFN_SEQ, cb, il); - cb(cur, "ffn_out", il); - cur = ggml_add(ctx0, cur, ffn_inp); - cb(cur, "l_out", il); - - // input for next layer - inpL = cur; - } - - cur = inpL; - - cur = llm_build_norm(ctx0, cur, hparams, - model.output_norm, model.output_norm_b, - LLM_NORM, cb, -1); - cb(cur, "result_norm", -1); - - // lm_head - cur = ggml_mul_mat(ctx0, model.output, cur); - cb(cur, "result_output", -1); - - ggml_build_forward_expand(gf, cur); - - return gf; - } - - struct ggml_cgraph * build_mamba() { - struct ggml_cgraph * gf = ggml_new_graph_custom(ctx0, LLAMA_MAX_NODES, false); - - const int64_t d_model = n_embd; - const int64_t d_conv = hparams.ssm_d_conv; - const int64_t d_inner = hparams.ssm_d_inner; - GGML_ASSERT(2 * d_model == d_inner); - const int64_t d_state = hparams.ssm_d_state; - const int64_t dt_rank = hparams.ssm_dt_rank; - - struct ggml_tensor * cur; - struct ggml_tensor * inpL; - - // {n_embd, n_tokens} - inpL = llm_build_inp_embd(ctx0, lctx, hparams, batch, model.tok_embd, cb); - - struct ggml_tensor * state_mask = build_inp_s_mask(); - struct ggml_tensor * state_seq = build_inp_s_seq(); - - for (int il = 0; il < n_layer; ++il) { - // (ab)using the KV cache to store the states - struct ggml_tensor * conv_states = ggml_reshape_2d(ctx0, kv_self.k_l[il], hparams.n_embd_k_s(), kv_self.size); - struct ggml_tensor * ssm_states = ggml_reshape_2d(ctx0, kv_self.v_l[il], hparams.n_embd_v_s(), kv_self.size); - - // clear states of sequences which are starting at the beginning of this batch - { - conv_states = ggml_mul(ctx0, - ggml_view_2d(ctx0, conv_states, conv_states->ne[0], n_kv, conv_states->nb[1], kv_head*conv_states->nb[1]), - state_mask); - ssm_states = ggml_mul(ctx0, - ggml_view_2d(ctx0, ssm_states, ssm_states->ne[0], n_kv, ssm_states->nb[1], kv_head*ssm_states->nb[1]), - state_mask); - } - - conv_states = ggml_reshape_3d(ctx0, conv_states, d_conv - 1, d_inner, n_kv); - ssm_states = ggml_reshape_3d(ctx0, ssm_states, d_state, d_inner, n_kv); - - // norm - cur = llm_build_norm(ctx0, inpL, hparams, - model.layers[il].attn_norm, NULL, - LLM_NORM_RMS, cb, il); - cb(cur, "attn_norm", il); - - // {n_embd, 2*d_inner} * {n_embd, n_tokens} => {2*d_inner, n_tokens} - struct ggml_tensor * xz = ggml_mul_mat(ctx0, model.layers[il].ssm_in, cur); - // split the above in two - // => {d_inner, n_tokens} - struct ggml_tensor * x = ggml_view_2d(ctx0, xz, d_inner, xz->ne[1], xz->nb[1], 0); - struct ggml_tensor * z = ggml_view_2d(ctx0, xz, d_inner, xz->ne[1], xz->nb[1], ggml_element_size(xz)*d_inner); - - // conv - { - // Custom operator which is needed only to ease simultaneous sequence processing. - // For a single sequence, the equivalent is to concatenate the columns of conv_states and x, - // then make a self-overlapping view of that over d_conv columns at each stride in the 3rd dimension, - // then element-wise multiply that with the conv1d weigth, - // then sum the elements of each row, - // (the last two steps are a dot product over rows (also doable with mul_mat)) - // then permute away the ne[0] dimension, - // and then you're left with the resulting x tensor. - // The new conv_states is the last (d_conv - 1) columns - // of the last 3rd dimensional "layer" of the self-overlapping view. - // For simultaneous sequences, it's more complicated. - struct ggml_tensor * x_conv = ggml_ssm_conv(ctx0, conv_states, x, model.layers[il].ssm_conv1d, state_seq); - - // store last (d_conv - 1) columns of the conv_state part of x_conv back into the KV cache - ggml_build_forward_expand(gf, - ggml_cpy(ctx0, - ggml_view_2d(ctx0, x_conv, d_conv - 1, d_inner*n_kv, d_conv*ggml_element_size(x_conv), (1+d_inner*n_tokens)*ggml_element_size(x_conv)), - ggml_view_1d(ctx0, kv_self.k_l[il], (d_conv - 1)*(d_inner)*(n_kv), kv_head*(d_conv - 1)*(d_inner)*ggml_element_size(x_conv)))); - - // extract x from x_conv - x = ggml_view_2d(ctx0, x_conv, d_inner, n_tokens, d_inner*ggml_element_size(x_conv), 0); - - // bias - x = ggml_add(ctx0, x, model.layers[il].ssm_conv1d_b); - - x = ggml_silu(ctx0, x); - } - - // ssm - { - // {d_inner, dt_rank + 2*d_state} * {d_inner, n_tokens} => {dt_rank + 2*d_state, n_tokens} - struct ggml_tensor * x_db = ggml_mul_mat(ctx0, model.layers[il].ssm_x, x); - // split - struct ggml_tensor * dt = ggml_view_2d(ctx0, x_db, dt_rank, n_tokens, x_db->nb[1], 0); - struct ggml_tensor * B = ggml_view_2d(ctx0, x_db, d_state, n_tokens, x_db->nb[1], ggml_element_size(x_db)*dt_rank); - struct ggml_tensor * C = ggml_view_2d(ctx0, x_db, d_state, n_tokens, x_db->nb[1], ggml_element_size(x_db)*(dt_rank+d_state)); - - // {dt_rank, d_inner} * {dt_rank, n_tokens} => {d_inner, n_tokens} - dt = ggml_mul_mat(ctx0, model.layers[il].ssm_dt, dt); - dt = ggml_add(ctx0, dt, model.layers[il].ssm_dt_b); - - // Custom operator to optimize the parallel associative scan - // as described in the Annex D of the Mamba paper. - // => {d_inner, n_tokens} and {d_state, d_inner, n_kv} combined, - // because only a single tensor can be returned. - struct ggml_tensor * y_ssm_states = ggml_ssm_scan(ctx0, ssm_states, x, dt, model.layers[il].ssm_a, B, C, state_seq); - - // store last states (the second part of y_ssm_states) - ggml_build_forward_expand(gf, - ggml_cpy(ctx0, - ggml_view_1d(ctx0, y_ssm_states, d_state*d_inner*n_kv, d_inner*n_tokens*ggml_element_size(y_ssm_states)), - ggml_view_1d(ctx0, kv_self.v_l[il], d_state*d_inner*n_kv, kv_head*d_state*d_inner*ggml_element_size(ssm_states)))); - - struct ggml_tensor * y = ggml_view_2d(ctx0, y_ssm_states, d_inner, n_tokens, d_inner*ggml_element_size(y_ssm_states), 0); - - if (il == n_layer - 1) { - // skip computing output for unused tokens - struct ggml_tensor * inp_out_ids = build_inp_out_ids(); - x = ggml_get_rows(ctx0, x, inp_out_ids); - y = ggml_get_rows(ctx0, y, inp_out_ids); - z = ggml_get_rows(ctx0, z, inp_out_ids); - inpL = ggml_get_rows(ctx0, inpL, inp_out_ids); - } - - // {d_inner, n_tokens} * {d_inner} => {d_inner, n_tokens} - y = ggml_add(ctx0, y, ggml_mul(ctx0, x, model.layers[il].ssm_d)); - y = ggml_mul(ctx0, y, ggml_silu(ctx0, z)); - - // {d_inner, n_embd} * {d_inner, n_tokens} => {n_embd, n_tokens} - cur = ggml_mul_mat(ctx0, model.layers[il].ssm_out, y); - } - - // residual - cur = ggml_add(ctx0, cur, inpL); - cb(cur, "l_out", il); - - // input for next layer - inpL = cur; - } - - // final rmsnorm - cur = llm_build_norm(ctx0, inpL, hparams, - model.output_norm, NULL, - LLM_NORM_RMS, cb, -1); - cb(cur, "result_norm", -1); - - // lm_head - cur = ggml_mul_mat(ctx0, model.output, cur); - cb(cur, "result_output", -1); - - ggml_build_forward_expand(gf, cur); - - return gf; - } - - struct ggml_cgraph * build_command_r() { - - struct ggml_cgraph * gf = ggml_new_graph_custom(ctx0, LLAMA_MAX_NODES, false); - - const int64_t n_embd_head = hparams.n_embd_head_v; - GGML_ASSERT(n_embd_head == hparams.n_embd_head_k); - const float f_logit_scale = hparams.f_logit_scale; - - struct ggml_tensor * cur; - struct ggml_tensor * inpL; - - inpL = llm_build_inp_embd(ctx0, lctx, hparams, batch, model.tok_embd, cb); - - // inp_pos - contains the positions - struct ggml_tensor * inp_pos = build_inp_pos(); - - // KQ_mask (mask for 1 head, it will be broadcasted to all heads) - struct ggml_tensor * KQ_mask = build_inp_KQ_mask(); - - for (int il = 0; il < n_layer; ++il) { - - // norm - cur = llm_build_norm(ctx0, inpL, hparams, - model.layers[il].attn_norm, NULL, - LLM_NORM, cb, il); - cb(cur, "attn_norm", il); - struct ggml_tensor * ffn_inp = cur; - - // self-attention - { - // compute Q and K and RoPE them - struct ggml_tensor * Qcur = ggml_mul_mat(ctx0, model.layers[il].wq, cur); - cb(Qcur, "Qcur", il); - if (model.layers[il].bq) { - Qcur = ggml_add(ctx0, Qcur, model.layers[il].bq); - cb(Qcur, "Qcur", il); - } - - struct ggml_tensor * Kcur = ggml_mul_mat(ctx0, model.layers[il].wk, cur); - cb(Kcur, "Kcur", il); - if (model.layers[il].bk) { - Kcur = ggml_add(ctx0, Kcur, model.layers[il].bk); - cb(Kcur, "Kcur", il); - } - - struct ggml_tensor * Vcur = ggml_mul_mat(ctx0, model.layers[il].wv, cur); - cb(Vcur, "Vcur", il); - if (model.layers[il].bv) { - Vcur = ggml_add(ctx0, Vcur, model.layers[il].bv); - cb(Vcur, "Vcur", il); - } - - if (model.layers[il].attn_q_norm) { - Qcur = ggml_view_3d(ctx0, Qcur, n_embd_head, n_head, n_tokens, - ggml_element_size(Qcur) * n_embd_head, - ggml_element_size(Qcur) * n_embd_head * n_head, - 0); - cb(Qcur, "Qcur", il); - Kcur = ggml_view_3d(ctx0, Kcur, n_embd_head, n_head_kv, n_tokens, - ggml_element_size(Kcur) * n_embd_head, - ggml_element_size(Kcur) * n_embd_head * n_head_kv, - 0); - cb(Kcur, "Kcur", il); - - Qcur = llm_build_norm(ctx0, Qcur, hparams, - model.layers[il].attn_q_norm, - NULL, - LLM_NORM, cb, il); - cb(Qcur, "Qcur", il); - - Kcur = llm_build_norm(ctx0, Kcur, hparams, - model.layers[il].attn_k_norm, - NULL, - LLM_NORM, cb, il); - cb(Kcur, "Kcur", il); - } - - Qcur = ggml_rope_custom( - ctx0, ggml_reshape_3d(ctx0, Qcur, n_embd_head, n_head, n_tokens), inp_pos, - n_rot, rope_type, 0, n_orig_ctx, freq_base, freq_scale, - ext_factor, attn_factor, beta_fast, beta_slow - ); - cb(Qcur, "Qcur", il); - - Kcur = ggml_rope_custom( - ctx0, ggml_reshape_3d(ctx0, Kcur, n_embd_head, n_head_kv, n_tokens), inp_pos, - n_rot, rope_type, 0, n_orig_ctx, freq_base, freq_scale, - ext_factor, attn_factor, beta_fast, beta_slow - ); - cb(Kcur, "Kcur", il); - - cur = llm_build_kv(ctx0, model, hparams, kv_self, gf, - model.layers[il].wo, model.layers[il].bo, - Kcur, Vcur, Qcur, KQ_mask, nullptr, n_ctx, n_tokens, kv_head, n_kv, 1.0f/sqrtf(float(n_embd_head)), cb, il); - } - - if (il == n_layer - 1) { - // skip computing output for unused tokens - struct ggml_tensor * inp_out_ids = build_inp_out_ids(); - cur = ggml_get_rows(ctx0, cur, inp_out_ids); - inpL = ggml_get_rows(ctx0, inpL, inp_out_ids); - ffn_inp = ggml_get_rows(ctx0, ffn_inp, inp_out_ids); - } - - struct ggml_tensor * attn_out = cur; - - // feed-forward network - { - cur = llm_build_ffn(ctx0, ffn_inp, - model.layers[il].ffn_up, NULL, - model.layers[il].ffn_gate, NULL, - model.layers[il].ffn_down, NULL, - NULL, - LLM_FFN_SILU, LLM_FFN_PAR, cb, il); - cb(cur, "ffn_out", il); - } - - // add together residual + FFN + self-attention - cur = ggml_add(ctx0, cur, inpL); - cur = ggml_add(ctx0, cur, attn_out); - cb(cur, "l_out", il); - - // input for next layer - inpL = cur; - } - - cur = inpL; - - cur = llm_build_norm(ctx0, cur, hparams, - model.output_norm, NULL, - LLM_NORM, cb, -1); - cb(cur, "result_norm", -1); - - // lm_head - cur = ggml_mul_mat(ctx0, model.output, cur); - - if (f_logit_scale) { - cur = ggml_scale(ctx0, cur, f_logit_scale); - } - - cb(cur, "result_output", -1); - - ggml_build_forward_expand(gf, cur); - - return gf; - - } - - // ref: https://allenai.org/olmo - // based on the original build_llama() function, changes: - // * non-parametric layer norm - // * clamp qkv - // * removed bias - // * removed MoE - struct ggml_cgraph * build_olmo() { - struct ggml_cgraph * gf = ggml_new_graph_custom(ctx0, LLAMA_MAX_NODES, false); - - // mutable variable, needed during the last layer of the computation to skip unused tokens - int32_t n_tokens = this->n_tokens; - - const int64_t n_embd_head = hparams.n_embd_head_v; - GGML_ASSERT(n_embd_head == hparams.n_embd_head_k); - GGML_ASSERT(n_embd_head == hparams.n_rot); - - struct ggml_tensor * cur; - struct ggml_tensor * inpL; - - inpL = llm_build_inp_embd(ctx0, lctx, hparams, batch, model.tok_embd, cb); - - // inp_pos - contains the positions - struct ggml_tensor * inp_pos = build_inp_pos(); - - // KQ_mask (mask for 1 head, it will be broadcasted to all heads) - struct ggml_tensor * KQ_mask = build_inp_KQ_mask(); - - for (int il = 0; il < n_layer; ++il) { - struct ggml_tensor * inpSA = inpL; - - // norm - cur = llm_build_norm(ctx0, inpL, hparams, - NULL, NULL, - LLM_NORM, cb, il); - cb(cur, "attn_norm", il); - - // self-attention - { - // compute Q and K and RoPE them - struct ggml_tensor * Qcur = ggml_mul_mat(ctx0, model.layers[il].wq, cur); - cb(Qcur, "Qcur", il); - if (hparams.f_clamp_kqv > 0.0f) { - Qcur = ggml_clamp(ctx0, Qcur, -hparams.f_clamp_kqv, hparams.f_clamp_kqv); - cb(Qcur, "Qcur", il); - } - - struct ggml_tensor * Kcur = ggml_mul_mat(ctx0, model.layers[il].wk, cur); - cb(Kcur, "Kcur", il); - if (hparams.f_clamp_kqv > 0.0f) { - Kcur = ggml_clamp(ctx0, Kcur, -hparams.f_clamp_kqv, hparams.f_clamp_kqv); - cb(Kcur, "Kcur", il); - } - - struct ggml_tensor * Vcur = ggml_mul_mat(ctx0, model.layers[il].wv, cur); - cb(Vcur, "Vcur", il); - if (hparams.f_clamp_kqv > 0.0f) { - Vcur = ggml_clamp(ctx0, Vcur, -hparams.f_clamp_kqv, hparams.f_clamp_kqv); - cb(Vcur, "Vcur", il); - } - - Qcur = ggml_rope_custom( - ctx0, ggml_reshape_3d(ctx0, Qcur, n_embd_head, n_head, n_tokens), inp_pos, - n_rot, rope_type, 0, n_orig_ctx, freq_base, freq_scale, - ext_factor, attn_factor, beta_fast, beta_slow - ); - cb(Qcur, "Qcur", il); - - Kcur = ggml_rope_custom( - ctx0, ggml_reshape_3d(ctx0, Kcur, n_embd_head, n_head_kv, n_tokens), inp_pos, - n_rot, rope_type, 0, n_orig_ctx, freq_base, freq_scale, - ext_factor, attn_factor, beta_fast, beta_slow - ); - cb(Kcur, "Kcur", il); - - cur = llm_build_kv(ctx0, model, hparams, kv_self, gf, - model.layers[il].wo, nullptr, - Kcur, Vcur, Qcur, KQ_mask, nullptr, n_ctx, n_tokens, kv_head, n_kv, 1.0f/sqrtf(float(n_embd_head)), cb, il); - } - - if (il == n_layer - 1) { - // skip computing output for unused tokens - struct ggml_tensor * inp_out_ids = build_inp_out_ids(); - n_tokens = n_outputs; - cur = ggml_get_rows(ctx0, cur, inp_out_ids); - inpSA = ggml_get_rows(ctx0, inpSA, inp_out_ids); - } - - struct ggml_tensor * ffn_inp = ggml_add(ctx0, cur, inpSA); - cb(ffn_inp, "ffn_inp", il); - - // feed-forward network - cur = llm_build_norm(ctx0, ffn_inp, hparams, - NULL, NULL, - LLM_NORM, cb, il); - cb(cur, "ffn_norm", il); - - cur = llm_build_ffn(ctx0, cur, - model.layers[il].ffn_up, NULL, - model.layers[il].ffn_gate, NULL, - model.layers[il].ffn_down, NULL, - NULL, - LLM_FFN_SILU, LLM_FFN_PAR, cb, il); - cb(cur, "ffn_out", il); - - cur = ggml_add(ctx0, cur, ffn_inp); - cb(cur, "ffn_out", il); - - ggml_tensor * layer_dir = lctx.cvec.tensor_for(il); - if (layer_dir != nullptr) { - cur = ggml_add(ctx0, cur, layer_dir); - } - cb(cur, "l_out", il); - - // input for next layer - inpL = cur; - } - - cur = inpL; - - cur = llm_build_norm(ctx0, cur, hparams, - NULL, NULL, - LLM_NORM, cb, -1); - cb(cur, "result_norm", -1); - - // lm_head - cur = ggml_mul_mat(ctx0, model.output, cur); - cb(cur, "result_output", -1); - - ggml_build_forward_expand(gf, cur); - - return gf; - } -}; - -static struct ggml_cgraph * llama_build_graph_defrag(llama_context & lctx, const std::vector & ids) { - llama_batch dummy; - dummy.n_tokens = 0; - - llm_build_cb cb = [&](struct ggml_tensor * , const char * , int ) { }; - - struct llm_build_context llm(lctx, dummy, cb, false); - - llm.init(); - - struct ggml_cgraph * result = llm.build_defrag(ids); - - llm.free(); - - return result; -} - -static struct ggml_cgraph * llama_build_graph_k_shift(llama_context & lctx) { - llama_batch dummy; - dummy.n_tokens = 0; - - llm_build_cb cb = [&](struct ggml_tensor * , const char * , int ) { }; - - struct llm_build_context llm(lctx, dummy, cb, false); - - llm.init(); - - struct ggml_cgraph * result = llm.build_k_shift(); - - llm.free(); - - return result; -} - -static struct ggml_cgraph * llama_build_graph_s_copy(llama_context & lctx) { - llama_batch dummy; - dummy.n_tokens = 0; - - llm_build_cb cb = [&](struct ggml_tensor * , const char * , int ) { }; - - struct llm_build_context llm(lctx, dummy, cb, false); - - llm.init(); - - struct ggml_cgraph * result = llm.build_s_copy(); - - llm.free(); - - return result; -} - -static struct ggml_cgraph * llama_build_graph( - llama_context & lctx, - const llama_batch & batch, - bool worst_case) { - const auto & model = lctx.model; - - // this callback allows us to apply custom logic to each tensor (e.g. ggml-alloc, offloading, etc.) - llm_build_cb cb = [&](struct ggml_tensor * cur, const char * name, int il) { - if (il >= 0) { - ggml_format_name(cur, "%s-%d", name, il); - } else { - ggml_set_name(cur, name); - } - - if (!lctx.cparams.offload_kqv) { - if (strcmp(name, "kqv_merged_cont") == 0) { - // all nodes between the KV store and the attention output are run on the CPU - ggml_backend_sched_set_tensor_backend(lctx.sched, cur, lctx.backend_cpu); - } - } - - // norm may be automatically assigned to the backend of the previous layer, increasing data transfer between backends - // FIXME: fix in ggml_backend_sched - const bool full_offload = lctx.model.n_gpu_layers > (int)lctx.model.hparams.n_layer; - if (batch.n_tokens < 32 || full_offload) { - if (il != -1 && strcmp(name, "norm") == 0) { - for (auto * backend : lctx.backends) { - if (ggml_backend_buft_supports_backend(lctx.model.buft_layer[il].buft, backend)) { - ggml_backend_sched_set_tensor_backend(lctx.sched, cur, backend); - break; - } - } - } - } - }; - - struct ggml_cgraph * result = NULL; - - struct llm_build_context llm(lctx, batch, cb, worst_case); - - llm.init(); - - switch (model.arch) { - case LLM_ARCH_LLAMA: - { - result = llm.build_llama(); - } break; - case LLM_ARCH_BAICHUAN: - { - result = llm.build_baichuan(); - } break; - case LLM_ARCH_FALCON: - { - result = llm.build_falcon(); - } break; - case LLM_ARCH_GROK: - { - result = llm.build_grok(); - } break; - case LLM_ARCH_STARCODER: - { - result = llm.build_starcoder(); - } break; - case LLM_ARCH_PERSIMMON: - { - result = llm.build_persimmon(); - } break; - case LLM_ARCH_REFACT: - { - result = llm.build_refact(); - } break; - case LLM_ARCH_BERT: - case LLM_ARCH_NOMIC_BERT: - { - result = llm.build_bert(); - } break; - case LLM_ARCH_BLOOM: - { - result = llm.build_bloom(); - } break; - case LLM_ARCH_MPT: - { - result = llm.build_mpt(); - } break; - case LLM_ARCH_STABLELM: - { - result = llm.build_stablelm(); - } break; - case LLM_ARCH_QWEN: - { - result = llm.build_qwen(); - } break; - case LLM_ARCH_QWEN2: - { - result = llm.build_qwen2(); - } break; - case LLM_ARCH_QWEN2MOE: - { - result = llm.build_qwen2moe(); - } break; - case LLM_ARCH_PHI2: - { - result = llm.build_phi2(); - } break; - case LLM_ARCH_PHI3: - { - result = llm.build_phi3(); - } break; - case LLM_ARCH_PLAMO: - { - result = llm.build_plamo(); - } break; - case LLM_ARCH_GPT2: - { - result = llm.build_gpt2(); - } break; - case LLM_ARCH_CODESHELL: - { - result = llm.build_codeshell(); - } break; - case LLM_ARCH_ORION: - { - result = llm.build_orion(); - } break; - case LLM_ARCH_INTERNLM2: - { - result = llm.build_internlm2(); - } break; - case LLM_ARCH_MINICPM: - { - result = llm.build_minicpm(); - } break; - case LLM_ARCH_GEMMA: - { - result = llm.build_gemma(); - } break; - case LLM_ARCH_STARCODER2: - { - result = llm.build_starcoder2(); - } break; - case LLM_ARCH_MAMBA: - { - result = llm.build_mamba(); - } break; - case LLM_ARCH_XVERSE: - { - result = llm.build_xverse(); - } break; - case LLM_ARCH_COMMAND_R: - { - result = llm.build_command_r(); - } break; - case LLM_ARCH_DBRX: - { - result = llm.build_dbrx(); - } break; - case LLM_ARCH_OLMO: - { - result = llm.build_olmo(); - } break; - default: - GGML_ASSERT(false); - } - - llm.free(); - - return result; -} - -static void llama_set_k_shift(llama_context & lctx) { - const int64_t kv_size = lctx.kv_self.size; - - assert(ggml_backend_buffer_is_host(lctx.inp_K_shift->buffer)); - - int32_t * data = (int32_t *) lctx.inp_K_shift->data; - - for (int i = 0; i < kv_size; ++i) { - data[i] = lctx.kv_self.cells[i].delta; - } -} - -static void llama_set_s_copy(llama_context & lctx) { - const int64_t kv_size = lctx.kv_self.size; - - assert(ggml_backend_buffer_is_host(lctx.inp_s_copy->buffer)); - - int32_t * data = (int32_t *) lctx.inp_s_copy->data; - - for (int i = 0; i < kv_size; ++i) { - data[i] = lctx.kv_self.cells[i].src; - } -} - -static void llama_set_inputs(llama_context & lctx, const llama_batch & batch) { - // - // set input data - // - - const auto & hparams = lctx.model.hparams; - const auto & cparams = lctx.cparams; - const auto & kv_self = lctx.kv_self; - - if (batch.token) { - const int64_t n_tokens = batch.n_tokens; - - ggml_backend_tensor_set(lctx.inp_tokens, batch.token, 0, n_tokens*ggml_element_size(lctx.inp_tokens)); - } - - if (batch.embd) { - const int64_t n_embd = hparams.n_embd; - const int64_t n_tokens = batch.n_tokens; - - ggml_backend_tensor_set(lctx.inp_embd, batch.embd, 0, n_tokens*n_embd*ggml_element_size(lctx.inp_embd)); - } - - if (batch.pos && lctx.inp_pos) { - const int64_t n_tokens = batch.n_tokens; - - ggml_backend_tensor_set(lctx.inp_pos, batch.pos, 0, n_tokens*ggml_element_size(lctx.inp_pos)); - } - - if (hparams.causal_attn || cparams.pooling_type == LLAMA_POOLING_TYPE_NONE) { - GGML_ASSERT(lctx.inp_out_ids && "every model that can must skip unused outputs"); - const int64_t n_tokens = batch.n_tokens; - - GGML_ASSERT(ggml_backend_buffer_is_host(lctx.inp_out_ids->buffer)); - int32_t * data = (int32_t *) lctx.inp_out_ids->data; - - if (lctx.n_outputs == n_tokens) { - for (int i = 0; i < n_tokens; ++i) { - data[i] = i; - } - } else if (batch.logits) { - int32_t n_outputs = 0; - for (int i = 0; i < n_tokens; ++i) { - if (batch.logits[i]) { - data[n_outputs++] = i; - } - } - // the graph needs to have been passed the correct number of outputs - GGML_ASSERT(lctx.n_outputs == n_outputs); - } else if (lctx.n_outputs == 1) { - // only keep last output - data[0] = n_tokens - 1; - } else { - GGML_ASSERT(lctx.n_outputs == 0); - } - } - - GGML_ASSERT( - // (!a || b) is a logical implication (a -> b) - // !hparams.causal_attn -> !cparams.causal_attn - (hparams.causal_attn || !cparams.causal_attn) && - "causal attention with embedding models is not supported" - ); - - if (lctx.inp_KQ_mask) { - // NOTE: hparams.causal_attn indicates the model is capable of generation and uses the kv cache. - if (cparams.causal_attn) { - const int64_t n_kv = kv_self.n; - const int64_t n_tokens = batch.n_tokens; - - GGML_ASSERT(ggml_backend_buffer_is_host(lctx.inp_KQ_mask->buffer)); - - float * data = (float *) lctx.inp_KQ_mask->data; - - // For causal attention, use only the previous KV cells - // of the correct sequence for each token of the batch. - // It's assumed that if a token in the batch has multiple sequences, they are equivalent. - for (int h = 0; h < 1; ++h) { - for (int j = 0; j < n_tokens; ++j) { - const llama_pos pos = batch.pos[j]; - const llama_seq_id seq_id = batch.seq_id[j][0]; - - for (int i = 0; i < n_kv; ++i) { - float f; - if (!lctx.kv_self.cells[i].has_seq_id(seq_id) || lctx.kv_self.cells[i].pos > pos) { - f = -INFINITY; - } else { - f = 0.0f; - } - data[h*(n_kv*n_tokens) + j*n_kv + i] = f; - } - } - } - } else { - // when using kv cache, the mask needs to match the kv cache size - const int64_t n_tokens = batch.n_tokens; - const int64_t n_stride = hparams.causal_attn ? kv_self.n : n_tokens; - - GGML_ASSERT(ggml_backend_buffer_is_host(lctx.inp_KQ_mask->buffer)); - - float * data = (float *) lctx.inp_KQ_mask->data; - - for (int h = 0; h < 1; ++h) { - for (int j = 0; j < n_tokens; ++j) { - const llama_seq_id seq_id = batch.seq_id[j][0]; - - for (int i = 0; i < n_tokens; ++i) { - float f = -INFINITY; - for (int s = 0; s < batch.n_seq_id[i]; ++s) { - if (batch.seq_id[i][s] == seq_id) { - f = 0.0f; - break; - } - } - - data[h*(n_tokens*n_tokens) + j*n_stride + i] = f; - } - - for (int i = n_tokens; i < n_stride; ++i) { - data[h*(n_tokens*n_tokens) + j*n_stride + i] = -INFINITY; - } - } - } - } - } - - if (hparams.need_kq_pos) { - const int64_t n_kv = kv_self.n; - - GGML_ASSERT(lctx.inp_KQ_pos); - GGML_ASSERT(ggml_backend_buffer_is_host(lctx.inp_KQ_pos->buffer)); - - float * data = (float *) lctx.inp_KQ_pos->data; - - for (int i = 0; i < n_kv; ++i) { - data[i] = float(lctx.kv_self.cells[i].pos); - } - } - - if (cparams.pooling_type == LLAMA_POOLING_TYPE_MEAN) { - const int64_t n_tokens = batch.n_tokens; - - GGML_ASSERT(lctx.inp_mean); - GGML_ASSERT(ggml_backend_buffer_is_host(lctx.inp_mean->buffer)); - - float * data = (float *) lctx.inp_mean->data; - memset(lctx.inp_mean->data, 0, n_tokens * n_tokens * ggml_element_size(lctx.inp_mean)); - - std::vector sum(n_tokens, 0); - for (int i = 0; i < n_tokens; ++i) { - const llama_seq_id seq_id = batch.seq_id[i][0]; - - GGML_ASSERT(seq_id < n_tokens && "seq_id cannot be larger than n_tokens with pooling_type == MEAN"); - - sum[seq_id] += 1; - } - - std::vector div(n_tokens, 0.0f); - for (int i = 0; i < n_tokens; ++i) { - const uint64_t s = sum[i]; - if (s > 0) { - div[i] = 1.0f/float(s); - } - } - - for (int i = 0; i < n_tokens; ++i) { - const llama_seq_id seq_id = batch.seq_id[i][0]; - data[seq_id*n_tokens + i] = div[seq_id]; - } - } - - if (cparams.pooling_type == LLAMA_POOLING_TYPE_CLS) { - const int64_t n_tokens = batch.n_tokens; - - GGML_ASSERT(lctx.inp_cls); - GGML_ASSERT(ggml_backend_buffer_is_host(lctx.inp_cls->buffer)); - - uint32_t * data = (uint32_t *) lctx.inp_cls->data; - memset(lctx.inp_cls->data, 0, n_tokens * ggml_element_size(lctx.inp_cls)); - - for (int i = 0; i < n_tokens; ++i) { - const llama_seq_id seq_id = batch.seq_id[i][0]; - const llama_pos pos = batch.pos[i]; - - GGML_ASSERT(seq_id < n_tokens && "seq_id cannot be larger than n_tokens with pooling_type == CLS"); - - if (pos == 0) { - data[seq_id] = i; - } - } - } - - if (kv_self.recurrent) { - const int64_t n_kv = kv_self.n; - - if (lctx.inp_s_mask) { - GGML_ASSERT(ggml_backend_buffer_is_host(lctx.inp_s_mask->buffer)); - float * data = (float *) lctx.inp_s_mask->data; - - // states which are not affected by the current batch are left untouched - for (int i = 0; i < n_kv; ++i) { - llama_seq_id seq_id = i + lctx.kv_self.head; - llama_kv_cell & kv_cell = lctx.kv_self.cells[seq_id]; - bool has_self_seq = kv_cell.has_seq_id(seq_id); - - data[i] = (float) has_self_seq; - - // ensure current sequences will be kept - if (!has_self_seq && kv_cell.pos >= 0) { - kv_cell.seq_id.insert(seq_id); - } - } - } - // For Mamba (and other recurrent architectures), - // update the correct state(s)/sequence(s) for each token of the batch. - // Like with the KQ_mask, if a token in the batch has multiple sequences, - // they are assumed to be equivalent (not here, but in ggml_ssm_scan and ggml_ssm_conv). - if (lctx.inp_s_seq) { - const int64_t n_tokens = batch.n_tokens; - - GGML_ASSERT(ggml_backend_buffer_is_host(lctx.inp_s_seq->buffer)); - int32_t * data = (int32_t *) lctx.inp_s_seq->data; - - for (int j = 0; j < n_tokens; ++j) { - const int32_t n_seq = batch.n_seq_id[j]; - GGML_ASSERT(0 < n_seq); // a token should be part of at least 1 sequence - - for (int i = 0; i < n_kv; ++i) { - if (i < n_seq) { - // for this type of model, the head is the minimum seq_id of the batch - data[j*n_kv + i] = batch.seq_id[j][i] - kv_self.head; - } else { - data[j*n_kv + i] = -1; - } - } - } - } - } -} - -// Make sure enough space is available for outputs. -// Returns max number of outputs for which space was reserved. -static size_t llama_output_reserve(llama_context & lctx, size_t n_outputs) { - const auto & cparams = lctx.cparams; - const auto & hparams = lctx.model.hparams; - - const size_t n_outputs_max = std::max(n_outputs, (size_t) cparams.n_seq_max); - - const auto n_batch = cparams.n_batch; - const auto n_vocab = hparams.n_vocab; - const auto n_embd = hparams.n_embd; - - // TODO: use a per-batch flag for logits presence instead - const bool has_logits = cparams.causal_attn; - const bool has_embd = cparams.embeddings && (hparams.causal_attn || cparams.pooling_type == LLAMA_POOLING_TYPE_NONE); - - const size_t logits_size = has_logits ? n_vocab*n_outputs_max : 0; - const size_t embd_size = has_embd ? n_embd*n_outputs_max : 0; - - if (lctx.output_ids.empty()) { - // init, never resized afterwards - lctx.output_ids.resize(n_batch); - } - - const size_t prev_size = lctx.buf_output ? ggml_backend_buffer_get_size(lctx.buf_output) : 0; - const size_t new_size = (logits_size + embd_size) * sizeof(float); - - // alloc only when more than the current capacity is required - // TODO: also consider shrinking the buffer - if (!lctx.buf_output || prev_size < new_size) { - if (lctx.buf_output) { -#ifndef NDEBUG - // This doesn't happen often, but may be annoying in some cases (like the HellaSwag benchmark) - LLAMA_LOG_INFO("%s: reallocating output buffer from size %.02f MiB to %.02f MiB\n", __func__, prev_size / 1024.0 / 1024.0, new_size / 1024.0 / 1024.0); -#endif - ggml_backend_buffer_free(lctx.buf_output); - lctx.buf_output = nullptr; - lctx.logits = nullptr; - lctx.embd = nullptr; - } - - lctx.buf_output = ggml_backend_buft_alloc_buffer(llama_default_buffer_type_cpu(true), new_size); - if (lctx.buf_output == nullptr) { - LLAMA_LOG_ERROR("%s: failed to allocate output buffer of size %.2f MiB\n", __func__, new_size / (1024.0 * 1024.0)); - return 0; - } - } - - float * output_base = (float *) ggml_backend_buffer_get_base(lctx.buf_output); - - lctx.logits = has_logits ? output_base : nullptr; - lctx.embd = has_embd ? output_base + logits_size : nullptr; - - lctx.output_size = n_outputs_max; - lctx.logits_size = logits_size; - lctx.embd_size = embd_size; - - // set all ids as invalid (negative) - std::fill(lctx.output_ids.begin(), lctx.output_ids.end(), -1); - - ggml_backend_buffer_clear(lctx.buf_output, 0); - - lctx.n_outputs = 0; - - return n_outputs_max; -} - - -static void llama_graph_compute( - llama_context & lctx, - ggml_cgraph * gf, - int n_threads) { -#ifdef GGML_USE_MPI - const int64_t n_layer = lctx.model.hparams.n_layer; - ggml_mpi_graph_compute_pre(lctx.ctx_mpi, gf, n_layer); -#endif - -#ifdef GGML_USE_METAL - if (ggml_backend_is_metal(lctx.backend_metal)) { - ggml_backend_metal_set_n_cb(lctx.backend_metal, n_threads); - } -#endif - - if (lctx.backend_cpu != nullptr) { - ggml_backend_cpu_set_n_threads(lctx.backend_cpu, n_threads); - ggml_backend_cpu_set_abort_callback(lctx.backend_cpu, lctx.abort_callback, lctx.abort_callback_data); - } - - ggml_backend_sched_graph_compute_async(lctx.sched, gf); - - // fprintf(stderr, "splits: %d\n", ggml_backend_sched_get_n_splits(lctx.sched)); - -#ifdef GGML_USE_MPI - ggml_mpi_graph_compute_post(lctx.ctx_mpi, gf, n_layer); -#endif -} - -// decode a batch of tokens by evaluating the transformer -// -// - lctx: llama context -// - batch: batch to evaluate -// -// return 0 on success -// return positive int on warning -// return negative int on error -// -static int llama_decode_internal( - llama_context & lctx, - llama_batch batch_all) { // TODO: rename back to batch - - const uint32_t n_tokens_all = batch_all.n_tokens; - - if (n_tokens_all == 0) { - LLAMA_LOG_ERROR("%s: n_tokens == 0", __func__); - return -1; - } - - const auto & model = lctx.model; - const auto & hparams = model.hparams; - const auto & cparams = lctx.cparams; - - GGML_ASSERT((!batch_all.token && batch_all.embd) || (batch_all.token && !batch_all.embd)); // NOLINT - - GGML_ASSERT(n_tokens_all <= cparams.n_batch); - - GGML_ASSERT((cparams.causal_attn || cparams.n_ubatch >= n_tokens_all) && "non-causal attention requires n_ubatch >= n_tokens"); - - if (lctx.t_compute_start_us == 0) { - lctx.t_compute_start_us = ggml_time_us(); - } - lctx.n_queued_tokens += n_tokens_all; - -#ifdef GGML_USE_MPI - // TODO: needs fix after #3228 - GGML_ASSERT(false && "not implemented"); - //ggml_mpi_eval_init(lctx.ctx_mpi, &n_tokens, &n_past, &n_threads); -#endif - - auto & kv_self = lctx.kv_self; - - const int64_t n_embd = hparams.n_embd; - const int64_t n_vocab = hparams.n_vocab; - - uint32_t n_outputs = 0; - uint32_t n_outputs_prev = 0; - - const auto n_ubatch = cparams.n_ubatch; - - std::vector pos; - std::vector n_seq_id; - std::vector seq_id_arr; - std::vector> seq_id; - - // count outputs - if (batch_all.logits) { - for (uint32_t i = 0; i < n_tokens_all; ++i) { - n_outputs += batch_all.logits[i] != 0; - } - } else if (lctx.logits_all || (cparams.embeddings && cparams.pooling_type != LLAMA_POOLING_TYPE_NONE)) { - n_outputs = n_tokens_all; - } else { - // keep last output only - n_outputs = 1; - } - - // reserve output buffer - if (llama_output_reserve(lctx, n_outputs) < n_outputs) { - LLAMA_LOG_ERROR("%s: could not reserve space for batch with %u outputs\n", __func__, n_outputs); - return -2; - }; - - // set output mappings - if (batch_all.logits) { - int32_t i_logits = 0; - for (uint32_t i = 0; i < n_tokens_all; ++i) { - if (batch_all.logits[i]) { - lctx.output_ids[i] = i_logits++; - } - } - } else { - for (uint32_t i = 0; i < n_outputs; ++i) { - lctx.output_ids[i] = i; - } - } - - for (uint32_t cur_token = 0; cur_token < n_tokens_all; cur_token += n_ubatch) { - const uint32_t n_tokens = std::min(n_ubatch, n_tokens_all - cur_token); - llama_batch u_batch = { - /* .n_tokens = */ (int32_t) n_tokens, - /* .token = */ batch_all.token ? batch_all.token + cur_token : nullptr, - /* .embd = */ batch_all.embd ? batch_all.embd + cur_token*n_embd : nullptr, - /* .pos = */ batch_all.pos ? batch_all.pos + cur_token : nullptr, - /* .n_seq_id = */ batch_all.n_seq_id ? batch_all.n_seq_id + cur_token : nullptr, - /* .seq_id = */ batch_all.seq_id ? batch_all.seq_id + cur_token : nullptr, - /* .logits = */ batch_all.logits ? batch_all.logits + cur_token : nullptr, - /* .all_pos_0 = */ batch_all.all_pos_0 + (llama_pos) cur_token*batch_all.all_pos_1, - /* .all_pos_1 = */ batch_all.all_pos_1, - /* .all_seq_id = */ batch_all.all_seq_id, - }; - - // count the outputs in this u_batch - { - int32_t n_outputs_new = 0; - - if (u_batch.logits) { - for (uint32_t i = 0; i < n_tokens; i++) { - n_outputs_new += u_batch.logits[i] != 0; - } - } else if (n_outputs == n_tokens_all) { - n_outputs_new = n_tokens; - } else { - // keep last output only - if (cur_token + n_tokens >= n_tokens_all) { - n_outputs_new = 1; - } - } - - // needs to happen before the graph is built - lctx.n_outputs = n_outputs_new; - } - - int n_threads = n_tokens == 1 ? cparams.n_threads : cparams.n_threads_batch; - GGML_ASSERT(n_threads > 0); - - // helpers for smoother batch API transition - // after deprecating the llama_eval calls, these will be removed - if (u_batch.pos == nullptr) { - pos.resize(n_tokens); - for (uint32_t i = 0; i < n_tokens; i++) { - pos[i] = u_batch.all_pos_0 + i*u_batch.all_pos_1; - } - - u_batch.pos = pos.data(); - } - - if (u_batch.seq_id == nullptr) { - n_seq_id.resize(n_tokens); - seq_id.resize(n_tokens); - seq_id_arr.resize(n_tokens); - for (uint32_t i = 0; i < n_tokens; i++) { - n_seq_id[i] = 1; - seq_id[i].resize(1); - seq_id[i][0] = u_batch.all_seq_id; - seq_id_arr[i] = seq_id[i].data(); - } - - u_batch.n_seq_id = n_seq_id.data(); - u_batch.seq_id = seq_id_arr.data(); - } - - // non-causal masks do not use the KV cache - if (hparams.causal_attn) { - llama_kv_cache_update(&lctx); - - // if we have enough unused cells before the current head -> - // better to start searching from the beginning of the cache, hoping to fill it - if (kv_self.head > kv_self.used + 2*n_tokens) { - kv_self.head = 0; - } - - if (!llama_kv_cache_find_slot(kv_self, u_batch)) { - return 1; - } - - if (!kv_self.recurrent) { - // a heuristic, to avoid attending the full cache if it is not yet utilized - // after enough generations, the benefit from this heuristic disappears - // if we start defragmenting the cache, the benefit from this will be more important - kv_self.n = std::min(kv_self.size, std::max(32u, GGML_PAD(llama_kv_cache_cell_max(kv_self), 32))); - //kv_self.n = llama_kv_cache_cell_max(kv_self); - } - } - - //printf("kv_self.n = %5d, kv_self.used = %5d, kv_self.head = %5d\n", kv_self.n, kv_self.used, kv_self.head); - - ggml_backend_sched_reset(lctx.sched); - ggml_backend_sched_set_eval_callback(lctx.sched, lctx.cparams.cb_eval, lctx.cparams.cb_eval_user_data); - - ggml_cgraph * gf = llama_build_graph(lctx, u_batch, false); - - // the output is always the last tensor in the graph - struct ggml_tensor * res = gf->nodes[gf->n_nodes - 1]; - struct ggml_tensor * embd = gf->nodes[gf->n_nodes - 2]; - - if (lctx.n_outputs == 0) { - // no output - res = nullptr; - embd = nullptr; - } else if (!hparams.causal_attn) { - res = nullptr; // do not extract logits for embedding models such as BERT - - // token or sequence embeddings - embd = gf->nodes[gf->n_nodes - 1]; - - GGML_ASSERT(strcmp(embd->name, "result_embd") == 0 || strcmp(embd->name, "result_embd_pooled") == 0); - } else if (cparams.embeddings) { - // the embeddings could be in the second to last tensor, or any of the previous tensors - int i_embd = gf->n_nodes - 2; - for (int i = 3; strcmp(embd->name, "result_norm") != 0; ++i) { - i_embd = gf->n_nodes - i; - if (i_embd < 0) { break; } - embd = gf->nodes[i_embd]; - } - GGML_ASSERT(i_embd >= 0 && "missing result_norm tensor"); - - // TODO: use a per-batch flag to know when to skip logits while keeping embeddings - if (!cparams.causal_attn) { - res = nullptr; // do not extract logits when not needed - // skip computing logits - // TODO: is this safe? - gf->n_nodes = i_embd + 1; - } - } else { - embd = nullptr; // do not extract embeddings when not needed - GGML_ASSERT(strcmp(res->name, "result_output") == 0 && "missing result_output tensor"); - } - // LLAMA_LOG_INFO("graph build time: %.3f ms (%d nodes, %d leafs)\n", (ggml_time_us() - t_start_us)/1000.0, gf->n_nodes, gf->n_leafs); - - // for big prompts, if BLAS is enabled, it is better to use only one thread - // otherwise, the threads are spin-lock waiting for the BLAS calls and are degrading the performance - // TODO: this is mostly important for Apple Silicon where CBLAS is still performing very well - // we still need some threads to process all non-mul_mat ops, but not too much to avoid interfering - // with the BLAS calls. need a better solution - // MoE Special Case: This logic applies when hparams.n_expert == 0, i.e. the model is NOT an MoE model. When an MoE is - // being processed then Accelerate/BLAS will not be involved, so capping would limit performance. - if (n_tokens >= 32 && hparams.n_expert == 0 && ggml_cpu_has_blas() && !ggml_cpu_has_gpublas()) { - n_threads = std::min(4, n_threads); - } - - ggml_backend_sched_alloc_graph(lctx.sched, gf); - - llama_set_inputs(lctx, u_batch); - - llama_graph_compute(lctx, gf, n_threads); - - // update the kv ring buffer - { - kv_self.head += n_tokens; - - // Ensure kv cache head points to a valid index. - if (kv_self.head >= kv_self.size) { - kv_self.head = 0; - } - } - -#ifdef GGML_PERF - // print timing information per ggml operation (for debugging purposes) - // requires GGML_PERF to be defined - ggml_graph_print(gf); -#endif - - // plot the computation graph in dot format (for debugging purposes) - //if (n_past%100 == 0) { - // ggml_graph_dump_dot(gf, NULL, "llama.dot"); - //} - - // extract logits - if (res) { - ggml_backend_t backend_res = ggml_backend_sched_get_tensor_backend(lctx.sched, res); - GGML_ASSERT(backend_res != nullptr); - GGML_ASSERT(lctx.logits != nullptr); - - float * logits_out = lctx.logits + n_outputs_prev*n_vocab; - const int32_t n_outputs_new = lctx.n_outputs; - - if (n_outputs_new) { - GGML_ASSERT( n_outputs_prev + n_outputs_new <= n_outputs); - GGML_ASSERT((n_outputs_prev + n_outputs_new)*n_vocab <= (int64_t) lctx.logits_size); - ggml_backend_tensor_get_async(backend_res, res, logits_out, 0, n_outputs_new*n_vocab*sizeof(float)); - } - } - - // extract embeddings - if (embd) { - ggml_backend_t backend_embd = ggml_backend_sched_get_tensor_backend(lctx.sched, embd); - GGML_ASSERT(backend_embd != nullptr); - - switch (cparams.pooling_type) { - case LLAMA_POOLING_TYPE_NONE: - { - // extract token embeddings - GGML_ASSERT(lctx.embd != nullptr); - float * embd_out = lctx.embd + n_outputs_prev*n_embd; - const int32_t n_outputs_new = lctx.n_outputs; - - if (n_outputs_new) { - GGML_ASSERT( n_outputs_prev + n_outputs_new <= n_outputs); - GGML_ASSERT((n_outputs_prev + n_outputs_new)*n_embd <= (int64_t) lctx.embd_size); - ggml_backend_tensor_get_async(backend_embd, embd, embd_out, 0, n_outputs_new*n_embd*sizeof(float)); - } - } break; - case LLAMA_POOLING_TYPE_CLS: - case LLAMA_POOLING_TYPE_MEAN: - { - GGML_ASSERT(strcmp(embd->name, "result_embd_pooled") == 0); - - // extract sequence embeddings - auto & embd_seq_out = lctx.embd_seq; - embd_seq_out.clear(); - - for (uint32_t i = 0; i < n_tokens; i++) { - const llama_seq_id seq_id = u_batch.seq_id[i][0]; - if (embd_seq_out.find(seq_id) != embd_seq_out.end()) { - continue; - } - embd_seq_out[seq_id].resize(n_embd); - ggml_backend_tensor_get_async(backend_embd, embd, embd_seq_out[seq_id].data(), (n_embd*seq_id)*sizeof(float), n_embd*sizeof(float)); - } - } break; - case LLAMA_POOLING_TYPE_UNSPECIFIED: - { - GGML_ASSERT(false && "unknown pooling type"); - } break; - } - } - n_outputs_prev += lctx.n_outputs; - } - - // set to total number of outputs in the batch, for use in llama_get_logits_ith - lctx.n_outputs = n_outputs; - - // wait for the computation to finish (automatically done when obtaining the model output) - //llama_synchronize(&lctx); - - // decide if we need to defrag the kv cache - if (cparams.causal_attn && cparams.defrag_thold >= 0.0f) { - const float fragmentation = kv_self.n >= 128 ? 1.0f - float(kv_self.used)/float(kv_self.n) : 0.0f; - - // queue defragmentation for next llama_kv_cache_update - if (fragmentation > cparams.defrag_thold) { - //LLAMA_LOG_INFO("fragmentation: %.2f\n", fragmentation); - - llama_kv_cache_defrag(kv_self); - } - } - - // Reset state for the next token before backend sync, to allow the CPU activities in the reset to - // overlap with device computation. - ggml_backend_sched_reset(lctx.sched); - - return 0; -} - - -// find holes from the beginning of the KV cache and fill them by moving data from the end of the cache -static void llama_kv_cache_defrag_internal(struct llama_context & lctx) { - auto & kv_self = lctx.kv_self; - - const auto & hparams = lctx.model.hparams; - - const uint32_t n_layer = hparams.n_layer; - - const uint32_t n_kv = llama_kv_cache_cell_max(kv_self); - const uint32_t n_used = kv_self.used; - - assert(n_used <= n_kv); - - //const int64_t t_start = ggml_time_us(); - - // number of cells moved - uint32_t n_moves = 0; - - // each move requires 6*n_layer tensors (see build_defrag) - // - source view, destination view, copy operation - // - x2 for keys and values - const uint32_t max_moves = LLAMA_MAX_NODES/(6*n_layer); - - // determine which KV cells to move where - // - // cell i moves to ids[i] - // - // if ids[i] == i || ids[i] == n_kv, then cell i is not moved - // - std::vector ids(n_kv, n_kv); - - for (uint32_t i0 = 0; i0 < n_used; ++i0) { - const auto & cell0 = kv_self.cells[i0]; - - if (!cell0.is_empty()) { - ids[i0] = i0; - - continue; - } - - // found a hole - fill it with data from the end of the cache - - uint32_t nh = 1; - - // determine the size of the hole - while (i0 + nh < n_used && kv_self.cells[i0 + nh].is_empty()) { - nh++; - } - - uint32_t nf = 0; - uint32_t is = n_kv - 1; - - // starting from the end, find nh non-empty cells - for (; is > i0; --is) { - const auto & cell1 = kv_self.cells[is]; - - if (cell1.is_empty() || ids[is] != n_kv) { - continue; - } - - // non-empty cell which is not yet moved - nf++; - - if (nf == nh) { - break; - } - } - - // this can only happen if `n_used` is not accurate, which would be a bug - GGML_ASSERT(nf == nh && "KV defrag bug: nf != nh"); - - nf = 0; - - uint32_t i1 = is; - - // are we moving a continuous block of memory? - bool cont = false; - - // should we stop searching for the next move? - bool stop = false; - - // go back and move the nf cells to the hole - for (; i1 < n_kv; ++i1) { - auto & cell1 = kv_self.cells[i1]; - - if (cell1.is_empty() || ids[i1] != n_kv) { - if (n_moves == max_moves) { - stop = true; - break; - } - - cont = false; - continue; - } - - // this cell goes to (i0 + nf) - ids[i1] = i0 + nf; - - // move the cell meta data - kv_self.cells[i0 + nf] = cell1; - - // clear the old cell and move the head there - cell1 = llama_kv_cell(); - kv_self.head = n_used; - - if (!cont) { - n_moves++; - cont = true; - } - - nf++; - - if (nf == nh) { - break; - } - } - - if (stop || n_moves == max_moves) { - break; - } - - //LLAMA_LOG_INFO("(tmp log) KV defrag: move [%u, %u) to [%u, %u)\n", is, i1 + 1, i0, i0 + nh); - - i0 += nh - 1; - } - - if (n_moves == 0) { - return; - } - - //LLAMA_LOG_INFO("(tmp log) KV defrag cell moves: %u\n", n_moves); - - //LLAMA_LOG_INFO("expected gf nodes: %u\n", 6*n_moves*n_layer); - -#if 0 - // CPU defrag - // - // TODO: optimizations are possible: - // - multiple threads - // - avoid copying to the host memory when already there - // - // likely not worth the effort, as we have ggml_graph based defrag - // - - const uint32_t n_embd_k_gqa = hparams.n_embd_k_gqa(); - const uint32_t n_embd_v_gqa = hparams.n_embd_v_gqa(); - - const uint32_t kv_size = kv_self.size; - - std::vector buf_k; - std::vector buf_v; - - for (uint32_t il = 0; il < n_layer; ++il) { - const size_t k_size_row = ggml_row_size(kv_self.k_l[il]->type, n_embd_k_gqa); - const size_t k_size = ggml_row_size(kv_self.k_l[il]->type, n_embd_k_gqa*kv_size); - - const size_t v_size_el = ggml_type_size(kv_self.v_l[il]->type); - const size_t v_size = ggml_row_size (kv_self.v_l[il]->type, n_embd_v_gqa*kv_size); - - buf_k.resize(k_size); - buf_v.resize(v_size); - - ggml_backend_tensor_get(kv_self.k_l[il], buf_k.data(), 0, buf_k.size()); - ggml_backend_tensor_get(kv_self.v_l[il], buf_v.data(), 0, buf_v.size()); - - // batch move [i, i+nm) to [id, id+nm) - // note: cells can move only to a lower index - for (uint32_t i = 0; i < n_kv; ++i) { - const uint32_t id = ids[i]; - - if (i == id || id == n_kv) { - continue; - } - - uint32_t nm = 1; - - while (i + nm < n_kv && ids[i + nm] == id + nm) { - nm++; - } - - // move keys - { - const int64_t os = i*k_size_row; - const int64_t od = id*k_size_row; - - memcpy(buf_k.data() + od, buf_k.data() + os, nm*k_size_row); - } - - // move values (note: they are transposed) - { - const int64_t os = i; - const int64_t od = id; - - for (uint32_t j = 0; j < n_embd_v_gqa; ++j) { - memcpy(buf_v.data() + (od + j*kv_size)*v_size_el, buf_v.data() + (os + j*kv_size)*v_size_el, nm*v_size_el); - } - } - - i += nm - 1; - } - - ggml_backend_tensor_set(kv_self.k_l[il], buf_k.data(), 0, buf_k.size()); - ggml_backend_tensor_set(kv_self.v_l[il], buf_v.data(), 0, buf_v.size()); - } -#else - // ggml_graph defrag - - ggml_backend_sched_reset(lctx.sched); - - ggml_cgraph * gf = llama_build_graph_defrag(lctx, ids); - - llama_graph_compute(lctx, gf, lctx.cparams.n_threads); -#endif - - //const int64_t t_end = ggml_time_us(); - - //LLAMA_LOG_INFO("(tmp log) KV defrag time: %.3f ms\n", (t_end - t_start)/1000.0); -} - -static void llama_kv_cache_update_internal(struct llama_context & lctx) { - bool need_reserve = false; - - // apply K-shift if needed - if (lctx.model.hparams.rope_type != LLAMA_ROPE_TYPE_NONE && lctx.kv_self.has_shift) { - { - ggml_backend_sched_reset(lctx.sched); - - ggml_cgraph * gf = llama_build_graph_k_shift(lctx); - - ggml_backend_sched_alloc_graph(lctx.sched, gf); - - llama_set_k_shift(lctx); - - llama_graph_compute(lctx, gf, lctx.cparams.n_threads); - - need_reserve = true; - } - - { - auto & kv_self = lctx.kv_self; - - kv_self.has_shift = false; - - for (uint32_t i = 0; i < kv_self.size; ++i) { - kv_self.cells[i].delta = 0; - } - } - } - - if (lctx.kv_self.recurrent && lctx.kv_self.do_copy) { - { - ggml_backend_sched_reset(lctx.sched); - - ggml_cgraph * gf = llama_build_graph_s_copy(lctx); - - ggml_backend_sched_alloc_graph(lctx.sched, gf); - - llama_set_s_copy(lctx); - - llama_graph_compute(lctx, gf, lctx.cparams.n_threads); - - need_reserve = true; - } - - { - auto & kv_self = lctx.kv_self; - - kv_self.do_copy = false; - - for (uint32_t i = 0; i < kv_self.size; ++i) { - kv_self.cells[i].src = i; - } - } - } - - // defragment the KV cache if needed - if (lctx.kv_self.do_defrag) { - llama_kv_cache_defrag_internal(lctx); - - need_reserve = true; - - lctx.kv_self.do_defrag = false; - } - - // reserve a worst case graph again - if (need_reserve) { - // TODO: extract to a function - // build worst-case graph - int n_tokens = (int)std::min(lctx.cparams.n_ctx, lctx.cparams.n_ubatch); - int n_past = lctx.cparams.n_ctx - n_tokens; - llama_token token = llama_token_bos(&lctx.model); // not actually used by llama_build_graph, but required to choose between token and embedding inputs graph - ggml_cgraph * gf = llama_build_graph(lctx, llama_batch_get_one(&token, n_tokens, n_past, 0), true); - - // initialize scheduler with the worst-case graph - ggml_backend_sched_reset(lctx.sched); - if (!ggml_backend_sched_reserve(lctx.sched, gf)) { - LLAMA_LOG_ERROR("%s: failed to allocate compute buffers\n", __func__); - } - } -} - -// -// tokenizer -// - -static enum llama_vocab_type llama_vocab_get_type(const llama_vocab & vocab) { - return vocab.type; -} - -static bool llama_is_normal_token(const llama_vocab & vocab, llama_token id) { - GGML_ASSERT(vocab.type != LLAMA_VOCAB_TYPE_NONE); - return vocab.id_to_token[id].type == LLAMA_TOKEN_TYPE_NORMAL; -} - -static bool llama_is_unknown_token(const llama_vocab & vocab, llama_token id) { - GGML_ASSERT(vocab.type != LLAMA_VOCAB_TYPE_NONE); - return vocab.id_to_token[id].type == LLAMA_TOKEN_TYPE_UNKNOWN; -} - -static bool llama_is_control_token(const llama_vocab & vocab, llama_token id) { - GGML_ASSERT(vocab.type != LLAMA_VOCAB_TYPE_NONE); - return vocab.id_to_token[id].type == LLAMA_TOKEN_TYPE_CONTROL; -} - -static bool llama_is_byte_token(const llama_vocab & vocab, llama_token id) { - GGML_ASSERT(vocab.type != LLAMA_VOCAB_TYPE_NONE); - return vocab.id_to_token[id].type == LLAMA_TOKEN_TYPE_BYTE; -} - -static bool llama_is_user_defined_token(const llama_vocab& vocab, llama_token id) { - GGML_ASSERT(vocab.type != LLAMA_VOCAB_TYPE_NONE); - return vocab.id_to_token[id].type == LLAMA_TOKEN_TYPE_USER_DEFINED; -} - -static uint8_t llama_token_to_byte(const llama_vocab& vocab, llama_token id) { - GGML_ASSERT(llama_vocab_get_type(vocab) != LLAMA_VOCAB_TYPE_NONE); - GGML_ASSERT(llama_is_byte_token(vocab, id)); - const auto& token_data = vocab.id_to_token.at(id); - switch (llama_vocab_get_type(vocab)) { - case LLAMA_VOCAB_TYPE_SPM: { - auto buf = token_data.text.substr(3, 2); - return strtol(buf.c_str(), NULL, 16); - } - case LLAMA_VOCAB_TYPE_BPE: { - GGML_ASSERT(false); - return unicode_utf8_to_byte(token_data.text); - } - case LLAMA_VOCAB_TYPE_WPM: { - GGML_ASSERT(false); - } - default: - GGML_ASSERT(false); - } -} - -static llama_token llama_byte_to_token(const llama_vocab & vocab, uint8_t ch) { - GGML_ASSERT(llama_vocab_get_type(vocab) != LLAMA_VOCAB_TYPE_NONE); - static const char * hex = "0123456789ABCDEF"; - switch (llama_vocab_get_type(vocab)) { - case LLAMA_VOCAB_TYPE_SPM: { - const char buf[7] = { '<', '0', 'x', hex[ch >> 4], hex[ch & 15], '>', 0 }; - auto token = vocab.token_to_id.find(buf); - if (token != vocab.token_to_id.end()) { - return (*token).second; - } - // Try to fall back to just the byte as a string - const char buf2[2] = { (char)ch, 0 }; - return vocab.token_to_id.at(buf2); - } - case LLAMA_VOCAB_TYPE_WPM: - case LLAMA_VOCAB_TYPE_BPE: { - return vocab.token_to_id.at(unicode_byte_to_utf8(ch)); - } - default: - GGML_ASSERT(false); - } -} - -static void llama_escape_whitespace(std::string & text) { - replace_all(text, " ", "\xe2\x96\x81"); -} - -static void llama_unescape_whitespace(std::string & word) { - replace_all(word, "\xe2\x96\x81", " "); -} - -struct llm_symbol { - using index = int; - index prev; - index next; - const char * text; - size_t n; -}; - -static_assert(std::is_trivially_copyable::value, "llm_symbol is not trivially copyable"); - -// SPM tokenizer -// original implementation: -// https://github.com/ggerganov/llama.cpp/commit/074bea2eb1f1349a0118239c4152914aecaa1be4 - -struct llm_bigram_spm { - struct comparator { - bool operator()(llm_bigram_spm & l, llm_bigram_spm & r) { - return (l.score < r.score) || (l.score == r.score && l.left > r.left); - } - }; - using queue_storage = std::vector; - using queue = std::priority_queue; - llm_symbol::index left; - llm_symbol::index right; - float score; - size_t size; -}; - -struct llm_tokenizer_spm { - llm_tokenizer_spm(const llama_vocab & vocab) : vocab(vocab) {} - - void tokenize(const std::string & text, std::vector & output) { - // split string into utf8 chars - int index = 0; - size_t offs = 0; - while (offs < text.size()) { - llm_symbol sym; - size_t len = utf8_len(text[offs]); - sym.text = text.c_str() + offs; - sym.n = std::min(len, text.size() - offs); - offs += sym.n; - sym.prev = index - 1; - sym.next = offs == text.size() ? -1 : index + 1; - index++; - symbols.emplace_back(sym); - } - - // seed the work queue with all possible 2-character tokens. - for (size_t i = 1; i < symbols.size(); ++i) { - try_add_bigram(i - 1, i); - } - - // keep substituting the highest frequency pairs for as long as we can. - while (!work_queue.empty()) { - auto bigram = work_queue.top(); - work_queue.pop(); - - auto & left_sym = symbols[bigram.left]; - auto & right_sym = symbols[bigram.right]; - - // if one of the symbols already got merged, skip it. - if (left_sym.n == 0 || right_sym.n == 0 || - left_sym.n + right_sym.n != bigram.size) { - continue; - } - - // merge the right sym into the left one - left_sym.n += right_sym.n; - right_sym.n = 0; - - //LLAMA_LOG_INFO("left = '%*s' size = %zu\n", (int) left_sym.n, left_sym.text, bigram.size); - - // remove the right sym from the chain - left_sym.next = right_sym.next; - if (right_sym.next >= 0) { - symbols[right_sym.next].prev = bigram.left; - } - - // find more substitutions - try_add_bigram(left_sym.prev, bigram.left); - try_add_bigram(bigram.left, left_sym.next); - } - - for (int i = 0; i != -1; i = symbols[i].next) { - auto & symbol = symbols[i]; - resegment(symbol, output); - } - } - -private: - void resegment(llm_symbol & symbol, std::vector & output) { - auto text = std::string(symbol.text, symbol.n); - auto token = vocab.token_to_id.find(text); - - // Do we need to support is_unused? - if (token != vocab.token_to_id.end()) { - output.push_back((*token).second); - return; - } - - const auto p = rev_merge.find(text); - - if (p == rev_merge.end()) { - // output any symbols that did not form tokens as bytes. - output.reserve(output.size() + symbol.n); - for (int j = 0; j < (int)symbol.n; ++j) { - llama_vocab::id token_id = llama_byte_to_token(vocab, symbol.text[j]); - output.push_back(token_id); - } - return; - } - - resegment(symbols[p->second.first], output); - resegment(symbols[p->second.second], output); - } - - void try_add_bigram(int left, int right) { - if (left == -1 || right == -1) { - return; - } - - const std::string text = std::string(symbols[left].text, symbols[left].n + symbols[right].n); - auto token = vocab.token_to_id.find(text); - - if (token == vocab.token_to_id.end()) { - return; - } - - if (static_cast((*token).second) >= vocab.id_to_token.size()) { - return; - } - - const auto & tok_data = vocab.id_to_token[(*token).second]; - - llm_bigram_spm bigram; - bigram.left = left; - bigram.right = right; - bigram.score = tok_data.score; - bigram.size = text.size(); - - work_queue.push(bigram); - - // Do we need to support is_unused? - rev_merge[text] = std::make_pair(left, right); - } - - const llama_vocab & vocab; - - std::vector symbols; - llm_bigram_spm::queue work_queue; - - std::map> rev_merge; -}; - -// BPE tokenizer -// adapted from https://github.com/cmp-nct/ggllm.cpp [MIT License] -// tried to simplify unicode stuff, so most likely does not work 100% correctly! - -// TODO: there are a lot of common parts between spm and bpe tokenizers, should be refactored and reused - -struct llm_bigram_bpe { - struct comparator { - bool operator()(const llm_bigram_bpe & l, const llm_bigram_bpe & r) const { - return l.rank > r.rank || (l.rank == r.rank && l.left > r.left); - } - }; - - using queue_storage = std::vector; - using queue = std::priority_queue; - llm_symbol::index left; - llm_symbol::index right; - std::string text; - int rank; - size_t size; -}; - -struct llm_tokenizer_bpe { - llm_tokenizer_bpe(const llama_vocab & vocab): vocab(vocab) {} - - void tokenize(const std::string & text, std::vector & output) { - int final_prev_index = -1; - auto word_collection = bpe_gpt2_preprocess(text); - - symbols_final.clear(); - - for (auto & word : word_collection) { - work_queue = llm_bigram_bpe::queue(); - symbols.clear(); - - int index = 0; - size_t offset = 0; - - while (offset < word.size()) { - llm_symbol sym; - size_t char_len = std::min(word.size() - offset, (size_t) ::utf8_len(word[offset])); - sym.text = word.c_str() + offset; - sym.n = char_len; - offset += sym.n; - sym.prev = index - 1; - sym.next = offset == word.size() ? -1 : index + 1; - index++; - symbols.emplace_back(sym); - } - for (size_t i = 1; i < symbols.size(); ++i) { - add_new_bigram(i - 1, i); - } - - // build token(s) - while (!work_queue.empty()) { - auto bigram = work_queue.top(); - work_queue.pop(); - - auto & left_symbol = symbols[bigram.left]; - auto & right_symbol = symbols[bigram.right]; - - if (left_symbol.n == 0 || right_symbol.n == 0) { - continue; - } - std::string left_token = std::string(left_symbol.text, left_symbol.n); - std::string right_token = std::string(right_symbol.text, right_symbol.n); - if (left_token + right_token != bigram.text) { - continue; // Skip this bigram if it's outdated - } - - // merge the right sym into the left one - left_symbol.n += right_symbol.n; - right_symbol.n = 0; - - // remove the right sym from the chain - left_symbol.next = right_symbol.next; - if (right_symbol.next >= 0) { - symbols[right_symbol.next].prev = bigram.left; - } - - add_new_bigram(left_symbol.prev, bigram.left); // left side of current symbol - add_new_bigram(bigram.left, left_symbol.next); // right side of current symbol - } - - // add the finished tokens to the final list keeping correct order for next and prev - for (auto & sym : symbols) { - if (sym.n > 0) { - sym.prev = final_prev_index; - sym.next = -1; - if (final_prev_index != -1) { - symbols_final[final_prev_index].next = symbols_final.size(); - } - symbols_final.emplace_back(sym); - final_prev_index = symbols_final.size() - 1; - } - } - } - - symbols = symbols_final; - - if (!symbols.empty()) { - for (int i = 0; i != -1; i = symbols[i].next) { - auto & symbol = symbols[i]; - if (symbol.n == 0) { - continue; - } - - const std::string str = std::string(symbol.text, symbol.n); - const auto token = vocab.token_to_id.find(str); - - if (token == vocab.token_to_id.end()) { - for (auto j = str.begin(); j != str.end(); ++j) { - std::string byte_str(1, *j); - auto token_multibyte = vocab.token_to_id.find(byte_str); - if (token_multibyte == vocab.token_to_id.end()) { - throw std::runtime_error("ERROR: byte not found in vocab"); - } - output.push_back((*token_multibyte).second); - } - } else { - output.push_back((*token).second); - } - } - } - } - -private: - void add_new_bigram(int left, int right) { - if (left == -1 || right == -1) { - return; - } - - std::string left_token = std::string(symbols[left].text, symbols[left].n); - std::string right_token = std::string(symbols[right].text, symbols[right].n); - - int rank_found = -1; - - rank_found = vocab.find_bpe_rank(left_token, right_token); - - if (rank_found < 0) { - return; - } - - llm_bigram_bpe bigram; - - bigram.left = left; - bigram.right = right; - bigram.text = left_token + right_token; - bigram.size = left_token.size() + right_token.size(); - bigram.rank = rank_found; - - work_queue.push(bigram); - } - - std::vector bpe_gpt2_preprocess(const std::string & text) { - std::vector bpe_words; - std::vector bpe_encoded_words; - - std::string token = ""; - // GPT2 system regex: 's|'t|'re|'ve|'m|'ll|'d| ?\p{L}+| ?\p{N}+| ?[^\s\p{L}\p{N}]+|\s+(?!\S)|\s+ - bool collecting_numeric = false; - bool collecting_letter = false; - bool collecting_special = false; - bool collecting_whitespace_lookahead = false; - bool collecting = false; - - std::vector text_utf; - text_utf.reserve(text.size()); - bpe_words.reserve(text.size()); - bpe_encoded_words.reserve(text.size()); - - const auto cpts = unicode_cpts_from_utf8(text); - for (size_t i = 0; i < cpts.size(); ++i) - text_utf.emplace_back(unicode_cpt_to_utf8(cpts[i])); - - for (int i = 0; i < (int)text_utf.size(); i++) { - const std::string & utf_char = text_utf[i]; - bool split_condition = false; - int bytes_remain = text_utf.size() - i; - // forward backward lookups - const std::string & utf_char_next = (i + 1 < (int)text_utf.size()) ? text_utf[i + 1] : ""; - const std::string & utf_char_next_next = (i + 2 < (int)text_utf.size()) ? text_utf[i + 2] : ""; - - // handling contractions - if (!split_condition && bytes_remain >= 2) { - // 's|'t|'m|'d - if (utf_char == "\'" && (utf_char_next == "s" || utf_char_next == "t" || utf_char_next == "m" || utf_char_next == "d")) { - split_condition = true; - } - if (split_condition) { - if (token.size()) { - bpe_words.emplace_back(token); // push previous content as token - } - token = utf_char + utf_char_next; - bpe_words.emplace_back(token); - token = ""; - i++; - continue; - } - } - if (!split_condition && bytes_remain >= 3) { - // 're|'ve|'ll - if (utf_char == "\'" && ( - (utf_char_next == "r" && utf_char_next_next == "e") || - (utf_char_next == "v" && utf_char_next_next == "e") || - (utf_char_next == "l" && utf_char_next_next == "l")) - ) { - split_condition = true; - } - if (split_condition) { - // current token + next token can be defined - if (token.size()) { - bpe_words.emplace_back(token); // push previous content as token - } - token = utf_char + utf_char_next + utf_char_next_next; - bpe_words.emplace_back(token); // the contraction - token = ""; - i += 2; - continue; - } - } - - if (!split_condition && !collecting) { - if (unicode_cpt_type(utf_char) == CODEPOINT_TYPE_LETTER || (!token.size() && utf_char == " " && unicode_cpt_type(utf_char_next) == CODEPOINT_TYPE_LETTER)) { - collecting_letter = true; - collecting = true; - } - else if (unicode_cpt_type(utf_char) == CODEPOINT_TYPE_DIGIT || (!token.size() && utf_char == " " && unicode_cpt_type(utf_char_next) == CODEPOINT_TYPE_DIGIT)) { - collecting_numeric = true; - collecting = true; - } - else if ( - ((unicode_cpt_type(utf_char) != CODEPOINT_TYPE_LETTER && unicode_cpt_type(utf_char) != CODEPOINT_TYPE_DIGIT) && (unicode_cpt_type(utf_char) != CODEPOINT_TYPE_WHITESPACE)) || - (!token.size() && utf_char == " " && unicode_cpt_type(utf_char_next) != CODEPOINT_TYPE_LETTER && unicode_cpt_type(utf_char_next) != CODEPOINT_TYPE_DIGIT && unicode_cpt_type(utf_char_next) != CODEPOINT_TYPE_WHITESPACE) - ) { - collecting_special = true; - collecting = true; - } - else if (unicode_cpt_type(utf_char) == CODEPOINT_TYPE_WHITESPACE && unicode_cpt_type(utf_char_next) == CODEPOINT_TYPE_WHITESPACE) { - collecting_whitespace_lookahead = true; - collecting = true; - } - else if (unicode_cpt_type(utf_char) == CODEPOINT_TYPE_WHITESPACE) { - split_condition = true; - } - } - else if (!split_condition && collecting) { - if (collecting_letter && unicode_cpt_type(utf_char) != CODEPOINT_TYPE_LETTER) { - split_condition = true; - } - else if (collecting_numeric && unicode_cpt_type(utf_char) != CODEPOINT_TYPE_DIGIT) { - split_condition = true; - } - else if (collecting_special && (unicode_cpt_type(utf_char) == CODEPOINT_TYPE_LETTER || unicode_cpt_type(utf_char) == CODEPOINT_TYPE_DIGIT || unicode_cpt_type(utf_char) == CODEPOINT_TYPE_WHITESPACE)) { - split_condition = true; - } - else if (collecting_whitespace_lookahead && (unicode_cpt_type(utf_char_next) == CODEPOINT_TYPE_LETTER || unicode_cpt_type(utf_char_next) == CODEPOINT_TYPE_DIGIT)) { - split_condition = true; - } - } - - if (utf_char_next == "") { - split_condition = true; // final - token += utf_char; - } - - if (split_condition) { - if (token.size()) { - bpe_words.emplace_back(token); - } - token = utf_char; - collecting = false; - collecting_letter = false; - collecting_numeric = false; - collecting_special = false; - collecting_whitespace_lookahead = false; - } - else { - token += utf_char; - } - } - - for (std::string & word : bpe_words) { - std::string encoded_token = ""; - for (char & c : word) { - encoded_token += unicode_byte_to_utf8(c); - } - bpe_encoded_words.emplace_back(encoded_token); - } - - return bpe_encoded_words; - } - - const llama_vocab & vocab; - - std::vector symbols; - std::vector symbols_final; - - llm_bigram_bpe::queue work_queue; -}; - -struct llm_tokenizer_wpm { - llm_tokenizer_wpm(const llama_vocab & vocab): vocab(vocab) {} - - void tokenize(const std::string & text, std::vector & output) { - auto * token_map = &vocab.token_to_id; - - // normalize and split by whitespace - std::vector words = preprocess(text); - - // bos token prepended already - - // find the longest tokens that form the words - for (const std::string &word : words) { - // skip empty words - if (word.size() == 0) { - continue; - } - - // prepend phantom space - std::string word1 = "\xe2\x96\x81" + word; - int n = word1.size(); - - // we're at the start of a new word - int i = 0; - bool match_any = false; - - // move through character position in word - while (i < n) { - // loop through possible match length - bool match = false; - for (int j = n; j > i; j--) { - auto it = token_map->find(word1.substr(i, j - i)); - if (it != token_map->end()) { - output.push_back(it->second); - match = true; - match_any = true; - i = j; - break; - } - } - - // must be an unknown character - if (!match) { - i++; - } - } - - // we didn't find any matches for this word - if (!match_any) { - output.push_back(vocab.special_unk_id); - } - } - } - - std::vector preprocess(const std::string & text) { - std::vector cpts_nfd = unicode_cpts_normalize_nfd(unicode_cpts_from_utf8(text)); - - // strip accents, strip control, uniformize whitespace, - // to lowercase, pad chinese characters, pad punctuation - std::string new_str = ""; - for (uint32_t code : cpts_nfd) { - int type = unicode_cpt_type(code); - if (type == CODEPOINT_TYPE_ACCENT_MARK || type == CODEPOINT_TYPE_CONTROL) { - continue; - } - code = unicode_tolower(code); - if (type == CODEPOINT_TYPE_WHITESPACE) { - code = ' '; - } - std::string s = unicode_cpt_to_utf8(code); - if (type == CODEPOINT_TYPE_PUNCTUATION || is_ascii_punct(code) || is_chinese_char(code)) { - new_str += " "; - new_str += s; - new_str += " "; - } else { - new_str += s; - } - } - - // split by whitespace - uint64_t l = 0; - uint64_t r = 0; - std::vector words; - while (r < new_str.size()) { - // if is whitespace - if (isspace(new_str[r], std::locale::classic())) { - if (r > l) words.push_back(new_str.substr(l, (r - l))); - l = r + 1; - r = l; - } else { - r += 1; - } - } - if (r > l) { - words.push_back(new_str.substr(l, (r - l))); - } - return words; - } - - bool is_ascii_punct(uint32_t code) { - if (code > 0xFF) { - return false; - } - auto c = char(static_cast(code)); - return ispunct(c, std::locale::classic()); - } - - bool is_chinese_char(uint32_t cpt) { - if ((cpt >= 0x4E00 && cpt <= 0x9FFF) || - (cpt >= 0x3400 && cpt <= 0x4DBF) || - (cpt >= 0x20000 && cpt <= 0x2A6DF) || - (cpt >= 0x2A700 && cpt <= 0x2B73F) || - (cpt >= 0x2B740 && cpt <= 0x2B81F) || - (cpt >= 0x2B920 && cpt <= 0x2CEAF) || // this should be 0x2B820 but in hf rust code it is 0x2B920 - (cpt >= 0xF900 && cpt <= 0xFAFF) || - (cpt >= 0x2F800 && cpt <= 0x2FA1F) || - (cpt >= 0x3000 && cpt <= 0x303F) || - (cpt >= 0xFF00 && cpt <= 0xFFEF)) { - return true; // NOLINT - } - return false; - } - - const llama_vocab & vocab; -}; - -typedef enum FRAGMENT_BUFFER_VARIANT_TYPE { - FRAGMENT_BUFFER_VARIANT_TYPE_TOKEN, - FRAGMENT_BUFFER_VARIANT_TYPE_RAW_TEXT -} FRAGMENT_BUFFER_VARIANT_TYPE; - -struct fragment_buffer_variant { - fragment_buffer_variant(llama_vocab::id _token) - : - type(FRAGMENT_BUFFER_VARIANT_TYPE_TOKEN), - token(_token), - raw_text(_dummy), - offset(0), - length(0) {} - - fragment_buffer_variant(const std::string & _raw_text, int64_t _offset, int64_t _length) - : - type(FRAGMENT_BUFFER_VARIANT_TYPE_RAW_TEXT), - token((llama_vocab::id) - 1), - raw_text(_raw_text), - offset(_offset), - length(_length){ - GGML_ASSERT(_offset >= 0); - GGML_ASSERT(_length >= 1); - GGML_ASSERT(offset + length <= raw_text.length()); - } - - const FRAGMENT_BUFFER_VARIANT_TYPE type; - const llama_vocab::id token; - const std::string _dummy; - const std::string & raw_text; - const uint64_t offset; - const uint64_t length; -}; - -// #define PRETOKENIZERDEBUG - -static void tokenizer_st_partition(const llama_vocab & vocab, std::forward_list & buffer) { - // for each special token - for (const auto & st: vocab.special_tokens_cache) { - const auto & special_token = st.first; - const auto & special_id = st.second; - - // for each text fragment - std::forward_list::iterator it = buffer.begin(); - while (it != buffer.end()) { - auto & fragment = (*it); - - // if a fragment is text ( not yet processed ) - if (fragment.type == FRAGMENT_BUFFER_VARIANT_TYPE_RAW_TEXT) { - auto * raw_text = &(fragment.raw_text); - - auto raw_text_base_offset = fragment.offset; - auto raw_text_base_length = fragment.length; - - // loop over the text - while (true) { - // find the first occurrence of a given special token in this fragment - // passing offset argument only limit the "search area" but match coordinates - // are still relative to the source full raw_text - auto match = raw_text->find(special_token, raw_text_base_offset); - - // no occurrences found, stop processing this fragment for a given special token - if (match == std::string::npos) break; - - // check if match is within bounds of offset <-> length - if (match + special_token.length() > raw_text_base_offset + raw_text_base_length) break; - -#ifdef PRETOKENIZERDEBUG - LLAMA_LOG_WARN("FF: (%ld %ld %ld) '%s'\n", raw_text->length(), raw_text_base_offset, raw_text_base_length, raw_text->substr(raw_text_base_offset, raw_text_base_length).c_str()); -#endif - auto source = std::distance(buffer.begin(), it); - - // if match is further than base offset - // then we have some text to the left of it - if (match > raw_text_base_offset) { - // left - const int64_t left_reminder_offset = raw_text_base_offset + 0; - const int64_t left_reminder_length = match - raw_text_base_offset; - buffer.emplace_after(it, (*raw_text), left_reminder_offset, left_reminder_length); - -#ifdef PRETOKENIZERDEBUG - LLAMA_LOG_WARN("FL: (%ld %ld) '%s'\n", left_reminder_offset, left_reminder_length, raw_text->substr(left_reminder_offset, left_reminder_length).c_str()); -#endif - it++; - } - - // special token - buffer.emplace_after(it, special_id); - it++; - - // right - if (match + special_token.length() < raw_text_base_offset + raw_text_base_length) { - const int64_t right_reminder_offset = match + special_token.length(); - const int64_t right_reminder_length = raw_text_base_length - ((match - raw_text_base_offset) + special_token.length()); - buffer.emplace_after(it, (*raw_text), right_reminder_offset, right_reminder_length); - -#ifdef PRETOKENIZERDEBUG - LLAMA_LOG_WARN("FR: (%ld %ld) '%s'\n", right_reminder_offset, right_reminder_length, raw_text->substr(right_reminder_offset, right_reminder_length).c_str()); -#endif - - it++; - - if (source == 0) { - buffer.erase_after(buffer.before_begin()); - } else { - buffer.erase_after(std::next(buffer.begin(), (source-1))); - } - - // repeat for the right side - raw_text_base_offset = right_reminder_offset; - raw_text_base_length = right_reminder_length; - -#ifdef PRETOKENIZERDEBUG - LLAMA_LOG_WARN("RR: (%ld %ld) '%s'\n", raw_text_base_offset, raw_text_base_length, raw_text->substr(raw_text_base_offset, raw_text_base_length).c_str()); -#endif - } else { - if (source == 0) { - buffer.erase_after(buffer.before_begin()); - } else { - buffer.erase_after(std::next(buffer.begin(), (source-1))); - } - break; - } - } - } - it++; - } - } -} - -static std::vector llama_tokenize_internal(const llama_vocab & vocab, std::string raw_text, bool add_special, bool parse_special) { - std::vector output; - std::forward_list fragment_buffer; - - if (!raw_text.empty()) { - fragment_buffer.emplace_front(raw_text, 0, raw_text.length()); - if (parse_special) tokenizer_st_partition(vocab, fragment_buffer); - } - - switch (vocab.type) { - case LLAMA_VOCAB_TYPE_SPM: - { - // OG tokenizer behavior: - // - // tokenizer.encode('', add_special_tokens=True) returns [1] - // tokenizer.encode('', add_special_tokens=False) returns [] - - if (add_special && vocab.special_add_bos != 0) { - GGML_ASSERT(vocab.special_bos_id != -1); - output.push_back(vocab.special_bos_id); - } - - for (const auto & fragment : fragment_buffer) { - if (fragment.type == FRAGMENT_BUFFER_VARIANT_TYPE_RAW_TEXT) { - // without adding this leading whitespace, we do not get the same results as the original tokenizer - - // TODO: It's likely possible to get rid of this string copy entirely - // by modifying llm_tokenizer_x to operate with string offsets like pre-tokenizer - // and passing 'add space prefix' as bool argument - // - auto raw_text = fragment.raw_text.substr(fragment.offset, fragment.length); - if (&fragment == &fragment_buffer.front()) { - if (vocab.add_space_prefix) { - raw_text = " " + raw_text; // prefix with space if the first token is not special - } - } - -#ifdef PRETOKENIZERDEBUG - LLAMA_LOG_WARN("TT: (%ld %ld %ld) '%s'\n", raw_text.length(), fragment.offset, fragment.length, raw_text.c_str()); -#endif - llm_tokenizer_spm tokenizer(vocab); - llama_escape_whitespace(raw_text); - tokenizer.tokenize(raw_text, output); - } else { // if (fragment.type == FRAGMENT_BUFFER_VARIANT_TYPE_TOKEN) - output.push_back(fragment.token); - } - } - - if (add_special && vocab.special_add_eos == 1) { - GGML_ASSERT(vocab.special_eos_id != -1); - output.push_back(vocab.special_eos_id); - } - } break; - case LLAMA_VOCAB_TYPE_BPE: - { - if (add_special && vocab.special_add_bos == 1) { - GGML_ASSERT(vocab.special_bos_id != -1); - output.push_back(vocab.special_bos_id); - } - - for (const auto & fragment : fragment_buffer) { - if (fragment.type == FRAGMENT_BUFFER_VARIANT_TYPE_RAW_TEXT) { - auto raw_text = fragment.raw_text.substr(fragment.offset, fragment.length); - -#ifdef PRETOKENIZERDEBUG - LLAMA_LOG_WARN("TT: (%ld %ld %ld) '%s'\n", raw_text.length(), fragment.offset, fragment.length, raw_text.c_str()); -#endif - llm_tokenizer_bpe tokenizer(vocab); - tokenizer.tokenize(raw_text, output); - } else { // if (fragment.type == FRAGMENT_BUFFER_VARIANT_TYPE_TOKEN) - output.push_back(fragment.token); - } - } - - GGML_ASSERT(vocab.special_add_eos != 1); - } break; - case LLAMA_VOCAB_TYPE_WPM: - { - if (add_special) { - GGML_ASSERT(vocab.special_cls_id != -1); - output.push_back(vocab.special_cls_id); - } - - for (const auto & fragment : fragment_buffer) { - if (fragment.type == FRAGMENT_BUFFER_VARIANT_TYPE_RAW_TEXT) { - auto raw_text = fragment.raw_text.substr(fragment.offset, fragment.length); - -#ifdef PRETOKENIZERDEBUG - LLAMA_LOG_WARN("TT: (%ld %ld %ld) '%s'\n", raw_text.length(), fragment.offset, fragment.length, raw_text.c_str()); -#endif - llm_tokenizer_wpm tokenizer(vocab); - tokenizer.tokenize(raw_text, output); - } else { // if (fragment.type == FRAGMENT_BUFFER_VARIANT_TYPE_TOKEN) - output.push_back(fragment.token); - } - } - - if (add_special) { - GGML_ASSERT(vocab.special_sep_id != -1); - output.push_back(vocab.special_sep_id); - } - } break; - case LLAMA_VOCAB_TYPE_NONE: - GGML_ASSERT(false); - } - - return output; -} - -// -// grammar - internal -// - - -// Decodes a UTF-8 string which may end in an incomplete sequence. Adds a terminating 0 for use as -// pointer. If an invalid sequence is encountered, returns `llama_partial_utf8.n_remain == -1`. -std::pair, llama_partial_utf8> decode_utf8( - const std::string & src, - llama_partial_utf8 partial_start) { - static const int lookup[] = { 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 2, 2, 3, 4 }; - const char * pos = src.c_str(); - std::vector code_points; - // common english strings have the same number of codepoints and bytes. `+ 1` for the terminating 0. - code_points.reserve(src.size() + 1); - uint32_t value = partial_start.value; - int n_remain = partial_start.n_remain; - - // continue previous decode, if applicable - while (*pos != 0 && n_remain > 0) { - uint8_t next_byte = static_cast(*pos); - if ((next_byte >> 6) != 2) { - // invalid sequence, abort - code_points.push_back(0); - return std::make_pair(std::move(code_points), llama_partial_utf8{ 0, -1 }); - } - value = (value << 6) + (next_byte & 0x3F); - ++pos; - --n_remain; - } - - if (partial_start.n_remain > 0 && n_remain == 0) { - code_points.push_back(value); - } - - // decode any subsequent utf-8 sequences, which may end in an incomplete one - while (*pos != 0) { - uint8_t first_byte = static_cast(*pos); - uint8_t highbits = first_byte >> 4; - n_remain = lookup[highbits] - 1; - - if (n_remain < 0) { - // invalid sequence, abort - code_points.clear(); - code_points.push_back(0); - return std::make_pair(std::move(code_points), llama_partial_utf8{ 0, n_remain }); - } - - uint8_t mask = (1 << (7 - n_remain)) - 1; - value = first_byte & mask; - ++pos; - while (*pos != 0 && n_remain > 0) { - value = (value << 6) + (static_cast(*pos) & 0x3F); - ++pos; - --n_remain; - } - if (n_remain == 0) { - code_points.push_back(value); - } - } - code_points.push_back(0); - - return std::make_pair(std::move(code_points), llama_partial_utf8{ value, n_remain }); -} - -// returns true iff pos points to the end of one of the definitions of a rule -static bool llama_grammar_is_end_of_sequence(const llama_grammar_element * pos) { - switch (pos->type) { - case LLAMA_GRETYPE_END: return true; // NOLINT - case LLAMA_GRETYPE_ALT: return true; // NOLINT - default: return false; - } -} - -// returns true iff chr satisfies the char range at pos (regular or inverse range) -// asserts that pos is pointing to a char range element -static std::pair llama_grammar_match_char( - const llama_grammar_element * pos, - const uint32_t chr) { - - bool found = false; - bool is_positive_char = pos->type == LLAMA_GRETYPE_CHAR; - - GGML_ASSERT(is_positive_char || pos->type == LLAMA_GRETYPE_CHAR_NOT); // NOLINT - - do { - if (pos[1].type == LLAMA_GRETYPE_CHAR_RNG_UPPER) { - // inclusive range, e.g. [a-z] - found = found || (pos->value <= chr && chr <= pos[1].value); - pos += 2; - } else { - // exact char match, e.g. [a] or "a" - found = found || pos->value == chr; - pos += 1; - } - } while (pos->type == LLAMA_GRETYPE_CHAR_ALT); - - return std::make_pair(found == is_positive_char, pos); -} - -// returns true iff some continuation of the given partial UTF-8 sequence could satisfy the char -// range at pos (regular or inverse range) -// asserts that pos is pointing to a char range element -static bool llama_grammar_match_partial_char( - const llama_grammar_element * pos, - const llama_partial_utf8 partial_utf8) { - - bool is_positive_char = pos->type == LLAMA_GRETYPE_CHAR; - GGML_ASSERT(is_positive_char || pos->type == LLAMA_GRETYPE_CHAR_NOT); - - uint32_t partial_value = partial_utf8.value; - int n_remain = partial_utf8.n_remain; - - // invalid sequence or 7-bit char split across 2 bytes (overlong) - if (n_remain < 0 || (n_remain == 1 && partial_value < 2)) { - return false; - } - - // range of possible code points this partial UTF-8 sequence could complete to - uint32_t low = partial_value << (n_remain * 6); - uint32_t high = low | ((1 << (n_remain * 6)) - 1); - - if (low == 0) { - if (n_remain == 2) { - low = 1 << 11; - } else if (n_remain == 3) { - low = 1 << 16; - } - } - - do { - if (pos[1].type == LLAMA_GRETYPE_CHAR_RNG_UPPER) { - // inclusive range, e.g. [a-z] - if (pos->value <= high && low <= pos[1].value) { - return is_positive_char; - } - pos += 2; - } else { - // exact char match, e.g. [a] or "a" - if (low <= pos->value && pos->value <= high) { - return is_positive_char; - } - pos += 1; - } - } while (pos->type == LLAMA_GRETYPE_CHAR_ALT); - - return !is_positive_char; -} - - -// transforms a grammar pushdown stack into N possible stacks, all ending -// at a character range (terminal element) -static void llama_grammar_advance_stack( - const std::vector> & rules, - const std::vector & stack, - std::vector> & new_stacks) { - - if (stack.empty()) { - if (std::find(new_stacks.begin(), new_stacks.end(), stack) == new_stacks.end()) { - new_stacks.emplace_back(stack); - } - return; - } - - const llama_grammar_element * pos = stack.back(); - - switch (pos->type) { - case LLAMA_GRETYPE_RULE_REF: { - const size_t rule_id = static_cast(pos->value); - const llama_grammar_element * subpos = rules[rule_id].data(); - do { - // init new stack without the top (pos) - std::vector new_stack(stack.begin(), stack.end() - 1); - if (!llama_grammar_is_end_of_sequence(pos + 1)) { - // if this rule ref is followed by another element, add that to stack - new_stack.push_back(pos + 1); - } - if (!llama_grammar_is_end_of_sequence(subpos)) { - // if alternate is nonempty, add to stack - new_stack.push_back(subpos); - } - llama_grammar_advance_stack(rules, new_stack, new_stacks); - while (!llama_grammar_is_end_of_sequence(subpos)) { - // scan to end of alternate def - subpos++; - } - if (subpos->type == LLAMA_GRETYPE_ALT) { - // there's another alternate def of this rule to process - subpos++; - } else { - break; - } - } while (true); - break; - } - case LLAMA_GRETYPE_CHAR: - case LLAMA_GRETYPE_CHAR_NOT: - if (std::find(new_stacks.begin(), new_stacks.end(), stack) == new_stacks.end()) { - // only add the stack if it's not a duplicate of one we already have - new_stacks.emplace_back(stack); - } - break; - default: - // end of alternate (LLAMA_GRETYPE_END, LLAMA_GRETYPE_ALT) or middle of char range - // (LLAMA_GRETYPE_CHAR_ALT, LLAMA_GRETYPE_CHAR_RNG_UPPER); stack should never be left on - // those - GGML_ASSERT(false); - } -} - -// takes a set of possible pushdown stacks on a grammar, which are required to -// be positioned at a character range (see `llama_grammar_advance_stack`), and -// produces the N possible stacks if the given char is accepted at those -// positions -void llama_grammar_accept( - const std::vector> & rules, - const std::vector> & stacks, - const uint32_t chr, - std::vector> & new_stacks) { - - new_stacks.clear(); - - for (const auto & stack : stacks) { - if (stack.empty()) { - continue; - } - - auto match = llama_grammar_match_char(stack.back(), chr); - if (match.first) { - const llama_grammar_element * pos = match.second; - - // update top of stack to next element, if any - std::vector new_stack(stack.begin(), stack.end() - 1); - if (!llama_grammar_is_end_of_sequence(pos)) { - new_stack.push_back(pos); - } - llama_grammar_advance_stack(rules, new_stack, new_stacks); - } - } -} - -static std::vector llama_grammar_reject_candidates( - const std::vector> & rules, - const std::vector> & stacks, - const std::vector & candidates); - -static std::vector llama_grammar_reject_candidates_for_stack( - const std::vector> & rules, - const std::vector & stack, - const std::vector & candidates) { - - std::vector rejects; - rejects.reserve(candidates.size()); - - if (stack.empty()) { - for (const auto & tok : candidates) { - if (*tok.code_points != 0 || tok.partial_utf8.n_remain != 0) { - rejects.push_back(tok); - } - } - return rejects; - } - - const llama_grammar_element * stack_pos = stack.back(); - - std::vector next_candidates; - next_candidates.reserve(candidates.size()); - - for (const auto & tok : candidates) { - if (*tok.code_points == 0) { - // reached end of full codepoints in token, reject iff it ended in a partial sequence - // that cannot satisfy this position in grammar - if (tok.partial_utf8.n_remain != 0 && - !llama_grammar_match_partial_char(stack_pos, tok.partial_utf8)) { - rejects.push_back(tok); - } - } else if (llama_grammar_match_char(stack_pos, *tok.code_points).first) { - next_candidates.push_back({ tok.index, tok.code_points + 1, tok.partial_utf8 }); - } else { - rejects.push_back(tok); - } - } - - const auto * stack_pos_after = llama_grammar_match_char(stack_pos, 0).second; - - // update top of stack to next element, if any - std::vector stack_after(stack.begin(), stack.end() - 1); - if (!llama_grammar_is_end_of_sequence(stack_pos_after)) { - stack_after.push_back(stack_pos_after); - } - std::vector> next_stacks; - llama_grammar_advance_stack(rules, stack_after, next_stacks); - - auto next_rejects = llama_grammar_reject_candidates(rules, next_stacks, next_candidates); - for (const auto & tok : next_rejects) { - rejects.push_back({ tok.index, tok.code_points - 1, tok.partial_utf8 }); - } - - return rejects; -} - -static std::vector llama_grammar_reject_candidates( - const std::vector> & rules, - const std::vector> & stacks, - const std::vector & candidates) { - GGML_ASSERT(!stacks.empty()); // REVIEW - - if (candidates.empty()) { - return std::vector(); - } - - auto rejects = llama_grammar_reject_candidates_for_stack(rules, stacks.front(), candidates); - - for (size_t i = 1, size = stacks.size(); i < size; ++i) { - rejects = llama_grammar_reject_candidates_for_stack(rules, stacks[i], rejects); - } - return rejects; -} - -// -// grammar - external -// - -struct llama_grammar * llama_grammar_init( - const llama_grammar_element ** rules, - size_t n_rules, - size_t start_rule_index) { - const llama_grammar_element * pos; - - // copy rule definitions into vectors - std::vector> vec_rules(n_rules); - for (size_t i = 0; i < n_rules; i++) { - for (pos = rules[i]; pos->type != LLAMA_GRETYPE_END; pos++) { - vec_rules[i].push_back(*pos); - } - vec_rules[i].push_back({LLAMA_GRETYPE_END, 0}); - } - - // loop over alternates of start rule to build initial stacks - std::vector> stacks; - pos = vec_rules[start_rule_index].data(); - do { - std::vector stack; - if (!llama_grammar_is_end_of_sequence(pos)) { - // if alternate is nonempty, add to stack - stack.push_back(pos); - } - llama_grammar_advance_stack(vec_rules, stack, stacks); - while (!llama_grammar_is_end_of_sequence(pos)) { - // scan to end of alternate def - pos++; - } - if (pos->type == LLAMA_GRETYPE_ALT) { - // there's another alternate def of this rule to process - pos++; - } else { - break; - } - } while (true); - - return new llama_grammar{ std::move(vec_rules), std::move(stacks), {} }; -} - -void llama_grammar_free(struct llama_grammar * grammar) { - delete grammar; -} - -struct llama_grammar * llama_grammar_copy(const struct llama_grammar * grammar) { - llama_grammar * result = new llama_grammar{ grammar->rules, grammar->stacks, grammar->partial_utf8 }; - - // redirect elements in stacks to point to new rules - for (size_t is = 0; is < result->stacks.size(); is++) { - for (size_t ie = 0; ie < result->stacks[is].size(); ie++) { - for (size_t ir0 = 0; ir0 < grammar->rules.size(); ir0++) { - for (size_t ir1 = 0; ir1 < grammar->rules[ir0].size(); ir1++) { - if (grammar->stacks[is][ie] == &grammar->rules[ir0][ir1]) { - result->stacks[is][ie] = &result->rules[ir0][ir1]; - } - } - } - } - } - - return result; -} - -// -// sampling -// - -void llama_set_rng_seed(struct llama_context * ctx, uint32_t seed) { - if (seed == LLAMA_DEFAULT_SEED) { - seed = time(NULL); - } - ctx->rng.seed(seed); -} - -void llama_sample_softmax(struct llama_context * ctx, llama_token_data_array * candidates) { - GGML_ASSERT(candidates->size > 0); - - const int64_t t_start_sample_us = ggml_time_us(); - - // Sort the logits in descending order - if (!candidates->sorted) { - std::sort(candidates->data, candidates->data + candidates->size, [](const llama_token_data & a, const llama_token_data & b) { - return a.logit > b.logit; - }); - candidates->sorted = true; - } - - float max_l = candidates->data[0].logit; - float cum_sum = 0.0f; - for (size_t i = 0; i < candidates->size; ++i) { - float p = expf(candidates->data[i].logit - max_l); - candidates->data[i].p = p; - cum_sum += p; - } - for (size_t i = 0; i < candidates->size; ++i) { - candidates->data[i].p /= cum_sum; - } - - if (ctx) { - ctx->t_sample_us += ggml_time_us() - t_start_sample_us; - } -} - -void llama_sample_top_k(struct llama_context * ctx, llama_token_data_array * candidates, int32_t k, size_t min_keep) { - // TODO: move bucket sort to separate function so that top_p/tail_free/typical/softmax first is equally fast - // if (k >= (int32_t)candidates->size) { - // return; - // } - - const int64_t t_start_sample_us = ggml_time_us(); - - if (k <= 0) { - k = candidates->size; - } - - k = std::max(k, (int) min_keep); - k = std::min(k, (int) candidates->size); - - // Sort scores in descending order - if (!candidates->sorted) { - auto comp = [](const llama_token_data & a, const llama_token_data & b) { - return a.logit > b.logit; - }; - if (k <= 128) { - std::partial_sort(candidates->data, candidates->data + k, candidates->data + candidates->size, comp); - } else { - constexpr int nbuckets = 128; - constexpr float bucket_low = -10.0f; - constexpr float bucket_high = 10.0f; - constexpr float bucket_scale = nbuckets/(bucket_high - bucket_low); - constexpr float bucker_inter = -bucket_low * bucket_scale; - - std::vector bucket_idx(candidates->size); - std::vector histo(nbuckets, 0); - - for (int i = 0; i < (int)candidates->size; ++i) { - const float val = candidates->data[i].logit; - int ib = int(bucket_scale * val + bucker_inter); //nbuckets * (val - bucket_low) / (bucket_high - bucket_low); - ib = std::max(0, std::min(nbuckets-1, ib)); - bucket_idx[i] = ib; - ++histo[ib]; - } - int nhave = 0; - int ib = nbuckets - 1; - for ( ; ib >= 0; --ib) { - nhave += histo[ib]; - if (nhave >= k) break; - } - std::vector tmp_tokens(nhave); - auto ptr = tmp_tokens.data(); - std::vector bucket_ptrs; - bucket_ptrs.reserve(nbuckets - ib); - for (int j = nbuckets - 1; j >= ib; --j) { - bucket_ptrs.push_back(ptr); - ptr += histo[j]; - } - for (int i = 0; i < (int)candidates->size; ++i) { - int j = bucket_idx[i]; - if (j >= ib) { - *bucket_ptrs[nbuckets-1-j]++ = candidates->data[i]; - } - } - - ptr = tmp_tokens.data(); - int ndone = 0; - for (int j = nbuckets-1; j > ib; --j) { - std::sort(ptr, ptr + histo[j], comp); - ptr += histo[j]; - ndone += histo[j]; - } - std::partial_sort(ptr, ptr + k - ndone, ptr + histo[ib], comp); - - std::memcpy(candidates->data, tmp_tokens.data(), k*sizeof(llama_token_data)); - - } - candidates->sorted = true; - } - candidates->size = k; - - if (ctx) { - ctx->t_sample_us += ggml_time_us() - t_start_sample_us; - } -} - -void llama_sample_top_p(struct llama_context * ctx, llama_token_data_array * candidates, float p, size_t min_keep) { - if (p >= 1.0f) { - return; - } - - llama_sample_softmax(ctx, candidates); - - const int64_t t_start_sample_us = ggml_time_us(); - - // Compute the cumulative probabilities - float cum_sum = 0.0f; - size_t last_idx = candidates->size; - - for (size_t i = 0; i < candidates->size; ++i) { - cum_sum += candidates->data[i].p; - - // Check if the running sum is at least p or if we have kept at least min_keep tokens - // we set the last index to i+1 to indicate that the current iterate should be included in the set - if (cum_sum >= p && i + 1 >= min_keep) { - last_idx = i + 1; - break; - } - } - - // Resize the output vector to keep only the top-p tokens - candidates->size = last_idx; - - if (ctx) { - ctx->t_sample_us += ggml_time_us() - t_start_sample_us; - } -} - -void llama_sample_min_p(struct llama_context * ctx, llama_token_data_array * candidates, float p, size_t min_keep) { - if (p <= 0.0f || !candidates->size) { - return; - } - - const int64_t t_start_sample_us = ggml_time_us(); - - bool min_p_applied = false; - - // if the candidates aren't sorted, try the unsorted implementation first - if (!candidates->sorted) { - std::vector filtered_tokens; - - float max_logit = -FLT_MAX; - for (size_t i = 0; i < candidates->size; ++i) { - max_logit = std::max(max_logit, candidates->data[i].logit); - } - const float min_logit = max_logit + logf(p); // min logit for p_i >= p * p_max - - for (size_t i = 0; i < candidates->size; ++i) { - if (candidates->data[i].logit >= min_logit) { - filtered_tokens.push_back(candidates->data[i]); - } - } - - // if we have enough values the operation was a success - if (filtered_tokens.size() >= min_keep) { - memcpy(candidates->data, filtered_tokens.data(), filtered_tokens.size()*sizeof(llama_token_data)); - candidates->size = filtered_tokens.size(); - min_p_applied = true; - } - } - - // if the candidates are sorted or the unsorted implementation failed, use this implementation - if (!min_p_applied) { - // Sort the logits in descending order - if (!candidates->sorted) { - std::sort(candidates->data, candidates->data + candidates->size, [](const llama_token_data & a, const llama_token_data & b) { - return a.logit > b.logit; - }); - candidates->sorted = true; - } - - const float min_logit = candidates->data[0].logit + logf(p); // min logit for p_i >= p * p_max - size_t i = 1; // first token always matches - - for (; i < candidates->size; ++i) { - if (candidates->data[i].logit < min_logit && i >= min_keep) { - break; // prob too small - } - } - - // Resize the output vector to keep only the matching tokens - candidates->size = i; - } - - if (ctx) { - ctx->t_sample_us += ggml_time_us() - t_start_sample_us; - } -} - -void llama_sample_tail_free(struct llama_context * ctx, llama_token_data_array * candidates, float z, size_t min_keep) { - if (z >= 1.0f || candidates->size <= 2) { - return; - } - - llama_sample_softmax(nullptr, candidates); - const int64_t t_start_sample_us = ggml_time_us(); - - // Compute the first and second derivatives - std::vector first_derivatives(candidates->size - 1); - std::vector second_derivatives(candidates->size - 2); - - for (size_t i = 0; i < first_derivatives.size(); ++i) { - first_derivatives[i] = candidates->data[i].p - candidates->data[i + 1].p; - } - for (size_t i = 0; i < second_derivatives.size(); ++i) { - second_derivatives[i] = first_derivatives[i] - first_derivatives[i + 1]; - } - - // Calculate absolute value of second derivatives - for (size_t i = 0; i < second_derivatives.size(); ++i) { - second_derivatives[i] = std::abs(second_derivatives[i]); - } - - // Normalize the second derivatives - { - const float second_derivatives_sum = std::accumulate(second_derivatives.begin(), second_derivatives.end(), 0.0f); - - if (second_derivatives_sum > 1e-6f) { - for (float & value : second_derivatives) { - value /= second_derivatives_sum; - } - } else { - for (float & value : second_derivatives) { - value = 1.0f / second_derivatives.size(); - } - } - } - - float cum_sum = 0.0f; - size_t last_idx = candidates->size; - for (size_t i = 0; i < second_derivatives.size(); ++i) { - cum_sum += second_derivatives[i]; - - // Check if the running sum is greater than z or if we have kept at least min_keep tokens - if (cum_sum > z && i >= min_keep) { - last_idx = i; - break; - } - } - - // Resize the output vector to keep only the tokens above the tail location - candidates->size = last_idx; - - if (ctx) { - ctx->t_sample_us += ggml_time_us() - t_start_sample_us; - } -} - -void llama_sample_typical(struct llama_context * ctx, llama_token_data_array * candidates, float p, size_t min_keep) { - // Reference implementation: - // https://github.com/huggingface/transformers/compare/main...cimeister:typical-sampling:typical-pr - if (p >= 1.0f) { - return; - } - - // Compute the softmax of logits and calculate entropy - llama_sample_softmax(nullptr, candidates); - - const int64_t t_start_sample_us = ggml_time_us(); - - float entropy = 0.0f; - for (size_t i = 0; i < candidates->size; ++i) { - entropy += -candidates->data[i].p * logf(candidates->data[i].p); - } - - // Compute the absolute difference between negative log probability and entropy for each candidate - std::vector shifted_scores; - for (size_t i = 0; i < candidates->size; ++i) { - float shifted_score = fabsf(-logf(candidates->data[i].p) - entropy); - shifted_scores.push_back(shifted_score); - } - - // Sort tokens based on the shifted_scores and their corresponding indices - std::vector indices(candidates->size); - std::iota(indices.begin(), indices.end(), 0); - - std::sort(indices.begin(), indices.end(), [&](size_t a, size_t b) { - return shifted_scores[a] < shifted_scores[b]; - }); - - // Compute the cumulative probabilities - float cum_sum = 0.0f; - size_t last_idx = indices.size(); - - for (size_t i = 0; i < indices.size(); ++i) { - size_t idx = indices[i]; - cum_sum += candidates->data[idx].p; - - // Check if the running sum is greater than typical or if we have kept at least min_keep tokens - if (cum_sum > p && i >= min_keep - 1) { - last_idx = i + 1; - break; - } - } - - // Resize the output vector to keep only the locally typical tokens - std::vector new_candidates; - for (size_t i = 0; i < last_idx; ++i) { - size_t idx = indices[i]; - new_candidates.push_back(candidates->data[idx]); - } - - // Replace the data in candidates with the new_candidates data - std::copy(new_candidates.begin(), new_candidates.end(), candidates->data); - candidates->size = new_candidates.size(); - candidates->sorted = false; - - if (ctx) { - ctx->t_sample_us += ggml_time_us() - t_start_sample_us; - } -} - -void llama_sample_entropy(struct llama_context * ctx, llama_token_data_array * candidates_p, float min_temp, float max_temp, float exponent_val) { - const int64_t t_start_sample_us = ggml_time_us(); - - // no need to do anything if there is only one (or zero) candidates - if(candidates_p->size <= 1) { - return; - } - - // Calculate maximum possible entropy - float max_entropy = -logf(1.0f / candidates_p->size); - - llama_sample_softmax(nullptr, candidates_p); - - // Calculate entropy of the softmax probabilities - float entropy = 0.0f; - for (size_t i = 0; i < candidates_p->size; ++i) { - float prob = candidates_p->data[i].p; - if (prob > 0.0f) { // Ensure no log(0) - entropy -= prob * logf(prob); - } - } - - // Normalize the entropy (max_entropy cannot be 0 here because we checked candidates_p->size != 1 above) - float normalized_entropy = entropy / max_entropy; - - // Map the normalized entropy to the desired temperature range using the power function - float dyn_temp = min_temp + (max_temp - min_temp) * powf(normalized_entropy, exponent_val); - -#ifdef DEBUG - LLAMA_LOG_INFO("Your text maxtemp value is: %f\n", max_temp); - LLAMA_LOG_INFO("Entropy: %f\n", entropy); - LLAMA_LOG_INFO("Max Possible Entropy: %f\n", max_entropy); - LLAMA_LOG_INFO("Normalized Entropy: %f\n", normalized_entropy); - LLAMA_LOG_INFO("Exponent: %f\n", exponent_val); - LLAMA_LOG_INFO("Dynamic Temperature (dyn_temp): %f\n", dyn_temp); -#endif - - // Apply the dynamically calculated temperature scaling - for (size_t i = 0; i < candidates_p->size; ++i) { - candidates_p->data[i].logit /= dyn_temp; - } - - // Re-compute softmax probabilities after scaling logits with dynamic temperature - double max_l_double = candidates_p->data[0].logit; - double cum_sum_double = 0.0; - for (size_t i = 0; i < candidates_p->size; ++i) { - double p = exp(candidates_p->data[i].logit - max_l_double); - candidates_p->data[i].p = p; // Store the scaled probability - cum_sum_double += p; - } - for (size_t i = 0; i < candidates_p->size; ++i) { - candidates_p->data[i].p /= cum_sum_double; // Re-normalize the probabilities - } - -#ifdef DEBUG - // Print the updated top 25 probabilities after temperature scaling - LLAMA_LOG_INFO("\nUpdated Top 25 Probabilities After Dynamic Temperature Scaling (in percentages):\n"); - for (size_t i = 0; i < 25 && i < candidates_p->size; ++i) { - LLAMA_LOG_INFO("Token %zu: %f%%\n", i + 1, candidates_p->data[i].p * 100.0f); - } -#endif - - if (ctx) { - ctx->t_sample_us += ggml_time_us() - t_start_sample_us; - } -} - -void llama_sample_temp(struct llama_context * ctx, llama_token_data_array * candidates_p, float temp) { - const int64_t t_start_sample_us = ggml_time_us(); - - for (size_t i = 0; i < candidates_p->size; ++i) { - candidates_p->data[i].logit /= temp; - } - - if (ctx) { - ctx->t_sample_us += ggml_time_us() - t_start_sample_us; - } -} - -void llama_sample_repetition_penalties( - struct llama_context * ctx, - llama_token_data_array * candidates, - const llama_token * last_tokens, - size_t penalty_last_n, - float penalty_repeat, - float penalty_freq, - float penalty_present) { - if (penalty_last_n == 0 || (penalty_repeat == 1.0f && penalty_freq == 0.0f && penalty_present == 0.0f)) { - return; - } - - const int64_t t_start_sample_us = ggml_time_us(); - - // Create a frequency map to count occurrences of each token in last_tokens - std::unordered_map token_count; - for (size_t i = 0; i < penalty_last_n; ++i) { - token_count[last_tokens[i]]++; - } - - // Apply frequency and presence penalties to the candidates - for (size_t i = 0; i < candidates->size; ++i) { - const auto token_iter = token_count.find(candidates->data[i].id); - if (token_iter == token_count.end()) { - continue; - } - - const int count = token_iter->second; - - // The academic publication that described this technique actually just only divided, but that would cause tokens with negative logits to become more likely, which is obviously wrong. - // This is common fix for this problem, which is to multiply by the penalty instead of dividing. - if (candidates->data[i].logit <= 0) { - candidates->data[i].logit *= penalty_repeat; - } else { - candidates->data[i].logit /= penalty_repeat; - } - - candidates->data[i].logit -= float(count) * penalty_freq + float(count > 0) * penalty_present; - } - - candidates->sorted = false; - - if (ctx) { - ctx->t_sample_us += ggml_time_us() - t_start_sample_us; - } -} - -void llama_sample_grammar(struct llama_context * ctx, llama_token_data_array * candidates, const struct llama_grammar * grammar) { - GGML_ASSERT(ctx); - const int64_t t_start_sample_us = ggml_time_us(); - - bool allow_eog = false; - for (const auto & stack : grammar->stacks) { - if (stack.empty()) { - allow_eog = true; - break; - } - } - - std::vector, llama_partial_utf8>> candidates_decoded; - candidates_decoded.reserve(candidates->size); - std::vector candidates_grammar; - candidates_grammar.reserve(candidates->size); - - for (size_t i = 0; i < candidates->size; ++i) { - const llama_token id = candidates->data[i].id; - const std::string piece = llama_token_to_piece(ctx, id, false); - - if (llama_token_is_eog(&ctx->model, id)) { - if (!allow_eog) { - candidates->data[i].logit = -INFINITY; - } - } else if (piece.empty() || piece[0] == 0) { - candidates->data[i].logit = -INFINITY; - } else { - candidates_decoded.push_back(decode_utf8(piece, grammar->partial_utf8)); - candidates_grammar.push_back({ i, candidates_decoded.back().first.data(), candidates_decoded.back().second }); - } - } - - const auto rejects = llama_grammar_reject_candidates(grammar->rules, grammar->stacks, candidates_grammar); - for (const auto & reject : rejects) { - candidates->data[reject.index].logit = -INFINITY; - } - - ctx->t_sample_us += ggml_time_us() - t_start_sample_us; -} - -static void llama_log_softmax(float * array, size_t size) { - float max_l = *std::max_element(array, array + size); - float sum = 0.f; - for (size_t i = 0; i < size; ++i) { - float p = expf(array[i] - max_l); - sum += p; - array[i] = p; - } - - for (size_t i = 0; i < size; ++i) { - array[i] = logf(array[i] / sum); - } -} - -void llama_sample_apply_guidance( - struct llama_context * ctx, - float * logits, - float * logits_guidance, - float scale) { - GGML_ASSERT(ctx); - - const auto t_start_sample_us = ggml_time_us(); - const auto n_vocab = llama_n_vocab(llama_get_model(ctx)); - - llama_log_softmax(logits, n_vocab); - llama_log_softmax(logits_guidance, n_vocab); - - for (int i = 0; i < n_vocab; ++i) { - auto & l = logits[i]; - const auto & g = logits_guidance[i]; - - l = scale * (l - g) + g; - } - - ctx->t_sample_us += ggml_time_us() - t_start_sample_us; -} - -llama_token llama_sample_token_mirostat(struct llama_context * ctx, llama_token_data_array * candidates, float tau, float eta, int32_t m, float * mu) { - GGML_ASSERT(ctx); - - auto N = float(llama_n_vocab(llama_get_model(ctx))); - int64_t t_start_sample_us; - t_start_sample_us = ggml_time_us(); - - llama_sample_softmax(nullptr, candidates); - - // Estimate s_hat using the most probable m tokens - float s_hat = 0.0; - float sum_ti_bi = 0.0; - float sum_ti_sq = 0.0; - for (size_t i = 0; i < size_t(m - 1) && i < candidates->size - 1; ++i) { - float t_i = logf(float(i + 2) / float(i + 1)); - float b_i = logf(candidates->data[i].p / candidates->data[i + 1].p); - sum_ti_bi += t_i * b_i; - sum_ti_sq += t_i * t_i; - } - s_hat = sum_ti_bi / sum_ti_sq; - - // Compute k from the estimated s_hat and target surprise value - float epsilon_hat = s_hat - 1; - float k = powf((epsilon_hat * powf(2, *mu)) / (1 - powf(N, -epsilon_hat)), 1 / s_hat); - - // Sample the next word X using top-k sampling - llama_sample_top_k(nullptr, candidates, int(k), 1); - if (ctx) { - ctx->t_sample_us += ggml_time_us() - t_start_sample_us; - } - llama_token X = llama_sample_token(ctx, candidates); - t_start_sample_us = ggml_time_us(); - - // Compute error as the difference between observed surprise and target surprise value - size_t X_idx = std::distance(candidates->data, std::find_if(candidates->data, candidates->data + candidates->size, [&](const llama_token_data & candidate) { - return candidate.id == X; - })); - float observed_surprise = -log2f(candidates->data[X_idx].p); - float e = observed_surprise - tau; - - // Update mu using the learning rate and error - *mu = *mu - eta * e; - - if (ctx) { - ctx->t_sample_us += ggml_time_us() - t_start_sample_us; - } - return X; -} - -llama_token llama_sample_token_mirostat_v2(struct llama_context * ctx, llama_token_data_array * candidates, float tau, float eta, float * mu) { - int64_t t_start_sample_us; - t_start_sample_us = ggml_time_us(); - - llama_sample_softmax(ctx, candidates); - - // Truncate the words with surprise values greater than mu - candidates->size = std::distance(candidates->data, std::find_if(candidates->data, candidates->data + candidates->size, [&](const llama_token_data & candidate) { - return -log2f(candidate.p) > *mu; - })); - - if (candidates->size == 0) { - candidates->size = 1; - } - - if (ctx) { - ctx->t_sample_us += ggml_time_us() - t_start_sample_us; - } - - // Normalize the probabilities of the remaining words - llama_sample_softmax(ctx, candidates); - - // Sample the next word X from the remaining words - llama_token X = llama_sample_token(ctx, candidates); - t_start_sample_us = ggml_time_us(); - - // Compute error as the difference between observed surprise and target surprise value - size_t X_idx = std::distance(candidates->data, std::find_if(candidates->data, candidates->data + candidates->size, [&](const llama_token_data & candidate) { - return candidate.id == X; - })); - float observed_surprise = -log2f(candidates->data[X_idx].p); - float e = observed_surprise - tau; - - // Update mu using the learning rate and error - *mu = *mu - eta * e; - - if (ctx) { - ctx->t_sample_us += ggml_time_us() - t_start_sample_us; - } - return X; -} - -llama_token llama_sample_token_greedy(struct llama_context * ctx, llama_token_data_array * candidates) { - const int64_t t_start_sample_us = ggml_time_us(); - - // Find max element - auto * max_iter = std::max_element(candidates->data, candidates->data + candidates->size, [](const llama_token_data & a, const llama_token_data & b) { - return a.logit < b.logit; - }); - - llama_token result = max_iter->id; - if (ctx) { - ctx->t_sample_us += ggml_time_us() - t_start_sample_us; - ctx->n_sample++; - } - return result; -} - -llama_token llama_sample_token_with_rng(struct llama_context * ctx, llama_token_data_array * candidates, std::mt19937 & rng) { - GGML_ASSERT(ctx); - - const int64_t t_start_sample_us = ggml_time_us(); - llama_sample_softmax(nullptr, candidates); - - std::vector probs; - probs.reserve(candidates->size); - for (size_t i = 0; i < candidates->size; ++i) { - probs.push_back(candidates->data[i].p); - } - - std::discrete_distribution<> dist(probs.begin(), probs.end()); - int idx = dist(rng); - - llama_token result = candidates->data[idx].id; - - ctx->t_sample_us += ggml_time_us() - t_start_sample_us; - ctx->n_sample++; - return result; -} - -llama_token llama_sample_token(struct llama_context * ctx, llama_token_data_array * candidates) { - return llama_sample_token_with_rng(ctx, candidates, ctx->rng); -} - -void llama_grammar_accept_token(struct llama_context * ctx, struct llama_grammar * grammar, llama_token token) { - const int64_t t_start_sample_us = ggml_time_us(); - - if (llama_token_is_eog(&ctx->model, token)) { - for (const auto & stack : grammar->stacks) { - if (stack.empty()) { - return; - } - } - GGML_ASSERT(false); - } - - const std::string piece = llama_token_to_piece(ctx, token, false); - - // Note terminating 0 in decoded string - const auto decoded = decode_utf8(piece, grammar->partial_utf8); - const auto & code_points = decoded.first; - std::vector> tmp_new_stacks; - for (auto it = code_points.begin(), end = code_points.end() - 1; it != end; ++it) { - llama_grammar_accept(grammar->rules, grammar->stacks, *it, tmp_new_stacks); - grammar->stacks = tmp_new_stacks; - } - grammar->partial_utf8 = decoded.second; - GGML_ASSERT(!grammar->stacks.empty()); - - ctx->t_sample_us += ggml_time_us() - t_start_sample_us; -} - -// -// Beam search -// - -struct llama_beam { - std::vector tokens; - float p; // Cumulative beam probability (renormalized relative to all beams) - bool eob; // Initialize end-of-beam to false. Callback sets this to true. - // Sort beams by probability. In case of ties, prefer beams at eob. - bool operator<(const llama_beam & rhs) const { - return std::make_pair(p, eob) < std::make_pair(rhs.p, rhs.eob); - } - // Shift off first n tokens and discard them. - void shift_tokens(const size_t n) { - if (n) { - std::copy(tokens.begin() + n, tokens.end(), tokens.begin()); - tokens.resize(tokens.size() - n); - } - } - llama_beam_view view() const { return {tokens.data(), tokens.size(), p, eob}; } -}; - -// A struct for calculating logit-related info. -struct llama_logit_info { - const float * const logits; - const int n_vocab; - const float max_l; - const float normalizer; - struct sum_exp { - float max_l; - float operator()(float sum, float l) const { return sum + std::exp(l - max_l); } - }; - llama_logit_info(llama_context * ctx) - : logits(llama_get_logits(ctx)) - , n_vocab(llama_n_vocab(llama_get_model(ctx))) - , max_l(*std::max_element(logits, logits + n_vocab)) - , normalizer(1.0f / std::accumulate(logits, logits + n_vocab, 0.0f, sum_exp{max_l})) - { } - llama_token_data get_token_data(const llama_token token_id) const { - constexpr auto p = std::numeric_limits::quiet_NaN(); // never used - return {token_id, logits[token_id], p}; - } - // Return top k token_data by logit. - std::vector top_k(size_t k) { - std::vector min_heap; // min-heap by logit - const llama_token k_min = std::min(static_cast(k), n_vocab); - min_heap.reserve(k_min); - for (llama_token token_id = 0 ; token_id < k_min ; ++token_id) { - min_heap.push_back(get_token_data(token_id)); - } - auto comp = [](const llama_token_data & a, const llama_token_data & b) { return a.logit > b.logit; }; - std::make_heap(min_heap.begin(), min_heap.end(), comp); - for (llama_token token_id = k_min ; token_id < n_vocab ; ++token_id) { - if (min_heap.front().logit < logits[token_id]) { - std::pop_heap(min_heap.begin(), min_heap.end(), comp); - min_heap.back().id = token_id; - min_heap.back().logit = logits[token_id]; - std::push_heap(min_heap.begin(), min_heap.end(), comp); - } - } - return min_heap; - } - float probability_from_logit(float logit) const { - return normalizer * std::exp(logit - max_l); - } -}; - -struct llama_beam_search_data { - llama_context * ctx; - size_t n_beams; - int n_past; - int n_predict; - std::vector beams; - std::vector next_beams; - - // Re-calculated on each loop iteration - size_t common_prefix_length; - - // Used to communicate to/from callback on beams state. - std::vector beam_views; - - llama_beam_search_data(llama_context * ctx, size_t n_beams, int n_past, int n_predict) - : ctx(ctx) - , n_beams(n_beams) - , n_past(n_past) - , n_predict(n_predict) - , beam_views(n_beams) { - beams.reserve(n_beams); - next_beams.reserve(n_beams); - } - - // Collapse beams to a single beam given by index. - void collapse_beams(const size_t beam_idx) { - if (0u < beam_idx) { - std::swap(beams[0], beams[beam_idx]); - } - beams.resize(1); - } - - // Min-heaps are used to efficiently collect the top-k elements (k=n_beams). - // The repetitive patterns below reflect the 2 stages of heaps: - // * Gather elements until the vector is full, then call std::make_heap() on it. - // * If the heap is full and a new element is found that should be included, pop the - // least element to the back(), replace it with the new, then push it into the heap. - void fill_next_beams_by_top_probabilities(llama_beam & beam) { - // Min-heaps use a greater-than comparator. - const auto comp = [](const llama_beam & a, const llama_beam & b) { return a.p > b.p; }; - if (beam.eob) { - // beam is at end-of-sentence, so just copy it to next_beams if its probability is high enough. - if (next_beams.size() < n_beams) { - next_beams.push_back(std::move(beam)); - if (next_beams.size() == n_beams) { - std::make_heap(next_beams.begin(), next_beams.end(), comp); - } - } else if (next_beams.front().p < beam.p) { - std::pop_heap(next_beams.begin(), next_beams.end(), comp); - next_beams.back() = std::move(beam); - std::push_heap(next_beams.begin(), next_beams.end(), comp); - } - } else { - // beam is not at end-of-sentence, so branch with next top_k tokens. - if (!beam.tokens.empty()) { - llama_decode(ctx, llama_batch_get_one(beam.tokens.data(), beam.tokens.size(), n_past, 0)); - } - llama_logit_info logit_info(ctx); - std::vector next_tokens = logit_info.top_k(n_beams); - - // Clear the kv slot so that other beams may try different tokens at this position. The llama_decode() - // call in loop() will conclusively fill in the kv slot once the beams converge at this position. - llama_kv_cache_seq_rm(ctx, 0, n_past, -1); - - size_t i=0; - if (next_beams.size() < n_beams) { - for (; next_beams.size() < n_beams ; ++i) { - llama_beam next_beam = beam; - next_beam.tokens.push_back(next_tokens[i].id); - next_beam.p *= logit_info.probability_from_logit(next_tokens[i].logit); - next_beams.push_back(std::move(next_beam)); - } - std::make_heap(next_beams.begin(), next_beams.end(), comp); - } else { - for (; next_beams.front().p == 0.0f ; ++i) { - std::pop_heap(next_beams.begin(), next_beams.end(), comp); - next_beams.back() = beam; - next_beams.back().tokens.push_back(next_tokens[i].id); - next_beams.back().p *= logit_info.probability_from_logit(next_tokens[i].logit); - std::push_heap(next_beams.begin(), next_beams.end(), comp); - } - } - for (; i < n_beams ; ++i) { - const float next_p = beam.p * logit_info.probability_from_logit(next_tokens[i].logit); - if (next_beams.front().p < next_p) { - std::pop_heap(next_beams.begin(), next_beams.end(), comp); - next_beams.back() = beam; - next_beams.back().tokens.push_back(next_tokens[i].id); - next_beams.back().p = next_p; - std::push_heap(next_beams.begin(), next_beams.end(), comp); - } - } - } - } - - // Find common_prefix_length based on beams. - // Requires beams is not empty. - size_t find_common_prefix_length() { - size_t common_prefix_length = beams[0].tokens.size(); - for (size_t i = 1 ; i < beams.size() ; ++i) { - common_prefix_length = std::min(common_prefix_length, beams[i].tokens.size()); - for (size_t j = 0 ; j < common_prefix_length ; ++j) { - if (beams[0].tokens[j] != beams[i].tokens[j]) { - common_prefix_length = j; - break; - } - } - } - return common_prefix_length; - } - - // Construct beams_state to send back to caller via the callback function. - // Side effect: set common_prefix_length = find_common_prefix_length(); - llama_beams_state get_beams_state(const bool last_call) { - for (size_t i = 0 ; i < beams.size() ; ++i) { - beam_views[i] = beams[i].view(); - } - common_prefix_length = find_common_prefix_length(); - return {beam_views.data(), beams.size(), common_prefix_length, last_call}; - } - - // Loop: - // * while i < n_predict, AND - // * any of the beams have not yet reached end-of-beam (eob), AND - // * the highest probability beam(s) (plural in case of ties) are not at end-of-sentence - // (since all other beam probabilities can only decrease) - void loop(const llama_beam_search_callback_fn_t callback, void * const callback_data) { - beams.push_back({{}, 1.0f, false}); // Start with one empty beam w/ probability = 1.0 and !eob. - const auto not_eob = [](const llama_beam & beam) { return !beam.eob; }; - for (int i = 0 ; i < n_predict && std::any_of(beams.begin(),beams.end(),not_eob) && - !beams[top_beam_index()].eob ; ++i) { - callback(callback_data, get_beams_state(false)); // Sets common_prefix_length - update_beams_from_beam_views(); // Update values (p,eob) that callback may have changed. - if (common_prefix_length) { - llama_decode(ctx, llama_batch_get_one(beams[0].tokens.data(), common_prefix_length, n_past, 0)); - n_past += common_prefix_length; - } - // Zero-out next_beam probabilities to place them last in following min-heap. - std::for_each(next_beams.begin(), next_beams.end(), [](llama_beam & beam) { beam.p = 0.0f; }); - for (llama_beam & beam : beams) { - beam.shift_tokens(common_prefix_length); - fill_next_beams_by_top_probabilities(beam); - } - // next_beams become the beams of next/final iteration. Swap them to re-use memory. - beams.swap(next_beams); - renormalize_beam_probabilities(beams); - } - collapse_beams(top_beam_index()); - callback(callback_data, get_beams_state(true)); - } - - // As beams grow, the cumulative probabilities decrease. - // Renormalize them to avoid floating point underflow. - static void renormalize_beam_probabilities(std::vector & beams) { - const auto sum_p = [](float sum, llama_beam & beam) { return sum + beam.p; }; - const float inv_sum = 1.0f / std::accumulate(beams.begin(), beams.end(), 0.0f, sum_p); - std::for_each(beams.begin(), beams.end(), [=](llama_beam & beam) { beam.p *= inv_sum; }); - } - - // Assumes beams is non-empty. Uses llama_beam::operator<() for ordering. - size_t top_beam_index() { - return std::max_element(beams.begin(), beams.end()) - beams.begin(); - } - - // Copy (p,eob) for each beam which may have been changed by the callback. - void update_beams_from_beam_views() { - for (size_t i = 0 ; i < beams.size() ; ++i) { - beams[i].p = beam_views[i].p; - beams[i].eob = beam_views[i].eob; - } - } -}; - -void llama_beam_search(llama_context * ctx, - llama_beam_search_callback_fn_t callback, void * callback_data, - size_t n_beams, int n_past, int n_predict) { - assert(ctx); - const int64_t t_start_sample_us = ggml_time_us(); - - llama_beam_search_data beam_search_data(ctx, n_beams, n_past, n_predict); - - beam_search_data.loop(callback, callback_data); - - ctx->t_sample_us += ggml_time_us() - t_start_sample_us; - ctx->n_sample++; -} - -// -// quantization -// - -struct quantize_state_internal { - const llama_model & model; - const llama_model_quantize_params * params; - - int n_attention_wv = 0; - int n_ffn_down = 0; - int n_ffn_gate = 0; - int n_ffn_up = 0; - int i_attention_wv = 0; - int i_ffn_down = 0; - int i_ffn_gate = 0; - int i_ffn_up = 0; - - int n_k_quantized = 0; - int n_fallback = 0; - - bool has_imatrix = false; - - // used to figure out if a model shares tok_embd with the output weight - bool has_output = false; - - quantize_state_internal(const llama_model & model, const llama_model_quantize_params * params) - : model(model) - , params(params) - {} -}; - -static void llama_tensor_dequantize_internal( - struct ggml_tensor * tensor, std::vector> & output, std::vector & workers, - const size_t nelements, const int nthread -) { - if (output.size() < nelements) { - output.resize(nelements); - } - float * f32_output = (float *) output.data(); - - ggml_type_traits_t qtype; - if (ggml_is_quantized(tensor->type)) { - qtype = ggml_internal_get_type_traits(tensor->type); - if (qtype.to_float == NULL) { - throw std::runtime_error(format("type %s unsupported for integer quantization: no dequantization available", ggml_type_name(tensor->type))); - } - } else if (tensor->type != GGML_TYPE_F16) { - throw std::runtime_error(format("cannot dequantize/convert tensor type %s", ggml_type_name(tensor->type))); - } - - if (nthread < 2) { - if (tensor->type == GGML_TYPE_F16) { - ggml_fp16_to_fp32_row((ggml_fp16_t *)tensor->data, f32_output, nelements); - } else if (ggml_is_quantized(tensor->type)) { - qtype.to_float(tensor->data, f32_output, nelements); - } else { - GGML_ASSERT(false); // unreachable - } - return; - } - - size_t block_size = tensor->type == GGML_TYPE_F16 ? 1 : (size_t)ggml_blck_size(tensor->type); - size_t block_size_bytes = ggml_type_size(tensor->type); - - GGML_ASSERT(nelements % block_size == 0); - size_t nblocks = nelements / block_size; - size_t blocks_per_thread = nblocks / nthread; - size_t spare_blocks = nblocks - (blocks_per_thread * nthread); // if blocks aren't divisible by thread count - - size_t in_buff_offs = 0; - size_t out_buff_offs = 0; - - for (int tnum = 0; tnum < nthread; tnum++) { - size_t thr_blocks = blocks_per_thread + (tnum == nthread - 1 ? spare_blocks : 0); // num blocks for this thread - size_t thr_elems = thr_blocks * block_size; // number of elements for this thread - size_t thr_block_bytes = thr_blocks * block_size_bytes; // number of input bytes for this thread - - auto compute = [qtype] (ggml_type typ, uint8_t * inbuf, float * outbuf, int nels) { - if (typ == GGML_TYPE_F16) { - ggml_fp16_to_fp32_row((ggml_fp16_t *)inbuf, outbuf, nels); - } else { - qtype.to_float(inbuf, outbuf, nels); - } - }; - workers.emplace_back(compute, tensor->type, (uint8_t *) tensor->data + in_buff_offs, f32_output + out_buff_offs, thr_elems); - in_buff_offs += thr_block_bytes; - out_buff_offs += thr_elems; - } - for (auto & w : workers) { w.join(); } - workers.clear(); -} - -static ggml_type llama_tensor_get_type(quantize_state_internal & qs, ggml_type new_type, const ggml_tensor * tensor, llama_ftype ftype) { - const std::string name = ggml_get_name(tensor); - - // TODO: avoid hardcoded tensor names - use the TN_* constants - const llm_arch arch = qs.model.arch; - const auto tn = LLM_TN(arch); - - auto use_more_bits = [](int i_layer, int num_layers) -> bool { - return i_layer < num_layers/8 || i_layer >= 7*num_layers/8 || (i_layer - num_layers/8)%3 == 2; - }; - const int n_expert = std::max(1, (int)qs.model.hparams.n_expert); - auto layer_info = [n_expert] (int i_layer, int n_layer, const char * name) { - if (n_expert > 1) { - // Believe it or not, "experts" in the FFN of Mixtral-8x7B are not consecutive, but iccasionally randomly - // sprinkled in the model. Hence, simply dividing i_ffn_down by n_expert does not work - // for getting the current layer as I initially thought, and we need to resort to parsing the - // tensor name. - if (sscanf(name, "blk.%d.", &i_layer) != 1) { - throw std::runtime_error(format("Failed to determine layer for tensor %s", name)); - } - if (i_layer < 0 || i_layer >= n_layer) { - throw std::runtime_error(format("Bad layer %d for tensor %s. Must be in [0, %d)", i_layer, name, n_layer)); - } - } - return std::make_pair(i_layer, n_layer); - }; - - // for arches that share the same tensor between the token embeddings and the output, we quantize the token embeddings - // with the quantization of the output tensor - if (name == tn(LLM_TENSOR_OUTPUT, "weight") || (!qs.has_output && name == tn(LLM_TENSOR_TOKEN_EMBD, "weight"))) { - if (qs.params->output_tensor_type < GGML_TYPE_COUNT) { - new_type = qs.params->output_tensor_type; - } else { - int nx = tensor->ne[0]; - if (arch == LLM_ARCH_FALCON || nx % QK_K != 0) { - new_type = GGML_TYPE_Q8_0; - } - else if (ftype == LLAMA_FTYPE_MOSTLY_IQ2_XXS || ftype == LLAMA_FTYPE_MOSTLY_IQ2_XS || ftype == LLAMA_FTYPE_MOSTLY_IQ3_XXS || - ftype == LLAMA_FTYPE_MOSTLY_IQ1_S || ftype == LLAMA_FTYPE_MOSTLY_IQ2_S || ftype == LLAMA_FTYPE_MOSTLY_IQ2_M || - ftype == LLAMA_FTYPE_MOSTLY_IQ1_M) { - new_type = GGML_TYPE_Q5_K; - } - else if (new_type != GGML_TYPE_Q8_0) { - new_type = GGML_TYPE_Q6_K; - } - } - } else if (name == "token_embd.weight") { - if (qs.params->token_embedding_type < GGML_TYPE_COUNT) { - new_type = qs.params->token_embedding_type; - } else { - if (ftype == LLAMA_FTYPE_MOSTLY_IQ2_XXS || ftype == LLAMA_FTYPE_MOSTLY_IQ2_XS || - ftype == LLAMA_FTYPE_MOSTLY_IQ1_S || ftype == LLAMA_FTYPE_MOSTLY_IQ1_M) { - new_type = GGML_TYPE_Q2_K; - } - else if (ftype == LLAMA_FTYPE_MOSTLY_IQ2_S || ftype == LLAMA_FTYPE_MOSTLY_IQ2_M) { - new_type = GGML_TYPE_IQ3_S; - } - else if (ftype == LLAMA_FTYPE_MOSTLY_IQ3_XXS) { - new_type = GGML_TYPE_IQ3_S; - } - } - } else if (ftype == LLAMA_FTYPE_MOSTLY_IQ2_XXS || ftype == LLAMA_FTYPE_MOSTLY_IQ2_XS || ftype == LLAMA_FTYPE_MOSTLY_IQ1_S || - ftype == LLAMA_FTYPE_MOSTLY_IQ2_S || ftype == LLAMA_FTYPE_MOSTLY_IQ2_M || ftype == LLAMA_FTYPE_MOSTLY_IQ1_M) { - if (name.find("attn_v.weight") != std::string::npos) { - if (qs.model.hparams.n_gqa() >= 4 || qs.model.hparams.n_expert >= 4) new_type = GGML_TYPE_Q4_K; - else new_type = ftype == LLAMA_FTYPE_MOSTLY_IQ2_S || ftype == LLAMA_FTYPE_MOSTLY_IQ2_M ? GGML_TYPE_IQ3_S : GGML_TYPE_Q2_K; - ++qs.i_attention_wv; - } - else if (qs.model.hparams.n_expert == 8 && name.find("attn_k.weight") != std::string::npos) { - new_type = GGML_TYPE_Q4_K; - } - else if (name.find("ffn_down") != std::string::npos) { - if (qs.i_ffn_down < qs.n_ffn_down/8) { - new_type = ftype == LLAMA_FTYPE_MOSTLY_IQ2_S || ftype == LLAMA_FTYPE_MOSTLY_IQ2_M ? GGML_TYPE_IQ3_S : GGML_TYPE_Q2_K; - } - ++qs.i_ffn_down; - } - else if (name.find("attn_output.weight") != std::string::npos) { - if (qs.model.hparams.n_expert == 8) { - new_type = GGML_TYPE_Q5_K; - } else { - if (ftype == LLAMA_FTYPE_MOSTLY_IQ1_S || ftype == LLAMA_FTYPE_MOSTLY_IQ1_M) new_type = GGML_TYPE_IQ2_XXS; - else if (ftype == LLAMA_FTYPE_MOSTLY_IQ2_S || ftype == LLAMA_FTYPE_MOSTLY_IQ2_M) new_type = GGML_TYPE_IQ3_S; - } - } - } else if (name.find("attn_v.weight") != std::string::npos) { - if (ftype == LLAMA_FTYPE_MOSTLY_Q2_K) { - new_type = qs.model.hparams.n_gqa() >= 4 ? GGML_TYPE_Q4_K : GGML_TYPE_Q3_K; - } - else if (ftype == LLAMA_FTYPE_MOSTLY_Q2_K_S && qs.model.hparams.n_gqa() >= 4) { - new_type = GGML_TYPE_Q4_K; - } - else if (ftype == LLAMA_FTYPE_MOSTLY_IQ3_XXS) { - new_type = qs.model.hparams.n_gqa() >= 4 ? GGML_TYPE_Q4_K : !qs.has_imatrix ? GGML_TYPE_IQ3_S : GGML_TYPE_IQ3_XXS; - } - else if ((ftype == LLAMA_FTYPE_MOSTLY_IQ3_XS || ftype == LLAMA_FTYPE_MOSTLY_IQ3_S) && qs.model.hparams.n_gqa() >= 4) { - new_type = GGML_TYPE_Q4_K; - } - else if (ftype == LLAMA_FTYPE_MOSTLY_IQ3_M) { - new_type = GGML_TYPE_Q4_K; - } - else if (ftype == LLAMA_FTYPE_MOSTLY_Q3_K_M) { - new_type = qs.i_attention_wv < 2 ? GGML_TYPE_Q5_K : GGML_TYPE_Q4_K; - } - else if (ftype == LLAMA_FTYPE_MOSTLY_Q3_K_L) new_type = GGML_TYPE_Q5_K; - else if ((ftype == LLAMA_FTYPE_MOSTLY_IQ4_NL || ftype == LLAMA_FTYPE_MOSTLY_IQ4_XS) && qs.model.hparams.n_gqa() >= 4) { - new_type = GGML_TYPE_Q5_K; - } - else if ((ftype == LLAMA_FTYPE_MOSTLY_Q4_K_M || ftype == LLAMA_FTYPE_MOSTLY_Q5_K_M) && - use_more_bits(qs.i_attention_wv, qs.n_attention_wv)) new_type = GGML_TYPE_Q6_K; - else if (ftype == LLAMA_FTYPE_MOSTLY_Q4_K_S && qs.i_attention_wv < 4) new_type = GGML_TYPE_Q5_K; - else if (QK_K == 64 && (ftype == LLAMA_FTYPE_MOSTLY_Q4_K_S || ftype == LLAMA_FTYPE_MOSTLY_Q3_K_S) && - (qs.i_attention_wv < qs.n_attention_wv/8 || qs.i_attention_wv >= 7*qs.n_attention_wv/8)) new_type = GGML_TYPE_Q6_K; - if (qs.model.type == MODEL_70B) { - // In the 70B model we have 8 heads sharing the same attn_v weights. As a result, the attn_v.weight tensor is - // 8x smaller compared to attn_q.weight. Hence, we can get a nice boost in quantization accuracy with - // nearly negligible increase in model size by quantizing this tensor with more bits: - if (new_type == GGML_TYPE_Q3_K || new_type == GGML_TYPE_Q4_K) new_type = GGML_TYPE_Q5_K; - } - if (qs.model.hparams.n_expert == 8) { - // for the 8-expert model, bumping this to Q8_0 trades just ~128MB - // TODO: explore better strategies - new_type = GGML_TYPE_Q8_0; - } - ++qs.i_attention_wv; - } else if (name.find("attn_k.weight") != std::string::npos) { - if (qs.model.hparams.n_expert == 8) { - // for the 8-expert model, bumping this to Q8_0 trades just ~128MB - // TODO: explore better strategies - new_type = GGML_TYPE_Q8_0; - } - else if (ftype == LLAMA_FTYPE_MOSTLY_IQ3_XS) { - new_type = GGML_TYPE_IQ3_XXS; - } - else if (ftype == LLAMA_FTYPE_MOSTLY_IQ3_XXS) { - new_type = GGML_TYPE_IQ2_S; - } - } else if (name.find("attn_q.weight") != std::string::npos) { - if (ftype == LLAMA_FTYPE_MOSTLY_IQ3_XS) { - new_type = GGML_TYPE_IQ3_XXS; - } - else if (ftype == LLAMA_FTYPE_MOSTLY_IQ3_XXS) { - new_type = GGML_TYPE_IQ2_S; - } - } else if (name.find("ffn_down") != std::string::npos) { - auto info = layer_info(qs.i_ffn_down, qs.n_ffn_down, name.c_str()); - int i_layer = info.first, n_layer = info.second; - if (ftype == LLAMA_FTYPE_MOSTLY_Q2_K) new_type = GGML_TYPE_Q3_K; - else if (ftype == LLAMA_FTYPE_MOSTLY_Q2_K_S) { - if (i_layer < n_layer/8) new_type = GGML_TYPE_Q4_K; - } - else if (ftype == LLAMA_FTYPE_MOSTLY_IQ3_XXS && !qs.has_imatrix) { - new_type = i_layer < n_layer/8 ? GGML_TYPE_Q4_K : GGML_TYPE_Q3_K; - } - else if (ftype == LLAMA_FTYPE_MOSTLY_Q3_K_M) { - new_type = i_layer < n_layer/16 ? GGML_TYPE_Q5_K - : arch != LLM_ARCH_FALCON || use_more_bits(i_layer, n_layer) ? GGML_TYPE_Q4_K - : GGML_TYPE_Q3_K; - } - else if (ftype == LLAMA_FTYPE_MOSTLY_IQ3_M && (i_layer < n_layer/8 || - (qs.model.hparams.n_expert == 8 && use_more_bits(i_layer, n_layer)))) { - new_type = GGML_TYPE_Q4_K; - } - else if (ftype == LLAMA_FTYPE_MOSTLY_Q3_K_L) { - new_type = arch == LLM_ARCH_FALCON ? GGML_TYPE_Q4_K : GGML_TYPE_Q5_K; - } - else if (ftype == LLAMA_FTYPE_MOSTLY_Q4_K_M) { - if (arch == LLM_ARCH_FALCON) { - new_type = i_layer < n_layer/16 ? GGML_TYPE_Q6_K : - use_more_bits(i_layer, n_layer) ? GGML_TYPE_Q5_K : GGML_TYPE_Q4_K; - } else { - if (use_more_bits(i_layer, n_layer)) new_type = GGML_TYPE_Q6_K; - } - } - else if (i_layer < n_layer/8 && (ftype == LLAMA_FTYPE_MOSTLY_IQ4_NL || ftype == LLAMA_FTYPE_MOSTLY_IQ4_XS) && !qs.has_imatrix) { - new_type = GGML_TYPE_Q5_K; - } - else if (ftype == LLAMA_FTYPE_MOSTLY_Q5_K_M && use_more_bits(i_layer, n_layer)) new_type = GGML_TYPE_Q6_K; - else if (ftype == LLAMA_FTYPE_MOSTLY_Q4_K_S && arch != LLM_ARCH_FALCON && i_layer < n_layer/8) { - new_type = GGML_TYPE_Q5_K; - } - else if ((ftype == LLAMA_FTYPE_MOSTLY_Q4_0 || ftype == LLAMA_FTYPE_MOSTLY_Q5_0) - && qs.has_imatrix && i_layer < n_layer/8) { - // Guard against craziness in the first few ffn_down layers that can happen even with imatrix for Q4_0/Q5_0. - // We only do it when an imatrix is provided because a) we want to make sure that one can always get the - // same quantization as before imatrix stuff, and b) Q4_1/Q5_1 do go crazy on ffn_down without an imatrix. - new_type = ftype == LLAMA_FTYPE_MOSTLY_Q4_0 ? GGML_TYPE_Q4_1 : GGML_TYPE_Q5_1; - } - ++qs.i_ffn_down; - } else if (name.find("attn_output.weight") != std::string::npos) { - if (arch != LLM_ARCH_FALCON) { - if (qs.model.hparams.n_expert == 8) { - if (ftype == LLAMA_FTYPE_MOSTLY_Q2_K || ftype == LLAMA_FTYPE_MOSTLY_IQ3_XS || ftype == LLAMA_FTYPE_MOSTLY_IQ3_XXS || - ftype == LLAMA_FTYPE_MOSTLY_Q3_K_S || ftype == LLAMA_FTYPE_MOSTLY_Q3_K_M || ftype == LLAMA_FTYPE_MOSTLY_IQ4_NL || - ftype == LLAMA_FTYPE_MOSTLY_Q4_K_S || ftype == LLAMA_FTYPE_MOSTLY_Q4_K_M || ftype == LLAMA_FTYPE_MOSTLY_IQ3_S || - ftype == LLAMA_FTYPE_MOSTLY_IQ3_M || ftype == LLAMA_FTYPE_MOSTLY_IQ4_XS) { - new_type = GGML_TYPE_Q5_K; - } - } else { - if (ftype == LLAMA_FTYPE_MOSTLY_Q2_K ) new_type = GGML_TYPE_Q3_K; - else if (ftype == LLAMA_FTYPE_MOSTLY_IQ3_XXS) new_type = GGML_TYPE_IQ3_S; - else if (ftype == LLAMA_FTYPE_MOSTLY_Q3_K_M ) new_type = GGML_TYPE_Q4_K; - else if (ftype == LLAMA_FTYPE_MOSTLY_Q3_K_L ) new_type = GGML_TYPE_Q5_K; - else if (ftype == LLAMA_FTYPE_MOSTLY_IQ3_M ) new_type = GGML_TYPE_Q4_K; - } - } else { - if (ftype == LLAMA_FTYPE_MOSTLY_Q3_K_L) new_type = GGML_TYPE_Q4_K; - } - } - else if (name.find("attn_qkv.weight") != std::string::npos) { - if (ftype == LLAMA_FTYPE_MOSTLY_Q3_K_M || ftype == LLAMA_FTYPE_MOSTLY_Q3_K_L || ftype == LLAMA_FTYPE_MOSTLY_IQ3_M) { - new_type = GGML_TYPE_Q4_K; - } - else if (ftype == LLAMA_FTYPE_MOSTLY_Q4_K_M) new_type = GGML_TYPE_Q5_K; - else if (ftype == LLAMA_FTYPE_MOSTLY_Q5_K_M) new_type = GGML_TYPE_Q6_K; - } - else if (name.find("ffn_gate") != std::string::npos) { - auto info = layer_info(qs.i_ffn_gate, qs.n_ffn_gate, name.c_str()); - int i_layer = info.first, n_layer = info.second; - if (ftype == LLAMA_FTYPE_MOSTLY_IQ3_XS && (i_layer >= n_layer/8 && i_layer < 7*n_layer/8)) { - new_type = GGML_TYPE_IQ3_XXS; - } - ++qs.i_ffn_gate; - } - else if (name.find("ffn_up") != std::string::npos) { - auto info = layer_info(qs.i_ffn_up, qs.n_ffn_up, name.c_str()); - int i_layer = info.first, n_layer = info.second; - if (ftype == LLAMA_FTYPE_MOSTLY_IQ3_XS && (i_layer >= n_layer/8 && i_layer < 7*n_layer/8)) { - new_type = GGML_TYPE_IQ3_XXS; - } - ++qs.i_ffn_up; - } - - // if (ftype == LLAMA_FTYPE_MOSTLY_Q2_K) new_type = GGML_TYPE_Q3_K; - //} - // IK: let's remove this, else Q2_K is almost the same as Q3_K_S - //else if (name.find("ffn_gate") != std::string::npos || name.find("ffn_up") != std::string::npos) { - // if (ftype == LLAMA_FTYPE_MOSTLY_Q2_K) new_type = GGML_TYPE_Q3_K; - //} - // This can be used to reduce the size of the Q5_K_S model. - // The associated PPL increase is fully in line with the size reduction - //else { - // if (ftype == LLAMA_FTYPE_MOSTLY_Q5_K_S) new_type = GGML_TYPE_Q4_K; - //} - bool convert_incompatible_tensor = false; - if (new_type == GGML_TYPE_Q2_K || new_type == GGML_TYPE_Q3_K || new_type == GGML_TYPE_Q4_K || - new_type == GGML_TYPE_Q5_K || new_type == GGML_TYPE_Q6_K || new_type == GGML_TYPE_IQ4_XS || - new_type == GGML_TYPE_IQ2_XS || new_type == GGML_TYPE_IQ2_XXS || new_type == GGML_TYPE_IQ2_S || - new_type == GGML_TYPE_IQ3_XXS || new_type == GGML_TYPE_IQ1_S || new_type == GGML_TYPE_IQ3_S || - new_type == GGML_TYPE_IQ1_M) { - int nx = tensor->ne[0]; - int ny = tensor->ne[1]; - if (nx % QK_K != 0) { - LLAMA_LOG_WARN("\n\n%s : tensor cols %d x %d are not divisible by %d, required for %s", __func__, nx, ny, QK_K, ggml_type_name(new_type)); - convert_incompatible_tensor = true; - } else { - ++qs.n_k_quantized; - } - } - if (convert_incompatible_tensor) { - switch (new_type) { - case GGML_TYPE_IQ2_XXS: - case GGML_TYPE_IQ2_XS: - case GGML_TYPE_IQ2_S: - case GGML_TYPE_IQ3_XXS: - case GGML_TYPE_IQ3_S: - case GGML_TYPE_IQ1_S: - case GGML_TYPE_IQ1_M: - case GGML_TYPE_Q2_K: - case GGML_TYPE_Q3_K: - case GGML_TYPE_IQ4_XS: new_type = GGML_TYPE_IQ4_NL; break; - case GGML_TYPE_Q4_K: new_type = GGML_TYPE_Q5_0; break; - case GGML_TYPE_Q5_K: new_type = GGML_TYPE_Q5_1; break; - case GGML_TYPE_Q6_K: new_type = GGML_TYPE_Q8_0; break; - default: throw std::runtime_error("\nUnsupported tensor size encountered\n"); - } - LLAMA_LOG_WARN(" - using fallback quantization %s\n", ggml_type_name(new_type)); - ++qs.n_fallback; - } - - return new_type; -} - -static size_t llama_tensor_quantize_internal(enum ggml_type new_type, const float * f32_data, void * new_data, const int64_t chunk_size, int64_t nrows, int64_t n_per_row, const float * imatrix, std::vector & workers, const int nthread) { - if (nthread < 2) { - // single-thread - size_t new_size = ggml_quantize_chunk(new_type, f32_data, new_data, 0, nrows, n_per_row, imatrix); - if (!ggml_validate_row_data(new_type, new_data, new_size)) { - throw std::runtime_error("quantized data validation failed"); - } - return new_size; - } - - std::mutex mutex; - int64_t counter = 0; - size_t new_size = 0; - bool valid = true; - auto compute = [&mutex, &counter, &new_size, &valid, new_type, f32_data, new_data, chunk_size, - nrows, n_per_row, imatrix]() { - const int64_t nrows_per_chunk = chunk_size / n_per_row; - size_t local_size = 0; - while (true) { - std::unique_lock lock(mutex); - int64_t first_row = counter; counter += nrows_per_chunk; - if (first_row >= nrows) { - if (local_size > 0) { - new_size += local_size; - } - break; - } - lock.unlock(); - const int64_t this_nrow = std::min(nrows - first_row, nrows_per_chunk); - size_t this_size = ggml_quantize_chunk(new_type, f32_data, new_data, first_row * n_per_row, this_nrow, n_per_row, imatrix); - local_size += this_size; - - // validate the quantized data - const size_t row_size = ggml_row_size(new_type, n_per_row); - void * this_data = (char *) new_data + first_row * row_size; - if (!ggml_validate_row_data(new_type, this_data, this_size)) { - std::unique_lock lock(mutex); - valid = false; - break; - } - } - }; - for (int it = 0; it < nthread - 1; ++it) { - workers.emplace_back(compute); - } - compute(); - for (auto & w : workers) { w.join(); } - workers.clear(); - if (!valid) { - throw std::runtime_error("quantized data validation failed"); - } - return new_size; -} - -static void llama_model_quantize_internal(const std::string & fname_inp, const std::string & fname_out, const llama_model_quantize_params * params) { - ggml_type default_type; - llama_ftype ftype = params->ftype; - - switch (params->ftype) { - case LLAMA_FTYPE_MOSTLY_Q4_0: default_type = GGML_TYPE_Q4_0; break; - case LLAMA_FTYPE_MOSTLY_Q4_1: default_type = GGML_TYPE_Q4_1; break; - case LLAMA_FTYPE_MOSTLY_Q5_0: default_type = GGML_TYPE_Q5_0; break; - case LLAMA_FTYPE_MOSTLY_Q5_1: default_type = GGML_TYPE_Q5_1; break; - case LLAMA_FTYPE_MOSTLY_Q8_0: default_type = GGML_TYPE_Q8_0; break; - case LLAMA_FTYPE_MOSTLY_F16: default_type = GGML_TYPE_F16; break; - case LLAMA_FTYPE_ALL_F32: default_type = GGML_TYPE_F32; break; - - // K-quants - case LLAMA_FTYPE_MOSTLY_Q2_K_S: - case LLAMA_FTYPE_MOSTLY_Q2_K: default_type = GGML_TYPE_Q2_K; break; - case LLAMA_FTYPE_MOSTLY_IQ3_XS: default_type = GGML_TYPE_IQ3_S; break; - case LLAMA_FTYPE_MOSTLY_Q3_K_S: - case LLAMA_FTYPE_MOSTLY_Q3_K_M: - case LLAMA_FTYPE_MOSTLY_Q3_K_L: default_type = GGML_TYPE_Q3_K; break; - case LLAMA_FTYPE_MOSTLY_Q4_K_S: - case LLAMA_FTYPE_MOSTLY_Q4_K_M: default_type = GGML_TYPE_Q4_K; break; - case LLAMA_FTYPE_MOSTLY_Q5_K_S: - case LLAMA_FTYPE_MOSTLY_Q5_K_M: default_type = GGML_TYPE_Q5_K; break; - case LLAMA_FTYPE_MOSTLY_Q6_K: default_type = GGML_TYPE_Q6_K; break; - case LLAMA_FTYPE_MOSTLY_IQ2_XXS: default_type = GGML_TYPE_IQ2_XXS; break; - case LLAMA_FTYPE_MOSTLY_IQ2_XS: default_type = GGML_TYPE_IQ2_XS; break; - case LLAMA_FTYPE_MOSTLY_IQ2_S: default_type = GGML_TYPE_IQ2_XS; break; - case LLAMA_FTYPE_MOSTLY_IQ2_M: default_type = GGML_TYPE_IQ2_S; break; - case LLAMA_FTYPE_MOSTLY_IQ3_XXS: default_type = GGML_TYPE_IQ3_XXS; break; - case LLAMA_FTYPE_MOSTLY_IQ1_S: default_type = GGML_TYPE_IQ1_S; break; - case LLAMA_FTYPE_MOSTLY_IQ1_M: default_type = GGML_TYPE_IQ1_M; break; - case LLAMA_FTYPE_MOSTLY_IQ4_NL: default_type = GGML_TYPE_IQ4_NL; break; - case LLAMA_FTYPE_MOSTLY_IQ4_XS: default_type = GGML_TYPE_IQ4_XS; break; - case LLAMA_FTYPE_MOSTLY_IQ3_S: default_type = GGML_TYPE_IQ3_S; break; - case LLAMA_FTYPE_MOSTLY_IQ3_M: default_type = GGML_TYPE_IQ3_S; break; - - default: throw std::runtime_error(format("invalid output file type %d\n", ftype)); - } - - int nthread = params->nthread; - - if (nthread <= 0) { - nthread = std::thread::hardware_concurrency(); - } - - // mmap consistently increases speed Linux, and also increases speed on Windows with - // hot cache. It may cause a slowdown on macOS, possibly related to free memory. -#if defined(__linux__) || defined(_WIN32) - constexpr bool use_mmap = true; -#else - constexpr bool use_mmap = false; -#endif - - llama_model_kv_override * kv_overrides = nullptr; - if (params->kv_overrides) { - auto v = (std::vector*)params->kv_overrides; - kv_overrides = v->data(); - } - llama_model_loader ml(fname_inp, use_mmap, /*check_tensors*/ true, kv_overrides); - ml.init_mappings(false); // no prefetching - - llama_model model; - llm_load_arch(ml, model); - llm_load_hparams(ml, model); - - struct quantize_state_internal qs(model, params); - - if (params->only_copy) { - ftype = model.ftype; - } - const std::unordered_map> * imatrix_data = nullptr; - if (params->imatrix) { - imatrix_data = static_cast>*>(params->imatrix); - if (imatrix_data) { - LLAMA_LOG_INFO("================================ Have weights data with %d entries\n",int(imatrix_data->size())); - qs.has_imatrix = true; - } - } - - const size_t align = GGUF_DEFAULT_ALIGNMENT; - struct gguf_context * ctx_out = gguf_init_empty(); - - // copy the KV pairs from the input file - gguf_set_kv (ctx_out, ml.meta); - gguf_set_val_u32(ctx_out, "general.quantization_version", GGML_QNT_VERSION); - gguf_set_val_u32(ctx_out, "general.file_type", ftype); - // Remove split metadata - gguf_remove_key(ctx_out, ml.llm_kv(LLM_KV_SPLIT_NO).c_str()); - gguf_remove_key(ctx_out, ml.llm_kv(LLM_KV_SPLIT_COUNT).c_str()); - gguf_remove_key(ctx_out, ml.llm_kv(LLM_KV_SPLIT_TENSORS_COUNT).c_str()); - - if (params->kv_overrides) { - const std::vector & overrides = *(const std::vector *)params->kv_overrides; - for (auto & o : overrides) { - if (o.key[0] == 0) break; - if (o.tag == LLAMA_KV_OVERRIDE_TYPE_FLOAT) { - gguf_set_val_f32(ctx_out, o.key, o.val_f64); - } else if (o.tag == LLAMA_KV_OVERRIDE_TYPE_INT) { - gguf_set_val_i32(ctx_out, o.key, o.val_i64); - } else if (o.tag == LLAMA_KV_OVERRIDE_TYPE_BOOL) { - gguf_set_val_bool(ctx_out, o.key, o.val_bool); - } else if (o.tag == LLAMA_KV_OVERRIDE_TYPE_STR) { - gguf_set_val_str(ctx_out, o.key, o.val_str); - } else { - LLAMA_LOG_WARN("%s: unknown KV override type for key %s\n", __func__, o.key); - } - } - } - - for (int i = 0; i < ml.n_tensors; ++i) { - const struct ggml_tensor * meta = ml.get_tensor_meta(i); - - const std::string name = ggml_get_name(meta); - - // TODO: avoid hardcoded tensor names - use the TN_* constants - if (name.find("attn_v.weight") != std::string::npos || - name.find("attn_qkv.weight") != std::string::npos) { - ++qs.n_attention_wv; - } else if (name == LLM_TN(model.arch)(LLM_TENSOR_OUTPUT, "weight")) { - qs.has_output = true; - } - } - - qs.n_ffn_down = qs.n_ffn_gate = qs.n_ffn_up = (int)model.hparams.n_layer; - - // sanity checks - // - // - qs.n_attention_wv == 0 for Mamba models - // - qs.n_attention_wv == model.hparams.n_layer for Transformer models - // - GGML_ASSERT((qs.n_attention_wv == 0 || qs.n_attention_wv == (int)model.hparams.n_layer) && "n_attention_wv is unexpected"); - - size_t total_size_org = 0; - size_t total_size_new = 0; - - std::vector workers; - workers.reserve(nthread); - - int idx = 0; - - std::vector> read_data; - std::vector> work; - std::vector> f32_conv_buf; - - uint16_t n_split = 1; - // Assume split index is continuous - if (params->keep_split) { - for (int i = 0; i < ml.n_tensors; ++i) { - n_split = std::max(uint16_t(ml.get_weight(i)->idx+1), n_split); - } - } - std::vector ctx_outs(n_split, NULL); - ctx_outs[0] = ctx_out; - - // populate the original tensors so we get an initial meta data - for (int i = 0; i < ml.n_tensors; ++i) { - auto weight = ml.get_weight(i); - uint16_t i_split = params->keep_split ? weight->idx : 0; - struct ggml_tensor * tensor = weight->tensor; - if (ctx_outs[i_split] == NULL) { - ctx_outs[i_split] = gguf_init_empty(); - } - gguf_add_tensor(ctx_outs[i_split], tensor); - } - - // Set split info if needed - if (n_split > 1) { - for (size_t i = 0; i < ctx_outs.size(); ++i) { - gguf_set_val_u16(ctx_outs[i], ml.llm_kv(LLM_KV_SPLIT_NO).c_str(), i); - gguf_set_val_u16(ctx_outs[i], ml.llm_kv(LLM_KV_SPLIT_COUNT).c_str(), n_split); - gguf_set_val_i32(ctx_outs[i], ml.llm_kv(LLM_KV_SPLIT_TENSORS_COUNT).c_str(), ml.n_tensors); - } - } - - int cur_split = -1; - std::ofstream fout; - auto close_ofstream = [&]() { - // Write metadata and close file handler - if (fout.is_open()) { - fout.seekp(0); - std::vector data(gguf_get_meta_size(ctx_outs[cur_split])); - gguf_get_meta_data(ctx_outs[cur_split], data.data()); - fout.write((const char *) data.data(), data.size()); - fout.close(); - } - }; - auto new_ofstream = [&](int index) { - cur_split = index; - GGML_ASSERT(ctx_outs[cur_split] && "Find uninitialized gguf_context"); - std::string fname = fname_out; - if (params->keep_split) { - char split_path[PATH_MAX] = {0}; - llama_split_path(split_path, sizeof(split_path), fname_out.c_str(), cur_split, n_split); - fname = std::string(split_path); - } - - fout = std::ofstream(fname, std::ios::binary); - fout.exceptions(std::ofstream::failbit); // fail fast on write errors - const size_t meta_size = gguf_get_meta_size(ctx_outs[cur_split]); - // placeholder for the meta data - ::zeros(fout, meta_size); - }; - - const auto tn = LLM_TN(model.arch); - new_ofstream(0); - for (int i = 0; i < ml.n_tensors; ++i) { - auto weight = ml.get_weight(i); - struct ggml_tensor * tensor = weight->tensor; - if (weight->idx != cur_split && params->keep_split) { - close_ofstream(); - new_ofstream(weight->idx); - } - - const std::string name = ggml_get_name(tensor); - - if (!ml.use_mmap) { - if (read_data.size() < ggml_nbytes(tensor)) { - read_data.resize(ggml_nbytes(tensor)); - } - tensor->data = read_data.data(); - } - ml.load_data_for(tensor); - - LLAMA_LOG_INFO("[%4d/%4d] %36s - [%s], type = %6s, ", - ++idx, ml.n_tensors, - ggml_get_name(tensor), - llama_format_tensor_shape(tensor).c_str(), - ggml_type_name(tensor->type)); - - // This used to be a regex, but has an extreme cost to compile times. - bool quantize = name.rfind("weight") == name.size() - 6; // ends with 'weight'? - - // quantize only 2D and 3D tensors (experts) - quantize &= (ggml_n_dims(tensor) >= 2); - - // do not quantize norm tensors - quantize &= name.find("_norm.weight") == std::string::npos; - - quantize &= params->quantize_output_tensor || name != "output.weight"; - quantize &= !params->only_copy; - - // do not quantize expert gating tensors - // NOTE: can't use LLM_TN here because the layer number is not known - quantize &= name.find("ffn_gate_inp.weight") == std::string::npos; - - // do not quantize positional embeddings and token types (BERT) - quantize &= name != LLM_TN(model.arch)(LLM_TENSOR_POS_EMBD, "weight"); - quantize &= name != LLM_TN(model.arch)(LLM_TENSOR_TOKEN_TYPES, "weight"); - - // do not quantize Mamba's small yet 2D weights - // NOTE: can't use LLM_TN here because the layer number is not known - quantize &= name.find("ssm_conv1d.weight") == std::string::npos; - quantize &= name.find("ssm_x.weight") == std::string::npos; - quantize &= name.find("ssm_dt.weight") == std::string::npos; - - enum ggml_type new_type; - void * new_data; - size_t new_size; - - if (quantize) { - new_type = default_type; - - // get more optimal quantization type based on the tensor shape, layer, etc. - if (!params->pure && ggml_is_quantized(default_type)) { - new_type = llama_tensor_get_type(qs, new_type, tensor, ftype); - } - if (params->token_embedding_type < GGML_TYPE_COUNT && strcmp(tensor->name, "token_embd.weight") == 0) { - new_type = params->token_embedding_type; - } - if (params->output_tensor_type < GGML_TYPE_COUNT && strcmp(tensor->name, "output.weight") == 0) { - new_type = params->output_tensor_type; - } - - // If we've decided to quantize to the same type the tensor is already - // in then there's nothing to do. - quantize = tensor->type != new_type; - } - - if (!quantize) { - new_type = tensor->type; - new_data = tensor->data; - new_size = ggml_nbytes(tensor); - LLAMA_LOG_INFO("size = %8.3f MB\n", ggml_nbytes(tensor)/1024.0/1024.0); - } else { - const int64_t nelements = ggml_nelements(tensor); - - const float * imatrix = nullptr; - if (imatrix_data) { - auto it = imatrix_data->find(tensor->name); - if (it == imatrix_data->end()) { - LLAMA_LOG_INFO("\n====== %s: did not find weights for %s\n", __func__, tensor->name); - } else { - if (it->second.size() == (size_t)tensor->ne[0]*tensor->ne[2]) { - imatrix = it->second.data(); - } else { - LLAMA_LOG_INFO("\n====== %s: imatrix size %d is different from tensor size %d for %s\n", __func__, - int(it->second.size()), int(tensor->ne[0]*tensor->ne[2]), tensor->name); - - // this can happen when quantizing an old mixtral model with split tensors with a new incompatible imatrix - // this is a significant error and it may be good idea to abort the process if this happens, - // since many people will miss the error and not realize that most of the model is being quantized without an imatrix - // tok_embd should be ignored in this case, since it always causes this warning - if (name != tn(LLM_TENSOR_TOKEN_EMBD, "weight")) { - throw std::runtime_error(format("imatrix size %d is different from tensor size %d for %s", - int(it->second.size()), int(tensor->ne[0]*tensor->ne[2]), tensor->name)); - } - } - } - } - if ((new_type == GGML_TYPE_IQ2_XXS || - new_type == GGML_TYPE_IQ2_XS || - new_type == GGML_TYPE_IQ2_S || - new_type == GGML_TYPE_IQ1_S || - (new_type == GGML_TYPE_IQ1_M && strcmp(tensor->name, "token_embd.weight") && strcmp(tensor->name, "output.weight")) || - (new_type == GGML_TYPE_Q2_K && params->ftype == LLAMA_FTYPE_MOSTLY_Q2_K_S && strcmp(tensor->name, "token_embd.weight") != 0)) && !imatrix) { - LLAMA_LOG_ERROR("\n\n============================================================\n"); - LLAMA_LOG_ERROR("Missing importance matrix for tensor %s in a very low-bit quantization\n", tensor->name); - LLAMA_LOG_ERROR("The result will be garbage, so bailing out\n"); - LLAMA_LOG_ERROR("============================================================\n\n"); - throw std::runtime_error(format("Missing importance matrix for tensor %s in a very low-bit quantization", tensor->name)); - } - - float * f32_data; - - if (tensor->type == GGML_TYPE_F32) { - f32_data = (float *) tensor->data; - } else if (ggml_is_quantized(tensor->type) && !params->allow_requantize) { - throw std::runtime_error(format("requantizing from type %s is disabled", ggml_type_name(tensor->type))); - } else { - llama_tensor_dequantize_internal(tensor, f32_conv_buf, workers, nelements, nthread); - f32_data = (float *) f32_conv_buf.data(); - } - - LLAMA_LOG_INFO("converting to %s .. ", ggml_type_name(new_type)); - fflush(stdout); - - if (work.size() < (size_t)nelements * 4) { - work.resize(nelements * 4); // upper bound on size - } - new_data = work.data(); - - const int64_t n_per_row = tensor->ne[0]; - const int64_t nrows = tensor->ne[1]; - - static const int64_t min_chunk_size = 32 * 512; - const int64_t chunk_size = n_per_row >= min_chunk_size ? n_per_row : n_per_row * ((min_chunk_size + n_per_row - 1)/n_per_row); - - const int64_t nelements_matrix = tensor->ne[0] * tensor->ne[1]; - const int64_t nchunk = (nelements_matrix + chunk_size - 1)/chunk_size; - const int64_t nthread_use = nthread > 1 ? std::max((int64_t)1, std::min((int64_t)nthread, nchunk)) : 1; - - // quantize each expert separately since they have different importance matrices - new_size = 0; - for (int64_t i03 = 0; i03 < tensor->ne[2]; ++i03) { - const float * f32_data_03 = f32_data + i03 * nelements_matrix; - void * new_data_03 = (char *)new_data + ggml_row_size(new_type, n_per_row) * i03 * nrows; - const float * imatrix_03 = imatrix ? imatrix + i03 * n_per_row : nullptr; - - new_size += llama_tensor_quantize_internal(new_type, f32_data_03, new_data_03, chunk_size, nrows, n_per_row, imatrix_03, workers, nthread_use); - } - LLAMA_LOG_INFO("size = %8.2f MiB -> %8.2f MiB\n", ggml_nbytes(tensor)/1024.0/1024.0, new_size/1024.0/1024.0); - } - total_size_org += ggml_nbytes(tensor); - total_size_new += new_size; - - // update the gguf meta data as we go - gguf_set_tensor_type(ctx_outs[cur_split], name.c_str(), new_type); - gguf_set_tensor_data(ctx_outs[cur_split], name.c_str(), new_data, new_size); - - // write tensor data + padding - fout.write((const char *) new_data, new_size); - zeros(fout, GGML_PAD(new_size, align) - new_size); - } - close_ofstream(); - for (auto & c:ctx_outs) { - gguf_free(c); - } - - LLAMA_LOG_INFO("%s: model size = %8.2f MB\n", __func__, total_size_org/1024.0/1024.0); - LLAMA_LOG_INFO("%s: quant size = %8.2f MB\n", __func__, total_size_new/1024.0/1024.0); - - if (qs.n_fallback > 0) { - LLAMA_LOG_WARN("%s: WARNING: %d of %d tensor(s) required fallback quantization\n", - __func__, qs.n_fallback, qs.n_k_quantized + qs.n_fallback); - } -} - -static int llama_apply_lora_from_file_internal( - const struct llama_model & model, const char * path_lora, float scale, const char * path_base_model, int n_threads -) { - LLAMA_LOG_INFO("%s: applying lora adapter from '%s' - please wait ...\n", __func__, path_lora); - - const int64_t t_start_lora_us = ggml_time_us(); - - llama_file fin(path_lora, "rb"); - - // verify magic and version - { - uint32_t magic = fin.read_u32(); - if (magic != LLAMA_FILE_MAGIC_GGLA) { - LLAMA_LOG_ERROR("%s: bad file magic\n", __func__); - return 1; - } - - uint32_t format_version = fin.read_u32(); - if (format_version != 1) { - LLAMA_LOG_ERROR("%s: unsupported file version\n", __func__ ); - return 1; - } - } - - int32_t lora_r = fin.read_u32(); - int32_t lora_alpha = fin.read_u32(); - float scaling = scale * (float)lora_alpha / (float)lora_r; - - LLAMA_LOG_INFO("%s: r = %d, alpha = %d, scaling = %.2f\n", __func__, lora_r, lora_alpha, scaling); - - // load base model - std::unique_ptr ml; - if (path_base_model) { - LLAMA_LOG_INFO("%s: loading base model from '%s'\n", __func__, path_base_model); - ml.reset(new llama_model_loader(path_base_model, /*use_mmap*/ true, /*check_tensors*/ false, /*kv_overrides*/ nullptr)); - ml->init_mappings(/*prefetch*/ false); // no prefetching - } - - struct tensor_meta { - std::string name; - ggml_type type; - int32_t ne[2]; - size_t offset; - }; - std::map tensor_meta_map; - - // load all tensor meta - while (true) { - if (fin.tell() == fin.size) { - // eof - break; - } - - int32_t n_dims; - int32_t name_len; - int32_t ftype; - - fin.read_raw(&n_dims, sizeof(n_dims)); - fin.read_raw(&name_len, sizeof(name_len)); - fin.read_raw(&ftype, sizeof(ftype)); - - if (n_dims != 1 && n_dims != 2) { - LLAMA_LOG_ERROR("%s: unsupported tensor dimension %d\n", __func__, n_dims); - return 1; - } - - int32_t ne[2] = { 1, 1 }; - for (int i = 0; i < n_dims; ++i) { - fin.read_raw(&ne[i], sizeof(ne[i])); - } - - std::string name; - { - GGML_ASSERT(name_len < GGML_MAX_NAME); - char buf[GGML_MAX_NAME]; - fin.read_raw(buf, name_len); - name = std::string(buf, name_len); - } - - // check for lora suffix - std::string lora_suffix; - if (name.length() > 6) { - lora_suffix = name.substr(name.length() - 6); - } - if (lora_suffix != ".loraA" && lora_suffix != ".loraB") { - LLAMA_LOG_ERROR("%s: error: '%s' is not a lora tensor\n", __func__, name.c_str()); - return 1; - } - - // tensor type - ggml_type wtype; - switch (ftype) { - case 0: wtype = GGML_TYPE_F32; break; - case 1: wtype = GGML_TYPE_F16; break; - default: - { - LLAMA_LOG_ERROR("%s: invalid tensor data type '%d'\n", - __func__, ftype); - return 1; - } - } - - // data offset - size_t offset = fin.tell(); - offset = (offset + 31) & -32; - - // skip tensor data - fin.seek(offset + ggml_row_size(wtype, ne[0]) * ne[1], SEEK_SET); - - tensor_meta_map.emplace(name, tensor_meta{ name, wtype, { ne[0], ne[1] }, offset }); - } - - bool warned = false; - int n_tensors = 0; - - // apply - ggml_backend_t backend_cpu = ggml_backend_cpu_init(); - if (backend_cpu == nullptr) { - LLAMA_LOG_ERROR("%s: error: failed to initialize cpu backend\n", __func__); - return 1; - } - ggml_backend_cpu_set_n_threads(backend_cpu, n_threads); - - std::vector> read_buf; - for (const auto & it : model.tensors_by_name) { - const std::string & base_name = it.first; - ggml_tensor * model_t = it.second; - - if (tensor_meta_map.find(base_name + ".loraA") == tensor_meta_map.end() || - tensor_meta_map.find(base_name + ".loraB") == tensor_meta_map.end()) { - continue; - } - - tensor_meta & metaA = tensor_meta_map.at(base_name + ".loraA"); - tensor_meta & metaB = tensor_meta_map.at(base_name + ".loraB"); - - ggml_init_params lora_init_params = { - /* .mem_size */ ggml_tensor_overhead()*128 + ggml_graph_overhead(), - /* .mem_buffer */ nullptr, - /* .no_alloc */ true, - }; - ggml_context * lora_ctx = ggml_init(lora_init_params); - if (lora_ctx == nullptr) { - LLAMA_LOG_ERROR("%s: error: failed to initialize lora context\n", __func__); - ggml_backend_free(backend_cpu); - return 1; - } - - // create tensors - ggml_tensor * loraA = ggml_new_tensor_2d(lora_ctx, metaA.type, metaA.ne[0], metaA.ne[1]); - ggml_tensor * loraB = ggml_new_tensor_2d(lora_ctx, metaB.type, metaB.ne[0], metaB.ne[1]); - ggml_set_name(loraA, metaA.name.c_str()); - ggml_set_name(loraB, metaB.name.c_str()); - - ggml_tensor * base_t; - if (ml) { - if (!ml->get_tensor_meta(base_name.c_str())) { - LLAMA_LOG_ERROR("%s: error: tensor '%s' not found in base model\n", __func__, base_name.c_str()); - return 1; - } - base_t = ggml_dup_tensor(lora_ctx, ml->get_tensor_meta(base_name.c_str())); - } else { - base_t = ggml_dup_tensor(lora_ctx, model_t); - } - ggml_set_name(base_t, base_name.c_str()); - - // allocate in backend buffer - ggml_backend_buffer_t lora_buf = ggml_backend_alloc_ctx_tensors_from_buft(lora_ctx, ggml_backend_cpu_buffer_type()); - if (lora_buf == nullptr) { - LLAMA_LOG_ERROR("%s: error: failed to allocate lora tensors\n", __func__); - return 1; - } - - // load tensor data - auto load_tensor = [&read_buf, &fin](const tensor_meta & tensor_meta, ggml_tensor * tensor) { - read_buf.resize(ggml_nbytes(tensor)); - fin.seek(tensor_meta.offset, SEEK_SET); - fin.read_raw(read_buf.data(), ggml_nbytes(tensor)); - ggml_backend_tensor_set(tensor, read_buf.data(), 0, read_buf.size()); - }; - load_tensor(metaA, loraA); - load_tensor(metaB, loraB); - - // load base model tensor data - if (ml) { - ml->load_data_for(base_t); - } else { - ggml_backend_tensor_copy(model_t, base_t); - } - - if (ggml_is_quantized(base_t->type) && !warned) { - LLAMA_LOG_WARN("%s: warning: using a lora adapter with a quantized model may result in poor quality, " - "use a f16 or f32 base model with --lora-base\n", __func__); - warned = true; - } - - if (base_t->ne[0] != loraA->ne[1] || base_t->ne[1] != loraB->ne[1]) { - LLAMA_LOG_ERROR("%s: incompatible tensor dimensions (%" PRId64 " and %" PRId64 ");" - " are you sure that this adapter is for this model?\n", __func__, base_t->ne[0], loraA->ne[1]); - ggml_free(lora_ctx); - ggml_backend_buffer_free(lora_buf); - ggml_backend_free(backend_cpu); - return 1; - } - - auto build_lora_graph = [&]() { - // w = w + BA*s - ggml_tensor * BA = ggml_mul_mat(lora_ctx, loraA, loraB); - ggml_set_name(BA, "BA"); - - if (scaling != 1.0f) { - BA = ggml_scale(lora_ctx, BA, scaling); - ggml_set_name(BA, "BA_scaled"); - } - - ggml_tensor * r; - r = ggml_add_inplace(lora_ctx, base_t, BA); - ggml_set_name(r, "r_add"); - - if (base_t->type != model_t->type) { - // convert the result to the model type - r = ggml_cast(lora_ctx, r, model_t->type); - ggml_set_name(r, "r_cast"); - } - - return r; - }; - - ggml_cgraph * gf = ggml_new_graph(lora_ctx); - ggml_tensor * r = build_lora_graph(); - ggml_build_forward_expand(gf, r); - - ggml_backend_buffer_t graph_buf = ggml_backend_alloc_ctx_tensors_from_buft(lora_ctx, ggml_backend_cpu_buffer_type()); - if (graph_buf == nullptr) { - LLAMA_LOG_ERROR("%s: error: failed to allocate graph tensors\n", __func__); - ggml_free(lora_ctx); - ggml_backend_buffer_free(lora_buf); - ggml_backend_free(backend_cpu); - return 1; - } - - ggml_backend_graph_compute(backend_cpu, gf); - - ggml_backend_tensor_set(model_t, r->data, 0, ggml_nbytes(r)); - -#if 0 - // TODO: use scheduler with fallback to CPU for less copies between CPU and GPU - //ggml_backend_sched_t sched = ggml_backend_sched_new(backends.data(), backends.size(), GGML_DEFAULT_GRAPH_SIZE); - - // sched compute - ggml_build_forward_expand(gf, build_graph()); - ggml_backend_sched_init_measure(sched, gf); - - // create the graph again, since the previous one was destroyed by the measure - ggml_graph_clear(gf); - ggml_build_forward_expand(gf, build_graph()); - ggml_backend_sched_graph_compute(sched, gf); - ggml_backend_sched_free(sched); -#endif - - ggml_backend_buffer_free(lora_buf); - ggml_backend_buffer_free(graph_buf); - ggml_free(lora_ctx); - - n_tensors++; - if (n_tensors % 4 == 0) { - LLAMA_LOG_INFO("."); - } - } - - ggml_backend_free(backend_cpu); - - const int64_t t_lora_us = ggml_time_us() - t_start_lora_us; - LLAMA_LOG_INFO(" done (%.2f ms)\n", t_lora_us / 1000.0); - - return 0; -} - -// -// interface implementation -// -struct llama_model_params llama_model_default_params() { - struct llama_model_params result = { - /*.n_gpu_layers =*/ 0, - /*.split_mode =*/ LLAMA_SPLIT_MODE_LAYER, - /*.main_gpu =*/ 0, - /*.tensor_split =*/ nullptr, - /*.progress_callback =*/ nullptr, - /*.progress_callback_user_data =*/ nullptr, - /*.kv_overrides =*/ nullptr, - /*.vocab_only =*/ false, - /*.use_mmap =*/ true, - /*.use_mlock =*/ false, - /*.check_tensors =*/ false, - }; - -#ifdef GGML_USE_METAL - // note: we usually have plenty of VRAM, so by default offload all layers to the GPU - result.n_gpu_layers = 999; -#endif - - return result; -} - -struct llama_context_params llama_context_default_params() { - struct llama_context_params result = { - /*.seed =*/ LLAMA_DEFAULT_SEED, - /*.n_ctx =*/ 512, - /*.n_batch =*/ 2048, - /*.n_ubatch =*/ 512, - /*.n_seq_max =*/ 1, - /*.n_threads =*/ GGML_DEFAULT_N_THREADS, // TODO: better default - /*.n_threads_batch =*/ GGML_DEFAULT_N_THREADS, - /*.rope_scaling_type =*/ LLAMA_ROPE_SCALING_TYPE_UNSPECIFIED, - /*.pooling_type =*/ LLAMA_POOLING_TYPE_UNSPECIFIED, - /*.rope_freq_base =*/ 0.0f, - /*.rope_freq_scale =*/ 0.0f, - /*.yarn_ext_factor =*/ -1.0f, - /*.yarn_attn_factor =*/ 1.0f, - /*.yarn_beta_fast =*/ 32.0f, - /*.yarn_beta_slow =*/ 1.0f, - /*.yarn_orig_ctx =*/ 0, - /*.defrag_thold =*/ -1.0f, - /*.cb_eval =*/ nullptr, - /*.cb_eval_user_data =*/ nullptr, - /*.type_k =*/ GGML_TYPE_F16, - /*.type_v =*/ GGML_TYPE_F16, - /*.logits_all =*/ false, - /*.embeddings =*/ false, - /*.offload_kqv =*/ true, - /*.abort_callback =*/ nullptr, - /*.abort_callback_data =*/ nullptr, - }; - - return result; -} - -struct llama_model_quantize_params llama_model_quantize_default_params() { - struct llama_model_quantize_params result = { - /*.nthread =*/ 0, - /*.ftype =*/ LLAMA_FTYPE_MOSTLY_Q5_1, - /*.output_tensor_type =*/ GGML_TYPE_COUNT, - /*.token_embedding_type =*/ GGML_TYPE_COUNT, - /*.allow_requantize =*/ false, - /*.quantize_output_tensor =*/ true, - /*.only_copy =*/ false, - /*.pure =*/ false, - /*.keep_split =*/ false, - /*.imatrix =*/ nullptr, - /*.kv_overrides =*/ nullptr, - }; - - return result; -} - -size_t llama_max_devices(void) { -#if defined(GGML_USE_METAL) - return 1; -#elif defined(GGML_USE_CUDA) - return GGML_CUDA_MAX_DEVICES; -#elif defined(GGML_USE_SYCL) - return GGML_SYCL_MAX_DEVICES; -#elif defined(GGML_USE_VULKAN) - return GGML_VK_MAX_DEVICES; -#else - return 1; -#endif -} - -bool llama_supports_mmap(void) { - return llama_mmap::SUPPORTED; -} - -bool llama_supports_mlock(void) { - return llama_mlock::SUPPORTED; -} - -bool llama_supports_gpu_offload(void) { -#if defined(GGML_USE_CUDA) || defined(GGML_USE_CLBLAST) || defined(GGML_USE_METAL) || defined(GGML_USE_VULKAN) || \ - defined(GGML_USE_SYCL) || defined(GGML_USE_KOMPUTE) - // Defined when llama.cpp is compiled with support for offloading model layers to GPU. - return isOpenCLSupported; -#else - return false; -#endif -} - -void llama_backend_init(void) { - ggml_time_init(); - - // needed to initialize f16 tables - { - struct ggml_init_params params = { 0, NULL, false }; - struct ggml_context * ctx = ggml_init(params); - ggml_free(ctx); - } - -#ifdef GGML_USE_MPI - ggml_mpi_backend_init(); -#endif -} - -void llama_numa_init(enum ggml_numa_strategy numa) { - if (numa != GGML_NUMA_STRATEGY_DISABLED) { - ggml_numa_init(numa); - } -} - -void llama_backend_free(void) { -#ifdef GGML_USE_MPI - ggml_mpi_backend_free(); -#endif - ggml_quantize_free(); -} - -int64_t llama_time_us(void) { - return ggml_time_us(); -} - -struct llama_model * llama_load_model_from_file( - const char * path_model, - struct llama_model_params params) { - ggml_time_init(); - - llama_model * model = new llama_model; - - unsigned cur_percentage = 0; - if (params.progress_callback == NULL) { - params.progress_callback_user_data = &cur_percentage; - params.progress_callback = [](float progress, void * ctx) { - unsigned * cur_percentage_p = (unsigned *) ctx; - unsigned percentage = (unsigned) (100 * progress); - while (percentage > *cur_percentage_p) { - *cur_percentage_p = percentage; - LLAMA_LOG_INFO("."); - if (percentage >= 100) { - LLAMA_LOG_INFO("\n"); - } - } - return true; - }; - } - - int status = llama_model_load(path_model, *model, params); - GGML_ASSERT(status <= 0); - if (status < 0) { - if (status == -1) { - LLAMA_LOG_ERROR("%s: failed to load model\n", __func__); - } else if (status == -2) { - LLAMA_LOG_INFO("%s: cancelled model load\n", __func__); - } - delete model; - return nullptr; - } - - return model; -} - -void llama_free_model(struct llama_model * model) { - delete model; -} - -struct llama_context * llama_new_context_with_model( - struct llama_model * model, - struct llama_context_params params) { - - if (!model) { - LLAMA_LOG_ERROR("%s: model cannot be NULL\n", __func__); - return nullptr; - } - - if (params.n_batch == 0 && params.n_ubatch == 0) { - LLAMA_LOG_ERROR("%s: n_batch and n_ubatch cannot both be zero\n", __func__); - return nullptr; - } - - if (params.n_ctx == 0 && model->hparams.n_ctx_train == 0) { - LLAMA_LOG_ERROR("%s: n_ctx and model->hparams.n_ctx_train cannot both be zero\n", __func__); - return nullptr; - } - - llama_context * ctx = new llama_context(*model); - - const auto & hparams = model->hparams; - auto & cparams = ctx->cparams; - - cparams.n_seq_max = std::max(1u, params.n_seq_max); - cparams.n_threads = params.n_threads; - cparams.n_threads_batch = params.n_threads_batch; - cparams.yarn_ext_factor = params.yarn_ext_factor; - cparams.yarn_attn_factor = params.yarn_attn_factor; - cparams.yarn_beta_fast = params.yarn_beta_fast; - cparams.yarn_beta_slow = params.yarn_beta_slow; - cparams.defrag_thold = params.defrag_thold; - cparams.embeddings = params.embeddings; - cparams.offload_kqv = params.offload_kqv; - cparams.pooling_type = params.pooling_type; - - cparams.n_ctx = params.n_ctx == 0 ? hparams.n_ctx_train : params.n_ctx; - cparams.rope_freq_base = params.rope_freq_base == 0.0f ? hparams.rope_freq_base_train : params.rope_freq_base; - cparams.rope_freq_scale = params.rope_freq_scale == 0.0f ? hparams.rope_freq_scale_train : params.rope_freq_scale; - - // this is necessary due to kv_self.n being padded later during inference - cparams.n_ctx = GGML_PAD(cparams.n_ctx, 32); - - // with causal attention, the batch size is limited by the context size - cparams.n_batch = hparams.causal_attn ? std::min(cparams.n_ctx, params.n_batch) : params.n_batch; - cparams.n_ubatch = std::min(cparams.n_batch, params.n_ubatch == 0 ? params.n_batch : params.n_ubatch); - - - cparams.n_yarn_orig_ctx = params.yarn_orig_ctx != 0 ? params.yarn_orig_ctx : - hparams.n_yarn_orig_ctx != 0 ? hparams.n_yarn_orig_ctx : - hparams.n_ctx_train; - - cparams.cb_eval = params.cb_eval; - cparams.cb_eval_user_data = params.cb_eval_user_data; - - auto rope_scaling_type = params.rope_scaling_type; - if (rope_scaling_type == LLAMA_ROPE_SCALING_TYPE_UNSPECIFIED) { - rope_scaling_type = hparams.rope_scaling_type_train; - } - - if (rope_scaling_type == LLAMA_ROPE_SCALING_TYPE_NONE) { - cparams.rope_freq_scale = 1.0f; // never scale if scaling type is none - } - - if (cparams.yarn_ext_factor < 0.0f) { // negative indicates 'not set' - cparams.yarn_ext_factor = rope_scaling_type == LLAMA_ROPE_SCALING_TYPE_YARN ? 1.0f : 0.0f; - } - - cparams.causal_attn = hparams.causal_attn; - - if (cparams.pooling_type == LLAMA_POOLING_TYPE_UNSPECIFIED) { - if (hparams.pooling_type == LLAMA_POOLING_TYPE_UNSPECIFIED) { - cparams.pooling_type = LLAMA_POOLING_TYPE_NONE; - } else { - cparams.pooling_type = hparams.pooling_type; - } - } - - if (params.seed == LLAMA_DEFAULT_SEED) { - params.seed = time(NULL); - } - - LLAMA_LOG_INFO("%s: n_ctx = %u\n", __func__, cparams.n_ctx); - LLAMA_LOG_INFO("%s: n_batch = %u\n", __func__, cparams.n_batch); - LLAMA_LOG_INFO("%s: n_ubatch = %u\n", __func__, cparams.n_ubatch); - LLAMA_LOG_INFO("%s: freq_base = %.1f\n", __func__, cparams.rope_freq_base); - LLAMA_LOG_INFO("%s: freq_scale = %g\n", __func__, cparams.rope_freq_scale); - - ctx->abort_callback = params.abort_callback; - ctx->abort_callback_data = params.abort_callback_data; - - ctx->rng = std::mt19937(params.seed); - ctx->logits_all = params.logits_all; - - uint32_t kv_size = cparams.n_ctx; - ggml_type type_k = params.type_k; - ggml_type type_v = params.type_v; - - // Mamba only needs a constant number of KV cache cells per sequence - if (model->arch == LLM_ARCH_MAMBA) { - // Mamba needs at least as many KV cells as there are sequences kept at any time - kv_size = std::max((uint32_t) 1, params.n_seq_max); - // it's probably best to keep as much precision as possible for the states - type_k = GGML_TYPE_F32; // required by ggml_ssm_conv for Mamba's conv_states - type_v = GGML_TYPE_F32; // required by ggml_ssm_scan for Mamba's ssm_states - } - - GGML_ASSERT(hparams.n_embd_head_k % ggml_blck_size(type_k) == 0); - GGML_ASSERT(hparams.n_embd_head_v % ggml_blck_size(type_v) == 0); - - if (!hparams.vocab_only) { - // initialize backends -#ifdef GGML_USE_METAL - if (model->n_gpu_layers > 0) { - ctx->backend_metal = ggml_backend_metal_init(); - if (ctx->backend_metal == nullptr) { - LLAMA_LOG_ERROR("%s: failed to initialize Metal backend\n", __func__); - llama_free(ctx); - return nullptr; - } - ctx->backends.push_back(ctx->backend_metal); - } -#elif defined(GGML_USE_CUDA) - if (model->split_mode == LLAMA_SPLIT_MODE_NONE || model->split_mode == LLAMA_SPLIT_MODE_ROW) { - // with split_mode LLAMA_SPLIT_MODE_NONE or LLAMA_SPLIT_MODE_ROW, only the main GPU backend is used - ggml_backend_t backend = ggml_backend_cuda_init(model->main_gpu); - if (backend == nullptr) { - LLAMA_LOG_ERROR("%s: failed to initialize CUDA%d backend\n", __func__, model->main_gpu); - llama_free(ctx); - return nullptr; - } - ctx->backends.push_back(backend); - } else { - // LLAMA_SPLIT_MODE_LAYER requires a backend for each GPU - for (int device = 0; device < ggml_backend_cuda_get_device_count(); ++device) { - ggml_backend_t backend = ggml_backend_cuda_init(device); - if (backend == nullptr) { - LLAMA_LOG_ERROR("%s: failed to initialize CUDA%d backend\n", __func__, device); - llama_free(ctx); - return nullptr; - } - ctx->backends.push_back(backend); - } - } -#elif defined(GGML_USE_VULKAN) - if (model->split_mode == LLAMA_SPLIT_MODE_ROW) { - LLAMA_LOG_ERROR("%s: Row split not supported. Failed to initialize Vulkan backend\n", __func__); - llama_free(ctx); - return nullptr; - } - if (model->split_mode == LLAMA_SPLIT_MODE_NONE) { - ggml_backend_t backend = ggml_backend_vk_init(0); - if (backend == nullptr) { - LLAMA_LOG_ERROR("%s: failed to initialize Vulkan backend\n", __func__); - llama_free(ctx); - return nullptr; - } - ctx->backends.push_back(backend); - } else { - for (int device = 0; device < ggml_backend_vk_get_device_count(); ++device) { - ggml_backend_t backend = ggml_backend_vk_init(device); - if (backend == nullptr) { - LLAMA_LOG_ERROR("%s: failed to initialize Vulkan%d backend\n", __func__, device); - llama_free(ctx); - return nullptr; - } - ctx->backends.push_back(backend); - } - } -#elif defined(GGML_USE_SYCL) - // with split_mode LLAMA_SPLIT_MODE_NONE or LLAMA_SPLIT_MODE_ROW, only the main GPU backend is used - if (model->split_mode == LLAMA_SPLIT_MODE_NONE || model->split_mode == LLAMA_SPLIT_MODE_ROW) { - ggml_backend_t backend = ggml_backend_sycl_init(model->main_gpu); - if (backend == nullptr) { - int main_gpu_id = ggml_backend_sycl_get_device_id(model->main_gpu); - LLAMA_LOG_ERROR("%s: failed to initialize SYCL%d (index %d) backend\n", __func__, main_gpu_id, model->main_gpu); - llama_free(ctx); - return nullptr; - } - ctx->backends.push_back(backend); - } else { - // LLAMA_SPLIT_LAYER requires a backend for each GPU - for (int i = 0; i < ggml_backend_sycl_get_device_count(); ++i) { - ggml_backend_t backend = ggml_backend_sycl_init(i); - if (backend == nullptr) { - int id_list[GGML_SYCL_MAX_DEVICES]; - ggml_sycl_get_gpu_list(id_list, GGML_SYCL_MAX_DEVICES); - LLAMA_LOG_ERROR("%s: failed to initialize SYCL%d (index %d) backend\n", __func__, id_list[i], i); - llama_free(ctx); - return nullptr; - } - ctx->backends.push_back(backend); - } - } -#elif defined(GGML_USE_KOMPUTE) - if (model->n_gpu_layers > 0) { - auto * backend = ggml_backend_kompute_init(model->main_gpu); - if (backend == nullptr) { - LLAMA_LOG_ERROR("%s: failed to initialize Kompute backend\n", __func__); - llama_free(ctx); - return nullptr; - } - ctx->backends.push_back(backend); - } -#endif - ctx->backend_cpu = ggml_backend_cpu_init(); - if (ctx->backend_cpu == nullptr) { - LLAMA_LOG_ERROR("%s: failed to initialize CPU backend\n", __func__); - llama_free(ctx); - return nullptr; - } - ctx->backends.push_back(ctx->backend_cpu); - - if (!llama_kv_cache_init(ctx->kv_self, ctx->model, type_k, type_v, kv_size, cparams.offload_kqv)) { - LLAMA_LOG_ERROR("%s: llama_kv_cache_init() failed for self-attention cache\n", __func__); - llama_free(ctx); - return nullptr; - } - - { - size_t memory_size_k = 0; - size_t memory_size_v = 0; - - for (auto & k : ctx->kv_self.k_l) { - memory_size_k += ggml_nbytes(k); - } - - for (auto & v : ctx->kv_self.v_l) { - memory_size_v += ggml_nbytes(v); - } - - LLAMA_LOG_INFO("%s: KV self size = %7.2f MiB, K (%s): %7.2f MiB, V (%s): %7.2f MiB\n", __func__, - (float)(memory_size_k + memory_size_v) / (1024.0f * 1024.0f), - ggml_type_name(type_k), (float)memory_size_k / (1024.0f * 1024.0f), - ggml_type_name(type_v), (float)memory_size_v / (1024.0f * 1024.0f)); - } - - // graph outputs buffer - { - // resized during inference when a batch uses more outputs - if (llama_output_reserve(*ctx, params.n_seq_max) < params.n_seq_max) { - LLAMA_LOG_ERROR("%s: failed to reserve initial output buffer\n", __func__); - llama_free(ctx); - return nullptr; - } - - LLAMA_LOG_INFO("%s: %10s output buffer size = %8.2f MiB\n", __func__, - ggml_backend_buffer_name(ctx->buf_output), - ggml_backend_buffer_get_size(ctx->buf_output) / 1024.0 / 1024.0); - } - - // scheduler and compute buffers - { - // buffer types used for the compute buffer of each backend - std::vector backend_buft; - for (auto * backend : ctx->backends) { - if (ggml_backend_is_cpu(backend)) { - // use host buffers for the CPU backend compute buffer - backend_buft.push_back(llama_default_buffer_type_cpu(true)); - } else { - backend_buft.push_back(ggml_backend_get_default_buffer_type(backend)); - } - } - - // buffer used to store the computation graph and the tensor meta data - ctx->buf_compute_meta.resize(ggml_tensor_overhead()*LLAMA_MAX_NODES + ggml_graph_overhead_custom(LLAMA_MAX_NODES, false)); - - // enabling pipeline parallelism in the scheduler increases memory usage, so it is only done when necessary - bool pipeline_parallel = llama_get_device_count() > 1 && model->n_gpu_layers > (int)model->hparams.n_layer && model->split_mode == LLAMA_SPLIT_MODE_LAYER; -#ifndef GGML_USE_CUDA - // pipeline parallelism requires support for async compute and events - // currently this is only implemented in the CUDA backend - pipeline_parallel = false; -#endif - ctx->sched = ggml_backend_sched_new(ctx->backends.data(), backend_buft.data(), ctx->backends.size(), LLAMA_MAX_NODES, pipeline_parallel); - - if (pipeline_parallel) { - LLAMA_LOG_INFO("%s: pipeline parallelism enabled (n_copies=%d)\n", __func__, ggml_backend_sched_get_n_copies(ctx->sched)); - } - - // build worst-case graph - int n_tokens = (int)std::min(cparams.n_ctx, cparams.n_ubatch); - int n_past = cparams.n_ctx - n_tokens; - llama_token token = llama_token_bos(&ctx->model); // not actually used by llama_build_graph, but required to choose between token and embedding inputs graph - ggml_cgraph * gf = llama_build_graph(*ctx, llama_batch_get_one(&token, n_tokens, n_past, 0), true); - - // initialize scheduler with the worst-case graph - if (!ggml_backend_sched_reserve(ctx->sched, gf)) { - LLAMA_LOG_ERROR("%s: failed to allocate compute buffers\n", __func__); - llama_free(ctx); - return nullptr; - } - - for (size_t i = 0; i < ctx->backends.size(); i++) { - ggml_backend_t backend = ctx->backends[i]; - ggml_backend_buffer_type_t buft = backend_buft[i]; - size_t size = ggml_backend_sched_get_buffer_size(ctx->sched, backend); - if (size > 1) { - LLAMA_LOG_INFO("%s: %10s compute buffer size = %8.2f MiB\n", __func__, - ggml_backend_buft_name(buft), - size / 1024.0 / 1024.0); - } - } - - // note: the number of splits during measure is higher than during inference due to the kv shift - int n_splits = ggml_backend_sched_get_n_splits(ctx->sched); - LLAMA_LOG_INFO("%s: graph nodes = %d\n", __func__, gf->n_nodes); - LLAMA_LOG_INFO("%s: graph splits = %d\n", __func__, n_splits); - } - } - -#ifdef GGML_USE_MPI - ctx->ctx_mpi = ggml_mpi_init(); - - if (ggml_mpi_rank(ctx->ctx_mpi) > 0) { - // Enter a blocking eval loop with dummy input, letting rank=0 drive the process - // TODO: needs fix after #3228 - GGML_ASSERT(false && "not implemented"); - //const std::vector tmp(ctx->model.hparams.n_ctx, llama_token_bos(ctx)); - //while (!llama_eval(ctx, tmp.data(), tmp.size(), 0, 0)) {}; - llama_backend_free(); - exit(1); - } -#endif - - return ctx; -} - -void llama_free(struct llama_context * ctx) { - delete ctx; -} - -const llama_model * llama_get_model(const struct llama_context * ctx) { - return &ctx->model; -} - -uint32_t llama_n_ctx(const struct llama_context * ctx) { - return ctx->cparams.n_ctx; -} - -uint32_t llama_n_batch(const struct llama_context * ctx) { - return ctx->cparams.n_batch; -} - -uint32_t llama_n_ubatch(const struct llama_context * ctx) { - return ctx->cparams.n_ubatch; -} - -uint32_t llama_n_seq_max(const struct llama_context * ctx) { - return ctx->kv_self.size; -} - -enum llama_vocab_type llama_vocab_type(const struct llama_model * model) { - return model->vocab.type; -} - -enum llama_rope_type llama_rope_type(const struct llama_model * model) { - switch (model->arch) { - // these models do not use RoPE - case LLM_ARCH_GPT2: - case LLM_ARCH_GPTJ: - case LLM_ARCH_GPTNEOX: - case LLM_ARCH_MPT: - case LLM_ARCH_REFACT: - case LLM_ARCH_BLOOM: - case LLM_ARCH_MAMBA: - return LLAMA_ROPE_TYPE_NONE; - - // use what we call a normal RoPE, operating on pairs of consecutive head values - case LLM_ARCH_LLAMA: - case LLM_ARCH_BAICHUAN: - case LLM_ARCH_STARCODER: - case LLM_ARCH_PLAMO: - case LLM_ARCH_CODESHELL: - case LLM_ARCH_ORION: - case LLM_ARCH_INTERNLM2: - case LLM_ARCH_MINICPM: - case LLM_ARCH_XVERSE: - case LLM_ARCH_COMMAND_R: - case LLM_ARCH_OLMO: - return LLAMA_ROPE_TYPE_NORM; - - // the pairs of head values are offset by n_rot/2 - case LLM_ARCH_FALCON: - case LLM_ARCH_GROK: - case LLM_ARCH_DBRX: - case LLM_ARCH_PERSIMMON: - case LLM_ARCH_BERT: - case LLM_ARCH_NOMIC_BERT: - case LLM_ARCH_STABLELM: - case LLM_ARCH_QWEN: - case LLM_ARCH_QWEN2: - case LLM_ARCH_QWEN2MOE: - case LLM_ARCH_PHI2: - case LLM_ARCH_PHI3: - case LLM_ARCH_GEMMA: - case LLM_ARCH_STARCODER2: - return LLAMA_ROPE_TYPE_NEOX; - - // all model arches should be listed explicitly here - case LLM_ARCH_UNKNOWN: - GGML_ASSERT(false && "unknown architecture"); - break; - } - - return LLAMA_ROPE_TYPE_NONE; -} - -enum llama_pooling_type llama_pooling_type(const struct llama_context * ctx) { - return ctx->cparams.pooling_type; -} - -int32_t llama_n_vocab(const struct llama_model * model) { - return model->hparams.n_vocab; -} - -int32_t llama_n_ctx_train(const struct llama_model * model) { - return model->hparams.n_ctx_train; -} - -int32_t llama_n_embd(const struct llama_model * model) { - return model->hparams.n_embd; -} - -int32_t llama_n_layer(const struct llama_model * model) { - return model->hparams.n_layer; -} - -float llama_rope_freq_scale_train(const struct llama_model * model) { - return model->hparams.rope_freq_scale_train; -} - -int32_t llama_model_meta_val_str(const struct llama_model * model, const char * key, char * buf, size_t buf_size) { - const auto & it = model->gguf_kv.find(key); - if (it == model->gguf_kv.end()) { - if (buf_size > 0) { - buf[0] = '\0'; - } - return -1; - } - return snprintf(buf, buf_size, "%s", it->second.c_str()); -} - -int32_t llama_model_meta_count(const struct llama_model * model) { - return (int)model->gguf_kv.size(); -} - -int32_t llama_model_meta_key_by_index(const struct llama_model * model, int i, char * buf, size_t buf_size) { - if (i < 0 || i >= (int)model->gguf_kv.size()) { - if (buf_size > 0) { - buf[0] = '\0'; - } - return -1; - } - auto it = model->gguf_kv.begin(); - std::advance(it, i); - return snprintf(buf, buf_size, "%s", it->first.c_str()); -} - -int32_t llama_model_meta_val_str_by_index(const struct llama_model * model, int32_t i, char * buf, size_t buf_size) { - if (i < 0 || i >= (int)model->gguf_kv.size()) { - if (buf_size > 0) { - buf[0] = '\0'; - } - return -1; - } - auto it = model->gguf_kv.begin(); - std::advance(it, i); - return snprintf(buf, buf_size, "%s", it->second.c_str()); -} - -int32_t llama_model_desc(const struct llama_model * model, char * buf, size_t buf_size) { - return snprintf(buf, buf_size, "%s %s %s", - llama_model_arch_name(model->arch), - llama_model_type_name(model->type), - llama_model_ftype_name(model->ftype).c_str()); -} - -uint64_t llama_model_size(const struct llama_model * model) { - uint64_t size = 0; - for (const auto & it : model->tensors_by_name) { - size += ggml_nbytes(it.second); - } - return size; -} - -uint64_t llama_model_n_params(const struct llama_model * model) { - uint64_t nparams = 0; - for (const auto & it : model->tensors_by_name) { - nparams += ggml_nelements(it.second); - } - return nparams; -} - -struct ggml_tensor * llama_get_model_tensor(struct llama_model * model, const char * name) { - auto it = std::find_if(model->tensors_by_name.begin(), model->tensors_by_name.end(), - [name](const std::pair & it) { - return it.first == name; - }); - if (it == model->tensors_by_name.end()) { - return nullptr; - } - return it->second; -} - -uint32_t llama_model_quantize( - const char * fname_inp, - const char * fname_out, - const llama_model_quantize_params * params) { - try { - llama_model_quantize_internal(fname_inp, fname_out, params); - return 0; - } catch (const std::exception & err) { - LLAMA_LOG_ERROR("%s: failed to quantize: %s\n", __func__, err.what()); - return 1; - } -} - -int32_t llama_model_apply_lora_from_file(const struct llama_model * model, const char * path_lora, float scale, const char * path_base_model, int32_t n_threads) { - try { - return llama_apply_lora_from_file_internal(*model, path_lora, scale, path_base_model, n_threads); - } catch (const std::exception & err) { - LLAMA_LOG_ERROR("%s: failed to apply lora adapter: %s\n", __func__, err.what()); - return 1; - } -} - -static bool llama_control_vector_init(struct llama_control_vector & cvec, const llama_model & model) { - GGML_ASSERT(cvec.tensors.empty()); - GGML_ASSERT(cvec.ctxs.empty()); - GGML_ASSERT(cvec.bufs.empty()); - - // count layer buffer types - std::map buft_layer_count; - for (int64_t i = 0; i < model.hparams.n_layer; i++) { - buft_layer_count[model.buft_layer[i].buft]++; - } - - // allocate contexts - std::map ctx_map; - for (auto & it : buft_layer_count) { - int n_layers = it.second; - struct ggml_init_params params = { - /*.mem_size =*/ n_layers * ggml_tensor_overhead(), - /*.mem_buffer =*/ NULL, - /*.no_alloc =*/ true, - }; - ggml_context * ctx = ggml_init(params); - if (!ctx) { - LLAMA_LOG_ERROR("%s: failed to allocate context for control vector\n", __func__); - return 1; - } - ctx_map[it.first] = ctx; - } - - // make tensors - cvec.tensors.push_back(nullptr); // there's never a tensor for layer 0 - for (size_t il = 1; il < model.hparams.n_layer; il++) { - struct ggml_context * ctx = ctx_map.at(model.buft_layer[il].buft); - ggml_tensor * tensor = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, model.hparams.n_embd); - cvec.tensors.push_back(tensor); - } - - // allocate tensors / buffers and zero - for (auto it : ctx_map) { - ggml_backend_buffer_type_t buft = it.first; - ggml_context * ctx = it.second; - ggml_backend_buffer_t buf = ggml_backend_alloc_ctx_tensors_from_buft(ctx, buft); - if (!buf) { - LLAMA_LOG_ERROR("%s: failed to allocate buffer for control vector\n", __func__); - return false; - } - ggml_backend_buffer_clear(buf, 0); - cvec.ctxs.push_back(ctx); - cvec.bufs.push_back(buf); - } - - return true; -} - -int32_t llama_control_vector_apply(struct llama_context * lctx, const float * data, size_t len, int32_t n_embd, int32_t il_start, int32_t il_end) { - const llama_model & model = lctx->model; - llama_control_vector & cvec = lctx->cvec; - - if (data == nullptr) { - // disable the current control vector (but leave allocated for later) - cvec.layer_start = -1; - cvec.layer_end = -1; - return 0; - } - - if (n_embd != (int) model.hparams.n_embd) { - LLAMA_LOG_ERROR("%s: control vector n_embd does not match model\n", __func__); - return 1; - } - - if (cvec.tensors.empty()) { - if (!llama_control_vector_init(cvec, model)) { - return 1; - } - } - - cvec.layer_start = il_start; - cvec.layer_end = il_end; - - for (size_t il = 1; il < model.hparams.n_layer; il++) { - assert(cvec.tensors[il] != nullptr); - - const size_t off = n_embd * (il - 1); // buffer doesn't have data for layer 0, since it's never present - if (off + n_embd <= len) { - ggml_backend_tensor_set(cvec.tensors[il], data + off, 0, n_embd * ggml_element_size(cvec.tensors[il])); - } - } - - return 0; -} - -struct llama_kv_cache_view llama_kv_cache_view_init(const struct llama_context * ctx, int32_t n_seq_max) { - struct llama_kv_cache_view result = { - /*.n_cells = */ 0, - /*.n_seq_max = */ n_seq_max, - /*.token_count = */ 0, - /*.used_cells = */ llama_get_kv_cache_used_cells(ctx), - /*.max_contiguous = */ 0, - /*.max_contiguous_idx = */ -1, - /*.cells = */ nullptr, - /*.cells_sequences = */ nullptr, - }; - return result; -} - -void llama_kv_cache_view_free(struct llama_kv_cache_view * view) { - if (view->cells != nullptr) { - free(view->cells); - view->cells = nullptr; - } - if (view->cells_sequences != nullptr) { - free(view->cells_sequences); - view->cells_sequences = nullptr; - } -} - -void llama_kv_cache_view_update(const struct llama_context * ctx, struct llama_kv_cache_view * view) { - if (uint32_t(view->n_cells) < ctx->kv_self.size || view->cells == nullptr) { - view->n_cells = int32_t(ctx->kv_self.size); - void * p = realloc(view->cells, sizeof(struct llama_kv_cache_view_cell) * view->n_cells); - GGML_ASSERT(p != nullptr && "Failed to alloc kv_cache_view cells"); - view->cells = (struct llama_kv_cache_view_cell *)p; - p = realloc(view->cells_sequences, sizeof(llama_seq_id) * view->n_seq_max * view->n_cells); - GGML_ASSERT(p != nullptr && "Failed to alloc kv_cache_view cells sequences"); - view->cells_sequences = (llama_seq_id *)p; - } - - const std::vector & kv_cells = ctx->kv_self.cells; - llama_kv_cache_view_cell * c_curr = view->cells; - llama_seq_id * cs_curr = view->cells_sequences; - int32_t used_cells = 0; - int32_t token_count = 0; - int32_t curr_contig_idx = -1; - uint32_t max_contig = 0; - int32_t max_contig_idx = -1; - - for (int32_t i = 0; i < int32_t(ctx->kv_self.size); i++, c_curr++, cs_curr += view->n_seq_max) { - const size_t curr_size = kv_cells[i].seq_id.size(); - token_count += curr_size; - c_curr->pos = kv_cells[i].pos + kv_cells[i].delta; - - if (curr_size > 0) { - if (curr_contig_idx >= 0 && uint32_t(i - curr_contig_idx) > max_contig) { - max_contig = i - curr_contig_idx; - max_contig_idx = curr_contig_idx; - } - curr_contig_idx = -1; - } else if (curr_contig_idx < 0) { - curr_contig_idx = i; - } - - int seq_idx = 0; - for (const llama_seq_id it : kv_cells[i].seq_id) { - if (seq_idx >= view->n_seq_max) { - break; - } - cs_curr[seq_idx] = it; - seq_idx++; - } - if (seq_idx != 0) { - used_cells++; - } - for (; seq_idx < view->n_seq_max; seq_idx++) { - cs_curr[seq_idx] = -1; - } - } - if (curr_contig_idx >= 0 && kv_cells.size() - curr_contig_idx > max_contig) { - max_contig_idx = curr_contig_idx; - max_contig = kv_cells.size() - curr_contig_idx; - } - view->max_contiguous = max_contig; - view->max_contiguous_idx = max_contig_idx; - view->token_count = token_count; - view->used_cells = used_cells; - if (uint32_t(used_cells) != ctx->kv_self.used) { - LLAMA_LOG_ERROR("%s: used cells mismatch. kv_cache says %d but we calculated %d\n", - __func__, ctx->kv_self.used, used_cells); - } -} - -int32_t llama_get_kv_cache_token_count(const struct llama_context * ctx) { - int result = 0; - - for (uint32_t i = 0; i < ctx->kv_self.size; i++) { - result += ctx->kv_self.cells[i].seq_id.size(); - } - - return result; -} - -int32_t llama_get_kv_cache_used_cells(const struct llama_context * ctx) { - return ctx->kv_self.used; -} - -void llama_kv_cache_clear(struct llama_context * ctx) { - llama_kv_cache_clear(ctx->kv_self); -} - -bool llama_kv_cache_seq_rm(struct llama_context * ctx, llama_seq_id seq_id, llama_pos p0, llama_pos p1) { - return llama_kv_cache_seq_rm(ctx->kv_self, seq_id, p0, p1); -} - -void llama_kv_cache_seq_cp(struct llama_context * ctx, llama_seq_id seq_id_src, llama_seq_id seq_id_dst, llama_pos p0, llama_pos p1) { - if (seq_id_src == seq_id_dst) { - return; - } - llama_kv_cache_seq_cp(ctx->kv_self, seq_id_src, seq_id_dst, p0, p1); -} - -void llama_kv_cache_seq_keep(struct llama_context * ctx, llama_seq_id seq_id) { - llama_kv_cache_seq_keep(ctx->kv_self, seq_id); -} - -void llama_kv_cache_seq_add(struct llama_context * ctx, llama_seq_id seq_id, llama_pos p0, llama_pos p1, llama_pos delta) { - if (delta == 0) { - return; - } - - llama_kv_cache_seq_add(ctx->kv_self, seq_id, p0, p1, delta); -} - -void llama_kv_cache_seq_div(struct llama_context * ctx, llama_seq_id seq_id, llama_pos p0, llama_pos p1, int d) { - if (d == 1) { - return; - } - - llama_kv_cache_seq_div(ctx->kv_self, seq_id, p0, p1, d); -} - -llama_pos llama_kv_cache_seq_pos_max(struct llama_context * ctx, llama_seq_id seq_id) { - return llama_kv_cache_seq_pos_max(ctx->kv_self, seq_id); -} - -void llama_kv_cache_defrag(struct llama_context * ctx) { - llama_kv_cache_defrag(ctx->kv_self); -} - -void llama_kv_cache_update(struct llama_context * ctx) { - llama_kv_cache_update_internal(*ctx); -} - -// deprecated -size_t llama_get_state_size(const struct llama_context * ctx) { - return llama_state_get_size(ctx); -} - -// deprecated -size_t llama_copy_state_data(struct llama_context * ctx, uint8_t * dst) { - return llama_state_get_data(ctx, dst); -} - -// deprecated -size_t llama_set_state_data(struct llama_context * ctx, const uint8_t * src) { - return llama_state_set_data(ctx, src); -} - -// deprecated -bool llama_load_session_file(struct llama_context * ctx, const char * path_session, llama_token * tokens_out, size_t n_token_capacity, size_t * n_token_count_out) { - return llama_state_load_file(ctx, path_session, tokens_out, n_token_capacity, n_token_count_out); -} - -// deprecated -bool llama_save_session_file(struct llama_context * ctx, const char * path_session, const llama_token * tokens, size_t n_token_count) { - return llama_state_save_file(ctx, path_session, tokens, n_token_count); -} - -// Returns the *maximum* size of the state -size_t llama_state_get_size(const struct llama_context * ctx) { - const auto & cparams = ctx->cparams; - const auto & hparams = ctx->model.hparams; - - // we don't know size of rng until we actually serialize it. so reserve more than enough memory for its serialized state. - // for reference, std::mt19937(1337) serializes to 6701 bytes. - const size_t s_rng_size = sizeof(size_t); - const size_t s_rng = LLAMA_MAX_RNG_STATE; - const size_t s_n_outputs = sizeof(size_t); - // assume worst case for outputs although only currently set ones are serialized - const size_t s_output_pos = ctx->cparams.n_batch * sizeof(int32_t); - const size_t s_logits_size = sizeof(size_t); - const size_t s_logits = ctx->logits_size ? cparams.n_batch * hparams.n_vocab * sizeof(float) : 0; - const size_t s_embedding_size = sizeof(size_t); - const size_t s_embedding = ctx->embd_size ? cparams.n_batch * hparams.n_embd * sizeof(float) : 0; - const size_t s_kv_buf_size = sizeof(size_t); - const size_t s_kv_head = sizeof(uint32_t); - const size_t s_kv_size = sizeof(uint32_t); - const size_t s_kv_used = sizeof(uint32_t); - const size_t s_kv = ctx->kv_self.total_size(); - const size_t s_kv_cell = sizeof(llama_pos) + sizeof(size_t) + cparams.n_seq_max*sizeof(llama_seq_id); - const size_t s_kv_cells = ctx->kv_self.size * s_kv_cell; - - const size_t s_total = ( - + s_rng_size - + s_rng - + s_n_outputs - + s_output_pos - + s_logits_size - + s_logits - + s_embedding_size - + s_embedding - + s_kv_buf_size - + s_kv_head - + s_kv_size - + s_kv_used - + s_kv - + s_kv_cells - ); - - return s_total; -} - -// llama_context_data -struct llama_data_context { - virtual void write(const void * src, size_t size) = 0; - virtual size_t get_size_written() = 0; - virtual ~llama_data_context() = default; -}; - -struct llama_data_buffer_context : llama_data_context { - uint8_t * ptr; - size_t size_written = 0; - - llama_data_buffer_context(uint8_t * p) : ptr(p) {} - - void write(const void * src, size_t size) override { - memcpy(ptr, src, size); - ptr += size; - size_written += size; - } - - size_t get_size_written() override { - return size_written; - } -}; - -struct llama_data_file_context : llama_data_context { - llama_file * file; - size_t size_written = 0; - - llama_data_file_context(llama_file * f) : file(f) {} - - void write(const void * src, size_t size) override { - file->write_raw(src, size); - size_written += size; - } - - size_t get_size_written() override { - return size_written; - } -}; - -/** copy state data into either a buffer or file depending on the passed in context - * - * file context: - * llama_file file("/path", "wb"); - * llama_data_file_context data_ctx(&file); - * llama_state_get_data(ctx, &data_ctx); - * - * buffer context: - * std::vector buf(max_size, 0); - * llama_data_buffer_context data_ctx(&buf.data()); - * llama_state_get_data(ctx, &data_ctx); - * -*/ -static void llama_state_get_data_internal(struct llama_context * ctx, llama_data_context * data_ctx) { - llama_synchronize(ctx); - - // copy rng - { - std::ostringstream rng_ss; - rng_ss << ctx->rng; - - const std::string & rng_str = rng_ss.str(); - const size_t rng_size = rng_str.size(); - - GGML_ASSERT(rng_size <= LLAMA_MAX_RNG_STATE); - - data_ctx->write(&rng_size, sizeof(rng_size)); - data_ctx->write(rng_str.data(), rng_size); - } - - // copy outputs - { - // Can't use ctx->n_outputs because it's not for the - // entire last batch when n_ubatch is smaller than n_batch - size_t n_outputs = 0; - - // copy output ids - { - std::vector output_pos; - - const size_t n_batch = ctx->cparams.n_batch; - const auto & output_ids = ctx->output_ids; - - output_pos.resize(ctx->output_size); - - // build a more compact representation of the output ids - for (size_t i = 0; i < n_batch; ++i) { - // map an output id to a position in the batch - int32_t pos = output_ids[i]; - if (pos >= 0) { - if ((size_t) pos >= n_outputs) { - n_outputs = pos + 1; - } - GGML_ASSERT((size_t) pos < ctx->output_size); - output_pos[pos] = i; - } - } - - data_ctx->write(&n_outputs, sizeof(n_outputs)); - - if (n_outputs) { - data_ctx->write(output_pos.data(), n_outputs * sizeof(int32_t)); - } - } - - // copy logits - { - const size_t logits_size = std::min(ctx->logits_size, n_outputs * ctx->model.hparams.n_vocab); - - data_ctx->write(&logits_size, sizeof(logits_size)); - - if (logits_size) { - data_ctx->write(ctx->logits, logits_size * sizeof(float)); - } - } - - // copy embeddings - { - const size_t embeddings_size = std::min(ctx->embd_size, n_outputs * ctx->model.hparams.n_embd); - - data_ctx->write(&embeddings_size, sizeof(embeddings_size)); - - if (embeddings_size) { - data_ctx->write(ctx->embd, embeddings_size * sizeof(float)); - } - } - } - - // copy kv cache - { - const auto & kv_self = ctx->kv_self; - const auto & hparams = ctx->model.hparams; - - const uint32_t n_layer = hparams.n_layer; - const uint32_t n_embd_k_gqa = hparams.n_embd_k_gqa() + hparams.n_embd_k_s(); - const uint32_t n_embd_v_gqa = hparams.n_embd_v_gqa() + hparams.n_embd_v_s(); - - // NOTE: kv_size and kv_buf_size are mostly used for sanity checks - const uint32_t kv_head = llama_kv_cache_cell_max(kv_self); - const uint32_t kv_size = kv_self.size; - const size_t kv_buf_size = kv_self.total_size() / (kv_size ? kv_size : 1) * kv_head; - const uint32_t kv_used = kv_self.used; - - data_ctx->write(&kv_buf_size, sizeof(kv_buf_size)); - data_ctx->write(&kv_head, sizeof(kv_head)); - data_ctx->write(&kv_size, sizeof(kv_size)); - data_ctx->write(&kv_used, sizeof(kv_used)); - - if (kv_buf_size) { - const size_t pre_kv_buf_size = data_ctx->get_size_written(); - - std::vector tmp_buf; - for (int il = 0; il < (int) n_layer; ++il) { - const size_t k_size = ggml_row_size(kv_self.k_l[il]->type, n_embd_k_gqa*kv_head); - - tmp_buf.resize(k_size); - ggml_backend_tensor_get(kv_self.k_l[il], tmp_buf.data(), 0, tmp_buf.size()); - data_ctx->write(tmp_buf.data(), tmp_buf.size()); - - if (kv_self.recurrent) { - // v is contiguous for recurrent models - // TODO: use other tensors for state models than k and v - const size_t v_size = ggml_row_size(kv_self.v_l[il]->type, n_embd_v_gqa*kv_head); - - tmp_buf.resize(v_size); - ggml_backend_tensor_get(kv_self.v_l[il], tmp_buf.data(), 0, tmp_buf.size()); - data_ctx->write(tmp_buf.data(), tmp_buf.size()); - continue; - } - - // v is not contiguous, copy row by row - const size_t v_row_size = ggml_row_size(kv_self.v_l[il]->type, kv_head); - const size_t v_row_stride = ggml_row_size(kv_self.v_l[il]->type, kv_size); - - tmp_buf.resize(v_row_size); - for (int ir = 0; ir < (int) n_embd_v_gqa; ++ir) { - ggml_backend_tensor_get(kv_self.v_l[il], tmp_buf.data(), ir*v_row_stride, tmp_buf.size()); - data_ctx->write(tmp_buf.data(), tmp_buf.size()); - } - } - GGML_ASSERT(kv_buf_size == data_ctx->get_size_written() - pre_kv_buf_size); - } - - for (uint32_t i = 0; i < kv_head; ++i) { - const auto & cell = kv_self.cells[i]; - - const llama_pos pos = cell.pos; - const size_t seq_id_size = cell.seq_id.size(); - - data_ctx->write(&pos, sizeof(pos)); - data_ctx->write(&seq_id_size, sizeof(seq_id_size)); - - for (auto seq_id : cell.seq_id) { - data_ctx->write(&seq_id, sizeof(seq_id)); - } - } - } -} - -size_t llama_state_get_data(struct llama_context * ctx, uint8_t * dst) { - llama_data_buffer_context data_ctx(dst); - llama_state_get_data_internal(ctx, &data_ctx); - - return data_ctx.get_size_written(); -} - -// Sets the state reading from the specified source address -size_t llama_state_set_data(struct llama_context * ctx, const uint8_t * src) { - llama_synchronize(ctx); - - const uint8_t * inp = src; - - // set rng - { - size_t rng_size; - memcpy(&rng_size, inp, sizeof(rng_size)); inp += sizeof(rng_size); - - GGML_ASSERT(rng_size <= LLAMA_MAX_RNG_STATE); - - std::string rng_str((const char *)inp, rng_size); inp += rng_size; - - std::istringstream rng_ss(rng_str); - rng_ss >> ctx->rng; - - GGML_ASSERT(!rng_ss.fail()); - } - - // set output ids - { - size_t n_outputs; - std::vector output_pos; - - memcpy(&n_outputs, inp, sizeof(n_outputs)); inp += sizeof(n_outputs); - - GGML_ASSERT(n_outputs <= llama_output_reserve(*ctx, n_outputs)); - - if (n_outputs) { - output_pos.resize(n_outputs); - memcpy(output_pos.data(), inp, n_outputs * sizeof(int32_t)); - inp += n_outputs * sizeof(int32_t); - - for (int32_t i = 0; i < (int32_t) output_pos.size(); ++i) { - int32_t id = output_pos[i]; - GGML_ASSERT((uint32_t) id < ctx->cparams.n_batch); - ctx->output_ids[id] = i; - } - - ctx->n_outputs = n_outputs; - } - } - - // set logits - { - size_t logits_size; - - memcpy(&logits_size, inp, sizeof(logits_size)); inp += sizeof(logits_size); - - GGML_ASSERT(ctx->logits_size >= logits_size); - - if (logits_size) { - memcpy(ctx->logits, inp, logits_size * sizeof(float)); - inp += logits_size * sizeof(float); - } - } - - // set embeddings - { - size_t embeddings_size; - - memcpy(&embeddings_size, inp, sizeof(embeddings_size)); inp += sizeof(embeddings_size); - - GGML_ASSERT(ctx->embd_size >= embeddings_size); - - if (embeddings_size) { - memcpy(ctx->embd, inp, embeddings_size * sizeof(float)); - inp += embeddings_size * sizeof(float); - } - } - - // set kv cache - { - const auto & kv_self = ctx->kv_self; - const auto & hparams = ctx->model.hparams; - - const uint32_t n_layer = hparams.n_layer; - const uint32_t n_embd_k_gqa = hparams.n_embd_k_gqa() + hparams.n_embd_k_s(); - const uint32_t n_embd_v_gqa = hparams.n_embd_v_gqa() + hparams.n_embd_v_s(); - - size_t kv_buf_size; - uint32_t kv_head; - uint32_t kv_size; - uint32_t kv_used; - - memcpy(&kv_buf_size, inp, sizeof(kv_buf_size)); inp += sizeof(kv_buf_size); - memcpy(&kv_head, inp, sizeof(kv_head)); inp += sizeof(kv_head); - memcpy(&kv_size, inp, sizeof(kv_size)); inp += sizeof(kv_size); - memcpy(&kv_used, inp, sizeof(kv_used)); inp += sizeof(kv_used); - - if (kv_self.size != kv_size) { - // the KV cache needs to be big enough to load all the KV cells from the saved state - GGML_ASSERT(kv_self.size >= kv_head); - - LLAMA_LOG_INFO("%s: state contains %d KV cells, was saved with kv_size=%d, but is loaded with kv_size=%d (fine, but different)\n", - __func__, kv_head, kv_size, kv_self.size); - } - - if (kv_buf_size) { - const size_t pre_kv_buf_size = inp - src; - - GGML_ASSERT(kv_self.total_size() >= kv_buf_size); - - for (int il = 0; il < (int) n_layer; ++il) { - const size_t k_size = ggml_row_size(kv_self.k_l[il]->type, n_embd_k_gqa*kv_head); - - ggml_backend_tensor_set(kv_self.k_l[il], inp, 0, k_size); - inp += k_size; - - if (kv_self.recurrent) { - // v is contiguous for recurrent models - // TODO: use other tensors for state models than k and v - const size_t v_size = ggml_row_size(kv_self.v_l[il]->type, n_embd_v_gqa*kv_head); - - ggml_backend_tensor_set(kv_self.v_l[il], inp, 0, v_size); - inp += v_size; - continue; - } - - // v is not contiguous, copy row by row - const size_t v_row_size = ggml_row_size(kv_self.v_l[il]->type, kv_head); - const size_t v_row_stride = ggml_row_size(kv_self.v_l[il]->type, kv_self.size); - - for (int ir = 0; ir < (int) n_embd_v_gqa; ++ir) { - ggml_backend_tensor_set(kv_self.v_l[il], inp, ir*v_row_stride, v_row_size); - inp += v_row_size; - } - } - GGML_ASSERT(kv_buf_size == inp - src - pre_kv_buf_size); - } - - llama_kv_cache_clear(ctx); - - ctx->kv_self.head = kv_head; - ctx->kv_self.used = kv_used; - - for (uint32_t i = 0; i < kv_head; ++i) { - llama_pos pos; - size_t seq_id_size; - - memcpy(&pos, inp, sizeof(pos)); inp += sizeof(pos); - memcpy(&seq_id_size, inp, sizeof(seq_id_size)); inp += sizeof(seq_id_size); - - ctx->kv_self.cells[i].pos = pos; - - llama_seq_id seq_id; - - for (size_t j = 0; j < seq_id_size; ++j) { - memcpy(&seq_id, inp, sizeof(seq_id)); inp += sizeof(seq_id); - ctx->kv_self.cells[i].seq_id.insert(seq_id); - } - } - } - - const size_t nread = inp - src; - const size_t max_size = llama_state_get_size(ctx); - - GGML_ASSERT(nread <= max_size); - - return nread; -} - -static bool llama_state_load_file_internal(struct llama_context * ctx, const char * path_session, llama_token * tokens_out, size_t n_token_capacity, size_t * n_token_count_out) { - llama_file file(path_session, "rb"); - - // sanity checks - { - const uint32_t magic = file.read_u32(); - const uint32_t version = file.read_u32(); - - if (magic != LLAMA_SESSION_MAGIC || version != LLAMA_SESSION_VERSION) { - LLAMA_LOG_ERROR("%s : unknown (magic, version) for session file: %08x, %08x\n", __func__, magic, version); - return false; - } - - llama_hparams session_hparams; - file.read_raw(&session_hparams, sizeof(llama_hparams)); - - if (session_hparams != ctx->model.hparams) { - LLAMA_LOG_INFO("%s : model hparams didn't match from session file!\n", __func__); - return false; - } - } - - // load the prompt - { - const uint32_t n_token_count = file.read_u32(); - - if (n_token_count > n_token_capacity) { - LLAMA_LOG_ERROR("%s : token count in session file exceeded capacity! %u > %zu\n", __func__, n_token_count, n_token_capacity); - return false; - } - - file.read_raw(tokens_out, sizeof(llama_token) * n_token_count); - *n_token_count_out = n_token_count; - } - - // restore the context state - { - const size_t n_state_size_cur = file.size - file.tell(); - const size_t n_state_size_max = llama_state_get_size(ctx); - - if (n_state_size_cur > n_state_size_max) { - LLAMA_LOG_ERROR("%s : the state size in session file is too big! max %zu, got %zu\n", __func__, n_state_size_max, n_state_size_cur); - return false; - } - - std::vector state_data(n_state_size_max); - file.read_raw(state_data.data(), n_state_size_cur); - - llama_state_set_data(ctx, state_data.data()); - } - - return true; -} - -bool llama_state_load_file(struct llama_context * ctx, const char * path_session, llama_token * tokens_out, size_t n_token_capacity, size_t * n_token_count_out) { - try { - return llama_state_load_file_internal(ctx, path_session, tokens_out, n_token_capacity, n_token_count_out); - } catch (const std::exception & err) { - LLAMA_LOG_ERROR("error loading session file: %s\n", err.what()); - return false; - } -} - -static bool llama_state_save_file_internal(struct llama_context * ctx, const char * path_session, const llama_token * tokens, size_t n_token_count) { - llama_file file(path_session, "wb"); - - file.write_u32(LLAMA_SESSION_MAGIC); - file.write_u32(LLAMA_SESSION_VERSION); - - file.write_raw(&ctx->model.hparams, sizeof(llama_hparams)); - - // save the prompt - file.write_u32((uint32_t) n_token_count); - file.write_raw(tokens, sizeof(llama_token) * n_token_count); - - // save the context state using stream saving - llama_data_file_context data_ctx(&file); - llama_state_get_data_internal(ctx, &data_ctx); - - return true; -} - -bool llama_state_save_file(struct llama_context * ctx, const char * path_session, const llama_token * tokens, size_t n_token_count) { - try { - return llama_state_save_file_internal(ctx, path_session, tokens, n_token_count); - } catch (const std::exception & err) { - LLAMA_LOG_ERROR("error saving session file: %s\n", err.what()); - return false; - } -} - -size_t llama_state_seq_get_size(struct llama_context* ctx, llama_seq_id seq_id) { - // save the size of size_t as a uint32_t for safety check - const size_t size_t_size_size = sizeof(uint32_t); - - // other values - const size_t s_cell_count_size = sizeof(uint32_t); - const size_t s_layer_count_size = sizeof(uint32_t); - const size_t n_embd_v_gqa_size = sizeof(uint32_t); - - size_t s_cell_count = 0; - size_t s_cell_data_size = 0; - const auto & kv_self = ctx->kv_self; - const auto & hparams = ctx->model.hparams; - - const uint32_t n_layer = hparams.n_layer; - const uint32_t n_embd_k_gqa = hparams.n_embd_k_gqa() + hparams.n_embd_k_s(); - const uint32_t n_embd_v_gqa = hparams.n_embd_v_gqa() + hparams.n_embd_v_s(); - - for (uint32_t i = 0; i < kv_self.size; ++i) { - const auto & cell = kv_self.cells[i]; - if (cell.seq_id.count(seq_id) > 0) { - ++s_cell_count; - s_cell_data_size += sizeof(llama_pos); - } - } - - for (int il = 0; il < (int)n_layer; ++il) { - // types of keys and values - s_cell_data_size += sizeof(int32_t) * 2; - // k_size_row and v_size_el values of layer - s_cell_data_size += sizeof(size_t) * 2; - - // keys - const size_t k_size_row = ggml_row_size(kv_self.k_l[il]->type, n_embd_k_gqa); - s_cell_data_size += k_size_row * s_cell_count; - - // values (transposed) - const size_t v_size_el = ggml_type_size(kv_self.v_l[il]->type); - s_cell_data_size += v_size_el * s_cell_count * n_embd_v_gqa; - } - - const size_t s_total = ( - size_t_size_size + - s_cell_count_size + - s_layer_count_size + - n_embd_v_gqa_size + - s_cell_data_size - ); - - return s_total; -} - -static size_t llama_state_seq_get_data_internal(struct llama_context * ctx, llama_data_context & data_ctx, llama_seq_id seq_id) { - llama_synchronize(ctx); - - const auto & kv_self = ctx->kv_self; - GGML_ASSERT(!kv_self.recurrent); // not implemented - - // Save the size of size_t as a uint32_t for safety check - const uint32_t size_t_size = sizeof(size_t); - data_ctx.write(&size_t_size, sizeof(size_t_size)); - - std::vector> cell_ranges; // ranges, from inclusive, to exclusive - uint32_t cell_count = 0; - - // Count the number of cells with the specified seq_id - // Find all the ranges of cells with this seq id - { - uint32_t cell_range_begin = kv_self.size; - for (uint32_t i = 0; i < kv_self.size; ++i) { - const auto & cell = kv_self.cells[i]; - if (cell.has_seq_id(seq_id)) { - ++cell_count; - if (cell_range_begin == kv_self.size) { - cell_range_begin = i; - } - } - else { - if (cell_range_begin != kv_self.size) { - cell_ranges.push_back({ cell_range_begin, i }); - cell_range_begin = kv_self.size; - } - } - } - if (cell_range_begin != kv_self.size) { - cell_ranges.push_back({ cell_range_begin, kv_self.size }); - } - - // DEBUG CHECK: Sum of cell counts in ranges should equal the total cell count - uint32_t cell_count_check = 0; - for (const auto & range : cell_ranges) { - cell_count_check += range.second - range.first; - } - GGML_ASSERT(cell_count == cell_count_check); - } - - // Write the cell count - data_ctx.write(&cell_count, sizeof(cell_count)); - - const auto & hparams = ctx->model.hparams; - const uint32_t n_layer = hparams.n_layer; - const uint32_t n_embd_k_gqa = hparams.n_embd_k_gqa() + hparams.n_embd_k_s(); - const uint32_t n_embd_v_gqa = hparams.n_embd_v_gqa() + hparams.n_embd_v_s(); - - // Write the layer count - data_ctx.write(&n_layer, sizeof(n_layer)); - - // Write n_embd_v_gqa - data_ctx.write(&n_embd_v_gqa, sizeof(n_embd_v_gqa)); - - // Iterate the ranges and write all the pos (this is the token position in the prompt) - for (const auto & range : cell_ranges) { - for (uint32_t i = range.first; i < range.second; ++i) { - const auto & cell = kv_self.cells[i]; - data_ctx.write(&cell.pos, sizeof(cell.pos)); - } - } - - // Iterate and write all the keys first, each row is a cell - // Get whole range at a time - std::vector tmp_buf; - for (int il = 0; il < (int)n_layer; ++il) { - // Write key type - const int32_t k_type_i = (int32_t)kv_self.k_l[il]->type; - data_ctx.write(&k_type_i, sizeof(k_type_i)); - - // Write row size of key - const size_t k_size_row = ggml_row_size(kv_self.k_l[il]->type, n_embd_k_gqa); - data_ctx.write(&k_size_row, sizeof(k_size_row)); - - // Read each range of cells of k_size length each into tmp_buf and write out - for (const auto & range : cell_ranges) { - const size_t range_size = range.second - range.first; - tmp_buf.resize(range_size * k_size_row); - ggml_backend_tensor_get(kv_self.k_l[il], tmp_buf.data(), range.first * k_size_row, range_size * k_size_row); - data_ctx.write(tmp_buf.data(), tmp_buf.size()); - } - } - - // For the values, they are transposed, so we also need the element size and get the element ranges from each row - const uint32_t kv_size = kv_self.size; - for (int il = 0; il < (int)n_layer; ++il) { - // Write value type - const int32_t v_type_i = (int32_t)kv_self.v_l[il]->type; - data_ctx.write(&v_type_i, sizeof(v_type_i)); - - // Write element size - const size_t v_size_el = ggml_type_size(kv_self.v_l[il]->type); - data_ctx.write(&v_size_el, sizeof(v_size_el)); - - // For each row, we get the element values of each cell - for (uint32_t j = 0; j < n_embd_v_gqa; ++j) { - // Read each range of cells of v_size_el length each into tmp_buf and write out - for (const auto & range : cell_ranges) { - const size_t range_size = range.second - range.first; - const size_t src_offset = (range.first + j * kv_size) * v_size_el; - tmp_buf.resize(range_size * v_size_el); - ggml_backend_tensor_get(kv_self.v_l[il], tmp_buf.data(), src_offset, tmp_buf.size()); - data_ctx.write(tmp_buf.data(), tmp_buf.size()); - } - } - } - - return data_ctx.get_size_written(); -} - -size_t llama_state_seq_get_data(struct llama_context* ctx, uint8_t* dst, llama_seq_id seq_id) { - llama_data_buffer_context data_ctx(dst); - return llama_state_seq_get_data_internal(ctx, data_ctx, seq_id); -} - -size_t llama_state_seq_set_data(struct llama_context * ctx, const uint8_t * src, llama_seq_id dest_seq_id) { - llama_synchronize(ctx); - - auto & kv_self = ctx->kv_self; - GGML_ASSERT(!kv_self.recurrent); // not implemented - - // Wipe the slot - llama_kv_cache_seq_rm(kv_self, dest_seq_id, -1, -1); - - const uint8_t * inp = src; - - // Read size of size_t - uint32_t size_t_size; - memcpy(&size_t_size, inp, sizeof(size_t_size)); - inp += sizeof(size_t_size); - if (size_t_size != sizeof(size_t)) { - LLAMA_LOG_ERROR("%s: size_t size mismatch\n", __func__); - return 0; - } - - // Read the cell count - uint32_t cell_count; - memcpy(&cell_count, inp, sizeof(cell_count)); - inp += sizeof(cell_count); - - // Read the layer count - uint32_t n_layer_ref; - memcpy(&n_layer_ref, inp, sizeof(n_layer_ref)); - inp += sizeof(n_layer_ref); - - // Read n_embd_v_gqa - uint32_t n_embd_v_gqa_ref; - memcpy(&n_embd_v_gqa_ref, inp, sizeof(n_embd_v_gqa_ref)); - inp += sizeof(n_embd_v_gqa_ref); - - // Sanity check model compatibility - const auto & hparams = ctx->model.hparams; - const uint32_t n_layer = hparams.n_layer; - const uint32_t n_embd_k_gqa = hparams.n_embd_k_gqa() + hparams.n_embd_k_s(); - const uint32_t n_embd_v_gqa = hparams.n_embd_v_gqa() + hparams.n_embd_v_s(); - if (n_layer != n_layer_ref) { - LLAMA_LOG_ERROR("%s: mismatched n_layer (%d != %d)\n", __func__, n_layer, n_layer_ref); - return 0; - } - if (n_embd_v_gqa != n_embd_v_gqa_ref) { - LLAMA_LOG_ERROR("%s: mismatched n_embd_v_gqa (%d != %d)\n", __func__, n_embd_v_gqa, n_embd_v_gqa_ref); - return 0; - } - - // Allocate the new cells for the slot - if (cell_count) { - llama_batch batch = llama_batch_init(cell_count, 0, 1); - batch.n_tokens = cell_count; - for (uint32_t i = 0; i < cell_count; ++i) { - llama_pos pos; - memcpy(&pos, inp, sizeof(pos)); - inp += sizeof(pos); - - batch.pos[i] = pos; - batch.n_seq_id[i] = 1; - batch.seq_id[i][0] = dest_seq_id; - } - if (!llama_kv_cache_find_slot(kv_self, batch)) { - llama_batch_free(batch); - LLAMA_LOG_ERROR("%s: failed to find available cells in kv cache\n", __func__); - return 0; - } - - // DEBUG CHECK: kv_self.head should be our first cell, kv_self.head + cell_count - 1 should be our last cell (verify seq_id and pos values) - // Assume that this is one contiguous block of cells - GGML_ASSERT(kv_self.head + cell_count <= kv_self.size); - GGML_ASSERT(kv_self.cells[kv_self.head].pos == batch.pos[0]); - GGML_ASSERT(kv_self.cells[kv_self.head + cell_count - 1].pos == batch.pos[cell_count - 1]); - GGML_ASSERT(kv_self.cells[kv_self.head].has_seq_id(dest_seq_id)); - GGML_ASSERT(kv_self.cells[kv_self.head + cell_count - 1].has_seq_id(dest_seq_id)); - - // Cleanup - llama_batch_free(batch); - } - - const uint32_t kv_size = kv_self.size; - const uint32_t kv_head = kv_self.head; - - // For each layer, read the keys for each cell, one row is one cell, read as one contiguous blo - for (int il = 0; il < (int)n_layer; ++il) { - // Read type of key - int32_t k_type_i_ref; - memcpy(&k_type_i_ref, inp, sizeof(k_type_i_ref)); - inp += sizeof(k_type_i_ref); - const int32_t k_type_i = (int32_t)kv_self.k_l[il]->type; - if (k_type_i != k_type_i_ref) { - llama_kv_cache_seq_rm(kv_self, dest_seq_id, -1, -1); - LLAMA_LOG_ERROR("%s: mismatched key type (%d != %d, layer %d)\n", __func__, k_type_i, k_type_i_ref, il); - return 0; - } - - // Read row size of key - size_t k_size_row_ref; - memcpy(&k_size_row_ref, inp, sizeof(k_size_row_ref)); - inp += sizeof(k_size_row_ref); - const size_t k_size_row = ggml_row_size(kv_self.k_l[il]->type, n_embd_k_gqa); - if (k_size_row != k_size_row_ref) { - llama_kv_cache_seq_rm(kv_self, dest_seq_id, -1, -1); - LLAMA_LOG_ERROR("%s: mismatched key row size (%zu != %zu, layer %d)\n", __func__, k_size_row, k_size_row_ref, il); - return 0; - } - - if (cell_count) { - // Read and set the keys for the whole cell range - ggml_backend_tensor_set(kv_self.k_l[il], inp, kv_head * k_size_row, cell_count * k_size_row); - inp += cell_count * k_size_row; - } - } - - // For each layer, read the values for each cell (transposed) - for (int il = 0; il < (int)n_layer; ++il) { - // Read type of value - int32_t v_type_i_ref; - memcpy(&v_type_i_ref, inp, sizeof(v_type_i_ref)); - inp += sizeof(v_type_i_ref); - const int32_t v_type_i = (int32_t)kv_self.v_l[il]->type; - if (v_type_i != v_type_i_ref) { - llama_kv_cache_seq_rm(kv_self, dest_seq_id, -1, -1); - LLAMA_LOG_ERROR("%s: mismatched value type (%d != %d, layer %d)\n", __func__, v_type_i, v_type_i_ref, il); - return 0; - } - - // Read element size of value - size_t v_size_el_ref; - memcpy(&v_size_el_ref, inp, sizeof(v_size_el_ref)); - inp += sizeof(v_size_el_ref); - const size_t v_size_el = ggml_type_size(kv_self.v_l[il]->type); - if (v_size_el != v_size_el_ref) { - llama_kv_cache_seq_rm(kv_self, dest_seq_id, -1, -1); - LLAMA_LOG_ERROR("%s: mismatched value element size (%zu != %zu, layer %d)\n", __func__, v_size_el, v_size_el_ref, il); - return 0; - } - - if (cell_count) { - // For each row in the transposed matrix, read the values for the whole cell range - for (uint32_t j = 0; j < n_embd_v_gqa; ++j) { - const size_t dst_offset = (kv_head + j * kv_size) * v_size_el; - ggml_backend_tensor_set(kv_self.v_l[il], inp, dst_offset, cell_count * v_size_el); - inp += cell_count * v_size_el; - } - } - } - - const size_t nread = inp - src; - return nread; -} - -static size_t llama_state_seq_save_file_internal(struct llama_context * ctx, const char * filepath, llama_seq_id seq_id, const llama_token * tokens, size_t n_token_count) { - llama_file file(filepath, "wb"); - - file.write_u32(LLAMA_STATE_SEQ_MAGIC); - file.write_u32(LLAMA_STATE_SEQ_VERSION); - - // save the prompt - file.write_u32((uint32_t)n_token_count); - file.write_raw(tokens, sizeof(llama_token) * n_token_count); - - // save the context state using stream saving - llama_data_file_context data_ctx(&file); - llama_state_seq_get_data_internal(ctx, data_ctx, seq_id); - - const size_t res = file.tell(); - GGML_ASSERT(res == sizeof(uint32_t) * 3 + sizeof(llama_token) * n_token_count + data_ctx.get_size_written()); - return res; -} - -static size_t llama_state_seq_load_file_internal(struct llama_context * ctx, const char * filepath, llama_seq_id dest_seq_id, llama_token * tokens_out, size_t n_token_capacity, size_t * n_token_count_out) { - llama_file file(filepath, "rb"); - - // version checks - { - const uint32_t magic = file.read_u32(); - const uint32_t version = file.read_u32(); - - if (magic != LLAMA_STATE_SEQ_MAGIC || version != LLAMA_STATE_SEQ_VERSION) { - LLAMA_LOG_ERROR("%s: unknown (magic, version) for sequence state file: %08x, %08x\n", __func__, magic, version); - return 0; - } - } - - // load the prompt - { - const uint32_t n_token_count = file.read_u32(); - - if (n_token_count > n_token_capacity) { - LLAMA_LOG_ERROR("%s: token count in sequence state file exceeded capacity! %u > %zu\n", __func__, n_token_count, n_token_capacity); - return 0; - } - - file.read_raw(tokens_out, sizeof(llama_token) * n_token_count); - *n_token_count_out = n_token_count; - } - - // restore the context state - { - const size_t state_size = file.size - file.tell(); - std::vector state_data(state_size); - file.read_raw(state_data.data(), state_size); - const size_t nread = llama_state_seq_set_data(ctx, state_data.data(), dest_seq_id); - if (!nread) { - LLAMA_LOG_ERROR("%s: failed to restore sequence state\n", __func__); - return 0; - } - GGML_ASSERT(nread <= state_size); - GGML_ASSERT(nread + sizeof(uint32_t) * 3 + sizeof(llama_token) * *n_token_count_out == file.tell()); - } - - return file.tell(); -} - -size_t llama_state_seq_save_file(struct llama_context * ctx, const char * filepath, llama_seq_id seq_id, const llama_token * tokens, size_t n_token_count) { - try { - return llama_state_seq_save_file_internal(ctx, filepath, seq_id, tokens, n_token_count); - } catch (const std::exception & err) { - LLAMA_LOG_ERROR("error saving sequence state file: %s\n", err.what()); - return 0; - } -} - -size_t llama_state_seq_load_file(struct llama_context * ctx, const char * filepath, llama_seq_id dest_seq_id, llama_token * tokens_out, size_t n_token_capacity, size_t * n_token_count_out) { - try { - return llama_state_seq_load_file_internal(ctx, filepath, dest_seq_id, tokens_out, n_token_capacity, n_token_count_out); - } catch (const std::exception & err) { - LLAMA_LOG_ERROR("error loading sequence state file: %s\n", err.what()); - return 0; - } -} - -void llama_set_n_threads(struct llama_context * ctx, uint32_t n_threads, uint32_t n_threads_batch) { - ctx->cparams.n_threads = n_threads; - ctx->cparams.n_threads_batch = n_threads_batch; -} - -void llama_set_abort_callback(struct llama_context * ctx, bool (*abort_callback)(void * data), void * abort_callback_data) { - ctx->abort_callback = abort_callback; - ctx->abort_callback_data = abort_callback_data; -} - -void llama_set_causal_attn(struct llama_context * ctx, bool causal_attn) { - ctx->cparams.causal_attn = causal_attn; -} - -struct llama_batch llama_batch_get_one( - llama_token * tokens, - int32_t n_tokens, - llama_pos pos_0, - llama_seq_id seq_id) { - return { - /*n_tokens =*/ n_tokens, - /*tokens =*/ tokens, - /*embd =*/ nullptr, - /*pos =*/ nullptr, - /*n_seq_id =*/ nullptr, - /*seq_id =*/ nullptr, - /*logits =*/ nullptr, - /*all_pos_0 =*/ pos_0, - /*all_pos_1 =*/ 1, - /*all_seq_id =*/ seq_id, - }; -} - -struct llama_batch llama_batch_init(int32_t n_tokens_alloc, int32_t embd, int32_t n_seq_max) { - llama_batch batch = { 0, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, 0, 0, 0, }; - - if (embd) { - batch.embd = (float *) malloc(sizeof(float) * n_tokens_alloc * embd); - } else { - batch.token = (llama_token *) malloc(sizeof(llama_token) * n_tokens_alloc); - } - - batch.pos = (llama_pos *) malloc(sizeof(llama_pos) * n_tokens_alloc); - batch.n_seq_id = (int32_t *) malloc(sizeof(int32_t) * n_tokens_alloc); - batch.seq_id = (llama_seq_id **) malloc(sizeof(llama_seq_id *) * (n_tokens_alloc + 1)); - for (int i = 0; i < n_tokens_alloc; ++i) { - batch.seq_id[i] = (llama_seq_id *) malloc(sizeof(llama_seq_id) * n_seq_max); - } - batch.seq_id[n_tokens_alloc] = nullptr; - - batch.logits = (int8_t *) malloc(sizeof(int8_t) * n_tokens_alloc); - - return batch; -} - -void llama_batch_free(struct llama_batch batch) { - if (batch.token) free(batch.token); - if (batch.embd) free(batch.embd); - if (batch.pos) free(batch.pos); - if (batch.n_seq_id) free(batch.n_seq_id); - if (batch.seq_id) { - for (int i = 0; batch.seq_id[i] != nullptr; ++i) { - free(batch.seq_id[i]); - } - free(batch.seq_id); - } - if (batch.logits) free(batch.logits); -} - -int32_t llama_decode( - struct llama_context * ctx, - struct llama_batch batch) { - const int ret = llama_decode_internal(*ctx, batch); - if (ret < 0) { - LLAMA_LOG_ERROR("%s: failed to decode, ret = %d\n", __func__, ret); - } - - return ret; -} - -void llama_synchronize(struct llama_context * ctx) { - ggml_backend_sched_synchronize(ctx->sched); - - // FIXME: if multiple single tokens are evaluated without a synchronization, - // the stats will be added to the prompt evaluation stats - // this should only happen when using batch size 1 to evaluate a batch - - // add the evaluation to the stats - if (ctx->n_queued_tokens == 1) { - ctx->t_eval_us += ggml_time_us() - ctx->t_compute_start_us; - ctx->n_eval++; - } else if (ctx->n_queued_tokens > 1) { - ctx->t_p_eval_us += ggml_time_us() - ctx->t_compute_start_us; - ctx->n_p_eval += ctx->n_queued_tokens; - } - - // get a more accurate load time, upon first eval - if (ctx->n_queued_tokens > 0 && !ctx->has_evaluated_once) { - ctx->t_load_us = ggml_time_us() - ctx->t_start_us; - ctx->has_evaluated_once = true; - } - - ctx->n_queued_tokens = 0; - ctx->t_compute_start_us = 0; -} - -float * llama_get_logits(struct llama_context * ctx) { - llama_synchronize(ctx); - - return ctx->logits; -} - -float * llama_get_logits_ith(struct llama_context * ctx, int32_t i) { - int32_t j = -1; - llama_synchronize(ctx); - - try { - if (ctx->logits == nullptr) { - throw std::runtime_error("no logits"); - } - - if (i < 0) { - j = ctx->n_outputs + i; - if (j < 0) { - throw std::runtime_error(format("negative index out of range [0, %d)", ctx->n_outputs)); - } - } else if ((size_t) i >= ctx->output_ids.size()) { - throw std::runtime_error(format("out of range [0, %lu)", ctx->output_ids.size())); - } else { - j = ctx->output_ids[i]; - } - - if (j < 0) { - throw std::runtime_error(format("batch.logits[%d] != true", i)); - } - if (j >= ctx->n_outputs) { - // This should not happen - throw std::runtime_error(format("corrupt output buffer (j=%d, n_outputs=%d)", j, ctx->n_outputs)); - } - - return ctx->logits + j*ctx->model.hparams.n_vocab; - } catch (const std::exception & err) { - LLAMA_LOG_ERROR("%s: invalid logits id %d, reason: %s\n", __func__, i, err.what()); -#ifndef NDEBUG - GGML_ASSERT(false); -#endif - return nullptr; - } -} - -float * llama_get_embeddings(struct llama_context * ctx) { - llama_synchronize(ctx); - - return ctx->embd; -} - -float * llama_get_embeddings_ith(struct llama_context * ctx, int32_t i) { - int32_t j = -1; - - llama_synchronize(ctx); - - try { - if (ctx->embd == nullptr) { - throw std::runtime_error("no embeddings"); - } - - if (i < 0) { - j = ctx->n_outputs + i; - if (j < 0) { - throw std::runtime_error(format("negative index out of range [0, %d)", ctx->n_outputs)); - } - } else if ((size_t) i >= ctx->output_ids.size()) { - throw std::runtime_error(format("out of range [0, %lu)", ctx->output_ids.size())); - } else { - j = ctx->output_ids[i]; - } - - if (j < 0) { - throw std::runtime_error(format("batch.logits[%d] != true", i)); - } - if (j >= ctx->n_outputs) { - // This should not happen - throw std::runtime_error(format("corrupt output buffer (j=%d, n_outputs=%d)", j, ctx->n_outputs)); - } - - return ctx->embd + j*ctx->model.hparams.n_embd; - } catch (const std::exception & err) { - LLAMA_LOG_ERROR("%s: invalid embeddings id %d, reason: %s\n", __func__, i, err.what()); -#ifndef NDEBUG - GGML_ASSERT(false); -#endif - return nullptr; - } -} - -float * llama_get_embeddings_seq(struct llama_context * ctx, llama_seq_id seq_id) { - llama_synchronize(ctx); - - auto it = ctx->embd_seq.find(seq_id); - if (it == ctx->embd_seq.end()) { - return nullptr; - } - - return it->second.data(); -} - -const char * llama_token_get_text(const struct llama_model * model, llama_token token) { - GGML_ASSERT(model->vocab.type != LLAMA_VOCAB_TYPE_NONE); - return model->vocab.id_to_token[token].text.c_str(); -} - -float llama_token_get_score(const struct llama_model * model, llama_token token) { - GGML_ASSERT(model->vocab.type != LLAMA_VOCAB_TYPE_NONE); - return model->vocab.id_to_token[token].score; -} - -llama_token_type llama_token_get_type(const struct llama_model * model, llama_token token) { - GGML_ASSERT(model->vocab.type != LLAMA_VOCAB_TYPE_NONE); - return model->vocab.id_to_token[token].type; -} - -bool llama_token_is_eog(const struct llama_model * model, llama_token token) { - return token != -1 && ( - token == llama_token_eos(model) || - token == llama_token_eot(model) - ); -} - -llama_token llama_token_bos(const struct llama_model * model) { - return model->vocab.special_bos_id; -} - -llama_token llama_token_eos(const struct llama_model * model) { - return model->vocab.special_eos_id; -} - -llama_token llama_token_cls(const struct llama_model * model) { - return model->vocab.special_cls_id; -} - -llama_token llama_token_sep(const struct llama_model * model) { - return model->vocab.special_sep_id; -} - -llama_token llama_token_nl(const struct llama_model * model) { - return model->vocab.linefeed_id; -} - -int32_t llama_add_bos_token(const struct llama_model * model) { - return model->vocab.special_add_bos; -} - -int32_t llama_add_eos_token(const struct llama_model * model) { - return model->vocab.special_add_eos; -} - -llama_token llama_token_prefix(const struct llama_model * model) { - return model->vocab.special_prefix_id; -} - -llama_token llama_token_middle(const struct llama_model * model) { - return model->vocab.special_middle_id; -} - -llama_token llama_token_suffix(const struct llama_model * model) { - return model->vocab.special_suffix_id; -} - -llama_token llama_token_eot(const struct llama_model * model) { - return model->vocab.special_eot_id; -} - -int32_t llama_tokenize( - const struct llama_model * model, - const char * text, - int32_t text_len, - llama_token * tokens, - int32_t n_tokens_max, - bool add_special, - bool parse_special) { - auto res = llama_tokenize_internal(model->vocab, std::string(text, text_len), add_special, parse_special); - - if (n_tokens_max < (int) res.size()) { - // LLAMA_LOG_ERROR("%s: too many tokens\n", __func__); - return -((int) res.size()); - } - - for (size_t i = 0; i < res.size(); i++) { - tokens[i] = res[i]; - } - - return res.size(); -} - -static std::string llama_decode_text(const std::string & text) { - std::string decoded_text; - auto unicode_sequences = unicode_cpts_from_utf8(text); - for (auto & unicode_sequence : unicode_sequences) { - decoded_text += unicode_utf8_to_byte(unicode_cpt_to_utf8(unicode_sequence)); - } - - return decoded_text; -} - -// does not write null-terminator to buf -int32_t llama_token_to_piece(const struct llama_model * model, llama_token token, char * buf, int32_t length, bool special) { - if (0 <= token && token < llama_n_vocab(model)) { - switch (llama_vocab_get_type(model->vocab)) { - case LLAMA_VOCAB_TYPE_WPM: - case LLAMA_VOCAB_TYPE_SPM: { - // NOTE: we accept all unsupported token types, - // suppressing them like CONTROL tokens. - if (llama_is_normal_token(model->vocab, token)) { - std::string result = model->vocab.id_to_token[token].text; - llama_unescape_whitespace(result); - if (length < (int) result.length()) { - return -(int) result.length(); - } - memcpy(buf, result.c_str(), result.length()); - return result.length(); - } else if ( - (llama_is_user_defined_token(model->vocab, token)) || - (llama_is_control_token (model->vocab, token) && special)) { - std::string result = model->vocab.id_to_token[token].text; - if (length < (int) result.length()) { - return -(int) result.length(); - } - memcpy(buf, result.c_str(), result.length()); - return result.length(); - } else if (llama_is_unknown_token(model->vocab, token)) { // NOLINT - if (length < 3) { - return -3; - } - memcpy(buf, "\xe2\x96\x85", 3); - return 3; - } else if (llama_is_byte_token(model->vocab, token)) { - if (length < 1) { - return -1; - } - buf[0] = llama_token_to_byte(model->vocab, token); - return 1; - } - break; - } - case LLAMA_VOCAB_TYPE_BPE: { - // NOTE: we accept all unsupported token types, - // suppressing them like CONTROL tokens. - if (llama_is_normal_token(model->vocab, token)) { - std::string result = model->vocab.id_to_token[token].text; - result = llama_decode_text(result); - if (length < (int) result.length()) { - return -(int) result.length(); - } - memcpy(buf, result.c_str(), result.length()); - return result.length(); - } else if ( - (llama_is_user_defined_token(model->vocab, token)) || - (llama_is_control_token (model->vocab, token) && special)) { - std::string result = model->vocab.id_to_token[token].text; - if (length < (int) result.length()) { - return -(int) result.length(); - } - memcpy(buf, result.c_str(), result.length()); - return result.length(); - } - break; - } - default: - GGML_ASSERT(false); - } - } - return 0; -} - -// trim whitespace from the beginning and end of a string -static std::string trim(const std::string & str) { - size_t start = 0; - size_t end = str.size(); - while (start < end && isspace(str[start])) { - start += 1; - } - while (end > start && isspace(str[end - 1])) { - end -= 1; - } - return str.substr(start, end - start); -} - -// Simple version of "llama_apply_chat_template" that only works with strings -// This function uses heuristic checks to determine commonly used template. It is not a jinja parser. -static int32_t llama_chat_apply_template_internal( - const std::string & tmpl, - const std::vector & chat, - std::string & dest, bool add_ass) { - // Taken from the research: https://github.com/ggerganov/llama.cpp/issues/5527 - std::stringstream ss; - if (tmpl == "chatml" || tmpl.find("<|im_start|>") != std::string::npos) { - // chatml template - for (auto message : chat) { - ss << "<|im_start|>" << message->role << "\n" << message->content << "<|im_end|>\n"; - } - if (add_ass) { - ss << "<|im_start|>assistant\n"; - } - } else if (tmpl == "llama2" || tmpl.find("[INST]") != std::string::npos) { - // llama2 template and its variants - // [variant] support system message - bool support_system_message = tmpl.find("<>") != std::string::npos; - // [variant] space before + after response - bool space_around_response = tmpl.find("' ' + eos_token") != std::string::npos; - // [variant] add BOS inside history - bool add_bos_inside_history = tmpl.find("bos_token + '[INST]") != std::string::npos; - // [variant] trim spaces from the input message - bool strip_message = tmpl.find("content.strip()") != std::string::npos; - // construct the prompt - bool is_inside_turn = true; // skip BOS at the beginning - ss << "[INST] "; - for (auto message : chat) { - std::string content = strip_message ? trim(message->content) : message->content; - std::string role(message->role); - if (!is_inside_turn) { - is_inside_turn = true; - ss << (add_bos_inside_history ? "[INST] " : "[INST] "); - } - if (role == "system") { - if (support_system_message) { - ss << "<>\n" << content << "\n<>\n\n"; - } else { - // if the model does not support system message, we still include it in the first message, but without <> - ss << content << "\n"; - } - } else if (role == "user") { - ss << content << " [/INST]"; - } else { - ss << (space_around_response ? " " : "") << content << (space_around_response ? " " : "") << ""; - is_inside_turn = false; - } - } - // llama2 templates seem to not care about "add_generation_prompt" - } else if (tmpl == "zephyr" || tmpl.find("<|user|>") != std::string::npos) { - // zephyr template - for (auto message : chat) { - ss << "<|" << message->role << "|>" << "\n" << message->content << "<|endoftext|>\n"; - } - if (add_ass) { - ss << "<|assistant|>\n"; - } - } else if (tmpl == "monarch" || tmpl.find("bos_token + message['role']") != std::string::npos) { - // mlabonne/AlphaMonarch-7B template (the is included inside history) - for (auto message : chat) { - std::string bos = (message == chat.front()) ? "" : ""; // skip BOS for first message - ss << bos << message->role << "\n" << message->content << "\n"; - } - if (add_ass) { - ss << "assistant\n"; - } - } else if (tmpl == "gemma" || tmpl.find("") != std::string::npos) { - // google/gemma-7b-it - std::string system_prompt = ""; - for (auto message : chat) { - std::string role(message->role); - if (role == "system") { - // there is no system message for gemma, but we will merge it with user prompt, so nothing is broken - system_prompt = trim(message->content); - continue; - } - // in gemma, "assistant" is "model" - role = role == "assistant" ? "model" : message->role; - ss << "" << role << "\n"; - if (!system_prompt.empty() && role != "model") { - ss << system_prompt << "\n\n"; - system_prompt = ""; - } - ss << trim(message->content) << "\n"; - } - if (add_ass) { - ss << "model\n"; - } - } else if (tmpl == "orion" || tmpl.find("'\\n\\nAssistant: ' + eos_token") != std::string::npos) { - // OrionStarAI/Orion-14B-Chat - std::string system_prompt = ""; - for (auto message : chat) { - std::string role(message->role); - if (role == "system") { - // there is no system message support, we will merge it with user prompt - system_prompt = message->content; - continue; - } else if (role == "user") { - ss << "Human: "; - if (!system_prompt.empty()) { - ss << system_prompt << "\n\n"; - system_prompt = ""; - } - ss << message->content << "\n\nAssistant: "; - } else { - ss << message->content << ""; - } - } - } else if (tmpl == "openchat" || tmpl.find("GPT4 Correct ") != std::string::npos) { - // openchat/openchat-3.5-0106, - for (auto message : chat) { - std::string role(message->role); - if (role == "system") { - ss << message->content << "<|end_of_turn|>"; - } else { - role[0] = toupper(role[0]); - ss << "GPT4 Correct " << role << ": " << message->content << "<|end_of_turn|>"; - } - } - if (add_ass) { - ss << "GPT4 Correct Assistant:"; - } - } else if (tmpl == "vicuna" || tmpl == "vicuna-orca" || (tmpl.find("USER: ") != std::string::npos && tmpl.find("ASSISTANT: ") != std::string::npos)) { - // eachadea/vicuna-13b-1.1 (and Orca variant) - for (auto message : chat) { - std::string role(message->role); - if (role == "system") { - // Orca-Vicuna variant uses a system prefix - if (tmpl == "vicuna-orca" || tmpl.find("SYSTEM: ") != std::string::npos) { - ss << "SYSTEM: " << message->content << "\n"; - } else { - ss << message->content << "\n\n"; - } - } else if (role == "user") { - ss << "USER: " << message->content << "\n"; - } else if (role == "assistant") { - ss << "ASSISTANT: " << message->content << "\n"; - } - } - if (add_ass) { - ss << "ASSISTANT:"; - } - } else if (tmpl == "deepseek" || (tmpl.find("### Instruction:") != std::string::npos && tmpl.find("<|EOT|>") != std::string::npos)) { - // deepseek-ai/deepseek-coder-33b-instruct - for (auto message : chat) { - std::string role(message->role); - if (role == "system") { - ss << message->content; - } else if (role == "user") { - ss << "### Instruction:\n" << message->content << "\n"; - } else if (role == "assistant") { - ss << "### Response:\n" << message->content << "\n<|EOT|>\n"; - } - } - if (add_ass) { - ss << "### Response:\n"; - } - } else if (tmpl == "command-r" || (tmpl.find("<|START_OF_TURN_TOKEN|>") != std::string::npos && tmpl.find("<|USER_TOKEN|>") != std::string::npos)) { - // CohereForAI/c4ai-command-r-plus - for (auto message : chat) { - std::string role(message->role); - if (role == "system") { - ss << "<|START_OF_TURN_TOKEN|><|SYSTEM_TOKEN|>" << trim(message->content) << "<|END_OF_TURN_TOKEN|>"; - } else if (role == "user") { - ss << "<|START_OF_TURN_TOKEN|><|USER_TOKEN|>" << trim(message->content) << "<|END_OF_TURN_TOKEN|>"; - } else if (role == "assistant") { - ss << "<|START_OF_TURN_TOKEN|><|CHATBOT_TOKEN|>" << trim(message->content) << "<|END_OF_TURN_TOKEN|>"; - } - } - if (add_ass) { - ss << "<|START_OF_TURN_TOKEN|><|CHATBOT_TOKEN|>"; - } - } else if (tmpl == "llama3" || (tmpl.find("<|start_header_id|>") != std::string::npos && tmpl.find("<|end_header_id|>") != std::string::npos)) { - // Llama 3 - for (auto message : chat) { - std::string role(message->role); - ss << "<|start_header_id|>" << role << "<|end_header_id|>\n\n" << trim(message->content) << "<|eot_id|>"; - } - if (add_ass) { - ss << "<|start_header_id|>assistant<|end_header_id|>\n\n"; - } - } else if (tmpl == "phi3" || (tmpl.find("<|assistant|>") != std::string::npos && tmpl.find("<|end|>") != std::string::npos )) { - // Phi 3 - for (auto message : chat) { - std::string role(message->role); - ss << "<|" << role << "|>\n" << trim(message->content) << "<|end|>\n"; - } - if (add_ass) { - ss << "<|assistant|>\n"; - } - } else { - // template not supported - return -1; - } - dest = ss.str(); - return dest.size(); -} - -LLAMA_API int32_t llama_chat_apply_template( - const struct llama_model * model, - const char * tmpl, - const struct llama_chat_message * chat, - size_t n_msg, - bool add_ass, - char * buf, - int32_t length) { - std::string curr_tmpl(tmpl == nullptr ? "" : tmpl); - if (tmpl == nullptr) { - GGML_ASSERT(model != nullptr); - // load template from model - std::vector model_template(2048, 0); // longest known template is about 1200 bytes - std::string template_key = "tokenizer.chat_template"; - int32_t res = llama_model_meta_val_str(model, template_key.c_str(), model_template.data(), model_template.size()); - if (res < 0) { - // worst case: there is no information about template, we will use chatml by default - curr_tmpl = "chatml"; // see llama_chat_apply_template_internal - } else { - curr_tmpl = std::string(model_template.data(), model_template.size()); - } - } - - // format the chat to string - std::vector chat_vec; - chat_vec.resize(n_msg); - for (size_t i = 0; i < n_msg; i++) { - chat_vec[i] = &chat[i]; - } - - std::string formatted_chat; - int32_t res = llama_chat_apply_template_internal(curr_tmpl, chat_vec, formatted_chat, add_ass); - if (res < 0) { - return res; - } - if (buf && length > 0) { - strncpy(buf, formatted_chat.c_str(), length); - } - return res; -} - -LLAMA_API int llama_split_path(char * split_path, size_t maxlen, const char * path_prefix, int split_no, int split_count) { - static const char * const SPLIT_PATH_FORMAT = "%s-%05d-of-%05d.gguf"; - if (snprintf(split_path, maxlen, SPLIT_PATH_FORMAT, path_prefix, split_no + 1, split_count)) { - return strlen(split_path); - } - return 0; -} - -int llama_split_prefix(char * dest, size_t maxlen, const char * split_path, int split_no, int split_count) { - std::string str_split_path(split_path); - char postfix[32]; - snprintf(postfix, 32, "-%05d-of-%05d.gguf", split_no + 1, split_count); - std::string str_postfix(postfix); - - // check if dest ends with postfix - int size_prefix = str_split_path.size() - str_postfix.size(); - if (size_prefix > 0 && str_split_path.find(str_postfix, size_prefix) != std::string::npos) { - snprintf(dest, std::min((size_t) size_prefix + 1, maxlen), "%s", split_path); - return size_prefix; - } - - return 0; -} - -struct llama_timings llama_get_timings(struct llama_context * ctx) { - struct llama_timings result = { - /*.t_start_ms =*/ 1e-3 * ctx->t_start_us, - /*.t_end_ms =*/ 1.00 * ggml_time_ms(), - /*.t_load_ms =*/ 1e-3 * ctx->t_load_us, - /*.t_sample_ms =*/ 1e-3 * ctx->t_sample_us, - /*.t_p_eval_ms =*/ 1e-3 * ctx->t_p_eval_us, - /*.t_eval_ms =*/ 1e-3 * ctx->t_eval_us, - - /*.n_sample =*/ std::max(1, ctx->n_sample), - /*.n_p_eval =*/ std::max(1, ctx->n_p_eval), - /*.n_eval =*/ std::max(1, ctx->n_eval), - }; - - return result; -} - -void llama_print_timings(struct llama_context * ctx) { - const llama_timings timings = llama_get_timings(ctx); - - LLAMA_LOG_INFO("\n"); - LLAMA_LOG_INFO("%s: load time = %10.2f ms\n", __func__, timings.t_load_ms); - LLAMA_LOG_INFO("%s: sample time = %10.2f ms / %5d runs (%8.2f ms per token, %8.2f tokens per second)\n", - __func__, timings.t_sample_ms, timings.n_sample, timings.t_sample_ms / timings.n_sample, 1e3 / timings.t_sample_ms * timings.n_sample); - LLAMA_LOG_INFO("%s: prompt eval time = %10.2f ms / %5d tokens (%8.2f ms per token, %8.2f tokens per second)\n", - __func__, timings.t_p_eval_ms, timings.n_p_eval, timings.t_p_eval_ms / timings.n_p_eval, 1e3 / timings.t_p_eval_ms * timings.n_p_eval); - LLAMA_LOG_INFO("%s: eval time = %10.2f ms / %5d runs (%8.2f ms per token, %8.2f tokens per second)\n", - __func__, timings.t_eval_ms, timings.n_eval, timings.t_eval_ms / timings.n_eval, 1e3 / timings.t_eval_ms * timings.n_eval); - LLAMA_LOG_INFO("%s: total time = %10.2f ms / %5d tokens\n", __func__, (timings.t_end_ms - timings.t_start_ms), (timings.n_p_eval + timings.n_eval)); -} - -void llama_reset_timings(struct llama_context * ctx) { - ctx->t_start_us = ggml_time_us(); - ctx->t_sample_us = ctx->n_sample = 0; - ctx->t_eval_us = ctx->n_eval = 0; - ctx->t_p_eval_us = ctx->n_p_eval = 0; -} - -const char * llama_print_system_info(void) { - static std::string s; - - s = ""; - s += "AVX = " + std::to_string(ggml_cpu_has_avx()) + " | "; - s += "AVX_VNNI = " + std::to_string(ggml_cpu_has_avx_vnni()) + " | "; - s += "AVX2 = " + std::to_string(ggml_cpu_has_avx2()) + " | "; - s += "AVX512 = " + std::to_string(ggml_cpu_has_avx512()) + " | "; - s += "AVX512_VBMI = " + std::to_string(ggml_cpu_has_avx512_vbmi()) + " | "; - s += "AVX512_VNNI = " + std::to_string(ggml_cpu_has_avx512_vnni()) + " | "; - s += "FMA = " + std::to_string(ggml_cpu_has_fma()) + " | "; - s += "NEON = " + std::to_string(ggml_cpu_has_neon()) + " | "; - s += "ARM_FMA = " + std::to_string(ggml_cpu_has_arm_fma()) + " | "; - s += "F16C = " + std::to_string(ggml_cpu_has_f16c()) + " | "; - s += "FP16_VA = " + std::to_string(ggml_cpu_has_fp16_va()) + " | "; - s += "WASM_SIMD = " + std::to_string(ggml_cpu_has_wasm_simd()) + " | "; - s += "BLAS = " + std::to_string(ggml_cpu_has_blas()) + " | "; - s += "SSE3 = " + std::to_string(ggml_cpu_has_sse3()) + " | "; - s += "SSSE3 = " + std::to_string(ggml_cpu_has_ssse3()) + " | "; - s += "VSX = " + std::to_string(ggml_cpu_has_vsx()) + " | "; - s += "MATMUL_INT8 = " + std::to_string(ggml_cpu_has_matmul_int8()) + " | "; -#ifdef GGML_USE_LLAMAFILE - s += "LAMMAFILE = 1 | "; -#else - s += "LAMMAFILE = 0 | "; -#endif - - return s.c_str(); -} - -void llama_dump_timing_info_yaml(FILE * stream, const llama_context * ctx) { - fprintf(stream, "\n"); - fprintf(stream, "###########\n"); - fprintf(stream, "# Timings #\n"); - fprintf(stream, "###########\n"); - fprintf(stream, "\n"); - - fprintf(stream, "mst_eval: %.2f # ms / token during generation\n", - 1.0e-3 * ctx->t_eval_us / ctx->n_eval); - fprintf(stream, "mst_p_eval: %.2f # ms / token during prompt processing\n", - 1.0e-3 * ctx->t_p_eval_us / ctx->n_p_eval); - fprintf(stream, "mst_sample: %.2f # ms / token during sampling\n", - 1.0e-3 * ctx->t_sample_us / ctx->n_sample); - fprintf(stream, "n_eval: %d # number of tokens generated (excluding the first one)\n", ctx->n_eval); - fprintf(stream, "n_p_eval: %d # number of tokens processed in batches at the beginning\n", ctx->n_p_eval); - fprintf(stream, "n_sample: %d # number of sampled tokens\n", ctx->n_sample); - fprintf(stream, "t_eval_us: %" PRId64 " # total microseconds spent generating tokens\n", ctx->t_eval_us); - fprintf(stream, "t_load_us: %" PRId64 " # total microseconds spent loading the model\n", ctx->t_load_us); - fprintf(stream, "t_p_eval_us: %" PRId64 " # total microseconds spent prompt processing\n", ctx->t_p_eval_us); - fprintf(stream, "t_sample_us: %" PRId64 " # total microseconds spent sampling\n", ctx->t_sample_us); - fprintf(stream, "ts_eval: %.2f # tokens / second during generation\n", - 1.0e6 * ctx->n_eval / ctx->t_eval_us); - fprintf(stream, "ts_p_eval: %.2f # tokens / second during prompt processing\n", - 1.0e6 * ctx->n_p_eval / ctx->t_p_eval_us); - fprintf(stream, "ts_sample: %.2f # tokens / second during sampling\n", - 1.0e6 * ctx->n_sample / ctx->t_sample_us); -} - -// For internal test use -const std::vector> & llama_internal_get_tensor_map( - struct llama_context * ctx -) { - return ctx->model.tensors_by_name; -} - -void llama_log_set(ggml_log_callback log_callback, void * user_data) { - g_state.log_callback = log_callback ? log_callback : llama_log_callback_default; - g_state.log_callback_user_data = user_data; -#ifdef GGML_USE_METAL - ggml_backend_metal_log_set_callback(g_state.log_callback, g_state.log_callback_user_data); -#endif -} - -static void llama_log_internal_v(ggml_log_level level, const char * format, va_list args) { - va_list args_copy; - va_copy(args_copy, args); - char buffer[128]; - int len = vsnprintf(buffer, 128, format, args); - if (len < 128) { - g_state.log_callback(level, buffer, g_state.log_callback_user_data); - } else { - char* buffer2 = new char[len+1]; - vsnprintf(buffer2, len+1, format, args_copy); - buffer2[len] = 0; - g_state.log_callback(level, buffer2, g_state.log_callback_user_data); - delete[] buffer2; - } - va_end(args_copy); -} - -static void llama_log_internal(ggml_log_level level, const char * format, ...) { - va_list args; - va_start(args, format); - llama_log_internal_v(level, format, args); - va_end(args); -} - -static void llama_log_callback_default(ggml_log_level level, const char * text, void * user_data) { - (void) level; - (void) user_data; - fputs(text, stderr); - fflush(stderr); -} diff --git a/llama.h b/llama.h deleted file mode 100644 index 8b1b15ed4ad..00000000000 --- a/llama.h +++ /dev/null @@ -1,1130 +0,0 @@ -#ifndef LLAMA_H -#define LLAMA_H - -#include "ggml.h" -#include "ggml-backend.h" - -#include -#include -#include -#include - -#ifdef LLAMA_SHARED -# if defined(_WIN32) && !defined(__MINGW32__) -# ifdef LLAMA_BUILD -# define LLAMA_API __declspec(dllexport) -# else -# define LLAMA_API __declspec(dllimport) -# endif -# else -# define LLAMA_API __attribute__ ((visibility ("default"))) -# endif -#else -# define LLAMA_API -#endif - -#ifdef __GNUC__ -# define DEPRECATED(func, hint) func __attribute__((deprecated(hint))) -#elif defined(_MSC_VER) -# define DEPRECATED(func, hint) __declspec(deprecated(hint)) func -#else -# define DEPRECATED(func, hint) func -#endif - -#define LLAMA_DEFAULT_SEED 0xFFFFFFFF - -#define LLAMA_MAX_RNG_STATE (64*1024) - -#define LLAMA_FILE_MAGIC_GGLA 0x67676c61u // 'ggla' -#define LLAMA_FILE_MAGIC_GGSN 0x6767736eu // 'ggsn' -#define LLAMA_FILE_MAGIC_GGSQ 0x67677371u // 'ggsq' - -#define LLAMA_SESSION_MAGIC LLAMA_FILE_MAGIC_GGSN -#define LLAMA_SESSION_VERSION 5 - -#define LLAMA_STATE_SEQ_MAGIC LLAMA_FILE_MAGIC_GGSQ -#define LLAMA_STATE_SEQ_VERSION 1 - -#ifdef __cplusplus -extern "C" { -#endif - - // - // C interface - // - // TODO: show sample usage - // - - struct llama_model; - struct llama_context; - - typedef int32_t llama_pos; - typedef int32_t llama_token; - typedef int32_t llama_seq_id; - - enum llama_vocab_type { - LLAMA_VOCAB_TYPE_NONE = 0, // For models without vocab - LLAMA_VOCAB_TYPE_SPM = 1, // LLaMA tokenizer based on byte-level BPE with byte fallback - LLAMA_VOCAB_TYPE_BPE = 2, // GPT-2 tokenizer based on byte-level BPE - LLAMA_VOCAB_TYPE_WPM = 3, // BERT tokenizer based on WordPiece - }; - - // note: these values should be synchronized with ggml_rope - // TODO: maybe move this enum to ggml.h (ggml_rope_type) - enum llama_rope_type { - LLAMA_ROPE_TYPE_NONE = -1, - LLAMA_ROPE_TYPE_NORM = 0, - LLAMA_ROPE_TYPE_NEOX = 2, - LLAMA_ROPE_TYPE_GLM = 4, - }; - - enum llama_token_type { - LLAMA_TOKEN_TYPE_UNDEFINED = 0, - LLAMA_TOKEN_TYPE_NORMAL = 1, - LLAMA_TOKEN_TYPE_UNKNOWN = 2, - LLAMA_TOKEN_TYPE_CONTROL = 3, - LLAMA_TOKEN_TYPE_USER_DEFINED = 4, - LLAMA_TOKEN_TYPE_UNUSED = 5, - LLAMA_TOKEN_TYPE_BYTE = 6, - }; - - // model file types - enum llama_ftype { - LLAMA_FTYPE_ALL_F32 = 0, - LLAMA_FTYPE_MOSTLY_F16 = 1, // except 1d tensors - LLAMA_FTYPE_MOSTLY_Q4_0 = 2, // except 1d tensors - LLAMA_FTYPE_MOSTLY_Q4_1 = 3, // except 1d tensors - LLAMA_FTYPE_MOSTLY_Q4_1_SOME_F16 = 4, // tok_embeddings.weight and output.weight are F16 - // LLAMA_FTYPE_MOSTLY_Q4_2 = 5, // support has been removed - // LLAMA_FTYPE_MOSTLY_Q4_3 = 6, // support has been removed - LLAMA_FTYPE_MOSTLY_Q8_0 = 7, // except 1d tensors - LLAMA_FTYPE_MOSTLY_Q5_0 = 8, // except 1d tensors - LLAMA_FTYPE_MOSTLY_Q5_1 = 9, // except 1d tensors - LLAMA_FTYPE_MOSTLY_Q2_K = 10, // except 1d tensors - LLAMA_FTYPE_MOSTLY_Q3_K_S = 11, // except 1d tensors - LLAMA_FTYPE_MOSTLY_Q3_K_M = 12, // except 1d tensors - LLAMA_FTYPE_MOSTLY_Q3_K_L = 13, // except 1d tensors - LLAMA_FTYPE_MOSTLY_Q4_K_S = 14, // except 1d tensors - LLAMA_FTYPE_MOSTLY_Q4_K_M = 15, // except 1d tensors - LLAMA_FTYPE_MOSTLY_Q5_K_S = 16, // except 1d tensors - LLAMA_FTYPE_MOSTLY_Q5_K_M = 17, // except 1d tensors - LLAMA_FTYPE_MOSTLY_Q6_K = 18, // except 1d tensors - LLAMA_FTYPE_MOSTLY_IQ2_XXS = 19, // except 1d tensors - LLAMA_FTYPE_MOSTLY_IQ2_XS = 20, // except 1d tensors - LLAMA_FTYPE_MOSTLY_Q2_K_S = 21, // except 1d tensors - LLAMA_FTYPE_MOSTLY_IQ3_XS = 22, // except 1d tensors - LLAMA_FTYPE_MOSTLY_IQ3_XXS = 23, // except 1d tensors - LLAMA_FTYPE_MOSTLY_IQ1_S = 24, // except 1d tensors - LLAMA_FTYPE_MOSTLY_IQ4_NL = 25, // except 1d tensors - LLAMA_FTYPE_MOSTLY_IQ3_S = 26, // except 1d tensors - LLAMA_FTYPE_MOSTLY_IQ3_M = 27, // except 1d tensors - LLAMA_FTYPE_MOSTLY_IQ2_S = 28, // except 1d tensors - LLAMA_FTYPE_MOSTLY_IQ2_M = 29, // except 1d tensors - LLAMA_FTYPE_MOSTLY_IQ4_XS = 30, // except 1d tensors - LLAMA_FTYPE_MOSTLY_IQ1_M = 31, // except 1d tensors - - LLAMA_FTYPE_GUESSED = 1024, // not specified in the model file - }; - - enum llama_rope_scaling_type { - LLAMA_ROPE_SCALING_TYPE_UNSPECIFIED = -1, - LLAMA_ROPE_SCALING_TYPE_NONE = 0, - LLAMA_ROPE_SCALING_TYPE_LINEAR = 1, - LLAMA_ROPE_SCALING_TYPE_YARN = 2, - LLAMA_ROPE_SCALING_TYPE_MAX_VALUE = LLAMA_ROPE_SCALING_TYPE_YARN, - }; - - enum llama_pooling_type { - LLAMA_POOLING_TYPE_UNSPECIFIED = -1, - LLAMA_POOLING_TYPE_NONE = 0, - LLAMA_POOLING_TYPE_MEAN = 1, - LLAMA_POOLING_TYPE_CLS = 2, - }; - - enum llama_split_mode { - LLAMA_SPLIT_MODE_NONE = 0, // single GPU - LLAMA_SPLIT_MODE_LAYER = 1, // split layers and KV across GPUs - LLAMA_SPLIT_MODE_ROW = 2, // split rows across GPUs - }; - - typedef struct llama_token_data { - llama_token id; // token id - float logit; // log-odds of the token - float p; // probability of the token - } llama_token_data; - - typedef struct llama_token_data_array { - llama_token_data * data; - size_t size; - bool sorted; - } llama_token_data_array; - - typedef bool (*llama_progress_callback)(float progress, void *ctx); - - // Input data for llama_decode - // A llama_batch object can contain input about one or many sequences - // The provided arrays (i.e. token, embd, pos, etc.) must have size of n_tokens - // - // - token : the token ids of the input (used when embd is NULL) - // - embd : token embeddings (i.e. float vector of size n_embd) (used when token is NULL) - // - pos : the positions of the respective token in the sequence - // - seq_id : the sequence to which the respective token belongs - // - logits : if zero, the logits (and/or the embeddings) for the respective token will not be output - // - typedef struct llama_batch { - int32_t n_tokens; - - llama_token * token; - float * embd; - llama_pos * pos; - int32_t * n_seq_id; - llama_seq_id ** seq_id; - int8_t * logits; // TODO: rename this to "output" - - // NOTE: helpers for smooth API transition - can be deprecated in the future - // for future-proof code, use the above fields instead and ignore everything below - // - // pos[i] = all_pos_0 + i*all_pos_1 - // - llama_pos all_pos_0; // used if pos == NULL - llama_pos all_pos_1; // used if pos == NULL - llama_seq_id all_seq_id; // used if seq_id == NULL - } llama_batch; - - enum llama_model_kv_override_type { - LLAMA_KV_OVERRIDE_TYPE_INT, - LLAMA_KV_OVERRIDE_TYPE_FLOAT, - LLAMA_KV_OVERRIDE_TYPE_BOOL, - LLAMA_KV_OVERRIDE_TYPE_STR, - }; - - struct llama_model_kv_override { - enum llama_model_kv_override_type tag; - - char key[128]; - - union { - int64_t val_i64; - double val_f64; - bool val_bool; - char val_str[128]; - }; - }; - - struct llama_model_params { - int32_t n_gpu_layers; // number of layers to store in VRAM - enum llama_split_mode split_mode; // how to split the model across multiple GPUs - - // main_gpu interpretation depends on split_mode: - // LLAMA_SPLIT_NONE: the GPU that is used for the entire model - // LLAMA_SPLIT_ROW: the GPU that is used for small tensors and intermediate results - // LLAMA_SPLIT_LAYER: ignored - int32_t main_gpu; - - // proportion of the model (layers or rows) to offload to each GPU, size: llama_max_devices() - const float * tensor_split; - - // Called with a progress value between 0.0 and 1.0. Pass NULL to disable. - // If the provided progress_callback returns true, model loading continues. - // If it returns false, model loading is immediately aborted. - llama_progress_callback progress_callback; - - // context pointer passed to the progress callback - void * progress_callback_user_data; - - // override key-value pairs of the model meta data - const struct llama_model_kv_override * kv_overrides; - - // Keep the booleans together to avoid misalignment during copy-by-value. - bool vocab_only; // only load the vocabulary, no weights - bool use_mmap; // use mmap if possible - bool use_mlock; // force system to keep model in RAM - bool check_tensors; // validate model tensor data - }; - - struct llama_context_params { - uint32_t seed; // RNG seed, -1 for random - uint32_t n_ctx; // text context, 0 = from model - uint32_t n_batch; // logical maximum batch size that can be submitted to llama_decode - uint32_t n_ubatch; // physical maximum batch size - uint32_t n_seq_max; // max number of sequences (i.e. distinct states for recurrent models) - uint32_t n_threads; // number of threads to use for generation - uint32_t n_threads_batch; // number of threads to use for batch processing - - enum llama_rope_scaling_type rope_scaling_type; // RoPE scaling type, from `enum llama_rope_scaling_type` - enum llama_pooling_type pooling_type; // whether to pool (sum) embedding results by sequence id - // (ignored if no pooling layer) - - // ref: https://github.com/ggerganov/llama.cpp/pull/2054 - float rope_freq_base; // RoPE base frequency, 0 = from model - float rope_freq_scale; // RoPE frequency scaling factor, 0 = from model - float yarn_ext_factor; // YaRN extrapolation mix factor, negative = from model - float yarn_attn_factor; // YaRN magnitude scaling factor - float yarn_beta_fast; // YaRN low correction dim - float yarn_beta_slow; // YaRN high correction dim - uint32_t yarn_orig_ctx; // YaRN original context size - float defrag_thold; // defragment the KV cache if holes/size > thold, < 0 disabled (default) - - ggml_backend_sched_eval_callback cb_eval; - void * cb_eval_user_data; - - enum ggml_type type_k; // data type for K cache - enum ggml_type type_v; // data type for V cache - - // Keep the booleans together to avoid misalignment during copy-by-value. - bool logits_all; // the llama_decode() call computes all logits, not just the last one (DEPRECATED - set llama_batch.logits instead) - bool embeddings; // if true, extract embeddings (together with logits) - bool offload_kqv; // whether to offload the KQV ops (including the KV cache) to GPU - - // Abort callback - // if it returns true, execution of llama_decode() will be aborted - // currently works only with CPU execution - ggml_abort_callback abort_callback; - void * abort_callback_data; - }; - - // model quantization parameters - typedef struct llama_model_quantize_params { - int32_t nthread; // number of threads to use for quantizing, if <=0 will use std::thread::hardware_concurrency() - enum llama_ftype ftype; // quantize to this llama_ftype - enum ggml_type output_tensor_type; // output tensor type - enum ggml_type token_embedding_type; // itoken embeddings tensor type - bool allow_requantize; // allow quantizing non-f32/f16 tensors - bool quantize_output_tensor; // quantize output.weight - bool only_copy; // only copy tensors - ftype, allow_requantize and quantize_output_tensor are ignored - bool pure; // quantize all tensors to the default type - bool keep_split; // quantize to the same number of shards - void * imatrix; // pointer to importance matrix data - void * kv_overrides; // pointer to vector containing overrides - } llama_model_quantize_params; - - // grammar types - struct llama_grammar; - - // grammar element type - enum llama_gretype { - // end of rule definition - LLAMA_GRETYPE_END = 0, - - // start of alternate definition for rule - LLAMA_GRETYPE_ALT = 1, - - // non-terminal element: reference to rule - LLAMA_GRETYPE_RULE_REF = 2, - - // terminal element: character (code point) - LLAMA_GRETYPE_CHAR = 3, - - // inverse char(s) ([^a], [^a-b] [^abc]) - LLAMA_GRETYPE_CHAR_NOT = 4, - - // modifies a preceding LLAMA_GRETYPE_CHAR or LLAMA_GRETYPE_CHAR_ALT to - // be an inclusive range ([a-z]) - LLAMA_GRETYPE_CHAR_RNG_UPPER = 5, - - // modifies a preceding LLAMA_GRETYPE_CHAR or - // LLAMA_GRETYPE_CHAR_RNG_UPPER to add an alternate char to match ([ab], [a-zA]) - LLAMA_GRETYPE_CHAR_ALT = 6, - }; - - typedef struct llama_grammar_element { - enum llama_gretype type; - uint32_t value; // Unicode code point or rule ID - } llama_grammar_element; - - // performance timing information - struct llama_timings { - double t_start_ms; - double t_end_ms; - double t_load_ms; - double t_sample_ms; - double t_p_eval_ms; - double t_eval_ms; - - int32_t n_sample; - int32_t n_p_eval; - int32_t n_eval; - }; - - // used in chat template - typedef struct llama_chat_message { - const char * role; - const char * content; - } llama_chat_message; - - // Helpers for getting default parameters - LLAMA_API struct llama_model_params llama_model_default_params(void); - LLAMA_API struct llama_context_params llama_context_default_params(void); - LLAMA_API struct llama_model_quantize_params llama_model_quantize_default_params(void); - - // Initialize the llama + ggml backend - // If numa is true, use NUMA optimizations - // Call once at the start of the program - LLAMA_API void llama_backend_init(void); - - //optional: - LLAMA_API void llama_numa_init(enum ggml_numa_strategy numa); - - // Call once at the end of the program - currently only used for MPI - LLAMA_API void llama_backend_free(void); - - LLAMA_API struct llama_model * llama_load_model_from_file( - const char * path_model, - struct llama_model_params params); - - LLAMA_API void llama_free_model(struct llama_model * model); - - LLAMA_API struct llama_context * llama_new_context_with_model( - struct llama_model * model, - struct llama_context_params params); - - // Frees all allocated memory - LLAMA_API void llama_free(struct llama_context * ctx); - - LLAMA_API int64_t llama_time_us(void); - - LLAMA_API size_t llama_max_devices(void); - - LLAMA_API bool llama_supports_mmap (void); - LLAMA_API bool llama_supports_mlock (void); - LLAMA_API bool llama_supports_gpu_offload(void); - - LLAMA_API const struct llama_model * llama_get_model(const struct llama_context * ctx); - - LLAMA_API uint32_t llama_n_ctx (const struct llama_context * ctx); - LLAMA_API uint32_t llama_n_batch (const struct llama_context * ctx); - LLAMA_API uint32_t llama_n_ubatch (const struct llama_context * ctx); - LLAMA_API uint32_t llama_n_seq_max (const struct llama_context * ctx); - - LLAMA_API enum llama_pooling_type llama_pooling_type(const struct llama_context * ctx); - - LLAMA_API enum llama_vocab_type llama_vocab_type (const struct llama_model * model); - LLAMA_API enum llama_rope_type llama_rope_type (const struct llama_model * model); - - LLAMA_API int32_t llama_n_vocab (const struct llama_model * model); - LLAMA_API int32_t llama_n_ctx_train(const struct llama_model * model); - LLAMA_API int32_t llama_n_embd (const struct llama_model * model); - LLAMA_API int32_t llama_n_layer (const struct llama_model * model); - - // Get the model's RoPE frequency scaling factor - LLAMA_API float llama_rope_freq_scale_train(const struct llama_model * model); - - // Functions to access the model's GGUF metadata scalar values - // - The functions return the length of the string on success, or -1 on failure - // - The output string is always null-terminated and cleared on failure - // - GGUF array values are not supported by these functions - - // Get metadata value as a string by key name - LLAMA_API int32_t llama_model_meta_val_str(const struct llama_model * model, const char * key, char * buf, size_t buf_size); - - // Get the number of metadata key/value pairs - LLAMA_API int32_t llama_model_meta_count(const struct llama_model * model); - - // Get metadata key name by index - LLAMA_API int32_t llama_model_meta_key_by_index(const struct llama_model * model, int32_t i, char * buf, size_t buf_size); - - // Get metadata value as a string by index - LLAMA_API int32_t llama_model_meta_val_str_by_index(const struct llama_model * model, int32_t i, char * buf, size_t buf_size); - - // Get a string describing the model type - LLAMA_API int32_t llama_model_desc(const struct llama_model * model, char * buf, size_t buf_size); - - // Returns the total size of all the tensors in the model in bytes - LLAMA_API uint64_t llama_model_size(const struct llama_model * model); - - // Returns the total number of parameters in the model - LLAMA_API uint64_t llama_model_n_params(const struct llama_model * model); - - // Get a llama model tensor - LLAMA_API struct ggml_tensor * llama_get_model_tensor(struct llama_model * model, const char * name); - - // Returns 0 on success - LLAMA_API uint32_t llama_model_quantize( - const char * fname_inp, - const char * fname_out, - const llama_model_quantize_params * params); - - // Apply a LoRA adapter to a loaded model - // path_base_model is the path to a higher quality model to use as a base for - // the layers modified by the adapter. Can be NULL to use the current loaded model. - // The model needs to be reloaded before applying a new adapter, otherwise the adapter - // will be applied on top of the previous one - // Returns 0 on success - LLAMA_API int32_t llama_model_apply_lora_from_file( - const struct llama_model * model, - const char * path_lora, - float scale, - const char * path_base_model, - int32_t n_threads); - - // Apply a loaded control vector to a llama_context, or if data is NULL, clear - // the currently loaded vector. - // n_embd should be the size of a single layer's control, and data should point - // to an n_embd x n_layers buffer starting from layer 1. - // il_start and il_end are the layer range the vector should apply to (both inclusive) - // See llama_control_vector_load in common to load a control vector. - LLAMA_API int32_t llama_control_vector_apply( - struct llama_context * lctx, - const float * data, - size_t len, - int32_t n_embd, - int32_t il_start, - int32_t il_end); - - // - // KV cache - // - - // Information associated with an individual cell in the KV cache view. - struct llama_kv_cache_view_cell { - // The position for this cell. Takes KV cache shifts into account. - // May be negative if the cell is not populated. - llama_pos pos; - }; - - // An updateable view of the KV cache. - struct llama_kv_cache_view { - // Number of KV cache cells. This will be the same as the context size. - int32_t n_cells; - - // Maximum number of sequences that can exist in a cell. It's not an error - // if there are more sequences in a cell than this value, however they will - // not be visible in the view cells_sequences. - int32_t n_seq_max; - - // Number of tokens in the cache. For example, if there are two populated - // cells, the first with 1 sequence id in it and the second with 2 sequence - // ids then you'll have 3 tokens. - int32_t token_count; - - // Number of populated cache cells. - int32_t used_cells; - - // Maximum contiguous empty slots in the cache. - int32_t max_contiguous; - - // Index to the start of the max_contiguous slot range. Can be negative - // when cache is full. - int32_t max_contiguous_idx; - - // Information for an individual cell. - struct llama_kv_cache_view_cell * cells; - - // The sequences for each cell. There will be n_seq_max items per cell. - llama_seq_id * cells_sequences; - }; - - // Create an empty KV cache view. (use only for debugging purposes) - LLAMA_API struct llama_kv_cache_view llama_kv_cache_view_init(const struct llama_context * ctx, int32_t n_seq_max); - - // Free a KV cache view. (use only for debugging purposes) - LLAMA_API void llama_kv_cache_view_free(struct llama_kv_cache_view * view); - - // Update the KV cache view structure with the current state of the KV cache. (use only for debugging purposes) - LLAMA_API void llama_kv_cache_view_update(const struct llama_context * ctx, struct llama_kv_cache_view * view); - - // Returns the number of tokens in the KV cache (slow, use only for debug) - // If a KV cell has multiple sequences assigned to it, it will be counted multiple times - LLAMA_API int32_t llama_get_kv_cache_token_count(const struct llama_context * ctx); - - // Returns the number of used KV cells (i.e. have at least one sequence assigned to them) - LLAMA_API int32_t llama_get_kv_cache_used_cells(const struct llama_context * ctx); - - // Clear the KV cache - LLAMA_API void llama_kv_cache_clear( - struct llama_context * ctx); - - // Removes all tokens that belong to the specified sequence and have positions in [p0, p1) - // Returns false if a partial sequence cannot be removed. Removing a whole sequence never fails - // seq_id < 0 : match any sequence - // p0 < 0 : [0, p1] - // p1 < 0 : [p0, inf) - LLAMA_API bool llama_kv_cache_seq_rm( - struct llama_context * ctx, - llama_seq_id seq_id, - llama_pos p0, - llama_pos p1); - - // Copy all tokens that belong to the specified sequence to another sequence - // Note that this does not allocate extra KV cache memory - it simply assigns the tokens to the new sequence - // p0 < 0 : [0, p1] - // p1 < 0 : [p0, inf) - LLAMA_API void llama_kv_cache_seq_cp( - struct llama_context * ctx, - llama_seq_id seq_id_src, - llama_seq_id seq_id_dst, - llama_pos p0, - llama_pos p1); - - // Removes all tokens that do not belong to the specified sequence - LLAMA_API void llama_kv_cache_seq_keep( - struct llama_context * ctx, - llama_seq_id seq_id); - - // Adds relative position "delta" to all tokens that belong to the specified sequence and have positions in [p0, p1) - // If the KV cache is RoPEd, the KV data is updated accordingly: - // - lazily on next llama_decode() - // - explicitly with llama_kv_cache_update() - // p0 < 0 : [0, p1] - // p1 < 0 : [p0, inf) - LLAMA_API void llama_kv_cache_seq_add( - struct llama_context * ctx, - llama_seq_id seq_id, - llama_pos p0, - llama_pos p1, - llama_pos delta); - - // Integer division of the positions by factor of `d > 1` - // If the KV cache is RoPEd, the KV data is updated accordingly: - // - lazily on next llama_decode() - // - explicitly with llama_kv_cache_update() - // p0 < 0 : [0, p1] - // p1 < 0 : [p0, inf) - LLAMA_API void llama_kv_cache_seq_div( - struct llama_context * ctx, - llama_seq_id seq_id, - llama_pos p0, - llama_pos p1, - int d); - - // Returns the largest position present in the KV cache for the specified sequence - LLAMA_API llama_pos llama_kv_cache_seq_pos_max( - struct llama_context * ctx, - llama_seq_id seq_id); - - // Defragment the KV cache - // This will be applied: - // - lazily on next llama_decode() - // - explicitly with llama_kv_cache_update() - LLAMA_API void llama_kv_cache_defrag(struct llama_context * ctx); - - // Apply the KV cache updates (such as K-shifts, defragmentation, etc.) - LLAMA_API void llama_kv_cache_update(struct llama_context * ctx); - - // - // State / sessions - // - - // Returns the maximum size in bytes of the state (rng, logits, embedding - // and kv_cache) - will often be smaller after compacting tokens - LLAMA_API size_t llama_state_get_size(const struct llama_context * ctx); - LLAMA_API DEPRECATED(size_t llama_get_state_size(const struct llama_context * ctx), - "use llama_state_get_size instead"); - - // Copies the state to the specified destination address. - // Destination needs to have allocated enough memory. - // Returns the number of bytes copied - LLAMA_API size_t llama_state_get_data( - struct llama_context * ctx, - uint8_t * dst); - LLAMA_API DEPRECATED(size_t llama_copy_state_data( - struct llama_context * ctx, - uint8_t * dst), - "use llama_state_get_data instead"); - - // Set the state reading from the specified address - // Returns the number of bytes read - LLAMA_API size_t llama_state_set_data( - struct llama_context * ctx, - const uint8_t * src); - LLAMA_API DEPRECATED(size_t llama_set_state_data( - struct llama_context * ctx, - const uint8_t * src), - "use llama_state_set_data instead"); - - // Save/load session file - LLAMA_API bool llama_state_load_file( - struct llama_context * ctx, - const char * path_session, - llama_token * tokens_out, - size_t n_token_capacity, - size_t * n_token_count_out); - LLAMA_API DEPRECATED(bool llama_load_session_file( - struct llama_context * ctx, - const char * path_session, - llama_token * tokens_out, - size_t n_token_capacity, - size_t * n_token_count_out), - "use llama_state_load_file instead"); - - LLAMA_API bool llama_state_save_file( - struct llama_context * ctx, - const char * path_session, - const llama_token * tokens, - size_t n_token_count); - LLAMA_API DEPRECATED(bool llama_save_session_file( - struct llama_context * ctx, - const char * path_session, - const llama_token * tokens, - size_t n_token_count), - "use llama_state_save_file instead"); - - // Get the exact size needed to copy the KV cache of a single sequence - LLAMA_API size_t llama_state_seq_get_size( - struct llama_context * ctx, - llama_seq_id seq_id); - - // Copy the KV cache of a single sequence into the specified buffer - LLAMA_API size_t llama_state_seq_get_data( - struct llama_context * ctx, - uint8_t * dst, - llama_seq_id seq_id); - - // Copy the sequence data (originally copied with `llama_state_seq_get_data`) into the specified sequence - // Returns: - // - Positive: Ok - // - Zero: Failed to load - LLAMA_API size_t llama_state_seq_set_data( - struct llama_context * ctx, - const uint8_t * src, - llama_seq_id dest_seq_id); - - LLAMA_API size_t llama_state_seq_save_file( - struct llama_context * ctx, - const char * filepath, - llama_seq_id seq_id, - const llama_token * tokens, - size_t n_token_count); - - LLAMA_API size_t llama_state_seq_load_file( - struct llama_context * ctx, - const char * filepath, - llama_seq_id dest_seq_id, - llama_token * tokens_out, - size_t n_token_capacity, - size_t * n_token_count_out); - - // - // Decoding - // - - // Return batch for single sequence of tokens starting at pos_0 - // - // NOTE: this is a helper function to facilitate transition to the new batch API - avoid using it - // - LLAMA_API struct llama_batch llama_batch_get_one( - llama_token * tokens, - int32_t n_tokens, - llama_pos pos_0, - llama_seq_id seq_id); - - // Allocates a batch of tokens on the heap that can hold a maximum of n_tokens - // Each token can be assigned up to n_seq_max sequence ids - // The batch has to be freed with llama_batch_free() - // If embd != 0, llama_batch.embd will be allocated with size of n_tokens * embd * sizeof(float) - // Otherwise, llama_batch.token will be allocated to store n_tokens llama_token - // The rest of the llama_batch members are allocated with size n_tokens - // All members are left uninitialized - LLAMA_API struct llama_batch llama_batch_init( - int32_t n_tokens, - int32_t embd, - int32_t n_seq_max); - - // Frees a batch of tokens allocated with llama_batch_init() - LLAMA_API void llama_batch_free(struct llama_batch batch); - - // Positive return values does not mean a fatal error, but rather a warning. - // 0 - success - // 1 - could not find a KV slot for the batch (try reducing the size of the batch or increase the context) - // < 0 - error - LLAMA_API int32_t llama_decode( - struct llama_context * ctx, - struct llama_batch batch); - - // Set the number of threads used for decoding - // n_threads is the number of threads used for generation (single token) - // n_threads_batch is the number of threads used for prompt and batch processing (multiple tokens) - LLAMA_API void llama_set_n_threads(struct llama_context * ctx, uint32_t n_threads, uint32_t n_threads_batch); - - // Set whether to use causal attention or not - // If set to true, the model will only attend to the past tokens - LLAMA_API void llama_set_causal_attn(struct llama_context * ctx, bool causal_attn); - - // Set abort callback - LLAMA_API void llama_set_abort_callback(struct llama_context * ctx, ggml_abort_callback abort_callback, void * abort_callback_data); - - // Wait until all computations are finished - // This is automatically done when using one of the functions below to obtain the computation results - // and is not necessary to call it explicitly in most cases - LLAMA_API void llama_synchronize(struct llama_context * ctx); - - // Token logits obtained from the last call to llama_decode() - // The logits for which llama_batch.logits[i] != 0 are stored contiguously - // in the order they have appeared in the batch. - // Rows: number of tokens for which llama_batch.logits[i] != 0 - // Cols: n_vocab - LLAMA_API float * llama_get_logits(struct llama_context * ctx); - - // Logits for the ith token. For positive indices, Equivalent to: - // llama_get_logits(ctx) + ctx->output_ids[i]*n_vocab - // Negative indicies can be used to access logits in reverse order, -1 is the last logit. - // returns NULL for invalid ids. - LLAMA_API float * llama_get_logits_ith(struct llama_context * ctx, int32_t i); - - // Get all output token embeddings. - // when pooling_type == LLAMA_POOLING_TYPE_NONE or when using a generative model, - // the embeddings for which llama_batch.logits[i] != 0 are stored contiguously - // in the order they have appeared in the batch. - // shape: [n_outputs*n_embd] - // Otherwise, returns NULL. - LLAMA_API float * llama_get_embeddings(struct llama_context * ctx); - - // Get the embeddings for the ith token. For positive indices, Equivalent to: - // llama_get_embeddings(ctx) + ctx->output_ids[i]*n_embd - // Negative indicies can be used to access embeddings in reverse order, -1 is the last embedding. - // shape: [n_embd] (1-dimensional) - // returns NULL for invalid ids. - LLAMA_API float * llama_get_embeddings_ith(struct llama_context * ctx, int32_t i); - - // Get the embeddings for a sequence id - // Returns NULL if pooling_type is LLAMA_POOLING_TYPE_NONE - // shape: [n_embd] (1-dimensional) - LLAMA_API float * llama_get_embeddings_seq(struct llama_context * ctx, llama_seq_id seq_id); - - // - // Vocab - // - - LLAMA_API const char * llama_token_get_text(const struct llama_model * model, llama_token token); - - LLAMA_API float llama_token_get_score(const struct llama_model * model, llama_token token); - - LLAMA_API enum llama_token_type llama_token_get_type(const struct llama_model * model, llama_token token); - - // Check if the token is supposed to end generation (end-of-generation, eg. EOS, EOT, etc.) - LLAMA_API bool llama_token_is_eog(const struct llama_model * model, llama_token token); - - // Special tokens - LLAMA_API llama_token llama_token_bos(const struct llama_model * model); // beginning-of-sentence - LLAMA_API llama_token llama_token_eos(const struct llama_model * model); // end-of-sentence - LLAMA_API llama_token llama_token_cls(const struct llama_model * model); // classification - LLAMA_API llama_token llama_token_sep(const struct llama_model * model); // sentence separator - LLAMA_API llama_token llama_token_nl (const struct llama_model * model); // next-line - - // Returns -1 if unknown, 1 for true or 0 for false. - LLAMA_API int32_t llama_add_bos_token(const struct llama_model * model); - - // Returns -1 if unknown, 1 for true or 0 for false. - LLAMA_API int32_t llama_add_eos_token(const struct llama_model * model); - - // Codellama infill tokens - LLAMA_API llama_token llama_token_prefix(const struct llama_model * model); // Beginning of infill prefix - LLAMA_API llama_token llama_token_middle(const struct llama_model * model); // Beginning of infill middle - LLAMA_API llama_token llama_token_suffix(const struct llama_model * model); // Beginning of infill suffix - LLAMA_API llama_token llama_token_eot (const struct llama_model * model); // End of infill middle - - // - // Tokenization - // - - /// @details Convert the provided text into tokens. - /// @param tokens The tokens pointer must be large enough to hold the resulting tokens. - /// @return Returns the number of tokens on success, no more than n_tokens_max - /// @return Returns a negative number on failure - the number of tokens that would have been returned - /// @param parse_special Allow tokenizing special and/or control tokens which otherwise are not exposed and treated - /// as plaintext. Does not insert a leading space. - LLAMA_API int32_t llama_tokenize( - const struct llama_model * model, - const char * text, - int32_t text_len, - llama_token * tokens, - int32_t n_tokens_max, - bool add_special, - bool parse_special); - - // Token Id -> Piece. - // Uses the vocabulary in the provided context. - // Does not write null terminator to the buffer. - // User code is responsible to remove the leading whitespace of the first non-BOS token when decoding multiple tokens. - // @param special If true, special tokens are rendered in the output. - LLAMA_API int32_t llama_token_to_piece( - const struct llama_model * model, - llama_token token, - char * buf, - int32_t length, - bool special); - - /// Apply chat template. Inspired by hf apply_chat_template() on python. - /// Both "model" and "custom_template" are optional, but at least one is required. "custom_template" has higher precedence than "model" - /// NOTE: This function does not use a jinja parser. It only support a pre-defined list of template. See more: https://github.com/ggerganov/llama.cpp/wiki/Templates-supported-by-llama_chat_apply_template - /// @param tmpl A Jinja template to use for this chat. If this is nullptr, the model’s default chat template will be used instead. - /// @param chat Pointer to a list of multiple llama_chat_message - /// @param n_msg Number of llama_chat_message in this chat - /// @param add_ass Whether to end the prompt with the token(s) that indicate the start of an assistant message. - /// @param buf A buffer to hold the output formatted prompt. The recommended alloc size is 2 * (total number of characters of all messages) - /// @param length The size of the allocated buffer - /// @return The total number of bytes of the formatted prompt. If is it larger than the size of buffer, you may need to re-alloc it and then re-apply the template. - LLAMA_API int32_t llama_chat_apply_template( - const struct llama_model * model, - const char * tmpl, - const struct llama_chat_message * chat, - size_t n_msg, - bool add_ass, - char * buf, - int32_t length); - - // - // Grammar - // - - LLAMA_API struct llama_grammar * llama_grammar_init( - const llama_grammar_element ** rules, - size_t n_rules, - size_t start_rule_index); - - LLAMA_API void llama_grammar_free(struct llama_grammar * grammar); - - LLAMA_API struct llama_grammar * llama_grammar_copy(const struct llama_grammar * grammar); - - // - // Sampling functions - // - - // Sets the current rng seed. - LLAMA_API void llama_set_rng_seed(struct llama_context * ctx, uint32_t seed); - - /// @details Repetition penalty described in CTRL academic paper https://arxiv.org/abs/1909.05858, with negative logit fix. - /// @details Frequency and presence penalties described in OpenAI API https://platform.openai.com/docs/api-reference/parameter-details. - LLAMA_API void llama_sample_repetition_penalties( - struct llama_context * ctx, - llama_token_data_array * candidates, - const llama_token * last_tokens, - size_t penalty_last_n, - float penalty_repeat, - float penalty_freq, - float penalty_present); - - /// @details Apply classifier-free guidance to the logits as described in academic paper "Stay on topic with Classifier-Free Guidance" https://arxiv.org/abs/2306.17806 - /// @param logits Logits extracted from the original generation context. - /// @param logits_guidance Logits extracted from a separate context from the same model. Other than a negative prompt at the beginning, it should have all generated and user input tokens copied from the main context. - /// @param scale Guidance strength. 1.0f means no guidance. Higher values mean stronger guidance. - LLAMA_API void llama_sample_apply_guidance( - struct llama_context * ctx, - float * logits, - float * logits_guidance, - float scale); - - /// @details Sorts candidate tokens by their logits in descending order and calculate probabilities based on logits. - LLAMA_API void llama_sample_softmax( - struct llama_context * ctx, - llama_token_data_array * candidates); - - /// @details Top-K sampling described in academic paper "The Curious Case of Neural Text Degeneration" https://arxiv.org/abs/1904.09751 - LLAMA_API void llama_sample_top_k( - struct llama_context * ctx, - llama_token_data_array * candidates, - int32_t k, - size_t min_keep); - - /// @details Nucleus sampling described in academic paper "The Curious Case of Neural Text Degeneration" https://arxiv.org/abs/1904.09751 - LLAMA_API void llama_sample_top_p( - struct llama_context * ctx, - llama_token_data_array * candidates, - float p, - size_t min_keep); - - /// @details Minimum P sampling as described in https://github.com/ggerganov/llama.cpp/pull/3841 - LLAMA_API void llama_sample_min_p( - struct llama_context * ctx, - llama_token_data_array * candidates, - float p, - size_t min_keep); - - /// @details Tail Free Sampling described in https://www.trentonbricken.com/Tail-Free-Sampling/. - LLAMA_API void llama_sample_tail_free( - struct llama_context * ctx, - llama_token_data_array * candidates, - float z, - size_t min_keep); - - /// @details Locally Typical Sampling implementation described in the paper https://arxiv.org/abs/2202.00666. - LLAMA_API void llama_sample_typical( - struct llama_context * ctx, - llama_token_data_array * candidates, - float p, - size_t min_keep); - - /// @details Dynamic temperature implementation described in the paper https://arxiv.org/abs/2309.02772. - LLAMA_API void llama_sample_entropy( - struct llama_context * ctx, - llama_token_data_array * candidates_p, - float min_temp, - float max_temp, - float exponent_val); - - LLAMA_API void llama_sample_temp( - struct llama_context * ctx, - llama_token_data_array * candidates, - float temp); - - /// @details Apply constraints from grammar - LLAMA_API void llama_sample_grammar( - struct llama_context * ctx, - llama_token_data_array * candidates, - const struct llama_grammar * grammar); - - /// @details Mirostat 1.0 algorithm described in the paper https://arxiv.org/abs/2007.14966. Uses tokens instead of words. - /// @param candidates A vector of `llama_token_data` containing the candidate tokens, their probabilities (p), and log-odds (logit) for the current position in the generated text. - /// @param tau The target cross-entropy (or surprise) value you want to achieve for the generated text. A higher value corresponds to more surprising or less predictable text, while a lower value corresponds to less surprising or more predictable text. - /// @param eta The learning rate used to update `mu` based on the error between the target and observed surprisal of the sampled word. A larger learning rate will cause `mu` to be updated more quickly, while a smaller learning rate will result in slower updates. - /// @param m The number of tokens considered in the estimation of `s_hat`. This is an arbitrary value that is used to calculate `s_hat`, which in turn helps to calculate the value of `k`. In the paper, they use `m = 100`, but you can experiment with different values to see how it affects the performance of the algorithm. - /// @param mu Maximum cross-entropy. This value is initialized to be twice the target cross-entropy (`2 * tau`) and is updated in the algorithm based on the error between the target and observed surprisal. - LLAMA_API llama_token llama_sample_token_mirostat( - struct llama_context * ctx, - llama_token_data_array * candidates, - float tau, - float eta, - int32_t m, - float * mu); - - /// @details Mirostat 2.0 algorithm described in the paper https://arxiv.org/abs/2007.14966. Uses tokens instead of words. - /// @param candidates A vector of `llama_token_data` containing the candidate tokens, their probabilities (p), and log-odds (logit) for the current position in the generated text. - /// @param tau The target cross-entropy (or surprise) value you want to achieve for the generated text. A higher value corresponds to more surprising or less predictable text, while a lower value corresponds to less surprising or more predictable text. - /// @param eta The learning rate used to update `mu` based on the error between the target and observed surprisal of the sampled word. A larger learning rate will cause `mu` to be updated more quickly, while a smaller learning rate will result in slower updates. - /// @param mu Maximum cross-entropy. This value is initialized to be twice the target cross-entropy (`2 * tau`) and is updated in the algorithm based on the error between the target and observed surprisal. - LLAMA_API llama_token llama_sample_token_mirostat_v2( - struct llama_context * ctx, - llama_token_data_array * candidates, - float tau, - float eta, - float * mu); - - /// @details Selects the token with the highest probability. - /// Does not compute the token probabilities. Use llama_sample_softmax() instead. - LLAMA_API llama_token llama_sample_token_greedy( - struct llama_context * ctx, - llama_token_data_array * candidates); - - /// @details Randomly selects a token from the candidates based on their probabilities using the RNG of ctx. - LLAMA_API llama_token llama_sample_token( - struct llama_context * ctx, - llama_token_data_array * candidates); - - /// @details Accepts the sampled token into the grammar - LLAMA_API void llama_grammar_accept_token( - struct llama_context * ctx, - struct llama_grammar * grammar, - llama_token token); - - // - // Beam search - // - - struct llama_beam_view { - const llama_token * tokens; - - size_t n_tokens; - float p; // Cumulative beam probability (renormalized relative to all beams) - bool eob; // Callback should set this to true when a beam is at end-of-beam. - }; - - // Passed to beam_search_callback function. - // Whenever 0 < common_prefix_length, this number of tokens should be copied from any of the beams - // (e.g. beams[0]) as they will be removed (shifted) from all beams in all subsequent callbacks. - // These pointers are valid only during the synchronous callback, so should not be saved. - struct llama_beams_state { - struct llama_beam_view * beam_views; - - size_t n_beams; // Number of elements in beam_views[]. - size_t common_prefix_length; // Current max length of prefix tokens shared by all beams. - bool last_call; // True iff this is the last callback invocation. - }; - - // Type of pointer to the beam_search_callback function. - // void* callback_data is any custom data passed to llama_beam_search, that is subsequently - // passed back to beam_search_callback. This avoids having to use global variables in the callback. - typedef void (*llama_beam_search_callback_fn_t)(void * callback_data, struct llama_beams_state); - - /// @details Deterministically returns entire sentence constructed by a beam search. - /// @param ctx Pointer to the llama_context. - /// @param callback Invoked for each iteration of the beam_search loop, passing in beams_state. - /// @param callback_data A pointer that is simply passed back to callback. - /// @param n_beams Number of beams to use. - /// @param n_past Number of tokens already evaluated. - /// @param n_predict Maximum number of tokens to predict. EOS may occur earlier. - LLAMA_API void llama_beam_search( - struct llama_context * ctx, - llama_beam_search_callback_fn_t callback, - void * callback_data, - size_t n_beams, - int32_t n_past, - int32_t n_predict); - - /// @details Build a split GGUF final path for this chunk. - /// llama_split_path(split_path, sizeof(split_path), "/models/ggml-model-q4_0", 2, 4) => split_path = "/models/ggml-model-q4_0-00002-of-00004.gguf" - // Returns the split_path length. - LLAMA_API int llama_split_path(char * split_path, size_t maxlen, const char * path_prefix, int split_no, int split_count); - - /// @details Extract the path prefix from the split_path if and only if the split_no and split_count match. - /// llama_split_prefix(split_prefix, 64, "/models/ggml-model-q4_0-00002-of-00004.gguf", 2, 4) => split_prefix = "/models/ggml-model-q4_0" - // Returns the split_prefix length. - LLAMA_API int llama_split_prefix(char * split_prefix, size_t maxlen, const char * split_path, int split_no, int split_count); - - // Performance information - LLAMA_API struct llama_timings llama_get_timings(struct llama_context * ctx); - - LLAMA_API void llama_print_timings(struct llama_context * ctx); - LLAMA_API void llama_reset_timings(struct llama_context * ctx); - - // Print system information - LLAMA_API const char * llama_print_system_info(void); - - // Set callback for all future logging events. - // If this is not called, or NULL is supplied, everything is output on stderr. - LLAMA_API void llama_log_set(ggml_log_callback log_callback, void * user_data); - - LLAMA_API void llama_dump_timing_info_yaml(FILE * stream, const struct llama_context * ctx); - -#ifdef __cplusplus -} -#endif - -// Internal API to be implemented by llama.cpp and used by tests/benchmarks only -#ifdef LLAMA_API_INTERNAL - -#include -#include -#include - -struct ggml_tensor; - -struct llama_partial_utf8 { - uint32_t value; // bit value so far (unshifted) - int n_remain; // num bytes remaining; -1 indicates invalid sequence -}; - -struct llama_grammar { - const std::vector> rules; - std::vector> stacks; - - // buffer for partially generated UTF-8 sequence from accepted tokens - llama_partial_utf8 partial_utf8; -}; - -struct llama_grammar_candidate { - size_t index; - const uint32_t * code_points; - llama_partial_utf8 partial_utf8; -}; - -const std::vector> & llama_internal_get_tensor_map( - struct llama_context * ctx -); - -void llama_grammar_accept( - const std::vector> & rules, - const std::vector> & stacks, - const uint32_t chr, - std::vector> & new_stacks); - -std::pair, llama_partial_utf8> decode_utf8( - const std::string & src, - llama_partial_utf8 partial_start); - -// Randomly selects a token from the candidates based on their probabilities using given std::mt19937. -// This is a temporary workaround in order to fix race conditions when sampling with multiple sequences. -llama_token llama_sample_token_with_rng(struct llama_context * ctx, llama_token_data_array * candidates, std::mt19937 & rng); - -#endif // LLAMA_API_INTERNAL - -#endif // LLAMA_H diff --git a/sgemm.cpp b/sgemm.cpp deleted file mode 100644 index 4e0159804e8..00000000000 --- a/sgemm.cpp +++ /dev/null @@ -1,995 +0,0 @@ -// -*- mode:c++;indent-tabs-mode:nil;c-basic-offset:4;coding:utf-8 -*- -// vi: set et ft=c++ ts=4 sts=4 sw=4 fenc=utf-8 :vi -// -// Copyright 2024 Mozilla Foundation -// -// 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 THE AUTHORS OR COPYRIGHT HOLDERS -// 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. - -// -// _ _ ___ _ _ ___ -// | |_(_)_ _ _ _| _ ) | /_\ / __| -// | _| | ' \ || | _ \ |__ / _ \\__ \. -// \__|_|_||_\_, |___/____/_/ \_\___/ -// |__/ -// -// BASIC LINEAR ALGEBRA SUBPROGRAMS -// -// -// This file implements multithreaded CPU matrix multiplication for the -// common contiguous use case C = Aᵀ * B. These kernels are designed to -// have excellent performance[1] for matrices that fit in the CPU cache -// without imposing any overhead such as cache filling or malloc calls. -// -// This implementation does not guarantee any upper bound with rounding -// errors, which grow along with k. Our goal's to maximally exploit the -// hardware for performance, and then use whatever resources remain for -// improving numerical accuracy. -// -// [1] J. Tunney, ‘LLaMA Now Goes Faster on CPUs’, Mar. 2024. [Online]. -// Available: https://justine.lol/matmul/. [Accessed: 29-Mar-2024]. - -#pragma GCC diagnostic ignored "-Wpedantic" -#pragma GCC diagnostic ignored "-Wignored-attributes" - -#include "sgemm.h" -#include "ggml-impl.h" -#include "ggml-quants.h" - -#ifdef _MSC_VER -#define NOINLINE __declspec(noinline) -#else -#define NOINLINE __attribute__((__noinline__)) -#endif - -#if defined(__ARM_NEON) || defined(__AVX512F__) -#define VECTOR_REGISTERS 32 -#else -#define VECTOR_REGISTERS 16 -#endif - -#define MM256_SET_M128I(a, b) _mm256_insertf128_si256(_mm256_castsi128_si256(b), (a), 1) - -namespace { - -inline float unhalf(ggml_fp16_t d) { - return GGML_FP16_TO_FP32(d); -} - -//////////////////////////////////////////////////////////////////////////////////////////////////// -// VECTORIZED ARITHMETIC OPERATIONS - -#if defined(__SSE__) || defined(__AVX__) || defined(__AVX2__) || defined(__AVX512F__) -inline __m128 add(__m128 x, __m128 y) { return _mm_add_ps(x, y); } -inline __m128 sub(__m128 x, __m128 y) { return _mm_sub_ps(x, y); } -inline __m128 mul(__m128 x, __m128 y) { return _mm_mul_ps(x, y); } -#endif // __SSE__ - -#if defined(__AVX__) || defined(__AVX2__) || defined(__AVX512F__) -inline __m256 add(__m256 x, __m256 y) { return _mm256_add_ps(x, y); } -inline __m256 sub(__m256 x, __m256 y) { return _mm256_sub_ps(x, y); } -inline __m256 mul(__m256 x, __m256 y) { return _mm256_mul_ps(x, y); } -#endif // __AVX__ - -#if defined(__AVX512F__) -inline __m512 add(__m512 x, __m512 y) { return _mm512_add_ps(x, y); } -inline __m512 sub(__m512 x, __m512 y) { return _mm512_sub_ps(x, y); } -inline __m512 mul(__m512 x, __m512 y) { return _mm512_mul_ps(x, y); } -#endif // __AVX512F__ - -#if defined(__ARM_NEON) -inline float32x4_t add(float32x4_t x, float32x4_t y) { return vaddq_f32(x, y); } -inline float32x4_t sub(float32x4_t x, float32x4_t y) { return vsubq_f32(x, y); } -inline float32x4_t mul(float32x4_t x, float32x4_t y) { return vmulq_f32(x, y); } -#endif // __ARM_NEON - -#if defined(__ARM_FEATURE_FP16_VECTOR_ARITHMETIC) -inline float16x8_t add(float16x8_t x, float16x8_t y) { return vaddq_f16(x, y); } -inline float16x8_t sub(float16x8_t x, float16x8_t y) { return vsubq_f16(x, y); } -inline float16x8_t mul(float16x8_t x, float16x8_t y) { return vmulq_f16(x, y); } -#endif // __ARM_FEATURE_FP16_VECTOR_ARITHMETIC - -//////////////////////////////////////////////////////////////////////////////////////////////////// -// VECTORIZED FUSED MULTIPLY ADD - -/** - * Computes a * b + c. - */ -template -inline U madd(T a, T b, U c) { - return add(mul(a, b), c); -} - -#if defined(__FMA__) -#if defined(__AVX__) || defined(__AVX2__) || defined(__AVX512F__) -template <> -inline __m256 madd(__m256 a, __m256 b, __m256 c) { - return _mm256_fmadd_ps(a, b, c); -} -#endif -#if defined(__AVX512F__) -template <> -inline __m512 madd(__m512 a, __m512 b, __m512 c) { - return _mm512_fmadd_ps(a, b, c); -} -#endif -#endif - -#if defined(__ARM_FEATURE_FMA) -template <> -inline float32x4_t madd(float32x4_t a, float32x4_t b, float32x4_t c) { - return vfmaq_f32(c, b, a); -} -#if defined(__ARM_FEATURE_FP16_VECTOR_ARITHMETIC) && !defined(_MSC_VER) -template <> -inline float16x8_t madd(float16x8_t a, float16x8_t b, float16x8_t c) { - return vfmaq_f16(c, b, a); -} -#endif -#endif - -//////////////////////////////////////////////////////////////////////////////////////////////////// -// VECTORIZED HORIZONTAL SUM - -#if defined(__ARM_NEON) -inline float hsum(float32x4_t x) { - return vaddvq_f32(x); -} -#endif // __ARM_NEON - -#if defined(__ARM_FEATURE_FP16_VECTOR_ARITHMETIC) && !defined(_MSC_VER) -inline float hsum(float16x8_t x) { - return vaddvq_f32(vaddq_f32(vcvt_f32_f16(vget_low_f16(x)), - vcvt_f32_f16(vget_high_f16(x)))); -} -#endif // __ARM_FEATURE_FP16_VECTOR_ARITHMETIC - -#if defined(__SSE__) || defined(__AVX__) || defined(__AVX2__) || defined(__AVX512F__) -inline float hsum(__m128 x) { -#if defined(__AVX__) || defined(__AVX2__) || defined(__AVX512F__) - x = _mm_add_ps(x, _mm_movehl_ps(x, x)); - x = _mm_add_ss(x, _mm_movehdup_ps(x)); -#else - __m128 t; - t = _mm_shuffle_ps(x, x, _MM_SHUFFLE(2, 3, 0, 1)); - x = _mm_add_ps(x, t); - t = _mm_movehl_ps(t, x); - x = _mm_add_ss(x, t); -#endif - return _mm_cvtss_f32(x); -} -#endif - -#if defined(__AVX__) || defined(__AVX2__) || defined(__AVX512F__) -inline float hsum(__m256 x) { - return hsum(_mm_add_ps(_mm256_extractf128_ps(x, 1), - _mm256_castps256_ps128(x))); -} -#endif // __AVX__ - -#if defined(__AVX512F__) -inline float hsum(__m512 x) { - return _mm512_reduce_add_ps(x); -} -#endif // __AVX512F__ - -//////////////////////////////////////////////////////////////////////////////////////////////////// -// VECTORIZED MEMORY LOADING - -template T load(const U *); - -#if defined(__ARM_NEON) -template <> inline float32x4_t load(const float *p) { - return vld1q_f32(p); -} -#if !defined(_MSC_VER) -template <> inline float16x8_t load(const ggml_fp16_t *p) { - return vld1q_f16((const float16_t *)p); -} -template <> inline float32x4_t load(const ggml_fp16_t *p) { - return vcvt_f32_f16(vld1_f16((const float16_t *)p)); -} -#endif // _MSC_VER -#endif // __ARM_NEON - -#if defined(__SSE__) || defined(__AVX__) || defined(__AVX2__) || defined(__AVX512F__) -template <> inline __m128 load(const float *p) { - return _mm_loadu_ps(p); -} -#endif // __SSE__ - -#if defined(__AVX__) || defined(__AVX2__) || defined(__AVX512F__) -template <> inline __m256 load(const float *p) { - return _mm256_loadu_ps(p); -} -#endif // __AVX__ - -#if defined(__F16C__) -template <> inline __m256 load(const ggml_fp16_t *p) { - return _mm256_cvtph_ps(_mm_loadu_si128((const __m128i *)p)); -} -#endif // __F16C__ - -#if defined(__AVX512F__) -template <> inline __m512 load(const float *p) { - return _mm512_loadu_ps(p); -} -template <> inline __m512 load(const ggml_fp16_t *p) { - return _mm512_cvtph_ps(_mm256_loadu_si256((const __m256i *)p)); -} -#endif // __AVX512F__ - -//////////////////////////////////////////////////////////////////////////////////////////////////// -// FLOATING POINT MATRIX MULTIPLICATION - -template -class tinyBLAS { - public: - tinyBLAS(int64_t k, - const TA *A, int64_t lda, - const TB *B, int64_t ldb, - TC *C, int64_t ldc, - int ith, int nth) - : A(A), B(B), C(C), k(k), lda(lda), ldb(ldb), ldc(ldc), ith(ith), nth(nth) { - } - - void matmul(int64_t m, int64_t n, int task) { - if (task == GGML_TASK_TYPE_COMPUTE) - mnpack(0, m, 0, n); - } - - private: - NOINLINE void mnpack(int64_t m0, int64_t m, int64_t n0, int64_t n) { - int64_t mc, nc, mp, np; - switch ((MIN(m - m0, 5) << 4) | MIN(n - n0, 5)) { -#if VECTOR_REGISTERS == 32 - case 0x55: - mc = 5; - nc = 5; - gemm<5, 5>(m0, m, n0, n); - break; - case 0x45: - mc = 4; - nc = 5; - gemm<4, 5>(m0, m, n0, n); - break; - case 0x54: - mc = 5; - nc = 4; - gemm<5, 4>(m0, m, n0, n); - break; - case 0x44: - mc = 4; - nc = 4; - gemm<4, 4>(m0, m, n0, n); - break; - case 0x53: - mc = 5; - nc = 3; - gemm<5, 3>(m0, m, n0, n); - break; - case 0x35: - mc = 3; - nc = 5; - gemm<3, 5>(m0, m, n0, n); - break; - case 0x43: - mc = 4; - nc = 3; - gemm<4, 3>(m0, m, n0, n); - break; -#else - case 0x55: - case 0x54: - case 0x53: - case 0x45: - case 0x44: - case 0x43: - mc = 4; - nc = 3; - gemm<4, 3>(m0, m, n0, n); - break; - case 0x35: -#endif - case 0x34: - mc = 3; - nc = 4; - gemm<3, 4>(m0, m, n0, n); - break; - case 0x52: - mc = 5; - nc = 2; - gemm<5, 2>(m0, m, n0, n); - break; - case 0x33: - mc = 3; - nc = 3; - gemm<3, 3>(m0, m, n0, n); - break; - case 0x25: - mc = 2; - nc = 5; - gemm<2, 5>(m0, m, n0, n); - break; - case 0x42: - mc = 4; - nc = 2; - gemm<4, 2>(m0, m, n0, n); - break; - case 0x24: - mc = 2; - nc = 4; - gemm<2, 4>(m0, m, n0, n); - break; - case 0x32: - mc = 3; - nc = 2; - gemm<3, 2>(m0, m, n0, n); - break; - case 0x23: - mc = 2; - nc = 3; - gemm<2, 3>(m0, m, n0, n); - break; - case 0x51: - mc = 5; - nc = 1; - gemm<5, 1>(m0, m, n0, n); - break; - case 0x41: - mc = 4; - nc = 1; - gemm<4, 1>(m0, m, n0, n); - break; - case 0x22: - mc = 2; - nc = 2; - gemm<2, 2>(m0, m, n0, n); - break; - case 0x15: - mc = 1; - nc = 5; - gemm<1, 5>(m0, m, n0, n); - break; - case 0x14: - mc = 1; - nc = 4; - gemm<1, 4>(m0, m, n0, n); - break; - case 0x31: - mc = 3; - nc = 1; - gemm<3, 1>(m0, m, n0, n); - break; - case 0x13: - mc = 1; - nc = 3; - gemm<1, 3>(m0, m, n0, n); - break; - case 0x21: - mc = 2; - nc = 1; - gemm<2, 1>(m0, m, n0, n); - break; - case 0x12: - mc = 1; - nc = 2; - gemm<1, 2>(m0, m, n0, n); - break; - case 0x11: - mc = 1; - nc = 1; - gemm<1, 1>(m0, m, n0, n); - break; - default: - return; - } - mp = m0 + (m - m0) / mc * mc; - np = n0 + (n - n0) / nc * nc; - mnpack(mp, m, n0, np); - mnpack(m0, m, np, n); - } - - template - NOINLINE void gemm(int64_t m0, int64_t m, int64_t n0, int64_t n) { - int64_t ytiles = (m - m0) / RM; - int64_t xtiles = (n - n0) / RN; - int64_t tiles = xtiles * ytiles; - int64_t duty = (tiles + nth - 1) / nth; - int64_t start = duty * ith; - int64_t end = start + duty; - if (end > tiles) - end = tiles; - for (int64_t job = start; job < end; ++job) { - int64_t ii = m0 + job / xtiles * RM; - int64_t jj = n0 + job % xtiles * RN; - D Cv[RN][RM] = {}; - for (int64_t l = 0; l < k; l += KN) - for (int64_t j = 0; j < RN; ++j) - for (int64_t i = 0; i < RM; ++i) - Cv[j][i] = madd(load(A + lda * (ii + i) + l), - load(B + ldb * (jj + j) + l), - Cv[j][i]); - for (int64_t j = 0; j < RN; ++j) - for (int64_t i = 0; i < RM; ++i) - C[ldc * (jj + j) + (ii + i)] = hsum(Cv[j][i]); - } - } - - const TA *const A; - const TB *const B; - TC *const C; - const int64_t k; - const int64_t lda; - const int64_t ldb; - const int64_t ldc; - const int ith; - const int nth; -}; - -////////////////////////////////////////////////////////////////////////////////////////// -// QUANT ZERO MATRIX MULTIPLICATION - -#if defined(__ARM_FEATURE_DOTPROD) -template -class tinyBLAS_Q0_ARM { - public: - tinyBLAS_Q0_ARM(int64_t k, - const TA *A, int64_t lda, - const block_q8_0 *B, int64_t ldb, - float *C, int64_t ldc, - int ith, int nth) - : A(A), B(B), C(C), k(k), lda(lda), ldb(ldb), ldc(ldc), ith(ith), nth(nth) { - } - - void matmul(int64_t m, int64_t n, int task) { - if (task == GGML_TASK_TYPE_COMPUTE) - mnpack(0, m, 0, n); - } - - private: - NOINLINE void mnpack(int64_t m0, int64_t m, int64_t n0, int64_t n) { - int64_t mc, nc, mp, np; - switch ((MIN(m - m0, 3) << 4) | MIN(n - n0, 3ll)) { - case 0x33: - mc = 3; - nc = 3; - gemm<3, 3>(m0, m, n0, n); - break; - case 0x32: - mc = 3; - nc = 2; - gemm<3, 2>(m0, m, n0, n); - break; - case 0x23: - mc = 2; - nc = 3; - gemm<2, 3>(m0, m, n0, n); - break; - case 0x22: - mc = 2; - nc = 2; - gemm<2, 2>(m0, m, n0, n); - break; - case 0x31: - mc = 3; - nc = 1; - gemm<3, 1>(m0, m, n0, n); - break; - case 0x13: - mc = 1; - nc = 3; - gemm<1, 3>(m0, m, n0, n); - break; - case 0x21: - mc = 2; - nc = 1; - gemm<2, 1>(m0, m, n0, n); - break; - case 0x12: - mc = 1; - nc = 2; - gemm<1, 2>(m0, m, n0, n); - break; - case 0x11: - mc = 1; - nc = 1; - gemm<1, 1>(m0, m, n0, n); - break; - default: - return; - } - mp = m0 + (m - m0) / mc * mc; - np = n0 + (n - n0) / nc * nc; - mnpack(mp, m, n0, np); - mnpack(m0, m, np, n); - } - - template - NOINLINE void gemm(int64_t m0, int64_t m, int64_t n0, int64_t n) { - int64_t ytiles = (m - m0) / RM; - int64_t xtiles = (n - n0) / RN; - int64_t tiles = xtiles * ytiles; - int64_t duty = (tiles + nth - 1) / nth; - int64_t start = duty * ith; - int64_t end = start + duty; - if (end > tiles) - end = tiles; - for (int64_t job = start; job < end; ++job) { - int64_t ii = m0 + job / xtiles * RM; - int64_t jj = n0 + job % xtiles * RN; - float32x4_t Cv[RN][RM] = {}; - for (int64_t l = 0; l < k; ++l) - for (int64_t j = 0; j < RN; ++j) - for (int64_t i = 0; i < RM; ++i) - Cv[j][i] = vmlaq_n_f32(Cv[j][i], - vcvtq_f32_s32(vdotq_s32( - vdotq_s32(vdupq_n_s32(0), - load_lo(A + lda * (ii + i) + l), - load_lo(B + ldb * (jj + j) + l)), - load_hi(A + lda * (ii + i) + l), - load_hi(B + ldb * (jj + j) + l))), - unhalf(A[lda * (ii + i) + l].d) * - unhalf(B[ldb * (jj + j) + l].d)); - for (int64_t j = 0; j < RN; ++j) - for (int64_t i = 0; i < RM; ++i) - C[ldc * (jj + j) + (ii + i)] = hsum(Cv[j][i]); - } - } - - inline int8x16_t load_lo(const block_q8_0 *b) { - return vld1q_s8(b->qs); - } - - inline int8x16_t load_hi(const block_q8_0 *b) { - return vld1q_s8(b->qs + 16); - } - - inline int8x16_t load_lo(const block_q4_0 *b) { - return vsubq_s8(vreinterpretq_s8_u8(vandq_u8(vld1q_u8(b->qs), - vdupq_n_u8(0x0f))), - vdupq_n_s8(0x8)); - } - - inline int8x16_t load_hi(const block_q4_0 *b) { - return vsubq_s8(vreinterpretq_s8_u8(vshrq_n_u8(vld1q_u8(b->qs), 4)), - vdupq_n_s8(0x8)); - } - - const TA *const A; - const block_q8_0 *const B; - float *const C; - const int64_t k; - const int64_t lda; - const int64_t ldb; - const int64_t ldc; - const int ith; - const int nth; -}; -#endif // __ARM_FEATURE_DOTPROD - -#if defined(__AVX2__) || defined(__AVX512F__) -template -class tinyBLAS_Q0_AVX2 { - public: - tinyBLAS_Q0_AVX2(int64_t k, - const TA *A, int64_t lda, - const TB *B, int64_t ldb, - TC *C, int64_t ldc, - int ith, int nth) - : A(A), B(B), C(C), k(k), lda(lda), ldb(ldb), ldc(ldc), ith(ith), nth(nth) { - } - - void matmul(int64_t m, int64_t n, int task) { - if (task == GGML_TASK_TYPE_COMPUTE) - mnpack(0, m, 0, n); - } - - private: - void mnpack(int64_t m0, int64_t m, int64_t n0, int64_t n) { - int64_t mc, nc, mp, np; - switch ((MIN(m - m0, 4) << 4) | MIN(n - n0, 4)) { -#if VECTOR_REGISTERS == 32 - case 0x44: - mc = 4; - nc = 4; - gemm<4, 4>(m0, m, n0, n); - break; - case 0x43: - mc = 4; - nc = 3; - gemm<4, 3>(m0, m, n0, n); - break; - case 0x34: - mc = 3; - nc = 4; - gemm<3, 4>(m0, m, n0, n); - break; - case 0x33: - mc = 3; - nc = 3; - gemm<3, 3>(m0, m, n0, n); - break; - case 0x42: - mc = 4; - nc = 2; - gemm<4, 2>(m0, m, n0, n); - break; - case 0x24: - mc = 2; - nc = 4; - gemm<2, 4>(m0, m, n0, n); - break; -#else - case 0x44: - case 0x43: - case 0x42: - mc = 4; - nc = 2; - gemm<4, 2>(m0, m, n0, n); - break; - case 0x34: - case 0x24: - mc = 2; - nc = 4; - gemm<2, 4>(m0, m, n0, n); - break; - case 0x33: -#endif - case 0x32: - mc = 3; - nc = 2; - gemm<3, 2>(m0, m, n0, n); - break; - case 0x23: - mc = 2; - nc = 3; - gemm<2, 3>(m0, m, n0, n); - break; - case 0x41: - mc = 4; - nc = 1; - gemm<4, 1>(m0, m, n0, n); - break; - case 0x22: - mc = 2; - nc = 2; - gemm<2, 2>(m0, m, n0, n); - break; - case 0x14: - mc = 1; - nc = 4; - gemm<1, 4>(m0, m, n0, n); - break; - case 0x31: - mc = 3; - nc = 1; - gemm<3, 1>(m0, m, n0, n); - break; - case 0x13: - mc = 1; - nc = 3; - gemm<1, 3>(m0, m, n0, n); - break; - case 0x21: - mc = 2; - nc = 1; - gemm<2, 1>(m0, m, n0, n); - break; - case 0x12: - mc = 1; - nc = 2; - gemm<1, 2>(m0, m, n0, n); - break; - case 0x11: - mc = 1; - nc = 1; - gemm<1, 1>(m0, m, n0, n); - break; - default: - return; - } - mp = m0 + (m - m0) / mc * mc; - np = n0 + (n - n0) / nc * nc; - mnpack(mp, m, n0, np); - mnpack(m0, m, np, n); - } - - template - NOINLINE void gemm(int64_t m0, int64_t m, int64_t n0, int64_t n) { - int64_t ytiles = (m - m0) / RM; - int64_t xtiles = (n - n0) / RN; - int64_t tiles = xtiles * ytiles; - int64_t duty = (tiles + nth - 1) / nth; - int64_t start = duty * ith; - int64_t end = start + duty; - if (end > tiles) - end = tiles; - for (int64_t job = start; job < end; ++job) { - int64_t ii = m0 + job / xtiles * RM; - int64_t jj = n0 + job % xtiles * RN; - __m256 Cv[RN][RM] = {}; - for (int64_t l = 0; l < k; ++l) - for (int64_t j = 0; j < RN; ++j) - for (int64_t i = 0; i < RM; ++i) - Cv[j][i] = madd(_mm256_set1_ps(unhalf(A[lda * (ii + i) + l].d) * - unhalf(B[ldb * (jj + j) + l].d)), - updot(_mm256_sign_epi8(load(A + lda * (ii + i) + l), - load(A + lda * (ii + i) + l)), - _mm256_sign_epi8(load(B + ldb * (jj + j) + l), - load(A + lda * (ii + i) + l))), - Cv[j][i]); - for (int64_t j = 0; j < RN; ++j) - for (int64_t i = 0; i < RM; ++i) - C[ldc * (jj + j) + (ii + i)] = hsum(Cv[j][i]); - } - } - - inline __m256i load(const block_q8_0 *b) { - return _mm256_loadu_si256((const __m256i *)b->qs); - } - - inline __m256i load(const block_q4_0 *b) { - return _mm256_sub_epi8(denibble(b->qs), _mm256_set1_epi8(8)); - } - - inline __m256 updot(__m256i u, __m256i s) { - __m256i res; -#if defined(__AVXVNNI__) || (defined(__AVX512VNNI__) && defined(__AVX512VL__)) - res = _mm256_dpbusd_epi32(_mm256_setzero_si256(), u, s); -#else - res = _mm256_madd_epi16(_mm256_set1_epi16(1), _mm256_maddubs_epi16(u, s)); -#endif - return _mm256_cvtepi32_ps(res); - } - - static inline __m256i denibble(const uint8_t *p) { - __m128i x = _mm_loadu_si128((const __m128i *)p); - return _mm256_and_si256(_mm256_set1_epi8(15), - _mm256_insertf128_si256(_mm256_castsi128_si256(x), - _mm_srli_epi16(x, 4), 1)); - } - - const TA *const A; - const TB *const B; - TC *const C; - const int64_t k; - const int64_t lda; - const int64_t ldb; - const int64_t ldc; - const int ith; - const int nth; -}; -#endif // __AVX2__ - -} // namespace - -/** - * Performs optimized matrix multiplication on CPU. - * - * This subroutine may compute C = Aᵀ * B with column major ordering. - * Despite its name, this isn't a generalized implementation. Work is - * only performed when a handwritten kernel is written and available. - * Otherwise the caller should fall back to a general matmul routine. - * - * For example, for single-threaded single-precision GEMM you can say - * - * llamafile_sgemm(m, n, k, A, lda, B, ldb, C, ldc, - * 0, 1, GGML_TASK_TYPE_COMPUTE, - * GGML_TYPE_F32, GGML_TYPE_F32, GGML_TYPE_F32); - * - * @param m is rows in `A` and `C` - * @param n is cols in `B` and `C` - * @param k is cols in `A` and rows in `B` - * @param A is first input matrix (always transposed) - * @param lda is row stride of `A` - * @param B is second input matrix (never transposed) - * @param ldb is row stride of `B` - * @param C is input/output array of output matrices - * @param ldc is row stride of `C` - * @param ith is thread id (must be less than `nth`) - * @param nth is number of threads (must be greater than zero) - * @param task is GGML task type - * @param Atype is GGML data type of `A` - * @param Btype is GGML data type of `B` - * @param Ctype is GGML data type of `C` - * @return true if this function was able to service the matmul request - */ -bool llamafile_sgemm(int64_t m, int64_t n, int64_t k, const void *A, int64_t lda, const void *B, int64_t ldb, void *C, - int64_t ldc, int ith, int nth, int task, int Atype, int Btype, int Ctype) { - - assert(m >= 0); - assert(n >= 0); - assert(k >= 0); - assert(lda >= k); - assert(ldb >= k); - assert(ldc >= m); - assert(nth > 0); - assert(ith < nth); - - if (Ctype != GGML_TYPE_F32) - return false; - - switch (Atype) { - - case GGML_TYPE_F32: { - if (Btype != GGML_TYPE_F32) - return false; -#if defined(__AVX512F__) - if (k % 16) - return false; - tinyBLAS<16, __m512, __m512, float, float, float> tb{ - k, (const float *)A, lda, - (const float *)B, ldb, - (float *)C, ldc, - ith, nth}; - tb.matmul(m, n, task); - return true; -#elif defined(__AVX__) || defined(__AVX2__) - if (k % 8) - return false; - tinyBLAS<8, __m256, __m256, float, float, float> tb{ - k, (const float *)A, lda, - (const float *)B, ldb, - (float *)C, ldc, - ith, nth}; - tb.matmul(m, n, task); - return true; -#elif defined(__ARM_NEON) - if (n < 4) - return false; - if (k % 4) - return false; - tinyBLAS<4, float32x4_t, float32x4_t, float, float, float> tb{ - k, (const float *)A, lda, - (const float *)B, ldb, - (float *)C, ldc, - ith, nth}; - tb.matmul(m, n, task); - return true; -#else - return false; -#endif - } - - case GGML_TYPE_F16: { -#if defined(__AVX512F__) - if (k % 16) - return false; - if (Btype != GGML_TYPE_F32) - return false; - tinyBLAS<16, __m512, __m512, ggml_fp16_t, float, float> tb{ - k, (const ggml_fp16_t *)A, lda, - (const float *)B, ldb, - (float *)C, ldc, - ith, nth}; - tb.matmul(m, n, task); - return true; -#elif (defined(__AVX__) || defined(__AVX2__)) && defined(__F16C__) - if (k % 8) - return false; - if (Btype != GGML_TYPE_F32) - return false; - tinyBLAS<8, __m256, __m256, ggml_fp16_t, float, float> tb{ - k, (const ggml_fp16_t *)A, lda, - (const float *)B, ldb, - (float *)C, ldc, - ith, nth}; - tb.matmul(m, n, task); - return true; -#elif defined(__ARM_FEATURE_FP16_VECTOR_ARITHMETIC) && !defined(_MSC_VER) - if (n < 8) - return false; - if (k % 8) - return false; - if (Btype != GGML_TYPE_F16) - return false; - tinyBLAS<8, float16x8_t, float16x8_t, ggml_fp16_t, ggml_fp16_t, float> tb{ - k, (const ggml_fp16_t *)A, lda, - (const ggml_fp16_t *)B, ldb, - (float *)C, ldc, - ith, nth}; - tb.matmul(m, n, task); - return true; -#elif defined(__ARM_NEON) && !defined(_MSC_VER) - if (k % 4) - return false; - if (Btype != GGML_TYPE_F32) - return false; - tinyBLAS<4, float32x4_t, float32x4_t, ggml_fp16_t, float, float> tb{ - k, (const ggml_fp16_t *)A, lda, - (const float *)B, ldb, - (float *)C, ldc, - ith, nth}; - tb.matmul(m, n, task); - return true; -#else - return false; -#endif - } - - case GGML_TYPE_Q8_0: { - if (Btype != GGML_TYPE_Q8_0) - return false; -#if defined(__AVX2__) || defined(__AVX512F__) - tinyBLAS_Q0_AVX2 tb{ - k, (const block_q8_0 *)A, lda, - (const block_q8_0 *)B, ldb, - (float *)C, ldc, - ith, nth}; - tb.matmul(m, n, task); - return true; -#elif defined(__ARM_FEATURE_DOTPROD) - tinyBLAS_Q0_ARM tb{ - k, (const block_q8_0 *)A, lda, - (const block_q8_0 *)B, ldb, - (float *)C, ldc, - ith, nth}; - tb.matmul(m, n, task); - return true; -#else - return false; -#endif - } - - case GGML_TYPE_Q4_0: { - if (Btype != GGML_TYPE_Q8_0) - return false; -#if defined(__AVX2__) || defined(__AVX512F__) - tinyBLAS_Q0_AVX2 tb{ - k, (const block_q4_0 *)A, lda, - (const block_q8_0 *)B, ldb, - (float *)C, ldc, - ith, nth}; - tb.matmul(m, n, task); - return true; -#elif defined(__ARM_FEATURE_DOTPROD) - tinyBLAS_Q0_ARM tb{ - k, (const block_q4_0 *)A, lda, - (const block_q8_0 *)B, ldb, - (float *)C, ldc, - ith, nth}; - tb.matmul(m, n, task); - return true; -#else - return false; -#endif - } - - default: - return false; - } - - (void)m; - (void)n; - (void)k; - (void)A; - (void)lda; - (void)B; - (void)ldb; - (void)C; - (void)ldc; - (void)ith; - (void)nth; - (void)task; - (void)Atype; - (void)Btype; - (void)Ctype; -} diff --git a/sgemm.h b/sgemm.h deleted file mode 100644 index f29747d0a47..00000000000 --- a/sgemm.h +++ /dev/null @@ -1,14 +0,0 @@ -#pragma once -#include -#include -#ifdef __cplusplus -extern "C" { -#endif - -bool llamafile_sgemm(int64_t, int64_t, int64_t, const void *, int64_t, - const void *, int64_t, void *, int64_t, int, int, - int, int, int, int); - -#ifdef __cplusplus -} -#endif diff --git a/unicode-data.cpp b/unicode-data.cpp deleted file mode 100644 index 22f8b0f0b29..00000000000 --- a/unicode-data.cpp +++ /dev/null @@ -1,1651 +0,0 @@ -#include "unicode-data.h" - -#include -#include -#include -#include - -const std::vector> unicode_ranges_digit = { -{0x00000030, 0x00000039}, {0x000000B2, 0x000000B3}, {0x000000B9, 0x000000B9}, {0x00000660, 0x00000669}, -{0x000006F0, 0x000006F9}, {0x000007C0, 0x000007C9}, {0x00000966, 0x0000096F}, {0x000009E6, 0x000009EF}, -{0x00000A66, 0x00000A6F}, {0x00000AE6, 0x00000AEF}, {0x00000B66, 0x00000B6F}, {0x00000BE6, 0x00000BEF}, -{0x00000C66, 0x00000C6F}, {0x00000CE6, 0x00000CEF}, {0x00000D66, 0x00000D6F}, {0x00000DE6, 0x00000DEF}, -{0x00000E50, 0x00000E59}, {0x00000ED0, 0x00000ED9}, {0x00000F20, 0x00000F29}, {0x00001040, 0x00001049}, -{0x00001090, 0x00001099}, {0x00001369, 0x00001371}, {0x000017E0, 0x000017E9}, {0x00001810, 0x00001819}, -{0x00001946, 0x0000194F}, {0x000019D0, 0x000019DA}, {0x00001A80, 0x00001A89}, {0x00001A90, 0x00001A99}, -{0x00001B50, 0x00001B59}, {0x00001BB0, 0x00001BB9}, {0x00001C40, 0x00001C49}, {0x00001C50, 0x00001C59}, -{0x00002070, 0x00002070}, {0x00002074, 0x00002079}, {0x00002080, 0x00002089}, {0x00002460, 0x00002468}, -{0x00002474, 0x0000247C}, {0x00002488, 0x00002490}, {0x000024EA, 0x000024EA}, {0x000024F5, 0x000024FD}, -{0x000024FF, 0x000024FF}, {0x00002776, 0x0000277E}, {0x00002780, 0x00002788}, {0x0000278A, 0x00002792}, -{0x0000A620, 0x0000A629}, {0x0000A8D0, 0x0000A8D9}, {0x0000A900, 0x0000A909}, {0x0000A9D0, 0x0000A9D9}, -{0x0000A9F0, 0x0000A9F9}, {0x0000AA50, 0x0000AA59}, {0x0000ABF0, 0x0000ABF9}, {0x0000FF10, 0x0000FF19}, -{0x000104A0, 0x000104A9}, {0x00010A40, 0x00010A43}, {0x00010D30, 0x00010D39}, {0x00010E60, 0x00010E68}, -{0x00011052, 0x0001105A}, {0x00011066, 0x0001106F}, {0x000110F0, 0x000110F9}, {0x00011136, 0x0001113F}, -{0x000111D0, 0x000111D9}, {0x000112F0, 0x000112F9}, {0x00011450, 0x00011459}, {0x000114D0, 0x000114D9}, -{0x00011650, 0x00011659}, {0x000116C0, 0x000116C9}, {0x00011730, 0x00011739}, {0x000118E0, 0x000118E9}, -{0x00011950, 0x00011959}, {0x00011C50, 0x00011C59}, {0x00011D50, 0x00011D59}, {0x00011DA0, 0x00011DA9}, -{0x00016A60, 0x00016A69}, {0x00016B50, 0x00016B59}, {0x0001D7CE, 0x0001D7FF}, {0x0001E140, 0x0001E149}, -{0x0001E2F0, 0x0001E2F9}, {0x0001E950, 0x0001E959}, {0x0001F100, 0x0001F10A}, {0x0001FBF0, 0x0001FBF9}, -}; - -const std::vector> unicode_ranges_letter = { -{0x00000041, 0x0000005A}, {0x00000061, 0x0000007A}, {0x000000AA, 0x000000AA}, {0x000000B5, 0x000000B5}, -{0x000000BA, 0x000000BA}, {0x000000C0, 0x000000D6}, {0x000000D8, 0x000000F6}, {0x000000F8, 0x000002C1}, -{0x000002C6, 0x000002D1}, {0x000002E0, 0x000002E4}, {0x000002EC, 0x000002EC}, {0x000002EE, 0x000002EE}, -{0x00000370, 0x00000374}, {0x00000376, 0x00000377}, {0x0000037A, 0x0000037D}, {0x0000037F, 0x0000037F}, -{0x00000386, 0x00000386}, {0x00000388, 0x0000038A}, {0x0000038C, 0x0000038C}, {0x0000038E, 0x000003A1}, -{0x000003A3, 0x000003F5}, {0x000003F7, 0x00000481}, {0x0000048A, 0x0000052F}, {0x00000531, 0x00000556}, -{0x00000559, 0x00000559}, {0x00000560, 0x00000588}, {0x000005D0, 0x000005EA}, {0x000005EF, 0x000005F2}, -{0x00000620, 0x0000064A}, {0x0000066E, 0x0000066F}, {0x00000671, 0x000006D3}, {0x000006D5, 0x000006D5}, -{0x000006E5, 0x000006E6}, {0x000006EE, 0x000006EF}, {0x000006FA, 0x000006FC}, {0x000006FF, 0x000006FF}, -{0x00000710, 0x00000710}, {0x00000712, 0x0000072F}, {0x0000074D, 0x000007A5}, {0x000007B1, 0x000007B1}, -{0x000007CA, 0x000007EA}, {0x000007F4, 0x000007F5}, {0x000007FA, 0x000007FA}, {0x00000800, 0x00000815}, -{0x0000081A, 0x0000081A}, {0x00000824, 0x00000824}, {0x00000828, 0x00000828}, {0x00000840, 0x00000858}, -{0x00000860, 0x0000086A}, {0x000008A0, 0x000008B4}, {0x000008B6, 0x000008C7}, {0x00000904, 0x00000939}, -{0x0000093D, 0x0000093D}, {0x00000950, 0x00000950}, {0x00000958, 0x00000961}, {0x00000971, 0x00000980}, -{0x00000985, 0x0000098C}, {0x0000098F, 0x00000990}, {0x00000993, 0x000009A8}, {0x000009AA, 0x000009B0}, -{0x000009B2, 0x000009B2}, {0x000009B6, 0x000009B9}, {0x000009BD, 0x000009BD}, {0x000009CE, 0x000009CE}, -{0x000009DC, 0x000009DD}, {0x000009DF, 0x000009E1}, {0x000009F0, 0x000009F1}, {0x000009FC, 0x000009FC}, -{0x00000A05, 0x00000A0A}, {0x00000A0F, 0x00000A10}, {0x00000A13, 0x00000A28}, {0x00000A2A, 0x00000A30}, -{0x00000A32, 0x00000A33}, {0x00000A35, 0x00000A36}, {0x00000A38, 0x00000A39}, {0x00000A59, 0x00000A5C}, -{0x00000A5E, 0x00000A5E}, {0x00000A72, 0x00000A74}, {0x00000A85, 0x00000A8D}, {0x00000A8F, 0x00000A91}, -{0x00000A93, 0x00000AA8}, {0x00000AAA, 0x00000AB0}, {0x00000AB2, 0x00000AB3}, {0x00000AB5, 0x00000AB9}, -{0x00000ABD, 0x00000ABD}, {0x00000AD0, 0x00000AD0}, {0x00000AE0, 0x00000AE1}, {0x00000AF9, 0x00000AF9}, -{0x00000B05, 0x00000B0C}, {0x00000B0F, 0x00000B10}, {0x00000B13, 0x00000B28}, {0x00000B2A, 0x00000B30}, -{0x00000B32, 0x00000B33}, {0x00000B35, 0x00000B39}, {0x00000B3D, 0x00000B3D}, {0x00000B5C, 0x00000B5D}, -{0x00000B5F, 0x00000B61}, {0x00000B71, 0x00000B71}, {0x00000B83, 0x00000B83}, {0x00000B85, 0x00000B8A}, -{0x00000B8E, 0x00000B90}, {0x00000B92, 0x00000B95}, {0x00000B99, 0x00000B9A}, {0x00000B9C, 0x00000B9C}, -{0x00000B9E, 0x00000B9F}, {0x00000BA3, 0x00000BA4}, {0x00000BA8, 0x00000BAA}, {0x00000BAE, 0x00000BB9}, -{0x00000BD0, 0x00000BD0}, {0x00000C05, 0x00000C0C}, {0x00000C0E, 0x00000C10}, {0x00000C12, 0x00000C28}, -{0x00000C2A, 0x00000C39}, {0x00000C3D, 0x00000C3D}, {0x00000C58, 0x00000C5A}, {0x00000C60, 0x00000C61}, -{0x00000C80, 0x00000C80}, {0x00000C85, 0x00000C8C}, {0x00000C8E, 0x00000C90}, {0x00000C92, 0x00000CA8}, -{0x00000CAA, 0x00000CB3}, {0x00000CB5, 0x00000CB9}, {0x00000CBD, 0x00000CBD}, {0x00000CDE, 0x00000CDE}, -{0x00000CE0, 0x00000CE1}, {0x00000CF1, 0x00000CF2}, {0x00000D04, 0x00000D0C}, {0x00000D0E, 0x00000D10}, -{0x00000D12, 0x00000D3A}, {0x00000D3D, 0x00000D3D}, {0x00000D4E, 0x00000D4E}, {0x00000D54, 0x00000D56}, -{0x00000D5F, 0x00000D61}, {0x00000D7A, 0x00000D7F}, {0x00000D85, 0x00000D96}, {0x00000D9A, 0x00000DB1}, -{0x00000DB3, 0x00000DBB}, {0x00000DBD, 0x00000DBD}, {0x00000DC0, 0x00000DC6}, {0x00000E01, 0x00000E30}, -{0x00000E32, 0x00000E33}, {0x00000E40, 0x00000E46}, {0x00000E81, 0x00000E82}, {0x00000E84, 0x00000E84}, -{0x00000E86, 0x00000E8A}, {0x00000E8C, 0x00000EA3}, {0x00000EA5, 0x00000EA5}, {0x00000EA7, 0x00000EB0}, -{0x00000EB2, 0x00000EB3}, {0x00000EBD, 0x00000EBD}, {0x00000EC0, 0x00000EC4}, {0x00000EC6, 0x00000EC6}, -{0x00000EDC, 0x00000EDF}, {0x00000F00, 0x00000F00}, {0x00000F40, 0x00000F47}, {0x00000F49, 0x00000F6C}, -{0x00000F88, 0x00000F8C}, {0x00001000, 0x0000102A}, {0x0000103F, 0x0000103F}, {0x00001050, 0x00001055}, -{0x0000105A, 0x0000105D}, {0x00001061, 0x00001061}, {0x00001065, 0x00001066}, {0x0000106E, 0x00001070}, -{0x00001075, 0x00001081}, {0x0000108E, 0x0000108E}, {0x000010A0, 0x000010C5}, {0x000010C7, 0x000010C7}, -{0x000010CD, 0x000010CD}, {0x000010D0, 0x000010FA}, {0x000010FC, 0x00001248}, {0x0000124A, 0x0000124D}, -{0x00001250, 0x00001256}, {0x00001258, 0x00001258}, {0x0000125A, 0x0000125D}, {0x00001260, 0x00001288}, -{0x0000128A, 0x0000128D}, {0x00001290, 0x000012B0}, {0x000012B2, 0x000012B5}, {0x000012B8, 0x000012BE}, -{0x000012C0, 0x000012C0}, {0x000012C2, 0x000012C5}, {0x000012C8, 0x000012D6}, {0x000012D8, 0x00001310}, -{0x00001312, 0x00001315}, {0x00001318, 0x0000135A}, {0x00001380, 0x0000138F}, {0x000013A0, 0x000013F5}, -{0x000013F8, 0x000013FD}, {0x00001401, 0x0000166C}, {0x0000166F, 0x0000167F}, {0x00001681, 0x0000169A}, -{0x000016A0, 0x000016EA}, {0x000016F1, 0x000016F8}, {0x00001700, 0x0000170C}, {0x0000170E, 0x00001711}, -{0x00001720, 0x00001731}, {0x00001740, 0x00001751}, {0x00001760, 0x0000176C}, {0x0000176E, 0x00001770}, -{0x00001780, 0x000017B3}, {0x000017D7, 0x000017D7}, {0x000017DC, 0x000017DC}, {0x00001820, 0x00001878}, -{0x00001880, 0x00001884}, {0x00001887, 0x000018A8}, {0x000018AA, 0x000018AA}, {0x000018B0, 0x000018F5}, -{0x00001900, 0x0000191E}, {0x00001950, 0x0000196D}, {0x00001970, 0x00001974}, {0x00001980, 0x000019AB}, -{0x000019B0, 0x000019C9}, {0x00001A00, 0x00001A16}, {0x00001A20, 0x00001A54}, {0x00001AA7, 0x00001AA7}, -{0x00001B05, 0x00001B33}, {0x00001B45, 0x00001B4B}, {0x00001B83, 0x00001BA0}, {0x00001BAE, 0x00001BAF}, -{0x00001BBA, 0x00001BE5}, {0x00001C00, 0x00001C23}, {0x00001C4D, 0x00001C4F}, {0x00001C5A, 0x00001C7D}, -{0x00001C80, 0x00001C88}, {0x00001C90, 0x00001CBA}, {0x00001CBD, 0x00001CBF}, {0x00001CE9, 0x00001CEC}, -{0x00001CEE, 0x00001CF3}, {0x00001CF5, 0x00001CF6}, {0x00001CFA, 0x00001CFA}, {0x00001D00, 0x00001DBF}, -{0x00001E00, 0x00001F15}, {0x00001F18, 0x00001F1D}, {0x00001F20, 0x00001F45}, {0x00001F48, 0x00001F4D}, -{0x00001F50, 0x00001F57}, {0x00001F59, 0x00001F59}, {0x00001F5B, 0x00001F5B}, {0x00001F5D, 0x00001F5D}, -{0x00001F5F, 0x00001F7D}, {0x00001F80, 0x00001FB4}, {0x00001FB6, 0x00001FBC}, {0x00001FBE, 0x00001FBE}, -{0x00001FC2, 0x00001FC4}, {0x00001FC6, 0x00001FCC}, {0x00001FD0, 0x00001FD3}, {0x00001FD6, 0x00001FDB}, -{0x00001FE0, 0x00001FEC}, {0x00001FF2, 0x00001FF4}, {0x00001FF6, 0x00001FFC}, {0x00002071, 0x00002071}, -{0x0000207F, 0x0000207F}, {0x00002090, 0x0000209C}, {0x00002102, 0x00002102}, {0x00002107, 0x00002107}, -{0x0000210A, 0x00002113}, {0x00002115, 0x00002115}, {0x00002119, 0x0000211D}, {0x00002124, 0x00002124}, -{0x00002126, 0x00002126}, {0x00002128, 0x00002128}, {0x0000212A, 0x0000212D}, {0x0000212F, 0x00002139}, -{0x0000213C, 0x0000213F}, {0x00002145, 0x00002149}, {0x0000214E, 0x0000214E}, {0x00002183, 0x00002184}, -{0x00002C00, 0x00002C2E}, {0x00002C30, 0x00002C5E}, {0x00002C60, 0x00002CE4}, {0x00002CEB, 0x00002CEE}, -{0x00002CF2, 0x00002CF3}, {0x00002D00, 0x00002D25}, {0x00002D27, 0x00002D27}, {0x00002D2D, 0x00002D2D}, -{0x00002D30, 0x00002D67}, {0x00002D6F, 0x00002D6F}, {0x00002D80, 0x00002D96}, {0x00002DA0, 0x00002DA6}, -{0x00002DA8, 0x00002DAE}, {0x00002DB0, 0x00002DB6}, {0x00002DB8, 0x00002DBE}, {0x00002DC0, 0x00002DC6}, -{0x00002DC8, 0x00002DCE}, {0x00002DD0, 0x00002DD6}, {0x00002DD8, 0x00002DDE}, {0x00002E2F, 0x00002E2F}, -{0x00003005, 0x00003006}, {0x00003031, 0x00003035}, {0x0000303B, 0x0000303C}, {0x00003041, 0x00003096}, -{0x0000309D, 0x0000309F}, {0x000030A1, 0x000030FA}, {0x000030FC, 0x000030FF}, {0x00003105, 0x0000312F}, -{0x00003131, 0x0000318E}, {0x000031A0, 0x000031BF}, {0x000031F0, 0x000031FF}, {0x00003400, 0x00004DBF}, -{0x00004E00, 0x00009FFC}, {0x0000A000, 0x0000A48C}, {0x0000A4D0, 0x0000A4FD}, {0x0000A500, 0x0000A60C}, -{0x0000A610, 0x0000A61F}, {0x0000A62A, 0x0000A62B}, {0x0000A640, 0x0000A66E}, {0x0000A67F, 0x0000A69D}, -{0x0000A6A0, 0x0000A6E5}, {0x0000A717, 0x0000A71F}, {0x0000A722, 0x0000A788}, {0x0000A78B, 0x0000A7BF}, -{0x0000A7C2, 0x0000A7CA}, {0x0000A7F5, 0x0000A801}, {0x0000A803, 0x0000A805}, {0x0000A807, 0x0000A80A}, -{0x0000A80C, 0x0000A822}, {0x0000A840, 0x0000A873}, {0x0000A882, 0x0000A8B3}, {0x0000A8F2, 0x0000A8F7}, -{0x0000A8FB, 0x0000A8FB}, {0x0000A8FD, 0x0000A8FE}, {0x0000A90A, 0x0000A925}, {0x0000A930, 0x0000A946}, -{0x0000A960, 0x0000A97C}, {0x0000A984, 0x0000A9B2}, {0x0000A9CF, 0x0000A9CF}, {0x0000A9E0, 0x0000A9E4}, -{0x0000A9E6, 0x0000A9EF}, {0x0000A9FA, 0x0000A9FE}, {0x0000AA00, 0x0000AA28}, {0x0000AA40, 0x0000AA42}, -{0x0000AA44, 0x0000AA4B}, {0x0000AA60, 0x0000AA76}, {0x0000AA7A, 0x0000AA7A}, {0x0000AA7E, 0x0000AAAF}, -{0x0000AAB1, 0x0000AAB1}, {0x0000AAB5, 0x0000AAB6}, {0x0000AAB9, 0x0000AABD}, {0x0000AAC0, 0x0000AAC0}, -{0x0000AAC2, 0x0000AAC2}, {0x0000AADB, 0x0000AADD}, {0x0000AAE0, 0x0000AAEA}, {0x0000AAF2, 0x0000AAF4}, -{0x0000AB01, 0x0000AB06}, {0x0000AB09, 0x0000AB0E}, {0x0000AB11, 0x0000AB16}, {0x0000AB20, 0x0000AB26}, -{0x0000AB28, 0x0000AB2E}, {0x0000AB30, 0x0000AB5A}, {0x0000AB5C, 0x0000AB69}, {0x0000AB70, 0x0000ABE2}, -{0x0000AC00, 0x0000D7A3}, {0x0000D7B0, 0x0000D7C6}, {0x0000D7CB, 0x0000D7FB}, {0x0000F900, 0x0000FA6D}, -{0x0000FA70, 0x0000FAD9}, {0x0000FB00, 0x0000FB06}, {0x0000FB13, 0x0000FB17}, {0x0000FB1D, 0x0000FB1D}, -{0x0000FB1F, 0x0000FB28}, {0x0000FB2A, 0x0000FB36}, {0x0000FB38, 0x0000FB3C}, {0x0000FB3E, 0x0000FB3E}, -{0x0000FB40, 0x0000FB41}, {0x0000FB43, 0x0000FB44}, {0x0000FB46, 0x0000FBB1}, {0x0000FBD3, 0x0000FD3D}, -{0x0000FD50, 0x0000FD8F}, {0x0000FD92, 0x0000FDC7}, {0x0000FDF0, 0x0000FDFB}, {0x0000FE70, 0x0000FE74}, -{0x0000FE76, 0x0000FEFC}, {0x0000FF21, 0x0000FF3A}, {0x0000FF41, 0x0000FF5A}, {0x0000FF66, 0x0000FFBE}, -{0x0000FFC2, 0x0000FFC7}, {0x0000FFCA, 0x0000FFCF}, {0x0000FFD2, 0x0000FFD7}, {0x0000FFDA, 0x0000FFDC}, -{0x00010000, 0x0001000B}, {0x0001000D, 0x00010026}, {0x00010028, 0x0001003A}, {0x0001003C, 0x0001003D}, -{0x0001003F, 0x0001004D}, {0x00010050, 0x0001005D}, {0x00010080, 0x000100FA}, {0x00010280, 0x0001029C}, -{0x000102A0, 0x000102D0}, {0x00010300, 0x0001031F}, {0x0001032D, 0x00010340}, {0x00010342, 0x00010349}, -{0x00010350, 0x00010375}, {0x00010380, 0x0001039D}, {0x000103A0, 0x000103C3}, {0x000103C8, 0x000103CF}, -{0x00010400, 0x0001049D}, {0x000104B0, 0x000104D3}, {0x000104D8, 0x000104FB}, {0x00010500, 0x00010527}, -{0x00010530, 0x00010563}, {0x00010600, 0x00010736}, {0x00010740, 0x00010755}, {0x00010760, 0x00010767}, -{0x00010800, 0x00010805}, {0x00010808, 0x00010808}, {0x0001080A, 0x00010835}, {0x00010837, 0x00010838}, -{0x0001083C, 0x0001083C}, {0x0001083F, 0x00010855}, {0x00010860, 0x00010876}, {0x00010880, 0x0001089E}, -{0x000108E0, 0x000108F2}, {0x000108F4, 0x000108F5}, {0x00010900, 0x00010915}, {0x00010920, 0x00010939}, -{0x00010980, 0x000109B7}, {0x000109BE, 0x000109BF}, {0x00010A00, 0x00010A00}, {0x00010A10, 0x00010A13}, -{0x00010A15, 0x00010A17}, {0x00010A19, 0x00010A35}, {0x00010A60, 0x00010A7C}, {0x00010A80, 0x00010A9C}, -{0x00010AC0, 0x00010AC7}, {0x00010AC9, 0x00010AE4}, {0x00010B00, 0x00010B35}, {0x00010B40, 0x00010B55}, -{0x00010B60, 0x00010B72}, {0x00010B80, 0x00010B91}, {0x00010C00, 0x00010C48}, {0x00010C80, 0x00010CB2}, -{0x00010CC0, 0x00010CF2}, {0x00010D00, 0x00010D23}, {0x00010E80, 0x00010EA9}, {0x00010EB0, 0x00010EB1}, -{0x00010F00, 0x00010F1C}, {0x00010F27, 0x00010F27}, {0x00010F30, 0x00010F45}, {0x00010FB0, 0x00010FC4}, -{0x00010FE0, 0x00010FF6}, {0x00011003, 0x00011037}, {0x00011083, 0x000110AF}, {0x000110D0, 0x000110E8}, -{0x00011103, 0x00011126}, {0x00011144, 0x00011144}, {0x00011147, 0x00011147}, {0x00011150, 0x00011172}, -{0x00011176, 0x00011176}, {0x00011183, 0x000111B2}, {0x000111C1, 0x000111C4}, {0x000111DA, 0x000111DA}, -{0x000111DC, 0x000111DC}, {0x00011200, 0x00011211}, {0x00011213, 0x0001122B}, {0x00011280, 0x00011286}, -{0x00011288, 0x00011288}, {0x0001128A, 0x0001128D}, {0x0001128F, 0x0001129D}, {0x0001129F, 0x000112A8}, -{0x000112B0, 0x000112DE}, {0x00011305, 0x0001130C}, {0x0001130F, 0x00011310}, {0x00011313, 0x00011328}, -{0x0001132A, 0x00011330}, {0x00011332, 0x00011333}, {0x00011335, 0x00011339}, {0x0001133D, 0x0001133D}, -{0x00011350, 0x00011350}, {0x0001135D, 0x00011361}, {0x00011400, 0x00011434}, {0x00011447, 0x0001144A}, -{0x0001145F, 0x00011461}, {0x00011480, 0x000114AF}, {0x000114C4, 0x000114C5}, {0x000114C7, 0x000114C7}, -{0x00011580, 0x000115AE}, {0x000115D8, 0x000115DB}, {0x00011600, 0x0001162F}, {0x00011644, 0x00011644}, -{0x00011680, 0x000116AA}, {0x000116B8, 0x000116B8}, {0x00011700, 0x0001171A}, {0x00011800, 0x0001182B}, -{0x000118A0, 0x000118DF}, {0x000118FF, 0x00011906}, {0x00011909, 0x00011909}, {0x0001190C, 0x00011913}, -{0x00011915, 0x00011916}, {0x00011918, 0x0001192F}, {0x0001193F, 0x0001193F}, {0x00011941, 0x00011941}, -{0x000119A0, 0x000119A7}, {0x000119AA, 0x000119D0}, {0x000119E1, 0x000119E1}, {0x000119E3, 0x000119E3}, -{0x00011A00, 0x00011A00}, {0x00011A0B, 0x00011A32}, {0x00011A3A, 0x00011A3A}, {0x00011A50, 0x00011A50}, -{0x00011A5C, 0x00011A89}, {0x00011A9D, 0x00011A9D}, {0x00011AC0, 0x00011AF8}, {0x00011C00, 0x00011C08}, -{0x00011C0A, 0x00011C2E}, {0x00011C40, 0x00011C40}, {0x00011C72, 0x00011C8F}, {0x00011D00, 0x00011D06}, -{0x00011D08, 0x00011D09}, {0x00011D0B, 0x00011D30}, {0x00011D46, 0x00011D46}, {0x00011D60, 0x00011D65}, -{0x00011D67, 0x00011D68}, {0x00011D6A, 0x00011D89}, {0x00011D98, 0x00011D98}, {0x00011EE0, 0x00011EF2}, -{0x00011FB0, 0x00011FB0}, {0x00012000, 0x00012399}, {0x00012480, 0x00012543}, {0x00013000, 0x0001342E}, -{0x00014400, 0x00014646}, {0x00016800, 0x00016A38}, {0x00016A40, 0x00016A5E}, {0x00016AD0, 0x00016AED}, -{0x00016B00, 0x00016B2F}, {0x00016B40, 0x00016B43}, {0x00016B63, 0x00016B77}, {0x00016B7D, 0x00016B8F}, -{0x00016E40, 0x00016E7F}, {0x00016F00, 0x00016F4A}, {0x00016F50, 0x00016F50}, {0x00016F93, 0x00016F9F}, -{0x00016FE0, 0x00016FE1}, {0x00016FE3, 0x00016FE3}, {0x00017000, 0x000187F7}, {0x00018800, 0x00018CD5}, -{0x00018D00, 0x00018D08}, {0x0001B000, 0x0001B11E}, {0x0001B150, 0x0001B152}, {0x0001B164, 0x0001B167}, -{0x0001B170, 0x0001B2FB}, {0x0001BC00, 0x0001BC6A}, {0x0001BC70, 0x0001BC7C}, {0x0001BC80, 0x0001BC88}, -{0x0001BC90, 0x0001BC99}, {0x0001D400, 0x0001D454}, {0x0001D456, 0x0001D49C}, {0x0001D49E, 0x0001D49F}, -{0x0001D4A2, 0x0001D4A2}, {0x0001D4A5, 0x0001D4A6}, {0x0001D4A9, 0x0001D4AC}, {0x0001D4AE, 0x0001D4B9}, -{0x0001D4BB, 0x0001D4BB}, {0x0001D4BD, 0x0001D4C3}, {0x0001D4C5, 0x0001D505}, {0x0001D507, 0x0001D50A}, -{0x0001D50D, 0x0001D514}, {0x0001D516, 0x0001D51C}, {0x0001D51E, 0x0001D539}, {0x0001D53B, 0x0001D53E}, -{0x0001D540, 0x0001D544}, {0x0001D546, 0x0001D546}, {0x0001D54A, 0x0001D550}, {0x0001D552, 0x0001D6A5}, -{0x0001D6A8, 0x0001D6C0}, {0x0001D6C2, 0x0001D6DA}, {0x0001D6DC, 0x0001D6FA}, {0x0001D6FC, 0x0001D714}, -{0x0001D716, 0x0001D734}, {0x0001D736, 0x0001D74E}, {0x0001D750, 0x0001D76E}, {0x0001D770, 0x0001D788}, -{0x0001D78A, 0x0001D7A8}, {0x0001D7AA, 0x0001D7C2}, {0x0001D7C4, 0x0001D7CB}, {0x0001E100, 0x0001E12C}, -{0x0001E137, 0x0001E13D}, {0x0001E14E, 0x0001E14E}, {0x0001E2C0, 0x0001E2EB}, {0x0001E800, 0x0001E8C4}, -{0x0001E900, 0x0001E943}, {0x0001E94B, 0x0001E94B}, {0x0001EE00, 0x0001EE03}, {0x0001EE05, 0x0001EE1F}, -{0x0001EE21, 0x0001EE22}, {0x0001EE24, 0x0001EE24}, {0x0001EE27, 0x0001EE27}, {0x0001EE29, 0x0001EE32}, -{0x0001EE34, 0x0001EE37}, {0x0001EE39, 0x0001EE39}, {0x0001EE3B, 0x0001EE3B}, {0x0001EE42, 0x0001EE42}, -{0x0001EE47, 0x0001EE47}, {0x0001EE49, 0x0001EE49}, {0x0001EE4B, 0x0001EE4B}, {0x0001EE4D, 0x0001EE4F}, -{0x0001EE51, 0x0001EE52}, {0x0001EE54, 0x0001EE54}, {0x0001EE57, 0x0001EE57}, {0x0001EE59, 0x0001EE59}, -{0x0001EE5B, 0x0001EE5B}, {0x0001EE5D, 0x0001EE5D}, {0x0001EE5F, 0x0001EE5F}, {0x0001EE61, 0x0001EE62}, -{0x0001EE64, 0x0001EE64}, {0x0001EE67, 0x0001EE6A}, {0x0001EE6C, 0x0001EE72}, {0x0001EE74, 0x0001EE77}, -{0x0001EE79, 0x0001EE7C}, {0x0001EE7E, 0x0001EE7E}, {0x0001EE80, 0x0001EE89}, {0x0001EE8B, 0x0001EE9B}, -{0x0001EEA1, 0x0001EEA3}, {0x0001EEA5, 0x0001EEA9}, {0x0001EEAB, 0x0001EEBB}, {0x00020000, 0x0002A6DD}, -{0x0002A700, 0x0002B734}, {0x0002B740, 0x0002B81D}, {0x0002B820, 0x0002CEA1}, {0x0002CEB0, 0x0002EBE0}, -{0x0002F800, 0x0002FA1D}, {0x00030000, 0x0003134A}, -}; - -const std::vector> unicode_ranges_whitespace = { -{0x00000009, 0x0000000D}, {0x0000001C, 0x00000020}, {0x00000085, 0x00000085}, {0x000000A0, 0x000000A0}, -{0x00001680, 0x00001680}, {0x00002000, 0x0000200A}, {0x00002028, 0x00002029}, {0x0000202F, 0x0000202F}, -{0x0000205F, 0x0000205F}, {0x00003000, 0x00003000}, -}; - -const std::vector> unicode_ranges_accent_mark = { -{0x00000300, 0x0000036F}, {0x00000483, 0x00000489}, {0x00000591, 0x000005BD}, {0x000005BF, 0x000005BF}, -{0x000005C1, 0x000005C2}, {0x000005C4, 0x000005C5}, {0x000005C7, 0x000005C7}, {0x00000610, 0x0000061A}, -{0x0000064B, 0x0000065F}, {0x00000670, 0x00000670}, {0x000006D6, 0x000006DC}, {0x000006DF, 0x000006E4}, -{0x000006E7, 0x000006E8}, {0x000006EA, 0x000006ED}, {0x00000711, 0x00000711}, {0x00000730, 0x0000074A}, -{0x000007A6, 0x000007B0}, {0x000007EB, 0x000007F3}, {0x000007FD, 0x000007FD}, {0x00000816, 0x00000819}, -{0x0000081B, 0x00000823}, {0x00000825, 0x00000827}, {0x00000829, 0x0000082D}, {0x00000859, 0x0000085B}, -{0x000008D3, 0x000008E1}, {0x000008E3, 0x00000903}, {0x0000093A, 0x0000093C}, {0x0000093E, 0x0000094F}, -{0x00000951, 0x00000957}, {0x00000962, 0x00000963}, {0x00000981, 0x00000983}, {0x000009BC, 0x000009BC}, -{0x000009BE, 0x000009C4}, {0x000009C7, 0x000009C8}, {0x000009CB, 0x000009CD}, {0x000009D7, 0x000009D7}, -{0x000009E2, 0x000009E3}, {0x000009FE, 0x000009FE}, {0x00000A01, 0x00000A03}, {0x00000A3C, 0x00000A3C}, -{0x00000A3E, 0x00000A42}, {0x00000A47, 0x00000A48}, {0x00000A4B, 0x00000A4D}, {0x00000A51, 0x00000A51}, -{0x00000A70, 0x00000A71}, {0x00000A75, 0x00000A75}, {0x00000A81, 0x00000A83}, {0x00000ABC, 0x00000ABC}, -{0x00000ABE, 0x00000AC5}, {0x00000AC7, 0x00000AC9}, {0x00000ACB, 0x00000ACD}, {0x00000AE2, 0x00000AE3}, -{0x00000AFA, 0x00000AFF}, {0x00000B01, 0x00000B03}, {0x00000B3C, 0x00000B3C}, {0x00000B3E, 0x00000B44}, -{0x00000B47, 0x00000B48}, {0x00000B4B, 0x00000B4D}, {0x00000B55, 0x00000B57}, {0x00000B62, 0x00000B63}, -{0x00000B82, 0x00000B82}, {0x00000BBE, 0x00000BC2}, {0x00000BC6, 0x00000BC8}, {0x00000BCA, 0x00000BCD}, -{0x00000BD7, 0x00000BD7}, {0x00000C00, 0x00000C04}, {0x00000C3E, 0x00000C44}, {0x00000C46, 0x00000C48}, -{0x00000C4A, 0x00000C4D}, {0x00000C55, 0x00000C56}, {0x00000C62, 0x00000C63}, {0x00000C81, 0x00000C83}, -{0x00000CBC, 0x00000CBC}, {0x00000CBE, 0x00000CC4}, {0x00000CC6, 0x00000CC8}, {0x00000CCA, 0x00000CCD}, -{0x00000CD5, 0x00000CD6}, {0x00000CE2, 0x00000CE3}, {0x00000D00, 0x00000D03}, {0x00000D3B, 0x00000D3C}, -{0x00000D3E, 0x00000D44}, {0x00000D46, 0x00000D48}, {0x00000D4A, 0x00000D4D}, {0x00000D57, 0x00000D57}, -{0x00000D62, 0x00000D63}, {0x00000D81, 0x00000D83}, {0x00000DCA, 0x00000DCA}, {0x00000DCF, 0x00000DD4}, -{0x00000DD6, 0x00000DD6}, {0x00000DD8, 0x00000DDF}, {0x00000DF2, 0x00000DF3}, {0x00000E31, 0x00000E31}, -{0x00000E34, 0x00000E3A}, {0x00000E47, 0x00000E4E}, {0x00000EB1, 0x00000EB1}, {0x00000EB4, 0x00000EBC}, -{0x00000EC8, 0x00000ECD}, {0x00000F18, 0x00000F19}, {0x00000F35, 0x00000F35}, {0x00000F37, 0x00000F37}, -{0x00000F39, 0x00000F39}, {0x00000F3E, 0x00000F3F}, {0x00000F71, 0x00000F84}, {0x00000F86, 0x00000F87}, -{0x00000F8D, 0x00000F97}, {0x00000F99, 0x00000FBC}, {0x00000FC6, 0x00000FC6}, {0x0000102B, 0x0000103E}, -{0x00001056, 0x00001059}, {0x0000105E, 0x00001060}, {0x00001062, 0x00001064}, {0x00001067, 0x0000106D}, -{0x00001071, 0x00001074}, {0x00001082, 0x0000108D}, {0x0000108F, 0x0000108F}, {0x0000109A, 0x0000109D}, -{0x0000135D, 0x0000135F}, {0x00001712, 0x00001714}, {0x00001732, 0x00001734}, {0x00001752, 0x00001753}, -{0x00001772, 0x00001773}, {0x000017B4, 0x000017D3}, {0x000017DD, 0x000017DD}, {0x0000180B, 0x0000180D}, -{0x00001885, 0x00001886}, {0x000018A9, 0x000018A9}, {0x00001920, 0x0000192B}, {0x00001930, 0x0000193B}, -{0x00001A17, 0x00001A1B}, {0x00001A55, 0x00001A5E}, {0x00001A60, 0x00001A7C}, {0x00001A7F, 0x00001A7F}, -{0x00001AB0, 0x00001AC0}, {0x00001B00, 0x00001B04}, {0x00001B34, 0x00001B44}, {0x00001B6B, 0x00001B73}, -{0x00001B80, 0x00001B82}, {0x00001BA1, 0x00001BAD}, {0x00001BE6, 0x00001BF3}, {0x00001C24, 0x00001C37}, -{0x00001CD0, 0x00001CD2}, {0x00001CD4, 0x00001CE8}, {0x00001CED, 0x00001CED}, {0x00001CF4, 0x00001CF4}, -{0x00001CF7, 0x00001CF9}, {0x00001DC0, 0x00001DF9}, {0x00001DFB, 0x00001DFF}, {0x000020D0, 0x000020F0}, -{0x00002CEF, 0x00002CF1}, {0x00002D7F, 0x00002D7F}, {0x00002DE0, 0x00002DFF}, {0x0000302A, 0x0000302F}, -{0x00003099, 0x0000309A}, {0x0000A66F, 0x0000A672}, {0x0000A674, 0x0000A67D}, {0x0000A69E, 0x0000A69F}, -{0x0000A6F0, 0x0000A6F1}, {0x0000A802, 0x0000A802}, {0x0000A806, 0x0000A806}, {0x0000A80B, 0x0000A80B}, -{0x0000A823, 0x0000A827}, {0x0000A82C, 0x0000A82C}, {0x0000A880, 0x0000A881}, {0x0000A8B4, 0x0000A8C5}, -{0x0000A8E0, 0x0000A8F1}, {0x0000A8FF, 0x0000A8FF}, {0x0000A926, 0x0000A92D}, {0x0000A947, 0x0000A953}, -{0x0000A980, 0x0000A983}, {0x0000A9B3, 0x0000A9C0}, {0x0000A9E5, 0x0000A9E5}, {0x0000AA29, 0x0000AA36}, -{0x0000AA43, 0x0000AA43}, {0x0000AA4C, 0x0000AA4D}, {0x0000AA7B, 0x0000AA7D}, {0x0000AAB0, 0x0000AAB0}, -{0x0000AAB2, 0x0000AAB4}, {0x0000AAB7, 0x0000AAB8}, {0x0000AABE, 0x0000AABF}, {0x0000AAC1, 0x0000AAC1}, -{0x0000AAEB, 0x0000AAEF}, {0x0000AAF5, 0x0000AAF6}, {0x0000ABE3, 0x0000ABEA}, {0x0000ABEC, 0x0000ABED}, -{0x0000FB1E, 0x0000FB1E}, {0x0000FE00, 0x0000FE0F}, {0x0000FE20, 0x0000FE2F}, {0x000101FD, 0x000101FD}, -{0x000102E0, 0x000102E0}, {0x00010376, 0x0001037A}, {0x00010A01, 0x00010A03}, {0x00010A05, 0x00010A06}, -{0x00010A0C, 0x00010A0F}, {0x00010A38, 0x00010A3A}, {0x00010A3F, 0x00010A3F}, {0x00010AE5, 0x00010AE6}, -{0x00010D24, 0x00010D27}, {0x00010EAB, 0x00010EAC}, {0x00010F46, 0x00010F50}, {0x00011000, 0x00011002}, -{0x00011038, 0x00011046}, {0x0001107F, 0x00011082}, {0x000110B0, 0x000110BA}, {0x00011100, 0x00011102}, -{0x00011127, 0x00011134}, {0x00011145, 0x00011146}, {0x00011173, 0x00011173}, {0x00011180, 0x00011182}, -{0x000111B3, 0x000111C0}, {0x000111C9, 0x000111CC}, {0x000111CE, 0x000111CF}, {0x0001122C, 0x00011237}, -{0x0001123E, 0x0001123E}, {0x000112DF, 0x000112EA}, {0x00011300, 0x00011303}, {0x0001133B, 0x0001133C}, -{0x0001133E, 0x00011344}, {0x00011347, 0x00011348}, {0x0001134B, 0x0001134D}, {0x00011357, 0x00011357}, -{0x00011362, 0x00011363}, {0x00011366, 0x0001136C}, {0x00011370, 0x00011374}, {0x00011435, 0x00011446}, -{0x0001145E, 0x0001145E}, {0x000114B0, 0x000114C3}, {0x000115AF, 0x000115B5}, {0x000115B8, 0x000115C0}, -{0x000115DC, 0x000115DD}, {0x00011630, 0x00011640}, {0x000116AB, 0x000116B7}, {0x0001171D, 0x0001172B}, -{0x0001182C, 0x0001183A}, {0x00011930, 0x00011935}, {0x00011937, 0x00011938}, {0x0001193B, 0x0001193E}, -{0x00011940, 0x00011940}, {0x00011942, 0x00011943}, {0x000119D1, 0x000119D7}, {0x000119DA, 0x000119E0}, -{0x000119E4, 0x000119E4}, {0x00011A01, 0x00011A0A}, {0x00011A33, 0x00011A39}, {0x00011A3B, 0x00011A3E}, -{0x00011A47, 0x00011A47}, {0x00011A51, 0x00011A5B}, {0x00011A8A, 0x00011A99}, {0x00011C2F, 0x00011C36}, -{0x00011C38, 0x00011C3F}, {0x00011C92, 0x00011CA7}, {0x00011CA9, 0x00011CB6}, {0x00011D31, 0x00011D36}, -{0x00011D3A, 0x00011D3A}, {0x00011D3C, 0x00011D3D}, {0x00011D3F, 0x00011D45}, {0x00011D47, 0x00011D47}, -{0x00011D8A, 0x00011D8E}, {0x00011D90, 0x00011D91}, {0x00011D93, 0x00011D97}, {0x00011EF3, 0x00011EF6}, -{0x00016AF0, 0x00016AF4}, {0x00016B30, 0x00016B36}, {0x00016F4F, 0x00016F4F}, {0x00016F51, 0x00016F87}, -{0x00016F8F, 0x00016F92}, {0x00016FE4, 0x00016FE4}, {0x00016FF0, 0x00016FF1}, {0x0001BC9D, 0x0001BC9E}, -{0x0001D165, 0x0001D169}, {0x0001D16D, 0x0001D172}, {0x0001D17B, 0x0001D182}, {0x0001D185, 0x0001D18B}, -{0x0001D1AA, 0x0001D1AD}, {0x0001D242, 0x0001D244}, {0x0001DA00, 0x0001DA36}, {0x0001DA3B, 0x0001DA6C}, -{0x0001DA75, 0x0001DA75}, {0x0001DA84, 0x0001DA84}, {0x0001DA9B, 0x0001DA9F}, {0x0001DAA1, 0x0001DAAF}, -{0x0001E000, 0x0001E006}, {0x0001E008, 0x0001E018}, {0x0001E01B, 0x0001E021}, {0x0001E023, 0x0001E024}, -{0x0001E026, 0x0001E02A}, {0x0001E130, 0x0001E136}, {0x0001E2EC, 0x0001E2EF}, {0x0001E8D0, 0x0001E8D6}, -{0x0001E944, 0x0001E94A}, {0x000E0100, 0x000E01EF}, -}; - -const std::vector> unicode_ranges_punctuation = { -{0x00000021, 0x00000023}, {0x00000025, 0x0000002A}, {0x0000002C, 0x0000002F}, {0x0000003A, 0x0000003B}, -{0x0000003F, 0x00000040}, {0x0000005B, 0x0000005D}, {0x0000005F, 0x0000005F}, {0x0000007B, 0x0000007B}, -{0x0000007D, 0x0000007D}, {0x000000A1, 0x000000A1}, {0x000000A7, 0x000000A7}, {0x000000AB, 0x000000AB}, -{0x000000B6, 0x000000B7}, {0x000000BB, 0x000000BB}, {0x000000BF, 0x000000BF}, {0x0000037E, 0x0000037E}, -{0x00000387, 0x00000387}, {0x0000055A, 0x0000055F}, {0x00000589, 0x0000058A}, {0x000005BE, 0x000005BE}, -{0x000005C0, 0x000005C0}, {0x000005C3, 0x000005C3}, {0x000005C6, 0x000005C6}, {0x000005F3, 0x000005F4}, -{0x00000609, 0x0000060A}, {0x0000060C, 0x0000060D}, {0x0000061B, 0x0000061B}, {0x0000061E, 0x0000061F}, -{0x0000066A, 0x0000066D}, {0x000006D4, 0x000006D4}, {0x00000700, 0x0000070D}, {0x000007F7, 0x000007F9}, -{0x00000830, 0x0000083E}, {0x0000085E, 0x0000085E}, {0x00000964, 0x00000965}, {0x00000970, 0x00000970}, -{0x000009FD, 0x000009FD}, {0x00000A76, 0x00000A76}, {0x00000AF0, 0x00000AF0}, {0x00000C77, 0x00000C77}, -{0x00000C84, 0x00000C84}, {0x00000DF4, 0x00000DF4}, {0x00000E4F, 0x00000E4F}, {0x00000E5A, 0x00000E5B}, -{0x00000F04, 0x00000F12}, {0x00000F14, 0x00000F14}, {0x00000F3A, 0x00000F3D}, {0x00000F85, 0x00000F85}, -{0x00000FD0, 0x00000FD4}, {0x00000FD9, 0x00000FDA}, {0x0000104A, 0x0000104F}, {0x000010FB, 0x000010FB}, -{0x00001360, 0x00001368}, {0x00001400, 0x00001400}, {0x0000166E, 0x0000166E}, {0x0000169B, 0x0000169C}, -{0x000016EB, 0x000016ED}, {0x00001735, 0x00001736}, {0x000017D4, 0x000017D6}, {0x000017D8, 0x000017DA}, -{0x00001800, 0x0000180A}, {0x00001944, 0x00001945}, {0x00001A1E, 0x00001A1F}, {0x00001AA0, 0x00001AA6}, -{0x00001AA8, 0x00001AAD}, {0x00001B5A, 0x00001B60}, {0x00001BFC, 0x00001BFF}, {0x00001C3B, 0x00001C3F}, -{0x00001C7E, 0x00001C7F}, {0x00001CC0, 0x00001CC7}, {0x00001CD3, 0x00001CD3}, {0x00002010, 0x00002027}, -{0x00002030, 0x00002043}, {0x00002045, 0x00002051}, {0x00002053, 0x0000205E}, {0x0000207D, 0x0000207E}, -{0x0000208D, 0x0000208E}, {0x00002308, 0x0000230B}, {0x00002329, 0x0000232A}, {0x00002768, 0x00002775}, -{0x000027C5, 0x000027C6}, {0x000027E6, 0x000027EF}, {0x00002983, 0x00002998}, {0x000029D8, 0x000029DB}, -{0x000029FC, 0x000029FD}, {0x00002CF9, 0x00002CFC}, {0x00002CFE, 0x00002CFF}, {0x00002D70, 0x00002D70}, -{0x00002E00, 0x00002E2E}, {0x00002E30, 0x00002E4F}, {0x00002E52, 0x00002E52}, {0x00003001, 0x00003003}, -{0x00003008, 0x00003011}, {0x00003014, 0x0000301F}, {0x00003030, 0x00003030}, {0x0000303D, 0x0000303D}, -{0x000030A0, 0x000030A0}, {0x000030FB, 0x000030FB}, {0x0000A4FE, 0x0000A4FF}, {0x0000A60D, 0x0000A60F}, -{0x0000A673, 0x0000A673}, {0x0000A67E, 0x0000A67E}, {0x0000A6F2, 0x0000A6F7}, {0x0000A874, 0x0000A877}, -{0x0000A8CE, 0x0000A8CF}, {0x0000A8F8, 0x0000A8FA}, {0x0000A8FC, 0x0000A8FC}, {0x0000A92E, 0x0000A92F}, -{0x0000A95F, 0x0000A95F}, {0x0000A9C1, 0x0000A9CD}, {0x0000A9DE, 0x0000A9DF}, {0x0000AA5C, 0x0000AA5F}, -{0x0000AADE, 0x0000AADF}, {0x0000AAF0, 0x0000AAF1}, {0x0000ABEB, 0x0000ABEB}, {0x0000FD3E, 0x0000FD3F}, -{0x0000FE10, 0x0000FE19}, {0x0000FE30, 0x0000FE52}, {0x0000FE54, 0x0000FE61}, {0x0000FE63, 0x0000FE63}, -{0x0000FE68, 0x0000FE68}, {0x0000FE6A, 0x0000FE6B}, {0x0000FF01, 0x0000FF03}, {0x0000FF05, 0x0000FF0A}, -{0x0000FF0C, 0x0000FF0F}, {0x0000FF1A, 0x0000FF1B}, {0x0000FF1F, 0x0000FF20}, {0x0000FF3B, 0x0000FF3D}, -{0x0000FF3F, 0x0000FF3F}, {0x0000FF5B, 0x0000FF5B}, {0x0000FF5D, 0x0000FF5D}, {0x0000FF5F, 0x0000FF65}, -{0x00010100, 0x00010102}, {0x0001039F, 0x0001039F}, {0x000103D0, 0x000103D0}, {0x0001056F, 0x0001056F}, -{0x00010857, 0x00010857}, {0x0001091F, 0x0001091F}, {0x0001093F, 0x0001093F}, {0x00010A50, 0x00010A58}, -{0x00010A7F, 0x00010A7F}, {0x00010AF0, 0x00010AF6}, {0x00010B39, 0x00010B3F}, {0x00010B99, 0x00010B9C}, -{0x00010EAD, 0x00010EAD}, {0x00010F55, 0x00010F59}, {0x00011047, 0x0001104D}, {0x000110BB, 0x000110BC}, -{0x000110BE, 0x000110C1}, {0x00011140, 0x00011143}, {0x00011174, 0x00011175}, {0x000111C5, 0x000111C8}, -{0x000111CD, 0x000111CD}, {0x000111DB, 0x000111DB}, {0x000111DD, 0x000111DF}, {0x00011238, 0x0001123D}, -{0x000112A9, 0x000112A9}, {0x0001144B, 0x0001144F}, {0x0001145A, 0x0001145B}, {0x0001145D, 0x0001145D}, -{0x000114C6, 0x000114C6}, {0x000115C1, 0x000115D7}, {0x00011641, 0x00011643}, {0x00011660, 0x0001166C}, -{0x0001173C, 0x0001173E}, {0x0001183B, 0x0001183B}, {0x00011944, 0x00011946}, {0x000119E2, 0x000119E2}, -{0x00011A3F, 0x00011A46}, {0x00011A9A, 0x00011A9C}, {0x00011A9E, 0x00011AA2}, {0x00011C41, 0x00011C45}, -{0x00011C70, 0x00011C71}, {0x00011EF7, 0x00011EF8}, {0x00011FFF, 0x00011FFF}, {0x00012470, 0x00012474}, -{0x00016A6E, 0x00016A6F}, {0x00016AF5, 0x00016AF5}, {0x00016B37, 0x00016B3B}, {0x00016B44, 0x00016B44}, -{0x00016E97, 0x00016E9A}, {0x00016FE2, 0x00016FE2}, {0x0001BC9F, 0x0001BC9F}, {0x0001DA87, 0x0001DA8B}, -{0x0001E95E, 0x0001E95F}, -}; - -const std::vector> unicode_ranges_symbol = { -{0x00000024, 0x00000024}, {0x0000002B, 0x0000002B}, {0x0000003C, 0x0000003E}, {0x0000005E, 0x0000005E}, -{0x00000060, 0x00000060}, {0x0000007C, 0x0000007C}, {0x0000007E, 0x0000007E}, {0x000000A2, 0x000000A6}, -{0x000000A8, 0x000000A9}, {0x000000AC, 0x000000AC}, {0x000000AE, 0x000000B1}, {0x000000B4, 0x000000B4}, -{0x000000B8, 0x000000B8}, {0x000000D7, 0x000000D7}, {0x000000F7, 0x000000F7}, {0x000002C2, 0x000002C5}, -{0x000002D2, 0x000002DF}, {0x000002E5, 0x000002EB}, {0x000002ED, 0x000002ED}, {0x000002EF, 0x000002FF}, -{0x00000375, 0x00000375}, {0x00000384, 0x00000385}, {0x000003F6, 0x000003F6}, {0x00000482, 0x00000482}, -{0x0000058D, 0x0000058F}, {0x00000606, 0x00000608}, {0x0000060B, 0x0000060B}, {0x0000060E, 0x0000060F}, -{0x000006DE, 0x000006DE}, {0x000006E9, 0x000006E9}, {0x000006FD, 0x000006FE}, {0x000007F6, 0x000007F6}, -{0x000007FE, 0x000007FF}, {0x000009F2, 0x000009F3}, {0x000009FA, 0x000009FB}, {0x00000AF1, 0x00000AF1}, -{0x00000B70, 0x00000B70}, {0x00000BF3, 0x00000BFA}, {0x00000C7F, 0x00000C7F}, {0x00000D4F, 0x00000D4F}, -{0x00000D79, 0x00000D79}, {0x00000E3F, 0x00000E3F}, {0x00000F01, 0x00000F03}, {0x00000F13, 0x00000F13}, -{0x00000F15, 0x00000F17}, {0x00000F1A, 0x00000F1F}, {0x00000F34, 0x00000F34}, {0x00000F36, 0x00000F36}, -{0x00000F38, 0x00000F38}, {0x00000FBE, 0x00000FC5}, {0x00000FC7, 0x00000FCC}, {0x00000FCE, 0x00000FCF}, -{0x00000FD5, 0x00000FD8}, {0x0000109E, 0x0000109F}, {0x00001390, 0x00001399}, {0x0000166D, 0x0000166D}, -{0x000017DB, 0x000017DB}, {0x00001940, 0x00001940}, {0x000019DE, 0x000019FF}, {0x00001B61, 0x00001B6A}, -{0x00001B74, 0x00001B7C}, {0x00001FBD, 0x00001FBD}, {0x00001FBF, 0x00001FC1}, {0x00001FCD, 0x00001FCF}, -{0x00001FDD, 0x00001FDF}, {0x00001FED, 0x00001FEF}, {0x00001FFD, 0x00001FFE}, {0x00002044, 0x00002044}, -{0x00002052, 0x00002052}, {0x0000207A, 0x0000207C}, {0x0000208A, 0x0000208C}, {0x000020A0, 0x000020BF}, -{0x00002100, 0x00002101}, {0x00002103, 0x00002106}, {0x00002108, 0x00002109}, {0x00002114, 0x00002114}, -{0x00002116, 0x00002118}, {0x0000211E, 0x00002123}, {0x00002125, 0x00002125}, {0x00002127, 0x00002127}, -{0x00002129, 0x00002129}, {0x0000212E, 0x0000212E}, {0x0000213A, 0x0000213B}, {0x00002140, 0x00002144}, -{0x0000214A, 0x0000214D}, {0x0000214F, 0x0000214F}, {0x0000218A, 0x0000218B}, {0x00002190, 0x00002307}, -{0x0000230C, 0x00002328}, {0x0000232B, 0x00002426}, {0x00002440, 0x0000244A}, {0x0000249C, 0x000024E9}, -{0x00002500, 0x00002767}, {0x00002794, 0x000027C4}, {0x000027C7, 0x000027E5}, {0x000027F0, 0x00002982}, -{0x00002999, 0x000029D7}, {0x000029DC, 0x000029FB}, {0x000029FE, 0x00002B73}, {0x00002B76, 0x00002B95}, -{0x00002B97, 0x00002BFF}, {0x00002CE5, 0x00002CEA}, {0x00002E50, 0x00002E51}, {0x00002E80, 0x00002E99}, -{0x00002E9B, 0x00002EF3}, {0x00002F00, 0x00002FD5}, {0x00002FF0, 0x00002FFB}, {0x00003004, 0x00003004}, -{0x00003012, 0x00003013}, {0x00003020, 0x00003020}, {0x00003036, 0x00003037}, {0x0000303E, 0x0000303F}, -{0x0000309B, 0x0000309C}, {0x00003190, 0x00003191}, {0x00003196, 0x0000319F}, {0x000031C0, 0x000031E3}, -{0x00003200, 0x0000321E}, {0x0000322A, 0x00003247}, {0x00003250, 0x00003250}, {0x00003260, 0x0000327F}, -{0x0000328A, 0x000032B0}, {0x000032C0, 0x000033FF}, {0x00004DC0, 0x00004DFF}, {0x0000A490, 0x0000A4C6}, -{0x0000A700, 0x0000A716}, {0x0000A720, 0x0000A721}, {0x0000A789, 0x0000A78A}, {0x0000A828, 0x0000A82B}, -{0x0000A836, 0x0000A839}, {0x0000AA77, 0x0000AA79}, {0x0000AB5B, 0x0000AB5B}, {0x0000AB6A, 0x0000AB6B}, -{0x0000FB29, 0x0000FB29}, {0x0000FBB2, 0x0000FBC1}, {0x0000FDFC, 0x0000FDFD}, {0x0000FE62, 0x0000FE62}, -{0x0000FE64, 0x0000FE66}, {0x0000FE69, 0x0000FE69}, {0x0000FF04, 0x0000FF04}, {0x0000FF0B, 0x0000FF0B}, -{0x0000FF1C, 0x0000FF1E}, {0x0000FF3E, 0x0000FF3E}, {0x0000FF40, 0x0000FF40}, {0x0000FF5C, 0x0000FF5C}, -{0x0000FF5E, 0x0000FF5E}, {0x0000FFE0, 0x0000FFE6}, {0x0000FFE8, 0x0000FFEE}, {0x0000FFFC, 0x0000FFFD}, -{0x00010137, 0x0001013F}, {0x00010179, 0x00010189}, {0x0001018C, 0x0001018E}, {0x00010190, 0x0001019C}, -{0x000101A0, 0x000101A0}, {0x000101D0, 0x000101FC}, {0x00010877, 0x00010878}, {0x00010AC8, 0x00010AC8}, -{0x0001173F, 0x0001173F}, {0x00011FD5, 0x00011FF1}, {0x00016B3C, 0x00016B3F}, {0x00016B45, 0x00016B45}, -{0x0001BC9C, 0x0001BC9C}, {0x0001D000, 0x0001D0F5}, {0x0001D100, 0x0001D126}, {0x0001D129, 0x0001D164}, -{0x0001D16A, 0x0001D16C}, {0x0001D183, 0x0001D184}, {0x0001D18C, 0x0001D1A9}, {0x0001D1AE, 0x0001D1E8}, -{0x0001D200, 0x0001D241}, {0x0001D245, 0x0001D245}, {0x0001D300, 0x0001D356}, {0x0001D6C1, 0x0001D6C1}, -{0x0001D6DB, 0x0001D6DB}, {0x0001D6FB, 0x0001D6FB}, {0x0001D715, 0x0001D715}, {0x0001D735, 0x0001D735}, -{0x0001D74F, 0x0001D74F}, {0x0001D76F, 0x0001D76F}, {0x0001D789, 0x0001D789}, {0x0001D7A9, 0x0001D7A9}, -{0x0001D7C3, 0x0001D7C3}, {0x0001D800, 0x0001D9FF}, {0x0001DA37, 0x0001DA3A}, {0x0001DA6D, 0x0001DA74}, -{0x0001DA76, 0x0001DA83}, {0x0001DA85, 0x0001DA86}, {0x0001E14F, 0x0001E14F}, {0x0001E2FF, 0x0001E2FF}, -{0x0001ECAC, 0x0001ECAC}, {0x0001ECB0, 0x0001ECB0}, {0x0001ED2E, 0x0001ED2E}, {0x0001EEF0, 0x0001EEF1}, -{0x0001F000, 0x0001F02B}, {0x0001F030, 0x0001F093}, {0x0001F0A0, 0x0001F0AE}, {0x0001F0B1, 0x0001F0BF}, -{0x0001F0C1, 0x0001F0CF}, {0x0001F0D1, 0x0001F0F5}, {0x0001F10D, 0x0001F1AD}, {0x0001F1E6, 0x0001F202}, -{0x0001F210, 0x0001F23B}, {0x0001F240, 0x0001F248}, {0x0001F250, 0x0001F251}, {0x0001F260, 0x0001F265}, -{0x0001F300, 0x0001F6D7}, {0x0001F6E0, 0x0001F6EC}, {0x0001F6F0, 0x0001F6FC}, {0x0001F700, 0x0001F773}, -{0x0001F780, 0x0001F7D8}, {0x0001F7E0, 0x0001F7EB}, {0x0001F800, 0x0001F80B}, {0x0001F810, 0x0001F847}, -{0x0001F850, 0x0001F859}, {0x0001F860, 0x0001F887}, {0x0001F890, 0x0001F8AD}, {0x0001F8B0, 0x0001F8B1}, -{0x0001F900, 0x0001F978}, {0x0001F97A, 0x0001F9CB}, {0x0001F9CD, 0x0001FA53}, {0x0001FA60, 0x0001FA6D}, -{0x0001FA70, 0x0001FA74}, {0x0001FA78, 0x0001FA7A}, {0x0001FA80, 0x0001FA86}, {0x0001FA90, 0x0001FAA8}, -{0x0001FAB0, 0x0001FAB6}, {0x0001FAC0, 0x0001FAC2}, {0x0001FAD0, 0x0001FAD6}, {0x0001FB00, 0x0001FB92}, -{0x0001FB94, 0x0001FBCA}, -}; - -const std::vector> unicode_ranges_control = { -{0x00000000, 0x00000008}, {0x0000000E, 0x0000001B}, {0x0000007F, 0x00000084}, {0x00000086, 0x0000009F}, -{0x000000AD, 0x000000AD}, {0x00000378, 0x00000379}, {0x00000380, 0x00000383}, {0x0000038B, 0x0000038B}, -{0x0000038D, 0x0000038D}, {0x000003A2, 0x000003A2}, {0x00000530, 0x00000530}, {0x00000557, 0x00000558}, -{0x0000058B, 0x0000058C}, {0x00000590, 0x00000590}, {0x000005C8, 0x000005CF}, {0x000005EB, 0x000005EE}, -{0x000005F5, 0x00000605}, {0x0000061C, 0x0000061D}, {0x000006DD, 0x000006DD}, {0x0000070E, 0x0000070F}, -{0x0000074B, 0x0000074C}, {0x000007B2, 0x000007BF}, {0x000007FB, 0x000007FC}, {0x0000082E, 0x0000082F}, -{0x0000083F, 0x0000083F}, {0x0000085C, 0x0000085D}, {0x0000085F, 0x0000085F}, {0x0000086B, 0x0000089F}, -{0x000008B5, 0x000008B5}, {0x000008C8, 0x000008D2}, {0x000008E2, 0x000008E2}, {0x00000984, 0x00000984}, -{0x0000098D, 0x0000098E}, {0x00000991, 0x00000992}, {0x000009A9, 0x000009A9}, {0x000009B1, 0x000009B1}, -{0x000009B3, 0x000009B5}, {0x000009BA, 0x000009BB}, {0x000009C5, 0x000009C6}, {0x000009C9, 0x000009CA}, -{0x000009CF, 0x000009D6}, {0x000009D8, 0x000009DB}, {0x000009DE, 0x000009DE}, {0x000009E4, 0x000009E5}, -{0x000009FF, 0x00000A00}, {0x00000A04, 0x00000A04}, {0x00000A0B, 0x00000A0E}, {0x00000A11, 0x00000A12}, -{0x00000A29, 0x00000A29}, {0x00000A31, 0x00000A31}, {0x00000A34, 0x00000A34}, {0x00000A37, 0x00000A37}, -{0x00000A3A, 0x00000A3B}, {0x00000A3D, 0x00000A3D}, {0x00000A43, 0x00000A46}, {0x00000A49, 0x00000A4A}, -{0x00000A4E, 0x00000A50}, {0x00000A52, 0x00000A58}, {0x00000A5D, 0x00000A5D}, {0x00000A5F, 0x00000A65}, -{0x00000A77, 0x00000A80}, {0x00000A84, 0x00000A84}, {0x00000A8E, 0x00000A8E}, {0x00000A92, 0x00000A92}, -{0x00000AA9, 0x00000AA9}, {0x00000AB1, 0x00000AB1}, {0x00000AB4, 0x00000AB4}, {0x00000ABA, 0x00000ABB}, -{0x00000AC6, 0x00000AC6}, {0x00000ACA, 0x00000ACA}, {0x00000ACE, 0x00000ACF}, {0x00000AD1, 0x00000ADF}, -{0x00000AE4, 0x00000AE5}, {0x00000AF2, 0x00000AF8}, {0x00000B00, 0x00000B00}, {0x00000B04, 0x00000B04}, -{0x00000B0D, 0x00000B0E}, {0x00000B11, 0x00000B12}, {0x00000B29, 0x00000B29}, {0x00000B31, 0x00000B31}, -{0x00000B34, 0x00000B34}, {0x00000B3A, 0x00000B3B}, {0x00000B45, 0x00000B46}, {0x00000B49, 0x00000B4A}, -{0x00000B4E, 0x00000B54}, {0x00000B58, 0x00000B5B}, {0x00000B5E, 0x00000B5E}, {0x00000B64, 0x00000B65}, -{0x00000B78, 0x00000B81}, {0x00000B84, 0x00000B84}, {0x00000B8B, 0x00000B8D}, {0x00000B91, 0x00000B91}, -{0x00000B96, 0x00000B98}, {0x00000B9B, 0x00000B9B}, {0x00000B9D, 0x00000B9D}, {0x00000BA0, 0x00000BA2}, -{0x00000BA5, 0x00000BA7}, {0x00000BAB, 0x00000BAD}, {0x00000BBA, 0x00000BBD}, {0x00000BC3, 0x00000BC5}, -{0x00000BC9, 0x00000BC9}, {0x00000BCE, 0x00000BCF}, {0x00000BD1, 0x00000BD6}, {0x00000BD8, 0x00000BE5}, -{0x00000BFB, 0x00000BFF}, {0x00000C0D, 0x00000C0D}, {0x00000C11, 0x00000C11}, {0x00000C29, 0x00000C29}, -{0x00000C3A, 0x00000C3C}, {0x00000C45, 0x00000C45}, {0x00000C49, 0x00000C49}, {0x00000C4E, 0x00000C54}, -{0x00000C57, 0x00000C57}, {0x00000C5B, 0x00000C5F}, {0x00000C64, 0x00000C65}, {0x00000C70, 0x00000C76}, -{0x00000C8D, 0x00000C8D}, {0x00000C91, 0x00000C91}, {0x00000CA9, 0x00000CA9}, {0x00000CB4, 0x00000CB4}, -{0x00000CBA, 0x00000CBB}, {0x00000CC5, 0x00000CC5}, {0x00000CC9, 0x00000CC9}, {0x00000CCE, 0x00000CD4}, -{0x00000CD7, 0x00000CDD}, {0x00000CDF, 0x00000CDF}, {0x00000CE4, 0x00000CE5}, {0x00000CF0, 0x00000CF0}, -{0x00000CF3, 0x00000CFF}, {0x00000D0D, 0x00000D0D}, {0x00000D11, 0x00000D11}, {0x00000D45, 0x00000D45}, -{0x00000D49, 0x00000D49}, {0x00000D50, 0x00000D53}, {0x00000D64, 0x00000D65}, {0x00000D80, 0x00000D80}, -{0x00000D84, 0x00000D84}, {0x00000D97, 0x00000D99}, {0x00000DB2, 0x00000DB2}, {0x00000DBC, 0x00000DBC}, -{0x00000DBE, 0x00000DBF}, {0x00000DC7, 0x00000DC9}, {0x00000DCB, 0x00000DCE}, {0x00000DD5, 0x00000DD5}, -{0x00000DD7, 0x00000DD7}, {0x00000DE0, 0x00000DE5}, {0x00000DF0, 0x00000DF1}, {0x00000DF5, 0x00000E00}, -{0x00000E3B, 0x00000E3E}, {0x00000E5C, 0x00000E80}, {0x00000E83, 0x00000E83}, {0x00000E85, 0x00000E85}, -{0x00000E8B, 0x00000E8B}, {0x00000EA4, 0x00000EA4}, {0x00000EA6, 0x00000EA6}, {0x00000EBE, 0x00000EBF}, -{0x00000EC5, 0x00000EC5}, {0x00000EC7, 0x00000EC7}, {0x00000ECE, 0x00000ECF}, {0x00000EDA, 0x00000EDB}, -{0x00000EE0, 0x00000EFF}, {0x00000F48, 0x00000F48}, {0x00000F6D, 0x00000F70}, {0x00000F98, 0x00000F98}, -{0x00000FBD, 0x00000FBD}, {0x00000FCD, 0x00000FCD}, {0x00000FDB, 0x00000FFF}, {0x000010C6, 0x000010C6}, -{0x000010C8, 0x000010CC}, {0x000010CE, 0x000010CF}, {0x00001249, 0x00001249}, {0x0000124E, 0x0000124F}, -{0x00001257, 0x00001257}, {0x00001259, 0x00001259}, {0x0000125E, 0x0000125F}, {0x00001289, 0x00001289}, -{0x0000128E, 0x0000128F}, {0x000012B1, 0x000012B1}, {0x000012B6, 0x000012B7}, {0x000012BF, 0x000012BF}, -{0x000012C1, 0x000012C1}, {0x000012C6, 0x000012C7}, {0x000012D7, 0x000012D7}, {0x00001311, 0x00001311}, -{0x00001316, 0x00001317}, {0x0000135B, 0x0000135C}, {0x0000137D, 0x0000137F}, {0x0000139A, 0x0000139F}, -{0x000013F6, 0x000013F7}, {0x000013FE, 0x000013FF}, {0x0000169D, 0x0000169F}, {0x000016F9, 0x000016FF}, -{0x0000170D, 0x0000170D}, {0x00001715, 0x0000171F}, {0x00001737, 0x0000173F}, {0x00001754, 0x0000175F}, -{0x0000176D, 0x0000176D}, {0x00001771, 0x00001771}, {0x00001774, 0x0000177F}, {0x000017DE, 0x000017DF}, -{0x000017EA, 0x000017EF}, {0x000017FA, 0x000017FF}, {0x0000180E, 0x0000180F}, {0x0000181A, 0x0000181F}, -{0x00001879, 0x0000187F}, {0x000018AB, 0x000018AF}, {0x000018F6, 0x000018FF}, {0x0000191F, 0x0000191F}, -{0x0000192C, 0x0000192F}, {0x0000193C, 0x0000193F}, {0x00001941, 0x00001943}, {0x0000196E, 0x0000196F}, -{0x00001975, 0x0000197F}, {0x000019AC, 0x000019AF}, {0x000019CA, 0x000019CF}, {0x000019DB, 0x000019DD}, -{0x00001A1C, 0x00001A1D}, {0x00001A5F, 0x00001A5F}, {0x00001A7D, 0x00001A7E}, {0x00001A8A, 0x00001A8F}, -{0x00001A9A, 0x00001A9F}, {0x00001AAE, 0x00001AAF}, {0x00001AC1, 0x00001AFF}, {0x00001B4C, 0x00001B4F}, -{0x00001B7D, 0x00001B7F}, {0x00001BF4, 0x00001BFB}, {0x00001C38, 0x00001C3A}, {0x00001C4A, 0x00001C4C}, -{0x00001C89, 0x00001C8F}, {0x00001CBB, 0x00001CBC}, {0x00001CC8, 0x00001CCF}, {0x00001CFB, 0x00001CFF}, -{0x00001DFA, 0x00001DFA}, {0x00001F16, 0x00001F17}, {0x00001F1E, 0x00001F1F}, {0x00001F46, 0x00001F47}, -{0x00001F4E, 0x00001F4F}, {0x00001F58, 0x00001F58}, {0x00001F5A, 0x00001F5A}, {0x00001F5C, 0x00001F5C}, -{0x00001F5E, 0x00001F5E}, {0x00001F7E, 0x00001F7F}, {0x00001FB5, 0x00001FB5}, {0x00001FC5, 0x00001FC5}, -{0x00001FD4, 0x00001FD5}, {0x00001FDC, 0x00001FDC}, {0x00001FF0, 0x00001FF1}, {0x00001FF5, 0x00001FF5}, -{0x00001FFF, 0x00001FFF}, {0x0000200B, 0x0000200F}, {0x0000202A, 0x0000202E}, {0x00002060, 0x0000206F}, -{0x00002072, 0x00002073}, {0x0000208F, 0x0000208F}, {0x0000209D, 0x0000209F}, {0x000020C0, 0x000020CF}, -{0x000020F1, 0x000020FF}, {0x0000218C, 0x0000218F}, {0x00002427, 0x0000243F}, {0x0000244B, 0x0000245F}, -{0x00002B74, 0x00002B75}, {0x00002B96, 0x00002B96}, {0x00002C2F, 0x00002C2F}, {0x00002C5F, 0x00002C5F}, -{0x00002CF4, 0x00002CF8}, {0x00002D26, 0x00002D26}, {0x00002D28, 0x00002D2C}, {0x00002D2E, 0x00002D2F}, -{0x00002D68, 0x00002D6E}, {0x00002D71, 0x00002D7E}, {0x00002D97, 0x00002D9F}, {0x00002DA7, 0x00002DA7}, -{0x00002DAF, 0x00002DAF}, {0x00002DB7, 0x00002DB7}, {0x00002DBF, 0x00002DBF}, {0x00002DC7, 0x00002DC7}, -{0x00002DCF, 0x00002DCF}, {0x00002DD7, 0x00002DD7}, {0x00002DDF, 0x00002DDF}, {0x00002E53, 0x00002E7F}, -{0x00002E9A, 0x00002E9A}, {0x00002EF4, 0x00002EFF}, {0x00002FD6, 0x00002FEF}, {0x00002FFC, 0x00002FFF}, -{0x00003040, 0x00003040}, {0x00003097, 0x00003098}, {0x00003100, 0x00003104}, {0x00003130, 0x00003130}, -{0x0000318F, 0x0000318F}, {0x000031E4, 0x000031EF}, {0x0000321F, 0x0000321F}, {0x00009FFD, 0x00009FFF}, -{0x0000A48D, 0x0000A48F}, {0x0000A4C7, 0x0000A4CF}, {0x0000A62C, 0x0000A63F}, {0x0000A6F8, 0x0000A6FF}, -{0x0000A7C0, 0x0000A7C1}, {0x0000A7CB, 0x0000A7F4}, {0x0000A82D, 0x0000A82F}, {0x0000A83A, 0x0000A83F}, -{0x0000A878, 0x0000A87F}, {0x0000A8C6, 0x0000A8CD}, {0x0000A8DA, 0x0000A8DF}, {0x0000A954, 0x0000A95E}, -{0x0000A97D, 0x0000A97F}, {0x0000A9CE, 0x0000A9CE}, {0x0000A9DA, 0x0000A9DD}, {0x0000A9FF, 0x0000A9FF}, -{0x0000AA37, 0x0000AA3F}, {0x0000AA4E, 0x0000AA4F}, {0x0000AA5A, 0x0000AA5B}, {0x0000AAC3, 0x0000AADA}, -{0x0000AAF7, 0x0000AB00}, {0x0000AB07, 0x0000AB08}, {0x0000AB0F, 0x0000AB10}, {0x0000AB17, 0x0000AB1F}, -{0x0000AB27, 0x0000AB27}, {0x0000AB2F, 0x0000AB2F}, {0x0000AB6C, 0x0000AB6F}, {0x0000ABEE, 0x0000ABEF}, -{0x0000ABFA, 0x0000ABFF}, {0x0000D7A4, 0x0000D7AF}, {0x0000D7C7, 0x0000D7CA}, {0x0000D7FC, 0x0000F8FF}, -{0x0000FA6E, 0x0000FA6F}, {0x0000FADA, 0x0000FAFF}, {0x0000FB07, 0x0000FB12}, {0x0000FB18, 0x0000FB1C}, -{0x0000FB37, 0x0000FB37}, {0x0000FB3D, 0x0000FB3D}, {0x0000FB3F, 0x0000FB3F}, {0x0000FB42, 0x0000FB42}, -{0x0000FB45, 0x0000FB45}, {0x0000FBC2, 0x0000FBD2}, {0x0000FD40, 0x0000FD4F}, {0x0000FD90, 0x0000FD91}, -{0x0000FDC8, 0x0000FDEF}, {0x0000FDFE, 0x0000FDFF}, {0x0000FE1A, 0x0000FE1F}, {0x0000FE53, 0x0000FE53}, -{0x0000FE67, 0x0000FE67}, {0x0000FE6C, 0x0000FE6F}, {0x0000FE75, 0x0000FE75}, {0x0000FEFD, 0x0000FF00}, -{0x0000FFBF, 0x0000FFC1}, {0x0000FFC8, 0x0000FFC9}, {0x0000FFD0, 0x0000FFD1}, {0x0000FFD8, 0x0000FFD9}, -{0x0000FFDD, 0x0000FFDF}, {0x0000FFE7, 0x0000FFE7}, {0x0000FFEF, 0x0000FFFB}, {0x0000FFFE, 0x0000FFFF}, -{0x0001000C, 0x0001000C}, {0x00010027, 0x00010027}, {0x0001003B, 0x0001003B}, {0x0001003E, 0x0001003E}, -{0x0001004E, 0x0001004F}, {0x0001005E, 0x0001007F}, {0x000100FB, 0x000100FF}, {0x00010103, 0x00010106}, -{0x00010134, 0x00010136}, {0x0001018F, 0x0001018F}, {0x0001019D, 0x0001019F}, {0x000101A1, 0x000101CF}, -{0x000101FE, 0x0001027F}, {0x0001029D, 0x0001029F}, {0x000102D1, 0x000102DF}, {0x000102FC, 0x000102FF}, -{0x00010324, 0x0001032C}, {0x0001034B, 0x0001034F}, {0x0001037B, 0x0001037F}, {0x0001039E, 0x0001039E}, -{0x000103C4, 0x000103C7}, {0x000103D6, 0x000103FF}, {0x0001049E, 0x0001049F}, {0x000104AA, 0x000104AF}, -{0x000104D4, 0x000104D7}, {0x000104FC, 0x000104FF}, {0x00010528, 0x0001052F}, {0x00010564, 0x0001056E}, -{0x00010570, 0x000105FF}, {0x00010737, 0x0001073F}, {0x00010756, 0x0001075F}, {0x00010768, 0x000107FF}, -{0x00010806, 0x00010807}, {0x00010809, 0x00010809}, {0x00010836, 0x00010836}, {0x00010839, 0x0001083B}, -{0x0001083D, 0x0001083E}, {0x00010856, 0x00010856}, {0x0001089F, 0x000108A6}, {0x000108B0, 0x000108DF}, -{0x000108F3, 0x000108F3}, {0x000108F6, 0x000108FA}, {0x0001091C, 0x0001091E}, {0x0001093A, 0x0001093E}, -{0x00010940, 0x0001097F}, {0x000109B8, 0x000109BB}, {0x000109D0, 0x000109D1}, {0x00010A04, 0x00010A04}, -{0x00010A07, 0x00010A0B}, {0x00010A14, 0x00010A14}, {0x00010A18, 0x00010A18}, {0x00010A36, 0x00010A37}, -{0x00010A3B, 0x00010A3E}, {0x00010A49, 0x00010A4F}, {0x00010A59, 0x00010A5F}, {0x00010AA0, 0x00010ABF}, -{0x00010AE7, 0x00010AEA}, {0x00010AF7, 0x00010AFF}, {0x00010B36, 0x00010B38}, {0x00010B56, 0x00010B57}, -{0x00010B73, 0x00010B77}, {0x00010B92, 0x00010B98}, {0x00010B9D, 0x00010BA8}, {0x00010BB0, 0x00010BFF}, -{0x00010C49, 0x00010C7F}, {0x00010CB3, 0x00010CBF}, {0x00010CF3, 0x00010CF9}, {0x00010D28, 0x00010D2F}, -{0x00010D3A, 0x00010E5F}, {0x00010E7F, 0x00010E7F}, {0x00010EAA, 0x00010EAA}, {0x00010EAE, 0x00010EAF}, -{0x00010EB2, 0x00010EFF}, {0x00010F28, 0x00010F2F}, {0x00010F5A, 0x00010FAF}, {0x00010FCC, 0x00010FDF}, -{0x00010FF7, 0x00010FFF}, {0x0001104E, 0x00011051}, {0x00011070, 0x0001107E}, {0x000110BD, 0x000110BD}, -{0x000110C2, 0x000110CF}, {0x000110E9, 0x000110EF}, {0x000110FA, 0x000110FF}, {0x00011135, 0x00011135}, -{0x00011148, 0x0001114F}, {0x00011177, 0x0001117F}, {0x000111E0, 0x000111E0}, {0x000111F5, 0x000111FF}, -{0x00011212, 0x00011212}, {0x0001123F, 0x0001127F}, {0x00011287, 0x00011287}, {0x00011289, 0x00011289}, -{0x0001128E, 0x0001128E}, {0x0001129E, 0x0001129E}, {0x000112AA, 0x000112AF}, {0x000112EB, 0x000112EF}, -{0x000112FA, 0x000112FF}, {0x00011304, 0x00011304}, {0x0001130D, 0x0001130E}, {0x00011311, 0x00011312}, -{0x00011329, 0x00011329}, {0x00011331, 0x00011331}, {0x00011334, 0x00011334}, {0x0001133A, 0x0001133A}, -{0x00011345, 0x00011346}, {0x00011349, 0x0001134A}, {0x0001134E, 0x0001134F}, {0x00011351, 0x00011356}, -{0x00011358, 0x0001135C}, {0x00011364, 0x00011365}, {0x0001136D, 0x0001136F}, {0x00011375, 0x000113FF}, -{0x0001145C, 0x0001145C}, {0x00011462, 0x0001147F}, {0x000114C8, 0x000114CF}, {0x000114DA, 0x0001157F}, -{0x000115B6, 0x000115B7}, {0x000115DE, 0x000115FF}, {0x00011645, 0x0001164F}, {0x0001165A, 0x0001165F}, -{0x0001166D, 0x0001167F}, {0x000116B9, 0x000116BF}, {0x000116CA, 0x000116FF}, {0x0001171B, 0x0001171C}, -{0x0001172C, 0x0001172F}, {0x00011740, 0x000117FF}, {0x0001183C, 0x0001189F}, {0x000118F3, 0x000118FE}, -{0x00011907, 0x00011908}, {0x0001190A, 0x0001190B}, {0x00011914, 0x00011914}, {0x00011917, 0x00011917}, -{0x00011936, 0x00011936}, {0x00011939, 0x0001193A}, {0x00011947, 0x0001194F}, {0x0001195A, 0x0001199F}, -{0x000119A8, 0x000119A9}, {0x000119D8, 0x000119D9}, {0x000119E5, 0x000119FF}, {0x00011A48, 0x00011A4F}, -{0x00011AA3, 0x00011ABF}, {0x00011AF9, 0x00011BFF}, {0x00011C09, 0x00011C09}, {0x00011C37, 0x00011C37}, -{0x00011C46, 0x00011C4F}, {0x00011C6D, 0x00011C6F}, {0x00011C90, 0x00011C91}, {0x00011CA8, 0x00011CA8}, -{0x00011CB7, 0x00011CFF}, {0x00011D07, 0x00011D07}, {0x00011D0A, 0x00011D0A}, {0x00011D37, 0x00011D39}, -{0x00011D3B, 0x00011D3B}, {0x00011D3E, 0x00011D3E}, {0x00011D48, 0x00011D4F}, {0x00011D5A, 0x00011D5F}, -{0x00011D66, 0x00011D66}, {0x00011D69, 0x00011D69}, {0x00011D8F, 0x00011D8F}, {0x00011D92, 0x00011D92}, -{0x00011D99, 0x00011D9F}, {0x00011DAA, 0x00011EDF}, {0x00011EF9, 0x00011FAF}, {0x00011FB1, 0x00011FBF}, -{0x00011FF2, 0x00011FFE}, {0x0001239A, 0x000123FF}, {0x0001246F, 0x0001246F}, {0x00012475, 0x0001247F}, -{0x00012544, 0x00012FFF}, {0x0001342F, 0x000143FF}, {0x00014647, 0x000167FF}, {0x00016A39, 0x00016A3F}, -{0x00016A5F, 0x00016A5F}, {0x00016A6A, 0x00016A6D}, {0x00016A70, 0x00016ACF}, {0x00016AEE, 0x00016AEF}, -{0x00016AF6, 0x00016AFF}, {0x00016B46, 0x00016B4F}, {0x00016B5A, 0x00016B5A}, {0x00016B62, 0x00016B62}, -{0x00016B78, 0x00016B7C}, {0x00016B90, 0x00016E3F}, {0x00016E9B, 0x00016EFF}, {0x00016F4B, 0x00016F4E}, -{0x00016F88, 0x00016F8E}, {0x00016FA0, 0x00016FDF}, {0x00016FE5, 0x00016FEF}, {0x00016FF2, 0x00016FFF}, -{0x000187F8, 0x000187FF}, {0x00018CD6, 0x00018CFF}, {0x00018D09, 0x0001AFFF}, {0x0001B11F, 0x0001B14F}, -{0x0001B153, 0x0001B163}, {0x0001B168, 0x0001B16F}, {0x0001B2FC, 0x0001BBFF}, {0x0001BC6B, 0x0001BC6F}, -{0x0001BC7D, 0x0001BC7F}, {0x0001BC89, 0x0001BC8F}, {0x0001BC9A, 0x0001BC9B}, {0x0001BCA0, 0x0001CFFF}, -{0x0001D0F6, 0x0001D0FF}, {0x0001D127, 0x0001D128}, {0x0001D173, 0x0001D17A}, {0x0001D1E9, 0x0001D1FF}, -{0x0001D246, 0x0001D2DF}, {0x0001D2F4, 0x0001D2FF}, {0x0001D357, 0x0001D35F}, {0x0001D379, 0x0001D3FF}, -{0x0001D455, 0x0001D455}, {0x0001D49D, 0x0001D49D}, {0x0001D4A0, 0x0001D4A1}, {0x0001D4A3, 0x0001D4A4}, -{0x0001D4A7, 0x0001D4A8}, {0x0001D4AD, 0x0001D4AD}, {0x0001D4BA, 0x0001D4BA}, {0x0001D4BC, 0x0001D4BC}, -{0x0001D4C4, 0x0001D4C4}, {0x0001D506, 0x0001D506}, {0x0001D50B, 0x0001D50C}, {0x0001D515, 0x0001D515}, -{0x0001D51D, 0x0001D51D}, {0x0001D53A, 0x0001D53A}, {0x0001D53F, 0x0001D53F}, {0x0001D545, 0x0001D545}, -{0x0001D547, 0x0001D549}, {0x0001D551, 0x0001D551}, {0x0001D6A6, 0x0001D6A7}, {0x0001D7CC, 0x0001D7CD}, -{0x0001DA8C, 0x0001DA9A}, {0x0001DAA0, 0x0001DAA0}, {0x0001DAB0, 0x0001DFFF}, {0x0001E007, 0x0001E007}, -{0x0001E019, 0x0001E01A}, {0x0001E022, 0x0001E022}, {0x0001E025, 0x0001E025}, {0x0001E02B, 0x0001E0FF}, -{0x0001E12D, 0x0001E12F}, {0x0001E13E, 0x0001E13F}, {0x0001E14A, 0x0001E14D}, {0x0001E150, 0x0001E2BF}, -{0x0001E2FA, 0x0001E2FE}, {0x0001E300, 0x0001E7FF}, {0x0001E8C5, 0x0001E8C6}, {0x0001E8D7, 0x0001E8FF}, -{0x0001E94C, 0x0001E94F}, {0x0001E95A, 0x0001E95D}, {0x0001E960, 0x0001EC70}, {0x0001ECB5, 0x0001ED00}, -{0x0001ED3E, 0x0001EDFF}, {0x0001EE04, 0x0001EE04}, {0x0001EE20, 0x0001EE20}, {0x0001EE23, 0x0001EE23}, -{0x0001EE25, 0x0001EE26}, {0x0001EE28, 0x0001EE28}, {0x0001EE33, 0x0001EE33}, {0x0001EE38, 0x0001EE38}, -{0x0001EE3A, 0x0001EE3A}, {0x0001EE3C, 0x0001EE41}, {0x0001EE43, 0x0001EE46}, {0x0001EE48, 0x0001EE48}, -{0x0001EE4A, 0x0001EE4A}, {0x0001EE4C, 0x0001EE4C}, {0x0001EE50, 0x0001EE50}, {0x0001EE53, 0x0001EE53}, -{0x0001EE55, 0x0001EE56}, {0x0001EE58, 0x0001EE58}, {0x0001EE5A, 0x0001EE5A}, {0x0001EE5C, 0x0001EE5C}, -{0x0001EE5E, 0x0001EE5E}, {0x0001EE60, 0x0001EE60}, {0x0001EE63, 0x0001EE63}, {0x0001EE65, 0x0001EE66}, -{0x0001EE6B, 0x0001EE6B}, {0x0001EE73, 0x0001EE73}, {0x0001EE78, 0x0001EE78}, {0x0001EE7D, 0x0001EE7D}, -{0x0001EE7F, 0x0001EE7F}, {0x0001EE8A, 0x0001EE8A}, {0x0001EE9C, 0x0001EEA0}, {0x0001EEA4, 0x0001EEA4}, -{0x0001EEAA, 0x0001EEAA}, {0x0001EEBC, 0x0001EEEF}, {0x0001EEF2, 0x0001EFFF}, {0x0001F02C, 0x0001F02F}, -{0x0001F094, 0x0001F09F}, {0x0001F0AF, 0x0001F0B0}, {0x0001F0C0, 0x0001F0C0}, {0x0001F0D0, 0x0001F0D0}, -{0x0001F0F6, 0x0001F0FF}, {0x0001F1AE, 0x0001F1E5}, {0x0001F203, 0x0001F20F}, {0x0001F23C, 0x0001F23F}, -{0x0001F249, 0x0001F24F}, {0x0001F252, 0x0001F25F}, {0x0001F266, 0x0001F2FF}, {0x0001F6D8, 0x0001F6DF}, -{0x0001F6ED, 0x0001F6EF}, {0x0001F6FD, 0x0001F6FF}, {0x0001F774, 0x0001F77F}, {0x0001F7D9, 0x0001F7DF}, -{0x0001F7EC, 0x0001F7FF}, {0x0001F80C, 0x0001F80F}, {0x0001F848, 0x0001F84F}, {0x0001F85A, 0x0001F85F}, -{0x0001F888, 0x0001F88F}, {0x0001F8AE, 0x0001F8AF}, {0x0001F8B2, 0x0001F8FF}, {0x0001F979, 0x0001F979}, -{0x0001F9CC, 0x0001F9CC}, {0x0001FA54, 0x0001FA5F}, {0x0001FA6E, 0x0001FA6F}, {0x0001FA75, 0x0001FA77}, -{0x0001FA7B, 0x0001FA7F}, {0x0001FA87, 0x0001FA8F}, {0x0001FAA9, 0x0001FAAF}, {0x0001FAB7, 0x0001FABF}, -{0x0001FAC3, 0x0001FACF}, {0x0001FAD7, 0x0001FAFF}, {0x0001FB93, 0x0001FB93}, {0x0001FBCB, 0x0001FBEF}, -{0x0001FBFA, 0x0001FFFF}, {0x0002A6DE, 0x0002A6FF}, {0x0002B735, 0x0002B73F}, {0x0002B81E, 0x0002B81F}, -{0x0002CEA2, 0x0002CEAF}, {0x0002EBE1, 0x0002F7FF}, {0x0002FA1E, 0x0002FFFF}, {0x0003134B, 0x000E00FF}, -{0x000E01F0, 0x0010FFFF}, -}; - -const std::multimap unicode_map_nfd = { -{0x000000C0, 0x00000041}, {0x000000C0, 0x00000300}, {0x000000C1, 0x00000041}, {0x000000C1, 0x00000301}, -{0x000000C2, 0x00000041}, {0x000000C2, 0x00000302}, {0x000000C3, 0x00000041}, {0x000000C3, 0x00000303}, -{0x000000C4, 0x00000041}, {0x000000C4, 0x00000308}, {0x000000C5, 0x00000041}, {0x000000C5, 0x0000030A}, -{0x000000C7, 0x00000043}, {0x000000C7, 0x00000327}, {0x000000C8, 0x00000045}, {0x000000C8, 0x00000300}, -{0x000000C9, 0x00000045}, {0x000000C9, 0x00000301}, {0x000000CA, 0x00000045}, {0x000000CA, 0x00000302}, -{0x000000CB, 0x00000045}, {0x000000CB, 0x00000308}, {0x000000CC, 0x00000049}, {0x000000CC, 0x00000300}, -{0x000000CD, 0x00000049}, {0x000000CD, 0x00000301}, {0x000000CE, 0x00000049}, {0x000000CE, 0x00000302}, -{0x000000CF, 0x00000049}, {0x000000CF, 0x00000308}, {0x000000D1, 0x0000004E}, {0x000000D1, 0x00000303}, -{0x000000D2, 0x0000004F}, {0x000000D2, 0x00000300}, {0x000000D3, 0x0000004F}, {0x000000D3, 0x00000301}, -{0x000000D4, 0x0000004F}, {0x000000D4, 0x00000302}, {0x000000D5, 0x0000004F}, {0x000000D5, 0x00000303}, -{0x000000D6, 0x0000004F}, {0x000000D6, 0x00000308}, {0x000000D9, 0x00000055}, {0x000000D9, 0x00000300}, -{0x000000DA, 0x00000055}, {0x000000DA, 0x00000301}, {0x000000DB, 0x00000055}, {0x000000DB, 0x00000302}, -{0x000000DC, 0x00000055}, {0x000000DC, 0x00000308}, {0x000000DD, 0x00000059}, {0x000000DD, 0x00000301}, -{0x000000E0, 0x00000061}, {0x000000E0, 0x00000300}, {0x000000E1, 0x00000061}, {0x000000E1, 0x00000301}, -{0x000000E2, 0x00000061}, {0x000000E2, 0x00000302}, {0x000000E3, 0x00000061}, {0x000000E3, 0x00000303}, -{0x000000E4, 0x00000061}, {0x000000E4, 0x00000308}, {0x000000E5, 0x00000061}, {0x000000E5, 0x0000030A}, -{0x000000E7, 0x00000063}, {0x000000E7, 0x00000327}, {0x000000E8, 0x00000065}, {0x000000E8, 0x00000300}, -{0x000000E9, 0x00000065}, {0x000000E9, 0x00000301}, {0x000000EA, 0x00000065}, {0x000000EA, 0x00000302}, -{0x000000EB, 0x00000065}, {0x000000EB, 0x00000308}, {0x000000EC, 0x00000069}, {0x000000EC, 0x00000300}, -{0x000000ED, 0x00000069}, {0x000000ED, 0x00000301}, {0x000000EE, 0x00000069}, {0x000000EE, 0x00000302}, -{0x000000EF, 0x00000069}, {0x000000EF, 0x00000308}, {0x000000F1, 0x0000006E}, {0x000000F1, 0x00000303}, -{0x000000F2, 0x0000006F}, {0x000000F2, 0x00000300}, {0x000000F3, 0x0000006F}, {0x000000F3, 0x00000301}, -{0x000000F4, 0x0000006F}, {0x000000F4, 0x00000302}, {0x000000F5, 0x0000006F}, {0x000000F5, 0x00000303}, -{0x000000F6, 0x0000006F}, {0x000000F6, 0x00000308}, {0x000000F9, 0x00000075}, {0x000000F9, 0x00000300}, -{0x000000FA, 0x00000075}, {0x000000FA, 0x00000301}, {0x000000FB, 0x00000075}, {0x000000FB, 0x00000302}, -{0x000000FC, 0x00000075}, {0x000000FC, 0x00000308}, {0x000000FD, 0x00000079}, {0x000000FD, 0x00000301}, -{0x000000FF, 0x00000079}, {0x000000FF, 0x00000308}, {0x00000100, 0x00000041}, {0x00000100, 0x00000304}, -{0x00000101, 0x00000061}, {0x00000101, 0x00000304}, {0x00000102, 0x00000041}, {0x00000102, 0x00000306}, -{0x00000103, 0x00000061}, {0x00000103, 0x00000306}, {0x00000104, 0x00000041}, {0x00000104, 0x00000328}, -{0x00000105, 0x00000061}, {0x00000105, 0x00000328}, {0x00000106, 0x00000043}, {0x00000106, 0x00000301}, -{0x00000107, 0x00000063}, {0x00000107, 0x00000301}, {0x00000108, 0x00000043}, {0x00000108, 0x00000302}, -{0x00000109, 0x00000063}, {0x00000109, 0x00000302}, {0x0000010A, 0x00000043}, {0x0000010A, 0x00000307}, -{0x0000010B, 0x00000063}, {0x0000010B, 0x00000307}, {0x0000010C, 0x00000043}, {0x0000010C, 0x0000030C}, -{0x0000010D, 0x00000063}, {0x0000010D, 0x0000030C}, {0x0000010E, 0x00000044}, {0x0000010E, 0x0000030C}, -{0x0000010F, 0x00000064}, {0x0000010F, 0x0000030C}, {0x00000112, 0x00000045}, {0x00000112, 0x00000304}, -{0x00000113, 0x00000065}, {0x00000113, 0x00000304}, {0x00000114, 0x00000045}, {0x00000114, 0x00000306}, -{0x00000115, 0x00000065}, {0x00000115, 0x00000306}, {0x00000116, 0x00000045}, {0x00000116, 0x00000307}, -{0x00000117, 0x00000065}, {0x00000117, 0x00000307}, {0x00000118, 0x00000045}, {0x00000118, 0x00000328}, -{0x00000119, 0x00000065}, {0x00000119, 0x00000328}, {0x0000011A, 0x00000045}, {0x0000011A, 0x0000030C}, -{0x0000011B, 0x00000065}, {0x0000011B, 0x0000030C}, {0x0000011C, 0x00000047}, {0x0000011C, 0x00000302}, -{0x0000011D, 0x00000067}, {0x0000011D, 0x00000302}, {0x0000011E, 0x00000047}, {0x0000011E, 0x00000306}, -{0x0000011F, 0x00000067}, {0x0000011F, 0x00000306}, {0x00000120, 0x00000047}, {0x00000120, 0x00000307}, -{0x00000121, 0x00000067}, {0x00000121, 0x00000307}, {0x00000122, 0x00000047}, {0x00000122, 0x00000327}, -{0x00000123, 0x00000067}, {0x00000123, 0x00000327}, {0x00000124, 0x00000048}, {0x00000124, 0x00000302}, -{0x00000125, 0x00000068}, {0x00000125, 0x00000302}, {0x00000128, 0x00000049}, {0x00000128, 0x00000303}, -{0x00000129, 0x00000069}, {0x00000129, 0x00000303}, {0x0000012A, 0x00000049}, {0x0000012A, 0x00000304}, -{0x0000012B, 0x00000069}, {0x0000012B, 0x00000304}, {0x0000012C, 0x00000049}, {0x0000012C, 0x00000306}, -{0x0000012D, 0x00000069}, {0x0000012D, 0x00000306}, {0x0000012E, 0x00000049}, {0x0000012E, 0x00000328}, -{0x0000012F, 0x00000069}, {0x0000012F, 0x00000328}, {0x00000130, 0x00000049}, {0x00000130, 0x00000307}, -{0x00000134, 0x0000004A}, {0x00000134, 0x00000302}, {0x00000135, 0x0000006A}, {0x00000135, 0x00000302}, -{0x00000136, 0x0000004B}, {0x00000136, 0x00000327}, {0x00000137, 0x0000006B}, {0x00000137, 0x00000327}, -{0x00000139, 0x0000004C}, {0x00000139, 0x00000301}, {0x0000013A, 0x0000006C}, {0x0000013A, 0x00000301}, -{0x0000013B, 0x0000004C}, {0x0000013B, 0x00000327}, {0x0000013C, 0x0000006C}, {0x0000013C, 0x00000327}, -{0x0000013D, 0x0000004C}, {0x0000013D, 0x0000030C}, {0x0000013E, 0x0000006C}, {0x0000013E, 0x0000030C}, -{0x00000143, 0x0000004E}, {0x00000143, 0x00000301}, {0x00000144, 0x0000006E}, {0x00000144, 0x00000301}, -{0x00000145, 0x0000004E}, {0x00000145, 0x00000327}, {0x00000146, 0x0000006E}, {0x00000146, 0x00000327}, -{0x00000147, 0x0000004E}, {0x00000147, 0x0000030C}, {0x00000148, 0x0000006E}, {0x00000148, 0x0000030C}, -{0x0000014C, 0x0000004F}, {0x0000014C, 0x00000304}, {0x0000014D, 0x0000006F}, {0x0000014D, 0x00000304}, -{0x0000014E, 0x0000004F}, {0x0000014E, 0x00000306}, {0x0000014F, 0x0000006F}, {0x0000014F, 0x00000306}, -{0x00000150, 0x0000004F}, {0x00000150, 0x0000030B}, {0x00000151, 0x0000006F}, {0x00000151, 0x0000030B}, -{0x00000154, 0x00000052}, {0x00000154, 0x00000301}, {0x00000155, 0x00000072}, {0x00000155, 0x00000301}, -{0x00000156, 0x00000052}, {0x00000156, 0x00000327}, {0x00000157, 0x00000072}, {0x00000157, 0x00000327}, -{0x00000158, 0x00000052}, {0x00000158, 0x0000030C}, {0x00000159, 0x00000072}, {0x00000159, 0x0000030C}, -{0x0000015A, 0x00000053}, {0x0000015A, 0x00000301}, {0x0000015B, 0x00000073}, {0x0000015B, 0x00000301}, -{0x0000015C, 0x00000053}, {0x0000015C, 0x00000302}, {0x0000015D, 0x00000073}, {0x0000015D, 0x00000302}, -{0x0000015E, 0x00000053}, {0x0000015E, 0x00000327}, {0x0000015F, 0x00000073}, {0x0000015F, 0x00000327}, -{0x00000160, 0x00000053}, {0x00000160, 0x0000030C}, {0x00000161, 0x00000073}, {0x00000161, 0x0000030C}, -{0x00000162, 0x00000054}, {0x00000162, 0x00000327}, {0x00000163, 0x00000074}, {0x00000163, 0x00000327}, -{0x00000164, 0x00000054}, {0x00000164, 0x0000030C}, {0x00000165, 0x00000074}, {0x00000165, 0x0000030C}, -{0x00000168, 0x00000055}, {0x00000168, 0x00000303}, {0x00000169, 0x00000075}, {0x00000169, 0x00000303}, -{0x0000016A, 0x00000055}, {0x0000016A, 0x00000304}, {0x0000016B, 0x00000075}, {0x0000016B, 0x00000304}, -{0x0000016C, 0x00000055}, {0x0000016C, 0x00000306}, {0x0000016D, 0x00000075}, {0x0000016D, 0x00000306}, -{0x0000016E, 0x00000055}, {0x0000016E, 0x0000030A}, {0x0000016F, 0x00000075}, {0x0000016F, 0x0000030A}, -{0x00000170, 0x00000055}, {0x00000170, 0x0000030B}, {0x00000171, 0x00000075}, {0x00000171, 0x0000030B}, -{0x00000172, 0x00000055}, {0x00000172, 0x00000328}, {0x00000173, 0x00000075}, {0x00000173, 0x00000328}, -{0x00000174, 0x00000057}, {0x00000174, 0x00000302}, {0x00000175, 0x00000077}, {0x00000175, 0x00000302}, -{0x00000176, 0x00000059}, {0x00000176, 0x00000302}, {0x00000177, 0x00000079}, {0x00000177, 0x00000302}, -{0x00000178, 0x00000059}, {0x00000178, 0x00000308}, {0x00000179, 0x0000005A}, {0x00000179, 0x00000301}, -{0x0000017A, 0x0000007A}, {0x0000017A, 0x00000301}, {0x0000017B, 0x0000005A}, {0x0000017B, 0x00000307}, -{0x0000017C, 0x0000007A}, {0x0000017C, 0x00000307}, {0x0000017D, 0x0000005A}, {0x0000017D, 0x0000030C}, -{0x0000017E, 0x0000007A}, {0x0000017E, 0x0000030C}, {0x000001A0, 0x0000004F}, {0x000001A0, 0x0000031B}, -{0x000001A1, 0x0000006F}, {0x000001A1, 0x0000031B}, {0x000001AF, 0x00000055}, {0x000001AF, 0x0000031B}, -{0x000001B0, 0x00000075}, {0x000001B0, 0x0000031B}, {0x000001CD, 0x00000041}, {0x000001CD, 0x0000030C}, -{0x000001CE, 0x00000061}, {0x000001CE, 0x0000030C}, {0x000001CF, 0x00000049}, {0x000001CF, 0x0000030C}, -{0x000001D0, 0x00000069}, {0x000001D0, 0x0000030C}, {0x000001D1, 0x0000004F}, {0x000001D1, 0x0000030C}, -{0x000001D2, 0x0000006F}, {0x000001D2, 0x0000030C}, {0x000001D3, 0x00000055}, {0x000001D3, 0x0000030C}, -{0x000001D4, 0x00000075}, {0x000001D4, 0x0000030C}, {0x000001D5, 0x00000055}, {0x000001D5, 0x00000308}, -{0x000001D5, 0x00000304}, {0x000001D6, 0x00000075}, {0x000001D6, 0x00000308}, {0x000001D6, 0x00000304}, -{0x000001D7, 0x00000055}, {0x000001D7, 0x00000308}, {0x000001D7, 0x00000301}, {0x000001D8, 0x00000075}, -{0x000001D8, 0x00000308}, {0x000001D8, 0x00000301}, {0x000001D9, 0x00000055}, {0x000001D9, 0x00000308}, -{0x000001D9, 0x0000030C}, {0x000001DA, 0x00000075}, {0x000001DA, 0x00000308}, {0x000001DA, 0x0000030C}, -{0x000001DB, 0x00000055}, {0x000001DB, 0x00000308}, {0x000001DB, 0x00000300}, {0x000001DC, 0x00000075}, -{0x000001DC, 0x00000308}, {0x000001DC, 0x00000300}, {0x000001DE, 0x00000041}, {0x000001DE, 0x00000308}, -{0x000001DE, 0x00000304}, {0x000001DF, 0x00000061}, {0x000001DF, 0x00000308}, {0x000001DF, 0x00000304}, -{0x000001E0, 0x00000041}, {0x000001E0, 0x00000307}, {0x000001E0, 0x00000304}, {0x000001E1, 0x00000061}, -{0x000001E1, 0x00000307}, {0x000001E1, 0x00000304}, {0x000001E2, 0x000000C6}, {0x000001E2, 0x00000304}, -{0x000001E3, 0x000000E6}, {0x000001E3, 0x00000304}, {0x000001E6, 0x00000047}, {0x000001E6, 0x0000030C}, -{0x000001E7, 0x00000067}, {0x000001E7, 0x0000030C}, {0x000001E8, 0x0000004B}, {0x000001E8, 0x0000030C}, -{0x000001E9, 0x0000006B}, {0x000001E9, 0x0000030C}, {0x000001EA, 0x0000004F}, {0x000001EA, 0x00000328}, -{0x000001EB, 0x0000006F}, {0x000001EB, 0x00000328}, {0x000001EC, 0x0000004F}, {0x000001EC, 0x00000328}, -{0x000001EC, 0x00000304}, {0x000001ED, 0x0000006F}, {0x000001ED, 0x00000328}, {0x000001ED, 0x00000304}, -{0x000001EE, 0x000001B7}, {0x000001EE, 0x0000030C}, {0x000001EF, 0x00000292}, {0x000001EF, 0x0000030C}, -{0x000001F0, 0x0000006A}, {0x000001F0, 0x0000030C}, {0x000001F4, 0x00000047}, {0x000001F4, 0x00000301}, -{0x000001F5, 0x00000067}, {0x000001F5, 0x00000301}, {0x000001F8, 0x0000004E}, {0x000001F8, 0x00000300}, -{0x000001F9, 0x0000006E}, {0x000001F9, 0x00000300}, {0x000001FA, 0x00000041}, {0x000001FA, 0x0000030A}, -{0x000001FA, 0x00000301}, {0x000001FB, 0x00000061}, {0x000001FB, 0x0000030A}, {0x000001FB, 0x00000301}, -{0x000001FC, 0x000000C6}, {0x000001FC, 0x00000301}, {0x000001FD, 0x000000E6}, {0x000001FD, 0x00000301}, -{0x000001FE, 0x000000D8}, {0x000001FE, 0x00000301}, {0x000001FF, 0x000000F8}, {0x000001FF, 0x00000301}, -{0x00000200, 0x00000041}, {0x00000200, 0x0000030F}, {0x00000201, 0x00000061}, {0x00000201, 0x0000030F}, -{0x00000202, 0x00000041}, {0x00000202, 0x00000311}, {0x00000203, 0x00000061}, {0x00000203, 0x00000311}, -{0x00000204, 0x00000045}, {0x00000204, 0x0000030F}, {0x00000205, 0x00000065}, {0x00000205, 0x0000030F}, -{0x00000206, 0x00000045}, {0x00000206, 0x00000311}, {0x00000207, 0x00000065}, {0x00000207, 0x00000311}, -{0x00000208, 0x00000049}, {0x00000208, 0x0000030F}, {0x00000209, 0x00000069}, {0x00000209, 0x0000030F}, -{0x0000020A, 0x00000049}, {0x0000020A, 0x00000311}, {0x0000020B, 0x00000069}, {0x0000020B, 0x00000311}, -{0x0000020C, 0x0000004F}, {0x0000020C, 0x0000030F}, {0x0000020D, 0x0000006F}, {0x0000020D, 0x0000030F}, -{0x0000020E, 0x0000004F}, {0x0000020E, 0x00000311}, {0x0000020F, 0x0000006F}, {0x0000020F, 0x00000311}, -{0x00000210, 0x00000052}, {0x00000210, 0x0000030F}, {0x00000211, 0x00000072}, {0x00000211, 0x0000030F}, -{0x00000212, 0x00000052}, {0x00000212, 0x00000311}, {0x00000213, 0x00000072}, {0x00000213, 0x00000311}, -{0x00000214, 0x00000055}, {0x00000214, 0x0000030F}, {0x00000215, 0x00000075}, {0x00000215, 0x0000030F}, -{0x00000216, 0x00000055}, {0x00000216, 0x00000311}, {0x00000217, 0x00000075}, {0x00000217, 0x00000311}, -{0x00000218, 0x00000053}, {0x00000218, 0x00000326}, {0x00000219, 0x00000073}, {0x00000219, 0x00000326}, -{0x0000021A, 0x00000054}, {0x0000021A, 0x00000326}, {0x0000021B, 0x00000074}, {0x0000021B, 0x00000326}, -{0x0000021E, 0x00000048}, {0x0000021E, 0x0000030C}, {0x0000021F, 0x00000068}, {0x0000021F, 0x0000030C}, -{0x00000226, 0x00000041}, {0x00000226, 0x00000307}, {0x00000227, 0x00000061}, {0x00000227, 0x00000307}, -{0x00000228, 0x00000045}, {0x00000228, 0x00000327}, {0x00000229, 0x00000065}, {0x00000229, 0x00000327}, -{0x0000022A, 0x0000004F}, {0x0000022A, 0x00000308}, {0x0000022A, 0x00000304}, {0x0000022B, 0x0000006F}, -{0x0000022B, 0x00000308}, {0x0000022B, 0x00000304}, {0x0000022C, 0x0000004F}, {0x0000022C, 0x00000303}, -{0x0000022C, 0x00000304}, {0x0000022D, 0x0000006F}, {0x0000022D, 0x00000303}, {0x0000022D, 0x00000304}, -{0x0000022E, 0x0000004F}, {0x0000022E, 0x00000307}, {0x0000022F, 0x0000006F}, {0x0000022F, 0x00000307}, -{0x00000230, 0x0000004F}, {0x00000230, 0x00000307}, {0x00000230, 0x00000304}, {0x00000231, 0x0000006F}, -{0x00000231, 0x00000307}, {0x00000231, 0x00000304}, {0x00000232, 0x00000059}, {0x00000232, 0x00000304}, -{0x00000233, 0x00000079}, {0x00000233, 0x00000304}, {0x00000340, 0x00000300}, {0x00000341, 0x00000301}, -{0x00000343, 0x00000313}, {0x00000344, 0x00000308}, {0x00000344, 0x00000301}, {0x00000374, 0x000002B9}, -{0x0000037E, 0x0000003B}, {0x00000385, 0x000000A8}, {0x00000385, 0x00000301}, {0x00000386, 0x00000391}, -{0x00000386, 0x00000301}, {0x00000387, 0x000000B7}, {0x00000388, 0x00000395}, {0x00000388, 0x00000301}, -{0x00000389, 0x00000397}, {0x00000389, 0x00000301}, {0x0000038A, 0x00000399}, {0x0000038A, 0x00000301}, -{0x0000038C, 0x0000039F}, {0x0000038C, 0x00000301}, {0x0000038E, 0x000003A5}, {0x0000038E, 0x00000301}, -{0x0000038F, 0x000003A9}, {0x0000038F, 0x00000301}, {0x00000390, 0x000003B9}, {0x00000390, 0x00000308}, -{0x00000390, 0x00000301}, {0x000003AA, 0x00000399}, {0x000003AA, 0x00000308}, {0x000003AB, 0x000003A5}, -{0x000003AB, 0x00000308}, {0x000003AC, 0x000003B1}, {0x000003AC, 0x00000301}, {0x000003AD, 0x000003B5}, -{0x000003AD, 0x00000301}, {0x000003AE, 0x000003B7}, {0x000003AE, 0x00000301}, {0x000003AF, 0x000003B9}, -{0x000003AF, 0x00000301}, {0x000003B0, 0x000003C5}, {0x000003B0, 0x00000308}, {0x000003B0, 0x00000301}, -{0x000003CA, 0x000003B9}, {0x000003CA, 0x00000308}, {0x000003CB, 0x000003C5}, {0x000003CB, 0x00000308}, -{0x000003CC, 0x000003BF}, {0x000003CC, 0x00000301}, {0x000003CD, 0x000003C5}, {0x000003CD, 0x00000301}, -{0x000003CE, 0x000003C9}, {0x000003CE, 0x00000301}, {0x000003D3, 0x000003D2}, {0x000003D3, 0x00000301}, -{0x000003D4, 0x000003D2}, {0x000003D4, 0x00000308}, {0x00000400, 0x00000415}, {0x00000400, 0x00000300}, -{0x00000401, 0x00000415}, {0x00000401, 0x00000308}, {0x00000403, 0x00000413}, {0x00000403, 0x00000301}, -{0x00000407, 0x00000406}, {0x00000407, 0x00000308}, {0x0000040C, 0x0000041A}, {0x0000040C, 0x00000301}, -{0x0000040D, 0x00000418}, {0x0000040D, 0x00000300}, {0x0000040E, 0x00000423}, {0x0000040E, 0x00000306}, -{0x00000419, 0x00000418}, {0x00000419, 0x00000306}, {0x00000439, 0x00000438}, {0x00000439, 0x00000306}, -{0x00000450, 0x00000435}, {0x00000450, 0x00000300}, {0x00000451, 0x00000435}, {0x00000451, 0x00000308}, -{0x00000453, 0x00000433}, {0x00000453, 0x00000301}, {0x00000457, 0x00000456}, {0x00000457, 0x00000308}, -{0x0000045C, 0x0000043A}, {0x0000045C, 0x00000301}, {0x0000045D, 0x00000438}, {0x0000045D, 0x00000300}, -{0x0000045E, 0x00000443}, {0x0000045E, 0x00000306}, {0x00000476, 0x00000474}, {0x00000476, 0x0000030F}, -{0x00000477, 0x00000475}, {0x00000477, 0x0000030F}, {0x000004C1, 0x00000416}, {0x000004C1, 0x00000306}, -{0x000004C2, 0x00000436}, {0x000004C2, 0x00000306}, {0x000004D0, 0x00000410}, {0x000004D0, 0x00000306}, -{0x000004D1, 0x00000430}, {0x000004D1, 0x00000306}, {0x000004D2, 0x00000410}, {0x000004D2, 0x00000308}, -{0x000004D3, 0x00000430}, {0x000004D3, 0x00000308}, {0x000004D6, 0x00000415}, {0x000004D6, 0x00000306}, -{0x000004D7, 0x00000435}, {0x000004D7, 0x00000306}, {0x000004DA, 0x000004D8}, {0x000004DA, 0x00000308}, -{0x000004DB, 0x000004D9}, {0x000004DB, 0x00000308}, {0x000004DC, 0x00000416}, {0x000004DC, 0x00000308}, -{0x000004DD, 0x00000436}, {0x000004DD, 0x00000308}, {0x000004DE, 0x00000417}, {0x000004DE, 0x00000308}, -{0x000004DF, 0x00000437}, {0x000004DF, 0x00000308}, {0x000004E2, 0x00000418}, {0x000004E2, 0x00000304}, -{0x000004E3, 0x00000438}, {0x000004E3, 0x00000304}, {0x000004E4, 0x00000418}, {0x000004E4, 0x00000308}, -{0x000004E5, 0x00000438}, {0x000004E5, 0x00000308}, {0x000004E6, 0x0000041E}, {0x000004E6, 0x00000308}, -{0x000004E7, 0x0000043E}, {0x000004E7, 0x00000308}, {0x000004EA, 0x000004E8}, {0x000004EA, 0x00000308}, -{0x000004EB, 0x000004E9}, {0x000004EB, 0x00000308}, {0x000004EC, 0x0000042D}, {0x000004EC, 0x00000308}, -{0x000004ED, 0x0000044D}, {0x000004ED, 0x00000308}, {0x000004EE, 0x00000423}, {0x000004EE, 0x00000304}, -{0x000004EF, 0x00000443}, {0x000004EF, 0x00000304}, {0x000004F0, 0x00000423}, {0x000004F0, 0x00000308}, -{0x000004F1, 0x00000443}, {0x000004F1, 0x00000308}, {0x000004F2, 0x00000423}, {0x000004F2, 0x0000030B}, -{0x000004F3, 0x00000443}, {0x000004F3, 0x0000030B}, {0x000004F4, 0x00000427}, {0x000004F4, 0x00000308}, -{0x000004F5, 0x00000447}, {0x000004F5, 0x00000308}, {0x000004F8, 0x0000042B}, {0x000004F8, 0x00000308}, -{0x000004F9, 0x0000044B}, {0x000004F9, 0x00000308}, {0x00000622, 0x00000627}, {0x00000622, 0x00000653}, -{0x00000623, 0x00000627}, {0x00000623, 0x00000654}, {0x00000624, 0x00000648}, {0x00000624, 0x00000654}, -{0x00000625, 0x00000627}, {0x00000625, 0x00000655}, {0x00000626, 0x0000064A}, {0x00000626, 0x00000654}, -{0x000006C0, 0x000006D5}, {0x000006C0, 0x00000654}, {0x000006C2, 0x000006C1}, {0x000006C2, 0x00000654}, -{0x000006D3, 0x000006D2}, {0x000006D3, 0x00000654}, {0x00000929, 0x00000928}, {0x00000929, 0x0000093C}, -{0x00000931, 0x00000930}, {0x00000931, 0x0000093C}, {0x00000934, 0x00000933}, {0x00000934, 0x0000093C}, -{0x00000958, 0x00000915}, {0x00000958, 0x0000093C}, {0x00000959, 0x00000916}, {0x00000959, 0x0000093C}, -{0x0000095A, 0x00000917}, {0x0000095A, 0x0000093C}, {0x0000095B, 0x0000091C}, {0x0000095B, 0x0000093C}, -{0x0000095C, 0x00000921}, {0x0000095C, 0x0000093C}, {0x0000095D, 0x00000922}, {0x0000095D, 0x0000093C}, -{0x0000095E, 0x0000092B}, {0x0000095E, 0x0000093C}, {0x0000095F, 0x0000092F}, {0x0000095F, 0x0000093C}, -{0x000009CB, 0x000009C7}, {0x000009CB, 0x000009BE}, {0x000009CC, 0x000009C7}, {0x000009CC, 0x000009D7}, -{0x000009DC, 0x000009A1}, {0x000009DC, 0x000009BC}, {0x000009DD, 0x000009A2}, {0x000009DD, 0x000009BC}, -{0x000009DF, 0x000009AF}, {0x000009DF, 0x000009BC}, {0x00000A33, 0x00000A32}, {0x00000A33, 0x00000A3C}, -{0x00000A36, 0x00000A38}, {0x00000A36, 0x00000A3C}, {0x00000A59, 0x00000A16}, {0x00000A59, 0x00000A3C}, -{0x00000A5A, 0x00000A17}, {0x00000A5A, 0x00000A3C}, {0x00000A5B, 0x00000A1C}, {0x00000A5B, 0x00000A3C}, -{0x00000A5E, 0x00000A2B}, {0x00000A5E, 0x00000A3C}, {0x00000B48, 0x00000B47}, {0x00000B48, 0x00000B56}, -{0x00000B4B, 0x00000B47}, {0x00000B4B, 0x00000B3E}, {0x00000B4C, 0x00000B47}, {0x00000B4C, 0x00000B57}, -{0x00000B5C, 0x00000B21}, {0x00000B5C, 0x00000B3C}, {0x00000B5D, 0x00000B22}, {0x00000B5D, 0x00000B3C}, -{0x00000B94, 0x00000B92}, {0x00000B94, 0x00000BD7}, {0x00000BCA, 0x00000BC6}, {0x00000BCA, 0x00000BBE}, -{0x00000BCB, 0x00000BC7}, {0x00000BCB, 0x00000BBE}, {0x00000BCC, 0x00000BC6}, {0x00000BCC, 0x00000BD7}, -{0x00000C48, 0x00000C46}, {0x00000C48, 0x00000C56}, {0x00000CC0, 0x00000CBF}, {0x00000CC0, 0x00000CD5}, -{0x00000CC7, 0x00000CC6}, {0x00000CC7, 0x00000CD5}, {0x00000CC8, 0x00000CC6}, {0x00000CC8, 0x00000CD6}, -{0x00000CCA, 0x00000CC6}, {0x00000CCA, 0x00000CC2}, {0x00000CCB, 0x00000CC6}, {0x00000CCB, 0x00000CC2}, -{0x00000CCB, 0x00000CD5}, {0x00000D4A, 0x00000D46}, {0x00000D4A, 0x00000D3E}, {0x00000D4B, 0x00000D47}, -{0x00000D4B, 0x00000D3E}, {0x00000D4C, 0x00000D46}, {0x00000D4C, 0x00000D57}, {0x00000DDA, 0x00000DD9}, -{0x00000DDA, 0x00000DCA}, {0x00000DDC, 0x00000DD9}, {0x00000DDC, 0x00000DCF}, {0x00000DDD, 0x00000DD9}, -{0x00000DDD, 0x00000DCF}, {0x00000DDD, 0x00000DCA}, {0x00000DDE, 0x00000DD9}, {0x00000DDE, 0x00000DDF}, -{0x00000F43, 0x00000F42}, {0x00000F43, 0x00000FB7}, {0x00000F4D, 0x00000F4C}, {0x00000F4D, 0x00000FB7}, -{0x00000F52, 0x00000F51}, {0x00000F52, 0x00000FB7}, {0x00000F57, 0x00000F56}, {0x00000F57, 0x00000FB7}, -{0x00000F5C, 0x00000F5B}, {0x00000F5C, 0x00000FB7}, {0x00000F69, 0x00000F40}, {0x00000F69, 0x00000FB5}, -{0x00000F73, 0x00000F71}, {0x00000F73, 0x00000F72}, {0x00000F75, 0x00000F71}, {0x00000F75, 0x00000F74}, -{0x00000F76, 0x00000FB2}, {0x00000F76, 0x00000F80}, {0x00000F78, 0x00000FB3}, {0x00000F78, 0x00000F80}, -{0x00000F81, 0x00000F71}, {0x00000F81, 0x00000F80}, {0x00000F93, 0x00000F92}, {0x00000F93, 0x00000FB7}, -{0x00000F9D, 0x00000F9C}, {0x00000F9D, 0x00000FB7}, {0x00000FA2, 0x00000FA1}, {0x00000FA2, 0x00000FB7}, -{0x00000FA7, 0x00000FA6}, {0x00000FA7, 0x00000FB7}, {0x00000FAC, 0x00000FAB}, {0x00000FAC, 0x00000FB7}, -{0x00000FB9, 0x00000F90}, {0x00000FB9, 0x00000FB5}, {0x00001026, 0x00001025}, {0x00001026, 0x0000102E}, -{0x00001B06, 0x00001B05}, {0x00001B06, 0x00001B35}, {0x00001B08, 0x00001B07}, {0x00001B08, 0x00001B35}, -{0x00001B0A, 0x00001B09}, {0x00001B0A, 0x00001B35}, {0x00001B0C, 0x00001B0B}, {0x00001B0C, 0x00001B35}, -{0x00001B0E, 0x00001B0D}, {0x00001B0E, 0x00001B35}, {0x00001B12, 0x00001B11}, {0x00001B12, 0x00001B35}, -{0x00001B3B, 0x00001B3A}, {0x00001B3B, 0x00001B35}, {0x00001B3D, 0x00001B3C}, {0x00001B3D, 0x00001B35}, -{0x00001B40, 0x00001B3E}, {0x00001B40, 0x00001B35}, {0x00001B41, 0x00001B3F}, {0x00001B41, 0x00001B35}, -{0x00001B43, 0x00001B42}, {0x00001B43, 0x00001B35}, {0x00001E00, 0x00000041}, {0x00001E00, 0x00000325}, -{0x00001E01, 0x00000061}, {0x00001E01, 0x00000325}, {0x00001E02, 0x00000042}, {0x00001E02, 0x00000307}, -{0x00001E03, 0x00000062}, {0x00001E03, 0x00000307}, {0x00001E04, 0x00000042}, {0x00001E04, 0x00000323}, -{0x00001E05, 0x00000062}, {0x00001E05, 0x00000323}, {0x00001E06, 0x00000042}, {0x00001E06, 0x00000331}, -{0x00001E07, 0x00000062}, {0x00001E07, 0x00000331}, {0x00001E08, 0x00000043}, {0x00001E08, 0x00000327}, -{0x00001E08, 0x00000301}, {0x00001E09, 0x00000063}, {0x00001E09, 0x00000327}, {0x00001E09, 0x00000301}, -{0x00001E0A, 0x00000044}, {0x00001E0A, 0x00000307}, {0x00001E0B, 0x00000064}, {0x00001E0B, 0x00000307}, -{0x00001E0C, 0x00000044}, {0x00001E0C, 0x00000323}, {0x00001E0D, 0x00000064}, {0x00001E0D, 0x00000323}, -{0x00001E0E, 0x00000044}, {0x00001E0E, 0x00000331}, {0x00001E0F, 0x00000064}, {0x00001E0F, 0x00000331}, -{0x00001E10, 0x00000044}, {0x00001E10, 0x00000327}, {0x00001E11, 0x00000064}, {0x00001E11, 0x00000327}, -{0x00001E12, 0x00000044}, {0x00001E12, 0x0000032D}, {0x00001E13, 0x00000064}, {0x00001E13, 0x0000032D}, -{0x00001E14, 0x00000045}, {0x00001E14, 0x00000304}, {0x00001E14, 0x00000300}, {0x00001E15, 0x00000065}, -{0x00001E15, 0x00000304}, {0x00001E15, 0x00000300}, {0x00001E16, 0x00000045}, {0x00001E16, 0x00000304}, -{0x00001E16, 0x00000301}, {0x00001E17, 0x00000065}, {0x00001E17, 0x00000304}, {0x00001E17, 0x00000301}, -{0x00001E18, 0x00000045}, {0x00001E18, 0x0000032D}, {0x00001E19, 0x00000065}, {0x00001E19, 0x0000032D}, -{0x00001E1A, 0x00000045}, {0x00001E1A, 0x00000330}, {0x00001E1B, 0x00000065}, {0x00001E1B, 0x00000330}, -{0x00001E1C, 0x00000045}, {0x00001E1C, 0x00000327}, {0x00001E1C, 0x00000306}, {0x00001E1D, 0x00000065}, -{0x00001E1D, 0x00000327}, {0x00001E1D, 0x00000306}, {0x00001E1E, 0x00000046}, {0x00001E1E, 0x00000307}, -{0x00001E1F, 0x00000066}, {0x00001E1F, 0x00000307}, {0x00001E20, 0x00000047}, {0x00001E20, 0x00000304}, -{0x00001E21, 0x00000067}, {0x00001E21, 0x00000304}, {0x00001E22, 0x00000048}, {0x00001E22, 0x00000307}, -{0x00001E23, 0x00000068}, {0x00001E23, 0x00000307}, {0x00001E24, 0x00000048}, {0x00001E24, 0x00000323}, -{0x00001E25, 0x00000068}, {0x00001E25, 0x00000323}, {0x00001E26, 0x00000048}, {0x00001E26, 0x00000308}, -{0x00001E27, 0x00000068}, {0x00001E27, 0x00000308}, {0x00001E28, 0x00000048}, {0x00001E28, 0x00000327}, -{0x00001E29, 0x00000068}, {0x00001E29, 0x00000327}, {0x00001E2A, 0x00000048}, {0x00001E2A, 0x0000032E}, -{0x00001E2B, 0x00000068}, {0x00001E2B, 0x0000032E}, {0x00001E2C, 0x00000049}, {0x00001E2C, 0x00000330}, -{0x00001E2D, 0x00000069}, {0x00001E2D, 0x00000330}, {0x00001E2E, 0x00000049}, {0x00001E2E, 0x00000308}, -{0x00001E2E, 0x00000301}, {0x00001E2F, 0x00000069}, {0x00001E2F, 0x00000308}, {0x00001E2F, 0x00000301}, -{0x00001E30, 0x0000004B}, {0x00001E30, 0x00000301}, {0x00001E31, 0x0000006B}, {0x00001E31, 0x00000301}, -{0x00001E32, 0x0000004B}, {0x00001E32, 0x00000323}, {0x00001E33, 0x0000006B}, {0x00001E33, 0x00000323}, -{0x00001E34, 0x0000004B}, {0x00001E34, 0x00000331}, {0x00001E35, 0x0000006B}, {0x00001E35, 0x00000331}, -{0x00001E36, 0x0000004C}, {0x00001E36, 0x00000323}, {0x00001E37, 0x0000006C}, {0x00001E37, 0x00000323}, -{0x00001E38, 0x0000004C}, {0x00001E38, 0x00000323}, {0x00001E38, 0x00000304}, {0x00001E39, 0x0000006C}, -{0x00001E39, 0x00000323}, {0x00001E39, 0x00000304}, {0x00001E3A, 0x0000004C}, {0x00001E3A, 0x00000331}, -{0x00001E3B, 0x0000006C}, {0x00001E3B, 0x00000331}, {0x00001E3C, 0x0000004C}, {0x00001E3C, 0x0000032D}, -{0x00001E3D, 0x0000006C}, {0x00001E3D, 0x0000032D}, {0x00001E3E, 0x0000004D}, {0x00001E3E, 0x00000301}, -{0x00001E3F, 0x0000006D}, {0x00001E3F, 0x00000301}, {0x00001E40, 0x0000004D}, {0x00001E40, 0x00000307}, -{0x00001E41, 0x0000006D}, {0x00001E41, 0x00000307}, {0x00001E42, 0x0000004D}, {0x00001E42, 0x00000323}, -{0x00001E43, 0x0000006D}, {0x00001E43, 0x00000323}, {0x00001E44, 0x0000004E}, {0x00001E44, 0x00000307}, -{0x00001E45, 0x0000006E}, {0x00001E45, 0x00000307}, {0x00001E46, 0x0000004E}, {0x00001E46, 0x00000323}, -{0x00001E47, 0x0000006E}, {0x00001E47, 0x00000323}, {0x00001E48, 0x0000004E}, {0x00001E48, 0x00000331}, -{0x00001E49, 0x0000006E}, {0x00001E49, 0x00000331}, {0x00001E4A, 0x0000004E}, {0x00001E4A, 0x0000032D}, -{0x00001E4B, 0x0000006E}, {0x00001E4B, 0x0000032D}, {0x00001E4C, 0x0000004F}, {0x00001E4C, 0x00000303}, -{0x00001E4C, 0x00000301}, {0x00001E4D, 0x0000006F}, {0x00001E4D, 0x00000303}, {0x00001E4D, 0x00000301}, -{0x00001E4E, 0x0000004F}, {0x00001E4E, 0x00000303}, {0x00001E4E, 0x00000308}, {0x00001E4F, 0x0000006F}, -{0x00001E4F, 0x00000303}, {0x00001E4F, 0x00000308}, {0x00001E50, 0x0000004F}, {0x00001E50, 0x00000304}, -{0x00001E50, 0x00000300}, {0x00001E51, 0x0000006F}, {0x00001E51, 0x00000304}, {0x00001E51, 0x00000300}, -{0x00001E52, 0x0000004F}, {0x00001E52, 0x00000304}, {0x00001E52, 0x00000301}, {0x00001E53, 0x0000006F}, -{0x00001E53, 0x00000304}, {0x00001E53, 0x00000301}, {0x00001E54, 0x00000050}, {0x00001E54, 0x00000301}, -{0x00001E55, 0x00000070}, {0x00001E55, 0x00000301}, {0x00001E56, 0x00000050}, {0x00001E56, 0x00000307}, -{0x00001E57, 0x00000070}, {0x00001E57, 0x00000307}, {0x00001E58, 0x00000052}, {0x00001E58, 0x00000307}, -{0x00001E59, 0x00000072}, {0x00001E59, 0x00000307}, {0x00001E5A, 0x00000052}, {0x00001E5A, 0x00000323}, -{0x00001E5B, 0x00000072}, {0x00001E5B, 0x00000323}, {0x00001E5C, 0x00000052}, {0x00001E5C, 0x00000323}, -{0x00001E5C, 0x00000304}, {0x00001E5D, 0x00000072}, {0x00001E5D, 0x00000323}, {0x00001E5D, 0x00000304}, -{0x00001E5E, 0x00000052}, {0x00001E5E, 0x00000331}, {0x00001E5F, 0x00000072}, {0x00001E5F, 0x00000331}, -{0x00001E60, 0x00000053}, {0x00001E60, 0x00000307}, {0x00001E61, 0x00000073}, {0x00001E61, 0x00000307}, -{0x00001E62, 0x00000053}, {0x00001E62, 0x00000323}, {0x00001E63, 0x00000073}, {0x00001E63, 0x00000323}, -{0x00001E64, 0x00000053}, {0x00001E64, 0x00000301}, {0x00001E64, 0x00000307}, {0x00001E65, 0x00000073}, -{0x00001E65, 0x00000301}, {0x00001E65, 0x00000307}, {0x00001E66, 0x00000053}, {0x00001E66, 0x0000030C}, -{0x00001E66, 0x00000307}, {0x00001E67, 0x00000073}, {0x00001E67, 0x0000030C}, {0x00001E67, 0x00000307}, -{0x00001E68, 0x00000053}, {0x00001E68, 0x00000323}, {0x00001E68, 0x00000307}, {0x00001E69, 0x00000073}, -{0x00001E69, 0x00000323}, {0x00001E69, 0x00000307}, {0x00001E6A, 0x00000054}, {0x00001E6A, 0x00000307}, -{0x00001E6B, 0x00000074}, {0x00001E6B, 0x00000307}, {0x00001E6C, 0x00000054}, {0x00001E6C, 0x00000323}, -{0x00001E6D, 0x00000074}, {0x00001E6D, 0x00000323}, {0x00001E6E, 0x00000054}, {0x00001E6E, 0x00000331}, -{0x00001E6F, 0x00000074}, {0x00001E6F, 0x00000331}, {0x00001E70, 0x00000054}, {0x00001E70, 0x0000032D}, -{0x00001E71, 0x00000074}, {0x00001E71, 0x0000032D}, {0x00001E72, 0x00000055}, {0x00001E72, 0x00000324}, -{0x00001E73, 0x00000075}, {0x00001E73, 0x00000324}, {0x00001E74, 0x00000055}, {0x00001E74, 0x00000330}, -{0x00001E75, 0x00000075}, {0x00001E75, 0x00000330}, {0x00001E76, 0x00000055}, {0x00001E76, 0x0000032D}, -{0x00001E77, 0x00000075}, {0x00001E77, 0x0000032D}, {0x00001E78, 0x00000055}, {0x00001E78, 0x00000303}, -{0x00001E78, 0x00000301}, {0x00001E79, 0x00000075}, {0x00001E79, 0x00000303}, {0x00001E79, 0x00000301}, -{0x00001E7A, 0x00000055}, {0x00001E7A, 0x00000304}, {0x00001E7A, 0x00000308}, {0x00001E7B, 0x00000075}, -{0x00001E7B, 0x00000304}, {0x00001E7B, 0x00000308}, {0x00001E7C, 0x00000056}, {0x00001E7C, 0x00000303}, -{0x00001E7D, 0x00000076}, {0x00001E7D, 0x00000303}, {0x00001E7E, 0x00000056}, {0x00001E7E, 0x00000323}, -{0x00001E7F, 0x00000076}, {0x00001E7F, 0x00000323}, {0x00001E80, 0x00000057}, {0x00001E80, 0x00000300}, -{0x00001E81, 0x00000077}, {0x00001E81, 0x00000300}, {0x00001E82, 0x00000057}, {0x00001E82, 0x00000301}, -{0x00001E83, 0x00000077}, {0x00001E83, 0x00000301}, {0x00001E84, 0x00000057}, {0x00001E84, 0x00000308}, -{0x00001E85, 0x00000077}, {0x00001E85, 0x00000308}, {0x00001E86, 0x00000057}, {0x00001E86, 0x00000307}, -{0x00001E87, 0x00000077}, {0x00001E87, 0x00000307}, {0x00001E88, 0x00000057}, {0x00001E88, 0x00000323}, -{0x00001E89, 0x00000077}, {0x00001E89, 0x00000323}, {0x00001E8A, 0x00000058}, {0x00001E8A, 0x00000307}, -{0x00001E8B, 0x00000078}, {0x00001E8B, 0x00000307}, {0x00001E8C, 0x00000058}, {0x00001E8C, 0x00000308}, -{0x00001E8D, 0x00000078}, {0x00001E8D, 0x00000308}, {0x00001E8E, 0x00000059}, {0x00001E8E, 0x00000307}, -{0x00001E8F, 0x00000079}, {0x00001E8F, 0x00000307}, {0x00001E90, 0x0000005A}, {0x00001E90, 0x00000302}, -{0x00001E91, 0x0000007A}, {0x00001E91, 0x00000302}, {0x00001E92, 0x0000005A}, {0x00001E92, 0x00000323}, -{0x00001E93, 0x0000007A}, {0x00001E93, 0x00000323}, {0x00001E94, 0x0000005A}, {0x00001E94, 0x00000331}, -{0x00001E95, 0x0000007A}, {0x00001E95, 0x00000331}, {0x00001E96, 0x00000068}, {0x00001E96, 0x00000331}, -{0x00001E97, 0x00000074}, {0x00001E97, 0x00000308}, {0x00001E98, 0x00000077}, {0x00001E98, 0x0000030A}, -{0x00001E99, 0x00000079}, {0x00001E99, 0x0000030A}, {0x00001E9B, 0x0000017F}, {0x00001E9B, 0x00000307}, -{0x00001EA0, 0x00000041}, {0x00001EA0, 0x00000323}, {0x00001EA1, 0x00000061}, {0x00001EA1, 0x00000323}, -{0x00001EA2, 0x00000041}, {0x00001EA2, 0x00000309}, {0x00001EA3, 0x00000061}, {0x00001EA3, 0x00000309}, -{0x00001EA4, 0x00000041}, {0x00001EA4, 0x00000302}, {0x00001EA4, 0x00000301}, {0x00001EA5, 0x00000061}, -{0x00001EA5, 0x00000302}, {0x00001EA5, 0x00000301}, {0x00001EA6, 0x00000041}, {0x00001EA6, 0x00000302}, -{0x00001EA6, 0x00000300}, {0x00001EA7, 0x00000061}, {0x00001EA7, 0x00000302}, {0x00001EA7, 0x00000300}, -{0x00001EA8, 0x00000041}, {0x00001EA8, 0x00000302}, {0x00001EA8, 0x00000309}, {0x00001EA9, 0x00000061}, -{0x00001EA9, 0x00000302}, {0x00001EA9, 0x00000309}, {0x00001EAA, 0x00000041}, {0x00001EAA, 0x00000302}, -{0x00001EAA, 0x00000303}, {0x00001EAB, 0x00000061}, {0x00001EAB, 0x00000302}, {0x00001EAB, 0x00000303}, -{0x00001EAC, 0x00000041}, {0x00001EAC, 0x00000323}, {0x00001EAC, 0x00000302}, {0x00001EAD, 0x00000061}, -{0x00001EAD, 0x00000323}, {0x00001EAD, 0x00000302}, {0x00001EAE, 0x00000041}, {0x00001EAE, 0x00000306}, -{0x00001EAE, 0x00000301}, {0x00001EAF, 0x00000061}, {0x00001EAF, 0x00000306}, {0x00001EAF, 0x00000301}, -{0x00001EB0, 0x00000041}, {0x00001EB0, 0x00000306}, {0x00001EB0, 0x00000300}, {0x00001EB1, 0x00000061}, -{0x00001EB1, 0x00000306}, {0x00001EB1, 0x00000300}, {0x00001EB2, 0x00000041}, {0x00001EB2, 0x00000306}, -{0x00001EB2, 0x00000309}, {0x00001EB3, 0x00000061}, {0x00001EB3, 0x00000306}, {0x00001EB3, 0x00000309}, -{0x00001EB4, 0x00000041}, {0x00001EB4, 0x00000306}, {0x00001EB4, 0x00000303}, {0x00001EB5, 0x00000061}, -{0x00001EB5, 0x00000306}, {0x00001EB5, 0x00000303}, {0x00001EB6, 0x00000041}, {0x00001EB6, 0x00000323}, -{0x00001EB6, 0x00000306}, {0x00001EB7, 0x00000061}, {0x00001EB7, 0x00000323}, {0x00001EB7, 0x00000306}, -{0x00001EB8, 0x00000045}, {0x00001EB8, 0x00000323}, {0x00001EB9, 0x00000065}, {0x00001EB9, 0x00000323}, -{0x00001EBA, 0x00000045}, {0x00001EBA, 0x00000309}, {0x00001EBB, 0x00000065}, {0x00001EBB, 0x00000309}, -{0x00001EBC, 0x00000045}, {0x00001EBC, 0x00000303}, {0x00001EBD, 0x00000065}, {0x00001EBD, 0x00000303}, -{0x00001EBE, 0x00000045}, {0x00001EBE, 0x00000302}, {0x00001EBE, 0x00000301}, {0x00001EBF, 0x00000065}, -{0x00001EBF, 0x00000302}, {0x00001EBF, 0x00000301}, {0x00001EC0, 0x00000045}, {0x00001EC0, 0x00000302}, -{0x00001EC0, 0x00000300}, {0x00001EC1, 0x00000065}, {0x00001EC1, 0x00000302}, {0x00001EC1, 0x00000300}, -{0x00001EC2, 0x00000045}, {0x00001EC2, 0x00000302}, {0x00001EC2, 0x00000309}, {0x00001EC3, 0x00000065}, -{0x00001EC3, 0x00000302}, {0x00001EC3, 0x00000309}, {0x00001EC4, 0x00000045}, {0x00001EC4, 0x00000302}, -{0x00001EC4, 0x00000303}, {0x00001EC5, 0x00000065}, {0x00001EC5, 0x00000302}, {0x00001EC5, 0x00000303}, -{0x00001EC6, 0x00000045}, {0x00001EC6, 0x00000323}, {0x00001EC6, 0x00000302}, {0x00001EC7, 0x00000065}, -{0x00001EC7, 0x00000323}, {0x00001EC7, 0x00000302}, {0x00001EC8, 0x00000049}, {0x00001EC8, 0x00000309}, -{0x00001EC9, 0x00000069}, {0x00001EC9, 0x00000309}, {0x00001ECA, 0x00000049}, {0x00001ECA, 0x00000323}, -{0x00001ECB, 0x00000069}, {0x00001ECB, 0x00000323}, {0x00001ECC, 0x0000004F}, {0x00001ECC, 0x00000323}, -{0x00001ECD, 0x0000006F}, {0x00001ECD, 0x00000323}, {0x00001ECE, 0x0000004F}, {0x00001ECE, 0x00000309}, -{0x00001ECF, 0x0000006F}, {0x00001ECF, 0x00000309}, {0x00001ED0, 0x0000004F}, {0x00001ED0, 0x00000302}, -{0x00001ED0, 0x00000301}, {0x00001ED1, 0x0000006F}, {0x00001ED1, 0x00000302}, {0x00001ED1, 0x00000301}, -{0x00001ED2, 0x0000004F}, {0x00001ED2, 0x00000302}, {0x00001ED2, 0x00000300}, {0x00001ED3, 0x0000006F}, -{0x00001ED3, 0x00000302}, {0x00001ED3, 0x00000300}, {0x00001ED4, 0x0000004F}, {0x00001ED4, 0x00000302}, -{0x00001ED4, 0x00000309}, {0x00001ED5, 0x0000006F}, {0x00001ED5, 0x00000302}, {0x00001ED5, 0x00000309}, -{0x00001ED6, 0x0000004F}, {0x00001ED6, 0x00000302}, {0x00001ED6, 0x00000303}, {0x00001ED7, 0x0000006F}, -{0x00001ED7, 0x00000302}, {0x00001ED7, 0x00000303}, {0x00001ED8, 0x0000004F}, {0x00001ED8, 0x00000323}, -{0x00001ED8, 0x00000302}, {0x00001ED9, 0x0000006F}, {0x00001ED9, 0x00000323}, {0x00001ED9, 0x00000302}, -{0x00001EDA, 0x0000004F}, {0x00001EDA, 0x0000031B}, {0x00001EDA, 0x00000301}, {0x00001EDB, 0x0000006F}, -{0x00001EDB, 0x0000031B}, {0x00001EDB, 0x00000301}, {0x00001EDC, 0x0000004F}, {0x00001EDC, 0x0000031B}, -{0x00001EDC, 0x00000300}, {0x00001EDD, 0x0000006F}, {0x00001EDD, 0x0000031B}, {0x00001EDD, 0x00000300}, -{0x00001EDE, 0x0000004F}, {0x00001EDE, 0x0000031B}, {0x00001EDE, 0x00000309}, {0x00001EDF, 0x0000006F}, -{0x00001EDF, 0x0000031B}, {0x00001EDF, 0x00000309}, {0x00001EE0, 0x0000004F}, {0x00001EE0, 0x0000031B}, -{0x00001EE0, 0x00000303}, {0x00001EE1, 0x0000006F}, {0x00001EE1, 0x0000031B}, {0x00001EE1, 0x00000303}, -{0x00001EE2, 0x0000004F}, {0x00001EE2, 0x0000031B}, {0x00001EE2, 0x00000323}, {0x00001EE3, 0x0000006F}, -{0x00001EE3, 0x0000031B}, {0x00001EE3, 0x00000323}, {0x00001EE4, 0x00000055}, {0x00001EE4, 0x00000323}, -{0x00001EE5, 0x00000075}, {0x00001EE5, 0x00000323}, {0x00001EE6, 0x00000055}, {0x00001EE6, 0x00000309}, -{0x00001EE7, 0x00000075}, {0x00001EE7, 0x00000309}, {0x00001EE8, 0x00000055}, {0x00001EE8, 0x0000031B}, -{0x00001EE8, 0x00000301}, {0x00001EE9, 0x00000075}, {0x00001EE9, 0x0000031B}, {0x00001EE9, 0x00000301}, -{0x00001EEA, 0x00000055}, {0x00001EEA, 0x0000031B}, {0x00001EEA, 0x00000300}, {0x00001EEB, 0x00000075}, -{0x00001EEB, 0x0000031B}, {0x00001EEB, 0x00000300}, {0x00001EEC, 0x00000055}, {0x00001EEC, 0x0000031B}, -{0x00001EEC, 0x00000309}, {0x00001EED, 0x00000075}, {0x00001EED, 0x0000031B}, {0x00001EED, 0x00000309}, -{0x00001EEE, 0x00000055}, {0x00001EEE, 0x0000031B}, {0x00001EEE, 0x00000303}, {0x00001EEF, 0x00000075}, -{0x00001EEF, 0x0000031B}, {0x00001EEF, 0x00000303}, {0x00001EF0, 0x00000055}, {0x00001EF0, 0x0000031B}, -{0x00001EF0, 0x00000323}, {0x00001EF1, 0x00000075}, {0x00001EF1, 0x0000031B}, {0x00001EF1, 0x00000323}, -{0x00001EF2, 0x00000059}, {0x00001EF2, 0x00000300}, {0x00001EF3, 0x00000079}, {0x00001EF3, 0x00000300}, -{0x00001EF4, 0x00000059}, {0x00001EF4, 0x00000323}, {0x00001EF5, 0x00000079}, {0x00001EF5, 0x00000323}, -{0x00001EF6, 0x00000059}, {0x00001EF6, 0x00000309}, {0x00001EF7, 0x00000079}, {0x00001EF7, 0x00000309}, -{0x00001EF8, 0x00000059}, {0x00001EF8, 0x00000303}, {0x00001EF9, 0x00000079}, {0x00001EF9, 0x00000303}, -{0x00001F00, 0x000003B1}, {0x00001F00, 0x00000313}, {0x00001F01, 0x000003B1}, {0x00001F01, 0x00000314}, -{0x00001F02, 0x000003B1}, {0x00001F02, 0x00000313}, {0x00001F02, 0x00000300}, {0x00001F03, 0x000003B1}, -{0x00001F03, 0x00000314}, {0x00001F03, 0x00000300}, {0x00001F04, 0x000003B1}, {0x00001F04, 0x00000313}, -{0x00001F04, 0x00000301}, {0x00001F05, 0x000003B1}, {0x00001F05, 0x00000314}, {0x00001F05, 0x00000301}, -{0x00001F06, 0x000003B1}, {0x00001F06, 0x00000313}, {0x00001F06, 0x00000342}, {0x00001F07, 0x000003B1}, -{0x00001F07, 0x00000314}, {0x00001F07, 0x00000342}, {0x00001F08, 0x00000391}, {0x00001F08, 0x00000313}, -{0x00001F09, 0x00000391}, {0x00001F09, 0x00000314}, {0x00001F0A, 0x00000391}, {0x00001F0A, 0x00000313}, -{0x00001F0A, 0x00000300}, {0x00001F0B, 0x00000391}, {0x00001F0B, 0x00000314}, {0x00001F0B, 0x00000300}, -{0x00001F0C, 0x00000391}, {0x00001F0C, 0x00000313}, {0x00001F0C, 0x00000301}, {0x00001F0D, 0x00000391}, -{0x00001F0D, 0x00000314}, {0x00001F0D, 0x00000301}, {0x00001F0E, 0x00000391}, {0x00001F0E, 0x00000313}, -{0x00001F0E, 0x00000342}, {0x00001F0F, 0x00000391}, {0x00001F0F, 0x00000314}, {0x00001F0F, 0x00000342}, -{0x00001F10, 0x000003B5}, {0x00001F10, 0x00000313}, {0x00001F11, 0x000003B5}, {0x00001F11, 0x00000314}, -{0x00001F12, 0x000003B5}, {0x00001F12, 0x00000313}, {0x00001F12, 0x00000300}, {0x00001F13, 0x000003B5}, -{0x00001F13, 0x00000314}, {0x00001F13, 0x00000300}, {0x00001F14, 0x000003B5}, {0x00001F14, 0x00000313}, -{0x00001F14, 0x00000301}, {0x00001F15, 0x000003B5}, {0x00001F15, 0x00000314}, {0x00001F15, 0x00000301}, -{0x00001F18, 0x00000395}, {0x00001F18, 0x00000313}, {0x00001F19, 0x00000395}, {0x00001F19, 0x00000314}, -{0x00001F1A, 0x00000395}, {0x00001F1A, 0x00000313}, {0x00001F1A, 0x00000300}, {0x00001F1B, 0x00000395}, -{0x00001F1B, 0x00000314}, {0x00001F1B, 0x00000300}, {0x00001F1C, 0x00000395}, {0x00001F1C, 0x00000313}, -{0x00001F1C, 0x00000301}, {0x00001F1D, 0x00000395}, {0x00001F1D, 0x00000314}, {0x00001F1D, 0x00000301}, -{0x00001F20, 0x000003B7}, {0x00001F20, 0x00000313}, {0x00001F21, 0x000003B7}, {0x00001F21, 0x00000314}, -{0x00001F22, 0x000003B7}, {0x00001F22, 0x00000313}, {0x00001F22, 0x00000300}, {0x00001F23, 0x000003B7}, -{0x00001F23, 0x00000314}, {0x00001F23, 0x00000300}, {0x00001F24, 0x000003B7}, {0x00001F24, 0x00000313}, -{0x00001F24, 0x00000301}, {0x00001F25, 0x000003B7}, {0x00001F25, 0x00000314}, {0x00001F25, 0x00000301}, -{0x00001F26, 0x000003B7}, {0x00001F26, 0x00000313}, {0x00001F26, 0x00000342}, {0x00001F27, 0x000003B7}, -{0x00001F27, 0x00000314}, {0x00001F27, 0x00000342}, {0x00001F28, 0x00000397}, {0x00001F28, 0x00000313}, -{0x00001F29, 0x00000397}, {0x00001F29, 0x00000314}, {0x00001F2A, 0x00000397}, {0x00001F2A, 0x00000313}, -{0x00001F2A, 0x00000300}, {0x00001F2B, 0x00000397}, {0x00001F2B, 0x00000314}, {0x00001F2B, 0x00000300}, -{0x00001F2C, 0x00000397}, {0x00001F2C, 0x00000313}, {0x00001F2C, 0x00000301}, {0x00001F2D, 0x00000397}, -{0x00001F2D, 0x00000314}, {0x00001F2D, 0x00000301}, {0x00001F2E, 0x00000397}, {0x00001F2E, 0x00000313}, -{0x00001F2E, 0x00000342}, {0x00001F2F, 0x00000397}, {0x00001F2F, 0x00000314}, {0x00001F2F, 0x00000342}, -{0x00001F30, 0x000003B9}, {0x00001F30, 0x00000313}, {0x00001F31, 0x000003B9}, {0x00001F31, 0x00000314}, -{0x00001F32, 0x000003B9}, {0x00001F32, 0x00000313}, {0x00001F32, 0x00000300}, {0x00001F33, 0x000003B9}, -{0x00001F33, 0x00000314}, {0x00001F33, 0x00000300}, {0x00001F34, 0x000003B9}, {0x00001F34, 0x00000313}, -{0x00001F34, 0x00000301}, {0x00001F35, 0x000003B9}, {0x00001F35, 0x00000314}, {0x00001F35, 0x00000301}, -{0x00001F36, 0x000003B9}, {0x00001F36, 0x00000313}, {0x00001F36, 0x00000342}, {0x00001F37, 0x000003B9}, -{0x00001F37, 0x00000314}, {0x00001F37, 0x00000342}, {0x00001F38, 0x00000399}, {0x00001F38, 0x00000313}, -{0x00001F39, 0x00000399}, {0x00001F39, 0x00000314}, {0x00001F3A, 0x00000399}, {0x00001F3A, 0x00000313}, -{0x00001F3A, 0x00000300}, {0x00001F3B, 0x00000399}, {0x00001F3B, 0x00000314}, {0x00001F3B, 0x00000300}, -{0x00001F3C, 0x00000399}, {0x00001F3C, 0x00000313}, {0x00001F3C, 0x00000301}, {0x00001F3D, 0x00000399}, -{0x00001F3D, 0x00000314}, {0x00001F3D, 0x00000301}, {0x00001F3E, 0x00000399}, {0x00001F3E, 0x00000313}, -{0x00001F3E, 0x00000342}, {0x00001F3F, 0x00000399}, {0x00001F3F, 0x00000314}, {0x00001F3F, 0x00000342}, -{0x00001F40, 0x000003BF}, {0x00001F40, 0x00000313}, {0x00001F41, 0x000003BF}, {0x00001F41, 0x00000314}, -{0x00001F42, 0x000003BF}, {0x00001F42, 0x00000313}, {0x00001F42, 0x00000300}, {0x00001F43, 0x000003BF}, -{0x00001F43, 0x00000314}, {0x00001F43, 0x00000300}, {0x00001F44, 0x000003BF}, {0x00001F44, 0x00000313}, -{0x00001F44, 0x00000301}, {0x00001F45, 0x000003BF}, {0x00001F45, 0x00000314}, {0x00001F45, 0x00000301}, -{0x00001F48, 0x0000039F}, {0x00001F48, 0x00000313}, {0x00001F49, 0x0000039F}, {0x00001F49, 0x00000314}, -{0x00001F4A, 0x0000039F}, {0x00001F4A, 0x00000313}, {0x00001F4A, 0x00000300}, {0x00001F4B, 0x0000039F}, -{0x00001F4B, 0x00000314}, {0x00001F4B, 0x00000300}, {0x00001F4C, 0x0000039F}, {0x00001F4C, 0x00000313}, -{0x00001F4C, 0x00000301}, {0x00001F4D, 0x0000039F}, {0x00001F4D, 0x00000314}, {0x00001F4D, 0x00000301}, -{0x00001F50, 0x000003C5}, {0x00001F50, 0x00000313}, {0x00001F51, 0x000003C5}, {0x00001F51, 0x00000314}, -{0x00001F52, 0x000003C5}, {0x00001F52, 0x00000313}, {0x00001F52, 0x00000300}, {0x00001F53, 0x000003C5}, -{0x00001F53, 0x00000314}, {0x00001F53, 0x00000300}, {0x00001F54, 0x000003C5}, {0x00001F54, 0x00000313}, -{0x00001F54, 0x00000301}, {0x00001F55, 0x000003C5}, {0x00001F55, 0x00000314}, {0x00001F55, 0x00000301}, -{0x00001F56, 0x000003C5}, {0x00001F56, 0x00000313}, {0x00001F56, 0x00000342}, {0x00001F57, 0x000003C5}, -{0x00001F57, 0x00000314}, {0x00001F57, 0x00000342}, {0x00001F59, 0x000003A5}, {0x00001F59, 0x00000314}, -{0x00001F5B, 0x000003A5}, {0x00001F5B, 0x00000314}, {0x00001F5B, 0x00000300}, {0x00001F5D, 0x000003A5}, -{0x00001F5D, 0x00000314}, {0x00001F5D, 0x00000301}, {0x00001F5F, 0x000003A5}, {0x00001F5F, 0x00000314}, -{0x00001F5F, 0x00000342}, {0x00001F60, 0x000003C9}, {0x00001F60, 0x00000313}, {0x00001F61, 0x000003C9}, -{0x00001F61, 0x00000314}, {0x00001F62, 0x000003C9}, {0x00001F62, 0x00000313}, {0x00001F62, 0x00000300}, -{0x00001F63, 0x000003C9}, {0x00001F63, 0x00000314}, {0x00001F63, 0x00000300}, {0x00001F64, 0x000003C9}, -{0x00001F64, 0x00000313}, {0x00001F64, 0x00000301}, {0x00001F65, 0x000003C9}, {0x00001F65, 0x00000314}, -{0x00001F65, 0x00000301}, {0x00001F66, 0x000003C9}, {0x00001F66, 0x00000313}, {0x00001F66, 0x00000342}, -{0x00001F67, 0x000003C9}, {0x00001F67, 0x00000314}, {0x00001F67, 0x00000342}, {0x00001F68, 0x000003A9}, -{0x00001F68, 0x00000313}, {0x00001F69, 0x000003A9}, {0x00001F69, 0x00000314}, {0x00001F6A, 0x000003A9}, -{0x00001F6A, 0x00000313}, {0x00001F6A, 0x00000300}, {0x00001F6B, 0x000003A9}, {0x00001F6B, 0x00000314}, -{0x00001F6B, 0x00000300}, {0x00001F6C, 0x000003A9}, {0x00001F6C, 0x00000313}, {0x00001F6C, 0x00000301}, -{0x00001F6D, 0x000003A9}, {0x00001F6D, 0x00000314}, {0x00001F6D, 0x00000301}, {0x00001F6E, 0x000003A9}, -{0x00001F6E, 0x00000313}, {0x00001F6E, 0x00000342}, {0x00001F6F, 0x000003A9}, {0x00001F6F, 0x00000314}, -{0x00001F6F, 0x00000342}, {0x00001F70, 0x000003B1}, {0x00001F70, 0x00000300}, {0x00001F71, 0x000003B1}, -{0x00001F71, 0x00000301}, {0x00001F72, 0x000003B5}, {0x00001F72, 0x00000300}, {0x00001F73, 0x000003B5}, -{0x00001F73, 0x00000301}, {0x00001F74, 0x000003B7}, {0x00001F74, 0x00000300}, {0x00001F75, 0x000003B7}, -{0x00001F75, 0x00000301}, {0x00001F76, 0x000003B9}, {0x00001F76, 0x00000300}, {0x00001F77, 0x000003B9}, -{0x00001F77, 0x00000301}, {0x00001F78, 0x000003BF}, {0x00001F78, 0x00000300}, {0x00001F79, 0x000003BF}, -{0x00001F79, 0x00000301}, {0x00001F7A, 0x000003C5}, {0x00001F7A, 0x00000300}, {0x00001F7B, 0x000003C5}, -{0x00001F7B, 0x00000301}, {0x00001F7C, 0x000003C9}, {0x00001F7C, 0x00000300}, {0x00001F7D, 0x000003C9}, -{0x00001F7D, 0x00000301}, {0x00001F80, 0x000003B1}, {0x00001F80, 0x00000313}, {0x00001F80, 0x00000345}, -{0x00001F81, 0x000003B1}, {0x00001F81, 0x00000314}, {0x00001F81, 0x00000345}, {0x00001F82, 0x000003B1}, -{0x00001F82, 0x00000313}, {0x00001F82, 0x00000300}, {0x00001F82, 0x00000345}, {0x00001F83, 0x000003B1}, -{0x00001F83, 0x00000314}, {0x00001F83, 0x00000300}, {0x00001F83, 0x00000345}, {0x00001F84, 0x000003B1}, -{0x00001F84, 0x00000313}, {0x00001F84, 0x00000301}, {0x00001F84, 0x00000345}, {0x00001F85, 0x000003B1}, -{0x00001F85, 0x00000314}, {0x00001F85, 0x00000301}, {0x00001F85, 0x00000345}, {0x00001F86, 0x000003B1}, -{0x00001F86, 0x00000313}, {0x00001F86, 0x00000342}, {0x00001F86, 0x00000345}, {0x00001F87, 0x000003B1}, -{0x00001F87, 0x00000314}, {0x00001F87, 0x00000342}, {0x00001F87, 0x00000345}, {0x00001F88, 0x00000391}, -{0x00001F88, 0x00000313}, {0x00001F88, 0x00000345}, {0x00001F89, 0x00000391}, {0x00001F89, 0x00000314}, -{0x00001F89, 0x00000345}, {0x00001F8A, 0x00000391}, {0x00001F8A, 0x00000313}, {0x00001F8A, 0x00000300}, -{0x00001F8A, 0x00000345}, {0x00001F8B, 0x00000391}, {0x00001F8B, 0x00000314}, {0x00001F8B, 0x00000300}, -{0x00001F8B, 0x00000345}, {0x00001F8C, 0x00000391}, {0x00001F8C, 0x00000313}, {0x00001F8C, 0x00000301}, -{0x00001F8C, 0x00000345}, {0x00001F8D, 0x00000391}, {0x00001F8D, 0x00000314}, {0x00001F8D, 0x00000301}, -{0x00001F8D, 0x00000345}, {0x00001F8E, 0x00000391}, {0x00001F8E, 0x00000313}, {0x00001F8E, 0x00000342}, -{0x00001F8E, 0x00000345}, {0x00001F8F, 0x00000391}, {0x00001F8F, 0x00000314}, {0x00001F8F, 0x00000342}, -{0x00001F8F, 0x00000345}, {0x00001F90, 0x000003B7}, {0x00001F90, 0x00000313}, {0x00001F90, 0x00000345}, -{0x00001F91, 0x000003B7}, {0x00001F91, 0x00000314}, {0x00001F91, 0x00000345}, {0x00001F92, 0x000003B7}, -{0x00001F92, 0x00000313}, {0x00001F92, 0x00000300}, {0x00001F92, 0x00000345}, {0x00001F93, 0x000003B7}, -{0x00001F93, 0x00000314}, {0x00001F93, 0x00000300}, {0x00001F93, 0x00000345}, {0x00001F94, 0x000003B7}, -{0x00001F94, 0x00000313}, {0x00001F94, 0x00000301}, {0x00001F94, 0x00000345}, {0x00001F95, 0x000003B7}, -{0x00001F95, 0x00000314}, {0x00001F95, 0x00000301}, {0x00001F95, 0x00000345}, {0x00001F96, 0x000003B7}, -{0x00001F96, 0x00000313}, {0x00001F96, 0x00000342}, {0x00001F96, 0x00000345}, {0x00001F97, 0x000003B7}, -{0x00001F97, 0x00000314}, {0x00001F97, 0x00000342}, {0x00001F97, 0x00000345}, {0x00001F98, 0x00000397}, -{0x00001F98, 0x00000313}, {0x00001F98, 0x00000345}, {0x00001F99, 0x00000397}, {0x00001F99, 0x00000314}, -{0x00001F99, 0x00000345}, {0x00001F9A, 0x00000397}, {0x00001F9A, 0x00000313}, {0x00001F9A, 0x00000300}, -{0x00001F9A, 0x00000345}, {0x00001F9B, 0x00000397}, {0x00001F9B, 0x00000314}, {0x00001F9B, 0x00000300}, -{0x00001F9B, 0x00000345}, {0x00001F9C, 0x00000397}, {0x00001F9C, 0x00000313}, {0x00001F9C, 0x00000301}, -{0x00001F9C, 0x00000345}, {0x00001F9D, 0x00000397}, {0x00001F9D, 0x00000314}, {0x00001F9D, 0x00000301}, -{0x00001F9D, 0x00000345}, {0x00001F9E, 0x00000397}, {0x00001F9E, 0x00000313}, {0x00001F9E, 0x00000342}, -{0x00001F9E, 0x00000345}, {0x00001F9F, 0x00000397}, {0x00001F9F, 0x00000314}, {0x00001F9F, 0x00000342}, -{0x00001F9F, 0x00000345}, {0x00001FA0, 0x000003C9}, {0x00001FA0, 0x00000313}, {0x00001FA0, 0x00000345}, -{0x00001FA1, 0x000003C9}, {0x00001FA1, 0x00000314}, {0x00001FA1, 0x00000345}, {0x00001FA2, 0x000003C9}, -{0x00001FA2, 0x00000313}, {0x00001FA2, 0x00000300}, {0x00001FA2, 0x00000345}, {0x00001FA3, 0x000003C9}, -{0x00001FA3, 0x00000314}, {0x00001FA3, 0x00000300}, {0x00001FA3, 0x00000345}, {0x00001FA4, 0x000003C9}, -{0x00001FA4, 0x00000313}, {0x00001FA4, 0x00000301}, {0x00001FA4, 0x00000345}, {0x00001FA5, 0x000003C9}, -{0x00001FA5, 0x00000314}, {0x00001FA5, 0x00000301}, {0x00001FA5, 0x00000345}, {0x00001FA6, 0x000003C9}, -{0x00001FA6, 0x00000313}, {0x00001FA6, 0x00000342}, {0x00001FA6, 0x00000345}, {0x00001FA7, 0x000003C9}, -{0x00001FA7, 0x00000314}, {0x00001FA7, 0x00000342}, {0x00001FA7, 0x00000345}, {0x00001FA8, 0x000003A9}, -{0x00001FA8, 0x00000313}, {0x00001FA8, 0x00000345}, {0x00001FA9, 0x000003A9}, {0x00001FA9, 0x00000314}, -{0x00001FA9, 0x00000345}, {0x00001FAA, 0x000003A9}, {0x00001FAA, 0x00000313}, {0x00001FAA, 0x00000300}, -{0x00001FAA, 0x00000345}, {0x00001FAB, 0x000003A9}, {0x00001FAB, 0x00000314}, {0x00001FAB, 0x00000300}, -{0x00001FAB, 0x00000345}, {0x00001FAC, 0x000003A9}, {0x00001FAC, 0x00000313}, {0x00001FAC, 0x00000301}, -{0x00001FAC, 0x00000345}, {0x00001FAD, 0x000003A9}, {0x00001FAD, 0x00000314}, {0x00001FAD, 0x00000301}, -{0x00001FAD, 0x00000345}, {0x00001FAE, 0x000003A9}, {0x00001FAE, 0x00000313}, {0x00001FAE, 0x00000342}, -{0x00001FAE, 0x00000345}, {0x00001FAF, 0x000003A9}, {0x00001FAF, 0x00000314}, {0x00001FAF, 0x00000342}, -{0x00001FAF, 0x00000345}, {0x00001FB0, 0x000003B1}, {0x00001FB0, 0x00000306}, {0x00001FB1, 0x000003B1}, -{0x00001FB1, 0x00000304}, {0x00001FB2, 0x000003B1}, {0x00001FB2, 0x00000300}, {0x00001FB2, 0x00000345}, -{0x00001FB3, 0x000003B1}, {0x00001FB3, 0x00000345}, {0x00001FB4, 0x000003B1}, {0x00001FB4, 0x00000301}, -{0x00001FB4, 0x00000345}, {0x00001FB6, 0x000003B1}, {0x00001FB6, 0x00000342}, {0x00001FB7, 0x000003B1}, -{0x00001FB7, 0x00000342}, {0x00001FB7, 0x00000345}, {0x00001FB8, 0x00000391}, {0x00001FB8, 0x00000306}, -{0x00001FB9, 0x00000391}, {0x00001FB9, 0x00000304}, {0x00001FBA, 0x00000391}, {0x00001FBA, 0x00000300}, -{0x00001FBB, 0x00000391}, {0x00001FBB, 0x00000301}, {0x00001FBC, 0x00000391}, {0x00001FBC, 0x00000345}, -{0x00001FBE, 0x000003B9}, {0x00001FC1, 0x000000A8}, {0x00001FC1, 0x00000342}, {0x00001FC2, 0x000003B7}, -{0x00001FC2, 0x00000300}, {0x00001FC2, 0x00000345}, {0x00001FC3, 0x000003B7}, {0x00001FC3, 0x00000345}, -{0x00001FC4, 0x000003B7}, {0x00001FC4, 0x00000301}, {0x00001FC4, 0x00000345}, {0x00001FC6, 0x000003B7}, -{0x00001FC6, 0x00000342}, {0x00001FC7, 0x000003B7}, {0x00001FC7, 0x00000342}, {0x00001FC7, 0x00000345}, -{0x00001FC8, 0x00000395}, {0x00001FC8, 0x00000300}, {0x00001FC9, 0x00000395}, {0x00001FC9, 0x00000301}, -{0x00001FCA, 0x00000397}, {0x00001FCA, 0x00000300}, {0x00001FCB, 0x00000397}, {0x00001FCB, 0x00000301}, -{0x00001FCC, 0x00000397}, {0x00001FCC, 0x00000345}, {0x00001FCD, 0x00001FBF}, {0x00001FCD, 0x00000300}, -{0x00001FCE, 0x00001FBF}, {0x00001FCE, 0x00000301}, {0x00001FCF, 0x00001FBF}, {0x00001FCF, 0x00000342}, -{0x00001FD0, 0x000003B9}, {0x00001FD0, 0x00000306}, {0x00001FD1, 0x000003B9}, {0x00001FD1, 0x00000304}, -{0x00001FD2, 0x000003B9}, {0x00001FD2, 0x00000308}, {0x00001FD2, 0x00000300}, {0x00001FD3, 0x000003B9}, -{0x00001FD3, 0x00000308}, {0x00001FD3, 0x00000301}, {0x00001FD6, 0x000003B9}, {0x00001FD6, 0x00000342}, -{0x00001FD7, 0x000003B9}, {0x00001FD7, 0x00000308}, {0x00001FD7, 0x00000342}, {0x00001FD8, 0x00000399}, -{0x00001FD8, 0x00000306}, {0x00001FD9, 0x00000399}, {0x00001FD9, 0x00000304}, {0x00001FDA, 0x00000399}, -{0x00001FDA, 0x00000300}, {0x00001FDB, 0x00000399}, {0x00001FDB, 0x00000301}, {0x00001FDD, 0x00001FFE}, -{0x00001FDD, 0x00000300}, {0x00001FDE, 0x00001FFE}, {0x00001FDE, 0x00000301}, {0x00001FDF, 0x00001FFE}, -{0x00001FDF, 0x00000342}, {0x00001FE0, 0x000003C5}, {0x00001FE0, 0x00000306}, {0x00001FE1, 0x000003C5}, -{0x00001FE1, 0x00000304}, {0x00001FE2, 0x000003C5}, {0x00001FE2, 0x00000308}, {0x00001FE2, 0x00000300}, -{0x00001FE3, 0x000003C5}, {0x00001FE3, 0x00000308}, {0x00001FE3, 0x00000301}, {0x00001FE4, 0x000003C1}, -{0x00001FE4, 0x00000313}, {0x00001FE5, 0x000003C1}, {0x00001FE5, 0x00000314}, {0x00001FE6, 0x000003C5}, -{0x00001FE6, 0x00000342}, {0x00001FE7, 0x000003C5}, {0x00001FE7, 0x00000308}, {0x00001FE7, 0x00000342}, -{0x00001FE8, 0x000003A5}, {0x00001FE8, 0x00000306}, {0x00001FE9, 0x000003A5}, {0x00001FE9, 0x00000304}, -{0x00001FEA, 0x000003A5}, {0x00001FEA, 0x00000300}, {0x00001FEB, 0x000003A5}, {0x00001FEB, 0x00000301}, -{0x00001FEC, 0x000003A1}, {0x00001FEC, 0x00000314}, {0x00001FED, 0x000000A8}, {0x00001FED, 0x00000300}, -{0x00001FEE, 0x000000A8}, {0x00001FEE, 0x00000301}, {0x00001FEF, 0x00000060}, {0x00001FF2, 0x000003C9}, -{0x00001FF2, 0x00000300}, {0x00001FF2, 0x00000345}, {0x00001FF3, 0x000003C9}, {0x00001FF3, 0x00000345}, -{0x00001FF4, 0x000003C9}, {0x00001FF4, 0x00000301}, {0x00001FF4, 0x00000345}, {0x00001FF6, 0x000003C9}, -{0x00001FF6, 0x00000342}, {0x00001FF7, 0x000003C9}, {0x00001FF7, 0x00000342}, {0x00001FF7, 0x00000345}, -{0x00001FF8, 0x0000039F}, {0x00001FF8, 0x00000300}, {0x00001FF9, 0x0000039F}, {0x00001FF9, 0x00000301}, -{0x00001FFA, 0x000003A9}, {0x00001FFA, 0x00000300}, {0x00001FFB, 0x000003A9}, {0x00001FFB, 0x00000301}, -{0x00001FFC, 0x000003A9}, {0x00001FFC, 0x00000345}, {0x00001FFD, 0x000000B4}, {0x00002000, 0x00002002}, -{0x00002001, 0x00002003}, {0x00002126, 0x000003A9}, {0x0000212A, 0x0000004B}, {0x0000212B, 0x00000041}, -{0x0000212B, 0x0000030A}, {0x0000219A, 0x00002190}, {0x0000219A, 0x00000338}, {0x0000219B, 0x00002192}, -{0x0000219B, 0x00000338}, {0x000021AE, 0x00002194}, {0x000021AE, 0x00000338}, {0x000021CD, 0x000021D0}, -{0x000021CD, 0x00000338}, {0x000021CE, 0x000021D4}, {0x000021CE, 0x00000338}, {0x000021CF, 0x000021D2}, -{0x000021CF, 0x00000338}, {0x00002204, 0x00002203}, {0x00002204, 0x00000338}, {0x00002209, 0x00002208}, -{0x00002209, 0x00000338}, {0x0000220C, 0x0000220B}, {0x0000220C, 0x00000338}, {0x00002224, 0x00002223}, -{0x00002224, 0x00000338}, {0x00002226, 0x00002225}, {0x00002226, 0x00000338}, {0x00002241, 0x0000223C}, -{0x00002241, 0x00000338}, {0x00002244, 0x00002243}, {0x00002244, 0x00000338}, {0x00002247, 0x00002245}, -{0x00002247, 0x00000338}, {0x00002249, 0x00002248}, {0x00002249, 0x00000338}, {0x00002260, 0x0000003D}, -{0x00002260, 0x00000338}, {0x00002262, 0x00002261}, {0x00002262, 0x00000338}, {0x0000226D, 0x0000224D}, -{0x0000226D, 0x00000338}, {0x0000226E, 0x0000003C}, {0x0000226E, 0x00000338}, {0x0000226F, 0x0000003E}, -{0x0000226F, 0x00000338}, {0x00002270, 0x00002264}, {0x00002270, 0x00000338}, {0x00002271, 0x00002265}, -{0x00002271, 0x00000338}, {0x00002274, 0x00002272}, {0x00002274, 0x00000338}, {0x00002275, 0x00002273}, -{0x00002275, 0x00000338}, {0x00002278, 0x00002276}, {0x00002278, 0x00000338}, {0x00002279, 0x00002277}, -{0x00002279, 0x00000338}, {0x00002280, 0x0000227A}, {0x00002280, 0x00000338}, {0x00002281, 0x0000227B}, -{0x00002281, 0x00000338}, {0x00002284, 0x00002282}, {0x00002284, 0x00000338}, {0x00002285, 0x00002283}, -{0x00002285, 0x00000338}, {0x00002288, 0x00002286}, {0x00002288, 0x00000338}, {0x00002289, 0x00002287}, -{0x00002289, 0x00000338}, {0x000022AC, 0x000022A2}, {0x000022AC, 0x00000338}, {0x000022AD, 0x000022A8}, -{0x000022AD, 0x00000338}, {0x000022AE, 0x000022A9}, {0x000022AE, 0x00000338}, {0x000022AF, 0x000022AB}, -{0x000022AF, 0x00000338}, {0x000022E0, 0x0000227C}, {0x000022E0, 0x00000338}, {0x000022E1, 0x0000227D}, -{0x000022E1, 0x00000338}, {0x000022E2, 0x00002291}, {0x000022E2, 0x00000338}, {0x000022E3, 0x00002292}, -{0x000022E3, 0x00000338}, {0x000022EA, 0x000022B2}, {0x000022EA, 0x00000338}, {0x000022EB, 0x000022B3}, -{0x000022EB, 0x00000338}, {0x000022EC, 0x000022B4}, {0x000022EC, 0x00000338}, {0x000022ED, 0x000022B5}, -{0x000022ED, 0x00000338}, {0x00002329, 0x00003008}, {0x0000232A, 0x00003009}, {0x00002ADC, 0x00002ADD}, -{0x00002ADC, 0x00000338}, {0x0000304C, 0x0000304B}, {0x0000304C, 0x00003099}, {0x0000304E, 0x0000304D}, -{0x0000304E, 0x00003099}, {0x00003050, 0x0000304F}, {0x00003050, 0x00003099}, {0x00003052, 0x00003051}, -{0x00003052, 0x00003099}, {0x00003054, 0x00003053}, {0x00003054, 0x00003099}, {0x00003056, 0x00003055}, -{0x00003056, 0x00003099}, {0x00003058, 0x00003057}, {0x00003058, 0x00003099}, {0x0000305A, 0x00003059}, -{0x0000305A, 0x00003099}, {0x0000305C, 0x0000305B}, {0x0000305C, 0x00003099}, {0x0000305E, 0x0000305D}, -{0x0000305E, 0x00003099}, {0x00003060, 0x0000305F}, {0x00003060, 0x00003099}, {0x00003062, 0x00003061}, -{0x00003062, 0x00003099}, {0x00003065, 0x00003064}, {0x00003065, 0x00003099}, {0x00003067, 0x00003066}, -{0x00003067, 0x00003099}, {0x00003069, 0x00003068}, {0x00003069, 0x00003099}, {0x00003070, 0x0000306F}, -{0x00003070, 0x00003099}, {0x00003071, 0x0000306F}, {0x00003071, 0x0000309A}, {0x00003073, 0x00003072}, -{0x00003073, 0x00003099}, {0x00003074, 0x00003072}, {0x00003074, 0x0000309A}, {0x00003076, 0x00003075}, -{0x00003076, 0x00003099}, {0x00003077, 0x00003075}, {0x00003077, 0x0000309A}, {0x00003079, 0x00003078}, -{0x00003079, 0x00003099}, {0x0000307A, 0x00003078}, {0x0000307A, 0x0000309A}, {0x0000307C, 0x0000307B}, -{0x0000307C, 0x00003099}, {0x0000307D, 0x0000307B}, {0x0000307D, 0x0000309A}, {0x00003094, 0x00003046}, -{0x00003094, 0x00003099}, {0x0000309E, 0x0000309D}, {0x0000309E, 0x00003099}, {0x000030AC, 0x000030AB}, -{0x000030AC, 0x00003099}, {0x000030AE, 0x000030AD}, {0x000030AE, 0x00003099}, {0x000030B0, 0x000030AF}, -{0x000030B0, 0x00003099}, {0x000030B2, 0x000030B1}, {0x000030B2, 0x00003099}, {0x000030B4, 0x000030B3}, -{0x000030B4, 0x00003099}, {0x000030B6, 0x000030B5}, {0x000030B6, 0x00003099}, {0x000030B8, 0x000030B7}, -{0x000030B8, 0x00003099}, {0x000030BA, 0x000030B9}, {0x000030BA, 0x00003099}, {0x000030BC, 0x000030BB}, -{0x000030BC, 0x00003099}, {0x000030BE, 0x000030BD}, {0x000030BE, 0x00003099}, {0x000030C0, 0x000030BF}, -{0x000030C0, 0x00003099}, {0x000030C2, 0x000030C1}, {0x000030C2, 0x00003099}, {0x000030C5, 0x000030C4}, -{0x000030C5, 0x00003099}, {0x000030C7, 0x000030C6}, {0x000030C7, 0x00003099}, {0x000030C9, 0x000030C8}, -{0x000030C9, 0x00003099}, {0x000030D0, 0x000030CF}, {0x000030D0, 0x00003099}, {0x000030D1, 0x000030CF}, -{0x000030D1, 0x0000309A}, {0x000030D3, 0x000030D2}, {0x000030D3, 0x00003099}, {0x000030D4, 0x000030D2}, -{0x000030D4, 0x0000309A}, {0x000030D6, 0x000030D5}, {0x000030D6, 0x00003099}, {0x000030D7, 0x000030D5}, -{0x000030D7, 0x0000309A}, {0x000030D9, 0x000030D8}, {0x000030D9, 0x00003099}, {0x000030DA, 0x000030D8}, -{0x000030DA, 0x0000309A}, {0x000030DC, 0x000030DB}, {0x000030DC, 0x00003099}, {0x000030DD, 0x000030DB}, -{0x000030DD, 0x0000309A}, {0x000030F4, 0x000030A6}, {0x000030F4, 0x00003099}, {0x000030F7, 0x000030EF}, -{0x000030F7, 0x00003099}, {0x000030F8, 0x000030F0}, {0x000030F8, 0x00003099}, {0x000030F9, 0x000030F1}, -{0x000030F9, 0x00003099}, {0x000030FA, 0x000030F2}, {0x000030FA, 0x00003099}, {0x000030FE, 0x000030FD}, -{0x000030FE, 0x00003099}, {0x0000F900, 0x00008C48}, {0x0000F901, 0x000066F4}, {0x0000F902, 0x00008ECA}, -{0x0000F903, 0x00008CC8}, {0x0000F904, 0x00006ED1}, {0x0000F905, 0x00004E32}, {0x0000F906, 0x000053E5}, -{0x0000F907, 0x00009F9C}, {0x0000F908, 0x00009F9C}, {0x0000F909, 0x00005951}, {0x0000F90A, 0x000091D1}, -{0x0000F90B, 0x00005587}, {0x0000F90C, 0x00005948}, {0x0000F90D, 0x000061F6}, {0x0000F90E, 0x00007669}, -{0x0000F90F, 0x00007F85}, {0x0000F910, 0x0000863F}, {0x0000F911, 0x000087BA}, {0x0000F912, 0x000088F8}, -{0x0000F913, 0x0000908F}, {0x0000F914, 0x00006A02}, {0x0000F915, 0x00006D1B}, {0x0000F916, 0x000070D9}, -{0x0000F917, 0x000073DE}, {0x0000F918, 0x0000843D}, {0x0000F919, 0x0000916A}, {0x0000F91A, 0x000099F1}, -{0x0000F91B, 0x00004E82}, {0x0000F91C, 0x00005375}, {0x0000F91D, 0x00006B04}, {0x0000F91E, 0x0000721B}, -{0x0000F91F, 0x0000862D}, {0x0000F920, 0x00009E1E}, {0x0000F921, 0x00005D50}, {0x0000F922, 0x00006FEB}, -{0x0000F923, 0x000085CD}, {0x0000F924, 0x00008964}, {0x0000F925, 0x000062C9}, {0x0000F926, 0x000081D8}, -{0x0000F927, 0x0000881F}, {0x0000F928, 0x00005ECA}, {0x0000F929, 0x00006717}, {0x0000F92A, 0x00006D6A}, -{0x0000F92B, 0x000072FC}, {0x0000F92C, 0x000090CE}, {0x0000F92D, 0x00004F86}, {0x0000F92E, 0x000051B7}, -{0x0000F92F, 0x000052DE}, {0x0000F930, 0x000064C4}, {0x0000F931, 0x00006AD3}, {0x0000F932, 0x00007210}, -{0x0000F933, 0x000076E7}, {0x0000F934, 0x00008001}, {0x0000F935, 0x00008606}, {0x0000F936, 0x0000865C}, -{0x0000F937, 0x00008DEF}, {0x0000F938, 0x00009732}, {0x0000F939, 0x00009B6F}, {0x0000F93A, 0x00009DFA}, -{0x0000F93B, 0x0000788C}, {0x0000F93C, 0x0000797F}, {0x0000F93D, 0x00007DA0}, {0x0000F93E, 0x000083C9}, -{0x0000F93F, 0x00009304}, {0x0000F940, 0x00009E7F}, {0x0000F941, 0x00008AD6}, {0x0000F942, 0x000058DF}, -{0x0000F943, 0x00005F04}, {0x0000F944, 0x00007C60}, {0x0000F945, 0x0000807E}, {0x0000F946, 0x00007262}, -{0x0000F947, 0x000078CA}, {0x0000F948, 0x00008CC2}, {0x0000F949, 0x000096F7}, {0x0000F94A, 0x000058D8}, -{0x0000F94B, 0x00005C62}, {0x0000F94C, 0x00006A13}, {0x0000F94D, 0x00006DDA}, {0x0000F94E, 0x00006F0F}, -{0x0000F94F, 0x00007D2F}, {0x0000F950, 0x00007E37}, {0x0000F951, 0x0000964B}, {0x0000F952, 0x000052D2}, -{0x0000F953, 0x0000808B}, {0x0000F954, 0x000051DC}, {0x0000F955, 0x000051CC}, {0x0000F956, 0x00007A1C}, -{0x0000F957, 0x00007DBE}, {0x0000F958, 0x000083F1}, {0x0000F959, 0x00009675}, {0x0000F95A, 0x00008B80}, -{0x0000F95B, 0x000062CF}, {0x0000F95C, 0x00006A02}, {0x0000F95D, 0x00008AFE}, {0x0000F95E, 0x00004E39}, -{0x0000F95F, 0x00005BE7}, {0x0000F960, 0x00006012}, {0x0000F961, 0x00007387}, {0x0000F962, 0x00007570}, -{0x0000F963, 0x00005317}, {0x0000F964, 0x000078FB}, {0x0000F965, 0x00004FBF}, {0x0000F966, 0x00005FA9}, -{0x0000F967, 0x00004E0D}, {0x0000F968, 0x00006CCC}, {0x0000F969, 0x00006578}, {0x0000F96A, 0x00007D22}, -{0x0000F96B, 0x000053C3}, {0x0000F96C, 0x0000585E}, {0x0000F96D, 0x00007701}, {0x0000F96E, 0x00008449}, -{0x0000F96F, 0x00008AAA}, {0x0000F970, 0x00006BBA}, {0x0000F971, 0x00008FB0}, {0x0000F972, 0x00006C88}, -{0x0000F973, 0x000062FE}, {0x0000F974, 0x000082E5}, {0x0000F975, 0x000063A0}, {0x0000F976, 0x00007565}, -{0x0000F977, 0x00004EAE}, {0x0000F978, 0x00005169}, {0x0000F979, 0x000051C9}, {0x0000F97A, 0x00006881}, -{0x0000F97B, 0x00007CE7}, {0x0000F97C, 0x0000826F}, {0x0000F97D, 0x00008AD2}, {0x0000F97E, 0x000091CF}, -{0x0000F97F, 0x000052F5}, {0x0000F980, 0x00005442}, {0x0000F981, 0x00005973}, {0x0000F982, 0x00005EEC}, -{0x0000F983, 0x000065C5}, {0x0000F984, 0x00006FFE}, {0x0000F985, 0x0000792A}, {0x0000F986, 0x000095AD}, -{0x0000F987, 0x00009A6A}, {0x0000F988, 0x00009E97}, {0x0000F989, 0x00009ECE}, {0x0000F98A, 0x0000529B}, -{0x0000F98B, 0x000066C6}, {0x0000F98C, 0x00006B77}, {0x0000F98D, 0x00008F62}, {0x0000F98E, 0x00005E74}, -{0x0000F98F, 0x00006190}, {0x0000F990, 0x00006200}, {0x0000F991, 0x0000649A}, {0x0000F992, 0x00006F23}, -{0x0000F993, 0x00007149}, {0x0000F994, 0x00007489}, {0x0000F995, 0x000079CA}, {0x0000F996, 0x00007DF4}, -{0x0000F997, 0x0000806F}, {0x0000F998, 0x00008F26}, {0x0000F999, 0x000084EE}, {0x0000F99A, 0x00009023}, -{0x0000F99B, 0x0000934A}, {0x0000F99C, 0x00005217}, {0x0000F99D, 0x000052A3}, {0x0000F99E, 0x000054BD}, -{0x0000F99F, 0x000070C8}, {0x0000F9A0, 0x000088C2}, {0x0000F9A1, 0x00008AAA}, {0x0000F9A2, 0x00005EC9}, -{0x0000F9A3, 0x00005FF5}, {0x0000F9A4, 0x0000637B}, {0x0000F9A5, 0x00006BAE}, {0x0000F9A6, 0x00007C3E}, -{0x0000F9A7, 0x00007375}, {0x0000F9A8, 0x00004EE4}, {0x0000F9A9, 0x000056F9}, {0x0000F9AA, 0x00005BE7}, -{0x0000F9AB, 0x00005DBA}, {0x0000F9AC, 0x0000601C}, {0x0000F9AD, 0x000073B2}, {0x0000F9AE, 0x00007469}, -{0x0000F9AF, 0x00007F9A}, {0x0000F9B0, 0x00008046}, {0x0000F9B1, 0x00009234}, {0x0000F9B2, 0x000096F6}, -{0x0000F9B3, 0x00009748}, {0x0000F9B4, 0x00009818}, {0x0000F9B5, 0x00004F8B}, {0x0000F9B6, 0x000079AE}, -{0x0000F9B7, 0x000091B4}, {0x0000F9B8, 0x000096B8}, {0x0000F9B9, 0x000060E1}, {0x0000F9BA, 0x00004E86}, -{0x0000F9BB, 0x000050DA}, {0x0000F9BC, 0x00005BEE}, {0x0000F9BD, 0x00005C3F}, {0x0000F9BE, 0x00006599}, -{0x0000F9BF, 0x00006A02}, {0x0000F9C0, 0x000071CE}, {0x0000F9C1, 0x00007642}, {0x0000F9C2, 0x000084FC}, -{0x0000F9C3, 0x0000907C}, {0x0000F9C4, 0x00009F8D}, {0x0000F9C5, 0x00006688}, {0x0000F9C6, 0x0000962E}, -{0x0000F9C7, 0x00005289}, {0x0000F9C8, 0x0000677B}, {0x0000F9C9, 0x000067F3}, {0x0000F9CA, 0x00006D41}, -{0x0000F9CB, 0x00006E9C}, {0x0000F9CC, 0x00007409}, {0x0000F9CD, 0x00007559}, {0x0000F9CE, 0x0000786B}, -{0x0000F9CF, 0x00007D10}, {0x0000F9D0, 0x0000985E}, {0x0000F9D1, 0x0000516D}, {0x0000F9D2, 0x0000622E}, -{0x0000F9D3, 0x00009678}, {0x0000F9D4, 0x0000502B}, {0x0000F9D5, 0x00005D19}, {0x0000F9D6, 0x00006DEA}, -{0x0000F9D7, 0x00008F2A}, {0x0000F9D8, 0x00005F8B}, {0x0000F9D9, 0x00006144}, {0x0000F9DA, 0x00006817}, -{0x0000F9DB, 0x00007387}, {0x0000F9DC, 0x00009686}, {0x0000F9DD, 0x00005229}, {0x0000F9DE, 0x0000540F}, -{0x0000F9DF, 0x00005C65}, {0x0000F9E0, 0x00006613}, {0x0000F9E1, 0x0000674E}, {0x0000F9E2, 0x000068A8}, -{0x0000F9E3, 0x00006CE5}, {0x0000F9E4, 0x00007406}, {0x0000F9E5, 0x000075E2}, {0x0000F9E6, 0x00007F79}, -{0x0000F9E7, 0x000088CF}, {0x0000F9E8, 0x000088E1}, {0x0000F9E9, 0x000091CC}, {0x0000F9EA, 0x000096E2}, -{0x0000F9EB, 0x0000533F}, {0x0000F9EC, 0x00006EBA}, {0x0000F9ED, 0x0000541D}, {0x0000F9EE, 0x000071D0}, -{0x0000F9EF, 0x00007498}, {0x0000F9F0, 0x000085FA}, {0x0000F9F1, 0x000096A3}, {0x0000F9F2, 0x00009C57}, -{0x0000F9F3, 0x00009E9F}, {0x0000F9F4, 0x00006797}, {0x0000F9F5, 0x00006DCB}, {0x0000F9F6, 0x000081E8}, -{0x0000F9F7, 0x00007ACB}, {0x0000F9F8, 0x00007B20}, {0x0000F9F9, 0x00007C92}, {0x0000F9FA, 0x000072C0}, -{0x0000F9FB, 0x00007099}, {0x0000F9FC, 0x00008B58}, {0x0000F9FD, 0x00004EC0}, {0x0000F9FE, 0x00008336}, -{0x0000F9FF, 0x0000523A}, {0x0000FA00, 0x00005207}, {0x0000FA01, 0x00005EA6}, {0x0000FA02, 0x000062D3}, -{0x0000FA03, 0x00007CD6}, {0x0000FA04, 0x00005B85}, {0x0000FA05, 0x00006D1E}, {0x0000FA06, 0x000066B4}, -{0x0000FA07, 0x00008F3B}, {0x0000FA08, 0x0000884C}, {0x0000FA09, 0x0000964D}, {0x0000FA0A, 0x0000898B}, -{0x0000FA0B, 0x00005ED3}, {0x0000FA0C, 0x00005140}, {0x0000FA0D, 0x000055C0}, {0x0000FA10, 0x0000585A}, -{0x0000FA12, 0x00006674}, {0x0000FA15, 0x000051DE}, {0x0000FA16, 0x0000732A}, {0x0000FA17, 0x000076CA}, -{0x0000FA18, 0x0000793C}, {0x0000FA19, 0x0000795E}, {0x0000FA1A, 0x00007965}, {0x0000FA1B, 0x0000798F}, -{0x0000FA1C, 0x00009756}, {0x0000FA1D, 0x00007CBE}, {0x0000FA1E, 0x00007FBD}, {0x0000FA20, 0x00008612}, -{0x0000FA22, 0x00008AF8}, {0x0000FA25, 0x00009038}, {0x0000FA26, 0x000090FD}, {0x0000FA2A, 0x000098EF}, -{0x0000FA2B, 0x000098FC}, {0x0000FA2C, 0x00009928}, {0x0000FA2D, 0x00009DB4}, {0x0000FA2E, 0x000090DE}, -{0x0000FA2F, 0x000096B7}, {0x0000FA30, 0x00004FAE}, {0x0000FA31, 0x000050E7}, {0x0000FA32, 0x0000514D}, -{0x0000FA33, 0x000052C9}, {0x0000FA34, 0x000052E4}, {0x0000FA35, 0x00005351}, {0x0000FA36, 0x0000559D}, -{0x0000FA37, 0x00005606}, {0x0000FA38, 0x00005668}, {0x0000FA39, 0x00005840}, {0x0000FA3A, 0x000058A8}, -{0x0000FA3B, 0x00005C64}, {0x0000FA3C, 0x00005C6E}, {0x0000FA3D, 0x00006094}, {0x0000FA3E, 0x00006168}, -{0x0000FA3F, 0x0000618E}, {0x0000FA40, 0x000061F2}, {0x0000FA41, 0x0000654F}, {0x0000FA42, 0x000065E2}, -{0x0000FA43, 0x00006691}, {0x0000FA44, 0x00006885}, {0x0000FA45, 0x00006D77}, {0x0000FA46, 0x00006E1A}, -{0x0000FA47, 0x00006F22}, {0x0000FA48, 0x0000716E}, {0x0000FA49, 0x0000722B}, {0x0000FA4A, 0x00007422}, -{0x0000FA4B, 0x00007891}, {0x0000FA4C, 0x0000793E}, {0x0000FA4D, 0x00007949}, {0x0000FA4E, 0x00007948}, -{0x0000FA4F, 0x00007950}, {0x0000FA50, 0x00007956}, {0x0000FA51, 0x0000795D}, {0x0000FA52, 0x0000798D}, -{0x0000FA53, 0x0000798E}, {0x0000FA54, 0x00007A40}, {0x0000FA55, 0x00007A81}, {0x0000FA56, 0x00007BC0}, -{0x0000FA57, 0x00007DF4}, {0x0000FA58, 0x00007E09}, {0x0000FA59, 0x00007E41}, {0x0000FA5A, 0x00007F72}, -{0x0000FA5B, 0x00008005}, {0x0000FA5C, 0x000081ED}, {0x0000FA5D, 0x00008279}, {0x0000FA5E, 0x00008279}, -{0x0000FA5F, 0x00008457}, {0x0000FA60, 0x00008910}, {0x0000FA61, 0x00008996}, {0x0000FA62, 0x00008B01}, -{0x0000FA63, 0x00008B39}, {0x0000FA64, 0x00008CD3}, {0x0000FA65, 0x00008D08}, {0x0000FA66, 0x00008FB6}, -{0x0000FA67, 0x00009038}, {0x0000FA68, 0x000096E3}, {0x0000FA69, 0x000097FF}, {0x0000FA6A, 0x0000983B}, -{0x0000FA6B, 0x00006075}, {0x0000FA6C, 0x000242EE}, {0x0000FA6D, 0x00008218}, {0x0000FA70, 0x00004E26}, -{0x0000FA71, 0x000051B5}, {0x0000FA72, 0x00005168}, {0x0000FA73, 0x00004F80}, {0x0000FA74, 0x00005145}, -{0x0000FA75, 0x00005180}, {0x0000FA76, 0x000052C7}, {0x0000FA77, 0x000052FA}, {0x0000FA78, 0x0000559D}, -{0x0000FA79, 0x00005555}, {0x0000FA7A, 0x00005599}, {0x0000FA7B, 0x000055E2}, {0x0000FA7C, 0x0000585A}, -{0x0000FA7D, 0x000058B3}, {0x0000FA7E, 0x00005944}, {0x0000FA7F, 0x00005954}, {0x0000FA80, 0x00005A62}, -{0x0000FA81, 0x00005B28}, {0x0000FA82, 0x00005ED2}, {0x0000FA83, 0x00005ED9}, {0x0000FA84, 0x00005F69}, -{0x0000FA85, 0x00005FAD}, {0x0000FA86, 0x000060D8}, {0x0000FA87, 0x0000614E}, {0x0000FA88, 0x00006108}, -{0x0000FA89, 0x0000618E}, {0x0000FA8A, 0x00006160}, {0x0000FA8B, 0x000061F2}, {0x0000FA8C, 0x00006234}, -{0x0000FA8D, 0x000063C4}, {0x0000FA8E, 0x0000641C}, {0x0000FA8F, 0x00006452}, {0x0000FA90, 0x00006556}, -{0x0000FA91, 0x00006674}, {0x0000FA92, 0x00006717}, {0x0000FA93, 0x0000671B}, {0x0000FA94, 0x00006756}, -{0x0000FA95, 0x00006B79}, {0x0000FA96, 0x00006BBA}, {0x0000FA97, 0x00006D41}, {0x0000FA98, 0x00006EDB}, -{0x0000FA99, 0x00006ECB}, {0x0000FA9A, 0x00006F22}, {0x0000FA9B, 0x0000701E}, {0x0000FA9C, 0x0000716E}, -{0x0000FA9D, 0x000077A7}, {0x0000FA9E, 0x00007235}, {0x0000FA9F, 0x000072AF}, {0x0000FAA0, 0x0000732A}, -{0x0000FAA1, 0x00007471}, {0x0000FAA2, 0x00007506}, {0x0000FAA3, 0x0000753B}, {0x0000FAA4, 0x0000761D}, -{0x0000FAA5, 0x0000761F}, {0x0000FAA6, 0x000076CA}, {0x0000FAA7, 0x000076DB}, {0x0000FAA8, 0x000076F4}, -{0x0000FAA9, 0x0000774A}, {0x0000FAAA, 0x00007740}, {0x0000FAAB, 0x000078CC}, {0x0000FAAC, 0x00007AB1}, -{0x0000FAAD, 0x00007BC0}, {0x0000FAAE, 0x00007C7B}, {0x0000FAAF, 0x00007D5B}, {0x0000FAB0, 0x00007DF4}, -{0x0000FAB1, 0x00007F3E}, {0x0000FAB2, 0x00008005}, {0x0000FAB3, 0x00008352}, {0x0000FAB4, 0x000083EF}, -{0x0000FAB5, 0x00008779}, {0x0000FAB6, 0x00008941}, {0x0000FAB7, 0x00008986}, {0x0000FAB8, 0x00008996}, -{0x0000FAB9, 0x00008ABF}, {0x0000FABA, 0x00008AF8}, {0x0000FABB, 0x00008ACB}, {0x0000FABC, 0x00008B01}, -{0x0000FABD, 0x00008AFE}, {0x0000FABE, 0x00008AED}, {0x0000FABF, 0x00008B39}, {0x0000FAC0, 0x00008B8A}, -{0x0000FAC1, 0x00008D08}, {0x0000FAC2, 0x00008F38}, {0x0000FAC3, 0x00009072}, {0x0000FAC4, 0x00009199}, -{0x0000FAC5, 0x00009276}, {0x0000FAC6, 0x0000967C}, {0x0000FAC7, 0x000096E3}, {0x0000FAC8, 0x00009756}, -{0x0000FAC9, 0x000097DB}, {0x0000FACA, 0x000097FF}, {0x0000FACB, 0x0000980B}, {0x0000FACC, 0x0000983B}, -{0x0000FACD, 0x00009B12}, {0x0000FACE, 0x00009F9C}, {0x0000FACF, 0x0002284A}, {0x0000FAD0, 0x00022844}, -{0x0000FAD1, 0x000233D5}, {0x0000FAD2, 0x00003B9D}, {0x0000FAD3, 0x00004018}, {0x0000FAD4, 0x00004039}, -{0x0000FAD5, 0x00025249}, {0x0000FAD6, 0x00025CD0}, {0x0000FAD7, 0x00027ED3}, {0x0000FAD8, 0x00009F43}, -{0x0000FAD9, 0x00009F8E}, {0x0000FB1D, 0x000005D9}, {0x0000FB1D, 0x000005B4}, {0x0000FB1F, 0x000005F2}, -{0x0000FB1F, 0x000005B7}, {0x0000FB2A, 0x000005E9}, {0x0000FB2A, 0x000005C1}, {0x0000FB2B, 0x000005E9}, -{0x0000FB2B, 0x000005C2}, {0x0000FB2C, 0x000005E9}, {0x0000FB2C, 0x000005BC}, {0x0000FB2C, 0x000005C1}, -{0x0000FB2D, 0x000005E9}, {0x0000FB2D, 0x000005BC}, {0x0000FB2D, 0x000005C2}, {0x0000FB2E, 0x000005D0}, -{0x0000FB2E, 0x000005B7}, {0x0000FB2F, 0x000005D0}, {0x0000FB2F, 0x000005B8}, {0x0000FB30, 0x000005D0}, -{0x0000FB30, 0x000005BC}, {0x0000FB31, 0x000005D1}, {0x0000FB31, 0x000005BC}, {0x0000FB32, 0x000005D2}, -{0x0000FB32, 0x000005BC}, {0x0000FB33, 0x000005D3}, {0x0000FB33, 0x000005BC}, {0x0000FB34, 0x000005D4}, -{0x0000FB34, 0x000005BC}, {0x0000FB35, 0x000005D5}, {0x0000FB35, 0x000005BC}, {0x0000FB36, 0x000005D6}, -{0x0000FB36, 0x000005BC}, {0x0000FB38, 0x000005D8}, {0x0000FB38, 0x000005BC}, {0x0000FB39, 0x000005D9}, -{0x0000FB39, 0x000005BC}, {0x0000FB3A, 0x000005DA}, {0x0000FB3A, 0x000005BC}, {0x0000FB3B, 0x000005DB}, -{0x0000FB3B, 0x000005BC}, {0x0000FB3C, 0x000005DC}, {0x0000FB3C, 0x000005BC}, {0x0000FB3E, 0x000005DE}, -{0x0000FB3E, 0x000005BC}, {0x0000FB40, 0x000005E0}, {0x0000FB40, 0x000005BC}, {0x0000FB41, 0x000005E1}, -{0x0000FB41, 0x000005BC}, {0x0000FB43, 0x000005E3}, {0x0000FB43, 0x000005BC}, {0x0000FB44, 0x000005E4}, -{0x0000FB44, 0x000005BC}, {0x0000FB46, 0x000005E6}, {0x0000FB46, 0x000005BC}, {0x0000FB47, 0x000005E7}, -{0x0000FB47, 0x000005BC}, {0x0000FB48, 0x000005E8}, {0x0000FB48, 0x000005BC}, {0x0000FB49, 0x000005E9}, -{0x0000FB49, 0x000005BC}, {0x0000FB4A, 0x000005EA}, {0x0000FB4A, 0x000005BC}, {0x0000FB4B, 0x000005D5}, -{0x0000FB4B, 0x000005B9}, {0x0000FB4C, 0x000005D1}, {0x0000FB4C, 0x000005BF}, {0x0000FB4D, 0x000005DB}, -{0x0000FB4D, 0x000005BF}, {0x0000FB4E, 0x000005E4}, {0x0000FB4E, 0x000005BF}, {0x0001109A, 0x00011099}, -{0x0001109A, 0x000110BA}, {0x0001109C, 0x0001109B}, {0x0001109C, 0x000110BA}, {0x000110AB, 0x000110A5}, -{0x000110AB, 0x000110BA}, {0x0001112E, 0x00011131}, {0x0001112E, 0x00011127}, {0x0001112F, 0x00011132}, -{0x0001112F, 0x00011127}, {0x0001134B, 0x00011347}, {0x0001134B, 0x0001133E}, {0x0001134C, 0x00011347}, -{0x0001134C, 0x00011357}, {0x000114BB, 0x000114B9}, {0x000114BB, 0x000114BA}, {0x000114BC, 0x000114B9}, -{0x000114BC, 0x000114B0}, {0x000114BE, 0x000114B9}, {0x000114BE, 0x000114BD}, {0x000115BA, 0x000115B8}, -{0x000115BA, 0x000115AF}, {0x000115BB, 0x000115B9}, {0x000115BB, 0x000115AF}, {0x0001D15E, 0x0001D157}, -{0x0001D15E, 0x0001D165}, {0x0001D15F, 0x0001D158}, {0x0001D15F, 0x0001D165}, {0x0001D160, 0x0001D158}, -{0x0001D160, 0x0001D165}, {0x0001D160, 0x0001D16E}, {0x0001D161, 0x0001D158}, {0x0001D161, 0x0001D165}, -{0x0001D161, 0x0001D16F}, {0x0001D162, 0x0001D158}, {0x0001D162, 0x0001D165}, {0x0001D162, 0x0001D170}, -{0x0001D163, 0x0001D158}, {0x0001D163, 0x0001D165}, {0x0001D163, 0x0001D171}, {0x0001D164, 0x0001D158}, -{0x0001D164, 0x0001D165}, {0x0001D164, 0x0001D172}, {0x0001D1BB, 0x0001D1B9}, {0x0001D1BB, 0x0001D165}, -{0x0001D1BC, 0x0001D1BA}, {0x0001D1BC, 0x0001D165}, {0x0001D1BD, 0x0001D1B9}, {0x0001D1BD, 0x0001D165}, -{0x0001D1BD, 0x0001D16E}, {0x0001D1BE, 0x0001D1BA}, {0x0001D1BE, 0x0001D165}, {0x0001D1BE, 0x0001D16E}, -{0x0001D1BF, 0x0001D1B9}, {0x0001D1BF, 0x0001D165}, {0x0001D1BF, 0x0001D16F}, {0x0001D1C0, 0x0001D1BA}, -{0x0001D1C0, 0x0001D165}, {0x0001D1C0, 0x0001D16F}, {0x0002F800, 0x00004E3D}, {0x0002F801, 0x00004E38}, -{0x0002F802, 0x00004E41}, {0x0002F803, 0x00020122}, {0x0002F804, 0x00004F60}, {0x0002F805, 0x00004FAE}, -{0x0002F806, 0x00004FBB}, {0x0002F807, 0x00005002}, {0x0002F808, 0x0000507A}, {0x0002F809, 0x00005099}, -{0x0002F80A, 0x000050E7}, {0x0002F80B, 0x000050CF}, {0x0002F80C, 0x0000349E}, {0x0002F80D, 0x0002063A}, -{0x0002F80E, 0x0000514D}, {0x0002F80F, 0x00005154}, {0x0002F810, 0x00005164}, {0x0002F811, 0x00005177}, -{0x0002F812, 0x0002051C}, {0x0002F813, 0x000034B9}, {0x0002F814, 0x00005167}, {0x0002F815, 0x0000518D}, -{0x0002F816, 0x0002054B}, {0x0002F817, 0x00005197}, {0x0002F818, 0x000051A4}, {0x0002F819, 0x00004ECC}, -{0x0002F81A, 0x000051AC}, {0x0002F81B, 0x000051B5}, {0x0002F81C, 0x000291DF}, {0x0002F81D, 0x000051F5}, -{0x0002F81E, 0x00005203}, {0x0002F81F, 0x000034DF}, {0x0002F820, 0x0000523B}, {0x0002F821, 0x00005246}, -{0x0002F822, 0x00005272}, {0x0002F823, 0x00005277}, {0x0002F824, 0x00003515}, {0x0002F825, 0x000052C7}, -{0x0002F826, 0x000052C9}, {0x0002F827, 0x000052E4}, {0x0002F828, 0x000052FA}, {0x0002F829, 0x00005305}, -{0x0002F82A, 0x00005306}, {0x0002F82B, 0x00005317}, {0x0002F82C, 0x00005349}, {0x0002F82D, 0x00005351}, -{0x0002F82E, 0x0000535A}, {0x0002F82F, 0x00005373}, {0x0002F830, 0x0000537D}, {0x0002F831, 0x0000537F}, -{0x0002F832, 0x0000537F}, {0x0002F833, 0x0000537F}, {0x0002F834, 0x00020A2C}, {0x0002F835, 0x00007070}, -{0x0002F836, 0x000053CA}, {0x0002F837, 0x000053DF}, {0x0002F838, 0x00020B63}, {0x0002F839, 0x000053EB}, -{0x0002F83A, 0x000053F1}, {0x0002F83B, 0x00005406}, {0x0002F83C, 0x0000549E}, {0x0002F83D, 0x00005438}, -{0x0002F83E, 0x00005448}, {0x0002F83F, 0x00005468}, {0x0002F840, 0x000054A2}, {0x0002F841, 0x000054F6}, -{0x0002F842, 0x00005510}, {0x0002F843, 0x00005553}, {0x0002F844, 0x00005563}, {0x0002F845, 0x00005584}, -{0x0002F846, 0x00005584}, {0x0002F847, 0x00005599}, {0x0002F848, 0x000055AB}, {0x0002F849, 0x000055B3}, -{0x0002F84A, 0x000055C2}, {0x0002F84B, 0x00005716}, {0x0002F84C, 0x00005606}, {0x0002F84D, 0x00005717}, -{0x0002F84E, 0x00005651}, {0x0002F84F, 0x00005674}, {0x0002F850, 0x00005207}, {0x0002F851, 0x000058EE}, -{0x0002F852, 0x000057CE}, {0x0002F853, 0x000057F4}, {0x0002F854, 0x0000580D}, {0x0002F855, 0x0000578B}, -{0x0002F856, 0x00005832}, {0x0002F857, 0x00005831}, {0x0002F858, 0x000058AC}, {0x0002F859, 0x000214E4}, -{0x0002F85A, 0x000058F2}, {0x0002F85B, 0x000058F7}, {0x0002F85C, 0x00005906}, {0x0002F85D, 0x0000591A}, -{0x0002F85E, 0x00005922}, {0x0002F85F, 0x00005962}, {0x0002F860, 0x000216A8}, {0x0002F861, 0x000216EA}, -{0x0002F862, 0x000059EC}, {0x0002F863, 0x00005A1B}, {0x0002F864, 0x00005A27}, {0x0002F865, 0x000059D8}, -{0x0002F866, 0x00005A66}, {0x0002F867, 0x000036EE}, {0x0002F868, 0x000036FC}, {0x0002F869, 0x00005B08}, -{0x0002F86A, 0x00005B3E}, {0x0002F86B, 0x00005B3E}, {0x0002F86C, 0x000219C8}, {0x0002F86D, 0x00005BC3}, -{0x0002F86E, 0x00005BD8}, {0x0002F86F, 0x00005BE7}, {0x0002F870, 0x00005BF3}, {0x0002F871, 0x00021B18}, -{0x0002F872, 0x00005BFF}, {0x0002F873, 0x00005C06}, {0x0002F874, 0x00005F53}, {0x0002F875, 0x00005C22}, -{0x0002F876, 0x00003781}, {0x0002F877, 0x00005C60}, {0x0002F878, 0x00005C6E}, {0x0002F879, 0x00005CC0}, -{0x0002F87A, 0x00005C8D}, {0x0002F87B, 0x00021DE4}, {0x0002F87C, 0x00005D43}, {0x0002F87D, 0x00021DE6}, -{0x0002F87E, 0x00005D6E}, {0x0002F87F, 0x00005D6B}, {0x0002F880, 0x00005D7C}, {0x0002F881, 0x00005DE1}, -{0x0002F882, 0x00005DE2}, {0x0002F883, 0x0000382F}, {0x0002F884, 0x00005DFD}, {0x0002F885, 0x00005E28}, -{0x0002F886, 0x00005E3D}, {0x0002F887, 0x00005E69}, {0x0002F888, 0x00003862}, {0x0002F889, 0x00022183}, -{0x0002F88A, 0x0000387C}, {0x0002F88B, 0x00005EB0}, {0x0002F88C, 0x00005EB3}, {0x0002F88D, 0x00005EB6}, -{0x0002F88E, 0x00005ECA}, {0x0002F88F, 0x0002A392}, {0x0002F890, 0x00005EFE}, {0x0002F891, 0x00022331}, -{0x0002F892, 0x00022331}, {0x0002F893, 0x00008201}, {0x0002F894, 0x00005F22}, {0x0002F895, 0x00005F22}, -{0x0002F896, 0x000038C7}, {0x0002F897, 0x000232B8}, {0x0002F898, 0x000261DA}, {0x0002F899, 0x00005F62}, -{0x0002F89A, 0x00005F6B}, {0x0002F89B, 0x000038E3}, {0x0002F89C, 0x00005F9A}, {0x0002F89D, 0x00005FCD}, -{0x0002F89E, 0x00005FD7}, {0x0002F89F, 0x00005FF9}, {0x0002F8A0, 0x00006081}, {0x0002F8A1, 0x0000393A}, -{0x0002F8A2, 0x0000391C}, {0x0002F8A3, 0x00006094}, {0x0002F8A4, 0x000226D4}, {0x0002F8A5, 0x000060C7}, -{0x0002F8A6, 0x00006148}, {0x0002F8A7, 0x0000614C}, {0x0002F8A8, 0x0000614E}, {0x0002F8A9, 0x0000614C}, -{0x0002F8AA, 0x0000617A}, {0x0002F8AB, 0x0000618E}, {0x0002F8AC, 0x000061B2}, {0x0002F8AD, 0x000061A4}, -{0x0002F8AE, 0x000061AF}, {0x0002F8AF, 0x000061DE}, {0x0002F8B0, 0x000061F2}, {0x0002F8B1, 0x000061F6}, -{0x0002F8B2, 0x00006210}, {0x0002F8B3, 0x0000621B}, {0x0002F8B4, 0x0000625D}, {0x0002F8B5, 0x000062B1}, -{0x0002F8B6, 0x000062D4}, {0x0002F8B7, 0x00006350}, {0x0002F8B8, 0x00022B0C}, {0x0002F8B9, 0x0000633D}, -{0x0002F8BA, 0x000062FC}, {0x0002F8BB, 0x00006368}, {0x0002F8BC, 0x00006383}, {0x0002F8BD, 0x000063E4}, -{0x0002F8BE, 0x00022BF1}, {0x0002F8BF, 0x00006422}, {0x0002F8C0, 0x000063C5}, {0x0002F8C1, 0x000063A9}, -{0x0002F8C2, 0x00003A2E}, {0x0002F8C3, 0x00006469}, {0x0002F8C4, 0x0000647E}, {0x0002F8C5, 0x0000649D}, -{0x0002F8C6, 0x00006477}, {0x0002F8C7, 0x00003A6C}, {0x0002F8C8, 0x0000654F}, {0x0002F8C9, 0x0000656C}, -{0x0002F8CA, 0x0002300A}, {0x0002F8CB, 0x000065E3}, {0x0002F8CC, 0x000066F8}, {0x0002F8CD, 0x00006649}, -{0x0002F8CE, 0x00003B19}, {0x0002F8CF, 0x00006691}, {0x0002F8D0, 0x00003B08}, {0x0002F8D1, 0x00003AE4}, -{0x0002F8D2, 0x00005192}, {0x0002F8D3, 0x00005195}, {0x0002F8D4, 0x00006700}, {0x0002F8D5, 0x0000669C}, -{0x0002F8D6, 0x000080AD}, {0x0002F8D7, 0x000043D9}, {0x0002F8D8, 0x00006717}, {0x0002F8D9, 0x0000671B}, -{0x0002F8DA, 0x00006721}, {0x0002F8DB, 0x0000675E}, {0x0002F8DC, 0x00006753}, {0x0002F8DD, 0x000233C3}, -{0x0002F8DE, 0x00003B49}, {0x0002F8DF, 0x000067FA}, {0x0002F8E0, 0x00006785}, {0x0002F8E1, 0x00006852}, -{0x0002F8E2, 0x00006885}, {0x0002F8E3, 0x0002346D}, {0x0002F8E4, 0x0000688E}, {0x0002F8E5, 0x0000681F}, -{0x0002F8E6, 0x00006914}, {0x0002F8E7, 0x00003B9D}, {0x0002F8E8, 0x00006942}, {0x0002F8E9, 0x000069A3}, -{0x0002F8EA, 0x000069EA}, {0x0002F8EB, 0x00006AA8}, {0x0002F8EC, 0x000236A3}, {0x0002F8ED, 0x00006ADB}, -{0x0002F8EE, 0x00003C18}, {0x0002F8EF, 0x00006B21}, {0x0002F8F0, 0x000238A7}, {0x0002F8F1, 0x00006B54}, -{0x0002F8F2, 0x00003C4E}, {0x0002F8F3, 0x00006B72}, {0x0002F8F4, 0x00006B9F}, {0x0002F8F5, 0x00006BBA}, -{0x0002F8F6, 0x00006BBB}, {0x0002F8F7, 0x00023A8D}, {0x0002F8F8, 0x00021D0B}, {0x0002F8F9, 0x00023AFA}, -{0x0002F8FA, 0x00006C4E}, {0x0002F8FB, 0x00023CBC}, {0x0002F8FC, 0x00006CBF}, {0x0002F8FD, 0x00006CCD}, -{0x0002F8FE, 0x00006C67}, {0x0002F8FF, 0x00006D16}, {0x0002F900, 0x00006D3E}, {0x0002F901, 0x00006D77}, -{0x0002F902, 0x00006D41}, {0x0002F903, 0x00006D69}, {0x0002F904, 0x00006D78}, {0x0002F905, 0x00006D85}, -{0x0002F906, 0x00023D1E}, {0x0002F907, 0x00006D34}, {0x0002F908, 0x00006E2F}, {0x0002F909, 0x00006E6E}, -{0x0002F90A, 0x00003D33}, {0x0002F90B, 0x00006ECB}, {0x0002F90C, 0x00006EC7}, {0x0002F90D, 0x00023ED1}, -{0x0002F90E, 0x00006DF9}, {0x0002F90F, 0x00006F6E}, {0x0002F910, 0x00023F5E}, {0x0002F911, 0x00023F8E}, -{0x0002F912, 0x00006FC6}, {0x0002F913, 0x00007039}, {0x0002F914, 0x0000701E}, {0x0002F915, 0x0000701B}, -{0x0002F916, 0x00003D96}, {0x0002F917, 0x0000704A}, {0x0002F918, 0x0000707D}, {0x0002F919, 0x00007077}, -{0x0002F91A, 0x000070AD}, {0x0002F91B, 0x00020525}, {0x0002F91C, 0x00007145}, {0x0002F91D, 0x00024263}, -{0x0002F91E, 0x0000719C}, {0x0002F91F, 0x000243AB}, {0x0002F920, 0x00007228}, {0x0002F921, 0x00007235}, -{0x0002F922, 0x00007250}, {0x0002F923, 0x00024608}, {0x0002F924, 0x00007280}, {0x0002F925, 0x00007295}, -{0x0002F926, 0x00024735}, {0x0002F927, 0x00024814}, {0x0002F928, 0x0000737A}, {0x0002F929, 0x0000738B}, -{0x0002F92A, 0x00003EAC}, {0x0002F92B, 0x000073A5}, {0x0002F92C, 0x00003EB8}, {0x0002F92D, 0x00003EB8}, -{0x0002F92E, 0x00007447}, {0x0002F92F, 0x0000745C}, {0x0002F930, 0x00007471}, {0x0002F931, 0x00007485}, -{0x0002F932, 0x000074CA}, {0x0002F933, 0x00003F1B}, {0x0002F934, 0x00007524}, {0x0002F935, 0x00024C36}, -{0x0002F936, 0x0000753E}, {0x0002F937, 0x00024C92}, {0x0002F938, 0x00007570}, {0x0002F939, 0x0002219F}, -{0x0002F93A, 0x00007610}, {0x0002F93B, 0x00024FA1}, {0x0002F93C, 0x00024FB8}, {0x0002F93D, 0x00025044}, -{0x0002F93E, 0x00003FFC}, {0x0002F93F, 0x00004008}, {0x0002F940, 0x000076F4}, {0x0002F941, 0x000250F3}, -{0x0002F942, 0x000250F2}, {0x0002F943, 0x00025119}, {0x0002F944, 0x00025133}, {0x0002F945, 0x0000771E}, -{0x0002F946, 0x0000771F}, {0x0002F947, 0x0000771F}, {0x0002F948, 0x0000774A}, {0x0002F949, 0x00004039}, -{0x0002F94A, 0x0000778B}, {0x0002F94B, 0x00004046}, {0x0002F94C, 0x00004096}, {0x0002F94D, 0x0002541D}, -{0x0002F94E, 0x0000784E}, {0x0002F94F, 0x0000788C}, {0x0002F950, 0x000078CC}, {0x0002F951, 0x000040E3}, -{0x0002F952, 0x00025626}, {0x0002F953, 0x00007956}, {0x0002F954, 0x0002569A}, {0x0002F955, 0x000256C5}, -{0x0002F956, 0x0000798F}, {0x0002F957, 0x000079EB}, {0x0002F958, 0x0000412F}, {0x0002F959, 0x00007A40}, -{0x0002F95A, 0x00007A4A}, {0x0002F95B, 0x00007A4F}, {0x0002F95C, 0x0002597C}, {0x0002F95D, 0x00025AA7}, -{0x0002F95E, 0x00025AA7}, {0x0002F95F, 0x00007AEE}, {0x0002F960, 0x00004202}, {0x0002F961, 0x00025BAB}, -{0x0002F962, 0x00007BC6}, {0x0002F963, 0x00007BC9}, {0x0002F964, 0x00004227}, {0x0002F965, 0x00025C80}, -{0x0002F966, 0x00007CD2}, {0x0002F967, 0x000042A0}, {0x0002F968, 0x00007CE8}, {0x0002F969, 0x00007CE3}, -{0x0002F96A, 0x00007D00}, {0x0002F96B, 0x00025F86}, {0x0002F96C, 0x00007D63}, {0x0002F96D, 0x00004301}, -{0x0002F96E, 0x00007DC7}, {0x0002F96F, 0x00007E02}, {0x0002F970, 0x00007E45}, {0x0002F971, 0x00004334}, -{0x0002F972, 0x00026228}, {0x0002F973, 0x00026247}, {0x0002F974, 0x00004359}, {0x0002F975, 0x000262D9}, -{0x0002F976, 0x00007F7A}, {0x0002F977, 0x0002633E}, {0x0002F978, 0x00007F95}, {0x0002F979, 0x00007FFA}, -{0x0002F97A, 0x00008005}, {0x0002F97B, 0x000264DA}, {0x0002F97C, 0x00026523}, {0x0002F97D, 0x00008060}, -{0x0002F97E, 0x000265A8}, {0x0002F97F, 0x00008070}, {0x0002F980, 0x0002335F}, {0x0002F981, 0x000043D5}, -{0x0002F982, 0x000080B2}, {0x0002F983, 0x00008103}, {0x0002F984, 0x0000440B}, {0x0002F985, 0x0000813E}, -{0x0002F986, 0x00005AB5}, {0x0002F987, 0x000267A7}, {0x0002F988, 0x000267B5}, {0x0002F989, 0x00023393}, -{0x0002F98A, 0x0002339C}, {0x0002F98B, 0x00008201}, {0x0002F98C, 0x00008204}, {0x0002F98D, 0x00008F9E}, -{0x0002F98E, 0x0000446B}, {0x0002F98F, 0x00008291}, {0x0002F990, 0x0000828B}, {0x0002F991, 0x0000829D}, -{0x0002F992, 0x000052B3}, {0x0002F993, 0x000082B1}, {0x0002F994, 0x000082B3}, {0x0002F995, 0x000082BD}, -{0x0002F996, 0x000082E6}, {0x0002F997, 0x00026B3C}, {0x0002F998, 0x000082E5}, {0x0002F999, 0x0000831D}, -{0x0002F99A, 0x00008363}, {0x0002F99B, 0x000083AD}, {0x0002F99C, 0x00008323}, {0x0002F99D, 0x000083BD}, -{0x0002F99E, 0x000083E7}, {0x0002F99F, 0x00008457}, {0x0002F9A0, 0x00008353}, {0x0002F9A1, 0x000083CA}, -{0x0002F9A2, 0x000083CC}, {0x0002F9A3, 0x000083DC}, {0x0002F9A4, 0x00026C36}, {0x0002F9A5, 0x00026D6B}, -{0x0002F9A6, 0x00026CD5}, {0x0002F9A7, 0x0000452B}, {0x0002F9A8, 0x000084F1}, {0x0002F9A9, 0x000084F3}, -{0x0002F9AA, 0x00008516}, {0x0002F9AB, 0x000273CA}, {0x0002F9AC, 0x00008564}, {0x0002F9AD, 0x00026F2C}, -{0x0002F9AE, 0x0000455D}, {0x0002F9AF, 0x00004561}, {0x0002F9B0, 0x00026FB1}, {0x0002F9B1, 0x000270D2}, -{0x0002F9B2, 0x0000456B}, {0x0002F9B3, 0x00008650}, {0x0002F9B4, 0x0000865C}, {0x0002F9B5, 0x00008667}, -{0x0002F9B6, 0x00008669}, {0x0002F9B7, 0x000086A9}, {0x0002F9B8, 0x00008688}, {0x0002F9B9, 0x0000870E}, -{0x0002F9BA, 0x000086E2}, {0x0002F9BB, 0x00008779}, {0x0002F9BC, 0x00008728}, {0x0002F9BD, 0x0000876B}, -{0x0002F9BE, 0x00008786}, {0x0002F9BF, 0x000045D7}, {0x0002F9C0, 0x000087E1}, {0x0002F9C1, 0x00008801}, -{0x0002F9C2, 0x000045F9}, {0x0002F9C3, 0x00008860}, {0x0002F9C4, 0x00008863}, {0x0002F9C5, 0x00027667}, -{0x0002F9C6, 0x000088D7}, {0x0002F9C7, 0x000088DE}, {0x0002F9C8, 0x00004635}, {0x0002F9C9, 0x000088FA}, -{0x0002F9CA, 0x000034BB}, {0x0002F9CB, 0x000278AE}, {0x0002F9CC, 0x00027966}, {0x0002F9CD, 0x000046BE}, -{0x0002F9CE, 0x000046C7}, {0x0002F9CF, 0x00008AA0}, {0x0002F9D0, 0x00008AED}, {0x0002F9D1, 0x00008B8A}, -{0x0002F9D2, 0x00008C55}, {0x0002F9D3, 0x00027CA8}, {0x0002F9D4, 0x00008CAB}, {0x0002F9D5, 0x00008CC1}, -{0x0002F9D6, 0x00008D1B}, {0x0002F9D7, 0x00008D77}, {0x0002F9D8, 0x00027F2F}, {0x0002F9D9, 0x00020804}, -{0x0002F9DA, 0x00008DCB}, {0x0002F9DB, 0x00008DBC}, {0x0002F9DC, 0x00008DF0}, {0x0002F9DD, 0x000208DE}, -{0x0002F9DE, 0x00008ED4}, {0x0002F9DF, 0x00008F38}, {0x0002F9E0, 0x000285D2}, {0x0002F9E1, 0x000285ED}, -{0x0002F9E2, 0x00009094}, {0x0002F9E3, 0x000090F1}, {0x0002F9E4, 0x00009111}, {0x0002F9E5, 0x0002872E}, -{0x0002F9E6, 0x0000911B}, {0x0002F9E7, 0x00009238}, {0x0002F9E8, 0x000092D7}, {0x0002F9E9, 0x000092D8}, -{0x0002F9EA, 0x0000927C}, {0x0002F9EB, 0x000093F9}, {0x0002F9EC, 0x00009415}, {0x0002F9ED, 0x00028BFA}, -{0x0002F9EE, 0x0000958B}, {0x0002F9EF, 0x00004995}, {0x0002F9F0, 0x000095B7}, {0x0002F9F1, 0x00028D77}, -{0x0002F9F2, 0x000049E6}, {0x0002F9F3, 0x000096C3}, {0x0002F9F4, 0x00005DB2}, {0x0002F9F5, 0x00009723}, -{0x0002F9F6, 0x00029145}, {0x0002F9F7, 0x0002921A}, {0x0002F9F8, 0x00004A6E}, {0x0002F9F9, 0x00004A76}, -{0x0002F9FA, 0x000097E0}, {0x0002F9FB, 0x0002940A}, {0x0002F9FC, 0x00004AB2}, {0x0002F9FD, 0x00029496}, -{0x0002F9FE, 0x0000980B}, {0x0002F9FF, 0x0000980B}, {0x0002FA00, 0x00009829}, {0x0002FA01, 0x000295B6}, -{0x0002FA02, 0x000098E2}, {0x0002FA03, 0x00004B33}, {0x0002FA04, 0x00009929}, {0x0002FA05, 0x000099A7}, -{0x0002FA06, 0x000099C2}, {0x0002FA07, 0x000099FE}, {0x0002FA08, 0x00004BCE}, {0x0002FA09, 0x00029B30}, -{0x0002FA0A, 0x00009B12}, {0x0002FA0B, 0x00009C40}, {0x0002FA0C, 0x00009CFD}, {0x0002FA0D, 0x00004CCE}, -{0x0002FA0E, 0x00004CED}, {0x0002FA0F, 0x00009D67}, {0x0002FA10, 0x0002A0CE}, {0x0002FA11, 0x00004CF8}, -{0x0002FA12, 0x0002A105}, {0x0002FA13, 0x0002A20E}, {0x0002FA14, 0x0002A291}, {0x0002FA15, 0x00009EBB}, -{0x0002FA16, 0x00004D56}, {0x0002FA17, 0x00009EF9}, {0x0002FA18, 0x00009EFE}, {0x0002FA19, 0x00009F05}, -{0x0002FA1A, 0x00009F0F}, {0x0002FA1B, 0x00009F16}, {0x0002FA1D, 0x0002A600}, -}; - -const std::map unicode_map_lowercase = { -{0x00041, 0x00061}, {0x00042, 0x00062}, {0x00043, 0x00063}, {0x00044, 0x00064}, {0x00045, 0x00065}, {0x00046, 0x00066}, -{0x00047, 0x00067}, {0x00048, 0x00068}, {0x00049, 0x00069}, {0x0004A, 0x0006A}, {0x0004B, 0x0006B}, {0x0004C, 0x0006C}, -{0x0004D, 0x0006D}, {0x0004E, 0x0006E}, {0x0004F, 0x0006F}, {0x00050, 0x00070}, {0x00051, 0x00071}, {0x00052, 0x00072}, -{0x00053, 0x00073}, {0x00054, 0x00074}, {0x00055, 0x00075}, {0x00056, 0x00076}, {0x00057, 0x00077}, {0x00058, 0x00078}, -{0x00059, 0x00079}, {0x0005A, 0x0007A}, {0x000C0, 0x000E0}, {0x000C1, 0x000E1}, {0x000C2, 0x000E2}, {0x000C3, 0x000E3}, -{0x000C4, 0x000E4}, {0x000C5, 0x000E5}, {0x000C6, 0x000E6}, {0x000C7, 0x000E7}, {0x000C8, 0x000E8}, {0x000C9, 0x000E9}, -{0x000CA, 0x000EA}, {0x000CB, 0x000EB}, {0x000CC, 0x000EC}, {0x000CD, 0x000ED}, {0x000CE, 0x000EE}, {0x000CF, 0x000EF}, -{0x000D0, 0x000F0}, {0x000D1, 0x000F1}, {0x000D2, 0x000F2}, {0x000D3, 0x000F3}, {0x000D4, 0x000F4}, {0x000D5, 0x000F5}, -{0x000D6, 0x000F6}, {0x000D8, 0x000F8}, {0x000D9, 0x000F9}, {0x000DA, 0x000FA}, {0x000DB, 0x000FB}, {0x000DC, 0x000FC}, -{0x000DD, 0x000FD}, {0x000DE, 0x000FE}, {0x00100, 0x00101}, {0x00102, 0x00103}, {0x00104, 0x00105}, {0x00106, 0x00107}, -{0x00108, 0x00109}, {0x0010A, 0x0010B}, {0x0010C, 0x0010D}, {0x0010E, 0x0010F}, {0x00110, 0x00111}, {0x00112, 0x00113}, -{0x00114, 0x00115}, {0x00116, 0x00117}, {0x00118, 0x00119}, {0x0011A, 0x0011B}, {0x0011C, 0x0011D}, {0x0011E, 0x0011F}, -{0x00120, 0x00121}, {0x00122, 0x00123}, {0x00124, 0x00125}, {0x00126, 0x00127}, {0x00128, 0x00129}, {0x0012A, 0x0012B}, -{0x0012C, 0x0012D}, {0x0012E, 0x0012F}, {0x00130, 0x00069}, {0x00132, 0x00133}, {0x00134, 0x00135}, {0x00136, 0x00137}, -{0x00139, 0x0013A}, {0x0013B, 0x0013C}, {0x0013D, 0x0013E}, {0x0013F, 0x00140}, {0x00141, 0x00142}, {0x00143, 0x00144}, -{0x00145, 0x00146}, {0x00147, 0x00148}, {0x0014A, 0x0014B}, {0x0014C, 0x0014D}, {0x0014E, 0x0014F}, {0x00150, 0x00151}, -{0x00152, 0x00153}, {0x00154, 0x00155}, {0x00156, 0x00157}, {0x00158, 0x00159}, {0x0015A, 0x0015B}, {0x0015C, 0x0015D}, -{0x0015E, 0x0015F}, {0x00160, 0x00161}, {0x00162, 0x00163}, {0x00164, 0x00165}, {0x00166, 0x00167}, {0x00168, 0x00169}, -{0x0016A, 0x0016B}, {0x0016C, 0x0016D}, {0x0016E, 0x0016F}, {0x00170, 0x00171}, {0x00172, 0x00173}, {0x00174, 0x00175}, -{0x00176, 0x00177}, {0x00178, 0x000FF}, {0x00179, 0x0017A}, {0x0017B, 0x0017C}, {0x0017D, 0x0017E}, {0x00181, 0x00253}, -{0x00182, 0x00183}, {0x00184, 0x00185}, {0x00186, 0x00254}, {0x00187, 0x00188}, {0x00189, 0x00256}, {0x0018A, 0x00257}, -{0x0018B, 0x0018C}, {0x0018E, 0x001DD}, {0x0018F, 0x00259}, {0x00190, 0x0025B}, {0x00191, 0x00192}, {0x00193, 0x00260}, -{0x00194, 0x00263}, {0x00196, 0x00269}, {0x00197, 0x00268}, {0x00198, 0x00199}, {0x0019C, 0x0026F}, {0x0019D, 0x00272}, -{0x0019F, 0x00275}, {0x001A0, 0x001A1}, {0x001A2, 0x001A3}, {0x001A4, 0x001A5}, {0x001A6, 0x00280}, {0x001A7, 0x001A8}, -{0x001A9, 0x00283}, {0x001AC, 0x001AD}, {0x001AE, 0x00288}, {0x001AF, 0x001B0}, {0x001B1, 0x0028A}, {0x001B2, 0x0028B}, -{0x001B3, 0x001B4}, {0x001B5, 0x001B6}, {0x001B7, 0x00292}, {0x001B8, 0x001B9}, {0x001BC, 0x001BD}, {0x001C4, 0x001C6}, -{0x001C5, 0x001C6}, {0x001C7, 0x001C9}, {0x001C8, 0x001C9}, {0x001CA, 0x001CC}, {0x001CB, 0x001CC}, {0x001CD, 0x001CE}, -{0x001CF, 0x001D0}, {0x001D1, 0x001D2}, {0x001D3, 0x001D4}, {0x001D5, 0x001D6}, {0x001D7, 0x001D8}, {0x001D9, 0x001DA}, -{0x001DB, 0x001DC}, {0x001DE, 0x001DF}, {0x001E0, 0x001E1}, {0x001E2, 0x001E3}, {0x001E4, 0x001E5}, {0x001E6, 0x001E7}, -{0x001E8, 0x001E9}, {0x001EA, 0x001EB}, {0x001EC, 0x001ED}, {0x001EE, 0x001EF}, {0x001F1, 0x001F3}, {0x001F2, 0x001F3}, -{0x001F4, 0x001F5}, {0x001F6, 0x00195}, {0x001F7, 0x001BF}, {0x001F8, 0x001F9}, {0x001FA, 0x001FB}, {0x001FC, 0x001FD}, -{0x001FE, 0x001FF}, {0x00200, 0x00201}, {0x00202, 0x00203}, {0x00204, 0x00205}, {0x00206, 0x00207}, {0x00208, 0x00209}, -{0x0020A, 0x0020B}, {0x0020C, 0x0020D}, {0x0020E, 0x0020F}, {0x00210, 0x00211}, {0x00212, 0x00213}, {0x00214, 0x00215}, -{0x00216, 0x00217}, {0x00218, 0x00219}, {0x0021A, 0x0021B}, {0x0021C, 0x0021D}, {0x0021E, 0x0021F}, {0x00220, 0x0019E}, -{0x00222, 0x00223}, {0x00224, 0x00225}, {0x00226, 0x00227}, {0x00228, 0x00229}, {0x0022A, 0x0022B}, {0x0022C, 0x0022D}, -{0x0022E, 0x0022F}, {0x00230, 0x00231}, {0x00232, 0x00233}, {0x0023A, 0x02C65}, {0x0023B, 0x0023C}, {0x0023D, 0x0019A}, -{0x0023E, 0x02C66}, {0x00241, 0x00242}, {0x00243, 0x00180}, {0x00244, 0x00289}, {0x00245, 0x0028C}, {0x00246, 0x00247}, -{0x00248, 0x00249}, {0x0024A, 0x0024B}, {0x0024C, 0x0024D}, {0x0024E, 0x0024F}, {0x00370, 0x00371}, {0x00372, 0x00373}, -{0x00376, 0x00377}, {0x0037F, 0x003F3}, {0x00386, 0x003AC}, {0x00388, 0x003AD}, {0x00389, 0x003AE}, {0x0038A, 0x003AF}, -{0x0038C, 0x003CC}, {0x0038E, 0x003CD}, {0x0038F, 0x003CE}, {0x00391, 0x003B1}, {0x00392, 0x003B2}, {0x00393, 0x003B3}, -{0x00394, 0x003B4}, {0x00395, 0x003B5}, {0x00396, 0x003B6}, {0x00397, 0x003B7}, {0x00398, 0x003B8}, {0x00399, 0x003B9}, -{0x0039A, 0x003BA}, {0x0039B, 0x003BB}, {0x0039C, 0x003BC}, {0x0039D, 0x003BD}, {0x0039E, 0x003BE}, {0x0039F, 0x003BF}, -{0x003A0, 0x003C0}, {0x003A1, 0x003C1}, {0x003A3, 0x003C3}, {0x003A4, 0x003C4}, {0x003A5, 0x003C5}, {0x003A6, 0x003C6}, -{0x003A7, 0x003C7}, {0x003A8, 0x003C8}, {0x003A9, 0x003C9}, {0x003AA, 0x003CA}, {0x003AB, 0x003CB}, {0x003CF, 0x003D7}, -{0x003D8, 0x003D9}, {0x003DA, 0x003DB}, {0x003DC, 0x003DD}, {0x003DE, 0x003DF}, {0x003E0, 0x003E1}, {0x003E2, 0x003E3}, -{0x003E4, 0x003E5}, {0x003E6, 0x003E7}, {0x003E8, 0x003E9}, {0x003EA, 0x003EB}, {0x003EC, 0x003ED}, {0x003EE, 0x003EF}, -{0x003F4, 0x003B8}, {0x003F7, 0x003F8}, {0x003F9, 0x003F2}, {0x003FA, 0x003FB}, {0x003FD, 0x0037B}, {0x003FE, 0x0037C}, -{0x003FF, 0x0037D}, {0x00400, 0x00450}, {0x00401, 0x00451}, {0x00402, 0x00452}, {0x00403, 0x00453}, {0x00404, 0x00454}, -{0x00405, 0x00455}, {0x00406, 0x00456}, {0x00407, 0x00457}, {0x00408, 0x00458}, {0x00409, 0x00459}, {0x0040A, 0x0045A}, -{0x0040B, 0x0045B}, {0x0040C, 0x0045C}, {0x0040D, 0x0045D}, {0x0040E, 0x0045E}, {0x0040F, 0x0045F}, {0x00410, 0x00430}, -{0x00411, 0x00431}, {0x00412, 0x00432}, {0x00413, 0x00433}, {0x00414, 0x00434}, {0x00415, 0x00435}, {0x00416, 0x00436}, -{0x00417, 0x00437}, {0x00418, 0x00438}, {0x00419, 0x00439}, {0x0041A, 0x0043A}, {0x0041B, 0x0043B}, {0x0041C, 0x0043C}, -{0x0041D, 0x0043D}, {0x0041E, 0x0043E}, {0x0041F, 0x0043F}, {0x00420, 0x00440}, {0x00421, 0x00441}, {0x00422, 0x00442}, -{0x00423, 0x00443}, {0x00424, 0x00444}, {0x00425, 0x00445}, {0x00426, 0x00446}, {0x00427, 0x00447}, {0x00428, 0x00448}, -{0x00429, 0x00449}, {0x0042A, 0x0044A}, {0x0042B, 0x0044B}, {0x0042C, 0x0044C}, {0x0042D, 0x0044D}, {0x0042E, 0x0044E}, -{0x0042F, 0x0044F}, {0x00460, 0x00461}, {0x00462, 0x00463}, {0x00464, 0x00465}, {0x00466, 0x00467}, {0x00468, 0x00469}, -{0x0046A, 0x0046B}, {0x0046C, 0x0046D}, {0x0046E, 0x0046F}, {0x00470, 0x00471}, {0x00472, 0x00473}, {0x00474, 0x00475}, -{0x00476, 0x00477}, {0x00478, 0x00479}, {0x0047A, 0x0047B}, {0x0047C, 0x0047D}, {0x0047E, 0x0047F}, {0x00480, 0x00481}, -{0x0048A, 0x0048B}, {0x0048C, 0x0048D}, {0x0048E, 0x0048F}, {0x00490, 0x00491}, {0x00492, 0x00493}, {0x00494, 0x00495}, -{0x00496, 0x00497}, {0x00498, 0x00499}, {0x0049A, 0x0049B}, {0x0049C, 0x0049D}, {0x0049E, 0x0049F}, {0x004A0, 0x004A1}, -{0x004A2, 0x004A3}, {0x004A4, 0x004A5}, {0x004A6, 0x004A7}, {0x004A8, 0x004A9}, {0x004AA, 0x004AB}, {0x004AC, 0x004AD}, -{0x004AE, 0x004AF}, {0x004B0, 0x004B1}, {0x004B2, 0x004B3}, {0x004B4, 0x004B5}, {0x004B6, 0x004B7}, {0x004B8, 0x004B9}, -{0x004BA, 0x004BB}, {0x004BC, 0x004BD}, {0x004BE, 0x004BF}, {0x004C0, 0x004CF}, {0x004C1, 0x004C2}, {0x004C3, 0x004C4}, -{0x004C5, 0x004C6}, {0x004C7, 0x004C8}, {0x004C9, 0x004CA}, {0x004CB, 0x004CC}, {0x004CD, 0x004CE}, {0x004D0, 0x004D1}, -{0x004D2, 0x004D3}, {0x004D4, 0x004D5}, {0x004D6, 0x004D7}, {0x004D8, 0x004D9}, {0x004DA, 0x004DB}, {0x004DC, 0x004DD}, -{0x004DE, 0x004DF}, {0x004E0, 0x004E1}, {0x004E2, 0x004E3}, {0x004E4, 0x004E5}, {0x004E6, 0x004E7}, {0x004E8, 0x004E9}, -{0x004EA, 0x004EB}, {0x004EC, 0x004ED}, {0x004EE, 0x004EF}, {0x004F0, 0x004F1}, {0x004F2, 0x004F3}, {0x004F4, 0x004F5}, -{0x004F6, 0x004F7}, {0x004F8, 0x004F9}, {0x004FA, 0x004FB}, {0x004FC, 0x004FD}, {0x004FE, 0x004FF}, {0x00500, 0x00501}, -{0x00502, 0x00503}, {0x00504, 0x00505}, {0x00506, 0x00507}, {0x00508, 0x00509}, {0x0050A, 0x0050B}, {0x0050C, 0x0050D}, -{0x0050E, 0x0050F}, {0x00510, 0x00511}, {0x00512, 0x00513}, {0x00514, 0x00515}, {0x00516, 0x00517}, {0x00518, 0x00519}, -{0x0051A, 0x0051B}, {0x0051C, 0x0051D}, {0x0051E, 0x0051F}, {0x00520, 0x00521}, {0x00522, 0x00523}, {0x00524, 0x00525}, -{0x00526, 0x00527}, {0x00528, 0x00529}, {0x0052A, 0x0052B}, {0x0052C, 0x0052D}, {0x0052E, 0x0052F}, {0x00531, 0x00561}, -{0x00532, 0x00562}, {0x00533, 0x00563}, {0x00534, 0x00564}, {0x00535, 0x00565}, {0x00536, 0x00566}, {0x00537, 0x00567}, -{0x00538, 0x00568}, {0x00539, 0x00569}, {0x0053A, 0x0056A}, {0x0053B, 0x0056B}, {0x0053C, 0x0056C}, {0x0053D, 0x0056D}, -{0x0053E, 0x0056E}, {0x0053F, 0x0056F}, {0x00540, 0x00570}, {0x00541, 0x00571}, {0x00542, 0x00572}, {0x00543, 0x00573}, -{0x00544, 0x00574}, {0x00545, 0x00575}, {0x00546, 0x00576}, {0x00547, 0x00577}, {0x00548, 0x00578}, {0x00549, 0x00579}, -{0x0054A, 0x0057A}, {0x0054B, 0x0057B}, {0x0054C, 0x0057C}, {0x0054D, 0x0057D}, {0x0054E, 0x0057E}, {0x0054F, 0x0057F}, -{0x00550, 0x00580}, {0x00551, 0x00581}, {0x00552, 0x00582}, {0x00553, 0x00583}, {0x00554, 0x00584}, {0x00555, 0x00585}, -{0x00556, 0x00586}, {0x010A0, 0x02D00}, {0x010A1, 0x02D01}, {0x010A2, 0x02D02}, {0x010A3, 0x02D03}, {0x010A4, 0x02D04}, -{0x010A5, 0x02D05}, {0x010A6, 0x02D06}, {0x010A7, 0x02D07}, {0x010A8, 0x02D08}, {0x010A9, 0x02D09}, {0x010AA, 0x02D0A}, -{0x010AB, 0x02D0B}, {0x010AC, 0x02D0C}, {0x010AD, 0x02D0D}, {0x010AE, 0x02D0E}, {0x010AF, 0x02D0F}, {0x010B0, 0x02D10}, -{0x010B1, 0x02D11}, {0x010B2, 0x02D12}, {0x010B3, 0x02D13}, {0x010B4, 0x02D14}, {0x010B5, 0x02D15}, {0x010B6, 0x02D16}, -{0x010B7, 0x02D17}, {0x010B8, 0x02D18}, {0x010B9, 0x02D19}, {0x010BA, 0x02D1A}, {0x010BB, 0x02D1B}, {0x010BC, 0x02D1C}, -{0x010BD, 0x02D1D}, {0x010BE, 0x02D1E}, {0x010BF, 0x02D1F}, {0x010C0, 0x02D20}, {0x010C1, 0x02D21}, {0x010C2, 0x02D22}, -{0x010C3, 0x02D23}, {0x010C4, 0x02D24}, {0x010C5, 0x02D25}, {0x010C7, 0x02D27}, {0x010CD, 0x02D2D}, {0x013A0, 0x0AB70}, -{0x013A1, 0x0AB71}, {0x013A2, 0x0AB72}, {0x013A3, 0x0AB73}, {0x013A4, 0x0AB74}, {0x013A5, 0x0AB75}, {0x013A6, 0x0AB76}, -{0x013A7, 0x0AB77}, {0x013A8, 0x0AB78}, {0x013A9, 0x0AB79}, {0x013AA, 0x0AB7A}, {0x013AB, 0x0AB7B}, {0x013AC, 0x0AB7C}, -{0x013AD, 0x0AB7D}, {0x013AE, 0x0AB7E}, {0x013AF, 0x0AB7F}, {0x013B0, 0x0AB80}, {0x013B1, 0x0AB81}, {0x013B2, 0x0AB82}, -{0x013B3, 0x0AB83}, {0x013B4, 0x0AB84}, {0x013B5, 0x0AB85}, {0x013B6, 0x0AB86}, {0x013B7, 0x0AB87}, {0x013B8, 0x0AB88}, -{0x013B9, 0x0AB89}, {0x013BA, 0x0AB8A}, {0x013BB, 0x0AB8B}, {0x013BC, 0x0AB8C}, {0x013BD, 0x0AB8D}, {0x013BE, 0x0AB8E}, -{0x013BF, 0x0AB8F}, {0x013C0, 0x0AB90}, {0x013C1, 0x0AB91}, {0x013C2, 0x0AB92}, {0x013C3, 0x0AB93}, {0x013C4, 0x0AB94}, -{0x013C5, 0x0AB95}, {0x013C6, 0x0AB96}, {0x013C7, 0x0AB97}, {0x013C8, 0x0AB98}, {0x013C9, 0x0AB99}, {0x013CA, 0x0AB9A}, -{0x013CB, 0x0AB9B}, {0x013CC, 0x0AB9C}, {0x013CD, 0x0AB9D}, {0x013CE, 0x0AB9E}, {0x013CF, 0x0AB9F}, {0x013D0, 0x0ABA0}, -{0x013D1, 0x0ABA1}, {0x013D2, 0x0ABA2}, {0x013D3, 0x0ABA3}, {0x013D4, 0x0ABA4}, {0x013D5, 0x0ABA5}, {0x013D6, 0x0ABA6}, -{0x013D7, 0x0ABA7}, {0x013D8, 0x0ABA8}, {0x013D9, 0x0ABA9}, {0x013DA, 0x0ABAA}, {0x013DB, 0x0ABAB}, {0x013DC, 0x0ABAC}, -{0x013DD, 0x0ABAD}, {0x013DE, 0x0ABAE}, {0x013DF, 0x0ABAF}, {0x013E0, 0x0ABB0}, {0x013E1, 0x0ABB1}, {0x013E2, 0x0ABB2}, -{0x013E3, 0x0ABB3}, {0x013E4, 0x0ABB4}, {0x013E5, 0x0ABB5}, {0x013E6, 0x0ABB6}, {0x013E7, 0x0ABB7}, {0x013E8, 0x0ABB8}, -{0x013E9, 0x0ABB9}, {0x013EA, 0x0ABBA}, {0x013EB, 0x0ABBB}, {0x013EC, 0x0ABBC}, {0x013ED, 0x0ABBD}, {0x013EE, 0x0ABBE}, -{0x013EF, 0x0ABBF}, {0x013F0, 0x013F8}, {0x013F1, 0x013F9}, {0x013F2, 0x013FA}, {0x013F3, 0x013FB}, {0x013F4, 0x013FC}, -{0x013F5, 0x013FD}, {0x01C90, 0x010D0}, {0x01C91, 0x010D1}, {0x01C92, 0x010D2}, {0x01C93, 0x010D3}, {0x01C94, 0x010D4}, -{0x01C95, 0x010D5}, {0x01C96, 0x010D6}, {0x01C97, 0x010D7}, {0x01C98, 0x010D8}, {0x01C99, 0x010D9}, {0x01C9A, 0x010DA}, -{0x01C9B, 0x010DB}, {0x01C9C, 0x010DC}, {0x01C9D, 0x010DD}, {0x01C9E, 0x010DE}, {0x01C9F, 0x010DF}, {0x01CA0, 0x010E0}, -{0x01CA1, 0x010E1}, {0x01CA2, 0x010E2}, {0x01CA3, 0x010E3}, {0x01CA4, 0x010E4}, {0x01CA5, 0x010E5}, {0x01CA6, 0x010E6}, -{0x01CA7, 0x010E7}, {0x01CA8, 0x010E8}, {0x01CA9, 0x010E9}, {0x01CAA, 0x010EA}, {0x01CAB, 0x010EB}, {0x01CAC, 0x010EC}, -{0x01CAD, 0x010ED}, {0x01CAE, 0x010EE}, {0x01CAF, 0x010EF}, {0x01CB0, 0x010F0}, {0x01CB1, 0x010F1}, {0x01CB2, 0x010F2}, -{0x01CB3, 0x010F3}, {0x01CB4, 0x010F4}, {0x01CB5, 0x010F5}, {0x01CB6, 0x010F6}, {0x01CB7, 0x010F7}, {0x01CB8, 0x010F8}, -{0x01CB9, 0x010F9}, {0x01CBA, 0x010FA}, {0x01CBD, 0x010FD}, {0x01CBE, 0x010FE}, {0x01CBF, 0x010FF}, {0x01E00, 0x01E01}, -{0x01E02, 0x01E03}, {0x01E04, 0x01E05}, {0x01E06, 0x01E07}, {0x01E08, 0x01E09}, {0x01E0A, 0x01E0B}, {0x01E0C, 0x01E0D}, -{0x01E0E, 0x01E0F}, {0x01E10, 0x01E11}, {0x01E12, 0x01E13}, {0x01E14, 0x01E15}, {0x01E16, 0x01E17}, {0x01E18, 0x01E19}, -{0x01E1A, 0x01E1B}, {0x01E1C, 0x01E1D}, {0x01E1E, 0x01E1F}, {0x01E20, 0x01E21}, {0x01E22, 0x01E23}, {0x01E24, 0x01E25}, -{0x01E26, 0x01E27}, {0x01E28, 0x01E29}, {0x01E2A, 0x01E2B}, {0x01E2C, 0x01E2D}, {0x01E2E, 0x01E2F}, {0x01E30, 0x01E31}, -{0x01E32, 0x01E33}, {0x01E34, 0x01E35}, {0x01E36, 0x01E37}, {0x01E38, 0x01E39}, {0x01E3A, 0x01E3B}, {0x01E3C, 0x01E3D}, -{0x01E3E, 0x01E3F}, {0x01E40, 0x01E41}, {0x01E42, 0x01E43}, {0x01E44, 0x01E45}, {0x01E46, 0x01E47}, {0x01E48, 0x01E49}, -{0x01E4A, 0x01E4B}, {0x01E4C, 0x01E4D}, {0x01E4E, 0x01E4F}, {0x01E50, 0x01E51}, {0x01E52, 0x01E53}, {0x01E54, 0x01E55}, -{0x01E56, 0x01E57}, {0x01E58, 0x01E59}, {0x01E5A, 0x01E5B}, {0x01E5C, 0x01E5D}, {0x01E5E, 0x01E5F}, {0x01E60, 0x01E61}, -{0x01E62, 0x01E63}, {0x01E64, 0x01E65}, {0x01E66, 0x01E67}, {0x01E68, 0x01E69}, {0x01E6A, 0x01E6B}, {0x01E6C, 0x01E6D}, -{0x01E6E, 0x01E6F}, {0x01E70, 0x01E71}, {0x01E72, 0x01E73}, {0x01E74, 0x01E75}, {0x01E76, 0x01E77}, {0x01E78, 0x01E79}, -{0x01E7A, 0x01E7B}, {0x01E7C, 0x01E7D}, {0x01E7E, 0x01E7F}, {0x01E80, 0x01E81}, {0x01E82, 0x01E83}, {0x01E84, 0x01E85}, -{0x01E86, 0x01E87}, {0x01E88, 0x01E89}, {0x01E8A, 0x01E8B}, {0x01E8C, 0x01E8D}, {0x01E8E, 0x01E8F}, {0x01E90, 0x01E91}, -{0x01E92, 0x01E93}, {0x01E94, 0x01E95}, {0x01E9E, 0x000DF}, {0x01EA0, 0x01EA1}, {0x01EA2, 0x01EA3}, {0x01EA4, 0x01EA5}, -{0x01EA6, 0x01EA7}, {0x01EA8, 0x01EA9}, {0x01EAA, 0x01EAB}, {0x01EAC, 0x01EAD}, {0x01EAE, 0x01EAF}, {0x01EB0, 0x01EB1}, -{0x01EB2, 0x01EB3}, {0x01EB4, 0x01EB5}, {0x01EB6, 0x01EB7}, {0x01EB8, 0x01EB9}, {0x01EBA, 0x01EBB}, {0x01EBC, 0x01EBD}, -{0x01EBE, 0x01EBF}, {0x01EC0, 0x01EC1}, {0x01EC2, 0x01EC3}, {0x01EC4, 0x01EC5}, {0x01EC6, 0x01EC7}, {0x01EC8, 0x01EC9}, -{0x01ECA, 0x01ECB}, {0x01ECC, 0x01ECD}, {0x01ECE, 0x01ECF}, {0x01ED0, 0x01ED1}, {0x01ED2, 0x01ED3}, {0x01ED4, 0x01ED5}, -{0x01ED6, 0x01ED7}, {0x01ED8, 0x01ED9}, {0x01EDA, 0x01EDB}, {0x01EDC, 0x01EDD}, {0x01EDE, 0x01EDF}, {0x01EE0, 0x01EE1}, -{0x01EE2, 0x01EE3}, {0x01EE4, 0x01EE5}, {0x01EE6, 0x01EE7}, {0x01EE8, 0x01EE9}, {0x01EEA, 0x01EEB}, {0x01EEC, 0x01EED}, -{0x01EEE, 0x01EEF}, {0x01EF0, 0x01EF1}, {0x01EF2, 0x01EF3}, {0x01EF4, 0x01EF5}, {0x01EF6, 0x01EF7}, {0x01EF8, 0x01EF9}, -{0x01EFA, 0x01EFB}, {0x01EFC, 0x01EFD}, {0x01EFE, 0x01EFF}, {0x01F08, 0x01F00}, {0x01F09, 0x01F01}, {0x01F0A, 0x01F02}, -{0x01F0B, 0x01F03}, {0x01F0C, 0x01F04}, {0x01F0D, 0x01F05}, {0x01F0E, 0x01F06}, {0x01F0F, 0x01F07}, {0x01F18, 0x01F10}, -{0x01F19, 0x01F11}, {0x01F1A, 0x01F12}, {0x01F1B, 0x01F13}, {0x01F1C, 0x01F14}, {0x01F1D, 0x01F15}, {0x01F28, 0x01F20}, -{0x01F29, 0x01F21}, {0x01F2A, 0x01F22}, {0x01F2B, 0x01F23}, {0x01F2C, 0x01F24}, {0x01F2D, 0x01F25}, {0x01F2E, 0x01F26}, -{0x01F2F, 0x01F27}, {0x01F38, 0x01F30}, {0x01F39, 0x01F31}, {0x01F3A, 0x01F32}, {0x01F3B, 0x01F33}, {0x01F3C, 0x01F34}, -{0x01F3D, 0x01F35}, {0x01F3E, 0x01F36}, {0x01F3F, 0x01F37}, {0x01F48, 0x01F40}, {0x01F49, 0x01F41}, {0x01F4A, 0x01F42}, -{0x01F4B, 0x01F43}, {0x01F4C, 0x01F44}, {0x01F4D, 0x01F45}, {0x01F59, 0x01F51}, {0x01F5B, 0x01F53}, {0x01F5D, 0x01F55}, -{0x01F5F, 0x01F57}, {0x01F68, 0x01F60}, {0x01F69, 0x01F61}, {0x01F6A, 0x01F62}, {0x01F6B, 0x01F63}, {0x01F6C, 0x01F64}, -{0x01F6D, 0x01F65}, {0x01F6E, 0x01F66}, {0x01F6F, 0x01F67}, {0x01F88, 0x01F80}, {0x01F89, 0x01F81}, {0x01F8A, 0x01F82}, -{0x01F8B, 0x01F83}, {0x01F8C, 0x01F84}, {0x01F8D, 0x01F85}, {0x01F8E, 0x01F86}, {0x01F8F, 0x01F87}, {0x01F98, 0x01F90}, -{0x01F99, 0x01F91}, {0x01F9A, 0x01F92}, {0x01F9B, 0x01F93}, {0x01F9C, 0x01F94}, {0x01F9D, 0x01F95}, {0x01F9E, 0x01F96}, -{0x01F9F, 0x01F97}, {0x01FA8, 0x01FA0}, {0x01FA9, 0x01FA1}, {0x01FAA, 0x01FA2}, {0x01FAB, 0x01FA3}, {0x01FAC, 0x01FA4}, -{0x01FAD, 0x01FA5}, {0x01FAE, 0x01FA6}, {0x01FAF, 0x01FA7}, {0x01FB8, 0x01FB0}, {0x01FB9, 0x01FB1}, {0x01FBA, 0x01F70}, -{0x01FBB, 0x01F71}, {0x01FBC, 0x01FB3}, {0x01FC8, 0x01F72}, {0x01FC9, 0x01F73}, {0x01FCA, 0x01F74}, {0x01FCB, 0x01F75}, -{0x01FCC, 0x01FC3}, {0x01FD8, 0x01FD0}, {0x01FD9, 0x01FD1}, {0x01FDA, 0x01F76}, {0x01FDB, 0x01F77}, {0x01FE8, 0x01FE0}, -{0x01FE9, 0x01FE1}, {0x01FEA, 0x01F7A}, {0x01FEB, 0x01F7B}, {0x01FEC, 0x01FE5}, {0x01FF8, 0x01F78}, {0x01FF9, 0x01F79}, -{0x01FFA, 0x01F7C}, {0x01FFB, 0x01F7D}, {0x01FFC, 0x01FF3}, {0x02126, 0x003C9}, {0x0212A, 0x0006B}, {0x0212B, 0x000E5}, -{0x02132, 0x0214E}, {0x02160, 0x02170}, {0x02161, 0x02171}, {0x02162, 0x02172}, {0x02163, 0x02173}, {0x02164, 0x02174}, -{0x02165, 0x02175}, {0x02166, 0x02176}, {0x02167, 0x02177}, {0x02168, 0x02178}, {0x02169, 0x02179}, {0x0216A, 0x0217A}, -{0x0216B, 0x0217B}, {0x0216C, 0x0217C}, {0x0216D, 0x0217D}, {0x0216E, 0x0217E}, {0x0216F, 0x0217F}, {0x02183, 0x02184}, -{0x024B6, 0x024D0}, {0x024B7, 0x024D1}, {0x024B8, 0x024D2}, {0x024B9, 0x024D3}, {0x024BA, 0x024D4}, {0x024BB, 0x024D5}, -{0x024BC, 0x024D6}, {0x024BD, 0x024D7}, {0x024BE, 0x024D8}, {0x024BF, 0x024D9}, {0x024C0, 0x024DA}, {0x024C1, 0x024DB}, -{0x024C2, 0x024DC}, {0x024C3, 0x024DD}, {0x024C4, 0x024DE}, {0x024C5, 0x024DF}, {0x024C6, 0x024E0}, {0x024C7, 0x024E1}, -{0x024C8, 0x024E2}, {0x024C9, 0x024E3}, {0x024CA, 0x024E4}, {0x024CB, 0x024E5}, {0x024CC, 0x024E6}, {0x024CD, 0x024E7}, -{0x024CE, 0x024E8}, {0x024CF, 0x024E9}, {0x02C00, 0x02C30}, {0x02C01, 0x02C31}, {0x02C02, 0x02C32}, {0x02C03, 0x02C33}, -{0x02C04, 0x02C34}, {0x02C05, 0x02C35}, {0x02C06, 0x02C36}, {0x02C07, 0x02C37}, {0x02C08, 0x02C38}, {0x02C09, 0x02C39}, -{0x02C0A, 0x02C3A}, {0x02C0B, 0x02C3B}, {0x02C0C, 0x02C3C}, {0x02C0D, 0x02C3D}, {0x02C0E, 0x02C3E}, {0x02C0F, 0x02C3F}, -{0x02C10, 0x02C40}, {0x02C11, 0x02C41}, {0x02C12, 0x02C42}, {0x02C13, 0x02C43}, {0x02C14, 0x02C44}, {0x02C15, 0x02C45}, -{0x02C16, 0x02C46}, {0x02C17, 0x02C47}, {0x02C18, 0x02C48}, {0x02C19, 0x02C49}, {0x02C1A, 0x02C4A}, {0x02C1B, 0x02C4B}, -{0x02C1C, 0x02C4C}, {0x02C1D, 0x02C4D}, {0x02C1E, 0x02C4E}, {0x02C1F, 0x02C4F}, {0x02C20, 0x02C50}, {0x02C21, 0x02C51}, -{0x02C22, 0x02C52}, {0x02C23, 0x02C53}, {0x02C24, 0x02C54}, {0x02C25, 0x02C55}, {0x02C26, 0x02C56}, {0x02C27, 0x02C57}, -{0x02C28, 0x02C58}, {0x02C29, 0x02C59}, {0x02C2A, 0x02C5A}, {0x02C2B, 0x02C5B}, {0x02C2C, 0x02C5C}, {0x02C2D, 0x02C5D}, -{0x02C2E, 0x02C5E}, {0x02C2F, 0x02C5F}, {0x02C60, 0x02C61}, {0x02C62, 0x0026B}, {0x02C63, 0x01D7D}, {0x02C64, 0x0027D}, -{0x02C67, 0x02C68}, {0x02C69, 0x02C6A}, {0x02C6B, 0x02C6C}, {0x02C6D, 0x00251}, {0x02C6E, 0x00271}, {0x02C6F, 0x00250}, -{0x02C70, 0x00252}, {0x02C72, 0x02C73}, {0x02C75, 0x02C76}, {0x02C7E, 0x0023F}, {0x02C7F, 0x00240}, {0x02C80, 0x02C81}, -{0x02C82, 0x02C83}, {0x02C84, 0x02C85}, {0x02C86, 0x02C87}, {0x02C88, 0x02C89}, {0x02C8A, 0x02C8B}, {0x02C8C, 0x02C8D}, -{0x02C8E, 0x02C8F}, {0x02C90, 0x02C91}, {0x02C92, 0x02C93}, {0x02C94, 0x02C95}, {0x02C96, 0x02C97}, {0x02C98, 0x02C99}, -{0x02C9A, 0x02C9B}, {0x02C9C, 0x02C9D}, {0x02C9E, 0x02C9F}, {0x02CA0, 0x02CA1}, {0x02CA2, 0x02CA3}, {0x02CA4, 0x02CA5}, -{0x02CA6, 0x02CA7}, {0x02CA8, 0x02CA9}, {0x02CAA, 0x02CAB}, {0x02CAC, 0x02CAD}, {0x02CAE, 0x02CAF}, {0x02CB0, 0x02CB1}, -{0x02CB2, 0x02CB3}, {0x02CB4, 0x02CB5}, {0x02CB6, 0x02CB7}, {0x02CB8, 0x02CB9}, {0x02CBA, 0x02CBB}, {0x02CBC, 0x02CBD}, -{0x02CBE, 0x02CBF}, {0x02CC0, 0x02CC1}, {0x02CC2, 0x02CC3}, {0x02CC4, 0x02CC5}, {0x02CC6, 0x02CC7}, {0x02CC8, 0x02CC9}, -{0x02CCA, 0x02CCB}, {0x02CCC, 0x02CCD}, {0x02CCE, 0x02CCF}, {0x02CD0, 0x02CD1}, {0x02CD2, 0x02CD3}, {0x02CD4, 0x02CD5}, -{0x02CD6, 0x02CD7}, {0x02CD8, 0x02CD9}, {0x02CDA, 0x02CDB}, {0x02CDC, 0x02CDD}, {0x02CDE, 0x02CDF}, {0x02CE0, 0x02CE1}, -{0x02CE2, 0x02CE3}, {0x02CEB, 0x02CEC}, {0x02CED, 0x02CEE}, {0x02CF2, 0x02CF3}, {0x0A640, 0x0A641}, {0x0A642, 0x0A643}, -{0x0A644, 0x0A645}, {0x0A646, 0x0A647}, {0x0A648, 0x0A649}, {0x0A64A, 0x0A64B}, {0x0A64C, 0x0A64D}, {0x0A64E, 0x0A64F}, -{0x0A650, 0x0A651}, {0x0A652, 0x0A653}, {0x0A654, 0x0A655}, {0x0A656, 0x0A657}, {0x0A658, 0x0A659}, {0x0A65A, 0x0A65B}, -{0x0A65C, 0x0A65D}, {0x0A65E, 0x0A65F}, {0x0A660, 0x0A661}, {0x0A662, 0x0A663}, {0x0A664, 0x0A665}, {0x0A666, 0x0A667}, -{0x0A668, 0x0A669}, {0x0A66A, 0x0A66B}, {0x0A66C, 0x0A66D}, {0x0A680, 0x0A681}, {0x0A682, 0x0A683}, {0x0A684, 0x0A685}, -{0x0A686, 0x0A687}, {0x0A688, 0x0A689}, {0x0A68A, 0x0A68B}, {0x0A68C, 0x0A68D}, {0x0A68E, 0x0A68F}, {0x0A690, 0x0A691}, -{0x0A692, 0x0A693}, {0x0A694, 0x0A695}, {0x0A696, 0x0A697}, {0x0A698, 0x0A699}, {0x0A69A, 0x0A69B}, {0x0A722, 0x0A723}, -{0x0A724, 0x0A725}, {0x0A726, 0x0A727}, {0x0A728, 0x0A729}, {0x0A72A, 0x0A72B}, {0x0A72C, 0x0A72D}, {0x0A72E, 0x0A72F}, -{0x0A732, 0x0A733}, {0x0A734, 0x0A735}, {0x0A736, 0x0A737}, {0x0A738, 0x0A739}, {0x0A73A, 0x0A73B}, {0x0A73C, 0x0A73D}, -{0x0A73E, 0x0A73F}, {0x0A740, 0x0A741}, {0x0A742, 0x0A743}, {0x0A744, 0x0A745}, {0x0A746, 0x0A747}, {0x0A748, 0x0A749}, -{0x0A74A, 0x0A74B}, {0x0A74C, 0x0A74D}, {0x0A74E, 0x0A74F}, {0x0A750, 0x0A751}, {0x0A752, 0x0A753}, {0x0A754, 0x0A755}, -{0x0A756, 0x0A757}, {0x0A758, 0x0A759}, {0x0A75A, 0x0A75B}, {0x0A75C, 0x0A75D}, {0x0A75E, 0x0A75F}, {0x0A760, 0x0A761}, -{0x0A762, 0x0A763}, {0x0A764, 0x0A765}, {0x0A766, 0x0A767}, {0x0A768, 0x0A769}, {0x0A76A, 0x0A76B}, {0x0A76C, 0x0A76D}, -{0x0A76E, 0x0A76F}, {0x0A779, 0x0A77A}, {0x0A77B, 0x0A77C}, {0x0A77D, 0x01D79}, {0x0A77E, 0x0A77F}, {0x0A780, 0x0A781}, -{0x0A782, 0x0A783}, {0x0A784, 0x0A785}, {0x0A786, 0x0A787}, {0x0A78B, 0x0A78C}, {0x0A78D, 0x00265}, {0x0A790, 0x0A791}, -{0x0A792, 0x0A793}, {0x0A796, 0x0A797}, {0x0A798, 0x0A799}, {0x0A79A, 0x0A79B}, {0x0A79C, 0x0A79D}, {0x0A79E, 0x0A79F}, -{0x0A7A0, 0x0A7A1}, {0x0A7A2, 0x0A7A3}, {0x0A7A4, 0x0A7A5}, {0x0A7A6, 0x0A7A7}, {0x0A7A8, 0x0A7A9}, {0x0A7AA, 0x00266}, -{0x0A7AB, 0x0025C}, {0x0A7AC, 0x00261}, {0x0A7AD, 0x0026C}, {0x0A7AE, 0x0026A}, {0x0A7B0, 0x0029E}, {0x0A7B1, 0x00287}, -{0x0A7B2, 0x0029D}, {0x0A7B3, 0x0AB53}, {0x0A7B4, 0x0A7B5}, {0x0A7B6, 0x0A7B7}, {0x0A7B8, 0x0A7B9}, {0x0A7BA, 0x0A7BB}, -{0x0A7BC, 0x0A7BD}, {0x0A7BE, 0x0A7BF}, {0x0A7C0, 0x0A7C1}, {0x0A7C2, 0x0A7C3}, {0x0A7C4, 0x0A794}, {0x0A7C5, 0x00282}, -{0x0A7C6, 0x01D8E}, {0x0A7C7, 0x0A7C8}, {0x0A7C9, 0x0A7CA}, {0x0A7D0, 0x0A7D1}, {0x0A7D6, 0x0A7D7}, {0x0A7D8, 0x0A7D9}, -{0x0A7F5, 0x0A7F6}, {0x0FF21, 0x0FF41}, {0x0FF22, 0x0FF42}, {0x0FF23, 0x0FF43}, {0x0FF24, 0x0FF44}, {0x0FF25, 0x0FF45}, -{0x0FF26, 0x0FF46}, {0x0FF27, 0x0FF47}, {0x0FF28, 0x0FF48}, {0x0FF29, 0x0FF49}, {0x0FF2A, 0x0FF4A}, {0x0FF2B, 0x0FF4B}, -{0x0FF2C, 0x0FF4C}, {0x0FF2D, 0x0FF4D}, {0x0FF2E, 0x0FF4E}, {0x0FF2F, 0x0FF4F}, {0x0FF30, 0x0FF50}, {0x0FF31, 0x0FF51}, -{0x0FF32, 0x0FF52}, {0x0FF33, 0x0FF53}, {0x0FF34, 0x0FF54}, {0x0FF35, 0x0FF55}, {0x0FF36, 0x0FF56}, {0x0FF37, 0x0FF57}, -{0x0FF38, 0x0FF58}, {0x0FF39, 0x0FF59}, {0x0FF3A, 0x0FF5A}, {0x10400, 0x10428}, {0x10401, 0x10429}, {0x10402, 0x1042A}, -{0x10403, 0x1042B}, {0x10404, 0x1042C}, {0x10405, 0x1042D}, {0x10406, 0x1042E}, {0x10407, 0x1042F}, {0x10408, 0x10430}, -{0x10409, 0x10431}, {0x1040A, 0x10432}, {0x1040B, 0x10433}, {0x1040C, 0x10434}, {0x1040D, 0x10435}, {0x1040E, 0x10436}, -{0x1040F, 0x10437}, {0x10410, 0x10438}, {0x10411, 0x10439}, {0x10412, 0x1043A}, {0x10413, 0x1043B}, {0x10414, 0x1043C}, -{0x10415, 0x1043D}, {0x10416, 0x1043E}, {0x10417, 0x1043F}, {0x10418, 0x10440}, {0x10419, 0x10441}, {0x1041A, 0x10442}, -{0x1041B, 0x10443}, {0x1041C, 0x10444}, {0x1041D, 0x10445}, {0x1041E, 0x10446}, {0x1041F, 0x10447}, {0x10420, 0x10448}, -{0x10421, 0x10449}, {0x10422, 0x1044A}, {0x10423, 0x1044B}, {0x10424, 0x1044C}, {0x10425, 0x1044D}, {0x10426, 0x1044E}, -{0x10427, 0x1044F}, {0x104B0, 0x104D8}, {0x104B1, 0x104D9}, {0x104B2, 0x104DA}, {0x104B3, 0x104DB}, {0x104B4, 0x104DC}, -{0x104B5, 0x104DD}, {0x104B6, 0x104DE}, {0x104B7, 0x104DF}, {0x104B8, 0x104E0}, {0x104B9, 0x104E1}, {0x104BA, 0x104E2}, -{0x104BB, 0x104E3}, {0x104BC, 0x104E4}, {0x104BD, 0x104E5}, {0x104BE, 0x104E6}, {0x104BF, 0x104E7}, {0x104C0, 0x104E8}, -{0x104C1, 0x104E9}, {0x104C2, 0x104EA}, {0x104C3, 0x104EB}, {0x104C4, 0x104EC}, {0x104C5, 0x104ED}, {0x104C6, 0x104EE}, -{0x104C7, 0x104EF}, {0x104C8, 0x104F0}, {0x104C9, 0x104F1}, {0x104CA, 0x104F2}, {0x104CB, 0x104F3}, {0x104CC, 0x104F4}, -{0x104CD, 0x104F5}, {0x104CE, 0x104F6}, {0x104CF, 0x104F7}, {0x104D0, 0x104F8}, {0x104D1, 0x104F9}, {0x104D2, 0x104FA}, -{0x104D3, 0x104FB}, {0x10570, 0x10597}, {0x10571, 0x10598}, {0x10572, 0x10599}, {0x10573, 0x1059A}, {0x10574, 0x1059B}, -{0x10575, 0x1059C}, {0x10576, 0x1059D}, {0x10577, 0x1059E}, {0x10578, 0x1059F}, {0x10579, 0x105A0}, {0x1057A, 0x105A1}, -{0x1057C, 0x105A3}, {0x1057D, 0x105A4}, {0x1057E, 0x105A5}, {0x1057F, 0x105A6}, {0x10580, 0x105A7}, {0x10581, 0x105A8}, -{0x10582, 0x105A9}, {0x10583, 0x105AA}, {0x10584, 0x105AB}, {0x10585, 0x105AC}, {0x10586, 0x105AD}, {0x10587, 0x105AE}, -{0x10588, 0x105AF}, {0x10589, 0x105B0}, {0x1058A, 0x105B1}, {0x1058C, 0x105B3}, {0x1058D, 0x105B4}, {0x1058E, 0x105B5}, -{0x1058F, 0x105B6}, {0x10590, 0x105B7}, {0x10591, 0x105B8}, {0x10592, 0x105B9}, {0x10594, 0x105BB}, {0x10595, 0x105BC}, -{0x10C80, 0x10CC0}, {0x10C81, 0x10CC1}, {0x10C82, 0x10CC2}, {0x10C83, 0x10CC3}, {0x10C84, 0x10CC4}, {0x10C85, 0x10CC5}, -{0x10C86, 0x10CC6}, {0x10C87, 0x10CC7}, {0x10C88, 0x10CC8}, {0x10C89, 0x10CC9}, {0x10C8A, 0x10CCA}, {0x10C8B, 0x10CCB}, -{0x10C8C, 0x10CCC}, {0x10C8D, 0x10CCD}, {0x10C8E, 0x10CCE}, {0x10C8F, 0x10CCF}, {0x10C90, 0x10CD0}, {0x10C91, 0x10CD1}, -{0x10C92, 0x10CD2}, {0x10C93, 0x10CD3}, {0x10C94, 0x10CD4}, {0x10C95, 0x10CD5}, {0x10C96, 0x10CD6}, {0x10C97, 0x10CD7}, -{0x10C98, 0x10CD8}, {0x10C99, 0x10CD9}, {0x10C9A, 0x10CDA}, {0x10C9B, 0x10CDB}, {0x10C9C, 0x10CDC}, {0x10C9D, 0x10CDD}, -{0x10C9E, 0x10CDE}, {0x10C9F, 0x10CDF}, {0x10CA0, 0x10CE0}, {0x10CA1, 0x10CE1}, {0x10CA2, 0x10CE2}, {0x10CA3, 0x10CE3}, -{0x10CA4, 0x10CE4}, {0x10CA5, 0x10CE5}, {0x10CA6, 0x10CE6}, {0x10CA7, 0x10CE7}, {0x10CA8, 0x10CE8}, {0x10CA9, 0x10CE9}, -{0x10CAA, 0x10CEA}, {0x10CAB, 0x10CEB}, {0x10CAC, 0x10CEC}, {0x10CAD, 0x10CED}, {0x10CAE, 0x10CEE}, {0x10CAF, 0x10CEF}, -{0x10CB0, 0x10CF0}, {0x10CB1, 0x10CF1}, {0x10CB2, 0x10CF2}, {0x118A0, 0x118C0}, {0x118A1, 0x118C1}, {0x118A2, 0x118C2}, -{0x118A3, 0x118C3}, {0x118A4, 0x118C4}, {0x118A5, 0x118C5}, {0x118A6, 0x118C6}, {0x118A7, 0x118C7}, {0x118A8, 0x118C8}, -{0x118A9, 0x118C9}, {0x118AA, 0x118CA}, {0x118AB, 0x118CB}, {0x118AC, 0x118CC}, {0x118AD, 0x118CD}, {0x118AE, 0x118CE}, -{0x118AF, 0x118CF}, {0x118B0, 0x118D0}, {0x118B1, 0x118D1}, {0x118B2, 0x118D2}, {0x118B3, 0x118D3}, {0x118B4, 0x118D4}, -{0x118B5, 0x118D5}, {0x118B6, 0x118D6}, {0x118B7, 0x118D7}, {0x118B8, 0x118D8}, {0x118B9, 0x118D9}, {0x118BA, 0x118DA}, -{0x118BB, 0x118DB}, {0x118BC, 0x118DC}, {0x118BD, 0x118DD}, {0x118BE, 0x118DE}, {0x118BF, 0x118DF}, {0x16E40, 0x16E60}, -{0x16E41, 0x16E61}, {0x16E42, 0x16E62}, {0x16E43, 0x16E63}, {0x16E44, 0x16E64}, {0x16E45, 0x16E65}, {0x16E46, 0x16E66}, -{0x16E47, 0x16E67}, {0x16E48, 0x16E68}, {0x16E49, 0x16E69}, {0x16E4A, 0x16E6A}, {0x16E4B, 0x16E6B}, {0x16E4C, 0x16E6C}, -{0x16E4D, 0x16E6D}, {0x16E4E, 0x16E6E}, {0x16E4F, 0x16E6F}, {0x16E50, 0x16E70}, {0x16E51, 0x16E71}, {0x16E52, 0x16E72}, -{0x16E53, 0x16E73}, {0x16E54, 0x16E74}, {0x16E55, 0x16E75}, {0x16E56, 0x16E76}, {0x16E57, 0x16E77}, {0x16E58, 0x16E78}, -{0x16E59, 0x16E79}, {0x16E5A, 0x16E7A}, {0x16E5B, 0x16E7B}, {0x16E5C, 0x16E7C}, {0x16E5D, 0x16E7D}, {0x16E5E, 0x16E7E}, -{0x16E5F, 0x16E7F}, {0x1E900, 0x1E922}, {0x1E901, 0x1E923}, {0x1E902, 0x1E924}, {0x1E903, 0x1E925}, {0x1E904, 0x1E926}, -{0x1E905, 0x1E927}, {0x1E906, 0x1E928}, {0x1E907, 0x1E929}, {0x1E908, 0x1E92A}, {0x1E909, 0x1E92B}, {0x1E90A, 0x1E92C}, -{0x1E90B, 0x1E92D}, {0x1E90C, 0x1E92E}, {0x1E90D, 0x1E92F}, {0x1E90E, 0x1E930}, {0x1E90F, 0x1E931}, {0x1E910, 0x1E932}, -{0x1E911, 0x1E933}, {0x1E912, 0x1E934}, {0x1E913, 0x1E935}, {0x1E914, 0x1E936}, {0x1E915, 0x1E937}, {0x1E916, 0x1E938}, -{0x1E917, 0x1E939}, {0x1E918, 0x1E93A}, {0x1E919, 0x1E93B}, {0x1E91A, 0x1E93C}, {0x1E91B, 0x1E93D}, {0x1E91C, 0x1E93E}, -{0x1E91D, 0x1E93F}, {0x1E91E, 0x1E940}, {0x1E91F, 0x1E941}, {0x1E920, 0x1E942}, {0x1E921, 0x1E943}, -}; diff --git a/unicode-data.h b/unicode-data.h deleted file mode 100644 index b99500b8f3a..00000000000 --- a/unicode-data.h +++ /dev/null @@ -1,16 +0,0 @@ -#pragma once - -#include -#include -#include -#include - -extern const std::vector> unicode_ranges_digit; -extern const std::vector> unicode_ranges_letter; -extern const std::vector> unicode_ranges_whitespace; -extern const std::vector> unicode_ranges_accent_mark; -extern const std::vector> unicode_ranges_punctuation; -extern const std::vector> unicode_ranges_symbol; -extern const std::vector> unicode_ranges_control; -extern const std::multimap unicode_map_nfd; -extern const std::map unicode_map_lowercase; diff --git a/unicode.cpp b/unicode.cpp deleted file mode 100644 index df8c5f58134..00000000000 --- a/unicode.cpp +++ /dev/null @@ -1,277 +0,0 @@ -#include "unicode.h" -#include "unicode-data.h" - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -static std::string unicode_cpts_to_utf8(const std::vector & cps) { - std::string result; - for (size_t i = 0; i < cps.size(); ++i) { - result.append(unicode_cpt_to_utf8(cps[i])); - } - return result; -} - -static uint32_t unicode_cpt_from_utf8(const std::string & utf8, size_t & offset) { - assert(offset < utf8.size()); - if (!(utf8[offset + 0] & 0x80)) { - auto result = utf8[offset + 0]; - offset += 1; - return result; - } - if (!(utf8[offset + 0] & 0x40)) { - throw std::invalid_argument("invalid character"); - } - if (!(utf8[offset + 0] & 0x20)) { - if (offset + 1 >= utf8.size() || ! ((utf8[offset + 1] & 0xc0) == 0x80)) { - throw std::invalid_argument("invalid character"); - } - auto result = ((utf8[offset + 0] & 0x1f) << 6) | (utf8[offset + 1] & 0x3f); - offset += 2; - return result; - } - if (!(utf8[offset + 0] & 0x10)) { - if (offset + 2 >= utf8.size() || ! ((utf8[offset + 1] & 0xc0) == 0x80) || ! ((utf8[offset + 2] & 0xc0) == 0x80)) { - throw std::invalid_argument("invalid character"); - } - auto result = ((utf8[offset + 0] & 0x0f) << 12) | ((utf8[offset + 1] & 0x3f) << 6) | (utf8[offset + 2] & 0x3f); - offset += 3; - return result; - } - if (!(utf8[offset + 0] & 0x08)) { - if (offset + 3 >= utf8.size() || ! ((utf8[offset + 1] & 0xc0) == 0x80) || ! ((utf8[offset + 2] & 0xc0) == 0x80) || !((utf8[offset + 3] & 0xc0) == 0x80)) { - throw std::invalid_argument("invalid character"); - } - auto result = ((utf8[offset + 0] & 0x07) << 18) | ((utf8[offset + 1] & 0x3f) << 12) | ((utf8[offset + 2] & 0x3f) << 6) | (utf8[offset + 3] & 0x3f); - offset += 4; - return result; - } - throw std::invalid_argument("invalid string"); -} - -static std::vector unicode_cpt_to_utf16(uint32_t cp) { - std::vector result; - if (/* 0x0000 <= cp && */ cp <= 0xffff) { - result.emplace_back(cp); - } - else if (0x10000 <= cp && cp <= 0x10ffff) { - result.emplace_back(0xd800 | ((cp - 0x10000) >> 10)); - result.emplace_back(0xdc00 | ((cp - 0x10000) & 0x03ff)); - } - else { - throw std::invalid_argument("invalid cpt"); - } - return result; -} - -//static std::vector unicode_cpts_to_utf16(const std::vector & cps) { -// std::vector result; -// for (size_t i = 0; i < cps.size(); ++i) { -// auto temp = unicode_cpt_to_utf16(cps[i]); -// result.insert(result.end(), temp.begin(), temp.end()); -// } -// return result; -//} - -static uint32_t cpt_from_utf16(const std::vector & utf16, size_t & offset) { - assert(offset < utf16.size()); - if (((utf16[0] >> 10) << 10) != 0xd800) { - auto result = utf16[offset + 0]; - offset += 1; - return result; - } - - if (offset + 1 >= utf16.size() || !((utf16[1] & 0xdc00) == 0xdc00)) { - throw std::invalid_argument("invalid character"); - } - - auto result = 0x10000 + (((utf16[0] & 0x03ff) << 10) | (utf16[1] & 0x03ff)); - offset += 2; - return result; -} - -//static std::vector unicode_cpts_from_utf16(const std::vector & utf16) { -// std::vector result; -// size_t offset = 0; -// while (offset < utf16.size()) { -// result.push_back(cpt_from_utf16(utf16, offset)); -// } -// return result; -//} - -static std::unordered_map unicode_cpt_type_map() { - std::unordered_map cpt_types; - for (auto p : unicode_ranges_digit) { - for (auto i = p.first; i <= p.second; ++ i) { - cpt_types[i] = CODEPOINT_TYPE_DIGIT; - } - } - for (auto p : unicode_ranges_letter) { - for (auto i = p.first; i <= p.second; ++ i) { - cpt_types[i] = CODEPOINT_TYPE_LETTER; - } - } - for (auto p : unicode_ranges_whitespace) { - for (auto i = p.first; i <= p.second; ++ i) { - cpt_types[i] = CODEPOINT_TYPE_WHITESPACE; - } - } - for (auto p : unicode_ranges_accent_mark) { - for (auto i = p.first; i <= p.second; ++ i) { - cpt_types[i] = CODEPOINT_TYPE_ACCENT_MARK; - } - } - for (auto p : unicode_ranges_punctuation) { - for (auto i = p.first; i <= p.second; ++ i) { - cpt_types[i] = CODEPOINT_TYPE_PUNCTUATION; - } - } - for (auto p : unicode_ranges_symbol) { - for (auto i = p.first; i <= p.second; ++i) { - cpt_types[i] = CODEPOINT_TYPE_SYMBOL; - } - } - for (auto p : unicode_ranges_control) { - for (auto i = p.first; i <= p.second; ++ i) { - cpt_types[i] = CODEPOINT_TYPE_CONTROL; - } - } - return cpt_types; -} - -static std::unordered_map unicode_byte_to_utf8_map() { - std::unordered_map map; - for (int ch = u'!'; ch <= u'~'; ++ch) { - assert(0 <= ch && ch < 256); - map[ch] = unicode_cpt_to_utf8(ch); - } - for (int ch = u'¡'; ch <= u'¬'; ++ch) { - assert(0 <= ch && ch < 256); - map[ch] = unicode_cpt_to_utf8(ch); - } - for (int ch = u'®'; ch <= u'ÿ'; ++ch) { - assert(0 <= ch && ch < 256); - map[ch] = unicode_cpt_to_utf8(ch); - } - auto n = 0; - for (int ch = 0; ch < 256; ++ch) { - if (map.find(ch) == map.end()) { - map[ch] = unicode_cpt_to_utf8(256 + n); - ++n; - } - } - return map; -} - -static std::unordered_map unicode_utf8_to_byte_map() { - std::unordered_map map; - for (int ch = u'!'; ch <= u'~'; ++ch) { - assert(0 <= ch && ch < 256); - map[unicode_cpt_to_utf8(ch)] = ch; - } - for (int ch = u'¡'; ch <= u'¬'; ++ch) { - assert(0 <= ch && ch < 256); - map[unicode_cpt_to_utf8(ch)] = ch; - } - for (int ch = u'®'; ch <= u'ÿ'; ++ch) { - assert(0 <= ch && ch < 256); - map[unicode_cpt_to_utf8(ch)] = ch; - } - auto n = 0; - for (int ch = 0; ch < 256; ++ch) { - if (map.find(unicode_cpt_to_utf8(ch)) == map.end()) { - map[unicode_cpt_to_utf8(256 + n)] = ch; - ++n; - } - } - return map; -} - -// -// interface -// - -std::string unicode_cpt_to_utf8(uint32_t cp) { - std::string result; - if (/* 0x00 <= cp && */ cp <= 0x7f) { - result.push_back(cp); - } - else if (0x80 <= cp && cp <= 0x7ff) { - result.push_back(0xc0 | ((cp >> 6) & 0x1f)); - result.push_back(0x80 | (cp & 0x3f)); - } - else if (0x800 <= cp && cp <= 0xffff) { - result.push_back(0xe0 | ((cp >> 12) & 0x0f)); - result.push_back(0x80 | ((cp >> 6) & 0x3f)); - result.push_back(0x80 | (cp & 0x3f)); - } - else if (0x10000 <= cp && cp <= 0x10ffff) { - result.push_back(0xf0 | ((cp >> 18) & 0x07)); - result.push_back(0x80 | ((cp >> 12) & 0x3f)); - result.push_back(0x80 | ((cp >> 6) & 0x3f)); - result.push_back(0x80 | (cp & 0x3f)); - } - else { - throw std::invalid_argument("invalid codepoint"); - } - return result; -} - -std::vector unicode_cpts_normalize_nfd(const std::vector & cpts) { - std::vector result; - result.reserve(cpts.size()); - for (size_t i = 0; i < cpts.size(); ++i) { - auto it = unicode_map_nfd.find(cpts[i]); - if (it == unicode_map_nfd.end()) { - result.push_back(cpts[i]); - } else { - result.push_back(it->second); - } - } - return result; -} - -std::vector unicode_cpts_from_utf8(const std::string & utf8) { - std::vector result; - size_t offset = 0; - while (offset < utf8.size()) { - result.push_back(unicode_cpt_from_utf8(utf8, offset)); - } - return result; -} - -int unicode_cpt_type(uint32_t cp) { - static std::unordered_map cpt_types = unicode_cpt_type_map(); - const auto it = cpt_types.find(cp); - return it == cpt_types.end() ? CODEPOINT_TYPE_UNIDENTIFIED : it->second; -} - -int unicode_cpt_type(const std::string & utf8) { - if (utf8.length() == 0) { - return CODEPOINT_TYPE_UNIDENTIFIED; - } - size_t offset = 0; - return unicode_cpt_type(unicode_cpt_from_utf8(utf8, offset)); -} - -std::string unicode_byte_to_utf8(uint8_t byte) { - static std::unordered_map map = unicode_byte_to_utf8_map(); - return map.at(byte); -} - -uint8_t unicode_utf8_to_byte(const std::string & utf8) { - static std::unordered_map map = unicode_utf8_to_byte_map(); - return map.at(utf8); -} - -char32_t unicode_tolower(char32_t cp) { - auto it = unicode_map_lowercase.find(cp); - return it == unicode_map_lowercase.end() ? cp : it->second; -} diff --git a/unicode.h b/unicode.h deleted file mode 100644 index 6a0be393a46..00000000000 --- a/unicode.h +++ /dev/null @@ -1,28 +0,0 @@ -#pragma once - -#include -#include -#include - -#define CODEPOINT_TYPE_UNIDENTIFIED 0 -#define CODEPOINT_TYPE_DIGIT 1 -#define CODEPOINT_TYPE_LETTER 2 -#define CODEPOINT_TYPE_WHITESPACE 3 -#define CODEPOINT_TYPE_ACCENT_MARK 4 -#define CODEPOINT_TYPE_PUNCTUATION 5 -#define CODEPOINT_TYPE_SYMBOL 6 -#define CODEPOINT_TYPE_CONTROL 7 - -std::string unicode_cpt_to_utf8(uint32_t cp); -std::vector unicode_cpts_from_utf8(const std::string & utf8); - -std::vector unicode_cpts_normalize_nfd(const std::vector & cpts); - -int unicode_cpt_type(uint32_t cp); -int unicode_cpt_type(const std::string & utf8); - -std::string unicode_byte_to_utf8(uint8_t byte); -uint8_t unicode_utf8_to_byte(const std::string & utf8); - -// simple tolower that only implements one-to-one mapping, not one-to-many -char32_t unicode_tolower(char32_t cp); From 011191c22db5a777ac95735f5fb6c9505367ff93 Mon Sep 17 00:00:00 2001 From: cparish312 <54302513+cparish312@users.noreply.github.com> Date: Thu, 7 Nov 2024 15:53:39 -0500 Subject: [PATCH 2/3] build-info.cmake --- cmake/build-info.cmake | 58 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 cmake/build-info.cmake diff --git a/cmake/build-info.cmake b/cmake/build-info.cmake new file mode 100644 index 00000000000..ea3dc55c834 --- /dev/null +++ b/cmake/build-info.cmake @@ -0,0 +1,58 @@ +set(BUILD_NUMBER 0) +set(BUILD_COMMIT "unknown") +set(BUILD_COMPILER "unknown") +set(BUILD_TARGET "unknown") + +# Look for git +find_package(Git) +if(NOT Git_FOUND) + find_program(GIT_EXECUTABLE NAMES git git.exe) + if(GIT_EXECUTABLE) + set(Git_FOUND TRUE) + message(STATUS "Found Git: ${GIT_EXECUTABLE}") + else() + message(WARNING "Git not found. Build info will not be accurate.") + endif() +endif() + +# Get the commit count and hash +if(Git_FOUND) + execute_process( + COMMAND ${GIT_EXECUTABLE} rev-parse --short HEAD + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + OUTPUT_VARIABLE HEAD + OUTPUT_STRIP_TRAILING_WHITESPACE + RESULT_VARIABLE RES + ) + if (RES EQUAL 0) + set(BUILD_COMMIT ${HEAD}) + endif() + execute_process( + COMMAND ${GIT_EXECUTABLE} rev-list --count HEAD + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + OUTPUT_VARIABLE COUNT + OUTPUT_STRIP_TRAILING_WHITESPACE + RESULT_VARIABLE RES + ) + if (RES EQUAL 0) + set(BUILD_NUMBER ${COUNT}) + endif() +endif() + +if(MSVC) + set(BUILD_COMPILER "${CMAKE_C_COMPILER_ID} ${CMAKE_C_COMPILER_VERSION}") + set(BUILD_TARGET ${CMAKE_VS_PLATFORM_NAME}) +else() + execute_process( + COMMAND sh -c "$@ --version | head -1" _ ${CMAKE_C_COMPILER} + OUTPUT_VARIABLE OUT + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + set(BUILD_COMPILER ${OUT}) + execute_process( + COMMAND ${CMAKE_C_COMPILER} -dumpmachine + OUTPUT_VARIABLE OUT + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + set(BUILD_TARGET ${OUT}) +endif() From 56231a8f7d60c1a7ecd7c03b14be729c58db60b1 Mon Sep 17 00:00:00 2001 From: cparish312 <54302513+cparish312@users.noreply.github.com> Date: Thu, 7 Nov 2024 15:59:58 -0500 Subject: [PATCH 3/3] common/cmake/build-info-gen-cpp.cmake --- common/cmake/build-info-gen-cpp.cmake | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 common/cmake/build-info-gen-cpp.cmake diff --git a/common/cmake/build-info-gen-cpp.cmake b/common/cmake/build-info-gen-cpp.cmake new file mode 100644 index 00000000000..fbc92b52cc4 --- /dev/null +++ b/common/cmake/build-info-gen-cpp.cmake @@ -0,0 +1,24 @@ +include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/build-info.cmake) + +set(TEMPLATE_FILE "${CMAKE_CURRENT_SOURCE_DIR}/common/build-info.cpp.in") +set(OUTPUT_FILE "${CMAKE_CURRENT_SOURCE_DIR}/common/build-info.cpp") + +# Only write the build info if it changed +if(EXISTS ${OUTPUT_FILE}) + file(READ ${OUTPUT_FILE} CONTENTS) + string(REGEX MATCH "LLAMA_COMMIT = \"([^\"]*)\";" _ ${CONTENTS}) + set(OLD_COMMIT ${CMAKE_MATCH_1}) + string(REGEX MATCH "LLAMA_COMPILER = \"([^\"]*)\";" _ ${CONTENTS}) + set(OLD_COMPILER ${CMAKE_MATCH_1}) + string(REGEX MATCH "LLAMA_BUILD_TARGET = \"([^\"]*)\";" _ ${CONTENTS}) + set(OLD_TARGET ${CMAKE_MATCH_1}) + if ( + NOT OLD_COMMIT STREQUAL BUILD_COMMIT OR + NOT OLD_COMPILER STREQUAL BUILD_COMPILER OR + NOT OLD_TARGET STREQUAL BUILD_TARGET + ) + configure_file(${TEMPLATE_FILE} ${OUTPUT_FILE}) + endif() +else() + configure_file(${TEMPLATE_FILE} ${OUTPUT_FILE}) +endif()