Merge branch 'gpgpu-bench' into gpgpu

This commit is contained in:
Marcel Lütke Dreimann
2022-08-26 17:10:40 +02:00
43 changed files with 11581 additions and 41 deletions

View File

@@ -0,0 +1,522 @@
/**
* adi.c: This file is part of the PolyBench/GPU 1.0 test suite.
*
*
* Contact: Scott Grauer-Gray <sgrauerg@gmail.com>
* Will Killian <killian@udel.edu>
* Louis-Noel Pouchet <pouchet@cse.ohio-state.edu>
* Web address: http://www.cse.ohio-state.edu/~pouchet/software/polybench/GPU
*/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <sys/time.h>
#include <math.h>
#ifdef __APPLE__
#include <OpenCL/opencl.h>
#else
#include "../../CL/cl.h"
#endif
#define POLYBENCH_TIME 1
//select the OpenCL device to use (can be GPU, CPU, or Accelerator such as Intel Xeon Phi)
#define OPENCL_DEVICE_SELECTION CL_DEVICE_TYPE_GPU
#include "adi.h"
#include "../../polybench.h"
//define the error threshold for the results "not matching"
#define PERCENT_DIFF_ERROR_THRESHOLD 10.05
#define GPU_DEVICE 0
#define MAX_SOURCE_SIZE (0x10000000)
#if defined(cl_khr_fp64) // Khronos extension available?
#pragma OPENCL EXTENSION cl_khr_fp64 : enable
#elif defined(cl_amd_fp64) // AMD extension available?
#pragma OPENCL EXTENSION cl_amd_fp64 : enable
#endif
namespace ns_adi {
#include "../../polybenchUtilFuncts.h"
#include "adi_kernel.h"
char str_temp[1024];
cl_platform_id platform_id;
cl_device_id device_id;
cl_uint num_devices;
cl_uint num_platforms;
cl_int errcode;
cl_context clGPUContext;
cl_kernel clKernel1;
cl_kernel clKernel2;
cl_kernel clKernel3;
cl_kernel clKernel4;
cl_kernel clKernel5;
cl_kernel clKernel6;
cl_command_queue clCommandQue;
cl_program clProgram;
cl_mem a_mem_obj;
cl_mem b_mem_obj;
cl_mem x_mem_obj;
FILE *fp;
char *source_str;
size_t source_size;
unsigned int mem_size_A;
unsigned int mem_size_B;
unsigned int mem_size_X;
#define RUN_ON_CPU
void init_array(int n, DATA_TYPE POLYBENCH_2D(A,N,N,n,n), DATA_TYPE POLYBENCH_2D(B,N,N,n,n), DATA_TYPE POLYBENCH_2D(X,N,N,n,n))
{
int i, j;
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
{
X[i][j] = ((DATA_TYPE) i*(j+1) + 1) / N;
A[i][j] = ((DATA_TYPE) (i-1)*(j+4) + 2) / N;
B[i][j] = ((DATA_TYPE) (i+3)*(j+7) + 3) / N;
}
}
}
void compareResults(int n, DATA_TYPE POLYBENCH_2D(B_cpu,N,N,n,n), DATA_TYPE POLYBENCH_2D(B_fromGpu,N,N,n,n), DATA_TYPE POLYBENCH_2D(X_cpu,N,N,n,n),
DATA_TYPE POLYBENCH_2D(X_fromGpu,N,N,n,n))
{
int i, j, fail;
fail = 0;
// Compare b and x output on cpu and gpu
for (i=0; i < n; i++)
{
for (j=0; j < n; j++)
{
if (percentDiff(B_cpu[i][j], B_fromGpu[i][j]) > PERCENT_DIFF_ERROR_THRESHOLD)
{
fail++;
}
}
}
for (i=0; i<n; i++)
{
for (j=0; j<n; j++)
{
if (percentDiff(X_cpu[i][j], X_fromGpu[i][j]) > PERCENT_DIFF_ERROR_THRESHOLD)
{
fail++;
}
}
}
// Print results
printf("Non-Matching CPU-GPU Outputs Beyond Error Threshold of %4.2f Percent: %d\n", PERCENT_DIFF_ERROR_THRESHOLD, fail);
}
void read_cl_file()
{
// Load the kernel source code into the array source_str
// fp = fopen("adi.cl", "r");
// if (!fp) {
// fprintf(stderr, "Failed to load kernel.\n");
// exit(1);
// }
// source_str = (char*)malloc(MAX_SOURCE_SIZE);
// source_size = fread( source_str, 1, MAX_SOURCE_SIZE, fp);
// fclose( fp );
}
void cl_initialization()
{
// Get platform and device information
errcode = clGetPlatformIDs(1, &platform_id, &num_platforms);
if(errcode == CL_SUCCESS) printf("number of platforms is %d\n",num_platforms);
errcode = clGetPlatformInfo(platform_id,CL_PLATFORM_NAME, sizeof(str_temp), str_temp,NULL);
if(errcode == CL_SUCCESS) printf("platform name is %s\n",str_temp);
errcode = clGetPlatformInfo(platform_id, CL_PLATFORM_VERSION, sizeof(str_temp), str_temp,NULL);
if(errcode == CL_SUCCESS) printf("platform version is %s\n",str_temp);
errcode = clGetDeviceIDs( platform_id, OPENCL_DEVICE_SELECTION, 1, &device_id, &num_devices);
if(errcode == CL_SUCCESS) printf("device id is %d\n",device_id);
errcode = clGetDeviceInfo(device_id,CL_DEVICE_NAME, sizeof(str_temp), str_temp,NULL);
if(errcode == CL_SUCCESS) printf("device name is %s\n",str_temp);
// Create an OpenCL context
clGPUContext = clCreateContext( NULL, 1, &device_id, NULL, NULL, &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating context\n");
//Create a command-queue
clCommandQue = clCreateCommandQueue(clGPUContext, device_id, 0, &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating command queue\n");
}
void cl_mem_init(DATA_TYPE POLYBENCH_2D(A,N,N,n,n), DATA_TYPE POLYBENCH_2D(B,N,N,n,n), DATA_TYPE POLYBENCH_2D(X,N,N,n,n))
{
mem_size_A = N*N*sizeof(DATA_TYPE);
mem_size_B = N*N*sizeof(DATA_TYPE);
mem_size_X = N*N*sizeof(DATA_TYPE);
a_mem_obj = clCreateBuffer(clGPUContext, CL_MEM_READ_WRITE, mem_size_A, NULL, &errcode);
b_mem_obj = clCreateBuffer(clGPUContext, CL_MEM_READ_WRITE, mem_size_B, NULL, &errcode);
x_mem_obj = clCreateBuffer(clGPUContext, CL_MEM_READ_WRITE, mem_size_X, NULL, &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating buffers\n");
errcode = clEnqueueWriteBuffer(clCommandQue, a_mem_obj, CL_TRUE, 0, mem_size_A, A, 0, NULL, NULL);
errcode |= clEnqueueWriteBuffer(clCommandQue, b_mem_obj, CL_TRUE, 0, mem_size_B, B, 0, NULL, NULL);
errcode |= clEnqueueWriteBuffer(clCommandQue, x_mem_obj, CL_TRUE, 0, mem_size_X, X, 0, NULL, NULL);
if(errcode != CL_SUCCESS)printf("Error in writing buffers\n");
}
void cl_load_prog()
{
// Create a program from the kernel source
const size_t kernel_size = adi_Gen9core_gen_len;
const unsigned char* kernel_bin = adi_Gen9core_gen;
clProgram = clCreateProgramWithBinary(clGPUContext, 1, &device_id, &kernel_size, &kernel_bin, NULL, &errcode);
// clProgram = clCreateProgramWithSource(clGPUContext, 1, (const char **)&source_str, (const size_t *)&source_size, &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating program\n");
// Build the program
errcode = clBuildProgram(clProgram, 1, &device_id, NULL, NULL, NULL);
if(errcode != CL_SUCCESS) printf("Error in building program\n");
// Create the OpenCL kernel
clKernel1 = clCreateKernel(clProgram, "adi_kernel1", &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating kernel1\n");
clKernel2 = clCreateKernel(clProgram, "adi_kernel2", &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating kernel2\n");
clKernel3 = clCreateKernel(clProgram, "adi_kernel3", &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating kernel3\n");
clKernel4 = clCreateKernel(clProgram, "adi_kernel4", &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating kernel4\n");
clKernel5 = clCreateKernel(clProgram, "adi_kernel5", &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating kernel5\n");
clKernel6 = clCreateKernel(clProgram, "adi_kernel6", &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating kernel6\n");
clFinish(clCommandQue);
}
void cl_launch_kernel1(int n)
{
size_t localWorkSize[2], globalWorkSize[2];
localWorkSize[0] = DIM_LOCAL_WORK_GROUP_X;
localWorkSize[1] = DIM_LOCAL_WORK_GROUP_Y;
globalWorkSize[0] = (size_t)ceil(((float)N) / ((float)DIM_LOCAL_WORK_GROUP_X)) * DIM_LOCAL_WORK_GROUP_X;
globalWorkSize[1] = 1;
// Set the arguments of the kernel
errcode = clSetKernelArg(clKernel1, 0, sizeof(cl_mem), (void *)&a_mem_obj);
errcode |= clSetKernelArg(clKernel1, 1, sizeof(cl_mem), (void *)&b_mem_obj);
errcode |= clSetKernelArg(clKernel1, 2, sizeof(cl_mem), (void *)&x_mem_obj);
errcode |= clSetKernelArg(clKernel1, 3, sizeof(int), (void *)&n);
if(errcode != CL_SUCCESS) printf("Error in seting arguments\n");
// Execute the OpenCL kernel
errcode = clEnqueueNDRangeKernel(clCommandQue, clKernel1, 1, NULL, globalWorkSize, localWorkSize, 0, NULL, NULL);
if(errcode != CL_SUCCESS) printf("Error in launching kernel\n");
clFinish(clCommandQue);
}
void cl_launch_kernel2(int n)
{
size_t localWorkSize[2], globalWorkSize[2];
localWorkSize[0] = DIM_LOCAL_WORK_GROUP_X;
localWorkSize[1] = 1;
globalWorkSize[0] = (size_t)ceil(((float)N) / ((float)DIM_LOCAL_WORK_GROUP_X)) * DIM_LOCAL_WORK_GROUP_X;
globalWorkSize[1] = 1;
// Set the arguments of the kernel
errcode = clSetKernelArg(clKernel2, 0, sizeof(cl_mem), (void *)&a_mem_obj);
errcode |= clSetKernelArg(clKernel2, 1, sizeof(cl_mem), (void *)&b_mem_obj);
errcode |= clSetKernelArg(clKernel2, 2, sizeof(cl_mem), (void *)&x_mem_obj);
errcode |= clSetKernelArg(clKernel2, 3, sizeof(int), (void *)&n);
if(errcode != CL_SUCCESS) printf("Error in seting arguments\n");
// Execute the OpenCL kernel
errcode = clEnqueueNDRangeKernel(clCommandQue, clKernel2, 1, NULL, globalWorkSize, localWorkSize, 0, NULL, NULL);
if(errcode != CL_SUCCESS) printf("Error in launching kernel\n");
clFinish(clCommandQue);
}
void cl_launch_kernel3(int n)
{
size_t localWorkSize[2], globalWorkSize[2];
localWorkSize[0] = DIM_LOCAL_WORK_GROUP_X;
localWorkSize[1] = 1;
globalWorkSize[0] = (size_t)ceil(((float)N) / ((float)DIM_LOCAL_WORK_GROUP_X)) * DIM_LOCAL_WORK_GROUP_X;
globalWorkSize[1] = 1;
// Set the arguments of the kernel
errcode = clSetKernelArg(clKernel3, 0, sizeof(cl_mem), (void *)&a_mem_obj);
errcode |= clSetKernelArg(clKernel3, 1, sizeof(cl_mem), (void *)&b_mem_obj);
errcode |= clSetKernelArg(clKernel3, 2, sizeof(cl_mem), (void *)&x_mem_obj);
errcode |= clSetKernelArg(clKernel3, 3, sizeof(int), (void *)&n);
if(errcode != CL_SUCCESS) printf("Error in seting arguments\n");
// Execute the OpenCL kernel
errcode = clEnqueueNDRangeKernel(clCommandQue, clKernel3, 1, NULL, globalWorkSize, localWorkSize, 0, NULL, NULL);
if(errcode != CL_SUCCESS) printf("Error in launching kernel\n");
clFinish(clCommandQue);
}
void cl_launch_kernel4(int i, int n)
{
size_t localWorkSize[2], globalWorkSize[2];
localWorkSize[0] = DIM_LOCAL_WORK_GROUP_X;
localWorkSize[1] = 1;
globalWorkSize[0] = (size_t)ceil(((float)N) / ((float)DIM_LOCAL_WORK_GROUP_X)) * DIM_LOCAL_WORK_GROUP_X;
globalWorkSize[1] = 1;
// Set the arguments of the kernel
errcode = clSetKernelArg(clKernel4, 0, sizeof(cl_mem), (void *)&a_mem_obj);
errcode |= clSetKernelArg(clKernel4, 1, sizeof(cl_mem), (void *)&b_mem_obj);
errcode |= clSetKernelArg(clKernel4, 2, sizeof(cl_mem), (void *)&x_mem_obj);
errcode |= clSetKernelArg(clKernel4, 3, sizeof(int), (void *)&i);
errcode |= clSetKernelArg(clKernel4, 4, sizeof(int), (void *)&n);
if(errcode != CL_SUCCESS) printf("Error in seting arguments\n");
// Execute the OpenCL kernel
errcode = clEnqueueNDRangeKernel(clCommandQue, clKernel4, 1, NULL, globalWorkSize, localWorkSize, 0, NULL, NULL);
if(errcode != CL_SUCCESS) printf("Error in launching kernel\n");
clFinish(clCommandQue);
}
void cl_launch_kernel5(int n)
{
size_t localWorkSize[2], globalWorkSize[2];
localWorkSize[0] = DIM_LOCAL_WORK_GROUP_X;
localWorkSize[1] = 1;
globalWorkSize[0] = (size_t)ceil(((float)N) / ((float)DIM_LOCAL_WORK_GROUP_X)) * DIM_LOCAL_WORK_GROUP_X;
globalWorkSize[1] = 1;
// Set the arguments of the kernel
errcode = clSetKernelArg(clKernel5, 0, sizeof(cl_mem), (void *)&a_mem_obj);
errcode |= clSetKernelArg(clKernel5, 1, sizeof(cl_mem), (void *)&b_mem_obj);
errcode |= clSetKernelArg(clKernel5, 2, sizeof(cl_mem), (void *)&x_mem_obj);
errcode |= clSetKernelArg(clKernel5, 3, sizeof(int), (void *)&n);
if(errcode != CL_SUCCESS) printf("Error in seting arguments\n");
// Execute the OpenCL kernel
errcode = clEnqueueNDRangeKernel(clCommandQue, clKernel5, 1, NULL, globalWorkSize, localWorkSize, 0, NULL, NULL);
if(errcode != CL_SUCCESS) printf("Error in launching kernel\n");
clFinish(clCommandQue);
}
void cl_launch_kernel6(int i, int n)
{
size_t localWorkSize[2], globalWorkSize[2];
localWorkSize[0] = DIM_LOCAL_WORK_GROUP_X;
localWorkSize[1] = 1;
globalWorkSize[0] = (size_t)ceil(((float)N) / ((float)DIM_LOCAL_WORK_GROUP_X)) * DIM_LOCAL_WORK_GROUP_X;
globalWorkSize[1] = 1;
// Set the arguments of the kernel
errcode = clSetKernelArg(clKernel6, 0, sizeof(cl_mem), (void *)&a_mem_obj);
errcode |= clSetKernelArg(clKernel6, 1, sizeof(cl_mem), (void *)&b_mem_obj);
errcode |= clSetKernelArg(clKernel6, 2, sizeof(cl_mem), (void *)&x_mem_obj);
errcode |= clSetKernelArg(clKernel6, 3, sizeof(int), (void *)&i);
errcode |= clSetKernelArg(clKernel6, 4, sizeof(int), (void *)&n);
if(errcode != CL_SUCCESS) printf("Error in seting arguments\n");
// Execute the OpenCL kernel
errcode = clEnqueueNDRangeKernel(clCommandQue, clKernel6, 1, NULL, globalWorkSize, localWorkSize, 0, NULL, NULL);
if(errcode != CL_SUCCESS) printf("Error in launching kernel\n");
clFinish(clCommandQue);
}
void cl_clean_up()
{
// Clean up
errcode = clFlush(clCommandQue);
errcode = clFinish(clCommandQue);
errcode = clReleaseKernel(clKernel1);
errcode = clReleaseKernel(clKernel2);
errcode = clReleaseKernel(clKernel3);
errcode = clReleaseKernel(clKernel4);
errcode = clReleaseKernel(clKernel5);
errcode = clReleaseKernel(clKernel6);
errcode = clReleaseProgram(clProgram);
errcode = clReleaseMemObject(a_mem_obj);
errcode = clReleaseMemObject(b_mem_obj);
errcode = clReleaseMemObject(x_mem_obj);
errcode = clReleaseCommandQueue(clCommandQue);
errcode = clReleaseContext(clGPUContext);
if(errcode != CL_SUCCESS) printf("Error in cleanup\n");
}
void adi(int tsteps, int n, DATA_TYPE POLYBENCH_2D(A,N,N,n,n), DATA_TYPE POLYBENCH_2D(B,N,N,n,n), DATA_TYPE POLYBENCH_2D(X,N,N,n,n))
{
int t, i1, i2;
for (t = 0; t < _PB_TSTEPS; t++)
{
for (i1 = 0; i1 < _PB_N; i1++)
{
for (i2 = 1; i2 < _PB_N; i2++)
{
X[i1][i2] = X[i1][i2] - X[i1][(i2-1)] * A[i1][i2] / B[i1][(i2-1)];
B[i1][i2] = B[i1][i2] - A[i1][i2] * A[i1][i2] / B[i1][(i2-1)];
}
}
for (i1 = 0; i1 < _PB_N; i1++)
{
X[i1][(N-1)] = X[i1][(N-1)] / B[i1][(N-1)];
}
for (i1 = 0; i1 < _PB_N; i1++)
{
for (i2 = 0; i2 < _PB_N-2; i2++)
{
X[i1][(N-i2-2)] = (X[i1][(N-2-i2)] - X[i1][(N-2-i2-1)] * A[i1][(N-i2-3)]) / B[i1][(N-3-i2)];
}
}
for (i1 = 1; i1 < _PB_N; i1++)
{
for (i2 = 0; i2 < _PB_N; i2++)
{
X[i1][i2] = X[i1][i2] - X[(i1-1)][i2] * A[i1][i2] / B[(i1-1)][i2];
B[i1][i2] = B[i1][i2] - A[i1][i2] * A[i1][i2] / B[(i1-1)][i2];
}
}
for (i2 = 0; i2 < _PB_N; i2++)
{
X[(N-1)][i2] = X[(N-1)][i2] / B[(N-1)][i2];
}
for (i1 = 0; i1 < _PB_N-2; i1++)
{
for (i2 = 0; i2 < _PB_N; i2++)
{
X[(N-2-i1)][i2] = (X[(N-2-i1)][i2] - X[(N-i1-3)][i2] * A[(N-3-i1)][i2]) / B[(N-2-i1)][i2];
}
}
}
}
/* DCE code. Must scan the entire live-out data.
Can be used also to check the correctness of the output. */
static
void print_array(int n,
DATA_TYPE POLYBENCH_2D(X,N,N,n,n))
{
int i, j;
for (i = 0; i < n; i++)
for (j = 0; j < n; j++) {
fprintf(stderr, DATA_PRINTF_MODIFIER, X[i][j]);
if ((i * N + j) % 20 == 0) fprintf(stderr, "\n");
}
fprintf(stderr, "\n");
}
int main(int argc, char *argv[])
{
int tsteps = TSTEPS;
int n = N;
POLYBENCH_2D_ARRAY_DECL(A,DATA_TYPE,N,N,n,n);
POLYBENCH_2D_ARRAY_DECL(B,DATA_TYPE,N,N,n,n);
POLYBENCH_2D_ARRAY_DECL(B_outputFromGpu,DATA_TYPE,N,N,n,n);
POLYBENCH_2D_ARRAY_DECL(X,DATA_TYPE,N,N,n,n);
POLYBENCH_2D_ARRAY_DECL(X_outputFromGpu,DATA_TYPE,N,N,n,n);
init_array(n, POLYBENCH_ARRAY(A), POLYBENCH_ARRAY(B), POLYBENCH_ARRAY(X));
read_cl_file();
cl_initialization();
cl_mem_init(POLYBENCH_ARRAY(A), POLYBENCH_ARRAY(B), POLYBENCH_ARRAY(X));
cl_load_prog();
/* Start timer. */
polybench_start_instruments;
int t, i1;
for (t = 0; t < _PB_TSTEPS; t++)
{
cl_launch_kernel1(n);
cl_launch_kernel2(n);
cl_launch_kernel3(n);
for (i1 = 1; i1 < _PB_N; i1++)
{
cl_launch_kernel4(i1, n);
}
cl_launch_kernel5(n);
for (i1 = 0; i1 < _PB_N-2; i1++)
{
cl_launch_kernel6(i1, n);
}
}
/* Stop and print timer. */
printf("GPU Time in seconds:\n");
polybench_stop_instruments;
polybench_print_instruments;
errcode = clEnqueueReadBuffer(clCommandQue, b_mem_obj, CL_TRUE, 0, mem_size_B, POLYBENCH_ARRAY(B_outputFromGpu), 0, NULL, NULL);
if(errcode != CL_SUCCESS) printf("Error in reading GPU mem\n");
errcode = clEnqueueReadBuffer(clCommandQue, x_mem_obj, CL_TRUE, 0, mem_size_X, POLYBENCH_ARRAY(X_outputFromGpu), 0, NULL, NULL);
if(errcode != CL_SUCCESS) printf("Error in reading GPU mem\n");
#ifdef RUN_ON_CPU
/* Start timer. */
polybench_start_instruments;
adi(tsteps, n, POLYBENCH_ARRAY(A), POLYBENCH_ARRAY(B), POLYBENCH_ARRAY(X));
/* Stop and print timer. */
printf("CPU Time in seconds:\n");
polybench_stop_instruments;
polybench_print_instruments;
compareResults(n, POLYBENCH_ARRAY(B), POLYBENCH_ARRAY(B_outputFromGpu), POLYBENCH_ARRAY(X), POLYBENCH_ARRAY(X_outputFromGpu));
#else //prevent dead code elimination
polybench_prevent_dce(print_array(n, POLYBENCH_ARRAY(X_outputFromGpu)));
#endif //RUN_ON_CPU
cl_clean_up();
POLYBENCH_FREE_ARRAY(A);
POLYBENCH_FREE_ARRAY(B);
POLYBENCH_FREE_ARRAY(B_outputFromGpu);
POLYBENCH_FREE_ARRAY(X);
POLYBENCH_FREE_ARRAY(X_outputFromGpu);
return 0;
}
}

View File

@@ -0,0 +1,92 @@
/**
* adi.cl: This file is part of the PolyBench/GPU 1.0 test suite.
*
*
* Contact: Scott Grauer-Gray <sgrauerg@gmail.com>
* Will Killian <killian@udel.edu>
* Louis-Noel Pouchet <pouchet@cse.ohio-state.edu>
* Web address: http://www.cse.ohio-state.edu/~pouchet/software/polybench/GPU
*/
#if defined(cl_khr_fp64) // Khronos extension available?
#pragma OPENCL EXTENSION cl_khr_fp64 : enable
#elif defined(cl_amd_fp64) // AMD extension available?
#pragma OPENCL EXTENSION cl_amd_fp64 : enable
#endif
typedef float DATA_TYPE;
__kernel void adi_kernel1(__global DATA_TYPE* A, __global DATA_TYPE* B, __global DATA_TYPE* X, int n)
{
int i1 = get_global_id(0);
int i2;
if ((i1 < n))
{
for (i2 = 1; i2 < n; i2++)
{
X[i1*n + i2] = X[i1*n + i2] - X[i1*n + (i2-1)] * A[i1*n + i2] / B[i1*n + (i2-1)];
B[i1*n + i2] = B[i1*n + i2] - A[i1*n + i2] * A[i1*n + i2] / B[i1*n + (i2-1)];
}
}
}
__kernel void adi_kernel2(__global DATA_TYPE* A, __global DATA_TYPE* B, __global DATA_TYPE* X, int n)
{
int i1 = get_global_id(0);
if ((i1 < n))
{
X[i1*n + (n-1)] = X[i1*n + (n-1)] / B[i1*n + (n-1)];
}
}
__kernel void adi_kernel3(__global DATA_TYPE* A, __global DATA_TYPE* B, __global DATA_TYPE* X, int n)
{
int i1 = get_global_id(0);
int i2;
if ((i1 < n))
{
for (i2 = 0; i2 < n-2; i2++)
{
X[i1*n + (n-i2-2)] = (X[i1*n + (n-2-i2)] - X[i1*n + (n-2-i2-1)] * A[i1*n + (n-i2-3)]) / B[i1*n + (n-3-i2)];
}
}
}
__kernel void adi_kernel4(__global DATA_TYPE* A, __global DATA_TYPE* B, __global DATA_TYPE* X, int i1, int n)
{
int i2 = get_global_id(0);
if ((i2 < n))
{
X[i1*n + i2] = X[i1*n + i2] - X[(i1-1)*n + i2] * A[i1*n + i2] / B[(i1-1)*n + i2];
B[i1*n + i2] = B[i1*n + i2] - A[i1*n + i2] * A[i1*n + i2] / B[(i1-1)*n + i2];
}
}
__kernel void adi_kernel5(__global DATA_TYPE* A, __global DATA_TYPE* B, __global DATA_TYPE* X, int n)
{
int i2 = get_global_id(0);
if ((i2 < n))
{
X[(n-1)*n + i2] = X[(n-1)*n + i2] / B[(n-1)*n + i2];
}
}
__kernel void adi_kernel6(__global DATA_TYPE* A, __global DATA_TYPE* B, __global DATA_TYPE* X, int i1, int n)
{
int i2 = get_global_id(0);
if ((i2 < n))
{
X[(n-2-i1)*n + i2] = (X[(n-2-i1)*n + i2] - X[(n-i1-3)*n + i2] * A[(n-3-i1)*n + i2]) / B[(n-2-i1)*n + i2];
}
}

View File

@@ -0,0 +1,61 @@
/**
* adi.h: This file is part of the PolyBench/GPU 1.0 test suite.
*
*
* Contact: Scott Grauer-Gray <sgrauerg@gmail.com>
* Will Killian <killian@udel.edu>
* Louis-Noel Pouchet <pouchet@cse.ohio-state.edu>
* Web address: http://www.cse.ohio-state.edu/~pouchet/software/polybench/GPU
*/
#ifndef ADI_H
# define ADI_H
/* Default to STANDARD_DATASET. */
# if !defined(MINI_DATASET) && !defined(SMALL_DATASET) && !defined(LARGE_DATASET) && !defined(EXTRALARGE_DATASET)
# define STANDARD_DATASET
# endif
/* Do not define anything if the user manually defines the size. */
# if !defined(TSTEPS) && !defined(N)
/* Define the possible dataset sizes. */
# ifdef MINI_DATASET
#define TSTEPS 1
#define N 256
# endif
# ifdef SMALL_DATASET
#define TSTEPS 1
#define N 512
# endif
# ifdef STANDARD_DATASET /* Default if unspecified. */
#define TSTEPS 1
#define N 1024
# endif
# ifdef LARGE_DATASET
#define TSTEPS 1
#define N 2048
# endif
# ifdef EXTRALARGE_DATASET
#define TSTEPS 1
#define N 4096
# endif
# endif /* !N */
# define _PB_N POLYBENCH_LOOP_BOUND(N,n)
# define _PB_TSTEPS POLYBENCH_LOOP_BOUND(TSTEPS,tsteps)
# ifndef DATA_TYPE
# define DATA_TYPE float
# define DATA_PRINTF_MODIFIER "%0.2lf "
# endif
/* Thread block dimensions */
#define DIM_LOCAL_WORK_GROUP_X 256
#define DIM_LOCAL_WORK_GROUP_Y 1
#endif /* !ADI*/

File diff suppressed because it is too large Load Diff

View File

@@ -1,40 +1,35 @@
// linear algebra
// kernels
namespace ns_2mm{int main(int argc, char *argv[]);};
extern int main(int argc, char *argv[]);
namespace ns_3mm{int main(int argc, char *argv[]);};
extern int main(int argc, char *argv[]);
namespace ns_atax{int main(int argc, char *argv[]);};
extern int main(int argc, char *argv[]);
namespace ns_bicg{int main(int argc, char *argv[]);};
extern int main(int argc, char *argv[]);
namespace ns_doitgen{int main(int argc, char *argv[]);};
extern int main(int argc, char *argv[]);
namespace ns_gemm{int main(int argc, char *argv[]);};
extern int main(int argc, char *argv[]);
namespace ns_gemver{int main(int argc, char *argv[]);};
extern int main(int argc, char *argv[]);
namespace ns_gesummv{int main(int argc, char *argv[]);};
extern int main(int argc, char *argv[]);
namespace ns_mvt{int main(int argc, char *argv[]);};
extern int main(int argc, char *argv[]);
namespace ns_syr2k{int main(int argc, char *argv[]);};
extern int main(int argc, char *argv[]);
namespace ns_syrk{int main(int argc, char *argv[]);};
extern int main(int argc, char *argv[]);
// solver
namespace ns_gramschmidt{int main(int argc, char *argv[]);};
namespace ns_lu{int main(int argc, char *argv[]);};
// data mining
namespace ns_correlation{int main(int argc, char *argv[]);};
namespace ns_covariance{int main(int argc, char *argv[]);};
// stencils
namespace ns_adi{int main(int argc, char *argv[]);};
namespace ns_convolution_2d{int main(int argc, char *argv[]);};
namespace ns_convolution_3d{int main(int argc, char *argv[]);};
namespace ns_fdtd_2d{int main(int argc, char *argv[]);};
namespace ns_jacobi_1d_imper{int main(int argc, char *argv[]);};
namespace ns_jacobi_2d_imper{int main(int argc, char *argv[]);};

View File

@@ -0,0 +1,323 @@
/**
* 2DConvolution.c: This file is part of the PolyBench/GPU 1.0 test suite.
*
*
* Contact: Scott Grauer-Gray <sgrauerg@gmail.com>
* Will Killian <killian@udel.edu>
* Louis-Noel Pouchet <pouchet@cse.ohio-state.edu>
* Web address: http://www.cse.ohio-state.edu/~pouchet/software/polybench/GPU
*/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <sys/time.h>
#include <math.h>
#ifdef __APPLE__
#include <OpenCL/opencl.h>
#else
#include "../../CL/cl.h"
#endif
#define POLYBENCH_TIME 1
//select the OpenCL device to use (can be GPU, CPU, or Accelerator such as Intel Xeon Phi)
#define OPENCL_DEVICE_SELECTION CL_DEVICE_TYPE_GPU
#include "2DConvolution.h"
#include "../../polybench.h"
//define the error threshold for the results "not matching"
#define PERCENT_DIFF_ERROR_THRESHOLD 1.05
#define MAX_SOURCE_SIZE (0x100000)
#if defined(cl_khr_fp64) // Khronos extension available?
#pragma OPENCL EXTENSION cl_khr_fp64 : enable
#elif defined(cl_amd_fp64) // AMD extension available?
#pragma OPENCL EXTENSION cl_amd_fp64 : enable
#endif
namespace ns_convolution_2d {
#include "2DConvolution_kernel.h"
#include "../../polybenchUtilFuncts.h"
char str_temp[1024];
cl_platform_id platform_id;
cl_device_id device_id;
cl_uint num_devices;
cl_uint num_platforms;
cl_int errcode;
cl_context clGPUContext;
cl_kernel clKernel;
cl_command_queue clCommandQue;
cl_program clProgram;
cl_mem a_mem_obj;
cl_mem b_mem_obj;
cl_mem c_mem_obj;
FILE *fp;
char *source_str;
size_t source_size;
#define RUN_ON_CPU
void compareResults(int ni, int nj, DATA_TYPE POLYBENCH_2D(B, NI, NJ, ni, nj), DATA_TYPE POLYBENCH_2D(B_outputFromGpu, NI, NJ, ni, nj))
{
int i, j, fail;
fail = 0;
// Compare outputs from CPU and GPU
for (i=1; i < (ni-1); i++)
{
for (j=1; j < (nj-1); j++)
{
if (percentDiff(B[i][j], B_outputFromGpu[i][j]) > PERCENT_DIFF_ERROR_THRESHOLD)
{
fail++;
}
}
}
// Print results
printf("Non-Matching CPU-GPU Outputs Beyond Error Threshold of %4.2f Percent: %d\n", PERCENT_DIFF_ERROR_THRESHOLD, fail);
}
void read_cl_file()
{
// Load the kernel source code into the array source_str
// fp = fopen("2DConvolution.cl", "r");
// if (!fp) {
// fprintf(stdout, "Failed to load kernel.\n");
// exit(1);
// }
// source_str = (char*)malloc(MAX_SOURCE_SIZE);
// source_size = fread( source_str, 1, MAX_SOURCE_SIZE, fp);
// fclose( fp );
}
void init(int ni, int nj, DATA_TYPE POLYBENCH_2D(A, NI, NJ, ni, nj))
{
int i, j;
for (i = 0; i < ni; ++i)
{
for (j = 0; j < nj; ++j)
{
A[i][j] = (float)rand()/RAND_MAX;
}
}
}
void cl_initialization()
{
// Get platform and device information
errcode = clGetPlatformIDs(1, &platform_id, &num_platforms);
if(errcode == CL_SUCCESS) printf("number of platforms is %d\n",num_platforms);
else printf("Error getting platform IDs\n");
errcode = clGetPlatformInfo(platform_id,CL_PLATFORM_NAME, sizeof(str_temp), str_temp,NULL);
if(errcode == CL_SUCCESS) printf("platform name is %s\n",str_temp);
else printf("Error getting platform name\n");
errcode = clGetPlatformInfo(platform_id, CL_PLATFORM_VERSION, sizeof(str_temp), str_temp,NULL);
if(errcode == CL_SUCCESS) printf("platform version is %s\n",str_temp);
else printf("Error getting platform version\n");
errcode = clGetDeviceIDs( platform_id, OPENCL_DEVICE_SELECTION, 1, &device_id, &num_devices);
if(errcode == CL_SUCCESS) printf("number of devices is %d\n", num_devices);
else printf("Error getting device IDs\n");
errcode = clGetDeviceInfo(device_id,CL_DEVICE_NAME, sizeof(str_temp), str_temp,NULL);
if(errcode == CL_SUCCESS) printf("device name is %s\n",str_temp);
else printf("Error getting device name\n");
// Create an OpenCL context
clGPUContext = clCreateContext( NULL, 1, &device_id, NULL, NULL, &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating context\n");
//Create a command-queue
clCommandQue = clCreateCommandQueue(clGPUContext, device_id, 0, &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating command queue\n");
}
void cl_mem_init(DATA_TYPE POLYBENCH_2D(A, NI, NJ, ni, nj))
{
a_mem_obj = clCreateBuffer(clGPUContext, CL_MEM_READ_ONLY, sizeof(DATA_TYPE) * NI * NJ, NULL, &errcode);
b_mem_obj = clCreateBuffer(clGPUContext, CL_MEM_READ_WRITE, sizeof(DATA_TYPE) * NI * NJ, NULL, &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating buffers\n");
errcode = clEnqueueWriteBuffer(clCommandQue, a_mem_obj, CL_TRUE, 0, sizeof(DATA_TYPE) * NI * NJ, A, 0, NULL, NULL);
if(errcode != CL_SUCCESS)printf("Error in writing buffers\n");
}
void cl_load_prog()
{
// Create a program from the kernel source
const size_t kernel_size = __2DConvolution_Gen9core_gen_len;
const unsigned char* kernel_bin = __2DConvolution_Gen9core_gen;
clProgram = clCreateProgramWithBinary(clGPUContext, 1, &device_id, &kernel_size, &kernel_bin, NULL, &errcode);
// clProgram = clCreateProgramWithSource(clGPUContext, 1, (const char **)&source_str, (const size_t *)&source_size, &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating program\n");
// Build the program
errcode = clBuildProgram(clProgram, 1, &device_id, NULL, NULL, NULL);
if(errcode != CL_SUCCESS) printf("Error in building program\n");
// Create the OpenCL kernel
clKernel = clCreateKernel(clProgram, "Convolution2D_kernel", &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating kernel\n");
clFinish(clCommandQue);
}
void cl_launch_kernel(int ni, int nj)
{
size_t localWorkSize[2], globalWorkSize[2];
localWorkSize[0] = DIM_LOCAL_WORK_GROUP_X;
localWorkSize[1] = DIM_LOCAL_WORK_GROUP_Y;
globalWorkSize[0] = (size_t)ceil(((float)NI) / ((float)DIM_LOCAL_WORK_GROUP_X)) * DIM_LOCAL_WORK_GROUP_X;
globalWorkSize[1] = (size_t)ceil(((float)NJ) / ((float)DIM_LOCAL_WORK_GROUP_Y)) * DIM_LOCAL_WORK_GROUP_Y;
/* Start timer. */
polybench_start_instruments;
// Set the arguments of the kernel
errcode = clSetKernelArg(clKernel, 0, sizeof(cl_mem), (void *)&a_mem_obj);
errcode |= clSetKernelArg(clKernel, 1, sizeof(cl_mem), (void *)&b_mem_obj);
errcode = clSetKernelArg(clKernel, 2, sizeof(int), &ni);
errcode |= clSetKernelArg(clKernel, 3, sizeof(int), &nj);
if(errcode != CL_SUCCESS) printf("Error in seting arguments\n");
// Execute the OpenCL kernel
errcode = clEnqueueNDRangeKernel(clCommandQue, clKernel, 2, NULL, globalWorkSize, localWorkSize, 0, NULL, NULL);
if(errcode != CL_SUCCESS) printf("Error in launching kernel\n");
clFinish(clCommandQue);
/* Stop and print timer. */
printf("GPU Time in seconds:\n");
polybench_stop_instruments;
polybench_print_instruments;
}
void cl_clean_up()
{
// Clean up
errcode = clFlush(clCommandQue);
errcode = clFinish(clCommandQue);
errcode = clReleaseKernel(clKernel);
errcode = clReleaseProgram(clProgram);
errcode = clReleaseMemObject(a_mem_obj);
errcode = clReleaseMemObject(b_mem_obj);
errcode = clReleaseCommandQueue(clCommandQue);
errcode = clReleaseContext(clGPUContext);
if(errcode != CL_SUCCESS) printf("Error in cleanup\n");
}
void conv2D(int ni, int nj, DATA_TYPE POLYBENCH_2D(A, NI, NJ, ni, nj), DATA_TYPE POLYBENCH_2D(B, NI, NJ, ni, nj))
{
int i, j;
DATA_TYPE c11, c12, c13, c21, c22, c23, c31, c32, c33;
c11 = +0.2; c21 = +0.5; c31 = -0.8;
c12 = -0.3; c22 = +0.6; c32 = -0.9;
c13 = +0.4; c23 = +0.7; c33 = +0.10;
for (i = 1; i < _PB_NI - 1; ++i) // 0
{
for (j = 1; j < _PB_NJ - 1; ++j) // 1
{
B[i][j] = c11 * A[(i - 1)][(j - 1)] + c12 * A[(i + 0)][(j - 1)] + c13 * A[(i + 1)][(j - 1)]
+ c21 * A[(i - 1)][(j + 0)] + c22 * A[(i + 0)][(j + 0)] + c23 * A[(i + 1)][(j + 0)]
+ c31 * A[(i - 1)][(j + 1)] + c32 * A[(i + 0)][(j + 1)] + c33 * A[(i + 1)][(j + 1)];
}
}
}
/* DCE code. Must scan the entire live-out data.
Can be used also to check the correctness of the output. */
static
void print_array(int ni, int nj,
DATA_TYPE POLYBENCH_2D(B,NI,NJ,ni,nj))
{
int i, j;
for (i = 0; i < ni; i++)
for (j = 0; j < nj; j++) {
fprintf (stderr, DATA_PRINTF_MODIFIER, B[i][j]);
if ((i * ni + j) % 20 == 0) fprintf (stderr, "\n");
}
fprintf (stderr, "\n");
}
int main(int argc, char *argv[])
{
/* Retrieve problem size */
int ni = NI;
int nj = NJ;
POLYBENCH_2D_ARRAY_DECL(A,DATA_TYPE,NI,NJ,ni,nj);
POLYBENCH_2D_ARRAY_DECL(B,DATA_TYPE,NI,NJ,ni,nj);
POLYBENCH_2D_ARRAY_DECL(B_outputFromGpu,DATA_TYPE,NI,NJ,ni,nj);
init(ni, nj, POLYBENCH_ARRAY(A));
read_cl_file();
cl_initialization();
cl_mem_init(POLYBENCH_ARRAY(A));
cl_load_prog();
cl_launch_kernel(ni, nj);
errcode = clEnqueueReadBuffer(clCommandQue, b_mem_obj, CL_TRUE, 0, NI*NJ*sizeof(DATA_TYPE), POLYBENCH_ARRAY(B_outputFromGpu), 0, NULL, NULL);
if(errcode != CL_SUCCESS) printf("Error in reading GPU mem\n");
#ifdef RUN_ON_CPU
/* Start timer. */
polybench_start_instruments;
conv2D(ni, nj, POLYBENCH_ARRAY(A), POLYBENCH_ARRAY(B));
/* Stop and print timer. */
printf("CPU Time in seconds:\n");
polybench_stop_instruments;
polybench_print_instruments;
compareResults(ni, nj, POLYBENCH_ARRAY(B), POLYBENCH_ARRAY(B_outputFromGpu));
#else //prevent dead code elimination
polybench_prevent_dce(print_array(ni, nj, POLYBENCH_ARRAY(B_outputFromGpu)));
#endif //RUN_ON_CPU
cl_clean_up();
POLYBENCH_FREE_ARRAY(A);
POLYBENCH_FREE_ARRAY(B);
POLYBENCH_FREE_ARRAY(B_outputFromGpu);
return 0;
}
}

View File

@@ -0,0 +1,35 @@
/**
* 2DConvolution.cl: This file is part of the PolyBench/GPU 1.0 test suite.
*
*
* Contact: Scott Grauer-Gray <sgrauerg@gmail.com>
* Will Killian <killian@udel.edu>
* Louis-Noel Pouchet <pouchet@cse.ohio-state.edu>
* Web address: http://www.cse.ohio-state.edu/~pouchet/software/polybench/GPU
*/
#if defined(cl_khr_fp64) // Khronos extension available?
#pragma OPENCL EXTENSION cl_khr_fp64 : enable
#elif defined(cl_amd_fp64) // AMD extension available?
#pragma OPENCL EXTENSION cl_amd_fp64 : enable
#endif
/* Can switch DATA_TYPE between float and double */
typedef float DATA_TYPE;
__kernel void Convolution2D_kernel(__global DATA_TYPE *A, __global DATA_TYPE *B, int ni, int nj)
{
int j = get_global_id(0);
int i = get_global_id(1);
DATA_TYPE c11, c12, c13, c21, c22, c23, c31, c32, c33;
c11 = +0.2; c21 = +0.5; c31 = -0.8;
c12 = -0.3; c22 = +0.6; c32 = -0.9;
c13 = +0.4; c23 = +0.7; c33 = +0.10;
if ((i < (ni-1)) && (j < (nj - 1)) && (i > 0) && (j > 0))
{
B[i*nj + j] = c11 * A[(i - 1) * nj + (j - 1)] + c21 * A[(i - 1) * nj + (j + 0)] + c31 * A[(i - 1) * nj + (j + 1)]
+ c12 * A[(i + 0) * nj + (j - 1)] + c22 * A[(i + 0) * nj + (j + 0)] + c32 * A[(i + 0) * nj + (j + 1)]
+ c13 * A[(i + 1) * nj + (j - 1)] + c23 * A[(i + 1) * nj + (j + 0)] + c33 * A[(i + 1) * nj + (j + 1)];
}
}

View File

@@ -0,0 +1,61 @@
/**
* 2DConvolution.h: This file is part of the PolyBench/GPU 1.0 test suite.
*
*
* Contact: Scott Grauer-Gray <sgrauerg@gmail.com>
* Will Killian <killian@udel.edu>
* Louis-Noel Pouchet <pouchet@cse.ohio-state.edu>
* Web address: http://www.cse.ohio-state.edu/~pouchet/software/polybench/GPU
*/
#ifndef TWODCONV_H
# define TWODCONV_H
/* Default to STANDARD_DATASET. */
# if !defined(MINI_DATASET) && !defined(SMALL_DATASET) && !defined(LARGE_DATASET) && !defined(EXTRALARGE_DATASET)
# define MINI_DATASET
# endif
/* Do not define anything if the user manually defines the size. */
# if !defined(NI) && !defined(NJ)
/* Define the possible dataset sizes. */
# ifdef MINI_DATASET
#define NI 1024
#define NJ 1024
# endif
# ifdef SMALL_DATASET
#define NI 2048
#define NJ 2048
# endif
# ifdef STANDARD_DATASET /* Default if unspecified. */
#define NI 4096
#define NJ 4096
# endif
# ifdef LARGE_DATASET
#define NI 8192
#define NJ 8192
# endif
# ifdef EXTRALARGE_DATASET
#define NI 16384
#define NJ 16384
# endif
# endif /* !N */
# define _PB_NI POLYBENCH_LOOP_BOUND(NI,ni)
# define _PB_NJ POLYBENCH_LOOP_BOUND(NJ,nj)
# ifndef DATA_TYPE
# define DATA_TYPE float
# define DATA_PRINTF_MODIFIER "%0.2lf "
# endif
/* Thread block dimensions */
#define DIM_LOCAL_WORK_GROUP_X 32
#define DIM_LOCAL_WORK_GROUP_Y 8
#endif /* !TWODCONV*/

View File

@@ -0,0 +1,255 @@
unsigned char __2DConvolution_Gen9core_gen[] = {
0x43, 0x54, 0x4e, 0x49, 0x39, 0x04, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x7c, 0xf4, 0x52, 0xd4, 0xe9, 0x80, 0xcb, 0x2d,
0x49, 0x0f, 0x54, 0x67, 0x18, 0x00, 0x00, 0x00, 0x08, 0x05, 0x00, 0x00,
0xc0, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
0x88, 0x00, 0x00, 0x00, 0x18, 0x05, 0x00, 0x00, 0x43, 0x6f, 0x6e, 0x76,
0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x32, 0x44, 0x5f, 0x6b, 0x65,
0x72, 0x6e, 0x65, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x60, 0x00,
0x0c, 0x02, 0xa0, 0x20, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00,
0x06, 0x80, 0x00, 0x00, 0x04, 0x00, 0x00, 0x30, 0x00, 0x10, 0x00, 0x16,
0xc0, 0x04, 0xc0, 0x04, 0x41, 0x80, 0x2d, 0x20, 0x00, 0x7e, 0x09, 0x05,
0x41, 0x00, 0x00, 0x00, 0x2c, 0x0a, 0xc0, 0x20, 0x24, 0x01, 0x00, 0x0a,
0xb8, 0x00, 0x00, 0x00, 0x40, 0x00, 0x20, 0x00, 0x2c, 0x0a, 0xd0, 0x20,
0x10, 0x01, 0x45, 0x1e, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00,
0x4c, 0x16, 0xc4, 0x2f, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x2f, 0xc0, 0x0f, 0x00, 0x12,
0x40, 0x00, 0xb1, 0x00, 0x40, 0x00, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x21,
0xc0, 0x0f, 0x00, 0x12, 0x20, 0x00, 0xb1, 0x00, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0xc0, 0x21, 0xc0, 0x00, 0x00, 0x12, 0x80, 0x00, 0xb1, 0x00,
0x40, 0x00, 0x80, 0x00, 0x28, 0x0a, 0x00, 0x2f, 0xc0, 0x00, 0x00, 0x12,
0x60, 0x00, 0xb1, 0x00, 0x40, 0x20, 0x80, 0x03, 0x28, 0x0a, 0x40, 0x2f,
0x80, 0x0f, 0x8d, 0x0a, 0xe0, 0x00, 0x00, 0x00, 0x40, 0x96, 0x01, 0x20,
0x07, 0x0c, 0x0a, 0x07, 0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x00, 0x22,
0xc0, 0x01, 0x8d, 0x0a, 0xe4, 0x00, 0x00, 0x00, 0x40, 0x96, 0x2d, 0x20,
0x07, 0x76, 0x78, 0x07, 0x10, 0x20, 0x80, 0x05, 0x22, 0x0a, 0x00, 0x20,
0x40, 0x0f, 0x8d, 0x0a, 0xd4, 0x00, 0x00, 0x00, 0x10, 0x16, 0x73, 0x25,
0x07, 0x00, 0x0c, 0x06, 0x02, 0x20, 0x81, 0x00, 0x48, 0x12, 0x40, 0x2a,
0xc4, 0x0f, 0x00, 0x16, 0x00, 0x00, 0x00, 0x00, 0x10, 0x20, 0x81, 0x05,
0x22, 0x0a, 0x00, 0x20, 0x00, 0x02, 0x8d, 0x0a, 0xd0, 0x00, 0x00, 0x00,
0x10, 0x19, 0x6f, 0x25, 0x07, 0x00, 0x76, 0x06, 0x10, 0x20, 0x81, 0x03,
0x22, 0x0a, 0x00, 0x20, 0x00, 0x02, 0x8d, 0x1e, 0x00, 0x00, 0x00, 0x00,
0x10, 0x00, 0x81, 0x03, 0x20, 0x0a, 0x00, 0x20, 0xc0, 0x0e, 0x8d, 0x1e,
0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x81, 0x00, 0x4a, 0x12, 0x00, 0x28,
0xc4, 0x0f, 0x00, 0x16, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x81, 0x03,
0x20, 0x0a, 0x00, 0x20, 0x80, 0x01, 0x8d, 0x1e, 0x00, 0x00, 0x00, 0x00,
0x05, 0x20, 0x80, 0x02, 0x40, 0x12, 0x00, 0x20, 0x40, 0x0a, 0xb1, 0x12,
0x00, 0x08, 0xb1, 0x00, 0x22, 0x00, 0xa1, 0x00, 0x00, 0x0e, 0x00, 0x20,
0x98, 0x03, 0x00, 0x00, 0x98, 0x03, 0x00, 0x00, 0x40, 0x00, 0x80, 0x00,
0x28, 0x0a, 0x80, 0x2e, 0xc0, 0x0e, 0x8d, 0x1e, 0xff, 0xff, 0xff, 0xff,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x22, 0x00, 0x02, 0x8d, 0x1e,
0xff, 0xff, 0xff, 0xff, 0x40, 0x00, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x2e,
0x80, 0x01, 0x8d, 0x1e, 0xff, 0xff, 0xff, 0xff, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x80, 0x22, 0x40, 0x0f, 0x8d, 0x1e, 0xff, 0xff, 0xff, 0xff,
0x41, 0x96, 0x71, 0x20, 0x07, 0x74, 0x74, 0x08, 0x41, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x40, 0x22, 0x40, 0x02, 0x8d, 0x0a, 0x14, 0x01, 0x00, 0x00,
0x41, 0x96, 0x71, 0x20, 0x07, 0x26, 0x76, 0x08, 0x41, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x60, 0x2d, 0x00, 0x02, 0x8d, 0x0a, 0x14, 0x01, 0x00, 0x00,
0x40, 0x96, 0x01, 0x20, 0xe7, 0x74, 0x74, 0x72, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x40, 0x22, 0x40, 0x02, 0x8d, 0x0a, 0x80, 0x02, 0x8d, 0x00,
0x40, 0x96, 0x01, 0x20, 0xe7, 0x28, 0x26, 0x72, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x20, 0x2d, 0x60, 0x0d, 0x8d, 0x0a, 0x80, 0x02, 0x8d, 0x00,
0x09, 0x00, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x2e, 0x80, 0x0e, 0x8d, 0x1e,
0x02, 0x00, 0x02, 0x00, 0x09, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x22,
0x40, 0x02, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00, 0x40, 0x00, 0x80, 0x00,
0x28, 0x0a, 0xe0, 0x2a, 0xc0, 0x0e, 0x8d, 0x1e, 0x01, 0x00, 0x01, 0x00,
0x09, 0x00, 0x80, 0x00, 0x28, 0x0a, 0x00, 0x25, 0x00, 0x05, 0x8d, 0x1e,
0x02, 0x00, 0x02, 0x00, 0x40, 0x96, 0x75, 0x20, 0x07, 0x74, 0x74, 0x08,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x22, 0x40, 0x02, 0x8d, 0x0a,
0x18, 0x01, 0x00, 0x00, 0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0xc0, 0x25,
0x00, 0x02, 0x8d, 0x1e, 0x01, 0x00, 0x01, 0x00, 0x09, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x20, 0x2d, 0x20, 0x0d, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00,
0x31, 0x00, 0x80, 0x0c, 0x68, 0x02, 0xc0, 0x22, 0x80, 0x0e, 0x00, 0x06,
0x00, 0x58, 0x60, 0x04, 0x41, 0x96, 0x71, 0x20, 0x07, 0x57, 0x57, 0x08,
0x31, 0x20, 0x80, 0x0c, 0x68, 0x02, 0x80, 0x23, 0x40, 0x02, 0x00, 0x06,
0x00, 0x58, 0x60, 0x04, 0x40, 0x96, 0x75, 0x20, 0x07, 0x28, 0x28, 0x08,
0x41, 0x20, 0x80, 0x00, 0x28, 0x0a, 0xc0, 0x25, 0xc0, 0x05, 0x8d, 0x0a,
0x14, 0x01, 0x00, 0x00, 0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x20, 0x2d,
0x20, 0x0d, 0x8d, 0x0a, 0x18, 0x01, 0x00, 0x00, 0x40, 0x96, 0x01, 0x20,
0xe7, 0x57, 0x57, 0x72, 0x31, 0x00, 0x80, 0x0c, 0x68, 0x02, 0x60, 0x2c,
0x00, 0x05, 0x00, 0x06, 0x00, 0x58, 0x60, 0x04, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0xc0, 0x25, 0xc0, 0x05, 0x8d, 0x0a, 0x80, 0x02, 0x8d, 0x00,
0x31, 0x20, 0x80, 0x0c, 0x68, 0x02, 0xa0, 0x2b, 0x20, 0x0d, 0x00, 0x06,
0x00, 0x58, 0x60, 0x04, 0x09, 0x00, 0x80, 0x00, 0x28, 0x0a, 0xe0, 0x2a,
0xe0, 0x0a, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00,
0xec, 0x3e, 0xe0, 0x2d, 0x00, 0x00, 0x00, 0x00, 0xcd, 0xcc, 0x4c, 0x3e,
0x09, 0x20, 0x80, 0x00, 0x28, 0x0a, 0xc0, 0x25, 0xc0, 0x05, 0x8d, 0x1e,
0x02, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0xec, 0x3e, 0xe4, 0x2d,
0x00, 0x00, 0x00, 0x00, 0xcd, 0xcc, 0x4c, 0xbf, 0x01, 0x00, 0x00, 0x00,
0xec, 0x3e, 0xc4, 0x20, 0x00, 0x00, 0x00, 0x00, 0x9a, 0x99, 0x99, 0xbe,
0x40, 0x96, 0x75, 0x20, 0x07, 0x57, 0x57, 0x08, 0x01, 0x00, 0x00, 0x00,
0xec, 0x3e, 0xc8, 0x20, 0x00, 0x00, 0x00, 0x00, 0x9a, 0x99, 0x19, 0x3f,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0xc0, 0x25, 0xc0, 0x05, 0x8d, 0x0a,
0x18, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xec, 0x3e, 0xcc, 0x20,
0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0xbf, 0x01, 0x00, 0x00, 0x00,
0xec, 0x3e, 0xe8, 0x2d, 0x00, 0x00, 0x00, 0x00, 0xcd, 0xcc, 0xcc, 0x3e,
0x31, 0x00, 0x80, 0x0c, 0x68, 0x02, 0x00, 0x26, 0xe0, 0x0a, 0x00, 0x06,
0x00, 0x58, 0x60, 0x04, 0x01, 0x00, 0x00, 0x00, 0xec, 0x3e, 0xec, 0x2d,
0x00, 0x00, 0x00, 0x00, 0x33, 0x33, 0x33, 0x3f, 0x31, 0x20, 0x80, 0x0c,
0x68, 0x02, 0xc0, 0x26, 0xc0, 0x05, 0x00, 0x06, 0x00, 0x58, 0x60, 0x04,
0x40, 0x96, 0x01, 0x20, 0xe7, 0x3e, 0x26, 0x0c, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x60, 0x2a, 0x60, 0x0d, 0x8d, 0x0a, 0x40, 0x0f, 0x8d, 0x00,
0x01, 0x00, 0x00, 0x00, 0xec, 0x3e, 0xf0, 0x2d, 0x00, 0x00, 0x00, 0x00,
0xcd, 0xcc, 0xcc, 0x3d, 0x09, 0x00, 0x80, 0x00, 0x28, 0x0a, 0xc0, 0x27,
0xc0, 0x07, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00, 0x09, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x60, 0x2a, 0x60, 0x0a, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00,
0x40, 0x96, 0x79, 0x20, 0x07, 0x3e, 0x3e, 0x08, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x60, 0x2a, 0x60, 0x0a, 0x8d, 0x0a, 0x1c, 0x01, 0x00, 0x00,
0x41, 0x00, 0x80, 0x00, 0xe8, 0x3a, 0x00, 0x2e, 0x00, 0x03, 0x8d, 0x3e,
0x00, 0x00, 0x00, 0x3f, 0x41, 0x20, 0x80, 0x00, 0xe8, 0x3a, 0x40, 0x24,
0xc0, 0x03, 0x8d, 0x3e, 0x00, 0x00, 0x00, 0x3f, 0x5b, 0x02, 0x07, 0x20,
0x02, 0x80, 0x5b, 0xde, 0x5b, 0x23, 0x02, 0x20, 0x02, 0x10, 0x71, 0xde,
0x5b, 0x42, 0x02, 0x20, 0x02, 0x81, 0x6b, 0xde, 0x5b, 0xd3, 0x06, 0x20,
0x02, 0x11, 0x81, 0xde, 0x5b, 0xa2, 0x02, 0x20, 0x02, 0x21, 0x8d, 0x0d,
0x5b, 0xb3, 0x05, 0x20, 0x02, 0x69, 0x77, 0x0d, 0x5b, 0xa2, 0x02, 0x20,
0x02, 0x52, 0x95, 0x0d, 0x5b, 0xb3, 0x05, 0x20, 0x02, 0xda, 0x7e, 0x0d,
0x5b, 0x92, 0x05, 0x20, 0x02, 0x53, 0x9d, 0x0d, 0x5b, 0xc3, 0x02, 0x20,
0x02, 0xdb, 0x86, 0x0d, 0x5b, 0x52, 0x05, 0x20, 0x02, 0xca, 0xc2, 0xde,
0x5b, 0xc3, 0x03, 0x20, 0x02, 0x62, 0xd9, 0xde, 0x5b, 0x52, 0x05, 0x20,
0x02, 0xab, 0xca, 0xde, 0x5b, 0xc3, 0x03, 0x20, 0x02, 0xe3, 0xe1, 0xde,
0x5b, 0x52, 0x05, 0x20, 0x02, 0xac, 0xd2, 0xde, 0x5b, 0xc3, 0x03, 0x20,
0x02, 0xe4, 0xe9, 0xde, 0x33, 0x00, 0x80, 0x0c, 0x70, 0x50, 0x05, 0x00,
0xc2, 0x07, 0x00, 0x00, 0x01, 0x5e, 0x02, 0x04, 0x33, 0x20, 0x80, 0x0c,
0x70, 0xc0, 0x03, 0x00, 0x62, 0x0a, 0x00, 0x00, 0x01, 0x5e, 0x02, 0x04,
0x25, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x0e,
0x10, 0x00, 0x00, 0x00, 0x01, 0x4d, 0x00, 0x20, 0x07, 0x7f, 0x05, 0x00,
0x31, 0x00, 0x60, 0x07, 0x04, 0x02, 0x00, 0x20, 0xe0, 0x0f, 0x00, 0x06,
0x10, 0x00, 0x00, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
0x00, 0xc0, 0xff, 0x83, 0x00, 0x00, 0x00, 0x03, 0x7f, 0x00, 0xff, 0x1f,
0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x83, 0x00, 0x00, 0x00, 0x03,
0x7f, 0x00, 0xff, 0x1f, 0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x40, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x80, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00,
0x80, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x14, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x2b, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x38, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x44, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
0x34, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
0x19, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00,
0x16, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x1b, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x5f, 0x5f, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x00, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00,
0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x2a, 0x3b, 0x38,
0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x1a, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x67, 0x6c,
0x6f, 0x62, 0x61, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x44, 0x41, 0x54, 0x41,
0x5f, 0x54, 0x59, 0x50, 0x45, 0x2a, 0x3b, 0x38, 0x00, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00,
0x48, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74,
0x65, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x6e, 0x69, 0x00, 0x00, 0x69, 0x6e, 0x74, 0x3b, 0x34, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00,
0x48, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74,
0x65, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x6e, 0x6a, 0x00, 0x00, 0x69, 0x6e, 0x74, 0x3b, 0x34, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00
};
unsigned int __2DConvolution_Gen9core_gen_len = 3020;

View File

@@ -0,0 +1,344 @@
/**
* 3DConvolution.c: This file is part of the PolyBench/GPU 1.0 test suite.
*
*
* Contact: Scott Grauer-Gray <sgrauerg@gmail.com>
* Will Killian <killian@udel.edu>
* Louis-Noel Pouchet <pouchet@cse.ohio-state.edu>
* Web address: http://www.cse.ohio-state.edu/~pouchet/software/polybench/GPU
*/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <sys/time.h>
#include <math.h>
#ifdef __APPLE__
#include <OpenCL/opencl.h>
#else
#include "../../CL/cl.h"
#endif
#define POLYBENCH_TIME 1
//select the OpenCL device to use (can be GPU, CPU, or Accelerator such as Intel Xeon Phi)
#define OPENCL_DEVICE_SELECTION CL_DEVICE_TYPE_GPU
#include "3DConvolution.h"
#include "../../polybench.h"
//define the error threshold for the results "not matching"
#define PERCENT_DIFF_ERROR_THRESHOLD 1.05
#define MAX_SOURCE_SIZE (0x100000)
#if defined(cl_khr_fp64) // Khronos extension available?
#pragma OPENCL EXTENSION cl_khr_fp64 : enable
#elif defined(cl_amd_fp64) // AMD extension available?
#pragma OPENCL EXTENSION cl_amd_fp64 : enable
#endif
namespace ns_convolution_3d {
#include "3DConvolution_kernel.h"
#include "../../polybenchUtilFuncts.h"
char str_temp[1024];
cl_platform_id platform_id;
cl_device_id device_id;
cl_uint num_devices;
cl_uint num_platforms;
cl_int errcode;
cl_context clGPUContext;
cl_kernel clKernel;
cl_command_queue clCommandQue;
cl_program clProgram;
cl_mem a_mem_obj;
cl_mem b_mem_obj;
FILE *fp;
char *source_str;
size_t source_size;
#define RUN_ON_CPU
void read_cl_file()
{
// Load the kernel source code into the array source_str
// fp = fopen("3DConvolution.cl", "r");
// if (!fp) {
// fprintf(stderr, "Failed to load kernel.\n");
// exit(1);
// }
// source_str = (char*)malloc(MAX_SOURCE_SIZE);
// source_size = fread( source_str, 1, MAX_SOURCE_SIZE, fp);
// fclose( fp );
}
void init(int ni, int nj, int nk, DATA_TYPE POLYBENCH_3D(A, NI, NJ, NK, ni, nj, nk))
{
int i, j, k;
for (i = 0; i < ni; ++i)
{
for (j = 0; j < nj; ++j)
{
for (k = 0; k < nk; ++k)
{
A[i][j][k] = i % 12 + 2 * (j % 7) + 3 * (k % 13);
}
}
}
}
void cl_initialization()
{
// Get platform and device information
errcode = clGetPlatformIDs(1, &platform_id, &num_platforms);
if(errcode == CL_SUCCESS) printf("number of platforms is %d\n",num_platforms);
else printf("Error getting platform IDs\n");
errcode = clGetPlatformInfo(platform_id,CL_PLATFORM_NAME, sizeof(str_temp), str_temp,NULL);
if(errcode == CL_SUCCESS) printf("platform name is %s\n",str_temp);
else printf("Error getting platform name\n");
errcode = clGetPlatformInfo(platform_id, CL_PLATFORM_VERSION, sizeof(str_temp), str_temp,NULL);
if(errcode == CL_SUCCESS) printf("platform version is %s\n",str_temp);
else printf("Error getting platform version\n");
errcode = clGetDeviceIDs( platform_id, OPENCL_DEVICE_SELECTION, 1, &device_id, &num_devices);
if(errcode == CL_SUCCESS) printf("number of devices is %d\n", num_devices);
else printf("Error getting device IDs\n");
errcode = clGetDeviceInfo(device_id,CL_DEVICE_NAME, sizeof(str_temp), str_temp,NULL);
if(errcode == CL_SUCCESS) printf("device name is %s\n",str_temp);
else printf("Error getting device name\n");
// Create an OpenCL context
clGPUContext = clCreateContext( NULL, 1, &device_id, NULL, NULL, &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating context\n");
//Create a command-queue
clCommandQue = clCreateCommandQueue(clGPUContext, device_id, 0, &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating command queue\n");
}
void cl_mem_init(DATA_TYPE POLYBENCH_3D(A, NI, NJ, NK, ni, nj, nk), DATA_TYPE POLYBENCH_3D(B, NI, NJ, NK, ni, nj, nk))
{
a_mem_obj = clCreateBuffer(clGPUContext, CL_MEM_READ_ONLY, sizeof(DATA_TYPE) * NI * NJ * NK, NULL, &errcode);
b_mem_obj = clCreateBuffer(clGPUContext, CL_MEM_READ_WRITE, sizeof(DATA_TYPE) * NI * NJ * NK, NULL, &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating buffers\n");
errcode = clEnqueueWriteBuffer(clCommandQue, a_mem_obj, CL_TRUE, 0, sizeof(DATA_TYPE) * NI * NJ * NK, A, 0, NULL, NULL);
errcode = clEnqueueWriteBuffer(clCommandQue, b_mem_obj, CL_TRUE, 0, sizeof(DATA_TYPE) * NI * NJ * NK, B, 0, NULL, NULL);
if(errcode != CL_SUCCESS)printf("Error in writing buffers\n");
}
void cl_load_prog()
{
// Create a program from the kernel source
const size_t kernel_size = __3DConvolution_Gen9core_gen_len;
const unsigned char* kernel_bin = __3DConvolution_Gen9core_gen;
clProgram = clCreateProgramWithBinary(clGPUContext, 1, &device_id, &kernel_size, &kernel_bin, NULL, &errcode);
// clProgram = clCreateProgramWithSource(clGPUContext, 1, (const char **)&source_str, (const size_t *)&source_size, &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating program\n");
// Build the program
errcode = clBuildProgram(clProgram, 1, &device_id, NULL, NULL, NULL);
if(errcode != CL_SUCCESS) printf("Error in building program\n");
// Create the OpenCL kernel
clKernel = clCreateKernel(clProgram, "Convolution3D_kernel", &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating kernel\n");
clFinish(clCommandQue);
}
void cl_launch_kernel(int ni, int nj, int nk)
{
size_t localWorkSize[2], globalWorkSize[2];
localWorkSize[0] = DIM_LOCAL_WORK_GROUP_X;
localWorkSize[1] = DIM_LOCAL_WORK_GROUP_Y;
globalWorkSize[0] = (size_t)ceil(((float)NK) / ((float)DIM_LOCAL_WORK_GROUP_X)) * DIM_LOCAL_WORK_GROUP_X;
globalWorkSize[1] = (size_t)ceil(((float)NJ) / ((float)DIM_LOCAL_WORK_GROUP_Y)) * DIM_LOCAL_WORK_GROUP_Y;
/* Start timer. */
polybench_start_instruments;
// Set the arguments of the kernel
errcode = clSetKernelArg(clKernel, 0, sizeof(cl_mem), (void *)&a_mem_obj);
errcode |= clSetKernelArg(clKernel, 1, sizeof(cl_mem), (void *)&b_mem_obj);
errcode |= clSetKernelArg(clKernel, 2, sizeof(int), &ni);
errcode |= clSetKernelArg(clKernel, 3, sizeof(int), &nj);
errcode |= clSetKernelArg(clKernel, 4, sizeof(int), &nk);
if(errcode != CL_SUCCESS) printf("Error in seting arguments\n");
int i;
for (i = 1; i < NI - 1; ++i) // 0
{
// set the current value of 'i' for the argument in the kernel
errcode |= clSetKernelArg(clKernel, 5, sizeof(int), &i);
// Execute the OpenCL kernel
errcode = clEnqueueNDRangeKernel(clCommandQue, clKernel, 2, NULL, globalWorkSize, localWorkSize, 0, NULL, NULL);
}
if(errcode != CL_SUCCESS) printf("Error in launching kernel\n");
clFinish(clCommandQue);
/* Stop and print timer. */
printf("GPU Time in seconds:\n");
polybench_stop_instruments;
polybench_print_instruments;
}
void cl_clean_up()
{
// Clean up
errcode = clFlush(clCommandQue);
errcode = clFinish(clCommandQue);
errcode = clReleaseKernel(clKernel);
errcode = clReleaseProgram(clProgram);
errcode = clReleaseMemObject(a_mem_obj);
errcode = clReleaseMemObject(b_mem_obj);
errcode = clReleaseCommandQueue(clCommandQue);
errcode = clReleaseContext(clGPUContext);
if(errcode != CL_SUCCESS) printf("Error in cleanup\n");
}
void compareResults(int ni, int nj, int nk, DATA_TYPE POLYBENCH_3D(B, NI, NJ, NK, ni, nj, nk), DATA_TYPE POLYBENCH_3D(B_outputFromGpu, NI, NJ, NK, ni, nj, nk))
{
int i, j, k, fail;
fail = 0;
// Compare result from cpu and gpu
for (i = 1; i < ni - 1; ++i) // 0
{
for (j = 1; j < nj - 1; ++j) // 1
{
for (k = 1; k < nk - 1; ++k) // 2
{
if (percentDiff(B[i][j][k], B_outputFromGpu[i][j][k]) > PERCENT_DIFF_ERROR_THRESHOLD)
{
fail++;
}
}
}
}
// Print results
printf("Non-Matching CPU-GPU Outputs Beyond Error Threshold of %4.2f Percent: %d\n", PERCENT_DIFF_ERROR_THRESHOLD, fail);
}
void conv3D(int ni, int nj, int nk, DATA_TYPE POLYBENCH_3D(A, NI, NJ, NK, ni, nj, nk), DATA_TYPE POLYBENCH_3D(B, NI, NJ, NK, ni, nj, nk))
{
int i, j, k;
DATA_TYPE c11, c12, c13, c21, c22, c23, c31, c32, c33;
c11 = +2; c21 = +5; c31 = -8;
c12 = -3; c22 = +6; c32 = -9;
c13 = +4; c23 = +7; c33 = +10;
for (i = 1; i < _PB_NI - 1; ++i) // 0
{
for (j = 1; j < _PB_NJ - 1; ++j) // 1
{
for (k = 1; k < _PB_NK -1; ++k) // 2
{
B[i][j][k] = c11 * A[(i - 1)][(j - 1)][(k - 1)] + c13 * A[(i + 1)][(j - 1)][(k - 1)]
+ c21 * A[(i - 1)][(j - 1)][(k - 1)] + c23 * A[(i + 1)][(j - 1)][(k - 1)]
+ c31 * A[(i - 1)][(j - 1)][(k - 1)] + c33 * A[(i + 1)][(j - 1)][(k - 1)]
+ c12 * A[(i + 0)][(j - 1)][(k + 0)] + c22 * A[(i + 0)][(j + 0)][(k + 0)]
+ c32 * A[(i + 0)][(j + 1)][(k + 0)] + c11 * A[(i - 1)][(j - 1)][(k + 1)]
+ c13 * A[(i + 1)][(j - 1)][(k + 1)] + c21 * A[(i - 1)][(j + 0)][(k + 1)]
+ c23 * A[(i + 1)][(j + 0)][(k + 1)] + c31 * A[(i - 1)][(j + 1)][(k + 1)]
+ c33 * A[(i + 1)][(j + 1)][(k + 1)];
}
}
}
}
/* DCE code. Must scan the entire live-out data.
Can be used also to check the correctness of the output. */
static
void print_array(int ni, int nj, int nk,
DATA_TYPE POLYBENCH_3D(B,NI,NJ,NK,ni,nj,nk))
{
int i, j, k;
for (i = 0; i < ni; i++)
for (j = 0; j < nj; j++)
for (k = 0; k < nk; k++)
{
fprintf (stderr, DATA_PRINTF_MODIFIER, B[i][j][k]);
if ((i * (nj*nk) + j*nk + k) % 20 == 0) fprintf (stderr, "\n");
}
fprintf (stderr, "\n");
}
int main(int argc, char *argv[])
{
int ni = NI;
int nj = NJ;
int nk = NK;
POLYBENCH_3D_ARRAY_DECL(A,DATA_TYPE,NI,NJ,NK,ni,nj,nk);
POLYBENCH_3D_ARRAY_DECL(B,DATA_TYPE,NI,NJ,NK,ni,nj,nk);
POLYBENCH_3D_ARRAY_DECL(B_outputFromGpu,DATA_TYPE,NI,NJ,NK,ni,nj,nk);
init(ni, nj, nk, POLYBENCH_ARRAY(A));
read_cl_file();
cl_initialization();
cl_mem_init(POLYBENCH_ARRAY(A), POLYBENCH_ARRAY(B));
cl_load_prog();
cl_launch_kernel(ni, nj, nk);
errcode = clEnqueueReadBuffer(clCommandQue, b_mem_obj, CL_TRUE, 0, NI * NJ * NK * sizeof(DATA_TYPE), POLYBENCH_ARRAY(B_outputFromGpu), 0, NULL, NULL);
if(errcode != CL_SUCCESS) printf("Error in reading GPU mem\n");
#ifdef RUN_ON_CPU
/* Start timer. */
polybench_start_instruments;
conv3D(ni, nj, nk, POLYBENCH_ARRAY(A), POLYBENCH_ARRAY(B));
/* Stop and print timer. */
printf("CPU Time in seconds:\n");
polybench_stop_instruments;
polybench_print_instruments;
compareResults(ni, nj, nk, POLYBENCH_ARRAY(B), POLYBENCH_ARRAY(B_outputFromGpu));
#else //prevent dead code elimination
polybench_prevent_dce(print_array(ni, nj, nk, POLYBENCH_ARRAY(B_outputFromGpu)));
#endif //RUN_ON_CPU
cl_clean_up();
POLYBENCH_FREE_ARRAY(A);
POLYBENCH_FREE_ARRAY(B);
POLYBENCH_FREE_ARRAY(B_outputFromGpu);
return 0;
}
}

View File

@@ -0,0 +1,46 @@
/**
* 3DConvolution.cl: This file is part of the PolyBench/GPU 1.0 test suite.
*
*
* Contact: Scott Grauer-Gray <sgrauerg@gmail.com>
* Will Killian <killian@udel.edu>
* Louis-Noel Pouchet <pouchet@cse.ohio-state.edu>
* Web address: http://www.cse.ohio-state.edu/~pouchet/software/polybench/GPU
*/
#if defined(cl_khr_fp64) // Khronos extension available?
#pragma OPENCL EXTENSION cl_khr_fp64 : enable
#elif defined(cl_amd_fp64) // AMD extension available?
#pragma OPENCL EXTENSION cl_amd_fp64 : enable
#endif
typedef float DATA_TYPE;
__kernel void Convolution3D_kernel(__global DATA_TYPE *A, __global DATA_TYPE *B, int ni, int nj, int nk, int i)
{
int k = get_global_id(0);
int j = get_global_id(1);
DATA_TYPE c11, c12, c13, c21, c22, c23, c31, c32, c33;
c11 = +2; c21 = +5; c31 = -8;
c12 = -3; c22 = +6; c32 = -9;
c13 = +4; c23 = +7; c33 = +10;
// Do the operation
if ((i < (ni - 1)) && (j < (nj - 1)) && (k < (nk - 1)) && (i > 0) && (j > 0) && (k > 0))
{
B[i*(nk * nj) + j*nk + k] = c11 * A[(i - 1)*(nk * nj) + (j - 1)*nk + (k - 1)] + c13 * A[(i + 1)*(nk * nj) + (j - 1)*nk + (k - 1)]
+ c21 * A[(i - 1)*(nk * nj) + (j - 1)*nk + (k - 1)] + c23 * A[(i + 1)*(nk * nj) + (j - 1)*nk + (k - 1)]
+ c31 * A[(i - 1)*(nk * nj) + (j - 1)*nk + (k - 1)] + c33 * A[(i + 1)*(nk * nj) + (j - 1)*nk + (k - 1)]
+ c12 * A[(i + 0)*(nk * nj) + (j - 1)*nk + (k + 0)] + c22 * A[(i + 0)*(nk * nj) + (j + 0)*nk + (k + 0)]
+ c32 * A[(i + 0)*(nk * nj) + (j + 1)*nk + (k + 0)] + c11 * A[(i - 1)*(nk * nj) + (j - 1)*nk + (k + 1)]
+ c13 * A[(i + 1)*(nk * nj) + (j - 1)*nk + (k + 1)] + c21 * A[(i - 1)*(nk * nj) + (j + 0)*nk + (k + 1)]
+ c23 * A[(i + 1)*(nk * nj) + (j + 0)*nk + (k + 1)] + c31 * A[(i - 1)*(nk * nj) + (j + 1)*nk + (k + 1)]
+ c33 * A[(i + 1)*(nk * nj) + (j + 1)*nk + (k + 1)];
}
else
{
B[i*(nk * nj) + j*nk + k] = 0;
}
}

View File

@@ -0,0 +1,67 @@
/**
* 3DConvolution.h: This file is part of the PolyBench/GPU 1.0 test suite.
*
*
* Contact: Scott Grauer-Gray <sgrauerg@gmail.com>
* Will Killian <killian@udel.edu>
* Louis-Noel Pouchet <pouchet@cse.ohio-state.edu>
* Web address: http://www.cse.ohio-state.edu/~pouchet/software/polybench/GPU
*/
#ifndef THREEDCONV_H
# define THREEDCONV_H
/* Default to STANDARD_DATASET. */
# if !defined(MINI_DATASET) && !defined(SMALL_DATASET) && !defined(LARGE_DATASET) && !defined(EXTRALARGE_DATASET)
# define MINI_DATASET
# endif
/* Do not define anything if the user manually defines the size. */
# if !defined(NI) && !defined(NJ) && !defined(NK)
/* Define the possible dataset sizes. */
# ifdef MINI_DATASET
#define NI 64
#define NJ 64
#define NK 64
# endif
# ifdef SMALL_DATASET
#define NI 128
#define NJ 128
#define NK 128
# endif
# ifdef STANDARD_DATASET /* Default if unspecified. */
#define NI 256
#define NJ 256
#define NK 256
# endif
# ifdef LARGE_DATASET
#define NI 384
#define NJ 384
#define NK 384
# endif
# ifdef EXTRALARGE_DATASET
#define NI 512
#define NJ 512
#define NK 512
# endif
# endif /* !N */
# define _PB_NI POLYBENCH_LOOP_BOUND(NI,ni)
# define _PB_NJ POLYBENCH_LOOP_BOUND(NJ,nj)
# define _PB_NK POLYBENCH_LOOP_BOUND(NK,nk)
# ifndef DATA_TYPE
# define DATA_TYPE float
# define DATA_PRINTF_MODIFIER "%0.2lf "
# endif
/* Thread block dimensions */
#define DIM_LOCAL_WORK_GROUP_X 32
#define DIM_LOCAL_WORK_GROUP_Y 8
#endif /* !THREEDCONV*/

View File

@@ -0,0 +1,386 @@
unsigned char __3DConvolution_Gen9core_gen[] = {
0x43, 0x54, 0x4e, 0x49, 0x39, 0x04, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xce, 0xba, 0xf2, 0xc5, 0x10, 0x6a, 0x77, 0x25,
0x5e, 0xbd, 0x8b, 0xef, 0x18, 0x00, 0x00, 0x00, 0xe8, 0x05, 0x00, 0x00,
0x00, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
0x88, 0x00, 0x00, 0x00, 0x68, 0x0a, 0x00, 0x00, 0x43, 0x6f, 0x6e, 0x76,
0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x33, 0x44, 0x5f, 0x6b, 0x65,
0x72, 0x6e, 0x65, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x60, 0x00,
0x0c, 0x02, 0x80, 0x27, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00,
0x06, 0x80, 0x00, 0x00, 0x04, 0x00, 0x00, 0x30, 0x00, 0x10, 0x00, 0x16,
0xc0, 0x04, 0xc0, 0x04, 0x41, 0x00, 0x00, 0x00, 0x2c, 0x0a, 0xe0, 0x28,
0x2c, 0x01, 0x00, 0x0a, 0x98, 0x07, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00,
0x2c, 0x0a, 0xa0, 0x20, 0x28, 0x01, 0x00, 0x0a, 0x84, 0x07, 0x00, 0x00,
0x40, 0x00, 0x20, 0x00, 0x2c, 0x0a, 0x80, 0x29, 0x10, 0x01, 0x45, 0x1e,
0xff, 0xff, 0xff, 0xff, 0x40, 0x00, 0x00, 0x00, 0x2c, 0x0a, 0x80, 0x21,
0x18, 0x01, 0x00, 0x1e, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00,
0x4c, 0x16, 0xa0, 0x29, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x29, 0xe0, 0x08, 0x00, 0x12,
0x80, 0x00, 0xb1, 0x00, 0x40, 0x00, 0x80, 0x00, 0x28, 0x0a, 0x00, 0x29,
0xe0, 0x08, 0x00, 0x12, 0x60, 0x00, 0xb1, 0x00, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0xa0, 0x28, 0xa0, 0x00, 0x00, 0x12, 0x40, 0x00, 0xb1, 0x00,
0x40, 0x00, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x21, 0xa0, 0x00, 0x00, 0x12,
0x20, 0x00, 0xb1, 0x00, 0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0xe0, 0x27,
0x40, 0x09, 0x8d, 0x0a, 0xe4, 0x00, 0x00, 0x00, 0x40, 0x96, 0x2d, 0x20,
0x07, 0x41, 0x48, 0x07, 0x40, 0x20, 0x80, 0x03, 0x28, 0x0a, 0xa0, 0x27,
0xa0, 0x08, 0x8d, 0x0a, 0xe0, 0x00, 0x00, 0x00, 0x40, 0x96, 0x01, 0x20,
0x07, 0x43, 0x0a, 0x07, 0x10, 0x20, 0x80, 0x05, 0x22, 0x0a, 0x00, 0x20,
0xe0, 0x07, 0x8d, 0x0a, 0x84, 0x09, 0x00, 0x00, 0x10, 0x16, 0x2f, 0x25,
0x07, 0x00, 0x41, 0x4c, 0x02, 0x20, 0x81, 0x00, 0x48, 0x12, 0xc0, 0x29,
0xa0, 0x09, 0x00, 0x16, 0x00, 0x00, 0x00, 0x00, 0x10, 0x20, 0x81, 0x03,
0x22, 0x0a, 0x00, 0x20, 0x80, 0x09, 0x00, 0x0a, 0x1c, 0x01, 0x00, 0x00,
0x10, 0x19, 0x7b, 0x23, 0x00, 0x00, 0x4c, 0x08, 0x10, 0x20, 0x81, 0x05,
0x22, 0x0a, 0x00, 0x20, 0xa0, 0x07, 0x8d, 0x0a, 0x80, 0x01, 0x00, 0x00,
0x10, 0x19, 0x03, 0x25, 0x07, 0x00, 0x43, 0x0c, 0x10, 0x20, 0x81, 0x03,
0x22, 0x0a, 0x00, 0x20, 0x1c, 0x01, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00,
0x10, 0x00, 0x81, 0x03, 0x20, 0x0a, 0x00, 0x20, 0x1c, 0x01, 0x00, 0x1e,
0x00, 0x00, 0x00, 0x00, 0x10, 0x20, 0x81, 0x03, 0x22, 0x0a, 0x00, 0x20,
0xe0, 0x07, 0x8d, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x81, 0x03,
0x20, 0x0a, 0x00, 0x20, 0x20, 0x08, 0x8d, 0x1e, 0x00, 0x00, 0x00, 0x00,
0x02, 0x20, 0x81, 0x00, 0x4a, 0x12, 0xa0, 0x21, 0xa0, 0x09, 0x00, 0x16,
0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x81, 0x03, 0x20, 0x0a, 0x00, 0x20,
0x60, 0x08, 0x8d, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x05, 0x20, 0x80, 0x02,
0x40, 0x12, 0x00, 0x20, 0xc0, 0x09, 0xb1, 0x12, 0xa0, 0x01, 0xb1, 0x00,
0x22, 0x00, 0xb1, 0x00, 0x00, 0x0e, 0x00, 0x20, 0x98, 0x08, 0x00, 0x00,
0xf8, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x2c, 0x0a, 0x40, 0x20,
0x18, 0x01, 0x00, 0x0a, 0x14, 0x01, 0x00, 0x00, 0x41, 0x96, 0x75, 0x20,
0x07, 0x46, 0x41, 0x08, 0x41, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x00, 0x29,
0xe0, 0x07, 0x8d, 0x0a, 0x18, 0x01, 0x00, 0x00, 0x01, 0x00, 0x80, 0x00,
0xe8, 0x3e, 0x60, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x41, 0x80, 0x79, 0x20, 0x00, 0x45, 0x02, 0x08, 0x01, 0x20, 0x80, 0x00,
0xe8, 0x3e, 0xa0, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x40, 0x96, 0x01, 0x20, 0xe0, 0x46, 0x45, 0x46, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x00, 0x29, 0xa0, 0x08, 0x00, 0x0a, 0x00, 0x09, 0x8d, 0x00,
0x40, 0x96, 0x01, 0x20, 0xe7, 0x46, 0x46, 0x43, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x00, 0x29, 0x00, 0x09, 0x8d, 0x0a, 0xa0, 0x07, 0x8d, 0x00,
0x09, 0x00, 0x80, 0x00, 0x28, 0x0a, 0xc0, 0x28, 0xc0, 0x08, 0x8d, 0x1e,
0x02, 0x00, 0x02, 0x00, 0x09, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x00, 0x29,
0x00, 0x09, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00, 0x40, 0x96, 0x2d, 0x20,
0x07, 0x46, 0x46, 0x09, 0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x00, 0x29,
0x00, 0x09, 0x8d, 0x0a, 0x24, 0x01, 0x00, 0x00, 0x33, 0x00, 0x80, 0x0c,
0x70, 0x30, 0x00, 0x00, 0xc2, 0x08, 0x00, 0x00, 0x01, 0x5e, 0x02, 0x04,
0x33, 0x20, 0x80, 0x0c, 0x70, 0x50, 0x00, 0x00, 0x02, 0x09, 0x00, 0x00,
0x01, 0x5e, 0x02, 0x04, 0x24, 0x00, 0xa0, 0x00, 0x00, 0x0e, 0x00, 0x20,
0xb0, 0x07, 0x00, 0x00, 0xb0, 0x07, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00,
0x2c, 0x0a, 0xa0, 0x28, 0x18, 0x01, 0x00, 0x0a, 0x14, 0x01, 0x00, 0x00,
0x40, 0x00, 0x80, 0x00, 0x28, 0x0a, 0xc0, 0x28, 0x20, 0x08, 0x8d, 0x1e,
0xff, 0xff, 0xff, 0xff, 0x40, 0x00, 0x00, 0x00, 0x2c, 0x0a, 0x40, 0x29,
0x1c, 0x01, 0x00, 0x1e, 0x01, 0x00, 0x01, 0x00, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x00, 0x29, 0xe0, 0x07, 0x8d, 0x1e, 0xff, 0xff, 0xff, 0xff,
0x40, 0x00, 0x00, 0x00, 0x2c, 0x0a, 0x60, 0x29, 0x1c, 0x01, 0x00, 0x1e,
0xff, 0xff, 0xff, 0xff, 0x40, 0x00, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x21,
0x60, 0x08, 0x8d, 0x1e, 0xff, 0xff, 0xff, 0xff, 0x41, 0x96, 0x75, 0x20,
0x07, 0x02, 0x46, 0x08, 0x41, 0x80, 0x01, 0x20, 0x00, 0x06, 0x4a, 0x45,
0x41, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x20, 0x00, 0x09, 0x8d, 0x0a,
0x18, 0x01, 0x00, 0x00, 0x41, 0x80, 0x01, 0x20, 0x00, 0x07, 0x4b, 0x45,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x21, 0xa0, 0x07, 0x8d, 0x1e,
0xff, 0xff, 0xff, 0xff, 0x41, 0x80, 0x79, 0x20, 0x00, 0x4c, 0x45, 0x08,
0x40, 0x96, 0x01, 0x20, 0xe0, 0x0e, 0x06, 0x02, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x00, 0x22, 0xc0, 0x00, 0x00, 0x0a, 0x80, 0x00, 0x8d, 0x00,
0x40, 0x96, 0x01, 0x20, 0xe0, 0x12, 0x07, 0x02, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x80, 0x22, 0xe0, 0x00, 0x00, 0x0a, 0x80, 0x00, 0x8d, 0x00,
0x40, 0x96, 0x01, 0x20, 0xe7, 0x0e, 0x0e, 0x0a, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x00, 0x22, 0x00, 0x02, 0x8d, 0x0a, 0x80, 0x01, 0x8d, 0x00,
0x40, 0x96, 0x01, 0x20, 0xe7, 0x12, 0x12, 0x0a, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x80, 0x22, 0x80, 0x02, 0x8d, 0x0a, 0x80, 0x01, 0x8d, 0x00,
0x09, 0x00, 0x80, 0x00, 0x28, 0x0a, 0xc0, 0x21, 0xc0, 0x01, 0x8d, 0x1e,
0x02, 0x00, 0x02, 0x00, 0x09, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x00, 0x22,
0x00, 0x02, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00, 0x09, 0x00, 0x80, 0x00,
0x28, 0x0a, 0x40, 0x22, 0x40, 0x02, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00,
0x09, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x22, 0x80, 0x02, 0x8d, 0x1e,
0x02, 0x00, 0x02, 0x00, 0x40, 0x96, 0x01, 0x20, 0x07, 0x0e, 0x0e, 0x09,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x00, 0x22, 0x00, 0x02, 0x8d, 0x0a,
0x20, 0x01, 0x00, 0x00, 0x40, 0x96, 0x01, 0x20, 0x07, 0x12, 0x12, 0x09,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x22, 0x80, 0x02, 0x8d, 0x0a,
0x20, 0x01, 0x00, 0x00, 0x31, 0x00, 0x80, 0x0c, 0x68, 0x02, 0xc0, 0x22,
0xc0, 0x01, 0x00, 0x06, 0x00, 0x58, 0x60, 0x04, 0x41, 0x96, 0x75, 0x20,
0x07, 0x51, 0x41, 0x08, 0x31, 0x20, 0x80, 0x0c, 0x68, 0x02, 0x80, 0x23,
0x00, 0x02, 0x00, 0x06, 0x00, 0x58, 0x60, 0x04, 0x31, 0x00, 0x80, 0x0c,
0x68, 0x02, 0x40, 0x24, 0x40, 0x02, 0x00, 0x06, 0x00, 0x58, 0x60, 0x04,
0x40, 0x00, 0x80, 0x00, 0x28, 0x0a, 0xa0, 0x2a, 0x20, 0x08, 0x8d, 0x1e,
0x01, 0x00, 0x01, 0x00, 0x31, 0x20, 0x80, 0x0c, 0x68, 0x02, 0x00, 0x25,
0x80, 0x02, 0x00, 0x06, 0x00, 0x58, 0x60, 0x04, 0x40, 0x96, 0x01, 0x20,
0xe0, 0x4d, 0x4c, 0x02, 0x41, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x60, 0x2a,
0xe0, 0x07, 0x8d, 0x0a, 0x18, 0x01, 0x00, 0x00, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0xe0, 0x2a, 0xe0, 0x07, 0x8d, 0x1e, 0x01, 0x00, 0x01, 0x00,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0xe0, 0x29, 0x80, 0x09, 0x00, 0x0a,
0x80, 0x00, 0x8d, 0x00, 0x40, 0x96, 0x01, 0x20, 0xe0, 0x59, 0x4c, 0x51,
0x41, 0x96, 0x75, 0x20, 0x07, 0x5d, 0x55, 0x08, 0x40, 0x96, 0x01, 0x20,
0xe7, 0x4d, 0x4d, 0x43, 0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x60, 0x2b,
0x80, 0x09, 0x00, 0x0a, 0x60, 0x0a, 0x8d, 0x00, 0x41, 0x20, 0x80, 0x00,
0x28, 0x0a, 0xe0, 0x2b, 0xe0, 0x0a, 0x8d, 0x0a, 0x18, 0x01, 0x00, 0x00,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0xe0, 0x29, 0xe0, 0x09, 0x8d, 0x0a,
0xa0, 0x07, 0x8d, 0x00, 0x40, 0x96, 0x01, 0x20, 0xe7, 0x59, 0x59, 0x43,
0x40, 0x96, 0x01, 0x20, 0xe0, 0x61, 0x4c, 0x5d, 0x09, 0x00, 0x80, 0x00,
0x28, 0x0a, 0xa0, 0x29, 0xa0, 0x09, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x60, 0x2b, 0x60, 0x0b, 0x8d, 0x0a,
0xa0, 0x07, 0x8d, 0x00, 0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x60, 0x2c,
0x80, 0x09, 0x00, 0x0a, 0xe0, 0x0b, 0x8d, 0x00, 0x09, 0x20, 0x80, 0x00,
0x28, 0x0a, 0xe0, 0x29, 0xe0, 0x09, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00,
0x09, 0x00, 0x80, 0x00, 0x28, 0x0a, 0xa0, 0x2c, 0x20, 0x0b, 0x8d, 0x1e,
0x02, 0x00, 0x02, 0x00, 0x40, 0x96, 0x01, 0x20, 0xe7, 0x61, 0x61, 0x43,
0x40, 0x96, 0x01, 0x20, 0x07, 0x4d, 0x4d, 0x09, 0x09, 0x20, 0x80, 0x00,
0x28, 0x0a, 0xe0, 0x2c, 0x60, 0x0b, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x60, 0x2c, 0x60, 0x0c, 0x8d, 0x0a,
0xa0, 0x07, 0x8d, 0x00, 0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0xe0, 0x29,
0xe0, 0x09, 0x8d, 0x0a, 0x20, 0x01, 0x00, 0x00, 0x31, 0x00, 0x80, 0x0c,
0x68, 0x02, 0xc0, 0x25, 0xa0, 0x09, 0x00, 0x06, 0x00, 0x5e, 0x20, 0x04,
0x40, 0x96, 0x01, 0x20, 0x07, 0x32, 0x65, 0x09, 0x09, 0x00, 0x80, 0x00,
0x28, 0x0a, 0x20, 0x2c, 0x20, 0x0c, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00,
0x31, 0x20, 0x80, 0x0c, 0x68, 0x02, 0x00, 0x26, 0xe0, 0x09, 0x00, 0x06,
0x00, 0x5e, 0x20, 0x04, 0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x26,
0xe0, 0x0c, 0x8d, 0x0a, 0x20, 0x01, 0x00, 0x00, 0x09, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x60, 0x2c, 0x60, 0x0c, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00,
0x31, 0x00, 0x80, 0x0c, 0x68, 0x02, 0xc0, 0x26, 0x40, 0x06, 0x00, 0x06,
0x00, 0x5e, 0x20, 0x04, 0x40, 0x00, 0x80, 0x00, 0x28, 0x0a, 0x20, 0x2d,
0x60, 0x08, 0x8d, 0x1e, 0x01, 0x00, 0x01, 0x00, 0x40, 0x96, 0x01, 0x20,
0xe0, 0x6d, 0x07, 0x51, 0x40, 0x96, 0x01, 0x20, 0x07, 0x61, 0x61, 0x09,
0x31, 0x20, 0x80, 0x0c, 0x68, 0x02, 0x00, 0x27, 0x80, 0x06, 0x00, 0x06,
0x00, 0x5e, 0x20, 0x04, 0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x60, 0x2d,
0xa0, 0x07, 0x8d, 0x1e, 0x01, 0x00, 0x01, 0x00, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0xe0, 0x2d, 0xe0, 0x00, 0x00, 0x0a, 0x60, 0x0a, 0x8d, 0x00,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x60, 0x2c, 0x60, 0x0c, 0x8d, 0x0a,
0x20, 0x01, 0x00, 0x00, 0x31, 0x00, 0x80, 0x0c, 0x68, 0x02, 0x40, 0x27,
0x20, 0x0c, 0x00, 0x06, 0x00, 0x5e, 0x20, 0x04, 0x40, 0x96, 0x01, 0x20,
0xe0, 0x71, 0x06, 0x51, 0x40, 0x96, 0x01, 0x20, 0xe7, 0x6d, 0x6d, 0x69,
0x31, 0x20, 0x80, 0x0c, 0x68, 0x02, 0x40, 0x20, 0x60, 0x0c, 0x00, 0x06,
0x00, 0x5e, 0x20, 0x04, 0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x60, 0x2e,
0xc0, 0x00, 0x00, 0x0a, 0x60, 0x0a, 0x8d, 0x00, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0xe0, 0x2d, 0xe0, 0x0d, 0x8d, 0x0a, 0x60, 0x0d, 0x8d, 0x00,
0x40, 0x96, 0x01, 0x20, 0xe0, 0x04, 0x07, 0x5d, 0x40, 0x96, 0x01, 0x20,
0xe7, 0x71, 0x71, 0x69, 0x09, 0x00, 0x80, 0x00, 0x28, 0x0a, 0xa0, 0x2d,
0xa0, 0x0d, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0xa0, 0x2e, 0xe0, 0x00, 0x00, 0x0a, 0xe0, 0x0b, 0x8d, 0x00,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x60, 0x2e, 0x60, 0x0e, 0x8d, 0x0a,
0x60, 0x0d, 0x8d, 0x00, 0x09, 0x20, 0x80, 0x00, 0x28, 0x0a, 0xe0, 0x2d,
0xe0, 0x0d, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00, 0x40, 0x96, 0x01, 0x20,
0xe0, 0x77, 0x06, 0x5d, 0x40, 0x96, 0x01, 0x20, 0xe7, 0x04, 0x04, 0x69,
0x09, 0x00, 0x80, 0x00, 0x28, 0x0a, 0x20, 0x2e, 0x20, 0x0e, 0x8d, 0x1e,
0x02, 0x00, 0x02, 0x00, 0x40, 0x96, 0x01, 0x20, 0x07, 0x6d, 0x6d, 0x09,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x20, 0x2f, 0xc0, 0x00, 0x00, 0x0a,
0xe0, 0x0b, 0x8d, 0x00, 0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0xa0, 0x2e,
0xa0, 0x0e, 0x8d, 0x0a, 0x60, 0x0d, 0x8d, 0x00, 0x09, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x60, 0x2e, 0x60, 0x0e, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0xe0, 0x2d, 0xe0, 0x0d, 0x8d, 0x0a,
0x20, 0x01, 0x00, 0x00, 0x31, 0x00, 0x80, 0x0c, 0x68, 0x02, 0x60, 0x2f,
0xa0, 0x0d, 0x00, 0x06, 0x00, 0x5e, 0x20, 0x04, 0x40, 0x96, 0x01, 0x20,
0xe7, 0x77, 0x77, 0x69, 0x09, 0x00, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x20,
0x80, 0x00, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00, 0x40, 0x96, 0x01, 0x20,
0x07, 0x71, 0x71, 0x09, 0x31, 0x20, 0x80, 0x0c, 0x68, 0x02, 0xa0, 0x2f,
0xe0, 0x0d, 0x00, 0x06, 0x00, 0x5e, 0x20, 0x04, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x20, 0x2f, 0x20, 0x0f, 0x8d, 0x0a, 0x60, 0x0d, 0x8d, 0x00,
0x09, 0x20, 0x80, 0x00, 0x28, 0x0a, 0xa0, 0x2e, 0xa0, 0x0e, 0x8d, 0x1e,
0x02, 0x00, 0x02, 0x00, 0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x60, 0x2e,
0x60, 0x0e, 0x8d, 0x0a, 0x20, 0x01, 0x00, 0x00, 0x31, 0x00, 0x80, 0x0c,
0x68, 0x02, 0xe0, 0x28, 0x20, 0x0e, 0x00, 0x06, 0x00, 0x5e, 0x20, 0x04,
0x09, 0x00, 0x80, 0x00, 0x28, 0x0a, 0xe0, 0x2e, 0xe0, 0x0e, 0x8d, 0x1e,
0x02, 0x00, 0x02, 0x00, 0x40, 0x96, 0x01, 0x20, 0x07, 0x04, 0x04, 0x09,
0x31, 0x20, 0x80, 0x0c, 0x68, 0x02, 0x20, 0x29, 0x60, 0x0e, 0x00, 0x06,
0x00, 0x5e, 0x20, 0x04, 0x09, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x20, 0x2f,
0x20, 0x0f, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0xa0, 0x2e, 0xa0, 0x0e, 0x8d, 0x0a, 0x20, 0x01, 0x00, 0x00,
0x31, 0x00, 0x80, 0x0c, 0x68, 0x02, 0x60, 0x29, 0x80, 0x00, 0x00, 0x06,
0x00, 0x5e, 0x20, 0x04, 0x40, 0x96, 0x01, 0x20, 0x07, 0x77, 0x77, 0x09,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x20, 0x2f, 0x20, 0x0f, 0x8d, 0x0a,
0x20, 0x01, 0x00, 0x00, 0x31, 0x20, 0x80, 0x0c, 0x68, 0x02, 0xa0, 0x29,
0xa0, 0x0e, 0x00, 0x06, 0x00, 0x5e, 0x20, 0x04, 0x01, 0x00, 0x00, 0x00,
0xec, 0x3e, 0x60, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40,
0x31, 0x00, 0x80, 0x0c, 0x68, 0x02, 0xe0, 0x29, 0xe0, 0x0e, 0x00, 0x06,
0x00, 0x5e, 0x20, 0x04, 0x01, 0x00, 0x00, 0x00, 0xec, 0x3e, 0x80, 0x21,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa0, 0x40, 0x31, 0x20, 0x80, 0x0c,
0x68, 0x02, 0x20, 0x2a, 0x20, 0x0f, 0x00, 0x06, 0x00, 0x5e, 0x20, 0x04,
0x01, 0x00, 0x00, 0x00, 0xec, 0x3e, 0xc0, 0x21, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xe0, 0x40, 0x01, 0x00, 0x00, 0x00, 0xec, 0x3e, 0x00, 0x22,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc1, 0x01, 0x00, 0x00, 0x00,
0xec, 0x3e, 0x40, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x41,
0x01, 0x00, 0x00, 0x00, 0xec, 0x3e, 0xa0, 0x2a, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x40, 0xc0, 0x01, 0x00, 0x00, 0x00, 0xec, 0x3e, 0x60, 0x2b,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x40, 0x01, 0x00, 0x00, 0x00,
0xec, 0x3e, 0xe0, 0x2b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xc1,
0x01, 0x00, 0x00, 0x00, 0xec, 0x3e, 0x60, 0x2c, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x80, 0x40, 0x40, 0x96, 0x2d, 0x20, 0x07, 0x71, 0x65, 0x09,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x60, 0x2e, 0xe0, 0x0c, 0x8d, 0x0a,
0x24, 0x01, 0x00, 0x00, 0x41, 0x00, 0x80, 0x00, 0xe8, 0x3a, 0xc0, 0x20,
0xc0, 0x02, 0x8d, 0x3e, 0x00, 0x00, 0x80, 0x40, 0x41, 0x20, 0x80, 0x00,
0xe8, 0x3a, 0x40, 0x21, 0x80, 0x03, 0x8d, 0x3e, 0x00, 0x00, 0x80, 0x40,
0x5b, 0x62, 0x00, 0x20, 0x02, 0x30, 0x88, 0xa6, 0x5b, 0xa3, 0x00, 0x20,
0x02, 0x50, 0xa0, 0xa6, 0x5b, 0x62, 0x00, 0x20, 0x02, 0x30, 0x88, 0x18,
0x5b, 0xa3, 0x00, 0x20, 0x02, 0x50, 0xa0, 0x18, 0x5b, 0x62, 0x00, 0x20,
0x02, 0x30, 0x58, 0x1c, 0x5b, 0xa3, 0x00, 0x20, 0x02, 0x50, 0x70, 0x1c,
0x5b, 0x62, 0x00, 0x20, 0x02, 0x30, 0x88, 0x20, 0x5b, 0xa3, 0x00, 0x20,
0x02, 0x50, 0xa0, 0x20, 0x5b, 0x32, 0x01, 0x20, 0x02, 0x30, 0x58, 0x24,
0x5b, 0x23, 0x03, 0x20, 0x02, 0x50, 0x70, 0x24, 0x5b, 0x62, 0x05, 0x20,
0x02, 0x98, 0xb8, 0xaa, 0x5b, 0x83, 0x05, 0x20, 0x02, 0x90, 0xc1, 0xaa,
0x5b, 0x42, 0x03, 0x20, 0x02, 0xb0, 0xda, 0xb6, 0x5b, 0xc3, 0x05, 0x20,
0x02, 0xc0, 0xe2, 0xb6, 0x5b, 0x62, 0x03, 0x20, 0x02, 0xa0, 0xe9, 0xbe,
0x5b, 0x03, 0x06, 0x20, 0x02, 0xe0, 0x0a, 0xbe, 0x5b, 0x62, 0x03, 0x20,
0x02, 0xb0, 0x99, 0xa6, 0x5b, 0x03, 0x06, 0x20, 0x02, 0x00, 0xb3, 0xa6,
0x5b, 0x82, 0x03, 0x20, 0x02, 0xb0, 0x69, 0xc6, 0x5b, 0x93, 0x06, 0x20,
0x02, 0x00, 0x83, 0xc6, 0x5b, 0xa2, 0x03, 0x20, 0x02, 0xc0, 0xed, 0x19,
0x5b, 0x23, 0x00, 0x20, 0x02, 0x48, 0xf7, 0x19, 0x5b, 0x42, 0x00, 0x20,
0x02, 0xd0, 0x1d, 0x1d, 0x5b, 0xb3, 0x06, 0x20, 0x02, 0x10, 0x24, 0x1d,
0x5b, 0x62, 0x00, 0x20, 0x02, 0x20, 0x2c, 0x21, 0x5b, 0xd3, 0x06, 0x20,
0x02, 0x58, 0x37, 0x21, 0x5b, 0xa2, 0x00, 0x20, 0x02, 0x30, 0x3c, 0x25,
0x5b, 0xf3, 0x06, 0x20, 0x02, 0x68, 0x47, 0x25, 0x33, 0x00, 0x80, 0x0c,
0x70, 0xa0, 0x00, 0x00, 0x22, 0x0e, 0x00, 0x00, 0x01, 0x5e, 0x02, 0x04,
0x33, 0x20, 0x80, 0x0c, 0x70, 0xf0, 0x06, 0x00, 0x62, 0x0e, 0x00, 0x00,
0x01, 0x5e, 0x02, 0x04, 0x25, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x20,
0x00, 0x00, 0x00, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x01, 0x4d, 0x00, 0x20,
0x07, 0x7f, 0x3c, 0x00, 0x31, 0x00, 0x60, 0x07, 0x04, 0x02, 0x00, 0x20,
0xe0, 0x0f, 0x00, 0x06, 0x10, 0x00, 0x00, 0x82, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
0x00, 0xc0, 0xff, 0x83, 0x00, 0x00, 0x00, 0x03, 0x7f, 0x00, 0xff, 0x1f,
0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x83, 0x00, 0x00, 0x00, 0x03,
0x7f, 0x00, 0xff, 0x1f, 0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x40, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x80, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00,
0x80, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x14, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x2b, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x40, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x4c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
0x34, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00,
0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x17, 0x00, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x1a, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x67, 0x6c,
0x6f, 0x62, 0x61, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x44, 0x41, 0x54, 0x41,
0x5f, 0x54, 0x59, 0x50, 0x45, 0x2a, 0x3b, 0x38, 0x00, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00,
0x50, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c,
0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x42, 0x00, 0x00, 0x00, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50,
0x45, 0x2a, 0x3b, 0x38, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x5f, 0x5f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x69, 0x00, 0x00,
0x69, 0x6e, 0x74, 0x3b, 0x34, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00,
0x03, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x5f, 0x5f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x6a, 0x00, 0x00,
0x69, 0x6e, 0x74, 0x3b, 0x34, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x5f, 0x5f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x6b, 0x00, 0x00,
0x69, 0x6e, 0x74, 0x3b, 0x34, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00,
0x05, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x5f, 0x5f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x69, 0x00, 0x00, 0x00,
0x69, 0x6e, 0x74, 0x3b, 0x34, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00
};
unsigned int __3DConvolution_Gen9core_gen_len = 4588;

View File

@@ -0,0 +1,471 @@
/**
* correlation.c: This file is part of the PolyBench/GPU 1.0 test suite.
*
*
* Contact: Scott Grauer-Gray <sgrauerg@gmail.com>
* Will Killian <killian@udel.edu>
* Louis-Noel Pouchet <pouchet@cse.ohio-state.edu>
* Web address: http://www.cse.ohio-state.edu/~pouchet/software/polybench/GPU
*/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <sys/time.h>
#include <math.h>
#ifdef __APPLE__
#include <OpenCL/opencl.h>
#else
#include "../../CL/cl.h"
#endif
#define POLYBENCH_TIME 1
//select the OpenCL device to use (can be GPU, CPU, or Accelerator such as Intel Xeon Phi)
#define OPENCL_DEVICE_SELECTION CL_DEVICE_TYPE_GPU
#include "correlation.h"
#include "../../polybench.h"
//define the error threshold for the results "not matching"
#define PERCENT_DIFF_ERROR_THRESHOLD 1.05
#define MAX_SOURCE_SIZE (0x100000)
#if defined(cl_khr_fp64) // Khronos extension available?
#pragma OPENCL EXTENSION cl_khr_fp64 : enable
#elif defined(cl_amd_fp64) // AMD extension available?
#pragma OPENCL EXTENSION cl_amd_fp64 : enable
#endif
namespace ns_correlation {
#define sqrt_of_array_cell(x,j) sqrt(x[j])
#include "correlation_kernel.h"
#include "../../polybenchUtilFuncts.h"
char str_temp[1024];
#define FLOAT_N 3214212.01
#define EPS 0.005
cl_platform_id platform_id;
cl_device_id device_id;
cl_uint num_devices;
cl_uint num_platforms;
cl_int errcode;
cl_context clGPUContext;
cl_kernel clKernel_mean;
cl_kernel clKernel_std;
cl_kernel clKernel_reduce;
cl_kernel clKernel_corr;
cl_command_queue clCommandQue;
cl_program clProgram;
cl_mem data_mem_obj;
cl_mem stddev_mem_obj;
cl_mem mean_mem_obj;
cl_mem symmat_mem_obj;
FILE *fp;
char *source_str;
size_t source_size;
#define RUN_ON_CPU
void compareResults(int m, int n, DATA_TYPE POLYBENCH_2D(symmat, M, N, m, n), DATA_TYPE POLYBENCH_2D(symmat_outputFromGpu, M, N, m, n))
{
int i,j,fail;
fail = 0;
for (i=0; i < m; i++)
{
for (j=0; j < n; j++)
{
if (percentDiff(symmat[i][j], symmat_outputFromGpu[i][j]) > PERCENT_DIFF_ERROR_THRESHOLD)
{
fail++;
}
}
}
// print results
printf("Non-Matching CPU-GPU Outputs Beyond Error Threshold of %4.2f Percent: %d\n", PERCENT_DIFF_ERROR_THRESHOLD, fail);
}
void read_cl_file()
{
// Load the kernel source code into the array source_str
// fp = fopen("correlation.cl", "r");
// if (!fp) {
// fprintf(stderr, "Failed to load kernel.\n");
// exit(1);
// }
// source_str = (char*)malloc(MAX_SOURCE_SIZE);
// source_size = fread( source_str, 1, MAX_SOURCE_SIZE, fp);
// fclose( fp );
}
void init_arrays(int m, int n, DATA_TYPE POLYBENCH_2D(data, M, N, m, n))
{
int i, j;
for (i=0; i < m; i++)
{
for (j=0; j < n; j++)
{
data[i][j] = ((DATA_TYPE) i*j)/ M;
}
}
}
void cl_initialization()
{
// Get platform and device information
errcode = clGetPlatformIDs(1, &platform_id, &num_platforms);
if(errcode == CL_SUCCESS) printf("number of platforms is %d\n",num_platforms);
else printf("Error getting platform IDs\n");
errcode = clGetPlatformInfo(platform_id,CL_PLATFORM_NAME, sizeof(str_temp), str_temp,NULL);
if(errcode == CL_SUCCESS) printf("platform name is %s\n",str_temp);
else printf("Error getting platform name\n");
errcode = clGetPlatformInfo(platform_id, CL_PLATFORM_VERSION, sizeof(str_temp), str_temp,NULL);
if(errcode == CL_SUCCESS) printf("platform version is %s\n",str_temp);
else printf("Error getting platform version\n");
errcode = clGetDeviceIDs( platform_id, OPENCL_DEVICE_SELECTION, 1, &device_id, &num_devices);
if(errcode == CL_SUCCESS) printf("number of devices is %d\n", num_devices);
else printf("Error getting device IDs\n");
errcode = clGetDeviceInfo(device_id,CL_DEVICE_NAME, sizeof(str_temp), str_temp,NULL);
if(errcode == CL_SUCCESS) printf("device name is %s\n",str_temp);
else printf("Error getting device name\n");
// Create an OpenCL context
clGPUContext = clCreateContext( NULL, 1, &device_id, NULL, NULL, &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating context\n");
//Create a command-queue
clCommandQue = clCreateCommandQueue(clGPUContext, device_id, 0, &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating command queue\n");
}
void cl_mem_init(DATA_TYPE POLYBENCH_2D(data,M,N,m,n), DATA_TYPE POLYBENCH_1D(mean,M,m), DATA_TYPE POLYBENCH_1D(stddev,M,m), DATA_TYPE POLYBENCH_2D(symmat,M,M,m,m))
{
data_mem_obj = clCreateBuffer(clGPUContext, CL_MEM_READ_WRITE, sizeof(DATA_TYPE) * M * N, NULL, &errcode);
symmat_mem_obj = clCreateBuffer(clGPUContext, CL_MEM_READ_WRITE, sizeof(DATA_TYPE) * M * N, NULL, &errcode);
stddev_mem_obj = clCreateBuffer(clGPUContext, CL_MEM_READ_WRITE, sizeof(DATA_TYPE) * M, NULL, &errcode);
mean_mem_obj = clCreateBuffer(clGPUContext, CL_MEM_READ_WRITE, sizeof(DATA_TYPE) * M, NULL, &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating buffers\n");
errcode = clEnqueueWriteBuffer(clCommandQue, data_mem_obj, CL_TRUE, 0, sizeof(DATA_TYPE) * M * N, data, 0, NULL, NULL);
errcode = clEnqueueWriteBuffer(clCommandQue, symmat_mem_obj, CL_TRUE, 0, sizeof(DATA_TYPE) * M * N, symmat, 0, NULL, NULL);
errcode = clEnqueueWriteBuffer(clCommandQue, stddev_mem_obj, CL_TRUE, 0, sizeof(DATA_TYPE) * M, stddev, 0, NULL, NULL);
errcode = clEnqueueWriteBuffer(clCommandQue, mean_mem_obj, CL_TRUE, 0, sizeof(DATA_TYPE) * M, mean, 0, NULL, NULL);
if(errcode != CL_SUCCESS)printf("Error in writing buffers\n");
}
void cl_load_prog()
{
// Create a program from the kernel source
const size_t kernel_size = correlation_Gen9core_gen_len;
const unsigned char* kernel_bin = correlation_Gen9core_gen;
clProgram = clCreateProgramWithBinary(clGPUContext, 1, &device_id, &kernel_size, &kernel_bin, NULL, &errcode);
// clProgram = clCreateProgramWithSource(clGPUContext, 1, (const char **)&source_str, (const size_t *)&source_size, &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating program\n");
// Build the program
errcode = clBuildProgram(clProgram, 1, &device_id, NULL, NULL, NULL);
if(errcode != CL_SUCCESS) printf("Error in building program\n");
// Create the OpenCL kernel
clKernel_mean = clCreateKernel(clProgram, "mean_kernel", &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating kernel1\n");
clKernel_std = clCreateKernel(clProgram, "std_kernel", &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating kernel2\n");
clKernel_reduce = clCreateKernel(clProgram, "reduce_kernel", &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating kernel3\n");
clKernel_corr = clCreateKernel(clProgram, "corr_kernel", &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating kernel4\n");
clFinish(clCommandQue);
}
void cl_launch_kernel(int m, int n)
{
DATA_TYPE float_n = FLOAT_N;
DATA_TYPE eps = EPS;
size_t localWorkSize_Kernel1[2], globalWorkSize_Kernel1[2];
size_t localWorkSize_Kernel2[2], globalWorkSize_Kernel2[2];
size_t localWorkSize_Kernel3[2], globalWorkSize_Kernel3[2];
size_t localWorkSize_Kernel4[2], globalWorkSize_Kernel4[2];
localWorkSize_Kernel1[0] = DIM_LOCAL_WORK_GROUP_KERNEL_1_X;
localWorkSize_Kernel1[1] = DIM_LOCAL_WORK_GROUP_KERNEL_1_Y;
globalWorkSize_Kernel1[0] = (size_t)ceil(((float)M) / ((float)DIM_LOCAL_WORK_GROUP_KERNEL_1_X)) * DIM_LOCAL_WORK_GROUP_KERNEL_1_X;
globalWorkSize_Kernel1[1] = 1;
localWorkSize_Kernel2[0] = DIM_LOCAL_WORK_GROUP_KERNEL_2_X;
localWorkSize_Kernel2[1] = DIM_LOCAL_WORK_GROUP_KERNEL_2_Y;
globalWorkSize_Kernel2[0] = (size_t)ceil(((float)M) / ((float)DIM_LOCAL_WORK_GROUP_KERNEL_2_X)) * DIM_LOCAL_WORK_GROUP_KERNEL_2_X;
globalWorkSize_Kernel2[1] = 1;
localWorkSize_Kernel3[0] = DIM_LOCAL_WORK_GROUP_KERNEL_3_X;
localWorkSize_Kernel3[1] = DIM_LOCAL_WORK_GROUP_KERNEL_3_Y;
globalWorkSize_Kernel3[0] = (size_t)ceil(((float)M) / ((float)DIM_LOCAL_WORK_GROUP_KERNEL_3_X)) * DIM_LOCAL_WORK_GROUP_KERNEL_3_X;
globalWorkSize_Kernel3[1] = (size_t)ceil(((float)N) / ((float)DIM_LOCAL_WORK_GROUP_KERNEL_3_Y)) * DIM_LOCAL_WORK_GROUP_KERNEL_3_Y;
localWorkSize_Kernel4[0] = DIM_LOCAL_WORK_GROUP_KERNEL_4_X;
localWorkSize_Kernel4[1] = DIM_LOCAL_WORK_GROUP_KERNEL_4_Y;
globalWorkSize_Kernel4[0] = (size_t)ceil(((float)M) / ((float)DIM_LOCAL_WORK_GROUP_KERNEL_4_X)) * DIM_LOCAL_WORK_GROUP_KERNEL_4_X;
globalWorkSize_Kernel4[1] = 1;
/* Start timer. */
polybench_start_instruments;
// Set the arguments of the kernel
errcode = clSetKernelArg(clKernel_mean, 0, sizeof(cl_mem), (void *)&mean_mem_obj);
errcode |= clSetKernelArg(clKernel_mean, 1, sizeof(cl_mem), (void *)&data_mem_obj);
errcode |= clSetKernelArg(clKernel_mean, 2, sizeof(DATA_TYPE), (void *)&float_n);
errcode |= clSetKernelArg(clKernel_mean, 3, sizeof(int), (void *)&m);
errcode |= clSetKernelArg(clKernel_mean, 4, sizeof(int), (void *)&n);
if(errcode != CL_SUCCESS) printf("Error in seting arguments1\n");
// Execute the OpenCL kernel
errcode = clEnqueueNDRangeKernel(clCommandQue, clKernel_mean, 1, NULL, globalWorkSize_Kernel1, localWorkSize_Kernel1, 0, NULL, NULL);
if(errcode != CL_SUCCESS) printf("Error in launching kernel1\n");
clEnqueueBarrier(clCommandQue);
// Set the arguments of the kernel
errcode = clSetKernelArg(clKernel_std, 0, sizeof(cl_mem), (void *)&mean_mem_obj);
errcode = clSetKernelArg(clKernel_std, 1, sizeof(cl_mem), (void *)&stddev_mem_obj);
errcode |= clSetKernelArg(clKernel_std, 2, sizeof(cl_mem), (void *)&data_mem_obj);
errcode |= clSetKernelArg(clKernel_std, 3, sizeof(DATA_TYPE), (void *)&float_n);
errcode |= clSetKernelArg(clKernel_std, 4, sizeof(DATA_TYPE), (void *)&eps);
errcode |= clSetKernelArg(clKernel_std, 5, sizeof(int), (void *)&m);
errcode |= clSetKernelArg(clKernel_std, 6, sizeof(int), (void *)&n);
if(errcode != CL_SUCCESS) printf("Error in seting arguments2\n");
// Execute the OpenCL kernel
errcode = clEnqueueNDRangeKernel(clCommandQue, clKernel_std, 1, NULL, globalWorkSize_Kernel2, localWorkSize_Kernel2, 0, NULL, NULL);
if(errcode != CL_SUCCESS) printf("Error in launching kernel2\n");
clEnqueueBarrier(clCommandQue);
// Set the arguments of the kernel
errcode = clSetKernelArg(clKernel_reduce, 0, sizeof(cl_mem), (void *)&mean_mem_obj);
errcode = clSetKernelArg(clKernel_reduce, 1, sizeof(cl_mem), (void *)&stddev_mem_obj);
errcode |= clSetKernelArg(clKernel_reduce, 2, sizeof(cl_mem), (void *)&data_mem_obj);
errcode |= clSetKernelArg(clKernel_reduce, 3, sizeof(DATA_TYPE), (void *)&float_n);
errcode |= clSetKernelArg(clKernel_reduce, 4, sizeof(int), (void *)&m);
errcode |= clSetKernelArg(clKernel_reduce, 5, sizeof(int), (void *)&n);
if(errcode != CL_SUCCESS) printf("Error in seting arguments3\n");
// Execute the OpenCL kernel
errcode = clEnqueueNDRangeKernel(clCommandQue, clKernel_reduce, 2, NULL, globalWorkSize_Kernel3, localWorkSize_Kernel3, 0, NULL, NULL);
if(errcode != CL_SUCCESS) printf("Error in launching kernel3\n");
clEnqueueBarrier(clCommandQue);
// Set the arguments of the kernel
errcode = clSetKernelArg(clKernel_corr, 0, sizeof(cl_mem), (void *)&symmat_mem_obj);
errcode |= clSetKernelArg(clKernel_corr, 1, sizeof(cl_mem), (void *)&data_mem_obj);
errcode |= clSetKernelArg(clKernel_corr, 2, sizeof(int), (void *)&m);
errcode |= clSetKernelArg(clKernel_corr, 3, sizeof(int), (void *)&n);
if(errcode != CL_SUCCESS) printf("Error in seting arguments4\n");
// Execute the OpenCL kernel
errcode = clEnqueueNDRangeKernel(clCommandQue, clKernel_corr, 1, NULL, globalWorkSize_Kernel4, localWorkSize_Kernel4, 0, NULL, NULL);
if(errcode != CL_SUCCESS) printf("Error in launching kernel4\n");
clEnqueueBarrier(clCommandQue);
DATA_TYPE val = 1.0;
clEnqueueWriteBuffer(clCommandQue, symmat_mem_obj, CL_TRUE, ((M-1)*M + (M-1))*sizeof(DATA_TYPE), sizeof(DATA_TYPE), &val, 0, NULL, NULL);
clFinish(clCommandQue);
/* Stop and print timer. */
printf("GPU Time in seconds:\n");
polybench_stop_instruments;
polybench_print_instruments;
}
void cl_clean_up()
{
// Clean up
errcode = clFlush(clCommandQue);
errcode = clFinish(clCommandQue);
errcode = clReleaseKernel(clKernel_reduce);
errcode = clReleaseKernel(clKernel_mean);
errcode = clReleaseKernel(clKernel_std);
errcode = clReleaseKernel(clKernel_corr);
errcode = clReleaseProgram(clProgram);
errcode = clReleaseMemObject(symmat_mem_obj);
errcode = clReleaseMemObject(data_mem_obj);
errcode = clReleaseMemObject(mean_mem_obj);
errcode = clReleaseMemObject(stddev_mem_obj);
errcode = clReleaseCommandQueue(clCommandQue);
errcode = clReleaseContext(clGPUContext);
if(errcode != CL_SUCCESS) printf("Error in cleanup\n");
}
void correlation(int m, int n, DATA_TYPE POLYBENCH_2D(data, M, N, m, n), DATA_TYPE POLYBENCH_1D(mean, M, m), DATA_TYPE POLYBENCH_1D(stddev, M, m),
DATA_TYPE POLYBENCH_2D(symmat, M, N, m, n))
{
int i, j, j1, j2;
// Determine mean of column vectors of input data matrix
for (j = 0; j < _PB_M; j++)
{
mean[j] = 0.0;
for (i = 0; i < _PB_N; i++)
{
mean[j] += data[i][j];
}
mean[j] /= (DATA_TYPE)FLOAT_N;
}
// Determine standard deviations of column vectors of data matrix.
for (j = 0; j < _PB_M; j++)
{
stddev[j] = 0.0;
for (i = 0; i < _PB_N; i++)
{
stddev[j] += (data[i][j] - mean[j]) * (data[i][j] - mean[j]);
}
stddev[j] /= FLOAT_N;
stddev[j] = sqrt_of_array_cell(stddev, j);
stddev[j] = stddev[j] <= EPS ? 1.0 : stddev[j];
}
// Center and reduce the column vectors.
for (i = 0; i < _PB_N; i++)
{
for (j = 0; j < _PB_M; j++)
{
data[i][j] -= mean[j];
data[i][j] /= (sqrt(FLOAT_N)*stddev[j]) ;
}
}
// Calculate the m * m correlation matrix.
for (j1 = 0; j1 < _PB_M-1; j1++)
{
symmat[j1][j1] = 1.0;
for (j2 = j1+1; j2 < _PB_M; j2++)
{
symmat[j1][j2] = 0.0;
for (i = 0; i < _PB_N; i++)
{
symmat[j1][j2] += (data[i][j1] * data[i][j2]);
}
symmat[j2][j1] = symmat[j1][j2];
}
}
symmat[M-1][M-1] = 1.0;
}
/* DCE code. Must scan the entire live-out data.
Can be used also to check the correctness of the output. */
static
void print_array(int m,
DATA_TYPE POLYBENCH_2D(symmat,M,M,m,m))
{
int i, j;
for (i = 0; i < m; i++)
for (j = 0; j < m; j++) {
fprintf (stderr, DATA_PRINTF_MODIFIER, symmat[i][j]);
if ((i * m + j) % 20 == 0) fprintf (stderr, "\n");
}
fprintf (stderr, "\n");
}
int main(int argc, char *argv[])
{
int m = M;
int n = N;
POLYBENCH_2D_ARRAY_DECL(data,DATA_TYPE,M,N,m,n);
POLYBENCH_1D_ARRAY_DECL(mean,DATA_TYPE,M,m);
POLYBENCH_1D_ARRAY_DECL(stddev,DATA_TYPE,M,m);
POLYBENCH_2D_ARRAY_DECL(symmat,DATA_TYPE,M,N,m,n);
POLYBENCH_2D_ARRAY_DECL(symmat_outputFromGpu,DATA_TYPE,M,N,m,n);
init_arrays(m, n, POLYBENCH_ARRAY(data));
read_cl_file();
cl_initialization();
cl_mem_init(POLYBENCH_ARRAY(data), POLYBENCH_ARRAY(mean), POLYBENCH_ARRAY(stddev), POLYBENCH_ARRAY(symmat_outputFromGpu));
cl_load_prog();
cl_launch_kernel(m, n);
errcode = clEnqueueReadBuffer(clCommandQue, symmat_mem_obj, CL_TRUE, 0, M * N * sizeof(DATA_TYPE), POLYBENCH_ARRAY(symmat_outputFromGpu), 0, NULL, NULL);
if(errcode != CL_SUCCESS) printf("Error in reading GPU mem\n");
#ifdef RUN_ON_CPU
/* Start timer. */
polybench_start_instruments;
correlation(m, n, POLYBENCH_ARRAY(data), POLYBENCH_ARRAY(mean), POLYBENCH_ARRAY(stddev), POLYBENCH_ARRAY(symmat));
/* Stop and print timer. */
printf("CPU Time in seconds:\n");
polybench_stop_instruments;
polybench_print_instruments;
compareResults(m, n, POLYBENCH_ARRAY(symmat), POLYBENCH_ARRAY(symmat_outputFromGpu));
#else //prevent dead code elimination
polybench_prevent_dce(print_array(m, POLYBENCH_ARRAY(symmat_outputFromGpu)));
#endif //RUN_ON_CPU
POLYBENCH_FREE_ARRAY(data);
POLYBENCH_FREE_ARRAY(mean);
POLYBENCH_FREE_ARRAY(stddev);
POLYBENCH_FREE_ARRAY(symmat);
POLYBENCH_FREE_ARRAY(symmat_outputFromGpu);
cl_clean_up();
return 0;
}
}

View File

@@ -0,0 +1,95 @@
/**
* correlation.cl: This file is part of the PolyBench/GPU 1.0 test suite.
*
*
* Contact: Scott Grauer-Gray <sgrauerg@gmail.com>
* Will Killian <killian@udel.edu>
* Louis-Noel Pouchet <pouchet@cse.ohio-state.edu>
* Web address: http://www.cse.ohio-state.edu/~pouchet/software/polybench/GPU
*/
#if defined(cl_khr_fp64) // Khronos extension available?
#pragma OPENCL EXTENSION cl_khr_fp64 : enable
#elif defined(cl_amd_fp64) // AMD extension available?
#pragma OPENCL EXTENSION cl_amd_fp64 : enable
#endif
typedef float DATA_TYPE;
__kernel void mean_kernel(__global DATA_TYPE *mean, __global DATA_TYPE *data, DATA_TYPE float_n, int m, int n)
{
int j = get_global_id(0);
if (j < m)
{
mean[j] = 0.0;
int i;
for (i=0; i < n; i++)
{
mean[j] += data[i*m + j];
}
mean[j] /= (DATA_TYPE)float_n;
}
}
__kernel void std_kernel(__global DATA_TYPE *mean, __global DATA_TYPE *std, __global DATA_TYPE *data, DATA_TYPE float_n, DATA_TYPE eps, int m, int n)
{
int j = get_global_id(0);
if (j < m)
{
std[j] = 0.0;
int i;
for (i = 0; i < n; i++)
{
std[j] += (data[i*m + j] - mean[j]) * (data[i*m + j] - mean[j]);
}
std[j] /= float_n;
std[j] = sqrt(std[j]);
if(std[j] <= eps)
{
std[j] = 1.0;
}
}
}
__kernel void reduce_kernel(__global DATA_TYPE *mean, __global DATA_TYPE *std, __global DATA_TYPE *data, DATA_TYPE float_n, int m, int n)
{
int j = get_global_id(0);
int i = get_global_id(1);
if ((i < n) && (j < m))
{
data[i*m + j] -= mean[j];
data[i*m + j] /= (sqrt(float_n) * std[j]);
}
}
__kernel void corr_kernel(__global DATA_TYPE *symmat, __global DATA_TYPE *data, int m, int n)
{
int j1 = get_global_id(0);
int i, j2;
if (j1 < (m-1))
{
symmat[j1*m + j1] = 1.0;
for (j2 = (j1 + 1); j2 < m; j2++)
{
for(i = 0; i < n; i++)
{
symmat[j1*m + j2] += data[i*m + j1] * data[i*m + j2];
}
symmat[j2*m + j1] = symmat[j1*m + j2];
}
}
}

View File

@@ -0,0 +1,73 @@
/**
* correlation.h: This file is part of the PolyBench/GPU 1.0 test suite.
*
*
* Contact: Scott Grauer-Gray <sgrauerg@gmail.com>
* Will Killian <killian@udel.edu>
* Louis-Noel Pouchet <pouchet@cse.ohio-state.edu>
* Web address: http://www.cse.ohio-state.edu/~pouchet/software/polybench/GPU
*/
#ifndef CORRELATION_H
# define CORRELATION_H
/* Default to STANDARD_DATASET. */
# if !defined(MINI_DATASET) && !defined(SMALL_DATASET) && !defined(LARGE_DATASET) && !defined(EXTRALARGE_DATASET)
# define STANDARD_DATASET
# endif
/* Do not define anything if the user manually defines the size. */
# if !defined(M) && !defined(N)
/* Define the possible dataset sizes. */
# ifdef MINI_DATASET
#define M 512
#define N 512
# endif
# ifdef SMALL_DATASET
#define M 1024
#define N 1024
# endif
# ifdef STANDARD_DATASET /* Default if unspecified. */
#define M 2048
#define N 2048
# endif
# ifdef LARGE_DATASET
#define M 4096
#define N 4096
# endif
# ifdef EXTRALARGE_DATASET
#define M 8192
#define N 8192
# endif
# endif /* !N */
# define _PB_M POLYBENCH_LOOP_BOUND(M,m)
# define _PB_N POLYBENCH_LOOP_BOUND(N,n)
# ifndef DATA_TYPE
# define DATA_TYPE float
# define DATA_PRINTF_MODIFIER "%0.2lf "
# endif
/* Thread block dimensions for kernel 1*/
#define DIM_LOCAL_WORK_GROUP_KERNEL_1_X 256
#define DIM_LOCAL_WORK_GROUP_KERNEL_1_Y 1
/* Thread block dimensions for kernel 2*/
#define DIM_LOCAL_WORK_GROUP_KERNEL_2_X 256
#define DIM_LOCAL_WORK_GROUP_KERNEL_2_Y 1
/* Thread block dimensions for kernel 3*/
#define DIM_LOCAL_WORK_GROUP_KERNEL_3_X 32
#define DIM_LOCAL_WORK_GROUP_KERNEL_3_Y 8
/* Thread block dimensions for kernel 4*/
#define DIM_LOCAL_WORK_GROUP_KERNEL_4_X 256
#define DIM_LOCAL_WORK_GROUP_KERNEL_4_Y 1
#endif /* !CORRELATION*/

View File

@@ -0,0 +1,968 @@
unsigned char correlation_Gen9core_gen[] = {
0x43, 0x54, 0x4e, 0x49, 0x39, 0x04, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x57, 0xc7, 0x17, 0xd9, 0xa8, 0xbf, 0xed, 0x98,
0x22, 0xbc, 0x25, 0xe2, 0x0c, 0x00, 0x00, 0x00, 0x88, 0x05, 0x00, 0x00,
0x80, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
0x88, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x6d, 0x65, 0x61, 0x6e,
0x5f, 0x6b, 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x00, 0x01, 0x00, 0x60, 0x00,
0x0c, 0x02, 0x60, 0x20, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00,
0x06, 0x80, 0x00, 0x00, 0x04, 0x00, 0x00, 0x30, 0x00, 0x10, 0x00, 0x16,
0xc0, 0x04, 0xc0, 0x04, 0x41, 0x00, 0x00, 0x00, 0x2c, 0x0a, 0x80, 0x20,
0x24, 0x01, 0x00, 0x0a, 0x64, 0x00, 0x00, 0x00, 0x40, 0x00, 0x80, 0x00,
0x28, 0x0a, 0xa0, 0x20, 0x80, 0x00, 0x00, 0x12, 0x20, 0x00, 0xb1, 0x00,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x21, 0x80, 0x00, 0x00, 0x12,
0x40, 0x00, 0xb1, 0x00, 0x40, 0x96, 0x01, 0x20, 0x07, 0x0c, 0x05, 0x07,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0xc0, 0x21, 0x40, 0x01, 0x8d, 0x0a,
0xe0, 0x00, 0x00, 0x00, 0x10, 0x16, 0x73, 0x25, 0x07, 0x00, 0x0c, 0x08,
0x10, 0x20, 0x80, 0x05, 0x20, 0x0a, 0x00, 0x20, 0xc0, 0x01, 0x8d, 0x0a,
0x14, 0x01, 0x00, 0x00, 0x22, 0x00, 0xa1, 0x00, 0x00, 0x0e, 0x00, 0x20,
0x58, 0x02, 0x00, 0x00, 0x58, 0x02, 0x00, 0x00, 0x09, 0x00, 0x80, 0x00,
0x28, 0x0a, 0x00, 0x22, 0x80, 0x01, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00,
0x09, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x22, 0xc0, 0x01, 0x8d, 0x1e,
0x02, 0x00, 0x02, 0x00, 0x01, 0x00, 0x80, 0x00, 0xe8, 0x3e, 0x80, 0x22,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x20, 0x80, 0x00,
0xe8, 0x3e, 0xc0, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x40, 0x96, 0x79, 0x20, 0x07, 0x10, 0x10, 0x08, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x40, 0x22, 0x40, 0x02, 0x8d, 0x0a, 0x1c, 0x01, 0x00, 0x00,
0x10, 0x00, 0x80, 0x03, 0x26, 0x0a, 0x00, 0x20, 0x18, 0x01, 0x00, 0x1e,
0x00, 0x00, 0x00, 0x00, 0x10, 0x20, 0x80, 0x03, 0x26, 0x0a, 0x00, 0x20,
0x18, 0x01, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x33, 0x00, 0x80, 0x0c,
0x70, 0x40, 0x01, 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x5e, 0x02, 0x04,
0x33, 0x20, 0x80, 0x0c, 0x70, 0x60, 0x01, 0x00, 0x42, 0x02, 0x00, 0x00,
0x00, 0x5e, 0x02, 0x04, 0x20, 0x00, 0x01, 0x00, 0x06, 0x00, 0x00, 0x34,
0x00, 0x14, 0x00, 0x0e, 0x30, 0x00, 0x00, 0x00, 0x01, 0x00, 0x80, 0x00,
0xe8, 0x3e, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x20, 0x80, 0x00, 0xe8, 0x3e, 0x40, 0x23, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x34,
0x00, 0x14, 0x00, 0x0e, 0x28, 0x01, 0x00, 0x00, 0x01, 0x00, 0x80, 0x00,
0xe8, 0x3e, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x20, 0x80, 0x00, 0xe8, 0x3e, 0x40, 0x23, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2c, 0x1e, 0x84, 0x20,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00,
0x2c, 0x0a, 0x88, 0x20, 0x84, 0x00, 0x00, 0x0a, 0x14, 0x01, 0x00, 0x00,
0x40, 0x00, 0x00, 0x00, 0x2c, 0x0a, 0x84, 0x20, 0x84, 0x00, 0x00, 0x1e,
0x01, 0x00, 0x01, 0x00, 0x40, 0x96, 0x19, 0x20, 0xe0, 0x1c, 0x04, 0x0c,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0xc0, 0x23, 0x88, 0x00, 0x00, 0x0a,
0xc0, 0x01, 0x8d, 0x00, 0x10, 0x00, 0x80, 0x05, 0x24, 0x0a, 0x00, 0x20,
0x84, 0x00, 0x00, 0x0a, 0x18, 0x01, 0x00, 0x00, 0x10, 0x20, 0x80, 0x05,
0x24, 0x0a, 0x00, 0x20, 0x84, 0x00, 0x00, 0x0a, 0x18, 0x01, 0x00, 0x00,
0x09, 0x00, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x23, 0x80, 0x03, 0x8d, 0x1e,
0x02, 0x00, 0x02, 0x00, 0x09, 0x20, 0x80, 0x00, 0x28, 0x0a, 0xc0, 0x23,
0xc0, 0x03, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00, 0x40, 0x96, 0x01, 0x20,
0x07, 0x1c, 0x1c, 0x09, 0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0xc0, 0x23,
0xc0, 0x03, 0x8d, 0x0a, 0x20, 0x01, 0x00, 0x00, 0x31, 0x00, 0x80, 0x0c,
0x68, 0x02, 0x00, 0x24, 0x80, 0x03, 0x00, 0x06, 0x01, 0x5e, 0x20, 0x04,
0x31, 0x20, 0x80, 0x0c, 0x68, 0x02, 0x40, 0x24, 0xc0, 0x03, 0x00, 0x06,
0x01, 0x5e, 0x20, 0x04, 0x40, 0x56, 0x02, 0x20, 0xe7, 0x18, 0x18, 0x20,
0x40, 0x20, 0x80, 0x00, 0xe8, 0x3a, 0x40, 0x23, 0x40, 0x03, 0x8d, 0x3a,
0x40, 0x04, 0x8d, 0x00, 0x33, 0x00, 0x80, 0x0c, 0x70, 0x80, 0x01, 0x00,
0x02, 0x02, 0x00, 0x00, 0x00, 0x5e, 0x02, 0x04, 0x33, 0x20, 0x80, 0x0c,
0x70, 0xa0, 0x01, 0x00, 0x42, 0x02, 0x00, 0x00, 0x00, 0x5e, 0x02, 0x04,
0x20, 0x00, 0x01, 0x00, 0x04, 0x00, 0x00, 0x34, 0x00, 0x14, 0x00, 0x0e,
0x08, 0xff, 0xff, 0xff, 0x38, 0x56, 0x6e, 0x29, 0x07, 0x24, 0x18, 0x08,
0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x38, 0x20, 0x80, 0x09, 0xe8, 0x3a, 0xc0, 0x24,
0x40, 0x03, 0x8d, 0x3a, 0x10, 0x01, 0x00, 0x00, 0x33, 0x00, 0x80, 0x0c,
0x70, 0x40, 0x02, 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x5e, 0x02, 0x04,
0x33, 0x20, 0x80, 0x0c, 0x70, 0x60, 0x02, 0x00, 0x42, 0x02, 0x00, 0x00,
0x00, 0x5e, 0x02, 0x04, 0x25, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x20,
0x00, 0x00, 0x00, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x01, 0x4d, 0x00, 0x20,
0x07, 0x7f, 0x03, 0x00, 0x31, 0x00, 0x60, 0x07, 0x04, 0x02, 0x00, 0x20,
0xe0, 0x0f, 0x00, 0x06, 0x10, 0x00, 0x00, 0x82, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
0x00, 0xc0, 0xff, 0x83, 0x00, 0x00, 0x00, 0x03, 0x7f, 0x00, 0xff, 0x1f,
0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x83, 0x00, 0x00, 0x00, 0x03,
0x7f, 0x00, 0xff, 0x1f, 0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x40, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x80, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00,
0x80, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x14, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x2b, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x3c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x48, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
0x34, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x60, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00,
0x8c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00,
0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c,
0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x6d, 0x65, 0x61, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x44, 0x41, 0x54, 0x41,
0x5f, 0x54, 0x59, 0x50, 0x45, 0x2a, 0x3b, 0x38, 0x00, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00,
0x54, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c,
0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x64, 0x61, 0x74, 0x61, 0x00, 0x00, 0x00, 0x00, 0x44, 0x41, 0x54, 0x41,
0x5f, 0x54, 0x59, 0x50, 0x45, 0x2a, 0x3b, 0x38, 0x00, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00,
0x50, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74,
0x65, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x6e, 0x00, 0x44, 0x41, 0x54, 0x41,
0x5f, 0x54, 0x59, 0x50, 0x45, 0x3b, 0x34, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00,
0x03, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x5f, 0x5f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x00,
0x69, 0x6e, 0x74, 0x3b, 0x34, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x5f, 0x5f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00,
0x69, 0x6e, 0x74, 0x3b, 0x34, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0xdb, 0x6c, 0x0d, 0x95, 0xa8, 0xbf, 0xed, 0x98,
0x22, 0xbc, 0x25, 0xe2, 0x0c, 0x00, 0x00, 0x00, 0xc0, 0x06, 0x00, 0x00,
0x80, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
0xcc, 0x00, 0x00, 0x00, 0xf0, 0x03, 0x00, 0x00, 0x73, 0x74, 0x64, 0x5f,
0x6b, 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x00, 0x00, 0x01, 0x00, 0x60, 0x00,
0x0c, 0x02, 0x60, 0x20, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00,
0x06, 0x80, 0x00, 0x00, 0x04, 0x00, 0x00, 0x30, 0x00, 0x10, 0x00, 0x16,
0xc0, 0x04, 0xc0, 0x04, 0x41, 0x00, 0x00, 0x00, 0x2c, 0x0a, 0xc0, 0x2f,
0x34, 0x01, 0x00, 0x0a, 0x64, 0x00, 0x00, 0x00, 0x40, 0x00, 0x80, 0x00,
0x28, 0x0a, 0x80, 0x20, 0xc0, 0x0f, 0x00, 0x12, 0x20, 0x00, 0xb1, 0x00,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x2f, 0xc0, 0x0f, 0x00, 0x12,
0x40, 0x00, 0xb1, 0x00, 0x40, 0x96, 0x01, 0x20, 0x07, 0x0a, 0x04, 0x07,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x2f, 0x80, 0x0f, 0x8d, 0x0a,
0xe0, 0x00, 0x00, 0x00, 0x10, 0x00, 0x80, 0x05, 0x22, 0x0a, 0x00, 0x20,
0x40, 0x01, 0x8d, 0x0a, 0x20, 0x01, 0x00, 0x00, 0x10, 0x20, 0x80, 0x05,
0x22, 0x0a, 0x00, 0x20, 0x40, 0x0f, 0x8d, 0x0a, 0x20, 0x01, 0x00, 0x00,
0x22, 0x00, 0xa1, 0x00, 0x02, 0x0e, 0x00, 0x20, 0x40, 0x03, 0x00, 0x00,
0x40, 0x03, 0x00, 0x00, 0x09, 0x00, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x21,
0x40, 0x01, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00, 0x09, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x00, 0x2f, 0x40, 0x0f, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00,
0x01, 0x00, 0x80, 0x00, 0xe8, 0x3e, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x20, 0x80, 0x00, 0xe8, 0x3e, 0x80, 0x2e,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x96, 0x65, 0x20,
0x07, 0x0e, 0x0c, 0x09, 0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0xc0, 0x2e,
0x00, 0x0f, 0x8d, 0x0a, 0x2c, 0x01, 0x00, 0x00, 0x10, 0x00, 0x80, 0x03,
0x24, 0x0a, 0x00, 0x20, 0x24, 0x01, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00,
0x10, 0x20, 0x80, 0x03, 0x24, 0x0a, 0x00, 0x20, 0x24, 0x01, 0x00, 0x1e,
0x00, 0x00, 0x00, 0x00, 0x33, 0x00, 0x80, 0x0c, 0x70, 0x00, 0x01, 0x00,
0xc2, 0x01, 0x00, 0x00, 0x01, 0x5e, 0x02, 0x04, 0x33, 0x20, 0x80, 0x0c,
0x70, 0x40, 0x07, 0x00, 0xc2, 0x0e, 0x00, 0x00, 0x01, 0x5e, 0x02, 0x04,
0x20, 0x00, 0x01, 0x00, 0x04, 0x00, 0x00, 0x34, 0x00, 0x14, 0x00, 0x0e,
0x30, 0x00, 0x00, 0x00, 0x01, 0x00, 0x80, 0x00, 0xe8, 0x3e, 0x40, 0x22,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x20, 0x80, 0x00,
0xe8, 0x3e, 0x40, 0x2e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x20, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x34, 0x00, 0x14, 0x00, 0x0e,
0x68, 0x01, 0x00, 0x00, 0x40, 0x96, 0x5d, 0x20, 0x07, 0x14, 0x0c, 0x09,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x00, 0x2e, 0x00, 0x0f, 0x8d, 0x0a,
0x28, 0x01, 0x00, 0x00, 0x01, 0x00, 0x80, 0x00, 0xe8, 0x3e, 0x40, 0x22,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x20, 0x80, 0x00,
0xe8, 0x3e, 0x40, 0x2e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x2c, 0x1e, 0xc0, 0x20, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x2c, 0x0a, 0xc4, 0x2f,
0xc0, 0x00, 0x00, 0x0a, 0x20, 0x01, 0x00, 0x00, 0x31, 0x00, 0x80, 0x0c,
0x68, 0x02, 0x20, 0x2d, 0x80, 0x02, 0x00, 0x06, 0x00, 0x5e, 0x20, 0x04,
0x31, 0x20, 0x80, 0x0c, 0x68, 0x02, 0x40, 0x23, 0x00, 0x0e, 0x00, 0x06,
0x00, 0x5e, 0x20, 0x04, 0x40, 0x00, 0x00, 0x00, 0x2c, 0x0a, 0xc0, 0x20,
0xc0, 0x00, 0x00, 0x1e, 0x01, 0x00, 0x01, 0x00, 0x40, 0x96, 0x15, 0x20,
0xe0, 0x16, 0x7e, 0x0a, 0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0xc0, 0x2d,
0xc4, 0x0f, 0x00, 0x0a, 0x40, 0x0f, 0x8d, 0x00, 0x10, 0x17, 0x2f, 0x25,
0x00, 0x00, 0x06, 0x09, 0x09, 0x00, 0x80, 0x00, 0x28, 0x0a, 0xc0, 0x22,
0xc0, 0x02, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00, 0x09, 0x20, 0x80, 0x00,
0x28, 0x0a, 0xc0, 0x2d, 0xc0, 0x0d, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00,
0x10, 0x20, 0x80, 0x05, 0x24, 0x0a, 0x00, 0x20, 0xc0, 0x00, 0x00, 0x0a,
0x24, 0x01, 0x00, 0x00, 0x40, 0x96, 0x6d, 0x20, 0x07, 0x16, 0x16, 0x09,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0xc0, 0x2d, 0xc0, 0x0d, 0x8d, 0x0a,
0x30, 0x01, 0x00, 0x00, 0x31, 0x00, 0x80, 0x0c, 0x68, 0x02, 0x60, 0x2d,
0xc0, 0x02, 0x00, 0x06, 0x02, 0x5e, 0x20, 0x04, 0x31, 0x20, 0x80, 0x0c,
0x68, 0x02, 0x00, 0x23, 0xc0, 0x0d, 0x00, 0x06, 0x02, 0x5e, 0x20, 0x04,
0x40, 0x56, 0x02, 0x20, 0xf7, 0x6b, 0x6b, 0x69, 0x40, 0x20, 0x80, 0x00,
0xe8, 0x3a, 0x00, 0x23, 0x00, 0x03, 0x8d, 0x3a, 0x40, 0x43, 0x8d, 0x00,
0x5b, 0x22, 0x01, 0x20, 0x00, 0x90, 0xac, 0xd7, 0x5b, 0x23, 0x07, 0x20,
0x00, 0x90, 0x63, 0x30, 0x33, 0x00, 0x80, 0x0c, 0x70, 0x20, 0x01, 0x00,
0xc2, 0x01, 0x00, 0x00, 0x01, 0x5e, 0x02, 0x04, 0x33, 0x20, 0x80, 0x0c,
0x70, 0x20, 0x07, 0x00, 0xc2, 0x0e, 0x00, 0x00, 0x01, 0x5e, 0x02, 0x04,
0x20, 0x00, 0x01, 0x00, 0x04, 0x00, 0x00, 0x34, 0x00, 0x14, 0x00, 0x0e,
0xe0, 0xfe, 0xff, 0xff, 0x38, 0x56, 0x76, 0x29, 0x07, 0x67, 0x12, 0x08,
0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x38, 0x20, 0x80, 0x09, 0xe8, 0x3a, 0x80, 0x23,
0x40, 0x0e, 0x8d, 0x3a, 0x18, 0x01, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x38, 0x16, 0x01, 0x24, 0x07, 0x65, 0x67, 0x00, 0x38, 0x20, 0x80, 0x04,
0xe8, 0x3a, 0xc0, 0x23, 0x80, 0x03, 0x8d, 0x00, 0x00, 0x00, 0x00, 0x00,
0x10, 0x00, 0x80, 0x06, 0xe2, 0x3a, 0x00, 0x20, 0xa0, 0x0c, 0x8d, 0x3a,
0x1c, 0x01, 0x00, 0x00, 0x33, 0x00, 0x80, 0x0c, 0x70, 0x50, 0x06, 0x00,
0xc2, 0x01, 0x00, 0x00, 0x01, 0x5e, 0x02, 0x04, 0x10, 0x20, 0x80, 0x06,
0xe2, 0x3a, 0x00, 0x20, 0xc0, 0x03, 0x8d, 0x3a, 0x1c, 0x01, 0x00, 0x00,
0x33, 0x20, 0x80, 0x0c, 0x70, 0xe0, 0x01, 0x00, 0xc2, 0x0e, 0x00, 0x00,
0x01, 0x5e, 0x02, 0x04, 0x22, 0x00, 0xa1, 0x00, 0x02, 0x0e, 0x00, 0x20,
0x50, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x01, 0x00, 0x80, 0x00,
0xe8, 0x3e, 0x60, 0x2c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f,
0x01, 0x20, 0x80, 0x00, 0xe8, 0x3e, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x80, 0x3f, 0x33, 0x00, 0x80, 0x0c, 0x70, 0x30, 0x06, 0x00,
0xc2, 0x01, 0x00, 0x00, 0x01, 0x5e, 0x02, 0x04, 0x33, 0x20, 0x80, 0x0c,
0x70, 0x00, 0x02, 0x00, 0xc2, 0x0e, 0x00, 0x00, 0x01, 0x5e, 0x02, 0x04,
0x25, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x0e,
0x10, 0x00, 0x00, 0x00, 0x25, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x20,
0x00, 0x00, 0x00, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x01, 0x4d, 0x00, 0x20,
0x07, 0x7f, 0x03, 0x00, 0x31, 0x00, 0x60, 0x07, 0x04, 0x02, 0x00, 0x20,
0xe0, 0x0f, 0x00, 0x06, 0x10, 0x00, 0x00, 0x82, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xc3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x03, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x83, 0x00, 0x00, 0x00, 0x03,
0x7f, 0x00, 0xff, 0x1f, 0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x83,
0x00, 0x00, 0x00, 0x03, 0x7f, 0x00, 0xff, 0x1f, 0x00, 0x00, 0xe0, 0x0f,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xc0, 0xff, 0x83, 0x00, 0x00, 0x00, 0x03, 0x7f, 0x00, 0xff, 0x1f,
0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
0x80, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xc0, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00,
0xc0, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x14, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x2b, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x30, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x2a, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x50, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x5c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x1e, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
0x1e, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x40, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
0x1e, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x80, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x03, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00,
0x40, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x06, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x60, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00,
0x8c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00,
0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c,
0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x6d, 0x65, 0x61, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x44, 0x41, 0x54, 0x41,
0x5f, 0x54, 0x59, 0x50, 0x45, 0x2a, 0x3b, 0x38, 0x00, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00,
0x50, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c,
0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x73, 0x74, 0x64, 0x00, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50,
0x45, 0x2a, 0x3b, 0x38, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x5f, 0x5f, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x00, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x64, 0x61, 0x74, 0x61,
0x00, 0x00, 0x00, 0x00, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50,
0x45, 0x2a, 0x3b, 0x38, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00,
0x03, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x5f, 0x5f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x66, 0x6c, 0x6f, 0x61,
0x74, 0x5f, 0x6e, 0x00, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50,
0x45, 0x3b, 0x34, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x1a, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x70, 0x72,
0x69, 0x76, 0x61, 0x74, 0x65, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x65, 0x70, 0x73, 0x00, 0x44, 0x41, 0x54, 0x41,
0x5f, 0x54, 0x59, 0x50, 0x45, 0x3b, 0x34, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00,
0x05, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x5f, 0x5f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x00,
0x69, 0x6e, 0x74, 0x3b, 0x34, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00,
0x06, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x5f, 0x5f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00,
0x69, 0x6e, 0x74, 0x3b, 0x34, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0xb0, 0x9a, 0x86, 0x27, 0xa8, 0xbf, 0xed, 0x98,
0x22, 0xbc, 0x25, 0xe2, 0x10, 0x00, 0x00, 0x00, 0x4c, 0x06, 0x00, 0x00,
0xc0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
0xcc, 0x00, 0x00, 0x00, 0x18, 0x03, 0x00, 0x00, 0x72, 0x65, 0x64, 0x75,
0x63, 0x65, 0x5f, 0x6b, 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x00, 0x00, 0x00,
0x01, 0x00, 0x60, 0x00, 0x0c, 0x02, 0xa0, 0x20, 0x00, 0x00, 0x20, 0x00,
0x00, 0x00, 0x00, 0x00, 0x06, 0x80, 0x00, 0x00, 0x04, 0x00, 0x00, 0x30,
0x00, 0x10, 0x00, 0x16, 0xc0, 0x04, 0xc0, 0x04, 0x41, 0x00, 0x00, 0x00,
0x2c, 0x0a, 0xc0, 0x20, 0x30, 0x01, 0x00, 0x0a, 0xa4, 0x00, 0x00, 0x00,
0x41, 0x00, 0x00, 0x00, 0x2c, 0x0a, 0xc4, 0x20, 0x34, 0x01, 0x00, 0x0a,
0xb8, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x4c, 0x16, 0xcc, 0x20,
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x80, 0x21, 0xc0, 0x00, 0x00, 0x12, 0x40, 0x00, 0xb1, 0x00,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x22, 0xc4, 0x00, 0x00, 0x12,
0x80, 0x00, 0xb1, 0x00, 0x40, 0x00, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x21,
0xc0, 0x00, 0x00, 0x12, 0x20, 0x00, 0xb1, 0x00, 0x40, 0x00, 0x80, 0x00,
0x28, 0x0a, 0x40, 0x22, 0xc4, 0x00, 0x00, 0x12, 0x60, 0x00, 0xb1, 0x00,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x00, 0x22, 0x80, 0x01, 0x8d, 0x0a,
0xe0, 0x00, 0x00, 0x00, 0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x00, 0x23,
0x80, 0x02, 0x8d, 0x0a, 0xe4, 0x00, 0x00, 0x00, 0x40, 0x96, 0x01, 0x20,
0x07, 0x0e, 0x0a, 0x07, 0x40, 0x96, 0x2d, 0x20, 0x07, 0x16, 0x12, 0x07,
0x10, 0x20, 0x80, 0x05, 0x22, 0x0a, 0x00, 0x20, 0x00, 0x02, 0x8d, 0x0a,
0x1c, 0x01, 0x00, 0x00, 0x10, 0x20, 0x80, 0x05, 0x20, 0x0a, 0x00, 0x20,
0x00, 0x03, 0x8d, 0x0a, 0x20, 0x01, 0x00, 0x00, 0x10, 0x16, 0x7b, 0x25,
0x07, 0x00, 0x0e, 0x08, 0x02, 0x20, 0x81, 0x00, 0x4a, 0x12, 0x60, 0x27,
0xcc, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x81, 0x00,
0x48, 0x12, 0x40, 0x27, 0xcc, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x00,
0x10, 0x19, 0x03, 0x25, 0x07, 0x00, 0x16, 0x09, 0x05, 0x20, 0x80, 0x02,
0x40, 0x12, 0x00, 0x20, 0x40, 0x07, 0xb1, 0x12, 0x60, 0x07, 0xb1, 0x00,
0x22, 0x00, 0xa1, 0x00, 0x00, 0x0e, 0x00, 0x20, 0xd0, 0x01, 0x00, 0x00,
0xd0, 0x01, 0x00, 0x00, 0x41, 0x96, 0x79, 0x20, 0x07, 0x26, 0x16, 0x08,
0x41, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x00, 0x25, 0x00, 0x03, 0x8d, 0x0a,
0x1c, 0x01, 0x00, 0x00, 0x09, 0x00, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x23,
0xc0, 0x01, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00, 0x09, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x80, 0x23, 0x00, 0x02, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00,
0x40, 0x96, 0x01, 0x20, 0xe7, 0x26, 0x26, 0x0e, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x00, 0x25, 0x00, 0x05, 0x8d, 0x0a, 0x00, 0x02, 0x8d, 0x00,
0x40, 0x96, 0x2d, 0x20, 0x07, 0x1e, 0x1a, 0x09, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x00, 0x24, 0x80, 0x03, 0x8d, 0x0a, 0x24, 0x01, 0x00, 0x00,
0x09, 0x00, 0x80, 0x00, 0x28, 0x0a, 0xc0, 0x24, 0xc0, 0x04, 0x8d, 0x1e,
0x02, 0x00, 0x02, 0x00, 0x09, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x00, 0x25,
0x00, 0x05, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00, 0x31, 0x00, 0x80, 0x0c,
0x68, 0x02, 0x40, 0x24, 0xc0, 0x03, 0x00, 0x06, 0x00, 0x5e, 0x20, 0x04,
0x40, 0x96, 0x5d, 0x20, 0x07, 0x32, 0x1a, 0x09, 0x40, 0x96, 0x65, 0x20,
0x07, 0x26, 0x26, 0x09, 0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x00, 0x25,
0x00, 0x05, 0x8d, 0x0a, 0x2c, 0x01, 0x00, 0x00, 0x31, 0x20, 0x80, 0x0c,
0x68, 0x02, 0x80, 0x24, 0x00, 0x04, 0x00, 0x06, 0x00, 0x5e, 0x20, 0x04,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x26, 0x80, 0x03, 0x8d, 0x0a,
0x28, 0x01, 0x00, 0x00, 0x31, 0x00, 0x80, 0x0c, 0x68, 0x02, 0x40, 0x25,
0xc0, 0x04, 0x00, 0x06, 0x02, 0x5e, 0x20, 0x04, 0x31, 0x20, 0x80, 0x0c,
0x68, 0x02, 0x80, 0x25, 0x00, 0x05, 0x00, 0x06, 0x02, 0x5e, 0x20, 0x04,
0x38, 0x00, 0x00, 0x04, 0xec, 0x3a, 0xc8, 0x20, 0x18, 0x01, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x40, 0x56, 0x02, 0x20, 0xf7, 0x2e, 0x2a, 0x22,
0x40, 0x20, 0x80, 0x00, 0xe8, 0x3a, 0x00, 0x26, 0x80, 0x05, 0x8d, 0x3a,
0x80, 0x44, 0x8d, 0x00, 0x33, 0x00, 0x80, 0x0c, 0x70, 0xe0, 0x02, 0x00,
0xc2, 0x04, 0x00, 0x00, 0x02, 0x5e, 0x02, 0x04, 0x33, 0x20, 0x80, 0x0c,
0x70, 0x00, 0x03, 0x00, 0x02, 0x05, 0x00, 0x00, 0x02, 0x5e, 0x02, 0x04,
0x31, 0x00, 0x80, 0x0c, 0x68, 0x02, 0xc0, 0x26, 0x40, 0x06, 0x00, 0x06,
0x01, 0x5e, 0x20, 0x04, 0x31, 0x20, 0x80, 0x0c, 0x68, 0x02, 0x00, 0x27,
0x80, 0x06, 0x00, 0x06, 0x01, 0x5e, 0x20, 0x04, 0x41, 0x56, 0x1a, 0x20,
0xe0, 0x36, 0x06, 0x36, 0x41, 0x20, 0x80, 0x00, 0xe8, 0x3a, 0x00, 0x27,
0xc8, 0x00, 0x00, 0x3a, 0x00, 0x07, 0x8d, 0x00, 0x38, 0x56, 0x02, 0x29,
0xe7, 0x36, 0x2e, 0x36, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x20, 0x80, 0x09,
0xe8, 0x3a, 0x00, 0x27, 0x00, 0x06, 0x8d, 0x3a, 0x00, 0x07, 0x8d, 0x00,
0x33, 0x00, 0x80, 0x0c, 0x70, 0x60, 0x03, 0x00, 0xc2, 0x04, 0x00, 0x00,
0x02, 0x5e, 0x02, 0x04, 0x33, 0x20, 0x80, 0x0c, 0x70, 0x80, 0x03, 0x00,
0x02, 0x05, 0x00, 0x00, 0x02, 0x5e, 0x02, 0x04, 0x25, 0x00, 0xa0, 0x00,
0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x0e, 0x10, 0x00, 0x00, 0x00,
0x01, 0x4d, 0x00, 0x20, 0x07, 0x7f, 0x05, 0x00, 0x31, 0x00, 0x60, 0x07,
0x04, 0x02, 0x00, 0x20, 0xe0, 0x0f, 0x00, 0x06, 0x10, 0x00, 0x00, 0x82,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xc3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x83,
0x00, 0x00, 0x00, 0x03, 0x7f, 0x00, 0xff, 0x1f, 0x00, 0x00, 0xe0, 0x0f,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xc0, 0xff, 0x83, 0x00, 0x00, 0x00, 0x03, 0x7f, 0x00, 0xff, 0x1f,
0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x83, 0x00, 0x00, 0x00, 0x03,
0x7f, 0x00, 0xff, 0x1f, 0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x40, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00,
0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x14, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x2b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x48, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x54, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x3c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x05, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x60, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00,
0x8c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00,
0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c,
0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x6d, 0x65, 0x61, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x44, 0x41, 0x54, 0x41,
0x5f, 0x54, 0x59, 0x50, 0x45, 0x2a, 0x3b, 0x38, 0x00, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00,
0x50, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c,
0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x73, 0x74, 0x64, 0x00, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50,
0x45, 0x2a, 0x3b, 0x38, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x5f, 0x5f, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x00, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x64, 0x61, 0x74, 0x61,
0x00, 0x00, 0x00, 0x00, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50,
0x45, 0x2a, 0x3b, 0x38, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00,
0x03, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x5f, 0x5f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x66, 0x6c, 0x6f, 0x61,
0x74, 0x5f, 0x6e, 0x00, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50,
0x45, 0x3b, 0x34, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x1a, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x70, 0x72,
0x69, 0x76, 0x61, 0x74, 0x65, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x00, 0x69, 0x6e, 0x74, 0x3b,
0x34, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x1a, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x70, 0x72,
0x69, 0x76, 0x61, 0x74, 0x65, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x69, 0x6e, 0x74, 0x3b,
0x34, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x35, 0x63, 0x57, 0xa9, 0xa8, 0xbf, 0xed, 0x98, 0x22, 0xbc, 0x25, 0xe2,
0x0c, 0x00, 0x00, 0x00, 0x10, 0x05, 0x00, 0x00, 0xc0, 0x05, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00,
0x30, 0x05, 0x00, 0x00, 0x63, 0x6f, 0x72, 0x72, 0x5f, 0x6b, 0x65, 0x72,
0x6e, 0x65, 0x6c, 0x00, 0x01, 0x00, 0x60, 0x00, 0x0c, 0x02, 0x60, 0x20,
0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x80, 0x00, 0x00,
0x04, 0x00, 0x00, 0x30, 0x00, 0x10, 0x00, 0x16, 0xc0, 0x04, 0xc0, 0x04,
0x41, 0x80, 0x2d, 0x20, 0x00, 0x7e, 0x09, 0x03, 0x40, 0x00, 0x00, 0x00,
0x2c, 0x0a, 0xc0, 0x20, 0x10, 0x01, 0x00, 0x1e, 0xff, 0xff, 0xff, 0xff,
0x40, 0x00, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x20, 0xc0, 0x0f, 0x00, 0x12,
0x20, 0x00, 0xb1, 0x00, 0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x2f,
0xc0, 0x0f, 0x00, 0x12, 0x40, 0x00, 0xb1, 0x00, 0x40, 0x96, 0x01, 0x20,
0x07, 0x0a, 0x04, 0x07, 0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x2f,
0x80, 0x0f, 0x8d, 0x0a, 0xe0, 0x00, 0x00, 0x00, 0x10, 0x00, 0x80, 0x05,
0x22, 0x0a, 0x00, 0x20, 0x40, 0x01, 0x8d, 0x0a, 0xc0, 0x00, 0x00, 0x00,
0x10, 0x20, 0x80, 0x05, 0x22, 0x0a, 0x00, 0x20, 0x40, 0x0f, 0x8d, 0x0a,
0xc0, 0x00, 0x00, 0x00, 0x22, 0x00, 0xa1, 0x00, 0x02, 0x0e, 0x00, 0x20,
0x68, 0x04, 0x00, 0x00, 0x68, 0x04, 0x00, 0x00, 0x41, 0x96, 0x6d, 0x20,
0x07, 0x78, 0x0a, 0x08, 0x41, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x21,
0x40, 0x0f, 0x8d, 0x0a, 0x10, 0x01, 0x00, 0x00, 0x40, 0x00, 0x80, 0x00,
0x28, 0x0a, 0x40, 0x2e, 0x40, 0x01, 0x8d, 0x1e, 0x01, 0x00, 0x01, 0x00,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x22, 0x40, 0x0f, 0x8d, 0x1e,
0x01, 0x00, 0x01, 0x00, 0x40, 0x96, 0x01, 0x20, 0xe7, 0x76, 0x78, 0x0a,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0xc0, 0x21, 0x80, 0x01, 0x8d, 0x0a,
0x40, 0x0f, 0x8d, 0x00, 0x01, 0x00, 0x80, 0x00, 0xe8, 0x3e, 0x80, 0x2e,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x01, 0x20, 0x80, 0x00,
0xe8, 0x3e, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f,
0x09, 0x00, 0x80, 0x00, 0x28, 0x0a, 0xc0, 0x2e, 0xc0, 0x0e, 0x8d, 0x1e,
0x02, 0x00, 0x02, 0x00, 0x09, 0x20, 0x80, 0x00, 0x28, 0x0a, 0xc0, 0x21,
0xc0, 0x01, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00, 0x10, 0x16, 0x6f, 0x25,
0x07, 0x00, 0x72, 0x08, 0x10, 0x20, 0x80, 0x05, 0x20, 0x0a, 0x00, 0x20,
0x40, 0x02, 0x8d, 0x0a, 0x10, 0x01, 0x00, 0x00, 0x40, 0x96, 0x75, 0x20,
0x07, 0x76, 0x76, 0x08, 0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0xc0, 0x21,
0xc0, 0x01, 0x8d, 0x0a, 0x18, 0x01, 0x00, 0x00, 0x33, 0x00, 0x80, 0x0c,
0x70, 0x40, 0x07, 0x00, 0xc2, 0x0e, 0x00, 0x00, 0x00, 0x5e, 0x02, 0x04,
0x33, 0x20, 0x80, 0x0c, 0x70, 0x00, 0x01, 0x00, 0xc2, 0x01, 0x00, 0x00,
0x00, 0x5e, 0x02, 0x04, 0x22, 0x00, 0xa1, 0x00, 0x00, 0x0e, 0x00, 0x20,
0x68, 0x03, 0x00, 0x00, 0x68, 0x03, 0x00, 0x00, 0x10, 0x00, 0x80, 0x03,
0x24, 0x0a, 0x00, 0x20, 0x14, 0x01, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00,
0x10, 0x20, 0x80, 0x03, 0x24, 0x0a, 0x00, 0x20, 0x14, 0x01, 0x00, 0x1e,
0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x11, 0x00, 0x04, 0x00, 0x00, 0x34,
0x00, 0x14, 0x00, 0x0e, 0xe0, 0x01, 0x00, 0x00, 0x40, 0x96, 0x01, 0x20,
0xe7, 0x70, 0x78, 0x72, 0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x22,
0x80, 0x01, 0x8d, 0x0a, 0x40, 0x02, 0x8d, 0x00, 0x01, 0x00, 0x00, 0x00,
0x2c, 0x1e, 0xc4, 0x2f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x09, 0x00, 0x80, 0x00, 0x28, 0x0a, 0x00, 0x2e, 0x00, 0x0e, 0x8d, 0x1e,
0x02, 0x00, 0x02, 0x00, 0x09, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x22,
0x80, 0x02, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00, 0x40, 0x96, 0x75, 0x20,
0x07, 0x70, 0x70, 0x08, 0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x22,
0x80, 0x02, 0x8d, 0x0a, 0x18, 0x01, 0x00, 0x00, 0x31, 0x00, 0x80, 0x0c,
0x68, 0x02, 0xc0, 0x2d, 0x00, 0x0e, 0x00, 0x06, 0x00, 0x5e, 0x20, 0x04,
0x31, 0x20, 0x80, 0x0c, 0x68, 0x02, 0xc0, 0x22, 0x80, 0x02, 0x00, 0x06,
0x00, 0x5e, 0x20, 0x04, 0x41, 0x00, 0x00, 0x00, 0x2c, 0x0a, 0xc4, 0x20,
0xc4, 0x0f, 0x00, 0x0a, 0x10, 0x01, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
0x2c, 0x0a, 0xc4, 0x2f, 0xc4, 0x0f, 0x00, 0x1e, 0x01, 0x00, 0x01, 0x00,
0x40, 0x96, 0x15, 0x20, 0xe0, 0x6c, 0x06, 0x0a, 0x40, 0x96, 0x15, 0x20,
0xe0, 0x1a, 0x06, 0x72, 0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x00, 0x23,
0xc4, 0x00, 0x00, 0x0a, 0x40, 0x0f, 0x8d, 0x00, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0xa0, 0x2c, 0xc4, 0x00, 0x00, 0x0a, 0x40, 0x02, 0x8d, 0x00,
0x09, 0x00, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x2d, 0x80, 0x0d, 0x8d, 0x1e,
0x02, 0x00, 0x02, 0x00, 0x09, 0x00, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x23,
0x40, 0x03, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00, 0x09, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x00, 0x23, 0x00, 0x03, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00,
0x09, 0x20, 0x80, 0x00, 0x28, 0x0a, 0xa0, 0x2c, 0xa0, 0x0c, 0x8d, 0x1e,
0x02, 0x00, 0x02, 0x00, 0x40, 0x96, 0x79, 0x20, 0x07, 0x6c, 0x6c, 0x08,
0x40, 0x96, 0x79, 0x20, 0x07, 0x1a, 0x1a, 0x08, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x00, 0x23, 0x00, 0x03, 0x8d, 0x0a, 0x1c, 0x01, 0x00, 0x00,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0xa0, 0x2c, 0xa0, 0x0c, 0x8d, 0x0a,
0x1c, 0x01, 0x00, 0x00, 0x31, 0x00, 0x80, 0x0c, 0x68, 0x02, 0x20, 0x2d,
0x80, 0x0d, 0x00, 0x06, 0x01, 0x5e, 0x20, 0x04, 0x10, 0x00, 0x80, 0x05,
0x26, 0x0a, 0x00, 0x20, 0xc4, 0x0f, 0x00, 0x0a, 0x14, 0x01, 0x00, 0x00,
0x31, 0x00, 0x80, 0x0c, 0x68, 0x02, 0x80, 0x23, 0x40, 0x03, 0x00, 0x06,
0x01, 0x5e, 0x20, 0x04, 0x31, 0x20, 0x80, 0x0c, 0x68, 0x02, 0xe0, 0x2c,
0x00, 0x03, 0x00, 0x06, 0x01, 0x5e, 0x20, 0x04, 0x31, 0x20, 0x80, 0x0c,
0x68, 0x02, 0xc0, 0x23, 0xa0, 0x0c, 0x00, 0x06, 0x01, 0x5e, 0x20, 0x04,
0x10, 0x20, 0x80, 0x05, 0x26, 0x0a, 0x00, 0x20, 0xc4, 0x0f, 0x00, 0x0a,
0x14, 0x01, 0x00, 0x00, 0x5b, 0xe2, 0x06, 0x20, 0x00, 0x70, 0x73, 0xd2,
0x5b, 0x63, 0x01, 0x20, 0x00, 0xb0, 0x78, 0xce, 0x33, 0x00, 0x80, 0x0c,
0x70, 0xe0, 0x06, 0x00, 0x02, 0x0e, 0x00, 0x00, 0x00, 0x5e, 0x02, 0x04,
0x33, 0x20, 0x80, 0x0c, 0x70, 0x60, 0x01, 0x00, 0x82, 0x02, 0x00, 0x00,
0x00, 0x5e, 0x02, 0x04, 0x20, 0x00, 0x01, 0x00, 0x06, 0x00, 0x00, 0x34,
0x00, 0x14, 0x00, 0x0e, 0xa0, 0xfe, 0xff, 0xff, 0x40, 0x96, 0x01, 0x20,
0xe7, 0x63, 0x78, 0x72, 0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x00, 0x24,
0x80, 0x01, 0x8d, 0x0a, 0x40, 0x02, 0x8d, 0x00, 0x41, 0x96, 0x6d, 0x20,
0x07, 0x5f, 0x72, 0x08, 0x41, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x24,
0x40, 0x02, 0x8d, 0x0a, 0x10, 0x01, 0x00, 0x00, 0x09, 0x00, 0x80, 0x00,
0x28, 0x0a, 0x60, 0x2c, 0x60, 0x0c, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00,
0x09, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x00, 0x24, 0x00, 0x04, 0x8d, 0x1e,
0x02, 0x00, 0x02, 0x00, 0x40, 0x96, 0x01, 0x20, 0xe7, 0x5f, 0x5f, 0x0a,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x24, 0x80, 0x04, 0x8d, 0x0a,
0x40, 0x0f, 0x8d, 0x00, 0x40, 0x96, 0x75, 0x20, 0x07, 0x63, 0x63, 0x08,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x00, 0x24, 0x00, 0x04, 0x8d, 0x0a,
0x18, 0x01, 0x00, 0x00, 0x09, 0x00, 0x80, 0x00, 0x28, 0x0a, 0xe0, 0x2b,
0xe0, 0x0b, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00, 0x09, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x80, 0x24, 0x80, 0x04, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00,
0x31, 0x00, 0x80, 0x0c, 0x68, 0x02, 0x20, 0x2c, 0x60, 0x0c, 0x00, 0x06,
0x00, 0x5e, 0x20, 0x04, 0x40, 0x00, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x2e,
0x40, 0x0e, 0x8d, 0x1e, 0x01, 0x00, 0x01, 0x00, 0x31, 0x20, 0x80, 0x0c,
0x68, 0x02, 0x40, 0x24, 0x00, 0x04, 0x00, 0x06, 0x00, 0x5e, 0x20, 0x04,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x22, 0x40, 0x02, 0x8d, 0x1e,
0x01, 0x00, 0x01, 0x00, 0x40, 0x96, 0x75, 0x20, 0x07, 0x5f, 0x5f, 0x08,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x24, 0x80, 0x04, 0x8d, 0x0a,
0x18, 0x01, 0x00, 0x00, 0x10, 0x00, 0x80, 0x05, 0x22, 0x0a, 0x00, 0x20,
0x40, 0x0e, 0x8d, 0x0a, 0x10, 0x01, 0x00, 0x00, 0x10, 0x20, 0x80, 0x05,
0x22, 0x0a, 0x00, 0x20, 0x40, 0x02, 0x8d, 0x0a, 0x10, 0x01, 0x00, 0x00,
0x33, 0x00, 0x80, 0x0c, 0x70, 0x10, 0x06, 0x00, 0xe2, 0x0b, 0x00, 0x00,
0x00, 0x5e, 0x02, 0x04, 0x33, 0x20, 0x80, 0x0c, 0x70, 0x20, 0x02, 0x00,
0x82, 0x04, 0x00, 0x00, 0x00, 0x5e, 0x02, 0x04, 0x27, 0x00, 0xa1, 0x10,
0x02, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x0e, 0xd8, 0xfc, 0xff, 0xff,
0x25, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x0e,
0x10, 0x00, 0x00, 0x00, 0x25, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x20,
0x00, 0x00, 0x00, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x01, 0x4d, 0x00, 0x20,
0x07, 0x7f, 0x03, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x20,
0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x31, 0x00, 0x60, 0x07,
0x04, 0x02, 0x00, 0x20, 0xe0, 0x0f, 0x00, 0x06, 0x10, 0x00, 0x00, 0x82,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x83,
0x00, 0x00, 0x00, 0x03, 0x7f, 0x00, 0xff, 0x1f, 0x00, 0x00, 0xe0, 0x0f,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xc0, 0xff, 0x83, 0x00, 0x00, 0x00, 0x03, 0x7f, 0x00, 0xff, 0x1f,
0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
0x13, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x15, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x20, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x3c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x48, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x1e, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
0x1e, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x40, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00,
0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x17, 0x00, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x1a, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x67, 0x6c,
0x6f, 0x62, 0x61, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x73, 0x79, 0x6d, 0x6d, 0x61, 0x74, 0x00, 0x00,
0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x2a, 0x3b, 0x38,
0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x1a, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x67, 0x6c,
0x6f, 0x62, 0x61, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x64, 0x61, 0x74, 0x61, 0x00, 0x00, 0x00, 0x00,
0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x2a, 0x3b, 0x38,
0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x1a, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x70, 0x72,
0x69, 0x76, 0x61, 0x74, 0x65, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x00, 0x69, 0x6e, 0x74, 0x3b,
0x34, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x1a, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x70, 0x72,
0x69, 0x76, 0x61, 0x74, 0x65, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x69, 0x6e, 0x74, 0x3b,
0x34, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00
};
unsigned int correlation_Gen9core_gen_len = 11580;

View File

@@ -0,0 +1,404 @@
/**
* covariance.c: This file is part of the PolyBench/GPU 1.0 test suite.
*
*
* Contact: Scott Grauer-Gray <sgrauerg@gmail.com>
* Will Killian <killian@udel.edu>
* Louis-Noel Pouchet <pouchet@cse.ohio-state.edu>
* Web address: http://www.cse.ohio-state.edu/~pouchet/software/polybench/GPU
*/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
#include <sys/time.h>
#include <math.h>
#ifdef __APPLE__
#include <OpenCL/opencl.h>
#else
#include "../../CL/cl.h"
#endif
#define POLYBENCH_TIME 1
//select the OpenCL device to use (can be GPU, CPU, or Accelerator such as Intel Xeon Phi)
#define OPENCL_DEVICE_SELECTION CL_DEVICE_TYPE_GPU
#include "covariance.h"
#include "../../polybench.h"
//define the error threshold for the results "not matching"
#define PERCENT_DIFF_ERROR_THRESHOLD 0.05
#define MAX_SOURCE_SIZE (0x100000)
#define sqrt_of_array_cell(x,j) sqrt(x[j])
#if defined(cl_khr_fp64) // Khronos extension available?
#pragma OPENCL EXTENSION cl_khr_fp64 : enable
#elif defined(cl_amd_fp64) // AMD extension available?
#pragma OPENCL EXTENSION cl_amd_fp64 : enable
#endif
namespace ns_covariance {
#include "covariance_kernel.h"
#include "../../polybenchUtilFuncts.h"
char str_temp[1024];
DATA_TYPE float_n= 3214212.01;
DATA_TYPE eps= 0.005;
cl_platform_id platform_id;
cl_device_id device_id;
cl_uint num_devices;
cl_uint num_platforms;
cl_int errcode;
cl_context clGPUContext;
cl_kernel clKernel_mean;
cl_kernel clKernel_std;
cl_kernel clKernel_reduce;
cl_kernel clKernel_covar;
cl_command_queue clCommandQue;
cl_program clProgram;
cl_mem data_mem_obj;
cl_mem stddev_mem_obj;
cl_mem mean_mem_obj;
cl_mem symmat_mem_obj;
FILE *fp;
char *source_str;
size_t source_size;
#define RUN_ON_CPU
void compareResults(int m, int n, DATA_TYPE POLYBENCH_2D(symmat,M,M,m,m), DATA_TYPE POLYBENCH_2D(symmat_outputFromGpu,M,M,m,m))
{
int i,j,fail;
fail = 0;
for (i=0; i < m; i++)
{
for (j=0; j < n; j++)
{
if (percentDiff(symmat[i][j], symmat_outputFromGpu[i][j]) > PERCENT_DIFF_ERROR_THRESHOLD)
{
fail++;
}
}
}
printf("Non-Matching CPU-GPU Outputs Beyond Error Threshold of %4.2f Percent: %d\n", PERCENT_DIFF_ERROR_THRESHOLD, fail);
}
void read_cl_file()
{
// // Load the kernel source code into the array source_str
// fp = fopen("covariance.cl", "r");
// if (!fp) {
// fprintf(stderr, "Failed to load kernel.\n");
// exit(1);
// }
// source_str = (char*)malloc(MAX_SOURCE_SIZE);
// source_size = fread( source_str, 1, MAX_SOURCE_SIZE, fp);
// fclose( fp );
}
void init_arrays(int m, int n, DATA_TYPE POLYBENCH_2D(data,M,N,m,n))
{
int i, j;
for (i = 0; i < m; i++)
{
for (j = 0; j < n; j++)
{
data[i][j] = ((DATA_TYPE) i*j) / M;
}
}
}
void cl_initialization()
{
// Get platform and device information
errcode = clGetPlatformIDs(1, &platform_id, &num_platforms);
if(errcode == CL_SUCCESS) printf("number of platforms is %d\n",num_platforms);
else printf("Error getting platform IDs\n");
errcode = clGetPlatformInfo(platform_id,CL_PLATFORM_NAME, sizeof(str_temp), str_temp,NULL);
if(errcode == CL_SUCCESS) printf("platform name is %s\n",str_temp);
else printf("Error getting platform name\n");
errcode = clGetPlatformInfo(platform_id, CL_PLATFORM_VERSION, sizeof(str_temp), str_temp,NULL);
if(errcode == CL_SUCCESS) printf("platform version is %s\n",str_temp);
else printf("Error getting platform version\n");
errcode = clGetDeviceIDs( platform_id, OPENCL_DEVICE_SELECTION, 1, &device_id, &num_devices);
if(errcode == CL_SUCCESS) printf("number of devices is %d\n", num_devices);
else printf("Error getting device IDs\n");
errcode = clGetDeviceInfo(device_id,CL_DEVICE_NAME, sizeof(str_temp), str_temp,NULL);
if(errcode == CL_SUCCESS) printf("device name is %s\n",str_temp);
else printf("Error getting device name\n");
// Create an OpenCL context
clGPUContext = clCreateContext( NULL, 1, &device_id, NULL, NULL, &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating context\n");
//Create a command-queue
clCommandQue = clCreateCommandQueue(clGPUContext, device_id, 0, &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating command queue\n");
}
void cl_mem_init(DATA_TYPE POLYBENCH_2D(data,M,N,m,n), DATA_TYPE POLYBENCH_2D(symmat,M,M,m,m), DATA_TYPE POLYBENCH_1D(mean,M,m))
{
data_mem_obj = clCreateBuffer(clGPUContext, CL_MEM_READ_WRITE, sizeof(DATA_TYPE) * M * N, NULL, &errcode);
symmat_mem_obj = clCreateBuffer(clGPUContext, CL_MEM_READ_WRITE, sizeof(DATA_TYPE) * M * N, NULL, &errcode);
mean_mem_obj = clCreateBuffer(clGPUContext, CL_MEM_READ_WRITE, sizeof(DATA_TYPE) * M, NULL, &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating buffers\n");
errcode = clEnqueueWriteBuffer(clCommandQue, data_mem_obj, CL_TRUE, 0, sizeof(DATA_TYPE) * M * N, data, 0, NULL, NULL);
errcode = clEnqueueWriteBuffer(clCommandQue, symmat_mem_obj, CL_TRUE, 0, sizeof(DATA_TYPE) * M * N, symmat, 0, NULL, NULL);
errcode = clEnqueueWriteBuffer(clCommandQue, mean_mem_obj, CL_TRUE, 0, sizeof(DATA_TYPE) * M, mean, 0, NULL, NULL);
if(errcode != CL_SUCCESS)printf("Error in writing buffers\n");
}
void cl_load_prog()
{
// Create a program from the kernel source
const size_t kernel_size = covariance_Gen9core_gen_len;
const unsigned char* kernel_bin = covariance_Gen9core_gen;
clProgram = clCreateProgramWithBinary(clGPUContext, 1, &device_id, &kernel_size, &kernel_bin, NULL, &errcode);
// clProgram = clCreateProgramWithSource(clGPUContext, 1, (const char **)&source_str, (const size_t *)&source_size, &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating program\n");
// Build the program
errcode = clBuildProgram(clProgram, 1, &device_id, NULL, NULL, NULL);
if(errcode != CL_SUCCESS) printf("Error in building program\n");
// Create the OpenCL kernel
clKernel_mean = clCreateKernel(clProgram, "mean_kernel", &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating kernel1\n");
clKernel_reduce = clCreateKernel(clProgram, "reduce_kernel", &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating kernel2\n");
clKernel_covar = clCreateKernel(clProgram, "covar_kernel", &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating kernel3\n");
clFinish(clCommandQue);
}
void cl_launch_kernel(int m, int n)
{
size_t localWorkSize_Kernel1[2], globalWorkSize_Kernel1[2];
size_t localWorkSize_Kernel2[2], globalWorkSize_Kernel2[2];
size_t localWorkSize_Kernel3[2], globalWorkSize_Kernel3[2];
localWorkSize_Kernel1[0] = DIM_LOCAL_WORK_GROUP_KERNEL_1_X;
localWorkSize_Kernel1[1] = DIM_LOCAL_WORK_GROUP_KERNEL_1_Y;
globalWorkSize_Kernel1[0] = (size_t)ceil(((float)M) / ((float)DIM_LOCAL_WORK_GROUP_KERNEL_1_X)) * DIM_LOCAL_WORK_GROUP_KERNEL_1_X;
globalWorkSize_Kernel1[1] = 1;
localWorkSize_Kernel2[0] = DIM_LOCAL_WORK_GROUP_KERNEL_2_X;
localWorkSize_Kernel2[1] = DIM_LOCAL_WORK_GROUP_KERNEL_2_Y;
globalWorkSize_Kernel2[0] = (size_t)ceil(((float)M) / ((float)DIM_LOCAL_WORK_GROUP_KERNEL_2_X)) * DIM_LOCAL_WORK_GROUP_KERNEL_2_X;
globalWorkSize_Kernel2[1] = (size_t)ceil(((float)N) / ((float)DIM_LOCAL_WORK_GROUP_KERNEL_2_Y)) * DIM_LOCAL_WORK_GROUP_KERNEL_2_Y;
localWorkSize_Kernel3[0] = DIM_LOCAL_WORK_GROUP_KERNEL_3_X;
localWorkSize_Kernel3[1] = DIM_LOCAL_WORK_GROUP_KERNEL_3_Y;
globalWorkSize_Kernel3[0] = (size_t)ceil(((float)M) / ((float)DIM_LOCAL_WORK_GROUP_KERNEL_3_X)) * DIM_LOCAL_WORK_GROUP_KERNEL_3_X;
globalWorkSize_Kernel3[1] = 1;
/* Start timer. */
polybench_start_instruments;
// Set the arguments of the kernel
errcode = clSetKernelArg(clKernel_mean, 0, sizeof(cl_mem), (void *)&mean_mem_obj);
errcode |= clSetKernelArg(clKernel_mean, 1, sizeof(cl_mem), (void *)&data_mem_obj);
errcode |= clSetKernelArg(clKernel_mean, 2, sizeof(DATA_TYPE), (void *)&float_n);
errcode |= clSetKernelArg(clKernel_mean, 3, sizeof(int), (void *)&m);
errcode |= clSetKernelArg(clKernel_mean, 4, sizeof(int), (void *)&n);
if(errcode != CL_SUCCESS) printf("Error in seting arguments1\n");
// Execute the OpenCL kernel
errcode = clEnqueueNDRangeKernel(clCommandQue, clKernel_mean, 1, NULL, globalWorkSize_Kernel1, localWorkSize_Kernel1, 0, NULL, NULL);
if(errcode != CL_SUCCESS) printf("Error in launching kernel1\n");
clEnqueueBarrier(clCommandQue);
// Set the arguments of the kernel
errcode = clSetKernelArg(clKernel_reduce, 0, sizeof(cl_mem), (void *)&mean_mem_obj);
errcode |= clSetKernelArg(clKernel_reduce, 1, sizeof(cl_mem), (void *)&data_mem_obj);
errcode |= clSetKernelArg(clKernel_reduce, 2, sizeof(int), (void *)&m);
errcode |= clSetKernelArg(clKernel_reduce, 3, sizeof(int), (void *)&n);
if(errcode != CL_SUCCESS) printf("Error in seting arguments2\n");
// Execute the OpenCL kernel
errcode = clEnqueueNDRangeKernel(clCommandQue, clKernel_reduce, 2, NULL, globalWorkSize_Kernel2, localWorkSize_Kernel2, 0, NULL, NULL);
if(errcode != CL_SUCCESS) printf("Error in launching kernel2\n");
clEnqueueBarrier(clCommandQue);
// Set the arguments of the kernel
errcode = clSetKernelArg(clKernel_covar, 0, sizeof(cl_mem), (void *)&symmat_mem_obj);
errcode |= clSetKernelArg(clKernel_covar, 1, sizeof(cl_mem), (void *)&data_mem_obj);
errcode |= clSetKernelArg(clKernel_covar, 2, sizeof(int), (void *)&m);
errcode |= clSetKernelArg(clKernel_covar, 3, sizeof(int), (void *)&n);
if(errcode != CL_SUCCESS) printf("Error in seting arguments4\n");
// Execute the OpenCL kernel
errcode = clEnqueueNDRangeKernel(clCommandQue, clKernel_covar, 1, NULL, globalWorkSize_Kernel3, localWorkSize_Kernel3, 0, NULL, NULL);
if(errcode != CL_SUCCESS) printf("Error in launching kernel4\n");
clFinish(clCommandQue);
/* Stop and print timer. */
printf("GPU Time in seconds:\n");
polybench_stop_instruments;
polybench_print_instruments;
}
void cl_clean_up()
{
// Clean up
errcode = clFlush(clCommandQue);
errcode = clFinish(clCommandQue);
errcode = clReleaseKernel(clKernel_reduce);
errcode = clReleaseKernel(clKernel_mean);
errcode = clReleaseKernel(clKernel_std);
errcode = clReleaseKernel(clKernel_covar);
errcode = clReleaseProgram(clProgram);
errcode = clReleaseMemObject(symmat_mem_obj);
errcode = clReleaseMemObject(data_mem_obj);
errcode = clReleaseMemObject(mean_mem_obj);
errcode = clReleaseMemObject(stddev_mem_obj);
errcode = clReleaseCommandQueue(clCommandQue);
errcode = clReleaseContext(clGPUContext);
if(errcode != CL_SUCCESS) printf("Error in cleanup\n");
}
void covariance(int m, int n, DATA_TYPE POLYBENCH_2D(data,M,N,m,n), DATA_TYPE POLYBENCH_2D(symmat,M,M,m,m), DATA_TYPE POLYBENCH_1D(mean,M,m))
{
int i, j, j1,j2;
/* Determine mean of column vectors of input data matrix */
for (j = 0; j < _PB_M; j++)
{
mean[j] = 0.0;
for (i = 0; i < _PB_N; i++)
{
mean[j] += data[i][j];
}
mean[j] /= float_n;
}
/* Center the column vectors. */
for (i = 0; i < _PB_N; i++)
{
for (j = 0; j < _PB_M; j++)
{
data[i][j] -= mean[j];
}
}
/* Calculate the m * m covariance matrix. */
for (j1 = 0; j1 < _PB_M; j1++)
{
for (j2 = j1; j2 < _PB_M; j2++)
{
symmat[j1][j2] = 0.0;
for (i = 0; i < _PB_N; i++)
{
symmat[j1][j2] += data[i][j1] * data[i][j2];
}
symmat[j2][j1] = symmat[j1][j2];
}
}
}
/* DCE code. Must scan the entire live-out data.
Can be used also to check the correctness of the output. */
static
void print_array(int m, DATA_TYPE POLYBENCH_2D(symmat,M,M,m,m))
{
int i, j;
for (i = 0; i < m; i++)
for (j = 0; j < m; j++) {
fprintf (stderr, DATA_PRINTF_MODIFIER, symmat[i][j]);
if ((i * m + j) % 20 == 0) fprintf (stderr, "\n");
}
fprintf (stderr, "\n");
}
int main(int argc, char *argv[])
{
int m = M;
int n = N;
POLYBENCH_2D_ARRAY_DECL(data,DATA_TYPE,M,N,m,n);
POLYBENCH_2D_ARRAY_DECL(symmat,DATA_TYPE,M,M,m,m);
POLYBENCH_1D_ARRAY_DECL(mean,DATA_TYPE,M,m);
POLYBENCH_2D_ARRAY_DECL(symmat_outputFromGpu,DATA_TYPE,M,M,m,m);
init_arrays(m, n, POLYBENCH_ARRAY(data));
read_cl_file();
cl_initialization();
cl_mem_init(POLYBENCH_ARRAY(data), POLYBENCH_ARRAY(symmat), POLYBENCH_ARRAY(mean));
cl_load_prog();
cl_launch_kernel(m, n);
errcode = clEnqueueReadBuffer(clCommandQue, symmat_mem_obj, CL_TRUE, 0, M * N * sizeof(DATA_TYPE), POLYBENCH_ARRAY(symmat_outputFromGpu), 0, NULL, NULL);
if(errcode != CL_SUCCESS) printf("Error in reading GPU mem\n");
#ifdef RUN_ON_CPU
/* Start timer. */
polybench_start_instruments;
covariance(m, n, POLYBENCH_ARRAY(data), POLYBENCH_ARRAY(symmat), POLYBENCH_ARRAY(mean));
/* Stop and print timer. */
printf("CPU Time in seconds:\n");
polybench_stop_instruments;
polybench_print_instruments;
compareResults(m, n, POLYBENCH_ARRAY(symmat), POLYBENCH_ARRAY(symmat_outputFromGpu));
#else //prevent dead code elimination
polybench_prevent_dce(print_array(m, POLYBENCH_ARRAY(symmat_outputFromGpu)));
#endif //RUN_ON_CPU
cl_clean_up();
POLYBENCH_FREE_ARRAY(data);
POLYBENCH_FREE_ARRAY(symmat);
POLYBENCH_FREE_ARRAY(mean);
POLYBENCH_FREE_ARRAY(symmat_outputFromGpu);
return 0;
}
}

View File

@@ -0,0 +1,67 @@
/**
* covariance.cl: This file is part of the PolyBench/GPU 1.0 test suite.
*
*
* Contact: Scott Grauer-Gray <sgrauerg@gmail.com>
* Will Killian <killian@udel.edu>
* Louis-Noel Pouchet <pouchet@cse.ohio-state.edu>
* Web address: http://www.cse.ohio-state.edu/~pouchet/software/polybench/GPU
*/
#if defined(cl_khr_fp64) // Khronos extension available?
#pragma OPENCL EXTENSION cl_khr_fp64 : enable
#elif defined(cl_amd_fp64) // AMD extension available?
#pragma OPENCL EXTENSION cl_amd_fp64 : enable
#endif
typedef float DATA_TYPE;
__kernel void mean_kernel(__global DATA_TYPE *mean, __global DATA_TYPE *data, DATA_TYPE float_n, int m, int n)
{
int j = get_global_id(0);
if (j < m)
{
mean[j] = 0.0;
int i;
for(i = 0; i < n; i++)
{
mean[j] += data[i * m + j];
}
mean[j] /= (DATA_TYPE)float_n;
}
}
__kernel void reduce_kernel(__global DATA_TYPE *mean, __global DATA_TYPE *data, int m, int n)
{
int j = get_global_id(0);
int i = get_global_id(1);
if ((i < n) && (j < m))
{
data[i * m + j] -= mean[j];
}
}
__kernel void covar_kernel(__global DATA_TYPE *symmat, __global DATA_TYPE *data, int m, int n)
{
int j1 = get_global_id(0);
int i, j2;
if (j1 < m)
{
for (j2 = j1; j2 < m; j2++)
{
symmat[j1*m + j2] = 0.0;
for(i = 0; i < n; i++)
{
symmat[j1 * m + j2] += data[i * m + j1] * data[i * m + j2];
}
symmat[j2 * m + j1] = symmat[j1 * m + j2];
}
}
}

View File

@@ -0,0 +1,69 @@
/**
* covariance.h: This file is part of the PolyBench/GPU 1.0 test suite.
*
*
* Contact: Scott Grauer-Gray <sgrauerg@gmail.com>
* Will Killian <killian@udel.edu>
* Louis-Noel Pouchet <pouchet@cse.ohio-state.edu>
* Web address: http://www.cse.ohio-state.edu/~pouchet/software/polybench/GPU
*/
#ifndef COVARIANCE_H
# define COVARIANCE_H
/* Default to STANDARD_DATASET. */
# if !defined(MINI_DATASET) && !defined(SMALL_DATASET) && !defined(LARGE_DATASET) && !defined(EXTRALARGE_DATASET)
# define MINI_DATASET
# endif
/* Do not define anything if the user manually defines the size. */
# if !defined(M) && !defined(N)
/* Define the possible dataset sizes. */
# ifdef MINI_DATASET
#define M 512
#define N 512
# endif
# ifdef SMALL_DATASET
#define M 1024
#define N 1024
# endif
# ifdef STANDARD_DATASET /* Default if unspecified. */
#define M 2048
#define N 2048
# endif
# ifdef LARGE_DATASET
#define M 4096
#define N 4096
# endif
# ifdef EXTRALARGE_DATASET
#define M 8192
#define N 8192
# endif
# endif /* !N */
# define _PB_M POLYBENCH_LOOP_BOUND(M,m)
# define _PB_N POLYBENCH_LOOP_BOUND(N,n)
# ifndef DATA_TYPE
# define DATA_TYPE float
# define DATA_PRINTF_MODIFIER "%0.2lf "
# endif
/* Thread block dimensions for kernel 1*/
#define DIM_LOCAL_WORK_GROUP_KERNEL_1_X 256
#define DIM_LOCAL_WORK_GROUP_KERNEL_1_Y 1
/* Thread block dimensions for kernel 2*/
#define DIM_LOCAL_WORK_GROUP_KERNEL_2_X 32
#define DIM_LOCAL_WORK_GROUP_KERNEL_2_Y 8
/* Thread block dimensions for kernel 3*/
#define DIM_LOCAL_WORK_GROUP_KERNEL_3_X 256
#define DIM_LOCAL_WORK_GROUP_KERNEL_3_Y 1
#endif /* !COVARIANCE*/

View File

@@ -0,0 +1,641 @@
unsigned char covariance_Gen9core_gen[] = {
0x43, 0x54, 0x4e, 0x49, 0x39, 0x04, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x57, 0xc7, 0x17, 0xd9, 0xa6, 0xd5, 0x30, 0xac,
0x5e, 0x3c, 0xf2, 0x55, 0x0c, 0x00, 0x00, 0x00, 0x88, 0x05, 0x00, 0x00,
0x80, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
0x88, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x6d, 0x65, 0x61, 0x6e,
0x5f, 0x6b, 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x00, 0x01, 0x00, 0x60, 0x00,
0x0c, 0x02, 0x60, 0x20, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00,
0x06, 0x80, 0x00, 0x00, 0x04, 0x00, 0x00, 0x30, 0x00, 0x10, 0x00, 0x16,
0xc0, 0x04, 0xc0, 0x04, 0x41, 0x00, 0x00, 0x00, 0x2c, 0x0a, 0x80, 0x20,
0x24, 0x01, 0x00, 0x0a, 0x64, 0x00, 0x00, 0x00, 0x40, 0x00, 0x80, 0x00,
0x28, 0x0a, 0xa0, 0x20, 0x80, 0x00, 0x00, 0x12, 0x20, 0x00, 0xb1, 0x00,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x21, 0x80, 0x00, 0x00, 0x12,
0x40, 0x00, 0xb1, 0x00, 0x40, 0x96, 0x01, 0x20, 0x07, 0x0c, 0x05, 0x07,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0xc0, 0x21, 0x40, 0x01, 0x8d, 0x0a,
0xe0, 0x00, 0x00, 0x00, 0x10, 0x16, 0x73, 0x25, 0x07, 0x00, 0x0c, 0x08,
0x10, 0x20, 0x80, 0x05, 0x20, 0x0a, 0x00, 0x20, 0xc0, 0x01, 0x8d, 0x0a,
0x14, 0x01, 0x00, 0x00, 0x22, 0x00, 0xa1, 0x00, 0x00, 0x0e, 0x00, 0x20,
0x58, 0x02, 0x00, 0x00, 0x58, 0x02, 0x00, 0x00, 0x09, 0x00, 0x80, 0x00,
0x28, 0x0a, 0x00, 0x22, 0x80, 0x01, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00,
0x09, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x22, 0xc0, 0x01, 0x8d, 0x1e,
0x02, 0x00, 0x02, 0x00, 0x01, 0x00, 0x80, 0x00, 0xe8, 0x3e, 0x80, 0x22,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x20, 0x80, 0x00,
0xe8, 0x3e, 0xc0, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x40, 0x96, 0x79, 0x20, 0x07, 0x10, 0x10, 0x08, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x40, 0x22, 0x40, 0x02, 0x8d, 0x0a, 0x1c, 0x01, 0x00, 0x00,
0x10, 0x00, 0x80, 0x03, 0x26, 0x0a, 0x00, 0x20, 0x18, 0x01, 0x00, 0x1e,
0x00, 0x00, 0x00, 0x00, 0x10, 0x20, 0x80, 0x03, 0x26, 0x0a, 0x00, 0x20,
0x18, 0x01, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x33, 0x00, 0x80, 0x0c,
0x70, 0x40, 0x01, 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x5e, 0x02, 0x04,
0x33, 0x20, 0x80, 0x0c, 0x70, 0x60, 0x01, 0x00, 0x42, 0x02, 0x00, 0x00,
0x00, 0x5e, 0x02, 0x04, 0x20, 0x00, 0x01, 0x00, 0x06, 0x00, 0x00, 0x34,
0x00, 0x14, 0x00, 0x0e, 0x30, 0x00, 0x00, 0x00, 0x01, 0x00, 0x80, 0x00,
0xe8, 0x3e, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x20, 0x80, 0x00, 0xe8, 0x3e, 0x40, 0x23, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x34,
0x00, 0x14, 0x00, 0x0e, 0x28, 0x01, 0x00, 0x00, 0x01, 0x00, 0x80, 0x00,
0xe8, 0x3e, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x20, 0x80, 0x00, 0xe8, 0x3e, 0x40, 0x23, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2c, 0x1e, 0x84, 0x20,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00,
0x2c, 0x0a, 0x88, 0x20, 0x84, 0x00, 0x00, 0x0a, 0x14, 0x01, 0x00, 0x00,
0x40, 0x00, 0x00, 0x00, 0x2c, 0x0a, 0x84, 0x20, 0x84, 0x00, 0x00, 0x1e,
0x01, 0x00, 0x01, 0x00, 0x40, 0x96, 0x19, 0x20, 0xe0, 0x1c, 0x04, 0x0c,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0xc0, 0x23, 0x88, 0x00, 0x00, 0x0a,
0xc0, 0x01, 0x8d, 0x00, 0x10, 0x00, 0x80, 0x05, 0x24, 0x0a, 0x00, 0x20,
0x84, 0x00, 0x00, 0x0a, 0x18, 0x01, 0x00, 0x00, 0x10, 0x20, 0x80, 0x05,
0x24, 0x0a, 0x00, 0x20, 0x84, 0x00, 0x00, 0x0a, 0x18, 0x01, 0x00, 0x00,
0x09, 0x00, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x23, 0x80, 0x03, 0x8d, 0x1e,
0x02, 0x00, 0x02, 0x00, 0x09, 0x20, 0x80, 0x00, 0x28, 0x0a, 0xc0, 0x23,
0xc0, 0x03, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00, 0x40, 0x96, 0x01, 0x20,
0x07, 0x1c, 0x1c, 0x09, 0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0xc0, 0x23,
0xc0, 0x03, 0x8d, 0x0a, 0x20, 0x01, 0x00, 0x00, 0x31, 0x00, 0x80, 0x0c,
0x68, 0x02, 0x00, 0x24, 0x80, 0x03, 0x00, 0x06, 0x01, 0x5e, 0x20, 0x04,
0x31, 0x20, 0x80, 0x0c, 0x68, 0x02, 0x40, 0x24, 0xc0, 0x03, 0x00, 0x06,
0x01, 0x5e, 0x20, 0x04, 0x40, 0x56, 0x02, 0x20, 0xe7, 0x18, 0x18, 0x20,
0x40, 0x20, 0x80, 0x00, 0xe8, 0x3a, 0x40, 0x23, 0x40, 0x03, 0x8d, 0x3a,
0x40, 0x04, 0x8d, 0x00, 0x33, 0x00, 0x80, 0x0c, 0x70, 0x80, 0x01, 0x00,
0x02, 0x02, 0x00, 0x00, 0x00, 0x5e, 0x02, 0x04, 0x33, 0x20, 0x80, 0x0c,
0x70, 0xa0, 0x01, 0x00, 0x42, 0x02, 0x00, 0x00, 0x00, 0x5e, 0x02, 0x04,
0x20, 0x00, 0x01, 0x00, 0x04, 0x00, 0x00, 0x34, 0x00, 0x14, 0x00, 0x0e,
0x08, 0xff, 0xff, 0xff, 0x38, 0x56, 0x6e, 0x29, 0x07, 0x24, 0x18, 0x08,
0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x38, 0x20, 0x80, 0x09, 0xe8, 0x3a, 0xc0, 0x24,
0x40, 0x03, 0x8d, 0x3a, 0x10, 0x01, 0x00, 0x00, 0x33, 0x00, 0x80, 0x0c,
0x70, 0x40, 0x02, 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x5e, 0x02, 0x04,
0x33, 0x20, 0x80, 0x0c, 0x70, 0x60, 0x02, 0x00, 0x42, 0x02, 0x00, 0x00,
0x00, 0x5e, 0x02, 0x04, 0x25, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x20,
0x00, 0x00, 0x00, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x01, 0x4d, 0x00, 0x20,
0x07, 0x7f, 0x03, 0x00, 0x31, 0x00, 0x60, 0x07, 0x04, 0x02, 0x00, 0x20,
0xe0, 0x0f, 0x00, 0x06, 0x10, 0x00, 0x00, 0x82, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
0x00, 0xc0, 0xff, 0x83, 0x00, 0x00, 0x00, 0x03, 0x7f, 0x00, 0xff, 0x1f,
0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x83, 0x00, 0x00, 0x00, 0x03,
0x7f, 0x00, 0xff, 0x1f, 0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x40, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x80, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00,
0x80, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x14, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x2b, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x3c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x48, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
0x34, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x60, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00,
0x8c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00,
0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c,
0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x6d, 0x65, 0x61, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x44, 0x41, 0x54, 0x41,
0x5f, 0x54, 0x59, 0x50, 0x45, 0x2a, 0x3b, 0x38, 0x00, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00,
0x54, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c,
0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x64, 0x61, 0x74, 0x61, 0x00, 0x00, 0x00, 0x00, 0x44, 0x41, 0x54, 0x41,
0x5f, 0x54, 0x59, 0x50, 0x45, 0x2a, 0x3b, 0x38, 0x00, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00,
0x50, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74,
0x65, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x6e, 0x00, 0x44, 0x41, 0x54, 0x41,
0x5f, 0x54, 0x59, 0x50, 0x45, 0x3b, 0x34, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00,
0x03, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x5f, 0x5f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x00,
0x69, 0x6e, 0x74, 0x3b, 0x34, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x5f, 0x5f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00,
0x69, 0x6e, 0x74, 0x3b, 0x34, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0xaf, 0xb1, 0x1e, 0xcf, 0xa6, 0xd5, 0x30, 0xac,
0x5e, 0x3c, 0xf2, 0x55, 0x10, 0x00, 0x00, 0x00, 0x10, 0x05, 0x00, 0x00,
0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
0x88, 0x00, 0x00, 0x00, 0x68, 0x02, 0x00, 0x00, 0x72, 0x65, 0x64, 0x75,
0x63, 0x65, 0x5f, 0x6b, 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x00, 0x00, 0x00,
0x01, 0x00, 0x60, 0x00, 0x0c, 0x02, 0xa0, 0x20, 0x00, 0x00, 0x20, 0x00,
0x00, 0x00, 0x00, 0x00, 0x06, 0x80, 0x00, 0x00, 0x04, 0x00, 0x00, 0x30,
0x00, 0x10, 0x00, 0x16, 0xc0, 0x04, 0xc0, 0x04, 0x41, 0x80, 0x2d, 0x20,
0x00, 0x06, 0x09, 0x05, 0x41, 0x00, 0x00, 0x00, 0x2c, 0x0a, 0xc4, 0x20,
0x24, 0x01, 0x00, 0x0a, 0xb8, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x4c, 0x16, 0xc8, 0x20, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x21, 0xc0, 0x00, 0x00, 0x12,
0x40, 0x00, 0xb1, 0x00, 0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x22,
0xc4, 0x00, 0x00, 0x12, 0x80, 0x00, 0xb1, 0x00, 0x40, 0x00, 0x80, 0x00,
0x28, 0x0a, 0x40, 0x21, 0xc0, 0x00, 0x00, 0x12, 0x20, 0x00, 0xb1, 0x00,
0x40, 0x00, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x22, 0xc4, 0x00, 0x00, 0x12,
0x60, 0x00, 0xb1, 0x00, 0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x00, 0x22,
0x80, 0x01, 0x8d, 0x0a, 0xe0, 0x00, 0x00, 0x00, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x00, 0x23, 0x80, 0x02, 0x8d, 0x0a, 0xe4, 0x00, 0x00, 0x00,
0x40, 0x96, 0x01, 0x20, 0x07, 0x0e, 0x0a, 0x07, 0x40, 0x96, 0x2d, 0x20,
0x07, 0x16, 0x12, 0x07, 0x10, 0x20, 0x80, 0x05, 0x22, 0x0a, 0x00, 0x20,
0x00, 0x02, 0x8d, 0x0a, 0x10, 0x01, 0x00, 0x00, 0x10, 0x20, 0x80, 0x05,
0x20, 0x0a, 0x00, 0x20, 0x00, 0x03, 0x8d, 0x0a, 0x14, 0x01, 0x00, 0x00,
0x10, 0x16, 0x6f, 0x25, 0x07, 0x00, 0x0e, 0x08, 0x02, 0x20, 0x81, 0x00,
0x4a, 0x12, 0x60, 0x25, 0xc8, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x00,
0x02, 0x20, 0x81, 0x00, 0x48, 0x12, 0x40, 0x25, 0xc8, 0x00, 0x00, 0x16,
0x00, 0x00, 0x00, 0x00, 0x10, 0x19, 0x73, 0x25, 0x07, 0x00, 0x16, 0x08,
0x05, 0x20, 0x80, 0x02, 0x40, 0x12, 0x00, 0x20, 0x40, 0x05, 0xb1, 0x12,
0x60, 0x05, 0xb1, 0x00, 0x22, 0x00, 0xa1, 0x00, 0x00, 0x0e, 0x00, 0x20,
0x28, 0x01, 0x00, 0x00, 0x28, 0x01, 0x00, 0x00, 0x41, 0x96, 0x6d, 0x20,
0x07, 0x22, 0x16, 0x08, 0x41, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x24,
0x00, 0x03, 0x8d, 0x0a, 0x10, 0x01, 0x00, 0x00, 0x09, 0x00, 0x80, 0x00,
0x28, 0x0a, 0x40, 0x23, 0xc0, 0x01, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00,
0x09, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x23, 0x00, 0x02, 0x8d, 0x1e,
0x02, 0x00, 0x02, 0x00, 0x40, 0x96, 0x01, 0x20, 0xe7, 0x22, 0x22, 0x0e,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x24, 0x80, 0x04, 0x8d, 0x0a,
0x00, 0x02, 0x8d, 0x00, 0x40, 0x96, 0x75, 0x20, 0x07, 0x1a, 0x1a, 0x08,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x23, 0x80, 0x03, 0x8d, 0x0a,
0x18, 0x01, 0x00, 0x00, 0x09, 0x00, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x24,
0x40, 0x04, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00, 0x09, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x80, 0x24, 0x80, 0x04, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00,
0x31, 0x00, 0x80, 0x0c, 0x68, 0x02, 0xc0, 0x23, 0x40, 0x03, 0x00, 0x06,
0x00, 0x5e, 0x20, 0x04, 0x31, 0x20, 0x80, 0x0c, 0x68, 0x02, 0x00, 0x24,
0x80, 0x03, 0x00, 0x06, 0x00, 0x5e, 0x20, 0x04, 0x40, 0x96, 0x79, 0x20,
0x07, 0x22, 0x22, 0x08, 0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x24,
0x80, 0x04, 0x8d, 0x0a, 0x1c, 0x01, 0x00, 0x00, 0x31, 0x00, 0x80, 0x0c,
0x68, 0x02, 0xc0, 0x24, 0x40, 0x04, 0x00, 0x06, 0x01, 0x5e, 0x20, 0x04,
0x31, 0x20, 0x80, 0x0c, 0x68, 0x02, 0x00, 0x25, 0x80, 0x04, 0x00, 0x06,
0x01, 0x5e, 0x20, 0x04, 0x40, 0x56, 0x02, 0x20, 0xf7, 0x26, 0x26, 0x1e,
0x40, 0x20, 0x80, 0x00, 0xe8, 0x3a, 0x00, 0x25, 0x00, 0x05, 0x8d, 0x3a,
0x00, 0x44, 0x8d, 0x00, 0x33, 0x00, 0x80, 0x0c, 0x70, 0x60, 0x02, 0x00,
0x42, 0x04, 0x00, 0x00, 0x01, 0x5e, 0x02, 0x04, 0x33, 0x20, 0x80, 0x0c,
0x70, 0x80, 0x02, 0x00, 0x82, 0x04, 0x00, 0x00, 0x01, 0x5e, 0x02, 0x04,
0x25, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x0e,
0x10, 0x00, 0x00, 0x00, 0x01, 0x4d, 0x00, 0x20, 0x07, 0x7f, 0x05, 0x00,
0x31, 0x00, 0x60, 0x07, 0x04, 0x02, 0x00, 0x20, 0xe0, 0x0f, 0x00, 0x06,
0x10, 0x00, 0x00, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x83,
0x00, 0x00, 0x00, 0x03, 0x7f, 0x00, 0xff, 0x1f, 0x00, 0x00, 0xe0, 0x0f,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xc0, 0xff, 0x83, 0x00, 0x00, 0x00, 0x03, 0x7f, 0x00, 0xff, 0x1f,
0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
0x13, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x15, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x20, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x3c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x48, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x1e, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
0x1e, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x40, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00,
0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x17, 0x00, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x1a, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x67, 0x6c,
0x6f, 0x62, 0x61, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x6d, 0x65, 0x61, 0x6e, 0x00, 0x00, 0x00, 0x00,
0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x2a, 0x3b, 0x38,
0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x1a, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x67, 0x6c,
0x6f, 0x62, 0x61, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x64, 0x61, 0x74, 0x61, 0x00, 0x00, 0x00, 0x00,
0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x2a, 0x3b, 0x38,
0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x1a, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x70, 0x72,
0x69, 0x76, 0x61, 0x74, 0x65, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x00, 0x69, 0x6e, 0x74, 0x3b,
0x34, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x1a, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x70, 0x72,
0x69, 0x76, 0x61, 0x74, 0x65, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x69, 0x6e, 0x74, 0x3b,
0x34, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0xd3, 0x3e, 0xa9, 0x11, 0xa6, 0xd5, 0x30, 0xac, 0x5e, 0x3c, 0xf2, 0x55,
0x10, 0x00, 0x00, 0x00, 0x10, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00,
0x70, 0x04, 0x00, 0x00, 0x63, 0x6f, 0x76, 0x61, 0x72, 0x5f, 0x6b, 0x65,
0x72, 0x6e, 0x65, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x60, 0x00,
0x0c, 0x02, 0x60, 0x20, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00,
0x06, 0x80, 0x00, 0x00, 0x04, 0x00, 0x00, 0x30, 0x00, 0x10, 0x00, 0x16,
0xc0, 0x04, 0xc0, 0x04, 0x41, 0x80, 0x2d, 0x20, 0x00, 0x7e, 0x09, 0x03,
0x40, 0x00, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x20, 0xc0, 0x0f, 0x00, 0x12,
0x20, 0x00, 0xb1, 0x00, 0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x2f,
0xc0, 0x0f, 0x00, 0x12, 0x40, 0x00, 0xb1, 0x00, 0x40, 0x96, 0x01, 0x20,
0x07, 0x0a, 0x04, 0x07, 0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x2f,
0x80, 0x0f, 0x8d, 0x0a, 0xe0, 0x00, 0x00, 0x00, 0x10, 0x16, 0x6f, 0x25,
0x07, 0x00, 0x0a, 0x08, 0x10, 0x20, 0x80, 0x05, 0x20, 0x0a, 0x00, 0x20,
0x40, 0x0f, 0x8d, 0x0a, 0x10, 0x01, 0x00, 0x00, 0x22, 0x00, 0xa1, 0x00,
0x00, 0x0e, 0x00, 0x20, 0xc0, 0x03, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00,
0x41, 0x96, 0x6d, 0x20, 0x07, 0x0c, 0x0a, 0x08, 0x41, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x00, 0x2f, 0x40, 0x0f, 0x8d, 0x0a, 0x10, 0x01, 0x00, 0x00,
0x10, 0x00, 0x80, 0x03, 0x24, 0x0a, 0x00, 0x20, 0x14, 0x01, 0x00, 0x1e,
0x00, 0x00, 0x00, 0x00, 0x10, 0x20, 0x80, 0x03, 0x24, 0x0a, 0x00, 0x20,
0x14, 0x01, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x01, 0xd6, 0x02, 0x20,
0x07, 0x0e, 0x0a, 0x00, 0x01, 0x20, 0x80, 0x00, 0x28, 0x0a, 0xc0, 0x2e,
0x40, 0x0f, 0x8d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x96, 0x01, 0x20,
0xe7, 0x10, 0x0c, 0x0e, 0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x2e,
0x00, 0x0f, 0x8d, 0x0a, 0xc0, 0x0e, 0x8d, 0x00, 0x01, 0x00, 0x80, 0x00,
0xe8, 0x3e, 0x40, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x20, 0x80, 0x00, 0xe8, 0x3e, 0x40, 0x2e, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x80, 0x00, 0x28, 0x0a, 0x00, 0x22,
0x00, 0x02, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00, 0x09, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x80, 0x2e, 0x80, 0x0e, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00,
0x40, 0x96, 0x75, 0x20, 0x07, 0x10, 0x10, 0x08, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x80, 0x2e, 0x80, 0x0e, 0x8d, 0x0a, 0x18, 0x01, 0x00, 0x00,
0x33, 0x00, 0x80, 0x0c, 0x70, 0x20, 0x01, 0x00, 0x02, 0x02, 0x00, 0x00,
0x00, 0x5e, 0x02, 0x04, 0x33, 0x20, 0x80, 0x0c, 0x70, 0x20, 0x07, 0x00,
0x82, 0x0e, 0x00, 0x00, 0x00, 0x5e, 0x02, 0x04, 0x20, 0x00, 0x01, 0x00,
0x04, 0x00, 0x00, 0x34, 0x00, 0x14, 0x00, 0x0e, 0x30, 0x00, 0x00, 0x00,
0x01, 0x00, 0x80, 0x00, 0xe8, 0x3e, 0x80, 0x22, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x20, 0x80, 0x00, 0xe8, 0x3e, 0x00, 0x2e,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x34, 0x00, 0x14, 0x00, 0x0e, 0x90, 0x01, 0x00, 0x00,
0x01, 0x00, 0x80, 0x00, 0xe8, 0x3e, 0x80, 0x22, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x20, 0x80, 0x00, 0xe8, 0x3e, 0x00, 0x2e,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x2c, 0x1e, 0xc0, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x41, 0x00, 0x00, 0x00, 0x2c, 0x0a, 0xc4, 0x2f, 0xc0, 0x00, 0x00, 0x0a,
0x10, 0x01, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x2c, 0x0a, 0xc0, 0x20,
0xc0, 0x00, 0x00, 0x1e, 0x01, 0x00, 0x01, 0x00, 0x40, 0x96, 0x15, 0x20,
0xe0, 0x16, 0x7e, 0x0a, 0x40, 0x96, 0x15, 0x20, 0xe0, 0x18, 0x7e, 0x0e,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0xc0, 0x2d, 0xc4, 0x0f, 0x00, 0x0a,
0x40, 0x0f, 0x8d, 0x00, 0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0xe0, 0x2c,
0xc4, 0x0f, 0x00, 0x0a, 0xc0, 0x0e, 0x8d, 0x00, 0x09, 0x00, 0x80, 0x00,
0x28, 0x0a, 0xc0, 0x22, 0xc0, 0x02, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00,
0x09, 0x00, 0x80, 0x00, 0x28, 0x0a, 0x00, 0x23, 0x00, 0x03, 0x8d, 0x1e,
0x02, 0x00, 0x02, 0x00, 0x09, 0x20, 0x80, 0x00, 0x28, 0x0a, 0xc0, 0x2d,
0xc0, 0x0d, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00, 0x09, 0x20, 0x80, 0x00,
0x28, 0x0a, 0xe0, 0x2c, 0xe0, 0x0c, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00,
0x40, 0x96, 0x79, 0x20, 0x07, 0x16, 0x16, 0x08, 0x40, 0x96, 0x79, 0x20,
0x07, 0x18, 0x18, 0x08, 0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0xc0, 0x2d,
0xc0, 0x0d, 0x8d, 0x0a, 0x1c, 0x01, 0x00, 0x00, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0xe0, 0x2c, 0xe0, 0x0c, 0x8d, 0x0a, 0x1c, 0x01, 0x00, 0x00,
0x31, 0x00, 0x80, 0x0c, 0x68, 0x02, 0x60, 0x2d, 0xc0, 0x02, 0x00, 0x06,
0x01, 0x5e, 0x20, 0x04, 0x10, 0x00, 0x80, 0x05, 0x26, 0x0a, 0x00, 0x20,
0xc0, 0x00, 0x00, 0x0a, 0x14, 0x01, 0x00, 0x00, 0x31, 0x00, 0x80, 0x0c,
0x68, 0x02, 0x40, 0x23, 0x00, 0x03, 0x00, 0x06, 0x01, 0x5e, 0x20, 0x04,
0x31, 0x20, 0x80, 0x0c, 0x68, 0x02, 0x20, 0x2d, 0xc0, 0x0d, 0x00, 0x06,
0x01, 0x5e, 0x20, 0x04, 0x31, 0x20, 0x80, 0x0c, 0x68, 0x02, 0x80, 0x23,
0xe0, 0x0c, 0x00, 0x06, 0x01, 0x5e, 0x20, 0x04, 0x10, 0x20, 0x80, 0x05,
0x26, 0x0a, 0x00, 0x20, 0xc0, 0x00, 0x00, 0x0a, 0x14, 0x01, 0x00, 0x00,
0x5b, 0x42, 0x01, 0x20, 0x00, 0xa0, 0x68, 0xd6, 0x5b, 0x03, 0x07, 0x20,
0x00, 0x80, 0x73, 0xd2, 0x33, 0x00, 0x80, 0x0c, 0x70, 0x40, 0x01, 0x00,
0x02, 0x02, 0x00, 0x00, 0x00, 0x5e, 0x02, 0x04, 0x33, 0x20, 0x80, 0x0c,
0x70, 0x00, 0x07, 0x00, 0x82, 0x0e, 0x00, 0x00, 0x00, 0x5e, 0x02, 0x04,
0x20, 0x00, 0x01, 0x00, 0x06, 0x00, 0x00, 0x34, 0x00, 0x14, 0x00, 0x0e,
0xa0, 0xfe, 0xff, 0xff, 0x41, 0x96, 0x6d, 0x20, 0x07, 0x65, 0x0e, 0x08,
0x41, 0x20, 0x80, 0x00, 0x28, 0x0a, 0xc0, 0x23, 0xc0, 0x0e, 0x8d, 0x0a,
0x10, 0x01, 0x00, 0x00, 0x40, 0x00, 0x80, 0x00, 0x28, 0x0a, 0x60, 0x2c,
0xc0, 0x01, 0x8d, 0x1e, 0x01, 0x00, 0x01, 0x00, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x00, 0x24, 0xc0, 0x0e, 0x8d, 0x1e, 0x01, 0x00, 0x01, 0x00,
0x40, 0x96, 0x01, 0x20, 0xe7, 0x65, 0x65, 0x0a, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0xc0, 0x23, 0xc0, 0x03, 0x8d, 0x0a, 0x40, 0x0f, 0x8d, 0x00,
0x10, 0x00, 0x80, 0x05, 0x22, 0x0a, 0x00, 0x20, 0x60, 0x0c, 0x8d, 0x0a,
0x10, 0x01, 0x00, 0x00, 0x10, 0x20, 0x80, 0x05, 0x22, 0x0a, 0x00, 0x20,
0x00, 0x04, 0x8d, 0x0a, 0x10, 0x01, 0x00, 0x00, 0x09, 0x00, 0x80, 0x00,
0x28, 0x0a, 0xa0, 0x2c, 0xa0, 0x0c, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00,
0x09, 0x20, 0x80, 0x00, 0x28, 0x0a, 0xc0, 0x23, 0xc0, 0x03, 0x8d, 0x1e,
0x02, 0x00, 0x02, 0x00, 0x40, 0x96, 0x75, 0x20, 0x07, 0x65, 0x65, 0x08,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0xc0, 0x23, 0xc0, 0x03, 0x8d, 0x0a,
0x18, 0x01, 0x00, 0x00, 0x33, 0x00, 0x80, 0x0c, 0x70, 0x40, 0x01, 0x00,
0xa2, 0x0c, 0x00, 0x00, 0x00, 0x5e, 0x02, 0x04, 0x33, 0x20, 0x80, 0x0c,
0x70, 0x00, 0x07, 0x00, 0xc2, 0x03, 0x00, 0x00, 0x00, 0x5e, 0x02, 0x04,
0x28, 0x00, 0xb1, 0x00, 0x02, 0x0e, 0x00, 0x20, 0x28, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x01, 0xd6, 0x02, 0x20, 0x07, 0x0e, 0x63, 0x00,
0x01, 0x20, 0x80, 0x00, 0x28, 0x0a, 0xc0, 0x2e, 0x00, 0x04, 0x8d, 0x00,
0x00, 0x00, 0x00, 0x00, 0x27, 0x00, 0xa0, 0x10, 0x00, 0x00, 0x00, 0x20,
0x00, 0x00, 0x00, 0x0e, 0xb0, 0xfc, 0xff, 0xff, 0x25, 0x00, 0xa0, 0x00,
0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x0e, 0x10, 0x00, 0x00, 0x00,
0x01, 0x4d, 0x00, 0x20, 0x07, 0x7f, 0x03, 0x00, 0x01, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x20, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x31, 0x00, 0x60, 0x07, 0x04, 0x02, 0x00, 0x20, 0xe0, 0x0f, 0x00, 0x06,
0x10, 0x00, 0x00, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
0x00, 0xc0, 0xff, 0x83, 0x00, 0x00, 0x00, 0x03, 0x7f, 0x00, 0xff, 0x1f,
0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x83, 0x00, 0x00, 0x00, 0x03,
0x7f, 0x00, 0xff, 0x1f, 0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x40, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x80, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00,
0x80, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x14, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x2b, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x38, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x44, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
0x34, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
0x19, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00,
0x16, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x1b, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x5f, 0x5f, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x00, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x73, 0x79, 0x6d, 0x6d,
0x61, 0x74, 0x00, 0x00, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50,
0x45, 0x2a, 0x3b, 0x38, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x5f, 0x5f, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x00, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x64, 0x61, 0x74, 0x61,
0x00, 0x00, 0x00, 0x00, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50,
0x45, 0x2a, 0x3b, 0x38, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x5f, 0x5f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x00,
0x69, 0x6e, 0x74, 0x3b, 0x34, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00,
0x03, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x5f, 0x5f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00,
0x69, 0x6e, 0x74, 0x3b, 0x34, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00
};
unsigned int covariance_Gen9core_gen_len = 7648;

View File

@@ -0,0 +1,406 @@
/**
* fdtd2d.c: This file is part of the PolyBench/GPU 1.0 test suite.
*
*
* Contact: Scott Grauer-Gray <sgrauerg@gmail.com>
* Will Killian <killian@udel.edu>
* Louis-Noel Pouchet <pouchet@cse.ohio-state.edu>
* Web address: http://www.cse.ohio-state.edu/~pouchet/software/polybench/GPU
*/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <sys/time.h>
#include <math.h>
#ifdef __APPLE__
#include <OpenCL/opencl.h>
#else
#include "../../CL/cl.h"
#endif
#define POLYBENCH_TIME 1
//select the OpenCL device to use (can be GPU, CPU, or Accelerator such as Intel Xeon Phi)
#define OPENCL_DEVICE_SELECTION CL_DEVICE_TYPE_GPU
#include "fdtd2d.h"
#include "../../polybench.h"
//define the error threshold for the results "not matching"
#define PERCENT_DIFF_ERROR_THRESHOLD 1.05
#define MAX_SOURCE_SIZE (0x100000)
#if defined(cl_khr_fp64) // Khronos extension available?
#pragma OPENCL EXTENSION cl_khr_fp64 : enable
#elif defined(cl_amd_fp64) // AMD extension available?
#pragma OPENCL EXTENSION cl_amd_fp64 : enable
#endif
namespace ns_fdtd_2d
{
#include "../../polybenchUtilFuncts.h"
#include "fdtd2d_kernel.h"
char str_temp[1024];
cl_platform_id platform_id;
cl_device_id device_id;
cl_uint num_devices;
cl_uint num_platforms;
cl_int errcode;
cl_context clGPUContext;
cl_kernel clKernel1;
cl_kernel clKernel2;
cl_kernel clKernel3;
cl_command_queue clCommandQue;
cl_program clProgram;
cl_mem fict_mem_obj;
cl_mem ex_mem_obj;
cl_mem ey_mem_obj;
cl_mem hz_mem_obj;
FILE *fp;
char *source_str;
size_t source_size;
#define RUN_ON_CPU
void compareResults(int nx, int ny, DATA_TYPE POLYBENCH_2D(hz1,NX,NY,nx,ny), DATA_TYPE POLYBENCH_2D(hz2,NX,NY,nx,ny))
{
int i, j, fail;
fail = 0;
for (i=0; i < nx; i++)
{
for (j=0; j < ny; j++)
{
if (percentDiff(hz1[i][j], hz2[i][j]) > PERCENT_DIFF_ERROR_THRESHOLD)
{
fail++;
}
}
}
// Print results
printf("Non-Matching CPU-GPU Outputs Beyond Error Threshold of %4.2f Percent: %d\n", PERCENT_DIFF_ERROR_THRESHOLD, fail);
}
void read_cl_file()
{
// Load the kernel source code into the array source_str
// fp = fopen("fdtd2d.cl", "r");
// if (!fp) {
// fprintf(stderr, "Failed to load kernel.\n");
// exit(1);
// }
// source_str = (char*)malloc(MAX_SOURCE_SIZE);
// source_size = fread( source_str, 1, MAX_SOURCE_SIZE, fp);
// fclose( fp );
}
void init_arrays(int tmax, int nx, int ny, DATA_TYPE POLYBENCH_1D(_fict_, TMAX, TMAX), DATA_TYPE POLYBENCH_2D(ex,NX,NY,nx,ny),
DATA_TYPE POLYBENCH_2D(ey,NX,NY,nx,ny), DATA_TYPE POLYBENCH_2D(hz,NX,NY,nx,ny))
{
int i, j;
for (i = 0; i < tmax; i++)
{
_fict_[i] = (DATA_TYPE) i;
}
for (i = 0; i < nx; i++)
{
for (j = 0; j < ny; j++)
{
ex[i][j] = ((DATA_TYPE) i*(j+1) + 1) / NX;
ey[i][j] = ((DATA_TYPE) (i-1)*(j+2) + 2) / NX;
hz[i][j] = ((DATA_TYPE) (i-9)*(j+4) + 3) / NX;
}
}
}
void cl_initialization()
{
// Get platform and device information
errcode = clGetPlatformIDs(1, &platform_id, &num_platforms);
if(errcode == CL_SUCCESS) printf("number of platforms is %d\n",num_platforms);
else printf("Error getting platform IDs\n");
errcode = clGetPlatformInfo(platform_id,CL_PLATFORM_NAME, sizeof(str_temp), str_temp,NULL);
if(errcode == CL_SUCCESS) printf("platform name is %s\n",str_temp);
else printf("Error getting platform name\n");
errcode = clGetPlatformInfo(platform_id, CL_PLATFORM_VERSION, sizeof(str_temp), str_temp,NULL);
if(errcode == CL_SUCCESS) printf("platform version is %s\n",str_temp);
else printf("Error getting platform version\n");
errcode = clGetDeviceIDs( platform_id, OPENCL_DEVICE_SELECTION, 1, &device_id, &num_devices);
if(errcode == CL_SUCCESS) printf("number of devices is %d\n", num_devices);
else printf("Error getting device IDs\n");
errcode = clGetDeviceInfo(device_id,CL_DEVICE_NAME, sizeof(str_temp), str_temp,NULL);
if(errcode == CL_SUCCESS) printf("device name is %s\n",str_temp);
else printf("Error getting device name\n");
// Create an OpenCL context
clGPUContext = clCreateContext( NULL, 1, &device_id, NULL, NULL, &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating context\n");
//Create a command-queue
clCommandQue = clCreateCommandQueue(clGPUContext, device_id, 0, &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating command queue\n");
}
void cl_mem_init(DATA_TYPE POLYBENCH_1D(_fict_,TMAX,tmax), DATA_TYPE POLYBENCH_2D(ex,NX,NY,nx,ny), DATA_TYPE POLYBENCH_2D(ey,NX,NY,nx,ny), DATA_TYPE POLYBENCH_2D(hz,NX,NY,nx,ny))
{
fict_mem_obj = clCreateBuffer(clGPUContext, CL_MEM_READ_WRITE, sizeof(DATA_TYPE) * TMAX, NULL, &errcode);
ex_mem_obj = clCreateBuffer(clGPUContext, CL_MEM_READ_WRITE, sizeof(DATA_TYPE) * NX * NY, NULL, &errcode);
ey_mem_obj = clCreateBuffer(clGPUContext, CL_MEM_READ_WRITE, sizeof(DATA_TYPE) * NX * NY, NULL, &errcode);
hz_mem_obj = clCreateBuffer(clGPUContext, CL_MEM_READ_WRITE, sizeof(DATA_TYPE) * NX * NY, NULL, &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating buffers\n");
errcode = clEnqueueWriteBuffer(clCommandQue, fict_mem_obj, CL_TRUE, 0, sizeof(DATA_TYPE) * TMAX, _fict_, 0, NULL, NULL);
errcode = clEnqueueWriteBuffer(clCommandQue, ex_mem_obj, CL_TRUE, 0, sizeof(DATA_TYPE) * NX * NY, ex, 0, NULL, NULL);
errcode = clEnqueueWriteBuffer(clCommandQue, ey_mem_obj, CL_TRUE, 0, sizeof(DATA_TYPE) * NX * NY, ey, 0, NULL, NULL);
errcode = clEnqueueWriteBuffer(clCommandQue, hz_mem_obj, CL_TRUE, 0, sizeof(DATA_TYPE) * NX * NY, hz, 0, NULL, NULL);
if(errcode != CL_SUCCESS)printf("Error in writing buffers\n");
}
void cl_load_prog()
{
// Create a program from the kernel source
const size_t kernel_size = fdtd2d_Gen9core_gen_len;
const unsigned char* kernel_bin = fdtd2d_Gen9core_gen;
clProgram = clCreateProgramWithBinary(clGPUContext, 1, &device_id, &kernel_size, &kernel_bin, NULL, &errcode);
// clProgram = clCreateProgramWithSource(clGPUContext, 1, (const char **)&source_str, (const size_t *)&source_size, &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating program\n");
// Build the program
errcode = clBuildProgram(clProgram, 1, &device_id, NULL, NULL, NULL);
if(errcode != CL_SUCCESS) printf("Error in building program\n");
// Create the OpenCL kernel
clKernel1 = clCreateKernel(clProgram, "fdtd_kernel1", &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating kernel1\n");
// Create the OpenCL kernel
clKernel2 = clCreateKernel(clProgram, "fdtd_kernel2", &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating kernel1\n");
// Create the OpenCL kernel
clKernel3 = clCreateKernel(clProgram, "fdtd_kernel3", &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating kernel1\n");
clFinish(clCommandQue);
}
void cl_launch_kernel(int tmax, int nx, int ny)
{
size_t localWorkSize[2], globalWorkSize[2];
localWorkSize[0] = DIM_LOCAL_WORK_GROUP_X;
localWorkSize[1] = DIM_LOCAL_WORK_GROUP_Y;
globalWorkSize[0] = (size_t)ceil(((float)NY) / ((float)DIM_LOCAL_WORK_GROUP_X)) * DIM_LOCAL_WORK_GROUP_X;
globalWorkSize[1] = (size_t)ceil(((float)NX) / ((float)DIM_LOCAL_WORK_GROUP_Y)) * DIM_LOCAL_WORK_GROUP_Y;
/* Start timer. */
polybench_start_instruments;
int t;
for(t=0;t<_PB_TMAX;t++)
{
// Set the arguments of the kernel
errcode = clSetKernelArg(clKernel1, 0, sizeof(cl_mem), (void *)&fict_mem_obj);
errcode = clSetKernelArg(clKernel1, 1, sizeof(cl_mem), (void *)&ex_mem_obj);
errcode |= clSetKernelArg(clKernel1, 2, sizeof(cl_mem), (void *)&ey_mem_obj);
errcode |= clSetKernelArg(clKernel1, 3, sizeof(cl_mem), (void *)&hz_mem_obj);
errcode |= clSetKernelArg(clKernel1, 4, sizeof(int), (void *)&t);
errcode |= clSetKernelArg(clKernel1, 5, sizeof(int), (void *)&nx);
errcode |= clSetKernelArg(clKernel1, 6, sizeof(int), (void *)&ny);
if(errcode != CL_SUCCESS) printf("Error in seting arguments1\n");
// Execute the OpenCL kernel
errcode = clEnqueueNDRangeKernel(clCommandQue, clKernel1, 2, NULL, globalWorkSize, localWorkSize, 0, NULL, NULL);
if(errcode != CL_SUCCESS) printf("Error in launching kernel1\n");
clEnqueueBarrier(clCommandQue);
// Set the arguments of the kernel
errcode = clSetKernelArg(clKernel2, 0, sizeof(cl_mem), (void *)&ex_mem_obj);
errcode |= clSetKernelArg(clKernel2, 1, sizeof(cl_mem), (void *)&ey_mem_obj);
errcode |= clSetKernelArg(clKernel2, 2, sizeof(cl_mem), (void *)&hz_mem_obj);
errcode |= clSetKernelArg(clKernel2, 3, sizeof(int), (void *)&nx);
errcode |= clSetKernelArg(clKernel2, 4, sizeof(int), (void *)&ny);
if(errcode != CL_SUCCESS) printf("Error in seting arguments1\n");
// Execute the OpenCL kernel
errcode = clEnqueueNDRangeKernel(clCommandQue, clKernel2, 2, NULL, globalWorkSize, localWorkSize, 0, NULL, NULL);
if(errcode != CL_SUCCESS) printf("Error in launching kernel1\n");
clEnqueueBarrier(clCommandQue);
// Set the arguments of the kernel
errcode = clSetKernelArg(clKernel3, 0, sizeof(cl_mem), (void *)&ex_mem_obj);
errcode |= clSetKernelArg(clKernel3, 1, sizeof(cl_mem), (void *)&ey_mem_obj);
errcode |= clSetKernelArg(clKernel3, 2, sizeof(cl_mem), (void *)&hz_mem_obj);
errcode |= clSetKernelArg(clKernel3, 3, sizeof(int), (void *)&nx);
errcode |= clSetKernelArg(clKernel3, 4, sizeof(int), (void *)&ny);
if(errcode != CL_SUCCESS) printf("Error in seting arguments1\n");
// Execute the OpenCL kernel
errcode = clEnqueueNDRangeKernel(clCommandQue, clKernel3, 2, NULL, globalWorkSize, localWorkSize, 0, NULL, NULL);
if(errcode != CL_SUCCESS) printf("Error in launching kernel1\n");
clFinish(clCommandQue);
}
/* Stop and print timer. */
printf("GPU Time in seconds:\n");
polybench_stop_instruments;
polybench_print_instruments;
}
void cl_clean_up()
{
// Clean up
errcode = clFlush(clCommandQue);
errcode = clFinish(clCommandQue);
errcode = clReleaseKernel(clKernel1);
errcode = clReleaseKernel(clKernel2);
errcode = clReleaseKernel(clKernel3);
errcode = clReleaseProgram(clProgram);
errcode = clReleaseMemObject(fict_mem_obj);
errcode = clReleaseMemObject(ex_mem_obj);
errcode = clReleaseMemObject(ey_mem_obj);
errcode = clReleaseMemObject(hz_mem_obj);
errcode = clReleaseCommandQueue(clCommandQue);
errcode = clReleaseContext(clGPUContext);
if(errcode != CL_SUCCESS) printf("Error in cleanup\n");
}
void runFdtd(int tmax, int nx, int ny, DATA_TYPE POLYBENCH_1D(_fict_, TMAX, TMAX), DATA_TYPE POLYBENCH_2D(ex,NX,NY,nx,ny),
DATA_TYPE POLYBENCH_2D(ey,NX,NY,nx,ny), DATA_TYPE POLYBENCH_2D(hz,NX,NY,nx,ny))
{
int t, i, j;
for (t=0; t < _PB_TMAX; t++)
{
for (j=0; j < _PB_NY; j++)
{
ey[0][j] = _fict_[t];
}
for (i = 1; i < _PB_NX; i++)
{
for (j = 0; j < _PB_NY; j++)
{
ey[i][j] = ey[i][j] - 0.5*(hz[i][j] - hz[(i-1)][j]);
}
}
for (i = 0; i < _PB_NX; i++)
{
for (j = 1; j < _PB_NY; j++)
{
ex[i][j] = ex[i][j] - 0.5*(hz[i][j] - hz[i][(j-1)]);
}
}
for (i = 0; i < _PB_NX-1; i++)
{
for (j = 0; j < _PB_NY-1; j++)
{
hz[i][j] = hz[i][j] - 0.7*(ex[i][(j+1)] - ex[i][j] + ey[(i+1)][j] - ey[i][j]);
}
}
}
}
/* DCE code. Must scan the entire live-out data.
Can be used also to check the correctness of the output. */
static
void print_array(int nx,
int ny,
DATA_TYPE POLYBENCH_2D(hz,NX,NY,nx,ny))
{
int i, j;
for (i = 0; i < nx; i++)
for (j = 0; j < ny; j++) {
fprintf(stderr, DATA_PRINTF_MODIFIER, hz[i][j]);
if ((i * nx + j) % 20 == 0) fprintf(stderr, "\n");
}
fprintf(stderr, "\n");
}
int main(int argc, char *argv[])
{
int tmax = TMAX;
int nx = NX;
int ny = NY;
POLYBENCH_1D_ARRAY_DECL(_fict_,DATA_TYPE,TMAX,TMAX);
POLYBENCH_2D_ARRAY_DECL(ex,DATA_TYPE,NX,NY,nx,ny);
POLYBENCH_2D_ARRAY_DECL(ey,DATA_TYPE,NX,NY,nx,ny);
POLYBENCH_2D_ARRAY_DECL(hz,DATA_TYPE,NX,NY,nx,ny);
POLYBENCH_2D_ARRAY_DECL(hz_outputFromGpu,DATA_TYPE,NX,NY,nx,ny);
init_arrays(tmax, nx, ny, POLYBENCH_ARRAY(_fict_), POLYBENCH_ARRAY(ex), POLYBENCH_ARRAY(ey), POLYBENCH_ARRAY(hz));
read_cl_file();
cl_initialization();
cl_mem_init(POLYBENCH_ARRAY(_fict_), POLYBENCH_ARRAY(ex), POLYBENCH_ARRAY(ey), POLYBENCH_ARRAY(hz));
cl_load_prog();
cl_launch_kernel(tmax, nx, ny);
errcode = clEnqueueReadBuffer(clCommandQue, hz_mem_obj, CL_TRUE, 0, NX * NY * sizeof(DATA_TYPE), POLYBENCH_ARRAY(hz_outputFromGpu), 0, NULL, NULL);
if(errcode != CL_SUCCESS) printf("Error in reading GPU mem\n");
#ifdef RUN_ON_CPU
/* Start timer. */
polybench_start_instruments;
runFdtd(tmax, nx, ny, POLYBENCH_ARRAY(_fict_), POLYBENCH_ARRAY(ex), POLYBENCH_ARRAY(ey), POLYBENCH_ARRAY(hz));
/* Stop and print timer. */
printf("CPU Time in seconds:\n");
polybench_stop_instruments;
polybench_print_instruments;
compareResults(nx, ny, POLYBENCH_ARRAY(hz), POLYBENCH_ARRAY(hz_outputFromGpu));
#else //prevent dead code elimination
polybench_prevent_dce(print_array(nx, ny, POLYBENCH_ARRAY(hz_outputFromGpu)));
#endif //RUN_ON_CPU
POLYBENCH_FREE_ARRAY(_fict_);
POLYBENCH_FREE_ARRAY(ex);
POLYBENCH_FREE_ARRAY(ey);
POLYBENCH_FREE_ARRAY(hz);
POLYBENCH_FREE_ARRAY(hz_outputFromGpu);
cl_clean_up();
return 0;
}
}

View File

@@ -0,0 +1,64 @@
/**
* fdtd2d.cl: This file is part of the PolyBench/GPU 1.0 test suite.
*
*
* Contact: Scott Grauer-Gray <sgrauerg@gmail.com>
* Will Killian <killian@udel.edu>
* Louis-Noel Pouchet <pouchet@cse.ohio-state.edu>
* Web address: http://www.cse.ohio-state.edu/~pouchet/software/polybench/GPU
*/
#if defined(cl_khr_fp64) // Khronos extension available?
#pragma OPENCL EXTENSION cl_khr_fp64 : enable
#elif defined(cl_amd_fp64) // AMD extension available?
#pragma OPENCL EXTENSION cl_amd_fp64 : enable
#endif
typedef float DATA_TYPE;
__kernel void fdtd_kernel1(__global DATA_TYPE *_fict_, __global DATA_TYPE *ex, __global DATA_TYPE *ey, __global DATA_TYPE *hz, int t, int nx, int ny)
{
int j = get_global_id(0);
int i = get_global_id(1);
if ((i < nx) && (j < ny))
{
int tid = i * ny + j;
if (i == 0)
{
ey[i * ny + j] = _fict_[t];
}
else
{
ey[i * ny + j] = ey[i * ny + j] - 0.5*(hz[i * ny + j] - hz[(i-1) * ny + j]);
}
}
}
__kernel void fdtd_kernel2(__global DATA_TYPE *ex, __global DATA_TYPE *ey, __global DATA_TYPE *hz, int nx, int ny)
{
int j = get_global_id(0);
int i = get_global_id(1);
if ((i < nx) && (j < ny) && (j > 0))
{
ex[i * ny + j] = ex[i * ny + j] - 0.5*(hz[i * ny + j] - hz[i * ny + (j-1)]);
}
}
__kernel void fdtd_kernel3(__global DATA_TYPE *ex, __global DATA_TYPE *ey, __global DATA_TYPE *hz, int nx, int ny)
{
int j = get_global_id(0);
int i = get_global_id(1);
if ((i < (nx-1)) && (j < (ny-1)))
{
hz[i * ny + j] = hz[i * ny + j] - 0.7*(ex[i * ny + (j+1)] - ex[i * ny + j] + ey[(i + 1) * ny + j] - ey[i * ny + j]);
}
}

View File

@@ -0,0 +1,67 @@
/**
* fdtd2d.h: This file is part of the PolyBench/GPU 1.0 test suite.
*
*
* Contact: Scott Grauer-Gray <sgrauerg@gmail.com>
* Will Killian <killian@udel.edu>
* Louis-Noel Pouchet <pouchet@cse.ohio-state.edu>
* Web address: http://www.cse.ohio-state.edu/~pouchet/software/polybench/GPU
*/
#ifndef FDTD2D_H
# define FDTD2D_H
/* Default to STANDARD_DATASET. */
# if !defined(MINI_DATASET) && !defined(SMALL_DATASET) && !defined(LARGE_DATASET) && !defined(EXTRALARGE_DATASET)
# define MINI_DATASET
# endif
/* Do not define anything if the user manually defines the size. */
# if !defined(TMAX) && !defined(NX) && !defined(NY)
/* Define the possible dataset sizes. */
# ifdef MINI_DATASET
#define TMAX 500
#define NX 256
#define NY 256
# endif
# ifdef SMALL_DATASET
#define TMAX 500
#define NX 1024
#define NY 1024
# endif
# ifdef STANDARD_DATASET /* Default if unspecified. */
#define TMAX 500
#define NX 2048
#define NY 2048
# endif
# ifdef LARGE_DATASET
#define TMAX 500
#define NX 4096
#define NY 4096
# endif
# ifdef EXTRALARGE_DATASET
#define TMAX 500
#define NX 8192
#define NY 8192
# endif
# endif /* !N */
# define _PB_TMAX POLYBENCH_LOOP_BOUND(TMAX,tmax)
# define _PB_NX POLYBENCH_LOOP_BOUND(NX,nx)
# define _PB_NY POLYBENCH_LOOP_BOUND(NY,ny)
# ifndef DATA_TYPE
# define DATA_TYPE float
# define DATA_PRINTF_MODIFIER "%0.2lf "
# endif
/* Thread block dimensions */
#define DIM_LOCAL_WORK_GROUP_X 32
#define DIM_LOCAL_WORK_GROUP_Y 8
#endif /* !FDTD2D*/

View File

@@ -0,0 +1,832 @@
unsigned char fdtd2d_Gen9core_gen[] = {
0x43, 0x54, 0x4e, 0x49, 0x39, 0x04, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x68, 0x14, 0xa1, 0x96, 0x6a, 0x4e, 0x57, 0xfe,
0x19, 0xd2, 0x90, 0x39, 0x10, 0x00, 0x00, 0x00, 0xdc, 0x06, 0x00, 0x00,
0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
0x10, 0x01, 0x00, 0x00, 0x70, 0x05, 0x00, 0x00, 0x66, 0x64, 0x74, 0x64,
0x5f, 0x6b, 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x31, 0x00, 0x00, 0x00, 0x00,
0x01, 0x00, 0x60, 0x00, 0x0c, 0x02, 0xa0, 0x20, 0x00, 0x00, 0x20, 0x00,
0x00, 0x00, 0x00, 0x00, 0x06, 0x80, 0x00, 0x00, 0x04, 0x00, 0x00, 0x30,
0x00, 0x10, 0x00, 0x16, 0xc0, 0x04, 0xc0, 0x04, 0x41, 0x80, 0x2d, 0x20,
0x00, 0x7e, 0x0a, 0x05, 0x41, 0x00, 0x00, 0x00, 0x2c, 0x0a, 0xc0, 0x20,
0x44, 0x01, 0x00, 0x0a, 0xb8, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x4c, 0x16, 0xc4, 0x2f, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x2f, 0xc0, 0x0f, 0x00, 0x12,
0x40, 0x00, 0xb1, 0x00, 0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0xe0, 0x21,
0xc0, 0x00, 0x00, 0x12, 0x80, 0x00, 0xb1, 0x00, 0x40, 0x00, 0x80, 0x00,
0x28, 0x0a, 0x60, 0x21, 0xc0, 0x0f, 0x00, 0x12, 0x20, 0x00, 0xb1, 0x00,
0x40, 0x00, 0x80, 0x00, 0x28, 0x0a, 0x00, 0x2f, 0xc0, 0x00, 0x00, 0x12,
0x60, 0x00, 0xb1, 0x00, 0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x2f,
0x80, 0x0f, 0x8d, 0x0a, 0xe0, 0x00, 0x00, 0x00, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x20, 0x22, 0xe0, 0x01, 0x8d, 0x0a, 0xe4, 0x00, 0x00, 0x00,
0x40, 0x96, 0x01, 0x20, 0x07, 0x0d, 0x0b, 0x07, 0x40, 0x96, 0x2d, 0x20,
0x07, 0x76, 0x78, 0x07, 0x10, 0x20, 0x80, 0x05, 0x22, 0x0a, 0x00, 0x20,
0x40, 0x0f, 0x8d, 0x0a, 0x28, 0x01, 0x00, 0x00, 0x10, 0x20, 0x80, 0x05,
0x20, 0x0a, 0x00, 0x20, 0x20, 0x02, 0x8d, 0x0a, 0x24, 0x01, 0x00, 0x00,
0x10, 0x16, 0x5f, 0x25, 0x07, 0x00, 0x0d, 0x09, 0x02, 0x20, 0x81, 0x00,
0x4a, 0x12, 0xa0, 0x24, 0xc4, 0x0f, 0x00, 0x16, 0x00, 0x00, 0x00, 0x00,
0x02, 0x20, 0x81, 0x00, 0x48, 0x12, 0x40, 0x2c, 0xc4, 0x0f, 0x00, 0x16,
0x00, 0x00, 0x00, 0x00, 0x10, 0x19, 0x2f, 0x25, 0x07, 0x00, 0x76, 0x09,
0x05, 0x20, 0x80, 0x02, 0x40, 0x12, 0x00, 0x20, 0x40, 0x0c, 0xb1, 0x12,
0xa0, 0x04, 0xb1, 0x00, 0x22, 0x00, 0xa1, 0x00, 0x00, 0x0e, 0x00, 0x20,
0x30, 0x04, 0x00, 0x00, 0x30, 0x04, 0x00, 0x00, 0x10, 0x00, 0x80, 0x01,
0x22, 0x0a, 0x00, 0x20, 0xc0, 0x0e, 0x8d, 0x1e, 0x00, 0x00, 0x00, 0x00,
0x10, 0x20, 0x80, 0x01, 0x22, 0x0a, 0x00, 0x20, 0x20, 0x02, 0x8d, 0x1e,
0x00, 0x00, 0x00, 0x00, 0x22, 0x00, 0xb1, 0x00, 0x02, 0x0e, 0x00, 0x20,
0xf0, 0x03, 0x00, 0x00, 0x50, 0x03, 0x00, 0x00, 0x40, 0x00, 0x80, 0x00,
0x28, 0x0a, 0x80, 0x2d, 0xc0, 0x0e, 0x8d, 0x1e, 0xff, 0xff, 0xff, 0xff,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x60, 0x23, 0x20, 0x02, 0x8d, 0x1e,
0xff, 0xff, 0xff, 0xff, 0x41, 0x96, 0x5d, 0x20, 0x07, 0x74, 0x76, 0x09,
0x41, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x60, 0x22, 0x20, 0x02, 0x8d, 0x0a,
0x28, 0x01, 0x00, 0x00, 0x41, 0x96, 0x5d, 0x20, 0x07, 0x6c, 0x6c, 0x09,
0x41, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x60, 0x23, 0x60, 0x03, 0x8d, 0x0a,
0x28, 0x01, 0x00, 0x00, 0x40, 0x96, 0x01, 0x20, 0xe7, 0x74, 0x74, 0x0d,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x60, 0x22, 0x60, 0x02, 0x8d, 0x0a,
0x40, 0x0f, 0x8d, 0x00, 0x40, 0x96, 0x01, 0x20, 0xe7, 0x6c, 0x6c, 0x0d,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x60, 0x23, 0x60, 0x03, 0x8d, 0x0a,
0x40, 0x0f, 0x8d, 0x00, 0x09, 0x00, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x2e,
0x80, 0x0e, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00, 0x09, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x60, 0x22, 0x60, 0x02, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00,
0x09, 0x00, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x2d, 0x80, 0x0d, 0x8d, 0x1e,
0x02, 0x00, 0x02, 0x00, 0x09, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x60, 0x23,
0x60, 0x03, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00, 0x40, 0x96, 0x6d, 0x20,
0x07, 0x72, 0x74, 0x09, 0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0xa0, 0x22,
0x60, 0x02, 0x8d, 0x0a, 0x30, 0x01, 0x00, 0x00, 0x40, 0x96, 0x71, 0x20,
0x07, 0x74, 0x74, 0x09, 0x40, 0x96, 0x71, 0x20, 0x07, 0x6c, 0x6c, 0x09,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x60, 0x22, 0x60, 0x02, 0x8d, 0x0a,
0x34, 0x01, 0x00, 0x00, 0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x60, 0x23,
0x60, 0x03, 0x8d, 0x0a, 0x34, 0x01, 0x00, 0x00, 0x31, 0x00, 0x80, 0x0c,
0x68, 0x02, 0xc0, 0x2d, 0x80, 0x0e, 0x00, 0x06, 0x03, 0x5e, 0x20, 0x04,
0x31, 0x00, 0x80, 0x0c, 0x68, 0x02, 0x40, 0x2d, 0x80, 0x0d, 0x00, 0x06,
0x03, 0x5e, 0x20, 0x04, 0x31, 0x20, 0x80, 0x0c, 0x68, 0x02, 0x20, 0x23,
0x60, 0x02, 0x00, 0x06, 0x03, 0x5e, 0x20, 0x04, 0x31, 0x20, 0x80, 0x0c,
0x68, 0x02, 0xa0, 0x23, 0x60, 0x03, 0x00, 0x06, 0x03, 0x5e, 0x20, 0x04,
0x31, 0x00, 0x80, 0x0c, 0x68, 0x02, 0x00, 0x2e, 0x40, 0x0e, 0x00, 0x06,
0x02, 0x5e, 0x20, 0x04, 0x31, 0x20, 0x80, 0x0c, 0x68, 0x02, 0xe0, 0x22,
0xa0, 0x02, 0x00, 0x06, 0x02, 0x5e, 0x20, 0x04, 0x01, 0x00, 0x00, 0x00,
0xcc, 0x56, 0xc8, 0x2f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xbf,
0x01, 0x00, 0x60, 0x00, 0xc8, 0x32, 0xc0, 0x24, 0xc8, 0x0f, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x10, 0x60, 0x00, 0xc8, 0x32, 0x00, 0x25,
0xc8, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x20, 0x60, 0x00,
0xc8, 0x32, 0x40, 0x25, 0xc8, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x30, 0x60, 0x00, 0xc8, 0x32, 0x80, 0x25, 0xc8, 0x0f, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x40, 0x56, 0x02, 0x20, 0xf7, 0x6a, 0x6e, 0x6a,
0x40, 0x20, 0x80, 0x00, 0xe8, 0x3a, 0xa0, 0x23, 0x20, 0x03, 0x8d, 0x3a,
0xa0, 0x43, 0x8d, 0x00, 0x01, 0x00, 0x60, 0x00, 0xc8, 0x3a, 0x40, 0x26,
0x00, 0x0e, 0x8d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x10, 0x60, 0x00,
0xc8, 0x3a, 0x60, 0x2a, 0x20, 0x0e, 0x8d, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x00, 0x60, 0x00, 0xc8, 0x3a, 0x60, 0x2b, 0x40, 0x0d, 0x8d, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x10, 0x60, 0x00, 0xc8, 0x3a, 0x20, 0x2b,
0x60, 0x0d, 0x8d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x20, 0x60, 0x00,
0xc8, 0x3a, 0x80, 0x26, 0xe0, 0x02, 0x8d, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x30, 0x60, 0x00, 0xc8, 0x3a, 0x20, 0x2a, 0x00, 0x03, 0x8d, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x20, 0x60, 0x00, 0xc8, 0x3a, 0xe0, 0x2a,
0xa0, 0x03, 0x8d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x30, 0x60, 0x00,
0xc8, 0x3a, 0xa0, 0x2a, 0xc0, 0x03, 0x8d, 0x00, 0x00, 0x00, 0x00, 0x00,
0x5b, 0x01, 0x60, 0x00, 0x00, 0xd8, 0x1e, 0x36, 0xc8, 0x21, 0x03, 0x39,
0x4c, 0x20, 0xc7, 0x16, 0x5b, 0x11, 0x60, 0x00, 0x00, 0xd8, 0x1e, 0x4f,
0xc8, 0x31, 0x05, 0x39, 0x50, 0x20, 0x47, 0x16, 0x5b, 0x21, 0x60, 0x00,
0x00, 0xd8, 0x1e, 0x38, 0xc8, 0x41, 0x03, 0x39, 0x54, 0x20, 0xc7, 0x15,
0x5b, 0x31, 0x60, 0x00, 0x00, 0xd8, 0x1e, 0x4d, 0xc8, 0x11, 0x05, 0x39,
0x58, 0x20, 0x47, 0x15, 0x01, 0x00, 0x60, 0x00, 0xe8, 0x32, 0x00, 0x4c,
0xc0, 0x06, 0x69, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x10, 0x60, 0x00,
0xe8, 0x32, 0xc0, 0x45, 0xe0, 0x09, 0x69, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x20, 0x60, 0x00, 0xe8, 0x32, 0xc0, 0x4b, 0x00, 0x07, 0x69, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x30, 0x60, 0x00, 0xe8, 0x32, 0x00, 0x46,
0xa0, 0x09, 0x69, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x60, 0x00,
0xe8, 0x3a, 0xe0, 0x23, 0x00, 0x0c, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x10, 0x60, 0x00, 0xe8, 0x3a, 0x00, 0x24, 0xc0, 0x05, 0x40, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x20, 0x60, 0x00, 0xe8, 0x3a, 0x00, 0x2d,
0xc0, 0x0b, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x30, 0x60, 0x00,
0xe8, 0x3a, 0x20, 0x2d, 0x00, 0x06, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00,
0x33, 0x00, 0x80, 0x0c, 0x70, 0xf0, 0x01, 0x00, 0x42, 0x0e, 0x00, 0x00,
0x02, 0x5e, 0x02, 0x04, 0x33, 0x20, 0x80, 0x0c, 0x70, 0x80, 0x06, 0x00,
0xa2, 0x02, 0x00, 0x00, 0x02, 0x5e, 0x02, 0x04, 0x24, 0x00, 0xa0, 0x00,
0x00, 0x0e, 0x00, 0x20, 0xb0, 0x00, 0x00, 0x00, 0xb0, 0x00, 0x00, 0x00,
0x09, 0x00, 0x00, 0x00, 0x2c, 0x0a, 0xc4, 0x20, 0x20, 0x01, 0x00, 0x1e,
0x02, 0x00, 0x02, 0x00, 0x09, 0x00, 0x80, 0x00, 0x28, 0x0a, 0xa0, 0x2c,
0xa0, 0x01, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00, 0x09, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x20, 0x24, 0x40, 0x0f, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00,
0x40, 0x00, 0x00, 0x00, 0x2c, 0x0a, 0xe0, 0x2c, 0xc4, 0x00, 0x00, 0x0a,
0x2c, 0x01, 0x00, 0x00, 0x40, 0x96, 0x6d, 0x20, 0x07, 0x65, 0x65, 0x09,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x20, 0x24, 0x20, 0x04, 0x8d, 0x0a,
0x30, 0x01, 0x00, 0x00, 0x31, 0x00, 0x00, 0x0a, 0x0c, 0x02, 0x00, 0x21,
0xe0, 0x0c, 0x00, 0x06, 0x00, 0x08, 0x11, 0x02, 0x01, 0x16, 0x01, 0x20,
0x00, 0x63, 0x08, 0x00, 0x01, 0x20, 0x80, 0x00, 0xe8, 0x3a, 0x60, 0x24,
0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x00, 0x80, 0x0c,
0x70, 0x30, 0x06, 0x00, 0xa2, 0x0c, 0x00, 0x00, 0x02, 0x5e, 0x02, 0x04,
0x33, 0x20, 0x80, 0x0c, 0x70, 0x30, 0x02, 0x00, 0x22, 0x04, 0x00, 0x00,
0x02, 0x5e, 0x02, 0x04, 0x25, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x20,
0x00, 0x00, 0x00, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x25, 0x00, 0xa0, 0x00,
0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x0e, 0x10, 0x00, 0x00, 0x00,
0x01, 0x4d, 0x00, 0x20, 0x07, 0x7f, 0x05, 0x00, 0x31, 0x00, 0x60, 0x07,
0x04, 0x02, 0x00, 0x20, 0xe0, 0x0f, 0x00, 0x06, 0x10, 0x00, 0x00, 0x82,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x83,
0x00, 0x00, 0x00, 0x03, 0x7f, 0x00, 0xff, 0x1f, 0x00, 0x00, 0xe0, 0x0f,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xc0, 0xff, 0x83, 0x00, 0x00, 0x00, 0x03, 0x7f, 0x00, 0xff, 0x1f,
0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x83, 0x00, 0x00, 0x00, 0x03,
0x7f, 0x00, 0xff, 0x1f, 0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x83,
0x00, 0x00, 0x00, 0x03, 0x7f, 0x00, 0xff, 0x1f, 0x00, 0x00, 0xe0, 0x0f,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
0xc0, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x01, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00,
0x00, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x14, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x2b, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x30, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00,
0x03, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x50, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00,
0x03, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x64, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00,
0x03, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00,
0x44, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x06, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x80, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00,
0x8c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00,
0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c,
0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x5f, 0x66, 0x69, 0x63, 0x74, 0x5f, 0x00, 0x00, 0x44, 0x41, 0x54, 0x41,
0x5f, 0x54, 0x59, 0x50, 0x45, 0x2a, 0x3b, 0x38, 0x00, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00,
0x50, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c,
0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x65, 0x78, 0x00, 0x00, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50,
0x45, 0x2a, 0x3b, 0x38, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x5f, 0x5f, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x00, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x65, 0x79, 0x00, 0x00,
0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x2a, 0x3b, 0x38,
0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x1a, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x67, 0x6c,
0x6f, 0x62, 0x61, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x68, 0x7a, 0x00, 0x00, 0x44, 0x41, 0x54, 0x41,
0x5f, 0x54, 0x59, 0x50, 0x45, 0x2a, 0x3b, 0x38, 0x00, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00,
0x48, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74,
0x65, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x74, 0x00, 0x00, 0x00, 0x69, 0x6e, 0x74, 0x3b, 0x34, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00,
0x48, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74,
0x65, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x6e, 0x78, 0x00, 0x00, 0x69, 0x6e, 0x74, 0x3b, 0x34, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00,
0x48, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74,
0x65, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x6e, 0x79, 0x00, 0x00, 0x69, 0x6e, 0x74, 0x3b, 0x34, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0xc8, 0xd4, 0x55, 0x06,
0x6a, 0x4e, 0x57, 0xfe, 0x19, 0xd2, 0x90, 0x39, 0x10, 0x00, 0x00, 0x00,
0xa4, 0x05, 0x00, 0x00, 0xc0, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x20, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x00, 0x10, 0x04, 0x00, 0x00,
0x66, 0x64, 0x74, 0x64, 0x5f, 0x6b, 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x32,
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x60, 0x00, 0x0c, 0x02, 0xa0, 0x20,
0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x80, 0x00, 0x00,
0x04, 0x00, 0x00, 0x30, 0x00, 0x10, 0x00, 0x16, 0xc0, 0x04, 0xc0, 0x04,
0x41, 0x00, 0x00, 0x00, 0x2c, 0x0a, 0xc0, 0x2f, 0x28, 0x01, 0x00, 0x0a,
0xa4, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x2c, 0x0a, 0xc0, 0x20,
0x2c, 0x01, 0x00, 0x0a, 0xb8, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x4c, 0x16, 0xc4, 0x20, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x2f, 0xc0, 0x0f, 0x00, 0x12,
0x40, 0x00, 0xb1, 0x00, 0x40, 0x00, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x21,
0xc0, 0x0f, 0x00, 0x12, 0x20, 0x00, 0xb1, 0x00, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0xc0, 0x21, 0xc0, 0x00, 0x00, 0x12, 0x80, 0x00, 0xb1, 0x00,
0x40, 0x00, 0x80, 0x00, 0x28, 0x0a, 0x00, 0x2f, 0xc0, 0x00, 0x00, 0x12,
0x60, 0x00, 0xb1, 0x00, 0x40, 0x20, 0x80, 0x03, 0x28, 0x0a, 0x40, 0x2f,
0x80, 0x0f, 0x8d, 0x0a, 0xe0, 0x00, 0x00, 0x00, 0x40, 0x96, 0x01, 0x20,
0x07, 0x0c, 0x0a, 0x07, 0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x00, 0x22,
0xc0, 0x01, 0x8d, 0x0a, 0xe4, 0x00, 0x00, 0x00, 0x40, 0x96, 0x2d, 0x20,
0x07, 0x76, 0x78, 0x07, 0x10, 0x20, 0x80, 0x05, 0x22, 0x0a, 0x00, 0x20,
0x40, 0x0f, 0x8d, 0x0a, 0x1c, 0x01, 0x00, 0x00, 0x10, 0x16, 0x7b, 0x25,
0x07, 0x00, 0x0c, 0x08, 0x02, 0x20, 0x81, 0x00, 0x48, 0x12, 0x00, 0x24,
0xc4, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x00, 0x10, 0x20, 0x81, 0x05,
0x22, 0x0a, 0x00, 0x20, 0x00, 0x02, 0x8d, 0x0a, 0x18, 0x01, 0x00, 0x00,
0x10, 0x19, 0x77, 0x25, 0x07, 0x00, 0x76, 0x08, 0x02, 0x20, 0x81, 0x00,
0x4a, 0x12, 0xe0, 0x2c, 0xc4, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x00,
0x10, 0x00, 0x81, 0x03, 0x20, 0x0a, 0x00, 0x20, 0x80, 0x01, 0x8d, 0x1e,
0x00, 0x00, 0x00, 0x00, 0x05, 0x20, 0x80, 0x02, 0x40, 0x12, 0x00, 0x20,
0x00, 0x04, 0xb1, 0x12, 0xe0, 0x0c, 0xb1, 0x00, 0x22, 0x00, 0xa1, 0x00,
0x00, 0x0e, 0x00, 0x20, 0xb8, 0x02, 0x00, 0x00, 0xb8, 0x02, 0x00, 0x00,
0x41, 0x96, 0x79, 0x20, 0x07, 0x74, 0x76, 0x08, 0x41, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x40, 0x22, 0x00, 0x02, 0x8d, 0x0a, 0x1c, 0x01, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0xcc, 0x56, 0xc8, 0x2f, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xe0, 0xbf, 0x40, 0x96, 0x01, 0x20, 0xe7, 0x74, 0x74, 0x0c,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x22, 0x40, 0x02, 0x8d, 0x0a,
0x40, 0x0f, 0x8d, 0x00, 0x01, 0x00, 0x60, 0x00, 0xc8, 0x32, 0x40, 0x24,
0xc8, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x10, 0x60, 0x00,
0xc8, 0x32, 0x80, 0x24, 0xc8, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x20, 0x60, 0x00, 0xc8, 0x32, 0xc0, 0x24, 0xc8, 0x0f, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x2e,
0x80, 0x0e, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00, 0x09, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x40, 0x22, 0x40, 0x02, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00,
0x01, 0x30, 0x60, 0x00, 0xc8, 0x32, 0x00, 0x25, 0xc8, 0x0f, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x40, 0x96, 0x01, 0x20, 0x07, 0x72, 0x74, 0x09,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x22, 0x40, 0x02, 0x8d, 0x0a,
0x20, 0x01, 0x00, 0x00, 0x40, 0x96, 0x2d, 0x20, 0x07, 0x74, 0x74, 0x09,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x22, 0x40, 0x02, 0x8d, 0x0a,
0x24, 0x01, 0x00, 0x00, 0x31, 0x00, 0x80, 0x0c, 0x68, 0x02, 0x00, 0x2e,
0x40, 0x0e, 0x00, 0x06, 0x00, 0x5e, 0x20, 0x04, 0x31, 0x20, 0x80, 0x0c,
0x68, 0x02, 0xc0, 0x22, 0x80, 0x02, 0x00, 0x06, 0x00, 0x5e, 0x20, 0x04,
0x40, 0x00, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x2e, 0x80, 0x0e, 0x8d, 0x1e,
0xfc, 0xff, 0xfc, 0xff, 0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x22,
0x40, 0x02, 0x8d, 0x1e, 0xfc, 0xff, 0xfc, 0xff, 0x31, 0x00, 0x80, 0x0c,
0x68, 0x02, 0x80, 0x2d, 0x80, 0x0e, 0x00, 0x06, 0x02, 0x5c, 0x40, 0x04,
0x31, 0x20, 0x80, 0x0c, 0x68, 0x02, 0x00, 0x23, 0x40, 0x02, 0x00, 0x06,
0x02, 0x5c, 0x40, 0x04, 0x01, 0x00, 0x60, 0x00, 0xc8, 0x3a, 0xc0, 0x25,
0x00, 0x0e, 0x8d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x10, 0x60, 0x00,
0xc8, 0x3a, 0x20, 0x2b, 0x20, 0x0e, 0x8d, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x20, 0x60, 0x00, 0xc8, 0x3a, 0x00, 0x26, 0xc0, 0x02, 0x8d, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x30, 0x60, 0x00, 0xc8, 0x3a, 0xe0, 0x2a,
0xe0, 0x02, 0x8d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x56, 0x02, 0x20,
0xf7, 0x6a, 0x6e, 0x6c, 0x40, 0x20, 0x80, 0x00, 0xe8, 0x3a, 0x80, 0x23,
0x40, 0x03, 0x8d, 0x3a, 0x00, 0x43, 0x8d, 0x00, 0x01, 0x00, 0x60, 0x00,
0xc8, 0x3a, 0x20, 0x2c, 0x40, 0x0d, 0x8d, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x10, 0x60, 0x00, 0xc8, 0x3a, 0xe0, 0x2b, 0x60, 0x0d, 0x8d, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x20, 0x60, 0x00, 0xc8, 0x3a, 0xa0, 0x2b,
0x80, 0x03, 0x8d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x30, 0x60, 0x00,
0xc8, 0x3a, 0x60, 0x2b, 0xa0, 0x03, 0x8d, 0x00, 0x00, 0x00, 0x00, 0x00,
0x5b, 0x01, 0x60, 0x00, 0x00, 0xd8, 0x1e, 0x32, 0xc8, 0xe1, 0x02, 0x39,
0x44, 0x20, 0x47, 0x18, 0x5b, 0x11, 0x60, 0x00, 0x00, 0xd8, 0x1e, 0x55,
0xc8, 0x91, 0x05, 0x39, 0x48, 0x20, 0xc7, 0x17, 0x5b, 0x21, 0x60, 0x00,
0x00, 0xd8, 0x1e, 0x34, 0xc8, 0x01, 0x03, 0x39, 0x4c, 0x20, 0x47, 0x17,
0x5b, 0x31, 0x60, 0x00, 0x00, 0xd8, 0x1e, 0x53, 0xc8, 0x71, 0x05, 0x39,
0x50, 0x20, 0xc7, 0x16, 0x01, 0x00, 0x60, 0x00, 0xe8, 0x32, 0xa0, 0x4c,
0x40, 0x06, 0x69, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x10, 0x60, 0x00,
0xe8, 0x32, 0x40, 0x45, 0xa0, 0x0a, 0x69, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x20, 0x60, 0x00, 0xe8, 0x32, 0x60, 0x4c, 0x80, 0x06, 0x69, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x30, 0x60, 0x00, 0xe8, 0x32, 0x80, 0x45,
0x60, 0x0a, 0x69, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x60, 0x00,
0xe8, 0x3a, 0xc0, 0x23, 0xa0, 0x0c, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x10, 0x60, 0x00, 0xe8, 0x3a, 0xe0, 0x23, 0x40, 0x05, 0x40, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x20, 0x60, 0x00, 0xe8, 0x3a, 0x00, 0x2d,
0x60, 0x0c, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x30, 0x60, 0x00,
0xe8, 0x3a, 0x20, 0x2d, 0x80, 0x05, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00,
0x33, 0x00, 0x80, 0x0c, 0x70, 0xe0, 0x01, 0x00, 0x42, 0x0e, 0x00, 0x00,
0x00, 0x5e, 0x02, 0x04, 0x33, 0x20, 0x80, 0x0c, 0x70, 0x80, 0x06, 0x00,
0x82, 0x02, 0x00, 0x00, 0x00, 0x5e, 0x02, 0x04, 0x25, 0x00, 0xa0, 0x00,
0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x0e, 0x10, 0x00, 0x00, 0x00,
0x01, 0x4d, 0x00, 0x20, 0x07, 0x7f, 0x05, 0x00, 0x31, 0x00, 0x60, 0x07,
0x04, 0x02, 0x00, 0x20, 0xe0, 0x0f, 0x00, 0x06, 0x10, 0x00, 0x00, 0x82,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xc3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x03, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x83, 0x00, 0x00, 0x00, 0x03,
0x7f, 0x00, 0xff, 0x1f, 0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x83,
0x00, 0x00, 0x00, 0x03, 0x7f, 0x00, 0xff, 0x1f, 0x00, 0x00, 0xe0, 0x0f,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xc0, 0xff, 0x83, 0x00, 0x00, 0x00, 0x03, 0x7f, 0x00, 0xff, 0x1f,
0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
0x80, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xc0, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00,
0xc0, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x14, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x2b, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x30, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x2a, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x48, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00,
0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x20, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00,
0x24, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00,
0x24, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
0x30, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
0x38, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x60, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00,
0x8c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00,
0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c,
0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x65, 0x78, 0x00, 0x00, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50,
0x45, 0x2a, 0x3b, 0x38, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x5f, 0x5f, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x00, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x65, 0x79, 0x00, 0x00,
0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x2a, 0x3b, 0x38,
0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x1a, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x67, 0x6c,
0x6f, 0x62, 0x61, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x68, 0x7a, 0x00, 0x00, 0x44, 0x41, 0x54, 0x41,
0x5f, 0x54, 0x59, 0x50, 0x45, 0x2a, 0x3b, 0x38, 0x00, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00,
0x48, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74,
0x65, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x6e, 0x78, 0x00, 0x00, 0x69, 0x6e, 0x74, 0x3b, 0x34, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00,
0x48, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74,
0x65, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x6e, 0x79, 0x00, 0x00, 0x69, 0x6e, 0x74, 0x3b, 0x34, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0xf7, 0xc2, 0xce, 0xcf,
0x6a, 0x4e, 0x57, 0xfe, 0x19, 0xd2, 0x90, 0x39, 0x10, 0x00, 0x00, 0x00,
0xcc, 0x05, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x20, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x00, 0x70, 0x05, 0x00, 0x00,
0x66, 0x64, 0x74, 0x64, 0x5f, 0x6b, 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x33,
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x60, 0x00, 0x0c, 0x02, 0xa0, 0x20,
0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x80, 0x00, 0x00,
0x04, 0x00, 0x00, 0x30, 0x00, 0x10, 0x00, 0x16, 0xc0, 0x04, 0xc0, 0x04,
0x41, 0x80, 0x55, 0x20, 0x00, 0x7e, 0x09, 0x05, 0x41, 0x00, 0x00, 0x00,
0x2c, 0x0a, 0xc0, 0x20, 0x30, 0x01, 0x00, 0x0a, 0xb8, 0x00, 0x00, 0x00,
0x40, 0x00, 0x20, 0x00, 0x2c, 0x0a, 0xd0, 0x20, 0x18, 0x01, 0x45, 0x1e,
0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x4c, 0x16, 0xc4, 0x2f,
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x80, 0x2f, 0xc0, 0x0f, 0x00, 0x12, 0x40, 0x00, 0xb1, 0x00,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0xc0, 0x21, 0xc0, 0x00, 0x00, 0x12,
0x80, 0x00, 0xb1, 0x00, 0x40, 0x00, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x21,
0xc0, 0x0f, 0x00, 0x12, 0x20, 0x00, 0xb1, 0x00, 0x40, 0x00, 0x80, 0x00,
0x28, 0x0a, 0x00, 0x2f, 0xc0, 0x00, 0x00, 0x12, 0x60, 0x00, 0xb1, 0x00,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x2f, 0x80, 0x0f, 0x8d, 0x0a,
0xe0, 0x00, 0x00, 0x00, 0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x00, 0x22,
0xc0, 0x01, 0x8d, 0x0a, 0xe4, 0x00, 0x00, 0x00, 0x40, 0x96, 0x01, 0x20,
0x07, 0x0c, 0x0a, 0x07, 0x40, 0x96, 0x2d, 0x20, 0x07, 0x76, 0x78, 0x07,
0x10, 0x20, 0x80, 0x05, 0x22, 0x0a, 0x00, 0x20, 0x40, 0x0f, 0x8d, 0x0a,
0xd4, 0x00, 0x00, 0x00, 0x10, 0x20, 0x80, 0x05, 0x20, 0x0a, 0x00, 0x20,
0x00, 0x02, 0x8d, 0x0a, 0xd0, 0x00, 0x00, 0x00, 0x10, 0x16, 0x73, 0x25,
0x07, 0x00, 0x0c, 0x06, 0x02, 0x20, 0x81, 0x00, 0x4a, 0x12, 0xc0, 0x25,
0xc4, 0x0f, 0x00, 0x16, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x81, 0x00,
0x48, 0x12, 0x20, 0x2b, 0xc4, 0x0f, 0x00, 0x16, 0x00, 0x00, 0x00, 0x00,
0x10, 0x19, 0x6f, 0x25, 0x07, 0x00, 0x76, 0x06, 0x05, 0x20, 0x80, 0x02,
0x40, 0x12, 0x00, 0x20, 0x20, 0x0b, 0xb1, 0x12, 0xc0, 0x05, 0xb1, 0x00,
0x22, 0x00, 0xa1, 0x00, 0x00, 0x0e, 0x00, 0x20, 0x20, 0x04, 0x00, 0x00,
0x20, 0x04, 0x00, 0x00, 0x41, 0x96, 0x79, 0x20, 0x07, 0x74, 0x76, 0x08,
0x40, 0x00, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x2d, 0x80, 0x01, 0x8d, 0x1e,
0x01, 0x00, 0x01, 0x00, 0x41, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x22,
0x00, 0x02, 0x8d, 0x0a, 0x1c, 0x01, 0x00, 0x00, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x80, 0x23, 0x40, 0x0f, 0x8d, 0x1e, 0x01, 0x00, 0x01, 0x00,
0x40, 0x00, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x2c, 0xc0, 0x0e, 0x8d, 0x1e,
0x01, 0x00, 0x01, 0x00, 0x40, 0x96, 0x01, 0x20, 0xe7, 0x6a, 0x74, 0x6a,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x24, 0x00, 0x02, 0x8d, 0x1e,
0x01, 0x00, 0x01, 0x00, 0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x23,
0x40, 0x02, 0x8d, 0x0a, 0x80, 0x03, 0x8d, 0x00, 0x41, 0x96, 0x79, 0x20,
0x07, 0x62, 0x62, 0x08, 0x09, 0x00, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x2d,
0x40, 0x0d, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00, 0x41, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x80, 0x24, 0x80, 0x04, 0x8d, 0x0a, 0x1c, 0x01, 0x00, 0x00,
0x09, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x23, 0x80, 0x03, 0x8d, 0x1e,
0x02, 0x00, 0x02, 0x00, 0x40, 0x96, 0x01, 0x20, 0xe7, 0x62, 0x62, 0x0c,
0x40, 0x96, 0x01, 0x20, 0x07, 0x6a, 0x6a, 0x09, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x80, 0x24, 0x80, 0x04, 0x8d, 0x0a, 0x40, 0x0f, 0x8d, 0x00,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x23, 0x80, 0x03, 0x8d, 0x0a,
0x20, 0x01, 0x00, 0x00, 0x40, 0x96, 0x01, 0x20, 0xe7, 0x72, 0x74, 0x0c,
0x09, 0x00, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x2c, 0x40, 0x0c, 0x8d, 0x1e,
0x02, 0x00, 0x02, 0x00, 0x40, 0x00, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x2d,
0x40, 0x0d, 0x8d, 0x1e, 0xfc, 0xff, 0xfc, 0xff, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x80, 0x22, 0x40, 0x02, 0x8d, 0x0a, 0x40, 0x0f, 0x8d, 0x00,
0x09, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x24, 0x80, 0x04, 0x8d, 0x1e,
0x02, 0x00, 0x02, 0x00, 0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x23,
0x80, 0x03, 0x8d, 0x1e, 0xfc, 0xff, 0xfc, 0xff, 0x31, 0x00, 0x80, 0x0c,
0x68, 0x02, 0xc0, 0x2c, 0x40, 0x0d, 0x00, 0x06, 0x00, 0x5c, 0x40, 0x04,
0x09, 0x00, 0x80, 0x00, 0x28, 0x0a, 0x00, 0x2e, 0x40, 0x0e, 0x8d, 0x1e,
0x02, 0x00, 0x02, 0x00, 0x40, 0x96, 0x2d, 0x20, 0x07, 0x62, 0x62, 0x09,
0x31, 0x20, 0x80, 0x0c, 0x68, 0x02, 0xc0, 0x23, 0x80, 0x03, 0x00, 0x06,
0x00, 0x5c, 0x40, 0x04, 0x09, 0x20, 0x80, 0x00, 0x28, 0x0a, 0xc0, 0x22,
0x80, 0x02, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x80, 0x24, 0x80, 0x04, 0x8d, 0x0a, 0x24, 0x01, 0x00, 0x00,
0x31, 0x00, 0x80, 0x0c, 0x68, 0x02, 0x00, 0x2c, 0x40, 0x0c, 0x00, 0x06,
0x01, 0x5e, 0x20, 0x04, 0x40, 0x96, 0x2d, 0x20, 0x07, 0x5e, 0x70, 0x09,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x00, 0x25, 0xc0, 0x02, 0x8d, 0x0a,
0x24, 0x01, 0x00, 0x00, 0x31, 0x20, 0x80, 0x0c, 0x68, 0x02, 0xc0, 0x24,
0x80, 0x04, 0x00, 0x06, 0x01, 0x5e, 0x20, 0x04, 0x40, 0x96, 0x5d, 0x20,
0x07, 0x6e, 0x70, 0x09, 0x31, 0x00, 0x80, 0x0c, 0x68, 0x02, 0x80, 0x2b,
0xc0, 0x0b, 0x00, 0x06, 0x01, 0x5e, 0x20, 0x04, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x00, 0x23, 0xc0, 0x02, 0x8d, 0x0a, 0x28, 0x01, 0x00, 0x00,
0x31, 0x20, 0x80, 0x0c, 0x68, 0x02, 0x40, 0x25, 0x00, 0x05, 0x00, 0x06,
0x01, 0x5e, 0x20, 0x04, 0x31, 0x00, 0x80, 0x0c, 0x68, 0x02, 0x80, 0x2d,
0xc0, 0x0d, 0x00, 0x06, 0x02, 0x5e, 0x20, 0x04, 0x01, 0x00, 0x00, 0x00,
0xcc, 0x56, 0xc8, 0x2f, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0xe6, 0xbf,
0x31, 0x20, 0x80, 0x0c, 0x68, 0x02, 0x40, 0x23, 0x00, 0x03, 0x00, 0x06,
0x02, 0x5e, 0x20, 0x04, 0x01, 0x00, 0x60, 0x00, 0xc8, 0x32, 0x00, 0x26,
0xc8, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x10, 0x60, 0x00,
0xc8, 0x32, 0x40, 0x26, 0xc8, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x20, 0x60, 0x00, 0xc8, 0x32, 0x80, 0x26, 0xc8, 0x0f, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x30, 0x60, 0x00, 0xc8, 0x32, 0xc0, 0x26,
0xc8, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x56, 0x02, 0x20,
0xf7, 0x64, 0x68, 0x66, 0x40, 0x20, 0x80, 0x00, 0xe8, 0x3a, 0x40, 0x24,
0x00, 0x04, 0x8d, 0x3a, 0xc0, 0x43, 0x8d, 0x00, 0x40, 0x56, 0x02, 0x20,
0xe7, 0x60, 0x64, 0x60, 0x40, 0x20, 0x80, 0x00, 0xe8, 0x3a, 0xc0, 0x24,
0x40, 0x04, 0x8d, 0x3a, 0xc0, 0x04, 0x8d, 0x00, 0x40, 0x56, 0x02, 0x20,
0xf7, 0x60, 0x60, 0x5c, 0x40, 0x20, 0x80, 0x00, 0xe8, 0x3a, 0xc0, 0x24,
0xc0, 0x04, 0x8d, 0x3a, 0x40, 0x45, 0x8d, 0x00, 0x01, 0x00, 0x60, 0x00,
0xc8, 0x3a, 0x80, 0x27, 0x80, 0x0d, 0x8d, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x10, 0x60, 0x00, 0xc8, 0x3a, 0x60, 0x29, 0xa0, 0x0d, 0x8d, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x60, 0x00, 0xc8, 0x3a, 0x60, 0x2a,
0x00, 0x0c, 0x8d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x10, 0x60, 0x00,
0xc8, 0x3a, 0x20, 0x2a, 0x20, 0x0c, 0x8d, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x20, 0x60, 0x00, 0xc8, 0x3a, 0xc0, 0x27, 0x40, 0x03, 0x8d, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x30, 0x60, 0x00, 0xc8, 0x3a, 0x20, 0x29,
0x60, 0x03, 0x8d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x20, 0x60, 0x00,
0xc8, 0x3a, 0xe0, 0x29, 0xc0, 0x04, 0x8d, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x30, 0x60, 0x00, 0xc8, 0x3a, 0xa0, 0x29, 0xe0, 0x04, 0x8d, 0x00,
0x00, 0x00, 0x00, 0x00, 0x5b, 0x01, 0x60, 0x00, 0x00, 0xd8, 0x1e, 0x40,
0xc8, 0xc1, 0x03, 0x39, 0x60, 0x20, 0xc7, 0x14, 0x5b, 0x11, 0x60, 0x00,
0x00, 0xd8, 0x1e, 0x47, 0xc8, 0xb1, 0x04, 0x39, 0x64, 0x20, 0x47, 0x14,
0x5b, 0x21, 0x60, 0x00, 0x00, 0xd8, 0x1e, 0x42, 0xc8, 0xe1, 0x03, 0x39,
0x68, 0x20, 0xc7, 0x13, 0x5b, 0x31, 0x60, 0x00, 0x00, 0xd8, 0x1e, 0x45,
0xc8, 0x91, 0x04, 0x39, 0x6c, 0x20, 0x47, 0x13, 0x01, 0x00, 0x60, 0x00,
0xe8, 0x32, 0xe0, 0x4a, 0x00, 0x08, 0x69, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x10, 0x60, 0x00, 0xe8, 0x32, 0x00, 0x47, 0xe0, 0x08, 0x69, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x20, 0x60, 0x00, 0xe8, 0x32, 0xa0, 0x4a,
0x40, 0x08, 0x69, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x30, 0x60, 0x00,
0xe8, 0x32, 0x40, 0x47, 0xa0, 0x08, 0x69, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x00, 0x60, 0x00, 0xe8, 0x3a, 0x80, 0x25, 0xe0, 0x0a, 0x40, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x10, 0x60, 0x00, 0xe8, 0x3a, 0xa0, 0x25,
0x00, 0x07, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x20, 0x60, 0x00,
0xe8, 0x3a, 0x40, 0x2b, 0xa0, 0x0a, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x30, 0x60, 0x00, 0xe8, 0x3a, 0x60, 0x2b, 0x40, 0x07, 0x40, 0x00,
0x00, 0x00, 0x00, 0x00, 0x33, 0x00, 0x80, 0x0c, 0x70, 0xc0, 0x02, 0x00,
0xc2, 0x0d, 0x00, 0x00, 0x02, 0x5e, 0x02, 0x04, 0x33, 0x20, 0x80, 0x0c,
0x70, 0xa0, 0x05, 0x00, 0x02, 0x03, 0x00, 0x00, 0x02, 0x5e, 0x02, 0x04,
0x25, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x0e,
0x10, 0x00, 0x00, 0x00, 0x01, 0x4d, 0x00, 0x20, 0x07, 0x7f, 0x05, 0x00,
0x31, 0x00, 0x60, 0x07, 0x04, 0x02, 0x00, 0x20, 0xe0, 0x0f, 0x00, 0x06,
0x10, 0x00, 0x00, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc3, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
0x00, 0xc0, 0xff, 0x83, 0x00, 0x00, 0x00, 0x03, 0x7f, 0x00, 0xff, 0x1f,
0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x83, 0x00, 0x00, 0x00, 0x03,
0x7f, 0x00, 0xff, 0x1f, 0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x83,
0x00, 0x00, 0x00, 0x03, 0x7f, 0x00, 0xff, 0x1f, 0x00, 0x00, 0xe0, 0x0f,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
0x13, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x15, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00,
0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x20, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x2b, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x40, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x2a, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x4c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00,
0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x20, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00,
0x24, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00,
0x24, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
0x30, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
0x38, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x60, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00,
0x8c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00,
0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c,
0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x65, 0x78, 0x00, 0x00, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50,
0x45, 0x2a, 0x3b, 0x38, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x5f, 0x5f, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x00, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x65, 0x79, 0x00, 0x00,
0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x2a, 0x3b, 0x38,
0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x1a, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x67, 0x6c,
0x6f, 0x62, 0x61, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x68, 0x7a, 0x00, 0x00, 0x44, 0x41, 0x54, 0x41,
0x5f, 0x54, 0x59, 0x50, 0x45, 0x2a, 0x3b, 0x38, 0x00, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00,
0x48, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74,
0x65, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x6e, 0x78, 0x00, 0x00, 0x69, 0x6e, 0x74, 0x3b, 0x34, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00,
0x48, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74,
0x65, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x6e, 0x79, 0x00, 0x00, 0x69, 0x6e, 0x74, 0x3b, 0x34, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00
};
unsigned int fdtd2d_Gen9core_gen_len = 9944;

View File

@@ -0,0 +1,410 @@
/**
* gramschmidt.c: This file is part of the PolyBench/GPU 1.0 test suite.
*
*
* Contact: Scott Grauer-Gray <sgrauerg@gmail.com>
* Will Killian <killian@udel.edu>
* Louis-Noel Pouchet <pouchet@cse.ohio-state.edu>
* Web address: http://www.cse.ohio-state.edu/~pouchet/software/polybench/GPU
*/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <sys/time.h>
#include <math.h>
#ifdef __APPLE__
#include <OpenCL/opencl.h>
#else
#include "../../CL/cl.h"
#endif
#define POLYBENCH_TIME 1
//select the OpenCL device to use (can be GPU, CPU, or Accelerator such as Intel Xeon Phi)
#define OPENCL_DEVICE_SELECTION CL_DEVICE_TYPE_GPU
#include "gramschmidt.h"
#include "../../polybench.h"
//define the error threshold for the results "not matching"
#define PERCENT_DIFF_ERROR_THRESHOLD 0.05
#define MAX_SOURCE_SIZE (0x100000)
#if defined(cl_khr_fp64) // Khronos extension available?
#pragma OPENCL EXTENSION cl_khr_fp64 : enable
#elif defined(cl_amd_fp64) // AMD extension available?
#pragma OPENCL EXTENSION cl_amd_fp64 : enable
#endif
namespace ns_gramschmidt
{
#include "../../polybenchUtilFuncts.h"
#include "gramschmidt_kernel.h"
char str_temp[1024];
cl_platform_id platform_id;
cl_device_id device_id;
cl_uint num_devices;
cl_uint num_platforms;
cl_int errcode;
cl_context clGPUContext;
cl_kernel clKernel1;
cl_kernel clKernel2;
cl_kernel clKernel3;
cl_command_queue clCommandQue;
cl_program clProgram;
cl_mem a_mem_obj;
cl_mem r_mem_obj;
cl_mem q_mem_obj;
FILE *fp;
char *source_str;
size_t source_size;
#define RUN_ON_CPU
void compareResults(int ni, int nj, DATA_TYPE POLYBENCH_2D(A,NI,NJ,ni,nj), DATA_TYPE POLYBENCH_2D(A_outputFromGpu,NI,NJ,ni,nj))
{
int i, j, fail;
fail = 0;
for (i=0; i < ni; i++)
{
for (j=0; j < nj; j++)
{
if (percentDiff(A[i][j], A_outputFromGpu[i][j]) > PERCENT_DIFF_ERROR_THRESHOLD)
{
fail++;
}
}
}
// Print results
printf("Non-Matching CPU-GPU Outputs Beyond Error Threshold of %4.2f Percent: %d\n", PERCENT_DIFF_ERROR_THRESHOLD, fail);
}
void read_cl_file()
{
// Load the kernel source code into the array source_str
// fp = fopen("gramschmidt.cl", "r");
// if (!fp) {
// fprintf(stderr, "Failed to load kernel.\n");
// exit(1);
// }
// source_str = (char*)malloc(MAX_SOURCE_SIZE);
// source_size = fread( source_str, 1, MAX_SOURCE_SIZE, fp);
// fclose( fp );
}
/* Array initialization. */
void init_array(int ni, int nj,
DATA_TYPE POLYBENCH_2D(A,NI,NJ,ni,nj),
DATA_TYPE POLYBENCH_2D(R,NJ,NJ,nj,nj),
DATA_TYPE POLYBENCH_2D(Q,NI,NJ,ni,nj))
{
int i, j;
for (i = 0; i < ni; i++)
{
for (j = 0; j < nj; j++)
{
A[i][j] = ((DATA_TYPE) i*j) / ni;
Q[i][j] = ((DATA_TYPE) i*(j+1)) / nj;
}
}
for (i = 0; i < nj; i++)
{
for (j = 0; j < nj; j++)
{
R[i][j] = ((DATA_TYPE) i*(j+2)) / nj;
}
}
}
void cl_initialization()
{
// Get platform and device information
errcode = clGetPlatformIDs(1, &platform_id, &num_platforms);
if(errcode == CL_SUCCESS) printf("number of platforms is %d\n",num_platforms);
else printf("Error getting platform IDs\n");
errcode = clGetPlatformInfo(platform_id,CL_PLATFORM_NAME, sizeof(str_temp), str_temp,NULL);
if(errcode == CL_SUCCESS) printf("platform name is %s\n",str_temp);
else printf("Error getting platform name\n");
errcode = clGetPlatformInfo(platform_id, CL_PLATFORM_VERSION, sizeof(str_temp), str_temp,NULL);
if(errcode == CL_SUCCESS) printf("platform version is %s\n",str_temp);
else printf("Error getting platform version\n");
errcode = clGetDeviceIDs( platform_id, OPENCL_DEVICE_SELECTION, 1, &device_id, &num_devices);
if(errcode == CL_SUCCESS) printf("number of devices is %d\n", num_devices);
else printf("Error getting device IDs\n");
errcode = clGetDeviceInfo(device_id,CL_DEVICE_NAME, sizeof(str_temp), str_temp,NULL);
if(errcode == CL_SUCCESS) printf("device name is %s\n",str_temp);
else printf("Error getting device name\n");
// Create an OpenCL context
clGPUContext = clCreateContext( NULL, 1, &device_id, NULL, NULL, &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating context\n");
//Create a command-queue
clCommandQue = clCreateCommandQueue(clGPUContext, device_id, 0, &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating command queue\n");
}
void cl_mem_init(DATA_TYPE POLYBENCH_2D(A,NI,NJ,ni,nj))
{
a_mem_obj = clCreateBuffer(clGPUContext, CL_MEM_READ_WRITE, sizeof(DATA_TYPE) * NI * NJ, NULL, &errcode);
r_mem_obj = clCreateBuffer(clGPUContext, CL_MEM_READ_WRITE, sizeof(DATA_TYPE) * NI * NJ, NULL, &errcode);
q_mem_obj = clCreateBuffer(clGPUContext, CL_MEM_READ_WRITE, sizeof(DATA_TYPE) * NI * NJ, NULL, &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating buffers\n");
errcode = clEnqueueWriteBuffer(clCommandQue, a_mem_obj, CL_TRUE, 0, sizeof(DATA_TYPE) * NI * NJ, A, 0, NULL, NULL);
if(errcode != CL_SUCCESS)printf("Error in writing buffers\n");
}
void cl_load_prog()
{
// Create a program from the kernel source
const size_t kernel_size = gramschmidt_Gen9core_gen_len;
const unsigned char* kernel_bin = gramschmidt_Gen9core_gen;
clProgram = clCreateProgramWithBinary(clGPUContext, 1, &device_id, &kernel_size, &kernel_bin, NULL, &errcode);
//clProgram = clCreateProgramWithSource(clGPUContext, 1, (const char **)&source_str, (const size_t *)&source_size, &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating program\n");
// Build the program
errcode = clBuildProgram(clProgram, 1, &device_id, NULL, NULL, NULL);
if(errcode != CL_SUCCESS) printf("Error in building program\n");
// Create the OpenCL kernel
clKernel1 = clCreateKernel(clProgram, "gramschmidt_kernel1", &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating kernel1\n");
clKernel2 = clCreateKernel(clProgram, "gramschmidt_kernel2", &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating kernel2\n");
clKernel3 = clCreateKernel(clProgram, "gramschmidt_kernel3", &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating kernel3\n");
clFinish(clCommandQue);
}
void cl_launch_kernel(int ni, int nj)
{
size_t localWorkSize[2], globalWorkSizeKernel1[2], globalWorkSizeKernel2[2], globalWorkSizeKernel3[2];
localWorkSize[0] = DIM_LOCAL_WORK_GROUP_X;
localWorkSize[1] = DIM_LOCAL_WORK_GROUP_Y;
globalWorkSizeKernel1[0] = DIM_LOCAL_WORK_GROUP_X;
globalWorkSizeKernel1[1] = DIM_LOCAL_WORK_GROUP_Y;
globalWorkSizeKernel2[0] = (size_t)ceil(((float)NJ) / ((float)DIM_LOCAL_WORK_GROUP_X)) * DIM_LOCAL_WORK_GROUP_X;
globalWorkSizeKernel2[1] = 1;
globalWorkSizeKernel3[0] = (size_t)ceil(((float)NJ) / ((float)DIM_LOCAL_WORK_GROUP_X)) * DIM_LOCAL_WORK_GROUP_X;
globalWorkSizeKernel3[1] = 1;
/* Start timer. */
polybench_start_instruments;
int k;
for (k = 0; k < _PB_NJ; k++)
{
// Set the arguments of the kernel
errcode = clSetKernelArg(clKernel1, 0, sizeof(cl_mem), (void *)&a_mem_obj);
errcode = clSetKernelArg(clKernel1, 1, sizeof(cl_mem), (void *)&r_mem_obj);
errcode |= clSetKernelArg(clKernel1, 2, sizeof(cl_mem), (void *)&q_mem_obj);
errcode |= clSetKernelArg(clKernel1, 3, sizeof(int), (void *)&k);
errcode |= clSetKernelArg(clKernel1, 4, sizeof(int), (void *)&ni);
errcode |= clSetKernelArg(clKernel1, 5, sizeof(int), (void *)&nj);
if(errcode != CL_SUCCESS) printf("Error in seting arguments1\n");
// Execute the OpenCL kernel
errcode = clEnqueueNDRangeKernel(clCommandQue, clKernel1, 1, NULL, globalWorkSizeKernel1, localWorkSize, 0, NULL, NULL);
if(errcode != CL_SUCCESS) printf("Error in launching kernel1\n");
clEnqueueBarrier(clCommandQue);
errcode = clSetKernelArg(clKernel2, 0, sizeof(cl_mem), (void *)&a_mem_obj);
errcode = clSetKernelArg(clKernel2, 1, sizeof(cl_mem), (void *)&r_mem_obj);
errcode |= clSetKernelArg(clKernel2, 2, sizeof(cl_mem), (void *)&q_mem_obj);
errcode |= clSetKernelArg(clKernel2, 3, sizeof(int), (void *)&k);
errcode |= clSetKernelArg(clKernel2, 4, sizeof(int), (void *)&ni);
errcode |= clSetKernelArg(clKernel2, 5, sizeof(int), (void *)&nj);
if(errcode != CL_SUCCESS) printf("Error in seting arguments1\n");
// Execute the OpenCL kernel
errcode = clEnqueueNDRangeKernel(clCommandQue, clKernel2, 1, NULL, globalWorkSizeKernel2, localWorkSize, 0, NULL, NULL);
if(errcode != CL_SUCCESS) printf("Error in launching kernel2\n");
clEnqueueBarrier(clCommandQue);
globalWorkSizeKernel3[0] = (size_t)ceil(((float)NJ - (float)(k+1)) / ((float)DIM_LOCAL_WORK_GROUP_X)) * DIM_LOCAL_WORK_GROUP_X;
if (globalWorkSizeKernel3[0] > 1)
{
errcode = clSetKernelArg(clKernel3, 0, sizeof(cl_mem), (void *)&a_mem_obj);
errcode = clSetKernelArg(clKernel3, 1, sizeof(cl_mem), (void *)&r_mem_obj);
errcode |= clSetKernelArg(clKernel3, 2, sizeof(cl_mem), (void *)&q_mem_obj);
errcode |= clSetKernelArg(clKernel3, 3, sizeof(int), (void *)&k);
errcode |= clSetKernelArg(clKernel3, 4, sizeof(int), (void *)&ni);
errcode |= clSetKernelArg(clKernel3, 5, sizeof(int), (void *)&nj);
if(errcode != CL_SUCCESS) printf("Error in seting arguments1\n");
// Execute the OpenCL kernel
errcode = clEnqueueNDRangeKernel(clCommandQue, clKernel3, 1, NULL, globalWorkSizeKernel3, localWorkSize, 0, NULL, NULL);
if(errcode != CL_SUCCESS) printf("Error in launching kernel3\n");
clEnqueueBarrier(clCommandQue);
}
}
clFinish(clCommandQue);
/* Stop and print timer. */
printf("GPU Time in seconds:\n");
polybench_stop_instruments;
polybench_print_instruments;
}
void cl_clean_up()
{
// Clean up
errcode = clFlush(clCommandQue);
errcode = clFinish(clCommandQue);
errcode = clReleaseKernel(clKernel1);
errcode = clReleaseKernel(clKernel2);
errcode = clReleaseKernel(clKernel3);
errcode = clReleaseProgram(clProgram);
errcode = clReleaseMemObject(a_mem_obj);
errcode = clReleaseMemObject(r_mem_obj);
errcode = clReleaseMemObject(q_mem_obj);
errcode = clReleaseCommandQueue(clCommandQue);
errcode = clReleaseContext(clGPUContext);
if(errcode != CL_SUCCESS) printf("Error in cleanup\n");
}
void gramschmidt(int ni, int nj, DATA_TYPE POLYBENCH_2D(A,NI,NJ,ni,nj), DATA_TYPE POLYBENCH_2D(R,NJ,NJ,nj,nj), DATA_TYPE POLYBENCH_2D(Q,NI,NJ,ni,nj))
{
int i,j,k;
DATA_TYPE nrm;
for (k = 0; k < _PB_NJ; k++)
{
nrm = 0;
for (i = 0; i < _PB_NI; i++)
{
nrm += A[i][k] * A[i][k];
}
R[k][k] = sqrt(nrm);
for (i = 0; i < _PB_NI; i++)
{
Q[i][k] = A[i][k] / R[k][k];
}
for (j = k + 1; j < _PB_NJ; j++)
{
R[k][j] = 0;
for (i = 0; i < _PB_NI; i++)
{
R[k][j] += Q[i][k] * A[i][j];
}
for (i = 0; i < _PB_NI; i++)
{
A[i][j] = A[i][j] - Q[i][k] * R[k][j];
}
}
}
}
/* DCE code. Must scan the entire live-out data.
Can be used also to check the correctness of the output. */
static
void print_array(int ni, int nj, DATA_TYPE POLYBENCH_2D(A,NI,NJ,ni,nj))
{
int i, j;
for (i = 0; i < ni; i++)
for (j = 0; j < nj; j++) {
fprintf (stderr, DATA_PRINTF_MODIFIER, A[i][j]);
if (i % 20 == 0) fprintf (stderr, "\n");
}
fprintf (stderr, "\n");
}
int main(int argc, char *argv[])
{
/* Retrieve problem size. */
int ni = NI;
int nj = NJ;
POLYBENCH_2D_ARRAY_DECL(A,DATA_TYPE,NI,NJ,ni,nj);
POLYBENCH_2D_ARRAY_DECL(A_outputFromGpu,DATA_TYPE,NI,NJ,ni,nj);
POLYBENCH_2D_ARRAY_DECL(R,DATA_TYPE,NJ,NJ,nj,nj);
POLYBENCH_2D_ARRAY_DECL(Q,DATA_TYPE,NI,NJ,ni,nj);
init_array(ni, nj, POLYBENCH_ARRAY(A), POLYBENCH_ARRAY(R), POLYBENCH_ARRAY(Q));
read_cl_file();
cl_initialization();
cl_mem_init(POLYBENCH_ARRAY(A));
cl_load_prog();
cl_launch_kernel(ni, nj);
errcode = clEnqueueReadBuffer(clCommandQue, a_mem_obj, CL_TRUE, 0, NI*NJ*sizeof(DATA_TYPE), POLYBENCH_ARRAY(A_outputFromGpu), 0, NULL, NULL);
if(errcode != CL_SUCCESS) printf("Error in reading GPU mem\n");
#ifdef RUN_ON_CPU
/* Start timer. */
polybench_start_instruments;
gramschmidt(ni, nj, POLYBENCH_ARRAY(A), POLYBENCH_ARRAY(R), POLYBENCH_ARRAY(Q));
/* Stop and print timer. */
printf("CPU Time in seconds:\n");
polybench_stop_instruments;
polybench_print_instruments;
compareResults(ni, nj, POLYBENCH_ARRAY(A), POLYBENCH_ARRAY(A_outputFromGpu));
#else //prevent dead code elimination
polybench_prevent_dce(print_array(ni, nj, POLYBENCH_ARRAY(A_outputFromGpu)));
#endif //RUN_ON_CPU
cl_clean_up();
POLYBENCH_FREE_ARRAY(A);
POLYBENCH_FREE_ARRAY(A_outputFromGpu);
POLYBENCH_FREE_ARRAY(R);
POLYBENCH_FREE_ARRAY(Q);
return 0;
}
}

View File

@@ -0,0 +1,68 @@
/**
* gramschmidt.cl: This file is part of the PolyBench/GPU 1.0 test suite.
*
*
* Contact: Scott Grauer-Gray <sgrauerg@gmail.com>
* Will Killian <killian@udel.edu>
* Louis-Noel Pouchet <pouchet@cse.ohio-state.edu>
* Web address: http://www.cse.ohio-state.edu/~pouchet/software/polybench/GPU
*/
#if defined(cl_khr_fp64) // Khronos extension available?
#pragma OPENCL EXTENSION cl_khr_fp64 : enable
#elif defined(cl_amd_fp64) // AMD extension available?
#pragma OPENCL EXTENSION cl_amd_fp64 : enable
#endif
typedef float DATA_TYPE;
__kernel void gramschmidt_kernel1(__global DATA_TYPE *a, __global DATA_TYPE *r, __global DATA_TYPE *q, int k, int ni, int nj)
{
int tid = get_global_id(0);
if (tid == 0)
{
DATA_TYPE nrm = 0.0;
int i;
for (i = 0; i < ni; i++)
{
nrm += a[i * nj + k] * a[i * nj + k];
}
r[k * nj + k] = sqrt(nrm);
}
}
__kernel void gramschmidt_kernel2(__global DATA_TYPE *a, __global DATA_TYPE *r, __global DATA_TYPE *q, int k, int ni, int nj)
{
int i = get_global_id(0);
if (i < ni)
{
q[i * nj + k] = a[i * nj + k] / r[k * nj + k];
}
}
__kernel void gramschmidt_kernel3(__global DATA_TYPE *a, __global DATA_TYPE *r, __global DATA_TYPE *q, int k, int ni, int nj)
{
int j = get_global_id(0) + (k+1);
if ((j < nj))
{
r[k*nj + j] = 0.0;
int i;
for (i = 0; i < ni; i++)
{
r[k*nj + j] += q[i*nj + k] * a[i*nj + j];
}
for (i = 0; i < ni; i++)
{
a[i*nj + j] -= q[i*nj + k] * r[k*nj + j];
}
}
}

View File

@@ -0,0 +1,60 @@
/**
* gramschmidt.h: This file is part of the PolyBench/GPU 1.0 test suite.
*
*
* Contact: Scott Grauer-Gray <sgrauerg@gmail.com>
* Will Killian <killian@udel.edu>
* Louis-Noel Pouchet <pouchet@cse.ohio-state.edu>
* Web address: http://www.cse.ohio-state.edu/~pouchet/software/polybench/GPU
*/
#ifndef GRAMSCHMIDT_H
# define GRAMSCHMIDT_H
/* Default to STANDARD_DATASET. */
# if !defined(MINI_DATASET) && !defined(SMALL_DATASET) && !defined(LARGE_DATASET) && !defined(EXTRALARGE_DATASET)
# define STANDARD_DATASET
# endif
/* Do not define anything if the user manually defines the size. */
# if !defined(NI) && !defined(NJ)
/* Define the possible dataset sizes. */
# ifdef MINI_DATASET
#define NI 512
#define NJ 512
# endif
# ifdef SMALL_DATASET
#define NI 1024
#define NJ 1024
# endif
# ifdef STANDARD_DATASET /* Default if unspecified. */
#define NI 2048
#define NJ 2048
# endif
# ifdef LARGE_DATASET
#define NI 4096
#define NJ 4096
# endif
# ifdef EXTRALARGE_DATASET
#define NI 8192
#define NJ 8192
# endif
# endif /* !N */
# define _PB_NI POLYBENCH_LOOP_BOUND(NI,ni)
# define _PB_NJ POLYBENCH_LOOP_BOUND(NJ,nj)
# ifndef DATA_TYPE
# define DATA_TYPE float
# define DATA_PRINTF_MODIFIER "%0.2lf "
# endif
/* Thread block dimensions */
#define DIM_LOCAL_WORK_GROUP_X 256
#define DIM_LOCAL_WORK_GROUP_Y 1
#endif /* !GRAMSCHMIDT*/

View File

@@ -0,0 +1,694 @@
unsigned char gramschmidt_Gen9core_gen[] = {
0x43, 0x54, 0x4e, 0x49, 0x39, 0x04, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x4c, 0x62, 0x5d, 0x8f, 0x30, 0x3b, 0x5a, 0xfa,
0x65, 0xba, 0x41, 0x41, 0x14, 0x00, 0x00, 0x00, 0x14, 0x06, 0x00, 0x00,
0x80, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
0xcc, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x67, 0x72, 0x61, 0x6d,
0x73, 0x63, 0x68, 0x6d, 0x69, 0x64, 0x74, 0x5f, 0x6b, 0x65, 0x72, 0x6e,
0x65, 0x6c, 0x31, 0x00, 0x01, 0x00, 0x60, 0x00, 0x0c, 0x02, 0x60, 0x20,
0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x80, 0x00, 0x00,
0x04, 0x00, 0x00, 0x30, 0x00, 0x10, 0x00, 0x16, 0xc0, 0x04, 0xc0, 0x04,
0x41, 0x80, 0x55, 0x20, 0x00, 0x7e, 0x09, 0x03, 0x40, 0x00, 0x80, 0x00,
0x28, 0x0a, 0x80, 0x20, 0xc0, 0x0f, 0x00, 0x12, 0x20, 0x00, 0xb1, 0x00,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x2f, 0xc0, 0x0f, 0x00, 0x12,
0x40, 0x00, 0xb1, 0x00, 0x10, 0x16, 0x03, 0x21, 0x0f, 0x00, 0x04, 0x07,
0x10, 0x20, 0x80, 0x01, 0x20, 0x0a, 0x00, 0x20, 0x80, 0x0f, 0x8d, 0x0a,
0xe0, 0x40, 0x00, 0x00, 0x22, 0x00, 0xa1, 0x00, 0x00, 0x0e, 0x00, 0x20,
0x78, 0x01, 0x00, 0x00, 0x78, 0x01, 0x00, 0x00, 0x10, 0x00, 0x80, 0x03,
0x26, 0x0a, 0x00, 0x20, 0x1c, 0x01, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00,
0x10, 0x20, 0x80, 0x03, 0x26, 0x0a, 0x00, 0x20, 0x1c, 0x01, 0x00, 0x1e,
0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x01, 0x00, 0x06, 0x00, 0x00, 0x34,
0x00, 0x14, 0x00, 0x0e, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0xec, 0x3e, 0xc0, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x20, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x34, 0x00, 0x14, 0x00, 0x0e,
0xc0, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2c, 0x1e, 0xc4, 0x2f,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0xec, 0x3e, 0xc0, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x41, 0x00, 0x00, 0x00, 0x2c, 0x0a, 0xc4, 0x20, 0xc4, 0x0f, 0x00, 0x0a,
0x20, 0x01, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x2c, 0x0a, 0xc4, 0x2f,
0xc4, 0x0f, 0x00, 0x1e, 0x01, 0x00, 0x01, 0x00, 0x40, 0x00, 0x00, 0x00,
0x2c, 0x0a, 0xc8, 0x2f, 0xc4, 0x00, 0x00, 0x0a, 0x18, 0x01, 0x00, 0x00,
0x10, 0x00, 0x80, 0x05, 0x24, 0x0a, 0x00, 0x20, 0xc4, 0x0f, 0x00, 0x0a,
0x1c, 0x01, 0x00, 0x00, 0x10, 0x20, 0x80, 0x05, 0x24, 0x0a, 0x00, 0x20,
0xc4, 0x0f, 0x00, 0x0a, 0x1c, 0x01, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00,
0x2c, 0x0a, 0xc8, 0x20, 0xc8, 0x0f, 0x00, 0x1e, 0x02, 0x00, 0x02, 0x00,
0x40, 0x00, 0x00, 0x00, 0x2c, 0x0a, 0x60, 0x2f, 0xc8, 0x00, 0x00, 0x0a,
0x24, 0x01, 0x00, 0x00, 0x31, 0x00, 0x00, 0x0a, 0x0c, 0x02, 0x00, 0x21,
0x60, 0x0f, 0x00, 0x06, 0x00, 0x08, 0x11, 0x02, 0x5b, 0x01, 0x40, 0x00,
0x04, 0x00, 0x02, 0x06, 0xc9, 0x61, 0x20, 0x39, 0x10, 0x24, 0x07, 0x02,
0x20, 0x00, 0x01, 0x00, 0x04, 0x00, 0x00, 0x34, 0x00, 0x14, 0x00, 0x0e,
0x60, 0xff, 0xff, 0xff, 0x41, 0x00, 0x00, 0x00, 0x2c, 0x0a, 0xcc, 0x20,
0x18, 0x01, 0x00, 0x0a, 0x20, 0x01, 0x00, 0x00, 0x38, 0x00, 0x01, 0x24,
0x00, 0x7a, 0x06, 0x00, 0x40, 0x00, 0x00, 0x00, 0x2c, 0x0a, 0xcc, 0x2f,
0xcc, 0x00, 0x00, 0x0a, 0x18, 0x01, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00,
0x2c, 0x0a, 0xd0, 0x20, 0xcc, 0x0f, 0x00, 0x1e, 0x02, 0x00, 0x02, 0x00,
0x40, 0x00, 0x00, 0x00, 0x2c, 0x0a, 0x20, 0x2f, 0xd0, 0x00, 0x00, 0x0a,
0x28, 0x01, 0x00, 0x00, 0x33, 0x00, 0x00, 0x0a, 0x14, 0xa0, 0x07, 0x00,
0x21, 0x0f, 0x00, 0x00, 0x01, 0x08, 0x03, 0x02, 0x25, 0x00, 0xa0, 0x00,
0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x0e, 0x10, 0x00, 0x00, 0x00,
0x01, 0x4d, 0x00, 0x20, 0x07, 0x7f, 0x03, 0x00, 0x31, 0x00, 0x60, 0x07,
0x04, 0x02, 0x00, 0x20, 0xe0, 0x0f, 0x00, 0x06, 0x10, 0x00, 0x00, 0x82,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xc3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x03, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x83, 0x00, 0x00, 0x00, 0x03,
0x7f, 0x00, 0xff, 0x1f, 0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x83,
0x00, 0x00, 0x00, 0x03, 0x7f, 0x00, 0xff, 0x1f, 0x00, 0x00, 0xe0, 0x0f,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xc0, 0xff, 0x83, 0x00, 0x00, 0x00, 0x03, 0x7f, 0x00, 0xff, 0x1f,
0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
0x80, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xc0, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00,
0xc0, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x14, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x2b, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x30, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x2a, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x4c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00,
0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x20, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00,
0x24, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00,
0x24, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
0x30, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
0x38, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00,
0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x17, 0x00, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x1a, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x67, 0x6c,
0x6f, 0x62, 0x61, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x61, 0x00, 0x00, 0x00, 0x44, 0x41, 0x54, 0x41,
0x5f, 0x54, 0x59, 0x50, 0x45, 0x2a, 0x3b, 0x38, 0x00, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00,
0x50, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c,
0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x72, 0x00, 0x00, 0x00, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50,
0x45, 0x2a, 0x3b, 0x38, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x5f, 0x5f, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x00, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x71, 0x00, 0x00, 0x00,
0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x2a, 0x3b, 0x38,
0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x1a, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x70, 0x72,
0x69, 0x76, 0x61, 0x74, 0x65, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x6b, 0x00, 0x00, 0x00, 0x69, 0x6e, 0x74, 0x3b,
0x34, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x1a, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x70, 0x72,
0x69, 0x76, 0x61, 0x74, 0x65, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x6e, 0x69, 0x00, 0x00, 0x69, 0x6e, 0x74, 0x3b,
0x34, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x1a, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x70, 0x72,
0x69, 0x76, 0x61, 0x74, 0x65, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x6e, 0x6a, 0x00, 0x00, 0x69, 0x6e, 0x74, 0x3b,
0x34, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0xf0, 0x40, 0x68, 0x79, 0x30, 0x3b, 0x5a, 0xfa, 0x65, 0xba, 0x41, 0x41,
0x14, 0x00, 0x00, 0x00, 0x3c, 0x06, 0x00, 0x00, 0x80, 0x02, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x00,
0xe8, 0x01, 0x00, 0x00, 0x67, 0x72, 0x61, 0x6d, 0x73, 0x63, 0x68, 0x6d,
0x69, 0x64, 0x74, 0x5f, 0x6b, 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x32, 0x00,
0x01, 0x00, 0x60, 0x00, 0x0c, 0x02, 0x60, 0x20, 0x00, 0x00, 0x20, 0x00,
0x00, 0x00, 0x00, 0x00, 0x06, 0x80, 0x00, 0x00, 0x04, 0x00, 0x00, 0x30,
0x00, 0x10, 0x00, 0x16, 0xc0, 0x04, 0xc0, 0x04, 0x41, 0x00, 0x00, 0x00,
0x2c, 0x0a, 0x80, 0x20, 0x30, 0x01, 0x00, 0x0a, 0x64, 0x00, 0x00, 0x00,
0x40, 0x00, 0x80, 0x00, 0x28, 0x0a, 0xa0, 0x20, 0x80, 0x00, 0x00, 0x12,
0x20, 0x00, 0xb1, 0x00, 0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x21,
0x80, 0x00, 0x00, 0x12, 0x40, 0x00, 0xb1, 0x00, 0x40, 0x96, 0x01, 0x20,
0x07, 0x0c, 0x05, 0x07, 0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0xc0, 0x21,
0x40, 0x01, 0x8d, 0x0a, 0xe0, 0x00, 0x00, 0x00, 0x10, 0x16, 0x7b, 0x25,
0x07, 0x00, 0x0c, 0x08, 0x10, 0x20, 0x80, 0x05, 0x20, 0x0a, 0x00, 0x20,
0xc0, 0x01, 0x8d, 0x0a, 0x1c, 0x01, 0x00, 0x00, 0x22, 0x00, 0xa1, 0x00,
0x00, 0x0e, 0x00, 0x20, 0x40, 0x01, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00,
0x41, 0x96, 0x01, 0x20, 0x07, 0x10, 0x0c, 0x09, 0x41, 0x00, 0x00, 0x00,
0x2c, 0x0a, 0x84, 0x20, 0x18, 0x01, 0x00, 0x0a, 0x20, 0x01, 0x00, 0x00,
0x41, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x22, 0xc0, 0x01, 0x8d, 0x0a,
0x20, 0x01, 0x00, 0x00, 0x40, 0x96, 0x75, 0x20, 0x07, 0x10, 0x10, 0x08,
0x40, 0x00, 0x00, 0x00, 0x2c, 0x0a, 0x88, 0x20, 0x84, 0x00, 0x00, 0x0a,
0x18, 0x01, 0x00, 0x00, 0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x22,
0x40, 0x02, 0x8d, 0x0a, 0x18, 0x01, 0x00, 0x00, 0x09, 0x00, 0x80, 0x00,
0x28, 0x0a, 0x80, 0x22, 0x00, 0x02, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00,
0x09, 0x00, 0x00, 0x00, 0x2c, 0x0a, 0x8c, 0x20, 0x88, 0x00, 0x00, 0x1e,
0x02, 0x00, 0x02, 0x00, 0x09, 0x20, 0x80, 0x00, 0x28, 0x0a, 0xc0, 0x22,
0x40, 0x02, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00, 0x40, 0x96, 0x2d, 0x20,
0x07, 0x18, 0x14, 0x09, 0x40, 0x80, 0x61, 0x20, 0x00, 0x08, 0x04, 0x09,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x23, 0xc0, 0x02, 0x8d, 0x0a,
0x24, 0x01, 0x00, 0x00, 0x40, 0x96, 0x65, 0x20, 0x07, 0x25, 0x14, 0x09,
0x31, 0x00, 0x80, 0x0c, 0x68, 0x02, 0x80, 0x23, 0x00, 0x03, 0x00, 0x06,
0x00, 0x5e, 0x20, 0x04, 0x31, 0x00, 0x00, 0x0a, 0x0c, 0x02, 0x00, 0x24,
0x00, 0x01, 0x00, 0x06, 0x01, 0x08, 0x11, 0x02, 0x31, 0x20, 0x80, 0x0c,
0x68, 0x02, 0xc0, 0x23, 0x40, 0x03, 0x00, 0x06, 0x00, 0x5e, 0x20, 0x04,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0xe0, 0x24, 0xc0, 0x02, 0x8d, 0x0a,
0x2c, 0x01, 0x00, 0x00, 0x38, 0x56, 0x02, 0x29, 0x07, 0x21, 0x1c, 0x20,
0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x38, 0x20, 0x80, 0x09, 0xe8, 0x3a, 0x60, 0x24,
0xc0, 0x03, 0x8d, 0x3a, 0x00, 0x04, 0x00, 0x00, 0x33, 0x00, 0x80, 0x0c,
0x70, 0x10, 0x02, 0x00, 0xa2, 0x04, 0x00, 0x00, 0x02, 0x5e, 0x02, 0x04,
0x33, 0x20, 0x80, 0x0c, 0x70, 0x30, 0x02, 0x00, 0xe2, 0x04, 0x00, 0x00,
0x02, 0x5e, 0x02, 0x04, 0x25, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x20,
0x00, 0x00, 0x00, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x01, 0x4d, 0x00, 0x20,
0x07, 0x7f, 0x03, 0x00, 0x31, 0x00, 0x60, 0x07, 0x04, 0x02, 0x00, 0x20,
0xe0, 0x0f, 0x00, 0x06, 0x10, 0x00, 0x00, 0x82, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc3, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
0x00, 0xc0, 0xff, 0x83, 0x00, 0x00, 0x00, 0x03, 0x7f, 0x00, 0xff, 0x1f,
0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x83, 0x00, 0x00, 0x00, 0x03,
0x7f, 0x00, 0xff, 0x1f, 0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x83,
0x00, 0x00, 0x00, 0x03, 0x7f, 0x00, 0xff, 0x1f, 0x00, 0x00, 0xe0, 0x0f,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
0x13, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x15, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00,
0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x20, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x2b, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x44, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x2a, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x50, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00,
0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x20, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00,
0x24, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00,
0x24, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
0x30, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
0x38, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00,
0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x17, 0x00, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x1a, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x67, 0x6c,
0x6f, 0x62, 0x61, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x61, 0x00, 0x00, 0x00, 0x44, 0x41, 0x54, 0x41,
0x5f, 0x54, 0x59, 0x50, 0x45, 0x2a, 0x3b, 0x38, 0x00, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00,
0x50, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c,
0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x72, 0x00, 0x00, 0x00, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50,
0x45, 0x2a, 0x3b, 0x38, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x5f, 0x5f, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x00, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x71, 0x00, 0x00, 0x00,
0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x2a, 0x3b, 0x38,
0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x1a, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x70, 0x72,
0x69, 0x76, 0x61, 0x74, 0x65, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x6b, 0x00, 0x00, 0x00, 0x69, 0x6e, 0x74, 0x3b,
0x34, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x1a, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x70, 0x72,
0x69, 0x76, 0x61, 0x74, 0x65, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x6e, 0x69, 0x00, 0x00, 0x69, 0x6e, 0x74, 0x3b,
0x34, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x1a, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x70, 0x72,
0x69, 0x76, 0x61, 0x74, 0x65, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x6e, 0x6a, 0x00, 0x00, 0x69, 0x6e, 0x74, 0x3b,
0x34, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0xaa, 0x4a, 0x77, 0xd7, 0x30, 0x3b, 0x5a, 0xfa, 0x65, 0xba, 0x41, 0x41,
0x14, 0x00, 0x00, 0x00, 0x3c, 0x06, 0x00, 0x00, 0x40, 0x05, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x00,
0xb0, 0x04, 0x00, 0x00, 0x67, 0x72, 0x61, 0x6d, 0x73, 0x63, 0x68, 0x6d,
0x69, 0x64, 0x74, 0x5f, 0x6b, 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x33, 0x00,
0x01, 0x00, 0x60, 0x00, 0x0c, 0x02, 0x60, 0x20, 0x00, 0x00, 0x20, 0x00,
0x00, 0x00, 0x00, 0x00, 0x06, 0x80, 0x00, 0x00, 0x04, 0x00, 0x00, 0x30,
0x00, 0x10, 0x00, 0x16, 0xc0, 0x04, 0xc0, 0x04, 0x41, 0x00, 0x00, 0x00,
0x2c, 0x0a, 0xc0, 0x2f, 0x30, 0x01, 0x00, 0x0a, 0x64, 0x00, 0x00, 0x00,
0x40, 0x00, 0x00, 0x00, 0x2c, 0x0a, 0xc0, 0x20, 0x18, 0x01, 0x00, 0x1e,
0x01, 0x00, 0x01, 0x00, 0x40, 0x00, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x20,
0xc0, 0x0f, 0x00, 0x12, 0x20, 0x00, 0xb1, 0x00, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x80, 0x2f, 0xc0, 0x0f, 0x00, 0x12, 0x40, 0x00, 0xb1, 0x00,
0x40, 0x96, 0x01, 0x20, 0x07, 0x04, 0x04, 0x07, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x80, 0x2f, 0x80, 0x0f, 0x8d, 0x0a, 0xe0, 0x00, 0x00, 0x00,
0x40, 0x96, 0x01, 0x20, 0x07, 0x7a, 0x04, 0x06, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x40, 0x21, 0x80, 0x0f, 0x8d, 0x0a, 0xc0, 0x00, 0x00, 0x00,
0x10, 0x16, 0x03, 0x25, 0x07, 0x00, 0x7a, 0x09, 0x10, 0x20, 0x80, 0x05,
0x20, 0x0a, 0x00, 0x20, 0x40, 0x01, 0x8d, 0x0a, 0x20, 0x01, 0x00, 0x00,
0x22, 0x00, 0xa1, 0x00, 0x00, 0x0e, 0x00, 0x20, 0xe0, 0x03, 0x00, 0x00,
0xe0, 0x03, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x2c, 0x0a, 0xc4, 0x2f,
0x18, 0x01, 0x00, 0x0a, 0x20, 0x01, 0x00, 0x00, 0x01, 0x00, 0x80, 0x00,
0xe8, 0x3e, 0xc0, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x20, 0x80, 0x00, 0xe8, 0x3e, 0xc0, 0x2e, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x80, 0x03, 0x26, 0x0a, 0x00, 0x20,
0x1c, 0x01, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x40, 0x96, 0x15, 0x20,
0xe0, 0x0c, 0x7e, 0x7a, 0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x00, 0x2f,
0xc4, 0x0f, 0x00, 0x0a, 0x40, 0x01, 0x8d, 0x00, 0x10, 0x20, 0x80, 0x03,
0x26, 0x0a, 0x00, 0x20, 0x1c, 0x01, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00,
0x09, 0x00, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x21, 0x80, 0x01, 0x8d, 0x1e,
0x02, 0x00, 0x02, 0x00, 0x09, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x00, 0x2f,
0x00, 0x0f, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00, 0x40, 0x96, 0x5d, 0x20,
0x07, 0x0c, 0x0c, 0x09, 0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x00, 0x2f,
0x00, 0x0f, 0x8d, 0x0a, 0x28, 0x01, 0x00, 0x00, 0x33, 0x00, 0x80, 0x0c,
0x70, 0xe0, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x01, 0x5e, 0x02, 0x04,
0x33, 0x20, 0x80, 0x0c, 0x70, 0x60, 0x07, 0x00, 0x02, 0x0f, 0x00, 0x00,
0x01, 0x5e, 0x02, 0x04, 0x20, 0x00, 0x11, 0x00, 0x06, 0x00, 0x00, 0x34,
0x00, 0x14, 0x00, 0x0e, 0x00, 0x03, 0x00, 0x00, 0x01, 0x00, 0x80, 0x00,
0xe8, 0x3e, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x20, 0x80, 0x00, 0xe8, 0x3e, 0x40, 0x22, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2c, 0x1e, 0xc8, 0x2f,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00,
0x2c, 0x0a, 0xc4, 0x20, 0xc8, 0x0f, 0x00, 0x0a, 0x20, 0x01, 0x00, 0x00,
0x40, 0x00, 0x00, 0x00, 0x2c, 0x0a, 0xc8, 0x2f, 0xc8, 0x0f, 0x00, 0x1e,
0x01, 0x00, 0x01, 0x00, 0x40, 0x96, 0x15, 0x20, 0xe0, 0x73, 0x06, 0x7a,
0x40, 0x00, 0x00, 0x00, 0x2c, 0x0a, 0xcc, 0x2f, 0xc4, 0x00, 0x00, 0x0a,
0x18, 0x01, 0x00, 0x00, 0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x22,
0xc4, 0x00, 0x00, 0x0a, 0x40, 0x01, 0x8d, 0x00, 0x10, 0x00, 0x80, 0x05,
0x24, 0x0a, 0x00, 0x20, 0xc8, 0x0f, 0x00, 0x0a, 0x1c, 0x01, 0x00, 0x00,
0x09, 0x00, 0x80, 0x00, 0x28, 0x0a, 0x60, 0x2e, 0x60, 0x0e, 0x8d, 0x1e,
0x02, 0x00, 0x02, 0x00, 0x09, 0x00, 0x00, 0x00, 0x2c, 0x0a, 0xc8, 0x20,
0xcc, 0x0f, 0x00, 0x1e, 0x02, 0x00, 0x02, 0x00, 0x09, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x80, 0x22, 0x80, 0x02, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00,
0x10, 0x20, 0x80, 0x05, 0x24, 0x0a, 0x00, 0x20, 0xc8, 0x0f, 0x00, 0x0a,
0x1c, 0x01, 0x00, 0x00, 0x40, 0x96, 0x2d, 0x20, 0x07, 0x73, 0x73, 0x09,
0x40, 0x00, 0x00, 0x00, 0x2c, 0x0a, 0xa0, 0x2e, 0xc8, 0x00, 0x00, 0x0a,
0x2c, 0x01, 0x00, 0x00, 0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x22,
0x80, 0x02, 0x8d, 0x0a, 0x24, 0x01, 0x00, 0x00, 0x31, 0x00, 0x80, 0x0c,
0x68, 0x02, 0x20, 0x2e, 0x60, 0x0e, 0x00, 0x06, 0x00, 0x5e, 0x20, 0x04,
0x31, 0x00, 0x00, 0x0a, 0x0c, 0x02, 0x00, 0x21, 0xa0, 0x0e, 0x00, 0x06,
0x02, 0x08, 0x11, 0x02, 0x31, 0x20, 0x80, 0x0c, 0x68, 0x02, 0xe0, 0x2d,
0x80, 0x02, 0x00, 0x06, 0x00, 0x5e, 0x20, 0x04, 0x5b, 0x02, 0x01, 0x20,
0x01, 0x80, 0x20, 0xe2, 0x5b, 0x23, 0x01, 0x20, 0x01, 0x90, 0x20, 0xde,
0x33, 0x00, 0x80, 0x0c, 0x70, 0x00, 0x01, 0x00, 0x82, 0x01, 0x00, 0x00,
0x01, 0x5e, 0x02, 0x04, 0x33, 0x20, 0x80, 0x0c, 0x70, 0x20, 0x01, 0x00,
0x02, 0x0f, 0x00, 0x00, 0x01, 0x5e, 0x02, 0x04, 0x20, 0x00, 0x01, 0x00,
0x04, 0x00, 0x00, 0x34, 0x00, 0x14, 0x00, 0x0e, 0xd0, 0xfe, 0xff, 0xff,
0x01, 0x00, 0x00, 0x00, 0x04, 0x06, 0x00, 0x26, 0x00, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0x22, 0x00, 0xa1, 0x00, 0x00, 0x0e, 0x00, 0x20,
0x80, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x2c, 0x1e, 0xcc, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x41, 0x00, 0x00, 0x00, 0x2c, 0x0a, 0xd0, 0x2f, 0xcc, 0x00, 0x00, 0x0a,
0x20, 0x01, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x2c, 0x0a, 0xcc, 0x20,
0xcc, 0x00, 0x00, 0x1e, 0x01, 0x00, 0x01, 0x00, 0x40, 0x96, 0x21, 0x20,
0xe0, 0x17, 0x7e, 0x7a, 0x40, 0x00, 0x00, 0x00, 0x2c, 0x0a, 0xd0, 0x20,
0xd0, 0x0f, 0x00, 0x0a, 0x18, 0x01, 0x00, 0x00, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x60, 0x2d, 0xd0, 0x0f, 0x00, 0x0a, 0x40, 0x01, 0x8d, 0x00,
0x10, 0x00, 0x80, 0x05, 0x26, 0x0a, 0x00, 0x20, 0xcc, 0x00, 0x00, 0x0a,
0x1c, 0x01, 0x00, 0x00, 0x09, 0x00, 0x80, 0x00, 0x28, 0x0a, 0xe0, 0x22,
0xe0, 0x02, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00, 0x09, 0x00, 0x00, 0x00,
0x2c, 0x0a, 0xd4, 0x2f, 0xd0, 0x00, 0x00, 0x1e, 0x02, 0x00, 0x02, 0x00,
0x09, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x60, 0x2d, 0x60, 0x0d, 0x8d, 0x1e,
0x02, 0x00, 0x02, 0x00, 0x10, 0x20, 0x80, 0x05, 0x26, 0x0a, 0x00, 0x20,
0xcc, 0x00, 0x00, 0x0a, 0x1c, 0x01, 0x00, 0x00, 0x40, 0x96, 0x2d, 0x20,
0x07, 0x17, 0x17, 0x09, 0x40, 0x00, 0x00, 0x00, 0x2c, 0x0a, 0xc0, 0x22,
0xd4, 0x0f, 0x00, 0x0a, 0x2c, 0x01, 0x00, 0x00, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x60, 0x2d, 0x60, 0x0d, 0x8d, 0x0a, 0x24, 0x01, 0x00, 0x00,
0x31, 0x00, 0x80, 0x0c, 0x68, 0x02, 0x20, 0x23, 0xe0, 0x02, 0x00, 0x06,
0x00, 0x5e, 0x20, 0x04, 0x31, 0x00, 0x00, 0x0a, 0x0c, 0x02, 0xa0, 0x2d,
0xc0, 0x02, 0x00, 0x06, 0x02, 0x08, 0x11, 0x02, 0x31, 0x20, 0x80, 0x0c,
0x68, 0x02, 0x20, 0x2d, 0x60, 0x0d, 0x00, 0x06, 0x00, 0x5e, 0x20, 0x04,
0x5b, 0x9e, 0x01, 0x20, 0x01, 0xc8, 0xb4, 0x21, 0x5b, 0x9f, 0x06, 0x20,
0x01, 0x48, 0xb7, 0x25, 0x33, 0x00, 0x80, 0x0c, 0x70, 0x90, 0x01, 0x00,
0xe2, 0x02, 0x00, 0x00, 0x00, 0x5e, 0x02, 0x04, 0x33, 0x20, 0x80, 0x0c,
0x70, 0x90, 0x06, 0x00, 0x62, 0x0d, 0x00, 0x00, 0x00, 0x5e, 0x02, 0x04,
0x28, 0x00, 0xb1, 0x00, 0x02, 0x0e, 0x00, 0x20, 0x30, 0x00, 0x00, 0x00,
0x30, 0x00, 0x00, 0x00, 0x31, 0x00, 0x80, 0x0c, 0x68, 0x02, 0x00, 0x22,
0x80, 0x01, 0x00, 0x06, 0x01, 0x5e, 0x20, 0x04, 0x31, 0x20, 0x80, 0x0c,
0x68, 0x02, 0x40, 0x22, 0x00, 0x0f, 0x00, 0x06, 0x01, 0x5e, 0x20, 0x04,
0x27, 0x00, 0xa0, 0x10, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x0e,
0xb0, 0xfe, 0xff, 0xff, 0x25, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x20,
0x00, 0x00, 0x00, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x25, 0x00, 0xa0, 0x00,
0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x0e, 0x10, 0x00, 0x00, 0x00,
0x01, 0x4d, 0x00, 0x20, 0x07, 0x7f, 0x03, 0x00, 0x31, 0x00, 0x60, 0x07,
0x04, 0x02, 0x00, 0x20, 0xe0, 0x0f, 0x00, 0x06, 0x10, 0x00, 0x00, 0x82,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xc3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x83,
0x00, 0x00, 0x00, 0x03, 0x7f, 0x00, 0xff, 0x1f, 0x00, 0x00, 0xe0, 0x0f,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xc0, 0xff, 0x83, 0x00, 0x00, 0x00, 0x03, 0x7f, 0x00, 0xff, 0x1f,
0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x83, 0x00, 0x00, 0x00, 0x03,
0x7f, 0x00, 0xff, 0x1f, 0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x40, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00,
0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x14, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x2b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x48, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x54, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x3c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x05, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x60, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00,
0x8c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00,
0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c,
0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x61, 0x00, 0x00, 0x00, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50,
0x45, 0x2a, 0x3b, 0x38, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x5f, 0x5f, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x00, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x72, 0x00, 0x00, 0x00,
0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x2a, 0x3b, 0x38,
0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x1a, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x67, 0x6c,
0x6f, 0x62, 0x61, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x71, 0x00, 0x00, 0x00, 0x44, 0x41, 0x54, 0x41,
0x5f, 0x54, 0x59, 0x50, 0x45, 0x2a, 0x3b, 0x38, 0x00, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00,
0x48, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74,
0x65, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x6b, 0x00, 0x00, 0x00, 0x69, 0x6e, 0x74, 0x3b, 0x34, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00,
0x48, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74,
0x65, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x6e, 0x69, 0x00, 0x00, 0x69, 0x6e, 0x74, 0x3b, 0x34, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00,
0x48, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74,
0x65, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x6e, 0x6a, 0x00, 0x00, 0x69, 0x6e, 0x74, 0x3b, 0x34, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00
};
unsigned int gramschmidt_Gen9core_gen_len = 8288;

View File

@@ -0,0 +1,350 @@
/**
* jacobi1D.c: This file is part of the PolyBench/GPU 1.0 test suite.
*
*
* Contact: Scott Grauer-Gray <sgrauerg@gmail.com>
* Will Killian <killian@udel.edu>
* Louis-Noel Pouchet <pouchet@cse.ohio-state.edu>
* Web address: http://www.cse.ohio-state.edu/~pouchet/software/polybench/GPU
*/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <sys/time.h>
#ifdef __APPLE__
#include <OpenCL/opencl.h>
#else
#include "../../CL/cl.h"
#endif
#define POLYBENCH_TIME 1
//select the OpenCL device to use (can be GPU, CPU, or Accelerator such as Intel Xeon Phi)
#define OPENCL_DEVICE_SELECTION CL_DEVICE_TYPE_GPU
#include "jacobi1D.h"
#include "../../polybench.h"
//define the error threshold for the results "not matching"
#define PERCENT_DIFF_ERROR_THRESHOLD 10.05
#define MAX_SOURCE_SIZE (0x100000)
#if defined(cl_khr_fp64) // Khronos extension available?
#pragma OPENCL EXTENSION cl_khr_fp64 : enable
#elif defined(cl_amd_fp64) // AMD extension available?
#pragma OPENCL EXTENSION cl_amd_fp64 : enable
#endif
namespace ns_jacobi_1d_imper
{
#include "../../polybenchUtilFuncts.h"
#include "jacobi1D_kernel.h"
char str_temp[1024];
cl_platform_id platform_id;
cl_device_id device_id;
cl_uint num_devices;
cl_uint num_platforms;
cl_int errcode;
cl_context clGPUContext;
cl_kernel clKernel1;
cl_kernel clKernel2;
cl_command_queue clCommandQue;
cl_program clProgram;
cl_mem a_mem_obj;
cl_mem b_mem_obj;
FILE *fp;
char *source_str;
size_t source_size;
#define RUN_ON_CPU
void compareResults(int n, DATA_TYPE POLYBENCH_1D(a,N,n), DATA_TYPE POLYBENCH_1D(a_outFromGpu,N,n), DATA_TYPE POLYBENCH_1D(b,N,n),
DATA_TYPE POLYBENCH_1D(b_outFromGpu,N,n))
{
int i, j, fail;
fail = 0;
for (i=1; i<(n-1); i++)
{
if (percentDiff(a[i], a_outFromGpu[i]) > PERCENT_DIFF_ERROR_THRESHOLD)
{
fail++;
}
}
for (i=1; i<(n-1); i++)
{
if (percentDiff(b[i], b_outFromGpu[i]) > PERCENT_DIFF_ERROR_THRESHOLD)
{
fail++;
}
}
// Print results
printf("Non-Matching CPU-GPU Outputs Beyond Error Threshold of %4.2f Percent: %d\n", PERCENT_DIFF_ERROR_THRESHOLD, fail);
}
void read_cl_file()
{
// Load the kernel source code into the array source_str
// fp = fopen("jacobi1D.cl", "r");
// if (!fp) {
// fprintf(stderr, "Failed to load kernel.\n");
// exit(1);
// }
// source_str = (char*)malloc(MAX_SOURCE_SIZE);
// source_size = fread( source_str, 1, MAX_SOURCE_SIZE, fp);
// fclose( fp );
}
void init_array(int n, DATA_TYPE POLYBENCH_1D(A,N,n), DATA_TYPE POLYBENCH_1D(B,N,n))
{
int i;
for (i = 0; i < n; i++)
{
A[i] = ((DATA_TYPE) 4 * i + 10) / N;
B[i] = ((DATA_TYPE) 7 * i + 11) / N;
}
}
void cl_initialization()
{
// Get platform and device information
errcode = clGetPlatformIDs(1, &platform_id, &num_platforms);
if(errcode == CL_SUCCESS) printf("number of platforms is %d\n",num_platforms);
errcode = clGetPlatformInfo(platform_id,CL_PLATFORM_NAME, sizeof(str_temp), str_temp,NULL);
if(errcode == CL_SUCCESS) printf("platform name is %s\n",str_temp);
errcode = clGetPlatformInfo(platform_id, CL_PLATFORM_VERSION, sizeof(str_temp), str_temp,NULL);
if(errcode == CL_SUCCESS) printf("platform version is %s\n",str_temp);
errcode = clGetDeviceIDs( platform_id, OPENCL_DEVICE_SELECTION, 1, &device_id, &num_devices);
if(errcode == CL_SUCCESS) printf("device id is %d\n",device_id);
errcode = clGetDeviceInfo(device_id,CL_DEVICE_NAME, sizeof(str_temp), str_temp,NULL);
if(errcode == CL_SUCCESS) printf("device name is %s\n",str_temp);
// Create an OpenCL context
clGPUContext = clCreateContext( NULL, 1, &device_id, NULL, NULL, &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating context\n");
//Create a command-queue
clCommandQue = clCreateCommandQueue(clGPUContext, device_id, 0, &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating command queue\n");
}
void cl_mem_init(DATA_TYPE POLYBENCH_1D(A,N,n), DATA_TYPE POLYBENCH_1D(B,N,n))
{
a_mem_obj = clCreateBuffer(clGPUContext, CL_MEM_READ_WRITE, N * sizeof(DATA_TYPE), NULL, &errcode);
b_mem_obj = clCreateBuffer(clGPUContext, CL_MEM_READ_WRITE, N * sizeof(DATA_TYPE), NULL, &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating buffers\n");
errcode = clEnqueueWriteBuffer(clCommandQue, a_mem_obj, CL_TRUE, 0, N * sizeof(DATA_TYPE), A, 0, NULL, NULL);
errcode = clEnqueueWriteBuffer(clCommandQue, b_mem_obj, CL_TRUE, 0, N * sizeof(DATA_TYPE), B, 0, NULL, NULL);
if(errcode != CL_SUCCESS)printf("Error in writing buffers\n");
}
void cl_load_prog()
{
// Create a program from the kernel source
const size_t kernel_size = jacobi1D_Gen9core_gen_len;
const unsigned char* kernel_bin = jacobi1D_Gen9core_gen;
clProgram = clCreateProgramWithBinary(clGPUContext, 1, &device_id, &kernel_size, &kernel_bin, NULL, &errcode);
// clProgram = clCreateProgramWithSource(clGPUContext, 1, (const char **)&source_str, (const size_t *)&source_size, &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating program\n");
// Build the program
errcode = clBuildProgram(clProgram, 1, &device_id, NULL, NULL, NULL);
if(errcode != CL_SUCCESS) printf("Error in building program\n");
// Create the OpenCL kernel
clKernel1 = clCreateKernel(clProgram, "runJacobi1D_kernel1", &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating kernel\n");
clKernel2 = clCreateKernel(clProgram, "runJacobi1D_kernel2", &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating kernel\n");
clFinish(clCommandQue);
}
void cl_launch_kernel1(int n)
{
size_t localWorkSize[2], globalWorkSize[2];
localWorkSize[0] = DIM_LOCAL_WORK_GROUP_X;
localWorkSize[1] = DIM_LOCAL_WORK_GROUP_Y;
globalWorkSize[0] = N;
globalWorkSize[1] = 1;
// Set the arguments of the kernel
errcode = clSetKernelArg(clKernel1, 0, sizeof(cl_mem), (void *)&a_mem_obj);
errcode |= clSetKernelArg(clKernel1, 1, sizeof(cl_mem), (void *)&b_mem_obj);
errcode |= clSetKernelArg(clKernel1, 2, sizeof(int), (void *)&n);
if(errcode != CL_SUCCESS) printf("Error in seting arguments\n");
// Execute the OpenCL kernel
errcode = clEnqueueNDRangeKernel(clCommandQue, clKernel1, 2, NULL, globalWorkSize, localWorkSize, 0, NULL, NULL);
if(errcode != CL_SUCCESS) printf("Error in launching kernel\n");
clFinish(clCommandQue);
}
void cl_launch_kernel2(int n)
{
size_t localWorkSize[2], globalWorkSize[2];
localWorkSize[0] = DIM_LOCAL_WORK_GROUP_X;
localWorkSize[1] = DIM_LOCAL_WORK_GROUP_Y;
globalWorkSize[0] = N;
globalWorkSize[1] = 1;
// Set the arguments of the kernel
errcode = clSetKernelArg(clKernel2, 0, sizeof(cl_mem), (void *)&a_mem_obj);
errcode |= clSetKernelArg(clKernel2, 1, sizeof(cl_mem), (void *)&b_mem_obj);
errcode |= clSetKernelArg(clKernel2, 2, sizeof(int), (void *)&n);
if(errcode != CL_SUCCESS) printf("Error in seting arguments\n");
// Execute the OpenCL kernel
errcode = clEnqueueNDRangeKernel(clCommandQue, clKernel2, 2, NULL, globalWorkSize, localWorkSize, 0, NULL, NULL);
if(errcode != CL_SUCCESS) printf("Error in launching kernel\n");
clFinish(clCommandQue);
}
void cl_clean_up()
{
// Clean up
errcode = clFlush(clCommandQue);
errcode = clFinish(clCommandQue);
errcode = clReleaseKernel(clKernel1);
errcode = clReleaseKernel(clKernel2);
errcode = clReleaseProgram(clProgram);
errcode = clReleaseMemObject(a_mem_obj);
errcode = clReleaseMemObject(b_mem_obj);
errcode = clReleaseCommandQueue(clCommandQue);
errcode = clReleaseContext(clGPUContext);
if(errcode != CL_SUCCESS) printf("Error in cleanup\n");
}
void runJacobi1DCpu(int tsteps, int n, DATA_TYPE POLYBENCH_1D(A,N,n), DATA_TYPE POLYBENCH_1D(B,N,n))
{
int t, i, j;
for (t = 0; t < _PB_TSTEPS; t++)
{
for (i = 1; i < _PB_N - 1; i++)
{
B[i] = 0.33333 * (A[i-1] + A[i] + A[i + 1]);
}
for (j = 1; j < _PB_N - 1; j++)
{
A[j] = B[j];
}
}
}
/* DCE code. Must scan the entire live-out data.
Can be used also to check the correctness of the output. */
static
void print_array(int n,
DATA_TYPE POLYBENCH_1D(A,N,n))
{
int i;
for (i = 0; i < n; i++)
{
fprintf(stderr, DATA_PRINTF_MODIFIER, A[i]);
if (i % 20 == 0) fprintf(stderr, "\n");
}
fprintf(stderr, "\n");
}
int main(int argc, char *argv[])
{
/* Retrieve problem size. */
int n = N;
int tsteps = TSTEPS;
POLYBENCH_1D_ARRAY_DECL(a,DATA_TYPE,N,n);
POLYBENCH_1D_ARRAY_DECL(b,DATA_TYPE,N,n);
POLYBENCH_1D_ARRAY_DECL(a_outputFromGpu,DATA_TYPE,N,n);
POLYBENCH_1D_ARRAY_DECL(b_outputFromGpu,DATA_TYPE,N,n);
init_array(n, POLYBENCH_ARRAY(a), POLYBENCH_ARRAY(b));
read_cl_file();
cl_initialization();
cl_mem_init(POLYBENCH_ARRAY(a), POLYBENCH_ARRAY(b));
cl_load_prog();
/* Start timer. */
polybench_start_instruments;
int t;
for (t = 0; t < _PB_TSTEPS ; t++)
{
cl_launch_kernel1(n);
cl_launch_kernel2(n);
}
/* Stop and print timer. */
printf("GPU Time in seconds:\n");
polybench_stop_instruments;
polybench_print_instruments;
errcode = clEnqueueReadBuffer(clCommandQue, a_mem_obj, CL_TRUE, 0, N * sizeof(DATA_TYPE), POLYBENCH_ARRAY(a_outputFromGpu), 0, NULL, NULL);
errcode = clEnqueueReadBuffer(clCommandQue, b_mem_obj, CL_TRUE, 0, N * sizeof(DATA_TYPE), POLYBENCH_ARRAY(b_outputFromGpu), 0, NULL, NULL);
if(errcode != CL_SUCCESS) printf("Error in reading GPU mem\n");
#ifdef RUN_ON_CPU
/* Start timer. */
polybench_start_instruments;
runJacobi1DCpu(tsteps, n, POLYBENCH_ARRAY(a), POLYBENCH_ARRAY(b));
/* Stop and print timer. */
printf("CPU Time in seconds:\n");
polybench_stop_instruments;
polybench_print_instruments;
compareResults(n, POLYBENCH_ARRAY(a), POLYBENCH_ARRAY(a_outputFromGpu), POLYBENCH_ARRAY(b), POLYBENCH_ARRAY(b_outputFromGpu));
#else //prevent dead code elimination
polybench_prevent_dce(print_array(n, POLYBENCH_ARRAY(a_outputFromGpu)));
#endif //RUN_ON_CPU
cl_clean_up();
POLYBENCH_FREE_ARRAY(a);
POLYBENCH_FREE_ARRAY(b);
POLYBENCH_FREE_ARRAY(a_outputFromGpu);
POLYBENCH_FREE_ARRAY(b_outputFromGpu);
return 0;
}
}

View File

@@ -0,0 +1,37 @@
/**
* jacobi1D.cl: This file is part of the PolyBench/GPU 1.0 test suite.
*
*
* Contact: Scott Grauer-Gray <sgrauerg@gmail.com>
* Will Killian <killian@udel.edu>
* Louis-Noel Pouchet <pouchet@cse.ohio-state.edu>
* Web address: http://www.cse.ohio-state.edu/~pouchet/software/polybench/GPU
*/
#if defined(cl_khr_fp64) // Khronos extension available?
#pragma OPENCL EXTENSION cl_khr_fp64 : enable
#elif defined(cl_amd_fp64) // AMD extension available?
#pragma OPENCL EXTENSION cl_amd_fp64 : enable
#endif
typedef float DATA_TYPE;
__kernel void runJacobi1D_kernel1(__global DATA_TYPE* A, __global DATA_TYPE* B, int n)
{
int i = get_global_id(0);
if ((i >= 1) && (i < (n-1)))
{
B[i] = 0.33333f * (A[i-1] + A[i] + A[i + 1]);
}
}
__kernel void runJacobi1D_kernel2(__global DATA_TYPE* A, __global DATA_TYPE* B, int n)
{
int j = get_global_id(0);
if ((j >= 1) && (j < (n-1)))
{
A[j] = B[j];
}
}

View File

@@ -0,0 +1,61 @@
/**
* jacobi1D.h: This file is part of the PolyBench/GPU 1.0 test suite.
*
*
* Contact: Scott Grauer-Gray <sgrauerg@gmail.com>
* Will Killian <killian@udel.edu>
* Louis-Noel Pouchet <pouchet@cse.ohio-state.edu>
* Web address: http://www.cse.ohio-state.edu/~pouchet/software/polybench/GPU
*/
#ifndef JACOBI1D_H
# define JACOBI1D_H
/* Default to STANDARD_DATASET. */
# if !defined(MINI_DATASET) && !defined(SMALL_DATASET) && !defined(LARGE_DATASET) && !defined(EXTRALARGE_DATASET)
# define MINI_DATASET
# endif
/* Do not define anything if the user manually defines the size. */
# if !defined(TSTEPS) && !defined(N)
/* Define the possible dataset sizes. */
# ifdef MINI_DATASET
#define TSTEPS 10000
#define N 1024
# endif
# ifdef SMALL_DATASET
#define TSTEPS 10000
#define N 2048
# endif
# ifdef STANDARD_DATASET /* Default if unspecified. */
#define TSTEPS 10000
#define N 4096
# endif
# ifdef LARGE_DATASET
#define TSTEPS 10000
#define N 8192
# endif
# ifdef EXTRALARGE_DATASET
#define TSTEPS 10000
#define N 16384
# endif
# endif /* !N */
# define _PB_TSTEPS POLYBENCH_LOOP_BOUND(TSTEPS,tsteps)
# define _PB_N POLYBENCH_LOOP_BOUND(N,n)
# ifndef DATA_TYPE
# define DATA_TYPE float
# define DATA_PRINTF_MODIFIER "%0.2lf "
# endif
/* Thread block dimensions */
#define DIM_LOCAL_WORK_GROUP_X 256
#define DIM_LOCAL_WORK_GROUP_Y 1
#endif /* !JACOBI1D*/

View File

@@ -0,0 +1,331 @@
unsigned char jacobi1D_Gen9core_gen[] = {
0x43, 0x54, 0x4e, 0x49, 0x39, 0x04, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xa3, 0x45, 0xbe, 0xf0, 0xdd, 0x9e, 0x39, 0x2d,
0xd7, 0xfd, 0x76, 0xe7, 0x14, 0x00, 0x00, 0x00, 0x70, 0x04, 0x00, 0x00,
0xc0, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
0x88, 0x00, 0x00, 0x00, 0x30, 0x02, 0x00, 0x00, 0x72, 0x75, 0x6e, 0x4a,
0x61, 0x63, 0x6f, 0x62, 0x69, 0x31, 0x44, 0x5f, 0x6b, 0x65, 0x72, 0x6e,
0x65, 0x6c, 0x31, 0x00, 0x01, 0x00, 0x60, 0x00, 0x0c, 0x02, 0x60, 0x20,
0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x80, 0x00, 0x00,
0x04, 0x00, 0x00, 0x30, 0x00, 0x10, 0x00, 0x16, 0xc0, 0x04, 0xc0, 0x04,
0x41, 0x80, 0x2d, 0x20, 0x00, 0x04, 0x09, 0x03, 0x40, 0x00, 0x00, 0x00,
0x2c, 0x0a, 0x84, 0x20, 0x10, 0x01, 0x00, 0x1e, 0xff, 0xff, 0xff, 0xff,
0x01, 0x00, 0x00, 0x00, 0x4c, 0x16, 0x88, 0x20, 0x00, 0x00, 0x00, 0x00,
0x01, 0x00, 0x01, 0x00, 0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x21,
0x80, 0x00, 0x00, 0x12, 0x40, 0x00, 0xb1, 0x00, 0x40, 0x00, 0x80, 0x00,
0x28, 0x0a, 0xa0, 0x20, 0x80, 0x00, 0x00, 0x12, 0x20, 0x00, 0xb1, 0x00,
0x40, 0x20, 0x80, 0x03, 0x28, 0x0a, 0xc0, 0x21, 0x40, 0x01, 0x8d, 0x0a,
0xe0, 0x00, 0x00, 0x00, 0x40, 0x96, 0x01, 0x20, 0x07, 0x0c, 0x05, 0x07,
0x10, 0x20, 0x80, 0x05, 0x22, 0x0a, 0x00, 0x20, 0xc0, 0x01, 0x8d, 0x0a,
0x84, 0x00, 0x00, 0x00, 0x02, 0x20, 0x81, 0x00, 0x48, 0x12, 0x80, 0x25,
0x88, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x00, 0x10, 0x16, 0x2f, 0x25,
0x07, 0x00, 0x0c, 0x04, 0x02, 0x20, 0x81, 0x00, 0x4a, 0x12, 0xa0, 0x25,
0x88, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x81, 0x03,
0x20, 0x0a, 0x00, 0x20, 0x80, 0x01, 0x8d, 0x1e, 0x00, 0x00, 0x00, 0x00,
0x05, 0x20, 0x80, 0x02, 0x40, 0x12, 0x00, 0x20, 0x80, 0x05, 0xb1, 0x12,
0xa0, 0x05, 0xb1, 0x00, 0x22, 0x00, 0xa1, 0x00, 0x00, 0x0e, 0x00, 0x20,
0x30, 0x01, 0x00, 0x00, 0x30, 0x01, 0x00, 0x00, 0x09, 0x00, 0x80, 0x00,
0x28, 0x0a, 0x00, 0x22, 0x80, 0x01, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00,
0x09, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x22, 0xc0, 0x01, 0x8d, 0x1e,
0x02, 0x00, 0x02, 0x00, 0x40, 0x00, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x22,
0x00, 0x02, 0x8d, 0x1e, 0xfc, 0xff, 0xfc, 0xff, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0xc0, 0x22, 0x40, 0x02, 0x8d, 0x1e, 0xfc, 0xff, 0xfc, 0xff,
0x40, 0x96, 0x71, 0x20, 0x07, 0x24, 0x10, 0x08, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0xc0, 0x24, 0x40, 0x02, 0x8d, 0x0a, 0x14, 0x01, 0x00, 0x00,
0x40, 0x96, 0x71, 0x20, 0x07, 0x14, 0x14, 0x08, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0xc0, 0x22, 0xc0, 0x02, 0x8d, 0x0a, 0x14, 0x01, 0x00, 0x00,
0x31, 0x00, 0x80, 0x0c, 0x68, 0x02, 0x00, 0x25, 0x80, 0x04, 0x00, 0x06,
0x00, 0x5e, 0x20, 0x04, 0x31, 0x20, 0x80, 0x0c, 0x68, 0x02, 0x40, 0x25,
0xc0, 0x04, 0x00, 0x06, 0x00, 0x5e, 0x20, 0x04, 0x31, 0x00, 0x80, 0x0c,
0x68, 0x02, 0x00, 0x23, 0x80, 0x02, 0x00, 0x06, 0x00, 0x58, 0x60, 0x04,
0x31, 0x20, 0x80, 0x0c, 0x68, 0x02, 0xc0, 0x23, 0xc0, 0x02, 0x00, 0x06,
0x00, 0x58, 0x60, 0x04, 0x40, 0x56, 0x02, 0x20, 0xe7, 0x28, 0x18, 0x28,
0x40, 0x20, 0x80, 0x00, 0xe8, 0x3a, 0x40, 0x25, 0xc0, 0x03, 0x8d, 0x3a,
0x40, 0x05, 0x8d, 0x00, 0x40, 0x56, 0x02, 0x20, 0xe7, 0x28, 0x28, 0x1c,
0x40, 0x20, 0x80, 0x00, 0xe8, 0x3a, 0x40, 0x25, 0x40, 0x05, 0x8d, 0x3a,
0x40, 0x04, 0x8d, 0x00, 0x41, 0x00, 0x80, 0x00, 0xe8, 0x3a, 0x00, 0x25,
0x00, 0x05, 0x8d, 0x3e, 0x3b, 0xaa, 0xaa, 0x3e, 0x41, 0x20, 0x80, 0x00,
0xe8, 0x3a, 0x40, 0x25, 0x40, 0x05, 0x8d, 0x3e, 0x3b, 0xaa, 0xaa, 0x3e,
0x33, 0x00, 0x80, 0x0c, 0x70, 0x80, 0x02, 0x00, 0x02, 0x02, 0x00, 0x00,
0x01, 0x5e, 0x02, 0x04, 0x33, 0x20, 0x80, 0x0c, 0x70, 0xa0, 0x02, 0x00,
0x42, 0x02, 0x00, 0x00, 0x01, 0x5e, 0x02, 0x04, 0x25, 0x00, 0xa0, 0x00,
0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x0e, 0x10, 0x00, 0x00, 0x00,
0x01, 0x4d, 0x00, 0x20, 0x07, 0x7f, 0x03, 0x00, 0x31, 0x00, 0x60, 0x07,
0x04, 0x02, 0x00, 0x20, 0xe0, 0x0f, 0x00, 0x06, 0x10, 0x00, 0x00, 0x82,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x83,
0x00, 0x00, 0x00, 0x03, 0x7f, 0x00, 0xff, 0x1f, 0x00, 0x00, 0xe0, 0x0f,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xc0, 0xff, 0x83, 0x00, 0x00, 0x00, 0x03, 0x7f, 0x00, 0xff, 0x1f,
0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
0x13, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x15, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x20, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x40, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00,
0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x20, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00,
0x24, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x30, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
0x19, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00,
0x16, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x1b, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x5f, 0x5f, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x00, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00,
0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x2a, 0x3b, 0x38,
0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x1a, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x67, 0x6c,
0x6f, 0x62, 0x61, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x44, 0x41, 0x54, 0x41,
0x5f, 0x54, 0x59, 0x50, 0x45, 0x2a, 0x3b, 0x38, 0x00, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00,
0x48, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74,
0x65, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x6e, 0x00, 0x00, 0x00, 0x69, 0x6e, 0x74, 0x3b, 0x34, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x6a, 0x35, 0x95, 0x63,
0xdd, 0x9e, 0x39, 0x2d, 0xd7, 0xfd, 0x76, 0xe7, 0x14, 0x00, 0x00, 0x00,
0x48, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x20, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0x78, 0x01, 0x00, 0x00,
0x72, 0x75, 0x6e, 0x4a, 0x61, 0x63, 0x6f, 0x62, 0x69, 0x31, 0x44, 0x5f,
0x6b, 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x32, 0x00, 0x01, 0x00, 0x60, 0x00,
0x0c, 0x02, 0x60, 0x20, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00,
0x06, 0x80, 0x00, 0x00, 0x04, 0x00, 0x00, 0x30, 0x00, 0x10, 0x00, 0x16,
0xc0, 0x04, 0xc0, 0x04, 0x41, 0x00, 0x00, 0x00, 0x2c, 0x0a, 0x80, 0x20,
0x14, 0x01, 0x00, 0x0a, 0x64, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
0x2c, 0x0a, 0x84, 0x20, 0x10, 0x01, 0x00, 0x1e, 0xff, 0xff, 0xff, 0xff,
0x01, 0x00, 0x00, 0x00, 0x4c, 0x16, 0x88, 0x20, 0x00, 0x00, 0x00, 0x00,
0x01, 0x00, 0x01, 0x00, 0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x20, 0x21,
0x80, 0x00, 0x00, 0x12, 0x40, 0x00, 0xb1, 0x00, 0x40, 0x00, 0x80, 0x00,
0x28, 0x0a, 0xa0, 0x20, 0x80, 0x00, 0x00, 0x12, 0x20, 0x00, 0xb1, 0x00,
0x40, 0x20, 0x80, 0x03, 0x28, 0x0a, 0xa0, 0x21, 0x20, 0x01, 0x8d, 0x0a,
0xe0, 0x00, 0x00, 0x00, 0x40, 0x96, 0x01, 0x20, 0x07, 0x0b, 0x05, 0x07,
0x10, 0x20, 0x80, 0x05, 0x22, 0x0a, 0x00, 0x20, 0xa0, 0x01, 0x8d, 0x0a,
0x84, 0x00, 0x00, 0x00, 0x02, 0x20, 0x81, 0x00, 0x48, 0x12, 0xe0, 0x22,
0x88, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x00, 0x10, 0x16, 0x2f, 0x25,
0x07, 0x00, 0x0b, 0x04, 0x02, 0x20, 0x81, 0x00, 0x4a, 0x12, 0x00, 0x23,
0x88, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x81, 0x03,
0x20, 0x0a, 0x00, 0x20, 0x60, 0x01, 0x8d, 0x1e, 0x00, 0x00, 0x00, 0x00,
0x05, 0x20, 0x80, 0x02, 0x40, 0x12, 0x00, 0x20, 0xe0, 0x02, 0xb1, 0x12,
0x00, 0x03, 0xb1, 0x00, 0x22, 0x00, 0xa1, 0x00, 0x00, 0x0e, 0x00, 0x20,
0x70, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x09, 0x00, 0x80, 0x00,
0x28, 0x0a, 0xe0, 0x21, 0x60, 0x01, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00,
0x09, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x20, 0x22, 0xa0, 0x01, 0x8d, 0x1e,
0x02, 0x00, 0x02, 0x00, 0x31, 0x00, 0x80, 0x0c, 0x68, 0x02, 0x60, 0x22,
0xe0, 0x01, 0x00, 0x06, 0x01, 0x5e, 0x20, 0x04, 0x31, 0x20, 0x80, 0x0c,
0x68, 0x02, 0xa0, 0x22, 0x20, 0x02, 0x00, 0x06, 0x01, 0x5e, 0x20, 0x04,
0x33, 0x00, 0x80, 0x0c, 0x70, 0x30, 0x01, 0x00, 0xe2, 0x01, 0x00, 0x00,
0x00, 0x5e, 0x02, 0x04, 0x33, 0x20, 0x80, 0x0c, 0x70, 0x50, 0x01, 0x00,
0x22, 0x02, 0x00, 0x00, 0x00, 0x5e, 0x02, 0x04, 0x25, 0x00, 0xa0, 0x00,
0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x0e, 0x10, 0x00, 0x00, 0x00,
0x01, 0x4d, 0x00, 0x20, 0x07, 0x7f, 0x03, 0x00, 0x31, 0x00, 0x60, 0x07,
0x04, 0x02, 0x00, 0x20, 0xe0, 0x0f, 0x00, 0x06, 0x10, 0x00, 0x00, 0x82,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x00, 0xc0, 0xff, 0x83, 0x00, 0x00, 0x00, 0x03, 0x7f, 0x00, 0xff, 0x1f,
0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x83, 0x00, 0x00, 0x00, 0x03,
0x7f, 0x00, 0xff, 0x1f, 0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x40, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x80, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00,
0x80, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x14, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x2b, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x34, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00,
0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x20, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00,
0x24, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x30, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
0x19, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
0x16, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x1b, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x5f, 0x5f, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x00, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00,
0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x2a, 0x3b, 0x38,
0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x1a, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x67, 0x6c,
0x6f, 0x62, 0x61, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x44, 0x41, 0x54, 0x41,
0x5f, 0x54, 0x59, 0x50, 0x45, 0x2a, 0x3b, 0x38, 0x00, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00,
0x48, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74,
0x65, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x6e, 0x00, 0x00, 0x00, 0x69, 0x6e, 0x74, 0x3b, 0x34, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00
};
unsigned int jacobi1D_Gen9core_gen_len = 3932;

View File

@@ -0,0 +1,388 @@
/**
* jacobi2D.c: This file is part of the PolyBench/GPU 1.0 test suite.
*
*
* Contact: Scott Grauer-Gray <sgrauerg@gmail.com>
* Will Killian <killian@udel.edu>
* Louis-Noel Pouchet <pouchet@cse.ohio-state.edu>
* Web address: http://www.cse.ohio-state.edu/~pouchet/software/polybench/GPU
*/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <sys/time.h>
#define POLYBENCH_TIME 1
//select the OpenCL device to use (can be GPU, CPU, or Accelerator such as Intel Xeon Phi)
#define OPENCL_DEVICE_SELECTION CL_DEVICE_TYPE_GPU
#include "../../polybench.h"
//define the error threshold for the results "not matching"
#define PERCENT_DIFF_ERROR_THRESHOLD 0.05
#ifdef __APPLE__
#include <OpenCL/opencl.h>
#else
#include "../../CL/cl.h"
#endif
#include "jacobi2D.h"
#define MAX_SOURCE_SIZE (0x100000)
#if defined(cl_khr_fp64) // Khronos extension available?
#pragma OPENCL EXTENSION cl_khr_fp64 : enable
#elif defined(cl_amd_fp64) // AMD extension available?
#pragma OPENCL EXTENSION cl_amd_fp64 : enable
#endif
namespace ns_jacobi_2d_imper
{
#include "jacobi2D_kernel.h"
#include "../../polybenchUtilFuncts.h"
char str_temp[1024];
cl_platform_id platform_id;
cl_device_id device_id;
cl_uint num_devices;
cl_uint num_platforms;
cl_int errcode;
cl_context clGPUContext;
cl_kernel clKernel1;
cl_kernel clKernel2;
cl_command_queue clCommandQue;
cl_program clProgram;
cl_mem a_mem_obj;
cl_mem b_mem_obj;
cl_mem c_mem_obj;
FILE *fp;
char *source_str;
size_t source_size;
#define RUN_ON_CPU
void compareResults(int n, DATA_TYPE POLYBENCH_2D(a,N,N,n,n), DATA_TYPE POLYBENCH_2D(a_outputFromGpu,N,N,n,n), DATA_TYPE POLYBENCH_2D(b,N,N,n,n), DATA_TYPE POLYBENCH_2D(b_outputFromGpu,N,N,n,n))
{
int i, j, fail;
fail = 0;
// Compare output from CPU and GPU
for (i=0; i<n; i++)
{
for (j=0; j<n; j++)
{
if (percentDiff(a[i][j], a_outputFromGpu[i][j]) > PERCENT_DIFF_ERROR_THRESHOLD)
{
fail++;
}
}
}
for (i=0; i<n; i++)
{
for (j=0; j<n; j++)
{
if (percentDiff(b[i][j], b_outputFromGpu[i][j]) > PERCENT_DIFF_ERROR_THRESHOLD)
{
fail++;
}
}
}
// Print results
printf("Non-Matching CPU-GPU Outputs Beyond Error Threshold of %4.2f Percent: %d\n", PERCENT_DIFF_ERROR_THRESHOLD, fail);
}
void read_cl_file()
{
// Load the kernel source code into the array source_str
// fp = fopen("jacobi2D.cl", "r");
// if (!fp) {
// fprintf(stderr, "Failed to load kernel.\n");
// exit(1);
// }
// source_str = (char*)malloc(MAX_SOURCE_SIZE);
// source_size = fread( source_str, 1, MAX_SOURCE_SIZE, fp);
// fclose( fp );
}
void init_array(int n, DATA_TYPE POLYBENCH_2D(A,N,N,n,n), DATA_TYPE POLYBENCH_2D(B,N,N,n,n))
{
int i, j;
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
{
A[i][j] = ((DATA_TYPE) i*(j+2) + 10) / N;
B[i][j] = ((DATA_TYPE) (i-4)*(j-1) + 11) / N;
}
}
}
void cl_initialization()
{
// Get platform and device information
errcode = clGetPlatformIDs(1, &platform_id, &num_platforms);
if(errcode == CL_SUCCESS) printf("number of platforms is %d\n",num_platforms);
errcode = clGetPlatformInfo(platform_id,CL_PLATFORM_NAME, sizeof(str_temp), str_temp,NULL);
if(errcode == CL_SUCCESS) printf("platform name is %s\n",str_temp);
errcode = clGetPlatformInfo(platform_id, CL_PLATFORM_VERSION, sizeof(str_temp), str_temp,NULL);
if(errcode == CL_SUCCESS) printf("platform version is %s\n",str_temp);
errcode = clGetDeviceIDs( platform_id, OPENCL_DEVICE_SELECTION, 1, &device_id, &num_devices);
if(errcode == CL_SUCCESS) printf("device id is %d\n",device_id);
errcode = clGetDeviceInfo(device_id,CL_DEVICE_NAME, sizeof(str_temp), str_temp,NULL);
if(errcode == CL_SUCCESS) printf("device name is %s\n",str_temp);
// Create an OpenCL context
clGPUContext = clCreateContext( NULL, 1, &device_id, NULL, NULL, &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating context\n");
//Create a command-queue
clCommandQue = clCreateCommandQueue(clGPUContext, device_id, 0, &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating command queue\n");
}
void cl_mem_init(DATA_TYPE POLYBENCH_2D(A,N,N,n,n), DATA_TYPE POLYBENCH_2D(B,N,N,n,n))
{
a_mem_obj = clCreateBuffer(clGPUContext, CL_MEM_READ_WRITE, N * N * sizeof(DATA_TYPE), NULL, &errcode);
b_mem_obj = clCreateBuffer(clGPUContext, CL_MEM_READ_WRITE, N * N * sizeof(DATA_TYPE), NULL, &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating buffers\n");
errcode = clEnqueueWriteBuffer(clCommandQue, a_mem_obj, CL_TRUE, 0, N * N * sizeof(DATA_TYPE), A, 0, NULL, NULL);
errcode = clEnqueueWriteBuffer(clCommandQue, b_mem_obj, CL_TRUE, 0, N * N * sizeof(DATA_TYPE), B, 0, NULL, NULL);
if(errcode != CL_SUCCESS)printf("Error in writing buffers\n");
}
void cl_load_prog()
{
// Create a program from the kernel source
const size_t kernel_size = jacobi2D_Gen9core_gen_len;
const unsigned char* kernel_bin = jacobi2D_Gen9core_gen;
clProgram = clCreateProgramWithBinary(clGPUContext, 1, &device_id, &kernel_size, &kernel_bin, NULL, &errcode);
// clProgram = clCreateProgramWithSource(clGPUContext, 1, (const char **)&source_str, (const size_t *)&source_size, &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating program\n");
// Build the program
errcode = clBuildProgram(clProgram, 1, &device_id, NULL, NULL, NULL);
if(errcode != CL_SUCCESS) printf("Error in building program\n");
// Create the OpenCL kernel
clKernel1 = clCreateKernel(clProgram, "runJacobi2D_kernel1", &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating kernel1\n");
clKernel2 = clCreateKernel(clProgram, "runJacobi2D_kernel2", &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating kernel2\n");
clFinish(clCommandQue);
}
void cl_launch_kernel1(int n)
{
size_t localWorkSize[2], globalWorkSize[2];
localWorkSize[0] = DIM_LOCAL_WORK_GROUP_X;
localWorkSize[1] = DIM_LOCAL_WORK_GROUP_Y;
globalWorkSize[0] = N;
globalWorkSize[1] = N;
// Set the arguments of the kernel
errcode = clSetKernelArg(clKernel1, 0, sizeof(cl_mem), (void *)&a_mem_obj);
errcode |= clSetKernelArg(clKernel1, 1, sizeof(cl_mem), (void *)&b_mem_obj);
errcode |= clSetKernelArg(clKernel1, 2, sizeof(int), (void *)&n);
if(errcode != CL_SUCCESS) printf("Error in seting arguments\n");
// Execute the OpenCL kernel
errcode = clEnqueueNDRangeKernel(clCommandQue, clKernel1, 2, NULL, globalWorkSize, localWorkSize, 0, NULL, NULL);
if(errcode != CL_SUCCESS) printf("Error in launching kernel\n");
clFinish(clCommandQue);
}
void cl_launch_kernel2(int n)
{
size_t localWorkSize[2], globalWorkSize[2];
localWorkSize[0] = DIM_LOCAL_WORK_GROUP_X;
localWorkSize[1] = DIM_LOCAL_WORK_GROUP_Y;
globalWorkSize[0] = N;
globalWorkSize[1] = N;
// Set the arguments of the kernel
errcode = clSetKernelArg(clKernel2, 0, sizeof(cl_mem), (void *)&a_mem_obj);
errcode |= clSetKernelArg(clKernel2, 1, sizeof(cl_mem), (void *)&b_mem_obj);
errcode |= clSetKernelArg(clKernel2, 2, sizeof(int), (void *)&n);
if(errcode != CL_SUCCESS) printf("Error in seting arguments\n");
// Execute the OpenCL kernel
errcode = clEnqueueNDRangeKernel(clCommandQue, clKernel2, 2, NULL, globalWorkSize, localWorkSize, 0, NULL, NULL);
if(errcode != CL_SUCCESS) printf("Error in launching kernel\n");
clFinish(clCommandQue);
}
void cl_launch_kernels()
{
size_t localWorkSize[2], globalWorkSize[2];
localWorkSize[0] = DIM_LOCAL_WORK_GROUP_X;
localWorkSize[1] = DIM_LOCAL_WORK_GROUP_Y;
globalWorkSize[0] = N;
globalWorkSize[1] = N;
int t;
for (t = 0; t < TSTEPS ; t++)
{
// Execute the OpenCL kernel
errcode = clEnqueueNDRangeKernel(clCommandQue, clKernel1, 2, NULL, globalWorkSize, localWorkSize, 0, NULL, NULL);
if(errcode != CL_SUCCESS) printf("Error in launching kernel\n");
clFinish(clCommandQue);
// Execute the OpenCL kernel
errcode = clEnqueueNDRangeKernel(clCommandQue, clKernel2, 2, NULL, globalWorkSize, localWorkSize, 0, NULL, NULL);
if(errcode != CL_SUCCESS) printf("Error in launching kernel\n");
clFinish(clCommandQue);
}
}
void cl_clean_up()
{
// Clean up
errcode = clFlush(clCommandQue);
errcode = clFinish(clCommandQue);
errcode = clReleaseKernel(clKernel1);
errcode = clReleaseKernel(clKernel2);
errcode = clReleaseProgram(clProgram);
errcode = clReleaseMemObject(a_mem_obj);
errcode = clReleaseMemObject(b_mem_obj);
errcode = clReleaseCommandQueue(clCommandQue);
errcode = clReleaseContext(clGPUContext);
if(errcode != CL_SUCCESS) printf("Error in cleanup\n");
}
void runJacobi2DCpu(int tsteps, int n, DATA_TYPE POLYBENCH_2D(A,N,N,n,n), DATA_TYPE POLYBENCH_2D(B,N,N,n,n))
{
int t, i, j;
for (t = 0; t < _PB_TSTEPS; t++)
{
for (i = 1; i < _PB_N - 1; i++)
{
for (j = 1; j < _PB_N - 1; j++)
{
B[i][j] = 0.2f * (A[i][j] + A[i][(j-1)] + A[i][(1+j)] + A[(1+i)][j] + A[(i-1)][j]);
}
}
for (i = 1; i < _PB_N-1; i++)
{
for (j = 1; j < _PB_N-1; j++)
{
A[i][j] = B[i][j];
}
}
}
}
/* DCE code. Must scan the entire live-out data.
Can be used also to check the correctness of the output. */
static
void print_array(int n,
DATA_TYPE POLYBENCH_2D(A,N,N,n,n))
{
int i, j;
for (i = 0; i < n; i++)
for (j = 0; j < n; j++) {
fprintf(stderr, DATA_PRINTF_MODIFIER, A[i][j]);
if ((i * n + j) % 20 == 0) fprintf(stderr, "\n");
}
fprintf(stderr, "\n");
}
int main(int argc, char *argv[])
{
/* Retrieve problem size. */
int n = N;
int tsteps = TSTEPS;
POLYBENCH_2D_ARRAY_DECL(a,DATA_TYPE,N,N,n,n);
POLYBENCH_2D_ARRAY_DECL(b,DATA_TYPE,N,N,n,n);
POLYBENCH_2D_ARRAY_DECL(a_outputFromGpu,DATA_TYPE,N,N,n,n);
POLYBENCH_2D_ARRAY_DECL(b_outputFromGpu,DATA_TYPE,N,N,n,n);
init_array(n, POLYBENCH_ARRAY(a), POLYBENCH_ARRAY(b));
read_cl_file();
cl_initialization();
cl_mem_init(POLYBENCH_ARRAY(a), POLYBENCH_ARRAY(b));
cl_load_prog();
/* Start timer. */
polybench_start_instruments;
int t;
for (t = 0; t < _PB_TSTEPS ; t++)
{
cl_launch_kernel1(n);
cl_launch_kernel2(n);
}
/* Stop and print timer. */
printf("GPU Time in seconds:\n");
polybench_stop_instruments;
polybench_print_instruments;
errcode = clEnqueueReadBuffer(clCommandQue, a_mem_obj, CL_TRUE, 0, N * N * sizeof(DATA_TYPE), POLYBENCH_ARRAY(a_outputFromGpu), 0, NULL, NULL);
errcode = clEnqueueReadBuffer(clCommandQue, b_mem_obj, CL_TRUE, 0, N * N * sizeof(DATA_TYPE), POLYBENCH_ARRAY(b_outputFromGpu), 0, NULL, NULL);
if(errcode != CL_SUCCESS) printf("Error in reading GPU mem\n");
#ifdef RUN_ON_CPU
/* Start timer. */
polybench_start_instruments;
runJacobi2DCpu(tsteps, n, POLYBENCH_ARRAY(a), POLYBENCH_ARRAY(b));
/* Stop and print timer. */
printf("CPU Time in seconds:\n");
polybench_stop_instruments;
polybench_print_instruments;
compareResults(n, POLYBENCH_ARRAY(a), POLYBENCH_ARRAY(a_outputFromGpu), POLYBENCH_ARRAY(b), POLYBENCH_ARRAY(b_outputFromGpu));
#else //prevent dead code elimination
polybench_prevent_dce(print_array(n, POLYBENCH_ARRAY(a_outputFromGpu)));
#endif //RUN_ON_CPU
cl_clean_up();
POLYBENCH_FREE_ARRAY(a);
POLYBENCH_FREE_ARRAY(a_outputFromGpu);
POLYBENCH_FREE_ARRAY(b);
POLYBENCH_FREE_ARRAY(b_outputFromGpu);
return 0;
}
}

View File

@@ -0,0 +1,41 @@
/**
* jacobi2D.cl: This file is part of the PolyBench/GPU 1.0 test suite.
*
*
* Contact: Scott Grauer-Gray <sgrauerg@gmail.com>
* Will Killian <killian@udel.edu>
* Louis-Noel Pouchet <pouchet@cse.ohio-state.edu>
* Web address: http://www.cse.ohio-state.edu/~pouchet/software/polybench/GPU
*/
#if defined(cl_khr_fp64) // Khronos extension available?
#pragma OPENCL EXTENSION cl_khr_fp64 : enable
#elif defined(cl_amd_fp64) // AMD extension available?
#pragma OPENCL EXTENSION cl_amd_fp64 : enable
#endif
typedef float DATA_TYPE;
__kernel void runJacobi2D_kernel1(__global DATA_TYPE* A, __global DATA_TYPE* B, int n)
{
int i = get_global_id(1);
int j = get_global_id(0);
if ((i >= 1) && (i < (n-1)) && (j >= 1) && (j < (n-1)))
{
B[i*n + j] = 0.2f * (A[i*n + j] + A[i*n + (j-1)] + A[i*n + (1 + j)] + A[(1 + i)*n + j]
+ A[(i-1)*n + j]);
}
}
__kernel void runJacobi2D_kernel2(__global DATA_TYPE* A, __global DATA_TYPE* B, int n)
{
int i = get_global_id(1);
int j = get_global_id(0);
if ((i >= 1) && (i < (n-1)) && (j >= 1) && (j < (n-1)))
{
A[i*n + j] = B[i*n + j];
}
}

View File

@@ -0,0 +1,61 @@
/**
* jacobi2D.h: This file is part of the PolyBench/GPU 1.0 test suite.
*
*
* Contact: Scott Grauer-Gray <sgrauerg@gmail.com>
* Will Killian <killian@udel.edu>
* Louis-Noel Pouchet <pouchet@cse.ohio-state.edu>
* Web address: http://www.cse.ohio-state.edu/~pouchet/software/polybench/GPU
*/
#ifndef JACOBI2D_H
# define JACOBI2D_H
/* Default to STANDARD_DATASET. */
# if !defined(MINI_DATASET) && !defined(SMALL_DATASET) && !defined(LARGE_DATASET) && !defined(EXTRALARGE_DATASET)
# define MINI_DATASET
# endif
/* Do not define anything if the user manually defines the size. */
# if !defined(TSTEPS) && !defined(N)
/* Define the possible dataset sizes. */
# ifdef MINI_DATASET
#define TSTEPS 20
#define N 256
# endif
# ifdef SMALL_DATASET
#define TSTEPS 20
#define N 512
# endif
# ifdef STANDARD_DATASET /* Default if unspecified. */
#define TSTEPS 20
#define N 1024
# endif
# ifdef LARGE_DATASET
#define TSTEPS 20
#define N 2048
# endif
# ifdef EXTRALARGE_DATASET
#define TSTEPS 20
#define N 4096
# endif
# endif /* !N */
# define _PB_TSTEPS POLYBENCH_LOOP_BOUND(TSTEPS,tsteps)
# define _PB_N POLYBENCH_LOOP_BOUND(N,n)
# ifndef DATA_TYPE
# define DATA_TYPE float
# define DATA_PRINTF_MODIFIER "%0.2lf "
# endif
/* Thread block dimensions */
#define DIM_LOCAL_WORK_GROUP_X 32
#define DIM_LOCAL_WORK_GROUP_Y 8
#endif /* !JACOBI2D*/

View File

@@ -0,0 +1,410 @@
unsigned char jacobi2D_Gen9core_gen[] = {
0x43, 0x54, 0x4e, 0x49, 0x39, 0x04, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x96, 0x79, 0x15, 0x7c, 0xd1, 0x55, 0x0f, 0x5c,
0xe6, 0x50, 0x9d, 0x95, 0x14, 0x00, 0x00, 0x00, 0x98, 0x04, 0x00, 0x00,
0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
0x88, 0x00, 0x00, 0x00, 0x58, 0x04, 0x00, 0x00, 0x72, 0x75, 0x6e, 0x4a,
0x61, 0x63, 0x6f, 0x62, 0x69, 0x32, 0x44, 0x5f, 0x6b, 0x65, 0x72, 0x6e,
0x65, 0x6c, 0x31, 0x00, 0x01, 0x00, 0x60, 0x00, 0x0c, 0x02, 0xa0, 0x20,
0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x80, 0x00, 0x00,
0x04, 0x00, 0x00, 0x30, 0x00, 0x10, 0x00, 0x16, 0xc0, 0x04, 0xc0, 0x04,
0x41, 0x00, 0x00, 0x00, 0x2c, 0x0a, 0xc0, 0x20, 0x24, 0x01, 0x00, 0x0a,
0xb8, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x2c, 0x0a, 0xc4, 0x20,
0x20, 0x01, 0x00, 0x0a, 0xa4, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
0x2c, 0x0a, 0xc8, 0x20, 0x10, 0x01, 0x00, 0x1e, 0xff, 0xff, 0xff, 0xff,
0x01, 0x00, 0x00, 0x00, 0x4c, 0x16, 0xcc, 0x20, 0x00, 0x00, 0x00, 0x00,
0x01, 0x00, 0x01, 0x00, 0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x21,
0xc0, 0x00, 0x00, 0x12, 0x80, 0x00, 0xb1, 0x00, 0x40, 0x00, 0x80, 0x00,
0x28, 0x0a, 0x40, 0x21, 0xc0, 0x00, 0x00, 0x12, 0x60, 0x00, 0xb1, 0x00,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x22, 0xc4, 0x00, 0x00, 0x12,
0x40, 0x00, 0xb1, 0x00, 0x40, 0x00, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x22,
0xc4, 0x00, 0x00, 0x12, 0x20, 0x00, 0xb1, 0x00, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x00, 0x22, 0x80, 0x01, 0x8d, 0x0a, 0xe4, 0x00, 0x00, 0x00,
0x40, 0x96, 0x2d, 0x20, 0x07, 0x0e, 0x0a, 0x07, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x00, 0x23, 0x80, 0x02, 0x8d, 0x0a, 0xe0, 0x00, 0x00, 0x00,
0x40, 0x96, 0x01, 0x20, 0x07, 0x16, 0x12, 0x07, 0x10, 0x20, 0x80, 0x05,
0x22, 0x0a, 0x00, 0x20, 0x00, 0x02, 0x8d, 0x0a, 0xc8, 0x00, 0x00, 0x00,
0x10, 0x16, 0x5f, 0x25, 0x07, 0x00, 0x0e, 0x06, 0x10, 0x20, 0x80, 0x05,
0x20, 0x0a, 0x00, 0x20, 0x00, 0x03, 0x8d, 0x0a, 0xc8, 0x00, 0x00, 0x00,
0x10, 0x20, 0x81, 0x03, 0x22, 0x0a, 0x00, 0x20, 0x00, 0x02, 0x8d, 0x1e,
0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x81, 0x03, 0x20, 0x0a, 0x00, 0x20,
0xc0, 0x01, 0x8d, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x81, 0x00,
0x48, 0x12, 0x40, 0x2a, 0xcc, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x00,
0x10, 0x20, 0x81, 0x03, 0x22, 0x0a, 0x00, 0x20, 0x00, 0x03, 0x8d, 0x1e,
0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x81, 0x03, 0x20, 0x0a, 0x00, 0x20,
0xc0, 0x02, 0x8d, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x81, 0x00,
0x4a, 0x12, 0x60, 0x2a, 0xcc, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x00,
0x10, 0x19, 0x5f, 0x25, 0x07, 0x00, 0x16, 0x06, 0x05, 0x20, 0x80, 0x02,
0x40, 0x12, 0x00, 0x20, 0x40, 0x0a, 0xb1, 0x12, 0x60, 0x0a, 0xb1, 0x00,
0x22, 0x00, 0xa1, 0x00, 0x00, 0x0e, 0x00, 0x20, 0xc0, 0x02, 0x00, 0x00,
0xc0, 0x02, 0x00, 0x00, 0x41, 0x96, 0x6d, 0x20, 0x07, 0x1a, 0x0e, 0x08,
0x41, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x23, 0x00, 0x02, 0x8d, 0x0a,
0x10, 0x01, 0x00, 0x00, 0x40, 0x00, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x27,
0xc0, 0x01, 0x8d, 0x1e, 0x01, 0x00, 0x01, 0x00, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x80, 0x27, 0x00, 0x02, 0x8d, 0x1e, 0x01, 0x00, 0x01, 0x00,
0x40, 0x96, 0x01, 0x20, 0xe7, 0x1a, 0x1a, 0x16, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x80, 0x23, 0x80, 0x03, 0x8d, 0x0a, 0x00, 0x03, 0x8d, 0x00,
0x40, 0x00, 0x80, 0x00, 0x28, 0x0a, 0xc0, 0x28, 0xc0, 0x01, 0x8d, 0x1e,
0xff, 0xff, 0xff, 0xff, 0x41, 0x96, 0x6d, 0x20, 0x07, 0x3a, 0x3a, 0x08,
0x09, 0x00, 0x80, 0x00, 0x28, 0x0a, 0xc0, 0x23, 0x40, 0x03, 0x8d, 0x1e,
0x02, 0x00, 0x02, 0x00, 0x09, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x00, 0x24,
0x80, 0x03, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x00, 0x29, 0x00, 0x02, 0x8d, 0x1e, 0xff, 0xff, 0xff, 0xff,
0x41, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x27, 0x80, 0x07, 0x8d, 0x0a,
0x10, 0x01, 0x00, 0x00, 0x40, 0x96, 0x71, 0x20, 0x07, 0x22, 0x1e, 0x08,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x24, 0x00, 0x04, 0x8d, 0x0a,
0x14, 0x01, 0x00, 0x00, 0x41, 0x96, 0x6d, 0x20, 0x07, 0x46, 0x46, 0x08,
0x40, 0x96, 0x01, 0x20, 0xe7, 0x3a, 0x3a, 0x16, 0x40, 0x00, 0x80, 0x00,
0x28, 0x0a, 0x40, 0x24, 0x40, 0x04, 0x8d, 0x1e, 0xfc, 0xff, 0xfc, 0xff,
0x41, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x00, 0x29, 0x00, 0x09, 0x8d, 0x0a,
0x10, 0x01, 0x00, 0x00, 0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x27,
0x80, 0x07, 0x8d, 0x0a, 0x00, 0x03, 0x8d, 0x00, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x80, 0x24, 0x80, 0x04, 0x8d, 0x1e, 0xfc, 0xff, 0xfc, 0xff,
0x31, 0x00, 0x80, 0x0c, 0x68, 0x02, 0xc0, 0x24, 0x40, 0x04, 0x00, 0x06,
0x00, 0x58, 0x60, 0x04, 0x40, 0x96, 0x01, 0x20, 0xe7, 0x46, 0x46, 0x16,
0x09, 0x00, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x27, 0x40, 0x07, 0x8d, 0x1e,
0x02, 0x00, 0x02, 0x00, 0x31, 0x20, 0x80, 0x0c, 0x68, 0x02, 0x80, 0x25,
0x80, 0x04, 0x00, 0x06, 0x00, 0x58, 0x60, 0x04, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x00, 0x29, 0x00, 0x09, 0x8d, 0x0a, 0x00, 0x03, 0x8d, 0x00,
0x09, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x27, 0x80, 0x07, 0x8d, 0x1e,
0x02, 0x00, 0x02, 0x00, 0x09, 0x00, 0x80, 0x00, 0x28, 0x0a, 0xc0, 0x28,
0xc0, 0x08, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00, 0x40, 0x96, 0x71, 0x20,
0x07, 0x3a, 0x3a, 0x08, 0x09, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x00, 0x29,
0x00, 0x09, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x80, 0x27, 0x80, 0x07, 0x8d, 0x0a, 0x14, 0x01, 0x00, 0x00,
0x40, 0x96, 0x71, 0x20, 0x07, 0x46, 0x46, 0x08, 0x31, 0x00, 0x80, 0x0c,
0x68, 0x02, 0xc0, 0x27, 0x40, 0x07, 0x00, 0x06, 0x00, 0x5e, 0x20, 0x04,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x00, 0x29, 0x00, 0x09, 0x8d, 0x0a,
0x14, 0x01, 0x00, 0x00, 0x31, 0x20, 0x80, 0x0c, 0x68, 0x02, 0x00, 0x28,
0x80, 0x07, 0x00, 0x06, 0x00, 0x5e, 0x20, 0x04, 0x40, 0x96, 0x75, 0x20,
0x07, 0x4e, 0x1e, 0x08, 0x31, 0x00, 0x80, 0x0c, 0x68, 0x02, 0x40, 0x29,
0xc0, 0x08, 0x00, 0x06, 0x00, 0x5e, 0x20, 0x04, 0x31, 0x20, 0x80, 0x0c,
0x68, 0x02, 0x80, 0x29, 0x00, 0x09, 0x00, 0x06, 0x00, 0x5e, 0x20, 0x04,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x00, 0x2a, 0x00, 0x04, 0x8d, 0x0a,
0x18, 0x01, 0x00, 0x00, 0x40, 0x56, 0x02, 0x20, 0xe7, 0x32, 0x28, 0x26,
0x40, 0x20, 0x80, 0x00, 0xe8, 0x3a, 0x80, 0x26, 0xc0, 0x05, 0x8d, 0x3a,
0x80, 0x05, 0x8d, 0x00, 0x40, 0x56, 0x02, 0x20, 0xe7, 0x36, 0x32, 0x2a,
0x40, 0x20, 0x80, 0x00, 0xe8, 0x3a, 0x00, 0x27, 0x80, 0x06, 0x8d, 0x3a,
0x00, 0x06, 0x8d, 0x00, 0x40, 0x56, 0x02, 0x20, 0xe7, 0x42, 0x36, 0x3e,
0x40, 0x20, 0x80, 0x00, 0xe8, 0x3a, 0x80, 0x28, 0x00, 0x07, 0x8d, 0x3a,
0x00, 0x08, 0x8d, 0x00, 0x40, 0x56, 0x02, 0x20, 0xe7, 0x4a, 0x42, 0x4a,
0x40, 0x20, 0x80, 0x00, 0xe8, 0x3a, 0x80, 0x29, 0x80, 0x08, 0x8d, 0x3a,
0x80, 0x09, 0x8d, 0x00, 0x41, 0x00, 0x80, 0x00, 0xe8, 0x3a, 0x40, 0x29,
0x40, 0x09, 0x8d, 0x3e, 0xcd, 0xcc, 0x4c, 0x3e, 0x41, 0x20, 0x80, 0x00,
0xe8, 0x3a, 0x80, 0x29, 0x80, 0x09, 0x8d, 0x3e, 0xcd, 0xcc, 0x4c, 0x3e,
0x33, 0x00, 0x80, 0x0c, 0x70, 0xa0, 0x04, 0x00, 0xc2, 0x09, 0x00, 0x00,
0x01, 0x5e, 0x02, 0x04, 0x33, 0x20, 0x80, 0x0c, 0x70, 0xc0, 0x04, 0x00,
0x02, 0x0a, 0x00, 0x00, 0x01, 0x5e, 0x02, 0x04, 0x25, 0x00, 0xa0, 0x00,
0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x0e, 0x10, 0x00, 0x00, 0x00,
0x01, 0x4d, 0x00, 0x20, 0x07, 0x7f, 0x05, 0x00, 0x31, 0x00, 0x60, 0x07,
0x04, 0x02, 0x00, 0x20, 0xe0, 0x0f, 0x00, 0x06, 0x10, 0x00, 0x00, 0x82,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x83,
0x00, 0x00, 0x00, 0x03, 0x7f, 0x00, 0xff, 0x1f, 0x00, 0x00, 0xe0, 0x0f,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xc0, 0xff, 0x83, 0x00, 0x00, 0x00, 0x03, 0x7f, 0x00, 0xff, 0x1f,
0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
0x13, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x15, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x20, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x38, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x48, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x1e, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
0x1e, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x40, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x60, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00,
0x8c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00,
0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c,
0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x41, 0x00, 0x00, 0x00, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50,
0x45, 0x2a, 0x3b, 0x38, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x5f, 0x5f, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x00, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00,
0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x2a, 0x3b, 0x38,
0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x1a, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x70, 0x72,
0x69, 0x76, 0x61, 0x74, 0x65, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x69, 0x6e, 0x74, 0x3b,
0x34, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0xb9, 0x02, 0xd0, 0x72, 0xd1, 0x55, 0x0f, 0x5c, 0xe6, 0x50, 0x9d, 0x95,
0x14, 0x00, 0x00, 0x00, 0x98, 0x04, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00,
0x68, 0x02, 0x00, 0x00, 0x72, 0x75, 0x6e, 0x4a, 0x61, 0x63, 0x6f, 0x62,
0x69, 0x32, 0x44, 0x5f, 0x6b, 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x32, 0x00,
0x01, 0x00, 0x60, 0x00, 0x0c, 0x02, 0xa0, 0x20, 0x00, 0x00, 0x20, 0x00,
0x00, 0x00, 0x00, 0x00, 0x06, 0x80, 0x00, 0x00, 0x04, 0x00, 0x00, 0x30,
0x00, 0x10, 0x00, 0x16, 0xc0, 0x04, 0xc0, 0x04, 0x41, 0x00, 0x00, 0x00,
0x2c, 0x0a, 0xc0, 0x20, 0x24, 0x01, 0x00, 0x0a, 0xb8, 0x00, 0x00, 0x00,
0x41, 0x00, 0x00, 0x00, 0x2c, 0x0a, 0xc4, 0x20, 0x20, 0x01, 0x00, 0x0a,
0xa4, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x2c, 0x0a, 0xc8, 0x20,
0x10, 0x01, 0x00, 0x1e, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00,
0x4c, 0x16, 0xcc, 0x20, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x21, 0xc0, 0x00, 0x00, 0x12,
0x80, 0x00, 0xb1, 0x00, 0x40, 0x00, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x21,
0xc0, 0x00, 0x00, 0x12, 0x60, 0x00, 0xb1, 0x00, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x80, 0x22, 0xc4, 0x00, 0x00, 0x12, 0x40, 0x00, 0xb1, 0x00,
0x40, 0x00, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x22, 0xc4, 0x00, 0x00, 0x12,
0x20, 0x00, 0xb1, 0x00, 0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x00, 0x22,
0x80, 0x01, 0x8d, 0x0a, 0xe4, 0x00, 0x00, 0x00, 0x40, 0x96, 0x2d, 0x20,
0x07, 0x0e, 0x0a, 0x07, 0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x00, 0x23,
0x80, 0x02, 0x8d, 0x0a, 0xe0, 0x00, 0x00, 0x00, 0x40, 0x96, 0x01, 0x20,
0x07, 0x16, 0x12, 0x07, 0x10, 0x20, 0x80, 0x05, 0x22, 0x0a, 0x00, 0x20,
0x00, 0x02, 0x8d, 0x0a, 0xc8, 0x00, 0x00, 0x00, 0x10, 0x16, 0x5f, 0x25,
0x07, 0x00, 0x0e, 0x06, 0x10, 0x20, 0x80, 0x05, 0x20, 0x0a, 0x00, 0x20,
0x00, 0x03, 0x8d, 0x0a, 0xc8, 0x00, 0x00, 0x00, 0x10, 0x20, 0x81, 0x03,
0x22, 0x0a, 0x00, 0x20, 0x00, 0x02, 0x8d, 0x1e, 0x00, 0x00, 0x00, 0x00,
0x10, 0x00, 0x81, 0x03, 0x20, 0x0a, 0x00, 0x20, 0xc0, 0x01, 0x8d, 0x1e,
0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x81, 0x00, 0x48, 0x12, 0xc0, 0x24,
0xcc, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x00, 0x10, 0x20, 0x81, 0x03,
0x22, 0x0a, 0x00, 0x20, 0x00, 0x03, 0x8d, 0x1e, 0x00, 0x00, 0x00, 0x00,
0x10, 0x00, 0x81, 0x03, 0x20, 0x0a, 0x00, 0x20, 0xc0, 0x02, 0x8d, 0x1e,
0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x81, 0x00, 0x4a, 0x12, 0xe0, 0x24,
0xcc, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x00, 0x10, 0x19, 0x5f, 0x25,
0x07, 0x00, 0x16, 0x06, 0x05, 0x20, 0x80, 0x02, 0x40, 0x12, 0x00, 0x20,
0xc0, 0x04, 0xb1, 0x12, 0xe0, 0x04, 0xb1, 0x00, 0x22, 0x00, 0xa1, 0x00,
0x00, 0x0e, 0x00, 0x20, 0xd0, 0x00, 0x00, 0x00, 0xd0, 0x00, 0x00, 0x00,
0x41, 0x96, 0x6d, 0x20, 0x07, 0x1a, 0x0e, 0x08, 0x41, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x80, 0x23, 0x00, 0x02, 0x8d, 0x0a, 0x10, 0x01, 0x00, 0x00,
0x40, 0x96, 0x01, 0x20, 0xe7, 0x1a, 0x1a, 0x16, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x80, 0x23, 0x80, 0x03, 0x8d, 0x0a, 0x00, 0x03, 0x8d, 0x00,
0x09, 0x00, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x23, 0x40, 0x03, 0x8d, 0x1e,
0x02, 0x00, 0x02, 0x00, 0x09, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x23,
0x80, 0x03, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00, 0x40, 0x96, 0x75, 0x20,
0x07, 0x1e, 0x1a, 0x08, 0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x00, 0x24,
0x80, 0x03, 0x8d, 0x0a, 0x18, 0x01, 0x00, 0x00, 0x40, 0x96, 0x71, 0x20,
0x07, 0x1a, 0x1a, 0x08, 0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x23,
0x80, 0x03, 0x8d, 0x0a, 0x14, 0x01, 0x00, 0x00, 0x31, 0x00, 0x80, 0x0c,
0x68, 0x02, 0x40, 0x24, 0xc0, 0x03, 0x00, 0x06, 0x01, 0x5e, 0x20, 0x04,
0x31, 0x20, 0x80, 0x0c, 0x68, 0x02, 0x80, 0x24, 0x00, 0x04, 0x00, 0x06,
0x01, 0x5e, 0x20, 0x04, 0x33, 0x00, 0x80, 0x0c, 0x70, 0x20, 0x02, 0x00,
0x42, 0x03, 0x00, 0x00, 0x00, 0x5e, 0x02, 0x04, 0x33, 0x20, 0x80, 0x0c,
0x70, 0x40, 0x02, 0x00, 0x82, 0x03, 0x00, 0x00, 0x00, 0x5e, 0x02, 0x04,
0x25, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x0e,
0x10, 0x00, 0x00, 0x00, 0x01, 0x4d, 0x00, 0x20, 0x07, 0x7f, 0x05, 0x00,
0x31, 0x00, 0x60, 0x07, 0x04, 0x02, 0x00, 0x20, 0xe0, 0x0f, 0x00, 0x06,
0x10, 0x00, 0x00, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x83,
0x00, 0x00, 0x00, 0x03, 0x7f, 0x00, 0xff, 0x1f, 0x00, 0x00, 0xe0, 0x0f,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xc0, 0xff, 0x83, 0x00, 0x00, 0x00, 0x03, 0x7f, 0x00, 0xff, 0x1f,
0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
0x13, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x15, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x20, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x38, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x48, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x1e, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
0x1e, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x40, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x60, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00,
0x8c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00,
0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c,
0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x41, 0x00, 0x00, 0x00, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50,
0x45, 0x2a, 0x3b, 0x38, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x5f, 0x5f, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x00, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00,
0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x2a, 0x3b, 0x38,
0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x1a, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x70, 0x72,
0x69, 0x76, 0x61, 0x74, 0x65, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x69, 0x6e, 0x74, 0x3b,
0x34, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00
};
unsigned int jacobi2D_Gen9core_gen_len = 4884;

View File

@@ -0,0 +1,350 @@
/**
* lu.c: This file is part of the PolyBench/GPU 1.0 test suite.
*
*
* Contact: Scott Grauer-Gray <sgrauerg@gmail.com>
* Will Killian <killian@udel.edu>
* Louis-Noel Pouchet <pouchet@cse.ohio-state.edu>
* Web address: http://www.cse.ohio-state.edu/~pouchet/software/polybench/GPU
*/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <sys/time.h>
#include <math.h>
#ifdef __APPLE__
#include <OpenCL/opencl.h>
#else
#include "../../CL/cl.h"
#endif
#define POLYBENCH_TIME 1
//select the OpenCL device to use (can be GPU, CPU, or Accelerator such as Intel Xeon Phi)
#define OPENCL_DEVICE_SELECTION CL_DEVICE_TYPE_GPU
#include "lu.h"
#include "../../polybench.h"
//define the error threshold for the results "not matching"
#define PERCENT_DIFF_ERROR_THRESHOLD 0.05
#define MAX_SOURCE_SIZE (0x100000)
#if defined(cl_khr_fp64) // Khronos extension available?
#pragma OPENCL EXTENSION cl_khr_fp64 : enable
#elif defined(cl_amd_fp64) // AMD extension available?
#pragma OPENCL EXTENSION cl_amd_fp64 : enable
#endif
namespace ns_lu {
#include "../../polybenchUtilFuncts.h"
#include "lu_kernel.h"
char str_temp[1024];
cl_platform_id platform_id;
cl_device_id device_id;
cl_uint num_devices;
cl_uint num_platforms;
cl_int errcode;
cl_context clGPUContext;
cl_kernel clKernel1;
cl_kernel clKernel2;
cl_command_queue clCommandQue;
cl_program clProgram;
cl_mem a_mem_obj;
FILE *fp;
char *source_str;
size_t source_size;
#define RUN_ON_CPU
void compareResults(int n, DATA_TYPE POLYBENCH_2D(A_cpu,N,N,n,n), DATA_TYPE POLYBENCH_2D(A_outputFromGpu,N,N,n,n))
{
int i, j, fail;
fail = 0;
// Compare a and b
for (i=0; i<n; i++)
{
for (j=0; j<n; j++)
{
if (percentDiff(A_cpu[i][j], A_outputFromGpu[i][j]) > PERCENT_DIFF_ERROR_THRESHOLD)
{
fail++;
}
}
}
// Print results
printf("Non-Matching CPU-GPU Outputs Beyond Error Threshold of %4.2f Percent: %d\n", PERCENT_DIFF_ERROR_THRESHOLD, fail);
}
void read_cl_file()
{
// Load the kernel source code into the array source_str
// fp = fopen("lu.cl", "r");
// if (!fp) {
// fprintf(stderr, "Failed to load kernel.\n");
// exit(1);
// }
// source_str = (char*)malloc(MAX_SOURCE_SIZE);
// source_size = fread( source_str, 1, MAX_SOURCE_SIZE, fp);
// fclose( fp );
}
void init_array(int n, DATA_TYPE POLYBENCH_2D(A,N,N,n,n))
{
int i, j;
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
{
A[i][j] = ((DATA_TYPE) i*j + 1) / N;
}
}
}
void cl_initialization()
{
// Get platform and device information
errcode = clGetPlatformIDs(1, &platform_id, &num_platforms);
if(errcode == CL_SUCCESS) printf("number of platforms is %d\n",num_platforms);
errcode = clGetPlatformInfo(platform_id,CL_PLATFORM_NAME, sizeof(str_temp), str_temp,NULL);
if(errcode == CL_SUCCESS) printf("platform name is %s\n",str_temp);
errcode = clGetPlatformInfo(platform_id, CL_PLATFORM_VERSION, sizeof(str_temp), str_temp,NULL);
if(errcode == CL_SUCCESS) printf("platform version is %s\n",str_temp);
errcode = clGetDeviceIDs( platform_id, OPENCL_DEVICE_SELECTION, 1, &device_id, &num_devices);
if(errcode == CL_SUCCESS) printf("device id is %d\n",device_id);
errcode = clGetDeviceInfo(device_id,CL_DEVICE_NAME, sizeof(str_temp), str_temp,NULL);
if(errcode == CL_SUCCESS) printf("device name is %s\n",str_temp);
// Create an OpenCL context
clGPUContext = clCreateContext( NULL, 1, &device_id, NULL, NULL, &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating context\n");
//Create a command-queue
clCommandQue = clCreateCommandQueue(clGPUContext, device_id, 0, &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating command queue\n");
}
void cl_mem_init(DATA_TYPE POLYBENCH_2D(A,N,N,n,n))
{
size_t mem_size_A = N*N*sizeof(DATA_TYPE);
a_mem_obj = clCreateBuffer(clGPUContext, CL_MEM_READ_WRITE, mem_size_A, NULL, &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating buffers\n");
errcode = clEnqueueWriteBuffer(clCommandQue, a_mem_obj, CL_TRUE, 0, mem_size_A, A, 0, NULL, NULL);
if(errcode != CL_SUCCESS)printf("Error in writing buffers\n");
}
void cl_load_prog()
{
// Create a program from the kernel source
const size_t kernel_size = lu_Gen9core_gen_len;
const unsigned char* kernel_bin = lu_Gen9core_gen;
clProgram = clCreateProgramWithBinary(clGPUContext, 1, &device_id, &kernel_size, &kernel_bin, NULL, &errcode);
// clProgram = clCreateProgramWithSource(clGPUContext, 1, (const char **)&source_str, (const size_t *)&source_size, &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating program\n");
// Build the program
errcode = clBuildProgram(clProgram, 1, &device_id, NULL, NULL, NULL);
if(errcode != CL_SUCCESS) printf("Error in building program\n");
// Create the OpenCL kernel
clKernel1 = clCreateKernel(clProgram, "lu_kernel1", &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating kernel1\n");
clKernel2 = clCreateKernel(clProgram, "lu_kernel2", &errcode);
if(errcode != CL_SUCCESS) printf("Error in creating kernel2\n");
clFinish(clCommandQue);
}
void cl_launch_kernel1(int k, int n)
{
if (k < (_PB_N-1))
{
size_t localWorkSize[2], globalWorkSize[2];
localWorkSize[0] = 256;
localWorkSize[1] = 1;
globalWorkSize[0] = (size_t)ceil(((double)N - (double)(k + 1)) / 256.0) * 256;
globalWorkSize[1] = 1;
// Set the arguments of the kernel
errcode = clSetKernelArg(clKernel1, 0, sizeof(cl_mem), (void *)&a_mem_obj);
errcode |= clSetKernelArg(clKernel1, 1, sizeof(int), (void *)&k);
errcode |= clSetKernelArg(clKernel1, 2, sizeof(int), (void *)&n);
if(errcode != CL_SUCCESS) printf("Error in seting arguments\n");
// Execute the OpenCL kernel
errcode = clEnqueueNDRangeKernel(clCommandQue, clKernel1, 2, NULL, globalWorkSize, localWorkSize, 0, NULL, NULL);
if(errcode != CL_SUCCESS) printf("Error in launching kernel\n");
clFinish(clCommandQue);
}
}
void cl_launch_kernel2(int k, int n)
{
if (k < (_PB_N-1))
{
size_t localWorkSize[2], globalWorkSize[2];
localWorkSize[0] = 32;
localWorkSize[1] = 8;
globalWorkSize[0] = (size_t)ceil(((double)N - (double)(k + 1)) / 32.0) * 32;
globalWorkSize[1] = (size_t)ceil(((double)N - (double)(k + 1)) / 8.0) * 8;
// Set the arguments of the kernel
errcode = clSetKernelArg(clKernel2, 0, sizeof(cl_mem), (void *)&a_mem_obj);
errcode |= clSetKernelArg(clKernel2, 1, sizeof(int), (void *)&k);
errcode |= clSetKernelArg(clKernel2, 2, sizeof(int), (void *)&n);
if(errcode != CL_SUCCESS) printf("Error in seting arguments\n");
// Execute the OpenCL kernel
errcode = clEnqueueNDRangeKernel(clCommandQue, clKernel2, 2, NULL, globalWorkSize, localWorkSize, 0, NULL, NULL);
if(errcode != CL_SUCCESS)
{
printf("Error in launching kernel\n");
printf("Nums: %d %d\n", globalWorkSize[0], globalWorkSize[1]);
}
clFinish(clCommandQue);
}
}
void cl_clean_up()
{
// Clean up
errcode = clFlush(clCommandQue);
errcode = clFinish(clCommandQue);
errcode = clReleaseKernel(clKernel1);
errcode = clReleaseKernel(clKernel2);
errcode = clReleaseProgram(clProgram);
errcode = clReleaseMemObject(a_mem_obj);
errcode = clReleaseCommandQueue(clCommandQue);
errcode = clReleaseContext(clGPUContext);
if(errcode != CL_SUCCESS) printf("Error in cleanup\n");
}
void lu(int n, DATA_TYPE POLYBENCH_2D(A,N,N,n,n))
{
int i, j, k;
for (k = 0; k < _PB_N; k++)
{
for (j = k + 1; j < _PB_N; j++)
{
A[k][j] = A[k][j] / A[k][k];
}
for (i = k + 1; i < _PB_N; i++)
{
for (j = k + 1; j < _PB_N; j++)
{
A[i][j] = A[i][j] - A[i][k] * A[k][j];
}
}
}
}
/* DCE code. Must scan the entire live-out data.
Can be used also to check the correctness of the output. */
static
void print_array(int n,
DATA_TYPE POLYBENCH_2D(A,N,N,n,n))
{
int i, j;
for (i = 0; i < n; i++)
for (j = 0; j < n; j++) {
fprintf (stderr, DATA_PRINTF_MODIFIER, A[i][j]);
if ((i * n + j) % 20 == 0) fprintf (stderr, "\n");
}
fprintf (stderr, "\n");
}
int main(int argc, char *argv[])
{
int n = N;
POLYBENCH_2D_ARRAY_DECL(A,DATA_TYPE,N,N,n,n);
POLYBENCH_2D_ARRAY_DECL(A_outputFromGpu,DATA_TYPE,N,N,n,n);
init_array(n, POLYBENCH_ARRAY(A));
read_cl_file();
cl_initialization();
cl_mem_init(POLYBENCH_ARRAY(A));
cl_load_prog();
/* Start timer. */
polybench_start_instruments;
int k;
for (k = 0; k < _PB_N; k++)
{
cl_launch_kernel1(k, n);
cl_launch_kernel2(k, n);
}
/* Stop and print timer. */
printf("GPU Time in seconds:\n");
polybench_stop_instruments;
polybench_print_instruments;
errcode = clEnqueueReadBuffer(clCommandQue, a_mem_obj, CL_TRUE, 0, N*N*sizeof(DATA_TYPE), POLYBENCH_ARRAY(A_outputFromGpu), 0, NULL, NULL);
if(errcode != CL_SUCCESS) printf("Error in reading GPU mem\n");
#ifdef RUN_ON_CPU
/* Start timer. */
polybench_start_instruments;
lu(n, POLYBENCH_ARRAY(A));
/* Stop and print timer. */
printf("CPU Time in seconds:\n");
polybench_stop_instruments;
polybench_print_instruments;
compareResults(n, POLYBENCH_ARRAY(A), POLYBENCH_ARRAY(A_outputFromGpu));
#else //prevent dead code elimination
polybench_prevent_dce(print_array(n, POLYBENCH_ARRAY(A_outputFromGpu)));
#endif //RUN_ON_CPU
cl_clean_up();
POLYBENCH_FREE_ARRAY(A);
POLYBENCH_FREE_ARRAY(A_outputFromGpu);
return 0;
}
}

View File

@@ -0,0 +1,41 @@
/**
* lu.cl: This file is part of the PolyBench/GPU 1.0 test suite.
*
*
* Contact: Scott Grauer-Gray <sgrauerg@gmail.com>
* Will Killian <killian@udel.edu>
* Louis-Noel Pouchet <pouchet@cse.ohio-state.edu>
* Web address: http://www.cse.ohio-state.edu/~pouchet/software/polybench/GPU
*/
#if defined(cl_khr_fp64) // Khronos extension available?
#pragma OPENCL EXTENSION cl_khr_fp64 : enable
#elif defined(cl_amd_fp64) // AMD extension available?
#pragma OPENCL EXTENSION cl_amd_fp64 : enable
#endif
typedef float DATA_TYPE;
__kernel void lu_kernel1(__global DATA_TYPE *A, int k, int n)
{
int j = get_global_id(0) + (k + 1);
if ((j < n))
{
A[k*n + j] = A[k*n + j] / A[k*n + k];
}
}
__kernel void lu_kernel2(__global DATA_TYPE *A, int k, int n)
{
int j = get_global_id(0) + (k + 1);
int i = get_global_id(1) + (k + 1);
if ((i < n) && (j < n))
{
A[i*n + j] = A[i*n + j] - A[i*n + k] * A[k*n + j];
}
}

View File

@@ -0,0 +1,59 @@
/**
* lu.h: This file is part of the PolyBench/GPU 1.0 test suite.
*
*
* Contact: Scott Grauer-Gray <sgrauerg@gmail.com>
* Will Killian <killian@udel.edu>
* Louis-Noel Pouchet <pouchet@cse.ohio-state.edu>
* Web address: http://www.cse.ohio-state.edu/~pouchet/software/polybench/GPU
*/
#ifndef LU_H
# define LU_H
/* Default to STANDARD_DATASET. */
# if !defined(MINI_DATASET) && !defined(SMALL_DATASET) && !defined(LARGE_DATASET) && !defined(EXTRALARGE_DATASET)
# define MINI_DATASET
# endif
/* Do not define anything if the user manually defines the size. */
# if !defined(N)
/* Define the possible dataset sizes. */
# ifdef MINI_DATASET
#define N 512
# endif
# ifdef SMALL_DATASET
#define N 1024
# endif
# ifdef STANDARD_DATASET /* Default if unspecified. */
#define N 2048
# endif
# ifdef LARGE_DATASET
#define N 4096
# endif
# ifdef EXTRALARGE_DATASET
#define N 8192
# endif
# endif /* !N */
# define _PB_N POLYBENCH_LOOP_BOUND(N,n)
# ifndef DATA_TYPE
# define DATA_TYPE float
# define DATA_PRINTF_MODIFIER "%0.2lf "
# endif
/* Thread block dimensions for kernel 1 */
#define DIM_LOCAL_WORK_GROUP_KERNEL_1_X 256
#define DIM_LOCAL_WORK_GROUP_KERNEL_1_Y 1
/* Thread block dimensions for kernel 2 */
#define DIM_LOCAL_WORK_GROUP_KERNEL_2_X 32
#define DIM_LOCAL_WORK_GROUP_KERNEL_2_Y 8
#endif /* !LU*/

View File

@@ -0,0 +1,346 @@
unsigned char lu_Gen9core_gen[] = {
0x43, 0x54, 0x4e, 0x49, 0x39, 0x04, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xb6, 0x71, 0x36, 0xba, 0x9f, 0xef, 0x13, 0x68,
0xcf, 0x0e, 0xdb, 0x1c, 0x0c, 0x00, 0x00, 0x00, 0x44, 0x04, 0x00, 0x00,
0x80, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
0x44, 0x00, 0x00, 0x00, 0xe8, 0x01, 0x00, 0x00, 0x6c, 0x75, 0x5f, 0x6b,
0x65, 0x72, 0x6e, 0x65, 0x6c, 0x31, 0x00, 0x00, 0x01, 0x00, 0x60, 0x00,
0x0c, 0x02, 0x60, 0x20, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00,
0x06, 0x80, 0x00, 0x00, 0x04, 0x00, 0x00, 0x30, 0x00, 0x10, 0x00, 0x16,
0xc0, 0x04, 0xc0, 0x04, 0x41, 0x00, 0x00, 0x00, 0x2c, 0x0a, 0x80, 0x20,
0x14, 0x01, 0x00, 0x0a, 0x64, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
0x2c, 0x0a, 0x84, 0x20, 0x08, 0x01, 0x00, 0x1e, 0x01, 0x00, 0x01, 0x00,
0x40, 0x00, 0x80, 0x00, 0x28, 0x0a, 0xa0, 0x20, 0x80, 0x00, 0x00, 0x12,
0x20, 0x00, 0xb1, 0x00, 0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x20, 0x21,
0x80, 0x00, 0x00, 0x12, 0x40, 0x00, 0xb1, 0x00, 0x40, 0x96, 0x01, 0x20,
0x07, 0x05, 0x05, 0x07, 0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x20, 0x21,
0x20, 0x01, 0x8d, 0x0a, 0xe0, 0x00, 0x00, 0x00, 0x40, 0x96, 0x2d, 0x20,
0x07, 0x0b, 0x05, 0x04, 0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0xa0, 0x21,
0x20, 0x01, 0x8d, 0x0a, 0x84, 0x00, 0x00, 0x00, 0x10, 0x16, 0x67, 0x25,
0x07, 0x00, 0x0b, 0x08, 0x10, 0x20, 0x80, 0x05, 0x20, 0x0a, 0x00, 0x20,
0xa0, 0x01, 0x8d, 0x0a, 0x0c, 0x01, 0x00, 0x00, 0x22, 0x00, 0xa1, 0x00,
0x00, 0x0e, 0x00, 0x20, 0x18, 0x01, 0x00, 0x00, 0x18, 0x01, 0x00, 0x00,
0x41, 0x00, 0x00, 0x00, 0x2c, 0x0a, 0x88, 0x20, 0x08, 0x01, 0x00, 0x0a,
0x0c, 0x01, 0x00, 0x00, 0x40, 0x96, 0x19, 0x20, 0xe0, 0x0f, 0x04, 0x0b,
0x40, 0x00, 0x00, 0x00, 0x2c, 0x0a, 0x8c, 0x20, 0x88, 0x00, 0x00, 0x0a,
0x08, 0x01, 0x00, 0x00, 0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x20, 0x22,
0x88, 0x00, 0x00, 0x0a, 0xa0, 0x01, 0x8d, 0x00, 0x09, 0x00, 0x80, 0x00,
0x28, 0x0a, 0xe0, 0x21, 0xe0, 0x01, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00,
0x09, 0x00, 0x00, 0x00, 0x2c, 0x0a, 0x90, 0x20, 0x8c, 0x00, 0x00, 0x1e,
0x02, 0x00, 0x02, 0x00, 0x09, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x20, 0x22,
0x20, 0x02, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00, 0x40, 0x96, 0x6d, 0x20,
0x07, 0x0f, 0x0f, 0x08, 0x40, 0x00, 0x00, 0x00, 0x2c, 0x0a, 0x00, 0x21,
0x90, 0x00, 0x00, 0x0a, 0x10, 0x01, 0x00, 0x00, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x20, 0x22, 0x20, 0x02, 0x8d, 0x0a, 0x10, 0x01, 0x00, 0x00,
0x31, 0x00, 0x80, 0x0c, 0x68, 0x02, 0x60, 0x22, 0xe0, 0x01, 0x00, 0x06,
0x00, 0x5e, 0x20, 0x04, 0x31, 0x00, 0x00, 0x0a, 0x0c, 0x02, 0xe0, 0x22,
0x00, 0x01, 0x00, 0x06, 0x00, 0x08, 0x11, 0x02, 0x31, 0x20, 0x80, 0x0c,
0x68, 0x02, 0xa0, 0x22, 0x20, 0x02, 0x00, 0x06, 0x00, 0x5e, 0x20, 0x04,
0x38, 0x56, 0x02, 0x29, 0x07, 0x18, 0x13, 0x17, 0x7e, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x38, 0x20, 0x80, 0x09, 0xe8, 0x3a, 0x40, 0x23, 0xa0, 0x02, 0x8d, 0x3a,
0xe0, 0x02, 0x00, 0x00, 0x33, 0x00, 0x80, 0x0c, 0x70, 0x80, 0x01, 0x00,
0xe2, 0x01, 0x00, 0x00, 0x00, 0x5e, 0x02, 0x04, 0x33, 0x20, 0x80, 0x0c,
0x70, 0xa0, 0x01, 0x00, 0x22, 0x02, 0x00, 0x00, 0x00, 0x5e, 0x02, 0x04,
0x25, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x0e,
0x10, 0x00, 0x00, 0x00, 0x01, 0x4d, 0x00, 0x20, 0x07, 0x7f, 0x03, 0x00,
0x31, 0x00, 0x60, 0x07, 0x04, 0x02, 0x00, 0x20, 0xe0, 0x0f, 0x00, 0x06,
0x10, 0x00, 0x00, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x83,
0x00, 0x00, 0x00, 0x03, 0x7f, 0x00, 0xff, 0x1f, 0x00, 0x00, 0xe0, 0x0f,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x40, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00,
0x40, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x14, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x34, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00,
0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x20, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x40, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00,
0x8c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00,
0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c,
0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x41, 0x00, 0x00, 0x00, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50,
0x45, 0x2a, 0x3b, 0x38, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x5f, 0x5f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x6b, 0x00, 0x00, 0x00,
0x69, 0x6e, 0x74, 0x3b, 0x34, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x5f, 0x5f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00,
0x69, 0x6e, 0x74, 0x3b, 0x34, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0xfc, 0xbb, 0x0b, 0x9a, 0x9f, 0xef, 0x13, 0x68,
0xcf, 0x0e, 0xdb, 0x1c, 0x0c, 0x00, 0x00, 0x00, 0x44, 0x04, 0x00, 0x00,
0xc0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
0x44, 0x00, 0x00, 0x00, 0x40, 0x03, 0x00, 0x00, 0x6c, 0x75, 0x5f, 0x6b,
0x65, 0x72, 0x6e, 0x65, 0x6c, 0x32, 0x00, 0x00, 0x01, 0x00, 0x60, 0x00,
0x0c, 0x02, 0xa0, 0x20, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00,
0x06, 0x80, 0x00, 0x00, 0x04, 0x00, 0x00, 0x30, 0x00, 0x10, 0x00, 0x16,
0xc0, 0x04, 0xc0, 0x04, 0x41, 0x00, 0x00, 0x00, 0x2c, 0x0a, 0xc0, 0x2f,
0x14, 0x01, 0x00, 0x0a, 0xa4, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
0x2c, 0x0a, 0xc0, 0x20, 0x08, 0x01, 0x00, 0x1e, 0x01, 0x00, 0x01, 0x00,
0x41, 0x00, 0x00, 0x00, 0x2c, 0x0a, 0xc4, 0x2f, 0x18, 0x01, 0x00, 0x0a,
0xb8, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x4c, 0x16, 0xc4, 0x20,
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x80, 0x2f, 0xc0, 0x0f, 0x00, 0x12, 0x40, 0x00, 0xb1, 0x00,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x00, 0x2f, 0xc4, 0x0f, 0x00, 0x12,
0x80, 0x00, 0xb1, 0x00, 0x40, 0x00, 0x80, 0x00, 0x28, 0x0a, 0x20, 0x21,
0xc0, 0x0f, 0x00, 0x12, 0x20, 0x00, 0xb1, 0x00, 0x40, 0x00, 0x80, 0x00,
0x28, 0x0a, 0xa0, 0x21, 0xc4, 0x0f, 0x00, 0x12, 0x60, 0x00, 0xb1, 0x00,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x2f, 0x80, 0x0f, 0x8d, 0x0a,
0xe0, 0x00, 0x00, 0x00, 0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x00, 0x2f,
0x00, 0x0f, 0x8d, 0x0a, 0xe4, 0x00, 0x00, 0x00, 0x40, 0x96, 0x01, 0x20,
0x07, 0x09, 0x09, 0x07, 0x40, 0x96, 0x2d, 0x20, 0x07, 0x0d, 0x0d, 0x07,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x60, 0x21, 0x80, 0x0f, 0x8d, 0x0a,
0xc0, 0x00, 0x00, 0x00, 0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0xc0, 0x2e,
0x00, 0x0f, 0x8d, 0x0a, 0xc0, 0x00, 0x00, 0x00, 0x40, 0x96, 0x01, 0x20,
0x07, 0x7a, 0x09, 0x06, 0x40, 0x96, 0x01, 0x20, 0x07, 0x0f, 0x0d, 0x06,
0x10, 0x20, 0x80, 0x05, 0x22, 0x0a, 0x00, 0x20, 0x60, 0x01, 0x8d, 0x0a,
0x0c, 0x01, 0x00, 0x00, 0x10, 0x20, 0x80, 0x05, 0x20, 0x0a, 0x00, 0x20,
0xc0, 0x0e, 0x8d, 0x0a, 0x0c, 0x01, 0x00, 0x00, 0x10, 0x16, 0x67, 0x25,
0x07, 0x00, 0x7a, 0x08, 0x02, 0x20, 0x81, 0x00, 0x4a, 0x12, 0x60, 0x2d,
0xc4, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x81, 0x00,
0x48, 0x12, 0x20, 0x23, 0xc4, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x00,
0x10, 0x19, 0x67, 0x25, 0x07, 0x00, 0x0f, 0x08, 0x05, 0x20, 0x80, 0x02,
0x40, 0x12, 0x00, 0x20, 0x20, 0x03, 0xb1, 0x12, 0x60, 0x0d, 0xb1, 0x00,
0x22, 0x00, 0xa1, 0x00, 0x00, 0x0e, 0x00, 0x20, 0xb8, 0x01, 0x00, 0x00,
0xb8, 0x01, 0x00, 0x00, 0x41, 0x96, 0x65, 0x20, 0x07, 0x11, 0x0f, 0x08,
0x41, 0x00, 0x00, 0x00, 0x2c, 0x0a, 0xc8, 0x2f, 0x08, 0x01, 0x00, 0x0a,
0x0c, 0x01, 0x00, 0x00, 0x41, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x80, 0x2e,
0xc0, 0x0e, 0x8d, 0x0a, 0x0c, 0x01, 0x00, 0x00, 0x40, 0x96, 0x01, 0x20,
0xe7, 0x13, 0x11, 0x7a, 0x40, 0x96, 0x5d, 0x20, 0x07, 0x17, 0x11, 0x08,
0x40, 0x96, 0x19, 0x20, 0xe0, 0x1e, 0x7e, 0x7a, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x80, 0x2d, 0xc8, 0x0f, 0x00, 0x0a, 0x60, 0x01, 0x8d, 0x00,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x2e, 0x80, 0x0e, 0x8d, 0x0a,
0x60, 0x01, 0x8d, 0x00, 0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0xc0, 0x2d,
0x80, 0x0e, 0x8d, 0x0a, 0x08, 0x01, 0x00, 0x00, 0x09, 0x00, 0x80, 0x00,
0x28, 0x0a, 0x60, 0x22, 0x60, 0x02, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00,
0x09, 0x00, 0x80, 0x00, 0x28, 0x0a, 0xe0, 0x22, 0xe0, 0x02, 0x8d, 0x1e,
0x02, 0x00, 0x02, 0x00, 0x09, 0x00, 0x80, 0x00, 0x28, 0x0a, 0xc0, 0x23,
0xc0, 0x03, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00, 0x09, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x80, 0x2d, 0x80, 0x0d, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00,
0x09, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x2e, 0x40, 0x0e, 0x8d, 0x1e,
0x02, 0x00, 0x02, 0x00, 0x09, 0x20, 0x80, 0x00, 0x28, 0x0a, 0xc0, 0x2d,
0xc0, 0x0d, 0x8d, 0x1e, 0x02, 0x00, 0x02, 0x00, 0x40, 0x96, 0x6d, 0x20,
0x07, 0x13, 0x13, 0x08, 0x40, 0x96, 0x6d, 0x20, 0x07, 0x17, 0x17, 0x08,
0x40, 0x96, 0x6d, 0x20, 0x07, 0x1e, 0x1e, 0x08, 0x40, 0x20, 0x80, 0x00,
0x28, 0x0a, 0x80, 0x2d, 0x80, 0x0d, 0x8d, 0x0a, 0x10, 0x01, 0x00, 0x00,
0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0x40, 0x2e, 0x40, 0x0e, 0x8d, 0x0a,
0x10, 0x01, 0x00, 0x00, 0x40, 0x20, 0x80, 0x00, 0x28, 0x0a, 0xc0, 0x2d,
0xc0, 0x0d, 0x8d, 0x0a, 0x10, 0x01, 0x00, 0x00, 0x31, 0x00, 0x80, 0x0c,
0x68, 0x02, 0xa0, 0x22, 0x60, 0x02, 0x00, 0x06, 0x00, 0x5e, 0x20, 0x04,
0x31, 0x00, 0x80, 0x0c, 0x68, 0x02, 0x40, 0x23, 0xe0, 0x02, 0x00, 0x06,
0x00, 0x5e, 0x20, 0x04, 0x31, 0x00, 0x80, 0x0c, 0x68, 0x02, 0x20, 0x2d,
0xc0, 0x03, 0x00, 0x06, 0x00, 0x5e, 0x20, 0x04, 0x31, 0x20, 0x80, 0x0c,
0x68, 0x02, 0xe0, 0x2c, 0x80, 0x0d, 0x00, 0x06, 0x00, 0x5e, 0x20, 0x04,
0x31, 0x20, 0x80, 0x0c, 0x68, 0x02, 0x00, 0x2e, 0x40, 0x0e, 0x00, 0x06,
0x00, 0x5e, 0x20, 0x04, 0x31, 0x20, 0x80, 0x0c, 0x68, 0x02, 0x80, 0x23,
0xc0, 0x0d, 0x00, 0x06, 0x00, 0x5e, 0x20, 0x04, 0x5b, 0x0e, 0x02, 0x20,
0x00, 0xa8, 0x68, 0xd2, 0x5b, 0x5f, 0x06, 0x20, 0x00, 0x80, 0x73, 0xce,
0x33, 0x00, 0x80, 0x0c, 0x70, 0x00, 0x02, 0x00, 0x62, 0x02, 0x00, 0x00,
0x00, 0x5e, 0x02, 0x04, 0x33, 0x20, 0x80, 0x0c, 0x70, 0x50, 0x06, 0x00,
0x42, 0x0e, 0x00, 0x00, 0x00, 0x5e, 0x02, 0x04, 0x25, 0x00, 0xa0, 0x00,
0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x0e, 0x10, 0x00, 0x00, 0x00,
0x01, 0x4d, 0x00, 0x20, 0x07, 0x7f, 0x05, 0x00, 0x31, 0x00, 0x60, 0x07,
0x04, 0x02, 0x00, 0x20, 0xe0, 0x0f, 0x00, 0x06, 0x10, 0x00, 0x00, 0x82,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x83, 0x00, 0x00, 0x00, 0x03,
0x7f, 0x00, 0xff, 0x1f, 0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x13, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x15, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x20, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x38, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x2c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
0x19, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
0x16, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x1b, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x5f, 0x5f, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x00, 0x00, 0x00, 0x00,
0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00,
0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x2a, 0x3b, 0x38,
0x00, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x1a, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x70, 0x72,
0x69, 0x76, 0x61, 0x74, 0x65, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x6b, 0x00, 0x00, 0x00, 0x69, 0x6e, 0x74, 0x3b,
0x34, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00,
0x1a, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x70, 0x72,
0x69, 0x76, 0x61, 0x74, 0x65, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45,
0x00, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x69, 0x6e, 0x74, 0x3b,
0x34, 0x00, 0x00, 0x00, 0x4e, 0x4f, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00
};
unsigned int lu_Gen9core_gen_len = 4116;

View File

@@ -62,7 +62,19 @@ void testvm_construct(Genode::Env &env)
Genode::log("===Run syr2k===");
ns_syr2k::main(0, 0);
Genode::log("===Run syrk===");
ns_syrk::main(0, 0);*/
ns_syrk::main(0, 0);
ns_correlation::main(0,0); // sqrt bug
ns_covariance::main(0,0);
ns_adi::main(0,0);
ns_convolution_2d::main(0,0);
ns_convolution_3d::main(0,0);
ns_fdtd_2d::main(0,0);
ns_jacobi_1d_imper::main(0,0);
ns_jacobi_2d_imper::main(0,0);
ns_gramschmidt::main(0,0); // sqrt bug
ns_lu::main(0,0);*/
});
Genode::log("===End===");

View File

@@ -1,18 +1,29 @@
TARGET = hello_gpgpu
SRC_CC = main.cc \
test.cc polybench.cc \
CL/cl.cc CL/cl_genode.cc \
benchmark/2mm/2mm.cc \
benchmark/3mm/3mm.cc \
benchmark/atax/atax.cc \
benchmark/bicg/bicg.cc \
benchmark/doitgen/doitgen.cc \
benchmark/gemm/gemm.cc \
benchmark/gemver/gemver.cc \
benchmark/gesummv/gesummv.cc \
benchmark/mvt/mvt.cc \
benchmark/syr2k/syr2k.cc \
benchmark/syrk/syrk.cc
LIBS = base libc
test.cc polybench.cc \
CL/cl.cc CL/cl_genode.cc \
benchmark/2mm/2mm.cc \
benchmark/3mm/3mm.cc \
benchmark/atax/atax.cc \
benchmark/bicg/bicg.cc \
benchmark/doitgen/doitgen.cc \
benchmark/gemm/gemm.cc \
benchmark/gemver/gemver.cc \
benchmark/gesummv/gesummv.cc \
benchmark/mvt/mvt.cc \
benchmark/syr2k/syr2k.cc \
benchmark/syrk/syrk.cc \
benchmark/correlation/correlation.cc \
benchmark/covariance/covariance.cc \
benchmark/adi/adi.cc \
benchmark/convolution-2d/2DConvolution.cc \
benchmark/convolution-3d/3DConvolution.cc \
benchmark/fdtd-2d/fdtd2d.cc \
benchmark/jacobi-1d-imper/jacobi1D.cc \
benchmark/jacobi-2d-imper/jacobi2D.cc \
benchmark/gramschmidt/gramschmidt.cc \
benchmark/lu/lu.cc \
LIBS = base libc
CC_CXX_WARN_STRICT =