diff --git a/CMakeLists.txt b/CMakeLists.txt index 41e993eee..795829e66 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -44,13 +44,13 @@ endif() set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "${BUILD_TYPE}") set(XMR-STAK_COMPILE "native" CACHE STRING "select CPU compute architecture") -set_property(CACHE XMR-STAK_COMPILE PROPERTY STRINGS "native;generic") +set_property(CACHE XMR-STAK_COMPILE PROPERTY STRINGS "native;generic;dev_release") if(XMR-STAK_COMPILE STREQUAL "native") if(NOT CMAKE_CXX_COMPILER_ID MATCHES "MSVC") set(CMAKE_CXX_FLAGS "-march=native -mtune=native ${CMAKE_CXX_FLAGS}") set(CMAKE_C_FLAGS "-march=native -mtune=native ${CMAKE_C_FLAGS}") endif() -elseif(XMR-STAK_COMPILE STREQUAL "generic") +elseif(XMR-STAK_COMPILE STREQUAL "generic" OR XMR-STAK_COMPILE STREQUAL "dev_release") add_definitions("-DCONF_ENFORCE_OpenCL_1_2=1") else() message(FATAL_ERROR "XMR-STAK_COMPILE is set to an unknown value '${XMR-STAK_COMPILE}'") @@ -496,6 +496,10 @@ if(${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU") set(CMAKE_C_FLAGS "-Wl,-z,noexecstack ${CMAKE_C_FLAGS}") endif() +if(XMR-STAK_COMPILE STREQUAL "dev_release") + add_definitions(-DXMRSTAK_DEV_RELEASE) +endif() + # activate static libgcc and libstdc++ linking if(CMAKE_LINK_STATIC) set(BUILD_SHARED_LIBRARIES OFF) @@ -586,7 +590,16 @@ if(CUDA_FOUND) ) endif() - set(CUDA_LIBRARIES ${CUDA_LIB} ${CUDA_NVRTC_LIB} ${CUDA_LIBRARIES}) + set(CUDA_LIBRARIES ${CUDA_LIB} ${CUDA_LIBRARIES}) + if(XMR-STAK_COMPILE STREQUAL "dev_release") + # do not link nvrtc for linux binaries, cn-r will be disabled + if(WIN32) + set(CUDA_LIBRARIES ${CUDA_LIBRARIES} ${CUDA_NVRTC_LIB}) + endif() + else() + set(CUDA_LIBRARIES ${CUDA_LIBRARIES} ${CUDA_NVRTC_LIB}) + endif() + target_link_libraries(xmrstak_cuda_backend ${CUDA_LIBRARIES}) target_link_libraries(xmrstak_cuda_backend xmr-stak-backend xmr-stak-asm) endif() diff --git a/README.md b/README.md index c890da1a5..7622758e3 100644 --- a/README.md +++ b/README.md @@ -49,7 +49,7 @@ Besides [Monero](https://getmonero.org), following coins can be mined using this - [Plenteum](https://www.plenteum.com/) - [QRL](https://theqrl.org) - **[Ryo](https://ryo-currency.com) - Upcoming xmr-stak-gui is sponsored by Ryo** -- [Stellite](https://stellite.cash/) +- [Torque](https://torque.cash/) - [TurtleCoin](https://turtlecoin.lol) - [Zelerius](https://zelerius.org/) - [X-CASH](https://x-network.io/) @@ -72,7 +72,7 @@ If your prefered coin is not listed, you can choose one of the following algorit - cryptonight_v7_stellite - cryptonight_v8 - cryptonight_v8_double (used by X-CASH) - - cryptonight_v8_half (used by masari and stellite) + - cryptonight_v8_half (used by masari and torque) - cryptonight_v8_reversewaltz (used by graft) - cryptonight_v8_zelerius - 4MiB scratchpad memory diff --git a/xmrstak/backend/amd/amd_gpu/gpu.cpp b/xmrstak/backend/amd/amd_gpu/gpu.cpp index 77857612e..3c4384722 100644 --- a/xmrstak/backend/amd/amd_gpu/gpu.cpp +++ b/xmrstak/backend/amd/amd_gpu/gpu.cpp @@ -1280,17 +1280,17 @@ size_t XMRRunJob(GpuContext* ctx, cl_uint* HashOutput, const xmrstak_algo& miner } } - if((ret = clEnqueueNDRangeKernel(ctx->CommandQueues, Kernels[2], 2, Nonce, gthreads, lthreads, 0, NULL, NULL)) != CL_SUCCESS) + size_t NonceT[2] = {0, ctx->Nonce}, gthreadsT[2] = {8, g_thd}, lthreadsT[2] = {8 , w_size}; + if((ret = clEnqueueNDRangeKernel(ctx->CommandQueues, Kernels[2], 2, NonceT, gthreadsT, lthreadsT, 0, NULL, NULL)) != CL_SUCCESS) { printer::inst()->print_msg(L1, "Error %s when calling clEnqueueNDRangeKernel for kernel %d.", err_to_str(ret), 2); - return ERR_OCL_API; + return ERR_OCL_API; } if(miner_algo != cryptonight_gpu) { for(int i = 0; i < 4; ++i) { - size_t tmpNonce = ctx->Nonce; if((ret = clEnqueueNDRangeKernel(ctx->CommandQueues, Kernels[i + 3], 1, &tmpNonce, &g_thd, &w_size, 0, NULL, NULL)) != CL_SUCCESS) { printer::inst()->print_msg(L1, "Error %s when calling clEnqueueNDRangeKernel for kernel %d.", err_to_str(ret), i + 3); diff --git a/xmrstak/backend/amd/amd_gpu/opencl/cryptonight.cl b/xmrstak/backend/amd/amd_gpu/opencl/cryptonight.cl index 471e46a53..29ab63aad 100644 --- a/xmrstak/backend/amd/amd_gpu/opencl/cryptonight.cl +++ b/xmrstak/backend/amd/amd_gpu/opencl/cryptonight.cl @@ -867,9 +867,14 @@ __kernel void JOIN(cn1,ALGO) (__global uint4 *Scratchpad, __global ulong *states } )===" - R"===( +R"===( +#if defined(__clang__) +# if __has_builtin(__builtin_amdgcn_ds_bpermute) +# define HAS_AMD_BPERMUTE 1 +# endif +#endif -__attribute__((reqd_work_group_size(8, 8, 1))) +__attribute__((reqd_work_group_size(8, WORKSIZE, 1))) __kernel void JOIN(cn2,ALGO) (__global uint4 *Scratchpad, __global ulong *states, #if (ALGO == cryptonight_gpu) @@ -878,88 +883,123 @@ __kernel void JOIN(cn2,ALGO) (__global uint4 *Scratchpad, __global ulong *states __global uint *Branch0, __global uint *Branch1, __global uint *Branch2, __global uint *Branch3, uint Threads) #endif { - __local uint AES0[256], AES1[256], AES2[256], AES3[256]; - uint ExpandedKey2[40]; - uint4 text; + __local uint AES0[256], AES1[256], AES2[256], AES3[256]; + uint ExpandedKey2[40]; + uint4 text; - const uint gIdx = getIdx(); + uint gIdx = get_global_id(1) - get_global_offset(1); + uint groupIdx = get_local_id(1); + uint lIdx = get_local_id(0); - for (int i = get_local_id(1) * 8 + get_local_id(0); i < 256; i += 8 * 8) { - const uint tmp = AES0_C[i]; - AES0[i] = tmp; - AES1[i] = rotate(tmp, 8U); - AES2[i] = rotate(tmp, 16U); - AES3[i] = rotate(tmp, 24U); - } + for (int i = groupIdx * 8 + lIdx; i < 256; i += get_local_size(0) * get_local_size(1)) { + const uint tmp = AES0_C[i]; + AES0[i] = tmp; + AES1[i] = rotate(tmp, 8U); + AES2[i] = rotate(tmp, 16U); + AES3[i] = rotate(tmp, 24U); + } - barrier(CLK_LOCAL_MEM_FENCE); + barrier(CLK_LOCAL_MEM_FENCE); #if (ALGO == cryptonight_gpu || ALGO == cryptonight_heavy || ALGO == cryptonight_haven || ALGO == cryptonight_bittube2 || ALGO == cryptonight_superfast) - __local uint4 xin1[8][8]; - __local uint4 xin2[8][8]; + __local uint4 xin1[WORKSIZE][8]; + __local uint4 xin2[WORKSIZE][8]; #endif #if(COMP_MODE==1) - // do not use early return here - if(gIdx < Threads) + // do not use early return here + if(gIdx < Threads) #endif - { - states += 25 * gIdx; + { + states += 25 * gIdx; #if(STRIDED_INDEX==0) - Scratchpad += gIdx * (MEMORY >> 4); + Scratchpad += gIdx * (MEMORY >> 4); #elif(STRIDED_INDEX==1) - Scratchpad += gIdx; + Scratchpad += gIdx; #elif(STRIDED_INDEX==2) - Scratchpad += (gIdx / WORKSIZE) * (MEMORY >> 4) * WORKSIZE + MEM_CHUNK * (gIdx % WORKSIZE); + Scratchpad += (gIdx / WORKSIZE) * (MEMORY >> 4) * WORKSIZE + MEM_CHUNK * (gIdx % WORKSIZE); #elif(STRIDED_INDEX==3) - Scratchpad += (gIdx / WORKSIZE) * (MEMORY >> 4) * WORKSIZE + (gIdx % WORKSIZE); + Scratchpad += (gIdx / WORKSIZE) * (MEMORY >> 4) * WORKSIZE + (gIdx % WORKSIZE); #endif - #if defined(__Tahiti__) || defined(__Pitcairn__) + #if defined(__Tahiti__) || defined(__Pitcairn__) - for(int i = 0; i < 4; ++i) ((ulong *)ExpandedKey2)[i] = states[i + 4]; - text = vload4(get_local_id(1) + 4, (__global uint *)states); + for(int i = 0; i < 4; ++i) ((ulong *)ExpandedKey2)[i] = states[i + 4]; + text = vload4(lIdx + 4, (__global uint *)states); - #else + #else + text = vload4(lIdx + 4, (__global uint *)states); + ((uint8 *)ExpandedKey2)[0] = vload8(1, (__global uint *)states); - text = vload4(get_local_id(1) + 4, (__global uint *)states); - ((uint8 *)ExpandedKey2)[0] = vload8(1, (__global uint *)states); + #endif - #endif - - AESExpandKey256(ExpandedKey2); - } + AESExpandKey256(ExpandedKey2); + } - barrier(CLK_LOCAL_MEM_FENCE); + barrier(CLK_LOCAL_MEM_FENCE); #if (ALGO == cryptonight_gpu || ALGO == cryptonight_heavy || ALGO == cryptonight_haven || ALGO == cryptonight_bittube2 || ALGO == cryptonight_superfast) - __local uint4* xin1_store = &xin1[get_local_id(1)][get_local_id(0)]; - __local uint4* xin1_load = &xin1[(get_local_id(1) + 1) % 8][get_local_id(0)]; - __local uint4* xin2_store = &xin2[get_local_id(1)][get_local_id(0)]; - __local uint4* xin2_load = &xin2[(get_local_id(1) + 1) % 8][get_local_id(0)]; - *xin2_store = (uint4)(0, 0, 0, 0); +# if (HAS_AMD_BPERMUTE == 1) + int lane = (groupIdx * 8 + ((lIdx + 1) % 8)) << 2; + uint4 tmp = (uint4)(0, 0, 0, 0); +# else + __local uint4* xin1_store = &xin1[groupIdx][lIdx]; + __local uint4* xin1_load = &xin1[groupIdx][(lIdx + 1) % 8]; + __local uint4* xin2_store = &xin2[groupIdx][lIdx]; + __local uint4* xin2_load = &xin2[groupIdx][(lIdx + 1) % 8]; + *xin2_store = (uint4)(0, 0, 0, 0); +# endif #endif #if(COMP_MODE == 1) - // do not use early return here - if (gIdx < Threads) + // do not use early return here + if (gIdx < Threads) #endif - { + { #if (ALGO == cryptonight_gpu || ALGO == cryptonight_heavy || ALGO == cryptonight_haven || ALGO == cryptonight_bittube2 || ALGO == cryptonight_superfast) + +# if (HAS_AMD_BPERMUTE == 1) + #pragma unroll 2 + for(int i = 0, i1 = lIdx; i < (MEMORY >> 7); ++i, i1 = (i1 + 16) % (MEMORY >> 4)) + { + text ^= Scratchpad[IDX((uint)i1)]; + text ^= tmp; + + #pragma unroll 10 + for(int j = 0; j < 10; ++j) + text = AES_Round(AES0, AES1, AES2, AES3, text, ((uint4 *)ExpandedKey2)[j]); + + text.s0 ^= __builtin_amdgcn_ds_bpermute(lane, text.s0); + text.s1 ^= __builtin_amdgcn_ds_bpermute(lane, text.s1); + text.s2 ^= __builtin_amdgcn_ds_bpermute(lane, text.s2); + text.s3 ^= __builtin_amdgcn_ds_bpermute(lane, text.s3); + //__builtin_amdgcn_s_waitcnt(0); + text ^= Scratchpad[IDX((uint)i1 + 8u)]; + + #pragma unroll 10 + for(int j = 0; j < 10; ++j) + text = AES_Round(AES0, AES1, AES2, AES3, text, ((uint4 *)ExpandedKey2)[j]); + tmp.s0 = __builtin_amdgcn_ds_bpermute(lane, text.s0); + tmp.s1 = __builtin_amdgcn_ds_bpermute(lane, text.s1); + tmp.s2 = __builtin_amdgcn_ds_bpermute(lane, text.s2); + tmp.s3 = __builtin_amdgcn_ds_bpermute(lane, text.s3); + //__builtin_amdgcn_s_waitcnt(0); + } + + text ^= tmp; +# else + #pragma unroll 2 - for(int i = 0, i1 = get_local_id(1); i < (MEMORY >> 7); ++i, i1 = (i1 + 16) % (MEMORY >> 4)) + for(int i = 0, i1 = lIdx; i < (MEMORY >> 7); ++i, i1 = (i1 + 16) % (MEMORY >> 4)) { text ^= Scratchpad[IDX((uint)i1)]; barrier(CLK_LOCAL_MEM_FENCE); text ^= *xin2_load; - #pragma unroll 10 for(int j = 0; j < 10; ++j) text = AES_Round(AES0, AES1, AES2, AES3, text, ((uint4 *)ExpandedKey2)[j]); - *xin1_store = text; - text ^= Scratchpad[IDX((uint)i1 + 8u)]; barrier(CLK_LOCAL_MEM_FENCE); text ^= *xin1_load; @@ -971,83 +1011,92 @@ __kernel void JOIN(cn2,ALGO) (__global uint4 *Scratchpad, __global ulong *states *xin2_store = text; } - barrier(CLK_LOCAL_MEM_FENCE); - text ^= *xin2_load; + barrier(CLK_LOCAL_MEM_FENCE); + text ^= *xin2_load; +# endif #else - #pragma unroll 2 - for (int i = 0; i < (MEMORY >> 7); ++i) { - text ^= Scratchpad[IDX((uint)((i << 3) + get_local_id(1)))]; - - #pragma unroll 10 - for(int j = 0; j < 10; ++j) - text = AES_Round(AES0, AES1, AES2, AES3, text, ((uint4 *)ExpandedKey2)[j]); - } + #pragma unroll 2 + for (int i = 0; i < (MEMORY >> 7); ++i) + { + text ^= Scratchpad[IDX((uint)((i << 3) + lIdx))]; + + #pragma unroll 10 + for(int j = 0; j < 10; ++j) + text = AES_Round(AES0, AES1, AES2, AES3, text, ((uint4 *)ExpandedKey2)[j]); + } #endif - } + } #if (ALGO == cryptonight_gpu || ALGO == cryptonight_heavy || ALGO == cryptonight_haven || ALGO == cryptonight_bittube2 || ALGO == cryptonight_superfast) - /* Also left over threads performe this loop. - * The left over thread results will be ignored - */ - #pragma unroll 16 - for(size_t i = 0; i < 16; i++) - { - #pragma unroll 10 - for (int j = 0; j < 10; ++j) { - text = AES_Round(AES0, AES1, AES2, AES3, text, ((uint4 *)ExpandedKey2)[j]); - } - - barrier(CLK_LOCAL_MEM_FENCE); - *xin1_store = text; - barrier(CLK_LOCAL_MEM_FENCE); - text ^= *xin1_load; - } + /* Also left over threads performe this loop. + * The left over thread results will be ignored + */ + #pragma unroll 16 + for(size_t i = 0; i < 16; i++) + { + #pragma unroll 10 + for (int j = 0; j < 10; ++j) { + text = AES_Round(AES0, AES1, AES2, AES3, text, ((uint4 *)ExpandedKey2)[j]); + } +#if (HAS_AMD_BPERMUTE == 1) + text.s0 ^= __builtin_amdgcn_ds_bpermute(lane, text.s0); + text.s1 ^= __builtin_amdgcn_ds_bpermute(lane, text.s1); + text.s2 ^= __builtin_amdgcn_ds_bpermute(lane, text.s2); + text.s3 ^= __builtin_amdgcn_ds_bpermute(lane, text.s3); + //__builtin_amdgcn_s_waitcnt(0); +#else + barrier(CLK_LOCAL_MEM_FENCE); + *xin1_store = text; + barrier(CLK_LOCAL_MEM_FENCE); + text ^= *xin1_load; +#endif + } #endif - __local ulong State_buf[8 * 25]; + __local ulong State_buf[8 * 25]; #if(COMP_MODE==1) - // do not use early return here - if(gIdx < Threads) + // do not use early return here + if(gIdx < Threads) #endif - { - vstore2(as_ulong2(text), get_local_id(1) + 4, states); - } + { + vstore2(as_ulong2(text), lIdx + 4, states); + } - barrier(CLK_GLOBAL_MEM_FENCE); + barrier(CLK_GLOBAL_MEM_FENCE); #if(COMP_MODE==1) - // do not use early return here - if(gIdx < Threads) + // do not use early return here + if(gIdx < Threads) #endif - { - if(!get_local_id(1)) - { - __local ulong* State = State_buf + get_local_id(0) * 25; + { + if(!lIdx) + { + __local ulong* State = State_buf + groupIdx * 25; - for(int i = 0; i < 25; ++i) State[i] = states[i]; + for(int i = 0; i < 25; ++i) State[i] = states[i]; - keccakf1600_2(State); + keccakf1600_2(State); #if (ALGO == cryptonight_gpu) if(State[3] <= Target) { ulong outIdx = atomic_inc(output + 0xFF); if(outIdx < 0xFF) - output[outIdx] = get_global_id(0); + output[outIdx] = get_global_id(1); } #else - for(int i = 0; i < 25; ++i) states[i] = State[i]; + for(int i = 0; i < 25; ++i) states[i] = State[i]; - uint StateSwitch = State[0] & 3; - __global uint *destinationBranch1 = StateSwitch == 0 ? Branch0 : Branch1; - __global uint *destinationBranch2 = StateSwitch == 2 ? Branch2 : Branch3; - __global uint *destinationBranch = StateSwitch < 2 ? destinationBranch1 : destinationBranch2; - destinationBranch[atomic_inc(destinationBranch + Threads)] = gIdx; + uint StateSwitch = State[0] & 3; + __global uint *destinationBranch1 = StateSwitch == 0 ? Branch0 : Branch1; + __global uint *destinationBranch2 = StateSwitch == 2 ? Branch2 : Branch3; + __global uint *destinationBranch = StateSwitch < 2 ? destinationBranch1 : destinationBranch2; + destinationBranch[atomic_inc(destinationBranch + Threads)] = gIdx; #endif - } - } - mem_fence(CLK_GLOBAL_MEM_FENCE); + } + } + mem_fence(CLK_GLOBAL_MEM_FENCE); } )===" diff --git a/xmrstak/backend/amd/autoAdjust.hpp b/xmrstak/backend/amd/autoAdjust.hpp index dcabb3018..ee7168f60 100644 --- a/xmrstak/backend/amd/autoAdjust.hpp +++ b/xmrstak/backend/amd/autoAdjust.hpp @@ -89,6 +89,27 @@ class autoAdjust std::string conf; for(auto& ctx : devVec) { + std::string enabledGpus = params::inst().amdGpus; + bool enabled = true; + if (!enabledGpus.empty()) + { + enabled = false; + std::stringstream ss(enabledGpus); + + int i = -1; + while (ss >> i) + { + if (i == ctx.deviceIdx) + { + enabled = true; + break; + } + + while (ss.peek() == ',' || ss.peek() == ' ') + ss.ignore(); + } + } + size_t minFreeMem = 128u * byteToMiB; /* 1000 is a magic selected limit, the reason is that more than 2GiB memory * sowing down the memory performance because of TLB cache misses @@ -196,6 +217,9 @@ class autoAdjust } if(intensity != 0) { + if (!enabled) + conf += "/* Disabled\n"; + for(uint32_t thd = 0; thd < numThreads; ++thd) { conf += " // gpu: " + ctx.name + std::string(" compute units: ") + std::to_string(ctx.computeUnits) + "\n"; @@ -209,6 +233,9 @@ class autoAdjust std::to_string(numUnroll) + ", \"comp_mode\" : true, \"interleave\" : " + std::to_string(ctx.interleave) + "\n" + " },\n"; } + + if (!enabled) + conf += "*/\n"; } else { diff --git a/xmrstak/backend/amd/minethd.cpp b/xmrstak/backend/amd/minethd.cpp index 0a181154c..3a23e8624 100644 --- a/xmrstak/backend/amd/minethd.cpp +++ b/xmrstak/backend/amd/minethd.cpp @@ -53,6 +53,7 @@ minethd::minethd(miner_work& pWork, size_t iNo, GpuContext* ctx, const jconf::th oWork = pWork; bQuit = 0; iThreadNo = (uint8_t)iNo; + this->iGpuIndex = cfg.index; iJobNo = 0; iHashCount = 0; iTimestamp = 0; diff --git a/xmrstak/backend/backendConnector.cpp b/xmrstak/backend/backendConnector.cpp index 808fdca37..93a8fd9d6 100644 --- a/xmrstak/backend/backendConnector.cpp +++ b/xmrstak/backend/backendConnector.cpp @@ -81,31 +81,52 @@ std::vector* BackendConnector::thread_starter(miner_work& pWork) #ifndef CONF_NO_CUDA if(params::inst().useNVIDIA) { + bool disableNvidia = false; + plugin nvidiaplugin; - std::vector libNames = {"xmrstak_cuda_backend_cuda10_0", "xmrstak_cuda_backend_cuda9_2", "xmrstak_cuda_backend"}; +#ifdef XMRSTAK_DEV_RELEASE + std::vector libNames = {"xmrstak_cuda_backend_cuda10_0", "xmrstak_cuda_backend"}; +# ifndef _WIN32 + auto neededAlgorithms = ::jconf::inst()->GetCurrentCoinSelection().GetAllAlgorithms(); + bool cn_r_derivate = + std::find(neededAlgorithms.begin(), neededAlgorithms.end(), cryptonight_r) != neededAlgorithms.end() || + std::find(neededAlgorithms.begin(), neededAlgorithms.end(), cryptonight_r_wow) != neededAlgorithms.end(); + + if(cn_r_derivate) + { + disableNvidia = true; + printer::inst()->print_msg(L0, "WARNING: The linux release binaries not support cryptonight_r derived coins for NVIDIA."); + } +# endif +#else + std::vector libNames = {"xmrstak_cuda_backend"}; +#endif size_t numWorkers = 0u; - for(const auto& name : libNames) + if(!disableNvidia) { - printer::inst()->print_msg(L0, "NVIDIA: try to load library '%s'", name.c_str()); - nvidiaplugin.load("NVIDIA", name); - std::vector* nvidiaThreads = nvidiaplugin.startBackend(static_cast(pvThreads->size()), pWork, environment::inst()); - if(nvidiaThreads != nullptr) - { - pvThreads->insert(std::end(*pvThreads), std::begin(*nvidiaThreads), std::end(*nvidiaThreads)); - numWorkers = nvidiaThreads->size(); - delete nvidiaThreads; - } - else - { - // remove the plugin if we have found no GPUs - nvidiaplugin.unload(); - } - // we found at leat one working GPU - if(numWorkers != 0) + for(const auto& name : libNames) { - printer::inst()->print_msg(L0, "NVIDIA: use library '%s'", name.c_str()); - break; + printer::inst()->print_msg(L0, "NVIDIA: try to load library '%s'", name.c_str()); + nvidiaplugin.load("NVIDIA", name); + std::vector* nvidiaThreads = nvidiaplugin.startBackend(static_cast(pvThreads->size()), pWork, environment::inst()); + if(nvidiaThreads != nullptr) + { + pvThreads->insert(std::end(*pvThreads), std::begin(*nvidiaThreads), std::end(*nvidiaThreads)); + numWorkers = nvidiaThreads->size(); + delete nvidiaThreads; + } + else + { + // remove the plugin if we have found no GPUs + nvidiaplugin.unload(); + } + // we found at leat one working GPU + if(numWorkers != 0) + { + printer::inst()->print_msg(L0, "NVIDIA: use library '%s'", name.c_str()); + break; + } } } if(numWorkers == 0) diff --git a/xmrstak/backend/cpu/autoAdjustHwloc.hpp b/xmrstak/backend/cpu/autoAdjustHwloc.hpp index d1765155a..f06b0d679 100644 --- a/xmrstak/backend/cpu/autoAdjustHwloc.hpp +++ b/xmrstak/backend/cpu/autoAdjustHwloc.hpp @@ -21,10 +21,10 @@ namespace xmrstak namespace cpu { -class autoAdjust +class autoAdjustHwloc { - public: - autoAdjust() +public: + autoAdjustHwloc() { auto neededAlgorithms = ::jconf::inst()->GetCurrentCoinSelection().GetAllAlgorithms(); @@ -60,6 +60,7 @@ class autoAdjust conf += "/*\n//CPU config is disabled by default because cryptonight_gpu is not suitable for CPU mining.\n"; } + bool is_successful = true; try { std::vector tlcs; @@ -86,10 +87,8 @@ class autoAdjust } catch(const std::runtime_error& err) { - // \todo add fallback to default auto adjust - conf += std::string(" { \"low_power_mode\" : false"); - conf += std::string(", \"no_prefetch\" : true, \"asm\" : \"off\", \"affine_to_cpu\" : false },\n"); - printer::inst()->print_msg(L0, "Autoconf FAILED: %s. Create config for a single thread.", err.what()); + is_successful = false; + printer::inst()->print_msg(L0, "Autoconf with hwloc FAILED: %s. Trying basic autoconf.", err.what()); } if(useCryptonight_gpu) @@ -101,7 +100,7 @@ class autoAdjust /* Destroy topology object. */ hwloc_topology_destroy(topology); - return true; + return is_successful; } private: diff --git a/xmrstak/backend/cpu/minethd.cpp b/xmrstak/backend/cpu/minethd.cpp index 463be1aab..72570e96a 100644 --- a/xmrstak/backend/cpu/minethd.cpp +++ b/xmrstak/backend/cpu/minethd.cpp @@ -40,6 +40,7 @@ #ifndef CONF_NO_HWLOC #include "autoAdjustHwloc.hpp" +#include "autoAdjust.hpp" #else #include "autoAdjust.hpp" #endif @@ -515,9 +516,23 @@ std::vector minethd::thread_starter(uint32_t threadOffset, miner_work if(!configEditor::file_exist(params::inst().configFileCPU)) { +#ifndef CONF_NO_HWLOC + autoAdjustHwloc adjustHwloc; + if(!adjustHwloc.printConfig()) + { + autoAdjust adjust; + if(!adjust.printConfig()) + { + return pvThreads; + } + } +#else autoAdjust adjust; if(!adjust.printConfig()) + { return pvThreads; + } +#endif } if(!jconf::inst()->parse_config()) diff --git a/xmrstak/backend/iBackend.hpp b/xmrstak/backend/iBackend.hpp index dd59b6c52..3ca598bdd 100644 --- a/xmrstak/backend/iBackend.hpp +++ b/xmrstak/backend/iBackend.hpp @@ -46,6 +46,7 @@ struct iBackend std::atomic iHashCount; std::atomic iTimestamp; uint32_t iThreadNo; + uint32_t iGpuIndex; BackendType backendType = UNKNOWN; uint64_t iLastStamp = get_timestamp_ms(); double avgHashPerMsec = 0.0; diff --git a/xmrstak/backend/nvidia/autoAdjust.hpp b/xmrstak/backend/nvidia/autoAdjust.hpp index a7f35b18b..bf195f768 100644 --- a/xmrstak/backend/nvidia/autoAdjust.hpp +++ b/xmrstak/backend/nvidia/autoAdjust.hpp @@ -81,8 +81,32 @@ class autoAdjust std::string conf; for(auto& ctx : nvidCtxVec) { + std::string enabledGpus = params::inst().nvidiaGpus; + bool enabled = true; + if (!enabledGpus.empty()) + { + enabled = false; + std::stringstream ss(enabledGpus); + + int i = -1; + while (ss >> i) + { + if (i == ctx.device_id) + { + enabled = true; + break; + } + + while (ss.peek() == ',' || ss.peek() == ' ') + ss.ignore(); + } + } + if(ctx.device_threads * ctx.device_blocks > 0) { + if (!enabled) + conf += "/* Disabled\n"; + conf += std::string(" // gpu: ") + ctx.name + " architecture: " + std::to_string(ctx.device_arch[0] * 10 + ctx.device_arch[1]) + "\n"; conf += std::string(" // memory: ") + std::to_string(ctx.free_device_memory / byte2mib) + "/" + std::to_string(ctx.total_device_memory / byte2mib) + " MiB\n"; conf += std::string(" // smx: ") + std::to_string(ctx.device_mpcount) + "\n"; @@ -92,6 +116,9 @@ class autoAdjust " \"affine_to_cpu\" : false, \"sync_mode\" : 3,\n" + " \"mem_mode\" : 1,\n" + " },\n"; + + if (!enabled) + conf += "*/\n"; } } diff --git a/xmrstak/backend/nvidia/minethd.cpp b/xmrstak/backend/nvidia/minethd.cpp index 32b21dc71..86c860153 100644 --- a/xmrstak/backend/nvidia/minethd.cpp +++ b/xmrstak/backend/nvidia/minethd.cpp @@ -70,6 +70,7 @@ minethd::minethd(miner_work& pWork, size_t iNo, const jconf::thd_cfg& cfg) oWork = pWork; bQuit = 0; iThreadNo = (uint8_t)iNo; + this->iGpuIndex = cfg.id; iJobNo = 0; ctx.device_id = (int)cfg.id; diff --git a/xmrstak/backend/nvidia/nvcc_code/cuda_aes.hpp b/xmrstak/backend/nvidia/nvcc_code/cuda_aes.hpp index d33e76715..385afb9ec 100644 --- a/xmrstak/backend/nvidia/nvcc_code/cuda_aes.hpp +++ b/xmrstak/backend/nvidia/nvcc_code/cuda_aes.hpp @@ -3,278 +3,560 @@ #include +#include "cuda_extra.hpp" + #define N_COLS 4 #define WPOLY 0x011b +static __constant__ uint32_t d_t_fn256[256 * 32] = +{ + 0xa56363c6U, 0xa56363c6U, 0xa56363c6U, 0xa56363c6U, 0xa56363c6U, 0xa56363c6U, 0xa56363c6U, 0xa56363c6U, 0xa56363c6U, 0xa56363c6U, 0xa56363c6U, 0xa56363c6U, 0xa56363c6U, 0xa56363c6U, 0xa56363c6U, 0xa56363c6U, 0xa56363c6U, 0xa56363c6U, 0xa56363c6U, 0xa56363c6U, 0xa56363c6U, 0xa56363c6U, 0xa56363c6U, 0xa56363c6U, 0xa56363c6U, 0xa56363c6U, 0xa56363c6U, 0xa56363c6U, 0xa56363c6U, 0xa56363c6U, 0xa56363c6U, 0xa56363c6U, + 0x847c7cf8U, 0x847c7cf8U, 0x847c7cf8U, 0x847c7cf8U, 0x847c7cf8U, 0x847c7cf8U, 0x847c7cf8U, 0x847c7cf8U, 0x847c7cf8U, 0x847c7cf8U, 0x847c7cf8U, 0x847c7cf8U, 0x847c7cf8U, 0x847c7cf8U, 0x847c7cf8U, 0x847c7cf8U, 0x847c7cf8U, 0x847c7cf8U, 0x847c7cf8U, 0x847c7cf8U, 0x847c7cf8U, 0x847c7cf8U, 0x847c7cf8U, 0x847c7cf8U, 0x847c7cf8U, 0x847c7cf8U, 0x847c7cf8U, 0x847c7cf8U, 0x847c7cf8U, 0x847c7cf8U, 0x847c7cf8U, 0x847c7cf8U, + 0x997777eeU, 0x997777eeU, 0x997777eeU, 0x997777eeU, 0x997777eeU, 0x997777eeU, 0x997777eeU, 0x997777eeU, 0x997777eeU, 0x997777eeU, 0x997777eeU, 0x997777eeU, 0x997777eeU, 0x997777eeU, 0x997777eeU, 0x997777eeU, 0x997777eeU, 0x997777eeU, 0x997777eeU, 0x997777eeU, 0x997777eeU, 0x997777eeU, 0x997777eeU, 0x997777eeU, 0x997777eeU, 0x997777eeU, 0x997777eeU, 0x997777eeU, 0x997777eeU, 0x997777eeU, 0x997777eeU, 0x997777eeU, + 0x8d7b7bf6U, 0x8d7b7bf6U, 0x8d7b7bf6U, 0x8d7b7bf6U, 0x8d7b7bf6U, 0x8d7b7bf6U, 0x8d7b7bf6U, 0x8d7b7bf6U, 0x8d7b7bf6U, 0x8d7b7bf6U, 0x8d7b7bf6U, 0x8d7b7bf6U, 0x8d7b7bf6U, 0x8d7b7bf6U, 0x8d7b7bf6U, 0x8d7b7bf6U, 0x8d7b7bf6U, 0x8d7b7bf6U, 0x8d7b7bf6U, 0x8d7b7bf6U, 0x8d7b7bf6U, 0x8d7b7bf6U, 0x8d7b7bf6U, 0x8d7b7bf6U, 0x8d7b7bf6U, 0x8d7b7bf6U, 0x8d7b7bf6U, 0x8d7b7bf6U, 0x8d7b7bf6U, 0x8d7b7bf6U, 0x8d7b7bf6U, 0x8d7b7bf6U, + 0xdf2f2ffU, 0xdf2f2ffU, 0xdf2f2ffU, 0xdf2f2ffU, 0xdf2f2ffU, 0xdf2f2ffU, 0xdf2f2ffU, 0xdf2f2ffU, 0xdf2f2ffU, 0xdf2f2ffU, 0xdf2f2ffU, 0xdf2f2ffU, 0xdf2f2ffU, 0xdf2f2ffU, 0xdf2f2ffU, 0xdf2f2ffU, 0xdf2f2ffU, 0xdf2f2ffU, 0xdf2f2ffU, 0xdf2f2ffU, 0xdf2f2ffU, 0xdf2f2ffU, 0xdf2f2ffU, 0xdf2f2ffU, 0xdf2f2ffU, 0xdf2f2ffU, 0xdf2f2ffU, 0xdf2f2ffU, 0xdf2f2ffU, 0xdf2f2ffU, 0xdf2f2ffU, 0xdf2f2ffU, + 0xbd6b6bd6U, 0xbd6b6bd6U, 0xbd6b6bd6U, 0xbd6b6bd6U, 0xbd6b6bd6U, 0xbd6b6bd6U, 0xbd6b6bd6U, 0xbd6b6bd6U, 0xbd6b6bd6U, 0xbd6b6bd6U, 0xbd6b6bd6U, 0xbd6b6bd6U, 0xbd6b6bd6U, 0xbd6b6bd6U, 0xbd6b6bd6U, 0xbd6b6bd6U, 0xbd6b6bd6U, 0xbd6b6bd6U, 0xbd6b6bd6U, 0xbd6b6bd6U, 0xbd6b6bd6U, 0xbd6b6bd6U, 0xbd6b6bd6U, 0xbd6b6bd6U, 0xbd6b6bd6U, 0xbd6b6bd6U, 0xbd6b6bd6U, 0xbd6b6bd6U, 0xbd6b6bd6U, 0xbd6b6bd6U, 0xbd6b6bd6U, 0xbd6b6bd6U, + 0xb16f6fdeU, 0xb16f6fdeU, 0xb16f6fdeU, 0xb16f6fdeU, 0xb16f6fdeU, 0xb16f6fdeU, 0xb16f6fdeU, 0xb16f6fdeU, 0xb16f6fdeU, 0xb16f6fdeU, 0xb16f6fdeU, 0xb16f6fdeU, 0xb16f6fdeU, 0xb16f6fdeU, 0xb16f6fdeU, 0xb16f6fdeU, 0xb16f6fdeU, 0xb16f6fdeU, 0xb16f6fdeU, 0xb16f6fdeU, 0xb16f6fdeU, 0xb16f6fdeU, 0xb16f6fdeU, 0xb16f6fdeU, 0xb16f6fdeU, 0xb16f6fdeU, 0xb16f6fdeU, 0xb16f6fdeU, 0xb16f6fdeU, 0xb16f6fdeU, 0xb16f6fdeU, 0xb16f6fdeU, + 0x54c5c591U, 0x54c5c591U, 0x54c5c591U, 0x54c5c591U, 0x54c5c591U, 0x54c5c591U, 0x54c5c591U, 0x54c5c591U, 0x54c5c591U, 0x54c5c591U, 0x54c5c591U, 0x54c5c591U, 0x54c5c591U, 0x54c5c591U, 0x54c5c591U, 0x54c5c591U, 0x54c5c591U, 0x54c5c591U, 0x54c5c591U, 0x54c5c591U, 0x54c5c591U, 0x54c5c591U, 0x54c5c591U, 0x54c5c591U, 0x54c5c591U, 0x54c5c591U, 0x54c5c591U, 0x54c5c591U, 0x54c5c591U, 0x54c5c591U, 0x54c5c591U, 0x54c5c591U, + 0x50303060U, 0x50303060U, 0x50303060U, 0x50303060U, 0x50303060U, 0x50303060U, 0x50303060U, 0x50303060U, 0x50303060U, 0x50303060U, 0x50303060U, 0x50303060U, 0x50303060U, 0x50303060U, 0x50303060U, 0x50303060U, 0x50303060U, 0x50303060U, 0x50303060U, 0x50303060U, 0x50303060U, 0x50303060U, 0x50303060U, 0x50303060U, 0x50303060U, 0x50303060U, 0x50303060U, 0x50303060U, 0x50303060U, 0x50303060U, 0x50303060U, 0x50303060U, + 0x3010102U, 0x3010102U, 0x3010102U, 0x3010102U, 0x3010102U, 0x3010102U, 0x3010102U, 0x3010102U, 0x3010102U, 0x3010102U, 0x3010102U, 0x3010102U, 0x3010102U, 0x3010102U, 0x3010102U, 0x3010102U, 0x3010102U, 0x3010102U, 0x3010102U, 0x3010102U, 0x3010102U, 0x3010102U, 0x3010102U, 0x3010102U, 0x3010102U, 0x3010102U, 0x3010102U, 0x3010102U, 0x3010102U, 0x3010102U, 0x3010102U, 0x3010102U, + 0xa96767ceU, 0xa96767ceU, 0xa96767ceU, 0xa96767ceU, 0xa96767ceU, 0xa96767ceU, 0xa96767ceU, 0xa96767ceU, 0xa96767ceU, 0xa96767ceU, 0xa96767ceU, 0xa96767ceU, 0xa96767ceU, 0xa96767ceU, 0xa96767ceU, 0xa96767ceU, 0xa96767ceU, 0xa96767ceU, 0xa96767ceU, 0xa96767ceU, 0xa96767ceU, 0xa96767ceU, 0xa96767ceU, 0xa96767ceU, 0xa96767ceU, 0xa96767ceU, 0xa96767ceU, 0xa96767ceU, 0xa96767ceU, 0xa96767ceU, 0xa96767ceU, 0xa96767ceU, + 0x7d2b2b56U, 0x7d2b2b56U, 0x7d2b2b56U, 0x7d2b2b56U, 0x7d2b2b56U, 0x7d2b2b56U, 0x7d2b2b56U, 0x7d2b2b56U, 0x7d2b2b56U, 0x7d2b2b56U, 0x7d2b2b56U, 0x7d2b2b56U, 0x7d2b2b56U, 0x7d2b2b56U, 0x7d2b2b56U, 0x7d2b2b56U, 0x7d2b2b56U, 0x7d2b2b56U, 0x7d2b2b56U, 0x7d2b2b56U, 0x7d2b2b56U, 0x7d2b2b56U, 0x7d2b2b56U, 0x7d2b2b56U, 0x7d2b2b56U, 0x7d2b2b56U, 0x7d2b2b56U, 0x7d2b2b56U, 0x7d2b2b56U, 0x7d2b2b56U, 0x7d2b2b56U, 0x7d2b2b56U, + 0x19fefee7U, 0x19fefee7U, 0x19fefee7U, 0x19fefee7U, 0x19fefee7U, 0x19fefee7U, 0x19fefee7U, 0x19fefee7U, 0x19fefee7U, 0x19fefee7U, 0x19fefee7U, 0x19fefee7U, 0x19fefee7U, 0x19fefee7U, 0x19fefee7U, 0x19fefee7U, 0x19fefee7U, 0x19fefee7U, 0x19fefee7U, 0x19fefee7U, 0x19fefee7U, 0x19fefee7U, 0x19fefee7U, 0x19fefee7U, 0x19fefee7U, 0x19fefee7U, 0x19fefee7U, 0x19fefee7U, 0x19fefee7U, 0x19fefee7U, 0x19fefee7U, 0x19fefee7U, + 0x62d7d7b5U, 0x62d7d7b5U, 0x62d7d7b5U, 0x62d7d7b5U, 0x62d7d7b5U, 0x62d7d7b5U, 0x62d7d7b5U, 0x62d7d7b5U, 0x62d7d7b5U, 0x62d7d7b5U, 0x62d7d7b5U, 0x62d7d7b5U, 0x62d7d7b5U, 0x62d7d7b5U, 0x62d7d7b5U, 0x62d7d7b5U, 0x62d7d7b5U, 0x62d7d7b5U, 0x62d7d7b5U, 0x62d7d7b5U, 0x62d7d7b5U, 0x62d7d7b5U, 0x62d7d7b5U, 0x62d7d7b5U, 0x62d7d7b5U, 0x62d7d7b5U, 0x62d7d7b5U, 0x62d7d7b5U, 0x62d7d7b5U, 0x62d7d7b5U, 0x62d7d7b5U, 0x62d7d7b5U, + 0xe6abab4dU, 0xe6abab4dU, 0xe6abab4dU, 0xe6abab4dU, 0xe6abab4dU, 0xe6abab4dU, 0xe6abab4dU, 0xe6abab4dU, 0xe6abab4dU, 0xe6abab4dU, 0xe6abab4dU, 0xe6abab4dU, 0xe6abab4dU, 0xe6abab4dU, 0xe6abab4dU, 0xe6abab4dU, 0xe6abab4dU, 0xe6abab4dU, 0xe6abab4dU, 0xe6abab4dU, 0xe6abab4dU, 0xe6abab4dU, 0xe6abab4dU, 0xe6abab4dU, 0xe6abab4dU, 0xe6abab4dU, 0xe6abab4dU, 0xe6abab4dU, 0xe6abab4dU, 0xe6abab4dU, 0xe6abab4dU, 0xe6abab4dU, + 0x9a7676ecU, 0x9a7676ecU, 0x9a7676ecU, 0x9a7676ecU, 0x9a7676ecU, 0x9a7676ecU, 0x9a7676ecU, 0x9a7676ecU, 0x9a7676ecU, 0x9a7676ecU, 0x9a7676ecU, 0x9a7676ecU, 0x9a7676ecU, 0x9a7676ecU, 0x9a7676ecU, 0x9a7676ecU, 0x9a7676ecU, 0x9a7676ecU, 0x9a7676ecU, 0x9a7676ecU, 0x9a7676ecU, 0x9a7676ecU, 0x9a7676ecU, 0x9a7676ecU, 0x9a7676ecU, 0x9a7676ecU, 0x9a7676ecU, 0x9a7676ecU, 0x9a7676ecU, 0x9a7676ecU, 0x9a7676ecU, 0x9a7676ecU, + 0x45caca8fU, 0x45caca8fU, 0x45caca8fU, 0x45caca8fU, 0x45caca8fU, 0x45caca8fU, 0x45caca8fU, 0x45caca8fU, 0x45caca8fU, 0x45caca8fU, 0x45caca8fU, 0x45caca8fU, 0x45caca8fU, 0x45caca8fU, 0x45caca8fU, 0x45caca8fU, 0x45caca8fU, 0x45caca8fU, 0x45caca8fU, 0x45caca8fU, 0x45caca8fU, 0x45caca8fU, 0x45caca8fU, 0x45caca8fU, 0x45caca8fU, 0x45caca8fU, 0x45caca8fU, 0x45caca8fU, 0x45caca8fU, 0x45caca8fU, 0x45caca8fU, 0x45caca8fU, + 0x9d82821fU, 0x9d82821fU, 0x9d82821fU, 0x9d82821fU, 0x9d82821fU, 0x9d82821fU, 0x9d82821fU, 0x9d82821fU, 0x9d82821fU, 0x9d82821fU, 0x9d82821fU, 0x9d82821fU, 0x9d82821fU, 0x9d82821fU, 0x9d82821fU, 0x9d82821fU, 0x9d82821fU, 0x9d82821fU, 0x9d82821fU, 0x9d82821fU, 0x9d82821fU, 0x9d82821fU, 0x9d82821fU, 0x9d82821fU, 0x9d82821fU, 0x9d82821fU, 0x9d82821fU, 0x9d82821fU, 0x9d82821fU, 0x9d82821fU, 0x9d82821fU, 0x9d82821fU, + 0x40c9c989U, 0x40c9c989U, 0x40c9c989U, 0x40c9c989U, 0x40c9c989U, 0x40c9c989U, 0x40c9c989U, 0x40c9c989U, 0x40c9c989U, 0x40c9c989U, 0x40c9c989U, 0x40c9c989U, 0x40c9c989U, 0x40c9c989U, 0x40c9c989U, 0x40c9c989U, 0x40c9c989U, 0x40c9c989U, 0x40c9c989U, 0x40c9c989U, 0x40c9c989U, 0x40c9c989U, 0x40c9c989U, 0x40c9c989U, 0x40c9c989U, 0x40c9c989U, 0x40c9c989U, 0x40c9c989U, 0x40c9c989U, 0x40c9c989U, 0x40c9c989U, 0x40c9c989U, + 0x877d7dfaU, 0x877d7dfaU, 0x877d7dfaU, 0x877d7dfaU, 0x877d7dfaU, 0x877d7dfaU, 0x877d7dfaU, 0x877d7dfaU, 0x877d7dfaU, 0x877d7dfaU, 0x877d7dfaU, 0x877d7dfaU, 0x877d7dfaU, 0x877d7dfaU, 0x877d7dfaU, 0x877d7dfaU, 0x877d7dfaU, 0x877d7dfaU, 0x877d7dfaU, 0x877d7dfaU, 0x877d7dfaU, 0x877d7dfaU, 0x877d7dfaU, 0x877d7dfaU, 0x877d7dfaU, 0x877d7dfaU, 0x877d7dfaU, 0x877d7dfaU, 0x877d7dfaU, 0x877d7dfaU, 0x877d7dfaU, 0x877d7dfaU, + 0x15fafaefU, 0x15fafaefU, 0x15fafaefU, 0x15fafaefU, 0x15fafaefU, 0x15fafaefU, 0x15fafaefU, 0x15fafaefU, 0x15fafaefU, 0x15fafaefU, 0x15fafaefU, 0x15fafaefU, 0x15fafaefU, 0x15fafaefU, 0x15fafaefU, 0x15fafaefU, 0x15fafaefU, 0x15fafaefU, 0x15fafaefU, 0x15fafaefU, 0x15fafaefU, 0x15fafaefU, 0x15fafaefU, 0x15fafaefU, 0x15fafaefU, 0x15fafaefU, 0x15fafaefU, 0x15fafaefU, 0x15fafaefU, 0x15fafaefU, 0x15fafaefU, 0x15fafaefU, + 0xeb5959b2U, 0xeb5959b2U, 0xeb5959b2U, 0xeb5959b2U, 0xeb5959b2U, 0xeb5959b2U, 0xeb5959b2U, 0xeb5959b2U, 0xeb5959b2U, 0xeb5959b2U, 0xeb5959b2U, 0xeb5959b2U, 0xeb5959b2U, 0xeb5959b2U, 0xeb5959b2U, 0xeb5959b2U, 0xeb5959b2U, 0xeb5959b2U, 0xeb5959b2U, 0xeb5959b2U, 0xeb5959b2U, 0xeb5959b2U, 0xeb5959b2U, 0xeb5959b2U, 0xeb5959b2U, 0xeb5959b2U, 0xeb5959b2U, 0xeb5959b2U, 0xeb5959b2U, 0xeb5959b2U, 0xeb5959b2U, 0xeb5959b2U, + 0xc947478eU, 0xc947478eU, 0xc947478eU, 0xc947478eU, 0xc947478eU, 0xc947478eU, 0xc947478eU, 0xc947478eU, 0xc947478eU, 0xc947478eU, 0xc947478eU, 0xc947478eU, 0xc947478eU, 0xc947478eU, 0xc947478eU, 0xc947478eU, 0xc947478eU, 0xc947478eU, 0xc947478eU, 0xc947478eU, 0xc947478eU, 0xc947478eU, 0xc947478eU, 0xc947478eU, 0xc947478eU, 0xc947478eU, 0xc947478eU, 0xc947478eU, 0xc947478eU, 0xc947478eU, 0xc947478eU, 0xc947478eU, + 0xbf0f0fbU, 0xbf0f0fbU, 0xbf0f0fbU, 0xbf0f0fbU, 0xbf0f0fbU, 0xbf0f0fbU, 0xbf0f0fbU, 0xbf0f0fbU, 0xbf0f0fbU, 0xbf0f0fbU, 0xbf0f0fbU, 0xbf0f0fbU, 0xbf0f0fbU, 0xbf0f0fbU, 0xbf0f0fbU, 0xbf0f0fbU, 0xbf0f0fbU, 0xbf0f0fbU, 0xbf0f0fbU, 0xbf0f0fbU, 0xbf0f0fbU, 0xbf0f0fbU, 0xbf0f0fbU, 0xbf0f0fbU, 0xbf0f0fbU, 0xbf0f0fbU, 0xbf0f0fbU, 0xbf0f0fbU, 0xbf0f0fbU, 0xbf0f0fbU, 0xbf0f0fbU, 0xbf0f0fbU, + 0xecadad41U, 0xecadad41U, 0xecadad41U, 0xecadad41U, 0xecadad41U, 0xecadad41U, 0xecadad41U, 0xecadad41U, 0xecadad41U, 0xecadad41U, 0xecadad41U, 0xecadad41U, 0xecadad41U, 0xecadad41U, 0xecadad41U, 0xecadad41U, 0xecadad41U, 0xecadad41U, 0xecadad41U, 0xecadad41U, 0xecadad41U, 0xecadad41U, 0xecadad41U, 0xecadad41U, 0xecadad41U, 0xecadad41U, 0xecadad41U, 0xecadad41U, 0xecadad41U, 0xecadad41U, 0xecadad41U, 0xecadad41U, + 0x67d4d4b3U, 0x67d4d4b3U, 0x67d4d4b3U, 0x67d4d4b3U, 0x67d4d4b3U, 0x67d4d4b3U, 0x67d4d4b3U, 0x67d4d4b3U, 0x67d4d4b3U, 0x67d4d4b3U, 0x67d4d4b3U, 0x67d4d4b3U, 0x67d4d4b3U, 0x67d4d4b3U, 0x67d4d4b3U, 0x67d4d4b3U, 0x67d4d4b3U, 0x67d4d4b3U, 0x67d4d4b3U, 0x67d4d4b3U, 0x67d4d4b3U, 0x67d4d4b3U, 0x67d4d4b3U, 0x67d4d4b3U, 0x67d4d4b3U, 0x67d4d4b3U, 0x67d4d4b3U, 0x67d4d4b3U, 0x67d4d4b3U, 0x67d4d4b3U, 0x67d4d4b3U, 0x67d4d4b3U, + 0xfda2a25fU, 0xfda2a25fU, 0xfda2a25fU, 0xfda2a25fU, 0xfda2a25fU, 0xfda2a25fU, 0xfda2a25fU, 0xfda2a25fU, 0xfda2a25fU, 0xfda2a25fU, 0xfda2a25fU, 0xfda2a25fU, 0xfda2a25fU, 0xfda2a25fU, 0xfda2a25fU, 0xfda2a25fU, 0xfda2a25fU, 0xfda2a25fU, 0xfda2a25fU, 0xfda2a25fU, 0xfda2a25fU, 0xfda2a25fU, 0xfda2a25fU, 0xfda2a25fU, 0xfda2a25fU, 0xfda2a25fU, 0xfda2a25fU, 0xfda2a25fU, 0xfda2a25fU, 0xfda2a25fU, 0xfda2a25fU, 0xfda2a25fU, + 0xeaafaf45U, 0xeaafaf45U, 0xeaafaf45U, 0xeaafaf45U, 0xeaafaf45U, 0xeaafaf45U, 0xeaafaf45U, 0xeaafaf45U, 0xeaafaf45U, 0xeaafaf45U, 0xeaafaf45U, 0xeaafaf45U, 0xeaafaf45U, 0xeaafaf45U, 0xeaafaf45U, 0xeaafaf45U, 0xeaafaf45U, 0xeaafaf45U, 0xeaafaf45U, 0xeaafaf45U, 0xeaafaf45U, 0xeaafaf45U, 0xeaafaf45U, 0xeaafaf45U, 0xeaafaf45U, 0xeaafaf45U, 0xeaafaf45U, 0xeaafaf45U, 0xeaafaf45U, 0xeaafaf45U, 0xeaafaf45U, 0xeaafaf45U, + 0xbf9c9c23U, 0xbf9c9c23U, 0xbf9c9c23U, 0xbf9c9c23U, 0xbf9c9c23U, 0xbf9c9c23U, 0xbf9c9c23U, 0xbf9c9c23U, 0xbf9c9c23U, 0xbf9c9c23U, 0xbf9c9c23U, 0xbf9c9c23U, 0xbf9c9c23U, 0xbf9c9c23U, 0xbf9c9c23U, 0xbf9c9c23U, 0xbf9c9c23U, 0xbf9c9c23U, 0xbf9c9c23U, 0xbf9c9c23U, 0xbf9c9c23U, 0xbf9c9c23U, 0xbf9c9c23U, 0xbf9c9c23U, 0xbf9c9c23U, 0xbf9c9c23U, 0xbf9c9c23U, 0xbf9c9c23U, 0xbf9c9c23U, 0xbf9c9c23U, 0xbf9c9c23U, 0xbf9c9c23U, + 0xf7a4a453U, 0xf7a4a453U, 0xf7a4a453U, 0xf7a4a453U, 0xf7a4a453U, 0xf7a4a453U, 0xf7a4a453U, 0xf7a4a453U, 0xf7a4a453U, 0xf7a4a453U, 0xf7a4a453U, 0xf7a4a453U, 0xf7a4a453U, 0xf7a4a453U, 0xf7a4a453U, 0xf7a4a453U, 0xf7a4a453U, 0xf7a4a453U, 0xf7a4a453U, 0xf7a4a453U, 0xf7a4a453U, 0xf7a4a453U, 0xf7a4a453U, 0xf7a4a453U, 0xf7a4a453U, 0xf7a4a453U, 0xf7a4a453U, 0xf7a4a453U, 0xf7a4a453U, 0xf7a4a453U, 0xf7a4a453U, 0xf7a4a453U, + 0x967272e4U, 0x967272e4U, 0x967272e4U, 0x967272e4U, 0x967272e4U, 0x967272e4U, 0x967272e4U, 0x967272e4U, 0x967272e4U, 0x967272e4U, 0x967272e4U, 0x967272e4U, 0x967272e4U, 0x967272e4U, 0x967272e4U, 0x967272e4U, 0x967272e4U, 0x967272e4U, 0x967272e4U, 0x967272e4U, 0x967272e4U, 0x967272e4U, 0x967272e4U, 0x967272e4U, 0x967272e4U, 0x967272e4U, 0x967272e4U, 0x967272e4U, 0x967272e4U, 0x967272e4U, 0x967272e4U, 0x967272e4U, + 0x5bc0c09bU, 0x5bc0c09bU, 0x5bc0c09bU, 0x5bc0c09bU, 0x5bc0c09bU, 0x5bc0c09bU, 0x5bc0c09bU, 0x5bc0c09bU, 0x5bc0c09bU, 0x5bc0c09bU, 0x5bc0c09bU, 0x5bc0c09bU, 0x5bc0c09bU, 0x5bc0c09bU, 0x5bc0c09bU, 0x5bc0c09bU, 0x5bc0c09bU, 0x5bc0c09bU, 0x5bc0c09bU, 0x5bc0c09bU, 0x5bc0c09bU, 0x5bc0c09bU, 0x5bc0c09bU, 0x5bc0c09bU, 0x5bc0c09bU, 0x5bc0c09bU, 0x5bc0c09bU, 0x5bc0c09bU, 0x5bc0c09bU, 0x5bc0c09bU, 0x5bc0c09bU, 0x5bc0c09bU, + 0xc2b7b775U, 0xc2b7b775U, 0xc2b7b775U, 0xc2b7b775U, 0xc2b7b775U, 0xc2b7b775U, 0xc2b7b775U, 0xc2b7b775U, 0xc2b7b775U, 0xc2b7b775U, 0xc2b7b775U, 0xc2b7b775U, 0xc2b7b775U, 0xc2b7b775U, 0xc2b7b775U, 0xc2b7b775U, 0xc2b7b775U, 0xc2b7b775U, 0xc2b7b775U, 0xc2b7b775U, 0xc2b7b775U, 0xc2b7b775U, 0xc2b7b775U, 0xc2b7b775U, 0xc2b7b775U, 0xc2b7b775U, 0xc2b7b775U, 0xc2b7b775U, 0xc2b7b775U, 0xc2b7b775U, 0xc2b7b775U, 0xc2b7b775U, + 0x1cfdfde1U, 0x1cfdfde1U, 0x1cfdfde1U, 0x1cfdfde1U, 0x1cfdfde1U, 0x1cfdfde1U, 0x1cfdfde1U, 0x1cfdfde1U, 0x1cfdfde1U, 0x1cfdfde1U, 0x1cfdfde1U, 0x1cfdfde1U, 0x1cfdfde1U, 0x1cfdfde1U, 0x1cfdfde1U, 0x1cfdfde1U, 0x1cfdfde1U, 0x1cfdfde1U, 0x1cfdfde1U, 0x1cfdfde1U, 0x1cfdfde1U, 0x1cfdfde1U, 0x1cfdfde1U, 0x1cfdfde1U, 0x1cfdfde1U, 0x1cfdfde1U, 0x1cfdfde1U, 0x1cfdfde1U, 0x1cfdfde1U, 0x1cfdfde1U, 0x1cfdfde1U, 0x1cfdfde1U, + 0xae93933dU, 0xae93933dU, 0xae93933dU, 0xae93933dU, 0xae93933dU, 0xae93933dU, 0xae93933dU, 0xae93933dU, 0xae93933dU, 0xae93933dU, 0xae93933dU, 0xae93933dU, 0xae93933dU, 0xae93933dU, 0xae93933dU, 0xae93933dU, 0xae93933dU, 0xae93933dU, 0xae93933dU, 0xae93933dU, 0xae93933dU, 0xae93933dU, 0xae93933dU, 0xae93933dU, 0xae93933dU, 0xae93933dU, 0xae93933dU, 0xae93933dU, 0xae93933dU, 0xae93933dU, 0xae93933dU, 0xae93933dU, + 0x6a26264cU, 0x6a26264cU, 0x6a26264cU, 0x6a26264cU, 0x6a26264cU, 0x6a26264cU, 0x6a26264cU, 0x6a26264cU, 0x6a26264cU, 0x6a26264cU, 0x6a26264cU, 0x6a26264cU, 0x6a26264cU, 0x6a26264cU, 0x6a26264cU, 0x6a26264cU, 0x6a26264cU, 0x6a26264cU, 0x6a26264cU, 0x6a26264cU, 0x6a26264cU, 0x6a26264cU, 0x6a26264cU, 0x6a26264cU, 0x6a26264cU, 0x6a26264cU, 0x6a26264cU, 0x6a26264cU, 0x6a26264cU, 0x6a26264cU, 0x6a26264cU, 0x6a26264cU, + 0x5a36366cU, 0x5a36366cU, 0x5a36366cU, 0x5a36366cU, 0x5a36366cU, 0x5a36366cU, 0x5a36366cU, 0x5a36366cU, 0x5a36366cU, 0x5a36366cU, 0x5a36366cU, 0x5a36366cU, 0x5a36366cU, 0x5a36366cU, 0x5a36366cU, 0x5a36366cU, 0x5a36366cU, 0x5a36366cU, 0x5a36366cU, 0x5a36366cU, 0x5a36366cU, 0x5a36366cU, 0x5a36366cU, 0x5a36366cU, 0x5a36366cU, 0x5a36366cU, 0x5a36366cU, 0x5a36366cU, 0x5a36366cU, 0x5a36366cU, 0x5a36366cU, 0x5a36366cU, + 0x413f3f7eU, 0x413f3f7eU, 0x413f3f7eU, 0x413f3f7eU, 0x413f3f7eU, 0x413f3f7eU, 0x413f3f7eU, 0x413f3f7eU, 0x413f3f7eU, 0x413f3f7eU, 0x413f3f7eU, 0x413f3f7eU, 0x413f3f7eU, 0x413f3f7eU, 0x413f3f7eU, 0x413f3f7eU, 0x413f3f7eU, 0x413f3f7eU, 0x413f3f7eU, 0x413f3f7eU, 0x413f3f7eU, 0x413f3f7eU, 0x413f3f7eU, 0x413f3f7eU, 0x413f3f7eU, 0x413f3f7eU, 0x413f3f7eU, 0x413f3f7eU, 0x413f3f7eU, 0x413f3f7eU, 0x413f3f7eU, 0x413f3f7eU, + 0x2f7f7f5U, 0x2f7f7f5U, 0x2f7f7f5U, 0x2f7f7f5U, 0x2f7f7f5U, 0x2f7f7f5U, 0x2f7f7f5U, 0x2f7f7f5U, 0x2f7f7f5U, 0x2f7f7f5U, 0x2f7f7f5U, 0x2f7f7f5U, 0x2f7f7f5U, 0x2f7f7f5U, 0x2f7f7f5U, 0x2f7f7f5U, 0x2f7f7f5U, 0x2f7f7f5U, 0x2f7f7f5U, 0x2f7f7f5U, 0x2f7f7f5U, 0x2f7f7f5U, 0x2f7f7f5U, 0x2f7f7f5U, 0x2f7f7f5U, 0x2f7f7f5U, 0x2f7f7f5U, 0x2f7f7f5U, 0x2f7f7f5U, 0x2f7f7f5U, 0x2f7f7f5U, 0x2f7f7f5U, + 0x4fcccc83U, 0x4fcccc83U, 0x4fcccc83U, 0x4fcccc83U, 0x4fcccc83U, 0x4fcccc83U, 0x4fcccc83U, 0x4fcccc83U, 0x4fcccc83U, 0x4fcccc83U, 0x4fcccc83U, 0x4fcccc83U, 0x4fcccc83U, 0x4fcccc83U, 0x4fcccc83U, 0x4fcccc83U, 0x4fcccc83U, 0x4fcccc83U, 0x4fcccc83U, 0x4fcccc83U, 0x4fcccc83U, 0x4fcccc83U, 0x4fcccc83U, 0x4fcccc83U, 0x4fcccc83U, 0x4fcccc83U, 0x4fcccc83U, 0x4fcccc83U, 0x4fcccc83U, 0x4fcccc83U, 0x4fcccc83U, 0x4fcccc83U, + 0x5c343468U, 0x5c343468U, 0x5c343468U, 0x5c343468U, 0x5c343468U, 0x5c343468U, 0x5c343468U, 0x5c343468U, 0x5c343468U, 0x5c343468U, 0x5c343468U, 0x5c343468U, 0x5c343468U, 0x5c343468U, 0x5c343468U, 0x5c343468U, 0x5c343468U, 0x5c343468U, 0x5c343468U, 0x5c343468U, 0x5c343468U, 0x5c343468U, 0x5c343468U, 0x5c343468U, 0x5c343468U, 0x5c343468U, 0x5c343468U, 0x5c343468U, 0x5c343468U, 0x5c343468U, 0x5c343468U, 0x5c343468U, + 0xf4a5a551U, 0xf4a5a551U, 0xf4a5a551U, 0xf4a5a551U, 0xf4a5a551U, 0xf4a5a551U, 0xf4a5a551U, 0xf4a5a551U, 0xf4a5a551U, 0xf4a5a551U, 0xf4a5a551U, 0xf4a5a551U, 0xf4a5a551U, 0xf4a5a551U, 0xf4a5a551U, 0xf4a5a551U, 0xf4a5a551U, 0xf4a5a551U, 0xf4a5a551U, 0xf4a5a551U, 0xf4a5a551U, 0xf4a5a551U, 0xf4a5a551U, 0xf4a5a551U, 0xf4a5a551U, 0xf4a5a551U, 0xf4a5a551U, 0xf4a5a551U, 0xf4a5a551U, 0xf4a5a551U, 0xf4a5a551U, 0xf4a5a551U, + 0x34e5e5d1U, 0x34e5e5d1U, 0x34e5e5d1U, 0x34e5e5d1U, 0x34e5e5d1U, 0x34e5e5d1U, 0x34e5e5d1U, 0x34e5e5d1U, 0x34e5e5d1U, 0x34e5e5d1U, 0x34e5e5d1U, 0x34e5e5d1U, 0x34e5e5d1U, 0x34e5e5d1U, 0x34e5e5d1U, 0x34e5e5d1U, 0x34e5e5d1U, 0x34e5e5d1U, 0x34e5e5d1U, 0x34e5e5d1U, 0x34e5e5d1U, 0x34e5e5d1U, 0x34e5e5d1U, 0x34e5e5d1U, 0x34e5e5d1U, 0x34e5e5d1U, 0x34e5e5d1U, 0x34e5e5d1U, 0x34e5e5d1U, 0x34e5e5d1U, 0x34e5e5d1U, 0x34e5e5d1U, + 0x8f1f1f9U, 0x8f1f1f9U, 0x8f1f1f9U, 0x8f1f1f9U, 0x8f1f1f9U, 0x8f1f1f9U, 0x8f1f1f9U, 0x8f1f1f9U, 0x8f1f1f9U, 0x8f1f1f9U, 0x8f1f1f9U, 0x8f1f1f9U, 0x8f1f1f9U, 0x8f1f1f9U, 0x8f1f1f9U, 0x8f1f1f9U, 0x8f1f1f9U, 0x8f1f1f9U, 0x8f1f1f9U, 0x8f1f1f9U, 0x8f1f1f9U, 0x8f1f1f9U, 0x8f1f1f9U, 0x8f1f1f9U, 0x8f1f1f9U, 0x8f1f1f9U, 0x8f1f1f9U, 0x8f1f1f9U, 0x8f1f1f9U, 0x8f1f1f9U, 0x8f1f1f9U, 0x8f1f1f9U, + 0x937171e2U, 0x937171e2U, 0x937171e2U, 0x937171e2U, 0x937171e2U, 0x937171e2U, 0x937171e2U, 0x937171e2U, 0x937171e2U, 0x937171e2U, 0x937171e2U, 0x937171e2U, 0x937171e2U, 0x937171e2U, 0x937171e2U, 0x937171e2U, 0x937171e2U, 0x937171e2U, 0x937171e2U, 0x937171e2U, 0x937171e2U, 0x937171e2U, 0x937171e2U, 0x937171e2U, 0x937171e2U, 0x937171e2U, 0x937171e2U, 0x937171e2U, 0x937171e2U, 0x937171e2U, 0x937171e2U, 0x937171e2U, + 0x73d8d8abU, 0x73d8d8abU, 0x73d8d8abU, 0x73d8d8abU, 0x73d8d8abU, 0x73d8d8abU, 0x73d8d8abU, 0x73d8d8abU, 0x73d8d8abU, 0x73d8d8abU, 0x73d8d8abU, 0x73d8d8abU, 0x73d8d8abU, 0x73d8d8abU, 0x73d8d8abU, 0x73d8d8abU, 0x73d8d8abU, 0x73d8d8abU, 0x73d8d8abU, 0x73d8d8abU, 0x73d8d8abU, 0x73d8d8abU, 0x73d8d8abU, 0x73d8d8abU, 0x73d8d8abU, 0x73d8d8abU, 0x73d8d8abU, 0x73d8d8abU, 0x73d8d8abU, 0x73d8d8abU, 0x73d8d8abU, 0x73d8d8abU, + 0x53313162U, 0x53313162U, 0x53313162U, 0x53313162U, 0x53313162U, 0x53313162U, 0x53313162U, 0x53313162U, 0x53313162U, 0x53313162U, 0x53313162U, 0x53313162U, 0x53313162U, 0x53313162U, 0x53313162U, 0x53313162U, 0x53313162U, 0x53313162U, 0x53313162U, 0x53313162U, 0x53313162U, 0x53313162U, 0x53313162U, 0x53313162U, 0x53313162U, 0x53313162U, 0x53313162U, 0x53313162U, 0x53313162U, 0x53313162U, 0x53313162U, 0x53313162U, + 0x3f15152aU, 0x3f15152aU, 0x3f15152aU, 0x3f15152aU, 0x3f15152aU, 0x3f15152aU, 0x3f15152aU, 0x3f15152aU, 0x3f15152aU, 0x3f15152aU, 0x3f15152aU, 0x3f15152aU, 0x3f15152aU, 0x3f15152aU, 0x3f15152aU, 0x3f15152aU, 0x3f15152aU, 0x3f15152aU, 0x3f15152aU, 0x3f15152aU, 0x3f15152aU, 0x3f15152aU, 0x3f15152aU, 0x3f15152aU, 0x3f15152aU, 0x3f15152aU, 0x3f15152aU, 0x3f15152aU, 0x3f15152aU, 0x3f15152aU, 0x3f15152aU, 0x3f15152aU, + 0xc040408U, 0xc040408U, 0xc040408U, 0xc040408U, 0xc040408U, 0xc040408U, 0xc040408U, 0xc040408U, 0xc040408U, 0xc040408U, 0xc040408U, 0xc040408U, 0xc040408U, 0xc040408U, 0xc040408U, 0xc040408U, 0xc040408U, 0xc040408U, 0xc040408U, 0xc040408U, 0xc040408U, 0xc040408U, 0xc040408U, 0xc040408U, 0xc040408U, 0xc040408U, 0xc040408U, 0xc040408U, 0xc040408U, 0xc040408U, 0xc040408U, 0xc040408U, + 0x52c7c795U, 0x52c7c795U, 0x52c7c795U, 0x52c7c795U, 0x52c7c795U, 0x52c7c795U, 0x52c7c795U, 0x52c7c795U, 0x52c7c795U, 0x52c7c795U, 0x52c7c795U, 0x52c7c795U, 0x52c7c795U, 0x52c7c795U, 0x52c7c795U, 0x52c7c795U, 0x52c7c795U, 0x52c7c795U, 0x52c7c795U, 0x52c7c795U, 0x52c7c795U, 0x52c7c795U, 0x52c7c795U, 0x52c7c795U, 0x52c7c795U, 0x52c7c795U, 0x52c7c795U, 0x52c7c795U, 0x52c7c795U, 0x52c7c795U, 0x52c7c795U, 0x52c7c795U, + 0x65232346U, 0x65232346U, 0x65232346U, 0x65232346U, 0x65232346U, 0x65232346U, 0x65232346U, 0x65232346U, 0x65232346U, 0x65232346U, 0x65232346U, 0x65232346U, 0x65232346U, 0x65232346U, 0x65232346U, 0x65232346U, 0x65232346U, 0x65232346U, 0x65232346U, 0x65232346U, 0x65232346U, 0x65232346U, 0x65232346U, 0x65232346U, 0x65232346U, 0x65232346U, 0x65232346U, 0x65232346U, 0x65232346U, 0x65232346U, 0x65232346U, 0x65232346U, + 0x5ec3c39dU, 0x5ec3c39dU, 0x5ec3c39dU, 0x5ec3c39dU, 0x5ec3c39dU, 0x5ec3c39dU, 0x5ec3c39dU, 0x5ec3c39dU, 0x5ec3c39dU, 0x5ec3c39dU, 0x5ec3c39dU, 0x5ec3c39dU, 0x5ec3c39dU, 0x5ec3c39dU, 0x5ec3c39dU, 0x5ec3c39dU, 0x5ec3c39dU, 0x5ec3c39dU, 0x5ec3c39dU, 0x5ec3c39dU, 0x5ec3c39dU, 0x5ec3c39dU, 0x5ec3c39dU, 0x5ec3c39dU, 0x5ec3c39dU, 0x5ec3c39dU, 0x5ec3c39dU, 0x5ec3c39dU, 0x5ec3c39dU, 0x5ec3c39dU, 0x5ec3c39dU, 0x5ec3c39dU, + 0x28181830U, 0x28181830U, 0x28181830U, 0x28181830U, 0x28181830U, 0x28181830U, 0x28181830U, 0x28181830U, 0x28181830U, 0x28181830U, 0x28181830U, 0x28181830U, 0x28181830U, 0x28181830U, 0x28181830U, 0x28181830U, 0x28181830U, 0x28181830U, 0x28181830U, 0x28181830U, 0x28181830U, 0x28181830U, 0x28181830U, 0x28181830U, 0x28181830U, 0x28181830U, 0x28181830U, 0x28181830U, 0x28181830U, 0x28181830U, 0x28181830U, 0x28181830U, + 0xa1969637U, 0xa1969637U, 0xa1969637U, 0xa1969637U, 0xa1969637U, 0xa1969637U, 0xa1969637U, 0xa1969637U, 0xa1969637U, 0xa1969637U, 0xa1969637U, 0xa1969637U, 0xa1969637U, 0xa1969637U, 0xa1969637U, 0xa1969637U, 0xa1969637U, 0xa1969637U, 0xa1969637U, 0xa1969637U, 0xa1969637U, 0xa1969637U, 0xa1969637U, 0xa1969637U, 0xa1969637U, 0xa1969637U, 0xa1969637U, 0xa1969637U, 0xa1969637U, 0xa1969637U, 0xa1969637U, 0xa1969637U, + 0xf05050aU, 0xf05050aU, 0xf05050aU, 0xf05050aU, 0xf05050aU, 0xf05050aU, 0xf05050aU, 0xf05050aU, 0xf05050aU, 0xf05050aU, 0xf05050aU, 0xf05050aU, 0xf05050aU, 0xf05050aU, 0xf05050aU, 0xf05050aU, 0xf05050aU, 0xf05050aU, 0xf05050aU, 0xf05050aU, 0xf05050aU, 0xf05050aU, 0xf05050aU, 0xf05050aU, 0xf05050aU, 0xf05050aU, 0xf05050aU, 0xf05050aU, 0xf05050aU, 0xf05050aU, 0xf05050aU, 0xf05050aU, + 0xb59a9a2fU, 0xb59a9a2fU, 0xb59a9a2fU, 0xb59a9a2fU, 0xb59a9a2fU, 0xb59a9a2fU, 0xb59a9a2fU, 0xb59a9a2fU, 0xb59a9a2fU, 0xb59a9a2fU, 0xb59a9a2fU, 0xb59a9a2fU, 0xb59a9a2fU, 0xb59a9a2fU, 0xb59a9a2fU, 0xb59a9a2fU, 0xb59a9a2fU, 0xb59a9a2fU, 0xb59a9a2fU, 0xb59a9a2fU, 0xb59a9a2fU, 0xb59a9a2fU, 0xb59a9a2fU, 0xb59a9a2fU, 0xb59a9a2fU, 0xb59a9a2fU, 0xb59a9a2fU, 0xb59a9a2fU, 0xb59a9a2fU, 0xb59a9a2fU, 0xb59a9a2fU, 0xb59a9a2fU, + 0x907070eU, 0x907070eU, 0x907070eU, 0x907070eU, 0x907070eU, 0x907070eU, 0x907070eU, 0x907070eU, 0x907070eU, 0x907070eU, 0x907070eU, 0x907070eU, 0x907070eU, 0x907070eU, 0x907070eU, 0x907070eU, 0x907070eU, 0x907070eU, 0x907070eU, 0x907070eU, 0x907070eU, 0x907070eU, 0x907070eU, 0x907070eU, 0x907070eU, 0x907070eU, 0x907070eU, 0x907070eU, 0x907070eU, 0x907070eU, 0x907070eU, 0x907070eU, + 0x36121224U, 0x36121224U, 0x36121224U, 0x36121224U, 0x36121224U, 0x36121224U, 0x36121224U, 0x36121224U, 0x36121224U, 0x36121224U, 0x36121224U, 0x36121224U, 0x36121224U, 0x36121224U, 0x36121224U, 0x36121224U, 0x36121224U, 0x36121224U, 0x36121224U, 0x36121224U, 0x36121224U, 0x36121224U, 0x36121224U, 0x36121224U, 0x36121224U, 0x36121224U, 0x36121224U, 0x36121224U, 0x36121224U, 0x36121224U, 0x36121224U, 0x36121224U, + 0x9b80801bU, 0x9b80801bU, 0x9b80801bU, 0x9b80801bU, 0x9b80801bU, 0x9b80801bU, 0x9b80801bU, 0x9b80801bU, 0x9b80801bU, 0x9b80801bU, 0x9b80801bU, 0x9b80801bU, 0x9b80801bU, 0x9b80801bU, 0x9b80801bU, 0x9b80801bU, 0x9b80801bU, 0x9b80801bU, 0x9b80801bU, 0x9b80801bU, 0x9b80801bU, 0x9b80801bU, 0x9b80801bU, 0x9b80801bU, 0x9b80801bU, 0x9b80801bU, 0x9b80801bU, 0x9b80801bU, 0x9b80801bU, 0x9b80801bU, 0x9b80801bU, 0x9b80801bU, + 0x3de2e2dfU, 0x3de2e2dfU, 0x3de2e2dfU, 0x3de2e2dfU, 0x3de2e2dfU, 0x3de2e2dfU, 0x3de2e2dfU, 0x3de2e2dfU, 0x3de2e2dfU, 0x3de2e2dfU, 0x3de2e2dfU, 0x3de2e2dfU, 0x3de2e2dfU, 0x3de2e2dfU, 0x3de2e2dfU, 0x3de2e2dfU, 0x3de2e2dfU, 0x3de2e2dfU, 0x3de2e2dfU, 0x3de2e2dfU, 0x3de2e2dfU, 0x3de2e2dfU, 0x3de2e2dfU, 0x3de2e2dfU, 0x3de2e2dfU, 0x3de2e2dfU, 0x3de2e2dfU, 0x3de2e2dfU, 0x3de2e2dfU, 0x3de2e2dfU, 0x3de2e2dfU, 0x3de2e2dfU, + 0x26ebebcdU, 0x26ebebcdU, 0x26ebebcdU, 0x26ebebcdU, 0x26ebebcdU, 0x26ebebcdU, 0x26ebebcdU, 0x26ebebcdU, 0x26ebebcdU, 0x26ebebcdU, 0x26ebebcdU, 0x26ebebcdU, 0x26ebebcdU, 0x26ebebcdU, 0x26ebebcdU, 0x26ebebcdU, 0x26ebebcdU, 0x26ebebcdU, 0x26ebebcdU, 0x26ebebcdU, 0x26ebebcdU, 0x26ebebcdU, 0x26ebebcdU, 0x26ebebcdU, 0x26ebebcdU, 0x26ebebcdU, 0x26ebebcdU, 0x26ebebcdU, 0x26ebebcdU, 0x26ebebcdU, 0x26ebebcdU, 0x26ebebcdU, + 0x6927274eU, 0x6927274eU, 0x6927274eU, 0x6927274eU, 0x6927274eU, 0x6927274eU, 0x6927274eU, 0x6927274eU, 0x6927274eU, 0x6927274eU, 0x6927274eU, 0x6927274eU, 0x6927274eU, 0x6927274eU, 0x6927274eU, 0x6927274eU, 0x6927274eU, 0x6927274eU, 0x6927274eU, 0x6927274eU, 0x6927274eU, 0x6927274eU, 0x6927274eU, 0x6927274eU, 0x6927274eU, 0x6927274eU, 0x6927274eU, 0x6927274eU, 0x6927274eU, 0x6927274eU, 0x6927274eU, 0x6927274eU, + 0xcdb2b27fU, 0xcdb2b27fU, 0xcdb2b27fU, 0xcdb2b27fU, 0xcdb2b27fU, 0xcdb2b27fU, 0xcdb2b27fU, 0xcdb2b27fU, 0xcdb2b27fU, 0xcdb2b27fU, 0xcdb2b27fU, 0xcdb2b27fU, 0xcdb2b27fU, 0xcdb2b27fU, 0xcdb2b27fU, 0xcdb2b27fU, 0xcdb2b27fU, 0xcdb2b27fU, 0xcdb2b27fU, 0xcdb2b27fU, 0xcdb2b27fU, 0xcdb2b27fU, 0xcdb2b27fU, 0xcdb2b27fU, 0xcdb2b27fU, 0xcdb2b27fU, 0xcdb2b27fU, 0xcdb2b27fU, 0xcdb2b27fU, 0xcdb2b27fU, 0xcdb2b27fU, 0xcdb2b27fU, + 0x9f7575eaU, 0x9f7575eaU, 0x9f7575eaU, 0x9f7575eaU, 0x9f7575eaU, 0x9f7575eaU, 0x9f7575eaU, 0x9f7575eaU, 0x9f7575eaU, 0x9f7575eaU, 0x9f7575eaU, 0x9f7575eaU, 0x9f7575eaU, 0x9f7575eaU, 0x9f7575eaU, 0x9f7575eaU, 0x9f7575eaU, 0x9f7575eaU, 0x9f7575eaU, 0x9f7575eaU, 0x9f7575eaU, 0x9f7575eaU, 0x9f7575eaU, 0x9f7575eaU, 0x9f7575eaU, 0x9f7575eaU, 0x9f7575eaU, 0x9f7575eaU, 0x9f7575eaU, 0x9f7575eaU, 0x9f7575eaU, 0x9f7575eaU, + 0x1b090912U, 0x1b090912U, 0x1b090912U, 0x1b090912U, 0x1b090912U, 0x1b090912U, 0x1b090912U, 0x1b090912U, 0x1b090912U, 0x1b090912U, 0x1b090912U, 0x1b090912U, 0x1b090912U, 0x1b090912U, 0x1b090912U, 0x1b090912U, 0x1b090912U, 0x1b090912U, 0x1b090912U, 0x1b090912U, 0x1b090912U, 0x1b090912U, 0x1b090912U, 0x1b090912U, 0x1b090912U, 0x1b090912U, 0x1b090912U, 0x1b090912U, 0x1b090912U, 0x1b090912U, 0x1b090912U, 0x1b090912U, + 0x9e83831dU, 0x9e83831dU, 0x9e83831dU, 0x9e83831dU, 0x9e83831dU, 0x9e83831dU, 0x9e83831dU, 0x9e83831dU, 0x9e83831dU, 0x9e83831dU, 0x9e83831dU, 0x9e83831dU, 0x9e83831dU, 0x9e83831dU, 0x9e83831dU, 0x9e83831dU, 0x9e83831dU, 0x9e83831dU, 0x9e83831dU, 0x9e83831dU, 0x9e83831dU, 0x9e83831dU, 0x9e83831dU, 0x9e83831dU, 0x9e83831dU, 0x9e83831dU, 0x9e83831dU, 0x9e83831dU, 0x9e83831dU, 0x9e83831dU, 0x9e83831dU, 0x9e83831dU, + 0x742c2c58U, 0x742c2c58U, 0x742c2c58U, 0x742c2c58U, 0x742c2c58U, 0x742c2c58U, 0x742c2c58U, 0x742c2c58U, 0x742c2c58U, 0x742c2c58U, 0x742c2c58U, 0x742c2c58U, 0x742c2c58U, 0x742c2c58U, 0x742c2c58U, 0x742c2c58U, 0x742c2c58U, 0x742c2c58U, 0x742c2c58U, 0x742c2c58U, 0x742c2c58U, 0x742c2c58U, 0x742c2c58U, 0x742c2c58U, 0x742c2c58U, 0x742c2c58U, 0x742c2c58U, 0x742c2c58U, 0x742c2c58U, 0x742c2c58U, 0x742c2c58U, 0x742c2c58U, + 0x2e1a1a34U, 0x2e1a1a34U, 0x2e1a1a34U, 0x2e1a1a34U, 0x2e1a1a34U, 0x2e1a1a34U, 0x2e1a1a34U, 0x2e1a1a34U, 0x2e1a1a34U, 0x2e1a1a34U, 0x2e1a1a34U, 0x2e1a1a34U, 0x2e1a1a34U, 0x2e1a1a34U, 0x2e1a1a34U, 0x2e1a1a34U, 0x2e1a1a34U, 0x2e1a1a34U, 0x2e1a1a34U, 0x2e1a1a34U, 0x2e1a1a34U, 0x2e1a1a34U, 0x2e1a1a34U, 0x2e1a1a34U, 0x2e1a1a34U, 0x2e1a1a34U, 0x2e1a1a34U, 0x2e1a1a34U, 0x2e1a1a34U, 0x2e1a1a34U, 0x2e1a1a34U, 0x2e1a1a34U, + 0x2d1b1b36U, 0x2d1b1b36U, 0x2d1b1b36U, 0x2d1b1b36U, 0x2d1b1b36U, 0x2d1b1b36U, 0x2d1b1b36U, 0x2d1b1b36U, 0x2d1b1b36U, 0x2d1b1b36U, 0x2d1b1b36U, 0x2d1b1b36U, 0x2d1b1b36U, 0x2d1b1b36U, 0x2d1b1b36U, 0x2d1b1b36U, 0x2d1b1b36U, 0x2d1b1b36U, 0x2d1b1b36U, 0x2d1b1b36U, 0x2d1b1b36U, 0x2d1b1b36U, 0x2d1b1b36U, 0x2d1b1b36U, 0x2d1b1b36U, 0x2d1b1b36U, 0x2d1b1b36U, 0x2d1b1b36U, 0x2d1b1b36U, 0x2d1b1b36U, 0x2d1b1b36U, 0x2d1b1b36U, + 0xb26e6edcU, 0xb26e6edcU, 0xb26e6edcU, 0xb26e6edcU, 0xb26e6edcU, 0xb26e6edcU, 0xb26e6edcU, 0xb26e6edcU, 0xb26e6edcU, 0xb26e6edcU, 0xb26e6edcU, 0xb26e6edcU, 0xb26e6edcU, 0xb26e6edcU, 0xb26e6edcU, 0xb26e6edcU, 0xb26e6edcU, 0xb26e6edcU, 0xb26e6edcU, 0xb26e6edcU, 0xb26e6edcU, 0xb26e6edcU, 0xb26e6edcU, 0xb26e6edcU, 0xb26e6edcU, 0xb26e6edcU, 0xb26e6edcU, 0xb26e6edcU, 0xb26e6edcU, 0xb26e6edcU, 0xb26e6edcU, 0xb26e6edcU, + 0xee5a5ab4U, 0xee5a5ab4U, 0xee5a5ab4U, 0xee5a5ab4U, 0xee5a5ab4U, 0xee5a5ab4U, 0xee5a5ab4U, 0xee5a5ab4U, 0xee5a5ab4U, 0xee5a5ab4U, 0xee5a5ab4U, 0xee5a5ab4U, 0xee5a5ab4U, 0xee5a5ab4U, 0xee5a5ab4U, 0xee5a5ab4U, 0xee5a5ab4U, 0xee5a5ab4U, 0xee5a5ab4U, 0xee5a5ab4U, 0xee5a5ab4U, 0xee5a5ab4U, 0xee5a5ab4U, 0xee5a5ab4U, 0xee5a5ab4U, 0xee5a5ab4U, 0xee5a5ab4U, 0xee5a5ab4U, 0xee5a5ab4U, 0xee5a5ab4U, 0xee5a5ab4U, 0xee5a5ab4U, + 0xfba0a05bU, 0xfba0a05bU, 0xfba0a05bU, 0xfba0a05bU, 0xfba0a05bU, 0xfba0a05bU, 0xfba0a05bU, 0xfba0a05bU, 0xfba0a05bU, 0xfba0a05bU, 0xfba0a05bU, 0xfba0a05bU, 0xfba0a05bU, 0xfba0a05bU, 0xfba0a05bU, 0xfba0a05bU, 0xfba0a05bU, 0xfba0a05bU, 0xfba0a05bU, 0xfba0a05bU, 0xfba0a05bU, 0xfba0a05bU, 0xfba0a05bU, 0xfba0a05bU, 0xfba0a05bU, 0xfba0a05bU, 0xfba0a05bU, 0xfba0a05bU, 0xfba0a05bU, 0xfba0a05bU, 0xfba0a05bU, 0xfba0a05bU, + 0xf65252a4U, 0xf65252a4U, 0xf65252a4U, 0xf65252a4U, 0xf65252a4U, 0xf65252a4U, 0xf65252a4U, 0xf65252a4U, 0xf65252a4U, 0xf65252a4U, 0xf65252a4U, 0xf65252a4U, 0xf65252a4U, 0xf65252a4U, 0xf65252a4U, 0xf65252a4U, 0xf65252a4U, 0xf65252a4U, 0xf65252a4U, 0xf65252a4U, 0xf65252a4U, 0xf65252a4U, 0xf65252a4U, 0xf65252a4U, 0xf65252a4U, 0xf65252a4U, 0xf65252a4U, 0xf65252a4U, 0xf65252a4U, 0xf65252a4U, 0xf65252a4U, 0xf65252a4U, + 0x4d3b3b76U, 0x4d3b3b76U, 0x4d3b3b76U, 0x4d3b3b76U, 0x4d3b3b76U, 0x4d3b3b76U, 0x4d3b3b76U, 0x4d3b3b76U, 0x4d3b3b76U, 0x4d3b3b76U, 0x4d3b3b76U, 0x4d3b3b76U, 0x4d3b3b76U, 0x4d3b3b76U, 0x4d3b3b76U, 0x4d3b3b76U, 0x4d3b3b76U, 0x4d3b3b76U, 0x4d3b3b76U, 0x4d3b3b76U, 0x4d3b3b76U, 0x4d3b3b76U, 0x4d3b3b76U, 0x4d3b3b76U, 0x4d3b3b76U, 0x4d3b3b76U, 0x4d3b3b76U, 0x4d3b3b76U, 0x4d3b3b76U, 0x4d3b3b76U, 0x4d3b3b76U, 0x4d3b3b76U, + 0x61d6d6b7U, 0x61d6d6b7U, 0x61d6d6b7U, 0x61d6d6b7U, 0x61d6d6b7U, 0x61d6d6b7U, 0x61d6d6b7U, 0x61d6d6b7U, 0x61d6d6b7U, 0x61d6d6b7U, 0x61d6d6b7U, 0x61d6d6b7U, 0x61d6d6b7U, 0x61d6d6b7U, 0x61d6d6b7U, 0x61d6d6b7U, 0x61d6d6b7U, 0x61d6d6b7U, 0x61d6d6b7U, 0x61d6d6b7U, 0x61d6d6b7U, 0x61d6d6b7U, 0x61d6d6b7U, 0x61d6d6b7U, 0x61d6d6b7U, 0x61d6d6b7U, 0x61d6d6b7U, 0x61d6d6b7U, 0x61d6d6b7U, 0x61d6d6b7U, 0x61d6d6b7U, 0x61d6d6b7U, + 0xceb3b37dU, 0xceb3b37dU, 0xceb3b37dU, 0xceb3b37dU, 0xceb3b37dU, 0xceb3b37dU, 0xceb3b37dU, 0xceb3b37dU, 0xceb3b37dU, 0xceb3b37dU, 0xceb3b37dU, 0xceb3b37dU, 0xceb3b37dU, 0xceb3b37dU, 0xceb3b37dU, 0xceb3b37dU, 0xceb3b37dU, 0xceb3b37dU, 0xceb3b37dU, 0xceb3b37dU, 0xceb3b37dU, 0xceb3b37dU, 0xceb3b37dU, 0xceb3b37dU, 0xceb3b37dU, 0xceb3b37dU, 0xceb3b37dU, 0xceb3b37dU, 0xceb3b37dU, 0xceb3b37dU, 0xceb3b37dU, 0xceb3b37dU, + 0x7b292952U, 0x7b292952U, 0x7b292952U, 0x7b292952U, 0x7b292952U, 0x7b292952U, 0x7b292952U, 0x7b292952U, 0x7b292952U, 0x7b292952U, 0x7b292952U, 0x7b292952U, 0x7b292952U, 0x7b292952U, 0x7b292952U, 0x7b292952U, 0x7b292952U, 0x7b292952U, 0x7b292952U, 0x7b292952U, 0x7b292952U, 0x7b292952U, 0x7b292952U, 0x7b292952U, 0x7b292952U, 0x7b292952U, 0x7b292952U, 0x7b292952U, 0x7b292952U, 0x7b292952U, 0x7b292952U, 0x7b292952U, + 0x3ee3e3ddU, 0x3ee3e3ddU, 0x3ee3e3ddU, 0x3ee3e3ddU, 0x3ee3e3ddU, 0x3ee3e3ddU, 0x3ee3e3ddU, 0x3ee3e3ddU, 0x3ee3e3ddU, 0x3ee3e3ddU, 0x3ee3e3ddU, 0x3ee3e3ddU, 0x3ee3e3ddU, 0x3ee3e3ddU, 0x3ee3e3ddU, 0x3ee3e3ddU, 0x3ee3e3ddU, 0x3ee3e3ddU, 0x3ee3e3ddU, 0x3ee3e3ddU, 0x3ee3e3ddU, 0x3ee3e3ddU, 0x3ee3e3ddU, 0x3ee3e3ddU, 0x3ee3e3ddU, 0x3ee3e3ddU, 0x3ee3e3ddU, 0x3ee3e3ddU, 0x3ee3e3ddU, 0x3ee3e3ddU, 0x3ee3e3ddU, 0x3ee3e3ddU, + 0x712f2f5eU, 0x712f2f5eU, 0x712f2f5eU, 0x712f2f5eU, 0x712f2f5eU, 0x712f2f5eU, 0x712f2f5eU, 0x712f2f5eU, 0x712f2f5eU, 0x712f2f5eU, 0x712f2f5eU, 0x712f2f5eU, 0x712f2f5eU, 0x712f2f5eU, 0x712f2f5eU, 0x712f2f5eU, 0x712f2f5eU, 0x712f2f5eU, 0x712f2f5eU, 0x712f2f5eU, 0x712f2f5eU, 0x712f2f5eU, 0x712f2f5eU, 0x712f2f5eU, 0x712f2f5eU, 0x712f2f5eU, 0x712f2f5eU, 0x712f2f5eU, 0x712f2f5eU, 0x712f2f5eU, 0x712f2f5eU, 0x712f2f5eU, + 0x97848413U, 0x97848413U, 0x97848413U, 0x97848413U, 0x97848413U, 0x97848413U, 0x97848413U, 0x97848413U, 0x97848413U, 0x97848413U, 0x97848413U, 0x97848413U, 0x97848413U, 0x97848413U, 0x97848413U, 0x97848413U, 0x97848413U, 0x97848413U, 0x97848413U, 0x97848413U, 0x97848413U, 0x97848413U, 0x97848413U, 0x97848413U, 0x97848413U, 0x97848413U, 0x97848413U, 0x97848413U, 0x97848413U, 0x97848413U, 0x97848413U, 0x97848413U, + 0xf55353a6U, 0xf55353a6U, 0xf55353a6U, 0xf55353a6U, 0xf55353a6U, 0xf55353a6U, 0xf55353a6U, 0xf55353a6U, 0xf55353a6U, 0xf55353a6U, 0xf55353a6U, 0xf55353a6U, 0xf55353a6U, 0xf55353a6U, 0xf55353a6U, 0xf55353a6U, 0xf55353a6U, 0xf55353a6U, 0xf55353a6U, 0xf55353a6U, 0xf55353a6U, 0xf55353a6U, 0xf55353a6U, 0xf55353a6U, 0xf55353a6U, 0xf55353a6U, 0xf55353a6U, 0xf55353a6U, 0xf55353a6U, 0xf55353a6U, 0xf55353a6U, 0xf55353a6U, + 0x68d1d1b9U, 0x68d1d1b9U, 0x68d1d1b9U, 0x68d1d1b9U, 0x68d1d1b9U, 0x68d1d1b9U, 0x68d1d1b9U, 0x68d1d1b9U, 0x68d1d1b9U, 0x68d1d1b9U, 0x68d1d1b9U, 0x68d1d1b9U, 0x68d1d1b9U, 0x68d1d1b9U, 0x68d1d1b9U, 0x68d1d1b9U, 0x68d1d1b9U, 0x68d1d1b9U, 0x68d1d1b9U, 0x68d1d1b9U, 0x68d1d1b9U, 0x68d1d1b9U, 0x68d1d1b9U, 0x68d1d1b9U, 0x68d1d1b9U, 0x68d1d1b9U, 0x68d1d1b9U, 0x68d1d1b9U, 0x68d1d1b9U, 0x68d1d1b9U, 0x68d1d1b9U, 0x68d1d1b9U, + 0x0U, 0x0U, 0x0U, 0x0U, 0x0U, 0x0U, 0x0U, 0x0U, 0x0U, 0x0U, 0x0U, 0x0U, 0x0U, 0x0U, 0x0U, 0x0U, 0x0U, 0x0U, 0x0U, 0x0U, 0x0U, 0x0U, 0x0U, 0x0U, 0x0U, 0x0U, 0x0U, 0x0U, 0x0U, 0x0U, 0x0U, 0x0U, + 0x2cededc1U, 0x2cededc1U, 0x2cededc1U, 0x2cededc1U, 0x2cededc1U, 0x2cededc1U, 0x2cededc1U, 0x2cededc1U, 0x2cededc1U, 0x2cededc1U, 0x2cededc1U, 0x2cededc1U, 0x2cededc1U, 0x2cededc1U, 0x2cededc1U, 0x2cededc1U, 0x2cededc1U, 0x2cededc1U, 0x2cededc1U, 0x2cededc1U, 0x2cededc1U, 0x2cededc1U, 0x2cededc1U, 0x2cededc1U, 0x2cededc1U, 0x2cededc1U, 0x2cededc1U, 0x2cededc1U, 0x2cededc1U, 0x2cededc1U, 0x2cededc1U, 0x2cededc1U, + 0x60202040U, 0x60202040U, 0x60202040U, 0x60202040U, 0x60202040U, 0x60202040U, 0x60202040U, 0x60202040U, 0x60202040U, 0x60202040U, 0x60202040U, 0x60202040U, 0x60202040U, 0x60202040U, 0x60202040U, 0x60202040U, 0x60202040U, 0x60202040U, 0x60202040U, 0x60202040U, 0x60202040U, 0x60202040U, 0x60202040U, 0x60202040U, 0x60202040U, 0x60202040U, 0x60202040U, 0x60202040U, 0x60202040U, 0x60202040U, 0x60202040U, 0x60202040U, + 0x1ffcfce3U, 0x1ffcfce3U, 0x1ffcfce3U, 0x1ffcfce3U, 0x1ffcfce3U, 0x1ffcfce3U, 0x1ffcfce3U, 0x1ffcfce3U, 0x1ffcfce3U, 0x1ffcfce3U, 0x1ffcfce3U, 0x1ffcfce3U, 0x1ffcfce3U, 0x1ffcfce3U, 0x1ffcfce3U, 0x1ffcfce3U, 0x1ffcfce3U, 0x1ffcfce3U, 0x1ffcfce3U, 0x1ffcfce3U, 0x1ffcfce3U, 0x1ffcfce3U, 0x1ffcfce3U, 0x1ffcfce3U, 0x1ffcfce3U, 0x1ffcfce3U, 0x1ffcfce3U, 0x1ffcfce3U, 0x1ffcfce3U, 0x1ffcfce3U, 0x1ffcfce3U, 0x1ffcfce3U, + 0xc8b1b179U, 0xc8b1b179U, 0xc8b1b179U, 0xc8b1b179U, 0xc8b1b179U, 0xc8b1b179U, 0xc8b1b179U, 0xc8b1b179U, 0xc8b1b179U, 0xc8b1b179U, 0xc8b1b179U, 0xc8b1b179U, 0xc8b1b179U, 0xc8b1b179U, 0xc8b1b179U, 0xc8b1b179U, 0xc8b1b179U, 0xc8b1b179U, 0xc8b1b179U, 0xc8b1b179U, 0xc8b1b179U, 0xc8b1b179U, 0xc8b1b179U, 0xc8b1b179U, 0xc8b1b179U, 0xc8b1b179U, 0xc8b1b179U, 0xc8b1b179U, 0xc8b1b179U, 0xc8b1b179U, 0xc8b1b179U, 0xc8b1b179U, + 0xed5b5bb6U, 0xed5b5bb6U, 0xed5b5bb6U, 0xed5b5bb6U, 0xed5b5bb6U, 0xed5b5bb6U, 0xed5b5bb6U, 0xed5b5bb6U, 0xed5b5bb6U, 0xed5b5bb6U, 0xed5b5bb6U, 0xed5b5bb6U, 0xed5b5bb6U, 0xed5b5bb6U, 0xed5b5bb6U, 0xed5b5bb6U, 0xed5b5bb6U, 0xed5b5bb6U, 0xed5b5bb6U, 0xed5b5bb6U, 0xed5b5bb6U, 0xed5b5bb6U, 0xed5b5bb6U, 0xed5b5bb6U, 0xed5b5bb6U, 0xed5b5bb6U, 0xed5b5bb6U, 0xed5b5bb6U, 0xed5b5bb6U, 0xed5b5bb6U, 0xed5b5bb6U, 0xed5b5bb6U, + 0xbe6a6ad4U, 0xbe6a6ad4U, 0xbe6a6ad4U, 0xbe6a6ad4U, 0xbe6a6ad4U, 0xbe6a6ad4U, 0xbe6a6ad4U, 0xbe6a6ad4U, 0xbe6a6ad4U, 0xbe6a6ad4U, 0xbe6a6ad4U, 0xbe6a6ad4U, 0xbe6a6ad4U, 0xbe6a6ad4U, 0xbe6a6ad4U, 0xbe6a6ad4U, 0xbe6a6ad4U, 0xbe6a6ad4U, 0xbe6a6ad4U, 0xbe6a6ad4U, 0xbe6a6ad4U, 0xbe6a6ad4U, 0xbe6a6ad4U, 0xbe6a6ad4U, 0xbe6a6ad4U, 0xbe6a6ad4U, 0xbe6a6ad4U, 0xbe6a6ad4U, 0xbe6a6ad4U, 0xbe6a6ad4U, 0xbe6a6ad4U, 0xbe6a6ad4U, + 0x46cbcb8dU, 0x46cbcb8dU, 0x46cbcb8dU, 0x46cbcb8dU, 0x46cbcb8dU, 0x46cbcb8dU, 0x46cbcb8dU, 0x46cbcb8dU, 0x46cbcb8dU, 0x46cbcb8dU, 0x46cbcb8dU, 0x46cbcb8dU, 0x46cbcb8dU, 0x46cbcb8dU, 0x46cbcb8dU, 0x46cbcb8dU, 0x46cbcb8dU, 0x46cbcb8dU, 0x46cbcb8dU, 0x46cbcb8dU, 0x46cbcb8dU, 0x46cbcb8dU, 0x46cbcb8dU, 0x46cbcb8dU, 0x46cbcb8dU, 0x46cbcb8dU, 0x46cbcb8dU, 0x46cbcb8dU, 0x46cbcb8dU, 0x46cbcb8dU, 0x46cbcb8dU, 0x46cbcb8dU, + 0xd9bebe67U, 0xd9bebe67U, 0xd9bebe67U, 0xd9bebe67U, 0xd9bebe67U, 0xd9bebe67U, 0xd9bebe67U, 0xd9bebe67U, 0xd9bebe67U, 0xd9bebe67U, 0xd9bebe67U, 0xd9bebe67U, 0xd9bebe67U, 0xd9bebe67U, 0xd9bebe67U, 0xd9bebe67U, 0xd9bebe67U, 0xd9bebe67U, 0xd9bebe67U, 0xd9bebe67U, 0xd9bebe67U, 0xd9bebe67U, 0xd9bebe67U, 0xd9bebe67U, 0xd9bebe67U, 0xd9bebe67U, 0xd9bebe67U, 0xd9bebe67U, 0xd9bebe67U, 0xd9bebe67U, 0xd9bebe67U, 0xd9bebe67U, + 0x4b393972U, 0x4b393972U, 0x4b393972U, 0x4b393972U, 0x4b393972U, 0x4b393972U, 0x4b393972U, 0x4b393972U, 0x4b393972U, 0x4b393972U, 0x4b393972U, 0x4b393972U, 0x4b393972U, 0x4b393972U, 0x4b393972U, 0x4b393972U, 0x4b393972U, 0x4b393972U, 0x4b393972U, 0x4b393972U, 0x4b393972U, 0x4b393972U, 0x4b393972U, 0x4b393972U, 0x4b393972U, 0x4b393972U, 0x4b393972U, 0x4b393972U, 0x4b393972U, 0x4b393972U, 0x4b393972U, 0x4b393972U, + 0xde4a4a94U, 0xde4a4a94U, 0xde4a4a94U, 0xde4a4a94U, 0xde4a4a94U, 0xde4a4a94U, 0xde4a4a94U, 0xde4a4a94U, 0xde4a4a94U, 0xde4a4a94U, 0xde4a4a94U, 0xde4a4a94U, 0xde4a4a94U, 0xde4a4a94U, 0xde4a4a94U, 0xde4a4a94U, 0xde4a4a94U, 0xde4a4a94U, 0xde4a4a94U, 0xde4a4a94U, 0xde4a4a94U, 0xde4a4a94U, 0xde4a4a94U, 0xde4a4a94U, 0xde4a4a94U, 0xde4a4a94U, 0xde4a4a94U, 0xde4a4a94U, 0xde4a4a94U, 0xde4a4a94U, 0xde4a4a94U, 0xde4a4a94U, + 0xd44c4c98U, 0xd44c4c98U, 0xd44c4c98U, 0xd44c4c98U, 0xd44c4c98U, 0xd44c4c98U, 0xd44c4c98U, 0xd44c4c98U, 0xd44c4c98U, 0xd44c4c98U, 0xd44c4c98U, 0xd44c4c98U, 0xd44c4c98U, 0xd44c4c98U, 0xd44c4c98U, 0xd44c4c98U, 0xd44c4c98U, 0xd44c4c98U, 0xd44c4c98U, 0xd44c4c98U, 0xd44c4c98U, 0xd44c4c98U, 0xd44c4c98U, 0xd44c4c98U, 0xd44c4c98U, 0xd44c4c98U, 0xd44c4c98U, 0xd44c4c98U, 0xd44c4c98U, 0xd44c4c98U, 0xd44c4c98U, 0xd44c4c98U, + 0xe85858b0U, 0xe85858b0U, 0xe85858b0U, 0xe85858b0U, 0xe85858b0U, 0xe85858b0U, 0xe85858b0U, 0xe85858b0U, 0xe85858b0U, 0xe85858b0U, 0xe85858b0U, 0xe85858b0U, 0xe85858b0U, 0xe85858b0U, 0xe85858b0U, 0xe85858b0U, 0xe85858b0U, 0xe85858b0U, 0xe85858b0U, 0xe85858b0U, 0xe85858b0U, 0xe85858b0U, 0xe85858b0U, 0xe85858b0U, 0xe85858b0U, 0xe85858b0U, 0xe85858b0U, 0xe85858b0U, 0xe85858b0U, 0xe85858b0U, 0xe85858b0U, 0xe85858b0U, + 0x4acfcf85U, 0x4acfcf85U, 0x4acfcf85U, 0x4acfcf85U, 0x4acfcf85U, 0x4acfcf85U, 0x4acfcf85U, 0x4acfcf85U, 0x4acfcf85U, 0x4acfcf85U, 0x4acfcf85U, 0x4acfcf85U, 0x4acfcf85U, 0x4acfcf85U, 0x4acfcf85U, 0x4acfcf85U, 0x4acfcf85U, 0x4acfcf85U, 0x4acfcf85U, 0x4acfcf85U, 0x4acfcf85U, 0x4acfcf85U, 0x4acfcf85U, 0x4acfcf85U, 0x4acfcf85U, 0x4acfcf85U, 0x4acfcf85U, 0x4acfcf85U, 0x4acfcf85U, 0x4acfcf85U, 0x4acfcf85U, 0x4acfcf85U, + 0x6bd0d0bbU, 0x6bd0d0bbU, 0x6bd0d0bbU, 0x6bd0d0bbU, 0x6bd0d0bbU, 0x6bd0d0bbU, 0x6bd0d0bbU, 0x6bd0d0bbU, 0x6bd0d0bbU, 0x6bd0d0bbU, 0x6bd0d0bbU, 0x6bd0d0bbU, 0x6bd0d0bbU, 0x6bd0d0bbU, 0x6bd0d0bbU, 0x6bd0d0bbU, 0x6bd0d0bbU, 0x6bd0d0bbU, 0x6bd0d0bbU, 0x6bd0d0bbU, 0x6bd0d0bbU, 0x6bd0d0bbU, 0x6bd0d0bbU, 0x6bd0d0bbU, 0x6bd0d0bbU, 0x6bd0d0bbU, 0x6bd0d0bbU, 0x6bd0d0bbU, 0x6bd0d0bbU, 0x6bd0d0bbU, 0x6bd0d0bbU, 0x6bd0d0bbU, + 0x2aefefc5U, 0x2aefefc5U, 0x2aefefc5U, 0x2aefefc5U, 0x2aefefc5U, 0x2aefefc5U, 0x2aefefc5U, 0x2aefefc5U, 0x2aefefc5U, 0x2aefefc5U, 0x2aefefc5U, 0x2aefefc5U, 0x2aefefc5U, 0x2aefefc5U, 0x2aefefc5U, 0x2aefefc5U, 0x2aefefc5U, 0x2aefefc5U, 0x2aefefc5U, 0x2aefefc5U, 0x2aefefc5U, 0x2aefefc5U, 0x2aefefc5U, 0x2aefefc5U, 0x2aefefc5U, 0x2aefefc5U, 0x2aefefc5U, 0x2aefefc5U, 0x2aefefc5U, 0x2aefefc5U, 0x2aefefc5U, 0x2aefefc5U, + 0xe5aaaa4fU, 0xe5aaaa4fU, 0xe5aaaa4fU, 0xe5aaaa4fU, 0xe5aaaa4fU, 0xe5aaaa4fU, 0xe5aaaa4fU, 0xe5aaaa4fU, 0xe5aaaa4fU, 0xe5aaaa4fU, 0xe5aaaa4fU, 0xe5aaaa4fU, 0xe5aaaa4fU, 0xe5aaaa4fU, 0xe5aaaa4fU, 0xe5aaaa4fU, 0xe5aaaa4fU, 0xe5aaaa4fU, 0xe5aaaa4fU, 0xe5aaaa4fU, 0xe5aaaa4fU, 0xe5aaaa4fU, 0xe5aaaa4fU, 0xe5aaaa4fU, 0xe5aaaa4fU, 0xe5aaaa4fU, 0xe5aaaa4fU, 0xe5aaaa4fU, 0xe5aaaa4fU, 0xe5aaaa4fU, 0xe5aaaa4fU, 0xe5aaaa4fU, + 0x16fbfbedU, 0x16fbfbedU, 0x16fbfbedU, 0x16fbfbedU, 0x16fbfbedU, 0x16fbfbedU, 0x16fbfbedU, 0x16fbfbedU, 0x16fbfbedU, 0x16fbfbedU, 0x16fbfbedU, 0x16fbfbedU, 0x16fbfbedU, 0x16fbfbedU, 0x16fbfbedU, 0x16fbfbedU, 0x16fbfbedU, 0x16fbfbedU, 0x16fbfbedU, 0x16fbfbedU, 0x16fbfbedU, 0x16fbfbedU, 0x16fbfbedU, 0x16fbfbedU, 0x16fbfbedU, 0x16fbfbedU, 0x16fbfbedU, 0x16fbfbedU, 0x16fbfbedU, 0x16fbfbedU, 0x16fbfbedU, 0x16fbfbedU, + 0xc5434386U, 0xc5434386U, 0xc5434386U, 0xc5434386U, 0xc5434386U, 0xc5434386U, 0xc5434386U, 0xc5434386U, 0xc5434386U, 0xc5434386U, 0xc5434386U, 0xc5434386U, 0xc5434386U, 0xc5434386U, 0xc5434386U, 0xc5434386U, 0xc5434386U, 0xc5434386U, 0xc5434386U, 0xc5434386U, 0xc5434386U, 0xc5434386U, 0xc5434386U, 0xc5434386U, 0xc5434386U, 0xc5434386U, 0xc5434386U, 0xc5434386U, 0xc5434386U, 0xc5434386U, 0xc5434386U, 0xc5434386U, + 0xd74d4d9aU, 0xd74d4d9aU, 0xd74d4d9aU, 0xd74d4d9aU, 0xd74d4d9aU, 0xd74d4d9aU, 0xd74d4d9aU, 0xd74d4d9aU, 0xd74d4d9aU, 0xd74d4d9aU, 0xd74d4d9aU, 0xd74d4d9aU, 0xd74d4d9aU, 0xd74d4d9aU, 0xd74d4d9aU, 0xd74d4d9aU, 0xd74d4d9aU, 0xd74d4d9aU, 0xd74d4d9aU, 0xd74d4d9aU, 0xd74d4d9aU, 0xd74d4d9aU, 0xd74d4d9aU, 0xd74d4d9aU, 0xd74d4d9aU, 0xd74d4d9aU, 0xd74d4d9aU, 0xd74d4d9aU, 0xd74d4d9aU, 0xd74d4d9aU, 0xd74d4d9aU, 0xd74d4d9aU, + 0x55333366U, 0x55333366U, 0x55333366U, 0x55333366U, 0x55333366U, 0x55333366U, 0x55333366U, 0x55333366U, 0x55333366U, 0x55333366U, 0x55333366U, 0x55333366U, 0x55333366U, 0x55333366U, 0x55333366U, 0x55333366U, 0x55333366U, 0x55333366U, 0x55333366U, 0x55333366U, 0x55333366U, 0x55333366U, 0x55333366U, 0x55333366U, 0x55333366U, 0x55333366U, 0x55333366U, 0x55333366U, 0x55333366U, 0x55333366U, 0x55333366U, 0x55333366U, + 0x94858511U, 0x94858511U, 0x94858511U, 0x94858511U, 0x94858511U, 0x94858511U, 0x94858511U, 0x94858511U, 0x94858511U, 0x94858511U, 0x94858511U, 0x94858511U, 0x94858511U, 0x94858511U, 0x94858511U, 0x94858511U, 0x94858511U, 0x94858511U, 0x94858511U, 0x94858511U, 0x94858511U, 0x94858511U, 0x94858511U, 0x94858511U, 0x94858511U, 0x94858511U, 0x94858511U, 0x94858511U, 0x94858511U, 0x94858511U, 0x94858511U, 0x94858511U, + 0xcf45458aU, 0xcf45458aU, 0xcf45458aU, 0xcf45458aU, 0xcf45458aU, 0xcf45458aU, 0xcf45458aU, 0xcf45458aU, 0xcf45458aU, 0xcf45458aU, 0xcf45458aU, 0xcf45458aU, 0xcf45458aU, 0xcf45458aU, 0xcf45458aU, 0xcf45458aU, 0xcf45458aU, 0xcf45458aU, 0xcf45458aU, 0xcf45458aU, 0xcf45458aU, 0xcf45458aU, 0xcf45458aU, 0xcf45458aU, 0xcf45458aU, 0xcf45458aU, 0xcf45458aU, 0xcf45458aU, 0xcf45458aU, 0xcf45458aU, 0xcf45458aU, 0xcf45458aU, + 0x10f9f9e9U, 0x10f9f9e9U, 0x10f9f9e9U, 0x10f9f9e9U, 0x10f9f9e9U, 0x10f9f9e9U, 0x10f9f9e9U, 0x10f9f9e9U, 0x10f9f9e9U, 0x10f9f9e9U, 0x10f9f9e9U, 0x10f9f9e9U, 0x10f9f9e9U, 0x10f9f9e9U, 0x10f9f9e9U, 0x10f9f9e9U, 0x10f9f9e9U, 0x10f9f9e9U, 0x10f9f9e9U, 0x10f9f9e9U, 0x10f9f9e9U, 0x10f9f9e9U, 0x10f9f9e9U, 0x10f9f9e9U, 0x10f9f9e9U, 0x10f9f9e9U, 0x10f9f9e9U, 0x10f9f9e9U, 0x10f9f9e9U, 0x10f9f9e9U, 0x10f9f9e9U, 0x10f9f9e9U, + 0x6020204U, 0x6020204U, 0x6020204U, 0x6020204U, 0x6020204U, 0x6020204U, 0x6020204U, 0x6020204U, 0x6020204U, 0x6020204U, 0x6020204U, 0x6020204U, 0x6020204U, 0x6020204U, 0x6020204U, 0x6020204U, 0x6020204U, 0x6020204U, 0x6020204U, 0x6020204U, 0x6020204U, 0x6020204U, 0x6020204U, 0x6020204U, 0x6020204U, 0x6020204U, 0x6020204U, 0x6020204U, 0x6020204U, 0x6020204U, 0x6020204U, 0x6020204U, + 0x817f7ffeU, 0x817f7ffeU, 0x817f7ffeU, 0x817f7ffeU, 0x817f7ffeU, 0x817f7ffeU, 0x817f7ffeU, 0x817f7ffeU, 0x817f7ffeU, 0x817f7ffeU, 0x817f7ffeU, 0x817f7ffeU, 0x817f7ffeU, 0x817f7ffeU, 0x817f7ffeU, 0x817f7ffeU, 0x817f7ffeU, 0x817f7ffeU, 0x817f7ffeU, 0x817f7ffeU, 0x817f7ffeU, 0x817f7ffeU, 0x817f7ffeU, 0x817f7ffeU, 0x817f7ffeU, 0x817f7ffeU, 0x817f7ffeU, 0x817f7ffeU, 0x817f7ffeU, 0x817f7ffeU, 0x817f7ffeU, 0x817f7ffeU, + 0xf05050a0U, 0xf05050a0U, 0xf05050a0U, 0xf05050a0U, 0xf05050a0U, 0xf05050a0U, 0xf05050a0U, 0xf05050a0U, 0xf05050a0U, 0xf05050a0U, 0xf05050a0U, 0xf05050a0U, 0xf05050a0U, 0xf05050a0U, 0xf05050a0U, 0xf05050a0U, 0xf05050a0U, 0xf05050a0U, 0xf05050a0U, 0xf05050a0U, 0xf05050a0U, 0xf05050a0U, 0xf05050a0U, 0xf05050a0U, 0xf05050a0U, 0xf05050a0U, 0xf05050a0U, 0xf05050a0U, 0xf05050a0U, 0xf05050a0U, 0xf05050a0U, 0xf05050a0U, + 0x443c3c78U, 0x443c3c78U, 0x443c3c78U, 0x443c3c78U, 0x443c3c78U, 0x443c3c78U, 0x443c3c78U, 0x443c3c78U, 0x443c3c78U, 0x443c3c78U, 0x443c3c78U, 0x443c3c78U, 0x443c3c78U, 0x443c3c78U, 0x443c3c78U, 0x443c3c78U, 0x443c3c78U, 0x443c3c78U, 0x443c3c78U, 0x443c3c78U, 0x443c3c78U, 0x443c3c78U, 0x443c3c78U, 0x443c3c78U, 0x443c3c78U, 0x443c3c78U, 0x443c3c78U, 0x443c3c78U, 0x443c3c78U, 0x443c3c78U, 0x443c3c78U, 0x443c3c78U, + 0xba9f9f25U, 0xba9f9f25U, 0xba9f9f25U, 0xba9f9f25U, 0xba9f9f25U, 0xba9f9f25U, 0xba9f9f25U, 0xba9f9f25U, 0xba9f9f25U, 0xba9f9f25U, 0xba9f9f25U, 0xba9f9f25U, 0xba9f9f25U, 0xba9f9f25U, 0xba9f9f25U, 0xba9f9f25U, 0xba9f9f25U, 0xba9f9f25U, 0xba9f9f25U, 0xba9f9f25U, 0xba9f9f25U, 0xba9f9f25U, 0xba9f9f25U, 0xba9f9f25U, 0xba9f9f25U, 0xba9f9f25U, 0xba9f9f25U, 0xba9f9f25U, 0xba9f9f25U, 0xba9f9f25U, 0xba9f9f25U, 0xba9f9f25U, + 0xe3a8a84bU, 0xe3a8a84bU, 0xe3a8a84bU, 0xe3a8a84bU, 0xe3a8a84bU, 0xe3a8a84bU, 0xe3a8a84bU, 0xe3a8a84bU, 0xe3a8a84bU, 0xe3a8a84bU, 0xe3a8a84bU, 0xe3a8a84bU, 0xe3a8a84bU, 0xe3a8a84bU, 0xe3a8a84bU, 0xe3a8a84bU, 0xe3a8a84bU, 0xe3a8a84bU, 0xe3a8a84bU, 0xe3a8a84bU, 0xe3a8a84bU, 0xe3a8a84bU, 0xe3a8a84bU, 0xe3a8a84bU, 0xe3a8a84bU, 0xe3a8a84bU, 0xe3a8a84bU, 0xe3a8a84bU, 0xe3a8a84bU, 0xe3a8a84bU, 0xe3a8a84bU, 0xe3a8a84bU, + 0xf35151a2U, 0xf35151a2U, 0xf35151a2U, 0xf35151a2U, 0xf35151a2U, 0xf35151a2U, 0xf35151a2U, 0xf35151a2U, 0xf35151a2U, 0xf35151a2U, 0xf35151a2U, 0xf35151a2U, 0xf35151a2U, 0xf35151a2U, 0xf35151a2U, 0xf35151a2U, 0xf35151a2U, 0xf35151a2U, 0xf35151a2U, 0xf35151a2U, 0xf35151a2U, 0xf35151a2U, 0xf35151a2U, 0xf35151a2U, 0xf35151a2U, 0xf35151a2U, 0xf35151a2U, 0xf35151a2U, 0xf35151a2U, 0xf35151a2U, 0xf35151a2U, 0xf35151a2U, + 0xfea3a35dU, 0xfea3a35dU, 0xfea3a35dU, 0xfea3a35dU, 0xfea3a35dU, 0xfea3a35dU, 0xfea3a35dU, 0xfea3a35dU, 0xfea3a35dU, 0xfea3a35dU, 0xfea3a35dU, 0xfea3a35dU, 0xfea3a35dU, 0xfea3a35dU, 0xfea3a35dU, 0xfea3a35dU, 0xfea3a35dU, 0xfea3a35dU, 0xfea3a35dU, 0xfea3a35dU, 0xfea3a35dU, 0xfea3a35dU, 0xfea3a35dU, 0xfea3a35dU, 0xfea3a35dU, 0xfea3a35dU, 0xfea3a35dU, 0xfea3a35dU, 0xfea3a35dU, 0xfea3a35dU, 0xfea3a35dU, 0xfea3a35dU, + 0xc0404080U, 0xc0404080U, 0xc0404080U, 0xc0404080U, 0xc0404080U, 0xc0404080U, 0xc0404080U, 0xc0404080U, 0xc0404080U, 0xc0404080U, 0xc0404080U, 0xc0404080U, 0xc0404080U, 0xc0404080U, 0xc0404080U, 0xc0404080U, 0xc0404080U, 0xc0404080U, 0xc0404080U, 0xc0404080U, 0xc0404080U, 0xc0404080U, 0xc0404080U, 0xc0404080U, 0xc0404080U, 0xc0404080U, 0xc0404080U, 0xc0404080U, 0xc0404080U, 0xc0404080U, 0xc0404080U, 0xc0404080U, + 0x8a8f8f05U, 0x8a8f8f05U, 0x8a8f8f05U, 0x8a8f8f05U, 0x8a8f8f05U, 0x8a8f8f05U, 0x8a8f8f05U, 0x8a8f8f05U, 0x8a8f8f05U, 0x8a8f8f05U, 0x8a8f8f05U, 0x8a8f8f05U, 0x8a8f8f05U, 0x8a8f8f05U, 0x8a8f8f05U, 0x8a8f8f05U, 0x8a8f8f05U, 0x8a8f8f05U, 0x8a8f8f05U, 0x8a8f8f05U, 0x8a8f8f05U, 0x8a8f8f05U, 0x8a8f8f05U, 0x8a8f8f05U, 0x8a8f8f05U, 0x8a8f8f05U, 0x8a8f8f05U, 0x8a8f8f05U, 0x8a8f8f05U, 0x8a8f8f05U, 0x8a8f8f05U, 0x8a8f8f05U, + 0xad92923fU, 0xad92923fU, 0xad92923fU, 0xad92923fU, 0xad92923fU, 0xad92923fU, 0xad92923fU, 0xad92923fU, 0xad92923fU, 0xad92923fU, 0xad92923fU, 0xad92923fU, 0xad92923fU, 0xad92923fU, 0xad92923fU, 0xad92923fU, 0xad92923fU, 0xad92923fU, 0xad92923fU, 0xad92923fU, 0xad92923fU, 0xad92923fU, 0xad92923fU, 0xad92923fU, 0xad92923fU, 0xad92923fU, 0xad92923fU, 0xad92923fU, 0xad92923fU, 0xad92923fU, 0xad92923fU, 0xad92923fU, + 0xbc9d9d21U, 0xbc9d9d21U, 0xbc9d9d21U, 0xbc9d9d21U, 0xbc9d9d21U, 0xbc9d9d21U, 0xbc9d9d21U, 0xbc9d9d21U, 0xbc9d9d21U, 0xbc9d9d21U, 0xbc9d9d21U, 0xbc9d9d21U, 0xbc9d9d21U, 0xbc9d9d21U, 0xbc9d9d21U, 0xbc9d9d21U, 0xbc9d9d21U, 0xbc9d9d21U, 0xbc9d9d21U, 0xbc9d9d21U, 0xbc9d9d21U, 0xbc9d9d21U, 0xbc9d9d21U, 0xbc9d9d21U, 0xbc9d9d21U, 0xbc9d9d21U, 0xbc9d9d21U, 0xbc9d9d21U, 0xbc9d9d21U, 0xbc9d9d21U, 0xbc9d9d21U, 0xbc9d9d21U, + 0x48383870U, 0x48383870U, 0x48383870U, 0x48383870U, 0x48383870U, 0x48383870U, 0x48383870U, 0x48383870U, 0x48383870U, 0x48383870U, 0x48383870U, 0x48383870U, 0x48383870U, 0x48383870U, 0x48383870U, 0x48383870U, 0x48383870U, 0x48383870U, 0x48383870U, 0x48383870U, 0x48383870U, 0x48383870U, 0x48383870U, 0x48383870U, 0x48383870U, 0x48383870U, 0x48383870U, 0x48383870U, 0x48383870U, 0x48383870U, 0x48383870U, 0x48383870U, + 0x4f5f5f1U, 0x4f5f5f1U, 0x4f5f5f1U, 0x4f5f5f1U, 0x4f5f5f1U, 0x4f5f5f1U, 0x4f5f5f1U, 0x4f5f5f1U, 0x4f5f5f1U, 0x4f5f5f1U, 0x4f5f5f1U, 0x4f5f5f1U, 0x4f5f5f1U, 0x4f5f5f1U, 0x4f5f5f1U, 0x4f5f5f1U, 0x4f5f5f1U, 0x4f5f5f1U, 0x4f5f5f1U, 0x4f5f5f1U, 0x4f5f5f1U, 0x4f5f5f1U, 0x4f5f5f1U, 0x4f5f5f1U, 0x4f5f5f1U, 0x4f5f5f1U, 0x4f5f5f1U, 0x4f5f5f1U, 0x4f5f5f1U, 0x4f5f5f1U, 0x4f5f5f1U, 0x4f5f5f1U, + 0xdfbcbc63U, 0xdfbcbc63U, 0xdfbcbc63U, 0xdfbcbc63U, 0xdfbcbc63U, 0xdfbcbc63U, 0xdfbcbc63U, 0xdfbcbc63U, 0xdfbcbc63U, 0xdfbcbc63U, 0xdfbcbc63U, 0xdfbcbc63U, 0xdfbcbc63U, 0xdfbcbc63U, 0xdfbcbc63U, 0xdfbcbc63U, 0xdfbcbc63U, 0xdfbcbc63U, 0xdfbcbc63U, 0xdfbcbc63U, 0xdfbcbc63U, 0xdfbcbc63U, 0xdfbcbc63U, 0xdfbcbc63U, 0xdfbcbc63U, 0xdfbcbc63U, 0xdfbcbc63U, 0xdfbcbc63U, 0xdfbcbc63U, 0xdfbcbc63U, 0xdfbcbc63U, 0xdfbcbc63U, + 0xc1b6b677U, 0xc1b6b677U, 0xc1b6b677U, 0xc1b6b677U, 0xc1b6b677U, 0xc1b6b677U, 0xc1b6b677U, 0xc1b6b677U, 0xc1b6b677U, 0xc1b6b677U, 0xc1b6b677U, 0xc1b6b677U, 0xc1b6b677U, 0xc1b6b677U, 0xc1b6b677U, 0xc1b6b677U, 0xc1b6b677U, 0xc1b6b677U, 0xc1b6b677U, 0xc1b6b677U, 0xc1b6b677U, 0xc1b6b677U, 0xc1b6b677U, 0xc1b6b677U, 0xc1b6b677U, 0xc1b6b677U, 0xc1b6b677U, 0xc1b6b677U, 0xc1b6b677U, 0xc1b6b677U, 0xc1b6b677U, 0xc1b6b677U, + 0x75dadaafU, 0x75dadaafU, 0x75dadaafU, 0x75dadaafU, 0x75dadaafU, 0x75dadaafU, 0x75dadaafU, 0x75dadaafU, 0x75dadaafU, 0x75dadaafU, 0x75dadaafU, 0x75dadaafU, 0x75dadaafU, 0x75dadaafU, 0x75dadaafU, 0x75dadaafU, 0x75dadaafU, 0x75dadaafU, 0x75dadaafU, 0x75dadaafU, 0x75dadaafU, 0x75dadaafU, 0x75dadaafU, 0x75dadaafU, 0x75dadaafU, 0x75dadaafU, 0x75dadaafU, 0x75dadaafU, 0x75dadaafU, 0x75dadaafU, 0x75dadaafU, 0x75dadaafU, + 0x63212142U, 0x63212142U, 0x63212142U, 0x63212142U, 0x63212142U, 0x63212142U, 0x63212142U, 0x63212142U, 0x63212142U, 0x63212142U, 0x63212142U, 0x63212142U, 0x63212142U, 0x63212142U, 0x63212142U, 0x63212142U, 0x63212142U, 0x63212142U, 0x63212142U, 0x63212142U, 0x63212142U, 0x63212142U, 0x63212142U, 0x63212142U, 0x63212142U, 0x63212142U, 0x63212142U, 0x63212142U, 0x63212142U, 0x63212142U, 0x63212142U, 0x63212142U, + 0x30101020U, 0x30101020U, 0x30101020U, 0x30101020U, 0x30101020U, 0x30101020U, 0x30101020U, 0x30101020U, 0x30101020U, 0x30101020U, 0x30101020U, 0x30101020U, 0x30101020U, 0x30101020U, 0x30101020U, 0x30101020U, 0x30101020U, 0x30101020U, 0x30101020U, 0x30101020U, 0x30101020U, 0x30101020U, 0x30101020U, 0x30101020U, 0x30101020U, 0x30101020U, 0x30101020U, 0x30101020U, 0x30101020U, 0x30101020U, 0x30101020U, 0x30101020U, + 0x1affffe5U, 0x1affffe5U, 0x1affffe5U, 0x1affffe5U, 0x1affffe5U, 0x1affffe5U, 0x1affffe5U, 0x1affffe5U, 0x1affffe5U, 0x1affffe5U, 0x1affffe5U, 0x1affffe5U, 0x1affffe5U, 0x1affffe5U, 0x1affffe5U, 0x1affffe5U, 0x1affffe5U, 0x1affffe5U, 0x1affffe5U, 0x1affffe5U, 0x1affffe5U, 0x1affffe5U, 0x1affffe5U, 0x1affffe5U, 0x1affffe5U, 0x1affffe5U, 0x1affffe5U, 0x1affffe5U, 0x1affffe5U, 0x1affffe5U, 0x1affffe5U, 0x1affffe5U, + 0xef3f3fdU, 0xef3f3fdU, 0xef3f3fdU, 0xef3f3fdU, 0xef3f3fdU, 0xef3f3fdU, 0xef3f3fdU, 0xef3f3fdU, 0xef3f3fdU, 0xef3f3fdU, 0xef3f3fdU, 0xef3f3fdU, 0xef3f3fdU, 0xef3f3fdU, 0xef3f3fdU, 0xef3f3fdU, 0xef3f3fdU, 0xef3f3fdU, 0xef3f3fdU, 0xef3f3fdU, 0xef3f3fdU, 0xef3f3fdU, 0xef3f3fdU, 0xef3f3fdU, 0xef3f3fdU, 0xef3f3fdU, 0xef3f3fdU, 0xef3f3fdU, 0xef3f3fdU, 0xef3f3fdU, 0xef3f3fdU, 0xef3f3fdU, + 0x6dd2d2bfU, 0x6dd2d2bfU, 0x6dd2d2bfU, 0x6dd2d2bfU, 0x6dd2d2bfU, 0x6dd2d2bfU, 0x6dd2d2bfU, 0x6dd2d2bfU, 0x6dd2d2bfU, 0x6dd2d2bfU, 0x6dd2d2bfU, 0x6dd2d2bfU, 0x6dd2d2bfU, 0x6dd2d2bfU, 0x6dd2d2bfU, 0x6dd2d2bfU, 0x6dd2d2bfU, 0x6dd2d2bfU, 0x6dd2d2bfU, 0x6dd2d2bfU, 0x6dd2d2bfU, 0x6dd2d2bfU, 0x6dd2d2bfU, 0x6dd2d2bfU, 0x6dd2d2bfU, 0x6dd2d2bfU, 0x6dd2d2bfU, 0x6dd2d2bfU, 0x6dd2d2bfU, 0x6dd2d2bfU, 0x6dd2d2bfU, 0x6dd2d2bfU, + 0x4ccdcd81U, 0x4ccdcd81U, 0x4ccdcd81U, 0x4ccdcd81U, 0x4ccdcd81U, 0x4ccdcd81U, 0x4ccdcd81U, 0x4ccdcd81U, 0x4ccdcd81U, 0x4ccdcd81U, 0x4ccdcd81U, 0x4ccdcd81U, 0x4ccdcd81U, 0x4ccdcd81U, 0x4ccdcd81U, 0x4ccdcd81U, 0x4ccdcd81U, 0x4ccdcd81U, 0x4ccdcd81U, 0x4ccdcd81U, 0x4ccdcd81U, 0x4ccdcd81U, 0x4ccdcd81U, 0x4ccdcd81U, 0x4ccdcd81U, 0x4ccdcd81U, 0x4ccdcd81U, 0x4ccdcd81U, 0x4ccdcd81U, 0x4ccdcd81U, 0x4ccdcd81U, 0x4ccdcd81U, + 0x140c0c18U, 0x140c0c18U, 0x140c0c18U, 0x140c0c18U, 0x140c0c18U, 0x140c0c18U, 0x140c0c18U, 0x140c0c18U, 0x140c0c18U, 0x140c0c18U, 0x140c0c18U, 0x140c0c18U, 0x140c0c18U, 0x140c0c18U, 0x140c0c18U, 0x140c0c18U, 0x140c0c18U, 0x140c0c18U, 0x140c0c18U, 0x140c0c18U, 0x140c0c18U, 0x140c0c18U, 0x140c0c18U, 0x140c0c18U, 0x140c0c18U, 0x140c0c18U, 0x140c0c18U, 0x140c0c18U, 0x140c0c18U, 0x140c0c18U, 0x140c0c18U, 0x140c0c18U, + 0x35131326U, 0x35131326U, 0x35131326U, 0x35131326U, 0x35131326U, 0x35131326U, 0x35131326U, 0x35131326U, 0x35131326U, 0x35131326U, 0x35131326U, 0x35131326U, 0x35131326U, 0x35131326U, 0x35131326U, 0x35131326U, 0x35131326U, 0x35131326U, 0x35131326U, 0x35131326U, 0x35131326U, 0x35131326U, 0x35131326U, 0x35131326U, 0x35131326U, 0x35131326U, 0x35131326U, 0x35131326U, 0x35131326U, 0x35131326U, 0x35131326U, 0x35131326U, + 0x2fececc3U, 0x2fececc3U, 0x2fececc3U, 0x2fececc3U, 0x2fececc3U, 0x2fececc3U, 0x2fececc3U, 0x2fececc3U, 0x2fececc3U, 0x2fececc3U, 0x2fececc3U, 0x2fececc3U, 0x2fececc3U, 0x2fececc3U, 0x2fececc3U, 0x2fececc3U, 0x2fececc3U, 0x2fececc3U, 0x2fececc3U, 0x2fececc3U, 0x2fececc3U, 0x2fececc3U, 0x2fececc3U, 0x2fececc3U, 0x2fececc3U, 0x2fececc3U, 0x2fececc3U, 0x2fececc3U, 0x2fececc3U, 0x2fececc3U, 0x2fececc3U, 0x2fececc3U, + 0xe15f5fbeU, 0xe15f5fbeU, 0xe15f5fbeU, 0xe15f5fbeU, 0xe15f5fbeU, 0xe15f5fbeU, 0xe15f5fbeU, 0xe15f5fbeU, 0xe15f5fbeU, 0xe15f5fbeU, 0xe15f5fbeU, 0xe15f5fbeU, 0xe15f5fbeU, 0xe15f5fbeU, 0xe15f5fbeU, 0xe15f5fbeU, 0xe15f5fbeU, 0xe15f5fbeU, 0xe15f5fbeU, 0xe15f5fbeU, 0xe15f5fbeU, 0xe15f5fbeU, 0xe15f5fbeU, 0xe15f5fbeU, 0xe15f5fbeU, 0xe15f5fbeU, 0xe15f5fbeU, 0xe15f5fbeU, 0xe15f5fbeU, 0xe15f5fbeU, 0xe15f5fbeU, 0xe15f5fbeU, + 0xa2979735U, 0xa2979735U, 0xa2979735U, 0xa2979735U, 0xa2979735U, 0xa2979735U, 0xa2979735U, 0xa2979735U, 0xa2979735U, 0xa2979735U, 0xa2979735U, 0xa2979735U, 0xa2979735U, 0xa2979735U, 0xa2979735U, 0xa2979735U, 0xa2979735U, 0xa2979735U, 0xa2979735U, 0xa2979735U, 0xa2979735U, 0xa2979735U, 0xa2979735U, 0xa2979735U, 0xa2979735U, 0xa2979735U, 0xa2979735U, 0xa2979735U, 0xa2979735U, 0xa2979735U, 0xa2979735U, 0xa2979735U, + 0xcc444488U, 0xcc444488U, 0xcc444488U, 0xcc444488U, 0xcc444488U, 0xcc444488U, 0xcc444488U, 0xcc444488U, 0xcc444488U, 0xcc444488U, 0xcc444488U, 0xcc444488U, 0xcc444488U, 0xcc444488U, 0xcc444488U, 0xcc444488U, 0xcc444488U, 0xcc444488U, 0xcc444488U, 0xcc444488U, 0xcc444488U, 0xcc444488U, 0xcc444488U, 0xcc444488U, 0xcc444488U, 0xcc444488U, 0xcc444488U, 0xcc444488U, 0xcc444488U, 0xcc444488U, 0xcc444488U, 0xcc444488U, + 0x3917172eU, 0x3917172eU, 0x3917172eU, 0x3917172eU, 0x3917172eU, 0x3917172eU, 0x3917172eU, 0x3917172eU, 0x3917172eU, 0x3917172eU, 0x3917172eU, 0x3917172eU, 0x3917172eU, 0x3917172eU, 0x3917172eU, 0x3917172eU, 0x3917172eU, 0x3917172eU, 0x3917172eU, 0x3917172eU, 0x3917172eU, 0x3917172eU, 0x3917172eU, 0x3917172eU, 0x3917172eU, 0x3917172eU, 0x3917172eU, 0x3917172eU, 0x3917172eU, 0x3917172eU, 0x3917172eU, 0x3917172eU, + 0x57c4c493U, 0x57c4c493U, 0x57c4c493U, 0x57c4c493U, 0x57c4c493U, 0x57c4c493U, 0x57c4c493U, 0x57c4c493U, 0x57c4c493U, 0x57c4c493U, 0x57c4c493U, 0x57c4c493U, 0x57c4c493U, 0x57c4c493U, 0x57c4c493U, 0x57c4c493U, 0x57c4c493U, 0x57c4c493U, 0x57c4c493U, 0x57c4c493U, 0x57c4c493U, 0x57c4c493U, 0x57c4c493U, 0x57c4c493U, 0x57c4c493U, 0x57c4c493U, 0x57c4c493U, 0x57c4c493U, 0x57c4c493U, 0x57c4c493U, 0x57c4c493U, 0x57c4c493U, + 0xf2a7a755U, 0xf2a7a755U, 0xf2a7a755U, 0xf2a7a755U, 0xf2a7a755U, 0xf2a7a755U, 0xf2a7a755U, 0xf2a7a755U, 0xf2a7a755U, 0xf2a7a755U, 0xf2a7a755U, 0xf2a7a755U, 0xf2a7a755U, 0xf2a7a755U, 0xf2a7a755U, 0xf2a7a755U, 0xf2a7a755U, 0xf2a7a755U, 0xf2a7a755U, 0xf2a7a755U, 0xf2a7a755U, 0xf2a7a755U, 0xf2a7a755U, 0xf2a7a755U, 0xf2a7a755U, 0xf2a7a755U, 0xf2a7a755U, 0xf2a7a755U, 0xf2a7a755U, 0xf2a7a755U, 0xf2a7a755U, 0xf2a7a755U, + 0x827e7efcU, 0x827e7efcU, 0x827e7efcU, 0x827e7efcU, 0x827e7efcU, 0x827e7efcU, 0x827e7efcU, 0x827e7efcU, 0x827e7efcU, 0x827e7efcU, 0x827e7efcU, 0x827e7efcU, 0x827e7efcU, 0x827e7efcU, 0x827e7efcU, 0x827e7efcU, 0x827e7efcU, 0x827e7efcU, 0x827e7efcU, 0x827e7efcU, 0x827e7efcU, 0x827e7efcU, 0x827e7efcU, 0x827e7efcU, 0x827e7efcU, 0x827e7efcU, 0x827e7efcU, 0x827e7efcU, 0x827e7efcU, 0x827e7efcU, 0x827e7efcU, 0x827e7efcU, + 0x473d3d7aU, 0x473d3d7aU, 0x473d3d7aU, 0x473d3d7aU, 0x473d3d7aU, 0x473d3d7aU, 0x473d3d7aU, 0x473d3d7aU, 0x473d3d7aU, 0x473d3d7aU, 0x473d3d7aU, 0x473d3d7aU, 0x473d3d7aU, 0x473d3d7aU, 0x473d3d7aU, 0x473d3d7aU, 0x473d3d7aU, 0x473d3d7aU, 0x473d3d7aU, 0x473d3d7aU, 0x473d3d7aU, 0x473d3d7aU, 0x473d3d7aU, 0x473d3d7aU, 0x473d3d7aU, 0x473d3d7aU, 0x473d3d7aU, 0x473d3d7aU, 0x473d3d7aU, 0x473d3d7aU, 0x473d3d7aU, 0x473d3d7aU, + 0xac6464c8U, 0xac6464c8U, 0xac6464c8U, 0xac6464c8U, 0xac6464c8U, 0xac6464c8U, 0xac6464c8U, 0xac6464c8U, 0xac6464c8U, 0xac6464c8U, 0xac6464c8U, 0xac6464c8U, 0xac6464c8U, 0xac6464c8U, 0xac6464c8U, 0xac6464c8U, 0xac6464c8U, 0xac6464c8U, 0xac6464c8U, 0xac6464c8U, 0xac6464c8U, 0xac6464c8U, 0xac6464c8U, 0xac6464c8U, 0xac6464c8U, 0xac6464c8U, 0xac6464c8U, 0xac6464c8U, 0xac6464c8U, 0xac6464c8U, 0xac6464c8U, 0xac6464c8U, + 0xe75d5dbaU, 0xe75d5dbaU, 0xe75d5dbaU, 0xe75d5dbaU, 0xe75d5dbaU, 0xe75d5dbaU, 0xe75d5dbaU, 0xe75d5dbaU, 0xe75d5dbaU, 0xe75d5dbaU, 0xe75d5dbaU, 0xe75d5dbaU, 0xe75d5dbaU, 0xe75d5dbaU, 0xe75d5dbaU, 0xe75d5dbaU, 0xe75d5dbaU, 0xe75d5dbaU, 0xe75d5dbaU, 0xe75d5dbaU, 0xe75d5dbaU, 0xe75d5dbaU, 0xe75d5dbaU, 0xe75d5dbaU, 0xe75d5dbaU, 0xe75d5dbaU, 0xe75d5dbaU, 0xe75d5dbaU, 0xe75d5dbaU, 0xe75d5dbaU, 0xe75d5dbaU, 0xe75d5dbaU, + 0x2b191932U, 0x2b191932U, 0x2b191932U, 0x2b191932U, 0x2b191932U, 0x2b191932U, 0x2b191932U, 0x2b191932U, 0x2b191932U, 0x2b191932U, 0x2b191932U, 0x2b191932U, 0x2b191932U, 0x2b191932U, 0x2b191932U, 0x2b191932U, 0x2b191932U, 0x2b191932U, 0x2b191932U, 0x2b191932U, 0x2b191932U, 0x2b191932U, 0x2b191932U, 0x2b191932U, 0x2b191932U, 0x2b191932U, 0x2b191932U, 0x2b191932U, 0x2b191932U, 0x2b191932U, 0x2b191932U, 0x2b191932U, + 0x957373e6U, 0x957373e6U, 0x957373e6U, 0x957373e6U, 0x957373e6U, 0x957373e6U, 0x957373e6U, 0x957373e6U, 0x957373e6U, 0x957373e6U, 0x957373e6U, 0x957373e6U, 0x957373e6U, 0x957373e6U, 0x957373e6U, 0x957373e6U, 0x957373e6U, 0x957373e6U, 0x957373e6U, 0x957373e6U, 0x957373e6U, 0x957373e6U, 0x957373e6U, 0x957373e6U, 0x957373e6U, 0x957373e6U, 0x957373e6U, 0x957373e6U, 0x957373e6U, 0x957373e6U, 0x957373e6U, 0x957373e6U, + 0xa06060c0U, 0xa06060c0U, 0xa06060c0U, 0xa06060c0U, 0xa06060c0U, 0xa06060c0U, 0xa06060c0U, 0xa06060c0U, 0xa06060c0U, 0xa06060c0U, 0xa06060c0U, 0xa06060c0U, 0xa06060c0U, 0xa06060c0U, 0xa06060c0U, 0xa06060c0U, 0xa06060c0U, 0xa06060c0U, 0xa06060c0U, 0xa06060c0U, 0xa06060c0U, 0xa06060c0U, 0xa06060c0U, 0xa06060c0U, 0xa06060c0U, 0xa06060c0U, 0xa06060c0U, 0xa06060c0U, 0xa06060c0U, 0xa06060c0U, 0xa06060c0U, 0xa06060c0U, + 0x98818119U, 0x98818119U, 0x98818119U, 0x98818119U, 0x98818119U, 0x98818119U, 0x98818119U, 0x98818119U, 0x98818119U, 0x98818119U, 0x98818119U, 0x98818119U, 0x98818119U, 0x98818119U, 0x98818119U, 0x98818119U, 0x98818119U, 0x98818119U, 0x98818119U, 0x98818119U, 0x98818119U, 0x98818119U, 0x98818119U, 0x98818119U, 0x98818119U, 0x98818119U, 0x98818119U, 0x98818119U, 0x98818119U, 0x98818119U, 0x98818119U, 0x98818119U, + 0xd14f4f9eU, 0xd14f4f9eU, 0xd14f4f9eU, 0xd14f4f9eU, 0xd14f4f9eU, 0xd14f4f9eU, 0xd14f4f9eU, 0xd14f4f9eU, 0xd14f4f9eU, 0xd14f4f9eU, 0xd14f4f9eU, 0xd14f4f9eU, 0xd14f4f9eU, 0xd14f4f9eU, 0xd14f4f9eU, 0xd14f4f9eU, 0xd14f4f9eU, 0xd14f4f9eU, 0xd14f4f9eU, 0xd14f4f9eU, 0xd14f4f9eU, 0xd14f4f9eU, 0xd14f4f9eU, 0xd14f4f9eU, 0xd14f4f9eU, 0xd14f4f9eU, 0xd14f4f9eU, 0xd14f4f9eU, 0xd14f4f9eU, 0xd14f4f9eU, 0xd14f4f9eU, 0xd14f4f9eU, + 0x7fdcdca3U, 0x7fdcdca3U, 0x7fdcdca3U, 0x7fdcdca3U, 0x7fdcdca3U, 0x7fdcdca3U, 0x7fdcdca3U, 0x7fdcdca3U, 0x7fdcdca3U, 0x7fdcdca3U, 0x7fdcdca3U, 0x7fdcdca3U, 0x7fdcdca3U, 0x7fdcdca3U, 0x7fdcdca3U, 0x7fdcdca3U, 0x7fdcdca3U, 0x7fdcdca3U, 0x7fdcdca3U, 0x7fdcdca3U, 0x7fdcdca3U, 0x7fdcdca3U, 0x7fdcdca3U, 0x7fdcdca3U, 0x7fdcdca3U, 0x7fdcdca3U, 0x7fdcdca3U, 0x7fdcdca3U, 0x7fdcdca3U, 0x7fdcdca3U, 0x7fdcdca3U, 0x7fdcdca3U, + 0x66222244U, 0x66222244U, 0x66222244U, 0x66222244U, 0x66222244U, 0x66222244U, 0x66222244U, 0x66222244U, 0x66222244U, 0x66222244U, 0x66222244U, 0x66222244U, 0x66222244U, 0x66222244U, 0x66222244U, 0x66222244U, 0x66222244U, 0x66222244U, 0x66222244U, 0x66222244U, 0x66222244U, 0x66222244U, 0x66222244U, 0x66222244U, 0x66222244U, 0x66222244U, 0x66222244U, 0x66222244U, 0x66222244U, 0x66222244U, 0x66222244U, 0x66222244U, + 0x7e2a2a54U, 0x7e2a2a54U, 0x7e2a2a54U, 0x7e2a2a54U, 0x7e2a2a54U, 0x7e2a2a54U, 0x7e2a2a54U, 0x7e2a2a54U, 0x7e2a2a54U, 0x7e2a2a54U, 0x7e2a2a54U, 0x7e2a2a54U, 0x7e2a2a54U, 0x7e2a2a54U, 0x7e2a2a54U, 0x7e2a2a54U, 0x7e2a2a54U, 0x7e2a2a54U, 0x7e2a2a54U, 0x7e2a2a54U, 0x7e2a2a54U, 0x7e2a2a54U, 0x7e2a2a54U, 0x7e2a2a54U, 0x7e2a2a54U, 0x7e2a2a54U, 0x7e2a2a54U, 0x7e2a2a54U, 0x7e2a2a54U, 0x7e2a2a54U, 0x7e2a2a54U, 0x7e2a2a54U, + 0xab90903bU, 0xab90903bU, 0xab90903bU, 0xab90903bU, 0xab90903bU, 0xab90903bU, 0xab90903bU, 0xab90903bU, 0xab90903bU, 0xab90903bU, 0xab90903bU, 0xab90903bU, 0xab90903bU, 0xab90903bU, 0xab90903bU, 0xab90903bU, 0xab90903bU, 0xab90903bU, 0xab90903bU, 0xab90903bU, 0xab90903bU, 0xab90903bU, 0xab90903bU, 0xab90903bU, 0xab90903bU, 0xab90903bU, 0xab90903bU, 0xab90903bU, 0xab90903bU, 0xab90903bU, 0xab90903bU, 0xab90903bU, + 0x8388880bU, 0x8388880bU, 0x8388880bU, 0x8388880bU, 0x8388880bU, 0x8388880bU, 0x8388880bU, 0x8388880bU, 0x8388880bU, 0x8388880bU, 0x8388880bU, 0x8388880bU, 0x8388880bU, 0x8388880bU, 0x8388880bU, 0x8388880bU, 0x8388880bU, 0x8388880bU, 0x8388880bU, 0x8388880bU, 0x8388880bU, 0x8388880bU, 0x8388880bU, 0x8388880bU, 0x8388880bU, 0x8388880bU, 0x8388880bU, 0x8388880bU, 0x8388880bU, 0x8388880bU, 0x8388880bU, 0x8388880bU, + 0xca46468cU, 0xca46468cU, 0xca46468cU, 0xca46468cU, 0xca46468cU, 0xca46468cU, 0xca46468cU, 0xca46468cU, 0xca46468cU, 0xca46468cU, 0xca46468cU, 0xca46468cU, 0xca46468cU, 0xca46468cU, 0xca46468cU, 0xca46468cU, 0xca46468cU, 0xca46468cU, 0xca46468cU, 0xca46468cU, 0xca46468cU, 0xca46468cU, 0xca46468cU, 0xca46468cU, 0xca46468cU, 0xca46468cU, 0xca46468cU, 0xca46468cU, 0xca46468cU, 0xca46468cU, 0xca46468cU, 0xca46468cU, + 0x29eeeec7U, 0x29eeeec7U, 0x29eeeec7U, 0x29eeeec7U, 0x29eeeec7U, 0x29eeeec7U, 0x29eeeec7U, 0x29eeeec7U, 0x29eeeec7U, 0x29eeeec7U, 0x29eeeec7U, 0x29eeeec7U, 0x29eeeec7U, 0x29eeeec7U, 0x29eeeec7U, 0x29eeeec7U, 0x29eeeec7U, 0x29eeeec7U, 0x29eeeec7U, 0x29eeeec7U, 0x29eeeec7U, 0x29eeeec7U, 0x29eeeec7U, 0x29eeeec7U, 0x29eeeec7U, 0x29eeeec7U, 0x29eeeec7U, 0x29eeeec7U, 0x29eeeec7U, 0x29eeeec7U, 0x29eeeec7U, 0x29eeeec7U, + 0xd3b8b86bU, 0xd3b8b86bU, 0xd3b8b86bU, 0xd3b8b86bU, 0xd3b8b86bU, 0xd3b8b86bU, 0xd3b8b86bU, 0xd3b8b86bU, 0xd3b8b86bU, 0xd3b8b86bU, 0xd3b8b86bU, 0xd3b8b86bU, 0xd3b8b86bU, 0xd3b8b86bU, 0xd3b8b86bU, 0xd3b8b86bU, 0xd3b8b86bU, 0xd3b8b86bU, 0xd3b8b86bU, 0xd3b8b86bU, 0xd3b8b86bU, 0xd3b8b86bU, 0xd3b8b86bU, 0xd3b8b86bU, 0xd3b8b86bU, 0xd3b8b86bU, 0xd3b8b86bU, 0xd3b8b86bU, 0xd3b8b86bU, 0xd3b8b86bU, 0xd3b8b86bU, 0xd3b8b86bU, + 0x3c141428U, 0x3c141428U, 0x3c141428U, 0x3c141428U, 0x3c141428U, 0x3c141428U, 0x3c141428U, 0x3c141428U, 0x3c141428U, 0x3c141428U, 0x3c141428U, 0x3c141428U, 0x3c141428U, 0x3c141428U, 0x3c141428U, 0x3c141428U, 0x3c141428U, 0x3c141428U, 0x3c141428U, 0x3c141428U, 0x3c141428U, 0x3c141428U, 0x3c141428U, 0x3c141428U, 0x3c141428U, 0x3c141428U, 0x3c141428U, 0x3c141428U, 0x3c141428U, 0x3c141428U, 0x3c141428U, 0x3c141428U, + 0x79dedea7U, 0x79dedea7U, 0x79dedea7U, 0x79dedea7U, 0x79dedea7U, 0x79dedea7U, 0x79dedea7U, 0x79dedea7U, 0x79dedea7U, 0x79dedea7U, 0x79dedea7U, 0x79dedea7U, 0x79dedea7U, 0x79dedea7U, 0x79dedea7U, 0x79dedea7U, 0x79dedea7U, 0x79dedea7U, 0x79dedea7U, 0x79dedea7U, 0x79dedea7U, 0x79dedea7U, 0x79dedea7U, 0x79dedea7U, 0x79dedea7U, 0x79dedea7U, 0x79dedea7U, 0x79dedea7U, 0x79dedea7U, 0x79dedea7U, 0x79dedea7U, 0x79dedea7U, + 0xe25e5ebcU, 0xe25e5ebcU, 0xe25e5ebcU, 0xe25e5ebcU, 0xe25e5ebcU, 0xe25e5ebcU, 0xe25e5ebcU, 0xe25e5ebcU, 0xe25e5ebcU, 0xe25e5ebcU, 0xe25e5ebcU, 0xe25e5ebcU, 0xe25e5ebcU, 0xe25e5ebcU, 0xe25e5ebcU, 0xe25e5ebcU, 0xe25e5ebcU, 0xe25e5ebcU, 0xe25e5ebcU, 0xe25e5ebcU, 0xe25e5ebcU, 0xe25e5ebcU, 0xe25e5ebcU, 0xe25e5ebcU, 0xe25e5ebcU, 0xe25e5ebcU, 0xe25e5ebcU, 0xe25e5ebcU, 0xe25e5ebcU, 0xe25e5ebcU, 0xe25e5ebcU, 0xe25e5ebcU, + 0x1d0b0b16U, 0x1d0b0b16U, 0x1d0b0b16U, 0x1d0b0b16U, 0x1d0b0b16U, 0x1d0b0b16U, 0x1d0b0b16U, 0x1d0b0b16U, 0x1d0b0b16U, 0x1d0b0b16U, 0x1d0b0b16U, 0x1d0b0b16U, 0x1d0b0b16U, 0x1d0b0b16U, 0x1d0b0b16U, 0x1d0b0b16U, 0x1d0b0b16U, 0x1d0b0b16U, 0x1d0b0b16U, 0x1d0b0b16U, 0x1d0b0b16U, 0x1d0b0b16U, 0x1d0b0b16U, 0x1d0b0b16U, 0x1d0b0b16U, 0x1d0b0b16U, 0x1d0b0b16U, 0x1d0b0b16U, 0x1d0b0b16U, 0x1d0b0b16U, 0x1d0b0b16U, 0x1d0b0b16U, + 0x76dbdbadU, 0x76dbdbadU, 0x76dbdbadU, 0x76dbdbadU, 0x76dbdbadU, 0x76dbdbadU, 0x76dbdbadU, 0x76dbdbadU, 0x76dbdbadU, 0x76dbdbadU, 0x76dbdbadU, 0x76dbdbadU, 0x76dbdbadU, 0x76dbdbadU, 0x76dbdbadU, 0x76dbdbadU, 0x76dbdbadU, 0x76dbdbadU, 0x76dbdbadU, 0x76dbdbadU, 0x76dbdbadU, 0x76dbdbadU, 0x76dbdbadU, 0x76dbdbadU, 0x76dbdbadU, 0x76dbdbadU, 0x76dbdbadU, 0x76dbdbadU, 0x76dbdbadU, 0x76dbdbadU, 0x76dbdbadU, 0x76dbdbadU, + 0x3be0e0dbU, 0x3be0e0dbU, 0x3be0e0dbU, 0x3be0e0dbU, 0x3be0e0dbU, 0x3be0e0dbU, 0x3be0e0dbU, 0x3be0e0dbU, 0x3be0e0dbU, 0x3be0e0dbU, 0x3be0e0dbU, 0x3be0e0dbU, 0x3be0e0dbU, 0x3be0e0dbU, 0x3be0e0dbU, 0x3be0e0dbU, 0x3be0e0dbU, 0x3be0e0dbU, 0x3be0e0dbU, 0x3be0e0dbU, 0x3be0e0dbU, 0x3be0e0dbU, 0x3be0e0dbU, 0x3be0e0dbU, 0x3be0e0dbU, 0x3be0e0dbU, 0x3be0e0dbU, 0x3be0e0dbU, 0x3be0e0dbU, 0x3be0e0dbU, 0x3be0e0dbU, 0x3be0e0dbU, + 0x56323264U, 0x56323264U, 0x56323264U, 0x56323264U, 0x56323264U, 0x56323264U, 0x56323264U, 0x56323264U, 0x56323264U, 0x56323264U, 0x56323264U, 0x56323264U, 0x56323264U, 0x56323264U, 0x56323264U, 0x56323264U, 0x56323264U, 0x56323264U, 0x56323264U, 0x56323264U, 0x56323264U, 0x56323264U, 0x56323264U, 0x56323264U, 0x56323264U, 0x56323264U, 0x56323264U, 0x56323264U, 0x56323264U, 0x56323264U, 0x56323264U, 0x56323264U, + 0x4e3a3a74U, 0x4e3a3a74U, 0x4e3a3a74U, 0x4e3a3a74U, 0x4e3a3a74U, 0x4e3a3a74U, 0x4e3a3a74U, 0x4e3a3a74U, 0x4e3a3a74U, 0x4e3a3a74U, 0x4e3a3a74U, 0x4e3a3a74U, 0x4e3a3a74U, 0x4e3a3a74U, 0x4e3a3a74U, 0x4e3a3a74U, 0x4e3a3a74U, 0x4e3a3a74U, 0x4e3a3a74U, 0x4e3a3a74U, 0x4e3a3a74U, 0x4e3a3a74U, 0x4e3a3a74U, 0x4e3a3a74U, 0x4e3a3a74U, 0x4e3a3a74U, 0x4e3a3a74U, 0x4e3a3a74U, 0x4e3a3a74U, 0x4e3a3a74U, 0x4e3a3a74U, 0x4e3a3a74U, + 0x1e0a0a14U, 0x1e0a0a14U, 0x1e0a0a14U, 0x1e0a0a14U, 0x1e0a0a14U, 0x1e0a0a14U, 0x1e0a0a14U, 0x1e0a0a14U, 0x1e0a0a14U, 0x1e0a0a14U, 0x1e0a0a14U, 0x1e0a0a14U, 0x1e0a0a14U, 0x1e0a0a14U, 0x1e0a0a14U, 0x1e0a0a14U, 0x1e0a0a14U, 0x1e0a0a14U, 0x1e0a0a14U, 0x1e0a0a14U, 0x1e0a0a14U, 0x1e0a0a14U, 0x1e0a0a14U, 0x1e0a0a14U, 0x1e0a0a14U, 0x1e0a0a14U, 0x1e0a0a14U, 0x1e0a0a14U, 0x1e0a0a14U, 0x1e0a0a14U, 0x1e0a0a14U, 0x1e0a0a14U, + 0xdb494992U, 0xdb494992U, 0xdb494992U, 0xdb494992U, 0xdb494992U, 0xdb494992U, 0xdb494992U, 0xdb494992U, 0xdb494992U, 0xdb494992U, 0xdb494992U, 0xdb494992U, 0xdb494992U, 0xdb494992U, 0xdb494992U, 0xdb494992U, 0xdb494992U, 0xdb494992U, 0xdb494992U, 0xdb494992U, 0xdb494992U, 0xdb494992U, 0xdb494992U, 0xdb494992U, 0xdb494992U, 0xdb494992U, 0xdb494992U, 0xdb494992U, 0xdb494992U, 0xdb494992U, 0xdb494992U, 0xdb494992U, + 0xa06060cU, 0xa06060cU, 0xa06060cU, 0xa06060cU, 0xa06060cU, 0xa06060cU, 0xa06060cU, 0xa06060cU, 0xa06060cU, 0xa06060cU, 0xa06060cU, 0xa06060cU, 0xa06060cU, 0xa06060cU, 0xa06060cU, 0xa06060cU, 0xa06060cU, 0xa06060cU, 0xa06060cU, 0xa06060cU, 0xa06060cU, 0xa06060cU, 0xa06060cU, 0xa06060cU, 0xa06060cU, 0xa06060cU, 0xa06060cU, 0xa06060cU, 0xa06060cU, 0xa06060cU, 0xa06060cU, 0xa06060cU, + 0x6c242448U, 0x6c242448U, 0x6c242448U, 0x6c242448U, 0x6c242448U, 0x6c242448U, 0x6c242448U, 0x6c242448U, 0x6c242448U, 0x6c242448U, 0x6c242448U, 0x6c242448U, 0x6c242448U, 0x6c242448U, 0x6c242448U, 0x6c242448U, 0x6c242448U, 0x6c242448U, 0x6c242448U, 0x6c242448U, 0x6c242448U, 0x6c242448U, 0x6c242448U, 0x6c242448U, 0x6c242448U, 0x6c242448U, 0x6c242448U, 0x6c242448U, 0x6c242448U, 0x6c242448U, 0x6c242448U, 0x6c242448U, + 0xe45c5cb8U, 0xe45c5cb8U, 0xe45c5cb8U, 0xe45c5cb8U, 0xe45c5cb8U, 0xe45c5cb8U, 0xe45c5cb8U, 0xe45c5cb8U, 0xe45c5cb8U, 0xe45c5cb8U, 0xe45c5cb8U, 0xe45c5cb8U, 0xe45c5cb8U, 0xe45c5cb8U, 0xe45c5cb8U, 0xe45c5cb8U, 0xe45c5cb8U, 0xe45c5cb8U, 0xe45c5cb8U, 0xe45c5cb8U, 0xe45c5cb8U, 0xe45c5cb8U, 0xe45c5cb8U, 0xe45c5cb8U, 0xe45c5cb8U, 0xe45c5cb8U, 0xe45c5cb8U, 0xe45c5cb8U, 0xe45c5cb8U, 0xe45c5cb8U, 0xe45c5cb8U, 0xe45c5cb8U, + 0x5dc2c29fU, 0x5dc2c29fU, 0x5dc2c29fU, 0x5dc2c29fU, 0x5dc2c29fU, 0x5dc2c29fU, 0x5dc2c29fU, 0x5dc2c29fU, 0x5dc2c29fU, 0x5dc2c29fU, 0x5dc2c29fU, 0x5dc2c29fU, 0x5dc2c29fU, 0x5dc2c29fU, 0x5dc2c29fU, 0x5dc2c29fU, 0x5dc2c29fU, 0x5dc2c29fU, 0x5dc2c29fU, 0x5dc2c29fU, 0x5dc2c29fU, 0x5dc2c29fU, 0x5dc2c29fU, 0x5dc2c29fU, 0x5dc2c29fU, 0x5dc2c29fU, 0x5dc2c29fU, 0x5dc2c29fU, 0x5dc2c29fU, 0x5dc2c29fU, 0x5dc2c29fU, 0x5dc2c29fU, + 0x6ed3d3bdU, 0x6ed3d3bdU, 0x6ed3d3bdU, 0x6ed3d3bdU, 0x6ed3d3bdU, 0x6ed3d3bdU, 0x6ed3d3bdU, 0x6ed3d3bdU, 0x6ed3d3bdU, 0x6ed3d3bdU, 0x6ed3d3bdU, 0x6ed3d3bdU, 0x6ed3d3bdU, 0x6ed3d3bdU, 0x6ed3d3bdU, 0x6ed3d3bdU, 0x6ed3d3bdU, 0x6ed3d3bdU, 0x6ed3d3bdU, 0x6ed3d3bdU, 0x6ed3d3bdU, 0x6ed3d3bdU, 0x6ed3d3bdU, 0x6ed3d3bdU, 0x6ed3d3bdU, 0x6ed3d3bdU, 0x6ed3d3bdU, 0x6ed3d3bdU, 0x6ed3d3bdU, 0x6ed3d3bdU, 0x6ed3d3bdU, 0x6ed3d3bdU, + 0xefacac43U, 0xefacac43U, 0xefacac43U, 0xefacac43U, 0xefacac43U, 0xefacac43U, 0xefacac43U, 0xefacac43U, 0xefacac43U, 0xefacac43U, 0xefacac43U, 0xefacac43U, 0xefacac43U, 0xefacac43U, 0xefacac43U, 0xefacac43U, 0xefacac43U, 0xefacac43U, 0xefacac43U, 0xefacac43U, 0xefacac43U, 0xefacac43U, 0xefacac43U, 0xefacac43U, 0xefacac43U, 0xefacac43U, 0xefacac43U, 0xefacac43U, 0xefacac43U, 0xefacac43U, 0xefacac43U, 0xefacac43U, + 0xa66262c4U, 0xa66262c4U, 0xa66262c4U, 0xa66262c4U, 0xa66262c4U, 0xa66262c4U, 0xa66262c4U, 0xa66262c4U, 0xa66262c4U, 0xa66262c4U, 0xa66262c4U, 0xa66262c4U, 0xa66262c4U, 0xa66262c4U, 0xa66262c4U, 0xa66262c4U, 0xa66262c4U, 0xa66262c4U, 0xa66262c4U, 0xa66262c4U, 0xa66262c4U, 0xa66262c4U, 0xa66262c4U, 0xa66262c4U, 0xa66262c4U, 0xa66262c4U, 0xa66262c4U, 0xa66262c4U, 0xa66262c4U, 0xa66262c4U, 0xa66262c4U, 0xa66262c4U, + 0xa8919139U, 0xa8919139U, 0xa8919139U, 0xa8919139U, 0xa8919139U, 0xa8919139U, 0xa8919139U, 0xa8919139U, 0xa8919139U, 0xa8919139U, 0xa8919139U, 0xa8919139U, 0xa8919139U, 0xa8919139U, 0xa8919139U, 0xa8919139U, 0xa8919139U, 0xa8919139U, 0xa8919139U, 0xa8919139U, 0xa8919139U, 0xa8919139U, 0xa8919139U, 0xa8919139U, 0xa8919139U, 0xa8919139U, 0xa8919139U, 0xa8919139U, 0xa8919139U, 0xa8919139U, 0xa8919139U, 0xa8919139U, + 0xa4959531U, 0xa4959531U, 0xa4959531U, 0xa4959531U, 0xa4959531U, 0xa4959531U, 0xa4959531U, 0xa4959531U, 0xa4959531U, 0xa4959531U, 0xa4959531U, 0xa4959531U, 0xa4959531U, 0xa4959531U, 0xa4959531U, 0xa4959531U, 0xa4959531U, 0xa4959531U, 0xa4959531U, 0xa4959531U, 0xa4959531U, 0xa4959531U, 0xa4959531U, 0xa4959531U, 0xa4959531U, 0xa4959531U, 0xa4959531U, 0xa4959531U, 0xa4959531U, 0xa4959531U, 0xa4959531U, 0xa4959531U, + 0x37e4e4d3U, 0x37e4e4d3U, 0x37e4e4d3U, 0x37e4e4d3U, 0x37e4e4d3U, 0x37e4e4d3U, 0x37e4e4d3U, 0x37e4e4d3U, 0x37e4e4d3U, 0x37e4e4d3U, 0x37e4e4d3U, 0x37e4e4d3U, 0x37e4e4d3U, 0x37e4e4d3U, 0x37e4e4d3U, 0x37e4e4d3U, 0x37e4e4d3U, 0x37e4e4d3U, 0x37e4e4d3U, 0x37e4e4d3U, 0x37e4e4d3U, 0x37e4e4d3U, 0x37e4e4d3U, 0x37e4e4d3U, 0x37e4e4d3U, 0x37e4e4d3U, 0x37e4e4d3U, 0x37e4e4d3U, 0x37e4e4d3U, 0x37e4e4d3U, 0x37e4e4d3U, 0x37e4e4d3U, + 0x8b7979f2U, 0x8b7979f2U, 0x8b7979f2U, 0x8b7979f2U, 0x8b7979f2U, 0x8b7979f2U, 0x8b7979f2U, 0x8b7979f2U, 0x8b7979f2U, 0x8b7979f2U, 0x8b7979f2U, 0x8b7979f2U, 0x8b7979f2U, 0x8b7979f2U, 0x8b7979f2U, 0x8b7979f2U, 0x8b7979f2U, 0x8b7979f2U, 0x8b7979f2U, 0x8b7979f2U, 0x8b7979f2U, 0x8b7979f2U, 0x8b7979f2U, 0x8b7979f2U, 0x8b7979f2U, 0x8b7979f2U, 0x8b7979f2U, 0x8b7979f2U, 0x8b7979f2U, 0x8b7979f2U, 0x8b7979f2U, 0x8b7979f2U, + 0x32e7e7d5U, 0x32e7e7d5U, 0x32e7e7d5U, 0x32e7e7d5U, 0x32e7e7d5U, 0x32e7e7d5U, 0x32e7e7d5U, 0x32e7e7d5U, 0x32e7e7d5U, 0x32e7e7d5U, 0x32e7e7d5U, 0x32e7e7d5U, 0x32e7e7d5U, 0x32e7e7d5U, 0x32e7e7d5U, 0x32e7e7d5U, 0x32e7e7d5U, 0x32e7e7d5U, 0x32e7e7d5U, 0x32e7e7d5U, 0x32e7e7d5U, 0x32e7e7d5U, 0x32e7e7d5U, 0x32e7e7d5U, 0x32e7e7d5U, 0x32e7e7d5U, 0x32e7e7d5U, 0x32e7e7d5U, 0x32e7e7d5U, 0x32e7e7d5U, 0x32e7e7d5U, 0x32e7e7d5U, + 0x43c8c88bU, 0x43c8c88bU, 0x43c8c88bU, 0x43c8c88bU, 0x43c8c88bU, 0x43c8c88bU, 0x43c8c88bU, 0x43c8c88bU, 0x43c8c88bU, 0x43c8c88bU, 0x43c8c88bU, 0x43c8c88bU, 0x43c8c88bU, 0x43c8c88bU, 0x43c8c88bU, 0x43c8c88bU, 0x43c8c88bU, 0x43c8c88bU, 0x43c8c88bU, 0x43c8c88bU, 0x43c8c88bU, 0x43c8c88bU, 0x43c8c88bU, 0x43c8c88bU, 0x43c8c88bU, 0x43c8c88bU, 0x43c8c88bU, 0x43c8c88bU, 0x43c8c88bU, 0x43c8c88bU, 0x43c8c88bU, 0x43c8c88bU, + 0x5937376eU, 0x5937376eU, 0x5937376eU, 0x5937376eU, 0x5937376eU, 0x5937376eU, 0x5937376eU, 0x5937376eU, 0x5937376eU, 0x5937376eU, 0x5937376eU, 0x5937376eU, 0x5937376eU, 0x5937376eU, 0x5937376eU, 0x5937376eU, 0x5937376eU, 0x5937376eU, 0x5937376eU, 0x5937376eU, 0x5937376eU, 0x5937376eU, 0x5937376eU, 0x5937376eU, 0x5937376eU, 0x5937376eU, 0x5937376eU, 0x5937376eU, 0x5937376eU, 0x5937376eU, 0x5937376eU, 0x5937376eU, + 0xb76d6ddaU, 0xb76d6ddaU, 0xb76d6ddaU, 0xb76d6ddaU, 0xb76d6ddaU, 0xb76d6ddaU, 0xb76d6ddaU, 0xb76d6ddaU, 0xb76d6ddaU, 0xb76d6ddaU, 0xb76d6ddaU, 0xb76d6ddaU, 0xb76d6ddaU, 0xb76d6ddaU, 0xb76d6ddaU, 0xb76d6ddaU, 0xb76d6ddaU, 0xb76d6ddaU, 0xb76d6ddaU, 0xb76d6ddaU, 0xb76d6ddaU, 0xb76d6ddaU, 0xb76d6ddaU, 0xb76d6ddaU, 0xb76d6ddaU, 0xb76d6ddaU, 0xb76d6ddaU, 0xb76d6ddaU, 0xb76d6ddaU, 0xb76d6ddaU, 0xb76d6ddaU, 0xb76d6ddaU, + 0x8c8d8d01U, 0x8c8d8d01U, 0x8c8d8d01U, 0x8c8d8d01U, 0x8c8d8d01U, 0x8c8d8d01U, 0x8c8d8d01U, 0x8c8d8d01U, 0x8c8d8d01U, 0x8c8d8d01U, 0x8c8d8d01U, 0x8c8d8d01U, 0x8c8d8d01U, 0x8c8d8d01U, 0x8c8d8d01U, 0x8c8d8d01U, 0x8c8d8d01U, 0x8c8d8d01U, 0x8c8d8d01U, 0x8c8d8d01U, 0x8c8d8d01U, 0x8c8d8d01U, 0x8c8d8d01U, 0x8c8d8d01U, 0x8c8d8d01U, 0x8c8d8d01U, 0x8c8d8d01U, 0x8c8d8d01U, 0x8c8d8d01U, 0x8c8d8d01U, 0x8c8d8d01U, 0x8c8d8d01U, + 0x64d5d5b1U, 0x64d5d5b1U, 0x64d5d5b1U, 0x64d5d5b1U, 0x64d5d5b1U, 0x64d5d5b1U, 0x64d5d5b1U, 0x64d5d5b1U, 0x64d5d5b1U, 0x64d5d5b1U, 0x64d5d5b1U, 0x64d5d5b1U, 0x64d5d5b1U, 0x64d5d5b1U, 0x64d5d5b1U, 0x64d5d5b1U, 0x64d5d5b1U, 0x64d5d5b1U, 0x64d5d5b1U, 0x64d5d5b1U, 0x64d5d5b1U, 0x64d5d5b1U, 0x64d5d5b1U, 0x64d5d5b1U, 0x64d5d5b1U, 0x64d5d5b1U, 0x64d5d5b1U, 0x64d5d5b1U, 0x64d5d5b1U, 0x64d5d5b1U, 0x64d5d5b1U, 0x64d5d5b1U, + 0xd24e4e9cU, 0xd24e4e9cU, 0xd24e4e9cU, 0xd24e4e9cU, 0xd24e4e9cU, 0xd24e4e9cU, 0xd24e4e9cU, 0xd24e4e9cU, 0xd24e4e9cU, 0xd24e4e9cU, 0xd24e4e9cU, 0xd24e4e9cU, 0xd24e4e9cU, 0xd24e4e9cU, 0xd24e4e9cU, 0xd24e4e9cU, 0xd24e4e9cU, 0xd24e4e9cU, 0xd24e4e9cU, 0xd24e4e9cU, 0xd24e4e9cU, 0xd24e4e9cU, 0xd24e4e9cU, 0xd24e4e9cU, 0xd24e4e9cU, 0xd24e4e9cU, 0xd24e4e9cU, 0xd24e4e9cU, 0xd24e4e9cU, 0xd24e4e9cU, 0xd24e4e9cU, 0xd24e4e9cU, + 0xe0a9a949U, 0xe0a9a949U, 0xe0a9a949U, 0xe0a9a949U, 0xe0a9a949U, 0xe0a9a949U, 0xe0a9a949U, 0xe0a9a949U, 0xe0a9a949U, 0xe0a9a949U, 0xe0a9a949U, 0xe0a9a949U, 0xe0a9a949U, 0xe0a9a949U, 0xe0a9a949U, 0xe0a9a949U, 0xe0a9a949U, 0xe0a9a949U, 0xe0a9a949U, 0xe0a9a949U, 0xe0a9a949U, 0xe0a9a949U, 0xe0a9a949U, 0xe0a9a949U, 0xe0a9a949U, 0xe0a9a949U, 0xe0a9a949U, 0xe0a9a949U, 0xe0a9a949U, 0xe0a9a949U, 0xe0a9a949U, 0xe0a9a949U, + 0xb46c6cd8U, 0xb46c6cd8U, 0xb46c6cd8U, 0xb46c6cd8U, 0xb46c6cd8U, 0xb46c6cd8U, 0xb46c6cd8U, 0xb46c6cd8U, 0xb46c6cd8U, 0xb46c6cd8U, 0xb46c6cd8U, 0xb46c6cd8U, 0xb46c6cd8U, 0xb46c6cd8U, 0xb46c6cd8U, 0xb46c6cd8U, 0xb46c6cd8U, 0xb46c6cd8U, 0xb46c6cd8U, 0xb46c6cd8U, 0xb46c6cd8U, 0xb46c6cd8U, 0xb46c6cd8U, 0xb46c6cd8U, 0xb46c6cd8U, 0xb46c6cd8U, 0xb46c6cd8U, 0xb46c6cd8U, 0xb46c6cd8U, 0xb46c6cd8U, 0xb46c6cd8U, 0xb46c6cd8U, + 0xfa5656acU, 0xfa5656acU, 0xfa5656acU, 0xfa5656acU, 0xfa5656acU, 0xfa5656acU, 0xfa5656acU, 0xfa5656acU, 0xfa5656acU, 0xfa5656acU, 0xfa5656acU, 0xfa5656acU, 0xfa5656acU, 0xfa5656acU, 0xfa5656acU, 0xfa5656acU, 0xfa5656acU, 0xfa5656acU, 0xfa5656acU, 0xfa5656acU, 0xfa5656acU, 0xfa5656acU, 0xfa5656acU, 0xfa5656acU, 0xfa5656acU, 0xfa5656acU, 0xfa5656acU, 0xfa5656acU, 0xfa5656acU, 0xfa5656acU, 0xfa5656acU, 0xfa5656acU, + 0x7f4f4f3U, 0x7f4f4f3U, 0x7f4f4f3U, 0x7f4f4f3U, 0x7f4f4f3U, 0x7f4f4f3U, 0x7f4f4f3U, 0x7f4f4f3U, 0x7f4f4f3U, 0x7f4f4f3U, 0x7f4f4f3U, 0x7f4f4f3U, 0x7f4f4f3U, 0x7f4f4f3U, 0x7f4f4f3U, 0x7f4f4f3U, 0x7f4f4f3U, 0x7f4f4f3U, 0x7f4f4f3U, 0x7f4f4f3U, 0x7f4f4f3U, 0x7f4f4f3U, 0x7f4f4f3U, 0x7f4f4f3U, 0x7f4f4f3U, 0x7f4f4f3U, 0x7f4f4f3U, 0x7f4f4f3U, 0x7f4f4f3U, 0x7f4f4f3U, 0x7f4f4f3U, 0x7f4f4f3U, + 0x25eaeacfU, 0x25eaeacfU, 0x25eaeacfU, 0x25eaeacfU, 0x25eaeacfU, 0x25eaeacfU, 0x25eaeacfU, 0x25eaeacfU, 0x25eaeacfU, 0x25eaeacfU, 0x25eaeacfU, 0x25eaeacfU, 0x25eaeacfU, 0x25eaeacfU, 0x25eaeacfU, 0x25eaeacfU, 0x25eaeacfU, 0x25eaeacfU, 0x25eaeacfU, 0x25eaeacfU, 0x25eaeacfU, 0x25eaeacfU, 0x25eaeacfU, 0x25eaeacfU, 0x25eaeacfU, 0x25eaeacfU, 0x25eaeacfU, 0x25eaeacfU, 0x25eaeacfU, 0x25eaeacfU, 0x25eaeacfU, 0x25eaeacfU, + 0xaf6565caU, 0xaf6565caU, 0xaf6565caU, 0xaf6565caU, 0xaf6565caU, 0xaf6565caU, 0xaf6565caU, 0xaf6565caU, 0xaf6565caU, 0xaf6565caU, 0xaf6565caU, 0xaf6565caU, 0xaf6565caU, 0xaf6565caU, 0xaf6565caU, 0xaf6565caU, 0xaf6565caU, 0xaf6565caU, 0xaf6565caU, 0xaf6565caU, 0xaf6565caU, 0xaf6565caU, 0xaf6565caU, 0xaf6565caU, 0xaf6565caU, 0xaf6565caU, 0xaf6565caU, 0xaf6565caU, 0xaf6565caU, 0xaf6565caU, 0xaf6565caU, 0xaf6565caU, + 0x8e7a7af4U, 0x8e7a7af4U, 0x8e7a7af4U, 0x8e7a7af4U, 0x8e7a7af4U, 0x8e7a7af4U, 0x8e7a7af4U, 0x8e7a7af4U, 0x8e7a7af4U, 0x8e7a7af4U, 0x8e7a7af4U, 0x8e7a7af4U, 0x8e7a7af4U, 0x8e7a7af4U, 0x8e7a7af4U, 0x8e7a7af4U, 0x8e7a7af4U, 0x8e7a7af4U, 0x8e7a7af4U, 0x8e7a7af4U, 0x8e7a7af4U, 0x8e7a7af4U, 0x8e7a7af4U, 0x8e7a7af4U, 0x8e7a7af4U, 0x8e7a7af4U, 0x8e7a7af4U, 0x8e7a7af4U, 0x8e7a7af4U, 0x8e7a7af4U, 0x8e7a7af4U, 0x8e7a7af4U, + 0xe9aeae47U, 0xe9aeae47U, 0xe9aeae47U, 0xe9aeae47U, 0xe9aeae47U, 0xe9aeae47U, 0xe9aeae47U, 0xe9aeae47U, 0xe9aeae47U, 0xe9aeae47U, 0xe9aeae47U, 0xe9aeae47U, 0xe9aeae47U, 0xe9aeae47U, 0xe9aeae47U, 0xe9aeae47U, 0xe9aeae47U, 0xe9aeae47U, 0xe9aeae47U, 0xe9aeae47U, 0xe9aeae47U, 0xe9aeae47U, 0xe9aeae47U, 0xe9aeae47U, 0xe9aeae47U, 0xe9aeae47U, 0xe9aeae47U, 0xe9aeae47U, 0xe9aeae47U, 0xe9aeae47U, 0xe9aeae47U, 0xe9aeae47U, + 0x18080810U, 0x18080810U, 0x18080810U, 0x18080810U, 0x18080810U, 0x18080810U, 0x18080810U, 0x18080810U, 0x18080810U, 0x18080810U, 0x18080810U, 0x18080810U, 0x18080810U, 0x18080810U, 0x18080810U, 0x18080810U, 0x18080810U, 0x18080810U, 0x18080810U, 0x18080810U, 0x18080810U, 0x18080810U, 0x18080810U, 0x18080810U, 0x18080810U, 0x18080810U, 0x18080810U, 0x18080810U, 0x18080810U, 0x18080810U, 0x18080810U, 0x18080810U, + 0xd5baba6fU, 0xd5baba6fU, 0xd5baba6fU, 0xd5baba6fU, 0xd5baba6fU, 0xd5baba6fU, 0xd5baba6fU, 0xd5baba6fU, 0xd5baba6fU, 0xd5baba6fU, 0xd5baba6fU, 0xd5baba6fU, 0xd5baba6fU, 0xd5baba6fU, 0xd5baba6fU, 0xd5baba6fU, 0xd5baba6fU, 0xd5baba6fU, 0xd5baba6fU, 0xd5baba6fU, 0xd5baba6fU, 0xd5baba6fU, 0xd5baba6fU, 0xd5baba6fU, 0xd5baba6fU, 0xd5baba6fU, 0xd5baba6fU, 0xd5baba6fU, 0xd5baba6fU, 0xd5baba6fU, 0xd5baba6fU, 0xd5baba6fU, + 0x887878f0U, 0x887878f0U, 0x887878f0U, 0x887878f0U, 0x887878f0U, 0x887878f0U, 0x887878f0U, 0x887878f0U, 0x887878f0U, 0x887878f0U, 0x887878f0U, 0x887878f0U, 0x887878f0U, 0x887878f0U, 0x887878f0U, 0x887878f0U, 0x887878f0U, 0x887878f0U, 0x887878f0U, 0x887878f0U, 0x887878f0U, 0x887878f0U, 0x887878f0U, 0x887878f0U, 0x887878f0U, 0x887878f0U, 0x887878f0U, 0x887878f0U, 0x887878f0U, 0x887878f0U, 0x887878f0U, 0x887878f0U, + 0x6f25254aU, 0x6f25254aU, 0x6f25254aU, 0x6f25254aU, 0x6f25254aU, 0x6f25254aU, 0x6f25254aU, 0x6f25254aU, 0x6f25254aU, 0x6f25254aU, 0x6f25254aU, 0x6f25254aU, 0x6f25254aU, 0x6f25254aU, 0x6f25254aU, 0x6f25254aU, 0x6f25254aU, 0x6f25254aU, 0x6f25254aU, 0x6f25254aU, 0x6f25254aU, 0x6f25254aU, 0x6f25254aU, 0x6f25254aU, 0x6f25254aU, 0x6f25254aU, 0x6f25254aU, 0x6f25254aU, 0x6f25254aU, 0x6f25254aU, 0x6f25254aU, 0x6f25254aU, + 0x722e2e5cU, 0x722e2e5cU, 0x722e2e5cU, 0x722e2e5cU, 0x722e2e5cU, 0x722e2e5cU, 0x722e2e5cU, 0x722e2e5cU, 0x722e2e5cU, 0x722e2e5cU, 0x722e2e5cU, 0x722e2e5cU, 0x722e2e5cU, 0x722e2e5cU, 0x722e2e5cU, 0x722e2e5cU, 0x722e2e5cU, 0x722e2e5cU, 0x722e2e5cU, 0x722e2e5cU, 0x722e2e5cU, 0x722e2e5cU, 0x722e2e5cU, 0x722e2e5cU, 0x722e2e5cU, 0x722e2e5cU, 0x722e2e5cU, 0x722e2e5cU, 0x722e2e5cU, 0x722e2e5cU, 0x722e2e5cU, 0x722e2e5cU, + 0x241c1c38U, 0x241c1c38U, 0x241c1c38U, 0x241c1c38U, 0x241c1c38U, 0x241c1c38U, 0x241c1c38U, 0x241c1c38U, 0x241c1c38U, 0x241c1c38U, 0x241c1c38U, 0x241c1c38U, 0x241c1c38U, 0x241c1c38U, 0x241c1c38U, 0x241c1c38U, 0x241c1c38U, 0x241c1c38U, 0x241c1c38U, 0x241c1c38U, 0x241c1c38U, 0x241c1c38U, 0x241c1c38U, 0x241c1c38U, 0x241c1c38U, 0x241c1c38U, 0x241c1c38U, 0x241c1c38U, 0x241c1c38U, 0x241c1c38U, 0x241c1c38U, 0x241c1c38U, + 0xf1a6a657U, 0xf1a6a657U, 0xf1a6a657U, 0xf1a6a657U, 0xf1a6a657U, 0xf1a6a657U, 0xf1a6a657U, 0xf1a6a657U, 0xf1a6a657U, 0xf1a6a657U, 0xf1a6a657U, 0xf1a6a657U, 0xf1a6a657U, 0xf1a6a657U, 0xf1a6a657U, 0xf1a6a657U, 0xf1a6a657U, 0xf1a6a657U, 0xf1a6a657U, 0xf1a6a657U, 0xf1a6a657U, 0xf1a6a657U, 0xf1a6a657U, 0xf1a6a657U, 0xf1a6a657U, 0xf1a6a657U, 0xf1a6a657U, 0xf1a6a657U, 0xf1a6a657U, 0xf1a6a657U, 0xf1a6a657U, 0xf1a6a657U, + 0xc7b4b473U, 0xc7b4b473U, 0xc7b4b473U, 0xc7b4b473U, 0xc7b4b473U, 0xc7b4b473U, 0xc7b4b473U, 0xc7b4b473U, 0xc7b4b473U, 0xc7b4b473U, 0xc7b4b473U, 0xc7b4b473U, 0xc7b4b473U, 0xc7b4b473U, 0xc7b4b473U, 0xc7b4b473U, 0xc7b4b473U, 0xc7b4b473U, 0xc7b4b473U, 0xc7b4b473U, 0xc7b4b473U, 0xc7b4b473U, 0xc7b4b473U, 0xc7b4b473U, 0xc7b4b473U, 0xc7b4b473U, 0xc7b4b473U, 0xc7b4b473U, 0xc7b4b473U, 0xc7b4b473U, 0xc7b4b473U, 0xc7b4b473U, + 0x51c6c697U, 0x51c6c697U, 0x51c6c697U, 0x51c6c697U, 0x51c6c697U, 0x51c6c697U, 0x51c6c697U, 0x51c6c697U, 0x51c6c697U, 0x51c6c697U, 0x51c6c697U, 0x51c6c697U, 0x51c6c697U, 0x51c6c697U, 0x51c6c697U, 0x51c6c697U, 0x51c6c697U, 0x51c6c697U, 0x51c6c697U, 0x51c6c697U, 0x51c6c697U, 0x51c6c697U, 0x51c6c697U, 0x51c6c697U, 0x51c6c697U, 0x51c6c697U, 0x51c6c697U, 0x51c6c697U, 0x51c6c697U, 0x51c6c697U, 0x51c6c697U, 0x51c6c697U, + 0x23e8e8cbU, 0x23e8e8cbU, 0x23e8e8cbU, 0x23e8e8cbU, 0x23e8e8cbU, 0x23e8e8cbU, 0x23e8e8cbU, 0x23e8e8cbU, 0x23e8e8cbU, 0x23e8e8cbU, 0x23e8e8cbU, 0x23e8e8cbU, 0x23e8e8cbU, 0x23e8e8cbU, 0x23e8e8cbU, 0x23e8e8cbU, 0x23e8e8cbU, 0x23e8e8cbU, 0x23e8e8cbU, 0x23e8e8cbU, 0x23e8e8cbU, 0x23e8e8cbU, 0x23e8e8cbU, 0x23e8e8cbU, 0x23e8e8cbU, 0x23e8e8cbU, 0x23e8e8cbU, 0x23e8e8cbU, 0x23e8e8cbU, 0x23e8e8cbU, 0x23e8e8cbU, 0x23e8e8cbU, + 0x7cdddda1U, 0x7cdddda1U, 0x7cdddda1U, 0x7cdddda1U, 0x7cdddda1U, 0x7cdddda1U, 0x7cdddda1U, 0x7cdddda1U, 0x7cdddda1U, 0x7cdddda1U, 0x7cdddda1U, 0x7cdddda1U, 0x7cdddda1U, 0x7cdddda1U, 0x7cdddda1U, 0x7cdddda1U, 0x7cdddda1U, 0x7cdddda1U, 0x7cdddda1U, 0x7cdddda1U, 0x7cdddda1U, 0x7cdddda1U, 0x7cdddda1U, 0x7cdddda1U, 0x7cdddda1U, 0x7cdddda1U, 0x7cdddda1U, 0x7cdddda1U, 0x7cdddda1U, 0x7cdddda1U, 0x7cdddda1U, 0x7cdddda1U, + 0x9c7474e8U, 0x9c7474e8U, 0x9c7474e8U, 0x9c7474e8U, 0x9c7474e8U, 0x9c7474e8U, 0x9c7474e8U, 0x9c7474e8U, 0x9c7474e8U, 0x9c7474e8U, 0x9c7474e8U, 0x9c7474e8U, 0x9c7474e8U, 0x9c7474e8U, 0x9c7474e8U, 0x9c7474e8U, 0x9c7474e8U, 0x9c7474e8U, 0x9c7474e8U, 0x9c7474e8U, 0x9c7474e8U, 0x9c7474e8U, 0x9c7474e8U, 0x9c7474e8U, 0x9c7474e8U, 0x9c7474e8U, 0x9c7474e8U, 0x9c7474e8U, 0x9c7474e8U, 0x9c7474e8U, 0x9c7474e8U, 0x9c7474e8U, + 0x211f1f3eU, 0x211f1f3eU, 0x211f1f3eU, 0x211f1f3eU, 0x211f1f3eU, 0x211f1f3eU, 0x211f1f3eU, 0x211f1f3eU, 0x211f1f3eU, 0x211f1f3eU, 0x211f1f3eU, 0x211f1f3eU, 0x211f1f3eU, 0x211f1f3eU, 0x211f1f3eU, 0x211f1f3eU, 0x211f1f3eU, 0x211f1f3eU, 0x211f1f3eU, 0x211f1f3eU, 0x211f1f3eU, 0x211f1f3eU, 0x211f1f3eU, 0x211f1f3eU, 0x211f1f3eU, 0x211f1f3eU, 0x211f1f3eU, 0x211f1f3eU, 0x211f1f3eU, 0x211f1f3eU, 0x211f1f3eU, 0x211f1f3eU, + 0xdd4b4b96U, 0xdd4b4b96U, 0xdd4b4b96U, 0xdd4b4b96U, 0xdd4b4b96U, 0xdd4b4b96U, 0xdd4b4b96U, 0xdd4b4b96U, 0xdd4b4b96U, 0xdd4b4b96U, 0xdd4b4b96U, 0xdd4b4b96U, 0xdd4b4b96U, 0xdd4b4b96U, 0xdd4b4b96U, 0xdd4b4b96U, 0xdd4b4b96U, 0xdd4b4b96U, 0xdd4b4b96U, 0xdd4b4b96U, 0xdd4b4b96U, 0xdd4b4b96U, 0xdd4b4b96U, 0xdd4b4b96U, 0xdd4b4b96U, 0xdd4b4b96U, 0xdd4b4b96U, 0xdd4b4b96U, 0xdd4b4b96U, 0xdd4b4b96U, 0xdd4b4b96U, 0xdd4b4b96U, + 0xdcbdbd61U, 0xdcbdbd61U, 0xdcbdbd61U, 0xdcbdbd61U, 0xdcbdbd61U, 0xdcbdbd61U, 0xdcbdbd61U, 0xdcbdbd61U, 0xdcbdbd61U, 0xdcbdbd61U, 0xdcbdbd61U, 0xdcbdbd61U, 0xdcbdbd61U, 0xdcbdbd61U, 0xdcbdbd61U, 0xdcbdbd61U, 0xdcbdbd61U, 0xdcbdbd61U, 0xdcbdbd61U, 0xdcbdbd61U, 0xdcbdbd61U, 0xdcbdbd61U, 0xdcbdbd61U, 0xdcbdbd61U, 0xdcbdbd61U, 0xdcbdbd61U, 0xdcbdbd61U, 0xdcbdbd61U, 0xdcbdbd61U, 0xdcbdbd61U, 0xdcbdbd61U, 0xdcbdbd61U, + 0x868b8b0dU, 0x868b8b0dU, 0x868b8b0dU, 0x868b8b0dU, 0x868b8b0dU, 0x868b8b0dU, 0x868b8b0dU, 0x868b8b0dU, 0x868b8b0dU, 0x868b8b0dU, 0x868b8b0dU, 0x868b8b0dU, 0x868b8b0dU, 0x868b8b0dU, 0x868b8b0dU, 0x868b8b0dU, 0x868b8b0dU, 0x868b8b0dU, 0x868b8b0dU, 0x868b8b0dU, 0x868b8b0dU, 0x868b8b0dU, 0x868b8b0dU, 0x868b8b0dU, 0x868b8b0dU, 0x868b8b0dU, 0x868b8b0dU, 0x868b8b0dU, 0x868b8b0dU, 0x868b8b0dU, 0x868b8b0dU, 0x868b8b0dU, + 0x858a8a0fU, 0x858a8a0fU, 0x858a8a0fU, 0x858a8a0fU, 0x858a8a0fU, 0x858a8a0fU, 0x858a8a0fU, 0x858a8a0fU, 0x858a8a0fU, 0x858a8a0fU, 0x858a8a0fU, 0x858a8a0fU, 0x858a8a0fU, 0x858a8a0fU, 0x858a8a0fU, 0x858a8a0fU, 0x858a8a0fU, 0x858a8a0fU, 0x858a8a0fU, 0x858a8a0fU, 0x858a8a0fU, 0x858a8a0fU, 0x858a8a0fU, 0x858a8a0fU, 0x858a8a0fU, 0x858a8a0fU, 0x858a8a0fU, 0x858a8a0fU, 0x858a8a0fU, 0x858a8a0fU, 0x858a8a0fU, 0x858a8a0fU, + 0x907070e0U, 0x907070e0U, 0x907070e0U, 0x907070e0U, 0x907070e0U, 0x907070e0U, 0x907070e0U, 0x907070e0U, 0x907070e0U, 0x907070e0U, 0x907070e0U, 0x907070e0U, 0x907070e0U, 0x907070e0U, 0x907070e0U, 0x907070e0U, 0x907070e0U, 0x907070e0U, 0x907070e0U, 0x907070e0U, 0x907070e0U, 0x907070e0U, 0x907070e0U, 0x907070e0U, 0x907070e0U, 0x907070e0U, 0x907070e0U, 0x907070e0U, 0x907070e0U, 0x907070e0U, 0x907070e0U, 0x907070e0U, + 0x423e3e7cU, 0x423e3e7cU, 0x423e3e7cU, 0x423e3e7cU, 0x423e3e7cU, 0x423e3e7cU, 0x423e3e7cU, 0x423e3e7cU, 0x423e3e7cU, 0x423e3e7cU, 0x423e3e7cU, 0x423e3e7cU, 0x423e3e7cU, 0x423e3e7cU, 0x423e3e7cU, 0x423e3e7cU, 0x423e3e7cU, 0x423e3e7cU, 0x423e3e7cU, 0x423e3e7cU, 0x423e3e7cU, 0x423e3e7cU, 0x423e3e7cU, 0x423e3e7cU, 0x423e3e7cU, 0x423e3e7cU, 0x423e3e7cU, 0x423e3e7cU, 0x423e3e7cU, 0x423e3e7cU, 0x423e3e7cU, 0x423e3e7cU, + 0xc4b5b571U, 0xc4b5b571U, 0xc4b5b571U, 0xc4b5b571U, 0xc4b5b571U, 0xc4b5b571U, 0xc4b5b571U, 0xc4b5b571U, 0xc4b5b571U, 0xc4b5b571U, 0xc4b5b571U, 0xc4b5b571U, 0xc4b5b571U, 0xc4b5b571U, 0xc4b5b571U, 0xc4b5b571U, 0xc4b5b571U, 0xc4b5b571U, 0xc4b5b571U, 0xc4b5b571U, 0xc4b5b571U, 0xc4b5b571U, 0xc4b5b571U, 0xc4b5b571U, 0xc4b5b571U, 0xc4b5b571U, 0xc4b5b571U, 0xc4b5b571U, 0xc4b5b571U, 0xc4b5b571U, 0xc4b5b571U, 0xc4b5b571U, + 0xaa6666ccU, 0xaa6666ccU, 0xaa6666ccU, 0xaa6666ccU, 0xaa6666ccU, 0xaa6666ccU, 0xaa6666ccU, 0xaa6666ccU, 0xaa6666ccU, 0xaa6666ccU, 0xaa6666ccU, 0xaa6666ccU, 0xaa6666ccU, 0xaa6666ccU, 0xaa6666ccU, 0xaa6666ccU, 0xaa6666ccU, 0xaa6666ccU, 0xaa6666ccU, 0xaa6666ccU, 0xaa6666ccU, 0xaa6666ccU, 0xaa6666ccU, 0xaa6666ccU, 0xaa6666ccU, 0xaa6666ccU, 0xaa6666ccU, 0xaa6666ccU, 0xaa6666ccU, 0xaa6666ccU, 0xaa6666ccU, 0xaa6666ccU, + 0xd8484890U, 0xd8484890U, 0xd8484890U, 0xd8484890U, 0xd8484890U, 0xd8484890U, 0xd8484890U, 0xd8484890U, 0xd8484890U, 0xd8484890U, 0xd8484890U, 0xd8484890U, 0xd8484890U, 0xd8484890U, 0xd8484890U, 0xd8484890U, 0xd8484890U, 0xd8484890U, 0xd8484890U, 0xd8484890U, 0xd8484890U, 0xd8484890U, 0xd8484890U, 0xd8484890U, 0xd8484890U, 0xd8484890U, 0xd8484890U, 0xd8484890U, 0xd8484890U, 0xd8484890U, 0xd8484890U, 0xd8484890U, + 0x5030306U, 0x5030306U, 0x5030306U, 0x5030306U, 0x5030306U, 0x5030306U, 0x5030306U, 0x5030306U, 0x5030306U, 0x5030306U, 0x5030306U, 0x5030306U, 0x5030306U, 0x5030306U, 0x5030306U, 0x5030306U, 0x5030306U, 0x5030306U, 0x5030306U, 0x5030306U, 0x5030306U, 0x5030306U, 0x5030306U, 0x5030306U, 0x5030306U, 0x5030306U, 0x5030306U, 0x5030306U, 0x5030306U, 0x5030306U, 0x5030306U, 0x5030306U, + 0x1f6f6f7U, 0x1f6f6f7U, 0x1f6f6f7U, 0x1f6f6f7U, 0x1f6f6f7U, 0x1f6f6f7U, 0x1f6f6f7U, 0x1f6f6f7U, 0x1f6f6f7U, 0x1f6f6f7U, 0x1f6f6f7U, 0x1f6f6f7U, 0x1f6f6f7U, 0x1f6f6f7U, 0x1f6f6f7U, 0x1f6f6f7U, 0x1f6f6f7U, 0x1f6f6f7U, 0x1f6f6f7U, 0x1f6f6f7U, 0x1f6f6f7U, 0x1f6f6f7U, 0x1f6f6f7U, 0x1f6f6f7U, 0x1f6f6f7U, 0x1f6f6f7U, 0x1f6f6f7U, 0x1f6f6f7U, 0x1f6f6f7U, 0x1f6f6f7U, 0x1f6f6f7U, 0x1f6f6f7U, + 0x120e0e1cU, 0x120e0e1cU, 0x120e0e1cU, 0x120e0e1cU, 0x120e0e1cU, 0x120e0e1cU, 0x120e0e1cU, 0x120e0e1cU, 0x120e0e1cU, 0x120e0e1cU, 0x120e0e1cU, 0x120e0e1cU, 0x120e0e1cU, 0x120e0e1cU, 0x120e0e1cU, 0x120e0e1cU, 0x120e0e1cU, 0x120e0e1cU, 0x120e0e1cU, 0x120e0e1cU, 0x120e0e1cU, 0x120e0e1cU, 0x120e0e1cU, 0x120e0e1cU, 0x120e0e1cU, 0x120e0e1cU, 0x120e0e1cU, 0x120e0e1cU, 0x120e0e1cU, 0x120e0e1cU, 0x120e0e1cU, 0x120e0e1cU, + 0xa36161c2U, 0xa36161c2U, 0xa36161c2U, 0xa36161c2U, 0xa36161c2U, 0xa36161c2U, 0xa36161c2U, 0xa36161c2U, 0xa36161c2U, 0xa36161c2U, 0xa36161c2U, 0xa36161c2U, 0xa36161c2U, 0xa36161c2U, 0xa36161c2U, 0xa36161c2U, 0xa36161c2U, 0xa36161c2U, 0xa36161c2U, 0xa36161c2U, 0xa36161c2U, 0xa36161c2U, 0xa36161c2U, 0xa36161c2U, 0xa36161c2U, 0xa36161c2U, 0xa36161c2U, 0xa36161c2U, 0xa36161c2U, 0xa36161c2U, 0xa36161c2U, 0xa36161c2U, + 0x5f35356aU, 0x5f35356aU, 0x5f35356aU, 0x5f35356aU, 0x5f35356aU, 0x5f35356aU, 0x5f35356aU, 0x5f35356aU, 0x5f35356aU, 0x5f35356aU, 0x5f35356aU, 0x5f35356aU, 0x5f35356aU, 0x5f35356aU, 0x5f35356aU, 0x5f35356aU, 0x5f35356aU, 0x5f35356aU, 0x5f35356aU, 0x5f35356aU, 0x5f35356aU, 0x5f35356aU, 0x5f35356aU, 0x5f35356aU, 0x5f35356aU, 0x5f35356aU, 0x5f35356aU, 0x5f35356aU, 0x5f35356aU, 0x5f35356aU, 0x5f35356aU, 0x5f35356aU, + 0xf95757aeU, 0xf95757aeU, 0xf95757aeU, 0xf95757aeU, 0xf95757aeU, 0xf95757aeU, 0xf95757aeU, 0xf95757aeU, 0xf95757aeU, 0xf95757aeU, 0xf95757aeU, 0xf95757aeU, 0xf95757aeU, 0xf95757aeU, 0xf95757aeU, 0xf95757aeU, 0xf95757aeU, 0xf95757aeU, 0xf95757aeU, 0xf95757aeU, 0xf95757aeU, 0xf95757aeU, 0xf95757aeU, 0xf95757aeU, 0xf95757aeU, 0xf95757aeU, 0xf95757aeU, 0xf95757aeU, 0xf95757aeU, 0xf95757aeU, 0xf95757aeU, 0xf95757aeU, + 0xd0b9b969U, 0xd0b9b969U, 0xd0b9b969U, 0xd0b9b969U, 0xd0b9b969U, 0xd0b9b969U, 0xd0b9b969U, 0xd0b9b969U, 0xd0b9b969U, 0xd0b9b969U, 0xd0b9b969U, 0xd0b9b969U, 0xd0b9b969U, 0xd0b9b969U, 0xd0b9b969U, 0xd0b9b969U, 0xd0b9b969U, 0xd0b9b969U, 0xd0b9b969U, 0xd0b9b969U, 0xd0b9b969U, 0xd0b9b969U, 0xd0b9b969U, 0xd0b9b969U, 0xd0b9b969U, 0xd0b9b969U, 0xd0b9b969U, 0xd0b9b969U, 0xd0b9b969U, 0xd0b9b969U, 0xd0b9b969U, 0xd0b9b969U, + 0x91868617U, 0x91868617U, 0x91868617U, 0x91868617U, 0x91868617U, 0x91868617U, 0x91868617U, 0x91868617U, 0x91868617U, 0x91868617U, 0x91868617U, 0x91868617U, 0x91868617U, 0x91868617U, 0x91868617U, 0x91868617U, 0x91868617U, 0x91868617U, 0x91868617U, 0x91868617U, 0x91868617U, 0x91868617U, 0x91868617U, 0x91868617U, 0x91868617U, 0x91868617U, 0x91868617U, 0x91868617U, 0x91868617U, 0x91868617U, 0x91868617U, 0x91868617U, + 0x58c1c199U, 0x58c1c199U, 0x58c1c199U, 0x58c1c199U, 0x58c1c199U, 0x58c1c199U, 0x58c1c199U, 0x58c1c199U, 0x58c1c199U, 0x58c1c199U, 0x58c1c199U, 0x58c1c199U, 0x58c1c199U, 0x58c1c199U, 0x58c1c199U, 0x58c1c199U, 0x58c1c199U, 0x58c1c199U, 0x58c1c199U, 0x58c1c199U, 0x58c1c199U, 0x58c1c199U, 0x58c1c199U, 0x58c1c199U, 0x58c1c199U, 0x58c1c199U, 0x58c1c199U, 0x58c1c199U, 0x58c1c199U, 0x58c1c199U, 0x58c1c199U, 0x58c1c199U, + 0x271d1d3aU, 0x271d1d3aU, 0x271d1d3aU, 0x271d1d3aU, 0x271d1d3aU, 0x271d1d3aU, 0x271d1d3aU, 0x271d1d3aU, 0x271d1d3aU, 0x271d1d3aU, 0x271d1d3aU, 0x271d1d3aU, 0x271d1d3aU, 0x271d1d3aU, 0x271d1d3aU, 0x271d1d3aU, 0x271d1d3aU, 0x271d1d3aU, 0x271d1d3aU, 0x271d1d3aU, 0x271d1d3aU, 0x271d1d3aU, 0x271d1d3aU, 0x271d1d3aU, 0x271d1d3aU, 0x271d1d3aU, 0x271d1d3aU, 0x271d1d3aU, 0x271d1d3aU, 0x271d1d3aU, 0x271d1d3aU, 0x271d1d3aU, + 0xb99e9e27U, 0xb99e9e27U, 0xb99e9e27U, 0xb99e9e27U, 0xb99e9e27U, 0xb99e9e27U, 0xb99e9e27U, 0xb99e9e27U, 0xb99e9e27U, 0xb99e9e27U, 0xb99e9e27U, 0xb99e9e27U, 0xb99e9e27U, 0xb99e9e27U, 0xb99e9e27U, 0xb99e9e27U, 0xb99e9e27U, 0xb99e9e27U, 0xb99e9e27U, 0xb99e9e27U, 0xb99e9e27U, 0xb99e9e27U, 0xb99e9e27U, 0xb99e9e27U, 0xb99e9e27U, 0xb99e9e27U, 0xb99e9e27U, 0xb99e9e27U, 0xb99e9e27U, 0xb99e9e27U, 0xb99e9e27U, 0xb99e9e27U, + 0x38e1e1d9U, 0x38e1e1d9U, 0x38e1e1d9U, 0x38e1e1d9U, 0x38e1e1d9U, 0x38e1e1d9U, 0x38e1e1d9U, 0x38e1e1d9U, 0x38e1e1d9U, 0x38e1e1d9U, 0x38e1e1d9U, 0x38e1e1d9U, 0x38e1e1d9U, 0x38e1e1d9U, 0x38e1e1d9U, 0x38e1e1d9U, 0x38e1e1d9U, 0x38e1e1d9U, 0x38e1e1d9U, 0x38e1e1d9U, 0x38e1e1d9U, 0x38e1e1d9U, 0x38e1e1d9U, 0x38e1e1d9U, 0x38e1e1d9U, 0x38e1e1d9U, 0x38e1e1d9U, 0x38e1e1d9U, 0x38e1e1d9U, 0x38e1e1d9U, 0x38e1e1d9U, 0x38e1e1d9U, + 0x13f8f8ebU, 0x13f8f8ebU, 0x13f8f8ebU, 0x13f8f8ebU, 0x13f8f8ebU, 0x13f8f8ebU, 0x13f8f8ebU, 0x13f8f8ebU, 0x13f8f8ebU, 0x13f8f8ebU, 0x13f8f8ebU, 0x13f8f8ebU, 0x13f8f8ebU, 0x13f8f8ebU, 0x13f8f8ebU, 0x13f8f8ebU, 0x13f8f8ebU, 0x13f8f8ebU, 0x13f8f8ebU, 0x13f8f8ebU, 0x13f8f8ebU, 0x13f8f8ebU, 0x13f8f8ebU, 0x13f8f8ebU, 0x13f8f8ebU, 0x13f8f8ebU, 0x13f8f8ebU, 0x13f8f8ebU, 0x13f8f8ebU, 0x13f8f8ebU, 0x13f8f8ebU, 0x13f8f8ebU, + 0xb398982bU, 0xb398982bU, 0xb398982bU, 0xb398982bU, 0xb398982bU, 0xb398982bU, 0xb398982bU, 0xb398982bU, 0xb398982bU, 0xb398982bU, 0xb398982bU, 0xb398982bU, 0xb398982bU, 0xb398982bU, 0xb398982bU, 0xb398982bU, 0xb398982bU, 0xb398982bU, 0xb398982bU, 0xb398982bU, 0xb398982bU, 0xb398982bU, 0xb398982bU, 0xb398982bU, 0xb398982bU, 0xb398982bU, 0xb398982bU, 0xb398982bU, 0xb398982bU, 0xb398982bU, 0xb398982bU, 0xb398982bU, + 0x33111122U, 0x33111122U, 0x33111122U, 0x33111122U, 0x33111122U, 0x33111122U, 0x33111122U, 0x33111122U, 0x33111122U, 0x33111122U, 0x33111122U, 0x33111122U, 0x33111122U, 0x33111122U, 0x33111122U, 0x33111122U, 0x33111122U, 0x33111122U, 0x33111122U, 0x33111122U, 0x33111122U, 0x33111122U, 0x33111122U, 0x33111122U, 0x33111122U, 0x33111122U, 0x33111122U, 0x33111122U, 0x33111122U, 0x33111122U, 0x33111122U, 0x33111122U, + 0xbb6969d2U, 0xbb6969d2U, 0xbb6969d2U, 0xbb6969d2U, 0xbb6969d2U, 0xbb6969d2U, 0xbb6969d2U, 0xbb6969d2U, 0xbb6969d2U, 0xbb6969d2U, 0xbb6969d2U, 0xbb6969d2U, 0xbb6969d2U, 0xbb6969d2U, 0xbb6969d2U, 0xbb6969d2U, 0xbb6969d2U, 0xbb6969d2U, 0xbb6969d2U, 0xbb6969d2U, 0xbb6969d2U, 0xbb6969d2U, 0xbb6969d2U, 0xbb6969d2U, 0xbb6969d2U, 0xbb6969d2U, 0xbb6969d2U, 0xbb6969d2U, 0xbb6969d2U, 0xbb6969d2U, 0xbb6969d2U, 0xbb6969d2U, + 0x70d9d9a9U, 0x70d9d9a9U, 0x70d9d9a9U, 0x70d9d9a9U, 0x70d9d9a9U, 0x70d9d9a9U, 0x70d9d9a9U, 0x70d9d9a9U, 0x70d9d9a9U, 0x70d9d9a9U, 0x70d9d9a9U, 0x70d9d9a9U, 0x70d9d9a9U, 0x70d9d9a9U, 0x70d9d9a9U, 0x70d9d9a9U, 0x70d9d9a9U, 0x70d9d9a9U, 0x70d9d9a9U, 0x70d9d9a9U, 0x70d9d9a9U, 0x70d9d9a9U, 0x70d9d9a9U, 0x70d9d9a9U, 0x70d9d9a9U, 0x70d9d9a9U, 0x70d9d9a9U, 0x70d9d9a9U, 0x70d9d9a9U, 0x70d9d9a9U, 0x70d9d9a9U, 0x70d9d9a9U, + 0x898e8e07U, 0x898e8e07U, 0x898e8e07U, 0x898e8e07U, 0x898e8e07U, 0x898e8e07U, 0x898e8e07U, 0x898e8e07U, 0x898e8e07U, 0x898e8e07U, 0x898e8e07U, 0x898e8e07U, 0x898e8e07U, 0x898e8e07U, 0x898e8e07U, 0x898e8e07U, 0x898e8e07U, 0x898e8e07U, 0x898e8e07U, 0x898e8e07U, 0x898e8e07U, 0x898e8e07U, 0x898e8e07U, 0x898e8e07U, 0x898e8e07U, 0x898e8e07U, 0x898e8e07U, 0x898e8e07U, 0x898e8e07U, 0x898e8e07U, 0x898e8e07U, 0x898e8e07U, + 0xa7949433U, 0xa7949433U, 0xa7949433U, 0xa7949433U, 0xa7949433U, 0xa7949433U, 0xa7949433U, 0xa7949433U, 0xa7949433U, 0xa7949433U, 0xa7949433U, 0xa7949433U, 0xa7949433U, 0xa7949433U, 0xa7949433U, 0xa7949433U, 0xa7949433U, 0xa7949433U, 0xa7949433U, 0xa7949433U, 0xa7949433U, 0xa7949433U, 0xa7949433U, 0xa7949433U, 0xa7949433U, 0xa7949433U, 0xa7949433U, 0xa7949433U, 0xa7949433U, 0xa7949433U, 0xa7949433U, 0xa7949433U, + 0xb69b9b2dU, 0xb69b9b2dU, 0xb69b9b2dU, 0xb69b9b2dU, 0xb69b9b2dU, 0xb69b9b2dU, 0xb69b9b2dU, 0xb69b9b2dU, 0xb69b9b2dU, 0xb69b9b2dU, 0xb69b9b2dU, 0xb69b9b2dU, 0xb69b9b2dU, 0xb69b9b2dU, 0xb69b9b2dU, 0xb69b9b2dU, 0xb69b9b2dU, 0xb69b9b2dU, 0xb69b9b2dU, 0xb69b9b2dU, 0xb69b9b2dU, 0xb69b9b2dU, 0xb69b9b2dU, 0xb69b9b2dU, 0xb69b9b2dU, 0xb69b9b2dU, 0xb69b9b2dU, 0xb69b9b2dU, 0xb69b9b2dU, 0xb69b9b2dU, 0xb69b9b2dU, 0xb69b9b2dU, + 0x221e1e3cU, 0x221e1e3cU, 0x221e1e3cU, 0x221e1e3cU, 0x221e1e3cU, 0x221e1e3cU, 0x221e1e3cU, 0x221e1e3cU, 0x221e1e3cU, 0x221e1e3cU, 0x221e1e3cU, 0x221e1e3cU, 0x221e1e3cU, 0x221e1e3cU, 0x221e1e3cU, 0x221e1e3cU, 0x221e1e3cU, 0x221e1e3cU, 0x221e1e3cU, 0x221e1e3cU, 0x221e1e3cU, 0x221e1e3cU, 0x221e1e3cU, 0x221e1e3cU, 0x221e1e3cU, 0x221e1e3cU, 0x221e1e3cU, 0x221e1e3cU, 0x221e1e3cU, 0x221e1e3cU, 0x221e1e3cU, 0x221e1e3cU, + 0x92878715U, 0x92878715U, 0x92878715U, 0x92878715U, 0x92878715U, 0x92878715U, 0x92878715U, 0x92878715U, 0x92878715U, 0x92878715U, 0x92878715U, 0x92878715U, 0x92878715U, 0x92878715U, 0x92878715U, 0x92878715U, 0x92878715U, 0x92878715U, 0x92878715U, 0x92878715U, 0x92878715U, 0x92878715U, 0x92878715U, 0x92878715U, 0x92878715U, 0x92878715U, 0x92878715U, 0x92878715U, 0x92878715U, 0x92878715U, 0x92878715U, 0x92878715U, + 0x20e9e9c9U, 0x20e9e9c9U, 0x20e9e9c9U, 0x20e9e9c9U, 0x20e9e9c9U, 0x20e9e9c9U, 0x20e9e9c9U, 0x20e9e9c9U, 0x20e9e9c9U, 0x20e9e9c9U, 0x20e9e9c9U, 0x20e9e9c9U, 0x20e9e9c9U, 0x20e9e9c9U, 0x20e9e9c9U, 0x20e9e9c9U, 0x20e9e9c9U, 0x20e9e9c9U, 0x20e9e9c9U, 0x20e9e9c9U, 0x20e9e9c9U, 0x20e9e9c9U, 0x20e9e9c9U, 0x20e9e9c9U, 0x20e9e9c9U, 0x20e9e9c9U, 0x20e9e9c9U, 0x20e9e9c9U, 0x20e9e9c9U, 0x20e9e9c9U, 0x20e9e9c9U, 0x20e9e9c9U, + 0x49cece87U, 0x49cece87U, 0x49cece87U, 0x49cece87U, 0x49cece87U, 0x49cece87U, 0x49cece87U, 0x49cece87U, 0x49cece87U, 0x49cece87U, 0x49cece87U, 0x49cece87U, 0x49cece87U, 0x49cece87U, 0x49cece87U, 0x49cece87U, 0x49cece87U, 0x49cece87U, 0x49cece87U, 0x49cece87U, 0x49cece87U, 0x49cece87U, 0x49cece87U, 0x49cece87U, 0x49cece87U, 0x49cece87U, 0x49cece87U, 0x49cece87U, 0x49cece87U, 0x49cece87U, 0x49cece87U, 0x49cece87U, + 0xff5555aaU, 0xff5555aaU, 0xff5555aaU, 0xff5555aaU, 0xff5555aaU, 0xff5555aaU, 0xff5555aaU, 0xff5555aaU, 0xff5555aaU, 0xff5555aaU, 0xff5555aaU, 0xff5555aaU, 0xff5555aaU, 0xff5555aaU, 0xff5555aaU, 0xff5555aaU, 0xff5555aaU, 0xff5555aaU, 0xff5555aaU, 0xff5555aaU, 0xff5555aaU, 0xff5555aaU, 0xff5555aaU, 0xff5555aaU, 0xff5555aaU, 0xff5555aaU, 0xff5555aaU, 0xff5555aaU, 0xff5555aaU, 0xff5555aaU, 0xff5555aaU, 0xff5555aaU, + 0x78282850U, 0x78282850U, 0x78282850U, 0x78282850U, 0x78282850U, 0x78282850U, 0x78282850U, 0x78282850U, 0x78282850U, 0x78282850U, 0x78282850U, 0x78282850U, 0x78282850U, 0x78282850U, 0x78282850U, 0x78282850U, 0x78282850U, 0x78282850U, 0x78282850U, 0x78282850U, 0x78282850U, 0x78282850U, 0x78282850U, 0x78282850U, 0x78282850U, 0x78282850U, 0x78282850U, 0x78282850U, 0x78282850U, 0x78282850U, 0x78282850U, 0x78282850U, + 0x7adfdfa5U, 0x7adfdfa5U, 0x7adfdfa5U, 0x7adfdfa5U, 0x7adfdfa5U, 0x7adfdfa5U, 0x7adfdfa5U, 0x7adfdfa5U, 0x7adfdfa5U, 0x7adfdfa5U, 0x7adfdfa5U, 0x7adfdfa5U, 0x7adfdfa5U, 0x7adfdfa5U, 0x7adfdfa5U, 0x7adfdfa5U, 0x7adfdfa5U, 0x7adfdfa5U, 0x7adfdfa5U, 0x7adfdfa5U, 0x7adfdfa5U, 0x7adfdfa5U, 0x7adfdfa5U, 0x7adfdfa5U, 0x7adfdfa5U, 0x7adfdfa5U, 0x7adfdfa5U, 0x7adfdfa5U, 0x7adfdfa5U, 0x7adfdfa5U, 0x7adfdfa5U, 0x7adfdfa5U, + 0x8f8c8c03U, 0x8f8c8c03U, 0x8f8c8c03U, 0x8f8c8c03U, 0x8f8c8c03U, 0x8f8c8c03U, 0x8f8c8c03U, 0x8f8c8c03U, 0x8f8c8c03U, 0x8f8c8c03U, 0x8f8c8c03U, 0x8f8c8c03U, 0x8f8c8c03U, 0x8f8c8c03U, 0x8f8c8c03U, 0x8f8c8c03U, 0x8f8c8c03U, 0x8f8c8c03U, 0x8f8c8c03U, 0x8f8c8c03U, 0x8f8c8c03U, 0x8f8c8c03U, 0x8f8c8c03U, 0x8f8c8c03U, 0x8f8c8c03U, 0x8f8c8c03U, 0x8f8c8c03U, 0x8f8c8c03U, 0x8f8c8c03U, 0x8f8c8c03U, 0x8f8c8c03U, 0x8f8c8c03U, + 0xf8a1a159U, 0xf8a1a159U, 0xf8a1a159U, 0xf8a1a159U, 0xf8a1a159U, 0xf8a1a159U, 0xf8a1a159U, 0xf8a1a159U, 0xf8a1a159U, 0xf8a1a159U, 0xf8a1a159U, 0xf8a1a159U, 0xf8a1a159U, 0xf8a1a159U, 0xf8a1a159U, 0xf8a1a159U, 0xf8a1a159U, 0xf8a1a159U, 0xf8a1a159U, 0xf8a1a159U, 0xf8a1a159U, 0xf8a1a159U, 0xf8a1a159U, 0xf8a1a159U, 0xf8a1a159U, 0xf8a1a159U, 0xf8a1a159U, 0xf8a1a159U, 0xf8a1a159U, 0xf8a1a159U, 0xf8a1a159U, 0xf8a1a159U, + 0x80898909U, 0x80898909U, 0x80898909U, 0x80898909U, 0x80898909U, 0x80898909U, 0x80898909U, 0x80898909U, 0x80898909U, 0x80898909U, 0x80898909U, 0x80898909U, 0x80898909U, 0x80898909U, 0x80898909U, 0x80898909U, 0x80898909U, 0x80898909U, 0x80898909U, 0x80898909U, 0x80898909U, 0x80898909U, 0x80898909U, 0x80898909U, 0x80898909U, 0x80898909U, 0x80898909U, 0x80898909U, 0x80898909U, 0x80898909U, 0x80898909U, 0x80898909U, + 0x170d0d1aU, 0x170d0d1aU, 0x170d0d1aU, 0x170d0d1aU, 0x170d0d1aU, 0x170d0d1aU, 0x170d0d1aU, 0x170d0d1aU, 0x170d0d1aU, 0x170d0d1aU, 0x170d0d1aU, 0x170d0d1aU, 0x170d0d1aU, 0x170d0d1aU, 0x170d0d1aU, 0x170d0d1aU, 0x170d0d1aU, 0x170d0d1aU, 0x170d0d1aU, 0x170d0d1aU, 0x170d0d1aU, 0x170d0d1aU, 0x170d0d1aU, 0x170d0d1aU, 0x170d0d1aU, 0x170d0d1aU, 0x170d0d1aU, 0x170d0d1aU, 0x170d0d1aU, 0x170d0d1aU, 0x170d0d1aU, 0x170d0d1aU, + 0xdabfbf65U, 0xdabfbf65U, 0xdabfbf65U, 0xdabfbf65U, 0xdabfbf65U, 0xdabfbf65U, 0xdabfbf65U, 0xdabfbf65U, 0xdabfbf65U, 0xdabfbf65U, 0xdabfbf65U, 0xdabfbf65U, 0xdabfbf65U, 0xdabfbf65U, 0xdabfbf65U, 0xdabfbf65U, 0xdabfbf65U, 0xdabfbf65U, 0xdabfbf65U, 0xdabfbf65U, 0xdabfbf65U, 0xdabfbf65U, 0xdabfbf65U, 0xdabfbf65U, 0xdabfbf65U, 0xdabfbf65U, 0xdabfbf65U, 0xdabfbf65U, 0xdabfbf65U, 0xdabfbf65U, 0xdabfbf65U, 0xdabfbf65U, + 0x31e6e6d7U, 0x31e6e6d7U, 0x31e6e6d7U, 0x31e6e6d7U, 0x31e6e6d7U, 0x31e6e6d7U, 0x31e6e6d7U, 0x31e6e6d7U, 0x31e6e6d7U, 0x31e6e6d7U, 0x31e6e6d7U, 0x31e6e6d7U, 0x31e6e6d7U, 0x31e6e6d7U, 0x31e6e6d7U, 0x31e6e6d7U, 0x31e6e6d7U, 0x31e6e6d7U, 0x31e6e6d7U, 0x31e6e6d7U, 0x31e6e6d7U, 0x31e6e6d7U, 0x31e6e6d7U, 0x31e6e6d7U, 0x31e6e6d7U, 0x31e6e6d7U, 0x31e6e6d7U, 0x31e6e6d7U, 0x31e6e6d7U, 0x31e6e6d7U, 0x31e6e6d7U, 0x31e6e6d7U, + 0xc6424284U, 0xc6424284U, 0xc6424284U, 0xc6424284U, 0xc6424284U, 0xc6424284U, 0xc6424284U, 0xc6424284U, 0xc6424284U, 0xc6424284U, 0xc6424284U, 0xc6424284U, 0xc6424284U, 0xc6424284U, 0xc6424284U, 0xc6424284U, 0xc6424284U, 0xc6424284U, 0xc6424284U, 0xc6424284U, 0xc6424284U, 0xc6424284U, 0xc6424284U, 0xc6424284U, 0xc6424284U, 0xc6424284U, 0xc6424284U, 0xc6424284U, 0xc6424284U, 0xc6424284U, 0xc6424284U, 0xc6424284U, + 0xb86868d0U, 0xb86868d0U, 0xb86868d0U, 0xb86868d0U, 0xb86868d0U, 0xb86868d0U, 0xb86868d0U, 0xb86868d0U, 0xb86868d0U, 0xb86868d0U, 0xb86868d0U, 0xb86868d0U, 0xb86868d0U, 0xb86868d0U, 0xb86868d0U, 0xb86868d0U, 0xb86868d0U, 0xb86868d0U, 0xb86868d0U, 0xb86868d0U, 0xb86868d0U, 0xb86868d0U, 0xb86868d0U, 0xb86868d0U, 0xb86868d0U, 0xb86868d0U, 0xb86868d0U, 0xb86868d0U, 0xb86868d0U, 0xb86868d0U, 0xb86868d0U, 0xb86868d0U, + 0xc3414182U, 0xc3414182U, 0xc3414182U, 0xc3414182U, 0xc3414182U, 0xc3414182U, 0xc3414182U, 0xc3414182U, 0xc3414182U, 0xc3414182U, 0xc3414182U, 0xc3414182U, 0xc3414182U, 0xc3414182U, 0xc3414182U, 0xc3414182U, 0xc3414182U, 0xc3414182U, 0xc3414182U, 0xc3414182U, 0xc3414182U, 0xc3414182U, 0xc3414182U, 0xc3414182U, 0xc3414182U, 0xc3414182U, 0xc3414182U, 0xc3414182U, 0xc3414182U, 0xc3414182U, 0xc3414182U, 0xc3414182U, + 0xb0999929U, 0xb0999929U, 0xb0999929U, 0xb0999929U, 0xb0999929U, 0xb0999929U, 0xb0999929U, 0xb0999929U, 0xb0999929U, 0xb0999929U, 0xb0999929U, 0xb0999929U, 0xb0999929U, 0xb0999929U, 0xb0999929U, 0xb0999929U, 0xb0999929U, 0xb0999929U, 0xb0999929U, 0xb0999929U, 0xb0999929U, 0xb0999929U, 0xb0999929U, 0xb0999929U, 0xb0999929U, 0xb0999929U, 0xb0999929U, 0xb0999929U, 0xb0999929U, 0xb0999929U, 0xb0999929U, 0xb0999929U, + 0x772d2d5aU, 0x772d2d5aU, 0x772d2d5aU, 0x772d2d5aU, 0x772d2d5aU, 0x772d2d5aU, 0x772d2d5aU, 0x772d2d5aU, 0x772d2d5aU, 0x772d2d5aU, 0x772d2d5aU, 0x772d2d5aU, 0x772d2d5aU, 0x772d2d5aU, 0x772d2d5aU, 0x772d2d5aU, 0x772d2d5aU, 0x772d2d5aU, 0x772d2d5aU, 0x772d2d5aU, 0x772d2d5aU, 0x772d2d5aU, 0x772d2d5aU, 0x772d2d5aU, 0x772d2d5aU, 0x772d2d5aU, 0x772d2d5aU, 0x772d2d5aU, 0x772d2d5aU, 0x772d2d5aU, 0x772d2d5aU, 0x772d2d5aU, + 0x110f0f1eU, 0x110f0f1eU, 0x110f0f1eU, 0x110f0f1eU, 0x110f0f1eU, 0x110f0f1eU, 0x110f0f1eU, 0x110f0f1eU, 0x110f0f1eU, 0x110f0f1eU, 0x110f0f1eU, 0x110f0f1eU, 0x110f0f1eU, 0x110f0f1eU, 0x110f0f1eU, 0x110f0f1eU, 0x110f0f1eU, 0x110f0f1eU, 0x110f0f1eU, 0x110f0f1eU, 0x110f0f1eU, 0x110f0f1eU, 0x110f0f1eU, 0x110f0f1eU, 0x110f0f1eU, 0x110f0f1eU, 0x110f0f1eU, 0x110f0f1eU, 0x110f0f1eU, 0x110f0f1eU, 0x110f0f1eU, 0x110f0f1eU, + 0xcbb0b07bU, 0xcbb0b07bU, 0xcbb0b07bU, 0xcbb0b07bU, 0xcbb0b07bU, 0xcbb0b07bU, 0xcbb0b07bU, 0xcbb0b07bU, 0xcbb0b07bU, 0xcbb0b07bU, 0xcbb0b07bU, 0xcbb0b07bU, 0xcbb0b07bU, 0xcbb0b07bU, 0xcbb0b07bU, 0xcbb0b07bU, 0xcbb0b07bU, 0xcbb0b07bU, 0xcbb0b07bU, 0xcbb0b07bU, 0xcbb0b07bU, 0xcbb0b07bU, 0xcbb0b07bU, 0xcbb0b07bU, 0xcbb0b07bU, 0xcbb0b07bU, 0xcbb0b07bU, 0xcbb0b07bU, 0xcbb0b07bU, 0xcbb0b07bU, 0xcbb0b07bU, 0xcbb0b07bU, + 0xfc5454a8U, 0xfc5454a8U, 0xfc5454a8U, 0xfc5454a8U, 0xfc5454a8U, 0xfc5454a8U, 0xfc5454a8U, 0xfc5454a8U, 0xfc5454a8U, 0xfc5454a8U, 0xfc5454a8U, 0xfc5454a8U, 0xfc5454a8U, 0xfc5454a8U, 0xfc5454a8U, 0xfc5454a8U, 0xfc5454a8U, 0xfc5454a8U, 0xfc5454a8U, 0xfc5454a8U, 0xfc5454a8U, 0xfc5454a8U, 0xfc5454a8U, 0xfc5454a8U, 0xfc5454a8U, 0xfc5454a8U, 0xfc5454a8U, 0xfc5454a8U, 0xfc5454a8U, 0xfc5454a8U, 0xfc5454a8U, 0xfc5454a8U, + 0xd6bbbb6dU, 0xd6bbbb6dU, 0xd6bbbb6dU, 0xd6bbbb6dU, 0xd6bbbb6dU, 0xd6bbbb6dU, 0xd6bbbb6dU, 0xd6bbbb6dU, 0xd6bbbb6dU, 0xd6bbbb6dU, 0xd6bbbb6dU, 0xd6bbbb6dU, 0xd6bbbb6dU, 0xd6bbbb6dU, 0xd6bbbb6dU, 0xd6bbbb6dU, 0xd6bbbb6dU, 0xd6bbbb6dU, 0xd6bbbb6dU, 0xd6bbbb6dU, 0xd6bbbb6dU, 0xd6bbbb6dU, 0xd6bbbb6dU, 0xd6bbbb6dU, 0xd6bbbb6dU, 0xd6bbbb6dU, 0xd6bbbb6dU, 0xd6bbbb6dU, 0xd6bbbb6dU, 0xd6bbbb6dU, 0xd6bbbb6dU, 0xd6bbbb6dU, +0x3a16162cU, 0x3a16162cU, 0x3a16162cU, 0x3a16162cU, 0x3a16162cU, 0x3a16162cU, 0x3a16162cU, 0x3a16162cU, 0x3a16162cU, 0x3a16162cU, 0x3a16162cU, 0x3a16162cU, 0x3a16162cU, 0x3a16162cU, 0x3a16162cU, 0x3a16162cU, 0x3a16162cU, 0x3a16162cU, 0x3a16162cU, 0x3a16162cU, 0x3a16162cU, 0x3a16162cU, 0x3a16162cU, 0x3a16162cU, 0x3a16162cU, 0x3a16162cU, 0x3a16162cU, 0x3a16162cU, 0x3a16162cU, 0x3a16162cU, 0x3a16162cU, 0x3a16162cU +}; + static __constant__ uint32_t d_t_fn[1024] = - { - 0xa56363c6U, 0x847c7cf8U, 0x997777eeU, 0x8d7b7bf6U, - 0x0df2f2ffU, 0xbd6b6bd6U, 0xb16f6fdeU, 0x54c5c591U, - 0x50303060U, 0x03010102U, 0xa96767ceU, 0x7d2b2b56U, - 0x19fefee7U, 0x62d7d7b5U, 0xe6abab4dU, 0x9a7676ecU, - 0x45caca8fU, 0x9d82821fU, 0x40c9c989U, 0x877d7dfaU, - 0x15fafaefU, 0xeb5959b2U, 0xc947478eU, 0x0bf0f0fbU, - 0xecadad41U, 0x67d4d4b3U, 0xfda2a25fU, 0xeaafaf45U, - 0xbf9c9c23U, 0xf7a4a453U, 0x967272e4U, 0x5bc0c09bU, - 0xc2b7b775U, 0x1cfdfde1U, 0xae93933dU, 0x6a26264cU, - 0x5a36366cU, 0x413f3f7eU, 0x02f7f7f5U, 0x4fcccc83U, - 0x5c343468U, 0xf4a5a551U, 0x34e5e5d1U, 0x08f1f1f9U, - 0x937171e2U, 0x73d8d8abU, 0x53313162U, 0x3f15152aU, - 0x0c040408U, 0x52c7c795U, 0x65232346U, 0x5ec3c39dU, - 0x28181830U, 0xa1969637U, 0x0f05050aU, 0xb59a9a2fU, - 0x0907070eU, 0x36121224U, 0x9b80801bU, 0x3de2e2dfU, - 0x26ebebcdU, 0x6927274eU, 0xcdb2b27fU, 0x9f7575eaU, - 0x1b090912U, 0x9e83831dU, 0x742c2c58U, 0x2e1a1a34U, - 0x2d1b1b36U, 0xb26e6edcU, 0xee5a5ab4U, 0xfba0a05bU, - 0xf65252a4U, 0x4d3b3b76U, 0x61d6d6b7U, 0xceb3b37dU, - 0x7b292952U, 0x3ee3e3ddU, 0x712f2f5eU, 0x97848413U, - 0xf55353a6U, 0x68d1d1b9U, 0x00000000U, 0x2cededc1U, - 0x60202040U, 0x1ffcfce3U, 0xc8b1b179U, 0xed5b5bb6U, - 0xbe6a6ad4U, 0x46cbcb8dU, 0xd9bebe67U, 0x4b393972U, - 0xde4a4a94U, 0xd44c4c98U, 0xe85858b0U, 0x4acfcf85U, - 0x6bd0d0bbU, 0x2aefefc5U, 0xe5aaaa4fU, 0x16fbfbedU, - 0xc5434386U, 0xd74d4d9aU, 0x55333366U, 0x94858511U, - 0xcf45458aU, 0x10f9f9e9U, 0x06020204U, 0x817f7ffeU, - 0xf05050a0U, 0x443c3c78U, 0xba9f9f25U, 0xe3a8a84bU, - 0xf35151a2U, 0xfea3a35dU, 0xc0404080U, 0x8a8f8f05U, - 0xad92923fU, 0xbc9d9d21U, 0x48383870U, 0x04f5f5f1U, - 0xdfbcbc63U, 0xc1b6b677U, 0x75dadaafU, 0x63212142U, - 0x30101020U, 0x1affffe5U, 0x0ef3f3fdU, 0x6dd2d2bfU, - 0x4ccdcd81U, 0x140c0c18U, 0x35131326U, 0x2fececc3U, - 0xe15f5fbeU, 0xa2979735U, 0xcc444488U, 0x3917172eU, - 0x57c4c493U, 0xf2a7a755U, 0x827e7efcU, 0x473d3d7aU, - 0xac6464c8U, 0xe75d5dbaU, 0x2b191932U, 0x957373e6U, - 0xa06060c0U, 0x98818119U, 0xd14f4f9eU, 0x7fdcdca3U, - 0x66222244U, 0x7e2a2a54U, 0xab90903bU, 0x8388880bU, - 0xca46468cU, 0x29eeeec7U, 0xd3b8b86bU, 0x3c141428U, - 0x79dedea7U, 0xe25e5ebcU, 0x1d0b0b16U, 0x76dbdbadU, - 0x3be0e0dbU, 0x56323264U, 0x4e3a3a74U, 0x1e0a0a14U, - 0xdb494992U, 0x0a06060cU, 0x6c242448U, 0xe45c5cb8U, - 0x5dc2c29fU, 0x6ed3d3bdU, 0xefacac43U, 0xa66262c4U, - 0xa8919139U, 0xa4959531U, 0x37e4e4d3U, 0x8b7979f2U, - 0x32e7e7d5U, 0x43c8c88bU, 0x5937376eU, 0xb76d6ddaU, - 0x8c8d8d01U, 0x64d5d5b1U, 0xd24e4e9cU, 0xe0a9a949U, - 0xb46c6cd8U, 0xfa5656acU, 0x07f4f4f3U, 0x25eaeacfU, - 0xaf6565caU, 0x8e7a7af4U, 0xe9aeae47U, 0x18080810U, - 0xd5baba6fU, 0x887878f0U, 0x6f25254aU, 0x722e2e5cU, - 0x241c1c38U, 0xf1a6a657U, 0xc7b4b473U, 0x51c6c697U, - 0x23e8e8cbU, 0x7cdddda1U, 0x9c7474e8U, 0x211f1f3eU, - 0xdd4b4b96U, 0xdcbdbd61U, 0x868b8b0dU, 0x858a8a0fU, - 0x907070e0U, 0x423e3e7cU, 0xc4b5b571U, 0xaa6666ccU, - 0xd8484890U, 0x05030306U, 0x01f6f6f7U, 0x120e0e1cU, - 0xa36161c2U, 0x5f35356aU, 0xf95757aeU, 0xd0b9b969U, - 0x91868617U, 0x58c1c199U, 0x271d1d3aU, 0xb99e9e27U, - 0x38e1e1d9U, 0x13f8f8ebU, 0xb398982bU, 0x33111122U, - 0xbb6969d2U, 0x70d9d9a9U, 0x898e8e07U, 0xa7949433U, - 0xb69b9b2dU, 0x221e1e3cU, 0x92878715U, 0x20e9e9c9U, - 0x49cece87U, 0xff5555aaU, 0x78282850U, 0x7adfdfa5U, - 0x8f8c8c03U, 0xf8a1a159U, 0x80898909U, 0x170d0d1aU, - 0xdabfbf65U, 0x31e6e6d7U, 0xc6424284U, 0xb86868d0U, - 0xc3414182U, 0xb0999929U, 0x772d2d5aU, 0x110f0f1eU, - 0xcbb0b07bU, 0xfc5454a8U, 0xd6bbbb6dU, 0x3a16162cU, - 0x6363c6a5U, 0x7c7cf884U, 0x7777ee99U, 0x7b7bf68dU, - 0xf2f2ff0dU, 0x6b6bd6bdU, 0x6f6fdeb1U, 0xc5c59154U, - 0x30306050U, 0x01010203U, 0x6767cea9U, 0x2b2b567dU, - 0xfefee719U, 0xd7d7b562U, 0xabab4de6U, 0x7676ec9aU, - 0xcaca8f45U, 0x82821f9dU, 0xc9c98940U, 0x7d7dfa87U, - 0xfafaef15U, 0x5959b2ebU, 0x47478ec9U, 0xf0f0fb0bU, - 0xadad41ecU, 0xd4d4b367U, 0xa2a25ffdU, 0xafaf45eaU, - 0x9c9c23bfU, 0xa4a453f7U, 0x7272e496U, 0xc0c09b5bU, - 0xb7b775c2U, 0xfdfde11cU, 0x93933daeU, 0x26264c6aU, - 0x36366c5aU, 0x3f3f7e41U, 0xf7f7f502U, 0xcccc834fU, - 0x3434685cU, 0xa5a551f4U, 0xe5e5d134U, 0xf1f1f908U, - 0x7171e293U, 0xd8d8ab73U, 0x31316253U, 0x15152a3fU, - 0x0404080cU, 0xc7c79552U, 0x23234665U, 0xc3c39d5eU, - 0x18183028U, 0x969637a1U, 0x05050a0fU, 0x9a9a2fb5U, - 0x07070e09U, 0x12122436U, 0x80801b9bU, 0xe2e2df3dU, - 0xebebcd26U, 0x27274e69U, 0xb2b27fcdU, 0x7575ea9fU, - 0x0909121bU, 0x83831d9eU, 0x2c2c5874U, 0x1a1a342eU, - 0x1b1b362dU, 0x6e6edcb2U, 0x5a5ab4eeU, 0xa0a05bfbU, - 0x5252a4f6U, 0x3b3b764dU, 0xd6d6b761U, 0xb3b37dceU, - 0x2929527bU, 0xe3e3dd3eU, 0x2f2f5e71U, 0x84841397U, - 0x5353a6f5U, 0xd1d1b968U, 0x00000000U, 0xededc12cU, - 0x20204060U, 0xfcfce31fU, 0xb1b179c8U, 0x5b5bb6edU, - 0x6a6ad4beU, 0xcbcb8d46U, 0xbebe67d9U, 0x3939724bU, - 0x4a4a94deU, 0x4c4c98d4U, 0x5858b0e8U, 0xcfcf854aU, - 0xd0d0bb6bU, 0xefefc52aU, 0xaaaa4fe5U, 0xfbfbed16U, - 0x434386c5U, 0x4d4d9ad7U, 0x33336655U, 0x85851194U, - 0x45458acfU, 0xf9f9e910U, 0x02020406U, 0x7f7ffe81U, - 0x5050a0f0U, 0x3c3c7844U, 0x9f9f25baU, 0xa8a84be3U, - 0x5151a2f3U, 0xa3a35dfeU, 0x404080c0U, 0x8f8f058aU, - 0x92923fadU, 0x9d9d21bcU, 0x38387048U, 0xf5f5f104U, - 0xbcbc63dfU, 0xb6b677c1U, 0xdadaaf75U, 0x21214263U, - 0x10102030U, 0xffffe51aU, 0xf3f3fd0eU, 0xd2d2bf6dU, - 0xcdcd814cU, 0x0c0c1814U, 0x13132635U, 0xececc32fU, - 0x5f5fbee1U, 0x979735a2U, 0x444488ccU, 0x17172e39U, - 0xc4c49357U, 0xa7a755f2U, 0x7e7efc82U, 0x3d3d7a47U, - 0x6464c8acU, 0x5d5dbae7U, 0x1919322bU, 0x7373e695U, - 0x6060c0a0U, 0x81811998U, 0x4f4f9ed1U, 0xdcdca37fU, - 0x22224466U, 0x2a2a547eU, 0x90903babU, 0x88880b83U, - 0x46468ccaU, 0xeeeec729U, 0xb8b86bd3U, 0x1414283cU, - 0xdedea779U, 0x5e5ebce2U, 0x0b0b161dU, 0xdbdbad76U, - 0xe0e0db3bU, 0x32326456U, 0x3a3a744eU, 0x0a0a141eU, - 0x494992dbU, 0x06060c0aU, 0x2424486cU, 0x5c5cb8e4U, - 0xc2c29f5dU, 0xd3d3bd6eU, 0xacac43efU, 0x6262c4a6U, - 0x919139a8U, 0x959531a4U, 0xe4e4d337U, 0x7979f28bU, - 0xe7e7d532U, 0xc8c88b43U, 0x37376e59U, 0x6d6ddab7U, - 0x8d8d018cU, 0xd5d5b164U, 0x4e4e9cd2U, 0xa9a949e0U, - 0x6c6cd8b4U, 0x5656acfaU, 0xf4f4f307U, 0xeaeacf25U, - 0x6565caafU, 0x7a7af48eU, 0xaeae47e9U, 0x08081018U, - 0xbaba6fd5U, 0x7878f088U, 0x25254a6fU, 0x2e2e5c72U, - 0x1c1c3824U, 0xa6a657f1U, 0xb4b473c7U, 0xc6c69751U, - 0xe8e8cb23U, 0xdddda17cU, 0x7474e89cU, 0x1f1f3e21U, - 0x4b4b96ddU, 0xbdbd61dcU, 0x8b8b0d86U, 0x8a8a0f85U, - 0x7070e090U, 0x3e3e7c42U, 0xb5b571c4U, 0x6666ccaaU, - 0x484890d8U, 0x03030605U, 0xf6f6f701U, 0x0e0e1c12U, - 0x6161c2a3U, 0x35356a5fU, 0x5757aef9U, 0xb9b969d0U, - 0x86861791U, 0xc1c19958U, 0x1d1d3a27U, 0x9e9e27b9U, - 0xe1e1d938U, 0xf8f8eb13U, 0x98982bb3U, 0x11112233U, - 0x6969d2bbU, 0xd9d9a970U, 0x8e8e0789U, 0x949433a7U, - 0x9b9b2db6U, 0x1e1e3c22U, 0x87871592U, 0xe9e9c920U, - 0xcece8749U, 0x5555aaffU, 0x28285078U, 0xdfdfa57aU, - 0x8c8c038fU, 0xa1a159f8U, 0x89890980U, 0x0d0d1a17U, - 0xbfbf65daU, 0xe6e6d731U, 0x424284c6U, 0x6868d0b8U, - 0x414182c3U, 0x999929b0U, 0x2d2d5a77U, 0x0f0f1e11U, - 0xb0b07bcbU, 0x5454a8fcU, 0xbbbb6dd6U, 0x16162c3aU, - 0x63c6a563U, 0x7cf8847cU, 0x77ee9977U, 0x7bf68d7bU, - 0xf2ff0df2U, 0x6bd6bd6bU, 0x6fdeb16fU, 0xc59154c5U, - 0x30605030U, 0x01020301U, 0x67cea967U, 0x2b567d2bU, - 0xfee719feU, 0xd7b562d7U, 0xab4de6abU, 0x76ec9a76U, - 0xca8f45caU, 0x821f9d82U, 0xc98940c9U, 0x7dfa877dU, - 0xfaef15faU, 0x59b2eb59U, 0x478ec947U, 0xf0fb0bf0U, - 0xad41ecadU, 0xd4b367d4U, 0xa25ffda2U, 0xaf45eaafU, - 0x9c23bf9cU, 0xa453f7a4U, 0x72e49672U, 0xc09b5bc0U, - 0xb775c2b7U, 0xfde11cfdU, 0x933dae93U, 0x264c6a26U, - 0x366c5a36U, 0x3f7e413fU, 0xf7f502f7U, 0xcc834fccU, - 0x34685c34U, 0xa551f4a5U, 0xe5d134e5U, 0xf1f908f1U, - 0x71e29371U, 0xd8ab73d8U, 0x31625331U, 0x152a3f15U, - 0x04080c04U, 0xc79552c7U, 0x23466523U, 0xc39d5ec3U, - 0x18302818U, 0x9637a196U, 0x050a0f05U, 0x9a2fb59aU, - 0x070e0907U, 0x12243612U, 0x801b9b80U, 0xe2df3de2U, - 0xebcd26ebU, 0x274e6927U, 0xb27fcdb2U, 0x75ea9f75U, - 0x09121b09U, 0x831d9e83U, 0x2c58742cU, 0x1a342e1aU, - 0x1b362d1bU, 0x6edcb26eU, 0x5ab4ee5aU, 0xa05bfba0U, - 0x52a4f652U, 0x3b764d3bU, 0xd6b761d6U, 0xb37dceb3U, - 0x29527b29U, 0xe3dd3ee3U, 0x2f5e712fU, 0x84139784U, - 0x53a6f553U, 0xd1b968d1U, 0x00000000U, 0xedc12cedU, - 0x20406020U, 0xfce31ffcU, 0xb179c8b1U, 0x5bb6ed5bU, - 0x6ad4be6aU, 0xcb8d46cbU, 0xbe67d9beU, 0x39724b39U, - 0x4a94de4aU, 0x4c98d44cU, 0x58b0e858U, 0xcf854acfU, - 0xd0bb6bd0U, 0xefc52aefU, 0xaa4fe5aaU, 0xfbed16fbU, - 0x4386c543U, 0x4d9ad74dU, 0x33665533U, 0x85119485U, - 0x458acf45U, 0xf9e910f9U, 0x02040602U, 0x7ffe817fU, - 0x50a0f050U, 0x3c78443cU, 0x9f25ba9fU, 0xa84be3a8U, - 0x51a2f351U, 0xa35dfea3U, 0x4080c040U, 0x8f058a8fU, - 0x923fad92U, 0x9d21bc9dU, 0x38704838U, 0xf5f104f5U, - 0xbc63dfbcU, 0xb677c1b6U, 0xdaaf75daU, 0x21426321U, - 0x10203010U, 0xffe51affU, 0xf3fd0ef3U, 0xd2bf6dd2U, - 0xcd814ccdU, 0x0c18140cU, 0x13263513U, 0xecc32fecU, - 0x5fbee15fU, 0x9735a297U, 0x4488cc44U, 0x172e3917U, - 0xc49357c4U, 0xa755f2a7U, 0x7efc827eU, 0x3d7a473dU, - 0x64c8ac64U, 0x5dbae75dU, 0x19322b19U, 0x73e69573U, - 0x60c0a060U, 0x81199881U, 0x4f9ed14fU, 0xdca37fdcU, - 0x22446622U, 0x2a547e2aU, 0x903bab90U, 0x880b8388U, - 0x468cca46U, 0xeec729eeU, 0xb86bd3b8U, 0x14283c14U, - 0xdea779deU, 0x5ebce25eU, 0x0b161d0bU, 0xdbad76dbU, - 0xe0db3be0U, 0x32645632U, 0x3a744e3aU, 0x0a141e0aU, - 0x4992db49U, 0x060c0a06U, 0x24486c24U, 0x5cb8e45cU, - 0xc29f5dc2U, 0xd3bd6ed3U, 0xac43efacU, 0x62c4a662U, - 0x9139a891U, 0x9531a495U, 0xe4d337e4U, 0x79f28b79U, - 0xe7d532e7U, 0xc88b43c8U, 0x376e5937U, 0x6ddab76dU, - 0x8d018c8dU, 0xd5b164d5U, 0x4e9cd24eU, 0xa949e0a9U, - 0x6cd8b46cU, 0x56acfa56U, 0xf4f307f4U, 0xeacf25eaU, - 0x65caaf65U, 0x7af48e7aU, 0xae47e9aeU, 0x08101808U, - 0xba6fd5baU, 0x78f08878U, 0x254a6f25U, 0x2e5c722eU, - 0x1c38241cU, 0xa657f1a6U, 0xb473c7b4U, 0xc69751c6U, - 0xe8cb23e8U, 0xdda17cddU, 0x74e89c74U, 0x1f3e211fU, - 0x4b96dd4bU, 0xbd61dcbdU, 0x8b0d868bU, 0x8a0f858aU, - 0x70e09070U, 0x3e7c423eU, 0xb571c4b5U, 0x66ccaa66U, - 0x4890d848U, 0x03060503U, 0xf6f701f6U, 0x0e1c120eU, - 0x61c2a361U, 0x356a5f35U, 0x57aef957U, 0xb969d0b9U, - 0x86179186U, 0xc19958c1U, 0x1d3a271dU, 0x9e27b99eU, - 0xe1d938e1U, 0xf8eb13f8U, 0x982bb398U, 0x11223311U, - 0x69d2bb69U, 0xd9a970d9U, 0x8e07898eU, 0x9433a794U, - 0x9b2db69bU, 0x1e3c221eU, 0x87159287U, 0xe9c920e9U, - 0xce8749ceU, 0x55aaff55U, 0x28507828U, 0xdfa57adfU, - 0x8c038f8cU, 0xa159f8a1U, 0x89098089U, 0x0d1a170dU, - 0xbf65dabfU, 0xe6d731e6U, 0x4284c642U, 0x68d0b868U, - 0x4182c341U, 0x9929b099U, 0x2d5a772dU, 0x0f1e110fU, - 0xb07bcbb0U, 0x54a8fc54U, 0xbb6dd6bbU, 0x162c3a16U, - 0xc6a56363U, 0xf8847c7cU, 0xee997777U, 0xf68d7b7bU, - 0xff0df2f2U, 0xd6bd6b6bU, 0xdeb16f6fU, 0x9154c5c5U, - 0x60503030U, 0x02030101U, 0xcea96767U, 0x567d2b2bU, - 0xe719fefeU, 0xb562d7d7U, 0x4de6ababU, 0xec9a7676U, - 0x8f45cacaU, 0x1f9d8282U, 0x8940c9c9U, 0xfa877d7dU, - 0xef15fafaU, 0xb2eb5959U, 0x8ec94747U, 0xfb0bf0f0U, - 0x41ecadadU, 0xb367d4d4U, 0x5ffda2a2U, 0x45eaafafU, - 0x23bf9c9cU, 0x53f7a4a4U, 0xe4967272U, 0x9b5bc0c0U, - 0x75c2b7b7U, 0xe11cfdfdU, 0x3dae9393U, 0x4c6a2626U, - 0x6c5a3636U, 0x7e413f3fU, 0xf502f7f7U, 0x834fccccU, - 0x685c3434U, 0x51f4a5a5U, 0xd134e5e5U, 0xf908f1f1U, - 0xe2937171U, 0xab73d8d8U, 0x62533131U, 0x2a3f1515U, - 0x080c0404U, 0x9552c7c7U, 0x46652323U, 0x9d5ec3c3U, - 0x30281818U, 0x37a19696U, 0x0a0f0505U, 0x2fb59a9aU, - 0x0e090707U, 0x24361212U, 0x1b9b8080U, 0xdf3de2e2U, - 0xcd26ebebU, 0x4e692727U, 0x7fcdb2b2U, 0xea9f7575U, - 0x121b0909U, 0x1d9e8383U, 0x58742c2cU, 0x342e1a1aU, - 0x362d1b1bU, 0xdcb26e6eU, 0xb4ee5a5aU, 0x5bfba0a0U, - 0xa4f65252U, 0x764d3b3bU, 0xb761d6d6U, 0x7dceb3b3U, - 0x527b2929U, 0xdd3ee3e3U, 0x5e712f2fU, 0x13978484U, - 0xa6f55353U, 0xb968d1d1U, 0x00000000U, 0xc12cededU, - 0x40602020U, 0xe31ffcfcU, 0x79c8b1b1U, 0xb6ed5b5bU, - 0xd4be6a6aU, 0x8d46cbcbU, 0x67d9bebeU, 0x724b3939U, - 0x94de4a4aU, 0x98d44c4cU, 0xb0e85858U, 0x854acfcfU, - 0xbb6bd0d0U, 0xc52aefefU, 0x4fe5aaaaU, 0xed16fbfbU, - 0x86c54343U, 0x9ad74d4dU, 0x66553333U, 0x11948585U, - 0x8acf4545U, 0xe910f9f9U, 0x04060202U, 0xfe817f7fU, - 0xa0f05050U, 0x78443c3cU, 0x25ba9f9fU, 0x4be3a8a8U, - 0xa2f35151U, 0x5dfea3a3U, 0x80c04040U, 0x058a8f8fU, - 0x3fad9292U, 0x21bc9d9dU, 0x70483838U, 0xf104f5f5U, - 0x63dfbcbcU, 0x77c1b6b6U, 0xaf75dadaU, 0x42632121U, - 0x20301010U, 0xe51affffU, 0xfd0ef3f3U, 0xbf6dd2d2U, - 0x814ccdcdU, 0x18140c0cU, 0x26351313U, 0xc32fececU, - 0xbee15f5fU, 0x35a29797U, 0x88cc4444U, 0x2e391717U, - 0x9357c4c4U, 0x55f2a7a7U, 0xfc827e7eU, 0x7a473d3dU, - 0xc8ac6464U, 0xbae75d5dU, 0x322b1919U, 0xe6957373U, - 0xc0a06060U, 0x19988181U, 0x9ed14f4fU, 0xa37fdcdcU, - 0x44662222U, 0x547e2a2aU, 0x3bab9090U, 0x0b838888U, - 0x8cca4646U, 0xc729eeeeU, 0x6bd3b8b8U, 0x283c1414U, - 0xa779dedeU, 0xbce25e5eU, 0x161d0b0bU, 0xad76dbdbU, - 0xdb3be0e0U, 0x64563232U, 0x744e3a3aU, 0x141e0a0aU, - 0x92db4949U, 0x0c0a0606U, 0x486c2424U, 0xb8e45c5cU, - 0x9f5dc2c2U, 0xbd6ed3d3U, 0x43efacacU, 0xc4a66262U, - 0x39a89191U, 0x31a49595U, 0xd337e4e4U, 0xf28b7979U, - 0xd532e7e7U, 0x8b43c8c8U, 0x6e593737U, 0xdab76d6dU, - 0x018c8d8dU, 0xb164d5d5U, 0x9cd24e4eU, 0x49e0a9a9U, - 0xd8b46c6cU, 0xacfa5656U, 0xf307f4f4U, 0xcf25eaeaU, - 0xcaaf6565U, 0xf48e7a7aU, 0x47e9aeaeU, 0x10180808U, - 0x6fd5babaU, 0xf0887878U, 0x4a6f2525U, 0x5c722e2eU, - 0x38241c1cU, 0x57f1a6a6U, 0x73c7b4b4U, 0x9751c6c6U, - 0xcb23e8e8U, 0xa17cddddU, 0xe89c7474U, 0x3e211f1fU, - 0x96dd4b4bU, 0x61dcbdbdU, 0x0d868b8bU, 0x0f858a8aU, - 0xe0907070U, 0x7c423e3eU, 0x71c4b5b5U, 0xccaa6666U, - 0x90d84848U, 0x06050303U, 0xf701f6f6U, 0x1c120e0eU, - 0xc2a36161U, 0x6a5f3535U, 0xaef95757U, 0x69d0b9b9U, - 0x17918686U, 0x9958c1c1U, 0x3a271d1dU, 0x27b99e9eU, - 0xd938e1e1U, 0xeb13f8f8U, 0x2bb39898U, 0x22331111U, - 0xd2bb6969U, 0xa970d9d9U, 0x07898e8eU, 0x33a79494U, - 0x2db69b9bU, 0x3c221e1eU, 0x15928787U, 0xc920e9e9U, - 0x8749ceceU, 0xaaff5555U, 0x50782828U, 0xa57adfdfU, - 0x038f8c8cU, 0x59f8a1a1U, 0x09808989U, 0x1a170d0dU, - 0x65dabfbfU, 0xd731e6e6U, 0x84c64242U, 0xd0b86868U, - 0x82c34141U, 0x29b09999U, 0x5a772d2dU, 0x1e110f0fU, - 0x7bcbb0b0U, 0xa8fc5454U, 0x6dd6bbbbU, 0x2c3a1616U}; +{ + 0xa56363c6U, 0x847c7cf8U, 0x997777eeU, 0x8d7b7bf6U, + 0x0df2f2ffU, 0xbd6b6bd6U, 0xb16f6fdeU, 0x54c5c591U, + 0x50303060U, 0x03010102U, 0xa96767ceU, 0x7d2b2b56U, + 0x19fefee7U, 0x62d7d7b5U, 0xe6abab4dU, 0x9a7676ecU, + 0x45caca8fU, 0x9d82821fU, 0x40c9c989U, 0x877d7dfaU, + 0x15fafaefU, 0xeb5959b2U, 0xc947478eU, 0x0bf0f0fbU, + 0xecadad41U, 0x67d4d4b3U, 0xfda2a25fU, 0xeaafaf45U, + 0xbf9c9c23U, 0xf7a4a453U, 0x967272e4U, 0x5bc0c09bU, + 0xc2b7b775U, 0x1cfdfde1U, 0xae93933dU, 0x6a26264cU, + 0x5a36366cU, 0x413f3f7eU, 0x02f7f7f5U, 0x4fcccc83U, + 0x5c343468U, 0xf4a5a551U, 0x34e5e5d1U, 0x08f1f1f9U, + 0x937171e2U, 0x73d8d8abU, 0x53313162U, 0x3f15152aU, + 0x0c040408U, 0x52c7c795U, 0x65232346U, 0x5ec3c39dU, + 0x28181830U, 0xa1969637U, 0x0f05050aU, 0xb59a9a2fU, + 0x0907070eU, 0x36121224U, 0x9b80801bU, 0x3de2e2dfU, + 0x26ebebcdU, 0x6927274eU, 0xcdb2b27fU, 0x9f7575eaU, + 0x1b090912U, 0x9e83831dU, 0x742c2c58U, 0x2e1a1a34U, + 0x2d1b1b36U, 0xb26e6edcU, 0xee5a5ab4U, 0xfba0a05bU, + 0xf65252a4U, 0x4d3b3b76U, 0x61d6d6b7U, 0xceb3b37dU, + 0x7b292952U, 0x3ee3e3ddU, 0x712f2f5eU, 0x97848413U, + 0xf55353a6U, 0x68d1d1b9U, 0x00000000U, 0x2cededc1U, + 0x60202040U, 0x1ffcfce3U, 0xc8b1b179U, 0xed5b5bb6U, + 0xbe6a6ad4U, 0x46cbcb8dU, 0xd9bebe67U, 0x4b393972U, + 0xde4a4a94U, 0xd44c4c98U, 0xe85858b0U, 0x4acfcf85U, + 0x6bd0d0bbU, 0x2aefefc5U, 0xe5aaaa4fU, 0x16fbfbedU, + 0xc5434386U, 0xd74d4d9aU, 0x55333366U, 0x94858511U, + 0xcf45458aU, 0x10f9f9e9U, 0x06020204U, 0x817f7ffeU, + 0xf05050a0U, 0x443c3c78U, 0xba9f9f25U, 0xe3a8a84bU, + 0xf35151a2U, 0xfea3a35dU, 0xc0404080U, 0x8a8f8f05U, + 0xad92923fU, 0xbc9d9d21U, 0x48383870U, 0x04f5f5f1U, + 0xdfbcbc63U, 0xc1b6b677U, 0x75dadaafU, 0x63212142U, + 0x30101020U, 0x1affffe5U, 0x0ef3f3fdU, 0x6dd2d2bfU, + 0x4ccdcd81U, 0x140c0c18U, 0x35131326U, 0x2fececc3U, + 0xe15f5fbeU, 0xa2979735U, 0xcc444488U, 0x3917172eU, + 0x57c4c493U, 0xf2a7a755U, 0x827e7efcU, 0x473d3d7aU, + 0xac6464c8U, 0xe75d5dbaU, 0x2b191932U, 0x957373e6U, + 0xa06060c0U, 0x98818119U, 0xd14f4f9eU, 0x7fdcdca3U, + 0x66222244U, 0x7e2a2a54U, 0xab90903bU, 0x8388880bU, + 0xca46468cU, 0x29eeeec7U, 0xd3b8b86bU, 0x3c141428U, + 0x79dedea7U, 0xe25e5ebcU, 0x1d0b0b16U, 0x76dbdbadU, + 0x3be0e0dbU, 0x56323264U, 0x4e3a3a74U, 0x1e0a0a14U, + 0xdb494992U, 0x0a06060cU, 0x6c242448U, 0xe45c5cb8U, + 0x5dc2c29fU, 0x6ed3d3bdU, 0xefacac43U, 0xa66262c4U, + 0xa8919139U, 0xa4959531U, 0x37e4e4d3U, 0x8b7979f2U, + 0x32e7e7d5U, 0x43c8c88bU, 0x5937376eU, 0xb76d6ddaU, + 0x8c8d8d01U, 0x64d5d5b1U, 0xd24e4e9cU, 0xe0a9a949U, + 0xb46c6cd8U, 0xfa5656acU, 0x07f4f4f3U, 0x25eaeacfU, + 0xaf6565caU, 0x8e7a7af4U, 0xe9aeae47U, 0x18080810U, + 0xd5baba6fU, 0x887878f0U, 0x6f25254aU, 0x722e2e5cU, + 0x241c1c38U, 0xf1a6a657U, 0xc7b4b473U, 0x51c6c697U, + 0x23e8e8cbU, 0x7cdddda1U, 0x9c7474e8U, 0x211f1f3eU, + 0xdd4b4b96U, 0xdcbdbd61U, 0x868b8b0dU, 0x858a8a0fU, + 0x907070e0U, 0x423e3e7cU, 0xc4b5b571U, 0xaa6666ccU, + 0xd8484890U, 0x05030306U, 0x01f6f6f7U, 0x120e0e1cU, + 0xa36161c2U, 0x5f35356aU, 0xf95757aeU, 0xd0b9b969U, + 0x91868617U, 0x58c1c199U, 0x271d1d3aU, 0xb99e9e27U, + 0x38e1e1d9U, 0x13f8f8ebU, 0xb398982bU, 0x33111122U, + 0xbb6969d2U, 0x70d9d9a9U, 0x898e8e07U, 0xa7949433U, + 0xb69b9b2dU, 0x221e1e3cU, 0x92878715U, 0x20e9e9c9U, + 0x49cece87U, 0xff5555aaU, 0x78282850U, 0x7adfdfa5U, + 0x8f8c8c03U, 0xf8a1a159U, 0x80898909U, 0x170d0d1aU, + 0xdabfbf65U, 0x31e6e6d7U, 0xc6424284U, 0xb86868d0U, + 0xc3414182U, 0xb0999929U, 0x772d2d5aU, 0x110f0f1eU, + 0xcbb0b07bU, 0xfc5454a8U, 0xd6bbbb6dU, 0x3a16162cU, + 0x6363c6a5U, 0x7c7cf884U, 0x7777ee99U, 0x7b7bf68dU, + 0xf2f2ff0dU, 0x6b6bd6bdU, 0x6f6fdeb1U, 0xc5c59154U, + 0x30306050U, 0x01010203U, 0x6767cea9U, 0x2b2b567dU, + 0xfefee719U, 0xd7d7b562U, 0xabab4de6U, 0x7676ec9aU, + 0xcaca8f45U, 0x82821f9dU, 0xc9c98940U, 0x7d7dfa87U, + 0xfafaef15U, 0x5959b2ebU, 0x47478ec9U, 0xf0f0fb0bU, + 0xadad41ecU, 0xd4d4b367U, 0xa2a25ffdU, 0xafaf45eaU, + 0x9c9c23bfU, 0xa4a453f7U, 0x7272e496U, 0xc0c09b5bU, + 0xb7b775c2U, 0xfdfde11cU, 0x93933daeU, 0x26264c6aU, + 0x36366c5aU, 0x3f3f7e41U, 0xf7f7f502U, 0xcccc834fU, + 0x3434685cU, 0xa5a551f4U, 0xe5e5d134U, 0xf1f1f908U, + 0x7171e293U, 0xd8d8ab73U, 0x31316253U, 0x15152a3fU, + 0x0404080cU, 0xc7c79552U, 0x23234665U, 0xc3c39d5eU, + 0x18183028U, 0x969637a1U, 0x05050a0fU, 0x9a9a2fb5U, + 0x07070e09U, 0x12122436U, 0x80801b9bU, 0xe2e2df3dU, + 0xebebcd26U, 0x27274e69U, 0xb2b27fcdU, 0x7575ea9fU, + 0x0909121bU, 0x83831d9eU, 0x2c2c5874U, 0x1a1a342eU, + 0x1b1b362dU, 0x6e6edcb2U, 0x5a5ab4eeU, 0xa0a05bfbU, + 0x5252a4f6U, 0x3b3b764dU, 0xd6d6b761U, 0xb3b37dceU, + 0x2929527bU, 0xe3e3dd3eU, 0x2f2f5e71U, 0x84841397U, + 0x5353a6f5U, 0xd1d1b968U, 0x00000000U, 0xededc12cU, + 0x20204060U, 0xfcfce31fU, 0xb1b179c8U, 0x5b5bb6edU, + 0x6a6ad4beU, 0xcbcb8d46U, 0xbebe67d9U, 0x3939724bU, + 0x4a4a94deU, 0x4c4c98d4U, 0x5858b0e8U, 0xcfcf854aU, + 0xd0d0bb6bU, 0xefefc52aU, 0xaaaa4fe5U, 0xfbfbed16U, + 0x434386c5U, 0x4d4d9ad7U, 0x33336655U, 0x85851194U, + 0x45458acfU, 0xf9f9e910U, 0x02020406U, 0x7f7ffe81U, + 0x5050a0f0U, 0x3c3c7844U, 0x9f9f25baU, 0xa8a84be3U, + 0x5151a2f3U, 0xa3a35dfeU, 0x404080c0U, 0x8f8f058aU, + 0x92923fadU, 0x9d9d21bcU, 0x38387048U, 0xf5f5f104U, + 0xbcbc63dfU, 0xb6b677c1U, 0xdadaaf75U, 0x21214263U, + 0x10102030U, 0xffffe51aU, 0xf3f3fd0eU, 0xd2d2bf6dU, + 0xcdcd814cU, 0x0c0c1814U, 0x13132635U, 0xececc32fU, + 0x5f5fbee1U, 0x979735a2U, 0x444488ccU, 0x17172e39U, + 0xc4c49357U, 0xa7a755f2U, 0x7e7efc82U, 0x3d3d7a47U, + 0x6464c8acU, 0x5d5dbae7U, 0x1919322bU, 0x7373e695U, + 0x6060c0a0U, 0x81811998U, 0x4f4f9ed1U, 0xdcdca37fU, + 0x22224466U, 0x2a2a547eU, 0x90903babU, 0x88880b83U, + 0x46468ccaU, 0xeeeec729U, 0xb8b86bd3U, 0x1414283cU, + 0xdedea779U, 0x5e5ebce2U, 0x0b0b161dU, 0xdbdbad76U, + 0xe0e0db3bU, 0x32326456U, 0x3a3a744eU, 0x0a0a141eU, + 0x494992dbU, 0x06060c0aU, 0x2424486cU, 0x5c5cb8e4U, + 0xc2c29f5dU, 0xd3d3bd6eU, 0xacac43efU, 0x6262c4a6U, + 0x919139a8U, 0x959531a4U, 0xe4e4d337U, 0x7979f28bU, + 0xe7e7d532U, 0xc8c88b43U, 0x37376e59U, 0x6d6ddab7U, + 0x8d8d018cU, 0xd5d5b164U, 0x4e4e9cd2U, 0xa9a949e0U, + 0x6c6cd8b4U, 0x5656acfaU, 0xf4f4f307U, 0xeaeacf25U, + 0x6565caafU, 0x7a7af48eU, 0xaeae47e9U, 0x08081018U, + 0xbaba6fd5U, 0x7878f088U, 0x25254a6fU, 0x2e2e5c72U, + 0x1c1c3824U, 0xa6a657f1U, 0xb4b473c7U, 0xc6c69751U, + 0xe8e8cb23U, 0xdddda17cU, 0x7474e89cU, 0x1f1f3e21U, + 0x4b4b96ddU, 0xbdbd61dcU, 0x8b8b0d86U, 0x8a8a0f85U, + 0x7070e090U, 0x3e3e7c42U, 0xb5b571c4U, 0x6666ccaaU, + 0x484890d8U, 0x03030605U, 0xf6f6f701U, 0x0e0e1c12U, + 0x6161c2a3U, 0x35356a5fU, 0x5757aef9U, 0xb9b969d0U, + 0x86861791U, 0xc1c19958U, 0x1d1d3a27U, 0x9e9e27b9U, + 0xe1e1d938U, 0xf8f8eb13U, 0x98982bb3U, 0x11112233U, + 0x6969d2bbU, 0xd9d9a970U, 0x8e8e0789U, 0x949433a7U, + 0x9b9b2db6U, 0x1e1e3c22U, 0x87871592U, 0xe9e9c920U, + 0xcece8749U, 0x5555aaffU, 0x28285078U, 0xdfdfa57aU, + 0x8c8c038fU, 0xa1a159f8U, 0x89890980U, 0x0d0d1a17U, + 0xbfbf65daU, 0xe6e6d731U, 0x424284c6U, 0x6868d0b8U, + 0x414182c3U, 0x999929b0U, 0x2d2d5a77U, 0x0f0f1e11U, + 0xb0b07bcbU, 0x5454a8fcU, 0xbbbb6dd6U, 0x16162c3aU, + 0x63c6a563U, 0x7cf8847cU, 0x77ee9977U, 0x7bf68d7bU, + 0xf2ff0df2U, 0x6bd6bd6bU, 0x6fdeb16fU, 0xc59154c5U, + 0x30605030U, 0x01020301U, 0x67cea967U, 0x2b567d2bU, + 0xfee719feU, 0xd7b562d7U, 0xab4de6abU, 0x76ec9a76U, + 0xca8f45caU, 0x821f9d82U, 0xc98940c9U, 0x7dfa877dU, + 0xfaef15faU, 0x59b2eb59U, 0x478ec947U, 0xf0fb0bf0U, + 0xad41ecadU, 0xd4b367d4U, 0xa25ffda2U, 0xaf45eaafU, + 0x9c23bf9cU, 0xa453f7a4U, 0x72e49672U, 0xc09b5bc0U, + 0xb775c2b7U, 0xfde11cfdU, 0x933dae93U, 0x264c6a26U, + 0x366c5a36U, 0x3f7e413fU, 0xf7f502f7U, 0xcc834fccU, + 0x34685c34U, 0xa551f4a5U, 0xe5d134e5U, 0xf1f908f1U, + 0x71e29371U, 0xd8ab73d8U, 0x31625331U, 0x152a3f15U, + 0x04080c04U, 0xc79552c7U, 0x23466523U, 0xc39d5ec3U, + 0x18302818U, 0x9637a196U, 0x050a0f05U, 0x9a2fb59aU, + 0x070e0907U, 0x12243612U, 0x801b9b80U, 0xe2df3de2U, + 0xebcd26ebU, 0x274e6927U, 0xb27fcdb2U, 0x75ea9f75U, + 0x09121b09U, 0x831d9e83U, 0x2c58742cU, 0x1a342e1aU, + 0x1b362d1bU, 0x6edcb26eU, 0x5ab4ee5aU, 0xa05bfba0U, + 0x52a4f652U, 0x3b764d3bU, 0xd6b761d6U, 0xb37dceb3U, + 0x29527b29U, 0xe3dd3ee3U, 0x2f5e712fU, 0x84139784U, + 0x53a6f553U, 0xd1b968d1U, 0x00000000U, 0xedc12cedU, + 0x20406020U, 0xfce31ffcU, 0xb179c8b1U, 0x5bb6ed5bU, + 0x6ad4be6aU, 0xcb8d46cbU, 0xbe67d9beU, 0x39724b39U, + 0x4a94de4aU, 0x4c98d44cU, 0x58b0e858U, 0xcf854acfU, + 0xd0bb6bd0U, 0xefc52aefU, 0xaa4fe5aaU, 0xfbed16fbU, + 0x4386c543U, 0x4d9ad74dU, 0x33665533U, 0x85119485U, + 0x458acf45U, 0xf9e910f9U, 0x02040602U, 0x7ffe817fU, + 0x50a0f050U, 0x3c78443cU, 0x9f25ba9fU, 0xa84be3a8U, + 0x51a2f351U, 0xa35dfea3U, 0x4080c040U, 0x8f058a8fU, + 0x923fad92U, 0x9d21bc9dU, 0x38704838U, 0xf5f104f5U, + 0xbc63dfbcU, 0xb677c1b6U, 0xdaaf75daU, 0x21426321U, + 0x10203010U, 0xffe51affU, 0xf3fd0ef3U, 0xd2bf6dd2U, + 0xcd814ccdU, 0x0c18140cU, 0x13263513U, 0xecc32fecU, + 0x5fbee15fU, 0x9735a297U, 0x4488cc44U, 0x172e3917U, + 0xc49357c4U, 0xa755f2a7U, 0x7efc827eU, 0x3d7a473dU, + 0x64c8ac64U, 0x5dbae75dU, 0x19322b19U, 0x73e69573U, + 0x60c0a060U, 0x81199881U, 0x4f9ed14fU, 0xdca37fdcU, + 0x22446622U, 0x2a547e2aU, 0x903bab90U, 0x880b8388U, + 0x468cca46U, 0xeec729eeU, 0xb86bd3b8U, 0x14283c14U, + 0xdea779deU, 0x5ebce25eU, 0x0b161d0bU, 0xdbad76dbU, + 0xe0db3be0U, 0x32645632U, 0x3a744e3aU, 0x0a141e0aU, + 0x4992db49U, 0x060c0a06U, 0x24486c24U, 0x5cb8e45cU, + 0xc29f5dc2U, 0xd3bd6ed3U, 0xac43efacU, 0x62c4a662U, + 0x9139a891U, 0x9531a495U, 0xe4d337e4U, 0x79f28b79U, + 0xe7d532e7U, 0xc88b43c8U, 0x376e5937U, 0x6ddab76dU, + 0x8d018c8dU, 0xd5b164d5U, 0x4e9cd24eU, 0xa949e0a9U, + 0x6cd8b46cU, 0x56acfa56U, 0xf4f307f4U, 0xeacf25eaU, + 0x65caaf65U, 0x7af48e7aU, 0xae47e9aeU, 0x08101808U, + 0xba6fd5baU, 0x78f08878U, 0x254a6f25U, 0x2e5c722eU, + 0x1c38241cU, 0xa657f1a6U, 0xb473c7b4U, 0xc69751c6U, + 0xe8cb23e8U, 0xdda17cddU, 0x74e89c74U, 0x1f3e211fU, + 0x4b96dd4bU, 0xbd61dcbdU, 0x8b0d868bU, 0x8a0f858aU, + 0x70e09070U, 0x3e7c423eU, 0xb571c4b5U, 0x66ccaa66U, + 0x4890d848U, 0x03060503U, 0xf6f701f6U, 0x0e1c120eU, + 0x61c2a361U, 0x356a5f35U, 0x57aef957U, 0xb969d0b9U, + 0x86179186U, 0xc19958c1U, 0x1d3a271dU, 0x9e27b99eU, + 0xe1d938e1U, 0xf8eb13f8U, 0x982bb398U, 0x11223311U, + 0x69d2bb69U, 0xd9a970d9U, 0x8e07898eU, 0x9433a794U, + 0x9b2db69bU, 0x1e3c221eU, 0x87159287U, 0xe9c920e9U, + 0xce8749ceU, 0x55aaff55U, 0x28507828U, 0xdfa57adfU, + 0x8c038f8cU, 0xa159f8a1U, 0x89098089U, 0x0d1a170dU, + 0xbf65dabfU, 0xe6d731e6U, 0x4284c642U, 0x68d0b868U, + 0x4182c341U, 0x9929b099U, 0x2d5a772dU, 0x0f1e110fU, + 0xb07bcbb0U, 0x54a8fc54U, 0xbb6dd6bbU, 0x162c3a16U, + 0xc6a56363U, 0xf8847c7cU, 0xee997777U, 0xf68d7b7bU, + 0xff0df2f2U, 0xd6bd6b6bU, 0xdeb16f6fU, 0x9154c5c5U, + 0x60503030U, 0x02030101U, 0xcea96767U, 0x567d2b2bU, + 0xe719fefeU, 0xb562d7d7U, 0x4de6ababU, 0xec9a7676U, + 0x8f45cacaU, 0x1f9d8282U, 0x8940c9c9U, 0xfa877d7dU, + 0xef15fafaU, 0xb2eb5959U, 0x8ec94747U, 0xfb0bf0f0U, + 0x41ecadadU, 0xb367d4d4U, 0x5ffda2a2U, 0x45eaafafU, + 0x23bf9c9cU, 0x53f7a4a4U, 0xe4967272U, 0x9b5bc0c0U, + 0x75c2b7b7U, 0xe11cfdfdU, 0x3dae9393U, 0x4c6a2626U, + 0x6c5a3636U, 0x7e413f3fU, 0xf502f7f7U, 0x834fccccU, + 0x685c3434U, 0x51f4a5a5U, 0xd134e5e5U, 0xf908f1f1U, + 0xe2937171U, 0xab73d8d8U, 0x62533131U, 0x2a3f1515U, + 0x080c0404U, 0x9552c7c7U, 0x46652323U, 0x9d5ec3c3U, + 0x30281818U, 0x37a19696U, 0x0a0f0505U, 0x2fb59a9aU, + 0x0e090707U, 0x24361212U, 0x1b9b8080U, 0xdf3de2e2U, + 0xcd26ebebU, 0x4e692727U, 0x7fcdb2b2U, 0xea9f7575U, + 0x121b0909U, 0x1d9e8383U, 0x58742c2cU, 0x342e1a1aU, + 0x362d1b1bU, 0xdcb26e6eU, 0xb4ee5a5aU, 0x5bfba0a0U, + 0xa4f65252U, 0x764d3b3bU, 0xb761d6d6U, 0x7dceb3b3U, + 0x527b2929U, 0xdd3ee3e3U, 0x5e712f2fU, 0x13978484U, + 0xa6f55353U, 0xb968d1d1U, 0x00000000U, 0xc12cededU, + 0x40602020U, 0xe31ffcfcU, 0x79c8b1b1U, 0xb6ed5b5bU, + 0xd4be6a6aU, 0x8d46cbcbU, 0x67d9bebeU, 0x724b3939U, + 0x94de4a4aU, 0x98d44c4cU, 0xb0e85858U, 0x854acfcfU, + 0xbb6bd0d0U, 0xc52aefefU, 0x4fe5aaaaU, 0xed16fbfbU, + 0x86c54343U, 0x9ad74d4dU, 0x66553333U, 0x11948585U, + 0x8acf4545U, 0xe910f9f9U, 0x04060202U, 0xfe817f7fU, + 0xa0f05050U, 0x78443c3cU, 0x25ba9f9fU, 0x4be3a8a8U, + 0xa2f35151U, 0x5dfea3a3U, 0x80c04040U, 0x058a8f8fU, + 0x3fad9292U, 0x21bc9d9dU, 0x70483838U, 0xf104f5f5U, + 0x63dfbcbcU, 0x77c1b6b6U, 0xaf75dadaU, 0x42632121U, + 0x20301010U, 0xe51affffU, 0xfd0ef3f3U, 0xbf6dd2d2U, + 0x814ccdcdU, 0x18140c0cU, 0x26351313U, 0xc32fececU, + 0xbee15f5fU, 0x35a29797U, 0x88cc4444U, 0x2e391717U, + 0x9357c4c4U, 0x55f2a7a7U, 0xfc827e7eU, 0x7a473d3dU, + 0xc8ac6464U, 0xbae75d5dU, 0x322b1919U, 0xe6957373U, + 0xc0a06060U, 0x19988181U, 0x9ed14f4fU, 0xa37fdcdcU, + 0x44662222U, 0x547e2a2aU, 0x3bab9090U, 0x0b838888U, + 0x8cca4646U, 0xc729eeeeU, 0x6bd3b8b8U, 0x283c1414U, + 0xa779dedeU, 0xbce25e5eU, 0x161d0b0bU, 0xad76dbdbU, + 0xdb3be0e0U, 0x64563232U, 0x744e3a3aU, 0x141e0a0aU, + 0x92db4949U, 0x0c0a0606U, 0x486c2424U, 0xb8e45c5cU, + 0x9f5dc2c2U, 0xbd6ed3d3U, 0x43efacacU, 0xc4a66262U, + 0x39a89191U, 0x31a49595U, 0xd337e4e4U, 0xf28b7979U, + 0xd532e7e7U, 0x8b43c8c8U, 0x6e593737U, 0xdab76d6dU, + 0x018c8d8dU, 0xb164d5d5U, 0x9cd24e4eU, 0x49e0a9a9U, + 0xd8b46c6cU, 0xacfa5656U, 0xf307f4f4U, 0xcf25eaeaU, + 0xcaaf6565U, 0xf48e7a7aU, 0x47e9aeaeU, 0x10180808U, + 0x6fd5babaU, 0xf0887878U, 0x4a6f2525U, 0x5c722e2eU, + 0x38241c1cU, 0x57f1a6a6U, 0x73c7b4b4U, 0x9751c6c6U, + 0xcb23e8e8U, 0xa17cddddU, 0xe89c7474U, 0x3e211f1fU, + 0x96dd4b4bU, 0x61dcbdbdU, 0x0d868b8bU, 0x0f858a8aU, + 0xe0907070U, 0x7c423e3eU, 0x71c4b5b5U, 0xccaa6666U, + 0x90d84848U, 0x06050303U, 0xf701f6f6U, 0x1c120e0eU, + 0xc2a36161U, 0x6a5f3535U, 0xaef95757U, 0x69d0b9b9U, + 0x17918686U, 0x9958c1c1U, 0x3a271d1dU, 0x27b99e9eU, + 0xd938e1e1U, 0xeb13f8f8U, 0x2bb39898U, 0x22331111U, + 0xd2bb6969U, 0xa970d9d9U, 0x07898e8eU, 0x33a79494U, + 0x2db69b9bU, 0x3c221e1eU, 0x15928787U, 0xc920e9e9U, + 0x8749ceceU, 0xaaff5555U, 0x50782828U, 0xa57adfdfU, + 0x038f8c8cU, 0x59f8a1a1U, 0x09808989U, 0x1a170d0dU, + 0x65dabfbfU, 0xd731e6e6U, 0x84c64242U, 0xd0b86868U, + 0x82c34141U, 0x29b09999U, 0x5a772d2dU, 0x1e110f0fU, + 0x7bcbb0b0U, 0xa8fc5454U, 0x6dd6bbbbU, 0x2c3a1616U}; + +#define t_fn32(x) (sharedMemory[(x) * 32]) #define t_fn0(x) (sharedMemory[(x)]) #define t_fn1(x) (sharedMemory[256 + (x)]) #define t_fn2(x) (sharedMemory[512 + (x)]) #define t_fn3(x) (sharedMemory[768 + (x)]) -#define round(dummy, y, x, k) \ - y[0] = (k)[0] ^ (t_fn0(x[0] & 0xff) ^ t_fn1((x[1] >> 8) & 0xff) ^ t_fn2((x[2] >> 16) & 0xff) ^ t_fn3((x[3] >> 24))); \ - y[1] = (k)[1] ^ (t_fn0(x[1] & 0xff) ^ t_fn1((x[2] >> 8) & 0xff) ^ t_fn2((x[3] >> 16) & 0xff) ^ t_fn3((x[0] >> 24))); \ - y[2] = (k)[2] ^ (t_fn0(x[2] & 0xff) ^ t_fn1((x[3] >> 8) & 0xff) ^ t_fn2((x[0] >> 16) & 0xff) ^ t_fn3((x[1] >> 24))); \ - y[3] = (k)[3] ^ (t_fn0(x[3] & 0xff) ^ t_fn1((x[0] >> 8) & 0xff) ^ t_fn2((x[1] >> 16) & 0xff) ^ t_fn3((x[2] >> 24))); +#define round(dummy, y, x, k) \ + y[0] = (k)[0] ^ t_fn0(BYTE_0(x[0])) ^ t_fn1(BYTE_1(x[1])) ^ t_fn2(BYTE_2(x[2])) ^ t_fn3(BYTE_3(x[3])); \ + y[1] = (k)[1] ^ t_fn0(BYTE_0(x[1])) ^ t_fn1(BYTE_1(x[2])) ^ t_fn2(BYTE_2(x[3])) ^ t_fn3(BYTE_3(x[0])); \ + y[2] = (k)[2] ^ t_fn0(BYTE_0(x[2])) ^ t_fn1(BYTE_1(x[3])) ^ t_fn2(BYTE_2(x[0])) ^ t_fn3(BYTE_3(x[1])); \ + y[3] = (k)[3] ^ t_fn0(BYTE_0(x[3])) ^ t_fn1(BYTE_1(x[0])) ^ t_fn2(BYTE_2(x[1])) ^ t_fn3(BYTE_3(x[2])); + + +__device__ __forceinline__ static uint4 round32(const uint32_t* __restrict__ sharedMemory, const uint4& b, uint4 a) +{ \ + a.x ^= t_fn32(BYTE_0(b.x)); + a.y ^= t_fn32(BYTE_0(b.y)); + a.z ^= t_fn32(BYTE_0(b.z)); + a.w ^= t_fn32(BYTE_0(b.w)); + a.x ^= ROTL32_8(t_fn32(BYTE_1(b.y))); + a.y ^= ROTL32_8(t_fn32(BYTE_1(b.z))); + a.z ^= ROTL32_8(t_fn32(BYTE_1(b.w))); + a.w ^= ROTL32_8(t_fn32(BYTE_1(b.x))); + a.x ^= ROTL32_16(t_fn32(BYTE_2(b.z))) ^ ROTL32_24(t_fn32(BYTE_3(b.w))); + a.y ^= ROTL32_16(t_fn32(BYTE_2(b.w))) ^ ROTL32_24(t_fn32(BYTE_3(b.x))); + a.z ^= ROTL32_16(t_fn32(BYTE_2(b.x))) ^ ROTL32_24(t_fn32(BYTE_3(b.y))); + a.w ^= ROTL32_16(t_fn32(BYTE_2(b.y))) ^ ROTL32_24(t_fn32(BYTE_3(b.z))); + return a; +} __device__ __forceinline__ static void cn_aes_single_round(uint32_t* __restrict__ sharedMemory, const uint32_t* __restrict__ in, uint32_t* __restrict__ out, const uint32_t* __restrict__ expandedKey) { @@ -296,12 +578,33 @@ __device__ __forceinline__ static void cn_aes_pseudo_round_mut(const uint32_t* _ round(sharedMemory, val, b1, expandedKey + 9 * N_COLS); } +__device__ __forceinline__ static uint4 cn_aes_pseudo_round_mut32(const uint32_t* __restrict__ sharedMemory, uint4 val, const uint4* __restrict__ expandedKey) +{ + uint4 b1 = round32(sharedMemory, val, *expandedKey); + val = round32(sharedMemory, b1, expandedKey[1]); + b1 = round32(sharedMemory, val, expandedKey[2]); + val = round32(sharedMemory, b1, expandedKey[3]); + b1 = round32(sharedMemory, val, expandedKey[4]); + val = round32(sharedMemory, b1, expandedKey[5]); + b1 = round32(sharedMemory, val, expandedKey[6]); + val = round32(sharedMemory, b1, expandedKey[7]); + b1 = round32(sharedMemory, val, expandedKey[8]); + val = round32(sharedMemory, b1, expandedKey[9]); + return val; +} + __device__ __forceinline__ static void cn_aes_gpu_init(uint32_t* sharedMemory) { for(int i = threadIdx.x; i < 1024; i += blockDim.x) sharedMemory[i] = d_t_fn[i]; } +__device__ __forceinline__ static void cn_aes_gpu_init32(uint32_t* sharedMemory) +{ + for(int i = threadIdx.x; i < 256 * 32; i += blockDim.x) + sharedMemory[i] = d_t_fn256[i]; +} + __device__ __forceinline__ static void cn_aes_gpu_init_half(uint32_t* sharedMemory) { for(int i = threadIdx.x; i < 512; i += blockDim.x) diff --git a/xmrstak/backend/nvidia/nvcc_code/cuda_core.cu b/xmrstak/backend/nvidia/nvcc_code/cuda_core.cu index 7f610f9dc..b3c0bc004 100644 --- a/xmrstak/backend/nvidia/nvcc_code/cuda_core.cu +++ b/xmrstak/backend/nvidia/nvcc_code/cuda_core.cu @@ -79,63 +79,6 @@ __device__ __forceinline__ uint64_t cuda_mul128(uint64_t multiplier, uint64_t mu return (multiplier * multiplicand); } -template -__device__ __forceinline__ T loadGlobal64(T* const addr) -{ -#if(__CUDA_ARCH__ < 700) - T x; - asm volatile("ld.global.cg.u64 %0, [%1];" - : "=l"(x) - : "l"(addr)); - return x; -#else - return *addr; -#endif -} - -template -__device__ __forceinline__ T loadGlobal32(T* const addr) -{ -#if(__CUDA_ARCH__ < 700) - T x; - asm volatile("ld.global.cg.u32 %0, [%1];" - : "=r"(x) - : "l"(addr)); - return x; -#else - return *addr; -#endif -} - -template -__device__ __forceinline__ void storeGlobal32(T* addr, T const& val) -{ -#if(__CUDA_ARCH__ < 700) - asm volatile("st.global.cg.u32 [%0], %1;" - : - : "l"(addr), "r"(val)); -#else - *addr = val; -#endif -} - -template -__device__ __forceinline__ void storeGlobal64(T* addr, T const& val) -{ -#if(__CUDA_ARCH__ < 700) - asm volatile("st.global.cg.u64 [%0], %1;" - : - : "l"(addr), "l"(val)); -#else - *addr = val; -#endif -} - -__device__ __forceinline__ uint32_t rotate16(const uint32_t n) -{ - return (n >> 16u) | (n << 16u); -} - __global__ void cryptonight_core_gpu_phase1( const uint32_t ITERATIONS, const size_t MEMORY, int threads, int bfactor, int partidx, uint32_t* __restrict__ long_state, uint32_t* __restrict__ ctx_state2, uint32_t* __restrict__ ctx_key1) @@ -358,8 +301,8 @@ __launch_bounds__(XMR_STAK_THREADS * 2) const u64 cx2 = myChunks[idx1 + ((sub + 1) & 1)]; u64 cx_aes = ax0 ^ u64( - t_fn0(cx.x & 0xff) ^ t_fn1((cx.y >> 8) & 0xff) ^ rotate16(t_fn0((cx2.x >> 16) & 0xff) ^ t_fn1((cx2.y >> 24))), - t_fn0(cx.y & 0xff) ^ t_fn1((cx2.x >> 8) & 0xff) ^ rotate16(t_fn0((cx2.y >> 16) & 0xff) ^ t_fn1((cx.x >> 24)))); + t_fn0(BYTE_0(cx.x)) ^ t_fn1(BYTE_1(cx.y)) ^ ROTL32_16(t_fn0(BYTE_2(cx2.x)) ^ t_fn1(BYTE_3(cx2.y >> 24))), + t_fn0(BYTE_0(cx.y)) ^ t_fn1(BYTE_1(cx2.x)) ^ ROTL32_16(t_fn0(BYTE_2(cx2.y)) ^ t_fn1(BYTE_3(cx.x >> 24)))); if(ALGO == cryptonight_monero_v8) { @@ -614,10 +557,10 @@ __launch_bounds__(XMR_STAK_THREADS * 4) if(i == sub) { d[x] = a ^ - t_fn0(k[0] & 0xff) ^ - t_fn1((k[1] >> 8) & 0xff) ^ - t_fn2((k[2] >> 16) & 0xff) ^ - t_fn3((k[3] >> 24)); + t_fn0(BYTE_0(k[0])) ^ + t_fn1(BYTE_1(k[1])) ^ + t_fn2(BYTE_2(k[2])) ^ + t_fn3(BYTE_3(k[3])); } // the last shuffle is not needed if(i != 3) @@ -652,10 +595,10 @@ __launch_bounds__(XMR_STAK_THREADS * 4) const uint32_t x_2 = shuffle<4>(sPtr, sub, x_0, sub + 2); const uint32_t x_3 = shuffle<4>(sPtr, sub, x_0, sub + 3); d[x] = a ^ - t_fn0(x_0 & 0xff) ^ - t_fn1((x_1 >> 8) & 0xff) ^ - t_fn2((x_2 >> 16) & 0xff) ^ - t_fn3((x_3 >> 24)); + t_fn0(BYTE_0(x_0)) ^ + t_fn1(BYTE_1(x_1)) ^ + t_fn2(BYTE_2(x_2)) ^ + t_fn3(BYTE_3(x_3)); } //XOR_BLOCKS_DST(c, b, &long_state[j]); @@ -757,11 +700,16 @@ __launch_bounds__(XMR_STAK_THREADS * 4) template __global__ void cryptonight_core_gpu_phase3( const uint32_t ITERATIONS, const size_t MEMORY, - int threads, int bfactor, int partidx, const uint32_t* __restrict__ long_state, uint32_t* __restrict__ d_ctx_state, uint32_t* __restrict__ d_ctx_key2) + int threads, int bfactor, int partidx, uint32_t* long_stateIn, const uint32_t* const __restrict__ d_ctx_stateIn, uint32_t* __restrict__ d_ctx_key2) { - __shared__ uint32_t sharedMemory[1024]; + __shared__ uint32_t sharedMemoryX[256 * 32]; - cn_aes_gpu_init(sharedMemory); + /* avoid that the compiler is later in the aes round optimizing `sharedMemory[ x * 32 ]` to `sharedMemoryX + x * 32 + twidx`*/ + const int twidx = (threadIdx.x * 4) % 128; + // this is equivalent to `(uint32_t*)sharedMemoryX + twidx;` where `twidx` is [0;32) + char* sharedMemory = (char*)sharedMemoryX + twidx; + + cn_aes_gpu_init32(sharedMemoryX); __syncthreads(); int thread = (blockDim.x * blockIdx.x + threadIdx.x) >> 3; @@ -775,9 +723,17 @@ __global__ void cryptonight_core_gpu_phase3( if(thread >= threads) return; + const uint32_t* const long_state = long_stateIn + ((IndexType)thread * MEMORY) + sub; + uint32_t key[40], text[4]; - MEMCPY8(key, d_ctx_key2 + thread * 40, 20); - MEMCPY8(text, d_ctx_state + thread * 50 + sub + 16, 2); + #pragma unroll 10 + for(int j = 0; j < 10; ++j) + ((ulonglong4*)key)[j] = ((ulonglong4*)(d_ctx_key2 + thread * 40))[j]; + + uint64_t* d_ctx_state = (uint64_t*)(d_ctx_stateIn + thread * 50 + sub + 16); + #pragma unroll 2 + for(int j = 0; j < 2; ++j) + ((uint64_t*)text)[j] = loadGlobal64(d_ctx_state + j); __syncthreads(); @@ -790,22 +746,30 @@ __global__ void cryptonight_core_gpu_phase3( for(int i = start; i < end; i += 32) { -#pragma unroll + uint32_t tmp[4]; + ((ulonglong2*)(tmp))[0] = ((ulonglong2*)(long_state + i))[0]; + #pragma unroll 4 for(int j = 0; j < 4; ++j) - text[j] ^= long_state[((IndexType)thread * MEMORY) + (sub + i + j)]; + text[j] ^= tmp[j]; - cn_aes_pseudo_round_mut(sharedMemory, text, key); + ((uint4*)text)[0] = cn_aes_pseudo_round_mut32((uint32_t*)sharedMemory, ((uint4*)text)[0], (uint4*)key); if(ALGO == cryptonight_gpu || ALGO == cryptonight_heavy || ALGO == cryptonight_haven || ALGO == cryptonight_bittube2 || ALGO == cryptonight_superfast) { -#pragma unroll + uint32_t tmp[4]; + #pragma unroll 4 + for(int j = 0; j < 4; ++j) + tmp[j] = shuffle<8>(sPtr, subv, text[j], (subv + 1) & 7); + #pragma unroll 4 for(int j = 0; j < 4; ++j) - text[j] ^= shuffle<8>(sPtr, subv, text[j], (subv + 1) & 7); + text[j] ^= tmp[j]; } } - MEMCPY8(d_ctx_state + thread * 50 + sub + 16, text, 2); + #pragma unroll 2 + for(int j = 0; j < 2; ++j) + storeGlobal64(d_ctx_state + j, ((uint64_t*)text)[j]); } template @@ -934,9 +898,9 @@ void cryptonight_core_gpu_hash(nvid_ctx* ctx, uint32_t nonce, const xmrstak_algo for(int i = 0; i < roundsPhase3; i++) { CUDA_CHECK_KERNEL(ctx->device_id, cryptonight_core_gpu_phase3<<< - grid, - block8, - block8.x * sizeof(uint32_t) * static_cast(ctx->device_arch[0] < 3)>>>( + (grid.x + 1) / 2, + block8.x * 2, + 2 * block8.x * sizeof(uint32_t) * static_cast(ctx->device_arch[0] < 3)>>>( ITERATIONS, MEM, ctx->device_blocks * ctx->device_threads, @@ -963,7 +927,7 @@ void cryptonight_core_gpu_hash_gpu(nvid_ctx* ctx, uint32_t nonce, const xmrstak_ CUDA_CHECK_KERNEL( ctx->device_id, - xmrstak::nvidia::cn_explode_gpu<<>>(MEM, (int*)ctx->d_ctx_state, (int*)ctx->d_long_state)); + xmrstak::nvidia::cn_explode_gpu<<>>(MEM, (int*)ctx->d_ctx_state, (int*)ctx->d_long_state)); int partcount = 1 << ctx->device_bfactor; for(int i = 0; i < partcount; i++) @@ -971,7 +935,7 @@ void cryptonight_core_gpu_hash_gpu(nvid_ctx* ctx, uint32_t nonce, const xmrstak_ CUDA_CHECK_KERNEL( ctx->device_id, // 36 x 16byte x numThreads - xmrstak::nvidia::cryptonight_core_gpu_phase2_gpu<<device_blocks, ctx->device_threads * 16, 32 * 16 * ctx->device_threads>>>( + xmrstak::nvidia::cryptonight_core_gpu_phase2_gpu<<device_blocks, ctx->device_threads * 16, 33 * 16 * ctx->device_threads>>>( ITERATIONS, MEM, MASK, @@ -986,9 +950,9 @@ void cryptonight_core_gpu_hash_gpu(nvid_ctx* ctx, uint32_t nonce, const xmrstak_ /* bfactor for phase 3 * * 3 consume less time than phase 2, therefore we begin with the - * kernel splitting if the user defined a `bfactor >= 5` + * kernel splitting if the user defined a `bfactor >= 8` */ - int bfactorOneThree = ctx->device_bfactor - 4; + int bfactorOneThree = ctx->device_bfactor - 8; if(bfactorOneThree < 0) bfactorOneThree = 0; @@ -1005,9 +969,9 @@ void cryptonight_core_gpu_hash_gpu(nvid_ctx* ctx, uint32_t nonce, const xmrstak_ for(int i = 0; i < roundsPhase3; i++) { CUDA_CHECK_KERNEL(ctx->device_id, cryptonight_core_gpu_phase3<<< - grid, - block8, - block8.x * sizeof(uint32_t) * static_cast(ctx->device_arch[0] < 3)>>>( + (grid.x + 1) / 2, + block8.x * 2 , + 2 * block8.x * sizeof(uint32_t) * static_cast(ctx->device_arch[0] < 3)>>>( ITERATIONS, MEM / 4, ctx->device_blocks * ctx->device_threads, diff --git a/xmrstak/backend/nvidia/nvcc_code/cuda_cryptonight_gpu.hpp b/xmrstak/backend/nvidia/nvcc_code/cuda_cryptonight_gpu.hpp index a66804ecf..516d4ca00 100644 --- a/xmrstak/backend/nvidia/nvcc_code/cuda_cryptonight_gpu.hpp +++ b/xmrstak/backend/nvidia/nvcc_code/cuda_cryptonight_gpu.hpp @@ -7,6 +7,58 @@ #include "cuda_extra.hpp" #include "cuda_keccak.hpp" +template +__device__ __forceinline__ T loadGlobal64(T* const addr) +{ +#if(__CUDA_ARCH__ < 700) + T x; + asm volatile("ld.global.cg.u64 %0, [%1];" + : "=l"(x) + : "l"(addr)); + return x; +#else + return *addr; +#endif +} + +template +__device__ __forceinline__ T loadGlobal32(T* const addr) +{ +#if(__CUDA_ARCH__ < 700) + T x; + asm volatile("ld.global.cg.u32 %0, [%1];" + : "=r"(x) + : "l"(addr)); + return x; +#else + return *addr; +#endif +} + +template +__device__ __forceinline__ void storeGlobal32(T* addr, T const& val) +{ +#if(__CUDA_ARCH__ < 700) + asm volatile("st.global.cg.u32 [%0], %1;" + : + : "l"(addr), "r"(val)); +#else + *addr = val; +#endif +} + +template +__device__ __forceinline__ void storeGlobal64(T* addr, T const& val) +{ +#if(__CUDA_ARCH__ < 700) + asm volatile("st.global.cg.u64 [%0], %1;" + : + : "l"(addr), "l"(val)); +#else + *addr = val; +#endif +} + namespace xmrstak { namespace nvidia @@ -394,9 +446,10 @@ __forceinline__ __device__ void sync() struct SharedMemChunk { __m128i out[16]; - __m128 va[16]; + __m128 va[17]; }; +__launch_bounds__(128, 8) __global__ void cryptonight_core_gpu_phase2_gpu( const uint32_t ITERATIONS, const size_t MEMORY, const uint32_t MASK, int32_t* spad, int* lpad_in, int bfactor, int partidx, uint32_t* roundVs, uint32_t* roundS) @@ -435,10 +488,10 @@ __global__ void cryptonight_core_gpu_phase2_gpu( const uint32_t tidm = tid % 4; const uint32_t block = tidd * 16 + tidm; - for(size_t i = 0; i < batchsize; i++) + for(int i = 0; i < batchsize; i++) { sync(); - int tmp = ((int*)scratchpad_ptr(s, tidd, lpad, MASK))[tidm]; + int tmp = loadGlobal32( ((int*)scratchpad_ptr(s, tidd, lpad, MASK)) + tidm ); ((int*)smem->out)[tid] = tmp; sync(); @@ -458,7 +511,7 @@ __global__ void cryptonight_core_gpu_phase2_gpu( for(uint32_t dd = block + 4; dd < (tidd + 1) * 16; dd += 4) outXor ^= ((int*)smem->out)[dd]; - ((int*)scratchpad_ptr(s, tidd, lpad, MASK))[tidm] = outXor ^ tmp; + storeGlobal32( ((int*)scratchpad_ptr(s, tidd, lpad, MASK)) + tidm, outXor ^ tmp ); ((int*)smem->out)[tid] = outXor; float va_tmp1 = ((float*)smem->va)[block] + ((float*)smem->va)[block + 4]; @@ -528,9 +581,12 @@ __global__ void cn_explode_gpu(const size_t MEMORY, int32_t* spad_in, int* lpad_ uint64_t* spad = (uint64_t*)((uint8_t*)spad_in + blockIdx.x * 200); for(int i = threadIdx.x; i < 25; i += blockDim.x) - state[i] = spad[i]; + state[i] = loadGlobal64(spad + i); - sync(); + if(blockDim.x > 32) + __syncthreads(); + else + sync(); for(uint64_t i = threadIdx.x; i < MEMORY / 512; i += blockDim.x) { diff --git a/xmrstak/backend/nvidia/nvcc_code/cuda_extra.hpp b/xmrstak/backend/nvidia/nvcc_code/cuda_extra.hpp index 09cdd6646..ec7e3e0a4 100644 --- a/xmrstak/backend/nvidia/nvcc_code/cuda_extra.hpp +++ b/xmrstak/backend/nvidia/nvcc_code/cuda_extra.hpp @@ -2,24 +2,6 @@ #include "xmrstak/backend/cryptonight.hpp" -#ifdef __INTELLISENSE__ -#define __CUDA_ARCH__ 520 -/* avoid red underlining */ - -struct uint3 -{ - unsigned int x, y, z; -}; - -struct uint3 threadIdx; -struct uint3 blockIdx; -struct uint3 blockDim; -#define __funnelshift_r(a, b, c) 1 -#define __syncthreads() -#define asm(x) -#define __shfl(a, b, c) 1 -#endif - #define AES_BLOCK_SIZE 16 #define AES_KEY_SIZE 32 #define INIT_SIZE_BLK 8 @@ -52,9 +34,10 @@ __forceinline__ __device__ uint64_t cuda_ROTL64(const uint64_t value, const int } return __double_as_longlong(__hiloint2double(result.y, result.x)); } -#define ROTL64(x, n) (cuda_ROTL64(x, n)) + +# define ROTL64(x, n) (cuda_ROTL64(x, n)) #else -#define ROTL64(x, n) (((x) << (n)) | ((x) >> (64 - (n)))) +# define ROTL64(x, n) (((x) << (n)) | ((x) >> (64 - (n)))) #endif #if __CUDA_ARCH__ < 350 @@ -65,6 +48,26 @@ __forceinline__ __device__ uint64_t cuda_ROTL64(const uint64_t value, const int #define ROTR32(x, n) __funnelshift_r((x), (x), (n)) #endif +#if __CUDA_ARCH__ >= 500 +# define BYTE_0(x) __byte_perm(x, 0u, 0x4440) +# define BYTE_1(x) __byte_perm(x, 0u, 0x4441) +# define BYTE_2(x) __byte_perm(x, 0u, 0x4442) +# define BYTE_3(x) __byte_perm(x, 0u, 0x4443) + +# define ROTL32_8(x) __byte_perm(x, x, 0x2103) +# define ROTL32_16(x) __byte_perm(x, x, 0x1032) +# define ROTL32_24(x) __byte_perm(x, x, 0x0321) +#else +# define BYTE_0(x) (((x) ) & 0xff) +# define BYTE_1(x) (((x) >> 8) & 0xff) +# define BYTE_2(x) (((x) >> 16) & 0xff) +# define BYTE_3(x) (((x) >> 24)) + +# define ROTL32_8(x) ROTL32(x, 8) +# define ROTL32_16(x) ROTL32(x, 16) +# define ROTL32_24(x) ROTL32(x, 24) +#endif + #define MEMSET8(dst, what, cnt) \ { \ int i_memset8; \ diff --git a/xmrstak/backend/nvidia/nvcc_code/cuda_keccak.hpp b/xmrstak/backend/nvidia/nvcc_code/cuda_keccak.hpp index 0fe277bd5..5bbc787e3 100644 --- a/xmrstak/backend/nvidia/nvcc_code/cuda_keccak.hpp +++ b/xmrstak/backend/nvidia/nvcc_code/cuda_keccak.hpp @@ -18,42 +18,50 @@ const 0x8000000000008080, 0x0000000080000001, 0x8000000080008008}; #if __CUDA_ARCH__ >= 350 -__forceinline__ __device__ uint64_t cuda_rotl64(const uint64_t value, const int offset) +/** @param offset must be < 32 + */ +__forceinline__ __device__ uint64_t cuda_rotl64(const uint32_t v0, const uint32_t v1, const int offset) { uint2 result; - if(offset >= 32) - { - asm("shf.l.wrap.b32 %0, %1, %2, %3;" - : "=r"(result.x) - : "r"(__double2loint(__longlong_as_double(value))), "r"(__double2hiint(__longlong_as_double(value))), "r"(offset)); - asm("shf.l.wrap.b32 %0, %1, %2, %3;" - : "=r"(result.y) - : "r"(__double2hiint(__longlong_as_double(value))), "r"(__double2loint(__longlong_as_double(value))), "r"(offset)); - } - else - { - asm("shf.l.wrap.b32 %0, %1, %2, %3;" - : "=r"(result.x) - : "r"(__double2hiint(__longlong_as_double(value))), "r"(__double2loint(__longlong_as_double(value))), "r"(offset)); - asm("shf.l.wrap.b32 %0, %1, %2, %3;" - : "=r"(result.y) - : "r"(__double2loint(__longlong_as_double(value))), "r"(__double2hiint(__longlong_as_double(value))), "r"(offset)); - } - return __double_as_longlong(__hiloint2double(result.y, result.x)); + + asm("shf.l.wrap.b32 %0, %1, %2, %3;" + : "=r"(result.y) + : "r"(v0), "r"(v1), "r"(offset)); + asm("shf.l.wrap.b32 %0, %1, %2, %3;" + : "=r"(result.x) + : "r"(v1), "r"(v0), "r"(offset)); + + return *((uint64_t*)&result); +} +__device__ __forceinline__ uint64_t rotl64_1(const uint64_t x, const int y) +{ + return cuda_rotl64(((uint32_t*)&x)[0], ((uint32_t*)&x)[1], (y)); +} + +__device__ __forceinline__ uint64_t rotl64_2(const uint64_t x, const int y) +{ + return cuda_rotl64(((uint32_t*)&x)[1], ((uint32_t*)&x)[0], (y)); } -#define rotl64_1(x, y) (cuda_rotl64((x), (y))) + #else + #define rotl64_1(x, y) ((x) << (y) | ((x) >> (64 - (y)))) +__device__ __forceinline__ uint64_t rotl64_2(const uint64_t x, const int y) +{ + uint64_t tmp; + ((uint32_t*)&tmp)[0] = ((uint32_t*)&x)[1]; + ((uint32_t*)&tmp)[1] = ((uint32_t*)&x)[0]; + + return rotl64_1(tmp, (y)); +} #endif -#define rotl64_2(x, y) rotl64_1(((x) >> 32) | ((x) << 32), (y)) + #define bitselect(a, b, c) ((a) ^ ((c) & ((b) ^ (a)))) __device__ __forceinline__ void cn_keccakf2(uint64_t* s) { - uint8_t i; - - for(i = 0; i < 24; ++i) + for(int16_t i = 0; i < 24; ++i) { uint64_t bc[5], tmpxor[5], tmp1, tmp2; diff --git a/xmrstak/cli/cli-miner.cpp b/xmrstak/cli/cli-miner.cpp index cc4b1b3d9..7d358edb3 100644 --- a/xmrstak/cli/cli-miner.cpp +++ b/xmrstak/cli/cli-miner.cpp @@ -80,6 +80,7 @@ void help() #endif #ifndef CONF_NO_OPENCL cout << " --noAMD disable the AMD miner backend" << endl; + cout << " --amdGpus GPUS indices of AMD GPUs to use. Example: 0,2,3" << endl; cout << " --noAMDCache disable the AMD(OpenCL) cache for precompiled binaries" << endl; cout << " --openCLVendor VENDOR use OpenCL driver of VENDOR and devices [AMD,NVIDIA]" << endl; cout << " default: AMD" << endl; @@ -88,8 +89,11 @@ void help() #endif #ifndef CONF_NO_CUDA cout << " --noNVIDIA disable the NVIDIA miner backend" << endl; + cout << " --nvidiaGpus GPUS indices of NVIDIA GPUs to use. Example: 0,2,3" << endl; cout << " --nvidia FILE NVIDIA backend miner config file" << endl; #endif + cout << " --log FILE miner output file" << endl; + cout << " --h-print-time SEC interval for printing hashrate, in seconds" << endl; #ifndef CONF_NO_HTTPD cout << " -i --httpd HTTP_PORT HTTP interface port" << endl; #endif @@ -388,6 +392,8 @@ void do_guided_config() } configTpl.replace("HTTP_PORT", std::to_string(http_port)); + configTpl.replace("OUTPUT_FILE", params::inst().outputFile); + configTpl.replace("H_PRINT_TIME", std::to_string(params::inst().h_print_time > 0 ? params::inst().h_print_time : 300)); configTpl.write(params::inst().configFile); std::cout << "Configuration stored in file '" << params::inst().configFile << "'" << std::endl; } @@ -469,6 +475,17 @@ int main(int argc, char* argv[]) { params::inst().useAMD = false; } + else if (opName.compare("--amdGpus") == 0) + { + ++i; + if (i >= argc) + { + printer::inst()->print_msg(L0, "No argument for parameter '--amdGpus' given"); + win_exit(); + return 1; + } + params::inst().amdGpus = argv[i]; + } else if(opName.compare("--openCLVendor") == 0) { ++i; @@ -495,6 +512,17 @@ int main(int argc, char* argv[]) { params::inst().useNVIDIA = false; } + else if (opName.compare("--nvidiaGpus") == 0) + { + ++i; + if (i >= argc) + { + printer::inst()->print_msg(L0, "No argument for parameter '--nvidiaGpus' given"); + win_exit(); + return 1; + } + params::inst().nvidiaGpus = argv[i]; + } else if(opName.compare("--cpu") == 0) { ++i; @@ -657,6 +685,36 @@ int main(int argc, char* argv[]) } params::inst().configFilePools = argv[i]; } + else if(opName.compare("--log") == 0) + { + ++i; + if(i >= argc) + { + printer::inst()->print_msg(L0, "No argument for parameter '--log' given"); + win_exit(); + return 1; + } + params::inst().outputFile = argv[i]; + } + else if (opName.compare("--h-print-time") == 0) + { + ++i; + if (i >= argc) + { + printer::inst()->print_msg(L0, "No argument for parameter '--h-print-time' given"); + win_exit(); + return 1; + } + char* h_print_time = nullptr; + long int time = strtol(argv[i], &h_print_time, 10); + + if (time <= 0) + { + printer::inst()->print_msg(L0, "Hashrate print time must be > 0"); + return 1; + } + params::inst().h_print_time = time; + } else if(opName.compare("-i") == 0 || opName.compare("--httpd") == 0) { ++i; @@ -894,7 +952,7 @@ int do_benchmark(int block_version, int wait_sec, int work_sec) /* AMD and NVIDIA is currently only supporting work sizes up to 128byte */ printer::inst()->print_msg(L0, "Start a %d second benchmark...", work_sec); - xmrstak::globalStates::inst().switch_work(xmrstak::miner_work("", work, 128, 0, false, 0, 0), dat); + xmrstak::globalStates::inst().switch_work(xmrstak::miner_work("", work, 128, 0, false, 1, 0), dat); uint64_t iStartStamp = get_timestamp_ms(); std::this_thread::sleep_for(std::chrono::seconds(work_sec)); diff --git a/xmrstak/config.tpl b/xmrstak/config.tpl index d8fd861a7..27b12c52f 100644 --- a/xmrstak/config.tpl +++ b/xmrstak/config.tpl @@ -43,7 +43,7 @@ R"===(// generated by XMRSTAK_VERSION * h_print_time - How often, in seconds, should we print a hashrate report if verbose_level is set to 4. * This option has no effect if verbose_level is not 4. */ -"h_print_time" : 300, +"h_print_time" : H_PRINT_TIME, /* * Manual hardware AES override @@ -129,7 +129,7 @@ R"===(// generated by XMRSTAK_VERSION * output_file - This option will log all output to a file. * */ -"output_file" : "", +"output_file" : "OUTPUT_FILE", /* * Built-in web server diff --git a/xmrstak/jconf.cpp b/xmrstak/jconf.cpp index 10082a09f..010f75407 100644 --- a/xmrstak/jconf.cpp +++ b/xmrstak/jconf.cpp @@ -124,15 +124,14 @@ xmrstak::coin_selection coins[] = { {"cryptonight_v7_stellite", {POW(cryptonight_stellite)}, {POW(cryptonight_gpu)}, nullptr}, {"cryptonight_gpu", {POW(cryptonight_gpu)}, {POW(cryptonight_gpu)}, "pool.ryo-currency.com:3333"}, {"cryptonight_conceal", {POW(cryptonight_conceal)}, {POW(cryptonight_gpu)}, nullptr}, - {"freehaven", {POW(cryptonight_superfast)}, {POW(cryptonight_gpu)}, nullptr}, {"graft", {POW(cryptonight_v8_reversewaltz), 12, POW(cryptonight_monero_v8)}, {POW(cryptonight_gpu)}, nullptr}, {"haven", {POW(cryptonight_haven)}, {POW(cryptonight_gpu)}, nullptr}, - {"lethean", {POW(cryptonight_monero)}, {POW(cryptonight_gpu)}, nullptr}, + {"lethean", {POW(cryptonight_r)}, {POW(cryptonight_r)}, nullptr}, {"masari", {POW(cryptonight_v8_half)}, {POW(cryptonight_gpu)}, nullptr}, - {"monero", {POW(cryptonight_r)}, {POW(cryptonight_r)}, "pool.usxmrpool.com:3333"}, + {"monero", {POW(cryptonight_r)}, {POW(cryptonight_r)}, "monero.miner.rocks:5551"}, {"qrl", {POW(cryptonight_monero)}, {POW(cryptonight_gpu)}, nullptr}, {"ryo", {POW(cryptonight_gpu)}, {POW(cryptonight_gpu)}, "pool.ryo-currency.com:3333"}, - {"stellite", {POW(cryptonight_v8_half)}, {POW(cryptonight_gpu)}, nullptr}, + {"torque", {POW(cryptonight_v8_half)}, {POW(cryptonight_gpu)}, nullptr}, {"turtlecoin", {POW(cryptonight_turtle), 6u, POW(cryptonight_aeon)}, {POW(cryptonight_aeon)}, nullptr}, {"plenteum", {POW(cryptonight_turtle)}, {POW(cryptonight_turtle)}, nullptr}, {"zelerius", {POW(cryptonight_v8_zelerius), 7, POW(cryptonight_monero_v8)}, {POW(cryptonight_gpu)}, nullptr}, @@ -255,7 +254,10 @@ bool jconf::PrintMotd() uint64_t jconf::GetAutohashTime() { - return prv->configValues[iAutohashTime]->GetUint64(); + if (xmrstak::params::inst().h_print_time == -1) + return prv->configValues[iAutohashTime]->GetUint64(); + else + return uint64_t(xmrstak::params::inst().h_print_time); } uint16_t jconf::GetHttpdPort() @@ -283,7 +285,10 @@ bool jconf::DaemonMode() const char* jconf::GetOutputFile() { - return prv->configValues[sOutputFile]->GetString(); + if(xmrstak::params::inst().outputFile.length() > 0) + return xmrstak::params::inst().outputFile.c_str(); + else + return prv->configValues[sOutputFile]->GetString(); } void jconf::cpuid(uint32_t eax, int32_t ecx, int32_t val[4]) diff --git a/xmrstak/misc/executor.cpp b/xmrstak/misc/executor.cpp index 92fcf8acb..455ba9119 100644 --- a/xmrstak/misc/executor.cpp +++ b/xmrstak/misc/executor.cpp @@ -440,17 +440,35 @@ void executor::on_miner_result(size_t pool_id, job_result& oResult) t_len = 0xFFFF; iPoolCallTimes.push_back((uint16_t)t_len); + std::string name(backend_name); + std::transform(name.begin(), name.end(), name.begin(), ::toupper); + if(bResult) { uint64_t* targets = (uint64_t*)oResult.bResult; log_result_ok(t64_to_diff(targets[3])); - printer::inst()->print_msg(L3, "Result accepted by the pool."); + + if (pvThreads->at(oResult.iThreadId)->backendType == xmrstak::iBackend::BackendType::CPU) + { + printer::inst()->print_msg(L3, "CPU: Share accepted. Pool: %s", pool->get_pool_addr()); + } + else + { + printer::inst()->print_msg(L3, "%s GPU %u: Share accepted. Pool: %s", name.c_str(), pvThreads->at(oResult.iThreadId)->iGpuIndex, pool->get_pool_addr()); + } } else { if(!pool->have_sock_error()) { - printer::inst()->print_msg(L3, "Result rejected by the pool."); + if (pvThreads->at(oResult.iThreadId)->backendType == xmrstak::iBackend::BackendType::CPU) + { + printer::inst()->print_msg(L3, "CPU: Share rejected. Pool: %s", pool->get_pool_addr()); + } + else + { + printer::inst()->print_msg(L3, "%s GPU %u: Share rejected. Pool: %s", name.c_str(), pvThreads->at(oResult.iThreadId)->iGpuIndex, pool->get_pool_addr()); + } std::string error = pool->get_call_error(); diff --git a/xmrstak/misc/telemetry.cpp b/xmrstak/misc/telemetry.cpp index 16ecaa6f6..75fb4f434 100644 --- a/xmrstak/misc/telemetry.cpp +++ b/xmrstak/misc/telemetry.cpp @@ -23,6 +23,7 @@ #include "telemetry.hpp" #include "xmrstak/net/msgstruct.hpp" +#include "xmrstak/cpputil/read_write_lock.h" #include #include @@ -36,7 +37,7 @@ telemetry::telemetry(size_t iThd) ppHashCounts = new uint64_t*[iThd]; ppTimestamps = new uint64_t*[iThd]; iBucketTop = new uint32_t[iThd]; - mtx = new std::mutex[iThd]; + mtx = new ::cpputil::RWLock[iThd]; for(size_t i = 0; i < iThd; i++) { @@ -57,7 +58,7 @@ double telemetry::calc_telemetry_data(size_t iLastMillisec, size_t iThread) uint64_t iLatestHashCnt = 0; bool bHaveFullSet = false; - std::unique_lock lk(mtx[iThread]); + mtx[iThread].ReadLock(); uint64_t iTimeNow = get_timestamp_ms(); //Start at 1, buckettop points to next empty @@ -83,7 +84,7 @@ double telemetry::calc_telemetry_data(size_t iLastMillisec, size_t iThread) iEarliestStamp = ppTimestamps[iThread][idx]; iEarliestHashCnt = ppHashCounts[iThread][idx]; } - lk.unlock(); + mtx[iThread].UnLock(); if(!bHaveFullSet || iEarliestStamp == 0 || iLatestStamp == 0) return nan(""); @@ -102,12 +103,13 @@ double telemetry::calc_telemetry_data(size_t iLastMillisec, size_t iThread) void telemetry::push_perf_value(size_t iThd, uint64_t iHashCount, uint64_t iTimestamp) { - std::unique_lock lk(mtx[iThd]); + mtx[iThd].WriteLock(); size_t iTop = iBucketTop[iThd]; ppHashCounts[iThd][iTop] = iHashCount; ppTimestamps[iThd][iTop] = iTimestamp; iBucketTop[iThd] = (iTop + 1) & iBucketMask; + mtx[iThd].UnLock(); } } // namespace xmrstak diff --git a/xmrstak/misc/telemetry.hpp b/xmrstak/misc/telemetry.hpp index 2ab2a9e5f..a7b77c287 100644 --- a/xmrstak/misc/telemetry.hpp +++ b/xmrstak/misc/telemetry.hpp @@ -1,5 +1,7 @@ #pragma once +#include "xmrstak/cpputil/read_write_lock.h" + #include #include #include @@ -15,7 +17,7 @@ class telemetry double calc_telemetry_data(size_t iLastMillisec, size_t iThread); private: - std::mutex* mtx; + ::cpputil::RWLock* mtx; constexpr static size_t iBucketSize = 2 << 11; //Power of 2 to simplify calculations constexpr static size_t iBucketMask = iBucketSize - 1; uint32_t* iBucketTop; diff --git a/xmrstak/misc/uac.cpp b/xmrstak/misc/uac.cpp index c7da90bd8..0e4f91c7b 100644 --- a/xmrstak/misc/uac.cpp +++ b/xmrstak/misc/uac.cpp @@ -1,6 +1,7 @@ #ifdef _WIN32 #include "xmrstak/misc/console.hpp" #include "xmrstak/params.hpp" +#include "xmrstak/jconf.hpp" #include #include @@ -56,6 +57,9 @@ VOID RequestElevation() if(!xmrstak::params::inst().allowUAC) { printer::inst()->print_msg(L0, "The miner needs to run as administrator, but you passed --noUAC option. Please remove it or set use_slow_memory to always."); + if (::jconf::inst()->GetSlowMemSetting() == ::jconf::print_warning) + return; + win_exit(); return; } diff --git a/xmrstak/params.hpp b/xmrstak/params.hpp index a00e51b0a..9f958f937 100644 --- a/xmrstak/params.hpp +++ b/xmrstak/params.hpp @@ -25,6 +25,8 @@ struct params bool AMDCache; bool useNVIDIA; bool useCPU; + std::string amdGpus; + std::string nvidiaGpus; // user selected OpenCL vendor std::string openCLVendor; @@ -50,6 +52,9 @@ struct params std::string configFileNVIDIA; std::string configFileCPU; + std::string outputFile; + int h_print_time = -1; + bool allowUAC = true; std::string minerArg0; std::string minerArgs; diff --git a/xmrstak/pools.tpl b/xmrstak/pools.tpl index ea3a276aa..a7a1cba43 100644 --- a/xmrstak/pools.tpl +++ b/xmrstak/pools.tpl @@ -22,16 +22,16 @@ POOLCONF], * aeon7 (use this for Aeon's new PoW) * bbscoin (automatic switch with block version 3 to cryptonight_v7) * bittube (uses cryptonight_bittube2 algorithm) - * freehaven * graft * haven (automatic switch with block version 3 to cryptonight_haven) - * intense + * lethean * masari * monero (use this to support Monero's Oct 2018 fork) * qrl - Quantum Resistant Ledger * ryo * turtlecoin * plenteum + * torque * xcash * * Native algorithms which do not depend on any block versions: @@ -49,7 +49,7 @@ POOLCONF], * cryptonight_v7 * cryptonight_v8 * cryptonight_v8_double (used by xcash) - * cryptonight_v8_half (used by masari and stellite) + * cryptonight_v8_half (used by masari and torque) * cryptonight_v8_reversewaltz (used by graft) * cryptonight_v8_zelerius * # 4MiB scratchpad memory diff --git a/xmrstak/version.cpp b/xmrstak/version.cpp index f42e2a0bf..70041ec97 100644 --- a/xmrstak/version.cpp +++ b/xmrstak/version.cpp @@ -20,7 +20,7 @@ #endif #define XMR_STAK_NAME "xmr-stak" -#define XMR_STAK_VERSION "2.10.4" +#define XMR_STAK_VERSION "2.10.5" #if defined(_WIN32) #define OS_TYPE "win"